[Catalyst-commits] r6219 - in trunk/HTML-Dojo: . lib/HTML lib/HTML/Dojo t

fireartist at dev.catalyst.perl.org fireartist at dev.catalyst.perl.org
Wed Mar 28 11:48:56 GMT 2007


Author: fireartist
Date: 2007-03-28 11:48:55 +0100 (Wed, 28 Mar 2007)
New Revision: 6219

Modified:
   trunk/HTML-Dojo/build_packages.pl
   trunk/HTML-Dojo/lib/HTML/Dojo.pm
   trunk/HTML-Dojo/lib/HTML/Dojo/common.pm
   trunk/HTML-Dojo/lib/HTML/Dojo/editions.pm
   trunk/HTML-Dojo/lib/HTML/Dojo/src.pm
   trunk/HTML-Dojo/t/file.t
Log:
updated to dojo 0.4.2


Modified: trunk/HTML-Dojo/build_packages.pl
===================================================================
--- trunk/HTML-Dojo/build_packages.pl	2007-03-27 22:18:40 UTC (rev 6218)
+++ trunk/HTML-Dojo/build_packages.pl	2007-03-28 10:48:55 UTC (rev 6219)
@@ -1,3 +1,4 @@
+#!perl
 use strict;
 use warnings;
 use File::Copy 'copy';

Modified: trunk/HTML-Dojo/lib/HTML/Dojo/common.pm
===================================================================
--- trunk/HTML-Dojo/lib/HTML/Dojo/common.pm	2007-03-27 22:18:40 UTC (rev 6218)
+++ trunk/HTML-Dojo/lib/HTML/Dojo/common.pm	2007-03-28 10:48:55 UTC (rev 6219)
@@ -14,14 +14,9 @@
 	var noInit = false;
 	var domain = "";
 	// document.domain = "localhost";
-	function init(){
-		// parse the query string if there is one to try to get args that
-		// we can act on
-		var sparams = document.location.search;
-		if(sparams.length >= 0){
-			if(sparams.charAt(0) == "?"){
-				sparams = sparams.substring(1);
-			}
+	
+	function defineParams(sparams){
+		if(sparams){
 			var ss = (sparams.indexOf("&") >= 0) ? "&" : "&";
 			sparams = sparams.split(ss);
 			for(var x=0; x<sparams.length; x++){
@@ -31,12 +26,46 @@
 				}
 			}
 		}
+	}
+	
+	function init(){
+		// parse the query string if there is one to try to get params that
+		// we can act on. Also allow params to be in a fragment identifier.
+		var query = null;
+		var frag = null;
+		var url = document.location.href;
+		var hashIndex = url.indexOf("#");
+		
+		//Extract fragment identifier
+		if(hashIndex != -1){
+			frag = url.substring(hashIndex + 1, url.length);
+			url = url.substring(0, hashIndex);
+		}
 
+		//Extract querystring
+		var parts = url.split("?");
+		if(parts.length == 2){
+			query = parts[1];
+		}
+
+		defineParams(query);
+		defineParams(frag);
+
 		if(noInit){ return; }
 		if(domain.length > 0){
 			document.domain = domain;
 		}
-		if((window.parent != window)&&(window.parent["dojo"])){
+		var hasParentDojo = false;
+		try{
+			hasParentDojo = window.parent != window && window.parent["dojo"];
+		}catch(e){
+			alert("Initializing iframe_history.html failed. If you are using a cross-domain Dojo build,"
+				+ " please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"
+				+ " to the path on your domain to iframe_history.html");
+			throw e;
+		}
+
+		if(hasParentDojo){
 			//Set the page title so IE history shows up with a somewhat correct name.
 			document.title = window.parent.document.title;
 			
@@ -46,6 +75,7 @@
 				pdj.undo.browser.iframeLoaded(null, window.location);
 			}
 		}
+
 	}
 	// -->
 	</script>

Modified: trunk/HTML-Dojo/lib/HTML/Dojo/editions.pm
===================================================================
--- trunk/HTML-Dojo/lib/HTML/Dojo/editions.pm	2007-03-27 22:18:40 UTC (rev 6218)
+++ trunk/HTML-Dojo/lib/HTML/Dojo/editions.pm	2007-03-28 10:48:55 UTC (rev 6219)
@@ -37,7 +37,7 @@
 return dj_currentContext;
 };
 dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
+dojo.version={major:0,minor:4,patch:2,flag:"",revision:Number("$Rev: 7616 $".match(/[0-9]+/)[0]),toString:function(){
 with(dojo.version){
 return major+"."+minor+"."+patch+flag+" ("+revision+")";
 }
@@ -293,7 +293,7 @@
 }
 };
 dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
+if(typeof setTimeout=="object"||(djConfig["useXDomain"]&&dojo.render.html.opera)){
 setTimeout("dojo.hostenv.loaded();",0);
 }else{
 dojo.hostenv.loaded();
@@ -441,6 +441,11 @@
 dojo.registerModulePath=function(_66,_67){
 return dojo.hostenv.setModulePrefix(_66,_67);
 };
+if(djConfig["modulePaths"]){
+for(var param in djConfig["modulePaths"]){
+dojo.registerModulePath(param,djConfig["modulePaths"][param]);
+}
+}
 dojo.setModulePrefix=function(_68,_69){
 dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
 return dojo.registerModulePath(_68,_69);
@@ -851,7 +856,7 @@
 }
 }
 if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
+if(dojo.render.html.opera||(dojo.render.html.moz&&(djConfig["enableMozDomContentLoaded"]===true))){
 document.addEventListener("DOMContentLoaded",dj_load_init,null);
 }
 window.addEventListener("load",dj_load_init,null);
@@ -999,51 +1004,9 @@
 return _ec;
 };
 }
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _ee=false;
-var _ef=false;
-var _f0=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_ee=true;
-}else{
-if(typeof this["load"]=="function"){
-_ef=true;
-}else{
-if(window.widget){
-_f0=true;
-}
-}
-}
-var _f1=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-_f1.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_ee)&&(!_f0)){
-_f1.push("browser_debug.js");
-}
-var _f2=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_f2=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<_f1.length;x++){
-var _f4=_f2+"src/"+_f1[x];
-if(_ee||_ef){
-load(_f4);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_f4+"'></scr"+"ipt>");
-}
-catch(e){
-var _f5=document.createElement("script");
-_f5.src=_f4;
-document.getElementsByTagName("head")[0].appendChild(_f5);
-}
-}
-}
-})();
+dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&!djConfig["useXDomain"],"dojo.browser_debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&djConfig["useXDomain"],"dojo.browser_debug_xd");
 dojo.provide("dojo.string.common");
 dojo.string.trim=function(str,wh){
 if(!str.replace){
@@ -1061,12 +1024,12 @@
 dojo.string.trimEnd=function(str){
 return dojo.string.trim(str,-1);
 };
-dojo.string.repeat=function(str,_fc,_fd){
+dojo.string.repeat=function(str,_f4,_f5){
 var out="";
-for(var i=0;i<_fc;i++){
+for(var i=0;i<_f4;i++){
 out+=str;
-if(_fd&&i<_fc-1){
-out+=_fd;
+if(_f5&&i<_f4-1){
+out+=_f5;
 }
 }
 return out;
@@ -1096,72 +1059,72 @@
 };
 dojo.provide("dojo.string");
 dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_10b,_10c){
-if(!dojo.lang.isFunction(_10c)){
-dojo.raise("dojo.inherits: superclass argument ["+_10c+"] must be a function (subclass: ["+_10b+"']");
+dojo.lang.inherits=function(_103,_104){
+if(!dojo.lang.isFunction(_104)){
+dojo.raise("dojo.inherits: superclass argument ["+_104+"] must be a function (subclass: ["+_103+"']");
 }
-_10b.prototype=new _10c();
-_10b.prototype.constructor=_10b;
-_10b.superclass=_10c.prototype;
-_10b["super"]=_10c.prototype;
+_103.prototype=new _104();
+_103.prototype.constructor=_103;
+_103.superclass=_104.prototype;
+_103["super"]=_104.prototype;
 };
-dojo.lang._mixin=function(obj,_10e){
+dojo.lang._mixin=function(obj,_106){
 var tobj={};
-for(var x in _10e){
-if((typeof tobj[x]=="undefined")||(tobj[x]!=_10e[x])){
-obj[x]=_10e[x];
+for(var x in _106){
+if((typeof tobj[x]=="undefined")||(tobj[x]!=_106[x])){
+obj[x]=_106[x];
 }
 }
-if(dojo.render.html.ie&&(typeof (_10e["toString"])=="function")&&(_10e["toString"]!=obj["toString"])&&(_10e["toString"]!=tobj["toString"])){
-obj.toString=_10e.toString;
+if(dojo.render.html.ie&&(typeof (_106["toString"])=="function")&&(_106["toString"]!=obj["toString"])&&(_106["toString"]!=tobj["toString"])){
+obj.toString=_106.toString;
 }
 return obj;
 };
-dojo.lang.mixin=function(obj,_112){
+dojo.lang.mixin=function(obj,_10a){
 for(var i=1,l=arguments.length;i<l;i++){
 dojo.lang._mixin(obj,arguments[i]);
 }
 return obj;
 };
-dojo.lang.extend=function(_115,_116){
+dojo.lang.extend=function(_10d,_10e){
 for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_115.prototype,arguments[i]);
+dojo.lang._mixin(_10d.prototype,arguments[i]);
 }
-return _115;
+return _10d;
 };
 dojo.inherits=dojo.lang.inherits;
 dojo.mixin=dojo.lang.mixin;
 dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_119,_11a,_11b,_11c){
-if(!dojo.lang.isArrayLike(_119)&&dojo.lang.isArrayLike(_11a)){
+dojo.lang.find=function(_111,_112,_113,_114){
+if(!dojo.lang.isArrayLike(_111)&&dojo.lang.isArrayLike(_112)){
 dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_119;
-_119=_11a;
-_11a=temp;
+var temp=_111;
+_111=_112;
+_112=temp;
 }
-var _11e=dojo.lang.isString(_119);
-if(_11e){
-_119=_119.split("");
+var _116=dojo.lang.isString(_111);
+if(_116){
+_111=_111.split("");
 }
-if(_11c){
+if(_114){
 var step=-1;
-var i=_119.length-1;
+var i=_111.length-1;
 var end=-1;
 }else{
 var step=1;
 var i=0;
-var end=_119.length;
+var end=_111.length;
 }
-if(_11b){
+if(_113){
 while(i!=end){
-if(_119[i]===_11a){
+if(_111[i]===_112){
 return i;
 }
 i+=step;
 }
 }else{
 while(i!=end){
-if(_119[i]==_11a){
+if(_111[i]==_112){
 return i;
 }
 i+=step;
@@ -1170,12 +1133,12 @@
 return -1;
 };
 dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_122,_123,_124){
-return dojo.lang.find(_122,_123,_124,true);
+dojo.lang.findLast=function(_11a,_11b,_11c){
+return dojo.lang.find(_11a,_11b,_11c,true);
 };
 dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_125,_126){
-return dojo.lang.find(_125,_126)>-1;
+dojo.lang.inArray=function(_11d,_11e){
+return dojo.lang.find(_11d,_11e)>-1;
 };
 dojo.lang.isObject=function(it){
 if(typeof it=="undefined"){
@@ -1239,27 +1202,27 @@
 return ((typeof (it)=="undefined")&&(it==undefined));
 };
 dojo.provide("dojo.lang.extras");
-dojo.lang.setTimeout=function(func,_132){
-var _133=window,_134=2;
+dojo.lang.setTimeout=function(func,_12a){
+var _12b=window,_12c=2;
 if(!dojo.lang.isFunction(func)){
-_133=func;
-func=_132;
-_132=arguments[2];
-_134++;
+_12b=func;
+func=_12a;
+_12a=arguments[2];
+_12c++;
 }
 if(dojo.lang.isString(func)){
-func=_133[func];
+func=_12b[func];
 }
 var args=[];
-for(var i=_134;i<arguments.length;i++){
+for(var i=_12c;i<arguments.length;i++){
 args.push(arguments[i]);
 }
 return dojo.global().setTimeout(function(){
-func.apply(_133,args);
-},_132);
+func.apply(_12b,args);
+},_12a);
 };
-dojo.lang.clearTimeout=function(_137){
-dojo.global().clearTimeout(_137);
+dojo.lang.clearTimeout=function(_12f){
+dojo.global().clearTimeout(_12f);
 };
 dojo.lang.getNameInObj=function(ns,item){
 if(!ns){
@@ -1304,78 +1267,78 @@
 }
 return undefined;
 };
-dojo.lang.getObjPathValue=function(_140,_141,_142){
-with(dojo.parseObjPath(_140,_141,_142)){
-return dojo.evalProp(prop,obj,_142);
+dojo.lang.getObjPathValue=function(_138,_139,_13a){
+with(dojo.parseObjPath(_138,_139,_13a)){
+return dojo.evalProp(prop,obj,_13a);
 }
 };
-dojo.lang.setObjPathValue=function(_143,_144,_145,_146){
+dojo.lang.setObjPathValue=function(_13b,_13c,_13d,_13e){
 dojo.deprecated("dojo.lang.setObjPathValue","use dojo.parseObjPath and the '=' operator","0.6");
 if(arguments.length<4){
-_146=true;
+_13e=true;
 }
-with(dojo.parseObjPath(_143,_145,_146)){
-if(obj&&(_146||(prop in obj))){
-obj[prop]=_144;
+with(dojo.parseObjPath(_13b,_13d,_13e)){
+if(obj&&(_13e||(prop in obj))){
+obj[prop]=_13c;
 }
 }
 };
 dojo.provide("dojo.io.common");
 dojo.io.transports=[];
 dojo.io.hdlrFuncNames=["load","error","timeout"];
-dojo.io.Request=function(url,_148,_149,_14a){
+dojo.io.Request=function(url,_140,_141,_142){
 if((arguments.length==1)&&(arguments[0].constructor==Object)){
 this.fromKwArgs(arguments[0]);
 }else{
 this.url=url;
-if(_148){
-this.mimetype=_148;
+if(_140){
+this.mimetype=_140;
 }
-if(_149){
-this.transport=_149;
+if(_141){
+this.transport=_141;
 }
 if(arguments.length>=4){
-this.changeUrl=_14a;
+this.changeUrl=_142;
 }
 }
 };
-dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_14d,_14e){
-},error:function(type,_150,_151,_152){
-},timeout:function(type,_154,_155,_156){
-},handle:function(type,data,_159,_15a){
+dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_145,_146){
+},error:function(type,_148,_149,_14a){
+},timeout:function(type,_14c,_14d,_14e){
+},handle:function(type,data,_151,_152){
 },timeoutSeconds:0,abort:function(){
-},fromKwArgs:function(_15b){
-if(_15b["url"]){
-_15b.url=_15b.url.toString();
+},fromKwArgs:function(_153){
+if(_153["url"]){
+_153.url=_153.url.toString();
 }
-if(_15b["formNode"]){
-_15b.formNode=dojo.byId(_15b.formNode);
+if(_153["formNode"]){
+_153.formNode=dojo.byId(_153.formNode);
 }
-if(!_15b["method"]&&_15b["formNode"]&&_15b["formNode"].method){
-_15b.method=_15b["formNode"].method;
+if(!_153["method"]&&_153["formNode"]&&_153["formNode"].method){
+_153.method=_153["formNode"].method;
 }
-if(!_15b["handle"]&&_15b["handler"]){
-_15b.handle=_15b.handler;
+if(!_153["handle"]&&_153["handler"]){
+_153.handle=_153.handler;
 }
-if(!_15b["load"]&&_15b["loaded"]){
-_15b.load=_15b.loaded;
+if(!_153["load"]&&_153["loaded"]){
+_153.load=_153.loaded;
 }
-if(!_15b["changeUrl"]&&_15b["changeURL"]){
-_15b.changeUrl=_15b.changeURL;
+if(!_153["changeUrl"]&&_153["changeURL"]){
+_153.changeUrl=_153.changeURL;
 }
-_15b.encoding=dojo.lang.firstValued(_15b["encoding"],djConfig["bindEncoding"],"");
-_15b.sendTransport=dojo.lang.firstValued(_15b["sendTransport"],djConfig["ioSendTransport"],false);
-var _15c=dojo.lang.isFunction;
+_153.encoding=dojo.lang.firstValued(_153["encoding"],djConfig["bindEncoding"],"");
+_153.sendTransport=dojo.lang.firstValued(_153["sendTransport"],djConfig["ioSendTransport"],false);
+var _154=dojo.lang.isFunction;
 for(var x=0;x<dojo.io.hdlrFuncNames.length;x++){
 var fn=dojo.io.hdlrFuncNames[x];
-if(_15b[fn]&&_15c(_15b[fn])){
+if(_153[fn]&&_154(_153[fn])){
 continue;
 }
-if(_15b["handle"]&&_15c(_15b["handle"])){
-_15b[fn]=_15b.handle;
+if(_153["handle"]&&_154(_153["handle"])){
+_153[fn]=_153.handle;
 }
 }
-dojo.lang.mixin(this,_15b);
+dojo.lang.mixin(this,_153);
 }});
 dojo.io.Error=function(msg,type,num){
 this.message=msg;
@@ -1386,79 +1349,79 @@
 this.push(name);
 this[name]=dojo.io[name];
 };
-dojo.io.bind=function(_163){
-if(!(_163 instanceof dojo.io.Request)){
+dojo.io.bind=function(_15b){
+if(!(_15b instanceof dojo.io.Request)){
 try{
-_163=new dojo.io.Request(_163);
+_15b=new dojo.io.Request(_15b);
 }
 catch(e){
 dojo.debug(e);
 }
 }
-var _164="";
-if(_163["transport"]){
-_164=_163["transport"];
-if(!this[_164]){
-dojo.io.sendBindError(_163,"No dojo.io.bind() transport with name '"+_163["transport"]+"'.");
-return _163;
+var _15c="";
+if(_15b["transport"]){
+_15c=_15b["transport"];
+if(!this[_15c]){
+dojo.io.sendBindError(_15b,"No dojo.io.bind() transport with name '"+_15b["transport"]+"'.");
+return _15b;
 }
-if(!this[_164].canHandle(_163)){
-dojo.io.sendBindError(_163,"dojo.io.bind() transport with name '"+_163["transport"]+"' cannot handle this type of request.");
-return _163;
+if(!this[_15c].canHandle(_15b)){
+dojo.io.sendBindError(_15b,"dojo.io.bind() transport with name '"+_15b["transport"]+"' cannot handle this type of request.");
+return _15b;
 }
 }else{
 for(var x=0;x<dojo.io.transports.length;x++){
 var tmp=dojo.io.transports[x];
-if((this[tmp])&&(this[tmp].canHandle(_163))){
-_164=tmp;
+if((this[tmp])&&(this[tmp].canHandle(_15b))){
+_15c=tmp;
 break;
 }
 }
-if(_164==""){
-dojo.io.sendBindError(_163,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
-return _163;
+if(_15c==""){
+dojo.io.sendBindError(_15b,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
+return _15b;
 }
 }
-this[_164].bind(_163);
-_163.bindSuccess=true;
-return _163;
+this[_15c].bind(_15b);
+_15b.bindSuccess=true;
+return _15b;
 };
-dojo.io.sendBindError=function(_167,_168){
-if((typeof _167.error=="function"||typeof _167.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
-var _169=new dojo.io.Error(_168);
+dojo.io.sendBindError=function(_15f,_160){
+if((typeof _15f.error=="function"||typeof _15f.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
+var _161=new dojo.io.Error(_160);
 setTimeout(function(){
-_167[(typeof _167.error=="function")?"error":"handle"]("error",_169,null,_167);
+_15f[(typeof _15f.error=="function")?"error":"handle"]("error",_161,null,_15f);
 },50);
 }else{
-dojo.raise(_168);
+dojo.raise(_160);
 }
 };
-dojo.io.queueBind=function(_16a){
-if(!(_16a instanceof dojo.io.Request)){
+dojo.io.queueBind=function(_162){
+if(!(_162 instanceof dojo.io.Request)){
 try{
-_16a=new dojo.io.Request(_16a);
+_162=new dojo.io.Request(_162);
 }
 catch(e){
 dojo.debug(e);
 }
 }
-var _16b=_16a.load;
-_16a.load=function(){
+var _163=_162.load;
+_162.load=function(){
 dojo.io._queueBindInFlight=false;
-var ret=_16b.apply(this,arguments);
+var ret=_163.apply(this,arguments);
 dojo.io._dispatchNextQueueBind();
 return ret;
 };
-var _16d=_16a.error;
-_16a.error=function(){
+var _165=_162.error;
+_162.error=function(){
 dojo.io._queueBindInFlight=false;
-var ret=_16d.apply(this,arguments);
+var ret=_165.apply(this,arguments);
 dojo.io._dispatchNextQueueBind();
 return ret;
 };
-dojo.io._bindQueue.push(_16a);
+dojo.io._bindQueue.push(_162);
 dojo.io._dispatchNextQueueBind();
-return _16a;
+return _162;
 };
 dojo.io._dispatchNextQueueBind=function(){
 if(!dojo.io._queueBindInFlight){
@@ -1472,48 +1435,48 @@
 };
 dojo.io._bindQueue=[];
 dojo.io._queueBindInFlight=false;
-dojo.io.argsFromMap=function(map,_170,last){
-var enc=/utf/i.test(_170||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _173=[];
-var _174=new Object();
+dojo.io.argsFromMap=function(map,_168,last){
+var enc=/utf/i.test(_168||"")?encodeURIComponent:dojo.string.encodeAscii;
+var _16b=[];
+var _16c=new Object();
 for(var name in map){
-var _176=function(elt){
+var _16e=function(elt){
 var val=enc(name)+"="+enc(elt);
-_173[(last==name)?"push":"unshift"](val);
+_16b[(last==name)?"push":"unshift"](val);
 };
-if(!_174[name]){
-var _179=map[name];
-if(dojo.lang.isArray(_179)){
-dojo.lang.forEach(_179,_176);
+if(!_16c[name]){
+var _171=map[name];
+if(dojo.lang.isArray(_171)){
+dojo.lang.forEach(_171,_16e);
 }else{
-_176(_179);
+_16e(_171);
 }
 }
 }
-return _173.join("&");
+return _16b.join("&");
 };
-dojo.io.setIFrameSrc=function(_17a,src,_17c){
+dojo.io.setIFrameSrc=function(_172,src,_174){
 try{
 var r=dojo.render.html;
-if(!_17c){
+if(!_174){
 if(r.safari){
-_17a.location=src;
+_172.location=src;
 }else{
-frames[_17a.name].location=src;
+frames[_172.name].location=src;
 }
 }else{
 var idoc;
 if(r.ie){
-idoc=_17a.contentWindow.document;
+idoc=_172.contentWindow.document;
 }else{
 if(r.safari){
-idoc=_17a.document;
+idoc=_172.document;
 }else{
-idoc=_17a.contentWindow;
+idoc=_172.contentWindow;
 }
 }
 if(!idoc){
-_17a.location=src;
+_172.location=src;
 return;
 }else{
 idoc.location.replace(src);
@@ -1536,142 +1499,138 @@
 },isEmpty:function(obj){
 if(dojo.lang.isObject(obj)){
 var tmp={};
-var _183=0;
+var _17b=0;
 for(var x in obj){
 if(obj[x]&&(!tmp[x])){
-_183++;
+_17b++;
 break;
 }
 }
-return _183==0;
+return _17b==0;
 }else{
 if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
 return obj.length==0;
 }
 }
-},map:function(arr,obj,_187){
-var _188=dojo.lang.isString(arr);
-if(_188){
+},map:function(arr,obj,_17f){
+var _180=dojo.lang.isString(arr);
+if(_180){
 arr=arr.split("");
 }
-if(dojo.lang.isFunction(obj)&&(!_187)){
-_187=obj;
+if(dojo.lang.isFunction(obj)&&(!_17f)){
+_17f=obj;
 obj=dj_global;
 }else{
-if(dojo.lang.isFunction(obj)&&_187){
-var _189=obj;
-obj=_187;
-_187=_189;
+if(dojo.lang.isFunction(obj)&&_17f){
+var _181=obj;
+obj=_17f;
+_17f=_181;
 }
 }
 if(Array.map){
-var _18a=Array.map(arr,_187,obj);
+var _182=Array.map(arr,_17f,obj);
 }else{
-var _18a=[];
+var _182=[];
 for(var i=0;i<arr.length;++i){
-_18a.push(_187.call(obj,arr[i]));
+_182.push(_17f.call(obj,arr[i]));
 }
 }
-if(_188){
-return _18a.join("");
+if(_180){
+return _182.join("");
 }else{
-return _18a;
+return _182;
 }
-},reduce:function(arr,_18d,obj,_18f){
-var _190=_18d;
-if(arguments.length==1){
-dojo.debug("dojo.lang.reduce called with too few arguments!");
-return false;
-}else{
+},reduce:function(arr,_185,obj,_187){
+var _188=_185;
 if(arguments.length==2){
-_18f=_18d;
-_190=arr.shift();
+_187=_185;
+_188=arr[0];
+arr=arr.slice(1);
 }else{
-if(arguments.lenght==3){
+if(arguments.length==3){
 if(dojo.lang.isFunction(obj)){
-_18f=obj;
+_187=obj;
 obj=null;
 }
 }else{
 if(dojo.lang.isFunction(obj)){
-var tmp=_18f;
-_18f=obj;
+var tmp=_187;
+_187=obj;
 obj=tmp;
 }
 }
 }
-}
-var ob=obj?obj:dj_global;
+var ob=obj||dj_global;
 dojo.lang.map(arr,function(val){
-_190=_18f.call(ob,_190,val);
+_188=_187.call(ob,_188,val);
 });
-return _190;
-},forEach:function(_194,_195,_196){
-if(dojo.lang.isString(_194)){
-_194=_194.split("");
+return _188;
+},forEach:function(_18c,_18d,_18e){
+if(dojo.lang.isString(_18c)){
+_18c=_18c.split("");
 }
 if(Array.forEach){
-Array.forEach(_194,_195,_196);
+Array.forEach(_18c,_18d,_18e);
 }else{
-if(!_196){
-_196=dj_global;
+if(!_18e){
+_18e=dj_global;
 }
-for(var i=0,l=_194.length;i<l;i++){
-_195.call(_196,_194[i],i,_194);
+for(var i=0,l=_18c.length;i<l;i++){
+_18d.call(_18e,_18c[i],i,_18c);
 }
 }
-},_everyOrSome:function(_199,arr,_19b,_19c){
+},_everyOrSome:function(_191,arr,_193,_194){
 if(dojo.lang.isString(arr)){
 arr=arr.split("");
 }
 if(Array.every){
-return Array[_199?"every":"some"](arr,_19b,_19c);
+return Array[_191?"every":"some"](arr,_193,_194);
 }else{
-if(!_19c){
-_19c=dj_global;
+if(!_194){
+_194=dj_global;
 }
 for(var i=0,l=arr.length;i<l;i++){
-var _19f=_19b.call(_19c,arr[i],i,arr);
-if(_199&&!_19f){
+var _197=_193.call(_194,arr[i],i,arr);
+if(_191&&!_197){
 return false;
 }else{
-if((!_199)&&(_19f)){
+if((!_191)&&(_197)){
 return true;
 }
 }
 }
-return Boolean(_199);
+return Boolean(_191);
 }
-},every:function(arr,_1a1,_1a2){
-return this._everyOrSome(true,arr,_1a1,_1a2);
-},some:function(arr,_1a4,_1a5){
-return this._everyOrSome(false,arr,_1a4,_1a5);
-},filter:function(arr,_1a7,_1a8){
-var _1a9=dojo.lang.isString(arr);
-if(_1a9){
+},every:function(arr,_199,_19a){
+return this._everyOrSome(true,arr,_199,_19a);
+},some:function(arr,_19c,_19d){
+return this._everyOrSome(false,arr,_19c,_19d);
+},filter:function(arr,_19f,_1a0){
+var _1a1=dojo.lang.isString(arr);
+if(_1a1){
 arr=arr.split("");
 }
-var _1aa;
+var _1a2;
 if(Array.filter){
-_1aa=Array.filter(arr,_1a7,_1a8);
+_1a2=Array.filter(arr,_19f,_1a0);
 }else{
-if(!_1a8){
+if(!_1a0){
 if(arguments.length>=3){
 dojo.raise("thisObject doesn't exist!");
 }
-_1a8=dj_global;
+_1a0=dj_global;
 }
-_1aa=[];
+_1a2=[];
 for(var i=0;i<arr.length;i++){
-if(_1a7.call(_1a8,arr[i],i,arr)){
-_1aa.push(arr[i]);
+if(_19f.call(_1a0,arr[i],i,arr)){
+_1a2.push(arr[i]);
 }
 }
 }
-if(_1a9){
-return _1aa.join("");
+if(_1a1){
+return _1a2.join("");
 }else{
-return _1aa;
+return _1a2;
 }
 },unnest:function(){
 var out=[];
@@ -1684,29 +1643,29 @@
 }
 }
 return out;
-},toArray:function(_1af,_1b0){
-var _1b1=[];
-for(var i=_1b0||0;i<_1af.length;i++){
-_1b1.push(_1af[i]);
+},toArray:function(_1a7,_1a8){
+var _1a9=[];
+for(var i=_1a8||0;i<_1a7.length;i++){
+_1a9.push(_1a7[i]);
 }
-return _1b1;
+return _1a9;
 }});
 dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_1b3,_1b4){
-var fcn=(dojo.lang.isString(_1b4)?_1b3[_1b4]:_1b4)||function(){
+dojo.lang.hitch=function(_1ab,_1ac){
+var fcn=(dojo.lang.isString(_1ac)?_1ab[_1ac]:_1ac)||function(){
 };
 return function(){
-return fcn.apply(_1b3,arguments);
+return fcn.apply(_1ab,arguments);
 };
 };
 dojo.lang.anonCtr=0;
 dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_1b6,_1b7,_1b8){
-var nso=(_1b7||dojo.lang.anon);
-if((_1b8)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
+dojo.lang.nameAnonFunc=function(_1ae,_1af,_1b0){
+var nso=(_1af||dojo.lang.anon);
+if((_1b0)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
 for(var x in nso){
 try{
-if(nso[x]===_1b6){
+if(nso[x]===_1ae){
 return x;
 }
 }
@@ -1718,50 +1677,50 @@
 while(typeof nso[ret]!="undefined"){
 ret="__"+dojo.lang.anonCtr++;
 }
-nso[ret]=_1b6;
+nso[ret]=_1ae;
 return ret;
 };
-dojo.lang.forward=function(_1bc){
+dojo.lang.forward=function(_1b4){
 return function(){
-return this[_1bc].apply(this,arguments);
+return this[_1b4].apply(this,arguments);
 };
 };
-dojo.lang.curry=function(_1bd,func){
-var _1bf=[];
-_1bd=_1bd||dj_global;
+dojo.lang.curry=function(_1b5,func){
+var _1b7=[];
+_1b5=_1b5||dj_global;
 if(dojo.lang.isString(func)){
-func=_1bd[func];
+func=_1b5[func];
 }
 for(var x=2;x<arguments.length;x++){
-_1bf.push(arguments[x]);
+_1b7.push(arguments[x]);
 }
-var _1c1=(func["__preJoinArity"]||func.length)-_1bf.length;
-function gather(_1c2,_1c3,_1c4){
-var _1c5=_1c4;
-var _1c6=_1c3.slice(0);
-for(var x=0;x<_1c2.length;x++){
-_1c6.push(_1c2[x]);
+var _1b9=(func["__preJoinArity"]||func.length)-_1b7.length;
+function gather(_1ba,_1bb,_1bc){
+var _1bd=_1bc;
+var _1be=_1bb.slice(0);
+for(var x=0;x<_1ba.length;x++){
+_1be.push(_1ba[x]);
 }
-_1c4=_1c4-_1c2.length;
-if(_1c4<=0){
-var res=func.apply(_1bd,_1c6);
-_1c4=_1c5;
+_1bc=_1bc-_1ba.length;
+if(_1bc<=0){
+var res=func.apply(_1b5,_1be);
+_1bc=_1bd;
 return res;
 }else{
 return function(){
-return gather(arguments,_1c6,_1c4);
+return gather(arguments,_1be,_1bc);
 };
 }
 }
-return gather([],_1bf,_1c1);
+return gather([],_1b7,_1b9);
 };
-dojo.lang.curryArguments=function(_1c9,func,args,_1cc){
-var _1cd=[];
-var x=_1cc||0;
-for(x=_1cc;x<args.length;x++){
-_1cd.push(args[x]);
+dojo.lang.curryArguments=function(_1c1,func,args,_1c4){
+var _1c5=[];
+var x=_1c4||0;
+for(x=_1c4;x<args.length;x++){
+_1c5.push(args[x]);
 }
-return dojo.lang.curry.apply(dojo.lang,[_1c9,func].concat(_1cd));
+return dojo.lang.curry.apply(dojo.lang,[_1c1,func].concat(_1c5));
 };
 dojo.lang.tryThese=function(){
 for(var x=0;x<arguments.length;x++){
@@ -1778,36 +1737,36 @@
 }
 }
 };
-dojo.lang.delayThese=function(farr,cb,_1d3,_1d4){
+dojo.lang.delayThese=function(farr,cb,_1cb,_1cc){
 if(!farr.length){
-if(typeof _1d4=="function"){
-_1d4();
+if(typeof _1cc=="function"){
+_1cc();
 }
 return;
 }
-if((typeof _1d3=="undefined")&&(typeof cb=="number")){
-_1d3=cb;
+if((typeof _1cb=="undefined")&&(typeof cb=="number")){
+_1cb=cb;
 cb=function(){
 };
 }else{
 if(!cb){
 cb=function(){
 };
-if(!_1d3){
-_1d3=0;
+if(!_1cb){
+_1cb=0;
 }
 }
 }
 setTimeout(function(){
 (farr.shift())();
 cb();
-dojo.lang.delayThese(farr,cb,_1d3,_1d4);
-},_1d3);
+dojo.lang.delayThese(farr,cb,_1cb,_1cc);
+},_1cb);
 };
 dojo.provide("dojo.string.extras");
-dojo.string.substituteParams=function(_1d5,hash){
+dojo.string.substituteParams=function(_1cd,hash){
 var map=(typeof hash=="object")?hash:dojo.lang.toArray(arguments,1);
-return _1d5.replace(/\%\{(\w+)\}/g,function(_1d8,key){
+return _1cd.replace(/\%\{(\w+)\}/g,function(_1d0,key){
 if(typeof (map[key])!="undefined"&&map[key]!=null){
 return map[key];
 }
@@ -1821,11 +1780,11 @@
 if(arguments.length==0){
 str=this;
 }
-var _1db=str.split(" ");
-for(var i=0;i<_1db.length;i++){
-_1db[i]=_1db[i].charAt(0).toUpperCase()+_1db[i].substring(1);
+var _1d3=str.split(" ");
+for(var i=0;i<_1d3.length;i++){
+_1d3[i]=_1d3[i].charAt(0).toUpperCase()+_1d3[i].substring(1);
 }
-return _1db.join(" ");
+return _1d3.join(" ");
 };
 dojo.string.isBlank=function(str){
 if(!dojo.lang.isString(str)){
@@ -1838,15 +1797,15 @@
 return str;
 }
 var ret="";
-var _1e0=escape(str);
-var _1e1,re=/%u([0-9A-F]{4})/i;
-while((_1e1=_1e0.match(re))){
-var num=Number("0x"+_1e1[1]);
-var _1e4=escape("&#"+num+";");
-ret+=_1e0.substring(0,_1e1.index)+_1e4;
-_1e0=_1e0.substring(_1e1.index+_1e1[0].length);
+var _1d8=escape(str);
+var _1d9,re=/%u([0-9A-F]{4})/i;
+while((_1d9=_1d8.match(re))){
+var num=Number("0x"+_1d9[1]);
+var _1dc=escape("&#"+num+";");
+ret+=_1d8.substring(0,_1d9.index)+_1dc;
+_1d8=_1d8.substring(_1d9.index+_1d9[0].length);
 }
-ret+=_1e0.replace(/\+/g,"%2B");
+ret+=_1d8.replace(/\+/g,"%2B");
 return ret;
 };
 dojo.string.escape=function(type,str){
@@ -1871,9 +1830,9 @@
 return str;
 }
 };
-dojo.string.escapeXml=function(str,_1e9){
+dojo.string.escapeXml=function(str,_1e1){
 str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_1e9){
+if(!_1e1){
 str=str.replace(/'/gm,"&#39;");
 }
 return str;
@@ -1896,8 +1855,8 @@
 }
 return str.substring(0,len).replace(/\.+$/,"")+"...";
 };
-dojo.string.endsWith=function(str,end,_1f2){
-if(_1f2){
+dojo.string.endsWith=function(str,end,_1ea){
+if(_1ea){
 str=str.toLowerCase();
 end=end.toLowerCase();
 }
@@ -1914,12 +1873,12 @@
 }
 return false;
 };
-dojo.string.startsWith=function(str,_1f6,_1f7){
-if(_1f7){
+dojo.string.startsWith=function(str,_1ee,_1ef){
+if(_1ef){
 str=str.toLowerCase();
-_1f6=_1f6.toLowerCase();
+_1ee=_1ee.toLowerCase();
 }
-return str.indexOf(_1f6)==0;
+return str.indexOf(_1ee)==0;
 };
 dojo.string.startsWithAny=function(str){
 for(var i=1;i<arguments.length;i++){
@@ -1937,12 +1896,12 @@
 }
 return false;
 };
-dojo.string.normalizeNewlines=function(text,_1fd){
-if(_1fd=="\n"){
+dojo.string.normalizeNewlines=function(text,_1f5){
+if(_1f5=="\n"){
 text=text.replace(/\r\n/g,"\n");
 text=text.replace(/\r/g,"\n");
 }else{
-if(_1fd=="\r"){
+if(_1f5=="\r"){
 text=text.replace(/\r\n/g,"\r");
 text=text.replace(/\n/g,"\r");
 }else{
@@ -1951,20 +1910,20 @@
 }
 return text;
 };
-dojo.string.splitEscaped=function(str,_1ff){
-var _200=[];
-for(var i=0,_202=0;i<str.length;i++){
+dojo.string.splitEscaped=function(str,_1f7){
+var _1f8=[];
+for(var i=0,_1fa=0;i<str.length;i++){
 if(str.charAt(i)=="\\"){
 i++;
 continue;
 }
-if(str.charAt(i)==_1ff){
-_200.push(str.substring(_202,i));
-_202=i+1;
+if(str.charAt(i)==_1f7){
+_1f8.push(str.substring(_1fa,i));
+_1fa=i+1;
 }
 }
-_200.push(str.substr(_202));
-return _200;
+_1f8.push(str.substr(_1fa));
+return _1f8;
 };
 dojo.provide("dojo.dom");
 dojo.dom.ELEMENT_NODE=1;
@@ -1993,102 +1952,102 @@
 }
 };
 dojo.dom.getUniqueId=function(){
-var _204=dojo.doc();
+var _1fc=dojo.doc();
 do{
 var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_204.getElementById(id));
+}while(_1fc.getElementById(id));
 return id;
 };
 dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_206,_207){
-var node=_206.firstChild;
+dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_1fe,_1ff){
+var node=_1fe.firstChild;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.nextSibling;
 }
-if(_207&&node&&node.tagName&&node.tagName.toLowerCase()!=_207.toLowerCase()){
-node=dojo.dom.nextElement(node,_207);
+if(_1ff&&node&&node.tagName&&node.tagName.toLowerCase()!=_1ff.toLowerCase()){
+node=dojo.dom.nextElement(node,_1ff);
 }
 return node;
 };
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_209,_20a){
-var node=_209.lastChild;
+dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_201,_202){
+var node=_201.lastChild;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.previousSibling;
 }
-if(_20a&&node&&node.tagName&&node.tagName.toLowerCase()!=_20a.toLowerCase()){
-node=dojo.dom.prevElement(node,_20a);
+if(_202&&node&&node.tagName&&node.tagName.toLowerCase()!=_202.toLowerCase()){
+node=dojo.dom.prevElement(node,_202);
 }
 return node;
 };
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_20d){
+dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_205){
 if(!node){
 return null;
 }
 do{
 node=node.nextSibling;
 }while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_20d&&_20d.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.nextElement(node,_20d);
+if(node&&_205&&_205.toLowerCase()!=node.tagName.toLowerCase()){
+return dojo.dom.nextElement(node,_205);
 }
 return node;
 };
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_20f){
+dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_207){
 if(!node){
 return null;
 }
-if(_20f){
-_20f=_20f.toLowerCase();
+if(_207){
+_207=_207.toLowerCase();
 }
 do{
 node=node.previousSibling;
 }while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_20f&&_20f.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_20f);
+if(node&&_207&&_207.toLowerCase()!=node.tagName.toLowerCase()){
+return dojo.dom.prevElement(node,_207);
 }
 return node;
 };
-dojo.dom.moveChildren=function(_210,_211,trim){
-var _213=0;
+dojo.dom.moveChildren=function(_208,_209,trim){
+var _20b=0;
 if(trim){
-while(_210.hasChildNodes()&&_210.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_210.removeChild(_210.firstChild);
+while(_208.hasChildNodes()&&_208.firstChild.nodeType==dojo.dom.TEXT_NODE){
+_208.removeChild(_208.firstChild);
 }
-while(_210.hasChildNodes()&&_210.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_210.removeChild(_210.lastChild);
+while(_208.hasChildNodes()&&_208.lastChild.nodeType==dojo.dom.TEXT_NODE){
+_208.removeChild(_208.lastChild);
 }
 }
-while(_210.hasChildNodes()){
-_211.appendChild(_210.firstChild);
-_213++;
+while(_208.hasChildNodes()){
+_209.appendChild(_208.firstChild);
+_20b++;
 }
-return _213;
+return _20b;
 };
-dojo.dom.copyChildren=function(_214,_215,trim){
-var _217=_214.cloneNode(true);
-return this.moveChildren(_217,_215,trim);
+dojo.dom.copyChildren=function(_20c,_20d,trim){
+var _20f=_20c.cloneNode(true);
+return this.moveChildren(_20f,_20d,trim);
 };
-dojo.dom.replaceChildren=function(node,_219){
-var _21a=[];
+dojo.dom.replaceChildren=function(node,_211){
+var _212=[];
 if(dojo.render.html.ie){
 for(var i=0;i<node.childNodes.length;i++){
-_21a.push(node.childNodes[i]);
+_212.push(node.childNodes[i]);
 }
 }
 dojo.dom.removeChildren(node);
-node.appendChild(_219);
-for(var i=0;i<_21a.length;i++){
-dojo.dom.destroyNode(_21a[i]);
+node.appendChild(_211);
+for(var i=0;i<_212.length;i++){
+dojo.dom.destroyNode(_212[i]);
 }
 };
 dojo.dom.removeChildren=function(node){
-var _21d=node.childNodes.length;
+var _215=node.childNodes.length;
 while(node.hasChildNodes()){
 dojo.dom.removeNode(node.firstChild);
 }
-return _21d;
+return _215;
 };
-dojo.dom.replaceNode=function(node,_21f){
-return node.parentNode.replaceChild(_21f,node);
+dojo.dom.replaceNode=function(node,_217){
+return node.parentNode.replaceChild(_217,node);
 };
 dojo.dom.destroyNode=function(node){
 if(node.parentNode){
@@ -2108,38 +2067,38 @@
 return node.parentNode.removeChild(node);
 }
 };
-dojo.dom.getAncestors=function(node,_223,_224){
-var _225=[];
-var _226=(_223&&(_223 instanceof Function||typeof _223=="function"));
+dojo.dom.getAncestors=function(node,_21b,_21c){
+var _21d=[];
+var _21e=(_21b&&(_21b instanceof Function||typeof _21b=="function"));
 while(node){
-if(!_226||_223(node)){
-_225.push(node);
+if(!_21e||_21b(node)){
+_21d.push(node);
 }
-if(_224&&_225.length>0){
-return _225[0];
+if(_21c&&_21d.length>0){
+return _21d[0];
 }
 node=node.parentNode;
 }
-if(_224){
+if(_21c){
 return null;
 }
-return _225;
+return _21d;
 };
-dojo.dom.getAncestorsByTag=function(node,tag,_229){
+dojo.dom.getAncestorsByTag=function(node,tag,_221){
 tag=tag.toLowerCase();
 return dojo.dom.getAncestors(node,function(el){
 return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_229);
+},_221);
 };
 dojo.dom.getFirstAncestorByTag=function(node,tag){
 return dojo.dom.getAncestorsByTag(node,tag,true);
 };
-dojo.dom.isDescendantOf=function(node,_22e,_22f){
-if(_22f&&node){
+dojo.dom.isDescendantOf=function(node,_226,_227){
+if(_227&&node){
 node=node.parentNode;
 }
 while(node){
-if(node==_22e){
+if(node==_226){
 return true;
 }
 node=node.parentNode;
@@ -2161,12 +2120,12 @@
 };
 dojo.dom.createDocument=function(){
 var doc=null;
-var _232=dojo.doc();
+var _22a=dojo.doc();
 if(!dj_undef("ActiveXObject")){
-var _233=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_233.length;i++){
+var _22b=["MSXML2","Microsoft","MSXML","MSXML3"];
+for(var i=0;i<_22b.length;i++){
 try{
-doc=new ActiveXObject(_233[i]+".XMLDOM");
+doc=new ActiveXObject(_22b[i]+".XMLDOM");
 }
 catch(e){
 }
@@ -2175,40 +2134,40 @@
 }
 }
 }else{
-if((_232.implementation)&&(_232.implementation.createDocument)){
-doc=_232.implementation.createDocument("","",null);
+if((_22a.implementation)&&(_22a.implementation.createDocument)){
+doc=_22a.implementation.createDocument("","",null);
 }
 }
 return doc;
 };
-dojo.dom.createDocumentFromText=function(str,_236){
-if(!_236){
-_236="text/xml";
+dojo.dom.createDocumentFromText=function(str,_22e){
+if(!_22e){
+_22e="text/xml";
 }
 if(!dj_undef("DOMParser")){
-var _237=new DOMParser();
-return _237.parseFromString(str,_236);
+var _22f=new DOMParser();
+return _22f.parseFromString(str,_22e);
 }else{
 if(!dj_undef("ActiveXObject")){
-var _238=dojo.dom.createDocument();
-if(_238){
-_238.async=false;
-_238.loadXML(str);
-return _238;
+var _230=dojo.dom.createDocument();
+if(_230){
+_230.async=false;
+_230.loadXML(str);
+return _230;
 }else{
 dojo.debug("toXml didn't work?");
 }
 }else{
-var _239=dojo.doc();
-if(_239.createElement){
-var tmp=_239.createElement("xml");
+var _231=dojo.doc();
+if(_231.createElement){
+var tmp=_231.createElement("xml");
 tmp.innerHTML=str;
-if(_239.implementation&&_239.implementation.createDocument){
-var _23b=_239.implementation.createDocument("foo","",null);
+if(_231.implementation&&_231.implementation.createDocument){
+var _233=_231.implementation.createDocument("foo","",null);
 for(var i=0;i<tmp.childNodes.length;i++){
-_23b.importNode(tmp.childNodes.item(i),true);
+_233.importNode(tmp.childNodes.item(i),true);
 }
-return _23b;
+return _233;
 }
 return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
 }
@@ -2216,39 +2175,39 @@
 }
 return null;
 };
-dojo.dom.prependChild=function(node,_23e){
-if(_23e.firstChild){
-_23e.insertBefore(node,_23e.firstChild);
+dojo.dom.prependChild=function(node,_236){
+if(_236.firstChild){
+_236.insertBefore(node,_236.firstChild);
 }else{
-_23e.appendChild(node);
+_236.appendChild(node);
 }
 return true;
 };
-dojo.dom.insertBefore=function(node,ref,_241){
-if((_241!=true)&&(node===ref||node.nextSibling===ref)){
+dojo.dom.insertBefore=function(node,ref,_239){
+if((_239!=true)&&(node===ref||node.nextSibling===ref)){
 return false;
 }
-var _242=ref.parentNode;
-_242.insertBefore(node,ref);
+var _23a=ref.parentNode;
+_23a.insertBefore(node,ref);
 return true;
 };
-dojo.dom.insertAfter=function(node,ref,_245){
+dojo.dom.insertAfter=function(node,ref,_23d){
 var pn=ref.parentNode;
 if(ref==pn.lastChild){
-if((_245!=true)&&(node===ref)){
+if((_23d!=true)&&(node===ref)){
 return false;
 }
 pn.appendChild(node);
 }else{
-return this.insertBefore(node,ref.nextSibling,_245);
+return this.insertBefore(node,ref.nextSibling,_23d);
 }
 return true;
 };
-dojo.dom.insertAtPosition=function(node,ref,_249){
-if((!node)||(!ref)||(!_249)){
+dojo.dom.insertAtPosition=function(node,ref,_241){
+if((!node)||(!ref)||(!_241)){
 return false;
 }
-switch(_249.toLowerCase()){
+switch(_241.toLowerCase()){
 case "before":
 return dojo.dom.insertBefore(node,ref);
 case "after":
@@ -2266,46 +2225,46 @@
 return true;
 }
 };
-dojo.dom.insertAtIndex=function(node,_24b,_24c){
-var _24d=_24b.childNodes;
-if(!_24d.length||_24d.length==_24c){
-_24b.appendChild(node);
+dojo.dom.insertAtIndex=function(node,_243,_244){
+var _245=_243.childNodes;
+if(!_245.length||_245.length==_244){
+_243.appendChild(node);
 return true;
 }
-if(_24c==0){
-return dojo.dom.prependChild(node,_24b);
+if(_244==0){
+return dojo.dom.prependChild(node,_243);
 }
-return dojo.dom.insertAfter(node,_24d[_24c-1]);
+return dojo.dom.insertAfter(node,_245[_244-1]);
 };
 dojo.dom.textContent=function(node,text){
 if(arguments.length>1){
-var _250=dojo.doc();
-dojo.dom.replaceChildren(node,_250.createTextNode(text));
+var _248=dojo.doc();
+dojo.dom.replaceChildren(node,_248.createTextNode(text));
 return text;
 }else{
 if(node.textContent!=undefined){
 return node.textContent;
 }
-var _251="";
+var _249="";
 if(node==null){
-return _251;
+return _249;
 }
 for(var i=0;i<node.childNodes.length;i++){
 switch(node.childNodes[i].nodeType){
 case 1:
 case 5:
-_251+=dojo.dom.textContent(node.childNodes[i]);
+_249+=dojo.dom.textContent(node.childNodes[i]);
 break;
 case 3:
 case 2:
 case 4:
-_251+=node.childNodes[i].nodeValue;
+_249+=node.childNodes[i].nodeValue;
 break;
 default:
 break;
 }
 }
-return _251;
+return _249;
 }
 };
 dojo.dom.hasParent=function(node){
@@ -2321,23 +2280,23 @@
 }
 return "";
 };
-dojo.dom.setAttributeNS=function(elem,_257,_258,_259){
+dojo.dom.setAttributeNS=function(elem,_24f,_250,_251){
 if(elem==null||((elem==undefined)&&(typeof elem=="undefined"))){
 dojo.raise("No element given to dojo.dom.setAttributeNS");
 }
 if(!((elem.setAttributeNS==undefined)&&(typeof elem.setAttributeNS=="undefined"))){
-elem.setAttributeNS(_257,_258,_259);
+elem.setAttributeNS(_24f,_250,_251);
 }else{
-var _25a=elem.ownerDocument;
-var _25b=_25a.createNode(2,_258,_257);
-_25b.nodeValue=_259;
-elem.setAttributeNode(_25b);
+var _252=elem.ownerDocument;
+var _253=_252.createNode(2,_250,_24f);
+_253.nodeValue=_251;
+elem.setAttributeNode(_253);
 }
 };
 dojo.provide("dojo.undo.browser");
 try{
 if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
+document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
 }
 }
 catch(e){
@@ -2352,6 +2311,9 @@
 var hash=null;
 var url=null;
 if(!this.historyIframe){
+if(djConfig["useXDomain"]&&!djConfig["dojoIframeHistoryUrl"]){
+dojo.debug("dojo.undo.browser: When using cross-domain Dojo builds,"+" please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"+" to the path on your domain to iframe_history.html");
+}
 this.historyIframe=window.frames["djhistory"];
 }
 if(!this.bookmarkAnchor){
@@ -2375,12 +2337,12 @@
 this.bookmarkAnchor.href=hash;
 if(dojo.render.html.ie){
 url=this._loadIframeHistory();
-var _260=args["back"]||args["backButton"]||args["handle"];
-var tcb=function(_262){
+var _258=args["back"]||args["backButton"]||args["handle"];
+var tcb=function(_25a){
 if(window.location.hash!=""){
 setTimeout("window.location.href = '"+hash+"';",1);
 }
-_260.apply(this,[_262]);
+_258.apply(this,[_25a]);
 };
 if(args["back"]){
 args.back=tcb;
@@ -2393,13 +2355,13 @@
 }
 }
 }
-var _263=args["forward"]||args["forwardButton"]||args["handle"];
-var tfw=function(_265){
+var _25b=args["forward"]||args["forwardButton"]||args["handle"];
+var tfw=function(_25d){
 if(window.location.hash!=""){
 window.location.href=hash;
 }
-if(_263){
-_263.apply(this,[_265]);
+if(_25b){
+_25b.apply(this,[_25d]);
 }
 };
 if(args["forward"]){
@@ -2444,10 +2406,10 @@
 }
 }
 }
-},iframeLoaded:function(evt,_268){
+},iframeLoaded:function(evt,_260){
 if(!dojo.render.html.opera){
-var _269=this._getUrlQuery(_268.href);
-if(_269==null){
+var _261=this._getUrlQuery(_260.href);
+if(_261==null){
 if(this.historyStack.length==1){
 this.handleBackButton();
 }
@@ -2457,17 +2419,17 @@
 this.moveForward=false;
 return;
 }
-if(this.historyStack.length>=2&&_269==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
+if(this.historyStack.length>=2&&_261==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
 this.handleBackButton();
 }else{
-if(this.forwardStack.length>0&&_269==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
+if(this.forwardStack.length>0&&_261==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
 this.handleForwardButton();
 }
 }
 }
 },handleBackButton:function(){
-var _26a=this.historyStack.pop();
-if(!_26a){
+var _262=this.historyStack.pop();
+if(!_262){
 return;
 }
 var last=this.historyStack[this.historyStack.length-1];
@@ -2487,7 +2449,7 @@
 }
 }
 }
-this.forwardStack.push(_26a);
+this.forwardStack.push(_262);
 },handleForwardButton:function(){
 var last=this.forwardStack.pop();
 if(!last){
@@ -2508,14 +2470,14 @@
 },_createState:function(url,args,hash){
 return {"url":url,"kwArgs":args,"urlHash":hash};
 },_getUrlQuery:function(url){
-var _271=url.split("?");
-if(_271.length<2){
+var _269=url.split("?");
+if(_269.length<2){
 return null;
 }else{
-return _271[1];
+return _269[1];
 }
 },_loadIframeHistory:function(){
-var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
+var url=(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"?"+(new Date()).getTime();
 this.moveForward=true;
 dojo.io.setIFrameSrc(this.historyIframe,url,false);
 return url;
@@ -2523,26 +2485,26 @@
 dojo.provide("dojo.io.BrowserIO");
 if(!dj_undef("window")){
 dojo.io.checkChildrenForFile=function(node){
-var _274=false;
-var _275=node.getElementsByTagName("input");
-dojo.lang.forEach(_275,function(_276){
-if(_274){
+var _26c=false;
+var _26d=node.getElementsByTagName("input");
+dojo.lang.forEach(_26d,function(_26e){
+if(_26c){
 return;
 }
-if(_276.getAttribute("type")=="file"){
-_274=true;
+if(_26e.getAttribute("type")=="file"){
+_26c=true;
 }
 });
-return _274;
+return _26c;
 };
-dojo.io.formHasFile=function(_277){
-return dojo.io.checkChildrenForFile(_277);
+dojo.io.formHasFile=function(_26f){
+return dojo.io.checkChildrenForFile(_26f);
 };
-dojo.io.updateNode=function(node,_279){
+dojo.io.updateNode=function(node,_271){
 node=dojo.byId(node);
-var args=_279;
-if(dojo.lang.isString(_279)){
-args={url:_279};
+var args=_271;
+if(dojo.lang.isString(_271)){
+args={url:_271};
 }
 args.mimetype="text/html";
 args.load=function(t,d,e){
@@ -2557,18 +2519,18 @@
 var type=(node.type||"").toLowerCase();
 return !node.disabled&&node.name&&!dojo.lang.inArray(["file","submit","image","reset","button"],type);
 };
-dojo.io.encodeForm=function(_280,_281,_282){
-if((!_280)||(!_280.tagName)||(!_280.tagName.toLowerCase()=="form")){
+dojo.io.encodeForm=function(_278,_279,_27a){
+if((!_278)||(!_278.tagName)||(!_278.tagName.toLowerCase()=="form")){
 dojo.raise("Attempted to encode a non-form element.");
 }
-if(!_282){
-_282=dojo.io.formFilter;
+if(!_27a){
+_27a=dojo.io.formFilter;
 }
-var enc=/utf/i.test(_281||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _284=[];
-for(var i=0;i<_280.elements.length;i++){
-var elm=_280.elements[i];
-if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_282(elm)){
+var enc=/utf/i.test(_279||"")?encodeURIComponent:dojo.string.encodeAscii;
+var _27c=[];
+for(var i=0;i<_278.elements.length;i++){
+var elm=_278.elements[i];
+if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_27a(elm)){
 continue;
 }
 var name=enc(elm.name);
@@ -2576,30 +2538,30 @@
 if(type=="select-multiple"){
 for(var j=0;j<elm.options.length;j++){
 if(elm.options[j].selected){
-_284.push(name+"="+enc(elm.options[j].value));
+_27c.push(name+"="+enc(elm.options[j].value));
 }
 }
 }else{
 if(dojo.lang.inArray(["radio","checkbox"],type)){
 if(elm.checked){
-_284.push(name+"="+enc(elm.value));
+_27c.push(name+"="+enc(elm.value));
 }
 }else{
-_284.push(name+"="+enc(elm.value));
+_27c.push(name+"="+enc(elm.value));
 }
 }
 }
-var _28a=_280.getElementsByTagName("input");
-for(var i=0;i<_28a.length;i++){
-var _28b=_28a[i];
-if(_28b.type.toLowerCase()=="image"&&_28b.form==_280&&_282(_28b)){
-var name=enc(_28b.name);
-_284.push(name+"="+enc(_28b.value));
-_284.push(name+".x=0");
-_284.push(name+".y=0");
+var _282=_278.getElementsByTagName("input");
+for(var i=0;i<_282.length;i++){
+var _283=_282[i];
+if(_283.type.toLowerCase()=="image"&&_283.form==_278&&_27a(_283)){
+var name=enc(_283.name);
+_27c.push(name+"="+enc(_283.value));
+_27c.push(name+".x=0");
+_27c.push(name+".y=0");
 }
 }
-return _284.join("&")+"&";
+return _27c.join("&")+"&";
 };
 dojo.io.FormBind=function(args){
 this.bindArgs={};
@@ -2633,11 +2595,11 @@
 this.connect(node,"onclick","click");
 }
 }
-var _291=form.getElementsByTagName("input");
-for(var i=0;i<_291.length;i++){
-var _292=_291[i];
-if(_292.type.toLowerCase()=="image"&&_292.form==form){
-this.connect(_292,"onclick","click");
+var _289=form.getElementsByTagName("input");
+for(var i=0;i<_289.length;i++){
+var _28a=_289[i];
+if(_28a.type.toLowerCase()=="image"&&_28a.form==form){
+this.connect(_28a,"onclick","click");
 }
 }
 },onSubmit:function(form){
@@ -2655,26 +2617,26 @@
 this.clickedButton=node;
 },formFilter:function(node){
 var type=(node.type||"").toLowerCase();
-var _299=false;
+var _291=false;
 if(node.disabled||!node.name){
-_299=false;
+_291=false;
 }else{
 if(dojo.lang.inArray(["submit","button","image"],type)){
 if(!this.clickedButton){
 this.clickedButton=node;
 }
-_299=node==this.clickedButton;
+_291=node==this.clickedButton;
 }else{
-_299=!dojo.lang.inArray(["file","submit","reset","button"],type);
+_291=!dojo.lang.inArray(["file","submit","reset","button"],type);
 }
 }
-return _299;
-},connect:function(_29a,_29b,_29c){
+return _291;
+},connect:function(_292,_293,_294){
 if(dojo.evalObjPath("dojo.event.connect")){
-dojo.event.connect(_29a,_29b,this,_29c);
+dojo.event.connect(_292,_293,this,_294);
 }else{
-var fcn=dojo.lang.hitch(this,_29c);
-_29a[_29b]=function(e){
+var fcn=dojo.lang.hitch(this,_294);
+_292[_293]=function(e){
 if(!e){
 e=window.event;
 }
@@ -2691,40 +2653,40 @@
 }
 }});
 dojo.io.XMLHTTPTransport=new function(){
-var _29f=this;
-var _2a0={};
+var _297=this;
+var _298={};
 this.useCache=false;
 this.preventCache=false;
-function getCacheKey(url,_2a2,_2a3){
-return url+"|"+_2a2+"|"+_2a3.toLowerCase();
+function getCacheKey(url,_29a,_29b){
+return url+"|"+_29a+"|"+_29b.toLowerCase();
 }
-function addToCache(url,_2a5,_2a6,http){
-_2a0[getCacheKey(url,_2a5,_2a6)]=http;
+function addToCache(url,_29d,_29e,http){
+_298[getCacheKey(url,_29d,_29e)]=http;
 }
-function getFromCache(url,_2a9,_2aa){
-return _2a0[getCacheKey(url,_2a9,_2aa)];
+function getFromCache(url,_2a1,_2a2){
+return _298[getCacheKey(url,_2a1,_2a2)];
 }
 this.clearCache=function(){
-_2a0={};
+_298={};
 };
-function doLoad(_2ab,http,url,_2ae,_2af){
+function doLoad(_2a3,http,url,_2a6,_2a7){
 if(((http.status>=200)&&(http.status<300))||(http.status==304)||(location.protocol=="file:"&&(http.status==0||http.status==undefined))||(location.protocol=="chrome:"&&(http.status==0||http.status==undefined))){
 var ret;
-if(_2ab.method.toLowerCase()=="head"){
-var _2b1=http.getAllResponseHeaders();
+if(_2a3.method.toLowerCase()=="head"){
+var _2a9=http.getAllResponseHeaders();
 ret={};
 ret.toString=function(){
-return _2b1;
+return _2a9;
 };
-var _2b2=_2b1.split(/[\r\n]+/g);
-for(var i=0;i<_2b2.length;i++){
-var pair=_2b2[i].match(/^([^:]+)\s*:\s*(.+)$/i);
+var _2aa=_2a9.split(/[\r\n]+/g);
+for(var i=0;i<_2aa.length;i++){
+var pair=_2aa[i].match(/^([^:]+)\s*:\s*(.+)$/i);
 if(pair){
 ret[pair[1]]=pair[2];
 }
 }
 }else{
-if(_2ab.mimetype=="text/javascript"){
+if(_2a3.mimetype=="text/javascript"){
 try{
 ret=dj_eval(http.responseText);
 }
@@ -2734,7 +2696,7 @@
 ret=null;
 }
 }else{
-if(_2ab.mimetype=="text/json"||_2ab.mimetype=="application/json"){
+if(_2a3.mimetype=="text/json"||_2a3.mimetype=="application/json"){
 try{
 ret=dj_eval("("+http.responseText+")");
 }
@@ -2744,7 +2706,7 @@
 ret=false;
 }
 }else{
-if((_2ab.mimetype=="application/xml")||(_2ab.mimetype=="text/xml")){
+if((_2a3.mimetype=="application/xml")||(_2a3.mimetype=="text/xml")){
 ret=http.responseXML;
 if(!ret||typeof ret=="string"||!http.getResponseHeader("Content-Type")){
 ret=dojo.dom.createDocumentFromText(http.responseText);
@@ -2755,22 +2717,22 @@
 }
 }
 }
-if(_2af){
-addToCache(url,_2ae,_2ab.method,http);
+if(_2a7){
+addToCache(url,_2a6,_2a3.method,http);
 }
-_2ab[(typeof _2ab.load=="function")?"load":"handle"]("load",ret,http,_2ab);
+_2a3[(typeof _2a3.load=="function")?"load":"handle"]("load",ret,http,_2a3);
 }else{
-var _2b5=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-_2ab[(typeof _2ab.error=="function")?"error":"handle"]("error",_2b5,http,_2ab);
+var _2ad=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
+_2a3[(typeof _2a3.error=="function")?"error":"handle"]("error",_2ad,http,_2a3);
 }
 }
-function setHeaders(http,_2b7){
-if(_2b7["headers"]){
-for(var _2b8 in _2b7["headers"]){
-if(_2b8.toLowerCase()=="content-type"&&!_2b7["contentType"]){
-_2b7["contentType"]=_2b7["headers"][_2b8];
+function setHeaders(http,_2af){
+if(_2af["headers"]){
+for(var _2b0 in _2af["headers"]){
+if(_2b0.toLowerCase()=="content-type"&&!_2af["contentType"]){
+_2af["contentType"]=_2af["headers"][_2b0];
 }else{
-http.setRequestHeader(_2b8,_2b7["headers"][_2b8]);
+http.setRequestHeader(_2b0,_2af["headers"][_2b0]);
 }
 }
 }
@@ -2784,7 +2746,7 @@
 };
 this.watchInFlight=function(){
 var now=null;
-if(!dojo.hostenv._blockAsync&&!_29f._blockAsync){
+if(!dojo.hostenv._blockAsync&&!_297._blockAsync){
 for(var x=this.inFlight.length-1;x>=0;x--){
 try{
 var tif=this.inFlight[x];
@@ -2812,8 +2774,8 @@
 }
 catch(e){
 try{
-var _2bc=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
-tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_2bc,tif.http,tif.req);
+var _2b4=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
+tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_2b4,tif.http,tif.req);
 }
 catch(e2){
 dojo.debug("XMLHttpTransport error callback failed: "+e2);
@@ -2828,74 +2790,74 @@
 }
 this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
 };
-var _2bd=dojo.hostenv.getXmlhttpObject()?true:false;
-this.canHandle=function(_2be){
-return _2bd&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_2be["mimetype"].toLowerCase()||""))&&!(_2be["formNode"]&&dojo.io.formHasFile(_2be["formNode"]));
+var _2b5=dojo.hostenv.getXmlhttpObject()?true:false;
+this.canHandle=function(_2b6){
+return _2b5&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_2b6["mimetype"].toLowerCase()||""))&&!(_2b6["formNode"]&&dojo.io.formHasFile(_2b6["formNode"]));
 };
 this.multipartBoundary="45309FFF-BD65-4d50-99C9-36986896A96F";
-this.bind=function(_2bf){
-if(!_2bf["url"]){
-if(!_2bf["formNode"]&&(_2bf["backButton"]||_2bf["back"]||_2bf["changeUrl"]||_2bf["watchForURL"])&&(!djConfig.preventBackButtonFix)){
+this.bind=function(_2b7){
+if(!_2b7["url"]){
+if(!_2b7["formNode"]&&(_2b7["backButton"]||_2b7["back"]||_2b7["changeUrl"]||_2b7["watchForURL"])&&(!djConfig.preventBackButtonFix)){
 dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request","Use dojo.undo.browser.addToHistory() instead.","0.4");
-dojo.undo.browser.addToHistory(_2bf);
+dojo.undo.browser.addToHistory(_2b7);
 return true;
 }
 }
-var url=_2bf.url;
-var _2c1="";
-if(_2bf["formNode"]){
-var ta=_2bf.formNode.getAttribute("action");
-if((ta)&&(!_2bf["url"])){
+var url=_2b7.url;
+var _2b9="";
+if(_2b7["formNode"]){
+var ta=_2b7.formNode.getAttribute("action");
+if((ta)&&(!_2b7["url"])){
 url=ta;
 }
-var tp=_2bf.formNode.getAttribute("method");
-if((tp)&&(!_2bf["method"])){
-_2bf.method=tp;
+var tp=_2b7.formNode.getAttribute("method");
+if((tp)&&(!_2b7["method"])){
+_2b7.method=tp;
 }
-_2c1+=dojo.io.encodeForm(_2bf.formNode,_2bf.encoding,_2bf["formFilter"]);
+_2b9+=dojo.io.encodeForm(_2b7.formNode,_2b7.encoding,_2b7["formFilter"]);
 }
 if(url.indexOf("#")>-1){
 dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url);
 url=url.split("#")[0];
 }
-if(_2bf["file"]){
-_2bf.method="post";
+if(_2b7["file"]){
+_2b7.method="post";
 }
-if(!_2bf["method"]){
-_2bf.method="get";
+if(!_2b7["method"]){
+_2b7.method="get";
 }
-if(_2bf.method.toLowerCase()=="get"){
-_2bf.multipart=false;
+if(_2b7.method.toLowerCase()=="get"){
+_2b7.multipart=false;
 }else{
-if(_2bf["file"]){
-_2bf.multipart=true;
+if(_2b7["file"]){
+_2b7.multipart=true;
 }else{
-if(!_2bf["multipart"]){
-_2bf.multipart=false;
+if(!_2b7["multipart"]){
+_2b7.multipart=false;
 }
 }
 }
-if(_2bf["backButton"]||_2bf["back"]||_2bf["changeUrl"]){
-dojo.undo.browser.addToHistory(_2bf);
+if(_2b7["backButton"]||_2b7["back"]||_2b7["changeUrl"]){
+dojo.undo.browser.addToHistory(_2b7);
 }
-var _2c4=_2bf["content"]||{};
-if(_2bf.sendTransport){
-_2c4["dojo.transport"]="xmlhttp";
+var _2bc=_2b7["content"]||{};
+if(_2b7.sendTransport){
+_2bc["dojo.transport"]="xmlhttp";
 }
 do{
-if(_2bf.postContent){
-_2c1=_2bf.postContent;
+if(_2b7.postContent){
+_2b9=_2b7.postContent;
 break;
 }
-if(_2c4){
-_2c1+=dojo.io.argsFromMap(_2c4,_2bf.encoding);
+if(_2bc){
+_2b9+=dojo.io.argsFromMap(_2bc,_2b7.encoding);
 }
-if(_2bf.method.toLowerCase()=="get"||!_2bf.multipart){
+if(_2b7.method.toLowerCase()=="get"||!_2b7.multipart){
 break;
 }
 var t=[];
-if(_2c1.length){
-var q=_2c1.split("&");
+if(_2b9.length){
+var q=_2b9.split("&");
 for(var i=0;i<q.length;++i){
 if(q[i].length){
 var p=q[i].split("=");
@@ -2903,71 +2865,71 @@
 }
 }
 }
-if(_2bf.file){
-if(dojo.lang.isArray(_2bf.file)){
-for(var i=0;i<_2bf.file.length;++i){
-var o=_2bf.file[i];
+if(_2b7.file){
+if(dojo.lang.isArray(_2b7.file)){
+for(var i=0;i<_2b7.file.length;++i){
+var o=_2b7.file[i];
 t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
 }
 }else{
-var o=_2bf.file;
+var o=_2b7.file;
 t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
 }
 }
 if(t.length){
 t.push("--"+this.multipartBoundary+"--","");
-_2c1=t.join("\r\n");
+_2b9=t.join("\r\n");
 }
 }while(false);
-var _2ca=_2bf["sync"]?false:true;
-var _2cb=_2bf["preventCache"]||(this.preventCache==true&&_2bf["preventCache"]!=false);
-var _2cc=_2bf["useCache"]==true||(this.useCache==true&&_2bf["useCache"]!=false);
-if(!_2cb&&_2cc){
-var _2cd=getFromCache(url,_2c1,_2bf.method);
-if(_2cd){
-doLoad(_2bf,_2cd,url,_2c1,false);
+var _2c2=_2b7["sync"]?false:true;
+var _2c3=_2b7["preventCache"]||(this.preventCache==true&&_2b7["preventCache"]!=false);
+var _2c4=_2b7["useCache"]==true||(this.useCache==true&&_2b7["useCache"]!=false);
+if(!_2c3&&_2c4){
+var _2c5=getFromCache(url,_2b9,_2b7.method);
+if(_2c5){
+doLoad(_2b7,_2c5,url,_2b9,false);
 return;
 }
 }
-var http=dojo.hostenv.getXmlhttpObject(_2bf);
-var _2cf=false;
-if(_2ca){
-var _2d0=this.inFlight.push({"req":_2bf,"http":http,"url":url,"query":_2c1,"useCache":_2cc,"startTime":_2bf.timeoutSeconds?(new Date()).getTime():0});
+var http=dojo.hostenv.getXmlhttpObject(_2b7);
+var _2c7=false;
+if(_2c2){
+var _2c8=this.inFlight.push({"req":_2b7,"http":http,"url":url,"query":_2b9,"useCache":_2c4,"startTime":_2b7.timeoutSeconds?(new Date()).getTime():0});
 this.startWatchingInFlight();
 }else{
-_29f._blockAsync=true;
+_297._blockAsync=true;
 }
-if(_2bf.method.toLowerCase()=="post"){
-if(!_2bf.user){
-http.open("POST",url,_2ca);
+if(_2b7.method.toLowerCase()=="post"){
+if(!_2b7.user){
+http.open("POST",url,_2c2);
 }else{
-http.open("POST",url,_2ca,_2bf.user,_2bf.password);
+http.open("POST",url,_2c2,_2b7.user,_2b7.password);
 }
-setHeaders(http,_2bf);
-http.setRequestHeader("Content-Type",_2bf.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_2bf.contentType||"application/x-www-form-urlencoded"));
+setHeaders(http,_2b7);
+http.setRequestHeader("Content-Type",_2b7.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_2b7.contentType||"application/x-www-form-urlencoded"));
 try{
-http.send(_2c1);
+http.send(_2b9);
 }
 catch(e){
 if(typeof http.abort=="function"){
 http.abort();
 }
-doLoad(_2bf,{status:404},url,_2c1,_2cc);
+doLoad(_2b7,{status:404},url,_2b9,_2c4);
 }
 }else{
-var _2d1=url;
-if(_2c1!=""){
-_2d1+=(_2d1.indexOf("?")>-1?"&":"?")+_2c1;
+var _2c9=url;
+if(_2b9!=""){
+_2c9+=(_2c9.indexOf("?")>-1?"&":"?")+_2b9;
 }
-if(_2cb){
-_2d1+=(dojo.string.endsWithAny(_2d1,"?","&")?"":(_2d1.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
+if(_2c3){
+_2c9+=(dojo.string.endsWithAny(_2c9,"?","&")?"":(_2c9.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
 }
-if(!_2bf.user){
-http.open(_2bf.method.toUpperCase(),_2d1,_2ca);
+if(!_2b7.user){
+http.open(_2b7.method.toUpperCase(),_2c9,_2c2);
 }else{
-http.open(_2bf.method.toUpperCase(),_2d1,_2ca,_2bf.user,_2bf.password);
+http.open(_2b7.method.toUpperCase(),_2c9,_2c2,_2b7.user,_2b7.password);
 }
-setHeaders(http,_2bf);
+setHeaders(http,_2b7);
 try{
 http.send(null);
 }
@@ -2975,14 +2937,14 @@
 if(typeof http.abort=="function"){
 http.abort();
 }
-doLoad(_2bf,{status:404},url,_2c1,_2cc);
+doLoad(_2b7,{status:404},url,_2b9,_2c4);
 }
 }
-if(!_2ca){
-doLoad(_2bf,http,url,_2c1,_2cc);
-_29f._blockAsync=false;
+if(!_2c2){
+doLoad(_2b7,http,url,_2b9,_2c4);
+_297._blockAsync=false;
 }
-_2bf.abort=function(){
+_2b7.abort=function(){
 try{
 http._aborted=true;
 }
@@ -2996,15 +2958,15 @@
 };
 }
 dojo.provide("dojo.io.cookie");
-dojo.io.cookie.setCookie=function(name,_2d3,days,path,_2d6,_2d7){
-var _2d8=-1;
+dojo.io.cookie.setCookie=function(name,_2cb,days,path,_2ce,_2cf){
+var _2d0=-1;
 if((typeof days=="number")&&(days>=0)){
 var d=new Date();
 d.setTime(d.getTime()+(days*24*60*60*1000));
-_2d8=d.toGMTString();
+_2d0=d.toGMTString();
 }
-_2d3=escape(_2d3);
-document.cookie=name+"="+_2d3+";"+(_2d8!=-1?" expires="+_2d8+";":"")+(path?"path="+path:"")+(_2d6?"; domain="+_2d6:"")+(_2d7?"; secure":"");
+_2cb=escape(_2cb);
+document.cookie=name+"="+_2cb+";"+(_2d0!=-1?" expires="+_2d0+";":"")+(path?"path="+path:"")+(_2ce?"; domain="+_2ce:"")+(_2cf?"; secure":"");
 };
 dojo.io.cookie.set=dojo.io.cookie.setCookie;
 dojo.io.cookie.getCookie=function(name){
@@ -3012,71 +2974,71 @@
 if(idx==-1){
 return null;
 }
-var _2dc=document.cookie.substring(idx+name.length+1);
-var end=_2dc.indexOf(";");
+var _2d4=document.cookie.substring(idx+name.length+1);
+var end=_2d4.indexOf(";");
 if(end==-1){
-end=_2dc.length;
+end=_2d4.length;
 }
-_2dc=_2dc.substring(0,end);
-_2dc=unescape(_2dc);
-return _2dc;
+_2d4=_2d4.substring(0,end);
+_2d4=unescape(_2d4);
+return _2d4;
 };
 dojo.io.cookie.get=dojo.io.cookie.getCookie;
 dojo.io.cookie.deleteCookie=function(name){
 dojo.io.cookie.setCookie(name,"-",0);
 };
-dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_2e3,_2e4,_2e5){
+dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_2db,_2dc,_2dd){
 if(arguments.length==5){
-_2e5=_2e3;
-_2e3=null;
-_2e4=null;
+_2dd=_2db;
+_2db=null;
+_2dc=null;
 }
-var _2e6=[],_2e7,_2e8="";
-if(!_2e5){
-_2e7=dojo.io.cookie.getObjectCookie(name);
+var _2de=[],_2df,_2e0="";
+if(!_2dd){
+_2df=dojo.io.cookie.getObjectCookie(name);
 }
 if(days>=0){
-if(!_2e7){
-_2e7={};
+if(!_2df){
+_2df={};
 }
 for(var prop in obj){
 if(obj[prop]==null){
-delete _2e7[prop];
+delete _2df[prop];
 }else{
 if((typeof obj[prop]=="string")||(typeof obj[prop]=="number")){
-_2e7[prop]=obj[prop];
+_2df[prop]=obj[prop];
 }
 }
 }
 prop=null;
-for(var prop in _2e7){
-_2e6.push(escape(prop)+"="+escape(_2e7[prop]));
+for(var prop in _2df){
+_2de.push(escape(prop)+"="+escape(_2df[prop]));
 }
-_2e8=_2e6.join("&");
+_2e0=_2de.join("&");
 }
-dojo.io.cookie.setCookie(name,_2e8,days,path,_2e3,_2e4);
+dojo.io.cookie.setCookie(name,_2e0,days,path,_2db,_2dc);
 };
 dojo.io.cookie.getObjectCookie=function(name){
-var _2eb=null,_2ec=dojo.io.cookie.getCookie(name);
-if(_2ec){
-_2eb={};
-var _2ed=_2ec.split("&");
-for(var i=0;i<_2ed.length;i++){
-var pair=_2ed[i].split("=");
-var _2f0=pair[1];
-if(isNaN(_2f0)){
-_2f0=unescape(pair[1]);
+var _2e3=null,_2e4=dojo.io.cookie.getCookie(name);
+if(_2e4){
+_2e3={};
+var _2e5=_2e4.split("&");
+for(var i=0;i<_2e5.length;i++){
+var pair=_2e5[i].split("=");
+var _2e8=pair[1];
+if(isNaN(_2e8)){
+_2e8=unescape(pair[1]);
 }
-_2eb[unescape(pair[0])]=_2f0;
+_2e3[unescape(pair[0])]=_2e8;
 }
 }
-return _2eb;
+return _2e3;
 };
 dojo.io.cookie.isSupported=function(){
 if(typeof navigator.cookieEnabled!="boolean"){
 dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__","CookiesAllowed",90,null);
-var _2f1=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
-navigator.cookieEnabled=(_2f1=="CookiesAllowed");
+var _2e9=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
+navigator.cookieEnabled=(_2e9=="CookiesAllowed");
 if(navigator.cookieEnabled){
 this.deleteCookie("__TestingYourBrowserForCookieSupport__");
 }
@@ -3086,13 +3048,14 @@
 if(!dojo.io.cookies){
 dojo.io.cookies=dojo.io.cookie;
 }
+dojo.kwCompoundRequire({common:["dojo.io.common"],rhino:["dojo.io.RhinoIO"],browser:["dojo.io.BrowserIO","dojo.io.cookie"],dashboard:["dojo.io.BrowserIO","dojo.io.cookie"]});
 dojo.provide("dojo.io.*");
 dojo.provide("dojo.event.common");
 dojo.event=new function(){
 this._canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-function interpolateArgs(args,_2f3){
+function interpolateArgs(args,_2eb){
 var dl=dojo.lang;
-var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false};
+var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false,maxCalls:-1};
 switch(args.length){
 case 0:
 return;
@@ -3117,14 +3080,14 @@
 ao.adviceType="after";
 ao.srcObj=args[0];
 ao.srcFunc=args[1];
-var _2f6=dl.nameAnonFunc(args[2],ao.adviceObj,_2f3);
-ao.adviceFunc=_2f6;
+var _2ee=dl.nameAnonFunc(args[2],ao.adviceObj,_2eb);
+ao.adviceFunc=_2ee;
 }else{
 if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
 ao.adviceType="after";
 ao.srcObj=dj_global;
-var _2f6=dl.nameAnonFunc(args[0],ao.srcObj,_2f3);
-ao.srcFunc=_2f6;
+var _2ee=dl.nameAnonFunc(args[0],ao.srcObj,_2eb);
+ao.srcFunc=_2ee;
 ao.adviceObj=args[1];
 ao.adviceFunc=args[2];
 }
@@ -3150,17 +3113,17 @@
 if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
 ao.adviceType=args[0];
 ao.srcObj=dj_global;
-var _2f6=dl.nameAnonFunc(args[1],dj_global,_2f3);
-ao.srcFunc=_2f6;
+var _2ee=dl.nameAnonFunc(args[1],dj_global,_2eb);
+ao.srcFunc=_2ee;
 ao.adviceObj=args[2];
 ao.adviceFunc=args[3];
 }else{
 if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
 ao.srcObj=args[1];
 ao.srcFunc=args[2];
-var _2f6=dl.nameAnonFunc(args[3],dj_global,_2f3);
+var _2ee=dl.nameAnonFunc(args[3],dj_global,_2eb);
 ao.adviceObj=dj_global;
-ao.adviceFunc=_2f6;
+ao.adviceFunc=_2ee;
 }else{
 if(dl.isObject(args[1])){
 ao.srcObj=args[1];
@@ -3204,11 +3167,12 @@
 ao.delay=args[8];
 ao.rate=args[9];
 ao.adviceMsg=args[10];
+ao.maxCalls=(!isNaN(parseInt(args[11])))?args[11]:-1;
 break;
 }
 if(dl.isFunction(ao.aroundFunc)){
-var _2f6=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_2f3);
-ao.aroundFunc=_2f6;
+var _2ee=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_2eb);
+ao.aroundFunc=_2ee;
 }
 if(dl.isFunction(ao.srcFunc)){
 ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc);
@@ -3237,25 +3201,18 @@
 }else{
 var ao=interpolateArgs(arguments,true);
 }
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.connect(ao);
-}
-ao.srcFunc="onkeypress";
-}
 if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){
-var _2f8={};
+var _2f0={};
 for(var x in ao){
-_2f8[x]=ao[x];
+_2f0[x]=ao[x];
 }
 var mjps=[];
 dojo.lang.forEach(ao.srcObj,function(src){
 if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
 src=dojo.byId(src);
 }
-_2f8.srcObj=src;
-mjps.push(dojo.event.connect.call(dojo.event,_2f8));
+_2f0.srcObj=src;
+mjps.push(dojo.event.connect.call(dojo.event,_2f0));
 });
 return mjps;
 }
@@ -3267,20 +3224,20 @@
 return mjp;
 };
 this.log=function(a1,a2){
-var _300;
+var _2f8;
 if((arguments.length==1)&&(typeof a1=="object")){
-_300=a1;
+_2f8=a1;
 }else{
-_300={srcObj:a1,srcFunc:a2};
+_2f8={srcObj:a1,srcFunc:a2};
 }
-_300.adviceFunc=function(){
-var _301=[];
+_2f8.adviceFunc=function(){
+var _2f9=[];
 for(var x=0;x<arguments.length;x++){
-_301.push(arguments[x]);
+_2f9.push(arguments[x]);
 }
-dojo.debug("("+_300.srcObj+")."+_300.srcFunc,":",_301.join(", "));
+dojo.debug("("+_2f8.srcObj+")."+_2f8.srcFunc,":",_2f9.join(", "));
 };
-this.kwConnect(_300);
+this.kwConnect(_2f8);
 };
 this.connectBefore=function(){
 var args=["before"];
@@ -3301,25 +3258,30 @@
 ao.once=true;
 return this.connect(ao);
 };
-this._kwConnectImpl=function(_308,_309){
-var fn=(_309)?"disconnect":"connect";
-if(typeof _308["srcFunc"]=="function"){
-_308.srcObj=_308["srcObj"]||dj_global;
-var _30b=dojo.lang.nameAnonFunc(_308.srcFunc,_308.srcObj,true);
-_308.srcFunc=_30b;
+this.connectRunOnce=function(){
+var ao=interpolateArgs(arguments,true);
+ao.maxCalls=1;
+return this.connect(ao);
+};
+this._kwConnectImpl=function(_301,_302){
+var fn=(_302)?"disconnect":"connect";
+if(typeof _301["srcFunc"]=="function"){
+_301.srcObj=_301["srcObj"]||dj_global;
+var _304=dojo.lang.nameAnonFunc(_301.srcFunc,_301.srcObj,true);
+_301.srcFunc=_304;
 }
-if(typeof _308["adviceFunc"]=="function"){
-_308.adviceObj=_308["adviceObj"]||dj_global;
-var _30b=dojo.lang.nameAnonFunc(_308.adviceFunc,_308.adviceObj,true);
-_308.adviceFunc=_30b;
+if(typeof _301["adviceFunc"]=="function"){
+_301.adviceObj=_301["adviceObj"]||dj_global;
+var _304=dojo.lang.nameAnonFunc(_301.adviceFunc,_301.adviceObj,true);
+_301.adviceFunc=_304;
 }
-_308.srcObj=_308["srcObj"]||dj_global;
-_308.adviceObj=_308["adviceObj"]||_308["targetObj"]||dj_global;
-_308.adviceFunc=_308["adviceFunc"]||_308["targetFunc"];
-return dojo.event[fn](_308);
+_301.srcObj=_301["srcObj"]||dj_global;
+_301.adviceObj=_301["adviceObj"]||_301["targetObj"]||dj_global;
+_301.adviceFunc=_301["adviceFunc"]||_301["targetFunc"];
+return dojo.event[fn](_301);
 };
-this.kwConnect=function(_30c){
-return this._kwConnectImpl(_30c,false);
+this.kwConnect=function(_305){
+return this._kwConnectImpl(_305,false);
 };
 this.disconnect=function(){
 if(arguments.length==1){
@@ -3344,12 +3306,12 @@
 mjp.removeAdvice(ao.adviceObj,ao.adviceFunc,ao.adviceType,ao.once);
 return mjp;
 };
-this.kwDisconnect=function(_30f){
-return this._kwConnectImpl(_30f,true);
+this.kwDisconnect=function(_308){
+return this._kwConnectImpl(_308,true);
 };
 };
-dojo.event.MethodInvocation=function(_310,obj,args){
-this.jp_=_310;
+dojo.event.MethodInvocation=function(_309,obj,args){
+this.jp_=_309;
 this.object=obj;
 this.args=[];
 for(var x=0;x<args.length;x++){
@@ -3368,44 +3330,50 @@
 return mobj[meth].call(mobj,this);
 }
 };
-dojo.event.MethodJoinPoint=function(obj,_318){
+dojo.event.MethodJoinPoint=function(obj,_311){
 this.object=obj||dj_global;
-this.methodname=_318;
-this.methodfunc=this.object[_318];
+this.methodname=_311;
+this.methodfunc=this.object[_311];
 this.squelch=false;
 };
-dojo.event.MethodJoinPoint.getForMethod=function(obj,_31a){
+dojo.event.MethodJoinPoint.getForMethod=function(obj,_313){
 if(!obj){
 obj=dj_global;
 }
-if(!obj[_31a]){
-obj[_31a]=function(){
+var ofn=obj[_313];
+if(!ofn){
+ofn=obj[_313]=function(){
 };
-if(!obj[_31a]){
-dojo.raise("Cannot set do-nothing method on that object "+_31a);
+if(!obj[_313]){
+dojo.raise("Cannot set do-nothing method on that object "+_313);
 }
 }else{
-if((!dojo.lang.isFunction(obj[_31a]))&&(!dojo.lang.isAlien(obj[_31a]))){
+if((typeof ofn!="function")&&(!dojo.lang.isFunction(ofn))&&(!dojo.lang.isAlien(ofn))){
 return null;
 }
 }
-var _31b=_31a+"$joinpoint";
-var _31c=_31a+"$joinpoint$method";
-var _31d=obj[_31b];
-if(!_31d){
-var _31e=false;
+var _315=_313+"$joinpoint";
+var _316=_313+"$joinpoint$method";
+var _317=obj[_315];
+if(!_317){
+var _318=false;
 if(dojo.event["browser"]){
 if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){
-_31e=true;
-dojo.event.browser.addClobberNodeAttrs(obj,[_31b,_31c,_31a]);
+_318=true;
+dojo.event.browser.addClobberNodeAttrs(obj,[_315,_316,_313]);
 }
 }
-var _31f=obj[_31a].length;
-obj[_31c]=obj[_31a];
-_31d=obj[_31b]=new dojo.event.MethodJoinPoint(obj,_31c);
-obj[_31a]=function(){
+var _319=ofn.length;
+obj[_316]=ofn;
+_317=obj[_315]=new dojo.event.MethodJoinPoint(obj,_316);
+if(!_318){
+obj[_313]=function(){
+return _317.run.apply(_317,arguments);
+};
+}else{
+obj[_313]=function(){
 var args=[];
-if((_31e)&&(!arguments.length)){
+if(!arguments.length){
 var evt=null;
 try{
 if(obj.ownerDocument){
@@ -3430,20 +3398,21 @@
 }
 }else{
 for(var x=0;x<arguments.length;x++){
-if((x==0)&&(_31e)&&(dojo.event.browser.isEvent(arguments[x]))){
+if((x==0)&&(dojo.event.browser.isEvent(arguments[x]))){
 args.push(dojo.event.browser.fixEvent(arguments[x],this));
 }else{
 args.push(arguments[x]);
 }
 }
 }
-return _31d.run.apply(_31d,args);
+return _317.run.apply(_317,args);
 };
-obj[_31a].__preJoinArity=_31f;
 }
-return _31d;
+obj[_313].__preJoinArity=_319;
+}
+return _317;
 };
-dojo.lang.extend(dojo.event.MethodJoinPoint,{unintercept:function(){
+dojo.lang.extend(dojo.event.MethodJoinPoint,{squelch:false,unintercept:function(){
 this.object[this.methodname]=this.methodfunc;
 this.before=[];
 this.after=[];
@@ -3451,34 +3420,41 @@
 },disconnect:dojo.lang.forward("unintercept"),run:function(){
 var obj=this.object||dj_global;
 var args=arguments;
-var _325=[];
+var _31f=[];
 for(var x=0;x<args.length;x++){
-_325[x]=args[x];
+_31f[x]=args[x];
 }
-var _327=function(marr){
+var _321=function(marr){
 if(!marr){
 dojo.debug("Null argument to unrollAdvice()");
 return;
 }
-var _329=marr[0]||dj_global;
-var _32a=marr[1];
-if(!_329[_32a]){
-dojo.raise("function \""+_32a+"\" does not exist on \""+_329+"\"");
+var _323=marr[0]||dj_global;
+var _324=marr[1];
+if(!_323[_324]){
+dojo.raise("function \""+_324+"\" does not exist on \""+_323+"\"");
 }
-var _32b=marr[2]||dj_global;
-var _32c=marr[3];
+var _325=marr[2]||dj_global;
+var _326=marr[3];
 var msg=marr[6];
-var _32e;
+var _328=marr[7];
+if(_328>-1){
+if(_328==0){
+return;
+}
+marr[7]--;
+}
+var _329;
 var to={args:[],jp_:this,object:obj,proceed:function(){
-return _329[_32a].apply(_329,to.args);
+return _323[_324].apply(_323,to.args);
 }};
-to.args=_325;
-var _330=parseInt(marr[4]);
-var _331=((!isNaN(_330))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
+to.args=_31f;
+var _32b=parseInt(marr[4]);
+var _32c=((!isNaN(_32b))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
 if(marr[5]){
 var rate=parseInt(marr[5]);
 var cur=new Date();
-var _334=false;
+var _32f=false;
 if((marr["last"])&&((cur-marr.last)<=rate)){
 if(dojo.event._canTimeout){
 if(marr["delayTimer"]){
@@ -3488,7 +3464,7 @@
 var mcpy=dojo.lang.shallowCopy(marr);
 marr.delayTimer=setTimeout(function(){
 mcpy[5]=0;
-_327(mcpy);
+_321(mcpy);
 },tod);
 }
 return;
@@ -3496,49 +3472,49 @@
 marr.last=cur;
 }
 }
-if(_32c){
-_32b[_32c].call(_32b,to);
+if(_326){
+_325[_326].call(_325,to);
 }else{
-if((_331)&&((dojo.render.html)||(dojo.render.svg))){
+if((_32c)&&((dojo.render.html)||(dojo.render.svg))){
 dj_global["setTimeout"](function(){
 if(msg){
-_329[_32a].call(_329,to);
+_323[_324].call(_323,to);
 }else{
-_329[_32a].apply(_329,args);
+_323[_324].apply(_323,args);
 }
-},_330);
+},_32b);
 }else{
 if(msg){
-_329[_32a].call(_329,to);
+_323[_324].call(_323,to);
 }else{
-_329[_32a].apply(_329,args);
+_323[_324].apply(_323,args);
 }
 }
 }
 };
-var _337=function(){
+var _332=function(){
 if(this.squelch){
 try{
-return _327.apply(this,arguments);
+return _321.apply(this,arguments);
 }
 catch(e){
 dojo.debug(e);
 }
 }else{
-return _327.apply(this,arguments);
+return _321.apply(this,arguments);
 }
 };
 if((this["before"])&&(this.before.length>0)){
-dojo.lang.forEach(this.before.concat(new Array()),_337);
+dojo.lang.forEach(this.before.concat(new Array()),_332);
 }
-var _338;
+var _333;
 try{
 if((this["around"])&&(this.around.length>0)){
 var mi=new dojo.event.MethodInvocation(this,obj,args);
-_338=mi.proceed();
+_333=mi.proceed();
 }else{
 if(this.methodfunc){
-_338=this.object[this.methodname].apply(this.object,args);
+_333=this.object[this.methodname].apply(this.object,args);
 }
 }
 }
@@ -3549,9 +3525,9 @@
 }
 }
 if((this["after"])&&(this.after.length>0)){
-dojo.lang.forEach(this.after.concat(new Array()),_337);
+dojo.lang.forEach(this.after.concat(new Array()),_332);
 }
-return (this.methodfunc)?_338:null;
+return (this.methodfunc)?_333:null;
 },getArr:function(kind){
 var type="after";
 if((typeof kind=="string")&&(kind.indexOf("before")!=-1)){
@@ -3566,39 +3542,39 @@
 }
 return this[type];
 },kwAddAdvice:function(args){
-this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"]);
-},addAdvice:function(_33d,_33e,_33f,_340,_341,_342,once,_344,rate,_346){
-var arr=this.getArr(_341);
+this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"],args["maxCalls"]);
+},addAdvice:function(_338,_339,_33a,_33b,_33c,_33d,once,_33f,rate,_341,_342){
+var arr=this.getArr(_33c);
 if(!arr){
 dojo.raise("bad this: "+this);
 }
-var ao=[_33d,_33e,_33f,_340,_344,rate,_346];
+var ao=[_338,_339,_33a,_33b,_33f,rate,_341,_342];
 if(once){
-if(this.hasAdvice(_33d,_33e,_341,arr)>=0){
+if(this.hasAdvice(_338,_339,_33c,arr)>=0){
 return;
 }
 }
-if(_342=="first"){
+if(_33d=="first"){
 arr.unshift(ao);
 }else{
 arr.push(ao);
 }
-},hasAdvice:function(_349,_34a,_34b,arr){
+},hasAdvice:function(_345,_346,_347,arr){
 if(!arr){
-arr=this.getArr(_34b);
+arr=this.getArr(_347);
 }
 var ind=-1;
 for(var x=0;x<arr.length;x++){
-var aao=(typeof _34a=="object")?(new String(_34a)).toString():_34a;
+var aao=(typeof _346=="object")?(new String(_346)).toString():_346;
 var a1o=(typeof arr[x][1]=="object")?(new String(arr[x][1])).toString():arr[x][1];
-if((arr[x][0]==_349)&&(a1o==aao)){
+if((arr[x][0]==_345)&&(a1o==aao)){
 ind=x;
 }
 }
 return ind;
-},removeAdvice:function(_351,_352,_353,once){
-var arr=this.getArr(_353);
-var ind=this.hasAdvice(_351,_352,_353,arr);
+},removeAdvice:function(_34d,_34e,_34f,once){
+var arr=this.getArr(_34f);
+var ind=this.hasAdvice(_34d,_34e,_34f,arr);
 if(ind==-1){
 return false;
 }
@@ -3607,73 +3583,73 @@
 if(once){
 break;
 }
-ind=this.hasAdvice(_351,_352,_353,arr);
+ind=this.hasAdvice(_34d,_34e,_34f,arr);
 }
 return true;
 }});
 dojo.provide("dojo.event.topic");
 dojo.event.topic=new function(){
 this.topics={};
-this.getTopic=function(_357){
-if(!this.topics[_357]){
-this.topics[_357]=new this.TopicImpl(_357);
+this.getTopic=function(_353){
+if(!this.topics[_353]){
+this.topics[_353]=new this.TopicImpl(_353);
 }
-return this.topics[_357];
+return this.topics[_353];
 };
-this.registerPublisher=function(_358,obj,_35a){
-var _358=this.getTopic(_358);
-_358.registerPublisher(obj,_35a);
+this.registerPublisher=function(_354,obj,_356){
+var _354=this.getTopic(_354);
+_354.registerPublisher(obj,_356);
 };
-this.subscribe=function(_35b,obj,_35d){
-var _35b=this.getTopic(_35b);
-_35b.subscribe(obj,_35d);
+this.subscribe=function(_357,obj,_359){
+var _357=this.getTopic(_357);
+_357.subscribe(obj,_359);
 };
-this.unsubscribe=function(_35e,obj,_360){
-var _35e=this.getTopic(_35e);
-_35e.unsubscribe(obj,_360);
+this.unsubscribe=function(_35a,obj,_35c){
+var _35a=this.getTopic(_35a);
+_35a.unsubscribe(obj,_35c);
 };
-this.destroy=function(_361){
-this.getTopic(_361).destroy();
-delete this.topics[_361];
+this.destroy=function(_35d){
+this.getTopic(_35d).destroy();
+delete this.topics[_35d];
 };
-this.publishApply=function(_362,args){
-var _362=this.getTopic(_362);
-_362.sendMessage.apply(_362,args);
+this.publishApply=function(_35e,args){
+var _35e=this.getTopic(_35e);
+_35e.sendMessage.apply(_35e,args);
 };
-this.publish=function(_364,_365){
-var _364=this.getTopic(_364);
+this.publish=function(_360,_361){
+var _360=this.getTopic(_360);
 var args=[];
 for(var x=1;x<arguments.length;x++){
 args.push(arguments[x]);
 }
-_364.sendMessage.apply(_364,args);
+_360.sendMessage.apply(_360,args);
 };
 };
-dojo.event.topic.TopicImpl=function(_368){
-this.topicName=_368;
-this.subscribe=function(_369,_36a){
-var tf=_36a||_369;
-var to=(!_36a)?dj_global:_369;
+dojo.event.topic.TopicImpl=function(_364){
+this.topicName=_364;
+this.subscribe=function(_365,_366){
+var tf=_366||_365;
+var to=(!_366)?dj_global:_365;
 return dojo.event.kwConnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
-this.unsubscribe=function(_36d,_36e){
-var tf=(!_36e)?_36d:_36e;
-var to=(!_36e)?null:_36d;
+this.unsubscribe=function(_369,_36a){
+var tf=(!_36a)?_369:_36a;
+var to=(!_36a)?null:_369;
 return dojo.event.kwDisconnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
 this._getJoinPoint=function(){
 return dojo.event.MethodJoinPoint.getForMethod(this,"sendMessage");
 };
-this.setSquelch=function(_371){
-this._getJoinPoint().squelch=_371;
+this.setSquelch=function(_36d){
+this._getJoinPoint().squelch=_36d;
 };
 this.destroy=function(){
 this._getJoinPoint().disconnect();
 };
-this.registerPublisher=function(_372,_373){
-dojo.event.connect(_372,_373,this,"sendMessage");
+this.registerPublisher=function(_36e,_36f){
+dojo.event.connect(_36e,_36f,this,"sendMessage");
 };
-this.sendMessage=function(_374){
+this.sendMessage=function(_370){
 };
 };
 dojo.provide("dojo.event.browser");
@@ -3696,12 +3672,12 @@
 catch(e){
 }
 }
-this.clobber=function(_377){
+this.clobber=function(_373){
 var na;
 var tna;
-if(_377){
-tna=_377.all||_377.getElementsByTagName("*");
-na=[_377];
+if(_373){
+tna=_373.all||_373.getElementsByTagName("*");
+na=[_373];
 for(var x=0;x<tna.length;x++){
 if(tna[x]["__doClobber__"]){
 na.push(tna[x]);
@@ -3716,7 +3692,7 @@
 na=(this.clobberNodes.length)?this.clobberNodes:document.all;
 }
 tna=null;
-var _37b={};
+var _377={};
 for(var i=na.length-1;i>=0;i=i-1){
 var el=na[i];
 try{
@@ -3767,9 +3743,9 @@
 });
 }
 dojo.event.browser=new function(){
-var _380=0;
-this.normalizedEventName=function(_381){
-switch(_381){
+var _37c=0;
+this.normalizedEventName=function(_37d){
+switch(_37d){
 case "CheckboxStateChange":
 case "DOMAttrModified":
 case "DOMMenuItemActive":
@@ -3778,10 +3754,11 @@
 case "DOMNodeInserted":
 case "DOMNodeRemoved":
 case "RadioStateChange":
-return _381;
+return _37d;
 break;
 default:
-return _381.toLowerCase();
+var lcn=_37d.toLowerCase();
+return (lcn.indexOf("on")==0)?lcn.substr(2):lcn;
 break;
 }
 };
@@ -3800,93 +3777,88 @@
 node.__clobberAttrs__=[];
 }
 };
-this.addClobberNodeAttrs=function(node,_385){
+this.addClobberNodeAttrs=function(node,_382){
 if(!dojo.render.html.ie){
 return;
 }
 this.addClobberNode(node);
-for(var x=0;x<_385.length;x++){
-node.__clobberAttrs__.push(_385[x]);
+for(var x=0;x<_382.length;x++){
+node.__clobberAttrs__.push(_382[x]);
 }
 };
-this.removeListener=function(node,_388,fp,_38a){
-if(!_38a){
-var _38a=false;
+this.removeListener=function(node,_385,fp,_387){
+if(!_387){
+var _387=false;
 }
-_388=dojo.event.browser.normalizedEventName(_388);
-if((_388=="onkey")||(_388=="key")){
+_385=dojo.event.browser.normalizedEventName(_385);
+if(_385=="key"){
 if(dojo.render.html.ie){
-this.removeListener(node,"onkeydown",fp,_38a);
+this.removeListener(node,"onkeydown",fp,_387);
 }
-_388="onkeypress";
+_385="keypress";
 }
-if(_388.substr(0,2)=="on"){
-_388=_388.substr(2);
-}
 if(node.removeEventListener){
-node.removeEventListener(_388,fp,_38a);
+node.removeEventListener(_385,fp,_387);
 }
 };
-this.addListener=function(node,_38c,fp,_38e,_38f){
+this.addListener=function(node,_389,fp,_38b,_38c){
 if(!node){
 return;
 }
-if(!_38e){
-var _38e=false;
+if(!_38b){
+var _38b=false;
 }
-_38c=dojo.event.browser.normalizedEventName(_38c);
-if((_38c=="onkey")||(_38c=="key")){
+_389=dojo.event.browser.normalizedEventName(_389);
+if(_389=="key"){
 if(dojo.render.html.ie){
-this.addListener(node,"onkeydown",fp,_38e,_38f);
+this.addListener(node,"onkeydown",fp,_38b,_38c);
 }
-_38c="onkeypress";
+_389="keypress";
 }
-if(_38c.substr(0,2)!="on"){
-_38c="on"+_38c;
-}
-if(!_38f){
-var _390=function(evt){
+if(!_38c){
+var _38d=function(evt){
 if(!evt){
 evt=window.event;
 }
 var ret=fp(dojo.event.browser.fixEvent(evt,this));
-if(_38e){
+if(_38b){
 dojo.event.browser.stopEvent(evt);
 }
 return ret;
 };
 }else{
-_390=fp;
+_38d=fp;
 }
 if(node.addEventListener){
-node.addEventListener(_38c.substr(2),_390,_38e);
-return _390;
+node.addEventListener(_389,_38d,_38b);
+return _38d;
 }else{
-if(typeof node[_38c]=="function"){
-var _393=node[_38c];
-node[_38c]=function(e){
-_393(e);
-return _390(e);
+_389="on"+_389;
+if(typeof node[_389]=="function"){
+var _390=node[_389];
+node[_389]=function(e){
+_390(e);
+return _38d(e);
 };
 }else{
-node[_38c]=_390;
+node[_389]=_38d;
 }
 if(dojo.render.html.ie){
-this.addClobberNodeAttrs(node,[_38c]);
+this.addClobberNodeAttrs(node,[_389]);
 }
-return _390;
+return _38d;
 }
 };
 this.isEvent=function(obj){
 return (typeof obj!="undefined")&&(obj)&&(typeof Event!="undefined")&&(obj.eventPhase);
 };
 this.currentEvent=null;
-this.callListener=function(_396,_397){
-if(typeof _396!="function"){
-dojo.raise("listener not a function: "+_396);
+this.callListener=function(_393,_394){
+if(typeof _393!="function"){
+dojo.raise("listener not a function: "+_393);
 }
-dojo.event.browser.currentEvent.currentTarget=_397;
-return _396.call(_397,dojo.event.browser.currentEvent);
+dojo.event.browser.currentEvent.currentTarget=_394;
+return _393.call(_394,dojo.event.browser.currentEvent);
 };
 this._stopPropagation=function(){
 dojo.event.browser.currentEvent.cancelBubble=true;
@@ -3899,7 +3871,7 @@
 for(var key in this.keys){
 this.revKeys[this.keys[key]]=key;
 }
-this.fixEvent=function(evt,_39a){
+this.fixEvent=function(evt,_397){
 if(!evt){
 if(window["event"]){
 evt=window.event;
@@ -3976,14 +3948,14 @@
 break;
 default:
 if(evt.ctrlKey||evt.altKey){
-var _39c=evt.keyCode;
-if(_39c>=65&&_39c<=90&&evt.shiftKey==false){
-_39c+=32;
+var _399=evt.keyCode;
+if(_399>=65&&_399<=90&&evt.shiftKey==false){
+_399+=32;
 }
-if(_39c>=1&&_39c<=26&&evt.ctrlKey){
-_39c+=96;
+if(_399>=1&&_399<=26&&evt.ctrlKey){
+_399+=96;
 }
-evt.key=String.fromCharCode(_39c);
+evt.key=String.fromCharCode(_399);
 }
 }
 }else{
@@ -4009,11 +3981,11 @@
 evt.key=evt.which;
 break;
 default:
-var _39c=evt.which;
+var _399=evt.which;
 if((evt.ctrlKey||evt.altKey||evt.metaKey)&&(evt.which>=65&&evt.which<=90&&evt.shiftKey==false)){
-_39c+=32;
+_399+=32;
 }
-evt.key=String.fromCharCode(_39c);
+evt.key=String.fromCharCode(_399);
 }
 }
 }
@@ -4118,7 +4090,7 @@
 evt.target=evt.srcElement;
 }
 if(!evt.currentTarget){
-evt.currentTarget=(_39a?_39a:evt.srcElement);
+evt.currentTarget=(_397?_397:evt.srcElement);
 }
 if(!evt.layerX){
 evt.layerX=evt.offsetX;
@@ -4127,12 +4099,12 @@
 evt.layerY=evt.offsetY;
 }
 var doc=(evt.srcElement&&evt.srcElement.ownerDocument)?evt.srcElement.ownerDocument:document;
-var _39e=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
+var _39b=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
 if(!evt.pageX){
-evt.pageX=evt.clientX+(_39e.scrollLeft||0);
+evt.pageX=evt.clientX+(_39b.scrollLeft||0);
 }
 if(!evt.pageY){
-evt.pageY=evt.clientY+(_39e.scrollTop||0);
+evt.pageY=evt.clientY+(_39b.scrollTop||0);
 }
 if(evt.type=="mouseover"){
 evt.relatedTarget=evt.fromElement;
@@ -4157,6 +4129,7 @@
 }
 };
 };
+dojo.kwCompoundRequire({common:["dojo.event.common","dojo.event.topic"],browser:["dojo.event.browser"],dashboard:["dojo.event.browser"]});
 dojo.provide("dojo.event.*");
 dojo.provide("dojo.gfx.color");
 dojo.gfx.color.Color=function(r,g,b,a){
@@ -4190,8 +4163,8 @@
 dojo.gfx.color.Color.fromArray=function(arr){
 return new dojo.gfx.color.Color(arr[0],arr[1],arr[2],arr[3]);
 };
-dojo.extend(dojo.gfx.color.Color,{toRgb:function(_3a6){
-if(_3a6){
+dojo.extend(dojo.gfx.color.Color,{toRgb:function(_3a3){
+if(_3a3){
 return this.toRgba();
 }else{
 return [this.r,this.g,this.b];
@@ -4204,62 +4177,62 @@
 return "rgb("+this.toRgb().join()+")";
 },toString:function(){
 return this.toHex();
-},blend:function(_3a7,_3a8){
+},blend:function(_3a4,_3a5){
 var rgb=null;
-if(dojo.lang.isArray(_3a7)){
-rgb=_3a7;
+if(dojo.lang.isArray(_3a4)){
+rgb=_3a4;
 }else{
-if(_3a7 instanceof dojo.gfx.color.Color){
-rgb=_3a7.toRgb();
+if(_3a4 instanceof dojo.gfx.color.Color){
+rgb=_3a4.toRgb();
 }else{
-rgb=new dojo.gfx.color.Color(_3a7).toRgb();
+rgb=new dojo.gfx.color.Color(_3a4).toRgb();
 }
 }
-return dojo.gfx.color.blend(this.toRgb(),rgb,_3a8);
+return dojo.gfx.color.blend(this.toRgb(),rgb,_3a5);
 }});
 dojo.gfx.color.named={white:[255,255,255],black:[0,0,0],red:[255,0,0],green:[0,255,0],lime:[0,255,0],blue:[0,0,255],navy:[0,0,128],gray:[128,128,128],silver:[192,192,192]};
-dojo.gfx.color.blend=function(a,b,_3ac){
+dojo.gfx.color.blend=function(a,b,_3a9){
 if(typeof a=="string"){
-return dojo.gfx.color.blendHex(a,b,_3ac);
+return dojo.gfx.color.blendHex(a,b,_3a9);
 }
-if(!_3ac){
-_3ac=0;
+if(!_3a9){
+_3a9=0;
 }
-_3ac=Math.min(Math.max(-1,_3ac),1);
-_3ac=((_3ac+1)/2);
+_3a9=Math.min(Math.max(-1,_3a9),1);
+_3a9=((_3a9+1)/2);
 var c=[];
 for(var x=0;x<3;x++){
-c[x]=parseInt(b[x]+((a[x]-b[x])*_3ac));
+c[x]=parseInt(b[x]+((a[x]-b[x])*_3a9));
 }
 return c;
 };
-dojo.gfx.color.blendHex=function(a,b,_3b1){
-return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_3b1));
+dojo.gfx.color.blendHex=function(a,b,_3ae){
+return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_3ae));
 };
-dojo.gfx.color.extractRGB=function(_3b2){
+dojo.gfx.color.extractRGB=function(_3af){
 var hex="0123456789abcdef";
-_3b2=_3b2.toLowerCase();
-if(_3b2.indexOf("rgb")==0){
-var _3b4=_3b2.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-var ret=_3b4.splice(1,3);
+_3af=_3af.toLowerCase();
+if(_3af.indexOf("rgb")==0){
+var _3b1=_3af.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
+var ret=_3b1.splice(1,3);
 return ret;
 }else{
-var _3b6=dojo.gfx.color.hex2rgb(_3b2);
-if(_3b6){
-return _3b6;
+var _3b3=dojo.gfx.color.hex2rgb(_3af);
+if(_3b3){
+return _3b3;
 }else{
-return dojo.gfx.color.named[_3b2]||[255,255,255];
+return dojo.gfx.color.named[_3af]||[255,255,255];
 }
 }
 };
 dojo.gfx.color.hex2rgb=function(hex){
-var _3b8="0123456789ABCDEF";
+var _3b5="0123456789ABCDEF";
 var rgb=new Array(3);
 if(hex.indexOf("#")==0){
 hex=hex.substring(1);
 }
 hex=hex.toUpperCase();
-if(hex.replace(new RegExp("["+_3b8+"]","g"),"")!=""){
+if(hex.replace(new RegExp("["+_3b5+"]","g"),"")!=""){
 return null;
 }
 if(hex.length==3){
@@ -4272,7 +4245,7 @@
 rgb[2]=hex.substring(4);
 }
 for(var i=0;i<rgb.length;i++){
-rgb[i]=_3b8.indexOf(rgb[i].charAt(0))*16+_3b8.indexOf(rgb[i].charAt(1));
+rgb[i]=_3b5.indexOf(rgb[i].charAt(0))*16+_3b5.indexOf(rgb[i].charAt(1));
 }
 return rgb;
 };
@@ -4294,10 +4267,10 @@
 return ret.join("");
 };
 dojo.provide("dojo.lfx.Animation");
-dojo.lfx.Line=function(_3c1,end){
-this.start=_3c1;
+dojo.lfx.Line=function(_3be,end){
+this.start=_3be;
 this.end=end;
-if(dojo.lang.isArray(_3c1)){
+if(dojo.lang.isArray(_3be)){
 var diff=[];
 dojo.lang.forEach(this.start,function(s,i){
 diff[i]=this.end[i]-s;
@@ -4310,19 +4283,21 @@
 return res;
 };
 }else{
-var diff=end-_3c1;
+var diff=end-_3be;
 this.getValue=function(n){
 return (diff*n)+this.start;
 };
 }
 };
+if((dojo.render.html.khtml)&&(!dojo.render.html.safari)){
 dojo.lfx.easeDefault=function(n){
-if(dojo.render.html.khtml){
 return (parseFloat("0.5")+((Math.sin((n+parseFloat("1.5"))*Math.PI))/2));
+};
 }else{
+dojo.lfx.easeDefault=function(n){
 return (0.5+((Math.sin((n+1.5)*Math.PI))/2));
-}
 };
+}
 dojo.lfx.easeIn=function(n){
 return Math.pow(n,3);
 };
@@ -4334,17 +4309,17 @@
 };
 dojo.lfx.IAnimation=function(){
 };
-dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:25,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,connect:function(evt,_3d0,_3d1){
-if(!_3d1){
-_3d1=_3d0;
-_3d0=this;
+dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:10,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,connect:function(evt,_3ce,_3cf){
+if(!_3cf){
+_3cf=_3ce;
+_3ce=this;
 }
-_3d1=dojo.lang.hitch(_3d0,_3d1);
-var _3d2=this[evt]||function(){
+_3cf=dojo.lang.hitch(_3ce,_3cf);
+var _3d0=this[evt]||function(){
 };
 this[evt]=function(){
-var ret=_3d2.apply(this,arguments);
-_3d1.apply(this,arguments);
+var ret=_3d0.apply(this,arguments);
+_3cf.apply(this,arguments);
 return ret;
 };
 return this;
@@ -4353,57 +4328,57 @@
 this[evt].apply(this,(args||[]));
 }
 return this;
-},repeat:function(_3d6){
-this.repeatCount=_3d6;
+},repeat:function(_3d4){
+this.repeatCount=_3d4;
 return this;
 },_active:false,_paused:false});
-dojo.lfx.Animation=function(_3d7,_3d8,_3d9,_3da,_3db,rate){
+dojo.lfx.Animation=function(_3d5,_3d6,_3d7,_3d8,_3d9,rate){
 dojo.lfx.IAnimation.call(this);
-if(dojo.lang.isNumber(_3d7)||(!_3d7&&_3d8.getValue)){
-rate=_3db;
-_3db=_3da;
-_3da=_3d9;
+if(dojo.lang.isNumber(_3d5)||(!_3d5&&_3d6.getValue)){
+rate=_3d9;
 _3d9=_3d8;
 _3d8=_3d7;
-_3d7=null;
+_3d7=_3d6;
+_3d6=_3d5;
+_3d5=null;
 }else{
-if(_3d7.getValue||dojo.lang.isArray(_3d7)){
-rate=_3da;
-_3db=_3d9;
-_3da=_3d8;
+if(_3d5.getValue||dojo.lang.isArray(_3d5)){
+rate=_3d8;
 _3d9=_3d7;
-_3d8=null;
-_3d7=null;
+_3d8=_3d6;
+_3d7=_3d5;
+_3d6=null;
+_3d5=null;
 }
 }
-if(dojo.lang.isArray(_3d9)){
-this.curve=new dojo.lfx.Line(_3d9[0],_3d9[1]);
+if(dojo.lang.isArray(_3d7)){
+this.curve=new dojo.lfx.Line(_3d7[0],_3d7[1]);
 }else{
-this.curve=_3d9;
+this.curve=_3d7;
 }
-if(_3d8!=null&&_3d8>0){
-this.duration=_3d8;
+if(_3d6!=null&&_3d6>0){
+this.duration=_3d6;
 }
-if(_3db){
-this.repeatCount=_3db;
+if(_3d9){
+this.repeatCount=_3d9;
 }
 if(rate){
 this.rate=rate;
 }
-if(_3d7){
+if(_3d5){
 dojo.lang.forEach(["handler","beforeBegin","onBegin","onEnd","onPlay","onStop","onAnimate"],function(item){
-if(_3d7[item]){
-this.connect(item,_3d7[item]);
+if(_3d5[item]){
+this.connect(item,_3d5[item]);
 }
 },this);
 }
-if(_3da&&dojo.lang.isFunction(_3da)){
-this.easing=_3da;
+if(_3d8&&dojo.lang.isFunction(_3d8)){
+this.easing=_3d8;
 }
 };
 dojo.inherits(dojo.lfx.Animation,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_3de,_3df){
-if(_3df){
+dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_3dc,_3dd){
+if(_3dd){
 clearTimeout(this._timer);
 this._active=false;
 this._paused=false;
@@ -4415,10 +4390,10 @@
 }
 this.fire("handler",["beforeBegin"]);
 this.fire("beforeBegin");
-if(_3de>0){
+if(_3dc>0){
 setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_3df);
-}),_3de);
+this.play(null,_3dd);
+}),_3dc);
 return this;
 }
 this._startTime=new Date().valueOf();
@@ -4429,16 +4404,16 @@
 this._active=true;
 this._paused=false;
 var step=this._percent/100;
-var _3e1=this.curve.getValue(step);
+var _3df=this.curve.getValue(step);
 if(this._percent==0){
 if(!this._startRepeatCount){
 this._startRepeatCount=this.repeatCount;
 }
-this.fire("handler",["begin",_3e1]);
-this.fire("onBegin",[_3e1]);
+this.fire("handler",["begin",_3df]);
+this.fire("onBegin",[_3df]);
 }
-this.fire("handler",["play",_3e1]);
-this.fire("onPlay",[_3e1]);
+this.fire("handler",["play",_3df]);
+this.fire("onPlay",[_3df]);
 this._cycle();
 return this;
 },pause:function(){
@@ -4447,28 +4422,28 @@
 return this;
 }
 this._paused=true;
-var _3e2=this.curve.getValue(this._percent/100);
-this.fire("handler",["pause",_3e2]);
-this.fire("onPause",[_3e2]);
+var _3e0=this.curve.getValue(this._percent/100);
+this.fire("handler",["pause",_3e0]);
+this.fire("onPause",[_3e0]);
 return this;
-},gotoPercent:function(pct,_3e4){
+},gotoPercent:function(pct,_3e2){
 clearTimeout(this._timer);
 this._active=true;
 this._paused=true;
 this._percent=pct;
-if(_3e4){
+if(_3e2){
 this.play();
 }
 return this;
-},stop:function(_3e5){
+},stop:function(_3e3){
 clearTimeout(this._timer);
 var step=this._percent/100;
-if(_3e5){
+if(_3e3){
 step=1;
 }
-var _3e7=this.curve.getValue(step);
-this.fire("handler",["stop",_3e7]);
-this.fire("onStop",[_3e7]);
+var _3e5=this.curve.getValue(step);
+this.fire("handler",["stop",_3e5]);
+this.fire("onStop",[_3e5]);
 this._active=false;
 this._paused=false;
 return this;
@@ -4493,9 +4468,9 @@
 if((this.easing)&&(dojo.lang.isFunction(this.easing))){
 step=this.easing(step);
 }
-var _3ea=this.curve.getValue(step);
-this.fire("handler",["animate",_3ea]);
-this.fire("onAnimate",[_3ea]);
+var _3e8=this.curve.getValue(step);
+this.fire("handler",["animate",_3e8]);
+this.fire("onAnimate",[_3e8]);
 if(step<1){
 this._timer=setTimeout(dojo.lang.hitch(this,"_cycle"),this.rate);
 }else{
@@ -4519,44 +4494,44 @@
 }
 return this;
 }});
-dojo.lfx.Combine=function(_3eb){
+dojo.lfx.Combine=function(_3e9){
 dojo.lfx.IAnimation.call(this);
 this._anims=[];
 this._animsEnded=0;
-var _3ec=arguments;
-if(_3ec.length==1&&(dojo.lang.isArray(_3ec[0])||dojo.lang.isArrayLike(_3ec[0]))){
-_3ec=_3ec[0];
+var _3ea=arguments;
+if(_3ea.length==1&&(dojo.lang.isArray(_3ea[0])||dojo.lang.isArrayLike(_3ea[0]))){
+_3ea=_3ea[0];
 }
-dojo.lang.forEach(_3ec,function(anim){
+dojo.lang.forEach(_3ea,function(anim){
 this._anims.push(anim);
 anim.connect("onEnd",dojo.lang.hitch(this,"_onAnimsEnded"));
 },this);
 };
 dojo.inherits(dojo.lfx.Combine,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_3ee,_3ef){
+dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_3ec,_3ed){
 if(!this._anims.length){
 return this;
 }
 this.fire("beforeBegin");
-if(_3ee>0){
+if(_3ec>0){
 setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_3ef);
-}),_3ee);
+this.play(null,_3ed);
+}),_3ec);
 return this;
 }
-if(_3ef||this._anims[0].percent==0){
+if(_3ed||this._anims[0].percent==0){
 this.fire("onBegin");
 }
 this.fire("onPlay");
-this._animsCall("play",null,_3ef);
+this._animsCall("play",null,_3ed);
 return this;
 },pause:function(){
 this.fire("onPause");
 this._animsCall("pause");
 return this;
-},stop:function(_3f0){
+},stop:function(_3ee){
 this.fire("onStop");
-this._animsCall("stop",_3f0);
+this._animsCall("stop",_3ee);
 return this;
 },_onAnimsEnded:function(){
 this._animsEnded++;
@@ -4564,31 +4539,31 @@
 this.fire("onEnd");
 }
 return this;
-},_animsCall:function(_3f1){
+},_animsCall:function(_3ef){
 var args=[];
 if(arguments.length>1){
 for(var i=1;i<arguments.length;i++){
 args.push(arguments[i]);
 }
 }
-var _3f4=this;
+var _3f2=this;
 dojo.lang.forEach(this._anims,function(anim){
-anim[_3f1](args);
-},_3f4);
+anim[_3ef](args);
+},_3f2);
 return this;
 }});
-dojo.lfx.Chain=function(_3f6){
+dojo.lfx.Chain=function(_3f4){
 dojo.lfx.IAnimation.call(this);
 this._anims=[];
 this._currAnim=-1;
-var _3f7=arguments;
-if(_3f7.length==1&&(dojo.lang.isArray(_3f7[0])||dojo.lang.isArrayLike(_3f7[0]))){
-_3f7=_3f7[0];
+var _3f5=arguments;
+if(_3f5.length==1&&(dojo.lang.isArray(_3f5[0])||dojo.lang.isArrayLike(_3f5[0]))){
+_3f5=_3f5[0];
 }
-var _3f8=this;
-dojo.lang.forEach(_3f7,function(anim,i,_3fb){
+var _3f6=this;
+dojo.lang.forEach(_3f5,function(anim,i,_3f9){
 this._anims.push(anim);
-if(i<_3fb.length-1){
+if(i<_3f9.length-1){
 anim.connect("onEnd",dojo.lang.hitch(this,"_playNext"));
 }else{
 anim.connect("onEnd",dojo.lang.hitch(this,function(){
@@ -4598,28 +4573,28 @@
 },this);
 };
 dojo.inherits(dojo.lfx.Chain,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_3fc,_3fd){
+dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_3fa,_3fb){
 if(!this._anims.length){
 return this;
 }
-if(_3fd||!this._anims[this._currAnim]){
+if(_3fb||!this._anims[this._currAnim]){
 this._currAnim=0;
 }
-var _3fe=this._anims[this._currAnim];
+var _3fc=this._anims[this._currAnim];
 this.fire("beforeBegin");
-if(_3fc>0){
+if(_3fa>0){
 setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_3fd);
-}),_3fc);
+this.play(null,_3fb);
+}),_3fa);
 return this;
 }
-if(_3fe){
+if(_3fc){
 if(this._currAnim==0){
 this.fire("handler",["begin",this._currAnim]);
 this.fire("onBegin",[this._currAnim]);
 }
 this.fire("onPlay",[this._currAnim]);
-_3fe.play(null,_3fd);
+_3fc.play(null,_3fb);
 }
 return this;
 },pause:function(){
@@ -4635,9 +4610,9 @@
 if(this._currAnim==-1){
 this._currAnim=0;
 }
-var _3ff=this._anims[this._currAnim];
-if(_3ff){
-if(!_3ff._active||_3ff._paused){
+var _3fd=this._anims[this._currAnim];
+if(_3fd){
+if(!_3fd._active||_3fd._paused){
 this.play();
 }else{
 this.pause();
@@ -4645,12 +4620,12 @@
 }
 return this;
 },stop:function(){
-var _400=this._anims[this._currAnim];
-if(_400){
-_400.stop();
+var _3fe=this._anims[this._currAnim];
+if(_3fe){
+_3fe.stop();
 this.fire("onStop",[this._currAnim]);
 }
-return _400;
+return _3fe;
 },_playNext:function(){
 if(this._currAnim==-1||this._anims.length==0){
 return this;
@@ -4661,7 +4636,17 @@
 }
 return this;
 }});
-dojo.lfx.combine=function(_401){
+dojo.lfx.combine=function(_3ff){
+var _400=arguments;
+if(dojo.lang.isArray(arguments[0])){
+_400=arguments[0];
+}
+if(_400.length==1){
+return _400[0];
+}
+return new dojo.lfx.Combine(_400);
+};
+dojo.lfx.chain=function(_401){
 var _402=arguments;
 if(dojo.lang.isArray(arguments[0])){
 _402=arguments[0];
@@ -4669,18 +4654,8 @@
 if(_402.length==1){
 return _402[0];
 }
-return new dojo.lfx.Combine(_402);
+return new dojo.lfx.Chain(_402);
 };
-dojo.lfx.chain=function(_403){
-var _404=arguments;
-if(dojo.lang.isArray(arguments[0])){
-_404=arguments[0];
-}
-if(_404.length==1){
-return _404[0];
-}
-return new dojo.lfx.Chain(_404);
-};
 dojo.provide("dojo.html.common");
 dojo.lang.mixin(dojo.html,dojo.dom);
 dojo.html.body=function(){
@@ -4698,24 +4673,24 @@
 return t;
 };
 dojo.html.getViewport=function(){
-var _407=dojo.global();
-var _408=dojo.doc();
+var _405=dojo.global();
+var _406=dojo.doc();
 var w=0;
 var h=0;
 if(dojo.render.html.mozilla){
-w=_408.documentElement.clientWidth;
-h=_407.innerHeight;
+w=_406.documentElement.clientWidth;
+h=_405.innerHeight;
 }else{
-if(!dojo.render.html.opera&&_407.innerWidth){
-w=_407.innerWidth;
-h=_407.innerHeight;
+if(!dojo.render.html.opera&&_405.innerWidth){
+w=_405.innerWidth;
+h=_405.innerHeight;
 }else{
-if(!dojo.render.html.opera&&dojo.exists(_408,"documentElement.clientWidth")){
-var w2=_408.documentElement.clientWidth;
+if(!dojo.render.html.opera&&dojo.exists(_406,"documentElement.clientWidth")){
+var w2=_406.documentElement.clientWidth;
 if(!w||w2&&w2<w){
 w=w2;
 }
-h=_408.documentElement.clientHeight;
+h=_406.documentElement.clientHeight;
 }else{
 if(dojo.body().clientWidth){
 w=dojo.body().clientWidth;
@@ -4727,23 +4702,23 @@
 return {width:w,height:h};
 };
 dojo.html.getScroll=function(){
-var _40c=dojo.global();
-var _40d=dojo.doc();
-var top=_40c.pageYOffset||_40d.documentElement.scrollTop||dojo.body().scrollTop||0;
-var left=_40c.pageXOffset||_40d.documentElement.scrollLeft||dojo.body().scrollLeft||0;
+var _40a=dojo.global();
+var _40b=dojo.doc();
+var top=_40a.pageYOffset||_40b.documentElement.scrollTop||dojo.body().scrollTop||0;
+var left=_40a.pageXOffset||_40b.documentElement.scrollLeft||dojo.body().scrollLeft||0;
 return {top:top,left:left,offset:{x:left,y:top}};
 };
 dojo.html.getParentByType=function(node,type){
-var _412=dojo.doc();
-var _413=dojo.byId(node);
+var _410=dojo.doc();
+var _411=dojo.byId(node);
 type=type.toLowerCase();
-while((_413)&&(_413.nodeName.toLowerCase()!=type)){
-if(_413==(_412["body"]||_412["documentElement"])){
+while((_411)&&(_411.nodeName.toLowerCase()!=type)){
+if(_411==(_410["body"]||_410["documentElement"])){
 return null;
 }
-_413=_413.parentNode;
+_411=_411.parentNode;
 }
-return _413;
+return _411;
 };
 dojo.html.getAttribute=function(node,attr){
 node=dojo.byId(node);
@@ -4776,17 +4751,17 @@
 };
 dojo.html.getCursorPosition=function(e){
 e=e||dojo.global().event;
-var _41b={x:0,y:0};
+var _419={x:0,y:0};
 if(e.pageX||e.pageY){
-_41b.x=e.pageX;
-_41b.y=e.pageY;
+_419.x=e.pageX;
+_419.y=e.pageY;
 }else{
 var de=dojo.doc().documentElement;
 var db=dojo.body();
-_41b.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
-_41b.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
+_419.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
+_419.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
 }
-return _41b;
+return _419;
 };
 dojo.html.isTag=function(node){
 node=dojo.byId(node);
@@ -4802,9 +4777,9 @@
 if(dojo.render.html.ie&&!dojo.render.html.ie70){
 if(window.location.href.substr(0,6).toLowerCase()!="https:"){
 (function(){
-var _420=dojo.doc().createElement("script");
-_420.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
-dojo.doc().getElementsByTagName("head")[0].appendChild(_420);
+var _41e=dojo.doc().createElement("script");
+_41e.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
+dojo.doc().getElementsByTagName("head")[0].appendChild(_41e);
 })();
 }
 }else{
@@ -4812,20 +4787,20 @@
 return doc.createElement(tag);
 };
 }
-dojo.html._callDeprecated=function(_423,_424,args,_426,_427){
-dojo.deprecated("dojo.html."+_423,"replaced by dojo.html."+_424+"("+(_426?"node, {"+_426+": "+_426+"}":"")+")"+(_427?"."+_427:""),"0.5");
-var _428=[];
-if(_426){
-var _429={};
-_429[_426]=args[1];
-_428.push(args[0]);
-_428.push(_429);
+dojo.html._callDeprecated=function(_421,_422,args,_424,_425){
+dojo.deprecated("dojo.html."+_421,"replaced by dojo.html."+_422+"("+(_424?"node, {"+_424+": "+_424+"}":"")+")"+(_425?"."+_425:""),"0.5");
+var _426=[];
+if(_424){
+var _427={};
+_427[_424]=args[1];
+_426.push(args[0]);
+_426.push(_427);
 }else{
-_428=args;
+_426=args;
 }
-var ret=dojo.html[_424].apply(dojo.html,args);
-if(_427){
-return ret[_427];
+var ret=dojo.html[_422].apply(dojo.html,args);
+if(_425){
+return ret[_425];
 }else{
 return ret;
 }
@@ -4853,15 +4828,20 @@
 this.dojoUri=function(uri){
 return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(),uri);
 };
-this.moduleUri=function(_42c,uri){
-var loc=dojo.hostenv.getModuleSymbols(_42c).join("/");
+this.moduleUri=function(_42a,uri){
+var loc=dojo.hostenv.getModuleSymbols(_42a).join("/");
 if(!loc){
 return null;
 }
 if(loc.lastIndexOf("/")!=loc.length-1){
 loc+="/";
 }
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri()+loc,uri);
+var _42d=loc.indexOf(":");
+var _42e=loc.indexOf("/");
+if(loc.charAt(0)!="/"&&(_42d==-1||_42d>_42e)){
+loc=dojo.hostenv.getBaseScriptUri()+loc;
+}
+return new dojo.uri.Uri(loc,uri);
 };
 this.Uri=function(){
 var uri=arguments[0];
@@ -5105,101 +5085,114 @@
 dojo.html.toSelectorCase=function(_463){
 return _463.replace(/([A-Z])/g,"-$1").toLowerCase();
 };
+if(dojo.render.html.ie){
 dojo.html.getComputedStyle=function(node,_465,_466){
 node=dojo.byId(node);
-var _465=dojo.html.toSelectorCase(_465);
-var _467=dojo.html.toCamelCase(_465);
 if(!node||!node.style){
 return _466;
-}else{
-if(document.defaultView&&dojo.html.isDescendantOf(node,node.ownerDocument)){
-try{
-var cs=document.defaultView.getComputedStyle(node,"");
-if(cs){
-return cs.getPropertyValue(_465);
 }
-}
-catch(e){
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_465);
+return node.currentStyle[dojo.html.toCamelCase(_465)];
+};
+dojo.html.getComputedStyles=function(node){
+return node.currentStyle;
+};
 }else{
-return _466;
+dojo.html.getComputedStyle=function(node,_469,_46a){
+node=dojo.byId(node);
+if(!node||!node.style){
+return _46a;
 }
-}
-}else{
-if(node.currentStyle){
-return node.currentStyle[_467];
-}
-}
-}
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_465);
-}else{
-return _466;
-}
+var s=document.defaultView.getComputedStyle(node,null);
+return (s&&s[dojo.html.toCamelCase(_469)])||"";
 };
-dojo.html.getStyleProperty=function(node,_46a){
+dojo.html.getComputedStyles=function(node){
+return document.defaultView.getComputedStyle(node,null);
+};
+}
+dojo.html.getStyleProperty=function(node,_46e){
 node=dojo.byId(node);
-return (node&&node.style?node.style[dojo.html.toCamelCase(_46a)]:undefined);
+return (node&&node.style?node.style[dojo.html.toCamelCase(_46e)]:undefined);
 };
-dojo.html.getStyle=function(node,_46c){
-var _46d=dojo.html.getStyleProperty(node,_46c);
-return (_46d?_46d:dojo.html.getComputedStyle(node,_46c));
+dojo.html.getStyle=function(node,_470){
+var _471=dojo.html.getStyleProperty(node,_470);
+return (_471?_471:dojo.html.getComputedStyle(node,_470));
 };
-dojo.html.setStyle=function(node,_46f,_470){
+dojo.html.setStyle=function(node,_473,_474){
 node=dojo.byId(node);
 if(node&&node.style){
-var _471=dojo.html.toCamelCase(_46f);
-node.style[_471]=_470;
+var _475=dojo.html.toCamelCase(_473);
+node.style[_475]=_474;
 }
 };
-dojo.html.setStyleText=function(_472,text){
+dojo.html.setStyleText=function(_476,text){
 try{
-_472.style.cssText=text;
+_476.style.cssText=text;
 }
 catch(e){
-_472.setAttribute("style",text);
+_476.setAttribute("style",text);
 }
 };
-dojo.html.copyStyle=function(_474,_475){
-if(!_475.style.cssText){
-_474.setAttribute("style",_475.getAttribute("style"));
+dojo.html.copyStyle=function(_478,_479){
+if(!_479.style.cssText){
+_478.setAttribute("style",_479.getAttribute("style"));
 }else{
-_474.style.cssText=_475.style.cssText;
+_478.style.cssText=_479.style.cssText;
 }
-dojo.html.addClass(_474,dojo.html.getClass(_475));
+dojo.html.addClass(_478,dojo.html.getClass(_479));
 };
-dojo.html.getUnitValue=function(node,_477,_478){
-var s=dojo.html.getComputedStyle(node,_477);
-if((!s)||((s=="auto")&&(_478))){
+dojo.html.getUnitValue=function(node,_47b,_47c){
+var s=dojo.html.getComputedStyle(node,_47b);
+if((!s)||((s=="auto")&&(_47c))){
 return {value:0,units:"px"};
 }
-var _47a=s.match(/(\-?[\d.]+)([a-z%]*)/i);
-if(!_47a){
+var _47e=s.match(/(\-?[\d.]+)([a-z%]*)/i);
+if(!_47e){
 return dojo.html.getUnitValue.bad;
 }
-return {value:Number(_47a[1]),units:_47a[2].toLowerCase()};
+return {value:Number(_47e[1]),units:_47e[2].toLowerCase()};
 };
 dojo.html.getUnitValue.bad={value:NaN,units:""};
-dojo.html.getPixelValue=function(node,_47c,_47d){
-var _47e=dojo.html.getUnitValue(node,_47c,_47d);
-if(isNaN(_47e.value)){
+if(dojo.render.html.ie){
+dojo.html.toPixelValue=function(_47f,_480){
+if(!_480){
 return 0;
 }
-if((_47e.value)&&(_47e.units!="px")){
-return NaN;
+if(_480.slice(-2)=="px"){
+return parseFloat(_480);
 }
-return _47e.value;
+var _481=0;
+with(_47f){
+var _482=style.left;
+var _483=runtimeStyle.left;
+runtimeStyle.left=currentStyle.left;
+try{
+style.left=_480||0;
+_481=style.pixelLeft;
+style.left=_482;
+runtimeStyle.left=_483;
+}
+catch(e){
+}
+}
+return _481;
 };
-dojo.html.setPositivePixelValue=function(node,_480,_481){
-if(isNaN(_481)){
+}else{
+dojo.html.toPixelValue=function(_484,_485){
+return (_485&&(_485.slice(-2)=="px")?parseFloat(_485):0);
+};
+}
+dojo.html.getPixelValue=function(node,_487,_488){
+return dojo.html.toPixelValue(node,dojo.html.getComputedStyle(node,_487));
+};
+dojo.html.setPositivePixelValue=function(node,_48a,_48b){
+if(isNaN(_48b)){
 return false;
 }
-node.style[_480]=Math.max(0,_481)+"px";
+node.style[_48a]=Math.max(0,_48b)+"px";
 return true;
 };
 dojo.html.styleSheet=null;
-dojo.html.insertCssRule=function(_482,_483,_484){
+dojo.html.insertCssRule=function(_48c,_48d,_48e){
 if(!dojo.html.styleSheet){
 if(document.createStyleSheet){
 dojo.html.styleSheet=document.createStyleSheet();
@@ -5213,161 +5206,161 @@
 }
 if(arguments.length<3){
 if(dojo.html.styleSheet.cssRules){
-_484=dojo.html.styleSheet.cssRules.length;
+_48e=dojo.html.styleSheet.cssRules.length;
 }else{
 if(dojo.html.styleSheet.rules){
-_484=dojo.html.styleSheet.rules.length;
+_48e=dojo.html.styleSheet.rules.length;
 }else{
 return null;
 }
 }
 }
 if(dojo.html.styleSheet.insertRule){
-var rule=_482+" { "+_483+" }";
-return dojo.html.styleSheet.insertRule(rule,_484);
+var rule=_48c+" { "+_48d+" }";
+return dojo.html.styleSheet.insertRule(rule,_48e);
 }else{
 if(dojo.html.styleSheet.addRule){
-return dojo.html.styleSheet.addRule(_482,_483,_484);
+return dojo.html.styleSheet.addRule(_48c,_48d,_48e);
 }else{
 return null;
 }
 }
 };
-dojo.html.removeCssRule=function(_486){
+dojo.html.removeCssRule=function(_490){
 if(!dojo.html.styleSheet){
 dojo.debug("no stylesheet defined for removing rules");
 return false;
 }
 if(dojo.render.html.ie){
-if(!_486){
-_486=dojo.html.styleSheet.rules.length;
-dojo.html.styleSheet.removeRule(_486);
+if(!_490){
+_490=dojo.html.styleSheet.rules.length;
+dojo.html.styleSheet.removeRule(_490);
 }
 }else{
 if(document.styleSheets[0]){
-if(!_486){
-_486=dojo.html.styleSheet.cssRules.length;
+if(!_490){
+_490=dojo.html.styleSheet.cssRules.length;
 }
-dojo.html.styleSheet.deleteRule(_486);
+dojo.html.styleSheet.deleteRule(_490);
 }
 }
 return true;
 };
 dojo.html._insertedCssFiles=[];
-dojo.html.insertCssFile=function(URI,doc,_489,_48a){
+dojo.html.insertCssFile=function(URI,doc,_493,_494){
 if(!URI){
 return;
 }
 if(!doc){
 doc=document;
 }
-var _48b=dojo.hostenv.getText(URI,false,_48a);
-if(_48b===null){
+var _495=dojo.hostenv.getText(URI,false,_494);
+if(_495===null){
 return;
 }
-_48b=dojo.html.fixPathsInCssText(_48b,URI);
-if(_489){
+_495=dojo.html.fixPathsInCssText(_495,URI);
+if(_493){
 var idx=-1,node,ent=dojo.html._insertedCssFiles;
 for(var i=0;i<ent.length;i++){
-if((ent[i].doc==doc)&&(ent[i].cssText==_48b)){
+if((ent[i].doc==doc)&&(ent[i].cssText==_495)){
 idx=i;
 node=ent[i].nodeRef;
 break;
 }
 }
 if(node){
-var _490=doc.getElementsByTagName("style");
-for(var i=0;i<_490.length;i++){
-if(_490[i]==node){
+var _49a=doc.getElementsByTagName("style");
+for(var i=0;i<_49a.length;i++){
+if(_49a[i]==node){
 return;
 }
 }
 dojo.html._insertedCssFiles.shift(idx,1);
 }
 }
-var _491=dojo.html.insertCssText(_48b,doc);
-dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_48b,"nodeRef":_491});
-if(_491&&djConfig.isDebug){
-_491.setAttribute("dbgHref",URI);
+var _49b=dojo.html.insertCssText(_495,doc);
+dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_495,"nodeRef":_49b});
+if(_49b&&djConfig.isDebug){
+_49b.setAttribute("dbgHref",URI);
 }
-return _491;
+return _49b;
 };
-dojo.html.insertCssText=function(_492,doc,URI){
-if(!_492){
+dojo.html.insertCssText=function(_49c,doc,URI){
+if(!_49c){
 return;
 }
 if(!doc){
 doc=document;
 }
 if(URI){
-_492=dojo.html.fixPathsInCssText(_492,URI);
+_49c=dojo.html.fixPathsInCssText(_49c,URI);
 }
-var _495=doc.createElement("style");
-_495.setAttribute("type","text/css");
+var _49f=doc.createElement("style");
+_49f.setAttribute("type","text/css");
 var head=doc.getElementsByTagName("head")[0];
 if(!head){
 dojo.debug("No head tag in document, aborting styles");
 return;
 }else{
-head.appendChild(_495);
+head.appendChild(_49f);
 }
-if(_495.styleSheet){
-var _497=function(){
+if(_49f.styleSheet){
+var _4a1=function(){
 try{
-_495.styleSheet.cssText=_492;
+_49f.styleSheet.cssText=_49c;
 }
 catch(e){
 dojo.debug(e);
 }
 };
-if(_495.styleSheet.disabled){
-setTimeout(_497,10);
+if(_49f.styleSheet.disabled){
+setTimeout(_4a1,10);
 }else{
-_497();
+_4a1();
 }
 }else{
-var _498=doc.createTextNode(_492);
-_495.appendChild(_498);
+var _4a2=doc.createTextNode(_49c);
+_49f.appendChild(_4a2);
 }
-return _495;
+return _49f;
 };
-dojo.html.fixPathsInCssText=function(_499,URI){
-if(!_499||!URI){
+dojo.html.fixPathsInCssText=function(_4a3,URI){
+if(!_4a3||!URI){
 return;
 }
-var _49b,str="",url="",_49e="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
-var _49f=new RegExp("url\\(\\s*("+_49e+")\\s*\\)");
-var _4a0=/(file|https?|ftps?):\/\//;
-regexTrim=new RegExp("^[\\s]*(['\"]?)("+_49e+")\\1[\\s]*?$");
+var _4a5,str="",url="",_4a8="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
+var _4a9=new RegExp("url\\(\\s*("+_4a8+")\\s*\\)");
+var _4aa=/(file|https?|ftps?):\/\//;
+regexTrim=new RegExp("^[\\s]*(['\"]?)("+_4a8+")\\1[\\s]*?$");
 if(dojo.render.html.ie55||dojo.render.html.ie60){
-var _4a1=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_49e+")['\"]");
-while(_49b=_4a1.exec(_499)){
-url=_49b[2].replace(regexTrim,"$2");
-if(!_4a0.exec(url)){
+var _4ab=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_4a8+")['\"]");
+while(_4a5=_4ab.exec(_4a3)){
+url=_4a5[2].replace(regexTrim,"$2");
+if(!_4aa.exec(url)){
 url=(new dojo.uri.Uri(URI,url).toString());
 }
-str+=_499.substring(0,_49b.index)+"AlphaImageLoader("+_49b[1]+"src='"+url+"'";
-_499=_499.substr(_49b.index+_49b[0].length);
+str+=_4a3.substring(0,_4a5.index)+"AlphaImageLoader("+_4a5[1]+"src='"+url+"'";
+_4a3=_4a3.substr(_4a5.index+_4a5[0].length);
 }
-_499=str+_499;
+_4a3=str+_4a3;
 str="";
 }
-while(_49b=_49f.exec(_499)){
-url=_49b[1].replace(regexTrim,"$2");
-if(!_4a0.exec(url)){
+while(_4a5=_4a9.exec(_4a3)){
+url=_4a5[1].replace(regexTrim,"$2");
+if(!_4aa.exec(url)){
 url=(new dojo.uri.Uri(URI,url).toString());
 }
-str+=_499.substring(0,_49b.index)+"url("+url+")";
-_499=_499.substr(_49b.index+_49b[0].length);
+str+=_4a3.substring(0,_4a5.index)+"url("+url+")";
+_4a3=_4a3.substr(_4a5.index+_4a5[0].length);
 }
-return str+_499;
+return str+_4a3;
 };
-dojo.html.setActiveStyleSheet=function(_4a2){
+dojo.html.setActiveStyleSheet=function(_4ac){
 var i=0,a,els=dojo.doc().getElementsByTagName("link");
 while(a=els[i++]){
 if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")){
 a.disabled=true;
-if(a.getAttribute("title")==_4a2){
+if(a.getAttribute("title")==_4ac){
 a.disabled=false;
 }
 }
@@ -5393,18 +5386,18 @@
 };
 dojo.html.applyBrowserClass=function(node){
 var drh=dojo.render.html;
-var _4ae={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
-for(var p in _4ae){
-if(_4ae[p]){
+var _4b8={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
+for(var p in _4b8){
+if(_4b8[p]){
 dojo.html.addClass(node,p);
 }
 }
 };
 dojo.provide("dojo.html.display");
-dojo.html._toggle=function(node,_4b1,_4b2){
+dojo.html._toggle=function(node,_4bb,_4bc){
 node=dojo.byId(node);
-_4b2(node,!_4b1(node));
-return _4b1(node);
+_4bc(node,!_4bb(node));
+return _4bb(node);
 };
 dojo.html.show=function(node){
 node=dojo.byId(node);
@@ -5423,8 +5416,8 @@
 }
 dojo.html.setStyle(node,"display","none");
 };
-dojo.html.setShowing=function(node,_4b7){
-dojo.html[(_4b7?"show":"hide")](node);
+dojo.html.setShowing=function(node,_4c1){
+dojo.html[(_4c1?"show":"hide")](node);
 };
 dojo.html.isShowing=function(node){
 return (dojo.html.getStyleProperty(node,"display")!="none");
@@ -5440,8 +5433,8 @@
 return (tag in dojo.html.displayMap?dojo.html.displayMap[tag]:"block");
 }
 };
-dojo.html.setDisplay=function(node,_4bd){
-dojo.html.setStyle(node,"display",((_4bd instanceof String||typeof _4bd=="string")?_4bd:(_4bd?dojo.html.suggestDisplayByTagName(node):"none")));
+dojo.html.setDisplay=function(node,_4c7){
+dojo.html.setStyle(node,"display",((_4c7 instanceof String||typeof _4c7=="string")?_4c7:(_4c7?dojo.html.suggestDisplayByTagName(node):"none")));
 };
 dojo.html.isDisplayed=function(node){
 return (dojo.html.getComputedStyle(node,"display")!="none");
@@ -5449,8 +5442,8 @@
 dojo.html.toggleDisplay=function(node){
 return dojo.html._toggle(node,dojo.html.isDisplayed,dojo.html.setDisplay);
 };
-dojo.html.setVisibility=function(node,_4c1){
-dojo.html.setStyle(node,"visibility",((_4c1 instanceof String||typeof _4c1=="string")?_4c1:(_4c1?"visible":"hidden")));
+dojo.html.setVisibility=function(node,_4cb){
+dojo.html.setStyle(node,"visibility",((_4cb instanceof String||typeof _4cb=="string")?_4cb:(_4cb?"visible":"hidden")));
 };
 dojo.html.isVisible=function(node){
 return (dojo.html.getComputedStyle(node,"visibility")!="hidden");
@@ -5458,20 +5451,20 @@
 dojo.html.toggleVisibility=function(node){
 return dojo.html._toggle(node,dojo.html.isVisible,dojo.html.setVisibility);
 };
-dojo.html.setOpacity=function(node,_4c5,_4c6){
+dojo.html.setOpacity=function(node,_4cf,_4d0){
 node=dojo.byId(node);
 var h=dojo.render.html;
-if(!_4c6){
-if(_4c5>=1){
+if(!_4d0){
+if(_4cf>=1){
 if(h.ie){
 dojo.html.clearOpacity(node);
 return;
 }else{
-_4c5=0.999999;
+_4cf=0.999999;
 }
 }else{
-if(_4c5<0){
-_4c5=0;
+if(_4cf<0){
+_4cf=0;
 }
 }
 }
@@ -5479,20 +5472,20 @@
 if(node.nodeName.toLowerCase()=="tr"){
 var tds=node.getElementsByTagName("td");
 for(var x=0;x<tds.length;x++){
-tds[x].style.filter="Alpha(Opacity="+_4c5*100+")";
+tds[x].style.filter="Alpha(Opacity="+_4cf*100+")";
 }
 }
-node.style.filter="Alpha(Opacity="+_4c5*100+")";
+node.style.filter="Alpha(Opacity="+_4cf*100+")";
 }else{
 if(h.moz){
-node.style.opacity=_4c5;
-node.style.MozOpacity=_4c5;
+node.style.opacity=_4cf;
+node.style.MozOpacity=_4cf;
 }else{
 if(h.safari){
-node.style.opacity=_4c5;
-node.style.KhtmlOpacity=_4c5;
+node.style.opacity=_4cf;
+node.style.KhtmlOpacity=_4cf;
 }else{
-node.style.opacity=_4c5;
+node.style.opacity=_4cf;
 }
 }
 }
@@ -5536,24 +5529,24 @@
 dojo.provide("dojo.html.color");
 dojo.html.getBackgroundColor=function(node){
 node=dojo.byId(node);
-var _4d1;
+var _4db;
 do{
-_4d1=dojo.html.getStyle(node,"background-color");
-if(_4d1.toLowerCase()=="rgba(0, 0, 0, 0)"){
-_4d1="transparent";
+_4db=dojo.html.getStyle(node,"background-color");
+if(_4db.toLowerCase()=="rgba(0, 0, 0, 0)"){
+_4db="transparent";
 }
 if(node==document.getElementsByTagName("body")[0]){
 node=null;
 break;
 }
 node=node.parentNode;
-}while(node&&dojo.lang.inArray(["transparent",""],_4d1));
-if(_4d1=="transparent"){
-_4d1=[255,255,255,0];
+}while(node&&dojo.lang.inArray(["transparent",""],_4db));
+if(_4db=="transparent"){
+_4db=[255,255,255,0];
 }else{
-_4d1=dojo.gfx.color.extractRGB(_4d1);
+_4db=dojo.gfx.color.extractRGB(_4db);
 }
-return _4d1;
+return _4db;
 };
 dojo.provide("dojo.html.layout");
 dojo.html.sumAncestorProperties=function(node,prop){
@@ -5561,73 +5554,73 @@
 if(!node){
 return 0;
 }
-var _4d4=0;
+var _4de=0;
 while(node){
 if(dojo.html.getComputedStyle(node,"position")=="fixed"){
 return 0;
 }
 var val=node[prop];
 if(val){
-_4d4+=val-0;
+_4de+=val-0;
 if(node==dojo.body()){
 break;
 }
 }
 node=node.parentNode;
 }
-return _4d4;
+return _4de;
 };
-dojo.html.setStyleAttributes=function(node,_4d7){
+dojo.html.setStyleAttributes=function(node,_4e1){
 node=dojo.byId(node);
-var _4d8=_4d7.replace(/(;)?\s*$/,"").split(";");
-for(var i=0;i<_4d8.length;i++){
-var _4da=_4d8[i].split(":");
-var name=_4da[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
-var _4dc=_4da[1].replace(/\s*$/,"").replace(/^\s*/,"");
+var _4e2=_4e1.replace(/(;)?\s*$/,"").split(";");
+for(var i=0;i<_4e2.length;i++){
+var _4e4=_4e2[i].split(":");
+var name=_4e4[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
+var _4e6=_4e4[1].replace(/\s*$/,"").replace(/^\s*/,"");
 switch(name){
 case "opacity":
-dojo.html.setOpacity(node,_4dc);
+dojo.html.setOpacity(node,_4e6);
 break;
 case "content-height":
-dojo.html.setContentBox(node,{height:_4dc});
+dojo.html.setContentBox(node,{height:_4e6});
 break;
 case "content-width":
-dojo.html.setContentBox(node,{width:_4dc});
+dojo.html.setContentBox(node,{width:_4e6});
 break;
 case "outer-height":
-dojo.html.setMarginBox(node,{height:_4dc});
+dojo.html.setMarginBox(node,{height:_4e6});
 break;
 case "outer-width":
-dojo.html.setMarginBox(node,{width:_4dc});
+dojo.html.setMarginBox(node,{width:_4e6});
 break;
 default:
-node.style[dojo.html.toCamelCase(name)]=_4dc;
+node.style[dojo.html.toCamelCase(name)]=_4e6;
 }
 }
 };
 dojo.html.boxSizing={MARGIN_BOX:"margin-box",BORDER_BOX:"border-box",PADDING_BOX:"padding-box",CONTENT_BOX:"content-box"};
-dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_4de,_4df){
+dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_4e8,_4e9){
 node=dojo.byId(node,node.ownerDocument);
 var ret={x:0,y:0};
 var bs=dojo.html.boxSizing;
-if(!_4df){
-_4df=bs.CONTENT_BOX;
+if(!_4e9){
+_4e9=bs.CONTENT_BOX;
 }
-var _4e2=2;
-var _4e3;
-switch(_4df){
+var _4ec=2;
+var _4ed;
+switch(_4e9){
 case bs.MARGIN_BOX:
-_4e3=3;
+_4ed=3;
 break;
 case bs.BORDER_BOX:
-_4e3=2;
+_4ed=2;
 break;
 case bs.PADDING_BOX:
 default:
-_4e3=1;
+_4ed=1;
 break;
 case bs.CONTENT_BOX:
-_4e3=0;
+_4ed=0;
 break;
 }
 var h=dojo.render.html;
@@ -5639,7 +5632,7 @@
 }
 }else{
 if(document.getBoxObjectFor){
-_4e2=1;
+_4ec=1;
 try{
 var bo=document.getBoxObjectFor(node);
 ret.x=bo.x-dojo.html.sumAncestorProperties(node,"scrollLeft");
@@ -5649,11 +5642,11 @@
 }
 }else{
 if(node["offsetParent"]){
-var _4e7;
+var _4f1;
 if((h.safari)&&(node.style.getPropertyValue("position")=="absolute")&&(node.parentNode==db)){
-_4e7=db;
+_4f1=db;
 }else{
-_4e7=db.parentNode;
+_4f1=db.parentNode;
 }
 if(node.parentNode!=db){
 var nd=node;
@@ -5663,16 +5656,16 @@
 ret.x-=dojo.html.sumAncestorProperties(nd,"scrollLeft");
 ret.y-=dojo.html.sumAncestorProperties(nd,"scrollTop");
 }
-var _4e9=node;
+var _4f3=node;
 do{
-var n=_4e9["offsetLeft"];
+var n=_4f3["offsetLeft"];
 if(!h.opera||n>0){
 ret.x+=isNaN(n)?0:n;
 }
-var m=_4e9["offsetTop"];
+var m=_4f3["offsetTop"];
 ret.y+=isNaN(m)?0:m;
-_4e9=_4e9.offsetParent;
-}while((_4e9!=_4e7)&&(_4e9!=null));
+_4f3=_4f3.offsetParent;
+}while((_4f3!=_4f1)&&(_4f3!=null));
 }else{
 if(node["x"]&&node["y"]){
 ret.x+=isNaN(node.x)?0:node.x;
@@ -5681,22 +5674,22 @@
 }
 }
 }
-if(_4de){
-var _4ec=dojo.html.getScroll();
-ret.y+=_4ec.top;
-ret.x+=_4ec.left;
+if(_4e8){
+var _4f6=dojo.html.getScroll();
+ret.y+=_4f6.top;
+ret.x+=_4f6.left;
 }
-var _4ed=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
-if(_4e2>_4e3){
-for(var i=_4e3;i<_4e2;++i){
-ret.y+=_4ed[i](node,"top");
-ret.x+=_4ed[i](node,"left");
+var _4f7=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
+if(_4ec>_4ed){
+for(var i=_4ed;i<_4ec;++i){
+ret.y+=_4f7[i](node,"top");
+ret.x+=_4f7[i](node,"left");
 }
 }else{
-if(_4e2<_4e3){
-for(var i=_4e3;i>_4e2;--i){
-ret.y-=_4ed[i-1](node,"top");
-ret.x-=_4ed[i-1](node,"left");
+if(_4ec<_4ed){
+for(var i=_4ed;i>_4ec;--i){
+ret.y-=_4f7[i-1](node,"top");
+ret.x-=_4f7[i-1](node,"left");
 }
 }
 }
@@ -5707,12 +5700,12 @@
 dojo.html.isPositionAbsolute=function(node){
 return (dojo.html.getComputedStyle(node,"position")=="absolute");
 };
-dojo.html._sumPixelValues=function(node,_4f1,_4f2){
-var _4f3=0;
-for(var x=0;x<_4f1.length;x++){
-_4f3+=dojo.html.getPixelValue(node,_4f1[x],_4f2);
+dojo.html._sumPixelValues=function(node,_4fb,_4fc){
+var _4fd=0;
+for(var x=0;x<_4fb.length;x++){
+_4fd+=dojo.html.getPixelValue(node,_4fb[x],_4fc);
 }
-return _4f3;
+return _4fd;
 };
 dojo.html.getMargin=function(node){
 return {width:dojo.html._sumPixelValues(node,["margin-left","margin-right"],(dojo.html.getComputedStyle(node,"position")=="absolute")),height:dojo.html._sumPixelValues(node,["margin-top","margin-bottom"],(dojo.html.getComputedStyle(node,"position")=="absolute"))};
@@ -5734,13 +5727,13 @@
 };
 dojo.html.getPadBorder=function(node){
 var pad=dojo.html.getPadding(node);
-var _500=dojo.html.getBorder(node);
-return {width:pad.width+_500.width,height:pad.height+_500.height};
+var _50a=dojo.html.getBorder(node);
+return {width:pad.width+_50a.width,height:pad.height+_50a.height};
 };
 dojo.html.getBoxSizing=function(node){
 var h=dojo.render.html;
 var bs=dojo.html.boxSizing;
-if(((h.ie)||(h.opera))&&node.nodeName!="IMG"){
+if(((h.ie)||(h.opera))&&node.nodeName.toLowerCase()!="img"){
 var cm=document["compatMode"];
 if((cm=="BackCompat")||(cm=="QuirksMode")){
 return bs.BORDER_BOX;
@@ -5751,12 +5744,15 @@
 if(arguments.length==0){
 node=document.documentElement;
 }
-var _505=dojo.html.getStyle(node,"-moz-box-sizing");
-if(!_505){
-_505=dojo.html.getStyle(node,"box-sizing");
+var _50f;
+if(!h.ie){
+_50f=dojo.html.getStyle(node,"-moz-box-sizing");
+if(!_50f){
+_50f=dojo.html.getStyle(node,"box-sizing");
 }
-return (_505?_505:bs.CONTENT_BOX);
 }
+return (_50f?_50f:bs.CONTENT_BOX);
+}
 };
 dojo.html.isBorderBox=function(node){
 return (dojo.html.getBoxSizing(node)==dojo.html.boxSizing.BORDER_BOX);
@@ -5767,53 +5763,53 @@
 };
 dojo.html.getPaddingBox=function(node){
 var box=dojo.html.getBorderBox(node);
-var _50a=dojo.html.getBorder(node);
-return {width:box.width-_50a.width,height:box.height-_50a.height};
+var _514=dojo.html.getBorder(node);
+return {width:box.width-_514.width,height:box.height-_514.height};
 };
 dojo.html.getContentBox=function(node){
 node=dojo.byId(node);
-var _50c=dojo.html.getPadBorder(node);
-return {width:node.offsetWidth-_50c.width,height:node.offsetHeight-_50c.height};
+var _516=dojo.html.getPadBorder(node);
+return {width:node.offsetWidth-_516.width,height:node.offsetHeight-_516.height};
 };
 dojo.html.setContentBox=function(node,args){
 node=dojo.byId(node);
-var _50f=0;
-var _510=0;
+var _519=0;
+var _51a=0;
 var isbb=dojo.html.isBorderBox(node);
-var _512=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
+var _51c=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
 var ret={};
 if(typeof args.width!="undefined"){
-_50f=args.width+_512.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_50f);
+_519=args.width+_51c.width;
+ret.width=dojo.html.setPositivePixelValue(node,"width",_519);
 }
 if(typeof args.height!="undefined"){
-_510=args.height+_512.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_510);
+_51a=args.height+_51c.height;
+ret.height=dojo.html.setPositivePixelValue(node,"height",_51a);
 }
 return ret;
 };
 dojo.html.getMarginBox=function(node){
-var _515=dojo.html.getBorderBox(node);
-var _516=dojo.html.getMargin(node);
-return {width:_515.width+_516.width,height:_515.height+_516.height};
+var _51f=dojo.html.getBorderBox(node);
+var _520=dojo.html.getMargin(node);
+return {width:_51f.width+_520.width,height:_51f.height+_520.height};
 };
 dojo.html.setMarginBox=function(node,args){
 node=dojo.byId(node);
-var _519=0;
-var _51a=0;
+var _523=0;
+var _524=0;
 var isbb=dojo.html.isBorderBox(node);
-var _51c=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
-var _51d=dojo.html.getMargin(node);
+var _526=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
+var _527=dojo.html.getMargin(node);
 var ret={};
 if(typeof args.width!="undefined"){
-_519=args.width-_51c.width;
-_519-=_51d.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_519);
+_523=args.width-_526.width;
+_523-=_527.width;
+ret.width=dojo.html.setPositivePixelValue(node,"width",_523);
 }
 if(typeof args.height!="undefined"){
-_51a=args.height-_51c.height;
-_51a-=_51d.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_51a);
+_524=args.height-_526.height;
+_524-=_527.height;
+ret.height=dojo.html.setPositivePixelValue(node,"height",_524);
 }
 return ret;
 };
@@ -5831,31 +5827,31 @@
 return dojo.html.getContentBox(node);
 }
 };
-dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_522,_523,_524){
-if(_522 instanceof Array||typeof _522=="array"){
+dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_52c,_52d,_52e){
+if(_52c instanceof Array||typeof _52c=="array"){
 dojo.deprecated("dojo.html.toCoordinateArray","use dojo.html.toCoordinateObject({left: , top: , width: , height: }) instead","0.5");
-while(_522.length<4){
-_522.push(0);
+while(_52c.length<4){
+_52c.push(0);
 }
-while(_522.length>4){
-_522.pop();
+while(_52c.length>4){
+_52c.pop();
 }
-var ret={left:_522[0],top:_522[1],width:_522[2],height:_522[3]};
+var ret={left:_52c[0],top:_52c[1],width:_52c[2],height:_52c[3]};
 }else{
-if(!_522.nodeType&&!(_522 instanceof String||typeof _522=="string")&&("width" in _522||"height" in _522||"left" in _522||"x" in _522||"top" in _522||"y" in _522)){
-var ret={left:_522.left||_522.x||0,top:_522.top||_522.y||0,width:_522.width||0,height:_522.height||0};
+if(!_52c.nodeType&&!(_52c instanceof String||typeof _52c=="string")&&("width" in _52c||"height" in _52c||"left" in _52c||"x" in _52c||"top" in _52c||"y" in _52c)){
+var ret={left:_52c.left||_52c.x||0,top:_52c.top||_52c.y||0,width:_52c.width||0,height:_52c.height||0};
 }else{
-var node=dojo.byId(_522);
-var pos=dojo.html.abs(node,_523,_524);
-var _528=dojo.html.getMarginBox(node);
-var ret={left:pos.left,top:pos.top,width:_528.width,height:_528.height};
+var node=dojo.byId(_52c);
+var pos=dojo.html.abs(node,_52d,_52e);
+var _532=dojo.html.getMarginBox(node);
+var ret={left:pos.left,top:pos.top,width:_532.width,height:_532.height};
 }
 }
 ret.x=ret.left;
 ret.y=ret.top;
 return ret;
 };
-dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_52a){
+dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_534){
 return dojo.html._callDeprecated("setMarginBoxWidth","setMarginBox",arguments,"width");
 };
 dojo.html.setMarginBoxHeight=dojo.html.setOuterHeight=function(){
@@ -5867,19 +5863,19 @@
 dojo.html.getMarginBoxHeight=dojo.html.getOuterHeight=function(){
 return dojo.html._callDeprecated("getMarginBoxHeight","getMarginBox",arguments,null,"height");
 };
-dojo.html.getTotalOffset=function(node,type,_52d){
+dojo.html.getTotalOffset=function(node,type,_537){
 return dojo.html._callDeprecated("getTotalOffset","getAbsolutePosition",arguments,null,type);
 };
-dojo.html.getAbsoluteX=function(node,_52f){
+dojo.html.getAbsoluteX=function(node,_539){
 return dojo.html._callDeprecated("getAbsoluteX","getAbsolutePosition",arguments,null,"x");
 };
-dojo.html.getAbsoluteY=function(node,_531){
+dojo.html.getAbsoluteY=function(node,_53b){
 return dojo.html._callDeprecated("getAbsoluteY","getAbsolutePosition",arguments,null,"y");
 };
-dojo.html.totalOffsetLeft=function(node,_533){
+dojo.html.totalOffsetLeft=function(node,_53d){
 return dojo.html._callDeprecated("totalOffsetLeft","getAbsolutePosition",arguments,null,"left");
 };
-dojo.html.totalOffsetTop=function(node,_535){
+dojo.html.totalOffsetTop=function(node,_53f){
 return dojo.html._callDeprecated("totalOffsetTop","getAbsolutePosition",arguments,null,"top");
 };
 dojo.html.getMarginWidth=function(node){
@@ -5918,46 +5914,46 @@
 dojo.html.getContentBoxHeight=dojo.html.getContentHeight=function(){
 return dojo.html._callDeprecated("getContentBoxHeight","getContentBox",arguments,null,"height");
 };
-dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_53f){
+dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_549){
 return dojo.html._callDeprecated("setContentBoxWidth","setContentBox",arguments,"width");
 };
-dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_541){
+dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_54b){
 return dojo.html._callDeprecated("setContentBoxHeight","setContentBox",arguments,"height");
 };
 dojo.provide("dojo.lfx.html");
-dojo.lfx.html._byId=function(_542){
-if(!_542){
+dojo.lfx.html._byId=function(_54c){
+if(!_54c){
 return [];
 }
-if(dojo.lang.isArrayLike(_542)){
-if(!_542.alreadyChecked){
+if(dojo.lang.isArrayLike(_54c)){
+if(!_54c.alreadyChecked){
 var n=[];
-dojo.lang.forEach(_542,function(node){
+dojo.lang.forEach(_54c,function(node){
 n.push(dojo.byId(node));
 });
 n.alreadyChecked=true;
 return n;
 }else{
-return _542;
+return _54c;
 }
 }else{
 var n=[];
-n.push(dojo.byId(_542));
+n.push(dojo.byId(_54c));
 n.alreadyChecked=true;
 return n;
 }
 };
-dojo.lfx.html.propertyAnimation=function(_545,_546,_547,_548,_549){
-_545=dojo.lfx.html._byId(_545);
-var _54a={"propertyMap":_546,"nodes":_545,"duration":_547,"easing":_548||dojo.lfx.easeDefault};
-var _54b=function(args){
+dojo.lfx.html.propertyAnimation=function(_54f,_550,_551,_552,_553){
+_54f=dojo.lfx.html._byId(_54f);
+var _554={"propertyMap":_550,"nodes":_54f,"duration":_551,"easing":_552||dojo.lfx.easeDefault};
+var _555=function(args){
 if(args.nodes.length==1){
 var pm=args.propertyMap;
 if(!dojo.lang.isArray(args.propertyMap)){
 var parr=[];
-for(var _54f in pm){
-pm[_54f].property=_54f;
-parr.push(pm[_54f]);
+for(var _559 in pm){
+pm[_559].property=_559;
+parr.push(pm[_559]);
 }
 pm=args.propertyMap=parr;
 }
@@ -5972,24 +5968,24 @@
 });
 }
 };
-var _551=function(_552){
-var _553=[];
-dojo.lang.forEach(_552,function(c){
-_553.push(Math.round(c));
+var _55b=function(_55c){
+var _55d=[];
+dojo.lang.forEach(_55c,function(c){
+_55d.push(Math.round(c));
 });
-return _553;
+return _55d;
 };
-var _555=function(n,_557){
+var _55f=function(n,_561){
 n=dojo.byId(n);
 if(!n||!n.style){
 return;
 }
-for(var s in _557){
+for(var s in _561){
 try{
 if(s=="opacity"){
-dojo.html.setOpacity(n,_557[s]);
+dojo.html.setOpacity(n,_561[s]);
 }else{
-n.style[s]=_557[s];
+n.style[s]=_561[s];
 }
 }
 catch(e){
@@ -5997,10 +5993,10 @@
 }
 }
 };
-var _559=function(_55a){
-this._properties=_55a;
-this.diffs=new Array(_55a.length);
-dojo.lang.forEach(_55a,function(prop,i){
+var _563=function(_564){
+this._properties=_564;
+this.diffs=new Array(_564.length);
+dojo.lang.forEach(_564,function(prop,i){
 if(dojo.lang.isFunction(prop.start)){
 prop.start=prop.start(prop,i);
 }
@@ -6021,43 +6017,43 @@
 this.getValue=function(n){
 var ret={};
 dojo.lang.forEach(this._properties,function(prop,i){
-var _561=null;
+var _56b=null;
 if(dojo.lang.isArray(prop.start)){
 }else{
 if(prop.start instanceof dojo.gfx.color.Color){
-_561=(prop.units||"rgb")+"(";
+_56b=(prop.units||"rgb")+"(";
 for(var j=0;j<prop.startRgb.length;j++){
-_561+=Math.round(((prop.endRgb[j]-prop.startRgb[j])*n)+prop.startRgb[j])+(j<prop.startRgb.length-1?",":"");
+_56b+=Math.round(((prop.endRgb[j]-prop.startRgb[j])*n)+prop.startRgb[j])+(j<prop.startRgb.length-1?",":"");
 }
-_561+=")";
+_56b+=")";
 }else{
-_561=((this.diffs[i])*n)+prop.start+(prop.property!="opacity"?prop.units||"px":"");
+_56b=((this.diffs[i])*n)+prop.start+(prop.property!="opacity"?prop.units||"px":"");
 }
 }
-ret[dojo.html.toCamelCase(prop.property)]=_561;
+ret[dojo.html.toCamelCase(prop.property)]=_56b;
 },this);
 return ret;
 };
 };
 var anim=new dojo.lfx.Animation({beforeBegin:function(){
-_54b(_54a);
-anim.curve=new _559(_54a.propertyMap);
-},onAnimate:function(_564){
-dojo.lang.forEach(_54a.nodes,function(node){
-_555(node,_564);
+_555(_554);
+anim.curve=new _563(_554.propertyMap);
+},onAnimate:function(_56e){
+dojo.lang.forEach(_554.nodes,function(node){
+_55f(node,_56e);
 });
-}},_54a.duration,null,_54a.easing);
-if(_549){
-for(var x in _549){
-if(dojo.lang.isFunction(_549[x])){
-anim.connect(x,anim,_549[x]);
+}},_554.duration,null,_554.easing);
+if(_553){
+for(var x in _553){
+if(dojo.lang.isFunction(_553[x])){
+anim.connect(x,anim,_553[x]);
 }
 }
 }
 return anim;
 };
-dojo.lfx.html._makeFadeable=function(_567){
-var _568=function(node){
+dojo.lfx.html._makeFadeable=function(_571){
+var _572=function(node){
 if(dojo.render.html.ie){
 if((node.style.zoom.length==0)&&(dojo.html.getStyle(node,"zoom")=="normal")){
 node.style.zoom="1";
@@ -6067,129 +6063,129 @@
 }
 }
 };
-if(dojo.lang.isArrayLike(_567)){
-dojo.lang.forEach(_567,_568);
+if(dojo.lang.isArrayLike(_571)){
+dojo.lang.forEach(_571,_572);
 }else{
-_568(_567);
+_572(_571);
 }
 };
-dojo.lfx.html.fade=function(_56a,_56b,_56c,_56d,_56e){
-_56a=dojo.lfx.html._byId(_56a);
-var _56f={property:"opacity"};
-if(!dj_undef("start",_56b)){
-_56f.start=_56b.start;
+dojo.lfx.html.fade=function(_574,_575,_576,_577,_578){
+_574=dojo.lfx.html._byId(_574);
+var _579={property:"opacity"};
+if(!dj_undef("start",_575)){
+_579.start=_575.start;
 }else{
-_56f.start=function(){
-return dojo.html.getOpacity(_56a[0]);
+_579.start=function(){
+return dojo.html.getOpacity(_574[0]);
 };
 }
-if(!dj_undef("end",_56b)){
-_56f.end=_56b.end;
+if(!dj_undef("end",_575)){
+_579.end=_575.end;
 }else{
 dojo.raise("dojo.lfx.html.fade needs an end value");
 }
-var anim=dojo.lfx.propertyAnimation(_56a,[_56f],_56c,_56d);
+var anim=dojo.lfx.propertyAnimation(_574,[_579],_576,_577);
 anim.connect("beforeBegin",function(){
-dojo.lfx.html._makeFadeable(_56a);
+dojo.lfx.html._makeFadeable(_574);
 });
-if(_56e){
+if(_578){
 anim.connect("onEnd",function(){
-_56e(_56a,anim);
+_578(_574,anim);
 });
 }
 return anim;
 };
-dojo.lfx.html.fadeIn=function(_571,_572,_573,_574){
-return dojo.lfx.html.fade(_571,{end:1},_572,_573,_574);
+dojo.lfx.html.fadeIn=function(_57b,_57c,_57d,_57e){
+return dojo.lfx.html.fade(_57b,{end:1},_57c,_57d,_57e);
 };
-dojo.lfx.html.fadeOut=function(_575,_576,_577,_578){
-return dojo.lfx.html.fade(_575,{end:0},_576,_577,_578);
+dojo.lfx.html.fadeOut=function(_57f,_580,_581,_582){
+return dojo.lfx.html.fade(_57f,{end:0},_580,_581,_582);
 };
-dojo.lfx.html.fadeShow=function(_579,_57a,_57b,_57c){
-_579=dojo.lfx.html._byId(_579);
-dojo.lang.forEach(_579,function(node){
+dojo.lfx.html.fadeShow=function(_583,_584,_585,_586){
+_583=dojo.lfx.html._byId(_583);
+dojo.lang.forEach(_583,function(node){
 dojo.html.setOpacity(node,0);
 });
-var anim=dojo.lfx.html.fadeIn(_579,_57a,_57b,_57c);
+var anim=dojo.lfx.html.fadeIn(_583,_584,_585,_586);
 anim.connect("beforeBegin",function(){
-if(dojo.lang.isArrayLike(_579)){
-dojo.lang.forEach(_579,dojo.html.show);
+if(dojo.lang.isArrayLike(_583)){
+dojo.lang.forEach(_583,dojo.html.show);
 }else{
-dojo.html.show(_579);
+dojo.html.show(_583);
 }
 });
 return anim;
 };
-dojo.lfx.html.fadeHide=function(_57f,_580,_581,_582){
-var anim=dojo.lfx.html.fadeOut(_57f,_580,_581,function(){
-if(dojo.lang.isArrayLike(_57f)){
-dojo.lang.forEach(_57f,dojo.html.hide);
+dojo.lfx.html.fadeHide=function(_589,_58a,_58b,_58c){
+var anim=dojo.lfx.html.fadeOut(_589,_58a,_58b,function(){
+if(dojo.lang.isArrayLike(_589)){
+dojo.lang.forEach(_589,dojo.html.hide);
 }else{
-dojo.html.hide(_57f);
+dojo.html.hide(_589);
 }
-if(_582){
-_582(_57f,anim);
+if(_58c){
+_58c(_589,anim);
 }
 });
 return anim;
 };
-dojo.lfx.html.wipeIn=function(_584,_585,_586,_587){
-_584=dojo.lfx.html._byId(_584);
-var _588=[];
-dojo.lang.forEach(_584,function(node){
-var _58a={};
-var _58b,_58c,_58d;
+dojo.lfx.html.wipeIn=function(_58e,_58f,_590,_591){
+_58e=dojo.lfx.html._byId(_58e);
+var _592=[];
+dojo.lang.forEach(_58e,function(node){
+var _594={};
+var _595,_596,_597;
 with(node.style){
-_58b=top;
-_58c=left;
-_58d=position;
+_595=top;
+_596=left;
+_597=position;
 top="-9999px";
 left="-9999px";
 position="absolute";
 display="";
 }
-var _58e=dojo.html.getBorderBox(node).height;
+var _598=dojo.html.getBorderBox(node).height;
 with(node.style){
-top=_58b;
-left=_58c;
-position=_58d;
+top=_595;
+left=_596;
+position=_597;
 display="none";
 }
 var anim=dojo.lfx.propertyAnimation(node,{"height":{start:1,end:function(){
-return _58e;
-}}},_585,_586);
+return _598;
+}}},_58f,_590);
 anim.connect("beforeBegin",function(){
-_58a.overflow=node.style.overflow;
-_58a.height=node.style.height;
+_594.overflow=node.style.overflow;
+_594.height=node.style.height;
 with(node.style){
 overflow="hidden";
-_58e="1px";
+height="1px";
 }
 dojo.html.show(node);
 });
 anim.connect("onEnd",function(){
 with(node.style){
-overflow=_58a.overflow;
-_58e=_58a.height;
+overflow=_594.overflow;
+height=_594.height;
 }
-if(_587){
-_587(node,anim);
+if(_591){
+_591(node,anim);
 }
 });
-_588.push(anim);
+_592.push(anim);
 });
-return dojo.lfx.combine(_588);
+return dojo.lfx.combine(_592);
 };
-dojo.lfx.html.wipeOut=function(_590,_591,_592,_593){
-_590=dojo.lfx.html._byId(_590);
-var _594=[];
-dojo.lang.forEach(_590,function(node){
-var _596={};
+dojo.lfx.html.wipeOut=function(_59a,_59b,_59c,_59d){
+_59a=dojo.lfx.html._byId(_59a);
+var _59e=[];
+dojo.lang.forEach(_59a,function(node){
+var _5a0={};
 var anim=dojo.lfx.propertyAnimation(node,{"height":{start:function(){
 return dojo.html.getContentBox(node).height;
-},end:1}},_591,_592,{"beforeBegin":function(){
-_596.overflow=node.style.overflow;
-_596.height=node.style.height;
+},end:1}},_59b,_59c,{"beforeBegin":function(){
+_5a0.overflow=node.style.overflow;
+_5a0.height=node.style.height;
 with(node.style){
 overflow="hidden";
 }
@@ -6197,266 +6193,262 @@
 },"onEnd":function(){
 dojo.html.hide(node);
 with(node.style){
-overflow=_596.overflow;
-height=_596.height;
+overflow=_5a0.overflow;
+height=_5a0.height;
 }
-if(_593){
-_593(node,anim);
+if(_59d){
+_59d(node,anim);
 }
 }});
-_594.push(anim);
+_59e.push(anim);
 });
-return dojo.lfx.combine(_594);
+return dojo.lfx.combine(_59e);
 };
-dojo.lfx.html.slideTo=function(_598,_599,_59a,_59b,_59c){
-_598=dojo.lfx.html._byId(_598);
-var _59d=[];
-var _59e=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_599)){
+dojo.lfx.html.slideTo=function(_5a2,_5a3,_5a4,_5a5,_5a6){
+_5a2=dojo.lfx.html._byId(_5a2);
+var _5a7=[];
+var _5a8=dojo.html.getComputedStyle;
+if(dojo.lang.isArray(_5a3)){
 dojo.deprecated("dojo.lfx.html.slideTo(node, array)","use dojo.lfx.html.slideTo(node, {top: value, left: value});","0.5");
-_599={top:_599[0],left:_599[1]};
+_5a3={top:_5a3[0],left:_5a3[1]};
 }
-dojo.lang.forEach(_598,function(node){
+dojo.lang.forEach(_5a2,function(node){
 var top=null;
 var left=null;
 var init=(function(){
-var _5a3=node;
+var _5ad=node;
 return function(){
-var pos=_59e(_5a3,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_59e(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_59e(node,"left"))||0);
+var pos=_5a8(_5ad,"position");
+top=(pos=="absolute"?node.offsetTop:parseInt(_5a8(node,"top"))||0);
+left=(pos=="absolute"?node.offsetLeft:parseInt(_5a8(node,"left"))||0);
 if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_5a3,true);
-dojo.html.setStyleAttributes(_5a3,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
+var ret=dojo.html.abs(_5ad,true);
+dojo.html.setStyleAttributes(_5ad,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
 top=ret.y;
 left=ret.x;
 }
 };
 })();
 init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:(_599.top||0)},"left":{start:left,end:(_599.left||0)}},_59a,_59b,{"beforeBegin":init});
-if(_59c){
+var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:(_5a3.top||0)},"left":{start:left,end:(_5a3.left||0)}},_5a4,_5a5,{"beforeBegin":init});
+if(_5a6){
 anim.connect("onEnd",function(){
-_59c(_598,anim);
+_5a6(_5a2,anim);
 });
 }
-_59d.push(anim);
+_5a7.push(anim);
 });
-return dojo.lfx.combine(_59d);
+return dojo.lfx.combine(_5a7);
 };
-dojo.lfx.html.slideBy=function(_5a7,_5a8,_5a9,_5aa,_5ab){
-_5a7=dojo.lfx.html._byId(_5a7);
-var _5ac=[];
-var _5ad=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_5a8)){
+dojo.lfx.html.slideBy=function(_5b1,_5b2,_5b3,_5b4,_5b5){
+_5b1=dojo.lfx.html._byId(_5b1);
+var _5b6=[];
+var _5b7=dojo.html.getComputedStyle;
+if(dojo.lang.isArray(_5b2)){
 dojo.deprecated("dojo.lfx.html.slideBy(node, array)","use dojo.lfx.html.slideBy(node, {top: value, left: value});","0.5");
-_5a8={top:_5a8[0],left:_5a8[1]};
+_5b2={top:_5b2[0],left:_5b2[1]};
 }
-dojo.lang.forEach(_5a7,function(node){
+dojo.lang.forEach(_5b1,function(node){
 var top=null;
 var left=null;
 var init=(function(){
-var _5b2=node;
+var _5bc=node;
 return function(){
-var pos=_5ad(_5b2,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_5ad(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_5ad(node,"left"))||0);
+var pos=_5b7(_5bc,"position");
+top=(pos=="absolute"?node.offsetTop:parseInt(_5b7(node,"top"))||0);
+left=(pos=="absolute"?node.offsetLeft:parseInt(_5b7(node,"left"))||0);
 if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_5b2,true);
-dojo.html.setStyleAttributes(_5b2,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
+var ret=dojo.html.abs(_5bc,true);
+dojo.html.setStyleAttributes(_5bc,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
 top=ret.y;
 left=ret.x;
 }
 };
 })();
 init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:top+(_5a8.top||0)},"left":{start:left,end:left+(_5a8.left||0)}},_5a9,_5aa).connect("beforeBegin",init);
-if(_5ab){
+var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:top+(_5b2.top||0)},"left":{start:left,end:left+(_5b2.left||0)}},_5b3,_5b4).connect("beforeBegin",init);
+if(_5b5){
 anim.connect("onEnd",function(){
-_5ab(_5a7,anim);
+_5b5(_5b1,anim);
 });
 }
-_5ac.push(anim);
+_5b6.push(anim);
 });
-return dojo.lfx.combine(_5ac);
+return dojo.lfx.combine(_5b6);
 };
-dojo.lfx.html.explode=function(_5b6,_5b7,_5b8,_5b9,_5ba){
+dojo.lfx.html.explode=function(_5c0,_5c1,_5c2,_5c3,_5c4){
 var h=dojo.html;
-_5b6=dojo.byId(_5b6);
-_5b7=dojo.byId(_5b7);
-var _5bc=h.toCoordinateObject(_5b6,true);
-var _5bd=document.createElement("div");
-h.copyStyle(_5bd,_5b7);
-if(_5b7.explodeClassName){
-_5bd.className=_5b7.explodeClassName;
+_5c0=dojo.byId(_5c0);
+_5c1=dojo.byId(_5c1);
+var _5c6=h.toCoordinateObject(_5c0,true);
+var _5c7=document.createElement("div");
+h.copyStyle(_5c7,_5c1);
+if(_5c1.explodeClassName){
+_5c7.className=_5c1.explodeClassName;
 }
-with(_5bd.style){
+with(_5c7.style){
 position="absolute";
 display="none";
-var _5be=h.getStyle(_5b6,"background-color");
-backgroundColor=_5be?_5be.toLowerCase():"transparent";
+var _5c8=h.getStyle(_5c0,"background-color");
+backgroundColor=_5c8?_5c8.toLowerCase():"transparent";
 backgroundColor=(backgroundColor=="transparent")?"rgb(221, 221, 221)":backgroundColor;
 }
-dojo.body().appendChild(_5bd);
-with(_5b7.style){
+dojo.body().appendChild(_5c7);
+with(_5c1.style){
 visibility="hidden";
 display="block";
 }
-var _5bf=h.toCoordinateObject(_5b7,true);
-with(_5b7.style){
+var _5c9=h.toCoordinateObject(_5c1,true);
+with(_5c1.style){
 display="none";
 visibility="visible";
 }
-var _5c0={opacity:{start:0.5,end:1}};
+var _5ca={opacity:{start:0.5,end:1}};
 dojo.lang.forEach(["height","width","top","left"],function(type){
-_5c0[type]={start:_5bc[type],end:_5bf[type]};
+_5ca[type]={start:_5c6[type],end:_5c9[type]};
 });
-var anim=new dojo.lfx.propertyAnimation(_5bd,_5c0,_5b8,_5b9,{"beforeBegin":function(){
-h.setDisplay(_5bd,"block");
+var anim=new dojo.lfx.propertyAnimation(_5c7,_5ca,_5c2,_5c3,{"beforeBegin":function(){
+h.setDisplay(_5c7,"block");
 },"onEnd":function(){
-h.setDisplay(_5b7,"block");
-_5bd.parentNode.removeChild(_5bd);
+h.setDisplay(_5c1,"block");
+_5c7.parentNode.removeChild(_5c7);
 }});
-if(_5ba){
+if(_5c4){
 anim.connect("onEnd",function(){
-_5ba(_5b7,anim);
+_5c4(_5c1,anim);
 });
 }
 return anim;
 };
-dojo.lfx.html.implode=function(_5c3,end,_5c5,_5c6,_5c7){
+dojo.lfx.html.implode=function(_5cd,end,_5cf,_5d0,_5d1){
 var h=dojo.html;
-_5c3=dojo.byId(_5c3);
+_5cd=dojo.byId(_5cd);
 end=dojo.byId(end);
-var _5c9=dojo.html.toCoordinateObject(_5c3,true);
-var _5ca=dojo.html.toCoordinateObject(end,true);
-var _5cb=document.createElement("div");
-dojo.html.copyStyle(_5cb,_5c3);
-if(_5c3.explodeClassName){
-_5cb.className=_5c3.explodeClassName;
+var _5d3=dojo.html.toCoordinateObject(_5cd,true);
+var _5d4=dojo.html.toCoordinateObject(end,true);
+var _5d5=document.createElement("div");
+dojo.html.copyStyle(_5d5,_5cd);
+if(_5cd.explodeClassName){
+_5d5.className=_5cd.explodeClassName;
 }
-dojo.html.setOpacity(_5cb,0.3);
-with(_5cb.style){
+dojo.html.setOpacity(_5d5,0.3);
+with(_5d5.style){
 position="absolute";
 display="none";
-backgroundColor=h.getStyle(_5c3,"background-color").toLowerCase();
+backgroundColor=h.getStyle(_5cd,"background-color").toLowerCase();
 }
-dojo.body().appendChild(_5cb);
-var _5cc={opacity:{start:1,end:0.5}};
+dojo.body().appendChild(_5d5);
+var _5d6={opacity:{start:1,end:0.5}};
 dojo.lang.forEach(["height","width","top","left"],function(type){
-_5cc[type]={start:_5c9[type],end:_5ca[type]};
+_5d6[type]={start:_5d3[type],end:_5d4[type]};
 });
-var anim=new dojo.lfx.propertyAnimation(_5cb,_5cc,_5c5,_5c6,{"beforeBegin":function(){
-dojo.html.hide(_5c3);
-dojo.html.show(_5cb);
+var anim=new dojo.lfx.propertyAnimation(_5d5,_5d6,_5cf,_5d0,{"beforeBegin":function(){
+dojo.html.hide(_5cd);
+dojo.html.show(_5d5);
 },"onEnd":function(){
-_5cb.parentNode.removeChild(_5cb);
+_5d5.parentNode.removeChild(_5d5);
 }});
-if(_5c7){
+if(_5d1){
 anim.connect("onEnd",function(){
-_5c7(_5c3,anim);
+_5d1(_5cd,anim);
 });
 }
 return anim;
 };
-dojo.lfx.html.highlight=function(_5cf,_5d0,_5d1,_5d2,_5d3){
-_5cf=dojo.lfx.html._byId(_5cf);
-var _5d4=[];
-dojo.lang.forEach(_5cf,function(node){
-var _5d6=dojo.html.getBackgroundColor(node);
+dojo.lfx.html.highlight=function(_5d9,_5da,_5db,_5dc,_5dd){
+_5d9=dojo.lfx.html._byId(_5d9);
+var _5de=[];
+dojo.lang.forEach(_5d9,function(node){
+var _5e0=dojo.html.getBackgroundColor(node);
 var bg=dojo.html.getStyle(node,"background-color").toLowerCase();
-var _5d8=dojo.html.getStyle(node,"background-image");
-var _5d9=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
-while(_5d6.length>3){
-_5d6.pop();
+var _5e2=dojo.html.getStyle(node,"background-image");
+var _5e3=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
+while(_5e0.length>3){
+_5e0.pop();
 }
-var rgb=new dojo.gfx.color.Color(_5d0);
-var _5db=new dojo.gfx.color.Color(_5d6);
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:rgb,end:_5db}},_5d1,_5d2,{"beforeBegin":function(){
-if(_5d8){
+var rgb=new dojo.gfx.color.Color(_5da);
+var _5e5=new dojo.gfx.color.Color(_5e0);
+var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:rgb,end:_5e5}},_5db,_5dc,{"beforeBegin":function(){
+if(_5e2){
 node.style.backgroundImage="none";
 }
 node.style.backgroundColor="rgb("+rgb.toRgb().join(",")+")";
 },"onEnd":function(){
-if(_5d8){
-node.style.backgroundImage=_5d8;
+if(_5e2){
+node.style.backgroundImage=_5e2;
 }
-if(_5d9){
+if(_5e3){
 node.style.backgroundColor="transparent";
 }
-if(_5d3){
-_5d3(node,anim);
+if(_5dd){
+_5dd(node,anim);
 }
 }});
-_5d4.push(anim);
+_5de.push(anim);
 });
-return dojo.lfx.combine(_5d4);
+return dojo.lfx.combine(_5de);
 };
-dojo.lfx.html.unhighlight=function(_5dd,_5de,_5df,_5e0,_5e1){
-_5dd=dojo.lfx.html._byId(_5dd);
-var _5e2=[];
-dojo.lang.forEach(_5dd,function(node){
-var _5e4=new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
-var rgb=new dojo.gfx.color.Color(_5de);
-var _5e6=dojo.html.getStyle(node,"background-image");
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:_5e4,end:rgb}},_5df,_5e0,{"beforeBegin":function(){
-if(_5e6){
+dojo.lfx.html.unhighlight=function(_5e7,_5e8,_5e9,_5ea,_5eb){
+_5e7=dojo.lfx.html._byId(_5e7);
+var _5ec=[];
+dojo.lang.forEach(_5e7,function(node){
+var _5ee=new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
+var rgb=new dojo.gfx.color.Color(_5e8);
+var _5f0=dojo.html.getStyle(node,"background-image");
+var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:_5ee,end:rgb}},_5e9,_5ea,{"beforeBegin":function(){
+if(_5f0){
 node.style.backgroundImage="none";
 }
-node.style.backgroundColor="rgb("+_5e4.toRgb().join(",")+")";
+node.style.backgroundColor="rgb("+_5ee.toRgb().join(",")+")";
 },"onEnd":function(){
-if(_5e1){
-_5e1(node,anim);
+if(_5eb){
+_5eb(node,anim);
 }
 }});
-_5e2.push(anim);
+_5ec.push(anim);
 });
-return dojo.lfx.combine(_5e2);
+return dojo.lfx.combine(_5ec);
 };
 dojo.lang.mixin(dojo.lfx,dojo.lfx.html);
+dojo.kwCompoundRequire({browser:["dojo.lfx.html"],dashboard:["dojo.lfx.html"]});
 dojo.provide("dojo.lfx.*");
 
 
 __CPAN_EDITION__ ajax build.txt
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/string/common.js,
-../src/string.js,
-../src/lang/common.js,
-../src/lang/extras.js,
-../src/io/common.js,
-../src/lang/array.js,
-../src/lang/func.js,
-../src/string/extras.js,
-../src/dom.js,
-../src/undo/browser.js,
-../src/io/BrowserIO.js,
-../src/io/cookie.js,
-../src/io/__package__.js,
-../src/event/common.js,
-../src/event/topic.js,
-../src/event/browser.js,
-../src/event/__package__.js,
-../src/gfx/color.js,
-../src/lfx/Animation.js,
-../src/html/common.js,
-../src/uri/Uri.js,
-../src/html/style.js,
-../src/html/display.js,
-../src/html/color.js,
-../src/html/layout.js,
-../src/lfx/html.js,
+Files baked into this build:
+dojoGuardStart.js
+../src/bootstrap1.js
+../src/loader.js
+dojoGuardEnd.js
+../src/hostenv_browser.js
+../src/string/common.js
+../src/string.js
+../src/lang/common.js
+../src/lang/extras.js
+../src/io/common.js
+../src/lang/array.js
+../src/lang/func.js
+../src/string/extras.js
+../src/dom.js
+../src/undo/browser.js
+../src/io/BrowserIO.js
+../src/io/cookie.js
+../src/io/__package__.js
+../src/event/common.js
+../src/event/topic.js
+../src/event/browser.js
+../src/event/__package__.js
+../src/gfx/color.js
+../src/lfx/Animation.js
+../src/html/common.js
+../src/uri/Uri.js
+../src/html/style.js
+../src/html/display.js
+../src/html/color.js
+../src/html/layout.js
+../src/lfx/html.js
 ../src/lfx/__package__.js
-
-		
-__CPAN_EDITION__ browserio dojo.js
+__CPAN_EDITION__ charting dojo.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
 	All Rights Reserved.
@@ -6492,7 +6484,7 @@
 return dj_currentContext;
 };
 dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
+dojo.version={major:0,minor:4,patch:2,flag:"",revision:Number("$Rev: 7616 $".match(/[0-9]+/)[0]),toString:function(){
 with(dojo.version){
 return major+"."+minor+"."+patch+flag+" ("+revision+")";
 }
@@ -6748,7 +6740,7 @@
 }
 };
 dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
+if(typeof setTimeout=="object"||(djConfig["useXDomain"]&&dojo.render.html.opera)){
 setTimeout("dojo.hostenv.loaded();",0);
 }else{
 dojo.hostenv.loaded();
@@ -6896,3119 +6888,11 @@
 dojo.registerModulePath=function(_66,_67){
 return dojo.hostenv.setModulePrefix(_66,_67);
 };
-dojo.setModulePrefix=function(_68,_69){
-dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
-return dojo.registerModulePath(_68,_69);
-};
-dojo.exists=function(obj,_6b){
-var p=_6b.split(".");
-for(var i=0;i<p.length;i++){
-if(!obj[p[i]]){
-return false;
+if(djConfig["modulePaths"]){
+for(var param in djConfig["modulePaths"]){
+dojo.registerModulePath(param,djConfig["modulePaths"][param]);
 }
-obj=obj[p[i]];
 }
-return true;
-};
-dojo.hostenv.normalizeLocale=function(_6e){
-var _6f=_6e?_6e.toLowerCase():dojo.locale;
-if(_6f=="root"){
-_6f="ROOT";
-}
-return _6f;
-};
-dojo.hostenv.searchLocalePath=function(_70,_71,_72){
-_70=dojo.hostenv.normalizeLocale(_70);
-var _73=_70.split("-");
-var _74=[];
-for(var i=_73.length;i>0;i--){
-_74.push(_73.slice(0,i).join("-"));
-}
-_74.push(false);
-if(_71){
-_74.reverse();
-}
-for(var j=_74.length-1;j>=0;j--){
-var loc=_74[j]||"ROOT";
-var _78=_72(loc);
-if(_78){
-break;
-}
-}
-};
-dojo.hostenv.localesGenerated;
-dojo.hostenv.registerNlsPrefix=function(){
-dojo.registerModulePath("nls","nls");
-};
-dojo.hostenv.preloadLocalizations=function(){
-if(dojo.hostenv.localesGenerated){
-dojo.hostenv.registerNlsPrefix();
-function preload(_79){
-_79=dojo.hostenv.normalizeLocale(_79);
-dojo.hostenv.searchLocalePath(_79,true,function(loc){
-for(var i=0;i<dojo.hostenv.localesGenerated.length;i++){
-if(dojo.hostenv.localesGenerated[i]==loc){
-dojo["require"]("nls.dojo_"+loc);
-return true;
-}
-}
-return false;
-});
-}
-preload();
-var _7c=djConfig.extraLocale||[];
-for(var i=0;i<_7c.length;i++){
-preload(_7c[i]);
-}
-}
-dojo.hostenv.preloadLocalizations=function(){
-};
-};
-dojo.requireLocalization=function(_7e,_7f,_80,_81){
-dojo.hostenv.preloadLocalizations();
-var _82=dojo.hostenv.normalizeLocale(_80);
-var _83=[_7e,"nls",_7f].join(".");
-var _84="";
-if(_81){
-var _85=_81.split(",");
-for(var i=0;i<_85.length;i++){
-if(_82.indexOf(_85[i])==0){
-if(_85[i].length>_84.length){
-_84=_85[i];
-}
-}
-}
-if(!_84){
-_84="ROOT";
-}
-}
-var _87=_81?_84:_82;
-var _88=dojo.hostenv.findModule(_83);
-var _89=null;
-if(_88){
-if(djConfig.localizationComplete&&_88._built){
-return;
-}
-var _8a=_87.replace("-","_");
-var _8b=_83+"."+_8a;
-_89=dojo.hostenv.findModule(_8b);
-}
-if(!_89){
-_88=dojo.hostenv.startPackage(_83);
-var _8c=dojo.hostenv.getModuleSymbols(_7e);
-var _8d=_8c.concat("nls").join("/");
-var _8e;
-dojo.hostenv.searchLocalePath(_87,_81,function(loc){
-var _90=loc.replace("-","_");
-var _91=_83+"."+_90;
-var _92=false;
-if(!dojo.hostenv.findModule(_91)){
-dojo.hostenv.startPackage(_91);
-var _93=[_8d];
-if(loc!="ROOT"){
-_93.push(loc);
-}
-_93.push(_7f);
-var _94=_93.join("/")+".js";
-_92=dojo.hostenv.loadPath(_94,null,function(_95){
-var _96=function(){
-};
-_96.prototype=_8e;
-_88[_90]=new _96();
-for(var j in _95){
-_88[_90][j]=_95[j];
-}
-});
-}else{
-_92=true;
-}
-if(_92&&_88[_90]){
-_8e=_88[_90];
-}else{
-_88[_90]=_8e;
-}
-if(_81){
-return true;
-}
-});
-}
-if(_81&&_82!=_84){
-_88[_82.replace("-","_")]=_88[_84.replace("-","_")];
-}
-};
-(function(){
-var _98=djConfig.extraLocale;
-if(_98){
-if(!_98 instanceof Array){
-_98=[_98];
-}
-var req=dojo.requireLocalization;
-dojo.requireLocalization=function(m,b,_9c,_9d){
-req(m,b,_9c,_9d);
-if(_9c){
-return;
-}
-for(var i=0;i<_98.length;i++){
-req(m,b,_98[i],_9d);
-}
-};
-}
-})();
-}
-if(typeof window!="undefined"){
-(function(){
-if(djConfig.allowQueryConfig){
-var _9f=document.location.toString();
-var _a0=_9f.split("?",2);
-if(_a0.length>1){
-var _a1=_a0[1];
-var _a2=_a1.split("&");
-for(var x in _a2){
-var sp=_a2[x].split("=");
-if((sp[0].length>9)&&(sp[0].substr(0,9)=="djConfig.")){
-var opt=sp[0].substr(9);
-try{
-djConfig[opt]=eval(sp[1]);
-}
-catch(e){
-djConfig[opt]=sp[1];
-}
-}
-}
-}
-}
-if(((djConfig["baseScriptUri"]=="")||(djConfig["baseRelativePath"]==""))&&(document&&document.getElementsByTagName)){
-var _a6=document.getElementsByTagName("script");
-var _a7=/(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i;
-for(var i=0;i<_a6.length;i++){
-var src=_a6[i].getAttribute("src");
-if(!src){
-continue;
-}
-var m=src.match(_a7);
-if(m){
-var _ab=src.substring(0,m.index);
-if(src.indexOf("bootstrap1")>-1){
-_ab+="../";
-}
-if(!this["djConfig"]){
-djConfig={};
-}
-if(djConfig["baseScriptUri"]==""){
-djConfig["baseScriptUri"]=_ab;
-}
-if(djConfig["baseRelativePath"]==""){
-djConfig["baseRelativePath"]=_ab;
-}
-break;
-}
-}
-}
-var dr=dojo.render;
-var drh=dojo.render.html;
-var drs=dojo.render.svg;
-var dua=(drh.UA=navigator.userAgent);
-var dav=(drh.AV=navigator.appVersion);
-var t=true;
-var f=false;
-drh.capable=t;
-drh.support.builtin=t;
-dr.ver=parseFloat(drh.AV);
-dr.os.mac=dav.indexOf("Macintosh")>=0;
-dr.os.win=dav.indexOf("Windows")>=0;
-dr.os.linux=dav.indexOf("X11")>=0;
-drh.opera=dua.indexOf("Opera")>=0;
-drh.khtml=(dav.indexOf("Konqueror")>=0)||(dav.indexOf("Safari")>=0);
-drh.safari=dav.indexOf("Safari")>=0;
-var _b3=dua.indexOf("Gecko");
-drh.mozilla=drh.moz=(_b3>=0)&&(!drh.khtml);
-if(drh.mozilla){
-drh.geckoVersion=dua.substring(_b3+6,_b3+14);
-}
-drh.ie=(document.all)&&(!drh.opera);
-drh.ie50=drh.ie&&dav.indexOf("MSIE 5.0")>=0;
-drh.ie55=drh.ie&&dav.indexOf("MSIE 5.5")>=0;
-drh.ie60=drh.ie&&dav.indexOf("MSIE 6.0")>=0;
-drh.ie70=drh.ie&&dav.indexOf("MSIE 7.0")>=0;
-var cm=document["compatMode"];
-drh.quirks=(cm=="BackCompat")||(cm=="QuirksMode")||drh.ie55||drh.ie50;
-dojo.locale=dojo.locale||(drh.ie?navigator.userLanguage:navigator.language).toLowerCase();
-dr.vml.capable=drh.ie;
-drs.capable=f;
-drs.support.plugin=f;
-drs.support.builtin=f;
-var _b5=window["document"];
-var tdi=_b5["implementation"];
-if((tdi)&&(tdi["hasFeature"])&&(tdi.hasFeature("org.w3c.dom.svg","1.0"))){
-drs.capable=t;
-drs.support.builtin=t;
-drs.support.plugin=f;
-}
-if(drh.safari){
-var tmp=dua.split("AppleWebKit/")[1];
-var ver=parseFloat(tmp.split(" ")[0]);
-if(ver>=420){
-drs.capable=t;
-drs.support.builtin=t;
-drs.support.plugin=f;
-}
-}else{
-}
-})();
-dojo.hostenv.startPackage("dojo.hostenv");
-dojo.render.name=dojo.hostenv.name_="browser";
-dojo.hostenv.searchIds=[];
-dojo.hostenv._XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];
-dojo.hostenv.getXmlhttpObject=function(){
-var _b9=null;
-var _ba=null;
-try{
-_b9=new XMLHttpRequest();
-}
-catch(e){
-}
-if(!_b9){
-for(var i=0;i<3;++i){
-var _bc=dojo.hostenv._XMLHTTP_PROGIDS[i];
-try{
-_b9=new ActiveXObject(_bc);
-}
-catch(e){
-_ba=e;
-}
-if(_b9){
-dojo.hostenv._XMLHTTP_PROGIDS=[_bc];
-break;
-}
-}
-}
-if(!_b9){
-return dojo.raise("XMLHTTP not available",_ba);
-}
-return _b9;
-};
-dojo.hostenv._blockAsync=false;
-dojo.hostenv.getText=function(uri,_be,_bf){
-if(!_be){
-this._blockAsync=true;
-}
-var _c0=this.getXmlhttpObject();
-function isDocumentOk(_c1){
-var _c2=_c1["status"];
-return Boolean((!_c2)||((200<=_c2)&&(300>_c2))||(_c2==304));
-}
-if(_be){
-var _c3=this,_c4=null,gbl=dojo.global();
-var xhr=dojo.evalObjPath("dojo.io.XMLHTTPTransport");
-_c0.onreadystatechange=function(){
-if(_c4){
-gbl.clearTimeout(_c4);
-_c4=null;
-}
-if(_c3._blockAsync||(xhr&&xhr._blockAsync)){
-_c4=gbl.setTimeout(function(){
-_c0.onreadystatechange.apply(this);
-},10);
-}else{
-if(4==_c0.readyState){
-if(isDocumentOk(_c0)){
-_be(_c0.responseText);
-}
-}
-}
-};
-}
-_c0.open("GET",uri,_be?true:false);
-try{
-_c0.send(null);
-if(_be){
-return null;
-}
-if(!isDocumentOk(_c0)){
-var err=Error("Unable to load "+uri+" status:"+_c0.status);
-err.status=_c0.status;
-err.responseText=_c0.responseText;
-throw err;
-}
-}
-catch(e){
-this._blockAsync=false;
-if((_bf)&&(!_be)){
-return null;
-}else{
-throw e;
-}
-}
-this._blockAsync=false;
-return _c0.responseText;
-};
-dojo.hostenv.defaultDebugContainerId="dojoDebug";
-dojo.hostenv._println_buffer=[];
-dojo.hostenv._println_safe=false;
-dojo.hostenv.println=function(_c8){
-if(!dojo.hostenv._println_safe){
-dojo.hostenv._println_buffer.push(_c8);
-}else{
-try{
-var _c9=document.getElementById(djConfig.debugContainerId?djConfig.debugContainerId:dojo.hostenv.defaultDebugContainerId);
-if(!_c9){
-_c9=dojo.body();
-}
-var div=document.createElement("div");
-div.appendChild(document.createTextNode(_c8));
-_c9.appendChild(div);
-}
-catch(e){
-try{
-document.write("<div>"+_c8+"</div>");
-}
-catch(e2){
-window.status=_c8;
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-dojo.hostenv._println_safe=true;
-while(dojo.hostenv._println_buffer.length>0){
-dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
-}
-});
-function dj_addNodeEvtHdlr(_cb,_cc,fp){
-var _ce=_cb["on"+_cc]||function(){
-};
-_cb["on"+_cc]=function(){
-fp.apply(_cb,arguments);
-_ce.apply(_cb,arguments);
-};
-return true;
-}
-function dj_load_init(e){
-var _d0=(e&&e.type)?e.type.toLowerCase():"load";
-if(arguments.callee.initialized||(_d0!="domcontentloaded"&&_d0!="load")){
-return;
-}
-arguments.callee.initialized=true;
-if(typeof (_timer)!="undefined"){
-clearInterval(_timer);
-delete _timer;
-}
-var _d1=function(){
-if(dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-};
-if(dojo.hostenv.inFlightCount==0){
-_d1();
-dojo.hostenv.modulesLoaded();
-}else{
-dojo.hostenv.modulesLoadedListeners.unshift(_d1);
-}
-}
-if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
-document.addEventListener("DOMContentLoaded",dj_load_init,null);
-}
-window.addEventListener("load",dj_load_init,null);
-}
-if(dojo.render.html.ie&&dojo.render.os.win){
-document.attachEvent("onreadystatechange",function(e){
-if(document.readyState=="complete"){
-dj_load_init();
-}
-});
-}
-if(/(WebKit|khtml)/i.test(navigator.userAgent)){
-var _timer=setInterval(function(){
-if(/loaded|complete/.test(document.readyState)){
-dj_load_init();
-}
-},10);
-}
-if(dojo.render.html.ie){
-dj_addNodeEvtHdlr(window,"beforeunload",function(){
-dojo.hostenv._unloading=true;
-window.setTimeout(function(){
-dojo.hostenv._unloading=false;
-},0);
-});
-}
-dj_addNodeEvtHdlr(window,"unload",function(){
-dojo.hostenv.unloaded();
-if((!dojo.render.html.ie)||(dojo.render.html.ie&&dojo.hostenv._unloading)){
-dojo.hostenv.unloaded();
-}
-});
-dojo.hostenv.makeWidgets=function(){
-var _d3=[];
-if(djConfig.searchIds&&djConfig.searchIds.length>0){
-_d3=_d3.concat(djConfig.searchIds);
-}
-if(dojo.hostenv.searchIds&&dojo.hostenv.searchIds.length>0){
-_d3=_d3.concat(dojo.hostenv.searchIds);
-}
-if((djConfig.parseWidgets)||(_d3.length>0)){
-if(dojo.evalObjPath("dojo.widget.Parse")){
-var _d4=new dojo.xml.Parse();
-if(_d3.length>0){
-for(var x=0;x<_d3.length;x++){
-var _d6=document.getElementById(_d3[x]);
-if(!_d6){
-continue;
-}
-var _d7=_d4.parseElement(_d6,null,true);
-dojo.widget.getParser().createComponents(_d7);
-}
-}else{
-if(djConfig.parseWidgets){
-var _d7=_d4.parseElement(dojo.body(),null,true);
-dojo.widget.getParser().createComponents(_d7);
-}
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-if(!dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-});
-try{
-if(dojo.render.html.ie){
-document.namespaces.add("v","urn:schemas-microsoft-com:vml");
-document.createStyleSheet().addRule("v\\:*","behavior:url(#default#VML)");
-}
-}
-catch(e){
-}
-dojo.hostenv.writeIncludes=function(){
-};
-if(!dj_undef("document",this)){
-dj_currentDocument=this.document;
-}
-dojo.doc=function(){
-return dj_currentDocument;
-};
-dojo.body=function(){
-return dojo.doc().body||dojo.doc().getElementsByTagName("body")[0];
-};
-dojo.byId=function(id,doc){
-if((id)&&((typeof id=="string")||(id instanceof String))){
-if(!doc){
-doc=dj_currentDocument;
-}
-var ele=doc.getElementById(id);
-if(ele&&(ele.id!=id)&&doc.all){
-ele=null;
-eles=doc.all[id];
-if(eles){
-if(eles.length){
-for(var i=0;i<eles.length;i++){
-if(eles[i].id==id){
-ele=eles[i];
-break;
-}
-}
-}else{
-ele=eles;
-}
-}
-}
-return ele;
-}
-return id;
-};
-dojo.setContext=function(_dc,_dd){
-dj_currentContext=_dc;
-dj_currentDocument=_dd;
-};
-dojo._fireCallback=function(_de,_df,_e0){
-if((_df)&&((typeof _de=="string")||(_de instanceof String))){
-_de=_df[_de];
-}
-return (_df?_de.apply(_df,_e0||[]):_de());
-};
-dojo.withGlobal=function(_e1,_e2,_e3,_e4){
-var _e5;
-var _e6=dj_currentContext;
-var _e7=dj_currentDocument;
-try{
-dojo.setContext(_e1,_e1.document);
-_e5=dojo._fireCallback(_e2,_e3,_e4);
-}
-finally{
-dojo.setContext(_e6,_e7);
-}
-return _e5;
-};
-dojo.withDoc=function(_e8,_e9,_ea,_eb){
-var _ec;
-var _ed=dj_currentDocument;
-try{
-dj_currentDocument=_e8;
-_ec=dojo._fireCallback(_e9,_ea,_eb);
-}
-finally{
-dj_currentDocument=_ed;
-}
-return _ec;
-};
-}
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _ee=false;
-var _ef=false;
-var _f0=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_ee=true;
-}else{
-if(typeof this["load"]=="function"){
-_ef=true;
-}else{
-if(window.widget){
-_f0=true;
-}
-}
-}
-var _f1=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-_f1.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_ee)&&(!_f0)){
-_f1.push("browser_debug.js");
-}
-var _f2=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_f2=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<_f1.length;x++){
-var _f4=_f2+"src/"+_f1[x];
-if(_ee||_ef){
-load(_f4);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_f4+"'></scr"+"ipt>");
-}
-catch(e){
-var _f5=document.createElement("script");
-_f5.src=_f4;
-document.getElementsByTagName("head")[0].appendChild(_f5);
-}
-}
-}
-})();
-dojo.provide("dojo.string.common");
-dojo.string.trim=function(str,wh){
-if(!str.replace){
-return str;
-}
-if(!str.length){
-return str;
-}
-var re=(wh>0)?(/^\s+/):(wh<0)?(/\s+$/):(/^\s+|\s+$/g);
-return str.replace(re,"");
-};
-dojo.string.trimStart=function(str){
-return dojo.string.trim(str,1);
-};
-dojo.string.trimEnd=function(str){
-return dojo.string.trim(str,-1);
-};
-dojo.string.repeat=function(str,_fc,_fd){
-var out="";
-for(var i=0;i<_fc;i++){
-out+=str;
-if(_fd&&i<_fc-1){
-out+=_fd;
-}
-}
-return out;
-};
-dojo.string.pad=function(str,len,c,dir){
-var out=String(str);
-if(!c){
-c="0";
-}
-if(!dir){
-dir=1;
-}
-while(out.length<len){
-if(dir>0){
-out=c+out;
-}else{
-out+=c;
-}
-}
-return out;
-};
-dojo.string.padLeft=function(str,len,c){
-return dojo.string.pad(str,len,c,1);
-};
-dojo.string.padRight=function(str,len,c){
-return dojo.string.pad(str,len,c,-1);
-};
-dojo.provide("dojo.string");
-dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_10b,_10c){
-if(!dojo.lang.isFunction(_10c)){
-dojo.raise("dojo.inherits: superclass argument ["+_10c+"] must be a function (subclass: ["+_10b+"']");
-}
-_10b.prototype=new _10c();
-_10b.prototype.constructor=_10b;
-_10b.superclass=_10c.prototype;
-_10b["super"]=_10c.prototype;
-};
-dojo.lang._mixin=function(obj,_10e){
-var tobj={};
-for(var x in _10e){
-if((typeof tobj[x]=="undefined")||(tobj[x]!=_10e[x])){
-obj[x]=_10e[x];
-}
-}
-if(dojo.render.html.ie&&(typeof (_10e["toString"])=="function")&&(_10e["toString"]!=obj["toString"])&&(_10e["toString"]!=tobj["toString"])){
-obj.toString=_10e.toString;
-}
-return obj;
-};
-dojo.lang.mixin=function(obj,_112){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(obj,arguments[i]);
-}
-return obj;
-};
-dojo.lang.extend=function(_115,_116){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_115.prototype,arguments[i]);
-}
-return _115;
-};
-dojo.inherits=dojo.lang.inherits;
-dojo.mixin=dojo.lang.mixin;
-dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_119,_11a,_11b,_11c){
-if(!dojo.lang.isArrayLike(_119)&&dojo.lang.isArrayLike(_11a)){
-dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_119;
-_119=_11a;
-_11a=temp;
-}
-var _11e=dojo.lang.isString(_119);
-if(_11e){
-_119=_119.split("");
-}
-if(_11c){
-var step=-1;
-var i=_119.length-1;
-var end=-1;
-}else{
-var step=1;
-var i=0;
-var end=_119.length;
-}
-if(_11b){
-while(i!=end){
-if(_119[i]===_11a){
-return i;
-}
-i+=step;
-}
-}else{
-while(i!=end){
-if(_119[i]==_11a){
-return i;
-}
-i+=step;
-}
-}
-return -1;
-};
-dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_122,_123,_124){
-return dojo.lang.find(_122,_123,_124,true);
-};
-dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_125,_126){
-return dojo.lang.find(_125,_126)>-1;
-};
-dojo.lang.isObject=function(it){
-if(typeof it=="undefined"){
-return false;
-}
-return (typeof it=="object"||it===null||dojo.lang.isArray(it)||dojo.lang.isFunction(it));
-};
-dojo.lang.isArray=function(it){
-return (it&&it instanceof Array||typeof it=="array");
-};
-dojo.lang.isArrayLike=function(it){
-if((!it)||(dojo.lang.isUndefined(it))){
-return false;
-}
-if(dojo.lang.isString(it)){
-return false;
-}
-if(dojo.lang.isFunction(it)){
-return false;
-}
-if(dojo.lang.isArray(it)){
-return true;
-}
-if((it.tagName)&&(it.tagName.toLowerCase()=="form")){
-return false;
-}
-if(dojo.lang.isNumber(it.length)&&isFinite(it.length)){
-return true;
-}
-return false;
-};
-dojo.lang.isFunction=function(it){
-return (it instanceof Function||typeof it=="function");
-};
-(function(){
-if((dojo.render.html.capable)&&(dojo.render.html["safari"])){
-dojo.lang.isFunction=function(it){
-if((typeof (it)=="function")&&(it=="[object NodeList]")){
-return false;
-}
-return (it instanceof Function||typeof it=="function");
-};
-}
-})();
-dojo.lang.isString=function(it){
-return (typeof it=="string"||it instanceof String);
-};
-dojo.lang.isAlien=function(it){
-if(!it){
-return false;
-}
-return !dojo.lang.isFunction(it)&&/\{\s*\[native code\]\s*\}/.test(String(it));
-};
-dojo.lang.isBoolean=function(it){
-return (it instanceof Boolean||typeof it=="boolean");
-};
-dojo.lang.isNumber=function(it){
-return (it instanceof Number||typeof it=="number");
-};
-dojo.lang.isUndefined=function(it){
-return ((typeof (it)=="undefined")&&(it==undefined));
-};
-dojo.provide("dojo.lang.extras");
-dojo.lang.setTimeout=function(func,_132){
-var _133=window,_134=2;
-if(!dojo.lang.isFunction(func)){
-_133=func;
-func=_132;
-_132=arguments[2];
-_134++;
-}
-if(dojo.lang.isString(func)){
-func=_133[func];
-}
-var args=[];
-for(var i=_134;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-return dojo.global().setTimeout(function(){
-func.apply(_133,args);
-},_132);
-};
-dojo.lang.clearTimeout=function(_137){
-dojo.global().clearTimeout(_137);
-};
-dojo.lang.getNameInObj=function(ns,item){
-if(!ns){
-ns=dj_global;
-}
-for(var x in ns){
-if(ns[x]===item){
-return new String(x);
-}
-}
-return null;
-};
-dojo.lang.shallowCopy=function(obj,deep){
-var i,ret;
-if(obj===null){
-return null;
-}
-if(dojo.lang.isObject(obj)){
-ret=new obj.constructor();
-for(i in obj){
-if(dojo.lang.isUndefined(ret[i])){
-ret[i]=deep?dojo.lang.shallowCopy(obj[i],deep):obj[i];
-}
-}
-}else{
-if(dojo.lang.isArray(obj)){
-ret=[];
-for(i=0;i<obj.length;i++){
-ret[i]=deep?dojo.lang.shallowCopy(obj[i],deep):obj[i];
-}
-}else{
-ret=obj;
-}
-}
-return ret;
-};
-dojo.lang.firstValued=function(){
-for(var i=0;i<arguments.length;i++){
-if(typeof arguments[i]!="undefined"){
-return arguments[i];
-}
-}
-return undefined;
-};
-dojo.lang.getObjPathValue=function(_140,_141,_142){
-with(dojo.parseObjPath(_140,_141,_142)){
-return dojo.evalProp(prop,obj,_142);
-}
-};
-dojo.lang.setObjPathValue=function(_143,_144,_145,_146){
-dojo.deprecated("dojo.lang.setObjPathValue","use dojo.parseObjPath and the '=' operator","0.6");
-if(arguments.length<4){
-_146=true;
-}
-with(dojo.parseObjPath(_143,_145,_146)){
-if(obj&&(_146||(prop in obj))){
-obj[prop]=_144;
-}
-}
-};
-dojo.provide("dojo.io.common");
-dojo.io.transports=[];
-dojo.io.hdlrFuncNames=["load","error","timeout"];
-dojo.io.Request=function(url,_148,_149,_14a){
-if((arguments.length==1)&&(arguments[0].constructor==Object)){
-this.fromKwArgs(arguments[0]);
-}else{
-this.url=url;
-if(_148){
-this.mimetype=_148;
-}
-if(_149){
-this.transport=_149;
-}
-if(arguments.length>=4){
-this.changeUrl=_14a;
-}
-}
-};
-dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_14d,_14e){
-},error:function(type,_150,_151,_152){
-},timeout:function(type,_154,_155,_156){
-},handle:function(type,data,_159,_15a){
-},timeoutSeconds:0,abort:function(){
-},fromKwArgs:function(_15b){
-if(_15b["url"]){
-_15b.url=_15b.url.toString();
-}
-if(_15b["formNode"]){
-_15b.formNode=dojo.byId(_15b.formNode);
-}
-if(!_15b["method"]&&_15b["formNode"]&&_15b["formNode"].method){
-_15b.method=_15b["formNode"].method;
-}
-if(!_15b["handle"]&&_15b["handler"]){
-_15b.handle=_15b.handler;
-}
-if(!_15b["load"]&&_15b["loaded"]){
-_15b.load=_15b.loaded;
-}
-if(!_15b["changeUrl"]&&_15b["changeURL"]){
-_15b.changeUrl=_15b.changeURL;
-}
-_15b.encoding=dojo.lang.firstValued(_15b["encoding"],djConfig["bindEncoding"],"");
-_15b.sendTransport=dojo.lang.firstValued(_15b["sendTransport"],djConfig["ioSendTransport"],false);
-var _15c=dojo.lang.isFunction;
-for(var x=0;x<dojo.io.hdlrFuncNames.length;x++){
-var fn=dojo.io.hdlrFuncNames[x];
-if(_15b[fn]&&_15c(_15b[fn])){
-continue;
-}
-if(_15b["handle"]&&_15c(_15b["handle"])){
-_15b[fn]=_15b.handle;
-}
-}
-dojo.lang.mixin(this,_15b);
-}});
-dojo.io.Error=function(msg,type,num){
-this.message=msg;
-this.type=type||"unknown";
-this.number=num||0;
-};
-dojo.io.transports.addTransport=function(name){
-this.push(name);
-this[name]=dojo.io[name];
-};
-dojo.io.bind=function(_163){
-if(!(_163 instanceof dojo.io.Request)){
-try{
-_163=new dojo.io.Request(_163);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _164="";
-if(_163["transport"]){
-_164=_163["transport"];
-if(!this[_164]){
-dojo.io.sendBindError(_163,"No dojo.io.bind() transport with name '"+_163["transport"]+"'.");
-return _163;
-}
-if(!this[_164].canHandle(_163)){
-dojo.io.sendBindError(_163,"dojo.io.bind() transport with name '"+_163["transport"]+"' cannot handle this type of request.");
-return _163;
-}
-}else{
-for(var x=0;x<dojo.io.transports.length;x++){
-var tmp=dojo.io.transports[x];
-if((this[tmp])&&(this[tmp].canHandle(_163))){
-_164=tmp;
-break;
-}
-}
-if(_164==""){
-dojo.io.sendBindError(_163,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
-return _163;
-}
-}
-this[_164].bind(_163);
-_163.bindSuccess=true;
-return _163;
-};
-dojo.io.sendBindError=function(_167,_168){
-if((typeof _167.error=="function"||typeof _167.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
-var _169=new dojo.io.Error(_168);
-setTimeout(function(){
-_167[(typeof _167.error=="function")?"error":"handle"]("error",_169,null,_167);
-},50);
-}else{
-dojo.raise(_168);
-}
-};
-dojo.io.queueBind=function(_16a){
-if(!(_16a instanceof dojo.io.Request)){
-try{
-_16a=new dojo.io.Request(_16a);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _16b=_16a.load;
-_16a.load=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_16b.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-var _16d=_16a.error;
-_16a.error=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_16d.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-dojo.io._bindQueue.push(_16a);
-dojo.io._dispatchNextQueueBind();
-return _16a;
-};
-dojo.io._dispatchNextQueueBind=function(){
-if(!dojo.io._queueBindInFlight){
-dojo.io._queueBindInFlight=true;
-if(dojo.io._bindQueue.length>0){
-dojo.io.bind(dojo.io._bindQueue.shift());
-}else{
-dojo.io._queueBindInFlight=false;
-}
-}
-};
-dojo.io._bindQueue=[];
-dojo.io._queueBindInFlight=false;
-dojo.io.argsFromMap=function(map,_170,last){
-var enc=/utf/i.test(_170||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _173=[];
-var _174=new Object();
-for(var name in map){
-var _176=function(elt){
-var val=enc(name)+"="+enc(elt);
-_173[(last==name)?"push":"unshift"](val);
-};
-if(!_174[name]){
-var _179=map[name];
-if(dojo.lang.isArray(_179)){
-dojo.lang.forEach(_179,_176);
-}else{
-_176(_179);
-}
-}
-}
-return _173.join("&");
-};
-dojo.io.setIFrameSrc=function(_17a,src,_17c){
-try{
-var r=dojo.render.html;
-if(!_17c){
-if(r.safari){
-_17a.location=src;
-}else{
-frames[_17a.name].location=src;
-}
-}else{
-var idoc;
-if(r.ie){
-idoc=_17a.contentWindow.document;
-}else{
-if(r.safari){
-idoc=_17a.document;
-}else{
-idoc=_17a.contentWindow;
-}
-}
-if(!idoc){
-_17a.location=src;
-return;
-}else{
-idoc.location.replace(src);
-}
-}
-}
-catch(e){
-dojo.debug(e);
-dojo.debug("setIFrameSrc: "+e);
-}
-};
-dojo.provide("dojo.lang.array");
-dojo.lang.mixin(dojo.lang,{has:function(obj,name){
-try{
-return typeof obj[name]!="undefined";
-}
-catch(e){
-return false;
-}
-},isEmpty:function(obj){
-if(dojo.lang.isObject(obj)){
-var tmp={};
-var _183=0;
-for(var x in obj){
-if(obj[x]&&(!tmp[x])){
-_183++;
-break;
-}
-}
-return _183==0;
-}else{
-if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
-return obj.length==0;
-}
-}
-},map:function(arr,obj,_187){
-var _188=dojo.lang.isString(arr);
-if(_188){
-arr=arr.split("");
-}
-if(dojo.lang.isFunction(obj)&&(!_187)){
-_187=obj;
-obj=dj_global;
-}else{
-if(dojo.lang.isFunction(obj)&&_187){
-var _189=obj;
-obj=_187;
-_187=_189;
-}
-}
-if(Array.map){
-var _18a=Array.map(arr,_187,obj);
-}else{
-var _18a=[];
-for(var i=0;i<arr.length;++i){
-_18a.push(_187.call(obj,arr[i]));
-}
-}
-if(_188){
-return _18a.join("");
-}else{
-return _18a;
-}
-},reduce:function(arr,_18d,obj,_18f){
-var _190=_18d;
-if(arguments.length==1){
-dojo.debug("dojo.lang.reduce called with too few arguments!");
-return false;
-}else{
-if(arguments.length==2){
-_18f=_18d;
-_190=arr.shift();
-}else{
-if(arguments.lenght==3){
-if(dojo.lang.isFunction(obj)){
-_18f=obj;
-obj=null;
-}
-}else{
-if(dojo.lang.isFunction(obj)){
-var tmp=_18f;
-_18f=obj;
-obj=tmp;
-}
-}
-}
-}
-var ob=obj?obj:dj_global;
-dojo.lang.map(arr,function(val){
-_190=_18f.call(ob,_190,val);
-});
-return _190;
-},forEach:function(_194,_195,_196){
-if(dojo.lang.isString(_194)){
-_194=_194.split("");
-}
-if(Array.forEach){
-Array.forEach(_194,_195,_196);
-}else{
-if(!_196){
-_196=dj_global;
-}
-for(var i=0,l=_194.length;i<l;i++){
-_195.call(_196,_194[i],i,_194);
-}
-}
-},_everyOrSome:function(_199,arr,_19b,_19c){
-if(dojo.lang.isString(arr)){
-arr=arr.split("");
-}
-if(Array.every){
-return Array[_199?"every":"some"](arr,_19b,_19c);
-}else{
-if(!_19c){
-_19c=dj_global;
-}
-for(var i=0,l=arr.length;i<l;i++){
-var _19f=_19b.call(_19c,arr[i],i,arr);
-if(_199&&!_19f){
-return false;
-}else{
-if((!_199)&&(_19f)){
-return true;
-}
-}
-}
-return Boolean(_199);
-}
-},every:function(arr,_1a1,_1a2){
-return this._everyOrSome(true,arr,_1a1,_1a2);
-},some:function(arr,_1a4,_1a5){
-return this._everyOrSome(false,arr,_1a4,_1a5);
-},filter:function(arr,_1a7,_1a8){
-var _1a9=dojo.lang.isString(arr);
-if(_1a9){
-arr=arr.split("");
-}
-var _1aa;
-if(Array.filter){
-_1aa=Array.filter(arr,_1a7,_1a8);
-}else{
-if(!_1a8){
-if(arguments.length>=3){
-dojo.raise("thisObject doesn't exist!");
-}
-_1a8=dj_global;
-}
-_1aa=[];
-for(var i=0;i<arr.length;i++){
-if(_1a7.call(_1a8,arr[i],i,arr)){
-_1aa.push(arr[i]);
-}
-}
-}
-if(_1a9){
-return _1aa.join("");
-}else{
-return _1aa;
-}
-},unnest:function(){
-var out=[];
-for(var i=0;i<arguments.length;i++){
-if(dojo.lang.isArrayLike(arguments[i])){
-var add=dojo.lang.unnest.apply(this,arguments[i]);
-out=out.concat(add);
-}else{
-out.push(arguments[i]);
-}
-}
-return out;
-},toArray:function(_1af,_1b0){
-var _1b1=[];
-for(var i=_1b0||0;i<_1af.length;i++){
-_1b1.push(_1af[i]);
-}
-return _1b1;
-}});
-dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_1b3,_1b4){
-var fcn=(dojo.lang.isString(_1b4)?_1b3[_1b4]:_1b4)||function(){
-};
-return function(){
-return fcn.apply(_1b3,arguments);
-};
-};
-dojo.lang.anonCtr=0;
-dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_1b6,_1b7,_1b8){
-var nso=(_1b7||dojo.lang.anon);
-if((_1b8)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
-for(var x in nso){
-try{
-if(nso[x]===_1b6){
-return x;
-}
-}
-catch(e){
-}
-}
-}
-var ret="__"+dojo.lang.anonCtr++;
-while(typeof nso[ret]!="undefined"){
-ret="__"+dojo.lang.anonCtr++;
-}
-nso[ret]=_1b6;
-return ret;
-};
-dojo.lang.forward=function(_1bc){
-return function(){
-return this[_1bc].apply(this,arguments);
-};
-};
-dojo.lang.curry=function(_1bd,func){
-var _1bf=[];
-_1bd=_1bd||dj_global;
-if(dojo.lang.isString(func)){
-func=_1bd[func];
-}
-for(var x=2;x<arguments.length;x++){
-_1bf.push(arguments[x]);
-}
-var _1c1=(func["__preJoinArity"]||func.length)-_1bf.length;
-function gather(_1c2,_1c3,_1c4){
-var _1c5=_1c4;
-var _1c6=_1c3.slice(0);
-for(var x=0;x<_1c2.length;x++){
-_1c6.push(_1c2[x]);
-}
-_1c4=_1c4-_1c2.length;
-if(_1c4<=0){
-var res=func.apply(_1bd,_1c6);
-_1c4=_1c5;
-return res;
-}else{
-return function(){
-return gather(arguments,_1c6,_1c4);
-};
-}
-}
-return gather([],_1bf,_1c1);
-};
-dojo.lang.curryArguments=function(_1c9,func,args,_1cc){
-var _1cd=[];
-var x=_1cc||0;
-for(x=_1cc;x<args.length;x++){
-_1cd.push(args[x]);
-}
-return dojo.lang.curry.apply(dojo.lang,[_1c9,func].concat(_1cd));
-};
-dojo.lang.tryThese=function(){
-for(var x=0;x<arguments.length;x++){
-try{
-if(typeof arguments[x]=="function"){
-var ret=(arguments[x]());
-if(ret){
-return ret;
-}
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-};
-dojo.lang.delayThese=function(farr,cb,_1d3,_1d4){
-if(!farr.length){
-if(typeof _1d4=="function"){
-_1d4();
-}
-return;
-}
-if((typeof _1d3=="undefined")&&(typeof cb=="number")){
-_1d3=cb;
-cb=function(){
-};
-}else{
-if(!cb){
-cb=function(){
-};
-if(!_1d3){
-_1d3=0;
-}
-}
-}
-setTimeout(function(){
-(farr.shift())();
-cb();
-dojo.lang.delayThese(farr,cb,_1d3,_1d4);
-},_1d3);
-};
-dojo.provide("dojo.string.extras");
-dojo.string.substituteParams=function(_1d5,hash){
-var map=(typeof hash=="object")?hash:dojo.lang.toArray(arguments,1);
-return _1d5.replace(/\%\{(\w+)\}/g,function(_1d8,key){
-if(typeof (map[key])!="undefined"&&map[key]!=null){
-return map[key];
-}
-dojo.raise("Substitution not found: "+key);
-});
-};
-dojo.string.capitalize=function(str){
-if(!dojo.lang.isString(str)){
-return "";
-}
-if(arguments.length==0){
-str=this;
-}
-var _1db=str.split(" ");
-for(var i=0;i<_1db.length;i++){
-_1db[i]=_1db[i].charAt(0).toUpperCase()+_1db[i].substring(1);
-}
-return _1db.join(" ");
-};
-dojo.string.isBlank=function(str){
-if(!dojo.lang.isString(str)){
-return true;
-}
-return (dojo.string.trim(str).length==0);
-};
-dojo.string.encodeAscii=function(str){
-if(!dojo.lang.isString(str)){
-return str;
-}
-var ret="";
-var _1e0=escape(str);
-var _1e1,re=/%u([0-9A-F]{4})/i;
-while((_1e1=_1e0.match(re))){
-var num=Number("0x"+_1e1[1]);
-var _1e4=escape("&#"+num+";");
-ret+=_1e0.substring(0,_1e1.index)+_1e4;
-_1e0=_1e0.substring(_1e1.index+_1e1[0].length);
-}
-ret+=_1e0.replace(/\+/g,"%2B");
-return ret;
-};
-dojo.string.escape=function(type,str){
-var args=dojo.lang.toArray(arguments,1);
-switch(type.toLowerCase()){
-case "xml":
-case "html":
-case "xhtml":
-return dojo.string.escapeXml.apply(this,args);
-case "sql":
-return dojo.string.escapeSql.apply(this,args);
-case "regexp":
-case "regex":
-return dojo.string.escapeRegExp.apply(this,args);
-case "javascript":
-case "jscript":
-case "js":
-return dojo.string.escapeJavaScript.apply(this,args);
-case "ascii":
-return dojo.string.encodeAscii.apply(this,args);
-default:
-return str;
-}
-};
-dojo.string.escapeXml=function(str,_1e9){
-str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_1e9){
-str=str.replace(/'/gm,"&#39;");
-}
-return str;
-};
-dojo.string.escapeSql=function(str){
-return str.replace(/'/gm,"''");
-};
-dojo.string.escapeRegExp=function(str){
-return str.replace(/\\/gm,"\\\\").replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm,"\\$1");
-};
-dojo.string.escapeJavaScript=function(str){
-return str.replace(/(["'\f\b\n\t\r])/gm,"\\$1");
-};
-dojo.string.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.string.summary=function(str,len){
-if(!len||str.length<=len){
-return str;
-}
-return str.substring(0,len).replace(/\.+$/,"")+"...";
-};
-dojo.string.endsWith=function(str,end,_1f2){
-if(_1f2){
-str=str.toLowerCase();
-end=end.toLowerCase();
-}
-if((str.length-end.length)<0){
-return false;
-}
-return str.lastIndexOf(end)==str.length-end.length;
-};
-dojo.string.endsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.endsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.startsWith=function(str,_1f6,_1f7){
-if(_1f7){
-str=str.toLowerCase();
-_1f6=_1f6.toLowerCase();
-}
-return str.indexOf(_1f6)==0;
-};
-dojo.string.startsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.startsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.has=function(str){
-for(var i=1;i<arguments.length;i++){
-if(str.indexOf(arguments[i])>-1){
-return true;
-}
-}
-return false;
-};
-dojo.string.normalizeNewlines=function(text,_1fd){
-if(_1fd=="\n"){
-text=text.replace(/\r\n/g,"\n");
-text=text.replace(/\r/g,"\n");
-}else{
-if(_1fd=="\r"){
-text=text.replace(/\r\n/g,"\r");
-text=text.replace(/\n/g,"\r");
-}else{
-text=text.replace(/([^\r])\n/g,"$1\r\n").replace(/\r([^\n])/g,"\r\n$1");
-}
-}
-return text;
-};
-dojo.string.splitEscaped=function(str,_1ff){
-var _200=[];
-for(var i=0,_202=0;i<str.length;i++){
-if(str.charAt(i)=="\\"){
-i++;
-continue;
-}
-if(str.charAt(i)==_1ff){
-_200.push(str.substring(_202,i));
-_202=i+1;
-}
-}
-_200.push(str.substr(_202));
-return _200;
-};
-dojo.provide("dojo.dom");
-dojo.dom.ELEMENT_NODE=1;
-dojo.dom.ATTRIBUTE_NODE=2;
-dojo.dom.TEXT_NODE=3;
-dojo.dom.CDATA_SECTION_NODE=4;
-dojo.dom.ENTITY_REFERENCE_NODE=5;
-dojo.dom.ENTITY_NODE=6;
-dojo.dom.PROCESSING_INSTRUCTION_NODE=7;
-dojo.dom.COMMENT_NODE=8;
-dojo.dom.DOCUMENT_NODE=9;
-dojo.dom.DOCUMENT_TYPE_NODE=10;
-dojo.dom.DOCUMENT_FRAGMENT_NODE=11;
-dojo.dom.NOTATION_NODE=12;
-dojo.dom.dojoml="http://www.dojotoolkit.org/2004/dojoml";
-dojo.dom.xmlns={svg:"http://www.w3.org/2000/svg",smil:"http://www.w3.org/2001/SMIL20/",mml:"http://www.w3.org/1998/Math/MathML",cml:"http://www.xml-cml.org",xlink:"http://www.w3.org/1999/xlink",xhtml:"http://www.w3.org/1999/xhtml",xul:"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",xbl:"http://www.mozilla.org/xbl",fo:"http://www.w3.org/1999/XSL/Format",xsl:"http://www.w3.org/1999/XSL/Transform",xslt:"http://www.w3.org/1999/XSL/Transform",xi:"http://www.w3.org/2001/XInclude",xforms:"http://www.w3.org/2002/01/xforms",saxon:"http://icl.com/saxon",xalan:"http://xml.apache.org/xslt",xsd:"http://www.w3.org/2001/XMLSchema",dt:"http://www.w3.org/2001/XMLSchema-datatypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#",rdfs:"http://www.w3.org/2000/01/rdf-schema#",dc:"http://purl.org/dc/elements/1.1/",dcq:"http://purl.org/dc/qualifiers/1.0","soap-env":"http://schemas.xmlsoap.org/soap/envelope/",wsdl:"http://schemas.xmlsoap.org/wsdl/",AdobeExtensions:"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"};
-dojo.dom.isNode=function(wh){
-if(typeof Element=="function"){
-try{
-return wh instanceof Element;
-}
-catch(e){
-}
-}else{
-return wh&&!isNaN(wh.nodeType);
-}
-};
-dojo.dom.getUniqueId=function(){
-var _204=dojo.doc();
-do{
-var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_204.getElementById(id));
-return id;
-};
-dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_206,_207){
-var node=_206.firstChild;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.nextSibling;
-}
-if(_207&&node&&node.tagName&&node.tagName.toLowerCase()!=_207.toLowerCase()){
-node=dojo.dom.nextElement(node,_207);
-}
-return node;
-};
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_209,_20a){
-var node=_209.lastChild;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.previousSibling;
-}
-if(_20a&&node&&node.tagName&&node.tagName.toLowerCase()!=_20a.toLowerCase()){
-node=dojo.dom.prevElement(node,_20a);
-}
-return node;
-};
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_20d){
-if(!node){
-return null;
-}
-do{
-node=node.nextSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_20d&&_20d.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.nextElement(node,_20d);
-}
-return node;
-};
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_20f){
-if(!node){
-return null;
-}
-if(_20f){
-_20f=_20f.toLowerCase();
-}
-do{
-node=node.previousSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_20f&&_20f.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_20f);
-}
-return node;
-};
-dojo.dom.moveChildren=function(_210,_211,trim){
-var _213=0;
-if(trim){
-while(_210.hasChildNodes()&&_210.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_210.removeChild(_210.firstChild);
-}
-while(_210.hasChildNodes()&&_210.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_210.removeChild(_210.lastChild);
-}
-}
-while(_210.hasChildNodes()){
-_211.appendChild(_210.firstChild);
-_213++;
-}
-return _213;
-};
-dojo.dom.copyChildren=function(_214,_215,trim){
-var _217=_214.cloneNode(true);
-return this.moveChildren(_217,_215,trim);
-};
-dojo.dom.replaceChildren=function(node,_219){
-var _21a=[];
-if(dojo.render.html.ie){
-for(var i=0;i<node.childNodes.length;i++){
-_21a.push(node.childNodes[i]);
-}
-}
-dojo.dom.removeChildren(node);
-node.appendChild(_219);
-for(var i=0;i<_21a.length;i++){
-dojo.dom.destroyNode(_21a[i]);
-}
-};
-dojo.dom.removeChildren=function(node){
-var _21d=node.childNodes.length;
-while(node.hasChildNodes()){
-dojo.dom.removeNode(node.firstChild);
-}
-return _21d;
-};
-dojo.dom.replaceNode=function(node,_21f){
-return node.parentNode.replaceChild(_21f,node);
-};
-dojo.dom.destroyNode=function(node){
-if(node.parentNode){
-node=dojo.dom.removeNode(node);
-}
-if(node.nodeType!=3){
-if(dojo.evalObjPath("dojo.event.browser.clean",false)){
-dojo.event.browser.clean(node);
-}
-if(dojo.render.html.ie){
-node.outerHTML="";
-}
-}
-};
-dojo.dom.removeNode=function(node){
-if(node&&node.parentNode){
-return node.parentNode.removeChild(node);
-}
-};
-dojo.dom.getAncestors=function(node,_223,_224){
-var _225=[];
-var _226=(_223&&(_223 instanceof Function||typeof _223=="function"));
-while(node){
-if(!_226||_223(node)){
-_225.push(node);
-}
-if(_224&&_225.length>0){
-return _225[0];
-}
-node=node.parentNode;
-}
-if(_224){
-return null;
-}
-return _225;
-};
-dojo.dom.getAncestorsByTag=function(node,tag,_229){
-tag=tag.toLowerCase();
-return dojo.dom.getAncestors(node,function(el){
-return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_229);
-};
-dojo.dom.getFirstAncestorByTag=function(node,tag){
-return dojo.dom.getAncestorsByTag(node,tag,true);
-};
-dojo.dom.isDescendantOf=function(node,_22e,_22f){
-if(_22f&&node){
-node=node.parentNode;
-}
-while(node){
-if(node==_22e){
-return true;
-}
-node=node.parentNode;
-}
-return false;
-};
-dojo.dom.innerXML=function(node){
-if(node.innerXML){
-return node.innerXML;
-}else{
-if(node.xml){
-return node.xml;
-}else{
-if(typeof XMLSerializer!="undefined"){
-return (new XMLSerializer()).serializeToString(node);
-}
-}
-}
-};
-dojo.dom.createDocument=function(){
-var doc=null;
-var _232=dojo.doc();
-if(!dj_undef("ActiveXObject")){
-var _233=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_233.length;i++){
-try{
-doc=new ActiveXObject(_233[i]+".XMLDOM");
-}
-catch(e){
-}
-if(doc){
-break;
-}
-}
-}else{
-if((_232.implementation)&&(_232.implementation.createDocument)){
-doc=_232.implementation.createDocument("","",null);
-}
-}
-return doc;
-};
-dojo.dom.createDocumentFromText=function(str,_236){
-if(!_236){
-_236="text/xml";
-}
-if(!dj_undef("DOMParser")){
-var _237=new DOMParser();
-return _237.parseFromString(str,_236);
-}else{
-if(!dj_undef("ActiveXObject")){
-var _238=dojo.dom.createDocument();
-if(_238){
-_238.async=false;
-_238.loadXML(str);
-return _238;
-}else{
-dojo.debug("toXml didn't work?");
-}
-}else{
-var _239=dojo.doc();
-if(_239.createElement){
-var tmp=_239.createElement("xml");
-tmp.innerHTML=str;
-if(_239.implementation&&_239.implementation.createDocument){
-var _23b=_239.implementation.createDocument("foo","",null);
-for(var i=0;i<tmp.childNodes.length;i++){
-_23b.importNode(tmp.childNodes.item(i),true);
-}
-return _23b;
-}
-return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
-}
-}
-}
-return null;
-};
-dojo.dom.prependChild=function(node,_23e){
-if(_23e.firstChild){
-_23e.insertBefore(node,_23e.firstChild);
-}else{
-_23e.appendChild(node);
-}
-return true;
-};
-dojo.dom.insertBefore=function(node,ref,_241){
-if((_241!=true)&&(node===ref||node.nextSibling===ref)){
-return false;
-}
-var _242=ref.parentNode;
-_242.insertBefore(node,ref);
-return true;
-};
-dojo.dom.insertAfter=function(node,ref,_245){
-var pn=ref.parentNode;
-if(ref==pn.lastChild){
-if((_245!=true)&&(node===ref)){
-return false;
-}
-pn.appendChild(node);
-}else{
-return this.insertBefore(node,ref.nextSibling,_245);
-}
-return true;
-};
-dojo.dom.insertAtPosition=function(node,ref,_249){
-if((!node)||(!ref)||(!_249)){
-return false;
-}
-switch(_249.toLowerCase()){
-case "before":
-return dojo.dom.insertBefore(node,ref);
-case "after":
-return dojo.dom.insertAfter(node,ref);
-case "first":
-if(ref.firstChild){
-return dojo.dom.insertBefore(node,ref.firstChild);
-}else{
-ref.appendChild(node);
-return true;
-}
-break;
-default:
-ref.appendChild(node);
-return true;
-}
-};
-dojo.dom.insertAtIndex=function(node,_24b,_24c){
-var _24d=_24b.childNodes;
-if(!_24d.length||_24d.length==_24c){
-_24b.appendChild(node);
-return true;
-}
-if(_24c==0){
-return dojo.dom.prependChild(node,_24b);
-}
-return dojo.dom.insertAfter(node,_24d[_24c-1]);
-};
-dojo.dom.textContent=function(node,text){
-if(arguments.length>1){
-var _250=dojo.doc();
-dojo.dom.replaceChildren(node,_250.createTextNode(text));
-return text;
-}else{
-if(node.textContent!=undefined){
-return node.textContent;
-}
-var _251="";
-if(node==null){
-return _251;
-}
-for(var i=0;i<node.childNodes.length;i++){
-switch(node.childNodes[i].nodeType){
-case 1:
-case 5:
-_251+=dojo.dom.textContent(node.childNodes[i]);
-break;
-case 3:
-case 2:
-case 4:
-_251+=node.childNodes[i].nodeValue;
-break;
-default:
-break;
-}
-}
-return _251;
-}
-};
-dojo.dom.hasParent=function(node){
-return Boolean(node&&node.parentNode&&dojo.dom.isNode(node.parentNode));
-};
-dojo.dom.isTag=function(node){
-if(node&&node.tagName){
-for(var i=1;i<arguments.length;i++){
-if(node.tagName==String(arguments[i])){
-return String(arguments[i]);
-}
-}
-}
-return "";
-};
-dojo.dom.setAttributeNS=function(elem,_257,_258,_259){
-if(elem==null||((elem==undefined)&&(typeof elem=="undefined"))){
-dojo.raise("No element given to dojo.dom.setAttributeNS");
-}
-if(!((elem.setAttributeNS==undefined)&&(typeof elem.setAttributeNS=="undefined"))){
-elem.setAttributeNS(_257,_258,_259);
-}else{
-var _25a=elem.ownerDocument;
-var _25b=_25a.createNode(2,_258,_257);
-_25b.nodeValue=_259;
-elem.setAttributeNode(_25b);
-}
-};
-dojo.provide("dojo.undo.browser");
-try{
-if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
-}
-}
-catch(e){
-}
-if(dojo.render.html.opera){
-dojo.debug("Opera is not supported with dojo.undo.browser, so back/forward detection will not work.");
-}
-dojo.undo.browser={initialHref:(!dj_undef("window"))?window.location.href:"",initialHash:(!dj_undef("window"))?window.location.hash:"",moveForward:false,historyStack:[],forwardStack:[],historyIframe:null,bookmarkAnchor:null,locationTimer:null,setInitialState:function(args){
-this.initialState=this._createState(this.initialHref,args,this.initialHash);
-},addToHistory:function(args){
-this.forwardStack=[];
-var hash=null;
-var url=null;
-if(!this.historyIframe){
-this.historyIframe=window.frames["djhistory"];
-}
-if(!this.bookmarkAnchor){
-this.bookmarkAnchor=document.createElement("a");
-dojo.body().appendChild(this.bookmarkAnchor);
-this.bookmarkAnchor.style.display="none";
-}
-if(args["changeUrl"]){
-hash="#"+((args["changeUrl"]!==true)?args["changeUrl"]:(new Date()).getTime());
-if(this.historyStack.length==0&&this.initialState.urlHash==hash){
-this.initialState=this._createState(url,args,hash);
-return;
-}else{
-if(this.historyStack.length>0&&this.historyStack[this.historyStack.length-1].urlHash==hash){
-this.historyStack[this.historyStack.length-1]=this._createState(url,args,hash);
-return;
-}
-}
-this.changingUrl=true;
-setTimeout("window.location.href = '"+hash+"'; dojo.undo.browser.changingUrl = false;",1);
-this.bookmarkAnchor.href=hash;
-if(dojo.render.html.ie){
-url=this._loadIframeHistory();
-var _260=args["back"]||args["backButton"]||args["handle"];
-var tcb=function(_262){
-if(window.location.hash!=""){
-setTimeout("window.location.href = '"+hash+"';",1);
-}
-_260.apply(this,[_262]);
-};
-if(args["back"]){
-args.back=tcb;
-}else{
-if(args["backButton"]){
-args.backButton=tcb;
-}else{
-if(args["handle"]){
-args.handle=tcb;
-}
-}
-}
-var _263=args["forward"]||args["forwardButton"]||args["handle"];
-var tfw=function(_265){
-if(window.location.hash!=""){
-window.location.href=hash;
-}
-if(_263){
-_263.apply(this,[_265]);
-}
-};
-if(args["forward"]){
-args.forward=tfw;
-}else{
-if(args["forwardButton"]){
-args.forwardButton=tfw;
-}else{
-if(args["handle"]){
-args.handle=tfw;
-}
-}
-}
-}else{
-if(dojo.render.html.moz){
-if(!this.locationTimer){
-this.locationTimer=setInterval("dojo.undo.browser.checkLocation();",200);
-}
-}
-}
-}else{
-url=this._loadIframeHistory();
-}
-this.historyStack.push(this._createState(url,args,hash));
-},checkLocation:function(){
-if(!this.changingUrl){
-var hsl=this.historyStack.length;
-if((window.location.hash==this.initialHash||window.location.href==this.initialHref)&&(hsl==1)){
-this.handleBackButton();
-return;
-}
-if(this.forwardStack.length>0){
-if(this.forwardStack[this.forwardStack.length-1].urlHash==window.location.hash){
-this.handleForwardButton();
-return;
-}
-}
-if((hsl>=2)&&(this.historyStack[hsl-2])){
-if(this.historyStack[hsl-2].urlHash==window.location.hash){
-this.handleBackButton();
-return;
-}
-}
-}
-},iframeLoaded:function(evt,_268){
-if(!dojo.render.html.opera){
-var _269=this._getUrlQuery(_268.href);
-if(_269==null){
-if(this.historyStack.length==1){
-this.handleBackButton();
-}
-return;
-}
-if(this.moveForward){
-this.moveForward=false;
-return;
-}
-if(this.historyStack.length>=2&&_269==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
-this.handleBackButton();
-}else{
-if(this.forwardStack.length>0&&_269==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
-this.handleForwardButton();
-}
-}
-}
-},handleBackButton:function(){
-var _26a=this.historyStack.pop();
-if(!_26a){
-return;
-}
-var last=this.historyStack[this.historyStack.length-1];
-if(!last&&this.historyStack.length==0){
-last=this.initialState;
-}
-if(last){
-if(last.kwArgs["back"]){
-last.kwArgs["back"]();
-}else{
-if(last.kwArgs["backButton"]){
-last.kwArgs["backButton"]();
-}else{
-if(last.kwArgs["handle"]){
-last.kwArgs.handle("back");
-}
-}
-}
-}
-this.forwardStack.push(_26a);
-},handleForwardButton:function(){
-var last=this.forwardStack.pop();
-if(!last){
-return;
-}
-if(last.kwArgs["forward"]){
-last.kwArgs.forward();
-}else{
-if(last.kwArgs["forwardButton"]){
-last.kwArgs.forwardButton();
-}else{
-if(last.kwArgs["handle"]){
-last.kwArgs.handle("forward");
-}
-}
-}
-this.historyStack.push(last);
-},_createState:function(url,args,hash){
-return {"url":url,"kwArgs":args,"urlHash":hash};
-},_getUrlQuery:function(url){
-var _271=url.split("?");
-if(_271.length<2){
-return null;
-}else{
-return _271[1];
-}
-},_loadIframeHistory:function(){
-var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
-this.moveForward=true;
-dojo.io.setIFrameSrc(this.historyIframe,url,false);
-return url;
-}};
-dojo.provide("dojo.io.BrowserIO");
-if(!dj_undef("window")){
-dojo.io.checkChildrenForFile=function(node){
-var _274=false;
-var _275=node.getElementsByTagName("input");
-dojo.lang.forEach(_275,function(_276){
-if(_274){
-return;
-}
-if(_276.getAttribute("type")=="file"){
-_274=true;
-}
-});
-return _274;
-};
-dojo.io.formHasFile=function(_277){
-return dojo.io.checkChildrenForFile(_277);
-};
-dojo.io.updateNode=function(node,_279){
-node=dojo.byId(node);
-var args=_279;
-if(dojo.lang.isString(_279)){
-args={url:_279};
-}
-args.mimetype="text/html";
-args.load=function(t,d,e){
-while(node.firstChild){
-dojo.dom.destroyNode(node.firstChild);
-}
-node.innerHTML=d;
-};
-dojo.io.bind(args);
-};
-dojo.io.formFilter=function(node){
-var type=(node.type||"").toLowerCase();
-return !node.disabled&&node.name&&!dojo.lang.inArray(["file","submit","image","reset","button"],type);
-};
-dojo.io.encodeForm=function(_280,_281,_282){
-if((!_280)||(!_280.tagName)||(!_280.tagName.toLowerCase()=="form")){
-dojo.raise("Attempted to encode a non-form element.");
-}
-if(!_282){
-_282=dojo.io.formFilter;
-}
-var enc=/utf/i.test(_281||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _284=[];
-for(var i=0;i<_280.elements.length;i++){
-var elm=_280.elements[i];
-if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_282(elm)){
-continue;
-}
-var name=enc(elm.name);
-var type=elm.type.toLowerCase();
-if(type=="select-multiple"){
-for(var j=0;j<elm.options.length;j++){
-if(elm.options[j].selected){
-_284.push(name+"="+enc(elm.options[j].value));
-}
-}
-}else{
-if(dojo.lang.inArray(["radio","checkbox"],type)){
-if(elm.checked){
-_284.push(name+"="+enc(elm.value));
-}
-}else{
-_284.push(name+"="+enc(elm.value));
-}
-}
-}
-var _28a=_280.getElementsByTagName("input");
-for(var i=0;i<_28a.length;i++){
-var _28b=_28a[i];
-if(_28b.type.toLowerCase()=="image"&&_28b.form==_280&&_282(_28b)){
-var name=enc(_28b.name);
-_284.push(name+"="+enc(_28b.value));
-_284.push(name+".x=0");
-_284.push(name+".y=0");
-}
-}
-return _284.join("&")+"&";
-};
-dojo.io.FormBind=function(args){
-this.bindArgs={};
-if(args&&args.formNode){
-this.init(args);
-}else{
-if(args){
-this.init({formNode:args});
-}
-}
-};
-dojo.lang.extend(dojo.io.FormBind,{form:null,bindArgs:null,clickedButton:null,init:function(args){
-var form=dojo.byId(args.formNode);
-if(!form||!form.tagName||form.tagName.toLowerCase()!="form"){
-throw new Error("FormBind: Couldn't apply, invalid form");
-}else{
-if(this.form==form){
-return;
-}else{
-if(this.form){
-throw new Error("FormBind: Already applied to a form");
-}
-}
-}
-dojo.lang.mixin(this.bindArgs,args);
-this.form=form;
-this.connect(form,"onsubmit","submit");
-for(var i=0;i<form.elements.length;i++){
-var node=form.elements[i];
-if(node&&node.type&&dojo.lang.inArray(["submit","button"],node.type.toLowerCase())){
-this.connect(node,"onclick","click");
-}
-}
-var _291=form.getElementsByTagName("input");
-for(var i=0;i<_291.length;i++){
-var _292=_291[i];
-if(_292.type.toLowerCase()=="image"&&_292.form==form){
-this.connect(_292,"onclick","click");
-}
-}
-},onSubmit:function(form){
-return true;
-},submit:function(e){
-e.preventDefault();
-if(this.onSubmit(this.form)){
-dojo.io.bind(dojo.lang.mixin(this.bindArgs,{formFilter:dojo.lang.hitch(this,"formFilter")}));
-}
-},click:function(e){
-var node=e.currentTarget;
-if(node.disabled){
-return;
-}
-this.clickedButton=node;
-},formFilter:function(node){
-var type=(node.type||"").toLowerCase();
-var _299=false;
-if(node.disabled||!node.name){
-_299=false;
-}else{
-if(dojo.lang.inArray(["submit","button","image"],type)){
-if(!this.clickedButton){
-this.clickedButton=node;
-}
-_299=node==this.clickedButton;
-}else{
-_299=!dojo.lang.inArray(["file","submit","reset","button"],type);
-}
-}
-return _299;
-},connect:function(_29a,_29b,_29c){
-if(dojo.evalObjPath("dojo.event.connect")){
-dojo.event.connect(_29a,_29b,this,_29c);
-}else{
-var fcn=dojo.lang.hitch(this,_29c);
-_29a[_29b]=function(e){
-if(!e){
-e=window.event;
-}
-if(!e.currentTarget){
-e.currentTarget=e.srcElement;
-}
-if(!e.preventDefault){
-e.preventDefault=function(){
-window.event.returnValue=false;
-};
-}
-fcn(e);
-};
-}
-}});
-dojo.io.XMLHTTPTransport=new function(){
-var _29f=this;
-var _2a0={};
-this.useCache=false;
-this.preventCache=false;
-function getCacheKey(url,_2a2,_2a3){
-return url+"|"+_2a2+"|"+_2a3.toLowerCase();
-}
-function addToCache(url,_2a5,_2a6,http){
-_2a0[getCacheKey(url,_2a5,_2a6)]=http;
-}
-function getFromCache(url,_2a9,_2aa){
-return _2a0[getCacheKey(url,_2a9,_2aa)];
-}
-this.clearCache=function(){
-_2a0={};
-};
-function doLoad(_2ab,http,url,_2ae,_2af){
-if(((http.status>=200)&&(http.status<300))||(http.status==304)||(location.protocol=="file:"&&(http.status==0||http.status==undefined))||(location.protocol=="chrome:"&&(http.status==0||http.status==undefined))){
-var ret;
-if(_2ab.method.toLowerCase()=="head"){
-var _2b1=http.getAllResponseHeaders();
-ret={};
-ret.toString=function(){
-return _2b1;
-};
-var _2b2=_2b1.split(/[\r\n]+/g);
-for(var i=0;i<_2b2.length;i++){
-var pair=_2b2[i].match(/^([^:]+)\s*:\s*(.+)$/i);
-if(pair){
-ret[pair[1]]=pair[2];
-}
-}
-}else{
-if(_2ab.mimetype=="text/javascript"){
-try{
-ret=dj_eval(http.responseText);
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(http.responseText);
-ret=null;
-}
-}else{
-if(_2ab.mimetype=="text/json"||_2ab.mimetype=="application/json"){
-try{
-ret=dj_eval("("+http.responseText+")");
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(http.responseText);
-ret=false;
-}
-}else{
-if((_2ab.mimetype=="application/xml")||(_2ab.mimetype=="text/xml")){
-ret=http.responseXML;
-if(!ret||typeof ret=="string"||!http.getResponseHeader("Content-Type")){
-ret=dojo.dom.createDocumentFromText(http.responseText);
-}
-}else{
-ret=http.responseText;
-}
-}
-}
-}
-if(_2af){
-addToCache(url,_2ae,_2ab.method,http);
-}
-_2ab[(typeof _2ab.load=="function")?"load":"handle"]("load",ret,http,_2ab);
-}else{
-var _2b5=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-_2ab[(typeof _2ab.error=="function")?"error":"handle"]("error",_2b5,http,_2ab);
-}
-}
-function setHeaders(http,_2b7){
-if(_2b7["headers"]){
-for(var _2b8 in _2b7["headers"]){
-if(_2b8.toLowerCase()=="content-type"&&!_2b7["contentType"]){
-_2b7["contentType"]=_2b7["headers"][_2b8];
-}else{
-http.setRequestHeader(_2b8,_2b7["headers"][_2b8]);
-}
-}
-}
-}
-this.inFlight=[];
-this.inFlightTimer=null;
-this.startWatchingInFlight=function(){
-if(!this.inFlightTimer){
-this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
-}
-};
-this.watchInFlight=function(){
-var now=null;
-if(!dojo.hostenv._blockAsync&&!_29f._blockAsync){
-for(var x=this.inFlight.length-1;x>=0;x--){
-try{
-var tif=this.inFlight[x];
-if(!tif||tif.http._aborted||!tif.http.readyState){
-this.inFlight.splice(x,1);
-continue;
-}
-if(4==tif.http.readyState){
-this.inFlight.splice(x,1);
-doLoad(tif.req,tif.http,tif.url,tif.query,tif.useCache);
-}else{
-if(tif.startTime){
-if(!now){
-now=(new Date()).getTime();
-}
-if(tif.startTime+(tif.req.timeoutSeconds*1000)<now){
-if(typeof tif.http.abort=="function"){
-tif.http.abort();
-}
-this.inFlight.splice(x,1);
-tif.req[(typeof tif.req.timeout=="function")?"timeout":"handle"]("timeout",null,tif.http,tif.req);
-}
-}
-}
-}
-catch(e){
-try{
-var _2bc=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
-tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_2bc,tif.http,tif.req);
-}
-catch(e2){
-dojo.debug("XMLHttpTransport error callback failed: "+e2);
-}
-}
-}
-}
-clearTimeout(this.inFlightTimer);
-if(this.inFlight.length==0){
-this.inFlightTimer=null;
-return;
-}
-this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
-};
-var _2bd=dojo.hostenv.getXmlhttpObject()?true:false;
-this.canHandle=function(_2be){
-return _2bd&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_2be["mimetype"].toLowerCase()||""))&&!(_2be["formNode"]&&dojo.io.formHasFile(_2be["formNode"]));
-};
-this.multipartBoundary="45309FFF-BD65-4d50-99C9-36986896A96F";
-this.bind=function(_2bf){
-if(!_2bf["url"]){
-if(!_2bf["formNode"]&&(_2bf["backButton"]||_2bf["back"]||_2bf["changeUrl"]||_2bf["watchForURL"])&&(!djConfig.preventBackButtonFix)){
-dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request","Use dojo.undo.browser.addToHistory() instead.","0.4");
-dojo.undo.browser.addToHistory(_2bf);
-return true;
-}
-}
-var url=_2bf.url;
-var _2c1="";
-if(_2bf["formNode"]){
-var ta=_2bf.formNode.getAttribute("action");
-if((ta)&&(!_2bf["url"])){
-url=ta;
-}
-var tp=_2bf.formNode.getAttribute("method");
-if((tp)&&(!_2bf["method"])){
-_2bf.method=tp;
-}
-_2c1+=dojo.io.encodeForm(_2bf.formNode,_2bf.encoding,_2bf["formFilter"]);
-}
-if(url.indexOf("#")>-1){
-dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url);
-url=url.split("#")[0];
-}
-if(_2bf["file"]){
-_2bf.method="post";
-}
-if(!_2bf["method"]){
-_2bf.method="get";
-}
-if(_2bf.method.toLowerCase()=="get"){
-_2bf.multipart=false;
-}else{
-if(_2bf["file"]){
-_2bf.multipart=true;
-}else{
-if(!_2bf["multipart"]){
-_2bf.multipart=false;
-}
-}
-}
-if(_2bf["backButton"]||_2bf["back"]||_2bf["changeUrl"]){
-dojo.undo.browser.addToHistory(_2bf);
-}
-var _2c4=_2bf["content"]||{};
-if(_2bf.sendTransport){
-_2c4["dojo.transport"]="xmlhttp";
-}
-do{
-if(_2bf.postContent){
-_2c1=_2bf.postContent;
-break;
-}
-if(_2c4){
-_2c1+=dojo.io.argsFromMap(_2c4,_2bf.encoding);
-}
-if(_2bf.method.toLowerCase()=="get"||!_2bf.multipart){
-break;
-}
-var t=[];
-if(_2c1.length){
-var q=_2c1.split("&");
-for(var i=0;i<q.length;++i){
-if(q[i].length){
-var p=q[i].split("=");
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+p[0]+"\"","",p[1]);
-}
-}
-}
-if(_2bf.file){
-if(dojo.lang.isArray(_2bf.file)){
-for(var i=0;i<_2bf.file.length;++i){
-var o=_2bf.file[i];
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}else{
-var o=_2bf.file;
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}
-if(t.length){
-t.push("--"+this.multipartBoundary+"--","");
-_2c1=t.join("\r\n");
-}
-}while(false);
-var _2ca=_2bf["sync"]?false:true;
-var _2cb=_2bf["preventCache"]||(this.preventCache==true&&_2bf["preventCache"]!=false);
-var _2cc=_2bf["useCache"]==true||(this.useCache==true&&_2bf["useCache"]!=false);
-if(!_2cb&&_2cc){
-var _2cd=getFromCache(url,_2c1,_2bf.method);
-if(_2cd){
-doLoad(_2bf,_2cd,url,_2c1,false);
-return;
-}
-}
-var http=dojo.hostenv.getXmlhttpObject(_2bf);
-var _2cf=false;
-if(_2ca){
-var _2d0=this.inFlight.push({"req":_2bf,"http":http,"url":url,"query":_2c1,"useCache":_2cc,"startTime":_2bf.timeoutSeconds?(new Date()).getTime():0});
-this.startWatchingInFlight();
-}else{
-_29f._blockAsync=true;
-}
-if(_2bf.method.toLowerCase()=="post"){
-if(!_2bf.user){
-http.open("POST",url,_2ca);
-}else{
-http.open("POST",url,_2ca,_2bf.user,_2bf.password);
-}
-setHeaders(http,_2bf);
-http.setRequestHeader("Content-Type",_2bf.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_2bf.contentType||"application/x-www-form-urlencoded"));
-try{
-http.send(_2c1);
-}
-catch(e){
-if(typeof http.abort=="function"){
-http.abort();
-}
-doLoad(_2bf,{status:404},url,_2c1,_2cc);
-}
-}else{
-var _2d1=url;
-if(_2c1!=""){
-_2d1+=(_2d1.indexOf("?")>-1?"&":"?")+_2c1;
-}
-if(_2cb){
-_2d1+=(dojo.string.endsWithAny(_2d1,"?","&")?"":(_2d1.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
-}
-if(!_2bf.user){
-http.open(_2bf.method.toUpperCase(),_2d1,_2ca);
-}else{
-http.open(_2bf.method.toUpperCase(),_2d1,_2ca,_2bf.user,_2bf.password);
-}
-setHeaders(http,_2bf);
-try{
-http.send(null);
-}
-catch(e){
-if(typeof http.abort=="function"){
-http.abort();
-}
-doLoad(_2bf,{status:404},url,_2c1,_2cc);
-}
-}
-if(!_2ca){
-doLoad(_2bf,http,url,_2c1,_2cc);
-_29f._blockAsync=false;
-}
-_2bf.abort=function(){
-try{
-http._aborted=true;
-}
-catch(e){
-}
-return http.abort();
-};
-return;
-};
-dojo.io.transports.addTransport("XMLHTTPTransport");
-};
-}
-dojo.provide("dojo.io.cookie");
-dojo.io.cookie.setCookie=function(name,_2d3,days,path,_2d6,_2d7){
-var _2d8=-1;
-if((typeof days=="number")&&(days>=0)){
-var d=new Date();
-d.setTime(d.getTime()+(days*24*60*60*1000));
-_2d8=d.toGMTString();
-}
-_2d3=escape(_2d3);
-document.cookie=name+"="+_2d3+";"+(_2d8!=-1?" expires="+_2d8+";":"")+(path?"path="+path:"")+(_2d6?"; domain="+_2d6:"")+(_2d7?"; secure":"");
-};
-dojo.io.cookie.set=dojo.io.cookie.setCookie;
-dojo.io.cookie.getCookie=function(name){
-var idx=document.cookie.lastIndexOf(name+"=");
-if(idx==-1){
-return null;
-}
-var _2dc=document.cookie.substring(idx+name.length+1);
-var end=_2dc.indexOf(";");
-if(end==-1){
-end=_2dc.length;
-}
-_2dc=_2dc.substring(0,end);
-_2dc=unescape(_2dc);
-return _2dc;
-};
-dojo.io.cookie.get=dojo.io.cookie.getCookie;
-dojo.io.cookie.deleteCookie=function(name){
-dojo.io.cookie.setCookie(name,"-",0);
-};
-dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_2e3,_2e4,_2e5){
-if(arguments.length==5){
-_2e5=_2e3;
-_2e3=null;
-_2e4=null;
-}
-var _2e6=[],_2e7,_2e8="";
-if(!_2e5){
-_2e7=dojo.io.cookie.getObjectCookie(name);
-}
-if(days>=0){
-if(!_2e7){
-_2e7={};
-}
-for(var prop in obj){
-if(obj[prop]==null){
-delete _2e7[prop];
-}else{
-if((typeof obj[prop]=="string")||(typeof obj[prop]=="number")){
-_2e7[prop]=obj[prop];
-}
-}
-}
-prop=null;
-for(var prop in _2e7){
-_2e6.push(escape(prop)+"="+escape(_2e7[prop]));
-}
-_2e8=_2e6.join("&");
-}
-dojo.io.cookie.setCookie(name,_2e8,days,path,_2e3,_2e4);
-};
-dojo.io.cookie.getObjectCookie=function(name){
-var _2eb=null,_2ec=dojo.io.cookie.getCookie(name);
-if(_2ec){
-_2eb={};
-var _2ed=_2ec.split("&");
-for(var i=0;i<_2ed.length;i++){
-var pair=_2ed[i].split("=");
-var _2f0=pair[1];
-if(isNaN(_2f0)){
-_2f0=unescape(pair[1]);
-}
-_2eb[unescape(pair[0])]=_2f0;
-}
-}
-return _2eb;
-};
-dojo.io.cookie.isSupported=function(){
-if(typeof navigator.cookieEnabled!="boolean"){
-dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__","CookiesAllowed",90,null);
-var _2f1=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
-navigator.cookieEnabled=(_2f1=="CookiesAllowed");
-if(navigator.cookieEnabled){
-this.deleteCookie("__TestingYourBrowserForCookieSupport__");
-}
-}
-return navigator.cookieEnabled;
-};
-if(!dojo.io.cookies){
-dojo.io.cookies=dojo.io.cookie;
-}
-dojo.provide("dojo.io.*");
-
-
-__CPAN_EDITION__ browserio build.txt
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/string/common.js,
-../src/string.js,
-../src/lang/common.js,
-../src/lang/extras.js,
-../src/io/common.js,
-../src/lang/array.js,
-../src/lang/func.js,
-../src/string/extras.js,
-../src/dom.js,
-../src/undo/browser.js,
-../src/io/BrowserIO.js,
-../src/io/cookie.js,
-../src/io/__package__.js
-
-		
-__CPAN_EDITION__ charting dojo.js
-/*
-	Copyright (c) 2004-2006, 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/community/licensing.shtml
-*/
-
-/*
-	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(typeof dojo=="undefined"){
-var dj_global=this;
-var dj_currentContext=this;
-function dj_undef(_1,_2){
-return (typeof (_2||dj_currentContext)[_1]=="undefined");
-}
-if(dj_undef("djConfig",this)){
-var djConfig={};
-}
-if(dj_undef("dojo",this)){
-var dojo={};
-}
-dojo.global=function(){
-return dj_currentContext;
-};
-dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
-with(dojo.version){
-return major+"."+minor+"."+patch+flag+" ("+revision+")";
-}
-}};
-dojo.evalProp=function(_3,_4,_5){
-if((!_4)||(!_3)){
-return undefined;
-}
-if(!dj_undef(_3,_4)){
-return _4[_3];
-}
-return (_5?(_4[_3]={}):undefined);
-};
-dojo.parseObjPath=function(_6,_7,_8){
-var _9=(_7||dojo.global());
-var _a=_6.split(".");
-var _b=_a.pop();
-for(var i=0,l=_a.length;i<l&&_9;i++){
-_9=dojo.evalProp(_a[i],_9,_8);
-}
-return {obj:_9,prop:_b};
-};
-dojo.evalObjPath=function(_e,_f){
-if(typeof _e!="string"){
-return dojo.global();
-}
-if(_e.indexOf(".")==-1){
-return dojo.evalProp(_e,dojo.global(),_f);
-}
-var ref=dojo.parseObjPath(_e,dojo.global(),_f);
-if(ref){
-return dojo.evalProp(ref.prop,ref.obj,_f);
-}
-return null;
-};
-dojo.errorToString=function(_11){
-if(!dj_undef("message",_11)){
-return _11.message;
-}else{
-if(!dj_undef("description",_11)){
-return _11.description;
-}else{
-return _11;
-}
-}
-};
-dojo.raise=function(_12,_13){
-if(_13){
-_12=_12+": "+dojo.errorToString(_13);
-}else{
-_12=dojo.errorToString(_12);
-}
-try{
-if(djConfig.isDebug){
-dojo.hostenv.println("FATAL exception raised: "+_12);
-}
-}
-catch(e){
-}
-throw _13||Error(_12);
-};
-dojo.debug=function(){
-};
-dojo.debugShallow=function(obj){
-};
-dojo.profile={start:function(){
-},end:function(){
-},stop:function(){
-},dump:function(){
-}};
-function dj_eval(_15){
-return dj_global.eval?dj_global.eval(_15):eval(_15);
-}
-dojo.unimplemented=function(_16,_17){
-var _18="'"+_16+"' not implemented";
-if(_17!=null){
-_18+=" "+_17;
-}
-dojo.raise(_18);
-};
-dojo.deprecated=function(_19,_1a,_1b){
-var _1c="DEPRECATED: "+_19;
-if(_1a){
-_1c+=" "+_1a;
-}
-if(_1b){
-_1c+=" -- will be removed in version: "+_1b;
-}
-dojo.debug(_1c);
-};
-dojo.render=(function(){
-function vscaffold(_1d,_1e){
-var tmp={capable:false,support:{builtin:false,plugin:false},prefixes:_1d};
-for(var i=0;i<_1e.length;i++){
-tmp[_1e[i]]=false;
-}
-return tmp;
-}
-return {name:"",ver:dojo.version,os:{win:false,linux:false,osx:false},html:vscaffold(["html"],["ie","opera","khtml","safari","moz"]),svg:vscaffold(["svg"],["corel","adobe","batik"]),vml:vscaffold(["vml"],["ie"]),swf:vscaffold(["Swf","Flash","Mm"],["mm"]),swt:vscaffold(["Swt"],["ibm"])};
-})();
-dojo.hostenv=(function(){
-var _21={isDebug:false,allowQueryConfig:false,baseScriptUri:"",baseRelativePath:"",libraryScriptUri:"",iePreventClobber:false,ieClobberMinimal:true,preventBackButtonFix:true,delayMozLoadingFix:false,searchIds:[],parseWidgets:true};
-if(typeof djConfig=="undefined"){
-djConfig=_21;
-}else{
-for(var _22 in _21){
-if(typeof djConfig[_22]=="undefined"){
-djConfig[_22]=_21[_22];
-}
-}
-}
-return {name_:"(unset)",version_:"(unset)",getName:function(){
-return this.name_;
-},getVersion:function(){
-return this.version_;
-},getText:function(uri){
-dojo.unimplemented("getText","uri="+uri);
-}};
-})();
-dojo.hostenv.getBaseScriptUri=function(){
-if(djConfig.baseScriptUri.length){
-return djConfig.baseScriptUri;
-}
-var uri=new String(djConfig.libraryScriptUri||djConfig.baseRelativePath);
-if(!uri){
-dojo.raise("Nothing returned by getLibraryScriptUri(): "+uri);
-}
-var _25=uri.lastIndexOf("/");
-djConfig.baseScriptUri=djConfig.baseRelativePath;
-return djConfig.baseScriptUri;
-};
-(function(){
-var _26={pkgFileName:"__package__",loading_modules_:{},loaded_modules_:{},addedToLoadingCount:[],removedFromLoadingCount:[],inFlightCount:0,modulePrefixes_:{dojo:{name:"dojo",value:"src"}},setModulePrefix:function(_27,_28){
-this.modulePrefixes_[_27]={name:_27,value:_28};
-},moduleHasPrefix:function(_29){
-var mp=this.modulePrefixes_;
-return Boolean(mp[_29]&&mp[_29].value);
-},getModulePrefix:function(_2b){
-if(this.moduleHasPrefix(_2b)){
-return this.modulePrefixes_[_2b].value;
-}
-return _2b;
-},getTextStack:[],loadUriStack:[],loadedUris:[],post_load_:false,modulesLoadedListeners:[],unloadListeners:[],loadNotifying:false};
-for(var _2c in _26){
-dojo.hostenv[_2c]=_26[_2c];
-}
-})();
-dojo.hostenv.loadPath=function(_2d,_2e,cb){
-var uri;
-if(_2d.charAt(0)=="/"||_2d.match(/^\w+:/)){
-uri=_2d;
-}else{
-uri=this.getBaseScriptUri()+_2d;
-}
-if(djConfig.cacheBust&&dojo.render.html.capable){
-uri+="?"+String(djConfig.cacheBust).replace(/\W+/g,"");
-}
-try{
-return !_2e?this.loadUri(uri,cb):this.loadUriAndCheck(uri,_2e,cb);
-}
-catch(e){
-dojo.debug(e);
-return false;
-}
-};
-dojo.hostenv.loadUri=function(uri,cb){
-if(this.loadedUris[uri]){
-return true;
-}
-var _33=this.getText(uri,null,true);
-if(!_33){
-return false;
-}
-this.loadedUris[uri]=true;
-if(cb){
-_33="("+_33+")";
-}
-var _34=dj_eval(_33);
-if(cb){
-cb(_34);
-}
-return true;
-};
-dojo.hostenv.loadUriAndCheck=function(uri,_36,cb){
-var ok=true;
-try{
-ok=this.loadUri(uri,cb);
-}
-catch(e){
-dojo.debug("failed loading ",uri," with error: ",e);
-}
-return Boolean(ok&&this.findModule(_36,false));
-};
-dojo.loaded=function(){
-};
-dojo.unloaded=function(){
-};
-dojo.hostenv.loaded=function(){
-this.loadNotifying=true;
-this.post_load_=true;
-var mll=this.modulesLoadedListeners;
-for(var x=0;x<mll.length;x++){
-mll[x]();
-}
-this.modulesLoadedListeners=[];
-this.loadNotifying=false;
-dojo.loaded();
-};
-dojo.hostenv.unloaded=function(){
-var mll=this.unloadListeners;
-while(mll.length){
-(mll.pop())();
-}
-dojo.unloaded();
-};
-dojo.addOnLoad=function(obj,_3d){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.modulesLoadedListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.modulesLoadedListeners.push(function(){
-obj[_3d]();
-});
-}
-}
-if(dh.post_load_&&dh.inFlightCount==0&&!dh.loadNotifying){
-dh.callLoaded();
-}
-};
-dojo.addOnUnload=function(obj,_40){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.unloadListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.unloadListeners.push(function(){
-obj[_40]();
-});
-}
-}
-};
-dojo.hostenv.modulesLoaded=function(){
-if(this.post_load_){
-return;
-}
-if(this.loadUriStack.length==0&&this.getTextStack.length==0){
-if(this.inFlightCount>0){
-dojo.debug("files still in flight!");
-return;
-}
-dojo.hostenv.callLoaded();
-}
-};
-dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
-setTimeout("dojo.hostenv.loaded();",0);
-}else{
-dojo.hostenv.loaded();
-}
-};
-dojo.hostenv.getModuleSymbols=function(_42){
-var _43=_42.split(".");
-for(var i=_43.length;i>0;i--){
-var _45=_43.slice(0,i).join(".");
-if((i==1)&&!this.moduleHasPrefix(_45)){
-_43[0]="../"+_43[0];
-}else{
-var _46=this.getModulePrefix(_45);
-if(_46!=_45){
-_43.splice(0,i,_46);
-break;
-}
-}
-}
-return _43;
-};
-dojo.hostenv._global_omit_module_check=false;
-dojo.hostenv.loadModule=function(_47,_48,_49){
-if(!_47){
-return;
-}
-_49=this._global_omit_module_check||_49;
-var _4a=this.findModule(_47,false);
-if(_4a){
-return _4a;
-}
-if(dj_undef(_47,this.loading_modules_)){
-this.addedToLoadingCount.push(_47);
-}
-this.loading_modules_[_47]=1;
-var _4b=_47.replace(/\./g,"/")+".js";
-var _4c=_47.split(".");
-var _4d=this.getModuleSymbols(_47);
-var _4e=((_4d[0].charAt(0)!="/")&&!_4d[0].match(/^\w+:/));
-var _4f=_4d[_4d.length-1];
-var ok;
-if(_4f=="*"){
-_47=_4c.slice(0,-1).join(".");
-while(_4d.length){
-_4d.pop();
-_4d.push(this.pkgFileName);
-_4b=_4d.join("/")+".js";
-if(_4e&&_4b.charAt(0)=="/"){
-_4b=_4b.slice(1);
-}
-ok=this.loadPath(_4b,!_49?_47:null);
-if(ok){
-break;
-}
-_4d.pop();
-}
-}else{
-_4b=_4d.join("/")+".js";
-_47=_4c.join(".");
-var _51=!_49?_47:null;
-ok=this.loadPath(_4b,_51);
-if(!ok&&!_48){
-_4d.pop();
-while(_4d.length){
-_4b=_4d.join("/")+".js";
-ok=this.loadPath(_4b,_51);
-if(ok){
-break;
-}
-_4d.pop();
-_4b=_4d.join("/")+"/"+this.pkgFileName+".js";
-if(_4e&&_4b.charAt(0)=="/"){
-_4b=_4b.slice(1);
-}
-ok=this.loadPath(_4b,_51);
-if(ok){
-break;
-}
-}
-}
-if(!ok&&!_49){
-dojo.raise("Could not load '"+_47+"'; last tried '"+_4b+"'");
-}
-}
-if(!_49&&!this["isXDomain"]){
-_4a=this.findModule(_47,false);
-if(!_4a){
-dojo.raise("symbol '"+_47+"' is not defined after loading '"+_4b+"'");
-}
-}
-return _4a;
-};
-dojo.hostenv.startPackage=function(_52){
-var _53=String(_52);
-var _54=_53;
-var _55=_52.split(/\./);
-if(_55[_55.length-1]=="*"){
-_55.pop();
-_54=_55.join(".");
-}
-var _56=dojo.evalObjPath(_54,true);
-this.loaded_modules_[_53]=_56;
-this.loaded_modules_[_54]=_56;
-return _56;
-};
-dojo.hostenv.findModule=function(_57,_58){
-var lmn=String(_57);
-if(this.loaded_modules_[lmn]){
-return this.loaded_modules_[lmn];
-}
-if(_58){
-dojo.raise("no loaded module named '"+_57+"'");
-}
-return null;
-};
-dojo.kwCompoundRequire=function(_5a){
-var _5b=_5a["common"]||[];
-var _5c=_5a[dojo.hostenv.name_]?_5b.concat(_5a[dojo.hostenv.name_]||[]):_5b.concat(_5a["default"]||[]);
-for(var x=0;x<_5c.length;x++){
-var _5e=_5c[x];
-if(_5e.constructor==Array){
-dojo.hostenv.loadModule.apply(dojo.hostenv,_5e);
-}else{
-dojo.hostenv.loadModule(_5e);
-}
-}
-};
-dojo.require=function(_5f){
-dojo.hostenv.loadModule.apply(dojo.hostenv,arguments);
-};
-dojo.requireIf=function(_60,_61){
-var _62=arguments[0];
-if((_62===true)||(_62=="common")||(_62&&dojo.render[_62].capable)){
-var _63=[];
-for(var i=1;i<arguments.length;i++){
-_63.push(arguments[i]);
-}
-dojo.require.apply(dojo,_63);
-}
-};
-dojo.requireAfterIf=dojo.requireIf;
-dojo.provide=function(_65){
-return dojo.hostenv.startPackage.apply(dojo.hostenv,arguments);
-};
-dojo.registerModulePath=function(_66,_67){
-return dojo.hostenv.setModulePrefix(_66,_67);
-};
 dojo.setModulePrefix=function(_68,_69){
 dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
 return dojo.registerModulePath(_68,_69);
@@ -10419,7 +7303,7 @@
 }
 }
 if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
+if(dojo.render.html.opera||(dojo.render.html.moz&&(djConfig["enableMozDomContentLoaded"]===true))){
 document.addEventListener("DOMContentLoaded",dj_load_init,null);
 }
 window.addEventListener("load",dj_load_init,null);
@@ -10567,118 +7451,76 @@
 return _ec;
 };
 }
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _ee=false;
-var _ef=false;
-var _f0=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_ee=true;
-}else{
-if(typeof this["load"]=="function"){
-_ef=true;
-}else{
-if(window.widget){
-_f0=true;
-}
-}
-}
-var _f1=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-_f1.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_ee)&&(!_f0)){
-_f1.push("browser_debug.js");
-}
-var _f2=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_f2=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<_f1.length;x++){
-var _f4=_f2+"src/"+_f1[x];
-if(_ee||_ef){
-load(_f4);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_f4+"'></scr"+"ipt>");
-}
-catch(e){
-var _f5=document.createElement("script");
-_f5.src=_f4;
-document.getElementsByTagName("head")[0].appendChild(_f5);
-}
-}
-}
-})();
+dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&!djConfig["useXDomain"],"dojo.browser_debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&djConfig["useXDomain"],"dojo.browser_debug_xd");
 dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_f6,_f7){
-if(!dojo.lang.isFunction(_f7)){
-dojo.raise("dojo.inherits: superclass argument ["+_f7+"] must be a function (subclass: ["+_f6+"']");
+dojo.lang.inherits=function(_ee,_ef){
+if(!dojo.lang.isFunction(_ef)){
+dojo.raise("dojo.inherits: superclass argument ["+_ef+"] must be a function (subclass: ["+_ee+"']");
 }
-_f6.prototype=new _f7();
-_f6.prototype.constructor=_f6;
-_f6.superclass=_f7.prototype;
-_f6["super"]=_f7.prototype;
+_ee.prototype=new _ef();
+_ee.prototype.constructor=_ee;
+_ee.superclass=_ef.prototype;
+_ee["super"]=_ef.prototype;
 };
-dojo.lang._mixin=function(obj,_f9){
-var _fa={};
-for(var x in _f9){
-if((typeof _fa[x]=="undefined")||(_fa[x]!=_f9[x])){
-obj[x]=_f9[x];
+dojo.lang._mixin=function(obj,_f1){
+var _f2={};
+for(var x in _f1){
+if((typeof _f2[x]=="undefined")||(_f2[x]!=_f1[x])){
+obj[x]=_f1[x];
 }
 }
-if(dojo.render.html.ie&&(typeof (_f9["toString"])=="function")&&(_f9["toString"]!=obj["toString"])&&(_f9["toString"]!=_fa["toString"])){
-obj.toString=_f9.toString;
+if(dojo.render.html.ie&&(typeof (_f1["toString"])=="function")&&(_f1["toString"]!=obj["toString"])&&(_f1["toString"]!=_f2["toString"])){
+obj.toString=_f1.toString;
 }
 return obj;
 };
-dojo.lang.mixin=function(obj,_fd){
+dojo.lang.mixin=function(obj,_f5){
 for(var i=1,l=arguments.length;i<l;i++){
 dojo.lang._mixin(obj,arguments[i]);
 }
 return obj;
 };
-dojo.lang.extend=function(_100,_101){
+dojo.lang.extend=function(_f8,_f9){
 for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_100.prototype,arguments[i]);
+dojo.lang._mixin(_f8.prototype,arguments[i]);
 }
-return _100;
+return _f8;
 };
 dojo.inherits=dojo.lang.inherits;
 dojo.mixin=dojo.lang.mixin;
 dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_104,_105,_106,_107){
-if(!dojo.lang.isArrayLike(_104)&&dojo.lang.isArrayLike(_105)){
+dojo.lang.find=function(_fc,_fd,_fe,_ff){
+if(!dojo.lang.isArrayLike(_fc)&&dojo.lang.isArrayLike(_fd)){
 dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_104;
-_104=_105;
-_105=temp;
+var temp=_fc;
+_fc=_fd;
+_fd=temp;
 }
-var _109=dojo.lang.isString(_104);
-if(_109){
-_104=_104.split("");
+var _101=dojo.lang.isString(_fc);
+if(_101){
+_fc=_fc.split("");
 }
-if(_107){
+if(_ff){
 var step=-1;
-var i=_104.length-1;
+var i=_fc.length-1;
 var end=-1;
 }else{
 var step=1;
 var i=0;
-var end=_104.length;
+var end=_fc.length;
 }
-if(_106){
+if(_fe){
 while(i!=end){
-if(_104[i]===_105){
+if(_fc[i]===_fd){
 return i;
 }
 i+=step;
 }
 }else{
 while(i!=end){
-if(_104[i]==_105){
+if(_fc[i]==_fd){
 return i;
 }
 i+=step;
@@ -10687,12 +7529,12 @@
 return -1;
 };
 dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_10d,_10e,_10f){
-return dojo.lang.find(_10d,_10e,_10f,true);
+dojo.lang.findLast=function(_105,_106,_107){
+return dojo.lang.find(_105,_106,_107,true);
 };
 dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_110,_111){
-return dojo.lang.find(_110,_111)>-1;
+dojo.lang.inArray=function(_108,_109){
+return dojo.lang.find(_108,_109)>-1;
 };
 dojo.lang.isObject=function(it){
 if(typeof it=="undefined"){
@@ -10756,21 +7598,21 @@
 return ((typeof (it)=="undefined")&&(it==undefined));
 };
 dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_11c,_11d){
-var fcn=(dojo.lang.isString(_11d)?_11c[_11d]:_11d)||function(){
+dojo.lang.hitch=function(_114,_115){
+var fcn=(dojo.lang.isString(_115)?_114[_115]:_115)||function(){
 };
 return function(){
-return fcn.apply(_11c,arguments);
+return fcn.apply(_114,arguments);
 };
 };
 dojo.lang.anonCtr=0;
 dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_11f,_120,_121){
-var nso=(_120||dojo.lang.anon);
-if((_121)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
+dojo.lang.nameAnonFunc=function(_117,_118,_119){
+var nso=(_118||dojo.lang.anon);
+if((_119)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
 for(var x in nso){
 try{
-if(nso[x]===_11f){
+if(nso[x]===_117){
 return x;
 }
 }
@@ -10782,50 +7624,50 @@
 while(typeof nso[ret]!="undefined"){
 ret="__"+dojo.lang.anonCtr++;
 }
-nso[ret]=_11f;
+nso[ret]=_117;
 return ret;
 };
-dojo.lang.forward=function(_125){
+dojo.lang.forward=function(_11d){
 return function(){
-return this[_125].apply(this,arguments);
+return this[_11d].apply(this,arguments);
 };
 };
-dojo.lang.curry=function(_126,func){
-var _128=[];
-_126=_126||dj_global;
+dojo.lang.curry=function(_11e,func){
+var _120=[];
+_11e=_11e||dj_global;
 if(dojo.lang.isString(func)){
-func=_126[func];
+func=_11e[func];
 }
 for(var x=2;x<arguments.length;x++){
-_128.push(arguments[x]);
+_120.push(arguments[x]);
 }
-var _12a=(func["__preJoinArity"]||func.length)-_128.length;
-function gather(_12b,_12c,_12d){
-var _12e=_12d;
-var _12f=_12c.slice(0);
-for(var x=0;x<_12b.length;x++){
-_12f.push(_12b[x]);
+var _122=(func["__preJoinArity"]||func.length)-_120.length;
+function gather(_123,_124,_125){
+var _126=_125;
+var _127=_124.slice(0);
+for(var x=0;x<_123.length;x++){
+_127.push(_123[x]);
 }
-_12d=_12d-_12b.length;
-if(_12d<=0){
-var res=func.apply(_126,_12f);
-_12d=_12e;
+_125=_125-_123.length;
+if(_125<=0){
+var res=func.apply(_11e,_127);
+_125=_126;
 return res;
 }else{
 return function(){
-return gather(arguments,_12f,_12d);
+return gather(arguments,_127,_125);
 };
 }
 }
-return gather([],_128,_12a);
+return gather([],_120,_122);
 };
-dojo.lang.curryArguments=function(_132,func,args,_135){
-var _136=[];
-var x=_135||0;
-for(x=_135;x<args.length;x++){
-_136.push(args[x]);
+dojo.lang.curryArguments=function(_12a,func,args,_12d){
+var _12e=[];
+var x=_12d||0;
+for(x=_12d;x<args.length;x++){
+_12e.push(args[x]);
 }
-return dojo.lang.curry.apply(dojo.lang,[_132,func].concat(_136));
+return dojo.lang.curry.apply(dojo.lang,[_12a,func].concat(_12e));
 };
 dojo.lang.tryThese=function(){
 for(var x=0;x<arguments.length;x++){
@@ -10842,31 +7684,31 @@
 }
 }
 };
-dojo.lang.delayThese=function(farr,cb,_13c,_13d){
+dojo.lang.delayThese=function(farr,cb,_134,_135){
 if(!farr.length){
-if(typeof _13d=="function"){
-_13d();
+if(typeof _135=="function"){
+_135();
 }
 return;
 }
-if((typeof _13c=="undefined")&&(typeof cb=="number")){
-_13c=cb;
+if((typeof _134=="undefined")&&(typeof cb=="number")){
+_134=cb;
 cb=function(){
 };
 }else{
 if(!cb){
 cb=function(){
 };
-if(!_13c){
-_13c=0;
+if(!_134){
+_134=0;
 }
 }
 }
 setTimeout(function(){
 (farr.shift())();
 cb();
-dojo.lang.delayThese(farr,cb,_13c,_13d);
-},_13c);
+dojo.lang.delayThese(farr,cb,_134,_135);
+},_134);
 };
 dojo.provide("dojo.string.common");
 dojo.string.trim=function(str,wh){
@@ -10885,12 +7727,12 @@
 dojo.string.trimEnd=function(str){
 return dojo.string.trim(str,-1);
 };
-dojo.string.repeat=function(str,_144,_145){
+dojo.string.repeat=function(str,_13c,_13d){
 var out="";
-for(var i=0;i<_144;i++){
+for(var i=0;i<_13c;i++){
 out+=str;
-if(_145&&i<_144-1){
-out+=_145;
+if(_13d&&i<_13c-1){
+out+=_13d;
 }
 }
 return out;
@@ -10929,142 +7771,138 @@
 },isEmpty:function(obj){
 if(dojo.lang.isObject(obj)){
 var tmp={};
-var _157=0;
+var _14f=0;
 for(var x in obj){
 if(obj[x]&&(!tmp[x])){
-_157++;
+_14f++;
 break;
 }
 }
-return _157==0;
+return _14f==0;
 }else{
 if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
 return obj.length==0;
 }
 }
-},map:function(arr,obj,_15b){
-var _15c=dojo.lang.isString(arr);
-if(_15c){
+},map:function(arr,obj,_153){
+var _154=dojo.lang.isString(arr);
+if(_154){
 arr=arr.split("");
 }
-if(dojo.lang.isFunction(obj)&&(!_15b)){
-_15b=obj;
+if(dojo.lang.isFunction(obj)&&(!_153)){
+_153=obj;
 obj=dj_global;
 }else{
-if(dojo.lang.isFunction(obj)&&_15b){
-var _15d=obj;
-obj=_15b;
-_15b=_15d;
+if(dojo.lang.isFunction(obj)&&_153){
+var _155=obj;
+obj=_153;
+_153=_155;
 }
 }
 if(Array.map){
-var _15e=Array.map(arr,_15b,obj);
+var _156=Array.map(arr,_153,obj);
 }else{
-var _15e=[];
+var _156=[];
 for(var i=0;i<arr.length;++i){
-_15e.push(_15b.call(obj,arr[i]));
+_156.push(_153.call(obj,arr[i]));
 }
 }
-if(_15c){
-return _15e.join("");
+if(_154){
+return _156.join("");
 }else{
-return _15e;
+return _156;
 }
-},reduce:function(arr,_161,obj,_163){
-var _164=_161;
-if(arguments.length==1){
-dojo.debug("dojo.lang.reduce called with too few arguments!");
-return false;
-}else{
+},reduce:function(arr,_159,obj,_15b){
+var _15c=_159;
 if(arguments.length==2){
-_163=_161;
-_164=arr.shift();
+_15b=_159;
+_15c=arr[0];
+arr=arr.slice(1);
 }else{
-if(arguments.lenght==3){
+if(arguments.length==3){
 if(dojo.lang.isFunction(obj)){
-_163=obj;
+_15b=obj;
 obj=null;
 }
 }else{
 if(dojo.lang.isFunction(obj)){
-var tmp=_163;
-_163=obj;
+var tmp=_15b;
+_15b=obj;
 obj=tmp;
 }
 }
 }
-}
-var ob=obj?obj:dj_global;
+var ob=obj||dj_global;
 dojo.lang.map(arr,function(val){
-_164=_163.call(ob,_164,val);
+_15c=_15b.call(ob,_15c,val);
 });
-return _164;
-},forEach:function(_168,_169,_16a){
-if(dojo.lang.isString(_168)){
-_168=_168.split("");
+return _15c;
+},forEach:function(_160,_161,_162){
+if(dojo.lang.isString(_160)){
+_160=_160.split("");
 }
 if(Array.forEach){
-Array.forEach(_168,_169,_16a);
+Array.forEach(_160,_161,_162);
 }else{
-if(!_16a){
-_16a=dj_global;
+if(!_162){
+_162=dj_global;
 }
-for(var i=0,l=_168.length;i<l;i++){
-_169.call(_16a,_168[i],i,_168);
+for(var i=0,l=_160.length;i<l;i++){
+_161.call(_162,_160[i],i,_160);
 }
 }
-},_everyOrSome:function(_16d,arr,_16f,_170){
+},_everyOrSome:function(_165,arr,_167,_168){
 if(dojo.lang.isString(arr)){
 arr=arr.split("");
 }
 if(Array.every){
-return Array[_16d?"every":"some"](arr,_16f,_170);
+return Array[_165?"every":"some"](arr,_167,_168);
 }else{
-if(!_170){
-_170=dj_global;
+if(!_168){
+_168=dj_global;
 }
 for(var i=0,l=arr.length;i<l;i++){
-var _173=_16f.call(_170,arr[i],i,arr);
-if(_16d&&!_173){
+var _16b=_167.call(_168,arr[i],i,arr);
+if(_165&&!_16b){
 return false;
 }else{
-if((!_16d)&&(_173)){
+if((!_165)&&(_16b)){
 return true;
 }
 }
 }
-return Boolean(_16d);
+return Boolean(_165);
 }
-},every:function(arr,_175,_176){
-return this._everyOrSome(true,arr,_175,_176);
-},some:function(arr,_178,_179){
-return this._everyOrSome(false,arr,_178,_179);
-},filter:function(arr,_17b,_17c){
-var _17d=dojo.lang.isString(arr);
-if(_17d){
+},every:function(arr,_16d,_16e){
+return this._everyOrSome(true,arr,_16d,_16e);
+},some:function(arr,_170,_171){
+return this._everyOrSome(false,arr,_170,_171);
+},filter:function(arr,_173,_174){
+var _175=dojo.lang.isString(arr);
+if(_175){
 arr=arr.split("");
 }
-var _17e;
+var _176;
 if(Array.filter){
-_17e=Array.filter(arr,_17b,_17c);
+_176=Array.filter(arr,_173,_174);
 }else{
-if(!_17c){
+if(!_174){
 if(arguments.length>=3){
 dojo.raise("thisObject doesn't exist!");
 }
-_17c=dj_global;
+_174=dj_global;
 }
-_17e=[];
+_176=[];
 for(var i=0;i<arr.length;i++){
-if(_17b.call(_17c,arr[i],i,arr)){
-_17e.push(arr[i]);
+if(_173.call(_174,arr[i],i,arr)){
+_176.push(arr[i]);
 }
 }
 }
-if(_17d){
-return _17e.join("");
+if(_175){
+return _176.join("");
 }else{
-return _17e;
+return _176;
 }
 },unnest:function(){
 var out=[];
@@ -11077,17 +7915,17 @@
 }
 }
 return out;
-},toArray:function(_183,_184){
-var _185=[];
-for(var i=_184||0;i<_183.length;i++){
-_185.push(_183[i]);
+},toArray:function(_17b,_17c){
+var _17d=[];
+for(var i=_17c||0;i<_17b.length;i++){
+_17d.push(_17b[i]);
 }
-return _185;
+return _17d;
 }});
 dojo.provide("dojo.string.extras");
-dojo.string.substituteParams=function(_187,hash){
+dojo.string.substituteParams=function(_17f,hash){
 var map=(typeof hash=="object")?hash:dojo.lang.toArray(arguments,1);
-return _187.replace(/\%\{(\w+)\}/g,function(_18a,key){
+return _17f.replace(/\%\{(\w+)\}/g,function(_182,key){
 if(typeof (map[key])!="undefined"&&map[key]!=null){
 return map[key];
 }
@@ -11101,11 +7939,11 @@
 if(arguments.length==0){
 str=this;
 }
-var _18d=str.split(" ");
-for(var i=0;i<_18d.length;i++){
-_18d[i]=_18d[i].charAt(0).toUpperCase()+_18d[i].substring(1);
+var _185=str.split(" ");
+for(var i=0;i<_185.length;i++){
+_185[i]=_185[i].charAt(0).toUpperCase()+_185[i].substring(1);
 }
-return _18d.join(" ");
+return _185.join(" ");
 };
 dojo.string.isBlank=function(str){
 if(!dojo.lang.isString(str)){
@@ -11118,15 +7956,15 @@
 return str;
 }
 var ret="";
-var _192=escape(str);
-var _193,re=/%u([0-9A-F]{4})/i;
-while((_193=_192.match(re))){
-var num=Number("0x"+_193[1]);
-var _196=escape("&#"+num+";");
-ret+=_192.substring(0,_193.index)+_196;
-_192=_192.substring(_193.index+_193[0].length);
+var _18a=escape(str);
+var _18b,re=/%u([0-9A-F]{4})/i;
+while((_18b=_18a.match(re))){
+var num=Number("0x"+_18b[1]);
+var _18e=escape("&#"+num+";");
+ret+=_18a.substring(0,_18b.index)+_18e;
+_18a=_18a.substring(_18b.index+_18b[0].length);
 }
-ret+=_192.replace(/\+/g,"%2B");
+ret+=_18a.replace(/\+/g,"%2B");
 return ret;
 };
 dojo.string.escape=function(type,str){
@@ -11151,9 +7989,9 @@
 return str;
 }
 };
-dojo.string.escapeXml=function(str,_19b){
+dojo.string.escapeXml=function(str,_193){
 str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_19b){
+if(!_193){
 str=str.replace(/'/gm,"&#39;");
 }
 return str;
@@ -11176,8 +8014,8 @@
 }
 return str.substring(0,len).replace(/\.+$/,"")+"...";
 };
-dojo.string.endsWith=function(str,end,_1a4){
-if(_1a4){
+dojo.string.endsWith=function(str,end,_19c){
+if(_19c){
 str=str.toLowerCase();
 end=end.toLowerCase();
 }
@@ -11194,12 +8032,12 @@
 }
 return false;
 };
-dojo.string.startsWith=function(str,_1a8,_1a9){
-if(_1a9){
+dojo.string.startsWith=function(str,_1a0,_1a1){
+if(_1a1){
 str=str.toLowerCase();
-_1a8=_1a8.toLowerCase();
+_1a0=_1a0.toLowerCase();
 }
-return str.indexOf(_1a8)==0;
+return str.indexOf(_1a0)==0;
 };
 dojo.string.startsWithAny=function(str){
 for(var i=1;i<arguments.length;i++){
@@ -11217,12 +8055,12 @@
 }
 return false;
 };
-dojo.string.normalizeNewlines=function(text,_1af){
-if(_1af=="\n"){
+dojo.string.normalizeNewlines=function(text,_1a7){
+if(_1a7=="\n"){
 text=text.replace(/\r\n/g,"\n");
 text=text.replace(/\r/g,"\n");
 }else{
-if(_1af=="\r"){
+if(_1a7=="\r"){
 text=text.replace(/\r\n/g,"\r");
 text=text.replace(/\n/g,"\r");
 }else{
@@ -11231,29 +8069,29 @@
 }
 return text;
 };
-dojo.string.splitEscaped=function(str,_1b1){
-var _1b2=[];
-for(var i=0,_1b4=0;i<str.length;i++){
+dojo.string.splitEscaped=function(str,_1a9){
+var _1aa=[];
+for(var i=0,_1ac=0;i<str.length;i++){
 if(str.charAt(i)=="\\"){
 i++;
 continue;
 }
-if(str.charAt(i)==_1b1){
-_1b2.push(str.substring(_1b4,i));
-_1b4=i+1;
+if(str.charAt(i)==_1a9){
+_1aa.push(str.substring(_1ac,i));
+_1ac=i+1;
 }
 }
-_1b2.push(str.substr(_1b4));
-return _1b2;
+_1aa.push(str.substr(_1ac));
+return _1aa;
 };
 dojo.provide("dojo.AdapterRegistry");
-dojo.AdapterRegistry=function(_1b5){
+dojo.AdapterRegistry=function(_1ad){
 this.pairs=[];
-this.returnWrappers=_1b5||false;
+this.returnWrappers=_1ad||false;
 };
-dojo.lang.extend(dojo.AdapterRegistry,{register:function(name,_1b7,wrap,_1b9,_1ba){
-var type=(_1ba)?"unshift":"push";
-this.pairs[type]([name,_1b7,wrap,_1b9]);
+dojo.lang.extend(dojo.AdapterRegistry,{register:function(name,_1af,wrap,_1b1,_1b2){
+var type=(_1b2)?"unshift":"push";
+this.pairs[type]([name,_1af,wrap,_1b1]);
 },match:function(){
 for(var i=0;i<this.pairs.length;i++){
 var pair=this.pairs[i];
@@ -11277,8 +8115,8 @@
 return false;
 }});
 dojo.provide("dojo.json");
-dojo.json={jsonRegistry:new dojo.AdapterRegistry(),register:function(name,_1c2,wrap,_1c4){
-dojo.json.jsonRegistry.register(name,_1c2,wrap,_1c4);
+dojo.json={jsonRegistry:new dojo.AdapterRegistry(),register:function(name,_1ba,wrap,_1bc){
+dojo.json.jsonRegistry.register(name,_1ba,wrap,_1bc);
 },evalJson:function(json){
 try{
 return eval("("+json+")");
@@ -11288,11 +8126,11 @@
 return json;
 }
 },serialize:function(o){
-var _1c7=typeof (o);
-if(_1c7=="undefined"){
+var _1bf=typeof (o);
+if(_1bf=="undefined"){
 return "undefined";
 }else{
-if((_1c7=="number")||(_1c7=="boolean")){
+if((_1bf=="number")||(_1bf=="boolean")){
 return o+"";
 }else{
 if(o===null){
@@ -11300,24 +8138,24 @@
 }
 }
 }
-if(_1c7=="string"){
+if(_1bf=="string"){
 return dojo.string.escapeString(o);
 }
 var me=arguments.callee;
-var _1c9;
+var _1c1;
 if(typeof (o.__json__)=="function"){
-_1c9=o.__json__();
-if(o!==_1c9){
-return me(_1c9);
+_1c1=o.__json__();
+if(o!==_1c1){
+return me(_1c1);
 }
 }
 if(typeof (o.json)=="function"){
-_1c9=o.json();
-if(o!==_1c9){
-return me(_1c9);
+_1c1=o.json();
+if(o!==_1c1){
+return me(_1c1);
 }
 }
-if(_1c7!="function"&&typeof (o.length)=="number"){
+if(_1bf!="function"&&typeof (o.length)=="number"){
 var res=[];
 for(var i=0;i<o.length;i++){
 var val=me(o[i]);
@@ -11330,22 +8168,22 @@
 }
 try{
 window.o=o;
-_1c9=dojo.json.jsonRegistry.match(o);
-return me(_1c9);
+_1c1=dojo.json.jsonRegistry.match(o);
+return me(_1c1);
 }
 catch(e){
 }
-if(_1c7=="function"){
+if(_1bf=="function"){
 return null;
 }
 res=[];
 for(var k in o){
-var _1ce;
+var _1c6;
 if(typeof (k)=="number"){
-_1ce="\""+k+"\"";
+_1c6="\""+k+"\"";
 }else{
 if(typeof (k)=="string"){
-_1ce=dojo.string.escapeString(k);
+_1c6=dojo.string.escapeString(k);
 }else{
 continue;
 }
@@ -11354,28 +8192,32 @@
 if(typeof (val)!="string"){
 continue;
 }
-res.push(_1ce+":"+val);
+res.push(_1c6+":"+val);
 }
 return "{"+res.join(",")+"}";
 }};
 dojo.provide("dojo.collections.Store");
-dojo.collections.Store=function(_1cf){
+dojo.collections.Store=function(_1c7){
 var data=[];
+var _1c9={};
 this.keyField="Id";
 this.get=function(){
 return data;
 };
 this.getByKey=function(key){
+return _1c9[key];
+};
+this.getByIndex=function(idx){
+return data[idx];
+};
+this.getIndexOf=function(key){
 for(var i=0;i<data.length;i++){
 if(data[i].key==key){
-return data[i];
+return i;
 }
 }
-return null;
+return -1;
 };
-this.getByIndex=function(idx){
-return data[idx];
-};
 this.getData=function(){
 var arr=[];
 for(var i=0;i<data.length;i++){
@@ -11384,37 +8226,48 @@
 return arr;
 };
 this.getDataByKey=function(key){
+if(_1c9[key]!=null){
+return _1c9[key].src;
+}
+return null;
+};
+this.getIndexOfData=function(obj){
 for(var i=0;i<data.length;i++){
-if(data[i].key==key){
-return data[i].src;
+if(data[i].src==obj){
+return i;
 }
 }
-return null;
+return -1;
 };
 this.getDataByIndex=function(idx){
+if(data[idx]){
 return data[idx].src;
+}
+return null;
 };
-this.update=function(obj,_1da,val){
-var _1dc=_1da.split("."),i=0,o=obj,_1df;
-if(_1dc.length>1){
-_1df=_1dc.pop();
+this.update=function(obj,_1d5,val,_1d7){
+var _1d8=_1d5.split("."),i=0,o=obj,_1db;
+if(_1d8.length>1){
+_1db=_1d8.pop();
 do{
-if(_1dc[i].indexOf("()")>-1){
-var temp=_1dc[i++].split("()")[0];
+if(_1d8[i].indexOf("()")>-1){
+var temp=_1d8[i++].split("()")[0];
 if(!o[temp]){
-dojo.raise("dojo.collections.Store.getField(obj, '"+_1df+"'): '"+temp+"' is not a property of the passed object.");
+dojo.raise("dojo.collections.Store.getField(obj, '"+_1db+"'): '"+temp+"' is not a property of the passed object.");
 }else{
 o=o[temp]();
 }
 }else{
-o=o[_1dc[i++]];
+o=o[_1d8[i++]];
 }
-}while(i<_1dc.length&&o!=null);
+}while(i<_1d8.length&&o!=null);
 }else{
-_1df=_1dc[0];
+_1db=_1d8[0];
 }
-obj[_1df]=val;
-this.onUpdateField(obj,_1da,val);
+obj[_1db]=val;
+if(!_1d7){
+this.onUpdateField(obj,_1d5,val);
+}
 };
 this.forEach=function(fn){
 if(Array.forEach){
@@ -11435,44 +8288,91 @@
 }
 }
 };
-this.setData=function(arr){
+this.setData=function(arr,_1e3){
 data=[];
 for(var i=0;i<arr.length;i++){
-data.push({key:arr[i][this.keyField],src:arr[i]});
+var o={key:arr[i][this.keyField],src:arr[i]};
+data.push(o);
+_1c9[o.key]=o;
 }
+if(!_1e3){
 this.onSetData();
+}
 };
-this.clearData=function(){
+this.clearData=function(_1e6){
 data=[];
+_1c9={};
+if(!_1e6){
 this.onClearData();
+}
 };
-this.addData=function(obj,key){
+this.addData=function(obj,key,_1e9){
 var k=key||obj[this.keyField];
-if(this.getByKey(k)){
-var o=this.getByKey(k);
+if(_1c9[k]!=null){
+var o=_1c9[k];
 o.src=obj;
 }else{
 var o={key:k,src:obj};
 data.push(o);
+_1c9[o.key]=o;
 }
+if(!_1e9){
 this.onAddData(o);
+}
 };
-this.addDataRange=function(arr){
-var _1ed=[];
+this.addDataRange=function(arr,_1ed){
+var _1ee=[];
 for(var i=0;i<arr.length;i++){
 var k=arr[i][this.keyField];
-if(this.getByKey(k)){
-var o=this.getByKey(k);
-o.src=obj;
+if(_1c9[k]!=null){
+var o=_1c9[k];
+o.src=arr[i];
 }else{
 var o={key:k,src:arr[i]};
 data.push(o);
+_1c9[k]=o;
 }
-_1ed.push(o);
+_1ee.push(o);
 }
-this.onAddDataRange(_1ed);
+if(!_1ed){
+this.onAddDataRange(_1ee);
+}
 };
-this.removeData=function(obj){
+this.addDataByIndex=function(obj,idx,key,_1f5){
+var k=key||obj[this.keyField];
+if(_1c9[k]!=null){
+var i=this.getIndexOf(k);
+var o=data.splice(i,1);
+o.src=obj;
+}else{
+var o={key:k,src:obj};
+_1c9[k]=o;
+}
+data.splice(idx,0,o);
+if(!_1f5){
+this.onAddData(o);
+}
+};
+this.addDataRangeByIndex=function(arr,idx,_1fb){
+var _1fc=[];
+for(var i=0;i<arr.length;i++){
+var k=arr[i][this.keyField];
+if(_1c9[k]!=null){
+var j=this.getIndexOf(k);
+var o=data.splice(j,1);
+o.src=arr[i];
+}else{
+var o={key:k,src:arr[i]};
+_1c9[k]=o;
+}
+_1fc.push(o);
+}
+data.splice(idx,0,_1fc);
+if(!_1fb){
+this.onAddDataRange(_1fc);
+}
+};
+this.removeData=function(obj,_202){
 var idx=-1;
 var o=null;
 for(var i=0;i<data.length;i++){
@@ -11482,40 +8382,53 @@
 break;
 }
 }
+if(!_202){
 this.onRemoveData(o);
+}
 if(idx>-1){
 data.splice(idx,1);
+delete _1c9[o.key];
 }
 };
-this.removeDataByKey=function(key){
-this.removeData(this.getDataByKey(key));
+this.removeDataRange=function(idx,_207,_208){
+var ret=data.splice(idx,_207);
+for(var i=0;i<ret.length;i++){
+delete _1c9[ret[i].key];
+}
+if(!_208){
+this.onRemoveDataRange(ret);
+}
+return ret;
 };
-this.removeDataByIndex=function(idx){
-this.removeData(this.getDataByIndex(idx));
+this.removeDataByKey=function(key,_20c){
+this.removeData(this.getDataByKey(key),_20c);
 };
-if(_1cf&&_1cf.length&&_1cf[0]){
-this.setData(_1cf);
+this.removeDataByIndex=function(idx,_20e){
+this.removeData(this.getDataByIndex(idx),_20e);
+};
+if(_1c7&&_1c7.length&&_1c7[0]){
+this.setData(_1c7,true);
 }
 };
-dojo.extend(dojo.collections.Store,{getField:function(obj,_1f8){
-var _1f9=_1f8.split("."),i=0,o=obj;
+dojo.extend(dojo.collections.Store,{getField:function(obj,_210){
+var _211=_210.split("."),i=0,o=obj;
 do{
-if(_1f9[i].indexOf("()")>-1){
-var temp=_1f9[i++].split("()")[0];
+if(_211[i].indexOf("()")>-1){
+var temp=_211[i++].split("()")[0];
 if(!o[temp]){
-dojo.raise("dojo.collections.Store.getField(obj, '"+_1f8+"'): '"+temp+"' is not a property of the passed object.");
+dojo.raise("dojo.collections.Store.getField(obj, '"+_210+"'): '"+temp+"' is not a property of the passed object.");
 }else{
 o=o[temp]();
 }
 }else{
-o=o[_1f9[i++]];
+o=o[_211[i++]];
 }
-}while(i<_1f9.length&&o!=null);
-if(i<_1f9.length){
-dojo.raise("dojo.collections.Store.getField(obj, '"+_1f8+"'): '"+_1f8+"' is not a property of the passed object.");
+}while(i<_211.length&&o!=null);
+if(i<_211.length){
+dojo.raise("dojo.collections.Store.getField(obj, '"+_210+"'): '"+_210+"' is not a property of the passed object.");
 }
 return o;
-},getFromHtml:function(meta,body,_1ff){
+},getFromHtml:function(meta,body,_217){
 var rows=body.rows;
 var ctor=function(row){
 var obj={};
@@ -11548,8 +8461,8 @@
 var arr=[];
 for(var i=0;i<rows.length;i++){
 var o=ctor(rows[i]);
-if(_1ff){
-_1ff(o,rows[i]);
+if(_217){
+_217(o,rows[i]);
 }
 arr.push(o);
 }
@@ -11559,7 +8472,8 @@
 },onAddData:function(obj){
 },onAddDataRange:function(arr){
 },onRemoveData:function(obj){
-},onUpdateField:function(obj,_211,val){
+},onRemoveDataRange:function(arr){
+},onUpdateField:function(obj,_22a,val){
 }});
 dojo.provide("dojo.gfx.color");
 dojo.gfx.color.Color=function(r,g,b,a){
@@ -11593,8 +8507,8 @@
 dojo.gfx.color.Color.fromArray=function(arr){
 return new dojo.gfx.color.Color(arr[0],arr[1],arr[2],arr[3]);
 };
-dojo.extend(dojo.gfx.color.Color,{toRgb:function(_219){
-if(_219){
+dojo.extend(dojo.gfx.color.Color,{toRgb:function(_232){
+if(_232){
 return this.toRgba();
 }else{
 return [this.r,this.g,this.b];
@@ -11607,62 +8521,62 @@
 return "rgb("+this.toRgb().join()+")";
 },toString:function(){
 return this.toHex();
-},blend:function(_21a,_21b){
+},blend:function(_233,_234){
 var rgb=null;
-if(dojo.lang.isArray(_21a)){
-rgb=_21a;
+if(dojo.lang.isArray(_233)){
+rgb=_233;
 }else{
-if(_21a instanceof dojo.gfx.color.Color){
-rgb=_21a.toRgb();
+if(_233 instanceof dojo.gfx.color.Color){
+rgb=_233.toRgb();
 }else{
-rgb=new dojo.gfx.color.Color(_21a).toRgb();
+rgb=new dojo.gfx.color.Color(_233).toRgb();
 }
 }
-return dojo.gfx.color.blend(this.toRgb(),rgb,_21b);
+return dojo.gfx.color.blend(this.toRgb(),rgb,_234);
 }});
 dojo.gfx.color.named={white:[255,255,255],black:[0,0,0],red:[255,0,0],green:[0,255,0],lime:[0,255,0],blue:[0,0,255],navy:[0,0,128],gray:[128,128,128],silver:[192,192,192]};
-dojo.gfx.color.blend=function(a,b,_21f){
+dojo.gfx.color.blend=function(a,b,_238){
 if(typeof a=="string"){
-return dojo.gfx.color.blendHex(a,b,_21f);
+return dojo.gfx.color.blendHex(a,b,_238);
 }
-if(!_21f){
-_21f=0;
+if(!_238){
+_238=0;
 }
-_21f=Math.min(Math.max(-1,_21f),1);
-_21f=((_21f+1)/2);
+_238=Math.min(Math.max(-1,_238),1);
+_238=((_238+1)/2);
 var c=[];
 for(var x=0;x<3;x++){
-c[x]=parseInt(b[x]+((a[x]-b[x])*_21f));
+c[x]=parseInt(b[x]+((a[x]-b[x])*_238));
 }
 return c;
 };
-dojo.gfx.color.blendHex=function(a,b,_224){
-return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_224));
+dojo.gfx.color.blendHex=function(a,b,_23d){
+return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_23d));
 };
-dojo.gfx.color.extractRGB=function(_225){
+dojo.gfx.color.extractRGB=function(_23e){
 var hex="0123456789abcdef";
-_225=_225.toLowerCase();
-if(_225.indexOf("rgb")==0){
-var _227=_225.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-var ret=_227.splice(1,3);
+_23e=_23e.toLowerCase();
+if(_23e.indexOf("rgb")==0){
+var _240=_23e.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
+var ret=_240.splice(1,3);
 return ret;
 }else{
-var _229=dojo.gfx.color.hex2rgb(_225);
-if(_229){
-return _229;
+var _242=dojo.gfx.color.hex2rgb(_23e);
+if(_242){
+return _242;
 }else{
-return dojo.gfx.color.named[_225]||[255,255,255];
+return dojo.gfx.color.named[_23e]||[255,255,255];
 }
 }
 };
 dojo.gfx.color.hex2rgb=function(hex){
-var _22b="0123456789ABCDEF";
+var _244="0123456789ABCDEF";
 var rgb=new Array(3);
 if(hex.indexOf("#")==0){
 hex=hex.substring(1);
 }
 hex=hex.toUpperCase();
-if(hex.replace(new RegExp("["+_22b+"]","g"),"")!=""){
+if(hex.replace(new RegExp("["+_244+"]","g"),"")!=""){
 return null;
 }
 if(hex.length==3){
@@ -11675,7 +8589,7 @@
 rgb[2]=hex.substring(4);
 }
 for(var i=0;i<rgb.length;i++){
-rgb[i]=_22b.indexOf(rgb[i].charAt(0))*16+_22b.indexOf(rgb[i].charAt(1));
+rgb[i]=_244.indexOf(rgb[i].charAt(0))*16+_244.indexOf(rgb[i].charAt(1));
 }
 return rgb;
 };
@@ -11714,22 +8628,22 @@
 var l=null;
 var min=Math.min(r,g,b);
 var max=Math.max(r,g,b);
-var _23c=max-min;
+var _255=max-min;
 l=(min+max)/2;
 s=0;
 if((l>0)&&(l<1)){
-s=_23c/((l<0.5)?(2*l):(2-2*l));
+s=_255/((l<0.5)?(2*l):(2-2*l));
 }
 h=0;
-if(_23c>0){
+if(_255>0){
 if((max==r)&&(max!=g)){
-h+=(g-b)/_23c;
+h+=(g-b)/_255;
 }
 if((max==g)&&(max!=b)){
-h+=(2+(b-r)/_23c);
+h+=(2+(b-r)/_255);
 }
 if((max==b)&&(max!=r)){
-h+=(4+(r-g)/_23c);
+h+=(4+(r-g)/_255);
 }
 h*=60;
 }
@@ -11828,102 +8742,102 @@
 }
 };
 dojo.dom.getUniqueId=function(){
-var _24a=dojo.doc();
+var _263=dojo.doc();
 do{
 var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_24a.getElementById(id));
+}while(_263.getElementById(id));
 return id;
 };
 dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_24c,_24d){
-var node=_24c.firstChild;
+dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_265,_266){
+var node=_265.firstChild;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.nextSibling;
 }
-if(_24d&&node&&node.tagName&&node.tagName.toLowerCase()!=_24d.toLowerCase()){
-node=dojo.dom.nextElement(node,_24d);
+if(_266&&node&&node.tagName&&node.tagName.toLowerCase()!=_266.toLowerCase()){
+node=dojo.dom.nextElement(node,_266);
 }
 return node;
 };
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_24f,_250){
-var node=_24f.lastChild;
+dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_268,_269){
+var node=_268.lastChild;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.previousSibling;
 }
-if(_250&&node&&node.tagName&&node.tagName.toLowerCase()!=_250.toLowerCase()){
-node=dojo.dom.prevElement(node,_250);
+if(_269&&node&&node.tagName&&node.tagName.toLowerCase()!=_269.toLowerCase()){
+node=dojo.dom.prevElement(node,_269);
 }
 return node;
 };
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_253){
+dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_26c){
 if(!node){
 return null;
 }
 do{
 node=node.nextSibling;
 }while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_253&&_253.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.nextElement(node,_253);
+if(node&&_26c&&_26c.toLowerCase()!=node.tagName.toLowerCase()){
+return dojo.dom.nextElement(node,_26c);
 }
 return node;
 };
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_255){
+dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_26e){
 if(!node){
 return null;
 }
-if(_255){
-_255=_255.toLowerCase();
+if(_26e){
+_26e=_26e.toLowerCase();
 }
 do{
 node=node.previousSibling;
 }while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_255&&_255.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_255);
+if(node&&_26e&&_26e.toLowerCase()!=node.tagName.toLowerCase()){
+return dojo.dom.prevElement(node,_26e);
 }
 return node;
 };
-dojo.dom.moveChildren=function(_256,_257,trim){
-var _259=0;
+dojo.dom.moveChildren=function(_26f,_270,trim){
+var _272=0;
 if(trim){
-while(_256.hasChildNodes()&&_256.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_256.removeChild(_256.firstChild);
+while(_26f.hasChildNodes()&&_26f.firstChild.nodeType==dojo.dom.TEXT_NODE){
+_26f.removeChild(_26f.firstChild);
 }
-while(_256.hasChildNodes()&&_256.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_256.removeChild(_256.lastChild);
+while(_26f.hasChildNodes()&&_26f.lastChild.nodeType==dojo.dom.TEXT_NODE){
+_26f.removeChild(_26f.lastChild);
 }
 }
-while(_256.hasChildNodes()){
-_257.appendChild(_256.firstChild);
-_259++;
+while(_26f.hasChildNodes()){
+_270.appendChild(_26f.firstChild);
+_272++;
 }
-return _259;
+return _272;
 };
-dojo.dom.copyChildren=function(_25a,_25b,trim){
-var _25d=_25a.cloneNode(true);
-return this.moveChildren(_25d,_25b,trim);
+dojo.dom.copyChildren=function(_273,_274,trim){
+var _276=_273.cloneNode(true);
+return this.moveChildren(_276,_274,trim);
 };
-dojo.dom.replaceChildren=function(node,_25f){
-var _260=[];
+dojo.dom.replaceChildren=function(node,_278){
+var _279=[];
 if(dojo.render.html.ie){
 for(var i=0;i<node.childNodes.length;i++){
-_260.push(node.childNodes[i]);
+_279.push(node.childNodes[i]);
 }
 }
 dojo.dom.removeChildren(node);
-node.appendChild(_25f);
-for(var i=0;i<_260.length;i++){
-dojo.dom.destroyNode(_260[i]);
+node.appendChild(_278);
+for(var i=0;i<_279.length;i++){
+dojo.dom.destroyNode(_279[i]);
 }
 };
 dojo.dom.removeChildren=function(node){
-var _263=node.childNodes.length;
+var _27c=node.childNodes.length;
 while(node.hasChildNodes()){
 dojo.dom.removeNode(node.firstChild);
 }
-return _263;
+return _27c;
 };
-dojo.dom.replaceNode=function(node,_265){
-return node.parentNode.replaceChild(_265,node);
+dojo.dom.replaceNode=function(node,_27e){
+return node.parentNode.replaceChild(_27e,node);
 };
 dojo.dom.destroyNode=function(node){
 if(node.parentNode){
@@ -11943,38 +8857,38 @@
 return node.parentNode.removeChild(node);
 }
 };
-dojo.dom.getAncestors=function(node,_269,_26a){
-var _26b=[];
-var _26c=(_269&&(_269 instanceof Function||typeof _269=="function"));
+dojo.dom.getAncestors=function(node,_282,_283){
+var _284=[];
+var _285=(_282&&(_282 instanceof Function||typeof _282=="function"));
 while(node){
-if(!_26c||_269(node)){
-_26b.push(node);
+if(!_285||_282(node)){
+_284.push(node);
 }
-if(_26a&&_26b.length>0){
-return _26b[0];
+if(_283&&_284.length>0){
+return _284[0];
 }
 node=node.parentNode;
 }
-if(_26a){
+if(_283){
 return null;
 }
-return _26b;
+return _284;
 };
-dojo.dom.getAncestorsByTag=function(node,tag,_26f){
+dojo.dom.getAncestorsByTag=function(node,tag,_288){
 tag=tag.toLowerCase();
 return dojo.dom.getAncestors(node,function(el){
 return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_26f);
+},_288);
 };
 dojo.dom.getFirstAncestorByTag=function(node,tag){
 return dojo.dom.getAncestorsByTag(node,tag,true);
 };
-dojo.dom.isDescendantOf=function(node,_274,_275){
-if(_275&&node){
+dojo.dom.isDescendantOf=function(node,_28d,_28e){
+if(_28e&&node){
 node=node.parentNode;
 }
 while(node){
-if(node==_274){
+if(node==_28d){
 return true;
 }
 node=node.parentNode;
@@ -11996,12 +8910,12 @@
 };
 dojo.dom.createDocument=function(){
 var doc=null;
-var _278=dojo.doc();
+var _291=dojo.doc();
 if(!dj_undef("ActiveXObject")){
-var _279=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_279.length;i++){
+var _292=["MSXML2","Microsoft","MSXML","MSXML3"];
+for(var i=0;i<_292.length;i++){
 try{
-doc=new ActiveXObject(_279[i]+".XMLDOM");
+doc=new ActiveXObject(_292[i]+".XMLDOM");
 }
 catch(e){
 }
@@ -12010,40 +8924,40 @@
 }
 }
 }else{
-if((_278.implementation)&&(_278.implementation.createDocument)){
-doc=_278.implementation.createDocument("","",null);
+if((_291.implementation)&&(_291.implementation.createDocument)){
+doc=_291.implementation.createDocument("","",null);
 }
 }
 return doc;
 };
-dojo.dom.createDocumentFromText=function(str,_27c){
-if(!_27c){
-_27c="text/xml";
+dojo.dom.createDocumentFromText=function(str,_295){
+if(!_295){
+_295="text/xml";
 }
 if(!dj_undef("DOMParser")){
-var _27d=new DOMParser();
-return _27d.parseFromString(str,_27c);
+var _296=new DOMParser();
+return _296.parseFromString(str,_295);
 }else{
 if(!dj_undef("ActiveXObject")){
-var _27e=dojo.dom.createDocument();
-if(_27e){
-_27e.async=false;
-_27e.loadXML(str);
-return _27e;
+var _297=dojo.dom.createDocument();
+if(_297){
+_297.async=false;
+_297.loadXML(str);
+return _297;
 }else{
 dojo.debug("toXml didn't work?");
 }
 }else{
-var _27f=dojo.doc();
-if(_27f.createElement){
-var tmp=_27f.createElement("xml");
+var _298=dojo.doc();
+if(_298.createElement){
+var tmp=_298.createElement("xml");
 tmp.innerHTML=str;
-if(_27f.implementation&&_27f.implementation.createDocument){
-var _281=_27f.implementation.createDocument("foo","",null);
+if(_298.implementation&&_298.implementation.createDocument){
+var _29a=_298.implementation.createDocument("foo","",null);
 for(var i=0;i<tmp.childNodes.length;i++){
-_281.importNode(tmp.childNodes.item(i),true);
+_29a.importNode(tmp.childNodes.item(i),true);
 }
-return _281;
+return _29a;
 }
 return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
 }
@@ -12051,39 +8965,39 @@
 }
 return null;
 };
-dojo.dom.prependChild=function(node,_284){
-if(_284.firstChild){
-_284.insertBefore(node,_284.firstChild);
+dojo.dom.prependChild=function(node,_29d){
+if(_29d.firstChild){
+_29d.insertBefore(node,_29d.firstChild);
 }else{
-_284.appendChild(node);
+_29d.appendChild(node);
 }
 return true;
 };
-dojo.dom.insertBefore=function(node,ref,_287){
-if((_287!=true)&&(node===ref||node.nextSibling===ref)){
+dojo.dom.insertBefore=function(node,ref,_2a0){
+if((_2a0!=true)&&(node===ref||node.nextSibling===ref)){
 return false;
 }
-var _288=ref.parentNode;
-_288.insertBefore(node,ref);
+var _2a1=ref.parentNode;
+_2a1.insertBefore(node,ref);
 return true;
 };
-dojo.dom.insertAfter=function(node,ref,_28b){
+dojo.dom.insertAfter=function(node,ref,_2a4){
 var pn=ref.parentNode;
 if(ref==pn.lastChild){
-if((_28b!=true)&&(node===ref)){
+if((_2a4!=true)&&(node===ref)){
 return false;
 }
 pn.appendChild(node);
 }else{
-return this.insertBefore(node,ref.nextSibling,_28b);
+return this.insertBefore(node,ref.nextSibling,_2a4);
 }
 return true;
 };
-dojo.dom.insertAtPosition=function(node,ref,_28f){
-if((!node)||(!ref)||(!_28f)){
+dojo.dom.insertAtPosition=function(node,ref,_2a8){
+if((!node)||(!ref)||(!_2a8)){
 return false;
 }
-switch(_28f.toLowerCase()){
+switch(_2a8.toLowerCase()){
 case "before":
 return dojo.dom.insertBefore(node,ref);
 case "after":
@@ -12101,46 +9015,46 @@
 return true;
 }
 };
-dojo.dom.insertAtIndex=function(node,_291,_292){
-var _293=_291.childNodes;
-if(!_293.length||_293.length==_292){
-_291.appendChild(node);
+dojo.dom.insertAtIndex=function(node,_2aa,_2ab){
+var _2ac=_2aa.childNodes;
+if(!_2ac.length||_2ac.length==_2ab){
+_2aa.appendChild(node);
 return true;
 }
-if(_292==0){
-return dojo.dom.prependChild(node,_291);
+if(_2ab==0){
+return dojo.dom.prependChild(node,_2aa);
 }
-return dojo.dom.insertAfter(node,_293[_292-1]);
+return dojo.dom.insertAfter(node,_2ac[_2ab-1]);
 };
 dojo.dom.textContent=function(node,text){
 if(arguments.length>1){
-var _296=dojo.doc();
-dojo.dom.replaceChildren(node,_296.createTextNode(text));
+var _2af=dojo.doc();
+dojo.dom.replaceChildren(node,_2af.createTextNode(text));
 return text;
 }else{
 if(node.textContent!=undefined){
 return node.textContent;
 }
-var _297="";
+var _2b0="";
 if(node==null){
-return _297;
+return _2b0;
 }
 for(var i=0;i<node.childNodes.length;i++){
 switch(node.childNodes[i].nodeType){
 case 1:
 case 5:
-_297+=dojo.dom.textContent(node.childNodes[i]);
+_2b0+=dojo.dom.textContent(node.childNodes[i]);
 break;
 case 3:
 case 2:
 case 4:
-_297+=node.childNodes[i].nodeValue;
+_2b0+=node.childNodes[i].nodeValue;
 break;
 default:
 break;
 }
 }
-return _297;
+return _2b0;
 }
 };
 dojo.dom.hasParent=function(node){
@@ -12156,17 +9070,17 @@
 }
 return "";
 };
-dojo.dom.setAttributeNS=function(elem,_29d,_29e,_29f){
+dojo.dom.setAttributeNS=function(elem,_2b6,_2b7,_2b8){
 if(elem==null||((elem==undefined)&&(typeof elem=="undefined"))){
 dojo.raise("No element given to dojo.dom.setAttributeNS");
 }
 if(!((elem.setAttributeNS==undefined)&&(typeof elem.setAttributeNS=="undefined"))){
-elem.setAttributeNS(_29d,_29e,_29f);
+elem.setAttributeNS(_2b6,_2b7,_2b8);
 }else{
-var _2a0=elem.ownerDocument;
-var _2a1=_2a0.createNode(2,_29e,_29d);
-_2a1.nodeValue=_29f;
-elem.setAttributeNode(_2a1);
+var _2b9=elem.ownerDocument;
+var _2ba=_2b9.createNode(2,_2b7,_2b6);
+_2ba.nodeValue=_2b8;
+elem.setAttributeNode(_2ba);
 }
 };
 dojo.provide("dojo.svg");
@@ -12218,28 +9132,28 @@
 }
 };
 }(document);
-dojo.svg.toCamelCase=function(_2a4){
-var arr=_2a4.split("-"),cc=arr[0];
+dojo.svg.toCamelCase=function(_2bd){
+var arr=_2bd.split("-"),cc=arr[0];
 for(var i=1;i<arr.length;i++){
 cc+=arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
 }
 return cc;
 };
-dojo.svg.toSelectorCase=function(_2a8){
-return _2a8.replace(/([A-Z])/g,"-$1").toLowerCase();
+dojo.svg.toSelectorCase=function(_2c1){
+return _2c1.replace(/([A-Z])/g,"-$1").toLowerCase();
 };
-dojo.svg.getStyle=function(node,_2aa){
-return document.defaultView.getComputedStyle(node,_2aa);
+dojo.svg.getStyle=function(node,_2c3){
+return document.defaultView.getComputedStyle(node,_2c3);
 };
-dojo.svg.getNumericStyle=function(node,_2ac){
-return parseFloat(dojo.svg.getStyle(node,_2ac));
+dojo.svg.getNumericStyle=function(node,_2c5){
+return parseFloat(dojo.svg.getStyle(node,_2c5));
 };
 dojo.svg.getOpacity=function(node){
 return Math.min(1,dojo.svg.getNumericStyle(node,"fill-opacity"));
 };
-dojo.svg.setOpacity=function(node,_2af){
-node.setAttributeNS(this.xmlns.svg,"fill-opacity",_2af);
-node.setAttributeNS(this.xmlns.svg,"stroke-opacity",_2af);
+dojo.svg.setOpacity=function(node,_2c8){
+node.setAttributeNS(this.xmlns.svg,"fill-opacity",_2c8);
+node.setAttributeNS(this.xmlns.svg,"stroke-opacity",_2c8);
 };
 dojo.svg.clearOpacity=function(node){
 node.setAttributeNS(this.xmlns.svg,"fill-opacity","1.0");
@@ -12252,13 +9166,13 @@
 }
 return null;
 };
-dojo.svg.setCoords=function(node,_2b4){
+dojo.svg.setCoords=function(node,_2cd){
 var p=dojo.svg.getCoords();
 if(!p){
 return;
 }
-var dx=p.x-_2b4.x;
-var dy=p.y-_2b4.y;
+var dx=p.x-_2cd.x;
+var dy=p.y-_2cd.y;
 dojo.svg.translate(node,dx,dy);
 };
 dojo.svg.getDimensions=function(node){
@@ -12290,13 +9204,13 @@
 node.transform.baseVal.appendItem(t);
 }
 };
-dojo.svg.scale=function(node,_2c1,_2c2){
-if(!_2c2){
-var _2c2=_2c1;
+dojo.svg.scale=function(node,_2da,_2db){
+if(!_2db){
+var _2db=_2da;
 }
 if(node.transform&&node.ownerSVGElement&&node.ownerSVGElement.createSVGTransform){
 var t=node.ownerSVGElement.createSVGTransform();
-t.setScale(_2c1,_2c2);
+t.setScale(_2da,_2db);
 node.transform.baseVal.appendItem(t);
 }
 };
@@ -12357,11 +9271,11 @@
 node.transform.baseVal.appendItem(t);
 }
 };
-dojo.svg.group=function(_2dd){
-var p=_2dd.item(0).parentNode;
+dojo.svg.group=function(_2f6){
+var p=_2f6.item(0).parentNode;
 var g=document.createElementNS(this.xmlns.svg,"g");
-for(var i=0;i<_2dd.length;i++){
-g.appendChild(_2dd.item(i));
+for(var i=0;i<_2f6.length;i++){
+g.appendChild(_2f6.item(i));
 }
 p.appendChild(g);
 return g;
@@ -12403,18 +9317,18 @@
 }
 };
 dojo.svg.createNodesFromText=function(txt,wrap){
-var _2f0=(new DOMParser()).parseFromString(txt,"text/xml").normalize();
+var _309=(new DOMParser()).parseFromString(txt,"text/xml").normalize();
 if(wrap){
-return [_2f0.firstChild.cloneNode(true)];
+return [_309.firstChild.cloneNode(true)];
 }
-var _2f1=[];
-for(var x=0;x<_2f0.childNodes.length;x++){
-_2f1.push(_2f0.childNodes.item(x).cloneNode(true));
+var _30a=[];
+for(var x=0;x<_309.childNodes.length;x++){
+_30a.push(_309.childNodes.item(x).cloneNode(true));
 }
-return _2f1;
+return _30a;
 };
 dojo.provide("dojo.charting.Axis");
-dojo.charting.Axis=function(_2f3,_2f4,_2f5){
+dojo.charting.Axis=function(_30c,_30d,_30e){
 var id="dojo-charting-axis-"+dojo.charting.Axis.count++;
 this.getId=function(){
 return id;
@@ -12422,55 +9336,61 @@
 this.setId=function(key){
 id=key;
 };
-this.scale=_2f4||"linear";
-this.label=_2f3||"";
+this.scale=_30d||"linear";
+this.label=_30c||"";
 this.showLabel=true;
 this.showLabels=true;
 this.showLines=false;
 this.showTicks=false;
-this.range={upper:0,lower:0};
+this.range={upper:100,lower:0};
 this.origin="min";
-this.labels=_2f5||[];
+this._origin=null;
+this.labels=_30e||[];
 this._labels=[];
 this.nodes={main:null,axis:null,label:null,labels:null,lines:null,ticks:null};
+this._rerender=false;
 };
 dojo.charting.Axis.count=0;
-dojo.extend(dojo.charting.Axis,{getCoord:function(val,_2f9,plot){
+dojo.extend(dojo.charting.Axis,{getCoord:function(val,_312,plot){
 val=parseFloat(val,10);
-var area=_2f9.getArea();
+var area=_312.getArea();
 if(plot.axisX==this){
-var _2fc=0-this.range.lower;
-var min=this.range.lower+_2fc;
-var max=this.range.upper+_2fc;
-val+=_2fc;
+var _315=0-this.range.lower;
+var min=this.range.lower+_315;
+var max=this.range.upper+_315;
+val+=_315;
 return (val*((area.right-area.left)/max))+area.left;
 }else{
 var max=this.range.upper;
 var min=this.range.lower;
-var _2fc=0;
+var _315=0;
 if(min<0){
-_2fc+=Math.abs(min);
+_315+=Math.abs(min);
 }
-max+=_2fc;
-min+=_2fc;
-val+=_2fc;
+max+=_315;
+min+=_315;
+val+=_315;
 var pmin=area.bottom;
 var pmax=area.top;
 return (((pmin-pmax)/(max-min))*(max-val))+pmax;
 }
-},initializeOrigin:function(_301,_302){
-if(isNaN(this.origin)){
-if(this.origin.toLowerCase()=="max"){
-this.origin=_301.range[(_302=="y")?"upper":"lower"];
+},initializeOrigin:function(_31a,_31b){
+if(this._origin==null){
+this._origin=this.origin;
+}
+if(isNaN(this._origin)){
+if(this._origin.toLowerCase()=="max"){
+this.origin=_31a.range[(_31b=="y")?"upper":"lower"];
 }else{
-if(this.origin.toLowerCase()=="min"){
-this.origin=_301.range[(_302=="y")?"lower":"upper"];
+if(this._origin.toLowerCase()=="min"){
+this.origin=_31a.range[(_31b=="y")?"lower":"upper"];
 }else{
 this.origin=0;
 }
 }
 }
 },initializeLabels:function(){
+this._labels=[];
 if(this.labels.length==0){
 this.showLabels=false;
 this.showLines=false;
@@ -12497,8 +9417,8 @@
 this._labels.push({label:s,value:this.range.upper});
 }
 if(a.length>0){
-var _306=this.range.upper-this.range.lower;
-var step=_306/(this.labels.length-1);
+var _31f=this.range.upper-this.range.lower;
+var step=_31f/(this.labels.length-1);
 for(var i=1;i<=a.length;i++){
 this._labels.push({label:a[i-1],value:this.range.lower+(step*i)});
 }
@@ -12506,11 +9426,11 @@
 }
 }
 }
-},initialize:function(_308,plot,_30a,_30b){
+},initialize:function(_321,plot,_323,_324){
 this.destroy();
-this.initializeOrigin(_30a,_30b);
+this.initializeOrigin(_323,_324);
 this.initializeLabels();
-var node=this.render(_308,plot,_30a,_30b);
+var node=this.render(_321,plot,_323,_324);
 return node;
 },destroy:function(){
 for(var p in this.nodes){
@@ -12523,9 +9443,11 @@
 this.nodes[p]=null;
 }
 }});
+dojo.requireIf(dojo.render.svg.capable,"dojo.charting.svg.Axis");
+dojo.requireIf(dojo.render.vml.capable,"dojo.charting.vml.Axis");
 dojo.provide("dojo.charting.svg.Axis");
 if(dojo.render.svg.capable){
-dojo.extend(dojo.charting.Axis,{renderLines:function(_30e,plot,_310){
+dojo.extend(dojo.charting.Axis,{renderLines:function(_327,plot,_329){
 if(this.nodes.lines){
 while(this.nodes.lines.childNodes.length>0){
 this.nodes.lines.removeChild(this.nodes.lines.childNodes[0]);
@@ -12535,23 +9457,23 @@
 this.nodes.lines=null;
 }
 }
-var area=_30e.getArea();
+var area=_327.getArea();
 var g=this.nodes.lines=document.createElementNS(dojo.svg.xmlns.svg,"g");
 g.setAttribute("id",this.getId()+"-lines");
 for(var i=0;i<this._labels.length;i++){
 if(this._labels[i].value==this.origin){
 continue;
 }
-var v=this.getCoord(this._labels[i].value,_30e,plot);
+var v=this.getCoord(this._labels[i].value,_327,plot);
 var l=document.createElementNS(dojo.svg.xmlns.svg,"line");
 l.setAttribute("style","stroke:#999;stroke-width:1px;stroke-dasharray:1,4;");
-if(_310=="x"){
+if(_329=="x"){
 l.setAttribute("y1",area.top);
 l.setAttribute("y2",area.bottom);
 l.setAttribute("x1",v);
 l.setAttribute("x2",v);
 }else{
-if(_310=="y"){
+if(_329=="y"){
 l.setAttribute("y1",v);
 l.setAttribute("y2",v);
 l.setAttribute("x1",area.left);
@@ -12561,7 +9483,7 @@
 g.appendChild(l);
 }
 return g;
-},renderTicks:function(_316,plot,_318,_319){
+},renderTicks:function(_32f,plot,_331,_332){
 if(this.nodes.ticks){
 while(this.nodes.ticks.childNodes.length>0){
 this.nodes.ticks.removeChild(this.nodes.ticks.childNodes[0]);
@@ -12574,32 +9496,32 @@
 var g=this.nodes.ticks=document.createElementNS(dojo.svg.xmlns.svg,"g");
 g.setAttribute("id",this.getId()+"-ticks");
 for(var i=0;i<this._labels.length;i++){
-var v=this.getCoord(this._labels[i].value,_316,plot);
+var v=this.getCoord(this._labels[i].value,_32f,plot);
 var l=document.createElementNS(dojo.svg.xmlns.svg,"line");
 l.setAttribute("style","stroke:#000;stroke-width:1pt;");
-if(_318=="x"){
-l.setAttribute("y1",_319);
-l.setAttribute("y2",_319+3);
+if(_331=="x"){
+l.setAttribute("y1",_332);
+l.setAttribute("y2",_332+3);
 l.setAttribute("x1",v);
 l.setAttribute("x2",v);
 }else{
-if(_318=="y"){
+if(_331=="y"){
 l.setAttribute("y1",v);
 l.setAttribute("y2",v);
-l.setAttribute("x1",_319-2);
-l.setAttribute("x2",_319+2);
+l.setAttribute("x1",_332-2);
+l.setAttribute("x2",_332+2);
 }
 }
 g.appendChild(l);
 }
 return g;
-},renderLabels:function(_31e,plot,_320,_321,_322,_323){
-function createLabel(_324,x,y,_327,_328){
+},renderLabels:function(_337,plot,_339,_33a,_33b,_33c){
+function createLabel(_33d,x,y,_340,_341){
 var text=document.createElementNS(dojo.svg.xmlns.svg,"text");
 text.setAttribute("x",x);
-text.setAttribute("y",(_320=="x"?y:y+2));
-text.setAttribute("style","text-anchor:"+_328+";font-family:sans-serif;font-size:"+_327+"px;fill:#000;");
-text.appendChild(document.createTextNode(_324));
+text.setAttribute("y",(_339=="x"?y:y+2));
+text.setAttribute("style","text-anchor:"+_341+";font-family:sans-serif;font-size:"+_340+"px;fill:#000;");
+text.appendChild(document.createTextNode(_33d));
 return text;
 }
 if(this.nodes.labels){
@@ -12614,77 +9536,81 @@
 var g=this.nodes.labels=document.createElementNS(dojo.svg.xmlns.svg,"g");
 g.setAttribute("id",this.getId()+"-labels");
 for(var i=0;i<this._labels.length;i++){
-var v=this.getCoord(this._labels[i].value,_31e,plot);
-if(_320=="x"){
-g.appendChild(createLabel(this._labels[i].label,v,_321,_322,_323));
+var v=this.getCoord(this._labels[i].value,_337,plot);
+if(_339=="x"){
+g.appendChild(createLabel(this._labels[i].label,v,_33a,_33b,_33c));
 }else{
-if(_320=="y"){
-g.appendChild(createLabel(this._labels[i].label,_321,v,_322,_323));
+if(_339=="y"){
+g.appendChild(createLabel(this._labels[i].label,_33a,v,_33b,_33c));
 }
 }
 }
 return g;
-},render:function(_32d,plot,_32f,_330){
-var area=_32d.getArea();
-var _332=1;
-var _333="stroke:#000;stroke-width:"+_332+"px;";
-var _334=10;
-var _335=_32f.getCoord(this.origin,_32d,plot);
+},render:function(_346,plot,_348,_349){
+if(!this._rerender&&this.nodes.main){
+return this.nodes.main;
+}
+this._rerender=false;
+var area=_346.getArea();
+var _34b=1;
+var _34c="stroke:#000;stroke-width:"+_34b+"px;";
+var _34d=10;
+var _34e=_348.getCoord(this.origin,_346,plot);
 this.nodes.main=document.createElementNS(dojo.svg.xmlns.svg,"g");
 var g=this.nodes.main;
 g.setAttribute("id",this.getId());
 var line=this.nodes.axis=document.createElementNS(dojo.svg.xmlns.svg,"line");
-if(_330=="x"){
-line.setAttribute("y1",_335);
-line.setAttribute("y2",_335);
-line.setAttribute("x1",area.left-_332);
-line.setAttribute("x2",area.right+_332);
-line.setAttribute("style",_333);
-var y=_335+_334+2;
+if(_349=="x"){
+line.setAttribute("y1",_34e);
+line.setAttribute("y2",_34e);
+line.setAttribute("x1",area.left-_34b);
+line.setAttribute("x2",area.right+_34b);
+line.setAttribute("style",_34c);
+var y=_34e+_34d+2;
 if(this.showLines){
-g.appendChild(this.renderLines(_32d,plot,_330,y));
+g.appendChild(this.renderLines(_346,plot,_349,y));
 }
 if(this.showTicks){
-g.appendChild(this.renderTicks(_32d,plot,_330,_335));
+g.appendChild(this.renderTicks(_346,plot,_349,_34e));
 }
 if(this.showLabels){
-g.appendChild(this.renderLabels(_32d,plot,_330,y,_334,"middle"));
+g.appendChild(this.renderLabels(_346,plot,_349,y,_34d,"middle"));
 }
 if(this.showLabel&&this.label){
-var x=_32d.size.width/2;
+var x=_346.size.width/2;
 var text=document.createElementNS(dojo.svg.xmlns.svg,"text");
 text.setAttribute("x",x);
-text.setAttribute("y",(_335+(_334*2)+(_334/2)));
-text.setAttribute("style","text-anchor:middle;font-family:sans-serif;font-weight:bold;font-size:"+(_334+2)+"px;fill:#000;");
+text.setAttribute("y",(_34e+(_34d*2)+(_34d/2)));
+text.setAttribute("style","text-anchor:middle;font-family:sans-serif;font-weight:bold;font-size:"+(_34d+2)+"px;fill:#000;");
 text.appendChild(document.createTextNode(this.label));
 g.appendChild(text);
 }
 }else{
-line.setAttribute("x1",_335);
-line.setAttribute("x2",_335);
+line.setAttribute("x1",_34e);
+line.setAttribute("x2",_34e);
 line.setAttribute("y1",area.top);
 line.setAttribute("y2",area.bottom);
-line.setAttribute("style",_333);
-var _33b=this.origin==_32f.range.upper;
-var x=_335+(_33b?4:-4);
-var _33c=_33b?"start":"end";
+line.setAttribute("style",_34c);
+var _354=this.origin==_348.range.upper;
+var x=_34e+(_354?4:-4);
+var _355=_354?"start":"end";
 if(this.showLines){
-g.appendChild(this.renderLines(_32d,plot,_330,x));
+g.appendChild(this.renderLines(_346,plot,_349,x));
 }
 if(this.showTicks){
-g.appendChild(this.renderTicks(_32d,plot,_330,_335));
+g.appendChild(this.renderTicks(_346,plot,_349,_34e));
 }
 if(this.showLabels){
-g.appendChild(this.renderLabels(_32d,plot,_330,x,_334,_33c));
+g.appendChild(this.renderLabels(_346,plot,_349,x,_34d,_355));
 }
 if(this.showLabel&&this.label){
-var x=_33b?(_335+(_334*2)+(_334/2)):(_335-(_334*4));
-var y=_32d.size.height/2;
+var x=_354?(_34e+(_34d*2)+(_34d/2)):(_34e-(_34d*4));
+var y=_346.size.height/2;
 var text=document.createElementNS(dojo.svg.xmlns.svg,"text");
 text.setAttribute("x",x);
 text.setAttribute("y",y);
 text.setAttribute("transform","rotate(90, "+x+", "+y+")");
-text.setAttribute("style","text-anchor:middle;font-family:sans-serif;font-weight:bold;font-size:"+(_334+2)+"px;fill:#000;");
+text.setAttribute("style","text-anchor:middle;font-family:sans-serif;font-weight:bold;font-size:"+(_34d+2)+"px;fill:#000;");
 text.appendChild(document.createTextNode(this.label));
 g.appendChild(text);
 }
@@ -12695,7 +9621,7 @@
 }
 dojo.provide("dojo.charting.vml.Axis");
 if(dojo.render.vml.capable){
-dojo.extend(dojo.charting.Axis,{renderLines:function(_33d,plot,_33f){
+dojo.extend(dojo.charting.Axis,{renderLines:function(_356,plot,_358){
 if(this.nodes.lines){
 while(this.nodes.lines.childNodes.length>0){
 this.nodes.lines.removeChild(this.nodes.lines.childNodes[0]);
@@ -12705,14 +9631,14 @@
 this.nodes.lines=null;
 }
 }
-var area=_33d.getArea();
+var area=_356.getArea();
 var g=this.nodes.lines=document.createElement("div");
 g.setAttribute("id",this.getId()+"-lines");
 for(var i=0;i<this._labels.length;i++){
 if(this._labels[i].value==this.origin){
 continue;
 }
-var v=this.getCoord(this._labels[i].value,_33d,plot);
+var v=this.getCoord(this._labels[i].value,_356,plot);
 var l=document.createElement("v:line");
 var str=document.createElement("v:stroke");
 str.dashstyle="dot";
@@ -12724,11 +9650,11 @@
 s.top="0px";
 s.left="0px";
 s.antialias="false";
-if(_33f=="x"){
+if(_358=="x"){
 l.setAttribute("from",v+"px,"+area.top+"px");
 l.setAttribute("to",v+"px,"+area.bottom+"px");
 }else{
-if(_33f=="y"){
+if(_358=="y"){
 l.setAttribute("from",area.left+"px,"+v+"px");
 l.setAttribute("to",area.right+"px,"+v+"px");
 }
@@ -12736,7 +9662,7 @@
 g.appendChild(l);
 }
 return g;
-},renderTicks:function(_347,plot,_349,_34a){
+},renderTicks:function(_360,plot,_362,_363){
 if(this.nodes.ticks){
 while(this.nodes.ticks.childNodes.length>0){
 this.nodes.ticks.removeChild(this.nodes.ticks.childNodes[0]);
@@ -12749,7 +9675,7 @@
 var g=this.nodes.ticks=document.createElement("div");
 g.setAttribute("id",this.getId()+"-ticks");
 for(var i=0;i<this._labels.length;i++){
-var v=this.getCoord(this._labels[i].value,_347,plot);
+var v=this.getCoord(this._labels[i].value,_360,plot);
 var l=document.createElement("v:line");
 l.setAttribute("strokecolor","#000");
 l.setAttribute("strokeweight","1px");
@@ -12758,36 +9684,36 @@
 s.top="0px";
 s.left="0px";
 s.antialias="false";
-if(_349=="x"){
-l.setAttribute("from",v+"px,"+_34a+"px");
-l.setAttribute("to",v+"px,"+(_34a+3)+"px");
+if(_362=="x"){
+l.setAttribute("from",v+"px,"+_363+"px");
+l.setAttribute("to",v+"px,"+(_363+3)+"px");
 }else{
-if(_349=="y"){
-l.setAttribute("from",(_34a-2)+"px,"+v+"px");
-l.setAttribute("to",(_34a+2)+"px,"+v+"px");
+if(_362=="y"){
+l.setAttribute("from",(_363-2)+"px,"+v+"px");
+l.setAttribute("to",(_363+2)+"px,"+v+"px");
 }
 }
 g.appendChild(l);
 }
 return g;
-},renderLabels:function(_350,plot,_352,_353,_354,_355){
-function createLabel(_356,x,y,_359,_35a){
+},renderLabels:function(_369,plot,_36b,_36c,_36d,_36e){
+function createLabel(_36f,x,y,_372,_373){
 var text=document.createElement("div");
 var s=text.style;
-text.innerHTML=_356;
-s.fontSize=_359+"px";
+text.innerHTML=_36f;
+s.fontSize=_372+"px";
 s.fontFamily="sans-serif";
 s.position="absolute";
 s.top=y+"px";
-if(_35a=="center"){
+if(_373=="center"){
 s.left=x+"px";
 s.textAlign="center";
 }else{
-if(_35a=="left"){
+if(_373=="left"){
 s.left=x+"px";
 s.textAlign="left";
 }else{
-if(_35a=="right"){
+if(_373=="right"){
 s.right=x+"px";
 s.textAlign="right";
 }
@@ -12807,15 +9733,15 @@
 var g=this.nodes.labels=document.createElement("div");
 g.setAttribute("id",this.getId()+"-labels");
 for(var i=0;i<this._labels.length;i++){
-var v=this.getCoord(this._labels[i].value,_350,plot);
-if(_352=="x"){
-var node=createLabel(this._labels[i].label,v,_353,_354,_355);
+var v=this.getCoord(this._labels[i].value,_369,plot);
+if(_36b=="x"){
+var node=createLabel(this._labels[i].label,v,_36c,_36d,_36e);
 document.body.appendChild(node);
 node.style.left=v-(node.offsetWidth/2)+"px";
 g.appendChild(node);
 }else{
-if(_352=="y"){
-var node=createLabel(this._labels[i].label,_353,v,_354,_355);
+if(_36b=="y"){
+var node=createLabel(this._labels[i].label,_36c,v,_36d,_36e);
 document.body.appendChild(node);
 node.style.top=v-(node.offsetHeight/2)+"px";
 g.appendChild(node);
@@ -12823,42 +9749,46 @@
 }
 }
 return g;
-},render:function(_361,plot,_363,_364){
-var area=_361.getArea();
-var _366=1;
-var _367="stroke:#000;stroke-width:"+_366+"px;";
-var _368=10;
-var _369=_363.getCoord(this.origin,_361,plot);
+},render:function(_37a,plot,_37c,_37d){
+if(!this._rerender&&this.nodes.main){
+return this.nodes.main;
+}
+this._rerender=false;
+var area=_37a.getArea();
+var _37f=1;
+var _380="stroke:#000;stroke-width:"+_37f+"px;";
+var _381=10;
+var _382=_37c.getCoord(this.origin,_37a,plot);
 var g=this.nodes.main=document.createElement("div");
 g.setAttribute("id",this.getId());
 var line=this.nodes.axis=document.createElement("v:line");
 line.setAttribute("strokecolor","#000");
-line.setAttribute("strokeweight",_366+"px");
+line.setAttribute("strokeweight",_37f+"px");
 var s=line.style;
 s.position="absolute";
 s.top="0px";
 s.left="0px";
 s.antialias="false";
-if(_364=="x"){
-line.setAttribute("from",area.left+"px,"+_369+"px");
-line.setAttribute("to",area.right+"px,"+_369+"px");
-var y=_369+Math.floor(_368/2);
+if(_37d=="x"){
+line.setAttribute("from",area.left+"px,"+_382+"px");
+line.setAttribute("to",area.right+"px,"+_382+"px");
+var y=_382+Math.floor(_381/2);
 if(this.showLines){
-g.appendChild(this.renderLines(_361,plot,_364,y));
+g.appendChild(this.renderLines(_37a,plot,_37d,y));
 }
 if(this.showTicks){
-g.appendChild(this.renderTicks(_361,plot,_364,_369));
+g.appendChild(this.renderTicks(_37a,plot,_37d,_382));
 }
 if(this.showLabels){
-g.appendChild(this.renderLabels(_361,plot,_364,y,_368,"center"));
+g.appendChild(this.renderLabels(_37a,plot,_37d,y,_381,"center"));
 }
 if(this.showLabel&&this.label){
-var x=_361.size.width/2;
-var y=_369+Math.round(_368*1.5);
+var x=_37a.size.width/2;
+var y=_382+Math.round(_381*1.5);
 var text=document.createElement("div");
 var s=text.style;
 text.innerHTML=this.label;
-s.fontSize=(_368+2)+"px";
+s.fontSize=(_381+2)+"px";
 s.fontFamily="sans-serif";
 s.fontWeight="bold";
 s.position="absolute";
@@ -12870,41 +9800,41 @@
 g.appendChild(text);
 }
 }else{
-line.setAttribute("from",_369+"px,"+area.top+"px");
-line.setAttribute("to",_369+"px,"+area.bottom+"px");
-var _370=this.origin==_363.range.upper;
-var x=_369+4;
-var _371="left";
-if(!_370){
-x=area.right-_369+_368+4;
-_371="right";
-if(_369==area.left){
-x+=(_368*2)-(_368/2);
+line.setAttribute("from",_382+"px,"+area.top+"px");
+line.setAttribute("to",_382+"px,"+area.bottom+"px");
+var _389=this.origin==_37c.range.upper;
+var x=_382+4;
+var _38a="left";
+if(!_389){
+x=area.right-_382+_381+4;
+_38a="right";
+if(_382==area.left){
+x+=(_381*2)-(_381/2);
 }
 }
 if(this.showLines){
-g.appendChild(this.renderLines(_361,plot,_364,x));
+g.appendChild(this.renderLines(_37a,plot,_37d,x));
 }
 if(this.showTicks){
-g.appendChild(this.renderTicks(_361,plot,_364,_369));
+g.appendChild(this.renderTicks(_37a,plot,_37d,_382));
 }
 if(this.showLabels){
-g.appendChild(this.renderLabels(_361,plot,_364,x,_368,_371));
+g.appendChild(this.renderLabels(_37a,plot,_37d,x,_381,_38a));
 }
 if(this.showLabel&&this.label){
-x+=(_368*2)-2;
-var y=_361.size.height/2;
+x+=(_381*2)-2;
+var y=_37a.size.height/2;
 var text=document.createElement("div");
 var s=text.style;
 text.innerHTML=this.label;
-s.fontSize=(_368+2)+"px";
+s.fontSize=(_381+2)+"px";
 s.fontFamily="sans-serif";
 s.fontWeight="bold";
 s.position="absolute";
-s.height=_361.size.height+"px";
+s.height=_37a.size.height+"px";
 s.writingMode="tb-rl";
 s.textAlign="center";
-s[_371]=x+"px";
+s[_38a]=x+"px";
 document.body.appendChild(text);
 s.top=y-(text.offsetHeight/2)+"px";
 g.appendChild(text);
@@ -12915,74 +9845,81 @@
 }});
 }
 dojo.provide("dojo.charting.Plotters");
+dojo.requireIf(dojo.render.svg.capable,"dojo.charting.svg.Plotters");
+dojo.requireIf(dojo.render.vml.capable,"dojo.charting.vml.Plotters");
 dojo.provide("dojo.charting.svg.Plotters");
 if(dojo.render.svg.capable){
-dojo.require("dojo.svg");
-dojo.mixin(dojo.charting.Plotters,{Bar:function(_372,plot,_374,_375){
-var area=_372.getArea();
-var _377=document.createElementNS(dojo.svg.xmlns.svg,"g");
+dojo.mixin(dojo.charting.Plotters,{Bar:function(_38b,plot,_38d,_38e){
+var area=_38b.getArea();
+var _390=document.createElementNS(dojo.svg.xmlns.svg,"g");
 var n=plot.series.length;
 var data=[];
 for(var i=0;i<n;i++){
-var tmp=plot.series[i].data.evaluate(_374);
+var tmp=plot.series[i].data.evaluate(_38d);
 data.push(tmp);
 }
-var _37c=8;
-var _37d=data[0].length;
-var _37e=((area.right-area.left)-(_37c*(_37d-1)))/_37d;
-var _37f=_37e/n;
-var _380=plot.axisY.getCoord(plot.axisX.origin,_372,plot);
-for(var i=0;i<_37d;i++){
-var _381=area.left+(_37e*i)+(_37c*i);
+var _395=8;
+var _396=data[0].length;
+if(_396==0){
+return _390;
+}
+var _397=((area.right-area.left)-(_395*(_396-1)))/_396;
+var _398=_397/n;
+var _399=plot.axisY.getCoord(plot.axisX.origin,_38b,plot);
+for(var i=0;i<_396;i++){
+var _39a=area.left+(_397*i)+(_395*i);
 for(var j=0;j<n;j++){
-var _383=data[j][i].y;
-var yA=_380;
-var x=_381+(_37f*j);
-var y=plot.axisY.getCoord(_383,_372,plot);
+var _39c=data[j][i].y;
+var yA=_399;
+var x=_39a+(_398*j);
+var y=plot.axisY.getCoord(_39c,_38b,plot);
 var h=Math.abs(yA-y);
-if(_383<plot.axisX.origin){
+if(_39c<plot.axisX.origin){
 yA=y;
-y=_380;
+y=_399;
 }
 var bar=document.createElementNS(dojo.svg.xmlns.svg,"rect");
 bar.setAttribute("fill",data[j][i].series.color);
 bar.setAttribute("stroke-width","0");
 bar.setAttribute("x",x);
 bar.setAttribute("y",y);
-bar.setAttribute("width",_37f);
+bar.setAttribute("width",_398);
 bar.setAttribute("height",h);
 bar.setAttribute("fill-opacity","0.6");
-if(_375){
-_375(bar,data[j][i].src);
+if(_38e){
+_38e(bar,data[j][i].src);
 }
-_377.appendChild(bar);
+_390.appendChild(bar);
 }
 }
-return _377;
-},HorizontalBar:function(_389,plot,_38b,_38c){
-var area=_389.getArea();
-var _38e=document.createElementNS(dojo.svg.xmlns.svg,"g");
+return _390;
+},HorizontalBar:function(_3a2,plot,_3a4,_3a5){
+var area=_3a2.getArea();
+var _3a7=document.createElementNS(dojo.svg.xmlns.svg,"g");
 var n=plot.series.length;
 var data=[];
 for(var i=0;i<n;i++){
-var tmp=plot.series[i].data.evaluate(_38b);
+var tmp=plot.series[i].data.evaluate(_3a4);
 data.push(tmp);
 }
-var _393=6;
-var _394=data[0].length;
-var h=((area.bottom-area.top)-(_393*(_394-1)))/_394;
+var _3ac=6;
+var _3ad=data[0].length;
+if(_3ad==0){
+return _3a7;
+}
+var h=((area.bottom-area.top)-(_3ac*(_3ad-1)))/_3ad;
 var barH=h/n;
-var _397=plot.axisX.getCoord(0,_389,plot);
-for(var i=0;i<_394;i++){
-var _398=area.top+(h*i)+(_393*i);
+var _3b0=plot.axisX.getCoord(0,_3a2,plot);
+for(var i=0;i<_3ad;i++){
+var _3b1=area.top+(h*i)+(_3ac*i);
 for(var j=0;j<n;j++){
-var _39a=data[j][i].y;
-var y=_398+(barH*j);
-var xA=_397;
-var x=plot.axisX.getCoord(_39a,_389,plot);
+var _3b3=data[j][i].y;
+var y=_3b1+(barH*j);
+var xA=_3b0;
+var x=plot.axisX.getCoord(_3b3,_3a2,plot);
 var w=Math.abs(x-xA);
-if(_39a>0){
-x=_397;
+if(_3b3>0){
+x=_3b0;
 }
 var bar=document.createElementNS(dojo.svg.xmlns.svg,"rect");
 bar.setAttribute("fill",data[j][i].series.color);
@@ -12992,28 +9929,31 @@
 bar.setAttribute("width",w);
 bar.setAttribute("height",barH);
 bar.setAttribute("fill-opacity","0.6");
-if(_38c){
-_38c(bar,data[j][i].src);
+if(_3a5){
+_3a5(bar,data[j][i].src);
 }
-_38e.appendChild(bar);
+_3a7.appendChild(bar);
 }
 }
-return _38e;
-},Gantt:function(_3a0,plot,_3a2,_3a3){
-var area=_3a0.getArea();
-var _3a5=document.createElementNS(dojo.svg.xmlns.svg,"g");
+return _3a7;
+},Gantt:function(_3b9,plot,_3bb,_3bc){
+var area=_3b9.getArea();
+var _3be=document.createElementNS(dojo.svg.xmlns.svg,"g");
 var n=plot.series.length;
 var data=[];
 for(var i=0;i<n;i++){
-var tmp=plot.series[i].data.evaluate(_3a2);
+var tmp=plot.series[i].data.evaluate(_3bb);
 data.push(tmp);
 }
-var _3aa=2;
-var _3ab=data[0].length;
-var h=((area.bottom-area.top)-(_3aa*(_3ab-1)))/_3ab;
+var _3c3=2;
+var _3c4=data[0].length;
+if(_3c4==0){
+return _3be;
+}
+var h=((area.bottom-area.top)-(_3c3*(_3c4-1)))/_3c4;
 var barH=h/n;
-for(var i=0;i<_3ab;i++){
-var _3ae=area.top+(h*i)+(_3aa*i);
+for(var i=0;i<_3c4;i++){
+var _3c7=area.top+(h*i)+(_3c3*i);
 for(var j=0;j<n;j++){
 var high=data[j][i].high;
 var low=data[j][i].low;
@@ -13022,9 +9962,9 @@
 high=low;
 low=t;
 }
-var x=plot.axisX.getCoord(low,_3a0,plot);
-var w=plot.axisX.getCoord(high,_3a0,plot)-x;
-var y=_3ae+(barH*j);
+var x=plot.axisX.getCoord(low,_3b9,plot);
+var w=plot.axisX.getCoord(high,_3b9,plot)-x;
+var y=_3c7+(barH*j);
 var bar=document.createElementNS(dojo.svg.xmlns.svg,"rect");
 bar.setAttribute("fill",data[j][i].series.color);
 bar.setAttribute("stroke-width","0");
@@ -13033,28 +9973,28 @@
 bar.setAttribute("width",w);
 bar.setAttribute("height",barH);
 bar.setAttribute("fill-opacity","0.6");
-if(_3a3){
-_3a3(bar,data[j][i].src);
+if(_3bc){
+_3bc(bar,data[j][i].src);
 }
-_3a5.appendChild(bar);
+_3be.appendChild(bar);
 }
 }
-return _3a5;
-},StackedArea:function(_3b7,plot,_3b9,_3ba){
-var area=_3b7.getArea();
-var _3bc=document.createElementNS(dojo.svg.xmlns.svg,"g");
+return _3be;
+},StackedArea:function(_3d0,plot,_3d2,_3d3){
+var area=_3d0.getArea();
+var _3d5=document.createElementNS(dojo.svg.xmlns.svg,"g");
 var n=plot.series.length;
 var data=[];
-var _3bf=[];
+var _3d8=[];
 for(var i=0;i<n;i++){
-var tmp=plot.series[i].data.evaluate(_3b9);
+var tmp=plot.series[i].data.evaluate(_3d2);
 for(var j=0;j<tmp.length;j++){
 if(i==0){
-_3bf.push(tmp[j].y);
+_3d8.push(tmp[j].y);
 }else{
-_3bf[j]+=tmp[j].y;
+_3d8[j]+=tmp[j].y;
 }
-tmp[j].y=_3bf[j];
+tmp[j].y=_3d8[j];
 }
 data.push(tmp);
 }
@@ -13068,9 +10008,9 @@
 var cmd=[];
 var r=3;
 for(var j=0;j<data[i].length;j++){
-var _3c6=data[i];
-var x=plot.axisX.getCoord(_3c6[j].x,_3b7,plot);
-var y=plot.axisY.getCoord(_3c6[j].y,_3b7,plot);
+var _3df=data[i];
+var x=plot.axisX.getCoord(_3df[j].x,_3d0,plot);
+var y=plot.axisY.getCoord(_3df[j].y,_3d0,plot);
 if(j==0){
 cmd.push("M");
 }else{
@@ -13081,52 +10021,52 @@
 c.setAttribute("cx",x);
 c.setAttribute("cy",y);
 c.setAttribute("r","3");
-c.setAttribute("fill",_3c6[j].series.color);
+c.setAttribute("fill",_3df[j].series.color);
 c.setAttribute("fill-opacity","0.6");
 c.setAttribute("stroke-width","1");
 c.setAttribute("stroke-opacity","0.85");
-_3bc.appendChild(c);
-if(_3ba){
-_3ba(c,data[i].src);
+_3d5.appendChild(c);
+if(_3d3){
+_3d3(c,data[i].src);
 }
 }
 if(i==0){
 cmd.push("L");
-cmd.push(x+","+plot.axisY.getCoord(plot.axisX.origin,_3b7,plot));
+cmd.push(x+","+plot.axisY.getCoord(plot.axisX.origin,_3d0,plot));
 cmd.push("L");
-cmd.push(plot.axisX.getCoord(data[0][0].x,_3b7,plot)+","+plot.axisY.getCoord(plot.axisX.origin,_3b7,plot));
+cmd.push(plot.axisX.getCoord(data[0][0].x,_3d0,plot)+","+plot.axisY.getCoord(plot.axisX.origin,_3d0,plot));
 cmd.push("Z");
 }else{
-var _3c6=data[i-1];
+var _3df=data[i-1];
 cmd.push("L");
-cmd.push(x+","+Math.round(plot.axisY.getCoord(_3c6[_3c6.length-1].y,_3b7,plot)));
-for(var j=_3c6.length-2;j>=0;j--){
-var x=plot.axisX.getCoord(_3c6[j].x,_3b7,plot);
-var y=plot.axisY.getCoord(_3c6[j].y,_3b7,plot);
+cmd.push(x+","+Math.round(plot.axisY.getCoord(_3df[_3df.length-1].y,_3d0,plot)));
+for(var j=_3df.length-2;j>=0;j--){
+var x=plot.axisX.getCoord(_3df[j].x,_3d0,plot);
+var y=plot.axisY.getCoord(_3df[j].y,_3d0,plot);
 cmd.push("L");
 cmd.push(x+","+y);
 }
 }
 path.setAttribute("d",cmd.join(" ")+" Z");
-_3bc.appendChild(path);
+_3d5.appendChild(path);
 }
-return _3bc;
-},StackedCurvedArea:function(_3ca,plot,_3cc,_3cd){
-var _3ce=3;
-var area=_3ca.getArea();
-var _3d0=document.createElementNS(dojo.svg.xmlns.svg,"g");
+return _3d5;
+},StackedCurvedArea:function(_3e3,plot,_3e5,_3e6){
+var _3e7=3;
+var area=_3e3.getArea();
+var _3e9=document.createElementNS(dojo.svg.xmlns.svg,"g");
 var n=plot.series.length;
 var data=[];
-var _3d3=[];
+var _3ec=[];
 for(var i=0;i<n;i++){
-var tmp=plot.series[i].data.evaluate(_3cc);
+var tmp=plot.series[i].data.evaluate(_3e5);
 for(var j=0;j<tmp.length;j++){
 if(i==0){
-_3d3.push(tmp[j].y);
+_3ec.push(tmp[j].y);
 }else{
-_3d3[j]+=tmp[j].y;
+_3ec[j]+=tmp[j].y;
 }
-tmp[j].y=_3d3[j];
+tmp[j].y=_3ec[j];
 }
 data.push(tmp);
 }
@@ -13140,22 +10080,22 @@
 var cmd=[];
 var r=3;
 for(var j=0;j<data[i].length;j++){
-var _3da=data[i];
-var x=plot.axisX.getCoord(_3da[j].x,_3ca,plot);
-var y=plot.axisY.getCoord(_3da[j].y,_3ca,plot);
+var _3f3=data[i];
+var x=plot.axisX.getCoord(_3f3[j].x,_3e3,plot);
+var y=plot.axisY.getCoord(_3f3[j].y,_3e3,plot);
 var dx=area.left+1;
 var dy=area.bottom;
 if(j>0){
-dx=x-plot.axisX.getCoord(_3da[j-1].x,_3ca,plot);
-dy=plot.axisY.getCoord(_3da[j-1].y,_3ca,plot);
+dx=x-plot.axisX.getCoord(_3f3[j-1].x,_3e3,plot);
+dy=plot.axisY.getCoord(_3f3[j-1].y,_3e3,plot);
 }
 if(j==0){
 cmd.push("M");
 }else{
 cmd.push("C");
-var cx=x-(_3ce-1)*(dx/_3ce);
+var cx=x-(_3e7-1)*(dx/_3e7);
 cmd.push(cx+","+dy);
-cx=x-(dx/_3ce);
+cx=x-(dx/_3e7);
 cmd.push(cx+","+y);
 }
 cmd.push(x+","+y);
@@ -13163,57 +10103,57 @@
 c.setAttribute("cx",x);
 c.setAttribute("cy",y);
 c.setAttribute("r","3");
-c.setAttribute("fill",_3da[j].series.color);
+c.setAttribute("fill",_3f3[j].series.color);
 c.setAttribute("fill-opacity","0.6");
 c.setAttribute("stroke-width","1");
 c.setAttribute("stroke-opacity","0.85");
-_3d0.appendChild(c);
-if(_3cd){
-_3cd(c,data[i].src);
+_3e9.appendChild(c);
+if(_3e6){
+_3e6(c,data[i].src);
 }
 }
 if(i==0){
 cmd.push("L");
-cmd.push(x+","+plot.axisY.getCoord(plot.axisX.origin,_3ca,plot));
+cmd.push(x+","+plot.axisY.getCoord(plot.axisX.origin,_3e3,plot));
 cmd.push("L");
-cmd.push(plot.axisX.getCoord(data[0][0].x,_3ca,plot)+","+plot.axisY.getCoord(plot.axisX.origin,_3ca,plot));
+cmd.push(plot.axisX.getCoord(data[0][0].x,_3e3,plot)+","+plot.axisY.getCoord(plot.axisX.origin,_3e3,plot));
 cmd.push("Z");
 }else{
-var _3da=data[i-1];
+var _3f3=data[i-1];
 cmd.push("L");
-cmd.push(x+","+Math.round(plot.axisY.getCoord(_3da[_3da.length-1].y,_3ca,plot)));
-for(var j=_3da.length-2;j>=0;j--){
-var x=plot.axisX.getCoord(_3da[j].x,_3ca,plot);
-var y=plot.axisY.getCoord(_3da[j].y,_3ca,plot);
-var dx=x-plot.axisX.getCoord(_3da[j+1].x,_3ca,plot);
-var dy=plot.axisY.getCoord(_3da[j+1].y,_3ca,plot);
+cmd.push(x+","+Math.round(plot.axisY.getCoord(_3f3[_3f3.length-1].y,_3e3,plot)));
+for(var j=_3f3.length-2;j>=0;j--){
+var x=plot.axisX.getCoord(_3f3[j].x,_3e3,plot);
+var y=plot.axisY.getCoord(_3f3[j].y,_3e3,plot);
+var dx=x-plot.axisX.getCoord(_3f3[j+1].x,_3e3,plot);
+var dy=plot.axisY.getCoord(_3f3[j+1].y,_3e3,plot);
 cmd.push("C");
-var cx=x-(_3ce-1)*(dx/_3ce);
+var cx=x-(_3e7-1)*(dx/_3e7);
 cmd.push(cx+","+dy);
-cx=x-(dx/_3ce);
+cx=x-(dx/_3e7);
 cmd.push(cx+","+y);
 cmd.push(x+","+y);
 }
 }
 path.setAttribute("d",cmd.join(" ")+" Z");
-_3d0.appendChild(path);
+_3e9.appendChild(path);
 }
-return _3d0;
-},DataBar:function(data,_3e2,plot,_3e4){
-var area=_3e2.getArea();
-var _3e6=document.createElementNS(dojo.svg.xmlns.svg,"g");
+return _3e9;
+},DataBar:function(data,_3fb,plot,_3fd){
+var area=_3fb.getArea();
+var _3ff=document.createElementNS(dojo.svg.xmlns.svg,"g");
 var n=data.length;
 var w=(area.right-area.left)/(plot.axisX.range.upper-plot.axisX.range.lower);
-var _3e9=plot.axisY.getCoord(plot.axisX.origin,_3e2,plot);
+var _402=plot.axisY.getCoord(plot.axisX.origin,_3fb,plot);
 for(var i=0;i<n;i++){
-var _3eb=data[i].y;
-var yA=_3e9;
-var x=plot.axisX.getCoord(data[i].x,_3e2,plot)-(w/2);
-var y=plot.axisY.getCoord(_3eb,_3e2,plot);
+var _404=data[i].y;
+var yA=_402;
+var x=plot.axisX.getCoord(data[i].x,_3fb,plot)-(w/2);
+var y=plot.axisY.getCoord(_404,_3fb,plot);
 var h=Math.abs(yA-y);
-if(_3eb<plot.axisX.origin){
+if(_404<plot.axisX.origin){
 yA=y;
-y=_3e9;
+y=_402;
 }
 var bar=document.createElementNS(dojo.svg.xmlns.svg,"rect");
 bar.setAttribute("fill",data[i].series.color);
@@ -13223,15 +10163,18 @@
 bar.setAttribute("width",w);
 bar.setAttribute("height",h);
 bar.setAttribute("fill-opacity","0.6");
-if(_3e4){
-_3e4(bar,data[i].src);
+if(_3fd){
+_3fd(bar,data[i].src);
 }
-_3e6.appendChild(bar);
+_3ff.appendChild(bar);
 }
-return _3e6;
-},Line:function(data,_3f2,plot,_3f4){
-var area=_3f2.getArea();
+return _3ff;
+},Line:function(data,_40b,plot,_40d){
+var area=_40b.getArea();
 var line=document.createElementNS(dojo.svg.xmlns.svg,"g");
+if(data.length==0){
+return line;
+}
 var path=document.createElementNS(dojo.svg.xmlns.svg,"path");
 line.appendChild(path);
 path.setAttribute("fill","none");
@@ -13243,8 +10186,8 @@
 }
 var cmd=[];
 for(var i=0;i<data.length;i++){
-var x=plot.axisX.getCoord(data[i].x,_3f2,plot);
-var y=plot.axisY.getCoord(data[i].y,_3f2,plot);
+var x=plot.axisX.getCoord(data[i].x,_40b,plot);
+var y=plot.axisY.getCoord(data[i].y,_40b,plot);
 if(i==0){
 cmd.push("M");
 }else{
@@ -13260,16 +10203,19 @@
 c.setAttribute("stroke-width","1");
 c.setAttribute("stroke-opacity","0.85");
 line.appendChild(c);
-if(_3f4){
-_3f4(c,data[i].src);
+if(_40d){
+_40d(c,data[i].src);
 }
 }
 path.setAttribute("d",cmd.join(" "));
 return line;
-},CurvedLine:function(data,_3fe,plot,_400){
-var _401=3;
-var area=_3fe.getArea();
+},CurvedLine:function(data,_417,plot,_419){
+var _41a=3;
+var area=_417.getArea();
 var line=document.createElementNS(dojo.svg.xmlns.svg,"g");
+if(data.length==0){
+return line;
+}
 var path=document.createElementNS(dojo.svg.xmlns.svg,"path");
 line.appendChild(path);
 path.setAttribute("fill","none");
@@ -13281,21 +10227,21 @@
 }
 var cmd=[];
 for(var i=0;i<data.length;i++){
-var x=plot.axisX.getCoord(data[i].x,_3fe,plot);
-var y=plot.axisY.getCoord(data[i].y,_3fe,plot);
+var x=plot.axisX.getCoord(data[i].x,_417,plot);
+var y=plot.axisY.getCoord(data[i].y,_417,plot);
 var dx=area.left+1;
 var dy=area.bottom;
 if(i>0){
-dx=x-plot.axisX.getCoord(data[i-1].x,_3fe,plot);
-dy=plot.axisY.getCoord(data[i-1].y,_3fe,plot);
+dx=x-plot.axisX.getCoord(data[i-1].x,_417,plot);
+dy=plot.axisY.getCoord(data[i-1].y,_417,plot);
 }
 if(i==0){
 cmd.push("M");
 }else{
 cmd.push("C");
-var cx=x-(_401-1)*(dx/_401);
+var cx=x-(_41a-1)*(dx/_41a);
 cmd.push(cx+","+dy);
-cx=x-(dx/_401);
+cx=x-(dx/_41a);
 cmd.push(cx+","+y);
 }
 cmd.push(x+","+y);
@@ -13308,15 +10254,18 @@
 c.setAttribute("stroke-width","1");
 c.setAttribute("stroke-opacity","0.85");
 line.appendChild(c);
-if(_400){
-_400(c,data[i].src);
+if(_419){
+_419(c,data[i].src);
 }
 }
 path.setAttribute("d",cmd.join(" "));
 return line;
-},Area:function(data,_40e,plot,_410){
-var area=_40e.getArea();
+},Area:function(data,_427,plot,_429){
+var area=_427.getArea();
 var line=document.createElementNS(dojo.svg.xmlns.svg,"g");
+if(data.length==0){
+return line;
+}
 var path=document.createElementNS(dojo.svg.xmlns.svg,"path");
 line.appendChild(path);
 path.setAttribute("fill",data[0].series.color);
@@ -13329,8 +10278,8 @@
 }
 var cmd=[];
 for(var i=0;i<data.length;i++){
-var x=plot.axisX.getCoord(data[i].x,_40e,plot);
-var y=plot.axisY.getCoord(data[i].y,_40e,plot);
+var x=plot.axisX.getCoord(data[i].x,_427,plot);
+var y=plot.axisY.getCoord(data[i].y,_427,plot);
 if(i==0){
 cmd.push("M");
 }else{
@@ -13346,21 +10295,24 @@
 c.setAttribute("stroke-width","1");
 c.setAttribute("stroke-opacity","0.85");
 line.appendChild(c);
-if(_410){
-_410(c,data[i].src);
+if(_429){
+_429(c,data[i].src);
 }
 }
 cmd.push("L");
-cmd.push(x+","+plot.axisY.getCoord(plot.axisX.origin,_40e,plot));
+cmd.push(x+","+plot.axisY.getCoord(plot.axisX.origin,_427,plot));
 cmd.push("L");
-cmd.push(plot.axisX.getCoord(data[0].x,_40e,plot)+","+plot.axisY.getCoord(plot.axisX.origin,_40e,plot));
+cmd.push(plot.axisX.getCoord(data[0].x,_427,plot)+","+plot.axisY.getCoord(plot.axisX.origin,_427,plot));
 cmd.push("Z");
 path.setAttribute("d",cmd.join(" "));
 return line;
-},CurvedArea:function(data,_41a,plot,_41c){
-var _41d=3;
-var area=_41a.getArea();
+},CurvedArea:function(data,_433,plot,_435){
+var _436=3;
+var area=_433.getArea();
 var line=document.createElementNS(dojo.svg.xmlns.svg,"g");
+if(data.length==0){
+return line;
+}
 var path=document.createElementNS(dojo.svg.xmlns.svg,"path");
 line.appendChild(path);
 path.setAttribute("fill",data[0].series.color);
@@ -13373,21 +10325,21 @@
 }
 var cmd=[];
 for(var i=0;i<data.length;i++){
-var x=plot.axisX.getCoord(data[i].x,_41a,plot);
-var y=plot.axisY.getCoord(data[i].y,_41a,plot);
+var x=plot.axisX.getCoord(data[i].x,_433,plot);
+var y=plot.axisY.getCoord(data[i].y,_433,plot);
 var dx=area.left+1;
 var dy=area.bottom;
 if(i>0){
-dx=x-plot.axisX.getCoord(data[i-1].x,_41a,plot);
-dy=plot.axisY.getCoord(data[i-1].y,_41a,plot);
+dx=x-plot.axisX.getCoord(data[i-1].x,_433,plot);
+dy=plot.axisY.getCoord(data[i-1].y,_433,plot);
 }
 if(i==0){
 cmd.push("M");
 }else{
 cmd.push("C");
-var cx=x-(_41d-1)*(dx/_41d);
+var cx=x-(_436-1)*(dx/_436);
 cmd.push(cx+","+dy);
-cx=x-(dx/_41d);
+cx=x-(dx/_436);
 cmd.push(cx+","+y);
 }
 cmd.push(x+","+y);
@@ -13400,20 +10352,20 @@
 c.setAttribute("stroke-width","1");
 c.setAttribute("stroke-opacity","0.85");
 line.appendChild(c);
-if(_41c){
-_41c(c,data[i].src);
+if(_435){
+_435(c,data[i].src);
 }
 }
 cmd.push("L");
-cmd.push(x+","+plot.axisY.getCoord(plot.axisX.origin,_41a,plot));
+cmd.push(x+","+plot.axisY.getCoord(plot.axisX.origin,_433,plot));
 cmd.push("L");
-cmd.push(plot.axisX.getCoord(data[0].x,_41a,plot)+","+plot.axisY.getCoord(plot.axisX.origin,_41a,plot));
+cmd.push(plot.axisX.getCoord(data[0].x,_433,plot)+","+plot.axisY.getCoord(plot.axisX.origin,_433,plot));
 cmd.push("Z");
 path.setAttribute("d",cmd.join(" "));
 return line;
-},HighLow:function(data,_42a,plot,_42c){
-var area=_42a.getArea();
-var _42e=document.createElementNS(dojo.svg.xmlns.svg,"g");
+},HighLow:function(data,_443,plot,_445){
+var area=_443.getArea();
+var _447=document.createElementNS(dojo.svg.xmlns.svg,"g");
 var n=data.length;
 var part=((area.right-area.left)/(plot.axisX.range.upper-plot.axisX.range.lower))/4;
 var w=part*2;
@@ -13425,9 +10377,9 @@
 low=high;
 high=t;
 }
-var x=plot.axisX.getCoord(data[i].x,_42a,plot)-(w/2);
-var y=plot.axisY.getCoord(high,_42a,plot);
-var h=plot.axisY.getCoord(low,_42a,plot)-y;
+var x=plot.axisX.getCoord(data[i].x,_443,plot)-(w/2);
+var y=plot.axisY.getCoord(high,_443,plot);
+var h=plot.axisY.getCoord(low,_443,plot)-y;
 var bar=document.createElementNS(dojo.svg.xmlns.svg,"rect");
 bar.setAttribute("fill",data[i].series.color);
 bar.setAttribute("stroke-width","0");
@@ -13436,15 +10388,15 @@
 bar.setAttribute("width",w);
 bar.setAttribute("height",h);
 bar.setAttribute("fill-opacity","0.6");
-if(_42c){
-_42c(bar,data[i].src);
+if(_445){
+_445(bar,data[i].src);
 }
-_42e.appendChild(bar);
+_447.appendChild(bar);
 }
-return _42e;
-},HighLowClose:function(data,_43b,plot,_43d){
-var area=_43b.getArea();
-var _43f=document.createElementNS(dojo.svg.xmlns.svg,"g");
+return _447;
+},HighLowClose:function(data,_454,plot,_456){
+var area=_454.getArea();
+var _458=document.createElementNS(dojo.svg.xmlns.svg,"g");
 var n=data.length;
 var part=((area.right-area.left)/(plot.axisX.range.upper-plot.axisX.range.lower))/4;
 var w=part*2;
@@ -13457,10 +10409,10 @@
 high=t;
 }
 var c=data[i].close;
-var x=plot.axisX.getCoord(data[i].x,_43b,plot)-(w/2);
-var y=plot.axisY.getCoord(high,_43b,plot);
-var h=plot.axisY.getCoord(low,_43b,plot)-y;
-var _44b=plot.axisY.getCoord(c,_43b,plot);
+var x=plot.axisX.getCoord(data[i].x,_454,plot)-(w/2);
+var y=plot.axisY.getCoord(high,_454,plot);
+var h=plot.axisY.getCoord(low,_454,plot)-y;
+var _464=plot.axisY.getCoord(c,_454,plot);
 var g=document.createElementNS(dojo.svg.xmlns.svg,"g");
 var bar=document.createElementNS(dojo.svg.xmlns.svg,"rect");
 bar.setAttribute("fill",data[i].series.color);
@@ -13474,19 +10426,19 @@
 var line=document.createElementNS(dojo.svg.xmlns.svg,"line");
 line.setAttribute("x1",x);
 line.setAttribute("x2",x+w+(part*2));
-line.setAttribute("y1",_44b);
-line.setAttribute("y2",_44b);
+line.setAttribute("y1",_464);
+line.setAttribute("y2",_464);
 line.setAttribute("style","stroke:"+data[i].series.color+";stroke-width:1px;stroke-opacity:0.6;");
 g.appendChild(line);
-if(_43d){
-_43d(g,data[i].src);
+if(_456){
+_456(g,data[i].src);
 }
-_43f.appendChild(g);
+_458.appendChild(g);
 }
-return _43f;
-},HighLowOpenClose:function(data,_450,plot,_452){
-var area=_450.getArea();
-var _454=document.createElementNS(dojo.svg.xmlns.svg,"g");
+return _458;
+},HighLowOpenClose:function(data,_469,plot,_46b){
+var area=_469.getArea();
+var _46d=document.createElementNS(dojo.svg.xmlns.svg,"g");
 var n=data.length;
 var part=((area.right-area.left)/(plot.axisX.range.upper-plot.axisX.range.lower))/4;
 var w=part*2;
@@ -13500,11 +10452,11 @@
 }
 var o=data[i].open;
 var c=data[i].close;
-var x=plot.axisX.getCoord(data[i].x,_450,plot)-(w/2);
-var y=plot.axisY.getCoord(high,_450,plot);
-var h=plot.axisY.getCoord(low,_450,plot)-y;
-var open=plot.axisY.getCoord(o,_450,plot);
-var _462=plot.axisY.getCoord(c,_450,plot);
+var x=plot.axisX.getCoord(data[i].x,_469,plot)-(w/2);
+var y=plot.axisY.getCoord(high,_469,plot);
+var h=plot.axisY.getCoord(low,_469,plot)-y;
+var open=plot.axisY.getCoord(o,_469,plot);
+var _47b=plot.axisY.getCoord(c,_469,plot);
 var g=document.createElementNS(dojo.svg.xmlns.svg,"g");
 var bar=document.createElementNS(dojo.svg.xmlns.svg,"rect");
 bar.setAttribute("fill",data[i].series.color);
@@ -13525,104 +10477,107 @@
 var line=document.createElementNS(dojo.svg.xmlns.svg,"line");
 line.setAttribute("x1",x);
 line.setAttribute("x2",x+w+(part*2));
-line.setAttribute("y1",_462);
-line.setAttribute("y2",_462);
+line.setAttribute("y1",_47b);
+line.setAttribute("y2",_47b);
 line.setAttribute("style","stroke:"+data[i].series.color+";stroke-width:1px;stroke-opacity:0.6;");
 g.appendChild(line);
-if(_452){
-_452(g,data[i].src);
+if(_46b){
+_46b(g,data[i].src);
 }
-_454.appendChild(g);
+_46d.appendChild(g);
 }
-return _454;
-},Scatter:function(data,_467,plot,_469){
+return _46d;
+},Scatter:function(data,_480,plot,_482){
 var r=7;
-var _46b=document.createElementNS(dojo.svg.xmlns.svg,"g");
+var _484=document.createElementNS(dojo.svg.xmlns.svg,"g");
 for(var i=0;i<data.length;i++){
-var x=plot.axisX.getCoord(data[i].x,_467,plot);
-var y=plot.axisY.getCoord(data[i].y,_467,plot);
-var _46f=document.createElementNS(dojo.svg.xmlns.svg,"path");
-_46f.setAttribute("fill",data[i].series.color);
-_46f.setAttribute("stroke-width","0");
-_46f.setAttribute("d","M "+x+","+(y-r)+" "+"Q "+x+","+y+" "+(x+r)+","+y+" "+"Q "+x+","+y+" "+x+","+(y+r)+" "+"Q "+x+","+y+" "+(x-r)+","+y+" "+"Q "+x+","+y+" "+x+","+(y-r)+" "+"Z");
-if(_469){
-_469(_46f,data[i].src);
+var x=plot.axisX.getCoord(data[i].x,_480,plot);
+var y=plot.axisY.getCoord(data[i].y,_480,plot);
+var _488=document.createElementNS(dojo.svg.xmlns.svg,"path");
+_488.setAttribute("fill",data[i].series.color);
+_488.setAttribute("stroke-width","0");
+_488.setAttribute("d","M "+x+","+(y-r)+" "+"Q "+x+","+y+" "+(x+r)+","+y+" "+"Q "+x+","+y+" "+x+","+(y+r)+" "+"Q "+x+","+y+" "+(x-r)+","+y+" "+"Q "+x+","+y+" "+x+","+(y-r)+" "+"Z");
+if(_482){
+_482(_488,data[i].src);
 }
-_46b.appendChild(_46f);
+_484.appendChild(_488);
 }
-return _46b;
-},Bubble:function(data,_471,plot,_473){
-var _474=document.createElementNS(dojo.svg.xmlns.svg,"g");
-var _475=1;
+return _484;
+},Bubble:function(data,_48a,plot,_48c){
+var _48d=document.createElementNS(dojo.svg.xmlns.svg,"g");
+var _48e=1;
 for(var i=0;i<data.length;i++){
-var x=plot.axisX.getCoord(data[i].x,_471,plot);
-var y=plot.axisY.getCoord(data[i].y,_471,plot);
+var x=plot.axisX.getCoord(data[i].x,_48a,plot);
+var y=plot.axisY.getCoord(data[i].y,_48a,plot);
 if(i==0){
 var raw=data[i].size;
-var dy=plot.axisY.getCoord(data[i].y+raw,_471,plot)-y;
-_475=dy/raw;
+var dy=plot.axisY.getCoord(data[i].y+raw,_48a,plot)-y;
+_48e=dy/raw;
 }
-if(_475<1){
-_475=1;
+if(_48e<1){
+_48e=1;
 }
-var _47b=document.createElementNS(dojo.svg.xmlns.svg,"circle");
-_47b.setAttribute("fill",data[i].series.color);
-_47b.setAttribute("fill-opacity","0.8");
-_47b.setAttribute("stroke",data[i].series.color);
-_47b.setAttribute("stroke-width","1");
-_47b.setAttribute("cx",x);
-_47b.setAttribute("cy",y);
-_47b.setAttribute("r",(data[i].size/2)*_475);
-if(_473){
-_473(_47b,data[i].src);
+var _494=document.createElementNS(dojo.svg.xmlns.svg,"circle");
+_494.setAttribute("fill",data[i].series.color);
+_494.setAttribute("fill-opacity","0.8");
+_494.setAttribute("stroke",data[i].series.color);
+_494.setAttribute("stroke-width","1");
+_494.setAttribute("cx",x);
+_494.setAttribute("cy",y);
+_494.setAttribute("r",(data[i].size/2)*_48e);
+if(_48c){
+_48c(_494,data[i].src);
 }
-_474.appendChild(_47b);
+_48d.appendChild(_494);
 }
-return _474;
+return _48d;
 }});
 dojo.charting.Plotters["Default"]=dojo.charting.Plotters.Line;
 }
 dojo.provide("dojo.charting.vml.Plotters");
 if(dojo.render.vml.capable){
-dojo.mixin(dojo.charting.Plotters,{_group:function(_47c){
-var _47d=document.createElement("div");
-_47d.style.position="absolute";
-_47d.style.top="0px";
-_47d.style.left="0px";
-_47d.style.width=_47c.size.width+"px";
-_47d.style.height=_47c.size.height+"px";
-return _47d;
-},Bar:function(_47e,plot,_480,_481){
-var area=_47e.getArea();
-var _483=dojo.charting.Plotters._group(_47e);
+dojo.mixin(dojo.charting.Plotters,{_group:function(_495){
+var _496=document.createElement("div");
+_496.style.position="absolute";
+_496.style.top="0px";
+_496.style.left="0px";
+_496.style.width=_495.size.width+"px";
+_496.style.height=_495.size.height+"px";
+return _496;
+},Bar:function(_497,plot,_499,_49a){
+var area=_497.getArea();
+var _49c=dojo.charting.Plotters._group(_497);
 var n=plot.series.length;
 var data=[];
 for(var i=0;i<n;i++){
-var tmp=plot.series[i].data.evaluate(_480);
+var tmp=plot.series[i].data.evaluate(_499);
 data.push(tmp);
 }
-var _488=8;
-var _489=data[0].length;
-var _48a=((area.right-area.left)-(_488*(_489-1)))/_489;
-var _48b=Math.round(_48a/n);
-var _48c=plot.axisY.getCoord(plot.axisX.origin,_47e,plot);
-for(var i=0;i<_489;i++){
-var _48d=area.left+(_48a*i)+(_488*i);
+var _4a1=8;
+var _4a2=data[0].length;
+if(_4a2==0){
+return _49c;
+}
+var _4a3=((area.right-area.left)-(_4a1*(_4a2-1)))/_4a2;
+var _4a4=Math.round(_4a3/n);
+var _4a5=plot.axisY.getCoord(plot.axisX.origin,_497,plot);
+for(var i=0;i<_4a2;i++){
+var _4a6=area.left+(_4a3*i)+(_4a1*i);
 for(var j=0;j<n;j++){
-var _48f=data[j][i].y;
-var yA=_48c;
-var x=_48d+(_48b*j);
-var y=plot.axisY.getCoord(_48f,_47e,plot);
+var _4a8=data[j][i].y;
+var yA=_4a5;
+var x=_4a6+(_4a4*j);
+var y=plot.axisY.getCoord(_4a8,_497,plot);
 var h=Math.abs(yA-y);
-if(_48f<plot.axisX.origin){
+if(_4a8<plot.axisX.origin){
 yA=y;
-y=_48c;
+y=_4a5;
 }
 var bar=document.createElement("v:rect");
 bar.style.position="absolute";
 bar.style.top=y+1+"px";
 bar.style.left=x+"px";
-bar.style.width=_48b+"px";
+bar.style.width=_4a4+"px";
 bar.style.height=h+"px";
 bar.setAttribute("fillColor",data[j][i].series.color);
 bar.setAttribute("stroked","false");
@@ -13630,37 +10585,40 @@
 var fill=document.createElement("v:fill");
 fill.setAttribute("opacity","0.6");
 bar.appendChild(fill);
-if(_481){
-_481(bar,data[j][i].src);
+if(_49a){
+_49a(bar,data[j][i].src);
 }
-_483.appendChild(bar);
+_49c.appendChild(bar);
 }
 }
-return _483;
-},HorizontalBar:function(_496,plot,_498,_499){
-var area=_496.getArea();
-var _49b=dojo.charting.Plotters._group(_496);
+return _49c;
+},HorizontalBar:function(_4af,plot,_4b1,_4b2){
+var area=_4af.getArea();
+var _4b4=dojo.charting.Plotters._group(_4af);
 var n=plot.series.length;
 var data=[];
 for(var i=0;i<n;i++){
-var tmp=plot.series[i].data.evaluate(_498);
+var tmp=plot.series[i].data.evaluate(_4b1);
 data.push(tmp);
 }
-var _4a0=6;
-var _4a1=data[0].length;
-var h=((area.bottom-area.top)-(_4a0*(_4a1-1)))/_4a1;
+var _4b9=6;
+var _4ba=data[0].length;
+if(_4ba==0){
+return _4b4;
+}
+var h=((area.bottom-area.top)-(_4b9*(_4ba-1)))/_4ba;
 var barH=h/n;
-var _4a4=plot.axisX.getCoord(0,_496,plot);
-for(var i=0;i<_4a1;i++){
-var _4a5=area.top+(h*i)+(_4a0*i);
+var _4bd=plot.axisX.getCoord(0,_4af,plot);
+for(var i=0;i<_4ba;i++){
+var _4be=area.top+(h*i)+(_4b9*i);
 for(var j=0;j<n;j++){
-var _4a7=data[j][i].y;
-var y=_4a5+(barH*j);
-var xA=_4a4;
-var x=plot.axisX.getCoord(_4a7,_496,plot);
+var _4c0=data[j][i].y;
+var y=_4be+(barH*j);
+var xA=_4bd;
+var x=plot.axisX.getCoord(_4c0,_4af,plot);
 var w=Math.abs(x-xA);
-if(_4a7>0){
-x=_4a4;
+if(_4c0>0){
+x=_4bd;
 }
 var bar=document.createElement("v:rect");
 bar.style.position="absolute";
@@ -13674,45 +10632,48 @@
 var fill=document.createElement("v:fill");
 fill.setAttribute("opacity","0.6");
 bar.appendChild(fill);
-if(_499){
-_499(bar,data[j][i].src);
+if(_4b2){
+_4b2(bar,data[j][i].src);
 }
-_49b.appendChild(bar);
+_4b4.appendChild(bar);
 }
 }
-var _4a0=4;
+var _4b9=4;
 var n=plot.series.length;
-var h=((area.bottom-area.top)-(_4a0*(n-1)))/n;
-var _4a4=plot.axisX.getCoord(0,_496,plot);
+var h=((area.bottom-area.top)-(_4b9*(n-1)))/n;
+var _4bd=plot.axisX.getCoord(0,_4af,plot);
 for(var i=0;i<n;i++){
-var _4ae=plot.series[i];
-var data=_4ae.data.evaluate(_498);
-var y=area.top+(h*i)+(_4a0*i);
-var _4a7=data[data.length-1].y;
-var xA=_4a4;
-var x=plot.axisX.getCoord(_4a7,_496,plot);
+var _4c7=plot.series[i];
+var data=_4c7.data.evaluate(_4b1);
+var y=area.top+(h*i)+(_4b9*i);
+var _4c0=data[data.length-1].y;
+var xA=_4bd;
+var x=plot.axisX.getCoord(_4c0,_4af,plot);
 var w=Math.abs(xA-x);
-if(_4a7>0){
+if(_4c0>0){
 xA=x;
-x=_4a4;
+x=_4bd;
 }
 }
-return _49b;
-},Gantt:function(_4af,plot,_4b1,_4b2){
-var area=_4af.getArea();
-var _4b4=dojo.charting.Plotters._group(_4af);
+return _4b4;
+},Gantt:function(_4c8,plot,_4ca,_4cb){
+var area=_4c8.getArea();
+var _4cd=dojo.charting.Plotters._group(_4c8);
 var n=plot.series.length;
 var data=[];
 for(var i=0;i<n;i++){
-var tmp=plot.series[i].data.evaluate(_4b1);
+var tmp=plot.series[i].data.evaluate(_4ca);
 data.push(tmp);
 }
-var _4b9=2;
-var _4ba=data[0].length;
-var h=((area.bottom-area.top)-(_4b9*(_4ba-1)))/_4ba;
+var _4d2=2;
+var _4d3=data[0].length;
+if(_4d3==0){
+return _4cd;
+}
+var h=((area.bottom-area.top)-(_4d2*(_4d3-1)))/_4d3;
 var barH=h/n;
-for(var i=0;i<_4ba;i++){
-var _4bd=area.top+(h*i)+(_4b9*i);
+for(var i=0;i<_4d3;i++){
+var _4d6=area.top+(h*i)+(_4d2*i);
 for(var j=0;j<n;j++){
 var high=data[j][i].high;
 var low=data[j][i].low;
@@ -13721,9 +10682,9 @@
 high=low;
 low=t;
 }
-var x=plot.axisX.getCoord(low,_4af,plot);
-var w=plot.axisX.getCoord(high,_4af,plot)-x;
-var y=_4bd+(barH*j);
+var x=plot.axisX.getCoord(low,_4c8,plot);
+var w=plot.axisX.getCoord(high,_4c8,plot)-x;
+var y=_4d6+(barH*j);
 var bar=document.createElement("v:rect");
 bar.style.position="absolute";
 bar.style.top=y+1+"px";
@@ -13736,28 +10697,28 @@
 var fill=document.createElement("v:fill");
 fill.setAttribute("opacity","0.6");
 bar.appendChild(fill);
-if(_4b2){
-_4b2(bar,data[j][i].src);
+if(_4cb){
+_4cb(bar,data[j][i].src);
 }
-_4b4.appendChild(bar);
+_4cd.appendChild(bar);
 }
 }
-return _4b4;
-},StackedArea:function(_4c7,plot,_4c9,_4ca){
-var area=_4c7.getArea();
-var _4cc=dojo.charting.Plotters._group(_4c7);
+return _4cd;
+},StackedArea:function(_4e0,plot,_4e2,_4e3){
+var area=_4e0.getArea();
+var _4e5=dojo.charting.Plotters._group(_4e0);
 var n=plot.series.length;
 var data=[];
-var _4cf=[];
+var _4e8=[];
 for(var i=0;i<n;i++){
-var tmp=plot.series[i].data.evaluate(_4c9);
+var tmp=plot.series[i].data.evaluate(_4e2);
 for(var j=0;j<tmp.length;j++){
 if(i==0){
-_4cf.push(tmp[j].y);
+_4e8.push(tmp[j].y);
 }else{
-_4cf[j]+=tmp[j].y;
+_4e8[j]+=tmp[j].y;
 }
-tmp[j].y=_4cf[j];
+tmp[j].y=_4e8[j];
 }
 data.push(tmp);
 }
@@ -13772,18 +10733,18 @@
 path.style.left="0px";
 path.style.width=area.right-area.left+"px";
 path.style.height=area.bottom-area.top+"px";
-var _4d4=document.createElement("v:stroke");
-_4d4.setAttribute("opacity","0.8");
-path.appendChild(_4d4);
+var _4ed=document.createElement("v:stroke");
+_4ed.setAttribute("opacity","0.8");
+path.appendChild(_4ed);
 var fill=document.createElement("v:fill");
 fill.setAttribute("opacity","0.4");
 path.appendChild(fill);
 var cmd=[];
 var r=3;
 for(var j=0;j<data[i].length;j++){
-var _4d8=data[i];
-var x=Math.round(plot.axisX.getCoord(_4d8[j].x,_4c7,plot));
-var y=Math.round(plot.axisY.getCoord(_4d8[j].y,_4c7,plot));
+var _4f1=data[i];
+var x=Math.round(plot.axisX.getCoord(_4f1[j].x,_4e0,plot));
+var y=Math.round(plot.axisY.getCoord(_4f1[j].y,_4e0,plot));
 if(j==0){
 cmd.push("m");
 cmd.push(x+","+y);
@@ -13793,8 +10754,8 @@
 }
 var c=document.createElement("v:oval");
 c.setAttribute("strokeweight","1px");
-c.setAttribute("strokecolor",_4d8[j].series.color);
-c.setAttribute("fillcolor",_4d8[j].series.color);
+c.setAttribute("strokecolor",_4f1[j].series.color);
+c.setAttribute("fillcolor",_4f1[j].series.color);
 var str=document.createElement("v:stroke");
 str.setAttribute("opacity","0.8");
 c.appendChild(str);
@@ -13807,47 +10768,47 @@
 s.left=(x-r)+"px";
 s.width=(r*2)+"px";
 s.height=(r*2)+"px";
-_4cc.appendChild(c);
-if(_4ca){
-_4ca(c,data[j].src);
+_4e5.appendChild(c);
+if(_4e3){
+_4e3(c,data[j].src);
 }
 }
 if(i==0){
 cmd.push("l");
-cmd.push(x+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_4c7,plot)));
+cmd.push(x+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_4e0,plot)));
 cmd.push("l");
-cmd.push(Math.round(plot.axisX.getCoord(data[0][0].x,_4c7,plot))+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_4c7,plot)));
+cmd.push(Math.round(plot.axisX.getCoord(data[0][0].x,_4e0,plot))+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_4e0,plot)));
 }else{
-var _4d8=data[i-1];
+var _4f1=data[i-1];
 cmd.push("l");
-cmd.push(x+","+Math.round(plot.axisY.getCoord(_4d8[_4d8.length-1].y,_4c7,plot)));
-for(var j=_4d8.length-2;j>=0;j--){
-var x=Math.round(plot.axisX.getCoord(_4d8[j].x,_4c7,plot));
-var y=Math.round(plot.axisY.getCoord(_4d8[j].y,_4c7,plot));
+cmd.push(x+","+Math.round(plot.axisY.getCoord(_4f1[_4f1.length-1].y,_4e0,plot)));
+for(var j=_4f1.length-2;j>=0;j--){
+var x=Math.round(plot.axisX.getCoord(_4f1[j].x,_4e0,plot));
+var y=Math.round(plot.axisY.getCoord(_4f1[j].y,_4e0,plot));
 cmd.push("l");
 cmd.push(x+","+y);
 }
 }
 path.setAttribute("path",cmd.join(" ")+" x e");
-_4cc.appendChild(path);
+_4e5.appendChild(path);
 }
-return _4cc;
-},StackedCurvedArea:function(_4de,plot,_4e0,_4e1){
-var _4e2=3;
-var area=_4de.getArea();
-var _4e4=dojo.charting.Plotters._group(_4de);
+return _4e5;
+},StackedCurvedArea:function(_4f7,plot,_4f9,_4fa){
+var _4fb=3;
+var area=_4f7.getArea();
+var _4fd=dojo.charting.Plotters._group(_4f7);
 var n=plot.series.length;
 var data=[];
-var _4e7=[];
+var _500=[];
 for(var i=0;i<n;i++){
-var tmp=plot.series[i].data.evaluate(_4e0);
+var tmp=plot.series[i].data.evaluate(_4f9);
 for(var j=0;j<tmp.length;j++){
 if(i==0){
-_4e7.push(tmp[j].y);
+_500.push(tmp[j].y);
 }else{
-_4e7[j]+=tmp[j].y;
+_500[j]+=tmp[j].y;
 }
-tmp[j].y=_4e7[j];
+tmp[j].y=_500[j];
 }
 data.push(tmp);
 }
@@ -13862,37 +10823,37 @@
 path.style.left="0px";
 path.style.width=area.right-area.left+"px";
 path.style.height=area.bottom-area.top+"px";
-var _4ec=document.createElement("v:stroke");
-_4ec.setAttribute("opacity","0.8");
-path.appendChild(_4ec);
+var _505=document.createElement("v:stroke");
+_505.setAttribute("opacity","0.8");
+path.appendChild(_505);
 var fill=document.createElement("v:fill");
 fill.setAttribute("opacity","0.4");
 path.appendChild(fill);
 var cmd=[];
 var r=3;
 for(var j=0;j<data[i].length;j++){
-var _4f0=data[i];
-var x=Math.round(plot.axisX.getCoord(_4f0[j].x,_4de,plot));
-var y=Math.round(plot.axisY.getCoord(_4f0[j].y,_4de,plot));
+var _509=data[i];
+var x=Math.round(plot.axisX.getCoord(_509[j].x,_4f7,plot));
+var y=Math.round(plot.axisY.getCoord(_509[j].y,_4f7,plot));
 if(j==0){
 cmd.push("m");
 cmd.push(x+","+y);
 }else{
-var _4f3=Math.round(plot.axisX.getCoord(_4f0[j-1].x,_4de,plot));
-var _4f4=Math.round(plot.axisY.getCoord(_4f0[j-1].y,_4de,plot));
-var dx=x-_4f3;
-var dy=y-_4f4;
+var _50c=Math.round(plot.axisX.getCoord(_509[j-1].x,_4f7,plot));
+var _50d=Math.round(plot.axisY.getCoord(_509[j-1].y,_4f7,plot));
+var dx=x-_50c;
+var dy=y-_50d;
 cmd.push("c");
-var cx=Math.round((x-(_4e2-1)*(dx/_4e2)));
-cmd.push(cx+","+_4f4);
-cx=Math.round((x-(dx/_4e2)));
+var cx=Math.round((x-(_4fb-1)*(dx/_4fb)));
+cmd.push(cx+","+_50d);
+cx=Math.round((x-(dx/_4fb)));
 cmd.push(cx+","+y);
 cmd.push(x+","+y);
 }
 var c=document.createElement("v:oval");
 c.setAttribute("strokeweight","1px");
-c.setAttribute("strokecolor",_4f0[j].series.color);
-c.setAttribute("fillcolor",_4f0[j].series.color);
+c.setAttribute("strokecolor",_509[j].series.color);
+c.setAttribute("fillcolor",_509[j].series.color);
 var str=document.createElement("v:stroke");
 str.setAttribute("opacity","0.8");
 c.appendChild(str);
@@ -13905,54 +10866,54 @@
 s.left=(x-r)+"px";
 s.width=(r*2)+"px";
 s.height=(r*2)+"px";
-_4e4.appendChild(c);
-if(_4e1){
-_4e1(c,data[j].src);
+_4fd.appendChild(c);
+if(_4fa){
+_4fa(c,data[j].src);
 }
 }
 if(i==0){
 cmd.push("l");
-cmd.push(x+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_4de,plot)));
+cmd.push(x+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_4f7,plot)));
 cmd.push("l");
-cmd.push(Math.round(plot.axisX.getCoord(data[0][0].x,_4de,plot))+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_4de,plot)));
+cmd.push(Math.round(plot.axisX.getCoord(data[0][0].x,_4f7,plot))+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_4f7,plot)));
 }else{
-var _4f0=data[i-1];
+var _509=data[i-1];
 cmd.push("l");
-cmd.push(x+","+Math.round(plot.axisY.getCoord(_4f0[_4f0.length-1].y,_4de,plot)));
-for(var j=_4f0.length-2;j>=0;j--){
-var x=Math.round(plot.axisX.getCoord(_4f0[j].x,_4de,plot));
-var y=Math.round(plot.axisY.getCoord(_4f0[j].y,_4de,plot));
-var _4f3=Math.round(plot.axisX.getCoord(_4f0[j+1].x,_4de,plot));
-var _4f4=Math.round(plot.axisY.getCoord(_4f0[j+1].y,_4de,plot));
-var dx=x-_4f3;
-var dy=y-_4f4;
+cmd.push(x+","+Math.round(plot.axisY.getCoord(_509[_509.length-1].y,_4f7,plot)));
+for(var j=_509.length-2;j>=0;j--){
+var x=Math.round(plot.axisX.getCoord(_509[j].x,_4f7,plot));
+var y=Math.round(plot.axisY.getCoord(_509[j].y,_4f7,plot));
+var _50c=Math.round(plot.axisX.getCoord(_509[j+1].x,_4f7,plot));
+var _50d=Math.round(plot.axisY.getCoord(_509[j+1].y,_4f7,plot));
+var dx=x-_50c;
+var dy=y-_50d;
 cmd.push("c");
-var cx=Math.round((x-(_4e2-1)*(dx/_4e2)));
-cmd.push(cx+","+_4f4);
-cx=Math.round((x-(dx/_4e2)));
+var cx=Math.round((x-(_4fb-1)*(dx/_4fb)));
+cmd.push(cx+","+_50d);
+cx=Math.round((x-(dx/_4fb)));
 cmd.push(cx+","+y);
 cmd.push(x+","+y);
 }
 }
 path.setAttribute("path",cmd.join(" ")+" x e");
-_4e4.appendChild(path);
+_4fd.appendChild(path);
 }
-return _4e4;
-},DataBar:function(data,_4fc,plot,_4fe){
-var area=_4fc.getArea();
-var _500=dojo.charting.Plotters._group(_4fc);
+return _4fd;
+},DataBar:function(data,_515,plot,_517){
+var area=_515.getArea();
+var _519=dojo.charting.Plotters._group(_515);
 var n=data.length;
 var w=(area.right-area.left)/(plot.axisX.range.upper-plot.axisX.range.lower);
-var _503=plot.axisY.getCoord(plot.axisX.origin,_4fc,plot);
+var _51c=plot.axisY.getCoord(plot.axisX.origin,_515,plot);
 for(var i=0;i<n;i++){
-var _505=data[i].y;
-var yA=_503;
-var x=plot.axisX.getCoord(data[i].x,_4fc,plot)-(w/2)+1;
-var y=plot.axisY.getCoord(_505,_4fc,plot);
+var _51e=data[i].y;
+var yA=_51c;
+var x=plot.axisX.getCoord(data[i].x,_515,plot)-(w/2)+1;
+var y=plot.axisY.getCoord(_51e,_515,plot);
 var h=Math.abs(yA-y);
-if(_505<plot.axisX.origin){
+if(_51e<plot.axisX.origin){
 yA=y;
-y=_503;
+y=_51c;
 }
 var bar=document.createElement("v:rect");
 bar.style.position="absolute";
@@ -13966,15 +10927,18 @@
 var fill=document.createElement("v:fill");
 fill.setAttribute("opacity","0.6");
 bar.appendChild(fill);
-if(_4fe){
-_4fe(bar,data[i].src);
+if(_517){
+_517(bar,data[i].src);
 }
-_500.appendChild(bar);
+_519.appendChild(bar);
 }
-return _500;
-},Line:function(data,_50d,plot,_50f){
-var area=_50d.getArea();
-var _511=dojo.charting.Plotters._group(_50d);
+return _519;
+},Line:function(data,_526,plot,_528){
+var area=_526.getArea();
+var _52a=dojo.charting.Plotters._group(_526);
+if(data.length==0){
+return _52a;
+}
 var path=document.createElement("v:shape");
 path.setAttribute("strokeweight","2px");
 path.setAttribute("strokecolor",data[0].series.color);
@@ -13986,14 +10950,14 @@
 path.style.left="0px";
 path.style.width=area.right-area.left+"px";
 path.style.height=area.bottom-area.top+"px";
-var _513=document.createElement("v:stroke");
-_513.setAttribute("opacity","0.8");
-path.appendChild(_513);
+var _52c=document.createElement("v:stroke");
+_52c.setAttribute("opacity","0.8");
+path.appendChild(_52c);
 var cmd=[];
 var r=3;
 for(var i=0;i<data.length;i++){
-var x=Math.round(plot.axisX.getCoord(data[i].x,_50d,plot));
-var y=Math.round(plot.axisY.getCoord(data[i].y,_50d,plot));
+var x=Math.round(plot.axisX.getCoord(data[i].x,_526,plot));
+var y=Math.round(plot.axisY.getCoord(data[i].y,_526,plot));
 if(i==0){
 cmd.push("m");
 cmd.push(x+","+y);
@@ -14017,18 +10981,21 @@
 s.left=(x-r)+"px";
 s.width=(r*2)+"px";
 s.height=(r*2)+"px";
-_511.appendChild(c);
-if(_50f){
-_50f(c,data[i].src);
+_52a.appendChild(c);
+if(_528){
+_528(c,data[i].src);
 }
 }
 path.setAttribute("path",cmd.join(" ")+" e");
-_511.appendChild(path);
-return _511;
-},CurvedLine:function(data,_51d,plot,_51f){
-var _520=3;
-var area=_51d.getArea();
-var _522=dojo.charting.Plotters._group(_51d);
+_52a.appendChild(path);
+return _52a;
+},CurvedLine:function(data,_536,plot,_538){
+var _539=3;
+var area=_536.getArea();
+var _53b=dojo.charting.Plotters._group(_536);
+if(data.length==0){
+return _53b;
+}
 var path=document.createElement("v:shape");
 path.setAttribute("strokeweight","2px");
 path.setAttribute("strokecolor",data[0].series.color);
@@ -14040,26 +11007,26 @@
 path.style.left="0px";
 path.style.width=area.right-area.left+"px";
 path.style.height=area.bottom-area.top+"px";
-var _524=document.createElement("v:stroke");
-_524.setAttribute("opacity","0.8");
-path.appendChild(_524);
+var _53d=document.createElement("v:stroke");
+_53d.setAttribute("opacity","0.8");
+path.appendChild(_53d);
 var cmd=[];
 var r=3;
 for(var i=0;i<data.length;i++){
-var x=Math.round(plot.axisX.getCoord(data[i].x,_51d,plot));
-var y=Math.round(plot.axisY.getCoord(data[i].y,_51d,plot));
+var x=Math.round(plot.axisX.getCoord(data[i].x,_536,plot));
+var y=Math.round(plot.axisY.getCoord(data[i].y,_536,plot));
 if(i==0){
 cmd.push("m");
 cmd.push(x+","+y);
 }else{
-var _52a=Math.round(plot.axisX.getCoord(data[i-1].x,_51d,plot));
-var _52b=Math.round(plot.axisY.getCoord(data[i-1].y,_51d,plot));
-var dx=x-_52a;
-var dy=y-_52b;
+var _543=Math.round(plot.axisX.getCoord(data[i-1].x,_536,plot));
+var _544=Math.round(plot.axisY.getCoord(data[i-1].y,_536,plot));
+var dx=x-_543;
+var dy=y-_544;
 cmd.push("c");
-var cx=Math.round((x-(_520-1)*(dx/_520)));
-cmd.push(cx+","+_52b);
-cx=Math.round((x-(dx/_520)));
+var cx=Math.round((x-(_539-1)*(dx/_539)));
+cmd.push(cx+","+_544);
+cx=Math.round((x-(dx/_539)));
 cmd.push(cx+","+y);
 cmd.push(x+","+y);
 }
@@ -14079,17 +11046,20 @@
 s.left=(x-r)+"px";
 s.width=(r*2)+"px";
 s.height=(r*2)+"px";
-_522.appendChild(c);
-if(_51f){
-_51f(c,data[i].src);
+_53b.appendChild(c);
+if(_538){
+_538(c,data[i].src);
 }
 }
 path.setAttribute("path",cmd.join(" ")+" e");
-_522.appendChild(path);
-return _522;
-},Area:function(data,_533,plot,_535){
-var area=_533.getArea();
-var _537=dojo.charting.Plotters._group(_533);
+_53b.appendChild(path);
+return _53b;
+},Area:function(data,_54c,plot,_54e){
+var area=_54c.getArea();
+var _550=dojo.charting.Plotters._group(_54c);
+if(data.length==0){
+return _550;
+}
 var path=document.createElement("v:shape");
 path.setAttribute("strokeweight","1px");
 path.setAttribute("strokecolor",data[0].series.color);
@@ -14100,17 +11070,17 @@
 path.style.left="0px";
 path.style.width=area.right-area.left+"px";
 path.style.height=area.bottom-area.top+"px";
-var _539=document.createElement("v:stroke");
-_539.setAttribute("opacity","0.8");
-path.appendChild(_539);
+var _552=document.createElement("v:stroke");
+_552.setAttribute("opacity","0.8");
+path.appendChild(_552);
 var fill=document.createElement("v:fill");
 fill.setAttribute("opacity","0.4");
 path.appendChild(fill);
 var cmd=[];
 var r=3;
 for(var i=0;i<data.length;i++){
-var x=Math.round(plot.axisX.getCoord(data[i].x,_533,plot));
-var y=Math.round(plot.axisY.getCoord(data[i].y,_533,plot));
+var x=Math.round(plot.axisX.getCoord(data[i].x,_54c,plot));
+var y=Math.round(plot.axisY.getCoord(data[i].y,_54c,plot));
 if(i==0){
 cmd.push("m");
 cmd.push(x+","+y);
@@ -14134,22 +11104,25 @@
 s.left=(x-r)+"px";
 s.width=(r*2)+"px";
 s.height=(r*2)+"px";
-_537.appendChild(c);
-if(_535){
-_535(c,data[i].src);
+_550.appendChild(c);
+if(_54e){
+_54e(c,data[i].src);
 }
 }
 cmd.push("l");
-cmd.push(x+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_533,plot)));
+cmd.push(x+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_54c,plot)));
 cmd.push("l");
-cmd.push(Math.round(plot.axisX.getCoord(data[0].x,_533,plot))+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_533,plot)));
+cmd.push(Math.round(plot.axisX.getCoord(data[0].x,_54c,plot))+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_54c,plot)));
 path.setAttribute("path",cmd.join(" ")+" x e");
-_537.appendChild(path);
-return _537;
-},CurvedArea:function(data,_544,plot,_546){
-var _547=3;
-var area=_544.getArea();
-var _549=dojo.charting.Plotters._group(_544);
+_550.appendChild(path);
+return _550;
+},CurvedArea:function(data,_55d,plot,_55f){
+var _560=3;
+var area=_55d.getArea();
+var _562=dojo.charting.Plotters._group(_55d);
+if(data.length==0){
+return _562;
+}
 var path=document.createElement("v:shape");
 path.setAttribute("strokeweight","1px");
 path.setAttribute("strokecolor",data[0].series.color);
@@ -14160,29 +11133,29 @@
 path.style.left="0px";
 path.style.width=area.right-area.left+"px";
 path.style.height=area.bottom-area.top+"px";
-var _54b=document.createElement("v:stroke");
-_54b.setAttribute("opacity","0.8");
-path.appendChild(_54b);
+var _564=document.createElement("v:stroke");
+_564.setAttribute("opacity","0.8");
+path.appendChild(_564);
 var fill=document.createElement("v:fill");
 fill.setAttribute("opacity","0.4");
 path.appendChild(fill);
 var cmd=[];
 var r=3;
 for(var i=0;i<data.length;i++){
-var x=Math.round(plot.axisX.getCoord(data[i].x,_544,plot));
-var y=Math.round(plot.axisY.getCoord(data[i].y,_544,plot));
+var x=Math.round(plot.axisX.getCoord(data[i].x,_55d,plot));
+var y=Math.round(plot.axisY.getCoord(data[i].y,_55d,plot));
 if(i==0){
 cmd.push("m");
 cmd.push(x+","+y);
 }else{
-var _552=Math.round(plot.axisX.getCoord(data[i-1].x,_544,plot));
-var _553=Math.round(plot.axisY.getCoord(data[i-1].y,_544,plot));
-var dx=x-_552;
-var dy=y-_553;
+var _56b=Math.round(plot.axisX.getCoord(data[i-1].x,_55d,plot));
+var _56c=Math.round(plot.axisY.getCoord(data[i-1].y,_55d,plot));
+var dx=x-_56b;
+var dy=y-_56c;
 cmd.push("c");
-var cx=Math.round((x-(_547-1)*(dx/_547)));
-cmd.push(cx+","+_553);
-cx=Math.round((x-(dx/_547)));
+var cx=Math.round((x-(_560-1)*(dx/_560)));
+cmd.push(cx+","+_56c);
+cx=Math.round((x-(dx/_560)));
 cmd.push(cx+","+y);
 cmd.push(x+","+y);
 }
@@ -14202,21 +11175,21 @@
 s.left=(x-r)+"px";
 s.width=(r*2)+"px";
 s.height=(r*2)+"px";
-_549.appendChild(c);
-if(_546){
-_546(c,data[i].src);
+_562.appendChild(c);
+if(_55f){
+_55f(c,data[i].src);
 }
 }
 cmd.push("l");
-cmd.push(x+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_544,plot)));
+cmd.push(x+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_55d,plot)));
 cmd.push("l");
-cmd.push(Math.round(plot.axisX.getCoord(data[0].x,_544,plot))+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_544,plot)));
+cmd.push(Math.round(plot.axisX.getCoord(data[0].x,_55d,plot))+","+Math.round(plot.axisY.getCoord(plot.axisX.origin,_55d,plot)));
 path.setAttribute("path",cmd.join(" ")+" x e");
-_549.appendChild(path);
-return _549;
-},HighLow:function(data,_55b,plot,_55d){
-var area=_55b.getArea();
-var _55f=dojo.charting.Plotters._group(_55b);
+_562.appendChild(path);
+return _562;
+},HighLow:function(data,_574,plot,_576){
+var area=_574.getArea();
+var _578=dojo.charting.Plotters._group(_574);
 var n=data.length;
 var part=((area.right-area.left)/(plot.axisX.range.upper-plot.axisX.range.lower))/4;
 var w=part*2;
@@ -14228,9 +11201,9 @@
 low=high;
 high=t;
 }
-var x=plot.axisX.getCoord(data[i].x,_55b,plot)-(w/2);
-var y=plot.axisY.getCoord(high,_55b,plot);
-var h=plot.axisY.getCoord(low,_55b,plot)-y;
+var x=plot.axisX.getCoord(data[i].x,_574,plot)-(w/2);
+var y=plot.axisY.getCoord(high,_574,plot);
+var h=plot.axisY.getCoord(low,_574,plot)-y;
 var bar=document.createElement("v:rect");
 bar.style.position="absolute";
 bar.style.top=y+1+"px";
@@ -14243,15 +11216,15 @@
 var fill=document.createElement("v:fill");
 fill.setAttribute("opacity","0.6");
 bar.appendChild(fill);
-if(_55d){
-_55d(bar,data[i].src);
+if(_576){
+_576(bar,data[i].src);
 }
-_55f.appendChild(bar);
+_578.appendChild(bar);
 }
-return _55f;
-},HighLowClose:function(data,_56d,plot,_56f){
-var area=_56d.getArea();
-var _571=dojo.charting.Plotters._group(_56d);
+return _578;
+},HighLowClose:function(data,_586,plot,_588){
+var area=_586.getArea();
+var _58a=dojo.charting.Plotters._group(_586);
 var n=data.length;
 var part=((area.right-area.left)/(plot.axisX.range.upper-plot.axisX.range.lower))/4;
 var w=part*2;
@@ -14264,10 +11237,10 @@
 high=t;
 }
 var c=data[i].close;
-var x=plot.axisX.getCoord(data[i].x,_56d,plot)-(w/2);
-var y=plot.axisY.getCoord(high,_56d,plot);
-var h=plot.axisY.getCoord(low,_56d,plot)-y;
-var _57d=plot.axisY.getCoord(c,_56d,plot);
+var x=plot.axisX.getCoord(data[i].x,_586,plot)-(w/2);
+var y=plot.axisY.getCoord(high,_586,plot);
+var h=plot.axisY.getCoord(low,_586,plot)-y;
+var _596=plot.axisY.getCoord(c,_586,plot);
 var g=document.createElement("div");
 var bar=document.createElement("v:rect");
 bar.style.position="absolute";
@@ -14285,8 +11258,8 @@
 var line=document.createElement("v:line");
 line.setAttribute("strokecolor",data[i].series.color);
 line.setAttribute("strokeweight","1px");
-line.setAttribute("from",x+"px,"+_57d+"px");
-line.setAttribute("to",(x+w+(part*2)-2)+"px,"+_57d+"px");
+line.setAttribute("from",x+"px,"+_596+"px");
+line.setAttribute("to",(x+w+(part*2)-2)+"px,"+_596+"px");
 var s=line.style;
 s.position="absolute";
 s.top="0px";
@@ -14296,15 +11269,15 @@
 str.setAttribute("opacity","0.6");
 line.appendChild(str);
 g.appendChild(line);
-if(_56f){
-_56f(g,data[i].src);
+if(_588){
+_588(g,data[i].src);
 }
-_571.appendChild(g);
+_58a.appendChild(g);
 }
-return _571;
-},HighLowOpenClose:function(data,_585,plot,_587){
-var area=_585.getArea();
-var _589=dojo.charting.Plotters._group(_585);
+return _58a;
+},HighLowOpenClose:function(data,_59e,plot,_5a0){
+var area=_59e.getArea();
+var _5a2=dojo.charting.Plotters._group(_59e);
 var n=data.length;
 var part=((area.right-area.left)/(plot.axisX.range.upper-plot.axisX.range.lower))/4;
 var w=part*2;
@@ -14318,11 +11291,11 @@
 }
 var o=data[i].open;
 var c=data[i].close;
-var x=plot.axisX.getCoord(data[i].x,_585,plot)-(w/2);
-var y=plot.axisY.getCoord(high,_585,plot);
-var h=plot.axisY.getCoord(low,_585,plot)-y;
-var open=plot.axisY.getCoord(o,_585,plot);
-var _597=plot.axisY.getCoord(c,_585,plot);
+var x=plot.axisX.getCoord(data[i].x,_59e,plot)-(w/2);
+var y=plot.axisY.getCoord(high,_59e,plot);
+var h=plot.axisY.getCoord(low,_59e,plot)-y;
+var open=plot.axisY.getCoord(o,_59e,plot);
+var _5b0=plot.axisY.getCoord(c,_59e,plot);
 var g=document.createElement("div");
 var bar=document.createElement("v:rect");
 bar.style.position="absolute";
@@ -14354,8 +11327,8 @@
 var line=document.createElement("v:line");
 line.setAttribute("strokecolor",data[i].series.color);
 line.setAttribute("strokeweight","1px");
-line.setAttribute("from",x+"px,"+_597+"px");
-line.setAttribute("to",(x+w+(part*2)-2)+"px,"+_597+"px");
+line.setAttribute("from",x+"px,"+_5b0+"px");
+line.setAttribute("to",(x+w+(part*2)-2)+"px,"+_5b0+"px");
 var s=line.style;
 s.position="absolute";
 s.top="0px";
@@ -14365,80 +11338,80 @@
 str.setAttribute("opacity","0.6");
 line.appendChild(str);
 g.appendChild(line);
-if(_587){
-_587(g,data[i].src);
+if(_5a0){
+_5a0(g,data[i].src);
 }
-_589.appendChild(g);
+_5a2.appendChild(g);
 }
-return _589;
-},Scatter:function(data,_59f,plot,_5a1){
+return _5a2;
+},Scatter:function(data,_5b8,plot,_5ba){
 var r=6;
 var mod=r/2;
-var area=_59f.getArea();
-var _5a5=dojo.charting.Plotters._group(_59f);
+var area=_5b8.getArea();
+var _5be=dojo.charting.Plotters._group(_5b8);
 for(var i=0;i<data.length;i++){
-var x=Math.round(plot.axisX.getCoord(data[i].x,_59f,plot));
-var y=Math.round(plot.axisY.getCoord(data[i].y,_59f,plot));
-var _5a9=document.createElement("v:rect");
-_5a9.setAttribute("strokecolor",data[i].series.color);
-_5a9.setAttribute("fillcolor",data[i].series.color);
+var x=Math.round(plot.axisX.getCoord(data[i].x,_5b8,plot));
+var y=Math.round(plot.axisY.getCoord(data[i].y,_5b8,plot));
+var _5c2=document.createElement("v:rect");
+_5c2.setAttribute("strokecolor",data[i].series.color);
+_5c2.setAttribute("fillcolor",data[i].series.color);
 var fill=document.createElement("v:fill");
 fill.setAttribute("opacity","0.6");
-_5a9.appendChild(fill);
-var s=_5a9.style;
+_5c2.appendChild(fill);
+var s=_5c2.style;
 s.position="absolute";
 s.rotation="45";
 s.top=(y-mod)+"px";
 s.left=(x-mod)+"px";
 s.width=r+"px";
 s.height=r+"px";
-_5a5.appendChild(_5a9);
-if(_5a1){
-_5a1(_5a9,data[i].src);
+_5be.appendChild(_5c2);
+if(_5ba){
+_5ba(_5c2,data[i].src);
 }
 }
-return _5a5;
-},Bubble:function(data,_5ad,plot,_5af){
-var _5b0=1;
-var area=_5ad.getArea();
-var _5b2=dojo.charting.Plotters._group(_5ad);
+return _5be;
+},Bubble:function(data,_5c6,plot,_5c8){
+var _5c9=1;
+var area=_5c6.getArea();
+var _5cb=dojo.charting.Plotters._group(_5c6);
 for(var i=0;i<data.length;i++){
-var x=Math.round(plot.axisX.getCoord(data[i].x,_5ad,plot));
-var y=Math.round(plot.axisY.getCoord(data[i].y,_5ad,plot));
+var x=Math.round(plot.axisX.getCoord(data[i].x,_5c6,plot));
+var y=Math.round(plot.axisY.getCoord(data[i].y,_5c6,plot));
 if(i==0){
 var raw=data[i].size;
-var dy=plot.axisY.getCoord(data[i].y+raw,_5ad,plot)-y;
-_5b0=dy/raw;
+var dy=plot.axisY.getCoord(data[i].y+raw,_5c6,plot)-y;
+_5c9=dy/raw;
 }
-if(_5b0<1){
-_5b0=1;
+if(_5c9<1){
+_5c9=1;
 }
-var r=(data[i].size/2)*_5b0;
-var _5b9=document.createElement("v:oval");
-_5b9.setAttribute("strokecolor",data[i].series.color);
-_5b9.setAttribute("fillcolor",data[i].series.color);
+var r=(data[i].size/2)*_5c9;
+var _5d2=document.createElement("v:oval");
+_5d2.setAttribute("strokecolor",data[i].series.color);
+_5d2.setAttribute("fillcolor",data[i].series.color);
 var fill=document.createElement("v:fill");
 fill.setAttribute("opacity","0.6");
-_5b9.appendChild(fill);
-var s=_5b9.style;
+_5d2.appendChild(fill);
+var s=_5d2.style;
 s.position="absolute";
 s.rotation="45";
 s.top=(y-r)+"px";
 s.left=(x-r)+"px";
 s.width=(r*2)+"px";
 s.height=(r*2)+"px";
-_5b2.appendChild(_5b9);
-if(_5af){
-_5af(_5b9,data[i].src);
+_5cb.appendChild(_5d2);
+if(_5c8){
+_5c8(_5d2,data[i].src);
 }
 }
-return _5b2;
+return _5cb;
 }});
 dojo.charting.Plotters["Default"]=dojo.charting.Plotters.Line;
 }
 dojo.provide("dojo.charting.Series");
-dojo.charting.Series=function(_5bc){
-var args=_5bc||{length:1};
+dojo.charting.Series=function(_5d5){
+var args=_5d5||{length:1};
 this.dataSource=args.dataSource||null;
 this.bindings={};
 this.color=args.color;
@@ -14449,41 +11422,62 @@
 }
 }
 };
-dojo.extend(dojo.charting.Series,{bind:function(src,_5c0){
+dojo.extend(dojo.charting.Series,{bind:function(src,_5d9){
 this.dataSource=src;
-this.bindings=_5c0;
-},addBinding:function(name,_5c2){
-this.bindings[name]=_5c2;
-},evaluate:function(_5c3){
+this.bindings=_5d9;
+},addBinding:function(name,_5db){
+this.bindings[name]=_5db;
+},evaluate:function(_5dc){
 var ret=[];
 var a=this.dataSource.getData();
 var l=a.length;
-var _5c7=0;
+var _5e0=0;
 var end=l;
-if(_5c3){
-if(_5c3.from){
-_5c7=Math.max(_5c3.from,0);
-if(_5c3.to){
-end=Math.min(_5c3.to,end);
+if(_5dc){
+if(_5dc.between){
+for(var i=0;i<l;i++){
+var fld=this.dataSource.getField(a[i],_5dc.between.field);
+if(fld>=_5dc.between.low&&fld<=_5dc.between.high){
+var o={src:a[i],series:this};
+for(var p in this.bindings){
+o[p]=this.dataSource.getField(a[i],this.bindings[p]);
 }
+ret.push(o);
+}
+}
 }else{
-if(_5c3.length){
-if(_5c3.length<0){
-_5c7=Math.max((end+length),0);
+if(_5dc.from||_5dc.length){
+if(_5dc.from){
+_5e0=Math.max(_5dc.from,0);
+if(_5dc.to){
+end=Math.min(_5dc.to,end);
+}
 }else{
-end=Math.min((_5c7+length),end);
+if(_5dc.length<0){
+_5e0=Math.max((end+length),0);
+}else{
+end=Math.min((_5e0+length),end);
 }
 }
+for(var i=_5e0;i<end;i++){
+var o={src:a[i],series:this};
+for(var p in this.bindings){
+o[p]=this.dataSource.getField(a[i],this.bindings[p]);
 }
+ret.push(o);
 }
-for(var i=_5c7;i<end;i++){
+}
+}
+}else{
+for(var i=_5e0;i<end;i++){
 var o={src:a[i],series:this};
 for(var p in this.bindings){
 o[p]=this.dataSource.getField(a[i],this.bindings[p]);
 }
 ret.push(o);
 }
-if(typeof (ret[0].x)!="undefined"){
+}
+if(ret.length>0&&typeof (ret[0].x)!="undefined"){
 ret.sort(function(a,b){
 if(a.x>b.x){
 return 1;
@@ -14495,75 +11489,75 @@
 });
 }
 return ret;
-},trends:{createRange:function(_5ce,len){
-var idx=_5ce.length-1;
-var _5d1=(len||_5ce.length);
-return {"index":idx,"length":_5d1,"start":Math.max(idx-_5d1,0)};
-},mean:function(_5d2,len){
-var _5d4=this.createRange(_5d2,len);
-if(_5d4.index<0){
+},trends:{createRange:function(_5e8,len){
+var idx=_5e8.length-1;
+var _5eb=(len||_5e8.length);
+return {"index":idx,"length":_5eb,"start":Math.max(idx-_5eb,0)};
+},mean:function(_5ec,len){
+var _5ee=this.createRange(_5ec,len);
+if(_5ee.index<0){
 return 0;
 }
-var _5d5=0;
-var _5d6=0;
-for(var i=_5d4.index;i>=_5d4.start;i--){
-_5d5+=_5d2[i].y;
-_5d6++;
+var _5ef=0;
+var _5f0=0;
+for(var i=_5ee.index;i>=_5ee.start;i--){
+_5ef+=_5ec[i].y;
+_5f0++;
 }
-_5d5/=Math.max(_5d6,1);
-return _5d5;
-},variance:function(_5d8,len){
-var _5da=this.createRange(_5d8,len);
-if(_5da.index<0){
+_5ef/=Math.max(_5f0,1);
+return _5ef;
+},variance:function(_5f2,len){
+var _5f4=this.createRange(_5f2,len);
+if(_5f4.index<0){
 return 0;
 }
-var _5db=0;
-var _5dc=0;
-var _5dd=0;
-for(var i=_5da.index;i>=_5da.start;i--){
-_5db+=_5d8[i].y;
-_5dc+=Math.pow(_5d8[i].y,2);
-_5dd++;
+var _5f5=0;
+var _5f6=0;
+var _5f7=0;
+for(var i=_5f4.index;i>=_5f4.start;i--){
+_5f5+=_5f2[i].y;
+_5f6+=Math.pow(_5f2[i].y,2);
+_5f7++;
 }
-return (_5dc/_5dd)-Math.pow(_5db/_5dd,2);
-},standardDeviation:function(_5df,len){
-return Math.sqrt(this.getVariance(_5df,len));
-},max:function(_5e1,len){
-var _5e3=this.createRange(_5e1,len);
-if(_5e3.index<0){
+return (_5f6/_5f7)-Math.pow(_5f5/_5f7,2);
+},standardDeviation:function(_5f9,len){
+return Math.sqrt(this.getVariance(_5f9,len));
+},max:function(_5fb,len){
+var _5fd=this.createRange(_5fb,len);
+if(_5fd.index<0){
 return 0;
 }
 var max=Number.MIN_VALUE;
-for(var i=_5e3.index;i>=_5e3.start;i--){
-max=Math.max(_5e1[i].y,max);
+for(var i=_5fd.index;i>=_5fd.start;i--){
+max=Math.max(_5fb[i].y,max);
 }
 return max;
-},min:function(_5e6,len){
-var _5e8=this.createRange(_5e6,len);
-if(_5e8.index<0){
+},min:function(_600,len){
+var _602=this.createRange(_600,len);
+if(_602.index<0){
 return 0;
 }
 var min=Number.MAX_VALUE;
-for(var i=_5e8.index;i>=_5e8.start;i--){
-min=Math.min(_5e6[i].y,min);
+for(var i=_602.index;i>=_602.start;i--){
+min=Math.min(_600[i].y,min);
 }
 return min;
-},median:function(_5eb,len){
-var _5ed=this.createRange(_5eb,len);
-if(_5ed.index<0){
+},median:function(_605,len){
+var _607=this.createRange(_605,len);
+if(_607.index<0){
 return 0;
 }
 var a=[];
-for(var i=_5ed.index;i>=_5ed.start;i--){
+for(var i=_607.index;i>=_607.start;i--){
 var b=false;
 for(var j=0;j<a.length;j++){
-if(_5eb[i].y==a[j]){
+if(_605[i].y==a[j]){
 b=true;
 break;
 }
 }
 if(!b){
-a.push(_5eb[i].y);
+a.push(_605[i].y);
 }
 }
 a.sort();
@@ -14571,24 +11565,24 @@
 return a[Math.ceil(a.length/2)];
 }
 return 0;
-},mode:function(_5f2,len){
-var _5f4=this.createRange(_5f2,len);
-if(_5f4.index<0){
+},mode:function(_60c,len){
+var _60e=this.createRange(_60c,len);
+if(_60e.index<0){
 return 0;
 }
 var o={};
 var ret=0;
-var _5f7=Number.MIN_VALUE;
-for(var i=_5f4.index;i>=_5f4.start;i--){
-if(!o[_5f2[i].y]){
-o[_5f2[i].y]=1;
+var _611=Number.MIN_VALUE;
+for(var i=_60e.index;i>=_60e.start;i--){
+if(!o[_60c[i].y]){
+o[_60c[i].y]=1;
 }else{
-o[_5f2[i].y]++;
+o[_60c[i].y]++;
 }
 }
 for(var p in o){
-if(_5f7<o[p]){
-_5f7=o[p];
+if(_611<o[p]){
+_611=o[p];
 ret=p;
 }
 }
@@ -14596,7 +11590,7 @@
 }}});
 dojo.provide("dojo.charting.Plot");
 dojo.charting.RenderPlotSeries={Singly:"single",Grouped:"grouped"};
-dojo.charting.Plot=function(_5fa,_5fb,_5fc){
+dojo.charting.Plot=function(_614,_615,_616){
 var id="dojo-charting-plot-"+dojo.charting.Plot.count++;
 this.getId=function(){
 return id;
@@ -14609,30 +11603,30 @@
 this.series=[];
 this.dataNode=null;
 this.renderType=dojo.charting.RenderPlotSeries.Singly;
-if(_5fa){
-this.setAxis(_5fa,"x");
+if(_614){
+this.setAxis(_614,"x");
 }
-if(_5fb){
-this.setAxis(_5fb,"y");
+if(_615){
+this.setAxis(_615,"y");
 }
-if(_5fc){
-for(var i=0;i<_5fc.length;i++){
-this.addSeries(_5fc[i]);
+if(_616){
+for(var i=0;i<_616.length;i++){
+this.addSeries(_616[i]);
 }
 }
 };
 dojo.charting.Plot.count=0;
-dojo.extend(dojo.charting.Plot,{addSeries:function(_600,_601){
-if(_600.plotter){
-this.series.push(_600);
+dojo.extend(dojo.charting.Plot,{addSeries:function(_61a,_61b){
+if(_61a.plotter){
+this.series.push(_61a);
 }else{
-this.series.push({data:_600,plotter:_601||dojo.charting.Plotters["Default"]});
+this.series.push({data:_61a,plotter:_61b||dojo.charting.Plotters["Default"]});
 }
-},setAxis:function(axis,_603){
-if(_603.toLowerCase()=="x"){
+},setAxis:function(axis,_61d){
+if(_61d.toLowerCase()=="x"){
 this.axisX=axis;
 }else{
-if(_603.toLowerCase()=="y"){
+if(_61d.toLowerCase()=="y"){
 this.axisY=axis;
 }
 }
@@ -14641,9 +11635,9 @@
 xmin=ymin=Number.MAX_VALUE;
 xmax=ymax=Number.MIN_VALUE;
 for(var i=0;i<this.series.length;i++){
-var _609=this.series[i].data.evaluate();
-for(var j=0;j<_609.length;j++){
-var comp=_609[j];
+var _623=this.series[i].data.evaluate();
+for(var j=0;j<_623.length;j++){
+var comp=_623[j];
 xmin=Math.min(comp.x,xmin);
 ymin=Math.min(comp.y,ymin);
 xmax=Math.max(comp.x,xmax);
@@ -14707,55 +11701,58 @@
 }
 return a;
 },setAxesRanges:function(){
-var _618={};
+var _632={};
 var axes={};
 for(var i=0;i<this.plots.length;i++){
 var plot=this.plots[i];
-var _618=plot.getRanges();
-var x=_618.x;
-var y=_618.y;
+var _632=plot.getRanges();
+var x=_632.x;
+var y=_632.y;
 var ax,ay;
 if(!axes[plot.axisX.getId()]){
 axes[plot.axisX.getId()]=plot.axisX;
-_618[plot.axisX.getId()]={upper:x.upper,lower:x.lower};
+_632[plot.axisX.getId()]={upper:x.upper,lower:x.lower};
 }
-ax=_618[plot.axisX.getId()];
+ax=_632[plot.axisX.getId()];
 ax.upper=Math.max(ax.upper,x.upper);
 ax.lower=Math.min(ax.lower,x.lower);
 if(!axes[plot.axisY.getId()]){
 axes[plot.axisY.getId()]=plot.axisY;
-_618[plot.axisY.getId()]={upper:y.upper,lower:y.lower};
+_632[plot.axisY.getId()]={upper:y.upper,lower:y.lower};
 }
-ay=_618[plot.axisY.getId()];
+ay=_632[plot.axisY.getId()];
 ay.upper=Math.max(ay.upper,y.upper);
 ay.lower=Math.min(ay.lower,y.lower);
 }
 for(var p in axes){
-axes[p].range=_618[p];
+axes[p].range=_632[p];
 }
-},render:function(_621,_622){
+},render:function(_63b,_63c){
 if(!this.nodes.main||!this.nodes.area||!this.nodes.background||!this.nodes.plots||!this.nodes.axes){
 this.initialize();
 }
+this.resize();
 for(var i=0;i<this.plots.length;i++){
 var plot=this.plots[i];
+if(plot.dataNode){
 this.nodes.plots.removeChild(plot.dataNode);
-var _625=this.initializePlot(plot);
+}
+var _63f=this.initializePlot(plot);
 switch(plot.renderType){
 case dojo.charting.RenderPlotSeries.Grouped:
 if(plot.series[0]){
-_625.appendChild(plot.series[0].plotter(this,plot,_621,_622));
+_63f.appendChild(plot.series[0].plotter(this,plot,_63b,_63c));
 }
 break;
 case dojo.charting.RenderPlotSeries.Singly:
 default:
 for(var j=0;j<plot.series.length;j++){
-var _627=plot.series[j];
-var data=_627.data.evaluate(_621);
-_625.appendChild(_627.plotter(data,this,plot,_622));
+var _641=plot.series[j];
+var data=_641.data.evaluate(_63b);
+_63f.appendChild(_641.plotter(data,this,plot,_63c));
 }
 }
-this.nodes.plots.appendChild(_625);
+this.nodes.plots.appendChild(_63f);
 }
 },destroy:function(){
 for(var i=0;i<this.plots.length;i++){
@@ -14775,40 +11772,25 @@
 this.nodes[p]=null;
 }
 }});
+dojo.requireIf(dojo.render.svg.capable,"dojo.charting.svg.PlotArea");
+dojo.requireIf(dojo.render.vml.capable,"dojo.charting.vml.PlotArea");
 dojo.provide("dojo.charting.svg.PlotArea");
 if(dojo.render.svg.capable){
-dojo.require("dojo.svg");
-dojo.extend(dojo.charting.PlotArea,{initializePlot:function(plot){
-plot.destroy();
-plot.dataNode=document.createElementNS(dojo.svg.xmlns.svg,"g");
-plot.dataNode.setAttribute("id",plot.getId());
-return plot.dataNode;
-},initialize:function(){
-this.destroy();
-this.nodes.main=document.createElement("div");
-this.nodes.area=document.createElementNS(dojo.svg.xmlns.svg,"svg");
-this.nodes.area.setAttribute("id",this.getId());
+dojo.extend(dojo.charting.PlotArea,{resize:function(){
+var area=this.getArea();
 this.nodes.area.setAttribute("width",this.size.width);
 this.nodes.area.setAttribute("height",this.size.height);
-this.nodes.main.appendChild(this.nodes.area);
-var area=this.getArea();
-var defs=document.createElementNS(dojo.svg.xmlns.svg,"defs");
-var clip=document.createElementNS(dojo.svg.xmlns.svg,"clipPath");
-clip.setAttribute("id",this.getId()+"-clip");
-var rect=document.createElementNS(dojo.svg.xmlns.svg,"rect");
+var rect=this.nodes.area.getElementsByTagName("rect")[0];
 rect.setAttribute("x",area.left);
 rect.setAttribute("y",area.top);
 rect.setAttribute("width",area.right-area.left);
 rect.setAttribute("height",area.bottom-area.top);
-clip.appendChild(rect);
-defs.appendChild(clip);
-this.nodes.area.appendChild(defs);
-this.nodes.background=document.createElementNS(dojo.svg.xmlns.svg,"rect");
-this.nodes.background.setAttribute("id",this.getId()+"-background");
 this.nodes.background.setAttribute("width",this.size.width);
 this.nodes.background.setAttribute("height",this.size.height);
-this.nodes.background.setAttribute("fill","#fff");
-this.nodes.area.appendChild(this.nodes.background);
+if(this.nodes.plots){
+this.nodes.area.removeChild(this.nodes.plots);
+this.nodes.plots=null;
+}
 this.nodes.plots=document.createElementNS(dojo.svg.xmlns.svg,"g");
 this.nodes.plots.setAttribute("id",this.getId()+"-plots");
 this.nodes.plots.setAttribute("style","clip-path:url(#"+this.getId()+"-clip);");
@@ -14816,6 +11798,10 @@
 for(var i=0;i<this.plots.length;i++){
 this.nodes.plots.appendChild(this.initializePlot(this.plots[i]));
 }
+if(this.nodes.axes){
+this.nodes.area.removeChild(this.nodes.axes);
+this.nodes.axes=null;
+}
 this.nodes.axes=document.createElementNS(dojo.svg.xmlns.svg,"g");
 this.nodes.axes.setAttribute("id",this.getId()+"-axes");
 this.nodes.area.appendChild(this.nodes.axes);
@@ -14824,12 +11810,55 @@
 var obj=axes[p];
 this.nodes.axes.appendChild(obj.axis.initialize(this,obj.plot,obj.drawAgainst,obj.plane));
 }
+},initializePlot:function(plot){
+plot.destroy();
+plot.dataNode=document.createElementNS(dojo.svg.xmlns.svg,"g");
+plot.dataNode.setAttribute("id",plot.getId());
+return plot.dataNode;
+},initialize:function(){
+this.destroy();
+this.nodes.main=document.createElement("div");
+this.nodes.area=document.createElementNS(dojo.svg.xmlns.svg,"svg");
+this.nodes.area.setAttribute("id",this.getId());
+this.nodes.main.appendChild(this.nodes.area);
+var defs=document.createElementNS(dojo.svg.xmlns.svg,"defs");
+var clip=document.createElementNS(dojo.svg.xmlns.svg,"clipPath");
+clip.setAttribute("id",this.getId()+"-clip");
+var rect=document.createElementNS(dojo.svg.xmlns.svg,"rect");
+clip.appendChild(rect);
+defs.appendChild(clip);
+this.nodes.area.appendChild(defs);
+this.nodes.background=document.createElementNS(dojo.svg.xmlns.svg,"rect");
+this.nodes.background.setAttribute("id",this.getId()+"-background");
+this.nodes.background.setAttribute("fill","#fff");
+this.nodes.area.appendChild(this.nodes.background);
+this.resize();
 return this.nodes.main;
 }});
 }
 dojo.provide("dojo.charting.vml.PlotArea");
 if(dojo.render.vml.capable){
-dojo.extend(dojo.charting.PlotArea,{initializePlot:function(plot){
+dojo.extend(dojo.charting.PlotArea,{resize:function(){
+var a=this.getArea();
+this.nodes.area.style.width=this.size.width+"px";
+this.nodes.area.style.height=this.size.height+"px";
+this.nodes.background.style.width=this.size.width+"px";
+this.nodes.background.style.height=this.size.height+"px";
+this.nodes.plots.width=this.size.width+"px";
+this.nodes.plots.height=this.size.height+"px";
+this.nodes.plots.style.clip="rect("+a.top+" "+a.right+" "+a.bottom+" "+a.left+")";
+if(this.nodes.axes){
+this.nodes.area.removeChild(this.nodes.axes);
+}
+var axes=this.nodes.axes=document.createElement("div");
+axes.id=this.getId()+"-axes";
+this.nodes.area.appendChild(axes);
+var ax=this.getAxes();
+for(var p in ax){
+var obj=ax[p];
+axes.appendChild(obj.axis.initialize(this,obj.plot,obj.drawAgainst,obj.plane));
+}
+},initializePlot:function(plot){
 plot.destroy();
 plot.dataNode=document.createElement("div");
 plot.dataNode.id=plot.getId();
@@ -14839,51 +11868,37 @@
 var main=this.nodes.main=document.createElement("div");
 var area=this.nodes.area=document.createElement("div");
 area.id=this.getId();
-area.style.width=this.size.width+"px";
-area.style.height=this.size.height+"px";
 area.style.position="absolute";
 main.appendChild(area);
 var bg=this.nodes.background=document.createElement("div");
 bg.id=this.getId()+"-background";
-bg.style.width=this.size.width+"px";
-bg.style.height=this.size.height+"px";
 bg.style.position="absolute";
 bg.style.top="0px";
 bg.style.left="0px";
 bg.style.backgroundColor="#fff";
 area.appendChild(bg);
 var a=this.getArea();
-var _63a=this.nodes.plots=document.createElement("div");
-_63a.id=this.getId()+"-plots";
-_63a.style.width=this.size.width+"px";
-_63a.style.height=this.size.height+"px";
-_63a.style.position="absolute";
-_63a.style.top="0px";
-_63a.style.left="0px";
-_63a.style.clip="rect("+a.top+" "+a.right+" "+a.bottom+" "+a.left+")";
-area.appendChild(_63a);
+var _65a=this.nodes.plots=document.createElement("div");
+_65a.id=this.getId()+"-plots";
+_65a.style.position="absolute";
+_65a.style.top="0px";
+_65a.style.left="0px";
+area.appendChild(_65a);
 for(var i=0;i<this.plots.length;i++){
-_63a.appendChild(this.initializePlot(this.plots[i]));
+_65a.appendChild(this.initializePlot(this.plots[i]));
 }
-var axes=this.nodes.axes=document.createElement("div");
-axes.id=this.getId()+"-axes";
-area.appendChild(axes);
-var ax=this.getAxes();
-for(var p in ax){
-var obj=ax[p];
-axes.appendChild(obj.axis.initialize(this,obj.plot,obj.drawAgainst,obj.plane));
-}
+this.resize();
 return main;
 }});
 }
 dojo.provide("dojo.charting.Chart");
-dojo.charting.Chart=function(node,_641,_642){
+dojo.charting.Chart=function(node,_65d,_65e){
 this.node=node||null;
-this.title=_641||"Chart";
-this.description=_642||"";
+this.title=_65d||"Chart";
+this.description=_65e||"";
 this.plotAreas=[];
 };
-dojo.extend(dojo.charting.Chart,{addPlotArea:function(obj,_644){
+dojo.extend(dojo.charting.Chart,{addPlotArea:function(obj,_660){
 if(obj.x!=null&&obj.left==null){
 obj.left=obj.x;
 }
@@ -14891,12 +11906,12 @@
 obj.top=obj.y;
 }
 this.plotAreas.push(obj);
-if(_644){
+if(_660){
 this.render();
 }
-},onInitialize:function(_645){
-},onRender:function(_646){
-},onDestroy:function(_647){
+},onInitialize:function(_661){
+},onRender:function(_662){
+},onDestroy:function(_663){
 },initialize:function(){
 if(!this.node){
 dojo.raise("dojo.charting.Chart.initialize: there must be a root node defined for the Chart.");
@@ -14928,42 +11943,37 @@
 
 
 __CPAN_EDITION__ charting build.txt
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/lang/common.js,
-../src/lang/func.js,
-../src/string/common.js,
-../src/lang/array.js,
-../src/string/extras.js,
-../src/AdapterRegistry.js,
-../src/json.js,
-../src/collections/Store.js,
-../src/gfx/color.js,
-../src/gfx/color/hsl.js,
-../src/charting/__package__.js,
-../src/dom.js,
-../src/svg.js,
-../src/charting/Axis.js,
-../src/charting/svg/Axis.js,
-../src/charting/vml/Axis.js,
-../src/charting/Plotters.js,
-../src/charting/svg/Plotters.js,
-../src/charting/vml/Plotters.js,
-../src/charting/Series.js,
-../src/charting/Plot.js,
-../src/charting/PlotArea.js,
-../src/charting/svg/PlotArea.js,
-../src/charting/vml/PlotArea.js,
+Files baked into this build:
+dojoGuardStart.js
+../src/bootstrap1.js
+../src/loader.js
+dojoGuardEnd.js
+../src/hostenv_browser.js
+../src/lang/common.js
+../src/lang/func.js
+../src/string/common.js
+../src/lang/array.js
+../src/string/extras.js
+../src/AdapterRegistry.js
+../src/json.js
+../src/collections/Store.js
+../src/gfx/color.js
+../src/gfx/color/hsl.js
+../src/charting/__package__.js
+../src/dom.js
+../src/svg.js
+../src/charting/Axis.js
+../src/charting/svg/Axis.js
+../src/charting/vml/Axis.js
+../src/charting/Plotters.js
+../src/charting/svg/Plotters.js
+../src/charting/vml/Plotters.js
+../src/charting/Series.js
+../src/charting/Plot.js
+../src/charting/PlotArea.js
+../src/charting/svg/PlotArea.js
+../src/charting/vml/PlotArea.js
 ../src/charting/Chart.js
-
-		
 __CPAN_EDITION__ core dojo.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -15000,7 +12010,7 @@
 return dj_currentContext;
 };
 dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
+dojo.version={major:0,minor:4,patch:2,flag:"",revision:Number("$Rev: 7616 $".match(/[0-9]+/)[0]),toString:function(){
 with(dojo.version){
 return major+"."+minor+"."+patch+flag+" ("+revision+")";
 }
@@ -15256,7 +12266,7 @@
 }
 };
 dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
+if(typeof setTimeout=="object"||(djConfig["useXDomain"]&&dojo.render.html.opera)){
 setTimeout("dojo.hostenv.loaded();",0);
 }else{
 dojo.hostenv.loaded();
@@ -15404,6 +12414,11 @@
 dojo.registerModulePath=function(_66,_67){
 return dojo.hostenv.setModulePrefix(_66,_67);
 };
+if(djConfig["modulePaths"]){
+for(var param in djConfig["modulePaths"]){
+dojo.registerModulePath(param,djConfig["modulePaths"][param]);
+}
+}
 dojo.setModulePrefix=function(_68,_69){
 dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
 return dojo.registerModulePath(_68,_69);
@@ -15814,7 +12829,7 @@
 }
 }
 if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
+if(dojo.render.html.opera||(dojo.render.html.moz&&(djConfig["enableMozDomContentLoaded"]===true))){
 document.addEventListener("DOMContentLoaded",dj_load_init,null);
 }
 window.addEventListener("load",dj_load_init,null);
@@ -15962,118 +12977,76 @@
 return _ec;
 };
 }
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _ee=false;
-var _ef=false;
-var _f0=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_ee=true;
-}else{
-if(typeof this["load"]=="function"){
-_ef=true;
-}else{
-if(window.widget){
-_f0=true;
-}
-}
-}
-var _f1=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-_f1.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_ee)&&(!_f0)){
-_f1.push("browser_debug.js");
-}
-var _f2=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_f2=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<_f1.length;x++){
-var _f4=_f2+"src/"+_f1[x];
-if(_ee||_ef){
-load(_f4);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_f4+"'></scr"+"ipt>");
-}
-catch(e){
-var _f5=document.createElement("script");
-_f5.src=_f4;
-document.getElementsByTagName("head")[0].appendChild(_f5);
-}
-}
-}
-})();
+dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&!djConfig["useXDomain"],"dojo.browser_debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&djConfig["useXDomain"],"dojo.browser_debug_xd");
 dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_f6,_f7){
-if(!dojo.lang.isFunction(_f7)){
-dojo.raise("dojo.inherits: superclass argument ["+_f7+"] must be a function (subclass: ["+_f6+"']");
+dojo.lang.inherits=function(_ee,_ef){
+if(!dojo.lang.isFunction(_ef)){
+dojo.raise("dojo.inherits: superclass argument ["+_ef+"] must be a function (subclass: ["+_ee+"']");
 }
-_f6.prototype=new _f7();
-_f6.prototype.constructor=_f6;
-_f6.superclass=_f7.prototype;
-_f6["super"]=_f7.prototype;
+_ee.prototype=new _ef();
+_ee.prototype.constructor=_ee;
+_ee.superclass=_ef.prototype;
+_ee["super"]=_ef.prototype;
 };
-dojo.lang._mixin=function(obj,_f9){
-var _fa={};
-for(var x in _f9){
-if((typeof _fa[x]=="undefined")||(_fa[x]!=_f9[x])){
-obj[x]=_f9[x];
+dojo.lang._mixin=function(obj,_f1){
+var _f2={};
+for(var x in _f1){
+if((typeof _f2[x]=="undefined")||(_f2[x]!=_f1[x])){
+obj[x]=_f1[x];
 }
 }
-if(dojo.render.html.ie&&(typeof (_f9["toString"])=="function")&&(_f9["toString"]!=obj["toString"])&&(_f9["toString"]!=_fa["toString"])){
-obj.toString=_f9.toString;
+if(dojo.render.html.ie&&(typeof (_f1["toString"])=="function")&&(_f1["toString"]!=obj["toString"])&&(_f1["toString"]!=_f2["toString"])){
+obj.toString=_f1.toString;
 }
 return obj;
 };
-dojo.lang.mixin=function(obj,_fd){
+dojo.lang.mixin=function(obj,_f5){
 for(var i=1,l=arguments.length;i<l;i++){
 dojo.lang._mixin(obj,arguments[i]);
 }
 return obj;
 };
-dojo.lang.extend=function(_100,_101){
+dojo.lang.extend=function(_f8,_f9){
 for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_100.prototype,arguments[i]);
+dojo.lang._mixin(_f8.prototype,arguments[i]);
 }
-return _100;
+return _f8;
 };
 dojo.inherits=dojo.lang.inherits;
 dojo.mixin=dojo.lang.mixin;
 dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_104,_105,_106,_107){
-if(!dojo.lang.isArrayLike(_104)&&dojo.lang.isArrayLike(_105)){
+dojo.lang.find=function(_fc,_fd,_fe,_ff){
+if(!dojo.lang.isArrayLike(_fc)&&dojo.lang.isArrayLike(_fd)){
 dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_104;
-_104=_105;
-_105=temp;
+var temp=_fc;
+_fc=_fd;
+_fd=temp;
 }
-var _109=dojo.lang.isString(_104);
-if(_109){
-_104=_104.split("");
+var _101=dojo.lang.isString(_fc);
+if(_101){
+_fc=_fc.split("");
 }
-if(_107){
+if(_ff){
 var step=-1;
-var i=_104.length-1;
+var i=_fc.length-1;
 var end=-1;
 }else{
 var step=1;
 var i=0;
-var end=_104.length;
+var end=_fc.length;
 }
-if(_106){
+if(_fe){
 while(i!=end){
-if(_104[i]===_105){
+if(_fc[i]===_fd){
 return i;
 }
 i+=step;
 }
 }else{
 while(i!=end){
-if(_104[i]==_105){
+if(_fc[i]==_fd){
 return i;
 }
 i+=step;
@@ -16082,12 +13055,12 @@
 return -1;
 };
 dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_10d,_10e,_10f){
-return dojo.lang.find(_10d,_10e,_10f,true);
+dojo.lang.findLast=function(_105,_106,_107){
+return dojo.lang.find(_105,_106,_107,true);
 };
 dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_110,_111){
-return dojo.lang.find(_110,_111)>-1;
+dojo.lang.inArray=function(_108,_109){
+return dojo.lang.find(_108,_109)>-1;
 };
 dojo.lang.isObject=function(it){
 if(typeof it=="undefined"){
@@ -16161,142 +13134,138 @@
 },isEmpty:function(obj){
 if(dojo.lang.isObject(obj)){
 var tmp={};
-var _120=0;
+var _118=0;
 for(var x in obj){
 if(obj[x]&&(!tmp[x])){
-_120++;
+_118++;
 break;
 }
 }
-return _120==0;
+return _118==0;
 }else{
 if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
 return obj.length==0;
 }
 }
-},map:function(arr,obj,_124){
-var _125=dojo.lang.isString(arr);
-if(_125){
+},map:function(arr,obj,_11c){
+var _11d=dojo.lang.isString(arr);
+if(_11d){
 arr=arr.split("");
 }
-if(dojo.lang.isFunction(obj)&&(!_124)){
-_124=obj;
+if(dojo.lang.isFunction(obj)&&(!_11c)){
+_11c=obj;
 obj=dj_global;
 }else{
-if(dojo.lang.isFunction(obj)&&_124){
-var _126=obj;
-obj=_124;
-_124=_126;
+if(dojo.lang.isFunction(obj)&&_11c){
+var _11e=obj;
+obj=_11c;
+_11c=_11e;
 }
 }
 if(Array.map){
-var _127=Array.map(arr,_124,obj);
+var _11f=Array.map(arr,_11c,obj);
 }else{
-var _127=[];
+var _11f=[];
 for(var i=0;i<arr.length;++i){
-_127.push(_124.call(obj,arr[i]));
+_11f.push(_11c.call(obj,arr[i]));
 }
 }
-if(_125){
-return _127.join("");
+if(_11d){
+return _11f.join("");
 }else{
-return _127;
+return _11f;
 }
-},reduce:function(arr,_12a,obj,_12c){
-var _12d=_12a;
-if(arguments.length==1){
-dojo.debug("dojo.lang.reduce called with too few arguments!");
-return false;
-}else{
+},reduce:function(arr,_122,obj,_124){
+var _125=_122;
 if(arguments.length==2){
-_12c=_12a;
-_12d=arr.shift();
+_124=_122;
+_125=arr[0];
+arr=arr.slice(1);
 }else{
-if(arguments.lenght==3){
+if(arguments.length==3){
 if(dojo.lang.isFunction(obj)){
-_12c=obj;
+_124=obj;
 obj=null;
 }
 }else{
 if(dojo.lang.isFunction(obj)){
-var tmp=_12c;
-_12c=obj;
+var tmp=_124;
+_124=obj;
 obj=tmp;
 }
 }
 }
-}
-var ob=obj?obj:dj_global;
+var ob=obj||dj_global;
 dojo.lang.map(arr,function(val){
-_12d=_12c.call(ob,_12d,val);
+_125=_124.call(ob,_125,val);
 });
-return _12d;
-},forEach:function(_131,_132,_133){
-if(dojo.lang.isString(_131)){
-_131=_131.split("");
+return _125;
+},forEach:function(_129,_12a,_12b){
+if(dojo.lang.isString(_129)){
+_129=_129.split("");
 }
 if(Array.forEach){
-Array.forEach(_131,_132,_133);
+Array.forEach(_129,_12a,_12b);
 }else{
-if(!_133){
-_133=dj_global;
+if(!_12b){
+_12b=dj_global;
 }
-for(var i=0,l=_131.length;i<l;i++){
-_132.call(_133,_131[i],i,_131);
+for(var i=0,l=_129.length;i<l;i++){
+_12a.call(_12b,_129[i],i,_129);
 }
 }
-},_everyOrSome:function(_136,arr,_138,_139){
+},_everyOrSome:function(_12e,arr,_130,_131){
 if(dojo.lang.isString(arr)){
 arr=arr.split("");
 }
 if(Array.every){
-return Array[_136?"every":"some"](arr,_138,_139);
+return Array[_12e?"every":"some"](arr,_130,_131);
 }else{
-if(!_139){
-_139=dj_global;
+if(!_131){
+_131=dj_global;
 }
 for(var i=0,l=arr.length;i<l;i++){
-var _13c=_138.call(_139,arr[i],i,arr);
-if(_136&&!_13c){
+var _134=_130.call(_131,arr[i],i,arr);
+if(_12e&&!_134){
 return false;
 }else{
-if((!_136)&&(_13c)){
+if((!_12e)&&(_134)){
 return true;
 }
 }
 }
-return Boolean(_136);
+return Boolean(_12e);
 }
-},every:function(arr,_13e,_13f){
-return this._everyOrSome(true,arr,_13e,_13f);
-},some:function(arr,_141,_142){
-return this._everyOrSome(false,arr,_141,_142);
-},filter:function(arr,_144,_145){
-var _146=dojo.lang.isString(arr);
-if(_146){
+},every:function(arr,_136,_137){
+return this._everyOrSome(true,arr,_136,_137);
+},some:function(arr,_139,_13a){
+return this._everyOrSome(false,arr,_139,_13a);
+},filter:function(arr,_13c,_13d){
+var _13e=dojo.lang.isString(arr);
+if(_13e){
 arr=arr.split("");
 }
-var _147;
+var _13f;
 if(Array.filter){
-_147=Array.filter(arr,_144,_145);
+_13f=Array.filter(arr,_13c,_13d);
 }else{
-if(!_145){
+if(!_13d){
 if(arguments.length>=3){
 dojo.raise("thisObject doesn't exist!");
 }
-_145=dj_global;
+_13d=dj_global;
 }
-_147=[];
+_13f=[];
 for(var i=0;i<arr.length;i++){
-if(_144.call(_145,arr[i],i,arr)){
-_147.push(arr[i]);
+if(_13c.call(_13d,arr[i],i,arr)){
+_13f.push(arr[i]);
 }
 }
 }
-if(_146){
-return _147.join("");
+if(_13e){
+return _13f.join("");
 }else{
-return _147;
+return _13f;
 }
 },unnest:function(){
 var out=[];
@@ -16309,35 +13278,35 @@
 }
 }
 return out;
-},toArray:function(_14c,_14d){
-var _14e=[];
-for(var i=_14d||0;i<_14c.length;i++){
-_14e.push(_14c[i]);
+},toArray:function(_144,_145){
+var _146=[];
+for(var i=_145||0;i<_144.length;i++){
+_146.push(_144[i]);
 }
-return _14e;
+return _146;
 }});
 dojo.provide("dojo.lang.extras");
-dojo.lang.setTimeout=function(func,_151){
-var _152=window,_153=2;
+dojo.lang.setTimeout=function(func,_149){
+var _14a=window,_14b=2;
 if(!dojo.lang.isFunction(func)){
-_152=func;
-func=_151;
-_151=arguments[2];
-_153++;
+_14a=func;
+func=_149;
+_149=arguments[2];
+_14b++;
 }
 if(dojo.lang.isString(func)){
-func=_152[func];
+func=_14a[func];
 }
 var args=[];
-for(var i=_153;i<arguments.length;i++){
+for(var i=_14b;i<arguments.length;i++){
 args.push(arguments[i]);
 }
 return dojo.global().setTimeout(function(){
-func.apply(_152,args);
-},_151);
+func.apply(_14a,args);
+},_149);
 };
-dojo.lang.clearTimeout=function(_156){
-dojo.global().clearTimeout(_156);
+dojo.lang.clearTimeout=function(_14e){
+dojo.global().clearTimeout(_14e);
 };
 dojo.lang.getNameInObj=function(ns,item){
 if(!ns){
@@ -16382,65 +13351,65 @@
 }
 return undefined;
 };
-dojo.lang.getObjPathValue=function(_15f,_160,_161){
-with(dojo.parseObjPath(_15f,_160,_161)){
-return dojo.evalProp(prop,obj,_161);
+dojo.lang.getObjPathValue=function(_157,_158,_159){
+with(dojo.parseObjPath(_157,_158,_159)){
+return dojo.evalProp(prop,obj,_159);
 }
 };
-dojo.lang.setObjPathValue=function(_162,_163,_164,_165){
+dojo.lang.setObjPathValue=function(_15a,_15b,_15c,_15d){
 dojo.deprecated("dojo.lang.setObjPathValue","use dojo.parseObjPath and the '=' operator","0.6");
 if(arguments.length<4){
-_165=true;
+_15d=true;
 }
-with(dojo.parseObjPath(_162,_164,_165)){
-if(obj&&(_165||(prop in obj))){
-obj[prop]=_163;
+with(dojo.parseObjPath(_15a,_15c,_15d)){
+if(obj&&(_15d||(prop in obj))){
+obj[prop]=_15b;
 }
 }
 };
 dojo.provide("dojo.lang.declare");
-dojo.lang.declare=function(_166,_167,init,_169){
-if((dojo.lang.isFunction(_169))||((!_169)&&(!dojo.lang.isFunction(init)))){
-var temp=_169;
-_169=init;
+dojo.lang.declare=function(_15e,_15f,init,_161){
+if((dojo.lang.isFunction(_161))||((!_161)&&(!dojo.lang.isFunction(init)))){
+var temp=_161;
+_161=init;
 init=temp;
 }
-var _16b=[];
-if(dojo.lang.isArray(_167)){
-_16b=_167;
-_167=_16b.shift();
+var _163=[];
+if(dojo.lang.isArray(_15f)){
+_163=_15f;
+_15f=_163.shift();
 }
 if(!init){
-init=dojo.evalObjPath(_166,false);
+init=dojo.evalObjPath(_15e,false);
 if((init)&&(!dojo.lang.isFunction(init))){
 init=null;
 }
 }
 var ctor=dojo.lang.declare._makeConstructor();
-var scp=(_167?_167.prototype:null);
+var scp=(_15f?_15f.prototype:null);
 if(scp){
 scp.prototyping=true;
-ctor.prototype=new _167();
+ctor.prototype=new _15f();
 scp.prototyping=false;
 }
 ctor.superclass=scp;
-ctor.mixins=_16b;
-for(var i=0,l=_16b.length;i<l;i++){
-dojo.lang.extend(ctor,_16b[i].prototype);
+ctor.mixins=_163;
+for(var i=0,l=_163.length;i<l;i++){
+dojo.lang.extend(ctor,_163[i].prototype);
 }
 ctor.prototype.initializer=null;
-ctor.prototype.declaredClass=_166;
-if(dojo.lang.isArray(_169)){
-dojo.lang.extend.apply(dojo.lang,[ctor].concat(_169));
+ctor.prototype.declaredClass=_15e;
+if(dojo.lang.isArray(_161)){
+dojo.lang.extend.apply(dojo.lang,[ctor].concat(_161));
 }else{
-dojo.lang.extend(ctor,(_169)||{});
+dojo.lang.extend(ctor,(_161)||{});
 }
 dojo.lang.extend(ctor,dojo.lang.declare._common);
 ctor.prototype.constructor=ctor;
 ctor.prototype.initializer=(ctor.prototype.initializer)||(init)||(function(){
 });
-var _170=dojo.parseObjPath(_166,null,true);
-_170.obj[_170.prop]=ctor;
+var _168=dojo.parseObjPath(_15e,null,true);
+_168.obj[_168.prop]=ctor;
 return ctor;
 };
 dojo.lang.declare._makeConstructor=function(){
@@ -16465,19 +13434,19 @@
 };
 dojo.lang.declare._common={_getPropContext:function(){
 return (this.___proto||this);
-},_contextMethod:function(_176,_177,args){
-var _179,_17a=this.___proto;
-this.___proto=_176;
+},_contextMethod:function(_16e,_16f,args){
+var _171,_172=this.___proto;
+this.___proto=_16e;
 try{
-_179=_176[_177].apply(this,(args||[]));
+_171=_16e[_16f].apply(this,(args||[]));
 }
 catch(e){
 throw e;
 }
 finally{
-this.___proto=_17a;
+this.___proto=_172;
 }
-return _179;
+return _171;
 },_inherited:function(prop,args){
 var p=this._getPropContext();
 do{
@@ -16493,21 +13462,21 @@
 }};
 dojo.declare=dojo.lang.declare;
 dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_180,_181){
-var fcn=(dojo.lang.isString(_181)?_180[_181]:_181)||function(){
+dojo.lang.hitch=function(_178,_179){
+var fcn=(dojo.lang.isString(_179)?_178[_179]:_179)||function(){
 };
 return function(){
-return fcn.apply(_180,arguments);
+return fcn.apply(_178,arguments);
 };
 };
 dojo.lang.anonCtr=0;
 dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_183,_184,_185){
-var nso=(_184||dojo.lang.anon);
-if((_185)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
+dojo.lang.nameAnonFunc=function(_17b,_17c,_17d){
+var nso=(_17c||dojo.lang.anon);
+if((_17d)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
 for(var x in nso){
 try{
-if(nso[x]===_183){
+if(nso[x]===_17b){
 return x;
 }
 }
@@ -16519,50 +13488,50 @@
 while(typeof nso[ret]!="undefined"){
 ret="__"+dojo.lang.anonCtr++;
 }
-nso[ret]=_183;
+nso[ret]=_17b;
 return ret;
 };
-dojo.lang.forward=function(_189){
+dojo.lang.forward=function(_181){
 return function(){
-return this[_189].apply(this,arguments);
+return this[_181].apply(this,arguments);
 };
 };
-dojo.lang.curry=function(_18a,func){
-var _18c=[];
-_18a=_18a||dj_global;
+dojo.lang.curry=function(_182,func){
+var _184=[];
+_182=_182||dj_global;
 if(dojo.lang.isString(func)){
-func=_18a[func];
+func=_182[func];
 }
 for(var x=2;x<arguments.length;x++){
-_18c.push(arguments[x]);
+_184.push(arguments[x]);
 }
-var _18e=(func["__preJoinArity"]||func.length)-_18c.length;
-function gather(_18f,_190,_191){
-var _192=_191;
-var _193=_190.slice(0);
-for(var x=0;x<_18f.length;x++){
-_193.push(_18f[x]);
+var _186=(func["__preJoinArity"]||func.length)-_184.length;
+function gather(_187,_188,_189){
+var _18a=_189;
+var _18b=_188.slice(0);
+for(var x=0;x<_187.length;x++){
+_18b.push(_187[x]);
 }
-_191=_191-_18f.length;
-if(_191<=0){
-var res=func.apply(_18a,_193);
-_191=_192;
+_189=_189-_187.length;
+if(_189<=0){
+var res=func.apply(_182,_18b);
+_189=_18a;
 return res;
 }else{
 return function(){
-return gather(arguments,_193,_191);
+return gather(arguments,_18b,_189);
 };
 }
 }
-return gather([],_18c,_18e);
+return gather([],_184,_186);
 };
-dojo.lang.curryArguments=function(_196,func,args,_199){
-var _19a=[];
-var x=_199||0;
-for(x=_199;x<args.length;x++){
-_19a.push(args[x]);
+dojo.lang.curryArguments=function(_18e,func,args,_191){
+var _192=[];
+var x=_191||0;
+for(x=_191;x<args.length;x++){
+_192.push(args[x]);
 }
-return dojo.lang.curry.apply(dojo.lang,[_196,func].concat(_19a));
+return dojo.lang.curry.apply(dojo.lang,[_18e,func].concat(_192));
 };
 dojo.lang.tryThese=function(){
 for(var x=0;x<arguments.length;x++){
@@ -16579,38 +13548,38 @@
 }
 }
 };
-dojo.lang.delayThese=function(farr,cb,_1a0,_1a1){
+dojo.lang.delayThese=function(farr,cb,_198,_199){
 if(!farr.length){
-if(typeof _1a1=="function"){
-_1a1();
+if(typeof _199=="function"){
+_199();
 }
 return;
 }
-if((typeof _1a0=="undefined")&&(typeof cb=="number")){
-_1a0=cb;
+if((typeof _198=="undefined")&&(typeof cb=="number")){
+_198=cb;
 cb=function(){
 };
 }else{
 if(!cb){
 cb=function(){
 };
-if(!_1a0){
-_1a0=0;
+if(!_198){
+_198=0;
 }
 }
 }
 setTimeout(function(){
 (farr.shift())();
 cb();
-dojo.lang.delayThese(farr,cb,_1a0,_1a1);
-},_1a0);
+dojo.lang.delayThese(farr,cb,_198,_199);
+},_198);
 };
 dojo.provide("dojo.event.common");
 dojo.event=new function(){
 this._canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-function interpolateArgs(args,_1a3){
+function interpolateArgs(args,_19b){
 var dl=dojo.lang;
-var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false};
+var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false,maxCalls:-1};
 switch(args.length){
 case 0:
 return;
@@ -16635,14 +13604,14 @@
 ao.adviceType="after";
 ao.srcObj=args[0];
 ao.srcFunc=args[1];
-var _1a6=dl.nameAnonFunc(args[2],ao.adviceObj,_1a3);
-ao.adviceFunc=_1a6;
+var _19e=dl.nameAnonFunc(args[2],ao.adviceObj,_19b);
+ao.adviceFunc=_19e;
 }else{
 if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
 ao.adviceType="after";
 ao.srcObj=dj_global;
-var _1a6=dl.nameAnonFunc(args[0],ao.srcObj,_1a3);
-ao.srcFunc=_1a6;
+var _19e=dl.nameAnonFunc(args[0],ao.srcObj,_19b);
+ao.srcFunc=_19e;
 ao.adviceObj=args[1];
 ao.adviceFunc=args[2];
 }
@@ -16668,17 +13637,17 @@
 if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
 ao.adviceType=args[0];
 ao.srcObj=dj_global;
-var _1a6=dl.nameAnonFunc(args[1],dj_global,_1a3);
-ao.srcFunc=_1a6;
+var _19e=dl.nameAnonFunc(args[1],dj_global,_19b);
+ao.srcFunc=_19e;
 ao.adviceObj=args[2];
 ao.adviceFunc=args[3];
 }else{
 if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
 ao.srcObj=args[1];
 ao.srcFunc=args[2];
-var _1a6=dl.nameAnonFunc(args[3],dj_global,_1a3);
+var _19e=dl.nameAnonFunc(args[3],dj_global,_19b);
 ao.adviceObj=dj_global;
-ao.adviceFunc=_1a6;
+ao.adviceFunc=_19e;
 }else{
 if(dl.isObject(args[1])){
 ao.srcObj=args[1];
@@ -16722,11 +13691,12 @@
 ao.delay=args[8];
 ao.rate=args[9];
 ao.adviceMsg=args[10];
+ao.maxCalls=(!isNaN(parseInt(args[11])))?args[11]:-1;
 break;
 }
 if(dl.isFunction(ao.aroundFunc)){
-var _1a6=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_1a3);
-ao.aroundFunc=_1a6;
+var _19e=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_19b);
+ao.aroundFunc=_19e;
 }
 if(dl.isFunction(ao.srcFunc)){
 ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc);
@@ -16755,25 +13725,18 @@
 }else{
 var ao=interpolateArgs(arguments,true);
 }
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.connect(ao);
-}
-ao.srcFunc="onkeypress";
-}
 if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){
-var _1a8={};
+var _1a0={};
 for(var x in ao){
-_1a8[x]=ao[x];
+_1a0[x]=ao[x];
 }
 var mjps=[];
 dojo.lang.forEach(ao.srcObj,function(src){
 if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
 src=dojo.byId(src);
 }
-_1a8.srcObj=src;
-mjps.push(dojo.event.connect.call(dojo.event,_1a8));
+_1a0.srcObj=src;
+mjps.push(dojo.event.connect.call(dojo.event,_1a0));
 });
 return mjps;
 }
@@ -16785,20 +13748,20 @@
 return mjp;
 };
 this.log=function(a1,a2){
-var _1b0;
+var _1a8;
 if((arguments.length==1)&&(typeof a1=="object")){
-_1b0=a1;
+_1a8=a1;
 }else{
-_1b0={srcObj:a1,srcFunc:a2};
+_1a8={srcObj:a1,srcFunc:a2};
 }
-_1b0.adviceFunc=function(){
-var _1b1=[];
+_1a8.adviceFunc=function(){
+var _1a9=[];
 for(var x=0;x<arguments.length;x++){
-_1b1.push(arguments[x]);
+_1a9.push(arguments[x]);
 }
-dojo.debug("("+_1b0.srcObj+")."+_1b0.srcFunc,":",_1b1.join(", "));
+dojo.debug("("+_1a8.srcObj+")."+_1a8.srcFunc,":",_1a9.join(", "));
 };
-this.kwConnect(_1b0);
+this.kwConnect(_1a8);
 };
 this.connectBefore=function(){
 var args=["before"];
@@ -16819,25 +13782,30 @@
 ao.once=true;
 return this.connect(ao);
 };
-this._kwConnectImpl=function(_1b8,_1b9){
-var fn=(_1b9)?"disconnect":"connect";
-if(typeof _1b8["srcFunc"]=="function"){
-_1b8.srcObj=_1b8["srcObj"]||dj_global;
-var _1bb=dojo.lang.nameAnonFunc(_1b8.srcFunc,_1b8.srcObj,true);
-_1b8.srcFunc=_1bb;
+this.connectRunOnce=function(){
+var ao=interpolateArgs(arguments,true);
+ao.maxCalls=1;
+return this.connect(ao);
+};
+this._kwConnectImpl=function(_1b1,_1b2){
+var fn=(_1b2)?"disconnect":"connect";
+if(typeof _1b1["srcFunc"]=="function"){
+_1b1.srcObj=_1b1["srcObj"]||dj_global;
+var _1b4=dojo.lang.nameAnonFunc(_1b1.srcFunc,_1b1.srcObj,true);
+_1b1.srcFunc=_1b4;
 }
-if(typeof _1b8["adviceFunc"]=="function"){
-_1b8.adviceObj=_1b8["adviceObj"]||dj_global;
-var _1bb=dojo.lang.nameAnonFunc(_1b8.adviceFunc,_1b8.adviceObj,true);
-_1b8.adviceFunc=_1bb;
+if(typeof _1b1["adviceFunc"]=="function"){
+_1b1.adviceObj=_1b1["adviceObj"]||dj_global;
+var _1b4=dojo.lang.nameAnonFunc(_1b1.adviceFunc,_1b1.adviceObj,true);
+_1b1.adviceFunc=_1b4;
 }
-_1b8.srcObj=_1b8["srcObj"]||dj_global;
-_1b8.adviceObj=_1b8["adviceObj"]||_1b8["targetObj"]||dj_global;
-_1b8.adviceFunc=_1b8["adviceFunc"]||_1b8["targetFunc"];
-return dojo.event[fn](_1b8);
+_1b1.srcObj=_1b1["srcObj"]||dj_global;
+_1b1.adviceObj=_1b1["adviceObj"]||_1b1["targetObj"]||dj_global;
+_1b1.adviceFunc=_1b1["adviceFunc"]||_1b1["targetFunc"];
+return dojo.event[fn](_1b1);
 };
-this.kwConnect=function(_1bc){
-return this._kwConnectImpl(_1bc,false);
+this.kwConnect=function(_1b5){
+return this._kwConnectImpl(_1b5,false);
 };
 this.disconnect=function(){
 if(arguments.length==1){
@@ -16862,12 +13830,12 @@
 mjp.removeAdvice(ao.adviceObj,ao.adviceFunc,ao.adviceType,ao.once);
 return mjp;
 };
-this.kwDisconnect=function(_1bf){
-return this._kwConnectImpl(_1bf,true);
+this.kwDisconnect=function(_1b8){
+return this._kwConnectImpl(_1b8,true);
 };
 };
-dojo.event.MethodInvocation=function(_1c0,obj,args){
-this.jp_=_1c0;
+dojo.event.MethodInvocation=function(_1b9,obj,args){
+this.jp_=_1b9;
 this.object=obj;
 this.args=[];
 for(var x=0;x<args.length;x++){
@@ -16886,44 +13854,50 @@
 return mobj[meth].call(mobj,this);
 }
 };
-dojo.event.MethodJoinPoint=function(obj,_1c8){
+dojo.event.MethodJoinPoint=function(obj,_1c1){
 this.object=obj||dj_global;
-this.methodname=_1c8;
-this.methodfunc=this.object[_1c8];
+this.methodname=_1c1;
+this.methodfunc=this.object[_1c1];
 this.squelch=false;
 };
-dojo.event.MethodJoinPoint.getForMethod=function(obj,_1ca){
+dojo.event.MethodJoinPoint.getForMethod=function(obj,_1c3){
 if(!obj){
 obj=dj_global;
 }
-if(!obj[_1ca]){
-obj[_1ca]=function(){
+var ofn=obj[_1c3];
+if(!ofn){
+ofn=obj[_1c3]=function(){
 };
-if(!obj[_1ca]){
-dojo.raise("Cannot set do-nothing method on that object "+_1ca);
+if(!obj[_1c3]){
+dojo.raise("Cannot set do-nothing method on that object "+_1c3);
 }
 }else{
-if((!dojo.lang.isFunction(obj[_1ca]))&&(!dojo.lang.isAlien(obj[_1ca]))){
+if((typeof ofn!="function")&&(!dojo.lang.isFunction(ofn))&&(!dojo.lang.isAlien(ofn))){
 return null;
 }
 }
-var _1cb=_1ca+"$joinpoint";
-var _1cc=_1ca+"$joinpoint$method";
-var _1cd=obj[_1cb];
-if(!_1cd){
-var _1ce=false;
+var _1c5=_1c3+"$joinpoint";
+var _1c6=_1c3+"$joinpoint$method";
+var _1c7=obj[_1c5];
+if(!_1c7){
+var _1c8=false;
 if(dojo.event["browser"]){
 if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){
-_1ce=true;
-dojo.event.browser.addClobberNodeAttrs(obj,[_1cb,_1cc,_1ca]);
+_1c8=true;
+dojo.event.browser.addClobberNodeAttrs(obj,[_1c5,_1c6,_1c3]);
 }
 }
-var _1cf=obj[_1ca].length;
-obj[_1cc]=obj[_1ca];
-_1cd=obj[_1cb]=new dojo.event.MethodJoinPoint(obj,_1cc);
-obj[_1ca]=function(){
+var _1c9=ofn.length;
+obj[_1c6]=ofn;
+_1c7=obj[_1c5]=new dojo.event.MethodJoinPoint(obj,_1c6);
+if(!_1c8){
+obj[_1c3]=function(){
+return _1c7.run.apply(_1c7,arguments);
+};
+}else{
+obj[_1c3]=function(){
 var args=[];
-if((_1ce)&&(!arguments.length)){
+if(!arguments.length){
 var evt=null;
 try{
 if(obj.ownerDocument){
@@ -16948,20 +13922,21 @@
 }
 }else{
 for(var x=0;x<arguments.length;x++){
-if((x==0)&&(_1ce)&&(dojo.event.browser.isEvent(arguments[x]))){
+if((x==0)&&(dojo.event.browser.isEvent(arguments[x]))){
 args.push(dojo.event.browser.fixEvent(arguments[x],this));
 }else{
 args.push(arguments[x]);
 }
 }
 }
-return _1cd.run.apply(_1cd,args);
+return _1c7.run.apply(_1c7,args);
 };
-obj[_1ca].__preJoinArity=_1cf;
 }
-return _1cd;
+obj[_1c3].__preJoinArity=_1c9;
+}
+return _1c7;
 };
-dojo.lang.extend(dojo.event.MethodJoinPoint,{unintercept:function(){
+dojo.lang.extend(dojo.event.MethodJoinPoint,{squelch:false,unintercept:function(){
 this.object[this.methodname]=this.methodfunc;
 this.before=[];
 this.after=[];
@@ -16969,34 +13944,41 @@
 },disconnect:dojo.lang.forward("unintercept"),run:function(){
 var obj=this.object||dj_global;
 var args=arguments;
-var _1d5=[];
+var _1cf=[];
 for(var x=0;x<args.length;x++){
-_1d5[x]=args[x];
+_1cf[x]=args[x];
 }
-var _1d7=function(marr){
+var _1d1=function(marr){
 if(!marr){
 dojo.debug("Null argument to unrollAdvice()");
 return;
 }
-var _1d9=marr[0]||dj_global;
-var _1da=marr[1];
-if(!_1d9[_1da]){
-dojo.raise("function \""+_1da+"\" does not exist on \""+_1d9+"\"");
+var _1d3=marr[0]||dj_global;
+var _1d4=marr[1];
+if(!_1d3[_1d4]){
+dojo.raise("function \""+_1d4+"\" does not exist on \""+_1d3+"\"");
 }
-var _1db=marr[2]||dj_global;
-var _1dc=marr[3];
+var _1d5=marr[2]||dj_global;
+var _1d6=marr[3];
 var msg=marr[6];
-var _1de;
+var _1d8=marr[7];
+if(_1d8>-1){
+if(_1d8==0){
+return;
+}
+marr[7]--;
+}
+var _1d9;
 var to={args:[],jp_:this,object:obj,proceed:function(){
-return _1d9[_1da].apply(_1d9,to.args);
+return _1d3[_1d4].apply(_1d3,to.args);
 }};
-to.args=_1d5;
-var _1e0=parseInt(marr[4]);
-var _1e1=((!isNaN(_1e0))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
+to.args=_1cf;
+var _1db=parseInt(marr[4]);
+var _1dc=((!isNaN(_1db))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
 if(marr[5]){
 var rate=parseInt(marr[5]);
 var cur=new Date();
-var _1e4=false;
+var _1df=false;
 if((marr["last"])&&((cur-marr.last)<=rate)){
 if(dojo.event._canTimeout){
 if(marr["delayTimer"]){
@@ -17006,7 +13988,7 @@
 var mcpy=dojo.lang.shallowCopy(marr);
 marr.delayTimer=setTimeout(function(){
 mcpy[5]=0;
-_1d7(mcpy);
+_1d1(mcpy);
 },tod);
 }
 return;
@@ -17014,49 +13996,49 @@
 marr.last=cur;
 }
 }
-if(_1dc){
-_1db[_1dc].call(_1db,to);
+if(_1d6){
+_1d5[_1d6].call(_1d5,to);
 }else{
-if((_1e1)&&((dojo.render.html)||(dojo.render.svg))){
+if((_1dc)&&((dojo.render.html)||(dojo.render.svg))){
 dj_global["setTimeout"](function(){
 if(msg){
-_1d9[_1da].call(_1d9,to);
+_1d3[_1d4].call(_1d3,to);
 }else{
-_1d9[_1da].apply(_1d9,args);
+_1d3[_1d4].apply(_1d3,args);
 }
-},_1e0);
+},_1db);
 }else{
 if(msg){
-_1d9[_1da].call(_1d9,to);
+_1d3[_1d4].call(_1d3,to);
 }else{
-_1d9[_1da].apply(_1d9,args);
+_1d3[_1d4].apply(_1d3,args);
 }
 }
 }
 };
-var _1e7=function(){
+var _1e2=function(){
 if(this.squelch){
 try{
-return _1d7.apply(this,arguments);
+return _1d1.apply(this,arguments);
 }
 catch(e){
 dojo.debug(e);
 }
 }else{
-return _1d7.apply(this,arguments);
+return _1d1.apply(this,arguments);
 }
 };
 if((this["before"])&&(this.before.length>0)){
-dojo.lang.forEach(this.before.concat(new Array()),_1e7);
+dojo.lang.forEach(this.before.concat(new Array()),_1e2);
 }
-var _1e8;
+var _1e3;
 try{
 if((this["around"])&&(this.around.length>0)){
 var mi=new dojo.event.MethodInvocation(this,obj,args);
-_1e8=mi.proceed();
+_1e3=mi.proceed();
 }else{
 if(this.methodfunc){
-_1e8=this.object[this.methodname].apply(this.object,args);
+_1e3=this.object[this.methodname].apply(this.object,args);
 }
 }
 }
@@ -17067,9 +14049,9 @@
 }
 }
 if((this["after"])&&(this.after.length>0)){
-dojo.lang.forEach(this.after.concat(new Array()),_1e7);
+dojo.lang.forEach(this.after.concat(new Array()),_1e2);
 }
-return (this.methodfunc)?_1e8:null;
+return (this.methodfunc)?_1e3:null;
 },getArr:function(kind){
 var type="after";
 if((typeof kind=="string")&&(kind.indexOf("before")!=-1)){
@@ -17084,39 +14066,39 @@
 }
 return this[type];
 },kwAddAdvice:function(args){
-this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"]);
-},addAdvice:function(_1ed,_1ee,_1ef,_1f0,_1f1,_1f2,once,_1f4,rate,_1f6){
-var arr=this.getArr(_1f1);
+this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"],args["maxCalls"]);
+},addAdvice:function(_1e8,_1e9,_1ea,_1eb,_1ec,_1ed,once,_1ef,rate,_1f1,_1f2){
+var arr=this.getArr(_1ec);
 if(!arr){
 dojo.raise("bad this: "+this);
 }
-var ao=[_1ed,_1ee,_1ef,_1f0,_1f4,rate,_1f6];
+var ao=[_1e8,_1e9,_1ea,_1eb,_1ef,rate,_1f1,_1f2];
 if(once){
-if(this.hasAdvice(_1ed,_1ee,_1f1,arr)>=0){
+if(this.hasAdvice(_1e8,_1e9,_1ec,arr)>=0){
 return;
 }
 }
-if(_1f2=="first"){
+if(_1ed=="first"){
 arr.unshift(ao);
 }else{
 arr.push(ao);
 }
-},hasAdvice:function(_1f9,_1fa,_1fb,arr){
+},hasAdvice:function(_1f5,_1f6,_1f7,arr){
 if(!arr){
-arr=this.getArr(_1fb);
+arr=this.getArr(_1f7);
 }
 var ind=-1;
 for(var x=0;x<arr.length;x++){
-var aao=(typeof _1fa=="object")?(new String(_1fa)).toString():_1fa;
+var aao=(typeof _1f6=="object")?(new String(_1f6)).toString():_1f6;
 var a1o=(typeof arr[x][1]=="object")?(new String(arr[x][1])).toString():arr[x][1];
-if((arr[x][0]==_1f9)&&(a1o==aao)){
+if((arr[x][0]==_1f5)&&(a1o==aao)){
 ind=x;
 }
 }
 return ind;
-},removeAdvice:function(_201,_202,_203,once){
-var arr=this.getArr(_203);
-var ind=this.hasAdvice(_201,_202,_203,arr);
+},removeAdvice:function(_1fd,_1fe,_1ff,once){
+var arr=this.getArr(_1ff);
+var ind=this.hasAdvice(_1fd,_1fe,_1ff,arr);
 if(ind==-1){
 return false;
 }
@@ -17125,73 +14107,73 @@
 if(once){
 break;
 }
-ind=this.hasAdvice(_201,_202,_203,arr);
+ind=this.hasAdvice(_1fd,_1fe,_1ff,arr);
 }
 return true;
 }});
 dojo.provide("dojo.event.topic");
 dojo.event.topic=new function(){
 this.topics={};
-this.getTopic=function(_207){
-if(!this.topics[_207]){
-this.topics[_207]=new this.TopicImpl(_207);
+this.getTopic=function(_203){
+if(!this.topics[_203]){
+this.topics[_203]=new this.TopicImpl(_203);
 }
-return this.topics[_207];
+return this.topics[_203];
 };
-this.registerPublisher=function(_208,obj,_20a){
-var _208=this.getTopic(_208);
-_208.registerPublisher(obj,_20a);
+this.registerPublisher=function(_204,obj,_206){
+var _204=this.getTopic(_204);
+_204.registerPublisher(obj,_206);
 };
-this.subscribe=function(_20b,obj,_20d){
-var _20b=this.getTopic(_20b);
-_20b.subscribe(obj,_20d);
+this.subscribe=function(_207,obj,_209){
+var _207=this.getTopic(_207);
+_207.subscribe(obj,_209);
 };
-this.unsubscribe=function(_20e,obj,_210){
-var _20e=this.getTopic(_20e);
-_20e.unsubscribe(obj,_210);
+this.unsubscribe=function(_20a,obj,_20c){
+var _20a=this.getTopic(_20a);
+_20a.unsubscribe(obj,_20c);
 };
-this.destroy=function(_211){
-this.getTopic(_211).destroy();
-delete this.topics[_211];
+this.destroy=function(_20d){
+this.getTopic(_20d).destroy();
+delete this.topics[_20d];
 };
-this.publishApply=function(_212,args){
-var _212=this.getTopic(_212);
-_212.sendMessage.apply(_212,args);
+this.publishApply=function(_20e,args){
+var _20e=this.getTopic(_20e);
+_20e.sendMessage.apply(_20e,args);
 };
-this.publish=function(_214,_215){
-var _214=this.getTopic(_214);
+this.publish=function(_210,_211){
+var _210=this.getTopic(_210);
 var args=[];
 for(var x=1;x<arguments.length;x++){
 args.push(arguments[x]);
 }
-_214.sendMessage.apply(_214,args);
+_210.sendMessage.apply(_210,args);
 };
 };
-dojo.event.topic.TopicImpl=function(_218){
-this.topicName=_218;
-this.subscribe=function(_219,_21a){
-var tf=_21a||_219;
-var to=(!_21a)?dj_global:_219;
+dojo.event.topic.TopicImpl=function(_214){
+this.topicName=_214;
+this.subscribe=function(_215,_216){
+var tf=_216||_215;
+var to=(!_216)?dj_global:_215;
 return dojo.event.kwConnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
-this.unsubscribe=function(_21d,_21e){
-var tf=(!_21e)?_21d:_21e;
-var to=(!_21e)?null:_21d;
+this.unsubscribe=function(_219,_21a){
+var tf=(!_21a)?_219:_21a;
+var to=(!_21a)?null:_219;
 return dojo.event.kwDisconnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
 this._getJoinPoint=function(){
 return dojo.event.MethodJoinPoint.getForMethod(this,"sendMessage");
 };
-this.setSquelch=function(_221){
-this._getJoinPoint().squelch=_221;
+this.setSquelch=function(_21d){
+this._getJoinPoint().squelch=_21d;
 };
 this.destroy=function(){
 this._getJoinPoint().disconnect();
 };
-this.registerPublisher=function(_222,_223){
-dojo.event.connect(_222,_223,this,"sendMessage");
+this.registerPublisher=function(_21e,_21f){
+dojo.event.connect(_21e,_21f,this,"sendMessage");
 };
-this.sendMessage=function(_224){
+this.sendMessage=function(_220){
 };
 };
 dojo.provide("dojo.event.browser");
@@ -17214,12 +14196,12 @@
 catch(e){
 }
 }
-this.clobber=function(_227){
+this.clobber=function(_223){
 var na;
 var tna;
-if(_227){
-tna=_227.all||_227.getElementsByTagName("*");
-na=[_227];
+if(_223){
+tna=_223.all||_223.getElementsByTagName("*");
+na=[_223];
 for(var x=0;x<tna.length;x++){
 if(tna[x]["__doClobber__"]){
 na.push(tna[x]);
@@ -17234,7 +14216,7 @@
 na=(this.clobberNodes.length)?this.clobberNodes:document.all;
 }
 tna=null;
-var _22b={};
+var _227={};
 for(var i=na.length-1;i>=0;i=i-1){
 var el=na[i];
 try{
@@ -17285,9 +14267,9 @@
 });
 }
 dojo.event.browser=new function(){
-var _230=0;
-this.normalizedEventName=function(_231){
-switch(_231){
+var _22c=0;
+this.normalizedEventName=function(_22d){
+switch(_22d){
 case "CheckboxStateChange":
 case "DOMAttrModified":
 case "DOMMenuItemActive":
@@ -17296,10 +14278,11 @@
 case "DOMNodeInserted":
 case "DOMNodeRemoved":
 case "RadioStateChange":
-return _231;
+return _22d;
 break;
 default:
-return _231.toLowerCase();
+var lcn=_22d.toLowerCase();
+return (lcn.indexOf("on")==0)?lcn.substr(2):lcn;
 break;
 }
 };
@@ -17318,93 +14301,88 @@
 node.__clobberAttrs__=[];
 }
 };
-this.addClobberNodeAttrs=function(node,_235){
+this.addClobberNodeAttrs=function(node,_232){
 if(!dojo.render.html.ie){
 return;
 }
 this.addClobberNode(node);
-for(var x=0;x<_235.length;x++){
-node.__clobberAttrs__.push(_235[x]);
+for(var x=0;x<_232.length;x++){
+node.__clobberAttrs__.push(_232[x]);
 }
 };
-this.removeListener=function(node,_238,fp,_23a){
-if(!_23a){
-var _23a=false;
+this.removeListener=function(node,_235,fp,_237){
+if(!_237){
+var _237=false;
 }
-_238=dojo.event.browser.normalizedEventName(_238);
-if((_238=="onkey")||(_238=="key")){
+_235=dojo.event.browser.normalizedEventName(_235);
+if(_235=="key"){
 if(dojo.render.html.ie){
-this.removeListener(node,"onkeydown",fp,_23a);
+this.removeListener(node,"onkeydown",fp,_237);
 }
-_238="onkeypress";
+_235="keypress";
 }
-if(_238.substr(0,2)=="on"){
-_238=_238.substr(2);
-}
 if(node.removeEventListener){
-node.removeEventListener(_238,fp,_23a);
+node.removeEventListener(_235,fp,_237);
 }
 };
-this.addListener=function(node,_23c,fp,_23e,_23f){
+this.addListener=function(node,_239,fp,_23b,_23c){
 if(!node){
 return;
 }
-if(!_23e){
-var _23e=false;
+if(!_23b){
+var _23b=false;
 }
-_23c=dojo.event.browser.normalizedEventName(_23c);
-if((_23c=="onkey")||(_23c=="key")){
+_239=dojo.event.browser.normalizedEventName(_239);
+if(_239=="key"){
 if(dojo.render.html.ie){
-this.addListener(node,"onkeydown",fp,_23e,_23f);
+this.addListener(node,"onkeydown",fp,_23b,_23c);
 }
-_23c="onkeypress";
+_239="keypress";
 }
-if(_23c.substr(0,2)!="on"){
-_23c="on"+_23c;
-}
-if(!_23f){
-var _240=function(evt){
+if(!_23c){
+var _23d=function(evt){
 if(!evt){
 evt=window.event;
 }
 var ret=fp(dojo.event.browser.fixEvent(evt,this));
-if(_23e){
+if(_23b){
 dojo.event.browser.stopEvent(evt);
 }
 return ret;
 };
 }else{
-_240=fp;
+_23d=fp;
 }
 if(node.addEventListener){
-node.addEventListener(_23c.substr(2),_240,_23e);
-return _240;
+node.addEventListener(_239,_23d,_23b);
+return _23d;
 }else{
-if(typeof node[_23c]=="function"){
-var _243=node[_23c];
-node[_23c]=function(e){
-_243(e);
-return _240(e);
+_239="on"+_239;
+if(typeof node[_239]=="function"){
+var _240=node[_239];
+node[_239]=function(e){
+_240(e);
+return _23d(e);
 };
 }else{
-node[_23c]=_240;
+node[_239]=_23d;
 }
 if(dojo.render.html.ie){
-this.addClobberNodeAttrs(node,[_23c]);
+this.addClobberNodeAttrs(node,[_239]);
 }
-return _240;
+return _23d;
 }
 };
 this.isEvent=function(obj){
 return (typeof obj!="undefined")&&(obj)&&(typeof Event!="undefined")&&(obj.eventPhase);
 };
 this.currentEvent=null;
-this.callListener=function(_246,_247){
-if(typeof _246!="function"){
-dojo.raise("listener not a function: "+_246);
+this.callListener=function(_243,_244){
+if(typeof _243!="function"){
+dojo.raise("listener not a function: "+_243);
 }
-dojo.event.browser.currentEvent.currentTarget=_247;
-return _246.call(_247,dojo.event.browser.currentEvent);
+dojo.event.browser.currentEvent.currentTarget=_244;
+return _243.call(_244,dojo.event.browser.currentEvent);
 };
 this._stopPropagation=function(){
 dojo.event.browser.currentEvent.cancelBubble=true;
@@ -17417,7 +14395,7 @@
 for(var key in this.keys){
 this.revKeys[this.keys[key]]=key;
 }
-this.fixEvent=function(evt,_24a){
+this.fixEvent=function(evt,_247){
 if(!evt){
 if(window["event"]){
 evt=window.event;
@@ -17494,14 +14472,14 @@
 break;
 default:
 if(evt.ctrlKey||evt.altKey){
-var _24c=evt.keyCode;
-if(_24c>=65&&_24c<=90&&evt.shiftKey==false){
-_24c+=32;
+var _249=evt.keyCode;
+if(_249>=65&&_249<=90&&evt.shiftKey==false){
+_249+=32;
 }
-if(_24c>=1&&_24c<=26&&evt.ctrlKey){
-_24c+=96;
+if(_249>=1&&_249<=26&&evt.ctrlKey){
+_249+=96;
 }
-evt.key=String.fromCharCode(_24c);
+evt.key=String.fromCharCode(_249);
 }
 }
 }else{
@@ -17527,11 +14505,11 @@
 evt.key=evt.which;
 break;
 default:
-var _24c=evt.which;
+var _249=evt.which;
 if((evt.ctrlKey||evt.altKey||evt.metaKey)&&(evt.which>=65&&evt.which<=90&&evt.shiftKey==false)){
-_24c+=32;
+_249+=32;
 }
-evt.key=String.fromCharCode(_24c);
+evt.key=String.fromCharCode(_249);
 }
 }
 }
@@ -17636,7 +14614,7 @@
 evt.target=evt.srcElement;
 }
 if(!evt.currentTarget){
-evt.currentTarget=(_24a?_24a:evt.srcElement);
+evt.currentTarget=(_247?_247:evt.srcElement);
 }
 if(!evt.layerX){
 evt.layerX=evt.offsetX;
@@ -17645,12 +14623,12 @@
 evt.layerY=evt.offsetY;
 }
 var doc=(evt.srcElement&&evt.srcElement.ownerDocument)?evt.srcElement.ownerDocument:document;
-var _24e=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
+var _24b=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
 if(!evt.pageX){
-evt.pageX=evt.clientX+(_24e.scrollLeft||0);
+evt.pageX=evt.clientX+(_24b.scrollLeft||0);
 }
 if(!evt.pageY){
-evt.pageY=evt.clientY+(_24e.scrollTop||0);
+evt.pageY=evt.clientY+(_24b.scrollTop||0);
 }
 if(evt.type=="mouseover"){
 evt.relatedTarget=evt.fromElement;
@@ -17675,6 +14653,7 @@
 }
 };
 };
+dojo.kwCompoundRequire({common:["dojo.event.common","dojo.event.topic"],browser:["dojo.event.browser"],dashboard:["dojo.event.browser"]});
 dojo.provide("dojo.event.*");
 dojo.provide("dojo.event");
 dojo.deprecated("dojo.event","replaced by dojo.event.*","0.5");
@@ -17695,12 +14674,12 @@
 dojo.string.trimEnd=function(str){
 return dojo.string.trim(str,-1);
 };
-dojo.string.repeat=function(str,_256,_257){
+dojo.string.repeat=function(str,_253,_254){
 var out="";
-for(var i=0;i<_256;i++){
+for(var i=0;i<_253;i++){
 out+=str;
-if(_257&&i<_256-1){
-out+=_257;
+if(_254&&i<_253-1){
+out+=_254;
 }
 }
 return out;
@@ -17729,9 +14708,9 @@
 return dojo.string.pad(str,len,c,-1);
 };
 dojo.provide("dojo.string.extras");
-dojo.string.substituteParams=function(_265,hash){
+dojo.string.substituteParams=function(_262,hash){
 var map=(typeof hash=="object")?hash:dojo.lang.toArray(arguments,1);
-return _265.replace(/\%\{(\w+)\}/g,function(_268,key){
+return _262.replace(/\%\{(\w+)\}/g,function(_265,key){
 if(typeof (map[key])!="undefined"&&map[key]!=null){
 return map[key];
 }
@@ -17745,11 +14724,11 @@
 if(arguments.length==0){
 str=this;
 }
-var _26b=str.split(" ");
-for(var i=0;i<_26b.length;i++){
-_26b[i]=_26b[i].charAt(0).toUpperCase()+_26b[i].substring(1);
+var _268=str.split(" ");
+for(var i=0;i<_268.length;i++){
+_268[i]=_268[i].charAt(0).toUpperCase()+_268[i].substring(1);
 }
-return _26b.join(" ");
+return _268.join(" ");
 };
 dojo.string.isBlank=function(str){
 if(!dojo.lang.isString(str)){
@@ -17762,15 +14741,15 @@
 return str;
 }
 var ret="";
-var _270=escape(str);
-var _271,re=/%u([0-9A-F]{4})/i;
-while((_271=_270.match(re))){
-var num=Number("0x"+_271[1]);
-var _274=escape("&#"+num+";");
-ret+=_270.substring(0,_271.index)+_274;
-_270=_270.substring(_271.index+_271[0].length);
+var _26d=escape(str);
+var _26e,re=/%u([0-9A-F]{4})/i;
+while((_26e=_26d.match(re))){
+var num=Number("0x"+_26e[1]);
+var _271=escape("&#"+num+";");
+ret+=_26d.substring(0,_26e.index)+_271;
+_26d=_26d.substring(_26e.index+_26e[0].length);
 }
-ret+=_270.replace(/\+/g,"%2B");
+ret+=_26d.replace(/\+/g,"%2B");
 return ret;
 };
 dojo.string.escape=function(type,str){
@@ -17795,9 +14774,9 @@
 return str;
 }
 };
-dojo.string.escapeXml=function(str,_279){
+dojo.string.escapeXml=function(str,_276){
 str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_279){
+if(!_276){
 str=str.replace(/'/gm,"&#39;");
 }
 return str;
@@ -17820,8 +14799,8 @@
 }
 return str.substring(0,len).replace(/\.+$/,"")+"...";
 };
-dojo.string.endsWith=function(str,end,_282){
-if(_282){
+dojo.string.endsWith=function(str,end,_27f){
+if(_27f){
 str=str.toLowerCase();
 end=end.toLowerCase();
 }
@@ -17838,12 +14817,12 @@
 }
 return false;
 };
-dojo.string.startsWith=function(str,_286,_287){
-if(_287){
+dojo.string.startsWith=function(str,_283,_284){
+if(_284){
 str=str.toLowerCase();
-_286=_286.toLowerCase();
+_283=_283.toLowerCase();
 }
-return str.indexOf(_286)==0;
+return str.indexOf(_283)==0;
 };
 dojo.string.startsWithAny=function(str){
 for(var i=1;i<arguments.length;i++){
@@ -17861,12 +14840,12 @@
 }
 return false;
 };
-dojo.string.normalizeNewlines=function(text,_28d){
-if(_28d=="\n"){
+dojo.string.normalizeNewlines=function(text,_28a){
+if(_28a=="\n"){
 text=text.replace(/\r\n/g,"\n");
 text=text.replace(/\r/g,"\n");
 }else{
-if(_28d=="\r"){
+if(_28a=="\r"){
 text=text.replace(/\r\n/g,"\r");
 text=text.replace(/\n/g,"\r");
 }else{
@@ -17875,78 +14854,78 @@
 }
 return text;
 };
-dojo.string.splitEscaped=function(str,_28f){
-var _290=[];
-for(var i=0,_292=0;i<str.length;i++){
+dojo.string.splitEscaped=function(str,_28c){
+var _28d=[];
+for(var i=0,_28f=0;i<str.length;i++){
 if(str.charAt(i)=="\\"){
 i++;
 continue;
 }
-if(str.charAt(i)==_28f){
-_290.push(str.substring(_292,i));
-_292=i+1;
+if(str.charAt(i)==_28c){
+_28d.push(str.substring(_28f,i));
+_28f=i+1;
 }
 }
-_290.push(str.substr(_292));
-return _290;
+_28d.push(str.substr(_28f));
+return _28d;
 };
 dojo.provide("dojo.string");
 dojo.provide("dojo.io.common");
 dojo.io.transports=[];
 dojo.io.hdlrFuncNames=["load","error","timeout"];
-dojo.io.Request=function(url,_294,_295,_296){
+dojo.io.Request=function(url,_291,_292,_293){
 if((arguments.length==1)&&(arguments[0].constructor==Object)){
 this.fromKwArgs(arguments[0]);
 }else{
 this.url=url;
-if(_294){
-this.mimetype=_294;
+if(_291){
+this.mimetype=_291;
 }
-if(_295){
-this.transport=_295;
+if(_292){
+this.transport=_292;
 }
 if(arguments.length>=4){
-this.changeUrl=_296;
+this.changeUrl=_293;
 }
 }
 };
-dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_299,_29a){
-},error:function(type,_29c,_29d,_29e){
-},timeout:function(type,_2a0,_2a1,_2a2){
-},handle:function(type,data,_2a5,_2a6){
+dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_296,_297){
+},error:function(type,_299,_29a,_29b){
+},timeout:function(type,_29d,_29e,_29f){
+},handle:function(type,data,_2a2,_2a3){
 },timeoutSeconds:0,abort:function(){
-},fromKwArgs:function(_2a7){
-if(_2a7["url"]){
-_2a7.url=_2a7.url.toString();
+},fromKwArgs:function(_2a4){
+if(_2a4["url"]){
+_2a4.url=_2a4.url.toString();
 }
-if(_2a7["formNode"]){
-_2a7.formNode=dojo.byId(_2a7.formNode);
+if(_2a4["formNode"]){
+_2a4.formNode=dojo.byId(_2a4.formNode);
 }
-if(!_2a7["method"]&&_2a7["formNode"]&&_2a7["formNode"].method){
-_2a7.method=_2a7["formNode"].method;
+if(!_2a4["method"]&&_2a4["formNode"]&&_2a4["formNode"].method){
+_2a4.method=_2a4["formNode"].method;
 }
-if(!_2a7["handle"]&&_2a7["handler"]){
-_2a7.handle=_2a7.handler;
+if(!_2a4["handle"]&&_2a4["handler"]){
+_2a4.handle=_2a4.handler;
 }
-if(!_2a7["load"]&&_2a7["loaded"]){
-_2a7.load=_2a7.loaded;
+if(!_2a4["load"]&&_2a4["loaded"]){
+_2a4.load=_2a4.loaded;
 }
-if(!_2a7["changeUrl"]&&_2a7["changeURL"]){
-_2a7.changeUrl=_2a7.changeURL;
+if(!_2a4["changeUrl"]&&_2a4["changeURL"]){
+_2a4.changeUrl=_2a4.changeURL;
 }
-_2a7.encoding=dojo.lang.firstValued(_2a7["encoding"],djConfig["bindEncoding"],"");
-_2a7.sendTransport=dojo.lang.firstValued(_2a7["sendTransport"],djConfig["ioSendTransport"],false);
-var _2a8=dojo.lang.isFunction;
+_2a4.encoding=dojo.lang.firstValued(_2a4["encoding"],djConfig["bindEncoding"],"");
+_2a4.sendTransport=dojo.lang.firstValued(_2a4["sendTransport"],djConfig["ioSendTransport"],false);
+var _2a5=dojo.lang.isFunction;
 for(var x=0;x<dojo.io.hdlrFuncNames.length;x++){
 var fn=dojo.io.hdlrFuncNames[x];
-if(_2a7[fn]&&_2a8(_2a7[fn])){
+if(_2a4[fn]&&_2a5(_2a4[fn])){
 continue;
 }
-if(_2a7["handle"]&&_2a8(_2a7["handle"])){
-_2a7[fn]=_2a7.handle;
+if(_2a4["handle"]&&_2a5(_2a4["handle"])){
+_2a4[fn]=_2a4.handle;
 }
 }
-dojo.lang.mixin(this,_2a7);
+dojo.lang.mixin(this,_2a4);
 }});
 dojo.io.Error=function(msg,type,num){
 this.message=msg;
@@ -17957,79 +14936,79 @@
 this.push(name);
 this[name]=dojo.io[name];
 };
-dojo.io.bind=function(_2af){
-if(!(_2af instanceof dojo.io.Request)){
+dojo.io.bind=function(_2ac){
+if(!(_2ac instanceof dojo.io.Request)){
 try{
-_2af=new dojo.io.Request(_2af);
+_2ac=new dojo.io.Request(_2ac);
 }
 catch(e){
 dojo.debug(e);
 }
 }
-var _2b0="";
-if(_2af["transport"]){
-_2b0=_2af["transport"];
-if(!this[_2b0]){
-dojo.io.sendBindError(_2af,"No dojo.io.bind() transport with name '"+_2af["transport"]+"'.");
-return _2af;
+var _2ad="";
+if(_2ac["transport"]){
+_2ad=_2ac["transport"];
+if(!this[_2ad]){
+dojo.io.sendBindError(_2ac,"No dojo.io.bind() transport with name '"+_2ac["transport"]+"'.");
+return _2ac;
 }
-if(!this[_2b0].canHandle(_2af)){
-dojo.io.sendBindError(_2af,"dojo.io.bind() transport with name '"+_2af["transport"]+"' cannot handle this type of request.");
-return _2af;
+if(!this[_2ad].canHandle(_2ac)){
+dojo.io.sendBindError(_2ac,"dojo.io.bind() transport with name '"+_2ac["transport"]+"' cannot handle this type of request.");
+return _2ac;
 }
 }else{
 for(var x=0;x<dojo.io.transports.length;x++){
 var tmp=dojo.io.transports[x];
-if((this[tmp])&&(this[tmp].canHandle(_2af))){
-_2b0=tmp;
+if((this[tmp])&&(this[tmp].canHandle(_2ac))){
+_2ad=tmp;
 break;
 }
 }
-if(_2b0==""){
-dojo.io.sendBindError(_2af,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
-return _2af;
+if(_2ad==""){
+dojo.io.sendBindError(_2ac,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
+return _2ac;
 }
 }
-this[_2b0].bind(_2af);
-_2af.bindSuccess=true;
-return _2af;
+this[_2ad].bind(_2ac);
+_2ac.bindSuccess=true;
+return _2ac;
 };
-dojo.io.sendBindError=function(_2b3,_2b4){
-if((typeof _2b3.error=="function"||typeof _2b3.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
-var _2b5=new dojo.io.Error(_2b4);
+dojo.io.sendBindError=function(_2b0,_2b1){
+if((typeof _2b0.error=="function"||typeof _2b0.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
+var _2b2=new dojo.io.Error(_2b1);
 setTimeout(function(){
-_2b3[(typeof _2b3.error=="function")?"error":"handle"]("error",_2b5,null,_2b3);
+_2b0[(typeof _2b0.error=="function")?"error":"handle"]("error",_2b2,null,_2b0);
 },50);
 }else{
-dojo.raise(_2b4);
+dojo.raise(_2b1);
 }
 };
-dojo.io.queueBind=function(_2b6){
-if(!(_2b6 instanceof dojo.io.Request)){
+dojo.io.queueBind=function(_2b3){
+if(!(_2b3 instanceof dojo.io.Request)){
 try{
-_2b6=new dojo.io.Request(_2b6);
+_2b3=new dojo.io.Request(_2b3);
 }
 catch(e){
 dojo.debug(e);
 }
 }
-var _2b7=_2b6.load;
-_2b6.load=function(){
+var _2b4=_2b3.load;
+_2b3.load=function(){
 dojo.io._queueBindInFlight=false;
-var ret=_2b7.apply(this,arguments);
+var ret=_2b4.apply(this,arguments);
 dojo.io._dispatchNextQueueBind();
 return ret;
 };
-var _2b9=_2b6.error;
-_2b6.error=function(){
+var _2b6=_2b3.error;
+_2b3.error=function(){
 dojo.io._queueBindInFlight=false;
-var ret=_2b9.apply(this,arguments);
+var ret=_2b6.apply(this,arguments);
 dojo.io._dispatchNextQueueBind();
 return ret;
 };
-dojo.io._bindQueue.push(_2b6);
+dojo.io._bindQueue.push(_2b3);
 dojo.io._dispatchNextQueueBind();
-return _2b6;
+return _2b3;
 };
 dojo.io._dispatchNextQueueBind=function(){
 if(!dojo.io._queueBindInFlight){
@@ -18043,48 +15022,48 @@
 };
 dojo.io._bindQueue=[];
 dojo.io._queueBindInFlight=false;
-dojo.io.argsFromMap=function(map,_2bc,last){
-var enc=/utf/i.test(_2bc||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _2bf=[];
-var _2c0=new Object();
+dojo.io.argsFromMap=function(map,_2b9,last){
+var enc=/utf/i.test(_2b9||"")?encodeURIComponent:dojo.string.encodeAscii;
+var _2bc=[];
+var _2bd=new Object();
 for(var name in map){
-var _2c2=function(elt){
+var _2bf=function(elt){
 var val=enc(name)+"="+enc(elt);
-_2bf[(last==name)?"push":"unshift"](val);
+_2bc[(last==name)?"push":"unshift"](val);
 };
-if(!_2c0[name]){
-var _2c5=map[name];
-if(dojo.lang.isArray(_2c5)){
-dojo.lang.forEach(_2c5,_2c2);
+if(!_2bd[name]){
+var _2c2=map[name];
+if(dojo.lang.isArray(_2c2)){
+dojo.lang.forEach(_2c2,_2bf);
 }else{
-_2c2(_2c5);
+_2bf(_2c2);
 }
 }
 }
-return _2bf.join("&");
+return _2bc.join("&");
 };
-dojo.io.setIFrameSrc=function(_2c6,src,_2c8){
+dojo.io.setIFrameSrc=function(_2c3,src,_2c5){
 try{
 var r=dojo.render.html;
-if(!_2c8){
+if(!_2c5){
 if(r.safari){
-_2c6.location=src;
+_2c3.location=src;
 }else{
-frames[_2c6.name].location=src;
+frames[_2c3.name].location=src;
 }
 }else{
 var idoc;
 if(r.ie){
-idoc=_2c6.contentWindow.document;
+idoc=_2c3.contentWindow.document;
 }else{
 if(r.safari){
-idoc=_2c6.document;
+idoc=_2c3.document;
 }else{
-idoc=_2c6.contentWindow;
+idoc=_2c3.contentWindow;
 }
 }
 if(!idoc){
-_2c6.location=src;
+_2c3.location=src;
 return;
 }else{
 idoc.location.replace(src);
@@ -18123,102 +15102,102 @@
 }
 };
 dojo.dom.getUniqueId=function(){
-var _2cc=dojo.doc();
+var _2c9=dojo.doc();
 do{
 var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_2cc.getElementById(id));
+}while(_2c9.getElementById(id));
 return id;
 };
 dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_2ce,_2cf){
-var node=_2ce.firstChild;
+dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_2cb,_2cc){
+var node=_2cb.firstChild;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.nextSibling;
 }
-if(_2cf&&node&&node.tagName&&node.tagName.toLowerCase()!=_2cf.toLowerCase()){
-node=dojo.dom.nextElement(node,_2cf);
+if(_2cc&&node&&node.tagName&&node.tagName.toLowerCase()!=_2cc.toLowerCase()){
+node=dojo.dom.nextElement(node,_2cc);
 }
 return node;
 };
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_2d1,_2d2){
-var node=_2d1.lastChild;
+dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_2ce,_2cf){
+var node=_2ce.lastChild;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.previousSibling;
 }
-if(_2d2&&node&&node.tagName&&node.tagName.toLowerCase()!=_2d2.toLowerCase()){
-node=dojo.dom.prevElement(node,_2d2);
+if(_2cf&&node&&node.tagName&&node.tagName.toLowerCase()!=_2cf.toLowerCase()){
+node=dojo.dom.prevElement(node,_2cf);
 }
 return node;
 };
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_2d5){
+dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_2d2){
 if(!node){
 return null;
 }
 do{
 node=node.nextSibling;
 }while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_2d5&&_2d5.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.nextElement(node,_2d5);
+if(node&&_2d2&&_2d2.toLowerCase()!=node.tagName.toLowerCase()){
+return dojo.dom.nextElement(node,_2d2);
 }
 return node;
 };
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_2d7){
+dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_2d4){
 if(!node){
 return null;
 }
-if(_2d7){
-_2d7=_2d7.toLowerCase();
+if(_2d4){
+_2d4=_2d4.toLowerCase();
 }
 do{
 node=node.previousSibling;
 }while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_2d7&&_2d7.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_2d7);
+if(node&&_2d4&&_2d4.toLowerCase()!=node.tagName.toLowerCase()){
+return dojo.dom.prevElement(node,_2d4);
 }
 return node;
 };
-dojo.dom.moveChildren=function(_2d8,_2d9,trim){
-var _2db=0;
+dojo.dom.moveChildren=function(_2d5,_2d6,trim){
+var _2d8=0;
 if(trim){
-while(_2d8.hasChildNodes()&&_2d8.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_2d8.removeChild(_2d8.firstChild);
+while(_2d5.hasChildNodes()&&_2d5.firstChild.nodeType==dojo.dom.TEXT_NODE){
+_2d5.removeChild(_2d5.firstChild);
 }
-while(_2d8.hasChildNodes()&&_2d8.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_2d8.removeChild(_2d8.lastChild);
+while(_2d5.hasChildNodes()&&_2d5.lastChild.nodeType==dojo.dom.TEXT_NODE){
+_2d5.removeChild(_2d5.lastChild);
 }
 }
-while(_2d8.hasChildNodes()){
-_2d9.appendChild(_2d8.firstChild);
-_2db++;
+while(_2d5.hasChildNodes()){
+_2d6.appendChild(_2d5.firstChild);
+_2d8++;
 }
-return _2db;
+return _2d8;
 };
-dojo.dom.copyChildren=function(_2dc,_2dd,trim){
-var _2df=_2dc.cloneNode(true);
-return this.moveChildren(_2df,_2dd,trim);
+dojo.dom.copyChildren=function(_2d9,_2da,trim){
+var _2dc=_2d9.cloneNode(true);
+return this.moveChildren(_2dc,_2da,trim);
 };
-dojo.dom.replaceChildren=function(node,_2e1){
-var _2e2=[];
+dojo.dom.replaceChildren=function(node,_2de){
+var _2df=[];
 if(dojo.render.html.ie){
 for(var i=0;i<node.childNodes.length;i++){
-_2e2.push(node.childNodes[i]);
+_2df.push(node.childNodes[i]);
 }
 }
 dojo.dom.removeChildren(node);
-node.appendChild(_2e1);
-for(var i=0;i<_2e2.length;i++){
-dojo.dom.destroyNode(_2e2[i]);
+node.appendChild(_2de);
+for(var i=0;i<_2df.length;i++){
+dojo.dom.destroyNode(_2df[i]);
 }
 };
 dojo.dom.removeChildren=function(node){
-var _2e5=node.childNodes.length;
+var _2e2=node.childNodes.length;
 while(node.hasChildNodes()){
 dojo.dom.removeNode(node.firstChild);
 }
-return _2e5;
+return _2e2;
 };
-dojo.dom.replaceNode=function(node,_2e7){
-return node.parentNode.replaceChild(_2e7,node);
+dojo.dom.replaceNode=function(node,_2e4){
+return node.parentNode.replaceChild(_2e4,node);
 };
 dojo.dom.destroyNode=function(node){
 if(node.parentNode){
@@ -18238,38 +15217,38 @@
 return node.parentNode.removeChild(node);
 }
 };
-dojo.dom.getAncestors=function(node,_2eb,_2ec){
-var _2ed=[];
-var _2ee=(_2eb&&(_2eb instanceof Function||typeof _2eb=="function"));
+dojo.dom.getAncestors=function(node,_2e8,_2e9){
+var _2ea=[];
+var _2eb=(_2e8&&(_2e8 instanceof Function||typeof _2e8=="function"));
 while(node){
-if(!_2ee||_2eb(node)){
-_2ed.push(node);
+if(!_2eb||_2e8(node)){
+_2ea.push(node);
 }
-if(_2ec&&_2ed.length>0){
-return _2ed[0];
+if(_2e9&&_2ea.length>0){
+return _2ea[0];
 }
 node=node.parentNode;
 }
-if(_2ec){
+if(_2e9){
 return null;
 }
-return _2ed;
+return _2ea;
 };
-dojo.dom.getAncestorsByTag=function(node,tag,_2f1){
+dojo.dom.getAncestorsByTag=function(node,tag,_2ee){
 tag=tag.toLowerCase();
 return dojo.dom.getAncestors(node,function(el){
 return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_2f1);
+},_2ee);
 };
 dojo.dom.getFirstAncestorByTag=function(node,tag){
 return dojo.dom.getAncestorsByTag(node,tag,true);
 };
-dojo.dom.isDescendantOf=function(node,_2f6,_2f7){
-if(_2f7&&node){
+dojo.dom.isDescendantOf=function(node,_2f3,_2f4){
+if(_2f4&&node){
 node=node.parentNode;
 }
 while(node){
-if(node==_2f6){
+if(node==_2f3){
 return true;
 }
 node=node.parentNode;
@@ -18291,12 +15270,12 @@
 };
 dojo.dom.createDocument=function(){
 var doc=null;
-var _2fa=dojo.doc();
+var _2f7=dojo.doc();
 if(!dj_undef("ActiveXObject")){
-var _2fb=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_2fb.length;i++){
+var _2f8=["MSXML2","Microsoft","MSXML","MSXML3"];
+for(var i=0;i<_2f8.length;i++){
 try{
-doc=new ActiveXObject(_2fb[i]+".XMLDOM");
+doc=new ActiveXObject(_2f8[i]+".XMLDOM");
 }
 catch(e){
 }
@@ -18305,40 +15284,40 @@
 }
 }
 }else{
-if((_2fa.implementation)&&(_2fa.implementation.createDocument)){
-doc=_2fa.implementation.createDocument("","",null);
+if((_2f7.implementation)&&(_2f7.implementation.createDocument)){
+doc=_2f7.implementation.createDocument("","",null);
 }
 }
 return doc;
 };
-dojo.dom.createDocumentFromText=function(str,_2fe){
-if(!_2fe){
-_2fe="text/xml";
+dojo.dom.createDocumentFromText=function(str,_2fb){
+if(!_2fb){
+_2fb="text/xml";
 }
 if(!dj_undef("DOMParser")){
-var _2ff=new DOMParser();
-return _2ff.parseFromString(str,_2fe);
+var _2fc=new DOMParser();
+return _2fc.parseFromString(str,_2fb);
 }else{
 if(!dj_undef("ActiveXObject")){
-var _300=dojo.dom.createDocument();
-if(_300){
-_300.async=false;
-_300.loadXML(str);
-return _300;
+var _2fd=dojo.dom.createDocument();
+if(_2fd){
+_2fd.async=false;
+_2fd.loadXML(str);
+return _2fd;
 }else{
 dojo.debug("toXml didn't work?");
 }
 }else{
-var _301=dojo.doc();
-if(_301.createElement){
-var tmp=_301.createElement("xml");
+var _2fe=dojo.doc();
+if(_2fe.createElement){
+var tmp=_2fe.createElement("xml");
 tmp.innerHTML=str;
-if(_301.implementation&&_301.implementation.createDocument){
-var _303=_301.implementation.createDocument("foo","",null);
+if(_2fe.implementation&&_2fe.implementation.createDocument){
+var _300=_2fe.implementation.createDocument("foo","",null);
 for(var i=0;i<tmp.childNodes.length;i++){
-_303.importNode(tmp.childNodes.item(i),true);
+_300.importNode(tmp.childNodes.item(i),true);
 }
-return _303;
+return _300;
 }
 return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
 }
@@ -18346,39 +15325,39 @@
 }
 return null;
 };
-dojo.dom.prependChild=function(node,_306){
-if(_306.firstChild){
-_306.insertBefore(node,_306.firstChild);
+dojo.dom.prependChild=function(node,_303){
+if(_303.firstChild){
+_303.insertBefore(node,_303.firstChild);
 }else{
-_306.appendChild(node);
+_303.appendChild(node);
 }
 return true;
 };
-dojo.dom.insertBefore=function(node,ref,_309){
-if((_309!=true)&&(node===ref||node.nextSibling===ref)){
+dojo.dom.insertBefore=function(node,ref,_306){
+if((_306!=true)&&(node===ref||node.nextSibling===ref)){
 return false;
 }
-var _30a=ref.parentNode;
-_30a.insertBefore(node,ref);
+var _307=ref.parentNode;
+_307.insertBefore(node,ref);
 return true;
 };
-dojo.dom.insertAfter=function(node,ref,_30d){
+dojo.dom.insertAfter=function(node,ref,_30a){
 var pn=ref.parentNode;
 if(ref==pn.lastChild){
-if((_30d!=true)&&(node===ref)){
+if((_30a!=true)&&(node===ref)){
 return false;
 }
 pn.appendChild(node);
 }else{
-return this.insertBefore(node,ref.nextSibling,_30d);
+return this.insertBefore(node,ref.nextSibling,_30a);
 }
 return true;
 };
-dojo.dom.insertAtPosition=function(node,ref,_311){
-if((!node)||(!ref)||(!_311)){
+dojo.dom.insertAtPosition=function(node,ref,_30e){
+if((!node)||(!ref)||(!_30e)){
 return false;
 }
-switch(_311.toLowerCase()){
+switch(_30e.toLowerCase()){
 case "before":
 return dojo.dom.insertBefore(node,ref);
 case "after":
@@ -18396,46 +15375,46 @@
 return true;
 }
 };
-dojo.dom.insertAtIndex=function(node,_313,_314){
-var _315=_313.childNodes;
-if(!_315.length||_315.length==_314){
-_313.appendChild(node);
+dojo.dom.insertAtIndex=function(node,_310,_311){
+var _312=_310.childNodes;
+if(!_312.length||_312.length==_311){
+_310.appendChild(node);
 return true;
 }
-if(_314==0){
-return dojo.dom.prependChild(node,_313);
+if(_311==0){
+return dojo.dom.prependChild(node,_310);
 }
-return dojo.dom.insertAfter(node,_315[_314-1]);
+return dojo.dom.insertAfter(node,_312[_311-1]);
 };
 dojo.dom.textContent=function(node,text){
 if(arguments.length>1){
-var _318=dojo.doc();
-dojo.dom.replaceChildren(node,_318.createTextNode(text));
+var _315=dojo.doc();
+dojo.dom.replaceChildren(node,_315.createTextNode(text));
 return text;
 }else{
 if(node.textContent!=undefined){
 return node.textContent;
 }
-var _319="";
+var _316="";
 if(node==null){
-return _319;
+return _316;
 }
 for(var i=0;i<node.childNodes.length;i++){
 switch(node.childNodes[i].nodeType){
 case 1:
 case 5:
-_319+=dojo.dom.textContent(node.childNodes[i]);
+_316+=dojo.dom.textContent(node.childNodes[i]);
 break;
 case 3:
 case 2:
 case 4:
-_319+=node.childNodes[i].nodeValue;
+_316+=node.childNodes[i].nodeValue;
 break;
 default:
 break;
 }
 }
-return _319;
+return _316;
 }
 };
 dojo.dom.hasParent=function(node){
@@ -18451,23 +15430,23 @@
 }
 return "";
 };
-dojo.dom.setAttributeNS=function(elem,_31f,_320,_321){
+dojo.dom.setAttributeNS=function(elem,_31c,_31d,_31e){
 if(elem==null||((elem==undefined)&&(typeof elem=="undefined"))){
 dojo.raise("No element given to dojo.dom.setAttributeNS");
 }
 if(!((elem.setAttributeNS==undefined)&&(typeof elem.setAttributeNS=="undefined"))){
-elem.setAttributeNS(_31f,_320,_321);
+elem.setAttributeNS(_31c,_31d,_31e);
 }else{
-var _322=elem.ownerDocument;
-var _323=_322.createNode(2,_320,_31f);
-_323.nodeValue=_321;
-elem.setAttributeNode(_323);
+var _31f=elem.ownerDocument;
+var _320=_31f.createNode(2,_31d,_31c);
+_320.nodeValue=_31e;
+elem.setAttributeNode(_320);
 }
 };
 dojo.provide("dojo.undo.browser");
 try{
 if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
+document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
 }
 }
 catch(e){
@@ -18482,6 +15461,9 @@
 var hash=null;
 var url=null;
 if(!this.historyIframe){
+if(djConfig["useXDomain"]&&!djConfig["dojoIframeHistoryUrl"]){
+dojo.debug("dojo.undo.browser: When using cross-domain Dojo builds,"+" please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"+" to the path on your domain to iframe_history.html");
+}
 this.historyIframe=window.frames["djhistory"];
 }
 if(!this.bookmarkAnchor){
@@ -18505,12 +15487,12 @@
 this.bookmarkAnchor.href=hash;
 if(dojo.render.html.ie){
 url=this._loadIframeHistory();
-var _328=args["back"]||args["backButton"]||args["handle"];
-var tcb=function(_32a){
+var _325=args["back"]||args["backButton"]||args["handle"];
+var tcb=function(_327){
 if(window.location.hash!=""){
 setTimeout("window.location.href = '"+hash+"';",1);
 }
-_328.apply(this,[_32a]);
+_325.apply(this,[_327]);
 };
 if(args["back"]){
 args.back=tcb;
@@ -18523,13 +15505,13 @@
 }
 }
 }
-var _32b=args["forward"]||args["forwardButton"]||args["handle"];
-var tfw=function(_32d){
+var _328=args["forward"]||args["forwardButton"]||args["handle"];
+var tfw=function(_32a){
 if(window.location.hash!=""){
 window.location.href=hash;
 }
-if(_32b){
-_32b.apply(this,[_32d]);
+if(_328){
+_328.apply(this,[_32a]);
 }
 };
 if(args["forward"]){
@@ -18574,10 +15556,10 @@
 }
 }
 }
-},iframeLoaded:function(evt,_330){
+},iframeLoaded:function(evt,_32d){
 if(!dojo.render.html.opera){
-var _331=this._getUrlQuery(_330.href);
-if(_331==null){
+var _32e=this._getUrlQuery(_32d.href);
+if(_32e==null){
 if(this.historyStack.length==1){
 this.handleBackButton();
 }
@@ -18587,17 +15569,17 @@
 this.moveForward=false;
 return;
 }
-if(this.historyStack.length>=2&&_331==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
+if(this.historyStack.length>=2&&_32e==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
 this.handleBackButton();
 }else{
-if(this.forwardStack.length>0&&_331==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
+if(this.forwardStack.length>0&&_32e==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
 this.handleForwardButton();
 }
 }
 }
 },handleBackButton:function(){
-var _332=this.historyStack.pop();
-if(!_332){
+var _32f=this.historyStack.pop();
+if(!_32f){
 return;
 }
 var last=this.historyStack[this.historyStack.length-1];
@@ -18617,7 +15599,7 @@
 }
 }
 }
-this.forwardStack.push(_332);
+this.forwardStack.push(_32f);
 },handleForwardButton:function(){
 var last=this.forwardStack.pop();
 if(!last){
@@ -18638,14 +15620,14 @@
 },_createState:function(url,args,hash){
 return {"url":url,"kwArgs":args,"urlHash":hash};
 },_getUrlQuery:function(url){
-var _339=url.split("?");
-if(_339.length<2){
+var _336=url.split("?");
+if(_336.length<2){
 return null;
 }else{
-return _339[1];
+return _336[1];
 }
 },_loadIframeHistory:function(){
-var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
+var url=(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"?"+(new Date()).getTime();
 this.moveForward=true;
 dojo.io.setIFrameSrc(this.historyIframe,url,false);
 return url;
@@ -18653,26 +15635,26 @@
 dojo.provide("dojo.io.BrowserIO");
 if(!dj_undef("window")){
 dojo.io.checkChildrenForFile=function(node){
-var _33c=false;
-var _33d=node.getElementsByTagName("input");
-dojo.lang.forEach(_33d,function(_33e){
-if(_33c){
+var _339=false;
+var _33a=node.getElementsByTagName("input");
+dojo.lang.forEach(_33a,function(_33b){
+if(_339){
 return;
 }
-if(_33e.getAttribute("type")=="file"){
-_33c=true;
+if(_33b.getAttribute("type")=="file"){
+_339=true;
 }
 });
-return _33c;
+return _339;
 };
-dojo.io.formHasFile=function(_33f){
-return dojo.io.checkChildrenForFile(_33f);
+dojo.io.formHasFile=function(_33c){
+return dojo.io.checkChildrenForFile(_33c);
 };
-dojo.io.updateNode=function(node,_341){
+dojo.io.updateNode=function(node,_33e){
 node=dojo.byId(node);
-var args=_341;
-if(dojo.lang.isString(_341)){
-args={url:_341};
+var args=_33e;
+if(dojo.lang.isString(_33e)){
+args={url:_33e};
 }
 args.mimetype="text/html";
 args.load=function(t,d,e){
@@ -18687,18 +15669,18 @@
 var type=(node.type||"").toLowerCase();
 return !node.disabled&&node.name&&!dojo.lang.inArray(["file","submit","image","reset","button"],type);
 };
-dojo.io.encodeForm=function(_348,_349,_34a){
-if((!_348)||(!_348.tagName)||(!_348.tagName.toLowerCase()=="form")){
+dojo.io.encodeForm=function(_345,_346,_347){
+if((!_345)||(!_345.tagName)||(!_345.tagName.toLowerCase()=="form")){
 dojo.raise("Attempted to encode a non-form element.");
 }
-if(!_34a){
-_34a=dojo.io.formFilter;
+if(!_347){
+_347=dojo.io.formFilter;
 }
-var enc=/utf/i.test(_349||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _34c=[];
-for(var i=0;i<_348.elements.length;i++){
-var elm=_348.elements[i];
-if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_34a(elm)){
+var enc=/utf/i.test(_346||"")?encodeURIComponent:dojo.string.encodeAscii;
+var _349=[];
+for(var i=0;i<_345.elements.length;i++){
+var elm=_345.elements[i];
+if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_347(elm)){
 continue;
 }
 var name=enc(elm.name);
@@ -18706,30 +15688,30 @@
 if(type=="select-multiple"){
 for(var j=0;j<elm.options.length;j++){
 if(elm.options[j].selected){
-_34c.push(name+"="+enc(elm.options[j].value));
+_349.push(name+"="+enc(elm.options[j].value));
 }
 }
 }else{
 if(dojo.lang.inArray(["radio","checkbox"],type)){
 if(elm.checked){
-_34c.push(name+"="+enc(elm.value));
+_349.push(name+"="+enc(elm.value));
 }
 }else{
-_34c.push(name+"="+enc(elm.value));
+_349.push(name+"="+enc(elm.value));
 }
 }
 }
-var _352=_348.getElementsByTagName("input");
-for(var i=0;i<_352.length;i++){
-var _353=_352[i];
-if(_353.type.toLowerCase()=="image"&&_353.form==_348&&_34a(_353)){
-var name=enc(_353.name);
-_34c.push(name+"="+enc(_353.value));
-_34c.push(name+".x=0");
-_34c.push(name+".y=0");
+var _34f=_345.getElementsByTagName("input");
+for(var i=0;i<_34f.length;i++){
+var _350=_34f[i];
+if(_350.type.toLowerCase()=="image"&&_350.form==_345&&_347(_350)){
+var name=enc(_350.name);
+_349.push(name+"="+enc(_350.value));
+_349.push(name+".x=0");
+_349.push(name+".y=0");
 }
 }
-return _34c.join("&")+"&";
+return _349.join("&")+"&";
 };
 dojo.io.FormBind=function(args){
 this.bindArgs={};
@@ -18763,11 +15745,11 @@
 this.connect(node,"onclick","click");
 }
 }
-var _359=form.getElementsByTagName("input");
-for(var i=0;i<_359.length;i++){
-var _35a=_359[i];
-if(_35a.type.toLowerCase()=="image"&&_35a.form==form){
-this.connect(_35a,"onclick","click");
+var _356=form.getElementsByTagName("input");
+for(var i=0;i<_356.length;i++){
+var _357=_356[i];
+if(_357.type.toLowerCase()=="image"&&_357.form==form){
+this.connect(_357,"onclick","click");
 }
 }
 },onSubmit:function(form){
@@ -18785,26 +15767,26 @@
 this.clickedButton=node;
 },formFilter:function(node){
 var type=(node.type||"").toLowerCase();
-var _361=false;
+var _35e=false;
 if(node.disabled||!node.name){
-_361=false;
+_35e=false;
 }else{
 if(dojo.lang.inArray(["submit","button","image"],type)){
 if(!this.clickedButton){
 this.clickedButton=node;
 }
-_361=node==this.clickedButton;
+_35e=node==this.clickedButton;
 }else{
-_361=!dojo.lang.inArray(["file","submit","reset","button"],type);
+_35e=!dojo.lang.inArray(["file","submit","reset","button"],type);
 }
 }
-return _361;
-},connect:function(_362,_363,_364){
+return _35e;
+},connect:function(_35f,_360,_361){
 if(dojo.evalObjPath("dojo.event.connect")){
-dojo.event.connect(_362,_363,this,_364);
+dojo.event.connect(_35f,_360,this,_361);
 }else{
-var fcn=dojo.lang.hitch(this,_364);
-_362[_363]=function(e){
+var fcn=dojo.lang.hitch(this,_361);
+_35f[_360]=function(e){
 if(!e){
 e=window.event;
 }
@@ -18821,40 +15803,40 @@
 }
 }});
 dojo.io.XMLHTTPTransport=new function(){
-var _367=this;
-var _368={};
+var _364=this;
+var _365={};
 this.useCache=false;
 this.preventCache=false;
-function getCacheKey(url,_36a,_36b){
-return url+"|"+_36a+"|"+_36b.toLowerCase();
+function getCacheKey(url,_367,_368){
+return url+"|"+_367+"|"+_368.toLowerCase();
 }
-function addToCache(url,_36d,_36e,http){
-_368[getCacheKey(url,_36d,_36e)]=http;
+function addToCache(url,_36a,_36b,http){
+_365[getCacheKey(url,_36a,_36b)]=http;
 }
-function getFromCache(url,_371,_372){
-return _368[getCacheKey(url,_371,_372)];
+function getFromCache(url,_36e,_36f){
+return _365[getCacheKey(url,_36e,_36f)];
 }
 this.clearCache=function(){
-_368={};
+_365={};
 };
-function doLoad(_373,http,url,_376,_377){
+function doLoad(_370,http,url,_373,_374){
 if(((http.status>=200)&&(http.status<300))||(http.status==304)||(location.protocol=="file:"&&(http.status==0||http.status==undefined))||(location.protocol=="chrome:"&&(http.status==0||http.status==undefined))){
 var ret;
-if(_373.method.toLowerCase()=="head"){
-var _379=http.getAllResponseHeaders();
+if(_370.method.toLowerCase()=="head"){
+var _376=http.getAllResponseHeaders();
 ret={};
 ret.toString=function(){
-return _379;
+return _376;
 };
-var _37a=_379.split(/[\r\n]+/g);
-for(var i=0;i<_37a.length;i++){
-var pair=_37a[i].match(/^([^:]+)\s*:\s*(.+)$/i);
+var _377=_376.split(/[\r\n]+/g);
+for(var i=0;i<_377.length;i++){
+var pair=_377[i].match(/^([^:]+)\s*:\s*(.+)$/i);
 if(pair){
 ret[pair[1]]=pair[2];
 }
 }
 }else{
-if(_373.mimetype=="text/javascript"){
+if(_370.mimetype=="text/javascript"){
 try{
 ret=dj_eval(http.responseText);
 }
@@ -18864,7 +15846,7 @@
 ret=null;
 }
 }else{
-if(_373.mimetype=="text/json"||_373.mimetype=="application/json"){
+if(_370.mimetype=="text/json"||_370.mimetype=="application/json"){
 try{
 ret=dj_eval("("+http.responseText+")");
 }
@@ -18874,7 +15856,7 @@
 ret=false;
 }
 }else{
-if((_373.mimetype=="application/xml")||(_373.mimetype=="text/xml")){
+if((_370.mimetype=="application/xml")||(_370.mimetype=="text/xml")){
 ret=http.responseXML;
 if(!ret||typeof ret=="string"||!http.getResponseHeader("Content-Type")){
 ret=dojo.dom.createDocumentFromText(http.responseText);
@@ -18885,22 +15867,22 @@
 }
 }
 }
-if(_377){
-addToCache(url,_376,_373.method,http);
+if(_374){
+addToCache(url,_373,_370.method,http);
 }
-_373[(typeof _373.load=="function")?"load":"handle"]("load",ret,http,_373);
+_370[(typeof _370.load=="function")?"load":"handle"]("load",ret,http,_370);
 }else{
-var _37d=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-_373[(typeof _373.error=="function")?"error":"handle"]("error",_37d,http,_373);
+var _37a=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
+_370[(typeof _370.error=="function")?"error":"handle"]("error",_37a,http,_370);
 }
 }
-function setHeaders(http,_37f){
-if(_37f["headers"]){
-for(var _380 in _37f["headers"]){
-if(_380.toLowerCase()=="content-type"&&!_37f["contentType"]){
-_37f["contentType"]=_37f["headers"][_380];
+function setHeaders(http,_37c){
+if(_37c["headers"]){
+for(var _37d in _37c["headers"]){
+if(_37d.toLowerCase()=="content-type"&&!_37c["contentType"]){
+_37c["contentType"]=_37c["headers"][_37d];
 }else{
-http.setRequestHeader(_380,_37f["headers"][_380]);
+http.setRequestHeader(_37d,_37c["headers"][_37d]);
 }
 }
 }
@@ -18914,7 +15896,7 @@
 };
 this.watchInFlight=function(){
 var now=null;
-if(!dojo.hostenv._blockAsync&&!_367._blockAsync){
+if(!dojo.hostenv._blockAsync&&!_364._blockAsync){
 for(var x=this.inFlight.length-1;x>=0;x--){
 try{
 var tif=this.inFlight[x];
@@ -18942,8 +15924,8 @@
 }
 catch(e){
 try{
-var _384=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
-tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_384,tif.http,tif.req);
+var _381=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
+tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_381,tif.http,tif.req);
 }
 catch(e2){
 dojo.debug("XMLHttpTransport error callback failed: "+e2);
@@ -18958,74 +15940,74 @@
 }
 this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
 };
-var _385=dojo.hostenv.getXmlhttpObject()?true:false;
-this.canHandle=function(_386){
-return _385&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_386["mimetype"].toLowerCase()||""))&&!(_386["formNode"]&&dojo.io.formHasFile(_386["formNode"]));
+var _382=dojo.hostenv.getXmlhttpObject()?true:false;
+this.canHandle=function(_383){
+return _382&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_383["mimetype"].toLowerCase()||""))&&!(_383["formNode"]&&dojo.io.formHasFile(_383["formNode"]));
 };
 this.multipartBoundary="45309FFF-BD65-4d50-99C9-36986896A96F";
-this.bind=function(_387){
-if(!_387["url"]){
-if(!_387["formNode"]&&(_387["backButton"]||_387["back"]||_387["changeUrl"]||_387["watchForURL"])&&(!djConfig.preventBackButtonFix)){
+this.bind=function(_384){
+if(!_384["url"]){
+if(!_384["formNode"]&&(_384["backButton"]||_384["back"]||_384["changeUrl"]||_384["watchForURL"])&&(!djConfig.preventBackButtonFix)){
 dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request","Use dojo.undo.browser.addToHistory() instead.","0.4");
-dojo.undo.browser.addToHistory(_387);
+dojo.undo.browser.addToHistory(_384);
 return true;
 }
 }
-var url=_387.url;
-var _389="";
-if(_387["formNode"]){
-var ta=_387.formNode.getAttribute("action");
-if((ta)&&(!_387["url"])){
+var url=_384.url;
+var _386="";
+if(_384["formNode"]){
+var ta=_384.formNode.getAttribute("action");
+if((ta)&&(!_384["url"])){
 url=ta;
 }
-var tp=_387.formNode.getAttribute("method");
-if((tp)&&(!_387["method"])){
-_387.method=tp;
+var tp=_384.formNode.getAttribute("method");
+if((tp)&&(!_384["method"])){
+_384.method=tp;
 }
-_389+=dojo.io.encodeForm(_387.formNode,_387.encoding,_387["formFilter"]);
+_386+=dojo.io.encodeForm(_384.formNode,_384.encoding,_384["formFilter"]);
 }
 if(url.indexOf("#")>-1){
 dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url);
 url=url.split("#")[0];
 }
-if(_387["file"]){
-_387.method="post";
+if(_384["file"]){
+_384.method="post";
 }
-if(!_387["method"]){
-_387.method="get";
+if(!_384["method"]){
+_384.method="get";
 }
-if(_387.method.toLowerCase()=="get"){
-_387.multipart=false;
+if(_384.method.toLowerCase()=="get"){
+_384.multipart=false;
 }else{
-if(_387["file"]){
-_387.multipart=true;
+if(_384["file"]){
+_384.multipart=true;
 }else{
-if(!_387["multipart"]){
-_387.multipart=false;
+if(!_384["multipart"]){
+_384.multipart=false;
 }
 }
 }
-if(_387["backButton"]||_387["back"]||_387["changeUrl"]){
-dojo.undo.browser.addToHistory(_387);
+if(_384["backButton"]||_384["back"]||_384["changeUrl"]){
+dojo.undo.browser.addToHistory(_384);
 }
-var _38c=_387["content"]||{};
-if(_387.sendTransport){
-_38c["dojo.transport"]="xmlhttp";
+var _389=_384["content"]||{};
+if(_384.sendTransport){
+_389["dojo.transport"]="xmlhttp";
 }
 do{
-if(_387.postContent){
-_389=_387.postContent;
+if(_384.postContent){
+_386=_384.postContent;
 break;
 }
-if(_38c){
-_389+=dojo.io.argsFromMap(_38c,_387.encoding);
+if(_389){
+_386+=dojo.io.argsFromMap(_389,_384.encoding);
 }
-if(_387.method.toLowerCase()=="get"||!_387.multipart){
+if(_384.method.toLowerCase()=="get"||!_384.multipart){
 break;
 }
 var t=[];
-if(_389.length){
-var q=_389.split("&");
+if(_386.length){
+var q=_386.split("&");
 for(var i=0;i<q.length;++i){
 if(q[i].length){
 var p=q[i].split("=");
@@ -19033,71 +16015,71 @@
 }
 }
 }
-if(_387.file){
-if(dojo.lang.isArray(_387.file)){
-for(var i=0;i<_387.file.length;++i){
-var o=_387.file[i];
+if(_384.file){
+if(dojo.lang.isArray(_384.file)){
+for(var i=0;i<_384.file.length;++i){
+var o=_384.file[i];
 t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
 }
 }else{
-var o=_387.file;
+var o=_384.file;
 t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
 }
 }
 if(t.length){
 t.push("--"+this.multipartBoundary+"--","");
-_389=t.join("\r\n");
+_386=t.join("\r\n");
 }
 }while(false);
-var _392=_387["sync"]?false:true;
-var _393=_387["preventCache"]||(this.preventCache==true&&_387["preventCache"]!=false);
-var _394=_387["useCache"]==true||(this.useCache==true&&_387["useCache"]!=false);
-if(!_393&&_394){
-var _395=getFromCache(url,_389,_387.method);
-if(_395){
-doLoad(_387,_395,url,_389,false);
+var _38f=_384["sync"]?false:true;
+var _390=_384["preventCache"]||(this.preventCache==true&&_384["preventCache"]!=false);
+var _391=_384["useCache"]==true||(this.useCache==true&&_384["useCache"]!=false);
+if(!_390&&_391){
+var _392=getFromCache(url,_386,_384.method);
+if(_392){
+doLoad(_384,_392,url,_386,false);
 return;
 }
 }
-var http=dojo.hostenv.getXmlhttpObject(_387);
-var _397=false;
-if(_392){
-var _398=this.inFlight.push({"req":_387,"http":http,"url":url,"query":_389,"useCache":_394,"startTime":_387.timeoutSeconds?(new Date()).getTime():0});
+var http=dojo.hostenv.getXmlhttpObject(_384);
+var _394=false;
+if(_38f){
+var _395=this.inFlight.push({"req":_384,"http":http,"url":url,"query":_386,"useCache":_391,"startTime":_384.timeoutSeconds?(new Date()).getTime():0});
 this.startWatchingInFlight();
 }else{
-_367._blockAsync=true;
+_364._blockAsync=true;
 }
-if(_387.method.toLowerCase()=="post"){
-if(!_387.user){
-http.open("POST",url,_392);
+if(_384.method.toLowerCase()=="post"){
+if(!_384.user){
+http.open("POST",url,_38f);
 }else{
-http.open("POST",url,_392,_387.user,_387.password);
+http.open("POST",url,_38f,_384.user,_384.password);
 }
-setHeaders(http,_387);
-http.setRequestHeader("Content-Type",_387.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_387.contentType||"application/x-www-form-urlencoded"));
+setHeaders(http,_384);
+http.setRequestHeader("Content-Type",_384.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_384.contentType||"application/x-www-form-urlencoded"));
 try{
-http.send(_389);
+http.send(_386);
 }
 catch(e){
 if(typeof http.abort=="function"){
 http.abort();
 }
-doLoad(_387,{status:404},url,_389,_394);
+doLoad(_384,{status:404},url,_386,_391);
 }
 }else{
-var _399=url;
-if(_389!=""){
-_399+=(_399.indexOf("?")>-1?"&":"?")+_389;
+var _396=url;
+if(_386!=""){
+_396+=(_396.indexOf("?")>-1?"&":"?")+_386;
 }
-if(_393){
-_399+=(dojo.string.endsWithAny(_399,"?","&")?"":(_399.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
+if(_390){
+_396+=(dojo.string.endsWithAny(_396,"?","&")?"":(_396.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
 }
-if(!_387.user){
-http.open(_387.method.toUpperCase(),_399,_392);
+if(!_384.user){
+http.open(_384.method.toUpperCase(),_396,_38f);
 }else{
-http.open(_387.method.toUpperCase(),_399,_392,_387.user,_387.password);
+http.open(_384.method.toUpperCase(),_396,_38f,_384.user,_384.password);
 }
-setHeaders(http,_387);
+setHeaders(http,_384);
 try{
 http.send(null);
 }
@@ -19105,14 +16087,14 @@
 if(typeof http.abort=="function"){
 http.abort();
 }
-doLoad(_387,{status:404},url,_389,_394);
+doLoad(_384,{status:404},url,_386,_391);
 }
 }
-if(!_392){
-doLoad(_387,http,url,_389,_394);
-_367._blockAsync=false;
+if(!_38f){
+doLoad(_384,http,url,_386,_391);
+_364._blockAsync=false;
 }
-_387.abort=function(){
+_384.abort=function(){
 try{
 http._aborted=true;
 }
@@ -19126,15 +16108,15 @@
 };
 }
 dojo.provide("dojo.io.cookie");
-dojo.io.cookie.setCookie=function(name,_39b,days,path,_39e,_39f){
-var _3a0=-1;
+dojo.io.cookie.setCookie=function(name,_398,days,path,_39b,_39c){
+var _39d=-1;
 if((typeof days=="number")&&(days>=0)){
 var d=new Date();
 d.setTime(d.getTime()+(days*24*60*60*1000));
-_3a0=d.toGMTString();
+_39d=d.toGMTString();
 }
-_39b=escape(_39b);
-document.cookie=name+"="+_39b+";"+(_3a0!=-1?" expires="+_3a0+";":"")+(path?"path="+path:"")+(_39e?"; domain="+_39e:"")+(_39f?"; secure":"");
+_398=escape(_398);
+document.cookie=name+"="+_398+";"+(_39d!=-1?" expires="+_39d+";":"")+(path?"path="+path:"")+(_39b?"; domain="+_39b:"")+(_39c?"; secure":"");
 };
 dojo.io.cookie.set=dojo.io.cookie.setCookie;
 dojo.io.cookie.getCookie=function(name){
@@ -19142,71 +16124,71 @@
 if(idx==-1){
 return null;
 }
-var _3a4=document.cookie.substring(idx+name.length+1);
-var end=_3a4.indexOf(";");
+var _3a1=document.cookie.substring(idx+name.length+1);
+var end=_3a1.indexOf(";");
 if(end==-1){
-end=_3a4.length;
+end=_3a1.length;
 }
-_3a4=_3a4.substring(0,end);
-_3a4=unescape(_3a4);
-return _3a4;
+_3a1=_3a1.substring(0,end);
+_3a1=unescape(_3a1);
+return _3a1;
 };
 dojo.io.cookie.get=dojo.io.cookie.getCookie;
 dojo.io.cookie.deleteCookie=function(name){
 dojo.io.cookie.setCookie(name,"-",0);
 };
-dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_3ab,_3ac,_3ad){
+dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_3a8,_3a9,_3aa){
 if(arguments.length==5){
-_3ad=_3ab;
-_3ab=null;
-_3ac=null;
+_3aa=_3a8;
+_3a8=null;
+_3a9=null;
 }
-var _3ae=[],_3af,_3b0="";
-if(!_3ad){
-_3af=dojo.io.cookie.getObjectCookie(name);
+var _3ab=[],_3ac,_3ad="";
+if(!_3aa){
+_3ac=dojo.io.cookie.getObjectCookie(name);
 }
 if(days>=0){
-if(!_3af){
-_3af={};
+if(!_3ac){
+_3ac={};
 }
 for(var prop in obj){
 if(obj[prop]==null){
-delete _3af[prop];
+delete _3ac[prop];
 }else{
 if((typeof obj[prop]=="string")||(typeof obj[prop]=="number")){
-_3af[prop]=obj[prop];
+_3ac[prop]=obj[prop];
 }
 }
 }
 prop=null;
-for(var prop in _3af){
-_3ae.push(escape(prop)+"="+escape(_3af[prop]));
+for(var prop in _3ac){
+_3ab.push(escape(prop)+"="+escape(_3ac[prop]));
 }
-_3b0=_3ae.join("&");
+_3ad=_3ab.join("&");
 }
-dojo.io.cookie.setCookie(name,_3b0,days,path,_3ab,_3ac);
+dojo.io.cookie.setCookie(name,_3ad,days,path,_3a8,_3a9);
 };
 dojo.io.cookie.getObjectCookie=function(name){
-var _3b3=null,_3b4=dojo.io.cookie.getCookie(name);
-if(_3b4){
-_3b3={};
-var _3b5=_3b4.split("&");
-for(var i=0;i<_3b5.length;i++){
-var pair=_3b5[i].split("=");
-var _3b8=pair[1];
-if(isNaN(_3b8)){
-_3b8=unescape(pair[1]);
+var _3b0=null,_3b1=dojo.io.cookie.getCookie(name);
+if(_3b1){
+_3b0={};
+var _3b2=_3b1.split("&");
+for(var i=0;i<_3b2.length;i++){
+var pair=_3b2[i].split("=");
+var _3b5=pair[1];
+if(isNaN(_3b5)){
+_3b5=unescape(pair[1]);
 }
-_3b3[unescape(pair[0])]=_3b8;
+_3b0[unescape(pair[0])]=_3b5;
 }
 }
-return _3b3;
+return _3b0;
 };
 dojo.io.cookie.isSupported=function(){
 if(typeof navigator.cookieEnabled!="boolean"){
 dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__","CookiesAllowed",90,null);
-var _3b9=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
-navigator.cookieEnabled=(_3b9=="CookiesAllowed");
+var _3b6=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
+navigator.cookieEnabled=(_3b6=="CookiesAllowed");
 if(navigator.cookieEnabled){
 this.deleteCookie("__TestingYourBrowserForCookieSupport__");
 }
@@ -19216,17 +16198,18 @@
 if(!dojo.io.cookies){
 dojo.io.cookies=dojo.io.cookie;
 }
+dojo.kwCompoundRequire({common:["dojo.io.common"],rhino:["dojo.io.RhinoIO"],browser:["dojo.io.BrowserIO","dojo.io.cookie"],dashboard:["dojo.io.BrowserIO","dojo.io.cookie"]});
 dojo.provide("dojo.io.*");
 dojo.provide("dojo.io");
 dojo.deprecated("dojo.io","replaced by dojo.io.*","0.5");
 dojo.provide("dojo.AdapterRegistry");
-dojo.AdapterRegistry=function(_3ba){
+dojo.AdapterRegistry=function(_3b7){
 this.pairs=[];
-this.returnWrappers=_3ba||false;
+this.returnWrappers=_3b7||false;
 };
-dojo.lang.extend(dojo.AdapterRegistry,{register:function(name,_3bc,wrap,_3be,_3bf){
-var type=(_3bf)?"unshift":"push";
-this.pairs[type]([name,_3bc,wrap,_3be]);
+dojo.lang.extend(dojo.AdapterRegistry,{register:function(name,_3b9,wrap,_3bb,_3bc){
+var type=(_3bc)?"unshift":"push";
+this.pairs[type]([name,_3b9,wrap,_3bb]);
 },match:function(){
 for(var i=0;i<this.pairs.length;i++){
 var pair=this.pairs[i];
@@ -19250,8 +16233,8 @@
 return false;
 }});
 dojo.provide("dojo.json");
-dojo.json={jsonRegistry:new dojo.AdapterRegistry(),register:function(name,_3c7,wrap,_3c9){
-dojo.json.jsonRegistry.register(name,_3c7,wrap,_3c9);
+dojo.json={jsonRegistry:new dojo.AdapterRegistry(),register:function(name,_3c4,wrap,_3c6){
+dojo.json.jsonRegistry.register(name,_3c4,wrap,_3c6);
 },evalJson:function(json){
 try{
 return eval("("+json+")");
@@ -19261,11 +16244,11 @@
 return json;
 }
 },serialize:function(o){
-var _3cc=typeof (o);
-if(_3cc=="undefined"){
+var _3c9=typeof (o);
+if(_3c9=="undefined"){
 return "undefined";
 }else{
-if((_3cc=="number")||(_3cc=="boolean")){
+if((_3c9=="number")||(_3c9=="boolean")){
 return o+"";
 }else{
 if(o===null){
@@ -19273,24 +16256,24 @@
 }
 }
 }
-if(_3cc=="string"){
+if(_3c9=="string"){
 return dojo.string.escapeString(o);
 }
 var me=arguments.callee;
-var _3ce;
+var _3cb;
 if(typeof (o.__json__)=="function"){
-_3ce=o.__json__();
-if(o!==_3ce){
-return me(_3ce);
+_3cb=o.__json__();
+if(o!==_3cb){
+return me(_3cb);
 }
 }
 if(typeof (o.json)=="function"){
-_3ce=o.json();
-if(o!==_3ce){
-return me(_3ce);
+_3cb=o.json();
+if(o!==_3cb){
+return me(_3cb);
 }
 }
-if(_3cc!="function"&&typeof (o.length)=="number"){
+if(_3c9!="function"&&typeof (o.length)=="number"){
 var res=[];
 for(var i=0;i<o.length;i++){
 var val=me(o[i]);
@@ -19303,22 +16286,22 @@
 }
 try{
 window.o=o;
-_3ce=dojo.json.jsonRegistry.match(o);
-return me(_3ce);
+_3cb=dojo.json.jsonRegistry.match(o);
+return me(_3cb);
 }
 catch(e){
 }
-if(_3cc=="function"){
+if(_3c9=="function"){
 return null;
 }
 res=[];
 for(var k in o){
-var _3d3;
+var _3d0;
 if(typeof (k)=="number"){
-_3d3="\""+k+"\"";
+_3d0="\""+k+"\"";
 }else{
 if(typeof (k)=="string"){
-_3d3=dojo.string.escapeString(k);
+_3d0=dojo.string.escapeString(k);
 }else{
 continue;
 }
@@ -19327,7 +16310,7 @@
 if(typeof (val)!="string"){
 continue;
 }
-res.push(_3d3+":"+val);
+res.push(_3d0+":"+val);
 }
 return "{"+res.join(",")+"}";
 }};
@@ -19348,24 +16331,24 @@
 return t;
 };
 dojo.html.getViewport=function(){
-var _3d6=dojo.global();
-var _3d7=dojo.doc();
+var _3d3=dojo.global();
+var _3d4=dojo.doc();
 var w=0;
 var h=0;
 if(dojo.render.html.mozilla){
-w=_3d7.documentElement.clientWidth;
-h=_3d6.innerHeight;
+w=_3d4.documentElement.clientWidth;
+h=_3d3.innerHeight;
 }else{
-if(!dojo.render.html.opera&&_3d6.innerWidth){
-w=_3d6.innerWidth;
-h=_3d6.innerHeight;
+if(!dojo.render.html.opera&&_3d3.innerWidth){
+w=_3d3.innerWidth;
+h=_3d3.innerHeight;
 }else{
-if(!dojo.render.html.opera&&dojo.exists(_3d7,"documentElement.clientWidth")){
-var w2=_3d7.documentElement.clientWidth;
+if(!dojo.render.html.opera&&dojo.exists(_3d4,"documentElement.clientWidth")){
+var w2=_3d4.documentElement.clientWidth;
 if(!w||w2&&w2<w){
 w=w2;
 }
-h=_3d7.documentElement.clientHeight;
+h=_3d4.documentElement.clientHeight;
 }else{
 if(dojo.body().clientWidth){
 w=dojo.body().clientWidth;
@@ -19377,23 +16360,23 @@
 return {width:w,height:h};
 };
 dojo.html.getScroll=function(){
-var _3db=dojo.global();
-var _3dc=dojo.doc();
-var top=_3db.pageYOffset||_3dc.documentElement.scrollTop||dojo.body().scrollTop||0;
-var left=_3db.pageXOffset||_3dc.documentElement.scrollLeft||dojo.body().scrollLeft||0;
+var _3d8=dojo.global();
+var _3d9=dojo.doc();
+var top=_3d8.pageYOffset||_3d9.documentElement.scrollTop||dojo.body().scrollTop||0;
+var left=_3d8.pageXOffset||_3d9.documentElement.scrollLeft||dojo.body().scrollLeft||0;
 return {top:top,left:left,offset:{x:left,y:top}};
 };
 dojo.html.getParentByType=function(node,type){
-var _3e1=dojo.doc();
-var _3e2=dojo.byId(node);
+var _3de=dojo.doc();
+var _3df=dojo.byId(node);
 type=type.toLowerCase();
-while((_3e2)&&(_3e2.nodeName.toLowerCase()!=type)){
-if(_3e2==(_3e1["body"]||_3e1["documentElement"])){
+while((_3df)&&(_3df.nodeName.toLowerCase()!=type)){
+if(_3df==(_3de["body"]||_3de["documentElement"])){
 return null;
 }
-_3e2=_3e2.parentNode;
+_3df=_3df.parentNode;
 }
-return _3e2;
+return _3df;
 };
 dojo.html.getAttribute=function(node,attr){
 node=dojo.byId(node);
@@ -19426,17 +16409,17 @@
 };
 dojo.html.getCursorPosition=function(e){
 e=e||dojo.global().event;
-var _3ea={x:0,y:0};
+var _3e7={x:0,y:0};
 if(e.pageX||e.pageY){
-_3ea.x=e.pageX;
-_3ea.y=e.pageY;
+_3e7.x=e.pageX;
+_3e7.y=e.pageY;
 }else{
 var de=dojo.doc().documentElement;
 var db=dojo.body();
-_3ea.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
-_3ea.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
+_3e7.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
+_3e7.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
 }
-return _3ea;
+return _3e7;
 };
 dojo.html.isTag=function(node){
 node=dojo.byId(node);
@@ -19452,9 +16435,9 @@
 if(dojo.render.html.ie&&!dojo.render.html.ie70){
 if(window.location.href.substr(0,6).toLowerCase()!="https:"){
 (function(){
-var _3ef=dojo.doc().createElement("script");
-_3ef.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
-dojo.doc().getElementsByTagName("head")[0].appendChild(_3ef);
+var _3ec=dojo.doc().createElement("script");
+_3ec.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
+dojo.doc().getElementsByTagName("head")[0].appendChild(_3ec);
 })();
 }
 }else{
@@ -19462,20 +16445,20 @@
 return doc.createElement(tag);
 };
 }
-dojo.html._callDeprecated=function(_3f2,_3f3,args,_3f5,_3f6){
-dojo.deprecated("dojo.html."+_3f2,"replaced by dojo.html."+_3f3+"("+(_3f5?"node, {"+_3f5+": "+_3f5+"}":"")+")"+(_3f6?"."+_3f6:""),"0.5");
-var _3f7=[];
-if(_3f5){
-var _3f8={};
-_3f8[_3f5]=args[1];
-_3f7.push(args[0]);
-_3f7.push(_3f8);
+dojo.html._callDeprecated=function(_3ef,_3f0,args,_3f2,_3f3){
+dojo.deprecated("dojo.html."+_3ef,"replaced by dojo.html."+_3f0+"("+(_3f2?"node, {"+_3f2+": "+_3f2+"}":"")+")"+(_3f3?"."+_3f3:""),"0.5");
+var _3f4=[];
+if(_3f2){
+var _3f5={};
+_3f5[_3f2]=args[1];
+_3f4.push(args[0]);
+_3f4.push(_3f5);
 }else{
-_3f7=args;
+_3f4=args;
 }
-var ret=dojo.html[_3f3].apply(dojo.html,args);
-if(_3f6){
-return ret[_3f6];
+var ret=dojo.html[_3f0].apply(dojo.html,args);
+if(_3f3){
+return ret[_3f3];
 }else{
 return ret;
 }
@@ -19503,15 +16486,20 @@
 this.dojoUri=function(uri){
 return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(),uri);
 };
-this.moduleUri=function(_3fb,uri){
-var loc=dojo.hostenv.getModuleSymbols(_3fb).join("/");
+this.moduleUri=function(_3f8,uri){
+var loc=dojo.hostenv.getModuleSymbols(_3f8).join("/");
 if(!loc){
 return null;
 }
 if(loc.lastIndexOf("/")!=loc.length-1){
 loc+="/";
 }
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri()+loc,uri);
+var _3fb=loc.indexOf(":");
+var _3fc=loc.indexOf("/");
+if(loc.charAt(0)!="/"&&(_3fb==-1||_3fb>_3fc)){
+loc=dojo.hostenv.getBaseScriptUri()+loc;
+}
+return new dojo.uri.Uri(loc,uri);
 };
 this.Uri=function(){
 var uri=arguments[0];
@@ -19519,20 +16507,20 @@
 if(!arguments[i]){
 continue;
 }
-var _400=new dojo.uri.Uri(arguments[i].toString());
-var _401=new dojo.uri.Uri(uri.toString());
-if((_400.path=="")&&(_400.scheme==null)&&(_400.authority==null)&&(_400.query==null)){
-if(_400.fragment!=null){
-_401.fragment=_400.fragment;
+var _3ff=new dojo.uri.Uri(arguments[i].toString());
+var _400=new dojo.uri.Uri(uri.toString());
+if((_3ff.path=="")&&(_3ff.scheme==null)&&(_3ff.authority==null)&&(_3ff.query==null)){
+if(_3ff.fragment!=null){
+_400.fragment=_3ff.fragment;
 }
-_400=_401;
+_3ff=_400;
 }else{
-if(_400.scheme==null){
-_400.scheme=_401.scheme;
-if(_400.authority==null){
-_400.authority=_401.authority;
-if(_400.path.charAt(0)!="/"){
-var path=_401.path.substring(0,_401.path.lastIndexOf("/")+1)+_400.path;
+if(_3ff.scheme==null){
+_3ff.scheme=_400.scheme;
+if(_3ff.authority==null){
+_3ff.authority=_400.authority;
+if(_3ff.path.charAt(0)!="/"){
+var path=_400.path.substring(0,_400.path.lastIndexOf("/")+1)+_3ff.path;
 var segs=path.split("/");
 for(var j=0;j<segs.length;j++){
 if(segs[j]=="."){
@@ -19554,37 +16542,37 @@
 }
 }
 }
-_400.path=segs.join("/");
+_3ff.path=segs.join("/");
 }
 }
 }
 }
 uri="";
-if(_400.scheme!=null){
-uri+=_400.scheme+":";
+if(_3ff.scheme!=null){
+uri+=_3ff.scheme+":";
 }
-if(_400.authority!=null){
-uri+="//"+_400.authority;
+if(_3ff.authority!=null){
+uri+="//"+_3ff.authority;
 }
-uri+=_400.path;
-if(_400.query!=null){
-uri+="?"+_400.query;
+uri+=_3ff.path;
+if(_3ff.query!=null){
+uri+="?"+_3ff.query;
 }
-if(_400.fragment!=null){
-uri+="#"+_400.fragment;
+if(_3ff.fragment!=null){
+uri+="#"+_3ff.fragment;
 }
 }
 this.uri=uri.toString();
-var _405="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
-var r=this.uri.match(new RegExp(_405));
+var _404="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
+var r=this.uri.match(new RegExp(_404));
 this.scheme=r[2]||(r[1]?"":null);
 this.authority=r[4]||(r[3]?"":null);
 this.path=r[5];
 this.query=r[7]||(r[6]?"":null);
 this.fragment=r[9]||(r[8]?"":null);
 if(this.authority!=null){
-_405="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
-r=this.authority.match(new RegExp(_405));
+_404="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
+r=this.authority.match(new RegExp(_404));
 this.user=r[3]||null;
 this.password=r[4]||null;
 this.host=r[5];
@@ -19615,29 +16603,29 @@
 var c=dojo.html.getClass(node);
 return (c=="")?[]:c.split(/\s+/g);
 };
-dojo.html.hasClass=function(node,_40c){
-return (new RegExp("(^|\\s+)"+_40c+"(\\s+|$)")).test(dojo.html.getClass(node));
+dojo.html.hasClass=function(node,_40b){
+return (new RegExp("(^|\\s+)"+_40b+"(\\s+|$)")).test(dojo.html.getClass(node));
 };
-dojo.html.prependClass=function(node,_40e){
-_40e+=" "+dojo.html.getClass(node);
-return dojo.html.setClass(node,_40e);
+dojo.html.prependClass=function(node,_40d){
+_40d+=" "+dojo.html.getClass(node);
+return dojo.html.setClass(node,_40d);
 };
-dojo.html.addClass=function(node,_410){
-if(dojo.html.hasClass(node,_410)){
+dojo.html.addClass=function(node,_40f){
+if(dojo.html.hasClass(node,_40f)){
 return false;
 }
-_410=(dojo.html.getClass(node)+" "+_410).replace(/^\s+|\s+$/g,"");
-return dojo.html.setClass(node,_410);
+_40f=(dojo.html.getClass(node)+" "+_40f).replace(/^\s+|\s+$/g,"");
+return dojo.html.setClass(node,_40f);
 };
-dojo.html.setClass=function(node,_412){
+dojo.html.setClass=function(node,_411){
 node=dojo.byId(node);
-var cs=new String(_412);
+var cs=new String(_411);
 try{
 if(typeof node.className=="string"){
 node.className=cs;
 }else{
 if(node.setAttribute){
-node.setAttribute("class",_412);
+node.setAttribute("class",_411);
 node.className=cs;
 }else{
 return false;
@@ -19649,207 +16637,220 @@
 }
 return true;
 };
-dojo.html.removeClass=function(node,_415,_416){
+dojo.html.removeClass=function(node,_414,_415){
 try{
-if(!_416){
-var _417=dojo.html.getClass(node).replace(new RegExp("(^|\\s+)"+_415+"(\\s+|$)"),"$1$2");
+if(!_415){
+var _416=dojo.html.getClass(node).replace(new RegExp("(^|\\s+)"+_414+"(\\s+|$)"),"$1$2");
 }else{
-var _417=dojo.html.getClass(node).replace(_415,"");
+var _416=dojo.html.getClass(node).replace(_414,"");
 }
-dojo.html.setClass(node,_417);
+dojo.html.setClass(node,_416);
 }
 catch(e){
 dojo.debug("dojo.html.removeClass() failed",e);
 }
 return true;
 };
-dojo.html.replaceClass=function(node,_419,_41a){
-dojo.html.removeClass(node,_41a);
-dojo.html.addClass(node,_419);
+dojo.html.replaceClass=function(node,_418,_419){
+dojo.html.removeClass(node,_419);
+dojo.html.addClass(node,_418);
 };
 dojo.html.classMatchType={ContainsAll:0,ContainsAny:1,IsOnly:2};
-dojo.html.getElementsByClass=function(_41b,_41c,_41d,_41e,_41f){
-_41f=false;
-var _420=dojo.doc();
-_41c=dojo.byId(_41c)||_420;
-var _421=_41b.split(/\s+/g);
-var _422=[];
-if(_41e!=1&&_41e!=2){
-_41e=0;
+dojo.html.getElementsByClass=function(_41a,_41b,_41c,_41d,_41e){
+_41e=false;
+var _41f=dojo.doc();
+_41b=dojo.byId(_41b)||_41f;
+var _420=_41a.split(/\s+/g);
+var _421=[];
+if(_41d!=1&&_41d!=2){
+_41d=0;
 }
-var _423=new RegExp("(\\s|^)(("+_421.join(")|(")+"))(\\s|$)");
-var _424=_421.join(" ").length;
-var _425=[];
-if(!_41f&&_420.evaluate){
-var _426=".//"+(_41d||"*")+"[contains(";
-if(_41e!=dojo.html.classMatchType.ContainsAny){
-_426+="concat(' ', at class,' '), ' "+_421.join(" ') and contains(concat(' ', at class,' '), ' ")+" ')";
-if(_41e==2){
-_426+=" and string-length(@class)="+_424+"]";
+var _422=new RegExp("(\\s|^)(("+_420.join(")|(")+"))(\\s|$)");
+var _423=_420.join(" ").length;
+var _424=[];
+if(!_41e&&_41f.evaluate){
+var _425=".//"+(_41c||"*")+"[contains(";
+if(_41d!=dojo.html.classMatchType.ContainsAny){
+_425+="concat(' ', at class,' '), ' "+_420.join(" ') and contains(concat(' ', at class,' '), ' ")+" ')";
+if(_41d==2){
+_425+=" and string-length(@class)="+_423+"]";
 }else{
-_426+="]";
+_425+="]";
 }
 }else{
-_426+="concat(' ', at class,' '), ' "+_421.join(" ') or contains(concat(' ', at class,' '), ' ")+" ')]";
+_425+="concat(' ', at class,' '), ' "+_420.join(" ') or contains(concat(' ', at class,' '), ' ")+" ')]";
 }
-var _427=_420.evaluate(_426,_41c,null,XPathResult.ANY_TYPE,null);
-var _428=_427.iterateNext();
-while(_428){
+var _426=_41f.evaluate(_425,_41b,null,XPathResult.ANY_TYPE,null);
+var _427=_426.iterateNext();
+while(_427){
 try{
-_425.push(_428);
-_428=_427.iterateNext();
+_424.push(_427);
+_427=_426.iterateNext();
 }
 catch(e){
 break;
 }
 }
-return _425;
+return _424;
 }else{
-if(!_41d){
-_41d="*";
+if(!_41c){
+_41c="*";
 }
-_425=_41c.getElementsByTagName(_41d);
+_424=_41b.getElementsByTagName(_41c);
 var node,i=0;
 outer:
-while(node=_425[i++]){
-var _42b=dojo.html.getClasses(node);
-if(_42b.length==0){
+while(node=_424[i++]){
+var _42a=dojo.html.getClasses(node);
+if(_42a.length==0){
 continue outer;
 }
-var _42c=0;
-for(var j=0;j<_42b.length;j++){
-if(_423.test(_42b[j])){
-if(_41e==dojo.html.classMatchType.ContainsAny){
-_422.push(node);
+var _42b=0;
+for(var j=0;j<_42a.length;j++){
+if(_422.test(_42a[j])){
+if(_41d==dojo.html.classMatchType.ContainsAny){
+_421.push(node);
 continue outer;
 }else{
-_42c++;
+_42b++;
 }
 }else{
-if(_41e==dojo.html.classMatchType.IsOnly){
+if(_41d==dojo.html.classMatchType.IsOnly){
 continue outer;
 }
 }
 }
-if(_42c==_421.length){
-if((_41e==dojo.html.classMatchType.IsOnly)&&(_42c==_42b.length)){
-_422.push(node);
+if(_42b==_420.length){
+if((_41d==dojo.html.classMatchType.IsOnly)&&(_42b==_42a.length)){
+_421.push(node);
 }else{
-if(_41e==dojo.html.classMatchType.ContainsAll){
-_422.push(node);
+if(_41d==dojo.html.classMatchType.ContainsAll){
+_421.push(node);
 }
 }
 }
 }
-return _422;
+return _421;
 }
 };
 dojo.html.getElementsByClassName=dojo.html.getElementsByClass;
-dojo.html.toCamelCase=function(_42e){
-var arr=_42e.split("-"),cc=arr[0];
+dojo.html.toCamelCase=function(_42d){
+var arr=_42d.split("-"),cc=arr[0];
 for(var i=1;i<arr.length;i++){
 cc+=arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
 }
 return cc;
 };
-dojo.html.toSelectorCase=function(_432){
-return _432.replace(/([A-Z])/g,"-$1").toLowerCase();
+dojo.html.toSelectorCase=function(_431){
+return _431.replace(/([A-Z])/g,"-$1").toLowerCase();
 };
-dojo.html.getComputedStyle=function(node,_434,_435){
+if(dojo.render.html.ie){
+dojo.html.getComputedStyle=function(node,_433,_434){
 node=dojo.byId(node);
-var _434=dojo.html.toSelectorCase(_434);
-var _436=dojo.html.toCamelCase(_434);
 if(!node||!node.style){
-return _435;
-}else{
-if(document.defaultView&&dojo.html.isDescendantOf(node,node.ownerDocument)){
-try{
-var cs=document.defaultView.getComputedStyle(node,"");
-if(cs){
-return cs.getPropertyValue(_434);
+return _434;
 }
-}
-catch(e){
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_434);
+return node.currentStyle[dojo.html.toCamelCase(_433)];
+};
+dojo.html.getComputedStyles=function(node){
+return node.currentStyle;
+};
 }else{
-return _435;
+dojo.html.getComputedStyle=function(node,_437,_438){
+node=dojo.byId(node);
+if(!node||!node.style){
+return _438;
 }
-}
-}else{
-if(node.currentStyle){
-return node.currentStyle[_436];
-}
-}
-}
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_434);
-}else{
-return _435;
-}
+var s=document.defaultView.getComputedStyle(node,null);
+return (s&&s[dojo.html.toCamelCase(_437)])||"";
 };
-dojo.html.getStyleProperty=function(node,_439){
+dojo.html.getComputedStyles=function(node){
+return document.defaultView.getComputedStyle(node,null);
+};
+}
+dojo.html.getStyleProperty=function(node,_43c){
 node=dojo.byId(node);
-return (node&&node.style?node.style[dojo.html.toCamelCase(_439)]:undefined);
+return (node&&node.style?node.style[dojo.html.toCamelCase(_43c)]:undefined);
 };
-dojo.html.getStyle=function(node,_43b){
-var _43c=dojo.html.getStyleProperty(node,_43b);
-return (_43c?_43c:dojo.html.getComputedStyle(node,_43b));
+dojo.html.getStyle=function(node,_43e){
+var _43f=dojo.html.getStyleProperty(node,_43e);
+return (_43f?_43f:dojo.html.getComputedStyle(node,_43e));
 };
-dojo.html.setStyle=function(node,_43e,_43f){
+dojo.html.setStyle=function(node,_441,_442){
 node=dojo.byId(node);
 if(node&&node.style){
-var _440=dojo.html.toCamelCase(_43e);
-node.style[_440]=_43f;
+var _443=dojo.html.toCamelCase(_441);
+node.style[_443]=_442;
 }
 };
-dojo.html.setStyleText=function(_441,text){
+dojo.html.setStyleText=function(_444,text){
 try{
-_441.style.cssText=text;
+_444.style.cssText=text;
 }
 catch(e){
-_441.setAttribute("style",text);
+_444.setAttribute("style",text);
 }
 };
-dojo.html.copyStyle=function(_443,_444){
-if(!_444.style.cssText){
-_443.setAttribute("style",_444.getAttribute("style"));
+dojo.html.copyStyle=function(_446,_447){
+if(!_447.style.cssText){
+_446.setAttribute("style",_447.getAttribute("style"));
 }else{
-_443.style.cssText=_444.style.cssText;
+_446.style.cssText=_447.style.cssText;
 }
-dojo.html.addClass(_443,dojo.html.getClass(_444));
+dojo.html.addClass(_446,dojo.html.getClass(_447));
 };
-dojo.html.getUnitValue=function(node,_446,_447){
-var s=dojo.html.getComputedStyle(node,_446);
-if((!s)||((s=="auto")&&(_447))){
+dojo.html.getUnitValue=function(node,_449,_44a){
+var s=dojo.html.getComputedStyle(node,_449);
+if((!s)||((s=="auto")&&(_44a))){
 return {value:0,units:"px"};
 }
-var _449=s.match(/(\-?[\d.]+)([a-z%]*)/i);
-if(!_449){
+var _44c=s.match(/(\-?[\d.]+)([a-z%]*)/i);
+if(!_44c){
 return dojo.html.getUnitValue.bad;
 }
-return {value:Number(_449[1]),units:_449[2].toLowerCase()};
+return {value:Number(_44c[1]),units:_44c[2].toLowerCase()};
 };
 dojo.html.getUnitValue.bad={value:NaN,units:""};
-dojo.html.getPixelValue=function(node,_44b,_44c){
-var _44d=dojo.html.getUnitValue(node,_44b,_44c);
-if(isNaN(_44d.value)){
+if(dojo.render.html.ie){
+dojo.html.toPixelValue=function(_44d,_44e){
+if(!_44e){
 return 0;
 }
-if((_44d.value)&&(_44d.units!="px")){
-return NaN;
+if(_44e.slice(-2)=="px"){
+return parseFloat(_44e);
 }
-return _44d.value;
+var _44f=0;
+with(_44d){
+var _450=style.left;
+var _451=runtimeStyle.left;
+runtimeStyle.left=currentStyle.left;
+try{
+style.left=_44e||0;
+_44f=style.pixelLeft;
+style.left=_450;
+runtimeStyle.left=_451;
+}
+catch(e){
+}
+}
+return _44f;
 };
-dojo.html.setPositivePixelValue=function(node,_44f,_450){
-if(isNaN(_450)){
+}else{
+dojo.html.toPixelValue=function(_452,_453){
+return (_453&&(_453.slice(-2)=="px")?parseFloat(_453):0);
+};
+}
+dojo.html.getPixelValue=function(node,_455,_456){
+return dojo.html.toPixelValue(node,dojo.html.getComputedStyle(node,_455));
+};
+dojo.html.setPositivePixelValue=function(node,_458,_459){
+if(isNaN(_459)){
 return false;
 }
-node.style[_44f]=Math.max(0,_450)+"px";
+node.style[_458]=Math.max(0,_459)+"px";
 return true;
 };
 dojo.html.styleSheet=null;
-dojo.html.insertCssRule=function(_451,_452,_453){
+dojo.html.insertCssRule=function(_45a,_45b,_45c){
 if(!dojo.html.styleSheet){
 if(document.createStyleSheet){
 dojo.html.styleSheet=document.createStyleSheet();
@@ -19863,161 +16864,161 @@
 }
 if(arguments.length<3){
 if(dojo.html.styleSheet.cssRules){
-_453=dojo.html.styleSheet.cssRules.length;
+_45c=dojo.html.styleSheet.cssRules.length;
 }else{
 if(dojo.html.styleSheet.rules){
-_453=dojo.html.styleSheet.rules.length;
+_45c=dojo.html.styleSheet.rules.length;
 }else{
 return null;
 }
 }
 }
 if(dojo.html.styleSheet.insertRule){
-var rule=_451+" { "+_452+" }";
-return dojo.html.styleSheet.insertRule(rule,_453);
+var rule=_45a+" { "+_45b+" }";
+return dojo.html.styleSheet.insertRule(rule,_45c);
 }else{
 if(dojo.html.styleSheet.addRule){
-return dojo.html.styleSheet.addRule(_451,_452,_453);
+return dojo.html.styleSheet.addRule(_45a,_45b,_45c);
 }else{
 return null;
 }
 }
 };
-dojo.html.removeCssRule=function(_455){
+dojo.html.removeCssRule=function(_45e){
 if(!dojo.html.styleSheet){
 dojo.debug("no stylesheet defined for removing rules");
 return false;
 }
 if(dojo.render.html.ie){
-if(!_455){
-_455=dojo.html.styleSheet.rules.length;
-dojo.html.styleSheet.removeRule(_455);
+if(!_45e){
+_45e=dojo.html.styleSheet.rules.length;
+dojo.html.styleSheet.removeRule(_45e);
 }
 }else{
 if(document.styleSheets[0]){
-if(!_455){
-_455=dojo.html.styleSheet.cssRules.length;
+if(!_45e){
+_45e=dojo.html.styleSheet.cssRules.length;
 }
-dojo.html.styleSheet.deleteRule(_455);
+dojo.html.styleSheet.deleteRule(_45e);
 }
 }
 return true;
 };
 dojo.html._insertedCssFiles=[];
-dojo.html.insertCssFile=function(URI,doc,_458,_459){
+dojo.html.insertCssFile=function(URI,doc,_461,_462){
 if(!URI){
 return;
 }
 if(!doc){
 doc=document;
 }
-var _45a=dojo.hostenv.getText(URI,false,_459);
-if(_45a===null){
+var _463=dojo.hostenv.getText(URI,false,_462);
+if(_463===null){
 return;
 }
-_45a=dojo.html.fixPathsInCssText(_45a,URI);
-if(_458){
+_463=dojo.html.fixPathsInCssText(_463,URI);
+if(_461){
 var idx=-1,node,ent=dojo.html._insertedCssFiles;
 for(var i=0;i<ent.length;i++){
-if((ent[i].doc==doc)&&(ent[i].cssText==_45a)){
+if((ent[i].doc==doc)&&(ent[i].cssText==_463)){
 idx=i;
 node=ent[i].nodeRef;
 break;
 }
 }
 if(node){
-var _45f=doc.getElementsByTagName("style");
-for(var i=0;i<_45f.length;i++){
-if(_45f[i]==node){
+var _468=doc.getElementsByTagName("style");
+for(var i=0;i<_468.length;i++){
+if(_468[i]==node){
 return;
 }
 }
 dojo.html._insertedCssFiles.shift(idx,1);
 }
 }
-var _460=dojo.html.insertCssText(_45a,doc);
-dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_45a,"nodeRef":_460});
-if(_460&&djConfig.isDebug){
-_460.setAttribute("dbgHref",URI);
+var _469=dojo.html.insertCssText(_463,doc);
+dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_463,"nodeRef":_469});
+if(_469&&djConfig.isDebug){
+_469.setAttribute("dbgHref",URI);
 }
-return _460;
+return _469;
 };
-dojo.html.insertCssText=function(_461,doc,URI){
-if(!_461){
+dojo.html.insertCssText=function(_46a,doc,URI){
+if(!_46a){
 return;
 }
 if(!doc){
 doc=document;
 }
 if(URI){
-_461=dojo.html.fixPathsInCssText(_461,URI);
+_46a=dojo.html.fixPathsInCssText(_46a,URI);
 }
-var _464=doc.createElement("style");
-_464.setAttribute("type","text/css");
+var _46d=doc.createElement("style");
+_46d.setAttribute("type","text/css");
 var head=doc.getElementsByTagName("head")[0];
 if(!head){
 dojo.debug("No head tag in document, aborting styles");
 return;
 }else{
-head.appendChild(_464);
+head.appendChild(_46d);
 }
-if(_464.styleSheet){
-var _466=function(){
+if(_46d.styleSheet){
+var _46f=function(){
 try{
-_464.styleSheet.cssText=_461;
+_46d.styleSheet.cssText=_46a;
 }
 catch(e){
 dojo.debug(e);
 }
 };
-if(_464.styleSheet.disabled){
-setTimeout(_466,10);
+if(_46d.styleSheet.disabled){
+setTimeout(_46f,10);
 }else{
-_466();
+_46f();
 }
 }else{
-var _467=doc.createTextNode(_461);
-_464.appendChild(_467);
+var _470=doc.createTextNode(_46a);
+_46d.appendChild(_470);
 }
-return _464;
+return _46d;
 };
-dojo.html.fixPathsInCssText=function(_468,URI){
-if(!_468||!URI){
+dojo.html.fixPathsInCssText=function(_471,URI){
+if(!_471||!URI){
 return;
 }
-var _46a,str="",url="",_46d="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
-var _46e=new RegExp("url\\(\\s*("+_46d+")\\s*\\)");
-var _46f=/(file|https?|ftps?):\/\//;
-regexTrim=new RegExp("^[\\s]*(['\"]?)("+_46d+")\\1[\\s]*?$");
+var _473,str="",url="",_476="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
+var _477=new RegExp("url\\(\\s*("+_476+")\\s*\\)");
+var _478=/(file|https?|ftps?):\/\//;
+regexTrim=new RegExp("^[\\s]*(['\"]?)("+_476+")\\1[\\s]*?$");
 if(dojo.render.html.ie55||dojo.render.html.ie60){
-var _470=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_46d+")['\"]");
-while(_46a=_470.exec(_468)){
-url=_46a[2].replace(regexTrim,"$2");
-if(!_46f.exec(url)){
+var _479=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_476+")['\"]");
+while(_473=_479.exec(_471)){
+url=_473[2].replace(regexTrim,"$2");
+if(!_478.exec(url)){
 url=(new dojo.uri.Uri(URI,url).toString());
 }
-str+=_468.substring(0,_46a.index)+"AlphaImageLoader("+_46a[1]+"src='"+url+"'";
-_468=_468.substr(_46a.index+_46a[0].length);
+str+=_471.substring(0,_473.index)+"AlphaImageLoader("+_473[1]+"src='"+url+"'";
+_471=_471.substr(_473.index+_473[0].length);
 }
-_468=str+_468;
+_471=str+_471;
 str="";
 }
-while(_46a=_46e.exec(_468)){
-url=_46a[1].replace(regexTrim,"$2");
-if(!_46f.exec(url)){
+while(_473=_477.exec(_471)){
+url=_473[1].replace(regexTrim,"$2");
+if(!_478.exec(url)){
 url=(new dojo.uri.Uri(URI,url).toString());
 }
-str+=_468.substring(0,_46a.index)+"url("+url+")";
-_468=_468.substr(_46a.index+_46a[0].length);
+str+=_471.substring(0,_473.index)+"url("+url+")";
+_471=_471.substr(_473.index+_473[0].length);
 }
-return str+_468;
+return str+_471;
 };
-dojo.html.setActiveStyleSheet=function(_471){
+dojo.html.setActiveStyleSheet=function(_47a){
 var i=0,a,els=dojo.doc().getElementsByTagName("link");
 while(a=els[i++]){
 if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")){
 a.disabled=true;
-if(a.getAttribute("title")==_471){
+if(a.getAttribute("title")==_47a){
 a.disabled=false;
 }
 }
@@ -20043,19 +17044,20 @@
 };
 dojo.html.applyBrowserClass=function(node){
 var drh=dojo.render.html;
-var _47d={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
-for(var p in _47d){
-if(_47d[p]){
+var _486={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
+for(var p in _486){
+if(_486[p]){
 dojo.html.addClass(node,p);
 }
 }
 };
+dojo.kwCompoundRequire({common:["dojo.html.common","dojo.html.style"]});
 dojo.provide("dojo.html.*");
 dojo.provide("dojo.html.display");
-dojo.html._toggle=function(node,_480,_481){
+dojo.html._toggle=function(node,_489,_48a){
 node=dojo.byId(node);
-_481(node,!_480(node));
-return _480(node);
+_48a(node,!_489(node));
+return _489(node);
 };
 dojo.html.show=function(node){
 node=dojo.byId(node);
@@ -20074,8 +17076,8 @@
 }
 dojo.html.setStyle(node,"display","none");
 };
-dojo.html.setShowing=function(node,_486){
-dojo.html[(_486?"show":"hide")](node);
+dojo.html.setShowing=function(node,_48f){
+dojo.html[(_48f?"show":"hide")](node);
 };
 dojo.html.isShowing=function(node){
 return (dojo.html.getStyleProperty(node,"display")!="none");
@@ -20091,8 +17093,8 @@
 return (tag in dojo.html.displayMap?dojo.html.displayMap[tag]:"block");
 }
 };
-dojo.html.setDisplay=function(node,_48c){
-dojo.html.setStyle(node,"display",((_48c instanceof String||typeof _48c=="string")?_48c:(_48c?dojo.html.suggestDisplayByTagName(node):"none")));
+dojo.html.setDisplay=function(node,_495){
+dojo.html.setStyle(node,"display",((_495 instanceof String||typeof _495=="string")?_495:(_495?dojo.html.suggestDisplayByTagName(node):"none")));
 };
 dojo.html.isDisplayed=function(node){
 return (dojo.html.getComputedStyle(node,"display")!="none");
@@ -20100,8 +17102,8 @@
 dojo.html.toggleDisplay=function(node){
 return dojo.html._toggle(node,dojo.html.isDisplayed,dojo.html.setDisplay);
 };
-dojo.html.setVisibility=function(node,_490){
-dojo.html.setStyle(node,"visibility",((_490 instanceof String||typeof _490=="string")?_490:(_490?"visible":"hidden")));
+dojo.html.setVisibility=function(node,_499){
+dojo.html.setStyle(node,"visibility",((_499 instanceof String||typeof _499=="string")?_499:(_499?"visible":"hidden")));
 };
 dojo.html.isVisible=function(node){
 return (dojo.html.getComputedStyle(node,"visibility")!="hidden");
@@ -20109,20 +17111,20 @@
 dojo.html.toggleVisibility=function(node){
 return dojo.html._toggle(node,dojo.html.isVisible,dojo.html.setVisibility);
 };
-dojo.html.setOpacity=function(node,_494,_495){
+dojo.html.setOpacity=function(node,_49d,_49e){
 node=dojo.byId(node);
 var h=dojo.render.html;
-if(!_495){
-if(_494>=1){
+if(!_49e){
+if(_49d>=1){
 if(h.ie){
 dojo.html.clearOpacity(node);
 return;
 }else{
-_494=0.999999;
+_49d=0.999999;
 }
 }else{
-if(_494<0){
-_494=0;
+if(_49d<0){
+_49d=0;
 }
 }
 }
@@ -20130,20 +17132,20 @@
 if(node.nodeName.toLowerCase()=="tr"){
 var tds=node.getElementsByTagName("td");
 for(var x=0;x<tds.length;x++){
-tds[x].style.filter="Alpha(Opacity="+_494*100+")";
+tds[x].style.filter="Alpha(Opacity="+_49d*100+")";
 }
 }
-node.style.filter="Alpha(Opacity="+_494*100+")";
+node.style.filter="Alpha(Opacity="+_49d*100+")";
 }else{
 if(h.moz){
-node.style.opacity=_494;
-node.style.MozOpacity=_494;
+node.style.opacity=_49d;
+node.style.MozOpacity=_49d;
 }else{
 if(h.safari){
-node.style.opacity=_494;
-node.style.KhtmlOpacity=_494;
+node.style.opacity=_49d;
+node.style.KhtmlOpacity=_49d;
 }else{
-node.style.opacity=_494;
+node.style.opacity=_49d;
 }
 }
 }
@@ -20190,73 +17192,73 @@
 if(!node){
 return 0;
 }
-var _4a1=0;
+var _4aa=0;
 while(node){
 if(dojo.html.getComputedStyle(node,"position")=="fixed"){
 return 0;
 }
 var val=node[prop];
 if(val){
-_4a1+=val-0;
+_4aa+=val-0;
 if(node==dojo.body()){
 break;
 }
 }
 node=node.parentNode;
 }
-return _4a1;
+return _4aa;
 };
-dojo.html.setStyleAttributes=function(node,_4a4){
+dojo.html.setStyleAttributes=function(node,_4ad){
 node=dojo.byId(node);
-var _4a5=_4a4.replace(/(;)?\s*$/,"").split(";");
-for(var i=0;i<_4a5.length;i++){
-var _4a7=_4a5[i].split(":");
-var name=_4a7[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
-var _4a9=_4a7[1].replace(/\s*$/,"").replace(/^\s*/,"");
+var _4ae=_4ad.replace(/(;)?\s*$/,"").split(";");
+for(var i=0;i<_4ae.length;i++){
+var _4b0=_4ae[i].split(":");
+var name=_4b0[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
+var _4b2=_4b0[1].replace(/\s*$/,"").replace(/^\s*/,"");
 switch(name){
 case "opacity":
-dojo.html.setOpacity(node,_4a9);
+dojo.html.setOpacity(node,_4b2);
 break;
 case "content-height":
-dojo.html.setContentBox(node,{height:_4a9});
+dojo.html.setContentBox(node,{height:_4b2});
 break;
 case "content-width":
-dojo.html.setContentBox(node,{width:_4a9});
+dojo.html.setContentBox(node,{width:_4b2});
 break;
 case "outer-height":
-dojo.html.setMarginBox(node,{height:_4a9});
+dojo.html.setMarginBox(node,{height:_4b2});
 break;
 case "outer-width":
-dojo.html.setMarginBox(node,{width:_4a9});
+dojo.html.setMarginBox(node,{width:_4b2});
 break;
 default:
-node.style[dojo.html.toCamelCase(name)]=_4a9;
+node.style[dojo.html.toCamelCase(name)]=_4b2;
 }
 }
 };
 dojo.html.boxSizing={MARGIN_BOX:"margin-box",BORDER_BOX:"border-box",PADDING_BOX:"padding-box",CONTENT_BOX:"content-box"};
-dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_4ab,_4ac){
+dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_4b4,_4b5){
 node=dojo.byId(node,node.ownerDocument);
 var ret={x:0,y:0};
 var bs=dojo.html.boxSizing;
-if(!_4ac){
-_4ac=bs.CONTENT_BOX;
+if(!_4b5){
+_4b5=bs.CONTENT_BOX;
 }
-var _4af=2;
-var _4b0;
-switch(_4ac){
+var _4b8=2;
+var _4b9;
+switch(_4b5){
 case bs.MARGIN_BOX:
-_4b0=3;
+_4b9=3;
 break;
 case bs.BORDER_BOX:
-_4b0=2;
+_4b9=2;
 break;
 case bs.PADDING_BOX:
 default:
-_4b0=1;
+_4b9=1;
 break;
 case bs.CONTENT_BOX:
-_4b0=0;
+_4b9=0;
 break;
 }
 var h=dojo.render.html;
@@ -20268,7 +17270,7 @@
 }
 }else{
 if(document.getBoxObjectFor){
-_4af=1;
+_4b8=1;
 try{
 var bo=document.getBoxObjectFor(node);
 ret.x=bo.x-dojo.html.sumAncestorProperties(node,"scrollLeft");
@@ -20278,11 +17280,11 @@
 }
 }else{
 if(node["offsetParent"]){
-var _4b4;
+var _4bd;
 if((h.safari)&&(node.style.getPropertyValue("position")=="absolute")&&(node.parentNode==db)){
-_4b4=db;
+_4bd=db;
 }else{
-_4b4=db.parentNode;
+_4bd=db.parentNode;
 }
 if(node.parentNode!=db){
 var nd=node;
@@ -20292,16 +17294,16 @@
 ret.x-=dojo.html.sumAncestorProperties(nd,"scrollLeft");
 ret.y-=dojo.html.sumAncestorProperties(nd,"scrollTop");
 }
-var _4b6=node;
+var _4bf=node;
 do{
-var n=_4b6["offsetLeft"];
+var n=_4bf["offsetLeft"];
 if(!h.opera||n>0){
 ret.x+=isNaN(n)?0:n;
 }
-var m=_4b6["offsetTop"];
+var m=_4bf["offsetTop"];
 ret.y+=isNaN(m)?0:m;
-_4b6=_4b6.offsetParent;
-}while((_4b6!=_4b4)&&(_4b6!=null));
+_4bf=_4bf.offsetParent;
+}while((_4bf!=_4bd)&&(_4bf!=null));
 }else{
 if(node["x"]&&node["y"]){
 ret.x+=isNaN(node.x)?0:node.x;
@@ -20310,22 +17312,22 @@
 }
 }
 }
-if(_4ab){
-var _4b9=dojo.html.getScroll();
-ret.y+=_4b9.top;
-ret.x+=_4b9.left;
+if(_4b4){
+var _4c2=dojo.html.getScroll();
+ret.y+=_4c2.top;
+ret.x+=_4c2.left;
 }
-var _4ba=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
-if(_4af>_4b0){
-for(var i=_4b0;i<_4af;++i){
-ret.y+=_4ba[i](node,"top");
-ret.x+=_4ba[i](node,"left");
+var _4c3=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
+if(_4b8>_4b9){
+for(var i=_4b9;i<_4b8;++i){
+ret.y+=_4c3[i](node,"top");
+ret.x+=_4c3[i](node,"left");
 }
 }else{
-if(_4af<_4b0){
-for(var i=_4b0;i>_4af;--i){
-ret.y-=_4ba[i-1](node,"top");
-ret.x-=_4ba[i-1](node,"left");
+if(_4b8<_4b9){
+for(var i=_4b9;i>_4b8;--i){
+ret.y-=_4c3[i-1](node,"top");
+ret.x-=_4c3[i-1](node,"left");
 }
 }
 }
@@ -20336,12 +17338,12 @@
 dojo.html.isPositionAbsolute=function(node){
 return (dojo.html.getComputedStyle(node,"position")=="absolute");
 };
-dojo.html._sumPixelValues=function(node,_4be,_4bf){
-var _4c0=0;
-for(var x=0;x<_4be.length;x++){
-_4c0+=dojo.html.getPixelValue(node,_4be[x],_4bf);
+dojo.html._sumPixelValues=function(node,_4c7,_4c8){
+var _4c9=0;
+for(var x=0;x<_4c7.length;x++){
+_4c9+=dojo.html.getPixelValue(node,_4c7[x],_4c8);
 }
-return _4c0;
+return _4c9;
 };
 dojo.html.getMargin=function(node){
 return {width:dojo.html._sumPixelValues(node,["margin-left","margin-right"],(dojo.html.getComputedStyle(node,"position")=="absolute")),height:dojo.html._sumPixelValues(node,["margin-top","margin-bottom"],(dojo.html.getComputedStyle(node,"position")=="absolute"))};
@@ -20363,13 +17365,13 @@
 };
 dojo.html.getPadBorder=function(node){
 var pad=dojo.html.getPadding(node);
-var _4cd=dojo.html.getBorder(node);
-return {width:pad.width+_4cd.width,height:pad.height+_4cd.height};
+var _4d6=dojo.html.getBorder(node);
+return {width:pad.width+_4d6.width,height:pad.height+_4d6.height};
 };
 dojo.html.getBoxSizing=function(node){
 var h=dojo.render.html;
 var bs=dojo.html.boxSizing;
-if(((h.ie)||(h.opera))&&node.nodeName!="IMG"){
+if(((h.ie)||(h.opera))&&node.nodeName.toLowerCase()!="img"){
 var cm=document["compatMode"];
 if((cm=="BackCompat")||(cm=="QuirksMode")){
 return bs.BORDER_BOX;
@@ -20380,12 +17382,15 @@
 if(arguments.length==0){
 node=document.documentElement;
 }
-var _4d2=dojo.html.getStyle(node,"-moz-box-sizing");
-if(!_4d2){
-_4d2=dojo.html.getStyle(node,"box-sizing");
+var _4db;
+if(!h.ie){
+_4db=dojo.html.getStyle(node,"-moz-box-sizing");
+if(!_4db){
+_4db=dojo.html.getStyle(node,"box-sizing");
 }
-return (_4d2?_4d2:bs.CONTENT_BOX);
 }
+return (_4db?_4db:bs.CONTENT_BOX);
+}
 };
 dojo.html.isBorderBox=function(node){
 return (dojo.html.getBoxSizing(node)==dojo.html.boxSizing.BORDER_BOX);
@@ -20396,53 +17401,53 @@
 };
 dojo.html.getPaddingBox=function(node){
 var box=dojo.html.getBorderBox(node);
-var _4d7=dojo.html.getBorder(node);
-return {width:box.width-_4d7.width,height:box.height-_4d7.height};
+var _4e0=dojo.html.getBorder(node);
+return {width:box.width-_4e0.width,height:box.height-_4e0.height};
 };
 dojo.html.getContentBox=function(node){
 node=dojo.byId(node);
-var _4d9=dojo.html.getPadBorder(node);
-return {width:node.offsetWidth-_4d9.width,height:node.offsetHeight-_4d9.height};
+var _4e2=dojo.html.getPadBorder(node);
+return {width:node.offsetWidth-_4e2.width,height:node.offsetHeight-_4e2.height};
 };
 dojo.html.setContentBox=function(node,args){
 node=dojo.byId(node);
-var _4dc=0;
-var _4dd=0;
+var _4e5=0;
+var _4e6=0;
 var isbb=dojo.html.isBorderBox(node);
-var _4df=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
+var _4e8=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
 var ret={};
 if(typeof args.width!="undefined"){
-_4dc=args.width+_4df.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_4dc);
+_4e5=args.width+_4e8.width;
+ret.width=dojo.html.setPositivePixelValue(node,"width",_4e5);
 }
 if(typeof args.height!="undefined"){
-_4dd=args.height+_4df.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_4dd);
+_4e6=args.height+_4e8.height;
+ret.height=dojo.html.setPositivePixelValue(node,"height",_4e6);
 }
 return ret;
 };
 dojo.html.getMarginBox=function(node){
-var _4e2=dojo.html.getBorderBox(node);
-var _4e3=dojo.html.getMargin(node);
-return {width:_4e2.width+_4e3.width,height:_4e2.height+_4e3.height};
+var _4eb=dojo.html.getBorderBox(node);
+var _4ec=dojo.html.getMargin(node);
+return {width:_4eb.width+_4ec.width,height:_4eb.height+_4ec.height};
 };
 dojo.html.setMarginBox=function(node,args){
 node=dojo.byId(node);
-var _4e6=0;
-var _4e7=0;
+var _4ef=0;
+var _4f0=0;
 var isbb=dojo.html.isBorderBox(node);
-var _4e9=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
-var _4ea=dojo.html.getMargin(node);
+var _4f2=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
+var _4f3=dojo.html.getMargin(node);
 var ret={};
 if(typeof args.width!="undefined"){
-_4e6=args.width-_4e9.width;
-_4e6-=_4ea.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_4e6);
+_4ef=args.width-_4f2.width;
+_4ef-=_4f3.width;
+ret.width=dojo.html.setPositivePixelValue(node,"width",_4ef);
 }
 if(typeof args.height!="undefined"){
-_4e7=args.height-_4e9.height;
-_4e7-=_4ea.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_4e7);
+_4f0=args.height-_4f2.height;
+_4f0-=_4f3.height;
+ret.height=dojo.html.setPositivePixelValue(node,"height",_4f0);
 }
 return ret;
 };
@@ -20460,31 +17465,31 @@
 return dojo.html.getContentBox(node);
 }
 };
-dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_4ef,_4f0,_4f1){
-if(_4ef instanceof Array||typeof _4ef=="array"){
+dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_4f8,_4f9,_4fa){
+if(_4f8 instanceof Array||typeof _4f8=="array"){
 dojo.deprecated("dojo.html.toCoordinateArray","use dojo.html.toCoordinateObject({left: , top: , width: , height: }) instead","0.5");
-while(_4ef.length<4){
-_4ef.push(0);
+while(_4f8.length<4){
+_4f8.push(0);
 }
-while(_4ef.length>4){
-_4ef.pop();
+while(_4f8.length>4){
+_4f8.pop();
 }
-var ret={left:_4ef[0],top:_4ef[1],width:_4ef[2],height:_4ef[3]};
+var ret={left:_4f8[0],top:_4f8[1],width:_4f8[2],height:_4f8[3]};
 }else{
-if(!_4ef.nodeType&&!(_4ef instanceof String||typeof _4ef=="string")&&("width" in _4ef||"height" in _4ef||"left" in _4ef||"x" in _4ef||"top" in _4ef||"y" in _4ef)){
-var ret={left:_4ef.left||_4ef.x||0,top:_4ef.top||_4ef.y||0,width:_4ef.width||0,height:_4ef.height||0};
+if(!_4f8.nodeType&&!(_4f8 instanceof String||typeof _4f8=="string")&&("width" in _4f8||"height" in _4f8||"left" in _4f8||"x" in _4f8||"top" in _4f8||"y" in _4f8)){
+var ret={left:_4f8.left||_4f8.x||0,top:_4f8.top||_4f8.y||0,width:_4f8.width||0,height:_4f8.height||0};
 }else{
-var node=dojo.byId(_4ef);
-var pos=dojo.html.abs(node,_4f0,_4f1);
-var _4f5=dojo.html.getMarginBox(node);
-var ret={left:pos.left,top:pos.top,width:_4f5.width,height:_4f5.height};
+var node=dojo.byId(_4f8);
+var pos=dojo.html.abs(node,_4f9,_4fa);
+var _4fe=dojo.html.getMarginBox(node);
+var ret={left:pos.left,top:pos.top,width:_4fe.width,height:_4fe.height};
 }
 }
 ret.x=ret.left;
 ret.y=ret.top;
 return ret;
 };
-dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_4f7){
+dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_500){
 return dojo.html._callDeprecated("setMarginBoxWidth","setMarginBox",arguments,"width");
 };
 dojo.html.setMarginBoxHeight=dojo.html.setOuterHeight=function(){
@@ -20496,19 +17501,19 @@
 dojo.html.getMarginBoxHeight=dojo.html.getOuterHeight=function(){
 return dojo.html._callDeprecated("getMarginBoxHeight","getMarginBox",arguments,null,"height");
 };
-dojo.html.getTotalOffset=function(node,type,_4fa){
+dojo.html.getTotalOffset=function(node,type,_503){
 return dojo.html._callDeprecated("getTotalOffset","getAbsolutePosition",arguments,null,type);
 };
-dojo.html.getAbsoluteX=function(node,_4fc){
+dojo.html.getAbsoluteX=function(node,_505){
 return dojo.html._callDeprecated("getAbsoluteX","getAbsolutePosition",arguments,null,"x");
 };
-dojo.html.getAbsoluteY=function(node,_4fe){
+dojo.html.getAbsoluteY=function(node,_507){
 return dojo.html._callDeprecated("getAbsoluteY","getAbsolutePosition",arguments,null,"y");
 };
-dojo.html.totalOffsetLeft=function(node,_500){
+dojo.html.totalOffsetLeft=function(node,_509){
 return dojo.html._callDeprecated("totalOffsetLeft","getAbsolutePosition",arguments,null,"left");
 };
-dojo.html.totalOffsetTop=function(node,_502){
+dojo.html.totalOffsetTop=function(node,_50b){
 return dojo.html._callDeprecated("totalOffsetTop","getAbsolutePosition",arguments,null,"top");
 };
 dojo.html.getMarginWidth=function(node){
@@ -20547,15 +17552,15 @@
 dojo.html.getContentBoxHeight=dojo.html.getContentHeight=function(){
 return dojo.html._callDeprecated("getContentBoxHeight","getContentBox",arguments,null,"height");
 };
-dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_50c){
+dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_515){
 return dojo.html._callDeprecated("setContentBoxWidth","setContentBox",arguments,"width");
 };
-dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_50e){
+dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_517){
 return dojo.html._callDeprecated("setContentBoxHeight","setContentBox",arguments,"height");
 };
 dojo.provide("dojo.html.util");
-dojo.html.getElementWindow=function(_50f){
-return dojo.html.getDocumentWindow(_50f.ownerDocument);
+dojo.html.getElementWindow=function(_518){
+return dojo.html.getDocumentWindow(_518.ownerDocument);
 };
 dojo.html.getDocumentWindow=function(doc){
 if(dojo.render.html.safari&&!doc._parentWindow){
@@ -20577,49 +17582,49 @@
 };
 dojo.html.gravity=function(node,e){
 node=dojo.byId(node);
-var _517=dojo.html.getCursorPosition(e);
+var _520=dojo.html.getCursorPosition(e);
 with(dojo.html){
-var _518=getAbsolutePosition(node,true);
+var _521=getAbsolutePosition(node,true);
 var bb=getBorderBox(node);
-var _51a=_518.x+(bb.width/2);
-var _51b=_518.y+(bb.height/2);
+var _523=_521.x+(bb.width/2);
+var _524=_521.y+(bb.height/2);
 }
 with(dojo.html.gravity){
-return ((_517.x<_51a?WEST:EAST)|(_517.y<_51b?NORTH:SOUTH));
+return ((_520.x<_523?WEST:EAST)|(_520.y<_524?NORTH:SOUTH));
 }
 };
 dojo.html.gravity.NORTH=1;
 dojo.html.gravity.SOUTH=1<<1;
 dojo.html.gravity.EAST=1<<2;
 dojo.html.gravity.WEST=1<<3;
-dojo.html.overElement=function(_51c,e){
-_51c=dojo.byId(_51c);
-var _51e=dojo.html.getCursorPosition(e);
-var bb=dojo.html.getBorderBox(_51c);
-var _520=dojo.html.getAbsolutePosition(_51c,true,dojo.html.boxSizing.BORDER_BOX);
-var top=_520.y;
-var _522=top+bb.height;
-var left=_520.x;
-var _524=left+bb.width;
-return (_51e.x>=left&&_51e.x<=_524&&_51e.y>=top&&_51e.y<=_522);
+dojo.html.overElement=function(_525,e){
+_525=dojo.byId(_525);
+var _527=dojo.html.getCursorPosition(e);
+var bb=dojo.html.getBorderBox(_525);
+var _529=dojo.html.getAbsolutePosition(_525,true,dojo.html.boxSizing.BORDER_BOX);
+var top=_529.y;
+var _52b=top+bb.height;
+var left=_529.x;
+var _52d=left+bb.width;
+return (_527.x>=left&&_527.x<=_52d&&_527.y>=top&&_527.y<=_52b);
 };
 dojo.html.renderedTextContent=function(node){
 node=dojo.byId(node);
-var _526="";
+var _52f="";
 if(node==null){
-return _526;
+return _52f;
 }
 for(var i=0;i<node.childNodes.length;i++){
 switch(node.childNodes[i].nodeType){
 case 1:
 case 5:
-var _528="unknown";
+var _531="unknown";
 try{
-_528=dojo.html.getStyle(node.childNodes[i],"display");
+_531=dojo.html.getStyle(node.childNodes[i],"display");
 }
 catch(E){
 }
-switch(_528){
+switch(_531){
 case "block":
 case "list-item":
 case "run-in":
@@ -20632,17 +17637,17 @@
 case "table-column":
 case "table-cell":
 case "table-caption":
-_526+="\n";
-_526+=dojo.html.renderedTextContent(node.childNodes[i]);
-_526+="\n";
+_52f+="\n";
+_52f+=dojo.html.renderedTextContent(node.childNodes[i]);
+_52f+="\n";
 break;
 case "none":
 break;
 default:
 if(node.childNodes[i].tagName&&node.childNodes[i].tagName.toLowerCase()=="br"){
-_526+="\n";
+_52f+="\n";
 }else{
-_526+=dojo.html.renderedTextContent(node.childNodes[i]);
+_52f+=dojo.html.renderedTextContent(node.childNodes[i]);
 }
 break;
 }
@@ -20651,19 +17656,19 @@
 case 2:
 case 4:
 var text=node.childNodes[i].nodeValue;
-var _52a="unknown";
+var _533="unknown";
 try{
-_52a=dojo.html.getStyle(node,"text-transform");
+_533=dojo.html.getStyle(node,"text-transform");
 }
 catch(E){
 }
-switch(_52a){
+switch(_533){
 case "capitalize":
-var _52b=text.split(" ");
-for(var i=0;i<_52b.length;i++){
-_52b[i]=_52b[i].charAt(0).toUpperCase()+_52b[i].substring(1);
+var _534=text.split(" ");
+for(var i=0;i<_534.length;i++){
+_534[i]=_534[i].charAt(0).toUpperCase()+_534[i].substring(1);
 }
-text=_52b.join(" ");
+text=_534.join(" ");
 break;
 case "uppercase":
 text=text.toUpperCase();
@@ -20674,7 +17679,7 @@
 default:
 break;
 }
-switch(_52a){
+switch(_533){
 case "nowrap":
 break;
 case "pre-wrap":
@@ -20685,18 +17690,18 @@
 break;
 default:
 text=text.replace(/\s+/," ");
-if(/\s$/.test(_526)){
+if(/\s$/.test(_52f)){
 text.replace(/^\s/,"");
 }
 break;
 }
-_526+=text;
+_52f+=text;
 break;
 default:
 break;
 }
 }
-return _526;
+return _52f;
 };
 dojo.html.createNodesFromText=function(txt,trim){
 if(trim){
@@ -20705,18 +17710,18 @@
 var tn=dojo.doc().createElement("div");
 tn.style.visibility="hidden";
 dojo.body().appendChild(tn);
-var _52f="none";
+var _538="none";
 if((/^<t[dh][\s\r\n>]/i).test(txt.replace(/^\s+/))){
 txt="<table><tbody><tr>"+txt+"</tr></tbody></table>";
-_52f="cell";
+_538="cell";
 }else{
 if((/^<tr[\s\r\n>]/i).test(txt.replace(/^\s+/))){
 txt="<table><tbody>"+txt+"</tbody></table>";
-_52f="row";
+_538="row";
 }else{
 if((/^<(thead|tbody|tfoot)[\s\r\n>]/i).test(txt.replace(/^\s+/))){
 txt="<table>"+txt+"</table>";
-_52f="section";
+_538="section";
 }
 }
 }
@@ -20724,147 +17729,147 @@
 if(tn["normalize"]){
 tn.normalize();
 }
-var _530=null;
-switch(_52f){
+var _539=null;
+switch(_538){
 case "cell":
-_530=tn.getElementsByTagName("tr")[0];
+_539=tn.getElementsByTagName("tr")[0];
 break;
 case "row":
-_530=tn.getElementsByTagName("tbody")[0];
+_539=tn.getElementsByTagName("tbody")[0];
 break;
 case "section":
-_530=tn.getElementsByTagName("table")[0];
+_539=tn.getElementsByTagName("table")[0];
 break;
 default:
-_530=tn;
+_539=tn;
 break;
 }
-var _531=[];
-for(var x=0;x<_530.childNodes.length;x++){
-_531.push(_530.childNodes[x].cloneNode(true));
+var _53a=[];
+for(var x=0;x<_539.childNodes.length;x++){
+_53a.push(_539.childNodes[x].cloneNode(true));
 }
 tn.style.display="none";
 dojo.html.destroyNode(tn);
-return _531;
+return _53a;
 };
-dojo.html.placeOnScreen=function(node,_534,_535,_536,_537,_538,_539){
-if(_534 instanceof Array||typeof _534=="array"){
-_539=_538;
-_538=_537;
-_537=_536;
-_536=_535;
-_535=_534[1];
-_534=_534[0];
+dojo.html.placeOnScreen=function(node,_53d,_53e,_53f,_540,_541,_542){
+if(_53d instanceof Array||typeof _53d=="array"){
+_542=_541;
+_541=_540;
+_540=_53f;
+_53f=_53e;
+_53e=_53d[1];
+_53d=_53d[0];
 }
-if(_538 instanceof String||typeof _538=="string"){
-_538=_538.split(",");
+if(_541 instanceof String||typeof _541=="string"){
+_541=_541.split(",");
 }
-if(!isNaN(_536)){
-_536=[Number(_536),Number(_536)];
+if(!isNaN(_53f)){
+_53f=[Number(_53f),Number(_53f)];
 }else{
-if(!(_536 instanceof Array||typeof _536=="array")){
-_536=[0,0];
+if(!(_53f instanceof Array||typeof _53f=="array")){
+_53f=[0,0];
 }
 }
-var _53a=dojo.html.getScroll().offset;
+var _543=dojo.html.getScroll().offset;
 var view=dojo.html.getViewport();
 node=dojo.byId(node);
-var _53c=node.style.display;
+var _545=node.style.display;
 node.style.display="";
 var bb=dojo.html.getBorderBox(node);
 var w=bb.width;
 var h=bb.height;
-node.style.display=_53c;
-if(!(_538 instanceof Array||typeof _538=="array")){
-_538=["TL"];
+node.style.display=_545;
+if(!(_541 instanceof Array||typeof _541=="array")){
+_541=["TL"];
 }
-var _540,_541,_542=Infinity,_543;
-for(var _544=0;_544<_538.length;++_544){
-var _545=_538[_544];
-var _546=true;
-var tryX=_534-(_545.charAt(1)=="L"?0:w)+_536[0]*(_545.charAt(1)=="L"?1:-1);
-var tryY=_535-(_545.charAt(0)=="T"?0:h)+_536[1]*(_545.charAt(0)=="T"?1:-1);
-if(_537){
-tryX-=_53a.x;
-tryY-=_53a.y;
+var _549,_54a,_54b=Infinity,_54c;
+for(var _54d=0;_54d<_541.length;++_54d){
+var _54e=_541[_54d];
+var _54f=true;
+var tryX=_53d-(_54e.charAt(1)=="L"?0:w)+_53f[0]*(_54e.charAt(1)=="L"?1:-1);
+var tryY=_53e-(_54e.charAt(0)=="T"?0:h)+_53f[1]*(_54e.charAt(0)=="T"?1:-1);
+if(_540){
+tryX-=_543.x;
+tryY-=_543.y;
 }
 if(tryX<0){
 tryX=0;
-_546=false;
+_54f=false;
 }
 if(tryY<0){
 tryY=0;
-_546=false;
+_54f=false;
 }
 var x=tryX+w;
 if(x>view.width){
 x=view.width-w;
-_546=false;
+_54f=false;
 }else{
 x=tryX;
 }
-x=Math.max(_536[0],x)+_53a.x;
+x=Math.max(_53f[0],x)+_543.x;
 var y=tryY+h;
 if(y>view.height){
 y=view.height-h;
-_546=false;
+_54f=false;
 }else{
 y=tryY;
 }
-y=Math.max(_536[1],y)+_53a.y;
-if(_546){
-_540=x;
-_541=y;
-_542=0;
-_543=_545;
+y=Math.max(_53f[1],y)+_543.y;
+if(_54f){
+_549=x;
+_54a=y;
+_54b=0;
+_54c=_54e;
 break;
 }else{
-var dist=Math.pow(x-tryX-_53a.x,2)+Math.pow(y-tryY-_53a.y,2);
-if(_542>dist){
-_542=dist;
-_540=x;
-_541=y;
-_543=_545;
+var dist=Math.pow(x-tryX-_543.x,2)+Math.pow(y-tryY-_543.y,2);
+if(_54b>dist){
+_54b=dist;
+_549=x;
+_54a=y;
+_54c=_54e;
 }
 }
 }
-if(!_539){
-node.style.left=_540+"px";
-node.style.top=_541+"px";
+if(!_542){
+node.style.left=_549+"px";
+node.style.top=_54a+"px";
 }
-return {left:_540,top:_541,x:_540,y:_541,dist:_542,corner:_543};
+return {left:_549,top:_54a,x:_549,y:_54a,dist:_54b,corner:_54c};
 };
-dojo.html.placeOnScreenPoint=function(node,_54d,_54e,_54f,_550){
+dojo.html.placeOnScreenPoint=function(node,_556,_557,_558,_559){
 dojo.deprecated("dojo.html.placeOnScreenPoint","use dojo.html.placeOnScreen() instead","0.5");
-return dojo.html.placeOnScreen(node,_54d,_54e,_54f,_550,["TL","TR","BL","BR"]);
+return dojo.html.placeOnScreen(node,_556,_557,_558,_559,["TL","TR","BL","BR"]);
 };
-dojo.html.placeOnScreenAroundElement=function(node,_552,_553,_554,_555,_556){
-var best,_558=Infinity;
-_552=dojo.byId(_552);
-var _559=_552.style.display;
-_552.style.display="";
-var mb=dojo.html.getElementBox(_552,_554);
-var _55b=mb.width;
-var _55c=mb.height;
-var _55d=dojo.html.getAbsolutePosition(_552,true,_554);
-_552.style.display=_559;
-for(var _55e in _555){
-var pos,_560,_561;
-var _562=_555[_55e];
-_560=_55d.x+(_55e.charAt(1)=="L"?0:_55b);
-_561=_55d.y+(_55e.charAt(0)=="T"?0:_55c);
-pos=dojo.html.placeOnScreen(node,_560,_561,_553,true,_562,true);
+dojo.html.placeOnScreenAroundElement=function(node,_55b,_55c,_55d,_55e,_55f){
+var best,_561=Infinity;
+_55b=dojo.byId(_55b);
+var _562=_55b.style.display;
+_55b.style.display="";
+var mb=dojo.html.getElementBox(_55b,_55d);
+var _564=mb.width;
+var _565=mb.height;
+var _566=dojo.html.getAbsolutePosition(_55b,true,_55d);
+_55b.style.display=_562;
+for(var _567 in _55e){
+var pos,_569,_56a;
+var _56b=_55e[_567];
+_569=_566.x+(_567.charAt(1)=="L"?0:_564);
+_56a=_566.y+(_567.charAt(0)=="T"?0:_565);
+pos=dojo.html.placeOnScreen(node,_569,_56a,_55c,true,_56b,true);
 if(pos.dist==0){
 best=pos;
 break;
 }else{
-if(_558>pos.dist){
-_558=pos.dist;
+if(_561>pos.dist){
+_561=pos.dist;
 best=pos;
 }
 }
 }
-if(!_556){
+if(!_55f){
 node.style.left=best.left+"px";
 node.style.top=best.top+"px";
 }
@@ -20882,14 +17887,14 @@
 if(dojo.render.html.mozilla){
 node.scrollIntoView(false);
 }else{
-var _564=node.parentNode;
-var _565=_564.scrollTop+dojo.html.getBorderBox(_564).height;
-var _566=node.offsetTop+dojo.html.getMarginBox(node).height;
-if(_565<_566){
-_564.scrollTop+=(_566-_565);
+var _56d=node.parentNode;
+var _56e=_56d.scrollTop+dojo.html.getBorderBox(_56d).height;
+var _56f=node.offsetTop+dojo.html.getMarginBox(node).height;
+if(_56e<_56f){
+_56d.scrollTop+=(_56f-_56e);
 }else{
-if(_564.scrollTop>node.offsetTop){
-_564.scrollTop-=(_564.scrollTop-node.offsetTop);
+if(_56d.scrollTop>node.offsetTop){
+_56d.scrollTop-=(_56d.scrollTop-node.offsetTop);
 }
 }
 }
@@ -20898,47 +17903,42 @@
 
 
 __CPAN_EDITION__ core build.txt
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/lang/common.js,
-../src/lang/array.js,
-../src/lang/extras.js,
-../src/lang/declare.js,
-../src/lang/func.js,
-../src/event/common.js,
-../src/event/topic.js,
-../src/event/browser.js,
-../src/event/__package__.js,
-../src/event.js,
-../src/string/common.js,
-../src/string/extras.js,
-../src/string.js,
-../src/io/common.js,
-../src/dom.js,
-../src/undo/browser.js,
-../src/io/BrowserIO.js,
-../src/io/cookie.js,
-../src/io/__package__.js,
-../src/io.js,
-../src/AdapterRegistry.js,
-../src/json.js,
-../src/html/common.js,
-../src/uri/Uri.js,
-../src/html/style.js,
-../src/html/__package__.js,
-../src/html/display.js,
-../src/html/layout.js,
+Files baked into this build:
+dojoGuardStart.js
+../src/bootstrap1.js
+../src/loader.js
+dojoGuardEnd.js
+../src/hostenv_browser.js
+../src/lang/common.js
+../src/lang/array.js
+../src/lang/extras.js
+../src/lang/declare.js
+../src/lang/func.js
+../src/event/common.js
+../src/event/topic.js
+../src/event/browser.js
+../src/event/__package__.js
+../src/event.js
+../src/string/common.js
+../src/string/extras.js
+../src/string.js
+../src/io/common.js
+../src/dom.js
+../src/undo/browser.js
+../src/io/BrowserIO.js
+../src/io/cookie.js
+../src/io/__package__.js
+../src/io.js
+../src/AdapterRegistry.js
+../src/json.js
+../src/html/common.js
+../src/uri/Uri.js
+../src/html/style.js
+../src/html/__package__.js
+../src/html/display.js
+../src/html/layout.js
 ../src/html/util.js
-
-		
-__CPAN_EDITION__ dashboard dojo.js
+__CPAN_EDITION__ editor dojo.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
 	All Rights Reserved.
@@ -20974,7 +17974,7 @@
 return dj_currentContext;
 };
 dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
+dojo.version={major:0,minor:4,patch:2,flag:"",revision:Number("$Rev: 7616 $".match(/[0-9]+/)[0]),toString:function(){
 with(dojo.version){
 return major+"."+minor+"."+patch+flag+" ("+revision+")";
 }
@@ -21230,7 +18230,7 @@
 }
 };
 dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
+if(typeof setTimeout=="object"||(djConfig["useXDomain"]&&dojo.render.html.opera)){
 setTimeout("dojo.hostenv.loaded();",0);
 }else{
 dojo.hostenv.loaded();
@@ -21378,6 +18378,11 @@
 dojo.registerModulePath=function(_66,_67){
 return dojo.hostenv.setModulePrefix(_66,_67);
 };
+if(djConfig["modulePaths"]){
+for(var param in djConfig["modulePaths"]){
+dojo.registerModulePath(param,djConfig["modulePaths"][param]);
+}
+}
 dojo.setModulePrefix=function(_68,_69){
 dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
 return dojo.registerModulePath(_68,_69);
@@ -21788,7 +18793,7 @@
 }
 }
 if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
+if(dojo.render.html.opera||(dojo.render.html.moz&&(djConfig["enableMozDomContentLoaded"]===true))){
 document.addEventListener("DOMContentLoaded",dj_load_init,null);
 }
 window.addEventListener("load",dj_load_init,null);
@@ -21936,2213 +18941,9 @@
 return _ec;
 };
 }
-dojo.render.name=dojo.hostenv.name_="dashboard";
-dojo.hostenv.println=function(_ee){
-return alert(_ee);
-};
-dojo.hostenv.getXmlhttpObject=function(_ef){
-if(widget.system&&_ef){
-if((_ef.contentType&&_ef.contentType.indexOf("text/")!=0)||(_ef.headers&&_ef.headers["content-type"]&&_ef.headers["content-type"].indexOf("text/")!=0)){
-var _f0=new dojo.hostenv.CurlRequest;
-_f0._save=true;
-return _f0;
-}else{
-if(_ef.method&&_ef.method.toUpperCase()=="HEAD"){
-return new dojo.hostenv.CurlRequest;
-}else{
-if(_ef.headers&&_ef.header.referer){
-return new dojo.hostenv.CurlRequest;
-}
-}
-}
-}
-return new XMLHttpRequest;
-};
-dojo.hostenv.CurlRequest=function(){
-this.onreadystatechange=null;
-this.readyState=0;
-this.responseText="";
-this.responseXML=null;
-this.status=0;
-this.statusText="";
-this._method="";
-this._url="";
-this._async=true;
-this._referrer="";
-this._headers=[];
-this._save=false;
-this._responseHeader="";
-this._responseHeaders={};
-this._fileName="";
-this._username="";
-this._password="";
-};
-dojo.hostenv.CurlRequest.prototype.open=function(_f1,url,_f3,_f4,_f5){
-this._method=_f1;
-this._url=url;
-if(_f3){
-this._async=_f3;
-}
-if(_f4){
-this._username=_f4;
-}
-if(_f5){
-this._password=_f5;
-}
-};
-dojo.hostenv.CurlRequest.prototype.setRequestHeader=function(_f6,_f7){
-switch(_f6){
-case "Referer":
-this._referrer=_f7;
-break;
-case "content-type":
-break;
-default:
-this._headers.push(_f6+"="+_f7);
-break;
-}
-};
-dojo.hostenv.CurlRequest.prototype.getAllResponseHeaders=function(){
-return this._responseHeader;
-};
-dojo.hostenv.CurlRequest.prototype.getResponseHeader=function(_f8){
-return this._responseHeaders[_f8];
-};
-dojo.hostenv.CurlRequest.prototype.send=function(_f9){
-this.readyState=1;
-if(this.onreadystatechange){
-this.onreadystatechange.call(this);
-}
-var _fa={sS:""};
-if(this._referrer){
-_fa.e=this._referrer;
-}
-if(this._headers.length){
-_fa.H=this._headers.join("&");
-}
-if(this._username){
-if(this._password){
-_fa.u=this._username+":"+this._password;
-}else{
-_fa.u=this._username;
-}
-}
-if(_f9){
-_fa.d=this.content;
-if(this._method!="POST"){
-_fa.G="";
-}
-}
-if(this._method=="HEAD"){
-_fa.I="";
-}else{
-if(this._save){
-_fa.I="";
-}else{
-_fa.i="";
-}
-}
-var _fb=widget.system(dojo.hostenv.CurlRequest._formatCall(_fa,this._url),null);
-this.readyState=2;
-if(this.onreadystatechange){
-this.onreadystatechange.call(this);
-}
-if(_fb.errorString){
-this.responseText=_fb.errorString;
-this.status=0;
-}else{
-if(this._save){
-this._responseHeader=_fb.outputString;
-}else{
-var _fc=_fb.outputString.replace(/\r/g,"").split("\n\n",2);
-this._responseHeader=_fc[0];
-this.responseText=_fc[1];
-}
-_fc=this._responseHeader.split("\n");
-this.statusText=_fc.shift();
-this.status=this.statusText.split(" ")[1];
-for(var i=0,_fe;_fe=_fc[i];i++){
-var _ff=_fe.split(": ",2);
-this._responseHeaders[_ff[0]]=_ff[1];
-}
-if(this._save){
-widget.system("/bin/mkdir cache",null);
-this._fileName=this._url.split("/").pop().replace(/\W/g,"");
-this._fileName+="."+this._responseHeaders["Content-Type"].replace(/[\r\n]/g,"").split("/").pop();
-delete _fa.I;
-_fa.o="cache/"+this._fileName;
-_fb=widget.system(dojo.hostenv.CurlRequest._formatCall(_fa,this._url),null);
-if(!_fb.errorString){
-this.responseText="cache/"+this._fileName;
-}
-}else{
-if(this._method=="HEAD"){
-this.responseText=this._responseHeader;
-}
-}
-}
-this.readyState=4;
-if(this.onreadystatechange){
-this.onreadystatechange.call(this);
-}
-};
-dojo.hostenv.CurlRequest._formatCall=function(_100,url){
-var call=["/usr/bin/curl"];
-for(var key in _100){
-if(_100[key]!=""){
-call.push("-"+key+" '"+_100[key].replace(/'/g,"'")+"'");
-}else{
-call.push("-"+key);
-}
-}
-call.push("'"+url.replace(/'/g,"'")+"'");
-return call.join(" ");
-};
-dojo.hostenv.exit=function(){
-if(widget.system){
-widget.system("/bin/rm -rf cache/*",null);
-}
-};
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _104=false;
-var _105=false;
-var _106=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_104=true;
-}else{
-if(typeof this["load"]=="function"){
-_105=true;
-}else{
-if(window.widget){
-_106=true;
-}
-}
-}
-var tmps=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-tmps.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_104)&&(!_106)){
-tmps.push("browser_debug.js");
-}
-var _108=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_108=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<tmps.length;x++){
-var _10a=_108+"src/"+tmps[x];
-if(_104||_105){
-load(_10a);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_10a+"'></scr"+"ipt>");
-}
-catch(e){
-var _10b=document.createElement("script");
-_10b.src=_10a;
-document.getElementsByTagName("head")[0].appendChild(_10b);
-}
-}
-}
-})();
-dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_10c,_10d){
-if(!dojo.lang.isFunction(_10d)){
-dojo.raise("dojo.inherits: superclass argument ["+_10d+"] must be a function (subclass: ["+_10c+"']");
-}
-_10c.prototype=new _10d();
-_10c.prototype.constructor=_10c;
-_10c.superclass=_10d.prototype;
-_10c["super"]=_10d.prototype;
-};
-dojo.lang._mixin=function(obj,_10f){
-var tobj={};
-for(var x in _10f){
-if((typeof tobj[x]=="undefined")||(tobj[x]!=_10f[x])){
-obj[x]=_10f[x];
-}
-}
-if(dojo.render.html.ie&&(typeof (_10f["toString"])=="function")&&(_10f["toString"]!=obj["toString"])&&(_10f["toString"]!=tobj["toString"])){
-obj.toString=_10f.toString;
-}
-return obj;
-};
-dojo.lang.mixin=function(obj,_113){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(obj,arguments[i]);
-}
-return obj;
-};
-dojo.lang.extend=function(_116,_117){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_116.prototype,arguments[i]);
-}
-return _116;
-};
-dojo.inherits=dojo.lang.inherits;
-dojo.mixin=dojo.lang.mixin;
-dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_11a,_11b,_11c,_11d){
-if(!dojo.lang.isArrayLike(_11a)&&dojo.lang.isArrayLike(_11b)){
-dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_11a;
-_11a=_11b;
-_11b=temp;
-}
-var _11f=dojo.lang.isString(_11a);
-if(_11f){
-_11a=_11a.split("");
-}
-if(_11d){
-var step=-1;
-var i=_11a.length-1;
-var end=-1;
-}else{
-var step=1;
-var i=0;
-var end=_11a.length;
-}
-if(_11c){
-while(i!=end){
-if(_11a[i]===_11b){
-return i;
-}
-i+=step;
-}
-}else{
-while(i!=end){
-if(_11a[i]==_11b){
-return i;
-}
-i+=step;
-}
-}
-return -1;
-};
-dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_123,_124,_125){
-return dojo.lang.find(_123,_124,_125,true);
-};
-dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_126,_127){
-return dojo.lang.find(_126,_127)>-1;
-};
-dojo.lang.isObject=function(it){
-if(typeof it=="undefined"){
-return false;
-}
-return (typeof it=="object"||it===null||dojo.lang.isArray(it)||dojo.lang.isFunction(it));
-};
-dojo.lang.isArray=function(it){
-return (it&&it instanceof Array||typeof it=="array");
-};
-dojo.lang.isArrayLike=function(it){
-if((!it)||(dojo.lang.isUndefined(it))){
-return false;
-}
-if(dojo.lang.isString(it)){
-return false;
-}
-if(dojo.lang.isFunction(it)){
-return false;
-}
-if(dojo.lang.isArray(it)){
-return true;
-}
-if((it.tagName)&&(it.tagName.toLowerCase()=="form")){
-return false;
-}
-if(dojo.lang.isNumber(it.length)&&isFinite(it.length)){
-return true;
-}
-return false;
-};
-dojo.lang.isFunction=function(it){
-return (it instanceof Function||typeof it=="function");
-};
-(function(){
-if((dojo.render.html.capable)&&(dojo.render.html["safari"])){
-dojo.lang.isFunction=function(it){
-if((typeof (it)=="function")&&(it=="[object NodeList]")){
-return false;
-}
-return (it instanceof Function||typeof it=="function");
-};
-}
-})();
-dojo.lang.isString=function(it){
-return (typeof it=="string"||it instanceof String);
-};
-dojo.lang.isAlien=function(it){
-if(!it){
-return false;
-}
-return !dojo.lang.isFunction(it)&&/\{\s*\[native code\]\s*\}/.test(String(it));
-};
-dojo.lang.isBoolean=function(it){
-return (it instanceof Boolean||typeof it=="boolean");
-};
-dojo.lang.isNumber=function(it){
-return (it instanceof Number||typeof it=="number");
-};
-dojo.lang.isUndefined=function(it){
-return ((typeof (it)=="undefined")&&(it==undefined));
-};
-dojo.provide("dojo.lang");
-dojo.deprecated("dojo.lang","replaced by dojo.lang.common","0.5");
-dojo.provide("dojo.lang.array");
-dojo.lang.mixin(dojo.lang,{has:function(obj,name){
-try{
-return typeof obj[name]!="undefined";
-}
-catch(e){
-return false;
-}
-},isEmpty:function(obj){
-if(dojo.lang.isObject(obj)){
-var tmp={};
-var _136=0;
-for(var x in obj){
-if(obj[x]&&(!tmp[x])){
-_136++;
-break;
-}
-}
-return _136==0;
-}else{
-if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
-return obj.length==0;
-}
-}
-},map:function(arr,obj,_13a){
-var _13b=dojo.lang.isString(arr);
-if(_13b){
-arr=arr.split("");
-}
-if(dojo.lang.isFunction(obj)&&(!_13a)){
-_13a=obj;
-obj=dj_global;
-}else{
-if(dojo.lang.isFunction(obj)&&_13a){
-var _13c=obj;
-obj=_13a;
-_13a=_13c;
-}
-}
-if(Array.map){
-var _13d=Array.map(arr,_13a,obj);
-}else{
-var _13d=[];
-for(var i=0;i<arr.length;++i){
-_13d.push(_13a.call(obj,arr[i]));
-}
-}
-if(_13b){
-return _13d.join("");
-}else{
-return _13d;
-}
-},reduce:function(arr,_140,obj,_142){
-var _143=_140;
-if(arguments.length==1){
-dojo.debug("dojo.lang.reduce called with too few arguments!");
-return false;
-}else{
-if(arguments.length==2){
-_142=_140;
-_143=arr.shift();
-}else{
-if(arguments.lenght==3){
-if(dojo.lang.isFunction(obj)){
-_142=obj;
-obj=null;
-}
-}else{
-if(dojo.lang.isFunction(obj)){
-var tmp=_142;
-_142=obj;
-obj=tmp;
-}
-}
-}
-}
-var ob=obj?obj:dj_global;
-dojo.lang.map(arr,function(val){
-_143=_142.call(ob,_143,val);
-});
-return _143;
-},forEach:function(_147,_148,_149){
-if(dojo.lang.isString(_147)){
-_147=_147.split("");
-}
-if(Array.forEach){
-Array.forEach(_147,_148,_149);
-}else{
-if(!_149){
-_149=dj_global;
-}
-for(var i=0,l=_147.length;i<l;i++){
-_148.call(_149,_147[i],i,_147);
-}
-}
-},_everyOrSome:function(_14c,arr,_14e,_14f){
-if(dojo.lang.isString(arr)){
-arr=arr.split("");
-}
-if(Array.every){
-return Array[_14c?"every":"some"](arr,_14e,_14f);
-}else{
-if(!_14f){
-_14f=dj_global;
-}
-for(var i=0,l=arr.length;i<l;i++){
-var _152=_14e.call(_14f,arr[i],i,arr);
-if(_14c&&!_152){
-return false;
-}else{
-if((!_14c)&&(_152)){
-return true;
-}
-}
-}
-return Boolean(_14c);
-}
-},every:function(arr,_154,_155){
-return this._everyOrSome(true,arr,_154,_155);
-},some:function(arr,_157,_158){
-return this._everyOrSome(false,arr,_157,_158);
-},filter:function(arr,_15a,_15b){
-var _15c=dojo.lang.isString(arr);
-if(_15c){
-arr=arr.split("");
-}
-var _15d;
-if(Array.filter){
-_15d=Array.filter(arr,_15a,_15b);
-}else{
-if(!_15b){
-if(arguments.length>=3){
-dojo.raise("thisObject doesn't exist!");
-}
-_15b=dj_global;
-}
-_15d=[];
-for(var i=0;i<arr.length;i++){
-if(_15a.call(_15b,arr[i],i,arr)){
-_15d.push(arr[i]);
-}
-}
-}
-if(_15c){
-return _15d.join("");
-}else{
-return _15d;
-}
-},unnest:function(){
-var out=[];
-for(var i=0;i<arguments.length;i++){
-if(dojo.lang.isArrayLike(arguments[i])){
-var add=dojo.lang.unnest.apply(this,arguments[i]);
-out=out.concat(add);
-}else{
-out.push(arguments[i]);
-}
-}
-return out;
-},toArray:function(_162,_163){
-var _164=[];
-for(var i=_163||0;i<_162.length;i++){
-_164.push(_162[i]);
-}
-return _164;
-}});
-dojo.provide("dojo.lang.extras");
-dojo.lang.setTimeout=function(func,_167){
-var _168=window,_169=2;
-if(!dojo.lang.isFunction(func)){
-_168=func;
-func=_167;
-_167=arguments[2];
-_169++;
-}
-if(dojo.lang.isString(func)){
-func=_168[func];
-}
-var args=[];
-for(var i=_169;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-return dojo.global().setTimeout(function(){
-func.apply(_168,args);
-},_167);
-};
-dojo.lang.clearTimeout=function(_16c){
-dojo.global().clearTimeout(_16c);
-};
-dojo.lang.getNameInObj=function(ns,item){
-if(!ns){
-ns=dj_global;
-}
-for(var x in ns){
-if(ns[x]===item){
-return new String(x);
-}
-}
-return null;
-};
-dojo.lang.shallowCopy=function(obj,deep){
-var i,ret;
-if(obj===null){
-return null;
-}
-if(dojo.lang.isObject(obj)){
-ret=new obj.constructor();
-for(i in obj){
-if(dojo.lang.isUndefined(ret[i])){
-ret[i]=deep?dojo.lang.shallowCopy(obj[i],deep):obj[i];
-}
-}
-}else{
-if(dojo.lang.isArray(obj)){
-ret=[];
-for(i=0;i<obj.length;i++){
-ret[i]=deep?dojo.lang.shallowCopy(obj[i],deep):obj[i];
-}
-}else{
-ret=obj;
-}
-}
-return ret;
-};
-dojo.lang.firstValued=function(){
-for(var i=0;i<arguments.length;i++){
-if(typeof arguments[i]!="undefined"){
-return arguments[i];
-}
-}
-return undefined;
-};
-dojo.lang.getObjPathValue=function(_175,_176,_177){
-with(dojo.parseObjPath(_175,_176,_177)){
-return dojo.evalProp(prop,obj,_177);
-}
-};
-dojo.lang.setObjPathValue=function(_178,_179,_17a,_17b){
-dojo.deprecated("dojo.lang.setObjPathValue","use dojo.parseObjPath and the '=' operator","0.6");
-if(arguments.length<4){
-_17b=true;
-}
-with(dojo.parseObjPath(_178,_17a,_17b)){
-if(obj&&(_17b||(prop in obj))){
-obj[prop]=_179;
-}
-}
-};
-dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_17c,_17d){
-var fcn=(dojo.lang.isString(_17d)?_17c[_17d]:_17d)||function(){
-};
-return function(){
-return fcn.apply(_17c,arguments);
-};
-};
-dojo.lang.anonCtr=0;
-dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_17f,_180,_181){
-var nso=(_180||dojo.lang.anon);
-if((_181)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
-for(var x in nso){
-try{
-if(nso[x]===_17f){
-return x;
-}
-}
-catch(e){
-}
-}
-}
-var ret="__"+dojo.lang.anonCtr++;
-while(typeof nso[ret]!="undefined"){
-ret="__"+dojo.lang.anonCtr++;
-}
-nso[ret]=_17f;
-return ret;
-};
-dojo.lang.forward=function(_185){
-return function(){
-return this[_185].apply(this,arguments);
-};
-};
-dojo.lang.curry=function(_186,func){
-var _188=[];
-_186=_186||dj_global;
-if(dojo.lang.isString(func)){
-func=_186[func];
-}
-for(var x=2;x<arguments.length;x++){
-_188.push(arguments[x]);
-}
-var _18a=(func["__preJoinArity"]||func.length)-_188.length;
-function gather(_18b,_18c,_18d){
-var _18e=_18d;
-var _18f=_18c.slice(0);
-for(var x=0;x<_18b.length;x++){
-_18f.push(_18b[x]);
-}
-_18d=_18d-_18b.length;
-if(_18d<=0){
-var res=func.apply(_186,_18f);
-_18d=_18e;
-return res;
-}else{
-return function(){
-return gather(arguments,_18f,_18d);
-};
-}
-}
-return gather([],_188,_18a);
-};
-dojo.lang.curryArguments=function(_192,func,args,_195){
-var _196=[];
-var x=_195||0;
-for(x=_195;x<args.length;x++){
-_196.push(args[x]);
-}
-return dojo.lang.curry.apply(dojo.lang,[_192,func].concat(_196));
-};
-dojo.lang.tryThese=function(){
-for(var x=0;x<arguments.length;x++){
-try{
-if(typeof arguments[x]=="function"){
-var ret=(arguments[x]());
-if(ret){
-return ret;
-}
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-};
-dojo.lang.delayThese=function(farr,cb,_19c,_19d){
-if(!farr.length){
-if(typeof _19d=="function"){
-_19d();
-}
-return;
-}
-if((typeof _19c=="undefined")&&(typeof cb=="number")){
-_19c=cb;
-cb=function(){
-};
-}else{
-if(!cb){
-cb=function(){
-};
-if(!_19c){
-_19c=0;
-}
-}
-}
-setTimeout(function(){
-(farr.shift())();
-cb();
-dojo.lang.delayThese(farr,cb,_19c,_19d);
-},_19c);
-};
-dojo.provide("dojo.event.common");
-dojo.event=new function(){
-this._canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-function interpolateArgs(args,_19f){
-var dl=dojo.lang;
-var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false};
-switch(args.length){
-case 0:
-return;
-case 1:
-return;
-case 2:
-ao.srcFunc=args[0];
-ao.adviceFunc=args[1];
-break;
-case 3:
-if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isString(args[2]))){
-ao.adviceType="after";
-ao.srcObj=args[0];
-ao.srcFunc=args[1];
-ao.adviceFunc=args[2];
-}else{
-if((dl.isString(args[1]))&&(dl.isString(args[2]))){
-ao.srcFunc=args[1];
-ao.adviceFunc=args[2];
-}else{
-if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isFunction(args[2]))){
-ao.adviceType="after";
-ao.srcObj=args[0];
-ao.srcFunc=args[1];
-var _1a2=dl.nameAnonFunc(args[2],ao.adviceObj,_19f);
-ao.adviceFunc=_1a2;
-}else{
-if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
-ao.adviceType="after";
-ao.srcObj=dj_global;
-var _1a2=dl.nameAnonFunc(args[0],ao.srcObj,_19f);
-ao.srcFunc=_1a2;
-ao.adviceObj=args[1];
-ao.adviceFunc=args[2];
-}
-}
-}
-}
-break;
-case 4:
-if((dl.isObject(args[0]))&&(dl.isObject(args[2]))){
-ao.adviceType="after";
-ao.srcObj=args[0];
-ao.srcFunc=args[1];
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-if((dl.isString(args[0]))&&(dl.isString(args[1]))&&(dl.isObject(args[2]))){
-ao.adviceType=args[0];
-ao.srcObj=dj_global;
-ao.srcFunc=args[1];
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
-ao.adviceType=args[0];
-ao.srcObj=dj_global;
-var _1a2=dl.nameAnonFunc(args[1],dj_global,_19f);
-ao.srcFunc=_1a2;
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-var _1a2=dl.nameAnonFunc(args[3],dj_global,_19f);
-ao.adviceObj=dj_global;
-ao.adviceFunc=_1a2;
-}else{
-if(dl.isObject(args[1])){
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-ao.adviceObj=dj_global;
-ao.adviceFunc=args[3];
-}else{
-if(dl.isObject(args[2])){
-ao.srcObj=dj_global;
-ao.srcFunc=args[1];
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-ao.srcObj=ao.adviceObj=ao.aroundObj=dj_global;
-ao.srcFunc=args[1];
-ao.adviceFunc=args[2];
-ao.aroundFunc=args[3];
-}
-}
-}
-}
-}
-}
-break;
-case 6:
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-ao.adviceObj=args[3];
-ao.adviceFunc=args[4];
-ao.aroundFunc=args[5];
-ao.aroundObj=dj_global;
-break;
-default:
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-ao.adviceObj=args[3];
-ao.adviceFunc=args[4];
-ao.aroundObj=args[5];
-ao.aroundFunc=args[6];
-ao.once=args[7];
-ao.delay=args[8];
-ao.rate=args[9];
-ao.adviceMsg=args[10];
-break;
-}
-if(dl.isFunction(ao.aroundFunc)){
-var _1a2=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_19f);
-ao.aroundFunc=_1a2;
-}
-if(dl.isFunction(ao.srcFunc)){
-ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc);
-}
-if(dl.isFunction(ao.adviceFunc)){
-ao.adviceFunc=dl.getNameInObj(ao.adviceObj,ao.adviceFunc);
-}
-if((ao.aroundObj)&&(dl.isFunction(ao.aroundFunc))){
-ao.aroundFunc=dl.getNameInObj(ao.aroundObj,ao.aroundFunc);
-}
-if(!ao.srcObj){
-dojo.raise("bad srcObj for srcFunc: "+ao.srcFunc);
-}
-if(!ao.adviceObj){
-dojo.raise("bad adviceObj for adviceFunc: "+ao.adviceFunc);
-}
-if(!ao.adviceFunc){
-dojo.debug("bad adviceFunc for srcFunc: "+ao.srcFunc);
-dojo.debugShallow(ao);
-}
-return ao;
-}
-this.connect=function(){
-if(arguments.length==1){
-var ao=arguments[0];
-}else{
-var ao=interpolateArgs(arguments,true);
-}
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.connect(ao);
-}
-ao.srcFunc="onkeypress";
-}
-if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){
-var _1a4={};
-for(var x in ao){
-_1a4[x]=ao[x];
-}
-var mjps=[];
-dojo.lang.forEach(ao.srcObj,function(src){
-if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
-src=dojo.byId(src);
-}
-_1a4.srcObj=src;
-mjps.push(dojo.event.connect.call(dojo.event,_1a4));
-});
-return mjps;
-}
-var mjp=dojo.event.MethodJoinPoint.getForMethod(ao.srcObj,ao.srcFunc);
-if(ao.adviceFunc){
-var mjp2=dojo.event.MethodJoinPoint.getForMethod(ao.adviceObj,ao.adviceFunc);
-}
-mjp.kwAddAdvice(ao);
-return mjp;
-};
-this.log=function(a1,a2){
-var _1ac;
-if((arguments.length==1)&&(typeof a1=="object")){
-_1ac=a1;
-}else{
-_1ac={srcObj:a1,srcFunc:a2};
-}
-_1ac.adviceFunc=function(){
-var _1ad=[];
-for(var x=0;x<arguments.length;x++){
-_1ad.push(arguments[x]);
-}
-dojo.debug("("+_1ac.srcObj+")."+_1ac.srcFunc,":",_1ad.join(", "));
-};
-this.kwConnect(_1ac);
-};
-this.connectBefore=function(){
-var args=["before"];
-for(var i=0;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-return this.connect.apply(this,args);
-};
-this.connectAround=function(){
-var args=["around"];
-for(var i=0;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-return this.connect.apply(this,args);
-};
-this.connectOnce=function(){
-var ao=interpolateArgs(arguments,true);
-ao.once=true;
-return this.connect(ao);
-};
-this._kwConnectImpl=function(_1b4,_1b5){
-var fn=(_1b5)?"disconnect":"connect";
-if(typeof _1b4["srcFunc"]=="function"){
-_1b4.srcObj=_1b4["srcObj"]||dj_global;
-var _1b7=dojo.lang.nameAnonFunc(_1b4.srcFunc,_1b4.srcObj,true);
-_1b4.srcFunc=_1b7;
-}
-if(typeof _1b4["adviceFunc"]=="function"){
-_1b4.adviceObj=_1b4["adviceObj"]||dj_global;
-var _1b7=dojo.lang.nameAnonFunc(_1b4.adviceFunc,_1b4.adviceObj,true);
-_1b4.adviceFunc=_1b7;
-}
-_1b4.srcObj=_1b4["srcObj"]||dj_global;
-_1b4.adviceObj=_1b4["adviceObj"]||_1b4["targetObj"]||dj_global;
-_1b4.adviceFunc=_1b4["adviceFunc"]||_1b4["targetFunc"];
-return dojo.event[fn](_1b4);
-};
-this.kwConnect=function(_1b8){
-return this._kwConnectImpl(_1b8,false);
-};
-this.disconnect=function(){
-if(arguments.length==1){
-var ao=arguments[0];
-}else{
-var ao=interpolateArgs(arguments,true);
-}
-if(!ao.adviceFunc){
-return;
-}
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.disconnect(ao);
-}
-ao.srcFunc="onkeypress";
-}
-if(!ao.srcObj[ao.srcFunc]){
-return null;
-}
-var mjp=dojo.event.MethodJoinPoint.getForMethod(ao.srcObj,ao.srcFunc,true);
-mjp.removeAdvice(ao.adviceObj,ao.adviceFunc,ao.adviceType,ao.once);
-return mjp;
-};
-this.kwDisconnect=function(_1bb){
-return this._kwConnectImpl(_1bb,true);
-};
-};
-dojo.event.MethodInvocation=function(_1bc,obj,args){
-this.jp_=_1bc;
-this.object=obj;
-this.args=[];
-for(var x=0;x<args.length;x++){
-this.args[x]=args[x];
-}
-this.around_index=-1;
-};
-dojo.event.MethodInvocation.prototype.proceed=function(){
-this.around_index++;
-if(this.around_index>=this.jp_.around.length){
-return this.jp_.object[this.jp_.methodname].apply(this.jp_.object,this.args);
-}else{
-var ti=this.jp_.around[this.around_index];
-var mobj=ti[0]||dj_global;
-var meth=ti[1];
-return mobj[meth].call(mobj,this);
-}
-};
-dojo.event.MethodJoinPoint=function(obj,_1c4){
-this.object=obj||dj_global;
-this.methodname=_1c4;
-this.methodfunc=this.object[_1c4];
-this.squelch=false;
-};
-dojo.event.MethodJoinPoint.getForMethod=function(obj,_1c6){
-if(!obj){
-obj=dj_global;
-}
-if(!obj[_1c6]){
-obj[_1c6]=function(){
-};
-if(!obj[_1c6]){
-dojo.raise("Cannot set do-nothing method on that object "+_1c6);
-}
-}else{
-if((!dojo.lang.isFunction(obj[_1c6]))&&(!dojo.lang.isAlien(obj[_1c6]))){
-return null;
-}
-}
-var _1c7=_1c6+"$joinpoint";
-var _1c8=_1c6+"$joinpoint$method";
-var _1c9=obj[_1c7];
-if(!_1c9){
-var _1ca=false;
-if(dojo.event["browser"]){
-if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){
-_1ca=true;
-dojo.event.browser.addClobberNodeAttrs(obj,[_1c7,_1c8,_1c6]);
-}
-}
-var _1cb=obj[_1c6].length;
-obj[_1c8]=obj[_1c6];
-_1c9=obj[_1c7]=new dojo.event.MethodJoinPoint(obj,_1c8);
-obj[_1c6]=function(){
-var args=[];
-if((_1ca)&&(!arguments.length)){
-var evt=null;
-try{
-if(obj.ownerDocument){
-evt=obj.ownerDocument.parentWindow.event;
-}else{
-if(obj.documentElement){
-evt=obj.documentElement.ownerDocument.parentWindow.event;
-}else{
-if(obj.event){
-evt=obj.event;
-}else{
-evt=window.event;
-}
-}
-}
-}
-catch(e){
-evt=window.event;
-}
-if(evt){
-args.push(dojo.event.browser.fixEvent(evt,this));
-}
-}else{
-for(var x=0;x<arguments.length;x++){
-if((x==0)&&(_1ca)&&(dojo.event.browser.isEvent(arguments[x]))){
-args.push(dojo.event.browser.fixEvent(arguments[x],this));
-}else{
-args.push(arguments[x]);
-}
-}
-}
-return _1c9.run.apply(_1c9,args);
-};
-obj[_1c6].__preJoinArity=_1cb;
-}
-return _1c9;
-};
-dojo.lang.extend(dojo.event.MethodJoinPoint,{unintercept:function(){
-this.object[this.methodname]=this.methodfunc;
-this.before=[];
-this.after=[];
-this.around=[];
-},disconnect:dojo.lang.forward("unintercept"),run:function(){
-var obj=this.object||dj_global;
-var args=arguments;
-var _1d1=[];
-for(var x=0;x<args.length;x++){
-_1d1[x]=args[x];
-}
-var _1d3=function(marr){
-if(!marr){
-dojo.debug("Null argument to unrollAdvice()");
-return;
-}
-var _1d5=marr[0]||dj_global;
-var _1d6=marr[1];
-if(!_1d5[_1d6]){
-dojo.raise("function \""+_1d6+"\" does not exist on \""+_1d5+"\"");
-}
-var _1d7=marr[2]||dj_global;
-var _1d8=marr[3];
-var msg=marr[6];
-var _1da;
-var to={args:[],jp_:this,object:obj,proceed:function(){
-return _1d5[_1d6].apply(_1d5,to.args);
-}};
-to.args=_1d1;
-var _1dc=parseInt(marr[4]);
-var _1dd=((!isNaN(_1dc))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
-if(marr[5]){
-var rate=parseInt(marr[5]);
-var cur=new Date();
-var _1e0=false;
-if((marr["last"])&&((cur-marr.last)<=rate)){
-if(dojo.event._canTimeout){
-if(marr["delayTimer"]){
-clearTimeout(marr.delayTimer);
-}
-var tod=parseInt(rate*2);
-var mcpy=dojo.lang.shallowCopy(marr);
-marr.delayTimer=setTimeout(function(){
-mcpy[5]=0;
-_1d3(mcpy);
-},tod);
-}
-return;
-}else{
-marr.last=cur;
-}
-}
-if(_1d8){
-_1d7[_1d8].call(_1d7,to);
-}else{
-if((_1dd)&&((dojo.render.html)||(dojo.render.svg))){
-dj_global["setTimeout"](function(){
-if(msg){
-_1d5[_1d6].call(_1d5,to);
-}else{
-_1d5[_1d6].apply(_1d5,args);
-}
-},_1dc);
-}else{
-if(msg){
-_1d5[_1d6].call(_1d5,to);
-}else{
-_1d5[_1d6].apply(_1d5,args);
-}
-}
-}
-};
-var _1e3=function(){
-if(this.squelch){
-try{
-return _1d3.apply(this,arguments);
-}
-catch(e){
-dojo.debug(e);
-}
-}else{
-return _1d3.apply(this,arguments);
-}
-};
-if((this["before"])&&(this.before.length>0)){
-dojo.lang.forEach(this.before.concat(new Array()),_1e3);
-}
-var _1e4;
-try{
-if((this["around"])&&(this.around.length>0)){
-var mi=new dojo.event.MethodInvocation(this,obj,args);
-_1e4=mi.proceed();
-}else{
-if(this.methodfunc){
-_1e4=this.object[this.methodname].apply(this.object,args);
-}
-}
-}
-catch(e){
-if(!this.squelch){
-dojo.debug(e,"when calling",this.methodname,"on",this.object,"with arguments",args);
-dojo.raise(e);
-}
-}
-if((this["after"])&&(this.after.length>0)){
-dojo.lang.forEach(this.after.concat(new Array()),_1e3);
-}
-return (this.methodfunc)?_1e4:null;
-},getArr:function(kind){
-var type="after";
-if((typeof kind=="string")&&(kind.indexOf("before")!=-1)){
-type="before";
-}else{
-if(kind=="around"){
-type="around";
-}
-}
-if(!this[type]){
-this[type]=[];
-}
-return this[type];
-},kwAddAdvice:function(args){
-this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"]);
-},addAdvice:function(_1e9,_1ea,_1eb,_1ec,_1ed,_1ee,once,_1f0,rate,_1f2){
-var arr=this.getArr(_1ed);
-if(!arr){
-dojo.raise("bad this: "+this);
-}
-var ao=[_1e9,_1ea,_1eb,_1ec,_1f0,rate,_1f2];
-if(once){
-if(this.hasAdvice(_1e9,_1ea,_1ed,arr)>=0){
-return;
-}
-}
-if(_1ee=="first"){
-arr.unshift(ao);
-}else{
-arr.push(ao);
-}
-},hasAdvice:function(_1f5,_1f6,_1f7,arr){
-if(!arr){
-arr=this.getArr(_1f7);
-}
-var ind=-1;
-for(var x=0;x<arr.length;x++){
-var aao=(typeof _1f6=="object")?(new String(_1f6)).toString():_1f6;
-var a1o=(typeof arr[x][1]=="object")?(new String(arr[x][1])).toString():arr[x][1];
-if((arr[x][0]==_1f5)&&(a1o==aao)){
-ind=x;
-}
-}
-return ind;
-},removeAdvice:function(_1fd,_1fe,_1ff,once){
-var arr=this.getArr(_1ff);
-var ind=this.hasAdvice(_1fd,_1fe,_1ff,arr);
-if(ind==-1){
-return false;
-}
-while(ind!=-1){
-arr.splice(ind,1);
-if(once){
-break;
-}
-ind=this.hasAdvice(_1fd,_1fe,_1ff,arr);
-}
-return true;
-}});
-dojo.provide("dojo.event.topic");
-dojo.event.topic=new function(){
-this.topics={};
-this.getTopic=function(_203){
-if(!this.topics[_203]){
-this.topics[_203]=new this.TopicImpl(_203);
-}
-return this.topics[_203];
-};
-this.registerPublisher=function(_204,obj,_206){
-var _204=this.getTopic(_204);
-_204.registerPublisher(obj,_206);
-};
-this.subscribe=function(_207,obj,_209){
-var _207=this.getTopic(_207);
-_207.subscribe(obj,_209);
-};
-this.unsubscribe=function(_20a,obj,_20c){
-var _20a=this.getTopic(_20a);
-_20a.unsubscribe(obj,_20c);
-};
-this.destroy=function(_20d){
-this.getTopic(_20d).destroy();
-delete this.topics[_20d];
-};
-this.publishApply=function(_20e,args){
-var _20e=this.getTopic(_20e);
-_20e.sendMessage.apply(_20e,args);
-};
-this.publish=function(_210,_211){
-var _210=this.getTopic(_210);
-var args=[];
-for(var x=1;x<arguments.length;x++){
-args.push(arguments[x]);
-}
-_210.sendMessage.apply(_210,args);
-};
-};
-dojo.event.topic.TopicImpl=function(_214){
-this.topicName=_214;
-this.subscribe=function(_215,_216){
-var tf=_216||_215;
-var to=(!_216)?dj_global:_215;
-return dojo.event.kwConnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
-};
-this.unsubscribe=function(_219,_21a){
-var tf=(!_21a)?_219:_21a;
-var to=(!_21a)?null:_219;
-return dojo.event.kwDisconnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
-};
-this._getJoinPoint=function(){
-return dojo.event.MethodJoinPoint.getForMethod(this,"sendMessage");
-};
-this.setSquelch=function(_21d){
-this._getJoinPoint().squelch=_21d;
-};
-this.destroy=function(){
-this._getJoinPoint().disconnect();
-};
-this.registerPublisher=function(_21e,_21f){
-dojo.event.connect(_21e,_21f,this,"sendMessage");
-};
-this.sendMessage=function(_220){
-};
-};
-dojo.provide("dojo.event.browser");
-dojo._ie_clobber=new function(){
-this.clobberNodes=[];
-function nukeProp(node,prop){
-try{
-node[prop]=null;
-}
-catch(e){
-}
-try{
-delete node[prop];
-}
-catch(e){
-}
-try{
-node.removeAttribute(prop);
-}
-catch(e){
-}
-}
-this.clobber=function(_223){
-var na;
-var tna;
-if(_223){
-tna=_223.all||_223.getElementsByTagName("*");
-na=[_223];
-for(var x=0;x<tna.length;x++){
-if(tna[x]["__doClobber__"]){
-na.push(tna[x]);
-}
-}
-}else{
-try{
-window.onload=null;
-}
-catch(e){
-}
-na=(this.clobberNodes.length)?this.clobberNodes:document.all;
-}
-tna=null;
-var _227={};
-for(var i=na.length-1;i>=0;i=i-1){
-var el=na[i];
-try{
-if(el&&el["__clobberAttrs__"]){
-for(var j=0;j<el.__clobberAttrs__.length;j++){
-nukeProp(el,el.__clobberAttrs__[j]);
-}
-nukeProp(el,"__clobberAttrs__");
-nukeProp(el,"__doClobber__");
-}
-}
-catch(e){
-}
-}
-na=null;
-};
-};
-if(dojo.render.html.ie){
-dojo.addOnUnload(function(){
-dojo._ie_clobber.clobber();
-try{
-if((dojo["widget"])&&(dojo.widget["manager"])){
-dojo.widget.manager.destroyAll();
-}
-}
-catch(e){
-}
-if(dojo.widget){
-for(var name in dojo.widget._templateCache){
-if(dojo.widget._templateCache[name].node){
-dojo.dom.destroyNode(dojo.widget._templateCache[name].node);
-dojo.widget._templateCache[name].node=null;
-delete dojo.widget._templateCache[name].node;
-}
-}
-}
-try{
-window.onload=null;
-}
-catch(e){
-}
-try{
-window.onunload=null;
-}
-catch(e){
-}
-dojo._ie_clobber.clobberNodes=[];
-});
-}
-dojo.event.browser=new function(){
-var _22c=0;
-this.normalizedEventName=function(_22d){
-switch(_22d){
-case "CheckboxStateChange":
-case "DOMAttrModified":
-case "DOMMenuItemActive":
-case "DOMMenuItemInactive":
-case "DOMMouseScroll":
-case "DOMNodeInserted":
-case "DOMNodeRemoved":
-case "RadioStateChange":
-return _22d;
-break;
-default:
-return _22d.toLowerCase();
-break;
-}
-};
-this.clean=function(node){
-if(dojo.render.html.ie){
-dojo._ie_clobber.clobber(node);
-}
-};
-this.addClobberNode=function(node){
-if(!dojo.render.html.ie){
-return;
-}
-if(!node["__doClobber__"]){
-node.__doClobber__=true;
-dojo._ie_clobber.clobberNodes.push(node);
-node.__clobberAttrs__=[];
-}
-};
-this.addClobberNodeAttrs=function(node,_231){
-if(!dojo.render.html.ie){
-return;
-}
-this.addClobberNode(node);
-for(var x=0;x<_231.length;x++){
-node.__clobberAttrs__.push(_231[x]);
-}
-};
-this.removeListener=function(node,_234,fp,_236){
-if(!_236){
-var _236=false;
-}
-_234=dojo.event.browser.normalizedEventName(_234);
-if((_234=="onkey")||(_234=="key")){
-if(dojo.render.html.ie){
-this.removeListener(node,"onkeydown",fp,_236);
-}
-_234="onkeypress";
-}
-if(_234.substr(0,2)=="on"){
-_234=_234.substr(2);
-}
-if(node.removeEventListener){
-node.removeEventListener(_234,fp,_236);
-}
-};
-this.addListener=function(node,_238,fp,_23a,_23b){
-if(!node){
-return;
-}
-if(!_23a){
-var _23a=false;
-}
-_238=dojo.event.browser.normalizedEventName(_238);
-if((_238=="onkey")||(_238=="key")){
-if(dojo.render.html.ie){
-this.addListener(node,"onkeydown",fp,_23a,_23b);
-}
-_238="onkeypress";
-}
-if(_238.substr(0,2)!="on"){
-_238="on"+_238;
-}
-if(!_23b){
-var _23c=function(evt){
-if(!evt){
-evt=window.event;
-}
-var ret=fp(dojo.event.browser.fixEvent(evt,this));
-if(_23a){
-dojo.event.browser.stopEvent(evt);
-}
-return ret;
-};
-}else{
-_23c=fp;
-}
-if(node.addEventListener){
-node.addEventListener(_238.substr(2),_23c,_23a);
-return _23c;
-}else{
-if(typeof node[_238]=="function"){
-var _23f=node[_238];
-node[_238]=function(e){
-_23f(e);
-return _23c(e);
-};
-}else{
-node[_238]=_23c;
-}
-if(dojo.render.html.ie){
-this.addClobberNodeAttrs(node,[_238]);
-}
-return _23c;
-}
-};
-this.isEvent=function(obj){
-return (typeof obj!="undefined")&&(obj)&&(typeof Event!="undefined")&&(obj.eventPhase);
-};
-this.currentEvent=null;
-this.callListener=function(_242,_243){
-if(typeof _242!="function"){
-dojo.raise("listener not a function: "+_242);
-}
-dojo.event.browser.currentEvent.currentTarget=_243;
-return _242.call(_243,dojo.event.browser.currentEvent);
-};
-this._stopPropagation=function(){
-dojo.event.browser.currentEvent.cancelBubble=true;
-};
-this._preventDefault=function(){
-dojo.event.browser.currentEvent.returnValue=false;
-};
-this.keys={KEY_BACKSPACE:8,KEY_TAB:9,KEY_CLEAR:12,KEY_ENTER:13,KEY_SHIFT:16,KEY_CTRL:17,KEY_ALT:18,KEY_PAUSE:19,KEY_CAPS_LOCK:20,KEY_ESCAPE:27,KEY_SPACE:32,KEY_PAGE_UP:33,KEY_PAGE_DOWN:34,KEY_END:35,KEY_HOME:36,KEY_LEFT_ARROW:37,KEY_UP_ARROW:38,KEY_RIGHT_ARROW:39,KEY_DOWN_ARROW:40,KEY_INSERT:45,KEY_DELETE:46,KEY_HELP:47,KEY_LEFT_WINDOW:91,KEY_RIGHT_WINDOW:92,KEY_SELECT:93,KEY_NUMPAD_0:96,KEY_NUMPAD_1:97,KEY_NUMPAD_2:98,KEY_NUMPAD_3:99,KEY_NUMPAD_4:100,KEY_NUMPAD_5:101,KEY_NUMPAD_6:102,KEY_NUMPAD_7:103,KEY_NUMPAD_8:104,KEY_NUMPAD_9:105,KEY_NUMPAD_MULTIPLY:106,KEY_NUMPAD_PLUS:107,KEY_NUMPAD_ENTER:108,KEY_NUMPAD_MINUS:109,KEY_NUMPAD_PERIOD:110,KEY_NUMPAD_DIVIDE:111,KEY_F1:112,KEY_F2:113,KEY_F3:114,KEY_F4:115,KEY_F5:116,KEY_F6:117,KEY_F7:118,KEY_F8:119,KEY_F9:120,KEY_F10:121,KEY_F11:122,KEY_F12:123,KEY_F13:124,KEY_F14:125,KEY_F15:126,KEY_NUM_LOCK:144,KEY_SCROLL_LOCK:145};
-this.revKeys=[];
-for(var key in this.keys){
-this.revKeys[this.keys[key]]=key;
-}
-this.fixEvent=function(evt,_246){
-if(!evt){
-if(window["event"]){
-evt=window.event;
-}
-}
-if((evt["type"])&&(evt["type"].indexOf("key")==0)){
-evt.keys=this.revKeys;
-for(var key in this.keys){
-evt[key]=this.keys[key];
-}
-if(evt["type"]=="keydown"&&dojo.render.html.ie){
-switch(evt.keyCode){
-case evt.KEY_SHIFT:
-case evt.KEY_CTRL:
-case evt.KEY_ALT:
-case evt.KEY_CAPS_LOCK:
-case evt.KEY_LEFT_WINDOW:
-case evt.KEY_RIGHT_WINDOW:
-case evt.KEY_SELECT:
-case evt.KEY_NUM_LOCK:
-case evt.KEY_SCROLL_LOCK:
-case evt.KEY_NUMPAD_0:
-case evt.KEY_NUMPAD_1:
-case evt.KEY_NUMPAD_2:
-case evt.KEY_NUMPAD_3:
-case evt.KEY_NUMPAD_4:
-case evt.KEY_NUMPAD_5:
-case evt.KEY_NUMPAD_6:
-case evt.KEY_NUMPAD_7:
-case evt.KEY_NUMPAD_8:
-case evt.KEY_NUMPAD_9:
-case evt.KEY_NUMPAD_PERIOD:
-break;
-case evt.KEY_NUMPAD_MULTIPLY:
-case evt.KEY_NUMPAD_PLUS:
-case evt.KEY_NUMPAD_ENTER:
-case evt.KEY_NUMPAD_MINUS:
-case evt.KEY_NUMPAD_DIVIDE:
-break;
-case evt.KEY_PAUSE:
-case evt.KEY_TAB:
-case evt.KEY_BACKSPACE:
-case evt.KEY_ENTER:
-case evt.KEY_ESCAPE:
-case evt.KEY_PAGE_UP:
-case evt.KEY_PAGE_DOWN:
-case evt.KEY_END:
-case evt.KEY_HOME:
-case evt.KEY_LEFT_ARROW:
-case evt.KEY_UP_ARROW:
-case evt.KEY_RIGHT_ARROW:
-case evt.KEY_DOWN_ARROW:
-case evt.KEY_INSERT:
-case evt.KEY_DELETE:
-case evt.KEY_F1:
-case evt.KEY_F2:
-case evt.KEY_F3:
-case evt.KEY_F4:
-case evt.KEY_F5:
-case evt.KEY_F6:
-case evt.KEY_F7:
-case evt.KEY_F8:
-case evt.KEY_F9:
-case evt.KEY_F10:
-case evt.KEY_F11:
-case evt.KEY_F12:
-case evt.KEY_F12:
-case evt.KEY_F13:
-case evt.KEY_F14:
-case evt.KEY_F15:
-case evt.KEY_CLEAR:
-case evt.KEY_HELP:
-evt.key=evt.keyCode;
-break;
-default:
-if(evt.ctrlKey||evt.altKey){
-var _248=evt.keyCode;
-if(_248>=65&&_248<=90&&evt.shiftKey==false){
-_248+=32;
-}
-if(_248>=1&&_248<=26&&evt.ctrlKey){
-_248+=96;
-}
-evt.key=String.fromCharCode(_248);
-}
-}
-}else{
-if(evt["type"]=="keypress"){
-if(dojo.render.html.opera){
-if(evt.which==0){
-evt.key=evt.keyCode;
-}else{
-if(evt.which>0){
-switch(evt.which){
-case evt.KEY_SHIFT:
-case evt.KEY_CTRL:
-case evt.KEY_ALT:
-case evt.KEY_CAPS_LOCK:
-case evt.KEY_NUM_LOCK:
-case evt.KEY_SCROLL_LOCK:
-break;
-case evt.KEY_PAUSE:
-case evt.KEY_TAB:
-case evt.KEY_BACKSPACE:
-case evt.KEY_ENTER:
-case evt.KEY_ESCAPE:
-evt.key=evt.which;
-break;
-default:
-var _248=evt.which;
-if((evt.ctrlKey||evt.altKey||evt.metaKey)&&(evt.which>=65&&evt.which<=90&&evt.shiftKey==false)){
-_248+=32;
-}
-evt.key=String.fromCharCode(_248);
-}
-}
-}
-}else{
-if(dojo.render.html.ie){
-if(!evt.ctrlKey&&!evt.altKey&&evt.keyCode>=evt.KEY_SPACE){
-evt.key=String.fromCharCode(evt.keyCode);
-}
-}else{
-if(dojo.render.html.safari){
-switch(evt.keyCode){
-case 25:
-evt.key=evt.KEY_TAB;
-evt.shift=true;
-break;
-case 63232:
-evt.key=evt.KEY_UP_ARROW;
-break;
-case 63233:
-evt.key=evt.KEY_DOWN_ARROW;
-break;
-case 63234:
-evt.key=evt.KEY_LEFT_ARROW;
-break;
-case 63235:
-evt.key=evt.KEY_RIGHT_ARROW;
-break;
-case 63236:
-evt.key=evt.KEY_F1;
-break;
-case 63237:
-evt.key=evt.KEY_F2;
-break;
-case 63238:
-evt.key=evt.KEY_F3;
-break;
-case 63239:
-evt.key=evt.KEY_F4;
-break;
-case 63240:
-evt.key=evt.KEY_F5;
-break;
-case 63241:
-evt.key=evt.KEY_F6;
-break;
-case 63242:
-evt.key=evt.KEY_F7;
-break;
-case 63243:
-evt.key=evt.KEY_F8;
-break;
-case 63244:
-evt.key=evt.KEY_F9;
-break;
-case 63245:
-evt.key=evt.KEY_F10;
-break;
-case 63246:
-evt.key=evt.KEY_F11;
-break;
-case 63247:
-evt.key=evt.KEY_F12;
-break;
-case 63250:
-evt.key=evt.KEY_PAUSE;
-break;
-case 63272:
-evt.key=evt.KEY_DELETE;
-break;
-case 63273:
-evt.key=evt.KEY_HOME;
-break;
-case 63275:
-evt.key=evt.KEY_END;
-break;
-case 63276:
-evt.key=evt.KEY_PAGE_UP;
-break;
-case 63277:
-evt.key=evt.KEY_PAGE_DOWN;
-break;
-case 63302:
-evt.key=evt.KEY_INSERT;
-break;
-case 63248:
-case 63249:
-case 63289:
-break;
-default:
-evt.key=evt.charCode>=evt.KEY_SPACE?String.fromCharCode(evt.charCode):evt.keyCode;
-}
-}else{
-evt.key=evt.charCode>0?String.fromCharCode(evt.charCode):evt.keyCode;
-}
-}
-}
-}
-}
-}
-if(dojo.render.html.ie){
-if(!evt.target){
-evt.target=evt.srcElement;
-}
-if(!evt.currentTarget){
-evt.currentTarget=(_246?_246:evt.srcElement);
-}
-if(!evt.layerX){
-evt.layerX=evt.offsetX;
-}
-if(!evt.layerY){
-evt.layerY=evt.offsetY;
-}
-var doc=(evt.srcElement&&evt.srcElement.ownerDocument)?evt.srcElement.ownerDocument:document;
-var _24a=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
-if(!evt.pageX){
-evt.pageX=evt.clientX+(_24a.scrollLeft||0);
-}
-if(!evt.pageY){
-evt.pageY=evt.clientY+(_24a.scrollTop||0);
-}
-if(evt.type=="mouseover"){
-evt.relatedTarget=evt.fromElement;
-}
-if(evt.type=="mouseout"){
-evt.relatedTarget=evt.toElement;
-}
-this.currentEvent=evt;
-evt.callListener=this.callListener;
-evt.stopPropagation=this._stopPropagation;
-evt.preventDefault=this._preventDefault;
-}
-return evt;
-};
-this.stopEvent=function(evt){
-if(window.event){
-evt.cancelBubble=true;
-evt.returnValue=false;
-}else{
-evt.preventDefault();
-evt.stopPropagation();
-}
-};
-};
-dojo.provide("dojo.event.*");
-dojo.provide("dojo.string.common");
-dojo.string.trim=function(str,wh){
-if(!str.replace){
-return str;
-}
-if(!str.length){
-return str;
-}
-var re=(wh>0)?(/^\s+/):(wh<0)?(/\s+$/):(/^\s+|\s+$/g);
-return str.replace(re,"");
-};
-dojo.string.trimStart=function(str){
-return dojo.string.trim(str,1);
-};
-dojo.string.trimEnd=function(str){
-return dojo.string.trim(str,-1);
-};
-dojo.string.repeat=function(str,_252,_253){
-var out="";
-for(var i=0;i<_252;i++){
-out+=str;
-if(_253&&i<_252-1){
-out+=_253;
-}
-}
-return out;
-};
-dojo.string.pad=function(str,len,c,dir){
-var out=String(str);
-if(!c){
-c="0";
-}
-if(!dir){
-dir=1;
-}
-while(out.length<len){
-if(dir>0){
-out=c+out;
-}else{
-out+=c;
-}
-}
-return out;
-};
-dojo.string.padLeft=function(str,len,c){
-return dojo.string.pad(str,len,c,1);
-};
-dojo.string.padRight=function(str,len,c){
-return dojo.string.pad(str,len,c,-1);
-};
-dojo.provide("dojo.string");
-dojo.provide("dojo.io.common");
-dojo.io.transports=[];
-dojo.io.hdlrFuncNames=["load","error","timeout"];
-dojo.io.Request=function(url,_262,_263,_264){
-if((arguments.length==1)&&(arguments[0].constructor==Object)){
-this.fromKwArgs(arguments[0]);
-}else{
-this.url=url;
-if(_262){
-this.mimetype=_262;
-}
-if(_263){
-this.transport=_263;
-}
-if(arguments.length>=4){
-this.changeUrl=_264;
-}
-}
-};
-dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_267,_268){
-},error:function(type,_26a,_26b,_26c){
-},timeout:function(type,_26e,_26f,_270){
-},handle:function(type,data,_273,_274){
-},timeoutSeconds:0,abort:function(){
-},fromKwArgs:function(_275){
-if(_275["url"]){
-_275.url=_275.url.toString();
-}
-if(_275["formNode"]){
-_275.formNode=dojo.byId(_275.formNode);
-}
-if(!_275["method"]&&_275["formNode"]&&_275["formNode"].method){
-_275.method=_275["formNode"].method;
-}
-if(!_275["handle"]&&_275["handler"]){
-_275.handle=_275.handler;
-}
-if(!_275["load"]&&_275["loaded"]){
-_275.load=_275.loaded;
-}
-if(!_275["changeUrl"]&&_275["changeURL"]){
-_275.changeUrl=_275.changeURL;
-}
-_275.encoding=dojo.lang.firstValued(_275["encoding"],djConfig["bindEncoding"],"");
-_275.sendTransport=dojo.lang.firstValued(_275["sendTransport"],djConfig["ioSendTransport"],false);
-var _276=dojo.lang.isFunction;
-for(var x=0;x<dojo.io.hdlrFuncNames.length;x++){
-var fn=dojo.io.hdlrFuncNames[x];
-if(_275[fn]&&_276(_275[fn])){
-continue;
-}
-if(_275["handle"]&&_276(_275["handle"])){
-_275[fn]=_275.handle;
-}
-}
-dojo.lang.mixin(this,_275);
-}});
-dojo.io.Error=function(msg,type,num){
-this.message=msg;
-this.type=type||"unknown";
-this.number=num||0;
-};
-dojo.io.transports.addTransport=function(name){
-this.push(name);
-this[name]=dojo.io[name];
-};
-dojo.io.bind=function(_27d){
-if(!(_27d instanceof dojo.io.Request)){
-try{
-_27d=new dojo.io.Request(_27d);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _27e="";
-if(_27d["transport"]){
-_27e=_27d["transport"];
-if(!this[_27e]){
-dojo.io.sendBindError(_27d,"No dojo.io.bind() transport with name '"+_27d["transport"]+"'.");
-return _27d;
-}
-if(!this[_27e].canHandle(_27d)){
-dojo.io.sendBindError(_27d,"dojo.io.bind() transport with name '"+_27d["transport"]+"' cannot handle this type of request.");
-return _27d;
-}
-}else{
-for(var x=0;x<dojo.io.transports.length;x++){
-var tmp=dojo.io.transports[x];
-if((this[tmp])&&(this[tmp].canHandle(_27d))){
-_27e=tmp;
-break;
-}
-}
-if(_27e==""){
-dojo.io.sendBindError(_27d,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
-return _27d;
-}
-}
-this[_27e].bind(_27d);
-_27d.bindSuccess=true;
-return _27d;
-};
-dojo.io.sendBindError=function(_281,_282){
-if((typeof _281.error=="function"||typeof _281.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
-var _283=new dojo.io.Error(_282);
-setTimeout(function(){
-_281[(typeof _281.error=="function")?"error":"handle"]("error",_283,null,_281);
-},50);
-}else{
-dojo.raise(_282);
-}
-};
-dojo.io.queueBind=function(_284){
-if(!(_284 instanceof dojo.io.Request)){
-try{
-_284=new dojo.io.Request(_284);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _285=_284.load;
-_284.load=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_285.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-var _287=_284.error;
-_284.error=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_287.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-dojo.io._bindQueue.push(_284);
-dojo.io._dispatchNextQueueBind();
-return _284;
-};
-dojo.io._dispatchNextQueueBind=function(){
-if(!dojo.io._queueBindInFlight){
-dojo.io._queueBindInFlight=true;
-if(dojo.io._bindQueue.length>0){
-dojo.io.bind(dojo.io._bindQueue.shift());
-}else{
-dojo.io._queueBindInFlight=false;
-}
-}
-};
-dojo.io._bindQueue=[];
-dojo.io._queueBindInFlight=false;
-dojo.io.argsFromMap=function(map,_28a,last){
-var enc=/utf/i.test(_28a||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _28d=[];
-var _28e=new Object();
-for(var name in map){
-var _290=function(elt){
-var val=enc(name)+"="+enc(elt);
-_28d[(last==name)?"push":"unshift"](val);
-};
-if(!_28e[name]){
-var _293=map[name];
-if(dojo.lang.isArray(_293)){
-dojo.lang.forEach(_293,_290);
-}else{
-_290(_293);
-}
-}
-}
-return _28d.join("&");
-};
-dojo.io.setIFrameSrc=function(_294,src,_296){
-try{
-var r=dojo.render.html;
-if(!_296){
-if(r.safari){
-_294.location=src;
-}else{
-frames[_294.name].location=src;
-}
-}else{
-var idoc;
-if(r.ie){
-idoc=_294.contentWindow.document;
-}else{
-if(r.safari){
-idoc=_294.document;
-}else{
-idoc=_294.contentWindow;
-}
-}
-if(!idoc){
-_294.location=src;
-return;
-}else{
-idoc.location.replace(src);
-}
-}
-}
-catch(e){
-dojo.debug(e);
-dojo.debug("setIFrameSrc: "+e);
-}
-};
-dojo.provide("dojo.string.extras");
-dojo.string.substituteParams=function(_299,hash){
-var map=(typeof hash=="object")?hash:dojo.lang.toArray(arguments,1);
-return _299.replace(/\%\{(\w+)\}/g,function(_29c,key){
-if(typeof (map[key])!="undefined"&&map[key]!=null){
-return map[key];
-}
-dojo.raise("Substitution not found: "+key);
-});
-};
-dojo.string.capitalize=function(str){
-if(!dojo.lang.isString(str)){
-return "";
-}
-if(arguments.length==0){
-str=this;
-}
-var _29f=str.split(" ");
-for(var i=0;i<_29f.length;i++){
-_29f[i]=_29f[i].charAt(0).toUpperCase()+_29f[i].substring(1);
-}
-return _29f.join(" ");
-};
-dojo.string.isBlank=function(str){
-if(!dojo.lang.isString(str)){
-return true;
-}
-return (dojo.string.trim(str).length==0);
-};
-dojo.string.encodeAscii=function(str){
-if(!dojo.lang.isString(str)){
-return str;
-}
-var ret="";
-var _2a4=escape(str);
-var _2a5,re=/%u([0-9A-F]{4})/i;
-while((_2a5=_2a4.match(re))){
-var num=Number("0x"+_2a5[1]);
-var _2a8=escape("&#"+num+";");
-ret+=_2a4.substring(0,_2a5.index)+_2a8;
-_2a4=_2a4.substring(_2a5.index+_2a5[0].length);
-}
-ret+=_2a4.replace(/\+/g,"%2B");
-return ret;
-};
-dojo.string.escape=function(type,str){
-var args=dojo.lang.toArray(arguments,1);
-switch(type.toLowerCase()){
-case "xml":
-case "html":
-case "xhtml":
-return dojo.string.escapeXml.apply(this,args);
-case "sql":
-return dojo.string.escapeSql.apply(this,args);
-case "regexp":
-case "regex":
-return dojo.string.escapeRegExp.apply(this,args);
-case "javascript":
-case "jscript":
-case "js":
-return dojo.string.escapeJavaScript.apply(this,args);
-case "ascii":
-return dojo.string.encodeAscii.apply(this,args);
-default:
-return str;
-}
-};
-dojo.string.escapeXml=function(str,_2ad){
-str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_2ad){
-str=str.replace(/'/gm,"&#39;");
-}
-return str;
-};
-dojo.string.escapeSql=function(str){
-return str.replace(/'/gm,"''");
-};
-dojo.string.escapeRegExp=function(str){
-return str.replace(/\\/gm,"\\\\").replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm,"\\$1");
-};
-dojo.string.escapeJavaScript=function(str){
-return str.replace(/(["'\f\b\n\t\r])/gm,"\\$1");
-};
-dojo.string.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.string.summary=function(str,len){
-if(!len||str.length<=len){
-return str;
-}
-return str.substring(0,len).replace(/\.+$/,"")+"...";
-};
-dojo.string.endsWith=function(str,end,_2b6){
-if(_2b6){
-str=str.toLowerCase();
-end=end.toLowerCase();
-}
-if((str.length-end.length)<0){
-return false;
-}
-return str.lastIndexOf(end)==str.length-end.length;
-};
-dojo.string.endsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.endsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.startsWith=function(str,_2ba,_2bb){
-if(_2bb){
-str=str.toLowerCase();
-_2ba=_2ba.toLowerCase();
-}
-return str.indexOf(_2ba)==0;
-};
-dojo.string.startsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.startsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.has=function(str){
-for(var i=1;i<arguments.length;i++){
-if(str.indexOf(arguments[i])>-1){
-return true;
-}
-}
-return false;
-};
-dojo.string.normalizeNewlines=function(text,_2c1){
-if(_2c1=="\n"){
-text=text.replace(/\r\n/g,"\n");
-text=text.replace(/\r/g,"\n");
-}else{
-if(_2c1=="\r"){
-text=text.replace(/\r\n/g,"\r");
-text=text.replace(/\n/g,"\r");
-}else{
-text=text.replace(/([^\r])\n/g,"$1\r\n").replace(/\r([^\n])/g,"\r\n$1");
-}
-}
-return text;
-};
-dojo.string.splitEscaped=function(str,_2c3){
-var _2c4=[];
-for(var i=0,_2c6=0;i<str.length;i++){
-if(str.charAt(i)=="\\"){
-i++;
-continue;
-}
-if(str.charAt(i)==_2c3){
-_2c4.push(str.substring(_2c6,i));
-_2c6=i+1;
-}
-}
-_2c4.push(str.substr(_2c6));
-return _2c4;
-};
+dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&!djConfig["useXDomain"],"dojo.browser_debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&djConfig["useXDomain"],"dojo.browser_debug_xd");
 dojo.provide("dojo.dom");
 dojo.dom.ELEMENT_NODE=1;
 dojo.dom.ATTRIBUTE_NODE=2;
@@ -24170,102 +18971,102 @@
 }
 };
 dojo.dom.getUniqueId=function(){
-var _2c8=dojo.doc();
+var _ef=dojo.doc();
 do{
 var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_2c8.getElementById(id));
+}while(_ef.getElementById(id));
 return id;
 };
 dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_2ca,_2cb){
-var node=_2ca.firstChild;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.nextSibling;
+dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_f1,_f2){
+var _f3=_f1.firstChild;
+while(_f3&&_f3.nodeType!=dojo.dom.ELEMENT_NODE){
+_f3=_f3.nextSibling;
 }
-if(_2cb&&node&&node.tagName&&node.tagName.toLowerCase()!=_2cb.toLowerCase()){
-node=dojo.dom.nextElement(node,_2cb);
+if(_f2&&_f3&&_f3.tagName&&_f3.tagName.toLowerCase()!=_f2.toLowerCase()){
+_f3=dojo.dom.nextElement(_f3,_f2);
 }
-return node;
+return _f3;
 };
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_2cd,_2ce){
-var node=_2cd.lastChild;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.previousSibling;
+dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_f4,_f5){
+var _f6=_f4.lastChild;
+while(_f6&&_f6.nodeType!=dojo.dom.ELEMENT_NODE){
+_f6=_f6.previousSibling;
 }
-if(_2ce&&node&&node.tagName&&node.tagName.toLowerCase()!=_2ce.toLowerCase()){
-node=dojo.dom.prevElement(node,_2ce);
+if(_f5&&_f6&&_f6.tagName&&_f6.tagName.toLowerCase()!=_f5.toLowerCase()){
+_f6=dojo.dom.prevElement(_f6,_f5);
 }
-return node;
+return _f6;
 };
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_2d1){
-if(!node){
+dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(_f7,_f8){
+if(!_f7){
 return null;
 }
 do{
-node=node.nextSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_2d1&&_2d1.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.nextElement(node,_2d1);
+_f7=_f7.nextSibling;
+}while(_f7&&_f7.nodeType!=dojo.dom.ELEMENT_NODE);
+if(_f7&&_f8&&_f8.toLowerCase()!=_f7.tagName.toLowerCase()){
+return dojo.dom.nextElement(_f7,_f8);
 }
-return node;
+return _f7;
 };
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_2d3){
-if(!node){
+dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(_f9,_fa){
+if(!_f9){
 return null;
 }
-if(_2d3){
-_2d3=_2d3.toLowerCase();
+if(_fa){
+_fa=_fa.toLowerCase();
 }
 do{
-node=node.previousSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_2d3&&_2d3.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_2d3);
+_f9=_f9.previousSibling;
+}while(_f9&&_f9.nodeType!=dojo.dom.ELEMENT_NODE);
+if(_f9&&_fa&&_fa.toLowerCase()!=_f9.tagName.toLowerCase()){
+return dojo.dom.prevElement(_f9,_fa);
 }
-return node;
+return _f9;
 };
-dojo.dom.moveChildren=function(_2d4,_2d5,trim){
-var _2d7=0;
-if(trim){
-while(_2d4.hasChildNodes()&&_2d4.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_2d4.removeChild(_2d4.firstChild);
+dojo.dom.moveChildren=function(_fb,_fc,_fd){
+var _fe=0;
+if(_fd){
+while(_fb.hasChildNodes()&&_fb.firstChild.nodeType==dojo.dom.TEXT_NODE){
+_fb.removeChild(_fb.firstChild);
 }
-while(_2d4.hasChildNodes()&&_2d4.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_2d4.removeChild(_2d4.lastChild);
+while(_fb.hasChildNodes()&&_fb.lastChild.nodeType==dojo.dom.TEXT_NODE){
+_fb.removeChild(_fb.lastChild);
 }
 }
-while(_2d4.hasChildNodes()){
-_2d5.appendChild(_2d4.firstChild);
-_2d7++;
+while(_fb.hasChildNodes()){
+_fc.appendChild(_fb.firstChild);
+_fe++;
 }
-return _2d7;
+return _fe;
 };
-dojo.dom.copyChildren=function(_2d8,_2d9,trim){
-var _2db=_2d8.cloneNode(true);
-return this.moveChildren(_2db,_2d9,trim);
+dojo.dom.copyChildren=function(_ff,_100,trim){
+var _102=_ff.cloneNode(true);
+return this.moveChildren(_102,_100,trim);
 };
-dojo.dom.replaceChildren=function(node,_2dd){
-var _2de=[];
+dojo.dom.replaceChildren=function(node,_104){
+var _105=[];
 if(dojo.render.html.ie){
 for(var i=0;i<node.childNodes.length;i++){
-_2de.push(node.childNodes[i]);
+_105.push(node.childNodes[i]);
 }
 }
 dojo.dom.removeChildren(node);
-node.appendChild(_2dd);
-for(var i=0;i<_2de.length;i++){
-dojo.dom.destroyNode(_2de[i]);
+node.appendChild(_104);
+for(var i=0;i<_105.length;i++){
+dojo.dom.destroyNode(_105[i]);
 }
 };
 dojo.dom.removeChildren=function(node){
-var _2e1=node.childNodes.length;
+var _108=node.childNodes.length;
 while(node.hasChildNodes()){
 dojo.dom.removeNode(node.firstChild);
 }
-return _2e1;
+return _108;
 };
-dojo.dom.replaceNode=function(node,_2e3){
-return node.parentNode.replaceChild(_2e3,node);
+dojo.dom.replaceNode=function(node,_10a){
+return node.parentNode.replaceChild(_10a,node);
 };
 dojo.dom.destroyNode=function(node){
 if(node.parentNode){
@@ -24285,2707 +19086,38 @@
 return node.parentNode.removeChild(node);
 }
 };
-dojo.dom.getAncestors=function(node,_2e7,_2e8){
-var _2e9=[];
-var _2ea=(_2e7&&(_2e7 instanceof Function||typeof _2e7=="function"));
+dojo.dom.getAncestors=function(node,_10e,_10f){
+var _110=[];
+var _111=(_10e&&(_10e instanceof Function||typeof _10e=="function"));
 while(node){
-if(!_2ea||_2e7(node)){
-_2e9.push(node);
+if(!_111||_10e(node)){
+_110.push(node);
 }
-if(_2e8&&_2e9.length>0){
-return _2e9[0];
+if(_10f&&_110.length>0){
+return _110[0];
 }
 node=node.parentNode;
 }
-if(_2e8){
+if(_10f){
 return null;
 }
-return _2e9;
-};
-dojo.dom.getAncestorsByTag=function(node,tag,_2ed){
-tag=tag.toLowerCase();
-return dojo.dom.getAncestors(node,function(el){
-return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_2ed);
-};
-dojo.dom.getFirstAncestorByTag=function(node,tag){
-return dojo.dom.getAncestorsByTag(node,tag,true);
-};
-dojo.dom.isDescendantOf=function(node,_2f2,_2f3){
-if(_2f3&&node){
-node=node.parentNode;
-}
-while(node){
-if(node==_2f2){
-return true;
-}
-node=node.parentNode;
-}
-return false;
-};
-dojo.dom.innerXML=function(node){
-if(node.innerXML){
-return node.innerXML;
-}else{
-if(node.xml){
-return node.xml;
-}else{
-if(typeof XMLSerializer!="undefined"){
-return (new XMLSerializer()).serializeToString(node);
-}
-}
-}
-};
-dojo.dom.createDocument=function(){
-var doc=null;
-var _2f6=dojo.doc();
-if(!dj_undef("ActiveXObject")){
-var _2f7=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_2f7.length;i++){
-try{
-doc=new ActiveXObject(_2f7[i]+".XMLDOM");
-}
-catch(e){
-}
-if(doc){
-break;
-}
-}
-}else{
-if((_2f6.implementation)&&(_2f6.implementation.createDocument)){
-doc=_2f6.implementation.createDocument("","",null);
-}
-}
-return doc;
-};
-dojo.dom.createDocumentFromText=function(str,_2fa){
-if(!_2fa){
-_2fa="text/xml";
-}
-if(!dj_undef("DOMParser")){
-var _2fb=new DOMParser();
-return _2fb.parseFromString(str,_2fa);
-}else{
-if(!dj_undef("ActiveXObject")){
-var _2fc=dojo.dom.createDocument();
-if(_2fc){
-_2fc.async=false;
-_2fc.loadXML(str);
-return _2fc;
-}else{
-dojo.debug("toXml didn't work?");
-}
-}else{
-var _2fd=dojo.doc();
-if(_2fd.createElement){
-var tmp=_2fd.createElement("xml");
-tmp.innerHTML=str;
-if(_2fd.implementation&&_2fd.implementation.createDocument){
-var _2ff=_2fd.implementation.createDocument("foo","",null);
-for(var i=0;i<tmp.childNodes.length;i++){
-_2ff.importNode(tmp.childNodes.item(i),true);
-}
-return _2ff;
-}
-return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
-}
-}
-}
-return null;
-};
-dojo.dom.prependChild=function(node,_302){
-if(_302.firstChild){
-_302.insertBefore(node,_302.firstChild);
-}else{
-_302.appendChild(node);
-}
-return true;
-};
-dojo.dom.insertBefore=function(node,ref,_305){
-if((_305!=true)&&(node===ref||node.nextSibling===ref)){
-return false;
-}
-var _306=ref.parentNode;
-_306.insertBefore(node,ref);
-return true;
-};
-dojo.dom.insertAfter=function(node,ref,_309){
-var pn=ref.parentNode;
-if(ref==pn.lastChild){
-if((_309!=true)&&(node===ref)){
-return false;
-}
-pn.appendChild(node);
-}else{
-return this.insertBefore(node,ref.nextSibling,_309);
-}
-return true;
-};
-dojo.dom.insertAtPosition=function(node,ref,_30d){
-if((!node)||(!ref)||(!_30d)){
-return false;
-}
-switch(_30d.toLowerCase()){
-case "before":
-return dojo.dom.insertBefore(node,ref);
-case "after":
-return dojo.dom.insertAfter(node,ref);
-case "first":
-if(ref.firstChild){
-return dojo.dom.insertBefore(node,ref.firstChild);
-}else{
-ref.appendChild(node);
-return true;
-}
-break;
-default:
-ref.appendChild(node);
-return true;
-}
-};
-dojo.dom.insertAtIndex=function(node,_30f,_310){
-var _311=_30f.childNodes;
-if(!_311.length||_311.length==_310){
-_30f.appendChild(node);
-return true;
-}
-if(_310==0){
-return dojo.dom.prependChild(node,_30f);
-}
-return dojo.dom.insertAfter(node,_311[_310-1]);
-};
-dojo.dom.textContent=function(node,text){
-if(arguments.length>1){
-var _314=dojo.doc();
-dojo.dom.replaceChildren(node,_314.createTextNode(text));
-return text;
-}else{
-if(node.textContent!=undefined){
-return node.textContent;
-}
-var _315="";
-if(node==null){
-return _315;
-}
-for(var i=0;i<node.childNodes.length;i++){
-switch(node.childNodes[i].nodeType){
-case 1:
-case 5:
-_315+=dojo.dom.textContent(node.childNodes[i]);
-break;
-case 3:
-case 2:
-case 4:
-_315+=node.childNodes[i].nodeValue;
-break;
-default:
-break;
-}
-}
-return _315;
-}
-};
-dojo.dom.hasParent=function(node){
-return Boolean(node&&node.parentNode&&dojo.dom.isNode(node.parentNode));
-};
-dojo.dom.isTag=function(node){
-if(node&&node.tagName){
-for(var i=1;i<arguments.length;i++){
-if(node.tagName==String(arguments[i])){
-return String(arguments[i]);
-}
-}
-}
-return "";
-};
-dojo.dom.setAttributeNS=function(elem,_31b,_31c,_31d){
-if(elem==null||((elem==undefined)&&(typeof elem=="undefined"))){
-dojo.raise("No element given to dojo.dom.setAttributeNS");
-}
-if(!((elem.setAttributeNS==undefined)&&(typeof elem.setAttributeNS=="undefined"))){
-elem.setAttributeNS(_31b,_31c,_31d);
-}else{
-var _31e=elem.ownerDocument;
-var _31f=_31e.createNode(2,_31c,_31b);
-_31f.nodeValue=_31d;
-elem.setAttributeNode(_31f);
-}
-};
-dojo.provide("dojo.undo.browser");
-try{
-if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
-}
-}
-catch(e){
-}
-if(dojo.render.html.opera){
-dojo.debug("Opera is not supported with dojo.undo.browser, so back/forward detection will not work.");
-}
-dojo.undo.browser={initialHref:(!dj_undef("window"))?window.location.href:"",initialHash:(!dj_undef("window"))?window.location.hash:"",moveForward:false,historyStack:[],forwardStack:[],historyIframe:null,bookmarkAnchor:null,locationTimer:null,setInitialState:function(args){
-this.initialState=this._createState(this.initialHref,args,this.initialHash);
-},addToHistory:function(args){
-this.forwardStack=[];
-var hash=null;
-var url=null;
-if(!this.historyIframe){
-this.historyIframe=window.frames["djhistory"];
-}
-if(!this.bookmarkAnchor){
-this.bookmarkAnchor=document.createElement("a");
-dojo.body().appendChild(this.bookmarkAnchor);
-this.bookmarkAnchor.style.display="none";
-}
-if(args["changeUrl"]){
-hash="#"+((args["changeUrl"]!==true)?args["changeUrl"]:(new Date()).getTime());
-if(this.historyStack.length==0&&this.initialState.urlHash==hash){
-this.initialState=this._createState(url,args,hash);
-return;
-}else{
-if(this.historyStack.length>0&&this.historyStack[this.historyStack.length-1].urlHash==hash){
-this.historyStack[this.historyStack.length-1]=this._createState(url,args,hash);
-return;
-}
-}
-this.changingUrl=true;
-setTimeout("window.location.href = '"+hash+"'; dojo.undo.browser.changingUrl = false;",1);
-this.bookmarkAnchor.href=hash;
-if(dojo.render.html.ie){
-url=this._loadIframeHistory();
-var _324=args["back"]||args["backButton"]||args["handle"];
-var tcb=function(_326){
-if(window.location.hash!=""){
-setTimeout("window.location.href = '"+hash+"';",1);
-}
-_324.apply(this,[_326]);
-};
-if(args["back"]){
-args.back=tcb;
-}else{
-if(args["backButton"]){
-args.backButton=tcb;
-}else{
-if(args["handle"]){
-args.handle=tcb;
-}
-}
-}
-var _327=args["forward"]||args["forwardButton"]||args["handle"];
-var tfw=function(_329){
-if(window.location.hash!=""){
-window.location.href=hash;
-}
-if(_327){
-_327.apply(this,[_329]);
-}
-};
-if(args["forward"]){
-args.forward=tfw;
-}else{
-if(args["forwardButton"]){
-args.forwardButton=tfw;
-}else{
-if(args["handle"]){
-args.handle=tfw;
-}
-}
-}
-}else{
-if(dojo.render.html.moz){
-if(!this.locationTimer){
-this.locationTimer=setInterval("dojo.undo.browser.checkLocation();",200);
-}
-}
-}
-}else{
-url=this._loadIframeHistory();
-}
-this.historyStack.push(this._createState(url,args,hash));
-},checkLocation:function(){
-if(!this.changingUrl){
-var hsl=this.historyStack.length;
-if((window.location.hash==this.initialHash||window.location.href==this.initialHref)&&(hsl==1)){
-this.handleBackButton();
-return;
-}
-if(this.forwardStack.length>0){
-if(this.forwardStack[this.forwardStack.length-1].urlHash==window.location.hash){
-this.handleForwardButton();
-return;
-}
-}
-if((hsl>=2)&&(this.historyStack[hsl-2])){
-if(this.historyStack[hsl-2].urlHash==window.location.hash){
-this.handleBackButton();
-return;
-}
-}
-}
-},iframeLoaded:function(evt,_32c){
-if(!dojo.render.html.opera){
-var _32d=this._getUrlQuery(_32c.href);
-if(_32d==null){
-if(this.historyStack.length==1){
-this.handleBackButton();
-}
-return;
-}
-if(this.moveForward){
-this.moveForward=false;
-return;
-}
-if(this.historyStack.length>=2&&_32d==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
-this.handleBackButton();
-}else{
-if(this.forwardStack.length>0&&_32d==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
-this.handleForwardButton();
-}
-}
-}
-},handleBackButton:function(){
-var _32e=this.historyStack.pop();
-if(!_32e){
-return;
-}
-var last=this.historyStack[this.historyStack.length-1];
-if(!last&&this.historyStack.length==0){
-last=this.initialState;
-}
-if(last){
-if(last.kwArgs["back"]){
-last.kwArgs["back"]();
-}else{
-if(last.kwArgs["backButton"]){
-last.kwArgs["backButton"]();
-}else{
-if(last.kwArgs["handle"]){
-last.kwArgs.handle("back");
-}
-}
-}
-}
-this.forwardStack.push(_32e);
-},handleForwardButton:function(){
-var last=this.forwardStack.pop();
-if(!last){
-return;
-}
-if(last.kwArgs["forward"]){
-last.kwArgs.forward();
-}else{
-if(last.kwArgs["forwardButton"]){
-last.kwArgs.forwardButton();
-}else{
-if(last.kwArgs["handle"]){
-last.kwArgs.handle("forward");
-}
-}
-}
-this.historyStack.push(last);
-},_createState:function(url,args,hash){
-return {"url":url,"kwArgs":args,"urlHash":hash};
-},_getUrlQuery:function(url){
-var _335=url.split("?");
-if(_335.length<2){
-return null;
-}else{
-return _335[1];
-}
-},_loadIframeHistory:function(){
-var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
-this.moveForward=true;
-dojo.io.setIFrameSrc(this.historyIframe,url,false);
-return url;
-}};
-dojo.provide("dojo.io.BrowserIO");
-if(!dj_undef("window")){
-dojo.io.checkChildrenForFile=function(node){
-var _338=false;
-var _339=node.getElementsByTagName("input");
-dojo.lang.forEach(_339,function(_33a){
-if(_338){
-return;
-}
-if(_33a.getAttribute("type")=="file"){
-_338=true;
-}
-});
-return _338;
-};
-dojo.io.formHasFile=function(_33b){
-return dojo.io.checkChildrenForFile(_33b);
-};
-dojo.io.updateNode=function(node,_33d){
-node=dojo.byId(node);
-var args=_33d;
-if(dojo.lang.isString(_33d)){
-args={url:_33d};
-}
-args.mimetype="text/html";
-args.load=function(t,d,e){
-while(node.firstChild){
-dojo.dom.destroyNode(node.firstChild);
-}
-node.innerHTML=d;
-};
-dojo.io.bind(args);
-};
-dojo.io.formFilter=function(node){
-var type=(node.type||"").toLowerCase();
-return !node.disabled&&node.name&&!dojo.lang.inArray(["file","submit","image","reset","button"],type);
-};
-dojo.io.encodeForm=function(_344,_345,_346){
-if((!_344)||(!_344.tagName)||(!_344.tagName.toLowerCase()=="form")){
-dojo.raise("Attempted to encode a non-form element.");
-}
-if(!_346){
-_346=dojo.io.formFilter;
-}
-var enc=/utf/i.test(_345||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _348=[];
-for(var i=0;i<_344.elements.length;i++){
-var elm=_344.elements[i];
-if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_346(elm)){
-continue;
-}
-var name=enc(elm.name);
-var type=elm.type.toLowerCase();
-if(type=="select-multiple"){
-for(var j=0;j<elm.options.length;j++){
-if(elm.options[j].selected){
-_348.push(name+"="+enc(elm.options[j].value));
-}
-}
-}else{
-if(dojo.lang.inArray(["radio","checkbox"],type)){
-if(elm.checked){
-_348.push(name+"="+enc(elm.value));
-}
-}else{
-_348.push(name+"="+enc(elm.value));
-}
-}
-}
-var _34e=_344.getElementsByTagName("input");
-for(var i=0;i<_34e.length;i++){
-var _34f=_34e[i];
-if(_34f.type.toLowerCase()=="image"&&_34f.form==_344&&_346(_34f)){
-var name=enc(_34f.name);
-_348.push(name+"="+enc(_34f.value));
-_348.push(name+".x=0");
-_348.push(name+".y=0");
-}
-}
-return _348.join("&")+"&";
-};
-dojo.io.FormBind=function(args){
-this.bindArgs={};
-if(args&&args.formNode){
-this.init(args);
-}else{
-if(args){
-this.init({formNode:args});
-}
-}
-};
-dojo.lang.extend(dojo.io.FormBind,{form:null,bindArgs:null,clickedButton:null,init:function(args){
-var form=dojo.byId(args.formNode);
-if(!form||!form.tagName||form.tagName.toLowerCase()!="form"){
-throw new Error("FormBind: Couldn't apply, invalid form");
-}else{
-if(this.form==form){
-return;
-}else{
-if(this.form){
-throw new Error("FormBind: Already applied to a form");
-}
-}
-}
-dojo.lang.mixin(this.bindArgs,args);
-this.form=form;
-this.connect(form,"onsubmit","submit");
-for(var i=0;i<form.elements.length;i++){
-var node=form.elements[i];
-if(node&&node.type&&dojo.lang.inArray(["submit","button"],node.type.toLowerCase())){
-this.connect(node,"onclick","click");
-}
-}
-var _355=form.getElementsByTagName("input");
-for(var i=0;i<_355.length;i++){
-var _356=_355[i];
-if(_356.type.toLowerCase()=="image"&&_356.form==form){
-this.connect(_356,"onclick","click");
-}
-}
-},onSubmit:function(form){
-return true;
-},submit:function(e){
-e.preventDefault();
-if(this.onSubmit(this.form)){
-dojo.io.bind(dojo.lang.mixin(this.bindArgs,{formFilter:dojo.lang.hitch(this,"formFilter")}));
-}
-},click:function(e){
-var node=e.currentTarget;
-if(node.disabled){
-return;
-}
-this.clickedButton=node;
-},formFilter:function(node){
-var type=(node.type||"").toLowerCase();
-var _35d=false;
-if(node.disabled||!node.name){
-_35d=false;
-}else{
-if(dojo.lang.inArray(["submit","button","image"],type)){
-if(!this.clickedButton){
-this.clickedButton=node;
-}
-_35d=node==this.clickedButton;
-}else{
-_35d=!dojo.lang.inArray(["file","submit","reset","button"],type);
-}
-}
-return _35d;
-},connect:function(_35e,_35f,_360){
-if(dojo.evalObjPath("dojo.event.connect")){
-dojo.event.connect(_35e,_35f,this,_360);
-}else{
-var fcn=dojo.lang.hitch(this,_360);
-_35e[_35f]=function(e){
-if(!e){
-e=window.event;
-}
-if(!e.currentTarget){
-e.currentTarget=e.srcElement;
-}
-if(!e.preventDefault){
-e.preventDefault=function(){
-window.event.returnValue=false;
-};
-}
-fcn(e);
-};
-}
-}});
-dojo.io.XMLHTTPTransport=new function(){
-var _363=this;
-var _364={};
-this.useCache=false;
-this.preventCache=false;
-function getCacheKey(url,_366,_367){
-return url+"|"+_366+"|"+_367.toLowerCase();
-}
-function addToCache(url,_369,_36a,http){
-_364[getCacheKey(url,_369,_36a)]=http;
-}
-function getFromCache(url,_36d,_36e){
-return _364[getCacheKey(url,_36d,_36e)];
-}
-this.clearCache=function(){
-_364={};
-};
-function doLoad(_36f,http,url,_372,_373){
-if(((http.status>=200)&&(http.status<300))||(http.status==304)||(location.protocol=="file:"&&(http.status==0||http.status==undefined))||(location.protocol=="chrome:"&&(http.status==0||http.status==undefined))){
-var ret;
-if(_36f.method.toLowerCase()=="head"){
-var _375=http.getAllResponseHeaders();
-ret={};
-ret.toString=function(){
-return _375;
-};
-var _376=_375.split(/[\r\n]+/g);
-for(var i=0;i<_376.length;i++){
-var pair=_376[i].match(/^([^:]+)\s*:\s*(.+)$/i);
-if(pair){
-ret[pair[1]]=pair[2];
-}
-}
-}else{
-if(_36f.mimetype=="text/javascript"){
-try{
-ret=dj_eval(http.responseText);
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(http.responseText);
-ret=null;
-}
-}else{
-if(_36f.mimetype=="text/json"||_36f.mimetype=="application/json"){
-try{
-ret=dj_eval("("+http.responseText+")");
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(http.responseText);
-ret=false;
-}
-}else{
-if((_36f.mimetype=="application/xml")||(_36f.mimetype=="text/xml")){
-ret=http.responseXML;
-if(!ret||typeof ret=="string"||!http.getResponseHeader("Content-Type")){
-ret=dojo.dom.createDocumentFromText(http.responseText);
-}
-}else{
-ret=http.responseText;
-}
-}
-}
-}
-if(_373){
-addToCache(url,_372,_36f.method,http);
-}
-_36f[(typeof _36f.load=="function")?"load":"handle"]("load",ret,http,_36f);
-}else{
-var _379=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-_36f[(typeof _36f.error=="function")?"error":"handle"]("error",_379,http,_36f);
-}
-}
-function setHeaders(http,_37b){
-if(_37b["headers"]){
-for(var _37c in _37b["headers"]){
-if(_37c.toLowerCase()=="content-type"&&!_37b["contentType"]){
-_37b["contentType"]=_37b["headers"][_37c];
-}else{
-http.setRequestHeader(_37c,_37b["headers"][_37c]);
-}
-}
-}
-}
-this.inFlight=[];
-this.inFlightTimer=null;
-this.startWatchingInFlight=function(){
-if(!this.inFlightTimer){
-this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
-}
-};
-this.watchInFlight=function(){
-var now=null;
-if(!dojo.hostenv._blockAsync&&!_363._blockAsync){
-for(var x=this.inFlight.length-1;x>=0;x--){
-try{
-var tif=this.inFlight[x];
-if(!tif||tif.http._aborted||!tif.http.readyState){
-this.inFlight.splice(x,1);
-continue;
-}
-if(4==tif.http.readyState){
-this.inFlight.splice(x,1);
-doLoad(tif.req,tif.http,tif.url,tif.query,tif.useCache);
-}else{
-if(tif.startTime){
-if(!now){
-now=(new Date()).getTime();
-}
-if(tif.startTime+(tif.req.timeoutSeconds*1000)<now){
-if(typeof tif.http.abort=="function"){
-tif.http.abort();
-}
-this.inFlight.splice(x,1);
-tif.req[(typeof tif.req.timeout=="function")?"timeout":"handle"]("timeout",null,tif.http,tif.req);
-}
-}
-}
-}
-catch(e){
-try{
-var _380=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
-tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_380,tif.http,tif.req);
-}
-catch(e2){
-dojo.debug("XMLHttpTransport error callback failed: "+e2);
-}
-}
-}
-}
-clearTimeout(this.inFlightTimer);
-if(this.inFlight.length==0){
-this.inFlightTimer=null;
-return;
-}
-this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
-};
-var _381=dojo.hostenv.getXmlhttpObject()?true:false;
-this.canHandle=function(_382){
-return _381&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_382["mimetype"].toLowerCase()||""))&&!(_382["formNode"]&&dojo.io.formHasFile(_382["formNode"]));
-};
-this.multipartBoundary="45309FFF-BD65-4d50-99C9-36986896A96F";
-this.bind=function(_383){
-if(!_383["url"]){
-if(!_383["formNode"]&&(_383["backButton"]||_383["back"]||_383["changeUrl"]||_383["watchForURL"])&&(!djConfig.preventBackButtonFix)){
-dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request","Use dojo.undo.browser.addToHistory() instead.","0.4");
-dojo.undo.browser.addToHistory(_383);
-return true;
-}
-}
-var url=_383.url;
-var _385="";
-if(_383["formNode"]){
-var ta=_383.formNode.getAttribute("action");
-if((ta)&&(!_383["url"])){
-url=ta;
-}
-var tp=_383.formNode.getAttribute("method");
-if((tp)&&(!_383["method"])){
-_383.method=tp;
-}
-_385+=dojo.io.encodeForm(_383.formNode,_383.encoding,_383["formFilter"]);
-}
-if(url.indexOf("#")>-1){
-dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url);
-url=url.split("#")[0];
-}
-if(_383["file"]){
-_383.method="post";
-}
-if(!_383["method"]){
-_383.method="get";
-}
-if(_383.method.toLowerCase()=="get"){
-_383.multipart=false;
-}else{
-if(_383["file"]){
-_383.multipart=true;
-}else{
-if(!_383["multipart"]){
-_383.multipart=false;
-}
-}
-}
-if(_383["backButton"]||_383["back"]||_383["changeUrl"]){
-dojo.undo.browser.addToHistory(_383);
-}
-var _388=_383["content"]||{};
-if(_383.sendTransport){
-_388["dojo.transport"]="xmlhttp";
-}
-do{
-if(_383.postContent){
-_385=_383.postContent;
-break;
-}
-if(_388){
-_385+=dojo.io.argsFromMap(_388,_383.encoding);
-}
-if(_383.method.toLowerCase()=="get"||!_383.multipart){
-break;
-}
-var t=[];
-if(_385.length){
-var q=_385.split("&");
-for(var i=0;i<q.length;++i){
-if(q[i].length){
-var p=q[i].split("=");
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+p[0]+"\"","",p[1]);
-}
-}
-}
-if(_383.file){
-if(dojo.lang.isArray(_383.file)){
-for(var i=0;i<_383.file.length;++i){
-var o=_383.file[i];
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}else{
-var o=_383.file;
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}
-if(t.length){
-t.push("--"+this.multipartBoundary+"--","");
-_385=t.join("\r\n");
-}
-}while(false);
-var _38e=_383["sync"]?false:true;
-var _38f=_383["preventCache"]||(this.preventCache==true&&_383["preventCache"]!=false);
-var _390=_383["useCache"]==true||(this.useCache==true&&_383["useCache"]!=false);
-if(!_38f&&_390){
-var _391=getFromCache(url,_385,_383.method);
-if(_391){
-doLoad(_383,_391,url,_385,false);
-return;
-}
-}
-var http=dojo.hostenv.getXmlhttpObject(_383);
-var _393=false;
-if(_38e){
-var _394=this.inFlight.push({"req":_383,"http":http,"url":url,"query":_385,"useCache":_390,"startTime":_383.timeoutSeconds?(new Date()).getTime():0});
-this.startWatchingInFlight();
-}else{
-_363._blockAsync=true;
-}
-if(_383.method.toLowerCase()=="post"){
-if(!_383.user){
-http.open("POST",url,_38e);
-}else{
-http.open("POST",url,_38e,_383.user,_383.password);
-}
-setHeaders(http,_383);
-http.setRequestHeader("Content-Type",_383.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_383.contentType||"application/x-www-form-urlencoded"));
-try{
-http.send(_385);
-}
-catch(e){
-if(typeof http.abort=="function"){
-http.abort();
-}
-doLoad(_383,{status:404},url,_385,_390);
-}
-}else{
-var _395=url;
-if(_385!=""){
-_395+=(_395.indexOf("?")>-1?"&":"?")+_385;
-}
-if(_38f){
-_395+=(dojo.string.endsWithAny(_395,"?","&")?"":(_395.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
-}
-if(!_383.user){
-http.open(_383.method.toUpperCase(),_395,_38e);
-}else{
-http.open(_383.method.toUpperCase(),_395,_38e,_383.user,_383.password);
-}
-setHeaders(http,_383);
-try{
-http.send(null);
-}
-catch(e){
-if(typeof http.abort=="function"){
-http.abort();
-}
-doLoad(_383,{status:404},url,_385,_390);
-}
-}
-if(!_38e){
-doLoad(_383,http,url,_385,_390);
-_363._blockAsync=false;
-}
-_383.abort=function(){
-try{
-http._aborted=true;
-}
-catch(e){
-}
-return http.abort();
-};
-return;
-};
-dojo.io.transports.addTransport("XMLHTTPTransport");
-};
-}
-dojo.provide("dojo.io.cookie");
-dojo.io.cookie.setCookie=function(name,_397,days,path,_39a,_39b){
-var _39c=-1;
-if((typeof days=="number")&&(days>=0)){
-var d=new Date();
-d.setTime(d.getTime()+(days*24*60*60*1000));
-_39c=d.toGMTString();
-}
-_397=escape(_397);
-document.cookie=name+"="+_397+";"+(_39c!=-1?" expires="+_39c+";":"")+(path?"path="+path:"")+(_39a?"; domain="+_39a:"")+(_39b?"; secure":"");
-};
-dojo.io.cookie.set=dojo.io.cookie.setCookie;
-dojo.io.cookie.getCookie=function(name){
-var idx=document.cookie.lastIndexOf(name+"=");
-if(idx==-1){
-return null;
-}
-var _3a0=document.cookie.substring(idx+name.length+1);
-var end=_3a0.indexOf(";");
-if(end==-1){
-end=_3a0.length;
-}
-_3a0=_3a0.substring(0,end);
-_3a0=unescape(_3a0);
-return _3a0;
-};
-dojo.io.cookie.get=dojo.io.cookie.getCookie;
-dojo.io.cookie.deleteCookie=function(name){
-dojo.io.cookie.setCookie(name,"-",0);
-};
-dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_3a7,_3a8,_3a9){
-if(arguments.length==5){
-_3a9=_3a7;
-_3a7=null;
-_3a8=null;
-}
-var _3aa=[],_3ab,_3ac="";
-if(!_3a9){
-_3ab=dojo.io.cookie.getObjectCookie(name);
-}
-if(days>=0){
-if(!_3ab){
-_3ab={};
-}
-for(var prop in obj){
-if(obj[prop]==null){
-delete _3ab[prop];
-}else{
-if((typeof obj[prop]=="string")||(typeof obj[prop]=="number")){
-_3ab[prop]=obj[prop];
-}
-}
-}
-prop=null;
-for(var prop in _3ab){
-_3aa.push(escape(prop)+"="+escape(_3ab[prop]));
-}
-_3ac=_3aa.join("&");
-}
-dojo.io.cookie.setCookie(name,_3ac,days,path,_3a7,_3a8);
-};
-dojo.io.cookie.getObjectCookie=function(name){
-var _3af=null,_3b0=dojo.io.cookie.getCookie(name);
-if(_3b0){
-_3af={};
-var _3b1=_3b0.split("&");
-for(var i=0;i<_3b1.length;i++){
-var pair=_3b1[i].split("=");
-var _3b4=pair[1];
-if(isNaN(_3b4)){
-_3b4=unescape(pair[1]);
-}
-_3af[unescape(pair[0])]=_3b4;
-}
-}
-return _3af;
-};
-dojo.io.cookie.isSupported=function(){
-if(typeof navigator.cookieEnabled!="boolean"){
-dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__","CookiesAllowed",90,null);
-var _3b5=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
-navigator.cookieEnabled=(_3b5=="CookiesAllowed");
-if(navigator.cookieEnabled){
-this.deleteCookie("__TestingYourBrowserForCookieSupport__");
-}
-}
-return navigator.cookieEnabled;
-};
-if(!dojo.io.cookies){
-dojo.io.cookies=dojo.io.cookie;
-}
-dojo.provide("dojo.io.*");
-dojo.provide("dojo.lang.type");
-dojo.lang.whatAmI=function(_3b6){
-dojo.deprecated("dojo.lang.whatAmI","use dojo.lang.getType instead","0.5");
-return dojo.lang.getType(_3b6);
-};
-dojo.lang.whatAmI.custom={};
-dojo.lang.getType=function(_3b7){
-try{
-if(dojo.lang.isArray(_3b7)){
-return "array";
-}
-if(dojo.lang.isFunction(_3b7)){
-return "function";
-}
-if(dojo.lang.isString(_3b7)){
-return "string";
-}
-if(dojo.lang.isNumber(_3b7)){
-return "number";
-}
-if(dojo.lang.isBoolean(_3b7)){
-return "boolean";
-}
-if(dojo.lang.isAlien(_3b7)){
-return "alien";
-}
-if(dojo.lang.isUndefined(_3b7)){
-return "undefined";
-}
-for(var name in dojo.lang.whatAmI.custom){
-if(dojo.lang.whatAmI.custom[name](_3b7)){
-return name;
-}
-}
-if(dojo.lang.isObject(_3b7)){
-return "object";
-}
-}
-catch(e){
-}
-return "unknown";
-};
-dojo.lang.isNumeric=function(_3b9){
-return (!isNaN(_3b9)&&isFinite(_3b9)&&(_3b9!=null)&&!dojo.lang.isBoolean(_3b9)&&!dojo.lang.isArray(_3b9)&&!/^\s*$/.test(_3b9));
-};
-dojo.lang.isBuiltIn=function(_3ba){
-return (dojo.lang.isArray(_3ba)||dojo.lang.isFunction(_3ba)||dojo.lang.isString(_3ba)||dojo.lang.isNumber(_3ba)||dojo.lang.isBoolean(_3ba)||(_3ba==null)||(_3ba instanceof Error)||(typeof _3ba=="error"));
-};
-dojo.lang.isPureObject=function(_3bb){
-return ((_3bb!=null)&&dojo.lang.isObject(_3bb)&&_3bb.constructor==Object);
-};
-dojo.lang.isOfType=function(_3bc,type,_3be){
-var _3bf=false;
-if(_3be){
-_3bf=_3be["optional"];
-}
-if(_3bf&&((_3bc===null)||dojo.lang.isUndefined(_3bc))){
-return true;
-}
-if(dojo.lang.isArray(type)){
-var _3c0=type;
-for(var i in _3c0){
-var _3c2=_3c0[i];
-if(dojo.lang.isOfType(_3bc,_3c2)){
-return true;
-}
-}
-return false;
-}else{
-if(dojo.lang.isString(type)){
-type=type.toLowerCase();
-}
-switch(type){
-case Array:
-case "array":
-return dojo.lang.isArray(_3bc);
-case Function:
-case "function":
-return dojo.lang.isFunction(_3bc);
-case String:
-case "string":
-return dojo.lang.isString(_3bc);
-case Number:
-case "number":
-return dojo.lang.isNumber(_3bc);
-case "numeric":
-return dojo.lang.isNumeric(_3bc);
-case Boolean:
-case "boolean":
-return dojo.lang.isBoolean(_3bc);
-case Object:
-case "object":
-return dojo.lang.isObject(_3bc);
-case "pureobject":
-return dojo.lang.isPureObject(_3bc);
-case "builtin":
-return dojo.lang.isBuiltIn(_3bc);
-case "alien":
-return dojo.lang.isAlien(_3bc);
-case "undefined":
-return dojo.lang.isUndefined(_3bc);
-case null:
-case "null":
-return (_3bc===null);
-case "optional":
-dojo.deprecated("dojo.lang.isOfType(value, [type, \"optional\"])","use dojo.lang.isOfType(value, type, {optional: true} ) instead","0.5");
-return ((_3bc===null)||dojo.lang.isUndefined(_3bc));
-default:
-if(dojo.lang.isFunction(type)){
-return (_3bc instanceof type);
-}else{
-dojo.raise("dojo.lang.isOfType() was passed an invalid type");
-}
-}
-}
-dojo.raise("If we get here, it means a bug was introduced above.");
-};
-dojo.lang.getObject=function(str){
-var _3c4=str.split("."),i=0,obj=dj_global;
-do{
-obj=obj[_3c4[i++]];
-}while(i<_3c4.length&&obj);
-return (obj!=dj_global)?obj:null;
-};
-dojo.lang.doesObjectExist=function(str){
-var _3c8=str.split("."),i=0,obj=dj_global;
-do{
-obj=obj[_3c8[i++]];
-}while(i<_3c8.length&&obj);
-return (obj&&obj!=dj_global);
-};
-dojo.provide("dojo.lang.assert");
-dojo.lang.assert=function(_3cb,_3cc){
-if(!_3cb){
-var _3cd="An assert statement failed.\n"+"The method dojo.lang.assert() was called with a 'false' value.\n";
-if(_3cc){
-_3cd+="Here's the assert message:\n"+_3cc+"\n";
-}
-throw new Error(_3cd);
-}
-};
-dojo.lang.assertType=function(_3ce,type,_3d0){
-if(dojo.lang.isString(_3d0)){
-dojo.deprecated("dojo.lang.assertType(value, type, \"message\")","use dojo.lang.assertType(value, type) instead","0.5");
-}
-if(!dojo.lang.isOfType(_3ce,type,_3d0)){
-if(!dojo.lang.assertType._errorMessage){
-dojo.lang.assertType._errorMessage="Type mismatch: dojo.lang.assertType() failed.";
-}
-dojo.lang.assert(false,dojo.lang.assertType._errorMessage);
-}
-};
-dojo.lang.assertValidKeywords=function(_3d1,_3d2,_3d3){
-var key;
-if(!_3d3){
-if(!dojo.lang.assertValidKeywords._errorMessage){
-dojo.lang.assertValidKeywords._errorMessage="In dojo.lang.assertValidKeywords(), found invalid keyword:";
-}
-_3d3=dojo.lang.assertValidKeywords._errorMessage;
-}
-if(dojo.lang.isArray(_3d2)){
-for(key in _3d1){
-if(!dojo.lang.inArray(_3d2,key)){
-dojo.lang.assert(false,_3d3+" "+key);
-}
-}
-}else{
-for(key in _3d1){
-if(!(key in _3d2)){
-dojo.lang.assert(false,_3d3+" "+key);
-}
-}
-}
-};
-dojo.provide("dojo.AdapterRegistry");
-dojo.AdapterRegistry=function(_3d5){
-this.pairs=[];
-this.returnWrappers=_3d5||false;
-};
-dojo.lang.extend(dojo.AdapterRegistry,{register:function(name,_3d7,wrap,_3d9,_3da){
-var type=(_3da)?"unshift":"push";
-this.pairs[type]([name,_3d7,wrap,_3d9]);
-},match:function(){
-for(var i=0;i<this.pairs.length;i++){
-var pair=this.pairs[i];
-if(pair[1].apply(this,arguments)){
-if((pair[3])||(this.returnWrappers)){
-return pair[2];
-}else{
-return pair[2].apply(this,arguments);
-}
-}
-}
-throw new Error("No match found");
-},unregister:function(name){
-for(var i=0;i<this.pairs.length;i++){
-var pair=this.pairs[i];
-if(pair[0]==name){
-this.pairs.splice(i,1);
-return true;
-}
-}
-return false;
-}});
-dojo.provide("dojo.lang.repr");
-dojo.lang.reprRegistry=new dojo.AdapterRegistry();
-dojo.lang.registerRepr=function(name,_3e2,wrap,_3e4){
-dojo.lang.reprRegistry.register(name,_3e2,wrap,_3e4);
-};
-dojo.lang.repr=function(obj){
-if(typeof (obj)=="undefined"){
-return "undefined";
-}else{
-if(obj===null){
-return "null";
-}
-}
-try{
-if(typeof (obj["__repr__"])=="function"){
-return obj["__repr__"]();
-}else{
-if((typeof (obj["repr"])=="function")&&(obj.repr!=arguments.callee)){
-return obj["repr"]();
-}
-}
-return dojo.lang.reprRegistry.match(obj);
-}
-catch(e){
-if(typeof (obj.NAME)=="string"&&(obj.toString==Function.prototype.toString||obj.toString==Object.prototype.toString)){
-return obj.NAME;
-}
-}
-if(typeof (obj)=="function"){
-obj=(obj+"").replace(/^\s+/,"");
-var idx=obj.indexOf("{");
-if(idx!=-1){
-obj=obj.substr(0,idx)+"{...}";
-}
-}
-return obj+"";
-};
-dojo.lang.reprArrayLike=function(arr){
-try{
-var na=dojo.lang.map(arr,dojo.lang.repr);
-return "["+na.join(", ")+"]";
-}
-catch(e){
-}
-};
-(function(){
-var m=dojo.lang;
-m.registerRepr("arrayLike",m.isArrayLike,m.reprArrayLike);
-m.registerRepr("string",m.isString,m.reprString);
-m.registerRepr("numbers",m.isNumber,m.reprNumber);
-m.registerRepr("boolean",m.isBoolean,m.reprNumber);
-})();
-dojo.provide("dojo.lang.declare");
-dojo.lang.declare=function(_3ea,_3eb,init,_3ed){
-if((dojo.lang.isFunction(_3ed))||((!_3ed)&&(!dojo.lang.isFunction(init)))){
-var temp=_3ed;
-_3ed=init;
-init=temp;
-}
-var _3ef=[];
-if(dojo.lang.isArray(_3eb)){
-_3ef=_3eb;
-_3eb=_3ef.shift();
-}
-if(!init){
-init=dojo.evalObjPath(_3ea,false);
-if((init)&&(!dojo.lang.isFunction(init))){
-init=null;
-}
-}
-var ctor=dojo.lang.declare._makeConstructor();
-var scp=(_3eb?_3eb.prototype:null);
-if(scp){
-scp.prototyping=true;
-ctor.prototype=new _3eb();
-scp.prototyping=false;
-}
-ctor.superclass=scp;
-ctor.mixins=_3ef;
-for(var i=0,l=_3ef.length;i<l;i++){
-dojo.lang.extend(ctor,_3ef[i].prototype);
-}
-ctor.prototype.initializer=null;
-ctor.prototype.declaredClass=_3ea;
-if(dojo.lang.isArray(_3ed)){
-dojo.lang.extend.apply(dojo.lang,[ctor].concat(_3ed));
-}else{
-dojo.lang.extend(ctor,(_3ed)||{});
-}
-dojo.lang.extend(ctor,dojo.lang.declare._common);
-ctor.prototype.constructor=ctor;
-ctor.prototype.initializer=(ctor.prototype.initializer)||(init)||(function(){
-});
-var _3f4=dojo.parseObjPath(_3ea,null,true);
-_3f4.obj[_3f4.prop]=ctor;
-return ctor;
-};
-dojo.lang.declare._makeConstructor=function(){
-return function(){
-var self=this._getPropContext();
-var s=self.constructor.superclass;
-if((s)&&(s.constructor)){
-if(s.constructor==arguments.callee){
-this._inherited("constructor",arguments);
-}else{
-this._contextMethod(s,"constructor",arguments);
-}
-}
-var ms=(self.constructor.mixins)||([]);
-for(var i=0,m;(m=ms[i]);i++){
-(((m.prototype)&&(m.prototype.initializer))||(m)).apply(this,arguments);
-}
-if((!this.prototyping)&&(self.initializer)){
-self.initializer.apply(this,arguments);
-}
-};
-};
-dojo.lang.declare._common={_getPropContext:function(){
-return (this.___proto||this);
-},_contextMethod:function(_3fa,_3fb,args){
-var _3fd,_3fe=this.___proto;
-this.___proto=_3fa;
-try{
-_3fd=_3fa[_3fb].apply(this,(args||[]));
-}
-catch(e){
-throw e;
-}
-finally{
-this.___proto=_3fe;
-}
-return _3fd;
-},_inherited:function(prop,args){
-var p=this._getPropContext();
-do{
-if((!p.constructor)||(!p.constructor.superclass)){
-return;
-}
-p=p.constructor.superclass;
-}while(!(prop in p));
-return (dojo.lang.isFunction(p[prop])?this._contextMethod(p,prop,args):p[prop]);
-},inherited:function(prop,args){
-dojo.deprecated("'inherited' method is dangerous, do not up-call! 'inherited' is slated for removal in 0.5; name your super class (or use superclass property) instead.","0.5");
-this._inherited(prop,args);
-}};
-dojo.declare=dojo.lang.declare;
-dojo.provide("dojo.lang.*");
-dojo.provide("dojo.storage");
-dojo.storage=new function(){
-};
-dojo.declare("dojo.storage",null,{SUCCESS:"success",FAILED:"failed",PENDING:"pending",SIZE_NOT_AVAILABLE:"Size not available",SIZE_NO_LIMIT:"No size limit",namespace:"default",onHideSettingsUI:null,initialize:function(){
-dojo.unimplemented("dojo.storage.initialize");
-},isAvailable:function(){
-dojo.unimplemented("dojo.storage.isAvailable");
-},put:function(key,_405,_406){
-dojo.unimplemented("dojo.storage.put");
-},get:function(key){
-dojo.unimplemented("dojo.storage.get");
-},hasKey:function(key){
-return (this.get(key)!=null);
-},getKeys:function(){
-dojo.unimplemented("dojo.storage.getKeys");
-},clear:function(){
-dojo.unimplemented("dojo.storage.clear");
-},remove:function(key){
-dojo.unimplemented("dojo.storage.remove");
-},isPermanent:function(){
-dojo.unimplemented("dojo.storage.isPermanent");
-},getMaximumSize:function(){
-dojo.unimplemented("dojo.storage.getMaximumSize");
-},hasSettingsUI:function(){
-return false;
-},showSettingsUI:function(){
-dojo.unimplemented("dojo.storage.showSettingsUI");
-},hideSettingsUI:function(){
-dojo.unimplemented("dojo.storage.hideSettingsUI");
-},getType:function(){
-dojo.unimplemented("dojo.storage.getType");
-},isValidKey:function(_40a){
-if((_40a==null)||(typeof _40a=="undefined")){
-return false;
-}
-return /^[0-9A-Za-z_]*$/.test(_40a);
-}});
-dojo.storage.manager=new function(){
-this.currentProvider=null;
-this.available=false;
-this._initialized=false;
-this._providers=[];
-this.namespace="default";
-this.initialize=function(){
-this.autodetect();
-};
-this.register=function(name,_40c){
-this._providers[this._providers.length]=_40c;
-this._providers[name]=_40c;
-};
-this.setProvider=function(_40d){
-};
-this.autodetect=function(){
-if(this._initialized==true){
-return;
-}
-var _40e=null;
-for(var i=0;i<this._providers.length;i++){
-_40e=this._providers[i];
-if(dojo.lang.isUndefined(djConfig["forceStorageProvider"])==false&&_40e.getType()==djConfig["forceStorageProvider"]){
-_40e.isAvailable();
-break;
-}else{
-if(dojo.lang.isUndefined(djConfig["forceStorageProvider"])==true&&_40e.isAvailable()){
-break;
-}
-}
-}
-if(_40e==null){
-this._initialized=true;
-this.available=false;
-this.currentProvider=null;
-dojo.raise("No storage provider found for this platform");
-}
-this.currentProvider=_40e;
-for(var i in _40e){
-dojo.storage[i]=_40e[i];
-}
-dojo.storage.manager=this;
-dojo.storage.initialize();
-this._initialized=true;
-this.available=true;
-};
-this.isAvailable=function(){
-return this.available;
-};
-this.isInitialized=function(){
-if(this.currentProvider.getType()=="dojo.storage.browser.FlashStorageProvider"&&dojo.flash.ready==false){
-return false;
-}else{
-return this._initialized;
-}
-};
-this.supportsProvider=function(_410){
-try{
-var _411=eval("new "+_410+"()");
-var _412=_411.isAvailable();
-if(_412==null||typeof _412=="undefined"){
-return false;
-}
-return _412;
-}
-catch(exception){
-return false;
-}
-};
-this.getProvider=function(){
-return this.currentProvider;
-};
-this.loaded=function(){
-};
-};
-dojo.provide("dojo.storage.*");
-
-
-__CPAN_EDITION__ dashboard build.txt
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/hostenv_dashboard.js,
-../src/bootstrap2.js,
-../src/lang/common.js,
-../src/lang.js,
-../src/lang/array.js,
-../src/lang/extras.js,
-../src/lang/func.js,
-../src/event/common.js,
-../src/event/topic.js,
-../src/event/browser.js,
-../src/event/__package__.js,
-../src/string/common.js,
-../src/string.js,
-../src/io/common.js,
-../src/string/extras.js,
-../src/dom.js,
-../src/undo/browser.js,
-../src/io/BrowserIO.js,
-../src/io/cookie.js,
-../src/io/__package__.js,
-../src/lang/type.js,
-../src/lang/assert.js,
-../src/AdapterRegistry.js,
-../src/lang/repr.js,
-../src/lang/declare.js,
-../src/lang/__package__.js,
-../src/storage.js,
-../src/storage/__package__.js
-
-		
-__CPAN_EDITION__ dojoWebsite dojo.js
-/*
-	Copyright (c) 2004-2006, 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/community/licensing.shtml
-*/
-
-/*
-	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(typeof dojo=="undefined"){
-var dj_global=this;
-var dj_currentContext=this;
-function dj_undef(_1,_2){
-return (typeof (_2||dj_currentContext)[_1]=="undefined");
-}
-if(dj_undef("djConfig",this)){
-var djConfig={};
-}
-if(dj_undef("dojo",this)){
-var dojo={};
-}
-dojo.global=function(){
-return dj_currentContext;
-};
-dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
-with(dojo.version){
-return major+"."+minor+"."+patch+flag+" ("+revision+")";
-}
-}};
-dojo.evalProp=function(_3,_4,_5){
-if((!_4)||(!_3)){
-return undefined;
-}
-if(!dj_undef(_3,_4)){
-return _4[_3];
-}
-return (_5?(_4[_3]={}):undefined);
-};
-dojo.parseObjPath=function(_6,_7,_8){
-var _9=(_7||dojo.global());
-var _a=_6.split(".");
-var _b=_a.pop();
-for(var i=0,l=_a.length;i<l&&_9;i++){
-_9=dojo.evalProp(_a[i],_9,_8);
-}
-return {obj:_9,prop:_b};
-};
-dojo.evalObjPath=function(_e,_f){
-if(typeof _e!="string"){
-return dojo.global();
-}
-if(_e.indexOf(".")==-1){
-return dojo.evalProp(_e,dojo.global(),_f);
-}
-var ref=dojo.parseObjPath(_e,dojo.global(),_f);
-if(ref){
-return dojo.evalProp(ref.prop,ref.obj,_f);
-}
-return null;
-};
-dojo.errorToString=function(_11){
-if(!dj_undef("message",_11)){
-return _11.message;
-}else{
-if(!dj_undef("description",_11)){
-return _11.description;
-}else{
-return _11;
-}
-}
-};
-dojo.raise=function(_12,_13){
-if(_13){
-_12=_12+": "+dojo.errorToString(_13);
-}else{
-_12=dojo.errorToString(_12);
-}
-try{
-if(djConfig.isDebug){
-dojo.hostenv.println("FATAL exception raised: "+_12);
-}
-}
-catch(e){
-}
-throw _13||Error(_12);
-};
-dojo.debug=function(){
-};
-dojo.debugShallow=function(obj){
-};
-dojo.profile={start:function(){
-},end:function(){
-},stop:function(){
-},dump:function(){
-}};
-function dj_eval(_15){
-return dj_global.eval?dj_global.eval(_15):eval(_15);
-}
-dojo.unimplemented=function(_16,_17){
-var _18="'"+_16+"' not implemented";
-if(_17!=null){
-_18+=" "+_17;
-}
-dojo.raise(_18);
-};
-dojo.deprecated=function(_19,_1a,_1b){
-var _1c="DEPRECATED: "+_19;
-if(_1a){
-_1c+=" "+_1a;
-}
-if(_1b){
-_1c+=" -- will be removed in version: "+_1b;
-}
-dojo.debug(_1c);
-};
-dojo.render=(function(){
-function vscaffold(_1d,_1e){
-var tmp={capable:false,support:{builtin:false,plugin:false},prefixes:_1d};
-for(var i=0;i<_1e.length;i++){
-tmp[_1e[i]]=false;
-}
-return tmp;
-}
-return {name:"",ver:dojo.version,os:{win:false,linux:false,osx:false},html:vscaffold(["html"],["ie","opera","khtml","safari","moz"]),svg:vscaffold(["svg"],["corel","adobe","batik"]),vml:vscaffold(["vml"],["ie"]),swf:vscaffold(["Swf","Flash","Mm"],["mm"]),swt:vscaffold(["Swt"],["ibm"])};
-})();
-dojo.hostenv=(function(){
-var _21={isDebug:false,allowQueryConfig:false,baseScriptUri:"",baseRelativePath:"",libraryScriptUri:"",iePreventClobber:false,ieClobberMinimal:true,preventBackButtonFix:true,delayMozLoadingFix:false,searchIds:[],parseWidgets:true};
-if(typeof djConfig=="undefined"){
-djConfig=_21;
-}else{
-for(var _22 in _21){
-if(typeof djConfig[_22]=="undefined"){
-djConfig[_22]=_21[_22];
-}
-}
-}
-return {name_:"(unset)",version_:"(unset)",getName:function(){
-return this.name_;
-},getVersion:function(){
-return this.version_;
-},getText:function(uri){
-dojo.unimplemented("getText","uri="+uri);
-}};
-})();
-dojo.hostenv.getBaseScriptUri=function(){
-if(djConfig.baseScriptUri.length){
-return djConfig.baseScriptUri;
-}
-var uri=new String(djConfig.libraryScriptUri||djConfig.baseRelativePath);
-if(!uri){
-dojo.raise("Nothing returned by getLibraryScriptUri(): "+uri);
-}
-var _25=uri.lastIndexOf("/");
-djConfig.baseScriptUri=djConfig.baseRelativePath;
-return djConfig.baseScriptUri;
-};
-(function(){
-var _26={pkgFileName:"__package__",loading_modules_:{},loaded_modules_:{},addedToLoadingCount:[],removedFromLoadingCount:[],inFlightCount:0,modulePrefixes_:{dojo:{name:"dojo",value:"src"}},setModulePrefix:function(_27,_28){
-this.modulePrefixes_[_27]={name:_27,value:_28};
-},moduleHasPrefix:function(_29){
-var mp=this.modulePrefixes_;
-return Boolean(mp[_29]&&mp[_29].value);
-},getModulePrefix:function(_2b){
-if(this.moduleHasPrefix(_2b)){
-return this.modulePrefixes_[_2b].value;
-}
-return _2b;
-},getTextStack:[],loadUriStack:[],loadedUris:[],post_load_:false,modulesLoadedListeners:[],unloadListeners:[],loadNotifying:false};
-for(var _2c in _26){
-dojo.hostenv[_2c]=_26[_2c];
-}
-})();
-dojo.hostenv.loadPath=function(_2d,_2e,cb){
-var uri;
-if(_2d.charAt(0)=="/"||_2d.match(/^\w+:/)){
-uri=_2d;
-}else{
-uri=this.getBaseScriptUri()+_2d;
-}
-if(djConfig.cacheBust&&dojo.render.html.capable){
-uri+="?"+String(djConfig.cacheBust).replace(/\W+/g,"");
-}
-try{
-return !_2e?this.loadUri(uri,cb):this.loadUriAndCheck(uri,_2e,cb);
-}
-catch(e){
-dojo.debug(e);
-return false;
-}
-};
-dojo.hostenv.loadUri=function(uri,cb){
-if(this.loadedUris[uri]){
-return true;
-}
-var _33=this.getText(uri,null,true);
-if(!_33){
-return false;
-}
-this.loadedUris[uri]=true;
-if(cb){
-_33="("+_33+")";
-}
-var _34=dj_eval(_33);
-if(cb){
-cb(_34);
-}
-return true;
-};
-dojo.hostenv.loadUriAndCheck=function(uri,_36,cb){
-var ok=true;
-try{
-ok=this.loadUri(uri,cb);
-}
-catch(e){
-dojo.debug("failed loading ",uri," with error: ",e);
-}
-return Boolean(ok&&this.findModule(_36,false));
-};
-dojo.loaded=function(){
-};
-dojo.unloaded=function(){
-};
-dojo.hostenv.loaded=function(){
-this.loadNotifying=true;
-this.post_load_=true;
-var mll=this.modulesLoadedListeners;
-for(var x=0;x<mll.length;x++){
-mll[x]();
-}
-this.modulesLoadedListeners=[];
-this.loadNotifying=false;
-dojo.loaded();
-};
-dojo.hostenv.unloaded=function(){
-var mll=this.unloadListeners;
-while(mll.length){
-(mll.pop())();
-}
-dojo.unloaded();
-};
-dojo.addOnLoad=function(obj,_3d){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.modulesLoadedListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.modulesLoadedListeners.push(function(){
-obj[_3d]();
-});
-}
-}
-if(dh.post_load_&&dh.inFlightCount==0&&!dh.loadNotifying){
-dh.callLoaded();
-}
-};
-dojo.addOnUnload=function(obj,_40){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.unloadListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.unloadListeners.push(function(){
-obj[_40]();
-});
-}
-}
-};
-dojo.hostenv.modulesLoaded=function(){
-if(this.post_load_){
-return;
-}
-if(this.loadUriStack.length==0&&this.getTextStack.length==0){
-if(this.inFlightCount>0){
-dojo.debug("files still in flight!");
-return;
-}
-dojo.hostenv.callLoaded();
-}
-};
-dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
-setTimeout("dojo.hostenv.loaded();",0);
-}else{
-dojo.hostenv.loaded();
-}
-};
-dojo.hostenv.getModuleSymbols=function(_42){
-var _43=_42.split(".");
-for(var i=_43.length;i>0;i--){
-var _45=_43.slice(0,i).join(".");
-if((i==1)&&!this.moduleHasPrefix(_45)){
-_43[0]="../"+_43[0];
-}else{
-var _46=this.getModulePrefix(_45);
-if(_46!=_45){
-_43.splice(0,i,_46);
-break;
-}
-}
-}
-return _43;
-};
-dojo.hostenv._global_omit_module_check=false;
-dojo.hostenv.loadModule=function(_47,_48,_49){
-if(!_47){
-return;
-}
-_49=this._global_omit_module_check||_49;
-var _4a=this.findModule(_47,false);
-if(_4a){
-return _4a;
-}
-if(dj_undef(_47,this.loading_modules_)){
-this.addedToLoadingCount.push(_47);
-}
-this.loading_modules_[_47]=1;
-var _4b=_47.replace(/\./g,"/")+".js";
-var _4c=_47.split(".");
-var _4d=this.getModuleSymbols(_47);
-var _4e=((_4d[0].charAt(0)!="/")&&!_4d[0].match(/^\w+:/));
-var _4f=_4d[_4d.length-1];
-var ok;
-if(_4f=="*"){
-_47=_4c.slice(0,-1).join(".");
-while(_4d.length){
-_4d.pop();
-_4d.push(this.pkgFileName);
-_4b=_4d.join("/")+".js";
-if(_4e&&_4b.charAt(0)=="/"){
-_4b=_4b.slice(1);
-}
-ok=this.loadPath(_4b,!_49?_47:null);
-if(ok){
-break;
-}
-_4d.pop();
-}
-}else{
-_4b=_4d.join("/")+".js";
-_47=_4c.join(".");
-var _51=!_49?_47:null;
-ok=this.loadPath(_4b,_51);
-if(!ok&&!_48){
-_4d.pop();
-while(_4d.length){
-_4b=_4d.join("/")+".js";
-ok=this.loadPath(_4b,_51);
-if(ok){
-break;
-}
-_4d.pop();
-_4b=_4d.join("/")+"/"+this.pkgFileName+".js";
-if(_4e&&_4b.charAt(0)=="/"){
-_4b=_4b.slice(1);
-}
-ok=this.loadPath(_4b,_51);
-if(ok){
-break;
-}
-}
-}
-if(!ok&&!_49){
-dojo.raise("Could not load '"+_47+"'; last tried '"+_4b+"'");
-}
-}
-if(!_49&&!this["isXDomain"]){
-_4a=this.findModule(_47,false);
-if(!_4a){
-dojo.raise("symbol '"+_47+"' is not defined after loading '"+_4b+"'");
-}
-}
-return _4a;
-};
-dojo.hostenv.startPackage=function(_52){
-var _53=String(_52);
-var _54=_53;
-var _55=_52.split(/\./);
-if(_55[_55.length-1]=="*"){
-_55.pop();
-_54=_55.join(".");
-}
-var _56=dojo.evalObjPath(_54,true);
-this.loaded_modules_[_53]=_56;
-this.loaded_modules_[_54]=_56;
-return _56;
-};
-dojo.hostenv.findModule=function(_57,_58){
-var lmn=String(_57);
-if(this.loaded_modules_[lmn]){
-return this.loaded_modules_[lmn];
-}
-if(_58){
-dojo.raise("no loaded module named '"+_57+"'");
-}
-return null;
-};
-dojo.kwCompoundRequire=function(_5a){
-var _5b=_5a["common"]||[];
-var _5c=_5a[dojo.hostenv.name_]?_5b.concat(_5a[dojo.hostenv.name_]||[]):_5b.concat(_5a["default"]||[]);
-for(var x=0;x<_5c.length;x++){
-var _5e=_5c[x];
-if(_5e.constructor==Array){
-dojo.hostenv.loadModule.apply(dojo.hostenv,_5e);
-}else{
-dojo.hostenv.loadModule(_5e);
-}
-}
-};
-dojo.require=function(_5f){
-dojo.hostenv.loadModule.apply(dojo.hostenv,arguments);
-};
-dojo.requireIf=function(_60,_61){
-var _62=arguments[0];
-if((_62===true)||(_62=="common")||(_62&&dojo.render[_62].capable)){
-var _63=[];
-for(var i=1;i<arguments.length;i++){
-_63.push(arguments[i]);
-}
-dojo.require.apply(dojo,_63);
-}
-};
-dojo.requireAfterIf=dojo.requireIf;
-dojo.provide=function(_65){
-return dojo.hostenv.startPackage.apply(dojo.hostenv,arguments);
-};
-dojo.registerModulePath=function(_66,_67){
-return dojo.hostenv.setModulePrefix(_66,_67);
-};
-dojo.setModulePrefix=function(_68,_69){
-dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
-return dojo.registerModulePath(_68,_69);
-};
-dojo.exists=function(obj,_6b){
-var p=_6b.split(".");
-for(var i=0;i<p.length;i++){
-if(!obj[p[i]]){
-return false;
-}
-obj=obj[p[i]];
-}
-return true;
-};
-dojo.hostenv.normalizeLocale=function(_6e){
-var _6f=_6e?_6e.toLowerCase():dojo.locale;
-if(_6f=="root"){
-_6f="ROOT";
-}
-return _6f;
-};
-dojo.hostenv.searchLocalePath=function(_70,_71,_72){
-_70=dojo.hostenv.normalizeLocale(_70);
-var _73=_70.split("-");
-var _74=[];
-for(var i=_73.length;i>0;i--){
-_74.push(_73.slice(0,i).join("-"));
-}
-_74.push(false);
-if(_71){
-_74.reverse();
-}
-for(var j=_74.length-1;j>=0;j--){
-var loc=_74[j]||"ROOT";
-var _78=_72(loc);
-if(_78){
-break;
-}
-}
-};
-dojo.hostenv.localesGenerated=["ROOT","es-es","es","it-it","pt-br","de","fr-fr","zh-cn","pt","en-us","zh","fr","zh-tw","it","en-gb","xx","de-de","ko-kr","ja-jp","ko","en","ja"];
-dojo.hostenv.registerNlsPrefix=function(){
-dojo.registerModulePath("nls","nls");
-};
-dojo.hostenv.preloadLocalizations=function(){
-if(dojo.hostenv.localesGenerated){
-dojo.hostenv.registerNlsPrefix();
-function preload(_79){
-_79=dojo.hostenv.normalizeLocale(_79);
-dojo.hostenv.searchLocalePath(_79,true,function(loc){
-for(var i=0;i<dojo.hostenv.localesGenerated.length;i++){
-if(dojo.hostenv.localesGenerated[i]==loc){
-dojo["require"]("nls.dojo_"+loc);
-return true;
-}
-}
-return false;
-});
-}
-preload();
-var _7c=djConfig.extraLocale||[];
-for(var i=0;i<_7c.length;i++){
-preload(_7c[i]);
-}
-}
-dojo.hostenv.preloadLocalizations=function(){
-};
-};
-dojo.requireLocalization=function(_7e,_7f,_80,_81){
-dojo.hostenv.preloadLocalizations();
-var _82=dojo.hostenv.normalizeLocale(_80);
-var _83=[_7e,"nls",_7f].join(".");
-var _84="";
-if(_81){
-var _85=_81.split(",");
-for(var i=0;i<_85.length;i++){
-if(_82.indexOf(_85[i])==0){
-if(_85[i].length>_84.length){
-_84=_85[i];
-}
-}
-}
-if(!_84){
-_84="ROOT";
-}
-}
-var _87=_81?_84:_82;
-var _88=dojo.hostenv.findModule(_83);
-var _89=null;
-if(_88){
-if(djConfig.localizationComplete&&_88._built){
-return;
-}
-var _8a=_87.replace("-","_");
-var _8b=_83+"."+_8a;
-_89=dojo.hostenv.findModule(_8b);
-}
-if(!_89){
-_88=dojo.hostenv.startPackage(_83);
-var _8c=dojo.hostenv.getModuleSymbols(_7e);
-var _8d=_8c.concat("nls").join("/");
-var _8e;
-dojo.hostenv.searchLocalePath(_87,_81,function(loc){
-var _90=loc.replace("-","_");
-var _91=_83+"."+_90;
-var _92=false;
-if(!dojo.hostenv.findModule(_91)){
-dojo.hostenv.startPackage(_91);
-var _93=[_8d];
-if(loc!="ROOT"){
-_93.push(loc);
-}
-_93.push(_7f);
-var _94=_93.join("/")+".js";
-_92=dojo.hostenv.loadPath(_94,null,function(_95){
-var _96=function(){
-};
-_96.prototype=_8e;
-_88[_90]=new _96();
-for(var j in _95){
-_88[_90][j]=_95[j];
-}
-});
-}else{
-_92=true;
-}
-if(_92&&_88[_90]){
-_8e=_88[_90];
-}else{
-_88[_90]=_8e;
-}
-if(_81){
-return true;
-}
-});
-}
-if(_81&&_82!=_84){
-_88[_82.replace("-","_")]=_88[_84.replace("-","_")];
-}
-};
-(function(){
-var _98=djConfig.extraLocale;
-if(_98){
-if(!_98 instanceof Array){
-_98=[_98];
-}
-var req=dojo.requireLocalization;
-dojo.requireLocalization=function(m,b,_9c,_9d){
-req(m,b,_9c,_9d);
-if(_9c){
-return;
-}
-for(var i=0;i<_98.length;i++){
-req(m,b,_98[i],_9d);
-}
-};
-}
-})();
-}
-if(typeof window!="undefined"){
-(function(){
-if(djConfig.allowQueryConfig){
-var _9f=document.location.toString();
-var _a0=_9f.split("?",2);
-if(_a0.length>1){
-var _a1=_a0[1];
-var _a2=_a1.split("&");
-for(var x in _a2){
-var sp=_a2[x].split("=");
-if((sp[0].length>9)&&(sp[0].substr(0,9)=="djConfig.")){
-var opt=sp[0].substr(9);
-try{
-djConfig[opt]=eval(sp[1]);
-}
-catch(e){
-djConfig[opt]=sp[1];
-}
-}
-}
-}
-}
-if(((djConfig["baseScriptUri"]=="")||(djConfig["baseRelativePath"]==""))&&(document&&document.getElementsByTagName)){
-var _a6=document.getElementsByTagName("script");
-var _a7=/(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i;
-for(var i=0;i<_a6.length;i++){
-var src=_a6[i].getAttribute("src");
-if(!src){
-continue;
-}
-var m=src.match(_a7);
-if(m){
-var _ab=src.substring(0,m.index);
-if(src.indexOf("bootstrap1")>-1){
-_ab+="../";
-}
-if(!this["djConfig"]){
-djConfig={};
-}
-if(djConfig["baseScriptUri"]==""){
-djConfig["baseScriptUri"]=_ab;
-}
-if(djConfig["baseRelativePath"]==""){
-djConfig["baseRelativePath"]=_ab;
-}
-break;
-}
-}
-}
-var dr=dojo.render;
-var drh=dojo.render.html;
-var drs=dojo.render.svg;
-var dua=(drh.UA=navigator.userAgent);
-var dav=(drh.AV=navigator.appVersion);
-var t=true;
-var f=false;
-drh.capable=t;
-drh.support.builtin=t;
-dr.ver=parseFloat(drh.AV);
-dr.os.mac=dav.indexOf("Macintosh")>=0;
-dr.os.win=dav.indexOf("Windows")>=0;
-dr.os.linux=dav.indexOf("X11")>=0;
-drh.opera=dua.indexOf("Opera")>=0;
-drh.khtml=(dav.indexOf("Konqueror")>=0)||(dav.indexOf("Safari")>=0);
-drh.safari=dav.indexOf("Safari")>=0;
-var _b3=dua.indexOf("Gecko");
-drh.mozilla=drh.moz=(_b3>=0)&&(!drh.khtml);
-if(drh.mozilla){
-drh.geckoVersion=dua.substring(_b3+6,_b3+14);
-}
-drh.ie=(document.all)&&(!drh.opera);
-drh.ie50=drh.ie&&dav.indexOf("MSIE 5.0")>=0;
-drh.ie55=drh.ie&&dav.indexOf("MSIE 5.5")>=0;
-drh.ie60=drh.ie&&dav.indexOf("MSIE 6.0")>=0;
-drh.ie70=drh.ie&&dav.indexOf("MSIE 7.0")>=0;
-var cm=document["compatMode"];
-drh.quirks=(cm=="BackCompat")||(cm=="QuirksMode")||drh.ie55||drh.ie50;
-dojo.locale=dojo.locale||(drh.ie?navigator.userLanguage:navigator.language).toLowerCase();
-dr.vml.capable=drh.ie;
-drs.capable=f;
-drs.support.plugin=f;
-drs.support.builtin=f;
-var _b5=window["document"];
-var tdi=_b5["implementation"];
-if((tdi)&&(tdi["hasFeature"])&&(tdi.hasFeature("org.w3c.dom.svg","1.0"))){
-drs.capable=t;
-drs.support.builtin=t;
-drs.support.plugin=f;
-}
-if(drh.safari){
-var tmp=dua.split("AppleWebKit/")[1];
-var ver=parseFloat(tmp.split(" ")[0]);
-if(ver>=420){
-drs.capable=t;
-drs.support.builtin=t;
-drs.support.plugin=f;
-}
-}else{
-}
-})();
-dojo.hostenv.startPackage("dojo.hostenv");
-dojo.render.name=dojo.hostenv.name_="browser";
-dojo.hostenv.searchIds=[];
-dojo.hostenv._XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];
-dojo.hostenv.getXmlhttpObject=function(){
-var _b9=null;
-var _ba=null;
-try{
-_b9=new XMLHttpRequest();
-}
-catch(e){
-}
-if(!_b9){
-for(var i=0;i<3;++i){
-var _bc=dojo.hostenv._XMLHTTP_PROGIDS[i];
-try{
-_b9=new ActiveXObject(_bc);
-}
-catch(e){
-_ba=e;
-}
-if(_b9){
-dojo.hostenv._XMLHTTP_PROGIDS=[_bc];
-break;
-}
-}
-}
-if(!_b9){
-return dojo.raise("XMLHTTP not available",_ba);
-}
-return _b9;
-};
-dojo.hostenv._blockAsync=false;
-dojo.hostenv.getText=function(uri,_be,_bf){
-if(!_be){
-this._blockAsync=true;
-}
-var _c0=this.getXmlhttpObject();
-function isDocumentOk(_c1){
-var _c2=_c1["status"];
-return Boolean((!_c2)||((200<=_c2)&&(300>_c2))||(_c2==304));
-}
-if(_be){
-var _c3=this,_c4=null,gbl=dojo.global();
-var xhr=dojo.evalObjPath("dojo.io.XMLHTTPTransport");
-_c0.onreadystatechange=function(){
-if(_c4){
-gbl.clearTimeout(_c4);
-_c4=null;
-}
-if(_c3._blockAsync||(xhr&&xhr._blockAsync)){
-_c4=gbl.setTimeout(function(){
-_c0.onreadystatechange.apply(this);
-},10);
-}else{
-if(4==_c0.readyState){
-if(isDocumentOk(_c0)){
-_be(_c0.responseText);
-}
-}
-}
-};
-}
-_c0.open("GET",uri,_be?true:false);
-try{
-_c0.send(null);
-if(_be){
-return null;
-}
-if(!isDocumentOk(_c0)){
-var err=Error("Unable to load "+uri+" status:"+_c0.status);
-err.status=_c0.status;
-err.responseText=_c0.responseText;
-throw err;
-}
-}
-catch(e){
-this._blockAsync=false;
-if((_bf)&&(!_be)){
-return null;
-}else{
-throw e;
-}
-}
-this._blockAsync=false;
-return _c0.responseText;
-};
-dojo.hostenv.defaultDebugContainerId="dojoDebug";
-dojo.hostenv._println_buffer=[];
-dojo.hostenv._println_safe=false;
-dojo.hostenv.println=function(_c8){
-if(!dojo.hostenv._println_safe){
-dojo.hostenv._println_buffer.push(_c8);
-}else{
-try{
-var _c9=document.getElementById(djConfig.debugContainerId?djConfig.debugContainerId:dojo.hostenv.defaultDebugContainerId);
-if(!_c9){
-_c9=dojo.body();
-}
-var div=document.createElement("div");
-div.appendChild(document.createTextNode(_c8));
-_c9.appendChild(div);
-}
-catch(e){
-try{
-document.write("<div>"+_c8+"</div>");
-}
-catch(e2){
-window.status=_c8;
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-dojo.hostenv._println_safe=true;
-while(dojo.hostenv._println_buffer.length>0){
-dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
-}
-});
-function dj_addNodeEvtHdlr(_cb,_cc,fp){
-var _ce=_cb["on"+_cc]||function(){
-};
-_cb["on"+_cc]=function(){
-fp.apply(_cb,arguments);
-_ce.apply(_cb,arguments);
-};
-return true;
-}
-function dj_load_init(e){
-var _d0=(e&&e.type)?e.type.toLowerCase():"load";
-if(arguments.callee.initialized||(_d0!="domcontentloaded"&&_d0!="load")){
-return;
-}
-arguments.callee.initialized=true;
-if(typeof (_timer)!="undefined"){
-clearInterval(_timer);
-delete _timer;
-}
-var _d1=function(){
-if(dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-};
-if(dojo.hostenv.inFlightCount==0){
-_d1();
-dojo.hostenv.modulesLoaded();
-}else{
-dojo.hostenv.modulesLoadedListeners.unshift(_d1);
-}
-}
-if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
-document.addEventListener("DOMContentLoaded",dj_load_init,null);
-}
-window.addEventListener("load",dj_load_init,null);
-}
-if(dojo.render.html.ie&&dojo.render.os.win){
-document.attachEvent("onreadystatechange",function(e){
-if(document.readyState=="complete"){
-dj_load_init();
-}
-});
-}
-if(/(WebKit|khtml)/i.test(navigator.userAgent)){
-var _timer=setInterval(function(){
-if(/loaded|complete/.test(document.readyState)){
-dj_load_init();
-}
-},10);
-}
-if(dojo.render.html.ie){
-dj_addNodeEvtHdlr(window,"beforeunload",function(){
-dojo.hostenv._unloading=true;
-window.setTimeout(function(){
-dojo.hostenv._unloading=false;
-},0);
-});
-}
-dj_addNodeEvtHdlr(window,"unload",function(){
-dojo.hostenv.unloaded();
-if((!dojo.render.html.ie)||(dojo.render.html.ie&&dojo.hostenv._unloading)){
-dojo.hostenv.unloaded();
-}
-});
-dojo.hostenv.makeWidgets=function(){
-var _d3=[];
-if(djConfig.searchIds&&djConfig.searchIds.length>0){
-_d3=_d3.concat(djConfig.searchIds);
-}
-if(dojo.hostenv.searchIds&&dojo.hostenv.searchIds.length>0){
-_d3=_d3.concat(dojo.hostenv.searchIds);
-}
-if((djConfig.parseWidgets)||(_d3.length>0)){
-if(dojo.evalObjPath("dojo.widget.Parse")){
-var _d4=new dojo.xml.Parse();
-if(_d3.length>0){
-for(var x=0;x<_d3.length;x++){
-var _d6=document.getElementById(_d3[x]);
-if(!_d6){
-continue;
-}
-var _d7=_d4.parseElement(_d6,null,true);
-dojo.widget.getParser().createComponents(_d7);
-}
-}else{
-if(djConfig.parseWidgets){
-var _d7=_d4.parseElement(dojo.body(),null,true);
-dojo.widget.getParser().createComponents(_d7);
-}
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-if(!dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-});
-try{
-if(dojo.render.html.ie){
-document.namespaces.add("v","urn:schemas-microsoft-com:vml");
-document.createStyleSheet().addRule("v\\:*","behavior:url(#default#VML)");
-}
-}
-catch(e){
-}
-dojo.hostenv.writeIncludes=function(){
-};
-if(!dj_undef("document",this)){
-dj_currentDocument=this.document;
-}
-dojo.doc=function(){
-return dj_currentDocument;
-};
-dojo.body=function(){
-return dojo.doc().body||dojo.doc().getElementsByTagName("body")[0];
-};
-dojo.byId=function(id,doc){
-if((id)&&((typeof id=="string")||(id instanceof String))){
-if(!doc){
-doc=dj_currentDocument;
-}
-var ele=doc.getElementById(id);
-if(ele&&(ele.id!=id)&&doc.all){
-ele=null;
-eles=doc.all[id];
-if(eles){
-if(eles.length){
-for(var i=0;i<eles.length;i++){
-if(eles[i].id==id){
-ele=eles[i];
-break;
-}
-}
-}else{
-ele=eles;
-}
-}
-}
-return ele;
-}
-return id;
-};
-dojo.setContext=function(_dc,_dd){
-dj_currentContext=_dc;
-dj_currentDocument=_dd;
-};
-dojo._fireCallback=function(_de,_df,_e0){
-if((_df)&&((typeof _de=="string")||(_de instanceof String))){
-_de=_df[_de];
-}
-return (_df?_de.apply(_df,_e0||[]):_de());
-};
-dojo.withGlobal=function(_e1,_e2,_e3,_e4){
-var _e5;
-var _e6=dj_currentContext;
-var _e7=dj_currentDocument;
-try{
-dojo.setContext(_e1,_e1.document);
-_e5=dojo._fireCallback(_e2,_e3,_e4);
-}
-finally{
-dojo.setContext(_e6,_e7);
-}
-return _e5;
-};
-dojo.withDoc=function(_e8,_e9,_ea,_eb){
-var _ec;
-var _ed=dj_currentDocument;
-try{
-dj_currentDocument=_e8;
-_ec=dojo._fireCallback(_e9,_ea,_eb);
-}
-finally{
-dj_currentDocument=_ed;
-}
-return _ec;
-};
-}
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _ee=false;
-var _ef=false;
-var _f0=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_ee=true;
-}else{
-if(typeof this["load"]=="function"){
-_ef=true;
-}else{
-if(window.widget){
-_f0=true;
-}
-}
-}
-var _f1=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-_f1.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_ee)&&(!_f0)){
-_f1.push("browser_debug.js");
-}
-var _f2=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_f2=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<_f1.length;x++){
-var _f4=_f2+"src/"+_f1[x];
-if(_ee||_ef){
-load(_f4);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_f4+"'></scr"+"ipt>");
-}
-catch(e){
-var _f5=document.createElement("script");
-_f5.src=_f4;
-document.getElementsByTagName("head")[0].appendChild(_f5);
-}
-}
-}
-})();
-dojo.provide("dojo.dom");
-dojo.dom.ELEMENT_NODE=1;
-dojo.dom.ATTRIBUTE_NODE=2;
-dojo.dom.TEXT_NODE=3;
-dojo.dom.CDATA_SECTION_NODE=4;
-dojo.dom.ENTITY_REFERENCE_NODE=5;
-dojo.dom.ENTITY_NODE=6;
-dojo.dom.PROCESSING_INSTRUCTION_NODE=7;
-dojo.dom.COMMENT_NODE=8;
-dojo.dom.DOCUMENT_NODE=9;
-dojo.dom.DOCUMENT_TYPE_NODE=10;
-dojo.dom.DOCUMENT_FRAGMENT_NODE=11;
-dojo.dom.NOTATION_NODE=12;
-dojo.dom.dojoml="http://www.dojotoolkit.org/2004/dojoml";
-dojo.dom.xmlns={svg:"http://www.w3.org/2000/svg",smil:"http://www.w3.org/2001/SMIL20/",mml:"http://www.w3.org/1998/Math/MathML",cml:"http://www.xml-cml.org",xlink:"http://www.w3.org/1999/xlink",xhtml:"http://www.w3.org/1999/xhtml",xul:"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",xbl:"http://www.mozilla.org/xbl",fo:"http://www.w3.org/1999/XSL/Format",xsl:"http://www.w3.org/1999/XSL/Transform",xslt:"http://www.w3.org/1999/XSL/Transform",xi:"http://www.w3.org/2001/XInclude",xforms:"http://www.w3.org/2002/01/xforms",saxon:"http://icl.com/saxon",xalan:"http://xml.apache.org/xslt",xsd:"http://www.w3.org/2001/XMLSchema",dt:"http://www.w3.org/2001/XMLSchema-datatypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#",rdfs:"http://www.w3.org/2000/01/rdf-schema#",dc:"http://purl.org/dc/elements/1.1/",dcq:"http://purl.org/dc/qualifiers/1.0","soap-env":"http://schemas.xmlsoap.org/soap/envelope/",wsdl:"http://schemas.xmlsoap.org/wsdl/",AdobeExtensions:"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"};
-dojo.dom.isNode=function(wh){
-if(typeof Element=="function"){
-try{
-return wh instanceof Element;
-}
-catch(e){
-}
-}else{
-return wh&&!isNaN(wh.nodeType);
-}
-};
-dojo.dom.getUniqueId=function(){
-var _f7=dojo.doc();
-do{
-var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_f7.getElementById(id));
-return id;
-};
-dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_f9,_fa){
-var _fb=_f9.firstChild;
-while(_fb&&_fb.nodeType!=dojo.dom.ELEMENT_NODE){
-_fb=_fb.nextSibling;
-}
-if(_fa&&_fb&&_fb.tagName&&_fb.tagName.toLowerCase()!=_fa.toLowerCase()){
-_fb=dojo.dom.nextElement(_fb,_fa);
-}
-return _fb;
-};
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_fc,_fd){
-var _fe=_fc.lastChild;
-while(_fe&&_fe.nodeType!=dojo.dom.ELEMENT_NODE){
-_fe=_fe.previousSibling;
-}
-if(_fd&&_fe&&_fe.tagName&&_fe.tagName.toLowerCase()!=_fd.toLowerCase()){
-_fe=dojo.dom.prevElement(_fe,_fd);
-}
-return _fe;
-};
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(_ff,_100){
-if(!_ff){
-return null;
-}
-do{
-_ff=_ff.nextSibling;
-}while(_ff&&_ff.nodeType!=dojo.dom.ELEMENT_NODE);
-if(_ff&&_100&&_100.toLowerCase()!=_ff.tagName.toLowerCase()){
-return dojo.dom.nextElement(_ff,_100);
-}
-return _ff;
-};
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_102){
-if(!node){
-return null;
-}
-if(_102){
-_102=_102.toLowerCase();
-}
-do{
-node=node.previousSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_102&&_102.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_102);
-}
-return node;
-};
-dojo.dom.moveChildren=function(_103,_104,trim){
-var _106=0;
-if(trim){
-while(_103.hasChildNodes()&&_103.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_103.removeChild(_103.firstChild);
-}
-while(_103.hasChildNodes()&&_103.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_103.removeChild(_103.lastChild);
-}
-}
-while(_103.hasChildNodes()){
-_104.appendChild(_103.firstChild);
-_106++;
-}
-return _106;
-};
-dojo.dom.copyChildren=function(_107,_108,trim){
-var _10a=_107.cloneNode(true);
-return this.moveChildren(_10a,_108,trim);
-};
-dojo.dom.replaceChildren=function(node,_10c){
-var _10d=[];
-if(dojo.render.html.ie){
-for(var i=0;i<node.childNodes.length;i++){
-_10d.push(node.childNodes[i]);
-}
-}
-dojo.dom.removeChildren(node);
-node.appendChild(_10c);
-for(var i=0;i<_10d.length;i++){
-dojo.dom.destroyNode(_10d[i]);
-}
-};
-dojo.dom.removeChildren=function(node){
-var _110=node.childNodes.length;
-while(node.hasChildNodes()){
-dojo.dom.removeNode(node.firstChild);
-}
 return _110;
 };
-dojo.dom.replaceNode=function(node,_112){
-return node.parentNode.replaceChild(_112,node);
-};
-dojo.dom.destroyNode=function(node){
-if(node.parentNode){
-node=dojo.dom.removeNode(node);
-}
-if(node.nodeType!=3){
-if(dojo.evalObjPath("dojo.event.browser.clean",false)){
-dojo.event.browser.clean(node);
-}
-if(dojo.render.html.ie){
-node.outerHTML="";
-}
-}
-};
-dojo.dom.removeNode=function(node){
-if(node&&node.parentNode){
-return node.parentNode.removeChild(node);
-}
-};
-dojo.dom.getAncestors=function(node,_116,_117){
-var _118=[];
-var _119=(_116&&(_116 instanceof Function||typeof _116=="function"));
-while(node){
-if(!_119||_116(node)){
-_118.push(node);
-}
-if(_117&&_118.length>0){
-return _118[0];
-}
-node=node.parentNode;
-}
-if(_117){
-return null;
-}
-return _118;
-};
-dojo.dom.getAncestorsByTag=function(node,tag,_11c){
+dojo.dom.getAncestorsByTag=function(node,tag,_114){
 tag=tag.toLowerCase();
 return dojo.dom.getAncestors(node,function(el){
 return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_11c);
+},_114);
 };
 dojo.dom.getFirstAncestorByTag=function(node,tag){
 return dojo.dom.getAncestorsByTag(node,tag,true);
 };
-dojo.dom.isDescendantOf=function(node,_121,_122){
-if(_122&&node){
+dojo.dom.isDescendantOf=function(node,_119,_11a){
+if(_11a&&node){
 node=node.parentNode;
 }
 while(node){
-if(node==_121){
+if(node==_119){
 return true;
 }
 node=node.parentNode;
@@ -27007,12 +19139,12 @@
 };
 dojo.dom.createDocument=function(){
 var doc=null;
-var _125=dojo.doc();
+var _11d=dojo.doc();
 if(!dj_undef("ActiveXObject")){
-var _126=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_126.length;i++){
+var _11e=["MSXML2","Microsoft","MSXML","MSXML3"];
+for(var i=0;i<_11e.length;i++){
 try{
-doc=new ActiveXObject(_126[i]+".XMLDOM");
+doc=new ActiveXObject(_11e[i]+".XMLDOM");
 }
 catch(e){
 }
@@ -27021,40 +19153,40 @@
 }
 }
 }else{
-if((_125.implementation)&&(_125.implementation.createDocument)){
-doc=_125.implementation.createDocument("","",null);
+if((_11d.implementation)&&(_11d.implementation.createDocument)){
+doc=_11d.implementation.createDocument("","",null);
 }
 }
 return doc;
 };
-dojo.dom.createDocumentFromText=function(str,_129){
-if(!_129){
-_129="text/xml";
+dojo.dom.createDocumentFromText=function(str,_121){
+if(!_121){
+_121="text/xml";
 }
 if(!dj_undef("DOMParser")){
-var _12a=new DOMParser();
-return _12a.parseFromString(str,_129);
+var _122=new DOMParser();
+return _122.parseFromString(str,_121);
 }else{
 if(!dj_undef("ActiveXObject")){
-var _12b=dojo.dom.createDocument();
-if(_12b){
-_12b.async=false;
-_12b.loadXML(str);
-return _12b;
+var _123=dojo.dom.createDocument();
+if(_123){
+_123.async=false;
+_123.loadXML(str);
+return _123;
 }else{
 dojo.debug("toXml didn't work?");
 }
 }else{
-var _12c=dojo.doc();
-if(_12c.createElement){
-var tmp=_12c.createElement("xml");
+var _124=dojo.doc();
+if(_124.createElement){
+var tmp=_124.createElement("xml");
 tmp.innerHTML=str;
-if(_12c.implementation&&_12c.implementation.createDocument){
-var _12e=_12c.implementation.createDocument("foo","",null);
+if(_124.implementation&&_124.implementation.createDocument){
+var _126=_124.implementation.createDocument("foo","",null);
 for(var i=0;i<tmp.childNodes.length;i++){
-_12e.importNode(tmp.childNodes.item(i),true);
+_126.importNode(tmp.childNodes.item(i),true);
 }
-return _12e;
+return _126;
 }
 return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
 }
@@ -27062,39 +19194,39 @@
 }
 return null;
 };
-dojo.dom.prependChild=function(node,_131){
-if(_131.firstChild){
-_131.insertBefore(node,_131.firstChild);
+dojo.dom.prependChild=function(node,_129){
+if(_129.firstChild){
+_129.insertBefore(node,_129.firstChild);
 }else{
-_131.appendChild(node);
+_129.appendChild(node);
 }
 return true;
 };
-dojo.dom.insertBefore=function(node,ref,_134){
-if((_134!=true)&&(node===ref||node.nextSibling===ref)){
+dojo.dom.insertBefore=function(node,ref,_12c){
+if((_12c!=true)&&(node===ref||node.nextSibling===ref)){
 return false;
 }
-var _135=ref.parentNode;
-_135.insertBefore(node,ref);
+var _12d=ref.parentNode;
+_12d.insertBefore(node,ref);
 return true;
 };
-dojo.dom.insertAfter=function(node,ref,_138){
+dojo.dom.insertAfter=function(node,ref,_130){
 var pn=ref.parentNode;
 if(ref==pn.lastChild){
-if((_138!=true)&&(node===ref)){
+if((_130!=true)&&(node===ref)){
 return false;
 }
 pn.appendChild(node);
 }else{
-return this.insertBefore(node,ref.nextSibling,_138);
+return this.insertBefore(node,ref.nextSibling,_130);
 }
 return true;
 };
-dojo.dom.insertAtPosition=function(node,ref,_13c){
-if((!node)||(!ref)||(!_13c)){
+dojo.dom.insertAtPosition=function(node,ref,_134){
+if((!node)||(!ref)||(!_134)){
 return false;
 }
-switch(_13c.toLowerCase()){
+switch(_134.toLowerCase()){
 case "before":
 return dojo.dom.insertBefore(node,ref);
 case "after":
@@ -27112,46 +19244,46 @@
 return true;
 }
 };
-dojo.dom.insertAtIndex=function(node,_13e,_13f){
-var _140=_13e.childNodes;
-if(!_140.length||_140.length==_13f){
-_13e.appendChild(node);
+dojo.dom.insertAtIndex=function(node,_136,_137){
+var _138=_136.childNodes;
+if(!_138.length||_138.length==_137){
+_136.appendChild(node);
 return true;
 }
-if(_13f==0){
-return dojo.dom.prependChild(node,_13e);
+if(_137==0){
+return dojo.dom.prependChild(node,_136);
 }
-return dojo.dom.insertAfter(node,_140[_13f-1]);
+return dojo.dom.insertAfter(node,_138[_137-1]);
 };
 dojo.dom.textContent=function(node,text){
 if(arguments.length>1){
-var _143=dojo.doc();
-dojo.dom.replaceChildren(node,_143.createTextNode(text));
+var _13b=dojo.doc();
+dojo.dom.replaceChildren(node,_13b.createTextNode(text));
 return text;
 }else{
 if(node.textContent!=undefined){
 return node.textContent;
 }
-var _144="";
+var _13c="";
 if(node==null){
-return _144;
+return _13c;
 }
 for(var i=0;i<node.childNodes.length;i++){
 switch(node.childNodes[i].nodeType){
 case 1:
 case 5:
-_144+=dojo.dom.textContent(node.childNodes[i]);
+_13c+=dojo.dom.textContent(node.childNodes[i]);
 break;
 case 3:
 case 2:
 case 4:
-_144+=node.childNodes[i].nodeValue;
+_13c+=node.childNodes[i].nodeValue;
 break;
 default:
 break;
 }
 }
-return _144;
+return _13c;
 }
 };
 dojo.dom.hasParent=function(node){
@@ -27167,17 +19299,17 @@
 }
 return "";
 };
-dojo.dom.setAttributeNS=function(elem,_14a,_14b,_14c){
+dojo.dom.setAttributeNS=function(elem,_142,_143,_144){
 if(elem==null||((elem==undefined)&&(typeof elem=="undefined"))){
 dojo.raise("No element given to dojo.dom.setAttributeNS");
 }
 if(!((elem.setAttributeNS==undefined)&&(typeof elem.setAttributeNS=="undefined"))){
-elem.setAttributeNS(_14a,_14b,_14c);
+elem.setAttributeNS(_142,_143,_144);
 }else{
-var _14d=elem.ownerDocument;
-var _14e=_14d.createNode(2,_14b,_14a);
-_14e.nodeValue=_14c;
-elem.setAttributeNode(_14e);
+var _145=elem.ownerDocument;
+var _146=_145.createNode(2,_143,_142);
+_146.nodeValue=_144;
+elem.setAttributeNode(_146);
 }
 };
 dojo.provide("dojo.xml.Parse");
@@ -27192,25 +19324,25 @@
 }
 }
 function getDojoTagName(node){
-var _152=getTagName(node);
-if(!_152){
+var _14a=getTagName(node);
+if(!_14a){
 return "";
 }
-if((dojo.widget)&&(dojo.widget.tags[_152])){
-return _152;
+if((dojo.widget)&&(dojo.widget.tags[_14a])){
+return _14a;
 }
-var p=_152.indexOf(":");
+var p=_14a.indexOf(":");
 if(p>=0){
-return _152;
+return _14a;
 }
-if(_152.substr(0,5)=="dojo:"){
-return _152;
+if(_14a.substr(0,5)=="dojo:"){
+return _14a;
 }
 if(dojo.render.html.capable&&dojo.render.html.ie&&node.scopeName!="HTML"){
-return node.scopeName.toLowerCase()+":"+_152;
+return node.scopeName.toLowerCase()+":"+_14a;
 }
-if(_152.substr(0,4)=="dojo"){
-return "dojo:"+_152.substring(4);
+if(_14a.substr(0,4)=="dojo"){
+return "dojo:"+_14a.substring(4);
 }
 var djt=node.getAttribute("dojoType")||node.getAttribute("dojotype");
 if(djt){
@@ -27232,21 +19364,21 @@
 return "dojo:"+djt.toLowerCase();
 }
 if((dj_global["djConfig"])&&(!djConfig["ignoreClassNames"])){
-var _155=node.className||node.getAttribute("class");
-if((_155)&&(_155.indexOf)&&(_155.indexOf("dojo-")!=-1)){
-var _156=_155.split(" ");
-for(var x=0,c=_156.length;x<c;x++){
-if(_156[x].slice(0,5)=="dojo-"){
-return "dojo:"+_156[x].substr(5).toLowerCase();
+var _14d=node.className||node.getAttribute("class");
+if((_14d)&&(_14d.indexOf)&&(_14d.indexOf("dojo-")!=-1)){
+var _14e=_14d.split(" ");
+for(var x=0,c=_14e.length;x<c;x++){
+if(_14e[x].slice(0,5)=="dojo-"){
+return "dojo:"+_14e[x].substr(5).toLowerCase();
 }
 }
 }
 }
 return "";
 }
-this.parseElement=function(node,_15a,_15b,_15c){
-var _15d=getTagName(node);
-if(isIE&&_15d.indexOf("/")==0){
+this.parseElement=function(node,_152,_153,_154){
+var _155=getTagName(node);
+if(isIE&&_155.indexOf("/")==0){
 return null;
 }
 try{
@@ -27257,147 +19389,147 @@
 }
 catch(e){
 }
-var _15f=true;
-if(_15b){
-var _160=getDojoTagName(node);
-_15d=_160||_15d;
-_15f=Boolean(_160);
+var _157=true;
+if(_153){
+var _158=getDojoTagName(node);
+_155=_158||_155;
+_157=Boolean(_158);
 }
-var _161={};
-_161[_15d]=[];
-var pos=_15d.indexOf(":");
+var _159={};
+_159[_155]=[];
+var pos=_155.indexOf(":");
 if(pos>0){
-var ns=_15d.substring(0,pos);
-_161["ns"]=ns;
+var ns=_155.substring(0,pos);
+_159["ns"]=ns;
 if((dojo.ns)&&(!dojo.ns.allow(ns))){
-_15f=false;
+_157=false;
 }
 }
-if(_15f){
-var _164=this.parseAttributes(node);
-for(var attr in _164){
-if((!_161[_15d][attr])||(typeof _161[_15d][attr]!="array")){
-_161[_15d][attr]=[];
+if(_157){
+var _15c=this.parseAttributes(node);
+for(var attr in _15c){
+if((!_159[_155][attr])||(typeof _159[_155][attr]!="array")){
+_159[_155][attr]=[];
 }
-_161[_15d][attr].push(_164[attr]);
+_159[_155][attr].push(_15c[attr]);
 }
-_161[_15d].nodeRef=node;
-_161.tagName=_15d;
-_161.index=_15c||0;
+_159[_155].nodeRef=node;
+_159.tagName=_155;
+_159.index=_154||0;
 }
-var _165=0;
+var _15d=0;
 for(var i=0;i<node.childNodes.length;i++){
 var tcn=node.childNodes.item(i);
 switch(tcn.nodeType){
 case dojo.dom.ELEMENT_NODE:
 var ctn=getDojoTagName(tcn)||getTagName(tcn);
-if(!_161[ctn]){
-_161[ctn]=[];
+if(!_159[ctn]){
+_159[ctn]=[];
 }
-_161[ctn].push(this.parseElement(tcn,true,_15b,_165));
+_159[ctn].push(this.parseElement(tcn,true,_153,_15d));
 if((tcn.childNodes.length==1)&&(tcn.childNodes.item(0).nodeType==dojo.dom.TEXT_NODE)){
-_161[ctn][_161[ctn].length-1].value=tcn.childNodes.item(0).nodeValue;
+_159[ctn][_159[ctn].length-1].value=tcn.childNodes.item(0).nodeValue;
 }
-_165++;
+_15d++;
 break;
 case dojo.dom.TEXT_NODE:
 if(node.childNodes.length==1){
-_161[_15d].push({value:node.childNodes.item(0).nodeValue});
+_159[_155].push({value:node.childNodes.item(0).nodeValue});
 }
 break;
 default:
 break;
 }
 }
-return _161;
+return _159;
 };
 this.parseAttributes=function(node){
-var _16a={};
+var _162={};
 var atts=node.attributes;
-var _16c,i=0;
-while((_16c=atts[i++])){
+var _164,i=0;
+while((_164=atts[i++])){
 if(isIE){
-if(!_16c){
+if(!_164){
 continue;
 }
-if((typeof _16c=="object")&&(typeof _16c.nodeValue=="undefined")||(_16c.nodeValue==null)||(_16c.nodeValue=="")){
+if((typeof _164=="object")&&(typeof _164.nodeValue=="undefined")||(_164.nodeValue==null)||(_164.nodeValue=="")){
 continue;
 }
 }
-var nn=_16c.nodeName.split(":");
-nn=(nn.length==2)?nn[1]:_16c.nodeName;
-_16a[nn]={value:_16c.nodeValue};
+var nn=_164.nodeName.split(":");
+nn=(nn.length==2)?nn[1]:_164.nodeName;
+_162[nn]={value:_164.nodeValue};
 }
-return _16a;
+return _162;
 };
 };
 dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_16f,_170){
-if(!dojo.lang.isFunction(_170)){
-dojo.raise("dojo.inherits: superclass argument ["+_170+"] must be a function (subclass: ["+_16f+"']");
+dojo.lang.inherits=function(_167,_168){
+if(!dojo.lang.isFunction(_168)){
+dojo.raise("dojo.inherits: superclass argument ["+_168+"] must be a function (subclass: ["+_167+"']");
 }
-_16f.prototype=new _170();
-_16f.prototype.constructor=_16f;
-_16f.superclass=_170.prototype;
-_16f["super"]=_170.prototype;
+_167.prototype=new _168();
+_167.prototype.constructor=_167;
+_167.superclass=_168.prototype;
+_167["super"]=_168.prototype;
 };
-dojo.lang._mixin=function(obj,_172){
+dojo.lang._mixin=function(obj,_16a){
 var tobj={};
-for(var x in _172){
-if((typeof tobj[x]=="undefined")||(tobj[x]!=_172[x])){
-obj[x]=_172[x];
+for(var x in _16a){
+if((typeof tobj[x]=="undefined")||(tobj[x]!=_16a[x])){
+obj[x]=_16a[x];
 }
 }
-if(dojo.render.html.ie&&(typeof (_172["toString"])=="function")&&(_172["toString"]!=obj["toString"])&&(_172["toString"]!=tobj["toString"])){
-obj.toString=_172.toString;
+if(dojo.render.html.ie&&(typeof (_16a["toString"])=="function")&&(_16a["toString"]!=obj["toString"])&&(_16a["toString"]!=tobj["toString"])){
+obj.toString=_16a.toString;
 }
 return obj;
 };
-dojo.lang.mixin=function(obj,_176){
+dojo.lang.mixin=function(obj,_16e){
 for(var i=1,l=arguments.length;i<l;i++){
 dojo.lang._mixin(obj,arguments[i]);
 }
 return obj;
 };
-dojo.lang.extend=function(_179,_17a){
+dojo.lang.extend=function(_171,_172){
 for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_179.prototype,arguments[i]);
+dojo.lang._mixin(_171.prototype,arguments[i]);
 }
-return _179;
+return _171;
 };
 dojo.inherits=dojo.lang.inherits;
 dojo.mixin=dojo.lang.mixin;
 dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_17d,_17e,_17f,_180){
-if(!dojo.lang.isArrayLike(_17d)&&dojo.lang.isArrayLike(_17e)){
+dojo.lang.find=function(_175,_176,_177,_178){
+if(!dojo.lang.isArrayLike(_175)&&dojo.lang.isArrayLike(_176)){
 dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_17d;
-_17d=_17e;
-_17e=temp;
+var temp=_175;
+_175=_176;
+_176=temp;
 }
-var _182=dojo.lang.isString(_17d);
-if(_182){
-_17d=_17d.split("");
+var _17a=dojo.lang.isString(_175);
+if(_17a){
+_175=_175.split("");
 }
-if(_180){
+if(_178){
 var step=-1;
-var i=_17d.length-1;
+var i=_175.length-1;
 var end=-1;
 }else{
 var step=1;
 var i=0;
-var end=_17d.length;
+var end=_175.length;
 }
-if(_17f){
+if(_177){
 while(i!=end){
-if(_17d[i]===_17e){
+if(_175[i]===_176){
 return i;
 }
 i+=step;
 }
 }else{
 while(i!=end){
-if(_17d[i]==_17e){
+if(_175[i]==_176){
 return i;
 }
 i+=step;
@@ -27406,12 +19538,12 @@
 return -1;
 };
 dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_186,_187,_188){
-return dojo.lang.find(_186,_187,_188,true);
+dojo.lang.findLast=function(_17e,_17f,_180){
+return dojo.lang.find(_17e,_17f,_180,true);
 };
 dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_189,_18a){
-return dojo.lang.find(_189,_18a)>-1;
+dojo.lang.inArray=function(_181,_182){
+return dojo.lang.find(_181,_182)>-1;
 };
 dojo.lang.isObject=function(it){
 if(typeof it=="undefined"){
@@ -27475,21 +19607,21 @@
 return ((typeof (it)=="undefined")&&(it==undefined));
 };
 dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_195,_196){
-var fcn=(dojo.lang.isString(_196)?_195[_196]:_196)||function(){
+dojo.lang.hitch=function(_18d,_18e){
+var fcn=(dojo.lang.isString(_18e)?_18d[_18e]:_18e)||function(){
 };
 return function(){
-return fcn.apply(_195,arguments);
+return fcn.apply(_18d,arguments);
 };
 };
 dojo.lang.anonCtr=0;
 dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_198,_199,_19a){
-var nso=(_199||dojo.lang.anon);
-if((_19a)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
+dojo.lang.nameAnonFunc=function(_190,_191,_192){
+var nso=(_191||dojo.lang.anon);
+if((_192)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
 for(var x in nso){
 try{
-if(nso[x]===_198){
+if(nso[x]===_190){
 return x;
 }
 }
@@ -27501,50 +19633,50 @@
 while(typeof nso[ret]!="undefined"){
 ret="__"+dojo.lang.anonCtr++;
 }
-nso[ret]=_198;
+nso[ret]=_190;
 return ret;
 };
-dojo.lang.forward=function(_19e){
+dojo.lang.forward=function(_196){
 return function(){
-return this[_19e].apply(this,arguments);
+return this[_196].apply(this,arguments);
 };
 };
-dojo.lang.curry=function(_19f,func){
-var _1a1=[];
-_19f=_19f||dj_global;
+dojo.lang.curry=function(_197,func){
+var _199=[];
+_197=_197||dj_global;
 if(dojo.lang.isString(func)){
-func=_19f[func];
+func=_197[func];
 }
 for(var x=2;x<arguments.length;x++){
-_1a1.push(arguments[x]);
+_199.push(arguments[x]);
 }
-var _1a3=(func["__preJoinArity"]||func.length)-_1a1.length;
-function gather(_1a4,_1a5,_1a6){
-var _1a7=_1a6;
-var _1a8=_1a5.slice(0);
-for(var x=0;x<_1a4.length;x++){
-_1a8.push(_1a4[x]);
+var _19b=(func["__preJoinArity"]||func.length)-_199.length;
+function gather(_19c,_19d,_19e){
+var _19f=_19e;
+var _1a0=_19d.slice(0);
+for(var x=0;x<_19c.length;x++){
+_1a0.push(_19c[x]);
 }
-_1a6=_1a6-_1a4.length;
-if(_1a6<=0){
-var res=func.apply(_19f,_1a8);
-_1a6=_1a7;
+_19e=_19e-_19c.length;
+if(_19e<=0){
+var res=func.apply(_197,_1a0);
+_19e=_19f;
 return res;
 }else{
 return function(){
-return gather(arguments,_1a8,_1a6);
+return gather(arguments,_1a0,_19e);
 };
 }
 }
-return gather([],_1a1,_1a3);
+return gather([],_199,_19b);
 };
-dojo.lang.curryArguments=function(_1ab,func,args,_1ae){
-var _1af=[];
-var x=_1ae||0;
-for(x=_1ae;x<args.length;x++){
-_1af.push(args[x]);
+dojo.lang.curryArguments=function(_1a3,func,args,_1a6){
+var _1a7=[];
+var x=_1a6||0;
+for(x=_1a6;x<args.length;x++){
+_1a7.push(args[x]);
 }
-return dojo.lang.curry.apply(dojo.lang,[_1ab,func].concat(_1af));
+return dojo.lang.curry.apply(dojo.lang,[_1a3,func].concat(_1a7));
 };
 dojo.lang.tryThese=function(){
 for(var x=0;x<arguments.length;x++){
@@ -27561,31 +19693,31 @@
 }
 }
 };
-dojo.lang.delayThese=function(farr,cb,_1b5,_1b6){
+dojo.lang.delayThese=function(farr,cb,_1ad,_1ae){
 if(!farr.length){
-if(typeof _1b6=="function"){
-_1b6();
+if(typeof _1ae=="function"){
+_1ae();
 }
 return;
 }
-if((typeof _1b5=="undefined")&&(typeof cb=="number")){
-_1b5=cb;
+if((typeof _1ad=="undefined")&&(typeof cb=="number")){
+_1ad=cb;
 cb=function(){
 };
 }else{
 if(!cb){
 cb=function(){
 };
-if(!_1b5){
-_1b5=0;
+if(!_1ad){
+_1ad=0;
 }
 }
 }
 setTimeout(function(){
 (farr.shift())();
 cb();
-dojo.lang.delayThese(farr,cb,_1b5,_1b6);
-},_1b5);
+dojo.lang.delayThese(farr,cb,_1ad,_1ae);
+},_1ad);
 };
 dojo.provide("dojo.lang.array");
 dojo.lang.mixin(dojo.lang,{has:function(obj,name){
@@ -27598,142 +19730,138 @@
 },isEmpty:function(obj){
 if(dojo.lang.isObject(obj)){
 var tmp={};
-var _1bb=0;
+var _1b3=0;
 for(var x in obj){
 if(obj[x]&&(!tmp[x])){
-_1bb++;
+_1b3++;
 break;
 }
 }
-return _1bb==0;
+return _1b3==0;
 }else{
 if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
 return obj.length==0;
 }
 }
-},map:function(arr,obj,_1bf){
-var _1c0=dojo.lang.isString(arr);
-if(_1c0){
+},map:function(arr,obj,_1b7){
+var _1b8=dojo.lang.isString(arr);
+if(_1b8){
 arr=arr.split("");
 }
-if(dojo.lang.isFunction(obj)&&(!_1bf)){
-_1bf=obj;
+if(dojo.lang.isFunction(obj)&&(!_1b7)){
+_1b7=obj;
 obj=dj_global;
 }else{
-if(dojo.lang.isFunction(obj)&&_1bf){
-var _1c1=obj;
-obj=_1bf;
-_1bf=_1c1;
+if(dojo.lang.isFunction(obj)&&_1b7){
+var _1b9=obj;
+obj=_1b7;
+_1b7=_1b9;
 }
 }
 if(Array.map){
-var _1c2=Array.map(arr,_1bf,obj);
+var _1ba=Array.map(arr,_1b7,obj);
 }else{
-var _1c2=[];
+var _1ba=[];
 for(var i=0;i<arr.length;++i){
-_1c2.push(_1bf.call(obj,arr[i]));
+_1ba.push(_1b7.call(obj,arr[i]));
 }
 }
-if(_1c0){
-return _1c2.join("");
+if(_1b8){
+return _1ba.join("");
 }else{
-return _1c2;
+return _1ba;
 }
-},reduce:function(arr,_1c5,obj,_1c7){
-var _1c8=_1c5;
-if(arguments.length==1){
-dojo.debug("dojo.lang.reduce called with too few arguments!");
-return false;
-}else{
+},reduce:function(arr,_1bd,obj,_1bf){
+var _1c0=_1bd;
 if(arguments.length==2){
-_1c7=_1c5;
-_1c8=arr.shift();
+_1bf=_1bd;
+_1c0=arr[0];
+arr=arr.slice(1);
 }else{
-if(arguments.lenght==3){
+if(arguments.length==3){
 if(dojo.lang.isFunction(obj)){
-_1c7=obj;
+_1bf=obj;
 obj=null;
 }
 }else{
 if(dojo.lang.isFunction(obj)){
-var tmp=_1c7;
-_1c7=obj;
+var tmp=_1bf;
+_1bf=obj;
 obj=tmp;
 }
 }
 }
-}
-var ob=obj?obj:dj_global;
+var ob=obj||dj_global;
 dojo.lang.map(arr,function(val){
-_1c8=_1c7.call(ob,_1c8,val);
+_1c0=_1bf.call(ob,_1c0,val);
 });
-return _1c8;
-},forEach:function(_1cc,_1cd,_1ce){
-if(dojo.lang.isString(_1cc)){
-_1cc=_1cc.split("");
+return _1c0;
+},forEach:function(_1c4,_1c5,_1c6){
+if(dojo.lang.isString(_1c4)){
+_1c4=_1c4.split("");
 }
 if(Array.forEach){
-Array.forEach(_1cc,_1cd,_1ce);
+Array.forEach(_1c4,_1c5,_1c6);
 }else{
-if(!_1ce){
-_1ce=dj_global;
+if(!_1c6){
+_1c6=dj_global;
 }
-for(var i=0,l=_1cc.length;i<l;i++){
-_1cd.call(_1ce,_1cc[i],i,_1cc);
+for(var i=0,l=_1c4.length;i<l;i++){
+_1c5.call(_1c6,_1c4[i],i,_1c4);
 }
 }
-},_everyOrSome:function(_1d1,arr,_1d3,_1d4){
+},_everyOrSome:function(_1c9,arr,_1cb,_1cc){
 if(dojo.lang.isString(arr)){
 arr=arr.split("");
 }
 if(Array.every){
-return Array[_1d1?"every":"some"](arr,_1d3,_1d4);
+return Array[_1c9?"every":"some"](arr,_1cb,_1cc);
 }else{
-if(!_1d4){
-_1d4=dj_global;
+if(!_1cc){
+_1cc=dj_global;
 }
 for(var i=0,l=arr.length;i<l;i++){
-var _1d7=_1d3.call(_1d4,arr[i],i,arr);
-if(_1d1&&!_1d7){
+var _1cf=_1cb.call(_1cc,arr[i],i,arr);
+if(_1c9&&!_1cf){
 return false;
 }else{
-if((!_1d1)&&(_1d7)){
+if((!_1c9)&&(_1cf)){
 return true;
 }
 }
 }
-return Boolean(_1d1);
+return Boolean(_1c9);
 }
-},every:function(arr,_1d9,_1da){
-return this._everyOrSome(true,arr,_1d9,_1da);
-},some:function(arr,_1dc,_1dd){
-return this._everyOrSome(false,arr,_1dc,_1dd);
-},filter:function(arr,_1df,_1e0){
-var _1e1=dojo.lang.isString(arr);
-if(_1e1){
+},every:function(arr,_1d1,_1d2){
+return this._everyOrSome(true,arr,_1d1,_1d2);
+},some:function(arr,_1d4,_1d5){
+return this._everyOrSome(false,arr,_1d4,_1d5);
+},filter:function(arr,_1d7,_1d8){
+var _1d9=dojo.lang.isString(arr);
+if(_1d9){
 arr=arr.split("");
 }
-var _1e2;
+var _1da;
 if(Array.filter){
-_1e2=Array.filter(arr,_1df,_1e0);
+_1da=Array.filter(arr,_1d7,_1d8);
 }else{
-if(!_1e0){
+if(!_1d8){
 if(arguments.length>=3){
 dojo.raise("thisObject doesn't exist!");
 }
-_1e0=dj_global;
+_1d8=dj_global;
 }
-_1e2=[];
+_1da=[];
 for(var i=0;i<arr.length;i++){
-if(_1df.call(_1e0,arr[i],i,arr)){
-_1e2.push(arr[i]);
+if(_1d7.call(_1d8,arr[i],i,arr)){
+_1da.push(arr[i]);
 }
 }
 }
-if(_1e1){
-return _1e2.join("");
+if(_1d9){
+return _1da.join("");
 }else{
-return _1e2;
+return _1da;
 }
 },unnest:function(){
 var out=[];
@@ -27746,35 +19874,35 @@
 }
 }
 return out;
-},toArray:function(_1e7,_1e8){
-var _1e9=[];
-for(var i=_1e8||0;i<_1e7.length;i++){
-_1e9.push(_1e7[i]);
+},toArray:function(_1df,_1e0){
+var _1e1=[];
+for(var i=_1e0||0;i<_1df.length;i++){
+_1e1.push(_1df[i]);
 }
-return _1e9;
+return _1e1;
 }});
 dojo.provide("dojo.lang.extras");
-dojo.lang.setTimeout=function(func,_1ec){
-var _1ed=window,_1ee=2;
+dojo.lang.setTimeout=function(func,_1e4){
+var _1e5=window,_1e6=2;
 if(!dojo.lang.isFunction(func)){
-_1ed=func;
-func=_1ec;
-_1ec=arguments[2];
-_1ee++;
+_1e5=func;
+func=_1e4;
+_1e4=arguments[2];
+_1e6++;
 }
 if(dojo.lang.isString(func)){
-func=_1ed[func];
+func=_1e5[func];
 }
 var args=[];
-for(var i=_1ee;i<arguments.length;i++){
+for(var i=_1e6;i<arguments.length;i++){
 args.push(arguments[i]);
 }
 return dojo.global().setTimeout(function(){
-func.apply(_1ed,args);
-},_1ec);
+func.apply(_1e5,args);
+},_1e4);
 };
-dojo.lang.clearTimeout=function(_1f1){
-dojo.global().clearTimeout(_1f1);
+dojo.lang.clearTimeout=function(_1e9){
+dojo.global().clearTimeout(_1e9);
 };
 dojo.lang.getNameInObj=function(ns,item){
 if(!ns){
@@ -27819,65 +19947,65 @@
 }
 return undefined;
 };
-dojo.lang.getObjPathValue=function(_1fa,_1fb,_1fc){
-with(dojo.parseObjPath(_1fa,_1fb,_1fc)){
-return dojo.evalProp(prop,obj,_1fc);
+dojo.lang.getObjPathValue=function(_1f2,_1f3,_1f4){
+with(dojo.parseObjPath(_1f2,_1f3,_1f4)){
+return dojo.evalProp(prop,obj,_1f4);
 }
 };
-dojo.lang.setObjPathValue=function(_1fd,_1fe,_1ff,_200){
+dojo.lang.setObjPathValue=function(_1f5,_1f6,_1f7,_1f8){
 dojo.deprecated("dojo.lang.setObjPathValue","use dojo.parseObjPath and the '=' operator","0.6");
 if(arguments.length<4){
-_200=true;
+_1f8=true;
 }
-with(dojo.parseObjPath(_1fd,_1ff,_200)){
-if(obj&&(_200||(prop in obj))){
-obj[prop]=_1fe;
+with(dojo.parseObjPath(_1f5,_1f7,_1f8)){
+if(obj&&(_1f8||(prop in obj))){
+obj[prop]=_1f6;
 }
 }
 };
 dojo.provide("dojo.lang.declare");
-dojo.lang.declare=function(_201,_202,init,_204){
-if((dojo.lang.isFunction(_204))||((!_204)&&(!dojo.lang.isFunction(init)))){
-var temp=_204;
-_204=init;
+dojo.lang.declare=function(_1f9,_1fa,init,_1fc){
+if((dojo.lang.isFunction(_1fc))||((!_1fc)&&(!dojo.lang.isFunction(init)))){
+var temp=_1fc;
+_1fc=init;
 init=temp;
 }
-var _206=[];
-if(dojo.lang.isArray(_202)){
-_206=_202;
-_202=_206.shift();
+var _1fe=[];
+if(dojo.lang.isArray(_1fa)){
+_1fe=_1fa;
+_1fa=_1fe.shift();
 }
 if(!init){
-init=dojo.evalObjPath(_201,false);
+init=dojo.evalObjPath(_1f9,false);
 if((init)&&(!dojo.lang.isFunction(init))){
 init=null;
 }
 }
 var ctor=dojo.lang.declare._makeConstructor();
-var scp=(_202?_202.prototype:null);
+var scp=(_1fa?_1fa.prototype:null);
 if(scp){
 scp.prototyping=true;
-ctor.prototype=new _202();
+ctor.prototype=new _1fa();
 scp.prototyping=false;
 }
 ctor.superclass=scp;
-ctor.mixins=_206;
-for(var i=0,l=_206.length;i<l;i++){
-dojo.lang.extend(ctor,_206[i].prototype);
+ctor.mixins=_1fe;
+for(var i=0,l=_1fe.length;i<l;i++){
+dojo.lang.extend(ctor,_1fe[i].prototype);
 }
 ctor.prototype.initializer=null;
-ctor.prototype.declaredClass=_201;
-if(dojo.lang.isArray(_204)){
-dojo.lang.extend.apply(dojo.lang,[ctor].concat(_204));
+ctor.prototype.declaredClass=_1f9;
+if(dojo.lang.isArray(_1fc)){
+dojo.lang.extend.apply(dojo.lang,[ctor].concat(_1fc));
 }else{
-dojo.lang.extend(ctor,(_204)||{});
+dojo.lang.extend(ctor,(_1fc)||{});
 }
 dojo.lang.extend(ctor,dojo.lang.declare._common);
 ctor.prototype.constructor=ctor;
 ctor.prototype.initializer=(ctor.prototype.initializer)||(init)||(function(){
 });
-var _20b=dojo.parseObjPath(_201,null,true);
-_20b.obj[_20b.prop]=ctor;
+var _203=dojo.parseObjPath(_1f9,null,true);
+_203.obj[_203.prop]=ctor;
 return ctor;
 };
 dojo.lang.declare._makeConstructor=function(){
@@ -27902,19 +20030,19 @@
 };
 dojo.lang.declare._common={_getPropContext:function(){
 return (this.___proto||this);
-},_contextMethod:function(_211,_212,args){
-var _214,_215=this.___proto;
-this.___proto=_211;
+},_contextMethod:function(_209,_20a,args){
+var _20c,_20d=this.___proto;
+this.___proto=_209;
 try{
-_214=_211[_212].apply(this,(args||[]));
+_20c=_209[_20a].apply(this,(args||[]));
 }
 catch(e){
 throw e;
 }
 finally{
-this.___proto=_215;
+this.___proto=_20d;
 }
-return _214;
+return _20c;
 },_inherited:function(prop,args){
 var p=this._getPropContext();
 do{
@@ -27930,9 +20058,9 @@
 }};
 dojo.declare=dojo.lang.declare;
 dojo.provide("dojo.ns");
-dojo.ns={namespaces:{},failed:{},loading:{},loaded:{},register:function(name,_21c,_21d,_21e){
-if(!_21e||!this.namespaces[name]){
-this.namespaces[name]=new dojo.ns.Ns(name,_21c,_21d);
+dojo.ns={namespaces:{},failed:{},loading:{},loaded:{},register:function(name,_214,_215,_216){
+if(!_216||!this.namespaces[name]){
+this.namespaces[name]=new dojo.ns.Ns(name,_214,_215);
 }
 },allow:function(name){
 if(this.failed[name]){
@@ -27976,52 +20104,52 @@
 }
 return this.namespaces[name];
 }};
-dojo.ns.Ns=function(name,_225,_226){
+dojo.ns.Ns=function(name,_21d,_21e){
 this.name=name;
-this.module=_225;
-this.resolver=_226;
+this.module=_21d;
+this.resolver=_21e;
 this._loaded=[];
 this._failed=[];
 };
-dojo.ns.Ns.prototype.resolve=function(name,_228,_229){
+dojo.ns.Ns.prototype.resolve=function(name,_220,_221){
 if(!this.resolver||djConfig["skipAutoRequire"]){
 return false;
 }
-var _22a=this.resolver(name,_228);
-if((_22a)&&(!this._loaded[_22a])&&(!this._failed[_22a])){
+var _222=this.resolver(name,_220);
+if((_222)&&(!this._loaded[_222])&&(!this._failed[_222])){
 var req=dojo.require;
-req(_22a,false,true);
-if(dojo.hostenv.findModule(_22a,false)){
-this._loaded[_22a]=true;
+req(_222,false,true);
+if(dojo.hostenv.findModule(_222,false)){
+this._loaded[_222]=true;
 }else{
-if(!_229){
-dojo.raise("dojo.ns.Ns.resolve: module '"+_22a+"' not found after loading via namespace '"+this.name+"'");
+if(!_221){
+dojo.raise("dojo.ns.Ns.resolve: module '"+_222+"' not found after loading via namespace '"+this.name+"'");
 }
-this._failed[_22a]=true;
+this._failed[_222]=true;
 }
 }
-return Boolean(this._loaded[_22a]);
+return Boolean(this._loaded[_222]);
 };
-dojo.registerNamespace=function(name,_22d,_22e){
+dojo.registerNamespace=function(name,_225,_226){
 dojo.ns.register.apply(dojo.ns,arguments);
 };
-dojo.registerNamespaceResolver=function(name,_230){
+dojo.registerNamespaceResolver=function(name,_228){
 var n=dojo.ns.namespaces[name];
 if(n){
-n.resolver=_230;
+n.resolver=_228;
 }
 };
-dojo.registerNamespaceManifest=function(_232,path,name,_235,_236){
+dojo.registerNamespaceManifest=function(_22a,path,name,_22d,_22e){
 dojo.registerModulePath(name,path);
-dojo.registerNamespace(name,_235,_236);
+dojo.registerNamespace(name,_22d,_22e);
 };
 dojo.registerNamespace("dojo","dojo.widget");
 dojo.provide("dojo.event.common");
 dojo.event=new function(){
 this._canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-function interpolateArgs(args,_238){
+function interpolateArgs(args,_230){
 var dl=dojo.lang;
-var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false};
+var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false,maxCalls:-1};
 switch(args.length){
 case 0:
 return;
@@ -28046,14 +20174,14 @@
 ao.adviceType="after";
 ao.srcObj=args[0];
 ao.srcFunc=args[1];
-var _23b=dl.nameAnonFunc(args[2],ao.adviceObj,_238);
-ao.adviceFunc=_23b;
+var _233=dl.nameAnonFunc(args[2],ao.adviceObj,_230);
+ao.adviceFunc=_233;
 }else{
 if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
 ao.adviceType="after";
 ao.srcObj=dj_global;
-var _23b=dl.nameAnonFunc(args[0],ao.srcObj,_238);
-ao.srcFunc=_23b;
+var _233=dl.nameAnonFunc(args[0],ao.srcObj,_230);
+ao.srcFunc=_233;
 ao.adviceObj=args[1];
 ao.adviceFunc=args[2];
 }
@@ -28079,17 +20207,17 @@
 if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
 ao.adviceType=args[0];
 ao.srcObj=dj_global;
-var _23b=dl.nameAnonFunc(args[1],dj_global,_238);
-ao.srcFunc=_23b;
+var _233=dl.nameAnonFunc(args[1],dj_global,_230);
+ao.srcFunc=_233;
 ao.adviceObj=args[2];
 ao.adviceFunc=args[3];
 }else{
 if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
 ao.srcObj=args[1];
 ao.srcFunc=args[2];
-var _23b=dl.nameAnonFunc(args[3],dj_global,_238);
+var _233=dl.nameAnonFunc(args[3],dj_global,_230);
 ao.adviceObj=dj_global;
-ao.adviceFunc=_23b;
+ao.adviceFunc=_233;
 }else{
 if(dl.isObject(args[1])){
 ao.srcObj=args[1];
@@ -28133,11 +20261,12 @@
 ao.delay=args[8];
 ao.rate=args[9];
 ao.adviceMsg=args[10];
+ao.maxCalls=(!isNaN(parseInt(args[11])))?args[11]:-1;
 break;
 }
 if(dl.isFunction(ao.aroundFunc)){
-var _23b=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_238);
-ao.aroundFunc=_23b;
+var _233=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_230);
+ao.aroundFunc=_233;
 }
 if(dl.isFunction(ao.srcFunc)){
 ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc);
@@ -28166,25 +20295,18 @@
 }else{
 var ao=interpolateArgs(arguments,true);
 }
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.connect(ao);
-}
-ao.srcFunc="onkeypress";
-}
 if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){
-var _23d={};
+var _235={};
 for(var x in ao){
-_23d[x]=ao[x];
+_235[x]=ao[x];
 }
 var mjps=[];
 dojo.lang.forEach(ao.srcObj,function(src){
 if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
 src=dojo.byId(src);
 }
-_23d.srcObj=src;
-mjps.push(dojo.event.connect.call(dojo.event,_23d));
+_235.srcObj=src;
+mjps.push(dojo.event.connect.call(dojo.event,_235));
 });
 return mjps;
 }
@@ -28196,20 +20318,20 @@
 return mjp;
 };
 this.log=function(a1,a2){
-var _245;
+var _23d;
 if((arguments.length==1)&&(typeof a1=="object")){
-_245=a1;
+_23d=a1;
 }else{
-_245={srcObj:a1,srcFunc:a2};
+_23d={srcObj:a1,srcFunc:a2};
 }
-_245.adviceFunc=function(){
-var _246=[];
+_23d.adviceFunc=function(){
+var _23e=[];
 for(var x=0;x<arguments.length;x++){
-_246.push(arguments[x]);
+_23e.push(arguments[x]);
 }
-dojo.debug("("+_245.srcObj+")."+_245.srcFunc,":",_246.join(", "));
+dojo.debug("("+_23d.srcObj+")."+_23d.srcFunc,":",_23e.join(", "));
 };
-this.kwConnect(_245);
+this.kwConnect(_23d);
 };
 this.connectBefore=function(){
 var args=["before"];
@@ -28230,25 +20352,30 @@
 ao.once=true;
 return this.connect(ao);
 };
-this._kwConnectImpl=function(_24d,_24e){
-var fn=(_24e)?"disconnect":"connect";
-if(typeof _24d["srcFunc"]=="function"){
-_24d.srcObj=_24d["srcObj"]||dj_global;
-var _250=dojo.lang.nameAnonFunc(_24d.srcFunc,_24d.srcObj,true);
-_24d.srcFunc=_250;
+this.connectRunOnce=function(){
+var ao=interpolateArgs(arguments,true);
+ao.maxCalls=1;
+return this.connect(ao);
+};
+this._kwConnectImpl=function(_246,_247){
+var fn=(_247)?"disconnect":"connect";
+if(typeof _246["srcFunc"]=="function"){
+_246.srcObj=_246["srcObj"]||dj_global;
+var _249=dojo.lang.nameAnonFunc(_246.srcFunc,_246.srcObj,true);
+_246.srcFunc=_249;
 }
-if(typeof _24d["adviceFunc"]=="function"){
-_24d.adviceObj=_24d["adviceObj"]||dj_global;
-var _250=dojo.lang.nameAnonFunc(_24d.adviceFunc,_24d.adviceObj,true);
-_24d.adviceFunc=_250;
+if(typeof _246["adviceFunc"]=="function"){
+_246.adviceObj=_246["adviceObj"]||dj_global;
+var _249=dojo.lang.nameAnonFunc(_246.adviceFunc,_246.adviceObj,true);
+_246.adviceFunc=_249;
 }
-_24d.srcObj=_24d["srcObj"]||dj_global;
-_24d.adviceObj=_24d["adviceObj"]||_24d["targetObj"]||dj_global;
-_24d.adviceFunc=_24d["adviceFunc"]||_24d["targetFunc"];
-return dojo.event[fn](_24d);
+_246.srcObj=_246["srcObj"]||dj_global;
+_246.adviceObj=_246["adviceObj"]||_246["targetObj"]||dj_global;
+_246.adviceFunc=_246["adviceFunc"]||_246["targetFunc"];
+return dojo.event[fn](_246);
 };
-this.kwConnect=function(_251){
-return this._kwConnectImpl(_251,false);
+this.kwConnect=function(_24a){
+return this._kwConnectImpl(_24a,false);
 };
 this.disconnect=function(){
 if(arguments.length==1){
@@ -28273,12 +20400,12 @@
 mjp.removeAdvice(ao.adviceObj,ao.adviceFunc,ao.adviceType,ao.once);
 return mjp;
 };
-this.kwDisconnect=function(_254){
-return this._kwConnectImpl(_254,true);
+this.kwDisconnect=function(_24d){
+return this._kwConnectImpl(_24d,true);
 };
 };
-dojo.event.MethodInvocation=function(_255,obj,args){
-this.jp_=_255;
+dojo.event.MethodInvocation=function(_24e,obj,args){
+this.jp_=_24e;
 this.object=obj;
 this.args=[];
 for(var x=0;x<args.length;x++){
@@ -28297,44 +20424,50 @@
 return mobj[meth].call(mobj,this);
 }
 };
-dojo.event.MethodJoinPoint=function(obj,_25d){
+dojo.event.MethodJoinPoint=function(obj,_256){
 this.object=obj||dj_global;
-this.methodname=_25d;
-this.methodfunc=this.object[_25d];
+this.methodname=_256;
+this.methodfunc=this.object[_256];
 this.squelch=false;
 };
-dojo.event.MethodJoinPoint.getForMethod=function(obj,_25f){
+dojo.event.MethodJoinPoint.getForMethod=function(obj,_258){
 if(!obj){
 obj=dj_global;
 }
-if(!obj[_25f]){
-obj[_25f]=function(){
+var ofn=obj[_258];
+if(!ofn){
+ofn=obj[_258]=function(){
 };
-if(!obj[_25f]){
-dojo.raise("Cannot set do-nothing method on that object "+_25f);
+if(!obj[_258]){
+dojo.raise("Cannot set do-nothing method on that object "+_258);
 }
 }else{
-if((!dojo.lang.isFunction(obj[_25f]))&&(!dojo.lang.isAlien(obj[_25f]))){
+if((typeof ofn!="function")&&(!dojo.lang.isFunction(ofn))&&(!dojo.lang.isAlien(ofn))){
 return null;
 }
 }
-var _260=_25f+"$joinpoint";
-var _261=_25f+"$joinpoint$method";
-var _262=obj[_260];
-if(!_262){
-var _263=false;
+var _25a=_258+"$joinpoint";
+var _25b=_258+"$joinpoint$method";
+var _25c=obj[_25a];
+if(!_25c){
+var _25d=false;
 if(dojo.event["browser"]){
 if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){
-_263=true;
-dojo.event.browser.addClobberNodeAttrs(obj,[_260,_261,_25f]);
+_25d=true;
+dojo.event.browser.addClobberNodeAttrs(obj,[_25a,_25b,_258]);
 }
 }
-var _264=obj[_25f].length;
-obj[_261]=obj[_25f];
-_262=obj[_260]=new dojo.event.MethodJoinPoint(obj,_261);
-obj[_25f]=function(){
+var _25e=ofn.length;
+obj[_25b]=ofn;
+_25c=obj[_25a]=new dojo.event.MethodJoinPoint(obj,_25b);
+if(!_25d){
+obj[_258]=function(){
+return _25c.run.apply(_25c,arguments);
+};
+}else{
+obj[_258]=function(){
 var args=[];
-if((_263)&&(!arguments.length)){
+if(!arguments.length){
 var evt=null;
 try{
 if(obj.ownerDocument){
@@ -28359,20 +20492,21 @@
 }
 }else{
 for(var x=0;x<arguments.length;x++){
-if((x==0)&&(_263)&&(dojo.event.browser.isEvent(arguments[x]))){
+if((x==0)&&(dojo.event.browser.isEvent(arguments[x]))){
 args.push(dojo.event.browser.fixEvent(arguments[x],this));
 }else{
 args.push(arguments[x]);
 }
 }
 }
-return _262.run.apply(_262,args);
+return _25c.run.apply(_25c,args);
 };
-obj[_25f].__preJoinArity=_264;
 }
-return _262;
+obj[_258].__preJoinArity=_25e;
+}
+return _25c;
 };
-dojo.lang.extend(dojo.event.MethodJoinPoint,{unintercept:function(){
+dojo.lang.extend(dojo.event.MethodJoinPoint,{squelch:false,unintercept:function(){
 this.object[this.methodname]=this.methodfunc;
 this.before=[];
 this.after=[];
@@ -28380,34 +20514,41 @@
 },disconnect:dojo.lang.forward("unintercept"),run:function(){
 var obj=this.object||dj_global;
 var args=arguments;
-var _26a=[];
+var _264=[];
 for(var x=0;x<args.length;x++){
-_26a[x]=args[x];
+_264[x]=args[x];
 }
-var _26c=function(marr){
+var _266=function(marr){
 if(!marr){
 dojo.debug("Null argument to unrollAdvice()");
 return;
 }
-var _26e=marr[0]||dj_global;
-var _26f=marr[1];
-if(!_26e[_26f]){
-dojo.raise("function \""+_26f+"\" does not exist on \""+_26e+"\"");
+var _268=marr[0]||dj_global;
+var _269=marr[1];
+if(!_268[_269]){
+dojo.raise("function \""+_269+"\" does not exist on \""+_268+"\"");
 }
-var _270=marr[2]||dj_global;
-var _271=marr[3];
+var _26a=marr[2]||dj_global;
+var _26b=marr[3];
 var msg=marr[6];
-var _273;
+var _26d=marr[7];
+if(_26d>-1){
+if(_26d==0){
+return;
+}
+marr[7]--;
+}
+var _26e;
 var to={args:[],jp_:this,object:obj,proceed:function(){
-return _26e[_26f].apply(_26e,to.args);
+return _268[_269].apply(_268,to.args);
 }};
-to.args=_26a;
-var _275=parseInt(marr[4]);
-var _276=((!isNaN(_275))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
+to.args=_264;
+var _270=parseInt(marr[4]);
+var _271=((!isNaN(_270))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
 if(marr[5]){
 var rate=parseInt(marr[5]);
 var cur=new Date();
-var _279=false;
+var _274=false;
 if((marr["last"])&&((cur-marr.last)<=rate)){
 if(dojo.event._canTimeout){
 if(marr["delayTimer"]){
@@ -28417,7 +20558,7 @@
 var mcpy=dojo.lang.shallowCopy(marr);
 marr.delayTimer=setTimeout(function(){
 mcpy[5]=0;
-_26c(mcpy);
+_266(mcpy);
 },tod);
 }
 return;
@@ -28425,49 +20566,49 @@
 marr.last=cur;
 }
 }
-if(_271){
-_270[_271].call(_270,to);
+if(_26b){
+_26a[_26b].call(_26a,to);
 }else{
-if((_276)&&((dojo.render.html)||(dojo.render.svg))){
+if((_271)&&((dojo.render.html)||(dojo.render.svg))){
 dj_global["setTimeout"](function(){
 if(msg){
-_26e[_26f].call(_26e,to);
+_268[_269].call(_268,to);
 }else{
-_26e[_26f].apply(_26e,args);
+_268[_269].apply(_268,args);
 }
-},_275);
+},_270);
 }else{
 if(msg){
-_26e[_26f].call(_26e,to);
+_268[_269].call(_268,to);
 }else{
-_26e[_26f].apply(_26e,args);
+_268[_269].apply(_268,args);
 }
 }
 }
 };
-var _27c=function(){
+var _277=function(){
 if(this.squelch){
 try{
-return _26c.apply(this,arguments);
+return _266.apply(this,arguments);
 }
 catch(e){
 dojo.debug(e);
 }
 }else{
-return _26c.apply(this,arguments);
+return _266.apply(this,arguments);
 }
 };
 if((this["before"])&&(this.before.length>0)){
-dojo.lang.forEach(this.before.concat(new Array()),_27c);
+dojo.lang.forEach(this.before.concat(new Array()),_277);
 }
-var _27d;
+var _278;
 try{
 if((this["around"])&&(this.around.length>0)){
 var mi=new dojo.event.MethodInvocation(this,obj,args);
-_27d=mi.proceed();
+_278=mi.proceed();
 }else{
 if(this.methodfunc){
-_27d=this.object[this.methodname].apply(this.object,args);
+_278=this.object[this.methodname].apply(this.object,args);
 }
 }
 }
@@ -28478,9 +20619,9 @@
 }
 }
 if((this["after"])&&(this.after.length>0)){
-dojo.lang.forEach(this.after.concat(new Array()),_27c);
+dojo.lang.forEach(this.after.concat(new Array()),_277);
 }
-return (this.methodfunc)?_27d:null;
+return (this.methodfunc)?_278:null;
 },getArr:function(kind){
 var type="after";
 if((typeof kind=="string")&&(kind.indexOf("before")!=-1)){
@@ -28495,39 +20636,39 @@
 }
 return this[type];
 },kwAddAdvice:function(args){
-this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"]);
-},addAdvice:function(_282,_283,_284,_285,_286,_287,once,_289,rate,_28b){
-var arr=this.getArr(_286);
+this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"],args["maxCalls"]);
+},addAdvice:function(_27d,_27e,_27f,_280,_281,_282,once,_284,rate,_286,_287){
+var arr=this.getArr(_281);
 if(!arr){
 dojo.raise("bad this: "+this);
 }
-var ao=[_282,_283,_284,_285,_289,rate,_28b];
+var ao=[_27d,_27e,_27f,_280,_284,rate,_286,_287];
 if(once){
-if(this.hasAdvice(_282,_283,_286,arr)>=0){
+if(this.hasAdvice(_27d,_27e,_281,arr)>=0){
 return;
 }
 }
-if(_287=="first"){
+if(_282=="first"){
 arr.unshift(ao);
 }else{
 arr.push(ao);
 }
-},hasAdvice:function(_28e,_28f,_290,arr){
+},hasAdvice:function(_28a,_28b,_28c,arr){
 if(!arr){
-arr=this.getArr(_290);
+arr=this.getArr(_28c);
 }
 var ind=-1;
 for(var x=0;x<arr.length;x++){
-var aao=(typeof _28f=="object")?(new String(_28f)).toString():_28f;
+var aao=(typeof _28b=="object")?(new String(_28b)).toString():_28b;
 var a1o=(typeof arr[x][1]=="object")?(new String(arr[x][1])).toString():arr[x][1];
-if((arr[x][0]==_28e)&&(a1o==aao)){
+if((arr[x][0]==_28a)&&(a1o==aao)){
 ind=x;
 }
 }
 return ind;
-},removeAdvice:function(_296,_297,_298,once){
-var arr=this.getArr(_298);
-var ind=this.hasAdvice(_296,_297,_298,arr);
+},removeAdvice:function(_292,_293,_294,once){
+var arr=this.getArr(_294);
+var ind=this.hasAdvice(_292,_293,_294,arr);
 if(ind==-1){
 return false;
 }
@@ -28536,73 +20677,73 @@
 if(once){
 break;
 }
-ind=this.hasAdvice(_296,_297,_298,arr);
+ind=this.hasAdvice(_292,_293,_294,arr);
 }
 return true;
 }});
 dojo.provide("dojo.event.topic");
 dojo.event.topic=new function(){
 this.topics={};
-this.getTopic=function(_29c){
-if(!this.topics[_29c]){
-this.topics[_29c]=new this.TopicImpl(_29c);
+this.getTopic=function(_298){
+if(!this.topics[_298]){
+this.topics[_298]=new this.TopicImpl(_298);
 }
-return this.topics[_29c];
+return this.topics[_298];
 };
-this.registerPublisher=function(_29d,obj,_29f){
-var _29d=this.getTopic(_29d);
-_29d.registerPublisher(obj,_29f);
+this.registerPublisher=function(_299,obj,_29b){
+var _299=this.getTopic(_299);
+_299.registerPublisher(obj,_29b);
 };
-this.subscribe=function(_2a0,obj,_2a2){
-var _2a0=this.getTopic(_2a0);
-_2a0.subscribe(obj,_2a2);
+this.subscribe=function(_29c,obj,_29e){
+var _29c=this.getTopic(_29c);
+_29c.subscribe(obj,_29e);
 };
-this.unsubscribe=function(_2a3,obj,_2a5){
-var _2a3=this.getTopic(_2a3);
-_2a3.unsubscribe(obj,_2a5);
+this.unsubscribe=function(_29f,obj,_2a1){
+var _29f=this.getTopic(_29f);
+_29f.unsubscribe(obj,_2a1);
 };
-this.destroy=function(_2a6){
-this.getTopic(_2a6).destroy();
-delete this.topics[_2a6];
+this.destroy=function(_2a2){
+this.getTopic(_2a2).destroy();
+delete this.topics[_2a2];
 };
-this.publishApply=function(_2a7,args){
-var _2a7=this.getTopic(_2a7);
-_2a7.sendMessage.apply(_2a7,args);
+this.publishApply=function(_2a3,args){
+var _2a3=this.getTopic(_2a3);
+_2a3.sendMessage.apply(_2a3,args);
 };
-this.publish=function(_2a9,_2aa){
-var _2a9=this.getTopic(_2a9);
+this.publish=function(_2a5,_2a6){
+var _2a5=this.getTopic(_2a5);
 var args=[];
 for(var x=1;x<arguments.length;x++){
 args.push(arguments[x]);
 }
-_2a9.sendMessage.apply(_2a9,args);
+_2a5.sendMessage.apply(_2a5,args);
 };
 };
-dojo.event.topic.TopicImpl=function(_2ad){
-this.topicName=_2ad;
-this.subscribe=function(_2ae,_2af){
-var tf=_2af||_2ae;
-var to=(!_2af)?dj_global:_2ae;
+dojo.event.topic.TopicImpl=function(_2a9){
+this.topicName=_2a9;
+this.subscribe=function(_2aa,_2ab){
+var tf=_2ab||_2aa;
+var to=(!_2ab)?dj_global:_2aa;
 return dojo.event.kwConnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
-this.unsubscribe=function(_2b2,_2b3){
-var tf=(!_2b3)?_2b2:_2b3;
-var to=(!_2b3)?null:_2b2;
+this.unsubscribe=function(_2ae,_2af){
+var tf=(!_2af)?_2ae:_2af;
+var to=(!_2af)?null:_2ae;
 return dojo.event.kwDisconnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
 this._getJoinPoint=function(){
 return dojo.event.MethodJoinPoint.getForMethod(this,"sendMessage");
 };
-this.setSquelch=function(_2b6){
-this._getJoinPoint().squelch=_2b6;
+this.setSquelch=function(_2b2){
+this._getJoinPoint().squelch=_2b2;
 };
 this.destroy=function(){
 this._getJoinPoint().disconnect();
 };
-this.registerPublisher=function(_2b7,_2b8){
-dojo.event.connect(_2b7,_2b8,this,"sendMessage");
+this.registerPublisher=function(_2b3,_2b4){
+dojo.event.connect(_2b3,_2b4,this,"sendMessage");
 };
-this.sendMessage=function(_2b9){
+this.sendMessage=function(_2b5){
 };
 };
 dojo.provide("dojo.event.browser");
@@ -28625,12 +20766,12 @@
 catch(e){
 }
 }
-this.clobber=function(_2bc){
+this.clobber=function(_2b8){
 var na;
 var tna;
-if(_2bc){
-tna=_2bc.all||_2bc.getElementsByTagName("*");
-na=[_2bc];
+if(_2b8){
+tna=_2b8.all||_2b8.getElementsByTagName("*");
+na=[_2b8];
 for(var x=0;x<tna.length;x++){
 if(tna[x]["__doClobber__"]){
 na.push(tna[x]);
@@ -28645,7 +20786,7 @@
 na=(this.clobberNodes.length)?this.clobberNodes:document.all;
 }
 tna=null;
-var _2c0={};
+var _2bc={};
 for(var i=na.length-1;i>=0;i=i-1){
 var el=na[i];
 try{
@@ -28696,9 +20837,9 @@
 });
 }
 dojo.event.browser=new function(){
-var _2c5=0;
-this.normalizedEventName=function(_2c6){
-switch(_2c6){
+var _2c1=0;
+this.normalizedEventName=function(_2c2){
+switch(_2c2){
 case "CheckboxStateChange":
 case "DOMAttrModified":
 case "DOMMenuItemActive":
@@ -28707,10 +20848,11 @@
 case "DOMNodeInserted":
 case "DOMNodeRemoved":
 case "RadioStateChange":
-return _2c6;
+return _2c2;
 break;
 default:
-return _2c6.toLowerCase();
+var lcn=_2c2.toLowerCase();
+return (lcn.indexOf("on")==0)?lcn.substr(2):lcn;
 break;
 }
 };
@@ -28729,93 +20871,88 @@
 node.__clobberAttrs__=[];
 }
 };
-this.addClobberNodeAttrs=function(node,_2ca){
+this.addClobberNodeAttrs=function(node,_2c7){
 if(!dojo.render.html.ie){
 return;
 }
 this.addClobberNode(node);
-for(var x=0;x<_2ca.length;x++){
-node.__clobberAttrs__.push(_2ca[x]);
+for(var x=0;x<_2c7.length;x++){
+node.__clobberAttrs__.push(_2c7[x]);
 }
 };
-this.removeListener=function(node,_2cd,fp,_2cf){
-if(!_2cf){
-var _2cf=false;
+this.removeListener=function(node,_2ca,fp,_2cc){
+if(!_2cc){
+var _2cc=false;
 }
-_2cd=dojo.event.browser.normalizedEventName(_2cd);
-if((_2cd=="onkey")||(_2cd=="key")){
+_2ca=dojo.event.browser.normalizedEventName(_2ca);
+if(_2ca=="key"){
 if(dojo.render.html.ie){
-this.removeListener(node,"onkeydown",fp,_2cf);
+this.removeListener(node,"onkeydown",fp,_2cc);
 }
-_2cd="onkeypress";
+_2ca="keypress";
 }
-if(_2cd.substr(0,2)=="on"){
-_2cd=_2cd.substr(2);
-}
 if(node.removeEventListener){
-node.removeEventListener(_2cd,fp,_2cf);
+node.removeEventListener(_2ca,fp,_2cc);
 }
 };
-this.addListener=function(node,_2d1,fp,_2d3,_2d4){
+this.addListener=function(node,_2ce,fp,_2d0,_2d1){
 if(!node){
 return;
 }
-if(!_2d3){
-var _2d3=false;
+if(!_2d0){
+var _2d0=false;
 }
-_2d1=dojo.event.browser.normalizedEventName(_2d1);
-if((_2d1=="onkey")||(_2d1=="key")){
+_2ce=dojo.event.browser.normalizedEventName(_2ce);
+if(_2ce=="key"){
 if(dojo.render.html.ie){
-this.addListener(node,"onkeydown",fp,_2d3,_2d4);
+this.addListener(node,"onkeydown",fp,_2d0,_2d1);
 }
-_2d1="onkeypress";
+_2ce="keypress";
 }
-if(_2d1.substr(0,2)!="on"){
-_2d1="on"+_2d1;
-}
-if(!_2d4){
-var _2d5=function(evt){
+if(!_2d1){
+var _2d2=function(evt){
 if(!evt){
 evt=window.event;
 }
 var ret=fp(dojo.event.browser.fixEvent(evt,this));
-if(_2d3){
+if(_2d0){
 dojo.event.browser.stopEvent(evt);
 }
 return ret;
 };
 }else{
-_2d5=fp;
+_2d2=fp;
 }
 if(node.addEventListener){
-node.addEventListener(_2d1.substr(2),_2d5,_2d3);
-return _2d5;
+node.addEventListener(_2ce,_2d2,_2d0);
+return _2d2;
 }else{
-if(typeof node[_2d1]=="function"){
-var _2d8=node[_2d1];
-node[_2d1]=function(e){
-_2d8(e);
-return _2d5(e);
+_2ce="on"+_2ce;
+if(typeof node[_2ce]=="function"){
+var _2d5=node[_2ce];
+node[_2ce]=function(e){
+_2d5(e);
+return _2d2(e);
 };
 }else{
-node[_2d1]=_2d5;
+node[_2ce]=_2d2;
 }
 if(dojo.render.html.ie){
-this.addClobberNodeAttrs(node,[_2d1]);
+this.addClobberNodeAttrs(node,[_2ce]);
 }
-return _2d5;
+return _2d2;
 }
 };
 this.isEvent=function(obj){
 return (typeof obj!="undefined")&&(obj)&&(typeof Event!="undefined")&&(obj.eventPhase);
 };
 this.currentEvent=null;
-this.callListener=function(_2db,_2dc){
-if(typeof _2db!="function"){
-dojo.raise("listener not a function: "+_2db);
+this.callListener=function(_2d8,_2d9){
+if(typeof _2d8!="function"){
+dojo.raise("listener not a function: "+_2d8);
 }
-dojo.event.browser.currentEvent.currentTarget=_2dc;
-return _2db.call(_2dc,dojo.event.browser.currentEvent);
+dojo.event.browser.currentEvent.currentTarget=_2d9;
+return _2d8.call(_2d9,dojo.event.browser.currentEvent);
 };
 this._stopPropagation=function(){
 dojo.event.browser.currentEvent.cancelBubble=true;
@@ -28828,7 +20965,7 @@
 for(var key in this.keys){
 this.revKeys[this.keys[key]]=key;
 }
-this.fixEvent=function(evt,_2df){
+this.fixEvent=function(evt,_2dc){
 if(!evt){
 if(window["event"]){
 evt=window.event;
@@ -28905,14 +21042,14 @@
 break;
 default:
 if(evt.ctrlKey||evt.altKey){
-var _2e1=evt.keyCode;
-if(_2e1>=65&&_2e1<=90&&evt.shiftKey==false){
-_2e1+=32;
+var _2de=evt.keyCode;
+if(_2de>=65&&_2de<=90&&evt.shiftKey==false){
+_2de+=32;
 }
-if(_2e1>=1&&_2e1<=26&&evt.ctrlKey){
-_2e1+=96;
+if(_2de>=1&&_2de<=26&&evt.ctrlKey){
+_2de+=96;
 }
-evt.key=String.fromCharCode(_2e1);
+evt.key=String.fromCharCode(_2de);
 }
 }
 }else{
@@ -28938,11 +21075,11 @@
 evt.key=evt.which;
 break;
 default:
-var _2e1=evt.which;
+var _2de=evt.which;
 if((evt.ctrlKey||evt.altKey||evt.metaKey)&&(evt.which>=65&&evt.which<=90&&evt.shiftKey==false)){
-_2e1+=32;
+_2de+=32;
 }
-evt.key=String.fromCharCode(_2e1);
+evt.key=String.fromCharCode(_2de);
 }
 }
 }
@@ -29047,7 +21184,7 @@
 evt.target=evt.srcElement;
 }
 if(!evt.currentTarget){
-evt.currentTarget=(_2df?_2df:evt.srcElement);
+evt.currentTarget=(_2dc?_2dc:evt.srcElement);
 }
 if(!evt.layerX){
 evt.layerX=evt.offsetX;
@@ -29056,12 +21193,12 @@
 evt.layerY=evt.offsetY;
 }
 var doc=(evt.srcElement&&evt.srcElement.ownerDocument)?evt.srcElement.ownerDocument:document;
-var _2e3=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
+var _2e0=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
 if(!evt.pageX){
-evt.pageX=evt.clientX+(_2e3.scrollLeft||0);
+evt.pageX=evt.clientX+(_2e0.scrollLeft||0);
 }
 if(!evt.pageY){
-evt.pageY=evt.clientY+(_2e3.scrollTop||0);
+evt.pageY=evt.clientY+(_2e0.scrollTop||0);
 }
 if(evt.type=="mouseover"){
 evt.relatedTarget=evt.fromElement;
@@ -29086,41 +21223,42 @@
 }
 };
 };
+dojo.kwCompoundRequire({common:["dojo.event.common","dojo.event.topic"],browser:["dojo.event.browser"],dashboard:["dojo.event.browser"]});
 dojo.provide("dojo.event.*");
 dojo.provide("dojo.widget.Manager");
 dojo.widget.manager=new function(){
 this.widgets=[];
 this.widgetIds=[];
 this.topWidgets={};
-var _2e5={};
-var _2e6=[];
-this.getUniqueId=function(_2e7){
-var _2e8;
+var _2e2={};
+var _2e3=[];
+this.getUniqueId=function(_2e4){
+var _2e5;
 do{
-_2e8=_2e7+"_"+(_2e5[_2e7]!=undefined?++_2e5[_2e7]:_2e5[_2e7]=0);
-}while(this.getWidgetById(_2e8));
-return _2e8;
+_2e5=_2e4+"_"+(_2e2[_2e4]!=undefined?++_2e2[_2e4]:_2e2[_2e4]=0);
+}while(this.getWidgetById(_2e5));
+return _2e5;
 };
-this.add=function(_2e9){
-this.widgets.push(_2e9);
-if(!_2e9.extraArgs["id"]){
-_2e9.extraArgs["id"]=_2e9.extraArgs["ID"];
+this.add=function(_2e6){
+this.widgets.push(_2e6);
+if(!_2e6.extraArgs["id"]){
+_2e6.extraArgs["id"]=_2e6.extraArgs["ID"];
 }
-if(_2e9.widgetId==""){
-if(_2e9["id"]){
-_2e9.widgetId=_2e9["id"];
+if(_2e6.widgetId==""){
+if(_2e6["id"]){
+_2e6.widgetId=_2e6["id"];
 }else{
-if(_2e9.extraArgs["id"]){
-_2e9.widgetId=_2e9.extraArgs["id"];
+if(_2e6.extraArgs["id"]){
+_2e6.widgetId=_2e6.extraArgs["id"];
 }else{
-_2e9.widgetId=this.getUniqueId(_2e9.ns+"_"+_2e9.widgetType);
+_2e6.widgetId=this.getUniqueId(_2e6.ns+"_"+_2e6.widgetType);
 }
 }
 }
-if(this.widgetIds[_2e9.widgetId]){
-dojo.debug("widget ID collision on ID: "+_2e9.widgetId);
+if(this.widgetIds[_2e6.widgetId]){
+dojo.debug("widget ID collision on ID: "+_2e6.widgetId);
 }
-this.widgetIds[_2e9.widgetId]=_2e9;
+this.widgetIds[_2e6.widgetId]=_2e6;
 };
 this.destroyAll=function(){
 for(var x=this.widgets.length-1;x>=0;x--){
@@ -29132,13 +21270,14 @@
 }
 }
 };
-this.remove=function(_2eb){
-if(dojo.lang.isNumber(_2eb)){
-var tw=this.widgets[_2eb].widgetId;
+this.remove=function(_2e8){
+if(dojo.lang.isNumber(_2e8)){
+var tw=this.widgets[_2e8].widgetId;
+delete this.topWidgets[tw];
 delete this.widgetIds[tw];
-this.widgets.splice(_2eb,1);
+this.widgets.splice(_2e8,1);
 }else{
-this.removeById(_2eb);
+this.removeById(_2e8);
 }
 };
 this.removeById=function(id){
@@ -29164,31 +21303,31 @@
 };
 this.getWidgetsByType=function(type){
 var lt=type.toLowerCase();
-var _2f2=(type.indexOf(":")<0?function(x){
+var _2ef=(type.indexOf(":")<0?function(x){
 return x.widgetType.toLowerCase();
 }:function(x){
 return x.getNamespacedType();
 });
 var ret=[];
 dojo.lang.forEach(this.widgets,function(x){
-if(_2f2(x)==lt){
+if(_2ef(x)==lt){
 ret.push(x);
 }
 });
 return ret;
 };
-this.getWidgetsByFilter=function(_2f7,_2f8){
+this.getWidgetsByFilter=function(_2f4,_2f5){
 var ret=[];
 dojo.lang.every(this.widgets,function(x){
-if(_2f7(x)){
+if(_2f4(x)){
 ret.push(x);
-if(_2f8){
+if(_2f5){
 return false;
 }
 }
 return true;
 });
-return (_2f8?ret[0]:ret);
+return (_2f5?ret[0]:ret);
 };
 this.getAllWidgets=function(){
 return this.widgets.concat();
@@ -29207,99 +21346,99 @@
 this.byType=this.getWidgetsByType;
 this.byFilter=this.getWidgetsByFilter;
 this.byNode=this.getWidgetByNode;
-var _2fe={};
-var _2ff=["dojo.widget"];
-for(var i=0;i<_2ff.length;i++){
-_2ff[_2ff[i]]=true;
+var _2fb={};
+var _2fc=["dojo.widget"];
+for(var i=0;i<_2fc.length;i++){
+_2fc[_2fc[i]]=true;
 }
-this.registerWidgetPackage=function(_301){
-if(!_2ff[_301]){
-_2ff[_301]=true;
-_2ff.push(_301);
+this.registerWidgetPackage=function(_2fe){
+if(!_2fc[_2fe]){
+_2fc[_2fe]=true;
+_2fc.push(_2fe);
 }
 };
 this.getWidgetPackageList=function(){
-return dojo.lang.map(_2ff,function(elt){
+return dojo.lang.map(_2fc,function(elt){
 return (elt!==true?elt:undefined);
 });
 };
-this.getImplementation=function(_303,_304,_305,ns){
-var impl=this.getImplementationName(_303,ns);
+this.getImplementation=function(_300,_301,_302,ns){
+var impl=this.getImplementationName(_300,ns);
 if(impl){
-var ret=_304?new impl(_304):new impl();
+var ret=_301?new impl(_301):new impl();
 return ret;
 }
 };
 function buildPrefixCache(){
-for(var _309 in dojo.render){
-if(dojo.render[_309]["capable"]===true){
-var _30a=dojo.render[_309].prefixes;
-for(var i=0;i<_30a.length;i++){
-_2e6.push(_30a[i].toLowerCase());
+for(var _306 in dojo.render){
+if(dojo.render[_306]["capable"]===true){
+var _307=dojo.render[_306].prefixes;
+for(var i=0;i<_307.length;i++){
+_2e3.push(_307[i].toLowerCase());
 }
 }
 }
 }
-var _30c=function(_30d,_30e){
-if(!_30e){
+var _309=function(_30a,_30b){
+if(!_30b){
 return null;
 }
-for(var i=0,l=_2e6.length,_311;i<=l;i++){
-_311=(i<l?_30e[_2e6[i]]:_30e);
-if(!_311){
+for(var i=0,l=_2e3.length,_30e;i<=l;i++){
+_30e=(i<l?_30b[_2e3[i]]:_30b);
+if(!_30e){
 continue;
 }
-for(var name in _311){
-if(name.toLowerCase()==_30d){
-return _311[name];
+for(var name in _30e){
+if(name.toLowerCase()==_30a){
+return _30e[name];
 }
 }
 }
 return null;
 };
-var _313=function(_314,_315){
-var _316=dojo.evalObjPath(_315,false);
-return (_316?_30c(_314,_316):null);
+var _310=function(_311,_312){
+var _313=dojo.evalObjPath(_312,false);
+return (_313?_309(_311,_313):null);
 };
-this.getImplementationName=function(_317,ns){
-var _319=_317.toLowerCase();
+this.getImplementationName=function(_314,ns){
+var _316=_314.toLowerCase();
 ns=ns||"dojo";
-var imps=_2fe[ns]||(_2fe[ns]={});
-var impl=imps[_319];
+var imps=_2fb[ns]||(_2fb[ns]={});
+var impl=imps[_316];
 if(impl){
 return impl;
 }
-if(!_2e6.length){
+if(!_2e3.length){
 buildPrefixCache();
 }
-var _31c=dojo.ns.get(ns);
-if(!_31c){
+var _319=dojo.ns.get(ns);
+if(!_319){
 dojo.ns.register(ns,ns+".widget");
-_31c=dojo.ns.get(ns);
+_319=dojo.ns.get(ns);
 }
-if(_31c){
-_31c.resolve(_317);
+if(_319){
+_319.resolve(_314);
 }
-impl=_313(_319,_31c.module);
+impl=_310(_316,_319.module);
 if(impl){
-return (imps[_319]=impl);
+return (imps[_316]=impl);
 }
-_31c=dojo.ns.require(ns);
-if((_31c)&&(_31c.resolver)){
-_31c.resolve(_317);
-impl=_313(_319,_31c.module);
+_319=dojo.ns.require(ns);
+if((_319)&&(_319.resolver)){
+_319.resolve(_314);
+impl=_310(_316,_319.module);
 if(impl){
-return (imps[_319]=impl);
+return (imps[_316]=impl);
 }
 }
-dojo.deprecated("dojo.widget.Manager.getImplementationName","Could not locate widget implementation for \""+_317+"\" in \""+_31c.module+"\" registered to namespace \""+_31c.name+"\". "+"Developers must specify correct namespaces for all non-Dojo widgets","0.5");
-for(var i=0;i<_2ff.length;i++){
-impl=_313(_319,_2ff[i]);
+dojo.deprecated("dojo.widget.Manager.getImplementationName","Could not locate widget implementation for \""+_314+"\" in \""+_319.module+"\" registered to namespace \""+_319.name+"\". "+"Developers must specify correct namespaces for all non-Dojo widgets","0.5");
+for(var i=0;i<_2fc.length;i++){
+impl=_310(_316,_2fc[i]);
 if(impl){
-return (imps[_319]=impl);
+return (imps[_316]=impl);
 }
 }
-throw new Error("Could not locate widget implementation for \""+_317+"\" in \""+_31c.module+"\" registered to namespace \""+_31c.name+"\"");
+throw new Error("Could not locate widget implementation for \""+_314+"\" in \""+_319.module+"\" registered to namespace \""+_319.name+"\"");
 };
 this.resizing=false;
 this.onWindowResized=function(){
@@ -29309,9 +21448,9 @@
 try{
 this.resizing=true;
 for(var id in this.topWidgets){
-var _31f=this.topWidgets[id];
-if(_31f.checkSize){
-_31f.checkSize();
+var _31c=this.topWidgets[id];
+if(_31c.checkSize){
+_31c.checkSize();
 }
 }
 }
@@ -29330,8 +21469,8 @@
 var dw=dojo.widget;
 var dwm=dw.manager;
 var h=dojo.lang.curry(dojo.lang,"hitch",dwm);
-var g=function(_324,_325){
-dw[(_325||_324)]=h(_324);
+var g=function(_321,_322){
+dw[(_322||_321)]=h(_321);
 };
 g("add","addWidget");
 g("destroyAll","destroyAllWidgets");
@@ -29345,11 +21484,11 @@
 g("getWidgetsByFilter","byFilter");
 g("getWidgetByNode","byNode");
 dw.all=function(n){
-var _327=dwm.getAllWidgets.apply(dwm,arguments);
+var _324=dwm.getAllWidgets.apply(dwm,arguments);
 if(arguments.length>0){
-return _327[n];
+return _324[n];
 }
-return _327;
+return _324;
 };
 g("registerWidgetPackage");
 g("getImplementation","getWidgetImplementation");
@@ -29363,15 +21502,20 @@
 this.dojoUri=function(uri){
 return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(),uri);
 };
-this.moduleUri=function(_329,uri){
-var loc=dojo.hostenv.getModuleSymbols(_329).join("/");
+this.moduleUri=function(_326,uri){
+var loc=dojo.hostenv.getModuleSymbols(_326).join("/");
 if(!loc){
 return null;
 }
 if(loc.lastIndexOf("/")!=loc.length-1){
 loc+="/";
 }
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri()+loc,uri);
+var _329=loc.indexOf(":");
+var _32a=loc.indexOf("/");
+if(loc.charAt(0)!="/"&&(_329==-1||_329>_32a)){
+loc=dojo.hostenv.getBaseScriptUri()+loc;
+}
+return new dojo.uri.Uri(loc,uri);
 };
 this.Uri=function(){
 var uri=arguments[0];
@@ -29379,20 +21523,20 @@
 if(!arguments[i]){
 continue;
 }
-var _32e=new dojo.uri.Uri(arguments[i].toString());
-var _32f=new dojo.uri.Uri(uri.toString());
-if((_32e.path=="")&&(_32e.scheme==null)&&(_32e.authority==null)&&(_32e.query==null)){
-if(_32e.fragment!=null){
-_32f.fragment=_32e.fragment;
+var _32d=new dojo.uri.Uri(arguments[i].toString());
+var _32e=new dojo.uri.Uri(uri.toString());
+if((_32d.path=="")&&(_32d.scheme==null)&&(_32d.authority==null)&&(_32d.query==null)){
+if(_32d.fragment!=null){
+_32e.fragment=_32d.fragment;
 }
-_32e=_32f;
+_32d=_32e;
 }else{
-if(_32e.scheme==null){
-_32e.scheme=_32f.scheme;
-if(_32e.authority==null){
-_32e.authority=_32f.authority;
-if(_32e.path.charAt(0)!="/"){
-var path=_32f.path.substring(0,_32f.path.lastIndexOf("/")+1)+_32e.path;
+if(_32d.scheme==null){
+_32d.scheme=_32e.scheme;
+if(_32d.authority==null){
+_32d.authority=_32e.authority;
+if(_32d.path.charAt(0)!="/"){
+var path=_32e.path.substring(0,_32e.path.lastIndexOf("/")+1)+_32d.path;
 var segs=path.split("/");
 for(var j=0;j<segs.length;j++){
 if(segs[j]=="."){
@@ -29414,37 +21558,37 @@
 }
 }
 }
-_32e.path=segs.join("/");
+_32d.path=segs.join("/");
 }
 }
 }
 }
 uri="";
-if(_32e.scheme!=null){
-uri+=_32e.scheme+":";
+if(_32d.scheme!=null){
+uri+=_32d.scheme+":";
 }
-if(_32e.authority!=null){
-uri+="//"+_32e.authority;
+if(_32d.authority!=null){
+uri+="//"+_32d.authority;
 }
-uri+=_32e.path;
-if(_32e.query!=null){
-uri+="?"+_32e.query;
+uri+=_32d.path;
+if(_32d.query!=null){
+uri+="?"+_32d.query;
 }
-if(_32e.fragment!=null){
-uri+="#"+_32e.fragment;
+if(_32d.fragment!=null){
+uri+="#"+_32d.fragment;
 }
 }
 this.uri=uri.toString();
-var _333="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
-var r=this.uri.match(new RegExp(_333));
+var _332="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
+var r=this.uri.match(new RegExp(_332));
 this.scheme=r[2]||(r[1]?"":null);
 this.authority=r[4]||(r[3]?"":null);
 this.path=r[5];
 this.query=r[7]||(r[6]?"":null);
 this.fragment=r[9]||(r[8]?"":null);
 if(this.authority!=null){
-_333="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
-r=this.authority.match(new RegExp(_333));
+_332="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
+r=this.authority.match(new RegExp(_332));
 this.user=r[3]||null;
 this.password=r[4]||null;
 this.host=r[5];
@@ -29455,6 +21599,7 @@
 };
 };
 };
+dojo.kwCompoundRequire({common:[["dojo.uri.Uri",false,false]]});
 dojo.provide("dojo.uri.*");
 dojo.provide("dojo.html.common");
 dojo.lang.mixin(dojo.html,dojo.dom);
@@ -29473,24 +21618,24 @@
 return t;
 };
 dojo.html.getViewport=function(){
-var _337=dojo.global();
-var _338=dojo.doc();
+var _336=dojo.global();
+var _337=dojo.doc();
 var w=0;
 var h=0;
 if(dojo.render.html.mozilla){
-w=_338.documentElement.clientWidth;
-h=_337.innerHeight;
+w=_337.documentElement.clientWidth;
+h=_336.innerHeight;
 }else{
-if(!dojo.render.html.opera&&_337.innerWidth){
-w=_337.innerWidth;
-h=_337.innerHeight;
+if(!dojo.render.html.opera&&_336.innerWidth){
+w=_336.innerWidth;
+h=_336.innerHeight;
 }else{
-if(!dojo.render.html.opera&&dojo.exists(_338,"documentElement.clientWidth")){
-var w2=_338.documentElement.clientWidth;
+if(!dojo.render.html.opera&&dojo.exists(_337,"documentElement.clientWidth")){
+var w2=_337.documentElement.clientWidth;
 if(!w||w2&&w2<w){
 w=w2;
 }
-h=_338.documentElement.clientHeight;
+h=_337.documentElement.clientHeight;
 }else{
 if(dojo.body().clientWidth){
 w=dojo.body().clientWidth;
@@ -29502,23 +21647,23 @@
 return {width:w,height:h};
 };
 dojo.html.getScroll=function(){
-var _33c=dojo.global();
-var _33d=dojo.doc();
-var top=_33c.pageYOffset||_33d.documentElement.scrollTop||dojo.body().scrollTop||0;
-var left=_33c.pageXOffset||_33d.documentElement.scrollLeft||dojo.body().scrollLeft||0;
+var _33b=dojo.global();
+var _33c=dojo.doc();
+var top=_33b.pageYOffset||_33c.documentElement.scrollTop||dojo.body().scrollTop||0;
+var left=_33b.pageXOffset||_33c.documentElement.scrollLeft||dojo.body().scrollLeft||0;
 return {top:top,left:left,offset:{x:left,y:top}};
 };
 dojo.html.getParentByType=function(node,type){
-var _342=dojo.doc();
-var _343=dojo.byId(node);
+var _341=dojo.doc();
+var _342=dojo.byId(node);
 type=type.toLowerCase();
-while((_343)&&(_343.nodeName.toLowerCase()!=type)){
-if(_343==(_342["body"]||_342["documentElement"])){
+while((_342)&&(_342.nodeName.toLowerCase()!=type)){
+if(_342==(_341["body"]||_341["documentElement"])){
 return null;
 }
-_343=_343.parentNode;
+_342=_342.parentNode;
 }
-return _343;
+return _342;
 };
 dojo.html.getAttribute=function(node,attr){
 node=dojo.byId(node);
@@ -29551,17 +21696,17 @@
 };
 dojo.html.getCursorPosition=function(e){
 e=e||dojo.global().event;
-var _34b={x:0,y:0};
+var _34a={x:0,y:0};
 if(e.pageX||e.pageY){
-_34b.x=e.pageX;
-_34b.y=e.pageY;
+_34a.x=e.pageX;
+_34a.y=e.pageY;
 }else{
 var de=dojo.doc().documentElement;
 var db=dojo.body();
-_34b.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
-_34b.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
+_34a.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
+_34a.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
 }
-return _34b;
+return _34a;
 };
 dojo.html.isTag=function(node){
 node=dojo.byId(node);
@@ -29577,9 +21722,9 @@
 if(dojo.render.html.ie&&!dojo.render.html.ie70){
 if(window.location.href.substr(0,6).toLowerCase()!="https:"){
 (function(){
-var _350=dojo.doc().createElement("script");
-_350.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
-dojo.doc().getElementsByTagName("head")[0].appendChild(_350);
+var _34f=dojo.doc().createElement("script");
+_34f.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
+dojo.doc().getElementsByTagName("head")[0].appendChild(_34f);
 })();
 }
 }else{
@@ -29587,20 +21732,20 @@
 return doc.createElement(tag);
 };
 }
-dojo.html._callDeprecated=function(_353,_354,args,_356,_357){
-dojo.deprecated("dojo.html."+_353,"replaced by dojo.html."+_354+"("+(_356?"node, {"+_356+": "+_356+"}":"")+")"+(_357?"."+_357:""),"0.5");
-var _358=[];
-if(_356){
-var _359={};
-_359[_356]=args[1];
-_358.push(args[0]);
-_358.push(_359);
+dojo.html._callDeprecated=function(_352,_353,args,_355,_356){
+dojo.deprecated("dojo.html."+_352,"replaced by dojo.html."+_353+"("+(_355?"node, {"+_355+": "+_355+"}":"")+")"+(_356?"."+_356:""),"0.5");
+var _357=[];
+if(_355){
+var _358={};
+_358[_355]=args[1];
+_357.push(args[0]);
+_357.push(_358);
 }else{
-_358=args;
+_357=args;
 }
-var ret=dojo.html[_354].apply(dojo.html,args);
-if(_357){
-return ret[_357];
+var ret=dojo.html[_353].apply(dojo.html,args);
+if(_356){
+return ret[_356];
 }else{
 return ret;
 }
@@ -29624,7 +21769,7 @@
 return dojo.html._callDeprecated("getScrollOffset","getScroll",arguments,null,"offset");
 };
 dojo.provide("dojo.a11y");
-dojo.a11y={imgPath:dojo.uri.dojoUri("src/widget/templates/images"),doAccessibleCheck:true,accessible:null,checkAccessible:function(){
+dojo.a11y={imgPath:dojo.uri.moduleUri("dojo.widget","templates/images"),doAccessibleCheck:true,accessible:null,checkAccessible:function(){
 if(this.accessible===null){
 this.accessible=false;
 if(this.doAccessibleCheck==true){
@@ -29638,22 +21783,22 @@
 var div=document.createElement("div");
 div.style.backgroundImage="url(\""+this.imgPath+"/tab_close.gif\")";
 dojo.body().appendChild(div);
-var _35c=null;
+var _35b=null;
 if(window.getComputedStyle){
-var _35d=getComputedStyle(div,"");
-_35c=_35d.getPropertyValue("background-image");
+var _35c=getComputedStyle(div,"");
+_35b=_35c.getPropertyValue("background-image");
 }else{
-_35c=div.currentStyle.backgroundImage;
+_35b=div.currentStyle.backgroundImage;
 }
-var _35e=false;
-if(_35c!=null&&(_35c=="none"||_35c=="url(invalid-url:)")){
+var _35d=false;
+if(_35b!=null&&(_35b=="none"||_35b=="url(invalid-url:)")){
 this.accessible=true;
 }
 dojo.body().removeChild(div);
 }
 return this.accessible;
-},setCheckAccessible:function(_35f){
-this.doAccessibleCheck=_35f;
+},setCheckAccessible:function(_35e){
+this.doAccessibleCheck=_35e;
 },setAccessibleMode:function(){
 if(this.accessible===null){
 if(this.checkAccessible()){
@@ -29680,52 +21825,52 @@
 this.notifyChildrenOfResize();
 },notifyChildrenOfResize:function(){
 for(var i=0;i<this.children.length;i++){
-var _361=this.children[i];
-if(_361.onResized){
-_361.onResized();
+var _360=this.children[i];
+if(_360.onResized){
+_360.onResized();
 }
 }
-},create:function(args,_363,_364,ns){
+},create:function(args,_362,_363,ns){
 if(ns){
 this.ns=ns;
 }
-this.satisfyPropertySets(args,_363,_364);
-this.mixInProperties(args,_363,_364);
-this.postMixInProperties(args,_363,_364);
+this.satisfyPropertySets(args,_362,_363);
+this.mixInProperties(args,_362,_363);
+this.postMixInProperties(args,_362,_363);
 dojo.widget.manager.add(this);
-this.buildRendering(args,_363,_364);
-this.initialize(args,_363,_364);
-this.postInitialize(args,_363,_364);
-this.postCreate(args,_363,_364);
+this.buildRendering(args,_362,_363);
+this.initialize(args,_362,_363);
+this.postInitialize(args,_362,_363);
+this.postCreate(args,_362,_363);
 return this;
-},destroy:function(_366){
+},destroy:function(_365){
 if(this.parent){
 this.parent.removeChild(this);
 }
 this.destroyChildren();
 this.uninitialize();
-this.destroyRendering(_366);
+this.destroyRendering(_365);
 dojo.widget.manager.removeById(this.widgetId);
 },destroyChildren:function(){
-var _367;
+var _366;
 var i=0;
 while(this.children.length>i){
-_367=this.children[i];
-if(_367 instanceof dojo.widget.Widget){
-this.removeChild(_367);
-_367.destroy();
+_366=this.children[i];
+if(_366 instanceof dojo.widget.Widget){
+this.removeChild(_366);
+_366.destroy();
 continue;
 }
 i++;
 }
-},getChildrenOfType:function(type,_36a){
+},getChildrenOfType:function(type,_369){
 var ret=[];
-var _36c=dojo.lang.isFunction(type);
-if(!_36c){
+var _36b=dojo.lang.isFunction(type);
+if(!_36b){
 type=type.toLowerCase();
 }
 for(var x=0;x<this.children.length;x++){
-if(_36c){
+if(_36b){
 if(this.children[x] instanceof type){
 ret.push(this.children[x]);
 }
@@ -29734,24 +21879,24 @@
 ret.push(this.children[x]);
 }
 }
-if(_36a){
-ret=ret.concat(this.children[x].getChildrenOfType(type,_36a));
+if(_369){
+ret=ret.concat(this.children[x].getChildrenOfType(type,_369));
 }
 }
 return ret;
 },getDescendants:function(){
-var _36e=[];
-var _36f=[this];
+var _36d=[];
+var _36e=[this];
 var elem;
-while((elem=_36f.pop())){
-_36e.push(elem);
+while((elem=_36e.pop())){
+_36d.push(elem);
 if(elem.children){
 dojo.lang.forEach(elem.children,function(elem){
-_36f.push(elem);
+_36e.push(elem);
 });
 }
 }
-return _36e;
+return _36d;
 },isFirstChild:function(){
 return this===this.parent.children[0];
 },isLastChild:function(){
@@ -29765,29 +21910,29 @@
 }
 return;
 }
-var _376;
-var _377=dojo.widget.lcArgsCache[this.widgetType];
-if(_377==null){
-_377={};
+var _375;
+var _376=dojo.widget.lcArgsCache[this.widgetType];
+if(_376==null){
+_376={};
 for(var y in this){
-_377[((new String(y)).toLowerCase())]=y;
+_376[((new String(y)).toLowerCase())]=y;
 }
-dojo.widget.lcArgsCache[this.widgetType]=_377;
+dojo.widget.lcArgsCache[this.widgetType]=_376;
 }
-var _379={};
+var _378={};
 for(var x in args){
 if(!this[x]){
-var y=_377[(new String(x)).toLowerCase()];
+var y=_376[(new String(x)).toLowerCase()];
 if(y){
 args[y]=args[x];
 x=y;
 }
 }
-if(_379[x]){
+if(_378[x]){
 continue;
 }
-_379[x]=true;
-if((typeof this[x])!=(typeof _376)){
+_378[x]=true;
+if((typeof this[x])!=(typeof _375)){
 if(typeof args[x]!="string"){
 this[x]=args[x];
 }else{
@@ -29818,11 +21963,11 @@
 if(this[x] instanceof dojo.uri.Uri){
 this[x]=dojo.uri.dojoUri(args[x]);
 }else{
-var _37b=args[x].split(";");
-for(var y=0;y<_37b.length;y++){
-var si=_37b[y].indexOf(":");
-if((si!=-1)&&(_37b[y].length>si)){
-this[x][_37b[y].substr(0,si).replace(/^\s+|\s+$/g,"")]=_37b[y].substr(si+1);
+var _37a=args[x].split(";");
+for(var y=0;y<_37a.length;y++){
+var si=_37a[y].indexOf(":");
+if((si!=-1)&&(_37a[y].length>si)){
+this[x][_37a[y].substr(0,si).replace(/^\s+|\s+$/g,"")]=_37a[y].substr(si+1);
 }
 }
 }
@@ -29840,34 +21985,34 @@
 this.extraArgs[x.toLowerCase()]=args[x];
 }
 }
-},postMixInProperties:function(args,frag,_37f){
-},initialize:function(args,frag,_382){
+},postMixInProperties:function(args,frag,_37e){
+},initialize:function(args,frag,_381){
 return false;
-},postInitialize:function(args,frag,_385){
+},postInitialize:function(args,frag,_384){
 return false;
-},postCreate:function(args,frag,_388){
+},postCreate:function(args,frag,_387){
 return false;
 },uninitialize:function(){
 return false;
-},buildRendering:function(args,frag,_38b){
+},buildRendering:function(args,frag,_38a){
 dojo.unimplemented("dojo.widget.Widget.buildRendering, on "+this.toString()+", ");
 return false;
 },destroyRendering:function(){
 dojo.unimplemented("dojo.widget.Widget.destroyRendering");
 return false;
-},addedTo:function(_38c){
-},addChild:function(_38d){
+},addedTo:function(_38b){
+},addChild:function(_38c){
 dojo.unimplemented("dojo.widget.Widget.addChild");
 return false;
-},removeChild:function(_38e){
+},removeChild:function(_38d){
 for(var x=0;x<this.children.length;x++){
-if(this.children[x]===_38e){
+if(this.children[x]===_38d){
 this.children.splice(x,1);
-_38e.parent=null;
+_38d.parent=null;
 break;
 }
 }
-return _38e;
+return _38d;
 },getPreviousSibling:function(){
 var idx=this.getParentIndex();
 if(idx<=0){
@@ -29893,30 +22038,30 @@
 dojo.widget.tags.addParseTreeHandler=function(type){
 dojo.deprecated("addParseTreeHandler",". ParseTreeHandlers are now reserved for components. Any unfiltered DojoML tag without a ParseTreeHandler is assumed to be a widget","0.5");
 };
-dojo.widget.tags["dojo:propertyset"]=function(_393,_394,_395){
-var _396=_394.parseProperties(_393["dojo:propertyset"]);
+dojo.widget.tags["dojo:propertyset"]=function(_392,_393,_394){
+var _395=_393.parseProperties(_392["dojo:propertyset"]);
 };
-dojo.widget.tags["dojo:connect"]=function(_397,_398,_399){
-var _39a=_398.parseProperties(_397["dojo:connect"]);
+dojo.widget.tags["dojo:connect"]=function(_396,_397,_398){
+var _399=_397.parseProperties(_396["dojo:connect"]);
 };
-dojo.widget.buildWidgetFromParseTree=function(type,frag,_39d,_39e,_39f,_3a0){
+dojo.widget.buildWidgetFromParseTree=function(type,frag,_39c,_39d,_39e,_39f){
 dojo.a11y.setAccessibleMode();
-var _3a1=type.split(":");
-_3a1=(_3a1.length==2)?_3a1[1]:type;
-var _3a2=_3a0||_39d.parseProperties(frag[frag["ns"]+":"+_3a1]);
-var _3a3=dojo.widget.manager.getImplementation(_3a1,null,null,frag["ns"]);
-if(!_3a3){
+var _3a0=type.split(":");
+_3a0=(_3a0.length==2)?_3a0[1]:type;
+var _3a1=_39f||_39c.parseProperties(frag[frag["ns"]+":"+_3a0]);
+var _3a2=dojo.widget.manager.getImplementation(_3a0,null,null,frag["ns"]);
+if(!_3a2){
 throw new Error("cannot find \""+type+"\" widget");
 }else{
-if(!_3a3.create){
+if(!_3a2.create){
 throw new Error("\""+type+"\" widget object has no \"create\" method and does not appear to implement *Widget");
 }
 }
-_3a2["dojoinsertionindex"]=_39f;
-var ret=_3a3.create(_3a2,frag,_39e,frag["ns"]);
+_3a1["dojoinsertionindex"]=_39e;
+var ret=_3a2.create(_3a1,frag,_39d,frag["ns"]);
 return ret;
 };
-dojo.widget.defineWidget=function(_3a5,_3a6,_3a7,init,_3a9){
+dojo.widget.defineWidget=function(_3a4,_3a5,_3a6,init,_3a8){
 if(dojo.lang.isString(arguments[3])){
 dojo.widget._defineWidget(arguments[0],arguments[3],arguments[1],arguments[4],arguments[2]);
 }else{
@@ -29936,50 +22081,50 @@
 }
 };
 dojo.widget.defineWidget.renderers="html|svg|vml";
-dojo.widget._defineWidget=function(_3ac,_3ad,_3ae,init,_3b0){
-var _3b1=_3ac.split(".");
-var type=_3b1.pop();
-var regx="\\.("+(_3ad?_3ad+"|":"")+dojo.widget.defineWidget.renderers+")\\.";
-var r=_3ac.search(new RegExp(regx));
-_3b1=(r<0?_3b1.join("."):_3ac.substr(0,r));
-dojo.widget.manager.registerWidgetPackage(_3b1);
-var pos=_3b1.indexOf(".");
-var _3b6=(pos>-1)?_3b1.substring(0,pos):_3b1;
-_3b0=(_3b0)||{};
-_3b0.widgetType=type;
-if((!init)&&(_3b0["classConstructor"])){
-init=_3b0.classConstructor;
-delete _3b0.classConstructor;
+dojo.widget._defineWidget=function(_3ab,_3ac,_3ad,init,_3af){
+var _3b0=_3ab.split(".");
+var type=_3b0.pop();
+var regx="\\.("+(_3ac?_3ac+"|":"")+dojo.widget.defineWidget.renderers+")\\.";
+var r=_3ab.search(new RegExp(regx));
+_3b0=(r<0?_3b0.join("."):_3ab.substr(0,r));
+dojo.widget.manager.registerWidgetPackage(_3b0);
+var pos=_3b0.indexOf(".");
+var _3b5=(pos>-1)?_3b0.substring(0,pos):_3b0;
+_3af=(_3af)||{};
+_3af.widgetType=type;
+if((!init)&&(_3af["classConstructor"])){
+init=_3af.classConstructor;
+delete _3af.classConstructor;
 }
-dojo.declare(_3ac,_3ae,init,_3b0);
+dojo.declare(_3ab,_3ad,init,_3af);
 };
 dojo.provide("dojo.widget.Parse");
-dojo.widget.Parse=function(_3b7){
+dojo.widget.Parse=function(_3b6){
 this.propertySetsList=[];
-this.fragment=_3b7;
-this.createComponents=function(frag,_3b9){
-var _3ba=[];
-var _3bb=false;
+this.fragment=_3b6;
+this.createComponents=function(frag,_3b8){
+var _3b9=[];
+var _3ba=false;
 try{
 if(frag&&frag.tagName&&(frag!=frag.nodeRef)){
-var _3bc=dojo.widget.tags;
+var _3bb=dojo.widget.tags;
 var tna=String(frag.tagName).split(";");
 for(var x=0;x<tna.length;x++){
 var ltn=tna[x].replace(/^\s+|\s+$/g,"").toLowerCase();
 frag.tagName=ltn;
 var ret;
-if(_3bc[ltn]){
-_3bb=true;
-ret=_3bc[ltn](frag,this,_3b9,frag.index);
-_3ba.push(ret);
+if(_3bb[ltn]){
+_3ba=true;
+ret=_3bb[ltn](frag,this,_3b8,frag.index);
+_3b9.push(ret);
 }else{
 if(ltn.indexOf(":")==-1){
 ltn="dojo:"+ltn;
 }
-ret=dojo.widget.buildWidgetFromParseTree(ltn,frag,this,_3b9,frag.index);
+ret=dojo.widget.buildWidgetFromParseTree(ltn,frag,this,_3b8,frag.index);
 if(ret){
-_3bb=true;
-_3ba.push(ret);
+_3ba=true;
+_3b9.push(ret);
 }
 }
 }
@@ -29988,43 +22133,43 @@
 catch(e){
 dojo.debug("dojo.widget.Parse: error:",e);
 }
-if(!_3bb){
-_3ba=_3ba.concat(this.createSubComponents(frag,_3b9));
+if(!_3ba){
+_3b9=_3b9.concat(this.createSubComponents(frag,_3b8));
 }
-return _3ba;
+return _3b9;
 };
-this.createSubComponents=function(_3c1,_3c2){
-var frag,_3c4=[];
-for(var item in _3c1){
-frag=_3c1[item];
-if(frag&&typeof frag=="object"&&(frag!=_3c1.nodeRef)&&(frag!=_3c1.tagName)&&(!dojo.dom.isNode(frag))){
-_3c4=_3c4.concat(this.createComponents(frag,_3c2));
+this.createSubComponents=function(_3c0,_3c1){
+var frag,_3c3=[];
+for(var item in _3c0){
+frag=_3c0[item];
+if(frag&&typeof frag=="object"&&(frag!=_3c0.nodeRef)&&(frag!=_3c0.tagName)&&(!dojo.dom.isNode(frag))){
+_3c3=_3c3.concat(this.createComponents(frag,_3c1));
 }
 }
-return _3c4;
+return _3c3;
 };
-this.parsePropertySets=function(_3c6){
+this.parsePropertySets=function(_3c5){
 return [];
 };
-this.parseProperties=function(_3c7){
-var _3c8={};
-for(var item in _3c7){
-if((_3c7[item]==_3c7.tagName)||(_3c7[item]==_3c7.nodeRef)){
+this.parseProperties=function(_3c6){
+var _3c7={};
+for(var item in _3c6){
+if((_3c6[item]==_3c6.tagName)||(_3c6[item]==_3c6.nodeRef)){
 }else{
-var frag=_3c7[item];
+var frag=_3c6[item];
 if(frag.tagName&&dojo.widget.tags[frag.tagName.toLowerCase()]){
 }else{
 if(frag[0]&&frag[0].value!=""&&frag[0].value!=null){
 try{
 if(item.toLowerCase()=="dataprovider"){
-var _3cb=this;
-this.getDataProvider(_3cb,frag[0].value);
-_3c8.dataProvider=this.dataProvider;
+var _3ca=this;
+this.getDataProvider(_3ca,frag[0].value);
+_3c7.dataProvider=this.dataProvider;
 }
-_3c8[item]=frag[0].value;
-var _3cc=this.parseProperties(frag);
-for(var _3cd in _3cc){
-_3c8[_3cd]=_3cc[_3cd];
+_3c7[item]=frag[0].value;
+var _3cb=this.parseProperties(frag);
+for(var _3cc in _3cb){
+_3c7[_3cc]=_3cb[_3cc];
 }
 }
 catch(e){
@@ -30035,67 +22180,67 @@
 switch(item.toLowerCase()){
 case "checked":
 case "disabled":
-if(typeof _3c8[item]!="boolean"){
-_3c8[item]=true;
+if(typeof _3c7[item]!="boolean"){
+_3c7[item]=true;
 }
 break;
 }
 }
 }
-return _3c8;
+return _3c7;
 };
-this.getDataProvider=function(_3ce,_3cf){
-dojo.io.bind({url:_3cf,load:function(type,_3d1){
+this.getDataProvider=function(_3cd,_3ce){
+dojo.io.bind({url:_3ce,load:function(type,_3d0){
 if(type=="load"){
-_3ce.dataProvider=_3d1;
+_3cd.dataProvider=_3d0;
 }
 },mimetype:"text/javascript",sync:true});
 };
-this.getPropertySetById=function(_3d2){
+this.getPropertySetById=function(_3d1){
 for(var x=0;x<this.propertySetsList.length;x++){
-if(_3d2==this.propertySetsList[x]["id"][0].value){
+if(_3d1==this.propertySetsList[x]["id"][0].value){
 return this.propertySetsList[x];
 }
 }
 return "";
 };
-this.getPropertySetsByType=function(_3d4){
-var _3d5=[];
+this.getPropertySetsByType=function(_3d3){
+var _3d4=[];
 for(var x=0;x<this.propertySetsList.length;x++){
 var cpl=this.propertySetsList[x];
 var cpcc=cpl.componentClass||cpl.componentType||null;
-var _3d9=this.propertySetsList[x]["id"][0].value;
-if(cpcc&&(_3d9==cpcc[0].value)){
-_3d5.push(cpl);
+var _3d8=this.propertySetsList[x]["id"][0].value;
+if(cpcc&&(_3d8==cpcc[0].value)){
+_3d4.push(cpl);
 }
 }
-return _3d5;
+return _3d4;
 };
-this.getPropertySets=function(_3da){
+this.getPropertySets=function(_3d9){
 var ppl="dojo:propertyproviderlist";
-var _3dc=[];
-var _3dd=_3da.tagName;
-if(_3da[ppl]){
-var _3de=_3da[ppl].value.split(" ");
-for(var _3df in _3de){
-if((_3df.indexOf("..")==-1)&&(_3df.indexOf("://")==-1)){
-var _3e0=this.getPropertySetById(_3df);
-if(_3e0!=""){
-_3dc.push(_3e0);
+var _3db=[];
+var _3dc=_3d9.tagName;
+if(_3d9[ppl]){
+var _3dd=_3d9[ppl].value.split(" ");
+for(var _3de in _3dd){
+if((_3de.indexOf("..")==-1)&&(_3de.indexOf("://")==-1)){
+var _3df=this.getPropertySetById(_3de);
+if(_3df!=""){
+_3db.push(_3df);
 }
 }else{
 }
 }
 }
-return this.getPropertySetsByType(_3dd).concat(_3dc);
+return this.getPropertySetsByType(_3dc).concat(_3db);
 };
-this.createComponentFromScript=function(_3e1,_3e2,_3e3,ns){
-_3e3.fastMixIn=true;
-var ltn=(ns||"dojo")+":"+_3e2.toLowerCase();
+this.createComponentFromScript=function(_3e0,_3e1,_3e2,ns){
+_3e2.fastMixIn=true;
+var ltn=(ns||"dojo")+":"+_3e1.toLowerCase();
 if(dojo.widget.tags[ltn]){
-return [dojo.widget.tags[ltn](_3e3,this,null,null,_3e3)];
+return [dojo.widget.tags[ltn](_3e2,this,null,null,_3e2)];
 }
-return [dojo.widget.buildWidgetFromParseTree(ltn,_3e3,this,null,null,_3e3)];
+return [dojo.widget.buildWidgetFromParseTree(ltn,_3e2,this,null,null,_3e2)];
 };
 };
 dojo.widget._parser_collection={"dojo":new dojo.widget.Parse()};
@@ -30108,62 +22253,62 @@
 }
 return this._parser_collection[name];
 };
-dojo.widget.createWidget=function(name,_3e8,_3e9,_3ea){
-var _3eb=false;
-var _3ec=(typeof name=="string");
-if(_3ec){
+dojo.widget.createWidget=function(name,_3e7,_3e8,_3e9){
+var _3ea=false;
+var _3eb=(typeof name=="string");
+if(_3eb){
 var pos=name.indexOf(":");
 var ns=(pos>-1)?name.substring(0,pos):"dojo";
 if(pos>-1){
 name=name.substring(pos+1);
 }
-var _3ef=name.toLowerCase();
-var _3f0=ns+":"+_3ef;
-_3eb=(dojo.byId(name)&&!dojo.widget.tags[_3f0]);
+var _3ee=name.toLowerCase();
+var _3ef=ns+":"+_3ee;
+_3ea=(dojo.byId(name)&&!dojo.widget.tags[_3ef]);
 }
-if((arguments.length==1)&&(_3eb||!_3ec)){
+if((arguments.length==1)&&(_3ea||!_3eb)){
 var xp=new dojo.xml.Parse();
-var tn=_3eb?dojo.byId(name):name;
+var tn=_3ea?dojo.byId(name):name;
 return dojo.widget.getParser().createComponents(xp.parseElement(tn,null,true))[0];
 }
-function fromScript(_3f3,name,_3f5,ns){
-_3f5[_3f0]={dojotype:[{value:_3ef}],nodeRef:_3f3,fastMixIn:true};
-_3f5.ns=ns;
-return dojo.widget.getParser().createComponentFromScript(_3f3,name,_3f5,ns);
+function fromScript(_3f2,name,_3f4,ns){
+_3f4[_3ef]={dojotype:[{value:_3ee}],nodeRef:_3f2,fastMixIn:true};
+_3f4.ns=ns;
+return dojo.widget.getParser().createComponentFromScript(_3f2,name,_3f4,ns);
 }
-_3e8=_3e8||{};
-var _3f7=false;
+_3e7=_3e7||{};
+var _3f6=false;
 var tn=null;
 var h=dojo.render.html.capable;
 if(h){
 tn=document.createElement("span");
 }
-if(!_3e9){
-_3f7=true;
-_3e9=tn;
+if(!_3e8){
+_3f6=true;
+_3e8=tn;
 if(h){
-dojo.body().appendChild(_3e9);
+dojo.body().appendChild(_3e8);
 }
 }else{
-if(_3ea){
-dojo.dom.insertAtPosition(tn,_3e9,_3ea);
+if(_3e9){
+dojo.dom.insertAtPosition(tn,_3e8,_3e9);
 }else{
-tn=_3e9;
+tn=_3e8;
 }
 }
-var _3f9=fromScript(tn,name.toLowerCase(),_3e8,ns);
-if((!_3f9)||(!_3f9[0])||(typeof _3f9[0].widgetType=="undefined")){
+var _3f8=fromScript(tn,name.toLowerCase(),_3e7,ns);
+if((!_3f8)||(!_3f8[0])||(typeof _3f8[0].widgetType=="undefined")){
 throw new Error("createWidget: Creation of \""+name+"\" widget failed.");
 }
 try{
-if(_3f7&&_3f9[0].domNode.parentNode){
-_3f9[0].domNode.parentNode.removeChild(_3f9[0].domNode);
+if(_3f6&&_3f8[0].domNode.parentNode){
+_3f8[0].domNode.parentNode.removeChild(_3f8[0].domNode);
 }
 }
 catch(e){
 dojo.debug(e);
 }
-return _3f9[0];
+return _3f8[0];
 };
 dojo.provide("dojo.html.style");
 dojo.html.getClass=function(node){
@@ -30185,29 +22330,29 @@
 var c=dojo.html.getClass(node);
 return (c=="")?[]:c.split(/\s+/g);
 };
-dojo.html.hasClass=function(node,_3ff){
-return (new RegExp("(^|\\s+)"+_3ff+"(\\s+|$)")).test(dojo.html.getClass(node));
+dojo.html.hasClass=function(node,_3fe){
+return (new RegExp("(^|\\s+)"+_3fe+"(\\s+|$)")).test(dojo.html.getClass(node));
 };
-dojo.html.prependClass=function(node,_401){
-_401+=" "+dojo.html.getClass(node);
-return dojo.html.setClass(node,_401);
+dojo.html.prependClass=function(node,_400){
+_400+=" "+dojo.html.getClass(node);
+return dojo.html.setClass(node,_400);
 };
-dojo.html.addClass=function(node,_403){
-if(dojo.html.hasClass(node,_403)){
+dojo.html.addClass=function(node,_402){
+if(dojo.html.hasClass(node,_402)){
 return false;
 }
-_403=(dojo.html.getClass(node)+" "+_403).replace(/^\s+|\s+$/g,"");
-return dojo.html.setClass(node,_403);
+_402=(dojo.html.getClass(node)+" "+_402).replace(/^\s+|\s+$/g,"");
+return dojo.html.setClass(node,_402);
 };
-dojo.html.setClass=function(node,_405){
+dojo.html.setClass=function(node,_404){
 node=dojo.byId(node);
-var cs=new String(_405);
+var cs=new String(_404);
 try{
 if(typeof node.className=="string"){
 node.className=cs;
 }else{
 if(node.setAttribute){
-node.setAttribute("class",_405);
+node.setAttribute("class",_404);
 node.className=cs;
 }else{
 return false;
@@ -30219,11181 +22364,220 @@
 }
 return true;
 };
-dojo.html.removeClass=function(node,_408,_409){
+dojo.html.removeClass=function(node,_407,_408){
 try{
-if(!_409){
-var _40a=dojo.html.getClass(node).replace(new RegExp("(^|\\s+)"+_408+"(\\s+|$)"),"$1$2");
+if(!_408){
+var _409=dojo.html.getClass(node).replace(new RegExp("(^|\\s+)"+_407+"(\\s+|$)"),"$1$2");
 }else{
-var _40a=dojo.html.getClass(node).replace(_408,"");
+var _409=dojo.html.getClass(node).replace(_407,"");
 }
-dojo.html.setClass(node,_40a);
+dojo.html.setClass(node,_409);
 }
 catch(e){
 dojo.debug("dojo.html.removeClass() failed",e);
 }
 return true;
 };
-dojo.html.replaceClass=function(node,_40c,_40d){
-dojo.html.removeClass(node,_40d);
-dojo.html.addClass(node,_40c);
+dojo.html.replaceClass=function(node,_40b,_40c){
+dojo.html.removeClass(node,_40c);
+dojo.html.addClass(node,_40b);
 };
 dojo.html.classMatchType={ContainsAll:0,ContainsAny:1,IsOnly:2};
-dojo.html.getElementsByClass=function(_40e,_40f,_410,_411,_412){
-_412=false;
-var _413=dojo.doc();
-_40f=dojo.byId(_40f)||_413;
-var _414=_40e.split(/\s+/g);
-var _415=[];
-if(_411!=1&&_411!=2){
-_411=0;
+dojo.html.getElementsByClass=function(_40d,_40e,_40f,_410,_411){
+_411=false;
+var _412=dojo.doc();
+_40e=dojo.byId(_40e)||_412;
+var _413=_40d.split(/\s+/g);
+var _414=[];
+if(_410!=1&&_410!=2){
+_410=0;
 }
-var _416=new RegExp("(\\s|^)(("+_414.join(")|(")+"))(\\s|$)");
-var _417=_414.join(" ").length;
-var _418=[];
-if(!_412&&_413.evaluate){
-var _419=".//"+(_410||"*")+"[contains(";
-if(_411!=dojo.html.classMatchType.ContainsAny){
-_419+="concat(' ', at class,' '), ' "+_414.join(" ') and contains(concat(' ', at class,' '), ' ")+" ')";
-if(_411==2){
-_419+=" and string-length(@class)="+_417+"]";
+var _415=new RegExp("(\\s|^)(("+_413.join(")|(")+"))(\\s|$)");
+var _416=_413.join(" ").length;
+var _417=[];
+if(!_411&&_412.evaluate){
+var _418=".//"+(_40f||"*")+"[contains(";
+if(_410!=dojo.html.classMatchType.ContainsAny){
+_418+="concat(' ', at class,' '), ' "+_413.join(" ') and contains(concat(' ', at class,' '), ' ")+" ')";
+if(_410==2){
+_418+=" and string-length(@class)="+_416+"]";
 }else{
-_419+="]";
+_418+="]";
 }
 }else{
-_419+="concat(' ', at class,' '), ' "+_414.join(" ') or contains(concat(' ', at class,' '), ' ")+" ')]";
+_418+="concat(' ', at class,' '), ' "+_413.join(" ') or contains(concat(' ', at class,' '), ' ")+" ')]";
 }
-var _41a=_413.evaluate(_419,_40f,null,XPathResult.ANY_TYPE,null);
-var _41b=_41a.iterateNext();
-while(_41b){
+var _419=_412.evaluate(_418,_40e,null,XPathResult.ANY_TYPE,null);
+var _41a=_419.iterateNext();
+while(_41a){
 try{
-_418.push(_41b);
-_41b=_41a.iterateNext();
+_417.push(_41a);
+_41a=_419.iterateNext();
 }
 catch(e){
 break;
 }
 }
-return _418;
+return _417;
 }else{
-if(!_410){
-_410="*";
+if(!_40f){
+_40f="*";
 }
-_418=_40f.getElementsByTagName(_410);
+_417=_40e.getElementsByTagName(_40f);
 var node,i=0;
 outer:
-while(node=_418[i++]){
-var _41e=dojo.html.getClasses(node);
-if(_41e.length==0){
+while(node=_417[i++]){
+var _41d=dojo.html.getClasses(node);
+if(_41d.length==0){
 continue outer;
 }
-var _41f=0;
-for(var j=0;j<_41e.length;j++){
-if(_416.test(_41e[j])){
-if(_411==dojo.html.classMatchType.ContainsAny){
-_415.push(node);
+var _41e=0;
+for(var j=0;j<_41d.length;j++){
+if(_415.test(_41d[j])){
+if(_410==dojo.html.classMatchType.ContainsAny){
+_414.push(node);
 continue outer;
 }else{
-_41f++;
+_41e++;
 }
 }else{
-if(_411==dojo.html.classMatchType.IsOnly){
+if(_410==dojo.html.classMatchType.IsOnly){
 continue outer;
 }
 }
 }
-if(_41f==_414.length){
-if((_411==dojo.html.classMatchType.IsOnly)&&(_41f==_41e.length)){
-_415.push(node);
+if(_41e==_413.length){
+if((_410==dojo.html.classMatchType.IsOnly)&&(_41e==_41d.length)){
+_414.push(node);
 }else{
-if(_411==dojo.html.classMatchType.ContainsAll){
-_415.push(node);
+if(_410==dojo.html.classMatchType.ContainsAll){
+_414.push(node);
 }
 }
 }
 }
-return _415;
+return _414;
 }
 };
 dojo.html.getElementsByClassName=dojo.html.getElementsByClass;
-dojo.html.toCamelCase=function(_421){
-var arr=_421.split("-"),cc=arr[0];
+dojo.html.toCamelCase=function(_420){
+var arr=_420.split("-"),cc=arr[0];
 for(var i=1;i<arr.length;i++){
 cc+=arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
 }
 return cc;
 };
-dojo.html.toSelectorCase=function(_425){
-return _425.replace(/([A-Z])/g,"-$1").toLowerCase();
+dojo.html.toSelectorCase=function(_424){
+return _424.replace(/([A-Z])/g,"-$1").toLowerCase();
 };
-dojo.html.getComputedStyle=function(node,_427,_428){
+if(dojo.render.html.ie){
+dojo.html.getComputedStyle=function(node,_426,_427){
 node=dojo.byId(node);
-var _427=dojo.html.toSelectorCase(_427);
-var _429=dojo.html.toCamelCase(_427);
 if(!node||!node.style){
-return _428;
-}else{
-if(document.defaultView&&dojo.html.isDescendantOf(node,node.ownerDocument)){
-try{
-var cs=document.defaultView.getComputedStyle(node,"");
-if(cs){
-return cs.getPropertyValue(_427);
+return _427;
 }
-}
-catch(e){
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_427);
-}else{
-return _428;
-}
-}
-}else{
-if(node.currentStyle){
-return node.currentStyle[_429];
-}
-}
-}
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_427);
-}else{
-return _428;
-}
+return node.currentStyle[dojo.html.toCamelCase(_426)];
 };
-dojo.html.getStyleProperty=function(node,_42c){
-node=dojo.byId(node);
-return (node&&node.style?node.style[dojo.html.toCamelCase(_42c)]:undefined);
+dojo.html.getComputedStyles=function(node){
+return node.currentStyle;
 };
-dojo.html.getStyle=function(node,_42e){
-var _42f=dojo.html.getStyleProperty(node,_42e);
-return (_42f?_42f:dojo.html.getComputedStyle(node,_42e));
-};
-dojo.html.setStyle=function(node,_431,_432){
-node=dojo.byId(node);
-if(node&&node.style){
-var _433=dojo.html.toCamelCase(_431);
-node.style[_433]=_432;
-}
-};
-dojo.html.setStyleText=function(_434,text){
-try{
-_434.style.cssText=text;
-}
-catch(e){
-_434.setAttribute("style",text);
-}
-};
-dojo.html.copyStyle=function(_436,_437){
-if(!_437.style.cssText){
-_436.setAttribute("style",_437.getAttribute("style"));
 }else{
-_436.style.cssText=_437.style.cssText;
-}
-dojo.html.addClass(_436,dojo.html.getClass(_437));
-};
-dojo.html.getUnitValue=function(node,_439,_43a){
-var s=dojo.html.getComputedStyle(node,_439);
-if((!s)||((s=="auto")&&(_43a))){
-return {value:0,units:"px"};
-}
-var _43c=s.match(/(\-?[\d.]+)([a-z%]*)/i);
-if(!_43c){
-return dojo.html.getUnitValue.bad;
-}
-return {value:Number(_43c[1]),units:_43c[2].toLowerCase()};
-};
-dojo.html.getUnitValue.bad={value:NaN,units:""};
-dojo.html.getPixelValue=function(node,_43e,_43f){
-var _440=dojo.html.getUnitValue(node,_43e,_43f);
-if(isNaN(_440.value)){
-return 0;
-}
-if((_440.value)&&(_440.units!="px")){
-return NaN;
-}
-return _440.value;
-};
-dojo.html.setPositivePixelValue=function(node,_442,_443){
-if(isNaN(_443)){
-return false;
-}
-node.style[_442]=Math.max(0,_443)+"px";
-return true;
-};
-dojo.html.styleSheet=null;
-dojo.html.insertCssRule=function(_444,_445,_446){
-if(!dojo.html.styleSheet){
-if(document.createStyleSheet){
-dojo.html.styleSheet=document.createStyleSheet();
-}else{
-if(document.styleSheets[0]){
-dojo.html.styleSheet=document.styleSheets[0];
-}else{
-return null;
-}
-}
-}
-if(arguments.length<3){
-if(dojo.html.styleSheet.cssRules){
-_446=dojo.html.styleSheet.cssRules.length;
-}else{
-if(dojo.html.styleSheet.rules){
-_446=dojo.html.styleSheet.rules.length;
-}else{
-return null;
-}
-}
-}
-if(dojo.html.styleSheet.insertRule){
-var rule=_444+" { "+_445+" }";
-return dojo.html.styleSheet.insertRule(rule,_446);
-}else{
-if(dojo.html.styleSheet.addRule){
-return dojo.html.styleSheet.addRule(_444,_445,_446);
-}else{
-return null;
-}
-}
-};
-dojo.html.removeCssRule=function(_448){
-if(!dojo.html.styleSheet){
-dojo.debug("no stylesheet defined for removing rules");
-return false;
-}
-if(dojo.render.html.ie){
-if(!_448){
-_448=dojo.html.styleSheet.rules.length;
-dojo.html.styleSheet.removeRule(_448);
-}
-}else{
-if(document.styleSheets[0]){
-if(!_448){
-_448=dojo.html.styleSheet.cssRules.length;
-}
-dojo.html.styleSheet.deleteRule(_448);
-}
-}
-return true;
-};
-dojo.html._insertedCssFiles=[];
-dojo.html.insertCssFile=function(URI,doc,_44b,_44c){
-if(!URI){
-return;
-}
-if(!doc){
-doc=document;
-}
-var _44d=dojo.hostenv.getText(URI,false,_44c);
-if(_44d===null){
-return;
-}
-_44d=dojo.html.fixPathsInCssText(_44d,URI);
-if(_44b){
-var idx=-1,node,ent=dojo.html._insertedCssFiles;
-for(var i=0;i<ent.length;i++){
-if((ent[i].doc==doc)&&(ent[i].cssText==_44d)){
-idx=i;
-node=ent[i].nodeRef;
-break;
-}
-}
-if(node){
-var _452=doc.getElementsByTagName("style");
-for(var i=0;i<_452.length;i++){
-if(_452[i]==node){
-return;
-}
-}
-dojo.html._insertedCssFiles.shift(idx,1);
-}
-}
-var _453=dojo.html.insertCssText(_44d,doc);
-dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_44d,"nodeRef":_453});
-if(_453&&djConfig.isDebug){
-_453.setAttribute("dbgHref",URI);
-}
-return _453;
-};
-dojo.html.insertCssText=function(_454,doc,URI){
-if(!_454){
-return;
-}
-if(!doc){
-doc=document;
-}
-if(URI){
-_454=dojo.html.fixPathsInCssText(_454,URI);
-}
-var _457=doc.createElement("style");
-_457.setAttribute("type","text/css");
-var head=doc.getElementsByTagName("head")[0];
-if(!head){
-dojo.debug("No head tag in document, aborting styles");
-return;
-}else{
-head.appendChild(_457);
-}
-if(_457.styleSheet){
-var _459=function(){
-try{
-_457.styleSheet.cssText=_454;
-}
-catch(e){
-dojo.debug(e);
-}
-};
-if(_457.styleSheet.disabled){
-setTimeout(_459,10);
-}else{
-_459();
-}
-}else{
-var _45a=doc.createTextNode(_454);
-_457.appendChild(_45a);
-}
-return _457;
-};
-dojo.html.fixPathsInCssText=function(_45b,URI){
-if(!_45b||!URI){
-return;
-}
-var _45d,str="",url="",_460="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
-var _461=new RegExp("url\\(\\s*("+_460+")\\s*\\)");
-var _462=/(file|https?|ftps?):\/\//;
-regexTrim=new RegExp("^[\\s]*(['\"]?)("+_460+")\\1[\\s]*?$");
-if(dojo.render.html.ie55||dojo.render.html.ie60){
-var _463=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_460+")['\"]");
-while(_45d=_463.exec(_45b)){
-url=_45d[2].replace(regexTrim,"$2");
-if(!_462.exec(url)){
-url=(new dojo.uri.Uri(URI,url).toString());
-}
-str+=_45b.substring(0,_45d.index)+"AlphaImageLoader("+_45d[1]+"src='"+url+"'";
-_45b=_45b.substr(_45d.index+_45d[0].length);
-}
-_45b=str+_45b;
-str="";
-}
-while(_45d=_461.exec(_45b)){
-url=_45d[1].replace(regexTrim,"$2");
-if(!_462.exec(url)){
-url=(new dojo.uri.Uri(URI,url).toString());
-}
-str+=_45b.substring(0,_45d.index)+"url("+url+")";
-_45b=_45b.substr(_45d.index+_45d[0].length);
-}
-return str+_45b;
-};
-dojo.html.setActiveStyleSheet=function(_464){
-var i=0,a,els=dojo.doc().getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")){
-a.disabled=true;
-if(a.getAttribute("title")==_464){
-a.disabled=false;
-}
-}
-}
-};
-dojo.html.getActiveStyleSheet=function(){
-var i=0,a,els=dojo.doc().getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")&&!a.disabled){
-return a.getAttribute("title");
-}
-}
-return null;
-};
-dojo.html.getPreferredStyleSheet=function(){
-var i=0,a,els=dojo.doc().getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("rel").indexOf("alt")==-1&&a.getAttribute("title")){
-return a.getAttribute("title");
-}
-}
-return null;
-};
-dojo.html.applyBrowserClass=function(node){
-var drh=dojo.render.html;
-var _470={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
-for(var p in _470){
-if(_470[p]){
-dojo.html.addClass(node,p);
-}
-}
-};
-dojo.provide("dojo.widget.DomWidget");
-dojo.widget._cssFiles={};
-dojo.widget._cssStrings={};
-dojo.widget._templateCache={};
-dojo.widget.defaultStrings={dojoRoot:dojo.hostenv.getBaseScriptUri(),baseScriptUri:dojo.hostenv.getBaseScriptUri()};
-dojo.widget.fillFromTemplateCache=function(obj,_473,_474,_475){
-var _476=_473||obj.templatePath;
-var _477=dojo.widget._templateCache;
-if(!_476&&!obj["widgetType"]){
-do{
-var _478="__dummyTemplate__"+dojo.widget._templateCache.dummyCount++;
-}while(_477[_478]);
-obj.widgetType=_478;
-}
-var wt=_476?_476.toString():obj.widgetType;
-var ts=_477[wt];
-if(!ts){
-_477[wt]={"string":null,"node":null};
-if(_475){
-ts={};
-}else{
-ts=_477[wt];
-}
-}
-if((!obj.templateString)&&(!_475)){
-obj.templateString=_474||ts["string"];
-}
-if((!obj.templateNode)&&(!_475)){
-obj.templateNode=ts["node"];
-}
-if((!obj.templateNode)&&(!obj.templateString)&&(_476)){
-var _47b=dojo.hostenv.getText(_476);
-if(_47b){
-_47b=_47b.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");
-var _47c=_47b.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-if(_47c){
-_47b=_47c[1];
-}
-}else{
-_47b="";
-}
-obj.templateString=_47b;
-if(!_475){
-_477[wt]["string"]=_47b;
-}
-}
-if((!ts["string"])&&(!_475)){
-ts.string=obj.templateString;
-}
-};
-dojo.widget._templateCache.dummyCount=0;
-dojo.widget.attachProperties=["dojoAttachPoint","id"];
-dojo.widget.eventAttachProperty="dojoAttachEvent";
-dojo.widget.onBuildProperty="dojoOnBuild";
-dojo.widget.waiNames=["waiRole","waiState"];
-dojo.widget.wai={waiRole:{name:"waiRole","namespace":"http://www.w3.org/TR/xhtml2",alias:"x2",prefix:"wairole:"},waiState:{name:"waiState","namespace":"http://www.w3.org/2005/07/aaa",alias:"aaa",prefix:""},setAttr:function(node,ns,attr,_480){
-if(dojo.render.html.ie){
-node.setAttribute(this[ns].alias+":"+attr,this[ns].prefix+_480);
-}else{
-node.setAttributeNS(this[ns]["namespace"],attr,this[ns].prefix+_480);
-}
-},getAttr:function(node,ns,attr){
-if(dojo.render.html.ie){
-return node.getAttribute(this[ns].alias+":"+attr);
-}else{
-return node.getAttributeNS(this[ns]["namespace"],attr);
-}
-},removeAttr:function(node,ns,attr){
-var _487=true;
-if(dojo.render.html.ie){
-_487=node.removeAttribute(this[ns].alias+":"+attr);
-}else{
-node.removeAttributeNS(this[ns]["namespace"],attr);
-}
-return _487;
-}};
-dojo.widget.attachTemplateNodes=function(_488,_489,_48a){
-var _48b=dojo.dom.ELEMENT_NODE;
-function trim(str){
-return str.replace(/^\s+|\s+$/g,"");
-}
-if(!_488){
-_488=_489.domNode;
-}
-if(_488.nodeType!=_48b){
-return;
-}
-var _48d=_488.all||_488.getElementsByTagName("*");
-var _48e=_489;
-for(var x=-1;x<_48d.length;x++){
-var _490=(x==-1)?_488:_48d[x];
-var _491=[];
-if(!_489.widgetsInTemplate||!_490.getAttribute("dojoType")){
-for(var y=0;y<this.attachProperties.length;y++){
-var _493=_490.getAttribute(this.attachProperties[y]);
-if(_493){
-_491=_493.split(";");
-for(var z=0;z<_491.length;z++){
-if(dojo.lang.isArray(_489[_491[z]])){
-_489[_491[z]].push(_490);
-}else{
-_489[_491[z]]=_490;
-}
-}
-break;
-}
-}
-var _495=_490.getAttribute(this.eventAttachProperty);
-if(_495){
-var evts=_495.split(";");
-for(var y=0;y<evts.length;y++){
-if((!evts[y])||(!evts[y].length)){
-continue;
-}
-var _497=null;
-var tevt=trim(evts[y]);
-if(evts[y].indexOf(":")>=0){
-var _499=tevt.split(":");
-tevt=trim(_499[0]);
-_497=trim(_499[1]);
-}
-if(!_497){
-_497=tevt;
-}
-var tf=function(){
-var ntf=new String(_497);
-return function(evt){
-if(_48e[ntf]){
-_48e[ntf](dojo.event.browser.fixEvent(evt,this));
-}
-};
-}();
-dojo.event.browser.addListener(_490,tevt,tf,false,true);
-}
-}
-for(var y=0;y<_48a.length;y++){
-var _49d=_490.getAttribute(_48a[y]);
-if((_49d)&&(_49d.length)){
-var _497=null;
-var _49e=_48a[y].substr(4);
-_497=trim(_49d);
-var _49f=[_497];
-if(_497.indexOf(";")>=0){
-_49f=dojo.lang.map(_497.split(";"),trim);
-}
-for(var z=0;z<_49f.length;z++){
-if(!_49f[z].length){
-continue;
-}
-var tf=function(){
-var ntf=new String(_49f[z]);
-return function(evt){
-if(_48e[ntf]){
-_48e[ntf](dojo.event.browser.fixEvent(evt,this));
-}
-};
-}();
-dojo.event.browser.addListener(_490,_49e,tf,false,true);
-}
-}
-}
-}
-var _4a2=_490.getAttribute(this.templateProperty);
-if(_4a2){
-_489[_4a2]=_490;
-}
-dojo.lang.forEach(dojo.widget.waiNames,function(name){
-var wai=dojo.widget.wai[name];
-var val=_490.getAttribute(wai.name);
-if(val){
-if(val.indexOf("-")==-1){
-dojo.widget.wai.setAttr(_490,wai.name,"role",val);
-}else{
-var _4a6=val.split("-");
-dojo.widget.wai.setAttr(_490,wai.name,_4a6[0],_4a6[1]);
-}
-}
-},this);
-var _4a7=_490.getAttribute(this.onBuildProperty);
-if(_4a7){
-eval("var node = baseNode; var widget = targetObj; "+_4a7);
-}
-}
-};
-dojo.widget.getDojoEventsFromStr=function(str){
-var re=/(dojoOn([a-z]+)(\s?))=/gi;
-var evts=str?str.match(re)||[]:[];
-var ret=[];
-var lem={};
-for(var x=0;x<evts.length;x++){
-if(evts[x].length<1){
-continue;
-}
-var cm=evts[x].replace(/\s/,"");
-cm=(cm.slice(0,cm.length-1));
-if(!lem[cm]){
-lem[cm]=true;
-ret.push(cm);
-}
-}
-return ret;
-};
-dojo.declare("dojo.widget.DomWidget",dojo.widget.Widget,function(){
-if((arguments.length>0)&&(typeof arguments[0]=="object")){
-this.create(arguments[0]);
-}
-},{templateNode:null,templateString:null,templateCssString:null,preventClobber:false,domNode:null,containerNode:null,widgetsInTemplate:false,addChild:function(_4af,_4b0,pos,ref,_4b3){
-if(!this.isContainer){
-dojo.debug("dojo.widget.DomWidget.addChild() attempted on non-container widget");
-return null;
-}else{
-if(_4b3==undefined){
-_4b3=this.children.length;
-}
-this.addWidgetAsDirectChild(_4af,_4b0,pos,ref,_4b3);
-this.registerChild(_4af,_4b3);
-}
-return _4af;
-},addWidgetAsDirectChild:function(_4b4,_4b5,pos,ref,_4b8){
-if((!this.containerNode)&&(!_4b5)){
-this.containerNode=this.domNode;
-}
-var cn=(_4b5)?_4b5:this.containerNode;
-if(!pos){
-pos="after";
-}
-if(!ref){
-if(!cn){
-cn=dojo.body();
-}
-ref=cn.lastChild;
-}
-if(!_4b8){
-_4b8=0;
-}
-_4b4.domNode.setAttribute("dojoinsertionindex",_4b8);
-if(!ref){
-cn.appendChild(_4b4.domNode);
-}else{
-if(pos=="insertAtIndex"){
-dojo.dom.insertAtIndex(_4b4.domNode,ref.parentNode,_4b8);
-}else{
-if((pos=="after")&&(ref===cn.lastChild)){
-cn.appendChild(_4b4.domNode);
-}else{
-dojo.dom.insertAtPosition(_4b4.domNode,cn,pos);
-}
-}
-}
-},registerChild:function(_4ba,_4bb){
-_4ba.dojoInsertionIndex=_4bb;
-var idx=-1;
-for(var i=0;i<this.children.length;i++){
-if(this.children[i].dojoInsertionIndex<=_4bb){
-idx=i;
-}
-}
-this.children.splice(idx+1,0,_4ba);
-_4ba.parent=this;
-_4ba.addedTo(this,idx+1);
-delete dojo.widget.manager.topWidgets[_4ba.widgetId];
-},removeChild:function(_4be){
-dojo.dom.removeNode(_4be.domNode);
-return dojo.widget.DomWidget.superclass.removeChild.call(this,_4be);
-},getFragNodeRef:function(frag){
-if(!frag){
-return null;
-}
-if(!frag[this.getNamespacedType()]){
-dojo.raise("Error: no frag for widget type "+this.getNamespacedType()+", id "+this.widgetId+" (maybe a widget has set it's type incorrectly)");
-}
-return frag[this.getNamespacedType()]["nodeRef"];
-},postInitialize:function(args,frag,_4c2){
-var _4c3=this.getFragNodeRef(frag);
-if(_4c2&&(_4c2.snarfChildDomOutput||!_4c3)){
-_4c2.addWidgetAsDirectChild(this,"","insertAtIndex","",args["dojoinsertionindex"],_4c3);
-}else{
-if(_4c3){
-if(this.domNode&&(this.domNode!==_4c3)){
-this._sourceNodeRef=dojo.dom.replaceNode(_4c3,this.domNode);
-}
-}
-}
-if(_4c2){
-_4c2.registerChild(this,args.dojoinsertionindex);
-}else{
-dojo.widget.manager.topWidgets[this.widgetId]=this;
-}
-if(this.widgetsInTemplate){
-var _4c4=new dojo.xml.Parse();
-var _4c5;
-var _4c6=this.domNode.getElementsByTagName("*");
-for(var i=0;i<_4c6.length;i++){
-if(_4c6[i].getAttribute("dojoAttachPoint")=="subContainerWidget"){
-_4c5=_4c6[i];
-}
-if(_4c6[i].getAttribute("dojoType")){
-_4c6[i].setAttribute("isSubWidget",true);
-}
-}
-if(this.isContainer&&!this.containerNode){
-if(_4c5){
-var src=this.getFragNodeRef(frag);
-if(src){
-dojo.dom.moveChildren(src,_4c5);
-frag["dojoDontFollow"]=true;
-}
-}else{
-dojo.debug("No subContainerWidget node can be found in template file for widget "+this);
-}
-}
-var _4c9=_4c4.parseElement(this.domNode,null,true);
-dojo.widget.getParser().createSubComponents(_4c9,this);
-var _4ca=[];
-var _4cb=[this];
-var w;
-while((w=_4cb.pop())){
-for(var i=0;i<w.children.length;i++){
-var _4cd=w.children[i];
-if(_4cd._processedSubWidgets||!_4cd.extraArgs["issubwidget"]){
-continue;
-}
-_4ca.push(_4cd);
-if(_4cd.isContainer){
-_4cb.push(_4cd);
-}
-}
-}
-for(var i=0;i<_4ca.length;i++){
-var _4ce=_4ca[i];
-if(_4ce._processedSubWidgets){
-dojo.debug("This should not happen: widget._processedSubWidgets is already true!");
-return;
-}
-_4ce._processedSubWidgets=true;
-if(_4ce.extraArgs["dojoattachevent"]){
-var evts=_4ce.extraArgs["dojoattachevent"].split(";");
-for(var j=0;j<evts.length;j++){
-var _4d1=null;
-var tevt=dojo.string.trim(evts[j]);
-if(tevt.indexOf(":")>=0){
-var _4d3=tevt.split(":");
-tevt=dojo.string.trim(_4d3[0]);
-_4d1=dojo.string.trim(_4d3[1]);
-}
-if(!_4d1){
-_4d1=tevt;
-}
-if(dojo.lang.isFunction(_4ce[tevt])){
-dojo.event.kwConnect({srcObj:_4ce,srcFunc:tevt,targetObj:this,targetFunc:_4d1});
-}else{
-alert(tevt+" is not a function in widget "+_4ce);
-}
-}
-}
-if(_4ce.extraArgs["dojoattachpoint"]){
-this[_4ce.extraArgs["dojoattachpoint"]]=_4ce;
-}
-}
-}
-if(this.isContainer&&!frag["dojoDontFollow"]){
-dojo.widget.getParser().createSubComponents(frag,this);
-}
-},buildRendering:function(args,frag){
-var ts=dojo.widget._templateCache[this.widgetType];
-if(args["templatecsspath"]){
-args["templateCssPath"]=args["templatecsspath"];
-}
-var _4d7=args["templateCssPath"]||this.templateCssPath;
-if(_4d7&&!dojo.widget._cssFiles[_4d7.toString()]){
-if((!this.templateCssString)&&(_4d7)){
-this.templateCssString=dojo.hostenv.getText(_4d7);
-this.templateCssPath=null;
-}
-dojo.widget._cssFiles[_4d7.toString()]=true;
-}
-if((this["templateCssString"])&&(!dojo.widget._cssStrings[this.templateCssString])){
-dojo.html.insertCssText(this.templateCssString,null,_4d7);
-dojo.widget._cssStrings[this.templateCssString]=true;
-}
-if((!this.preventClobber)&&((this.templatePath)||(this.templateNode)||((this["templateString"])&&(this.templateString.length))||((typeof ts!="undefined")&&((ts["string"])||(ts["node"]))))){
-this.buildFromTemplate(args,frag);
-}else{
-this.domNode=this.getFragNodeRef(frag);
-}
-this.fillInTemplate(args,frag);
-},buildFromTemplate:function(args,frag){
-var _4da=false;
-if(args["templatepath"]){
-args["templatePath"]=args["templatepath"];
-}
-dojo.widget.fillFromTemplateCache(this,args["templatePath"],null,_4da);
-var ts=dojo.widget._templateCache[this.templatePath?this.templatePath.toString():this.widgetType];
-if((ts)&&(!_4da)){
-if(!this.templateString.length){
-this.templateString=ts["string"];
-}
-if(!this.templateNode){
-this.templateNode=ts["node"];
-}
-}
-var _4dc=false;
-var node=null;
-var tstr=this.templateString;
-if((!this.templateNode)&&(this.templateString)){
-_4dc=this.templateString.match(/\$\{([^\}]+)\}/g);
-if(_4dc){
-var hash=this.strings||{};
-for(var key in dojo.widget.defaultStrings){
-if(dojo.lang.isUndefined(hash[key])){
-hash[key]=dojo.widget.defaultStrings[key];
-}
-}
-for(var i=0;i<_4dc.length;i++){
-var key=_4dc[i];
-key=key.substring(2,key.length-1);
-var kval=(key.substring(0,5)=="this.")?dojo.lang.getObjPathValue(key.substring(5),this):hash[key];
-var _4e3;
-if((kval)||(dojo.lang.isString(kval))){
-_4e3=new String((dojo.lang.isFunction(kval))?kval.call(this,key,this.templateString):kval);
-while(_4e3.indexOf("\"")>-1){
-_4e3=_4e3.replace("\"","&quot;");
-}
-tstr=tstr.replace(_4dc[i],_4e3);
-}
-}
-}else{
-this.templateNode=this.createNodesFromText(this.templateString,true)[0];
-if(!_4da){
-ts.node=this.templateNode;
-}
-}
-}
-if((!this.templateNode)&&(!_4dc)){
-dojo.debug("DomWidget.buildFromTemplate: could not create template");
-return false;
-}else{
-if(!_4dc){
-node=this.templateNode.cloneNode(true);
-if(!node){
-return false;
-}
-}else{
-node=this.createNodesFromText(tstr,true)[0];
-}
-}
-this.domNode=node;
-this.attachTemplateNodes();
-if(this.isContainer&&this.containerNode){
-var src=this.getFragNodeRef(frag);
-if(src){
-dojo.dom.moveChildren(src,this.containerNode);
-}
-}
-},attachTemplateNodes:function(_4e5,_4e6){
-if(!_4e5){
-_4e5=this.domNode;
-}
-if(!_4e6){
-_4e6=this;
-}
-return dojo.widget.attachTemplateNodes(_4e5,_4e6,dojo.widget.getDojoEventsFromStr(this.templateString));
-},fillInTemplate:function(){
-},destroyRendering:function(){
-try{
-dojo.dom.destroyNode(this.domNode);
-delete this.domNode;
-}
-catch(e){
-}
-if(this._sourceNodeRef){
-try{
-dojo.dom.destroyNode(this._sourceNodeRef);
-}
-catch(e){
-}
-}
-},createNodesFromText:function(){
-dojo.unimplemented("dojo.widget.DomWidget.createNodesFromText");
-}});
-dojo.provide("dojo.html.display");
-dojo.html._toggle=function(node,_4e8,_4e9){
+dojo.html.getComputedStyle=function(node,_42a,_42b){
 node=dojo.byId(node);
-_4e9(node,!_4e8(node));
-return _4e8(node);
-};
-dojo.html.show=function(node){
-node=dojo.byId(node);
-if(dojo.html.getStyleProperty(node,"display")=="none"){
-dojo.html.setStyle(node,"display",(node.dojoDisplayCache||""));
-node.dojoDisplayCache=undefined;
+if(!node||!node.style){
+return _42b;
 }
+var s=document.defaultView.getComputedStyle(node,null);
+return (s&&s[dojo.html.toCamelCase(_42a)])||"";
 };
-dojo.html.hide=function(node){
-node=dojo.byId(node);
-if(typeof node["dojoDisplayCache"]=="undefined"){
-var d=dojo.html.getStyleProperty(node,"display");
-if(d!="none"){
-node.dojoDisplayCache=d;
-}
-}
-dojo.html.setStyle(node,"display","none");
+dojo.html.getComputedStyles=function(node){
+return document.defaultView.getComputedStyle(node,null);
 };
-dojo.html.setShowing=function(node,_4ee){
-dojo.html[(_4ee?"show":"hide")](node);
-};
-dojo.html.isShowing=function(node){
-return (dojo.html.getStyleProperty(node,"display")!="none");
-};
-dojo.html.toggleShowing=function(node){
-return dojo.html._toggle(node,dojo.html.isShowing,dojo.html.setShowing);
-};
-dojo.html.displayMap={tr:"",td:"",th:"",img:"inline",span:"inline",input:"inline",button:"inline"};
-dojo.html.suggestDisplayByTagName=function(node){
-node=dojo.byId(node);
-if(node&&node.tagName){
-var tag=node.tagName.toLowerCase();
-return (tag in dojo.html.displayMap?dojo.html.displayMap[tag]:"block");
 }
-};
-dojo.html.setDisplay=function(node,_4f4){
-dojo.html.setStyle(node,"display",((_4f4 instanceof String||typeof _4f4=="string")?_4f4:(_4f4?dojo.html.suggestDisplayByTagName(node):"none")));
-};
-dojo.html.isDisplayed=function(node){
-return (dojo.html.getComputedStyle(node,"display")!="none");
-};
-dojo.html.toggleDisplay=function(node){
-return dojo.html._toggle(node,dojo.html.isDisplayed,dojo.html.setDisplay);
-};
-dojo.html.setVisibility=function(node,_4f8){
-dojo.html.setStyle(node,"visibility",((_4f8 instanceof String||typeof _4f8=="string")?_4f8:(_4f8?"visible":"hidden")));
-};
-dojo.html.isVisible=function(node){
-return (dojo.html.getComputedStyle(node,"visibility")!="hidden");
-};
-dojo.html.toggleVisibility=function(node){
-return dojo.html._toggle(node,dojo.html.isVisible,dojo.html.setVisibility);
-};
-dojo.html.setOpacity=function(node,_4fc,_4fd){
+dojo.html.getStyleProperty=function(node,_42f){
 node=dojo.byId(node);
-var h=dojo.render.html;
-if(!_4fd){
-if(_4fc>=1){
-if(h.ie){
-dojo.html.clearOpacity(node);
-return;
-}else{
-_4fc=0.999999;
-}
-}else{
-if(_4fc<0){
-_4fc=0;
-}
-}
-}
-if(h.ie){
-if(node.nodeName.toLowerCase()=="tr"){
-var tds=node.getElementsByTagName("td");
-for(var x=0;x<tds.length;x++){
-tds[x].style.filter="Alpha(Opacity="+_4fc*100+")";
-}
-}
-node.style.filter="Alpha(Opacity="+_4fc*100+")";
-}else{
-if(h.moz){
-node.style.opacity=_4fc;
-node.style.MozOpacity=_4fc;
-}else{
-if(h.safari){
-node.style.opacity=_4fc;
-node.style.KhtmlOpacity=_4fc;
-}else{
-node.style.opacity=_4fc;
-}
-}
-}
+return (node&&node.style?node.style[dojo.html.toCamelCase(_42f)]:undefined);
 };
-dojo.html.clearOpacity=function(node){
-node=dojo.byId(node);
-var ns=node.style;
-var h=dojo.render.html;
-if(h.ie){
-try{
-if(node.filters&&node.filters.alpha){
-ns.filter="";
-}
-}
-catch(e){
-}
-}else{
-if(h.moz){
-ns.opacity=1;
-ns.MozOpacity=1;
-}else{
-if(h.safari){
-ns.opacity=1;
-ns.KhtmlOpacity=1;
-}else{
-ns.opacity=1;
-}
-}
-}
+dojo.html.getStyle=function(node,_431){
+var _432=dojo.html.getStyleProperty(node,_431);
+return (_432?_432:dojo.html.getComputedStyle(node,_431));
 };
-dojo.html.getOpacity=function(node){
+dojo.html.setStyle=function(node,_434,_435){
 node=dojo.byId(node);
-var h=dojo.render.html;
-if(h.ie){
-var opac=(node.filters&&node.filters.alpha&&typeof node.filters.alpha.opacity=="number"?node.filters.alpha.opacity:100)/100;
-}else{
-var opac=node.style.opacity||node.style.MozOpacity||node.style.KhtmlOpacity||1;
+if(node&&node.style){
+var _436=dojo.html.toCamelCase(_434);
+node.style[_436]=_435;
 }
-return opac>=0.999999?1:Number(opac);
 };
-dojo.provide("dojo.html.layout");
-dojo.html.sumAncestorProperties=function(node,prop){
-node=dojo.byId(node);
-if(!node){
-return 0;
-}
-var _509=0;
-while(node){
-if(dojo.html.getComputedStyle(node,"position")=="fixed"){
-return 0;
-}
-var val=node[prop];
-if(val){
-_509+=val-0;
-if(node==dojo.body()){
-break;
-}
-}
-node=node.parentNode;
-}
-return _509;
-};
-dojo.html.setStyleAttributes=function(node,_50c){
-node=dojo.byId(node);
-var _50d=_50c.replace(/(;)?\s*$/,"").split(";");
-for(var i=0;i<_50d.length;i++){
-var _50f=_50d[i].split(":");
-var name=_50f[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
-var _511=_50f[1].replace(/\s*$/,"").replace(/^\s*/,"");
-switch(name){
-case "opacity":
-dojo.html.setOpacity(node,_511);
-break;
-case "content-height":
-dojo.html.setContentBox(node,{height:_511});
-break;
-case "content-width":
-dojo.html.setContentBox(node,{width:_511});
-break;
-case "outer-height":
-dojo.html.setMarginBox(node,{height:_511});
-break;
-case "outer-width":
-dojo.html.setMarginBox(node,{width:_511});
-break;
-default:
-node.style[dojo.html.toCamelCase(name)]=_511;
-}
-}
-};
-dojo.html.boxSizing={MARGIN_BOX:"margin-box",BORDER_BOX:"border-box",PADDING_BOX:"padding-box",CONTENT_BOX:"content-box"};
-dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_513,_514){
-node=dojo.byId(node,node.ownerDocument);
-var ret={x:0,y:0};
-var bs=dojo.html.boxSizing;
-if(!_514){
-_514=bs.CONTENT_BOX;
-}
-var _517=2;
-var _518;
-switch(_514){
-case bs.MARGIN_BOX:
-_518=3;
-break;
-case bs.BORDER_BOX:
-_518=2;
-break;
-case bs.PADDING_BOX:
-default:
-_518=1;
-break;
-case bs.CONTENT_BOX:
-_518=0;
-break;
-}
-var h=dojo.render.html;
-var db=document["body"]||document["documentElement"];
-if(h.ie){
-with(node.getBoundingClientRect()){
-ret.x=left-2;
-ret.y=top-2;
-}
-}else{
-if(document.getBoxObjectFor){
-_517=1;
+dojo.html.setStyleText=function(_437,text){
 try{
-var bo=document.getBoxObjectFor(node);
-ret.x=bo.x-dojo.html.sumAncestorProperties(node,"scrollLeft");
-ret.y=bo.y-dojo.html.sumAncestorProperties(node,"scrollTop");
+_437.style.cssText=text;
 }
 catch(e){
+_437.setAttribute("style",text);
 }
-}else{
-if(node["offsetParent"]){
-var _51c;
-if((h.safari)&&(node.style.getPropertyValue("position")=="absolute")&&(node.parentNode==db)){
-_51c=db;
-}else{
-_51c=db.parentNode;
-}
-if(node.parentNode!=db){
-var nd=node;
-if(dojo.render.html.opera){
-nd=db;
-}
-ret.x-=dojo.html.sumAncestorProperties(nd,"scrollLeft");
-ret.y-=dojo.html.sumAncestorProperties(nd,"scrollTop");
-}
-var _51e=node;
-do{
-var n=_51e["offsetLeft"];
-if(!h.opera||n>0){
-ret.x+=isNaN(n)?0:n;
-}
-var m=_51e["offsetTop"];
-ret.y+=isNaN(m)?0:m;
-_51e=_51e.offsetParent;
-}while((_51e!=_51c)&&(_51e!=null));
-}else{
-if(node["x"]&&node["y"]){
-ret.x+=isNaN(node.x)?0:node.x;
-ret.y+=isNaN(node.y)?0:node.y;
-}
-}
-}
-}
-if(_513){
-var _521=dojo.html.getScroll();
-ret.y+=_521.top;
-ret.x+=_521.left;
-}
-var _522=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
-if(_517>_518){
-for(var i=_518;i<_517;++i){
-ret.y+=_522[i](node,"top");
-ret.x+=_522[i](node,"left");
-}
-}else{
-if(_517<_518){
-for(var i=_518;i>_517;--i){
-ret.y-=_522[i-1](node,"top");
-ret.x-=_522[i-1](node,"left");
-}
-}
-}
-ret.top=ret.y;
-ret.left=ret.x;
-return ret;
 };
-dojo.html.isPositionAbsolute=function(node){
-return (dojo.html.getComputedStyle(node,"position")=="absolute");
-};
-dojo.html._sumPixelValues=function(node,_526,_527){
-var _528=0;
-for(var x=0;x<_526.length;x++){
-_528+=dojo.html.getPixelValue(node,_526[x],_527);
-}
-return _528;
-};
-dojo.html.getMargin=function(node){
-return {width:dojo.html._sumPixelValues(node,["margin-left","margin-right"],(dojo.html.getComputedStyle(node,"position")=="absolute")),height:dojo.html._sumPixelValues(node,["margin-top","margin-bottom"],(dojo.html.getComputedStyle(node,"position")=="absolute"))};
-};
-dojo.html.getBorder=function(node){
-return {width:dojo.html.getBorderExtent(node,"left")+dojo.html.getBorderExtent(node,"right"),height:dojo.html.getBorderExtent(node,"top")+dojo.html.getBorderExtent(node,"bottom")};
-};
-dojo.html.getBorderExtent=function(node,side){
-return (dojo.html.getStyle(node,"border-"+side+"-style")=="none"?0:dojo.html.getPixelValue(node,"border-"+side+"-width"));
-};
-dojo.html.getMarginExtent=function(node,side){
-return dojo.html._sumPixelValues(node,["margin-"+side],dojo.html.isPositionAbsolute(node));
-};
-dojo.html.getPaddingExtent=function(node,side){
-return dojo.html._sumPixelValues(node,["padding-"+side],true);
-};
-dojo.html.getPadding=function(node){
-return {width:dojo.html._sumPixelValues(node,["padding-left","padding-right"],true),height:dojo.html._sumPixelValues(node,["padding-top","padding-bottom"],true)};
-};
-dojo.html.getPadBorder=function(node){
-var pad=dojo.html.getPadding(node);
-var _535=dojo.html.getBorder(node);
-return {width:pad.width+_535.width,height:pad.height+_535.height};
-};
-dojo.html.getBoxSizing=function(node){
-var h=dojo.render.html;
-var bs=dojo.html.boxSizing;
-if(((h.ie)||(h.opera))&&node.nodeName!="IMG"){
-var cm=document["compatMode"];
-if((cm=="BackCompat")||(cm=="QuirksMode")){
-return bs.BORDER_BOX;
+dojo.html.copyStyle=function(_439,_43a){
+if(!_43a.style.cssText){
+_439.setAttribute("style",_43a.getAttribute("style"));
 }else{
-return bs.CONTENT_BOX;
+_439.style.cssText=_43a.style.cssText;
 }
-}else{
-if(arguments.length==0){
-node=document.documentElement;
-}
-var _53a=dojo.html.getStyle(node,"-moz-box-sizing");
-if(!_53a){
-_53a=dojo.html.getStyle(node,"box-sizing");
-}
-return (_53a?_53a:bs.CONTENT_BOX);
-}
+dojo.html.addClass(_439,dojo.html.getClass(_43a));
 };
-dojo.html.isBorderBox=function(node){
-return (dojo.html.getBoxSizing(node)==dojo.html.boxSizing.BORDER_BOX);
-};
-dojo.html.getBorderBox=function(node){
-node=dojo.byId(node);
-return {width:node.offsetWidth,height:node.offsetHeight};
-};
-dojo.html.getPaddingBox=function(node){
-var box=dojo.html.getBorderBox(node);
-var _53f=dojo.html.getBorder(node);
-return {width:box.width-_53f.width,height:box.height-_53f.height};
-};
-dojo.html.getContentBox=function(node){
-node=dojo.byId(node);
-var _541=dojo.html.getPadBorder(node);
-return {width:node.offsetWidth-_541.width,height:node.offsetHeight-_541.height};
-};
-dojo.html.setContentBox=function(node,args){
-node=dojo.byId(node);
-var _544=0;
-var _545=0;
-var isbb=dojo.html.isBorderBox(node);
-var _547=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
-var ret={};
-if(typeof args.width!="undefined"){
-_544=args.width+_547.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_544);
+dojo.html.getUnitValue=function(node,_43c,_43d){
+var s=dojo.html.getComputedStyle(node,_43c);
+if((!s)||((s=="auto")&&(_43d))){
+return {value:0,units:"px"};
 }
-if(typeof args.height!="undefined"){
-_545=args.height+_547.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_545);
+var _43f=s.match(/(\-?[\d.]+)([a-z%]*)/i);
+if(!_43f){
+return dojo.html.getUnitValue.bad;
 }
-return ret;
+return {value:Number(_43f[1]),units:_43f[2].toLowerCase()};
 };
-dojo.html.getMarginBox=function(node){
-var _54a=dojo.html.getBorderBox(node);
-var _54b=dojo.html.getMargin(node);
-return {width:_54a.width+_54b.width,height:_54a.height+_54b.height};
-};
-dojo.html.setMarginBox=function(node,args){
-node=dojo.byId(node);
-var _54e=0;
-var _54f=0;
-var isbb=dojo.html.isBorderBox(node);
-var _551=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
-var _552=dojo.html.getMargin(node);
-var ret={};
-if(typeof args.width!="undefined"){
-_54e=args.width-_551.width;
-_54e-=_552.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_54e);
-}
-if(typeof args.height!="undefined"){
-_54f=args.height-_551.height;
-_54f-=_552.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_54f);
-}
-return ret;
-};
-dojo.html.getElementBox=function(node,type){
-var bs=dojo.html.boxSizing;
-switch(type){
-case bs.MARGIN_BOX:
-return dojo.html.getMarginBox(node);
-case bs.BORDER_BOX:
-return dojo.html.getBorderBox(node);
-case bs.PADDING_BOX:
-return dojo.html.getPaddingBox(node);
-case bs.CONTENT_BOX:
-default:
-return dojo.html.getContentBox(node);
-}
-};
-dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_557,_558,_559){
-if(_557 instanceof Array||typeof _557=="array"){
-dojo.deprecated("dojo.html.toCoordinateArray","use dojo.html.toCoordinateObject({left: , top: , width: , height: }) instead","0.5");
-while(_557.length<4){
-_557.push(0);
-}
-while(_557.length>4){
-_557.pop();
-}
-var ret={left:_557[0],top:_557[1],width:_557[2],height:_557[3]};
-}else{
-if(!_557.nodeType&&!(_557 instanceof String||typeof _557=="string")&&("width" in _557||"height" in _557||"left" in _557||"x" in _557||"top" in _557||"y" in _557)){
-var ret={left:_557.left||_557.x||0,top:_557.top||_557.y||0,width:_557.width||0,height:_557.height||0};
-}else{
-var node=dojo.byId(_557);
-var pos=dojo.html.abs(node,_558,_559);
-var _55d=dojo.html.getMarginBox(node);
-var ret={left:pos.left,top:pos.top,width:_55d.width,height:_55d.height};
-}
-}
-ret.x=ret.left;
-ret.y=ret.top;
-return ret;
-};
-dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_55f){
-return dojo.html._callDeprecated("setMarginBoxWidth","setMarginBox",arguments,"width");
-};
-dojo.html.setMarginBoxHeight=dojo.html.setOuterHeight=function(){
-return dojo.html._callDeprecated("setMarginBoxHeight","setMarginBox",arguments,"height");
-};
-dojo.html.getMarginBoxWidth=dojo.html.getOuterWidth=function(){
-return dojo.html._callDeprecated("getMarginBoxWidth","getMarginBox",arguments,null,"width");
-};
-dojo.html.getMarginBoxHeight=dojo.html.getOuterHeight=function(){
-return dojo.html._callDeprecated("getMarginBoxHeight","getMarginBox",arguments,null,"height");
-};
-dojo.html.getTotalOffset=function(node,type,_562){
-return dojo.html._callDeprecated("getTotalOffset","getAbsolutePosition",arguments,null,type);
-};
-dojo.html.getAbsoluteX=function(node,_564){
-return dojo.html._callDeprecated("getAbsoluteX","getAbsolutePosition",arguments,null,"x");
-};
-dojo.html.getAbsoluteY=function(node,_566){
-return dojo.html._callDeprecated("getAbsoluteY","getAbsolutePosition",arguments,null,"y");
-};
-dojo.html.totalOffsetLeft=function(node,_568){
-return dojo.html._callDeprecated("totalOffsetLeft","getAbsolutePosition",arguments,null,"left");
-};
-dojo.html.totalOffsetTop=function(node,_56a){
-return dojo.html._callDeprecated("totalOffsetTop","getAbsolutePosition",arguments,null,"top");
-};
-dojo.html.getMarginWidth=function(node){
-return dojo.html._callDeprecated("getMarginWidth","getMargin",arguments,null,"width");
-};
-dojo.html.getMarginHeight=function(node){
-return dojo.html._callDeprecated("getMarginHeight","getMargin",arguments,null,"height");
-};
-dojo.html.getBorderWidth=function(node){
-return dojo.html._callDeprecated("getBorderWidth","getBorder",arguments,null,"width");
-};
-dojo.html.getBorderHeight=function(node){
-return dojo.html._callDeprecated("getBorderHeight","getBorder",arguments,null,"height");
-};
-dojo.html.getPaddingWidth=function(node){
-return dojo.html._callDeprecated("getPaddingWidth","getPadding",arguments,null,"width");
-};
-dojo.html.getPaddingHeight=function(node){
-return dojo.html._callDeprecated("getPaddingHeight","getPadding",arguments,null,"height");
-};
-dojo.html.getPadBorderWidth=function(node){
-return dojo.html._callDeprecated("getPadBorderWidth","getPadBorder",arguments,null,"width");
-};
-dojo.html.getPadBorderHeight=function(node){
-return dojo.html._callDeprecated("getPadBorderHeight","getPadBorder",arguments,null,"height");
-};
-dojo.html.getBorderBoxWidth=dojo.html.getInnerWidth=function(){
-return dojo.html._callDeprecated("getBorderBoxWidth","getBorderBox",arguments,null,"width");
-};
-dojo.html.getBorderBoxHeight=dojo.html.getInnerHeight=function(){
-return dojo.html._callDeprecated("getBorderBoxHeight","getBorderBox",arguments,null,"height");
-};
-dojo.html.getContentBoxWidth=dojo.html.getContentWidth=function(){
-return dojo.html._callDeprecated("getContentBoxWidth","getContentBox",arguments,null,"width");
-};
-dojo.html.getContentBoxHeight=dojo.html.getContentHeight=function(){
-return dojo.html._callDeprecated("getContentBoxHeight","getContentBox",arguments,null,"height");
-};
-dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_574){
-return dojo.html._callDeprecated("setContentBoxWidth","setContentBox",arguments,"width");
-};
-dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_576){
-return dojo.html._callDeprecated("setContentBoxHeight","setContentBox",arguments,"height");
-};
-dojo.provide("dojo.html.util");
-dojo.html.getElementWindow=function(_577){
-return dojo.html.getDocumentWindow(_577.ownerDocument);
-};
-dojo.html.getDocumentWindow=function(doc){
-if(dojo.render.html.safari&&!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.render.html.ie&&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;
-};
-dojo.html.gravity=function(node,e){
-node=dojo.byId(node);
-var _57f=dojo.html.getCursorPosition(e);
-with(dojo.html){
-var _580=getAbsolutePosition(node,true);
-var bb=getBorderBox(node);
-var _582=_580.x+(bb.width/2);
-var _583=_580.y+(bb.height/2);
-}
-with(dojo.html.gravity){
-return ((_57f.x<_582?WEST:EAST)|(_57f.y<_583?NORTH:SOUTH));
-}
-};
-dojo.html.gravity.NORTH=1;
-dojo.html.gravity.SOUTH=1<<1;
-dojo.html.gravity.EAST=1<<2;
-dojo.html.gravity.WEST=1<<3;
-dojo.html.overElement=function(_584,e){
-_584=dojo.byId(_584);
-var _586=dojo.html.getCursorPosition(e);
-var bb=dojo.html.getBorderBox(_584);
-var _588=dojo.html.getAbsolutePosition(_584,true,dojo.html.boxSizing.BORDER_BOX);
-var top=_588.y;
-var _58a=top+bb.height;
-var left=_588.x;
-var _58c=left+bb.width;
-return (_586.x>=left&&_586.x<=_58c&&_586.y>=top&&_586.y<=_58a);
-};
-dojo.html.renderedTextContent=function(node){
-node=dojo.byId(node);
-var _58e="";
-if(node==null){
-return _58e;
-}
-for(var i=0;i<node.childNodes.length;i++){
-switch(node.childNodes[i].nodeType){
-case 1:
-case 5:
-var _590="unknown";
-try{
-_590=dojo.html.getStyle(node.childNodes[i],"display");
-}
-catch(E){
-}
-switch(_590){
-case "block":
-case "list-item":
-case "run-in":
-case "table":
-case "table-row-group":
-case "table-header-group":
-case "table-footer-group":
-case "table-row":
-case "table-column-group":
-case "table-column":
-case "table-cell":
-case "table-caption":
-_58e+="\n";
-_58e+=dojo.html.renderedTextContent(node.childNodes[i]);
-_58e+="\n";
-break;
-case "none":
-break;
-default:
-if(node.childNodes[i].tagName&&node.childNodes[i].tagName.toLowerCase()=="br"){
-_58e+="\n";
-}else{
-_58e+=dojo.html.renderedTextContent(node.childNodes[i]);
-}
-break;
-}
-break;
-case 3:
-case 2:
-case 4:
-var text=node.childNodes[i].nodeValue;
-var _592="unknown";
-try{
-_592=dojo.html.getStyle(node,"text-transform");
-}
-catch(E){
-}
-switch(_592){
-case "capitalize":
-var _593=text.split(" ");
-for(var i=0;i<_593.length;i++){
-_593[i]=_593[i].charAt(0).toUpperCase()+_593[i].substring(1);
-}
-text=_593.join(" ");
-break;
-case "uppercase":
-text=text.toUpperCase();
-break;
-case "lowercase":
-text=text.toLowerCase();
-break;
-default:
-break;
-}
-switch(_592){
-case "nowrap":
-break;
-case "pre-wrap":
-break;
-case "pre-line":
-break;
-case "pre":
-break;
-default:
-text=text.replace(/\s+/," ");
-if(/\s$/.test(_58e)){
-text.replace(/^\s/,"");
-}
-break;
-}
-_58e+=text;
-break;
-default:
-break;
-}
-}
-return _58e;
-};
-dojo.html.createNodesFromText=function(txt,trim){
-if(trim){
-txt=txt.replace(/^\s+|\s+$/g,"");
-}
-var tn=dojo.doc().createElement("div");
-tn.style.visibility="hidden";
-dojo.body().appendChild(tn);
-var _597="none";
-if((/^<t[dh][\s\r\n>]/i).test(txt.replace(/^\s+/))){
-txt="<table><tbody><tr>"+txt+"</tr></tbody></table>";
-_597="cell";
-}else{
-if((/^<tr[\s\r\n>]/i).test(txt.replace(/^\s+/))){
-txt="<table><tbody>"+txt+"</tbody></table>";
-_597="row";
-}else{
-if((/^<(thead|tbody|tfoot)[\s\r\n>]/i).test(txt.replace(/^\s+/))){
-txt="<table>"+txt+"</table>";
-_597="section";
-}
-}
-}
-tn.innerHTML=txt;
-if(tn["normalize"]){
-tn.normalize();
-}
-var _598=null;
-switch(_597){
-case "cell":
-_598=tn.getElementsByTagName("tr")[0];
-break;
-case "row":
-_598=tn.getElementsByTagName("tbody")[0];
-break;
-case "section":
-_598=tn.getElementsByTagName("table")[0];
-break;
-default:
-_598=tn;
-break;
-}
-var _599=[];
-for(var x=0;x<_598.childNodes.length;x++){
-_599.push(_598.childNodes[x].cloneNode(true));
-}
-tn.style.display="none";
-dojo.html.destroyNode(tn);
-return _599;
-};
-dojo.html.placeOnScreen=function(node,_59c,_59d,_59e,_59f,_5a0,_5a1){
-if(_59c instanceof Array||typeof _59c=="array"){
-_5a1=_5a0;
-_5a0=_59f;
-_59f=_59e;
-_59e=_59d;
-_59d=_59c[1];
-_59c=_59c[0];
-}
-if(_5a0 instanceof String||typeof _5a0=="string"){
-_5a0=_5a0.split(",");
-}
-if(!isNaN(_59e)){
-_59e=[Number(_59e),Number(_59e)];
-}else{
-if(!(_59e instanceof Array||typeof _59e=="array")){
-_59e=[0,0];
-}
-}
-var _5a2=dojo.html.getScroll().offset;
-var view=dojo.html.getViewport();
-node=dojo.byId(node);
-var _5a4=node.style.display;
-node.style.display="";
-var bb=dojo.html.getBorderBox(node);
-var w=bb.width;
-var h=bb.height;
-node.style.display=_5a4;
-if(!(_5a0 instanceof Array||typeof _5a0=="array")){
-_5a0=["TL"];
-}
-var _5a8,_5a9,_5aa=Infinity,_5ab;
-for(var _5ac=0;_5ac<_5a0.length;++_5ac){
-var _5ad=_5a0[_5ac];
-var _5ae=true;
-var tryX=_59c-(_5ad.charAt(1)=="L"?0:w)+_59e[0]*(_5ad.charAt(1)=="L"?1:-1);
-var tryY=_59d-(_5ad.charAt(0)=="T"?0:h)+_59e[1]*(_5ad.charAt(0)=="T"?1:-1);
-if(_59f){
-tryX-=_5a2.x;
-tryY-=_5a2.y;
-}
-if(tryX<0){
-tryX=0;
-_5ae=false;
-}
-if(tryY<0){
-tryY=0;
-_5ae=false;
-}
-var x=tryX+w;
-if(x>view.width){
-x=view.width-w;
-_5ae=false;
-}else{
-x=tryX;
-}
-x=Math.max(_59e[0],x)+_5a2.x;
-var y=tryY+h;
-if(y>view.height){
-y=view.height-h;
-_5ae=false;
-}else{
-y=tryY;
-}
-y=Math.max(_59e[1],y)+_5a2.y;
-if(_5ae){
-_5a8=x;
-_5a9=y;
-_5aa=0;
-_5ab=_5ad;
-break;
-}else{
-var dist=Math.pow(x-tryX-_5a2.x,2)+Math.pow(y-tryY-_5a2.y,2);
-if(_5aa>dist){
-_5aa=dist;
-_5a8=x;
-_5a9=y;
-_5ab=_5ad;
-}
-}
-}
-if(!_5a1){
-node.style.left=_5a8+"px";
-node.style.top=_5a9+"px";
-}
-return {left:_5a8,top:_5a9,x:_5a8,y:_5a9,dist:_5aa,corner:_5ab};
-};
-dojo.html.placeOnScreenPoint=function(node,_5b5,_5b6,_5b7,_5b8){
-dojo.deprecated("dojo.html.placeOnScreenPoint","use dojo.html.placeOnScreen() instead","0.5");
-return dojo.html.placeOnScreen(node,_5b5,_5b6,_5b7,_5b8,["TL","TR","BL","BR"]);
-};
-dojo.html.placeOnScreenAroundElement=function(node,_5ba,_5bb,_5bc,_5bd,_5be){
-var best,_5c0=Infinity;
-_5ba=dojo.byId(_5ba);
-var _5c1=_5ba.style.display;
-_5ba.style.display="";
-var mb=dojo.html.getElementBox(_5ba,_5bc);
-var _5c3=mb.width;
-var _5c4=mb.height;
-var _5c5=dojo.html.getAbsolutePosition(_5ba,true,_5bc);
-_5ba.style.display=_5c1;
-for(var _5c6 in _5bd){
-var pos,_5c8,_5c9;
-var _5ca=_5bd[_5c6];
-_5c8=_5c5.x+(_5c6.charAt(1)=="L"?0:_5c3);
-_5c9=_5c5.y+(_5c6.charAt(0)=="T"?0:_5c4);
-pos=dojo.html.placeOnScreen(node,_5c8,_5c9,_5bb,true,_5ca,true);
-if(pos.dist==0){
-best=pos;
-break;
-}else{
-if(_5c0>pos.dist){
-_5c0=pos.dist;
-best=pos;
-}
-}
-}
-if(!_5be){
-node.style.left=best.left+"px";
-node.style.top=best.top+"px";
-}
-return best;
-};
-dojo.html.scrollIntoView=function(node){
-if(!node){
-return;
-}
+dojo.html.getUnitValue.bad={value:NaN,units:""};
 if(dojo.render.html.ie){
-if(dojo.html.getBorderBox(node.parentNode).height<=node.parentNode.scrollHeight){
-node.scrollIntoView(false);
-}
-}else{
-if(dojo.render.html.mozilla){
-node.scrollIntoView(false);
-}else{
-var _5cc=node.parentNode;
-var _5cd=_5cc.scrollTop+dojo.html.getBorderBox(_5cc).height;
-var _5ce=node.offsetTop+dojo.html.getMarginBox(node).height;
-if(_5cd<_5ce){
-_5cc.scrollTop+=(_5ce-_5cd);
-}else{
-if(_5cc.scrollTop>node.offsetTop){
-_5cc.scrollTop-=(_5cc.scrollTop-node.offsetTop);
-}
-}
-}
-}
-};
-dojo.provide("dojo.gfx.color");
-dojo.gfx.color.Color=function(r,g,b,a){
-if(dojo.lang.isArray(r)){
-this.r=r[0];
-this.g=r[1];
-this.b=r[2];
-this.a=r[3]||1;
-}else{
-if(dojo.lang.isString(r)){
-var rgb=dojo.gfx.color.extractRGB(r);
-this.r=rgb[0];
-this.g=rgb[1];
-this.b=rgb[2];
-this.a=g||1;
-}else{
-if(r instanceof dojo.gfx.color.Color){
-this.r=r.r;
-this.b=r.b;
-this.g=r.g;
-this.a=r.a;
-}else{
-this.r=r;
-this.g=g;
-this.b=b;
-this.a=a;
-}
-}
-}
-};
-dojo.gfx.color.Color.fromArray=function(arr){
-return new dojo.gfx.color.Color(arr[0],arr[1],arr[2],arr[3]);
-};
-dojo.extend(dojo.gfx.color.Color,{toRgb:function(_5d5){
-if(_5d5){
-return this.toRgba();
-}else{
-return [this.r,this.g,this.b];
-}
-},toRgba:function(){
-return [this.r,this.g,this.b,this.a];
-},toHex:function(){
-return dojo.gfx.color.rgb2hex(this.toRgb());
-},toCss:function(){
-return "rgb("+this.toRgb().join()+")";
-},toString:function(){
-return this.toHex();
-},blend:function(_5d6,_5d7){
-var rgb=null;
-if(dojo.lang.isArray(_5d6)){
-rgb=_5d6;
-}else{
-if(_5d6 instanceof dojo.gfx.color.Color){
-rgb=_5d6.toRgb();
-}else{
-rgb=new dojo.gfx.color.Color(_5d6).toRgb();
-}
-}
-return dojo.gfx.color.blend(this.toRgb(),rgb,_5d7);
-}});
-dojo.gfx.color.named={white:[255,255,255],black:[0,0,0],red:[255,0,0],green:[0,255,0],lime:[0,255,0],blue:[0,0,255],navy:[0,0,128],gray:[128,128,128],silver:[192,192,192]};
-dojo.gfx.color.blend=function(a,b,_5db){
-if(typeof a=="string"){
-return dojo.gfx.color.blendHex(a,b,_5db);
-}
-if(!_5db){
-_5db=0;
-}
-_5db=Math.min(Math.max(-1,_5db),1);
-_5db=((_5db+1)/2);
-var c=[];
-for(var x=0;x<3;x++){
-c[x]=parseInt(b[x]+((a[x]-b[x])*_5db));
-}
-return c;
-};
-dojo.gfx.color.blendHex=function(a,b,_5e0){
-return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_5e0));
-};
-dojo.gfx.color.extractRGB=function(_5e1){
-var hex="0123456789abcdef";
-_5e1=_5e1.toLowerCase();
-if(_5e1.indexOf("rgb")==0){
-var _5e3=_5e1.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-var ret=_5e3.splice(1,3);
-return ret;
-}else{
-var _5e5=dojo.gfx.color.hex2rgb(_5e1);
-if(_5e5){
-return _5e5;
-}else{
-return dojo.gfx.color.named[_5e1]||[255,255,255];
-}
-}
-};
-dojo.gfx.color.hex2rgb=function(hex){
-var _5e7="0123456789ABCDEF";
-var rgb=new Array(3);
-if(hex.indexOf("#")==0){
-hex=hex.substring(1);
-}
-hex=hex.toUpperCase();
-if(hex.replace(new RegExp("["+_5e7+"]","g"),"")!=""){
-return null;
-}
-if(hex.length==3){
-rgb[0]=hex.charAt(0)+hex.charAt(0);
-rgb[1]=hex.charAt(1)+hex.charAt(1);
-rgb[2]=hex.charAt(2)+hex.charAt(2);
-}else{
-rgb[0]=hex.substring(0,2);
-rgb[1]=hex.substring(2,4);
-rgb[2]=hex.substring(4);
-}
-for(var i=0;i<rgb.length;i++){
-rgb[i]=_5e7.indexOf(rgb[i].charAt(0))*16+_5e7.indexOf(rgb[i].charAt(1));
-}
-return rgb;
-};
-dojo.gfx.color.rgb2hex=function(r,g,b){
-if(dojo.lang.isArray(r)){
-g=r[1]||0;
-b=r[2]||0;
-r=r[0]||0;
-}
-var ret=dojo.lang.map([r,g,b],function(x){
-x=new Number(x);
-var s=x.toString(16);
-while(s.length<2){
-s="0"+s;
-}
-return s;
-});
-ret.unshift("#");
-return ret.join("");
-};
-dojo.provide("dojo.lfx.Animation");
-dojo.lfx.Line=function(_5f0,end){
-this.start=_5f0;
-this.end=end;
-if(dojo.lang.isArray(_5f0)){
-var diff=[];
-dojo.lang.forEach(this.start,function(s,i){
-diff[i]=this.end[i]-s;
-},this);
-this.getValue=function(n){
-var res=[];
-dojo.lang.forEach(this.start,function(s,i){
-res[i]=(diff[i]*n)+s;
-},this);
-return res;
-};
-}else{
-var diff=end-_5f0;
-this.getValue=function(n){
-return (diff*n)+this.start;
-};
-}
-};
-dojo.lfx.easeDefault=function(n){
-if(dojo.render.html.khtml){
-return (parseFloat("0.5")+((Math.sin((n+parseFloat("1.5"))*Math.PI))/2));
-}else{
-return (0.5+((Math.sin((n+1.5)*Math.PI))/2));
-}
-};
-dojo.lfx.easeIn=function(n){
-return Math.pow(n,3);
-};
-dojo.lfx.easeOut=function(n){
-return (1-Math.pow(1-n,3));
-};
-dojo.lfx.easeInOut=function(n){
-return ((3*Math.pow(n,2))-(2*Math.pow(n,3)));
-};
-dojo.lfx.IAnimation=function(){
-};
-dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:25,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,connect:function(evt,_5ff,_600){
-if(!_600){
-_600=_5ff;
-_5ff=this;
-}
-_600=dojo.lang.hitch(_5ff,_600);
-var _601=this[evt]||function(){
-};
-this[evt]=function(){
-var ret=_601.apply(this,arguments);
-_600.apply(this,arguments);
-return ret;
-};
-return this;
-},fire:function(evt,args){
-if(this[evt]){
-this[evt].apply(this,(args||[]));
-}
-return this;
-},repeat:function(_605){
-this.repeatCount=_605;
-return this;
-},_active:false,_paused:false});
-dojo.lfx.Animation=function(_606,_607,_608,_609,_60a,rate){
-dojo.lfx.IAnimation.call(this);
-if(dojo.lang.isNumber(_606)||(!_606&&_607.getValue)){
-rate=_60a;
-_60a=_609;
-_609=_608;
-_608=_607;
-_607=_606;
-_606=null;
-}else{
-if(_606.getValue||dojo.lang.isArray(_606)){
-rate=_609;
-_60a=_608;
-_609=_607;
-_608=_606;
-_607=null;
-_606=null;
-}
-}
-if(dojo.lang.isArray(_608)){
-this.curve=new dojo.lfx.Line(_608[0],_608[1]);
-}else{
-this.curve=_608;
-}
-if(_607!=null&&_607>0){
-this.duration=_607;
-}
-if(_60a){
-this.repeatCount=_60a;
-}
-if(rate){
-this.rate=rate;
-}
-if(_606){
-dojo.lang.forEach(["handler","beforeBegin","onBegin","onEnd","onPlay","onStop","onAnimate"],function(item){
-if(_606[item]){
-this.connect(item,_606[item]);
-}
-},this);
-}
-if(_609&&dojo.lang.isFunction(_609)){
-this.easing=_609;
-}
-};
-dojo.inherits(dojo.lfx.Animation,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_60d,_60e){
-if(_60e){
-clearTimeout(this._timer);
-this._active=false;
-this._paused=false;
-this._percent=0;
-}else{
-if(this._active&&!this._paused){
-return this;
-}
-}
-this.fire("handler",["beforeBegin"]);
-this.fire("beforeBegin");
-if(_60d>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_60e);
-}),_60d);
-return this;
-}
-this._startTime=new Date().valueOf();
-if(this._paused){
-this._startTime-=(this.duration*this._percent/100);
-}
-this._endTime=this._startTime+this.duration;
-this._active=true;
-this._paused=false;
-var step=this._percent/100;
-var _610=this.curve.getValue(step);
-if(this._percent==0){
-if(!this._startRepeatCount){
-this._startRepeatCount=this.repeatCount;
-}
-this.fire("handler",["begin",_610]);
-this.fire("onBegin",[_610]);
-}
-this.fire("handler",["play",_610]);
-this.fire("onPlay",[_610]);
-this._cycle();
-return this;
-},pause:function(){
-clearTimeout(this._timer);
-if(!this._active){
-return this;
-}
-this._paused=true;
-var _611=this.curve.getValue(this._percent/100);
-this.fire("handler",["pause",_611]);
-this.fire("onPause",[_611]);
-return this;
-},gotoPercent:function(pct,_613){
-clearTimeout(this._timer);
-this._active=true;
-this._paused=true;
-this._percent=pct;
-if(_613){
-this.play();
-}
-return this;
-},stop:function(_614){
-clearTimeout(this._timer);
-var step=this._percent/100;
-if(_614){
-step=1;
-}
-var _616=this.curve.getValue(step);
-this.fire("handler",["stop",_616]);
-this.fire("onStop",[_616]);
-this._active=false;
-this._paused=false;
-return this;
-},status:function(){
-if(this._active){
-return this._paused?"paused":"playing";
-}else{
-return "stopped";
-}
-return this;
-},_cycle:function(){
-clearTimeout(this._timer);
-if(this._active){
-var curr=new Date().valueOf();
-var step=(curr-this._startTime)/(this._endTime-this._startTime);
-if(step>=1){
-step=1;
-this._percent=100;
-}else{
-this._percent=step*100;
-}
-if((this.easing)&&(dojo.lang.isFunction(this.easing))){
-step=this.easing(step);
-}
-var _619=this.curve.getValue(step);
-this.fire("handler",["animate",_619]);
-this.fire("onAnimate",[_619]);
-if(step<1){
-this._timer=setTimeout(dojo.lang.hitch(this,"_cycle"),this.rate);
-}else{
-this._active=false;
-this.fire("handler",["end"]);
-this.fire("onEnd");
-if(this.repeatCount>0){
-this.repeatCount--;
-this.play(null,true);
-}else{
-if(this.repeatCount==-1){
-this.play(null,true);
-}else{
-if(this._startRepeatCount){
-this.repeatCount=this._startRepeatCount;
-this._startRepeatCount=0;
-}
-}
-}
-}
-}
-return this;
-}});
-dojo.lfx.Combine=function(_61a){
-dojo.lfx.IAnimation.call(this);
-this._anims=[];
-this._animsEnded=0;
-var _61b=arguments;
-if(_61b.length==1&&(dojo.lang.isArray(_61b[0])||dojo.lang.isArrayLike(_61b[0]))){
-_61b=_61b[0];
-}
-dojo.lang.forEach(_61b,function(anim){
-this._anims.push(anim);
-anim.connect("onEnd",dojo.lang.hitch(this,"_onAnimsEnded"));
-},this);
-};
-dojo.inherits(dojo.lfx.Combine,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_61d,_61e){
-if(!this._anims.length){
-return this;
-}
-this.fire("beforeBegin");
-if(_61d>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_61e);
-}),_61d);
-return this;
-}
-if(_61e||this._anims[0].percent==0){
-this.fire("onBegin");
-}
-this.fire("onPlay");
-this._animsCall("play",null,_61e);
-return this;
-},pause:function(){
-this.fire("onPause");
-this._animsCall("pause");
-return this;
-},stop:function(_61f){
-this.fire("onStop");
-this._animsCall("stop",_61f);
-return this;
-},_onAnimsEnded:function(){
-this._animsEnded++;
-if(this._animsEnded>=this._anims.length){
-this.fire("onEnd");
-}
-return this;
-},_animsCall:function(_620){
-var args=[];
-if(arguments.length>1){
-for(var i=1;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-}
-var _623=this;
-dojo.lang.forEach(this._anims,function(anim){
-anim[_620](args);
-},_623);
-return this;
-}});
-dojo.lfx.Chain=function(_625){
-dojo.lfx.IAnimation.call(this);
-this._anims=[];
-this._currAnim=-1;
-var _626=arguments;
-if(_626.length==1&&(dojo.lang.isArray(_626[0])||dojo.lang.isArrayLike(_626[0]))){
-_626=_626[0];
-}
-var _627=this;
-dojo.lang.forEach(_626,function(anim,i,_62a){
-this._anims.push(anim);
-if(i<_62a.length-1){
-anim.connect("onEnd",dojo.lang.hitch(this,"_playNext"));
-}else{
-anim.connect("onEnd",dojo.lang.hitch(this,function(){
-this.fire("onEnd");
-}));
-}
-},this);
-};
-dojo.inherits(dojo.lfx.Chain,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_62b,_62c){
-if(!this._anims.length){
-return this;
-}
-if(_62c||!this._anims[this._currAnim]){
-this._currAnim=0;
-}
-var _62d=this._anims[this._currAnim];
-this.fire("beforeBegin");
-if(_62b>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_62c);
-}),_62b);
-return this;
-}
-if(_62d){
-if(this._currAnim==0){
-this.fire("handler",["begin",this._currAnim]);
-this.fire("onBegin",[this._currAnim]);
-}
-this.fire("onPlay",[this._currAnim]);
-_62d.play(null,_62c);
-}
-return this;
-},pause:function(){
-if(this._anims[this._currAnim]){
-this._anims[this._currAnim].pause();
-this.fire("onPause",[this._currAnim]);
-}
-return this;
-},playPause:function(){
-if(this._anims.length==0){
-return this;
-}
-if(this._currAnim==-1){
-this._currAnim=0;
-}
-var _62e=this._anims[this._currAnim];
-if(_62e){
-if(!_62e._active||_62e._paused){
-this.play();
-}else{
-this.pause();
-}
-}
-return this;
-},stop:function(){
-var _62f=this._anims[this._currAnim];
-if(_62f){
-_62f.stop();
-this.fire("onStop",[this._currAnim]);
-}
-return _62f;
-},_playNext:function(){
-if(this._currAnim==-1||this._anims.length==0){
-return this;
-}
-this._currAnim++;
-if(this._anims[this._currAnim]){
-this._anims[this._currAnim].play(null,true);
-}
-return this;
-}});
-dojo.lfx.combine=function(_630){
-var _631=arguments;
-if(dojo.lang.isArray(arguments[0])){
-_631=arguments[0];
-}
-if(_631.length==1){
-return _631[0];
-}
-return new dojo.lfx.Combine(_631);
-};
-dojo.lfx.chain=function(_632){
-var _633=arguments;
-if(dojo.lang.isArray(arguments[0])){
-_633=arguments[0];
-}
-if(_633.length==1){
-return _633[0];
-}
-return new dojo.lfx.Chain(_633);
-};
-dojo.provide("dojo.html.color");
-dojo.html.getBackgroundColor=function(node){
-node=dojo.byId(node);
-var _635;
-do{
-_635=dojo.html.getStyle(node,"background-color");
-if(_635.toLowerCase()=="rgba(0, 0, 0, 0)"){
-_635="transparent";
-}
-if(node==document.getElementsByTagName("body")[0]){
-node=null;
-break;
-}
-node=node.parentNode;
-}while(node&&dojo.lang.inArray(["transparent",""],_635));
-if(_635=="transparent"){
-_635=[255,255,255,0];
-}else{
-_635=dojo.gfx.color.extractRGB(_635);
-}
-return _635;
-};
-dojo.provide("dojo.lfx.html");
-dojo.lfx.html._byId=function(_636){
-if(!_636){
-return [];
-}
-if(dojo.lang.isArrayLike(_636)){
-if(!_636.alreadyChecked){
-var n=[];
-dojo.lang.forEach(_636,function(node){
-n.push(dojo.byId(node));
-});
-n.alreadyChecked=true;
-return n;
-}else{
-return _636;
-}
-}else{
-var n=[];
-n.push(dojo.byId(_636));
-n.alreadyChecked=true;
-return n;
-}
-};
-dojo.lfx.html.propertyAnimation=function(_639,_63a,_63b,_63c,_63d){
-_639=dojo.lfx.html._byId(_639);
-var _63e={"propertyMap":_63a,"nodes":_639,"duration":_63b,"easing":_63c||dojo.lfx.easeDefault};
-var _63f=function(args){
-if(args.nodes.length==1){
-var pm=args.propertyMap;
-if(!dojo.lang.isArray(args.propertyMap)){
-var parr=[];
-for(var _643 in pm){
-pm[_643].property=_643;
-parr.push(pm[_643]);
-}
-pm=args.propertyMap=parr;
-}
-dojo.lang.forEach(pm,function(prop){
-if(dj_undef("start",prop)){
-if(prop.property!="opacity"){
-prop.start=parseInt(dojo.html.getComputedStyle(args.nodes[0],prop.property));
-}else{
-prop.start=dojo.html.getOpacity(args.nodes[0]);
-}
-}
-});
-}
-};
-var _645=function(_646){
-var _647=[];
-dojo.lang.forEach(_646,function(c){
-_647.push(Math.round(c));
-});
-return _647;
-};
-var _649=function(n,_64b){
-n=dojo.byId(n);
-if(!n||!n.style){
-return;
-}
-for(var s in _64b){
-try{
-if(s=="opacity"){
-dojo.html.setOpacity(n,_64b[s]);
-}else{
-n.style[s]=_64b[s];
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-};
-var _64d=function(_64e){
-this._properties=_64e;
-this.diffs=new Array(_64e.length);
-dojo.lang.forEach(_64e,function(prop,i){
-if(dojo.lang.isFunction(prop.start)){
-prop.start=prop.start(prop,i);
-}
-if(dojo.lang.isFunction(prop.end)){
-prop.end=prop.end(prop,i);
-}
-if(dojo.lang.isArray(prop.start)){
-this.diffs[i]=null;
-}else{
-if(prop.start instanceof dojo.gfx.color.Color){
-prop.startRgb=prop.start.toRgb();
-prop.endRgb=prop.end.toRgb();
-}else{
-this.diffs[i]=prop.end-prop.start;
-}
-}
-},this);
-this.getValue=function(n){
-var ret={};
-dojo.lang.forEach(this._properties,function(prop,i){
-var _655=null;
-if(dojo.lang.isArray(prop.start)){
-}else{
-if(prop.start instanceof dojo.gfx.color.Color){
-_655=(prop.units||"rgb")+"(";
-for(var j=0;j<prop.startRgb.length;j++){
-_655+=Math.round(((prop.endRgb[j]-prop.startRgb[j])*n)+prop.startRgb[j])+(j<prop.startRgb.length-1?",":"");
-}
-_655+=")";
-}else{
-_655=((this.diffs[i])*n)+prop.start+(prop.property!="opacity"?prop.units||"px":"");
-}
-}
-ret[dojo.html.toCamelCase(prop.property)]=_655;
-},this);
-return ret;
-};
-};
-var anim=new dojo.lfx.Animation({beforeBegin:function(){
-_63f(_63e);
-anim.curve=new _64d(_63e.propertyMap);
-},onAnimate:function(_658){
-dojo.lang.forEach(_63e.nodes,function(node){
-_649(node,_658);
-});
-}},_63e.duration,null,_63e.easing);
-if(_63d){
-for(var x in _63d){
-if(dojo.lang.isFunction(_63d[x])){
-anim.connect(x,anim,_63d[x]);
-}
-}
-}
-return anim;
-};
-dojo.lfx.html._makeFadeable=function(_65b){
-var _65c=function(node){
-if(dojo.render.html.ie){
-if((node.style.zoom.length==0)&&(dojo.html.getStyle(node,"zoom")=="normal")){
-node.style.zoom="1";
-}
-if((node.style.width.length==0)&&(dojo.html.getStyle(node,"width")=="auto")){
-node.style.width="auto";
-}
-}
-};
-if(dojo.lang.isArrayLike(_65b)){
-dojo.lang.forEach(_65b,_65c);
-}else{
-_65c(_65b);
-}
-};
-dojo.lfx.html.fade=function(_65e,_65f,_660,_661,_662){
-_65e=dojo.lfx.html._byId(_65e);
-var _663={property:"opacity"};
-if(!dj_undef("start",_65f)){
-_663.start=_65f.start;
-}else{
-_663.start=function(){
-return dojo.html.getOpacity(_65e[0]);
-};
-}
-if(!dj_undef("end",_65f)){
-_663.end=_65f.end;
-}else{
-dojo.raise("dojo.lfx.html.fade needs an end value");
-}
-var anim=dojo.lfx.propertyAnimation(_65e,[_663],_660,_661);
-anim.connect("beforeBegin",function(){
-dojo.lfx.html._makeFadeable(_65e);
-});
-if(_662){
-anim.connect("onEnd",function(){
-_662(_65e,anim);
-});
-}
-return anim;
-};
-dojo.lfx.html.fadeIn=function(_665,_666,_667,_668){
-return dojo.lfx.html.fade(_665,{end:1},_666,_667,_668);
-};
-dojo.lfx.html.fadeOut=function(_669,_66a,_66b,_66c){
-return dojo.lfx.html.fade(_669,{end:0},_66a,_66b,_66c);
-};
-dojo.lfx.html.fadeShow=function(_66d,_66e,_66f,_670){
-_66d=dojo.lfx.html._byId(_66d);
-dojo.lang.forEach(_66d,function(node){
-dojo.html.setOpacity(node,0);
-});
-var anim=dojo.lfx.html.fadeIn(_66d,_66e,_66f,_670);
-anim.connect("beforeBegin",function(){
-if(dojo.lang.isArrayLike(_66d)){
-dojo.lang.forEach(_66d,dojo.html.show);
-}else{
-dojo.html.show(_66d);
-}
-});
-return anim;
-};
-dojo.lfx.html.fadeHide=function(_673,_674,_675,_676){
-var anim=dojo.lfx.html.fadeOut(_673,_674,_675,function(){
-if(dojo.lang.isArrayLike(_673)){
-dojo.lang.forEach(_673,dojo.html.hide);
-}else{
-dojo.html.hide(_673);
-}
-if(_676){
-_676(_673,anim);
-}
-});
-return anim;
-};
-dojo.lfx.html.wipeIn=function(_678,_679,_67a,_67b){
-_678=dojo.lfx.html._byId(_678);
-var _67c=[];
-dojo.lang.forEach(_678,function(node){
-var _67e={};
-var _67f,_680,_681;
-with(node.style){
-_67f=top;
-_680=left;
-_681=position;
-top="-9999px";
-left="-9999px";
-position="absolute";
-display="";
-}
-var _682=dojo.html.getBorderBox(node).height;
-with(node.style){
-top=_67f;
-left=_680;
-position=_681;
-display="none";
-}
-var anim=dojo.lfx.propertyAnimation(node,{"height":{start:1,end:function(){
-return _682;
-}}},_679,_67a);
-anim.connect("beforeBegin",function(){
-_67e.overflow=node.style.overflow;
-_67e.height=node.style.height;
-with(node.style){
-overflow="hidden";
-_682="1px";
-}
-dojo.html.show(node);
-});
-anim.connect("onEnd",function(){
-with(node.style){
-overflow=_67e.overflow;
-_682=_67e.height;
-}
-if(_67b){
-_67b(node,anim);
-}
-});
-_67c.push(anim);
-});
-return dojo.lfx.combine(_67c);
-};
-dojo.lfx.html.wipeOut=function(_684,_685,_686,_687){
-_684=dojo.lfx.html._byId(_684);
-var _688=[];
-dojo.lang.forEach(_684,function(node){
-var _68a={};
-var anim=dojo.lfx.propertyAnimation(node,{"height":{start:function(){
-return dojo.html.getContentBox(node).height;
-},end:1}},_685,_686,{"beforeBegin":function(){
-_68a.overflow=node.style.overflow;
-_68a.height=node.style.height;
-with(node.style){
-overflow="hidden";
-}
-dojo.html.show(node);
-},"onEnd":function(){
-dojo.html.hide(node);
-with(node.style){
-overflow=_68a.overflow;
-height=_68a.height;
-}
-if(_687){
-_687(node,anim);
-}
-}});
-_688.push(anim);
-});
-return dojo.lfx.combine(_688);
-};
-dojo.lfx.html.slideTo=function(_68c,_68d,_68e,_68f,_690){
-_68c=dojo.lfx.html._byId(_68c);
-var _691=[];
-var _692=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_68d)){
-dojo.deprecated("dojo.lfx.html.slideTo(node, array)","use dojo.lfx.html.slideTo(node, {top: value, left: value});","0.5");
-_68d={top:_68d[0],left:_68d[1]};
-}
-dojo.lang.forEach(_68c,function(node){
-var top=null;
-var left=null;
-var init=(function(){
-var _697=node;
-return function(){
-var pos=_692(_697,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_692(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_692(node,"left"))||0);
-if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_697,true);
-dojo.html.setStyleAttributes(_697,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-top=ret.y;
-left=ret.x;
-}
-};
-})();
-init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:(_68d.top||0)},"left":{start:left,end:(_68d.left||0)}},_68e,_68f,{"beforeBegin":init});
-if(_690){
-anim.connect("onEnd",function(){
-_690(_68c,anim);
-});
-}
-_691.push(anim);
-});
-return dojo.lfx.combine(_691);
-};
-dojo.lfx.html.slideBy=function(_69b,_69c,_69d,_69e,_69f){
-_69b=dojo.lfx.html._byId(_69b);
-var _6a0=[];
-var _6a1=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_69c)){
-dojo.deprecated("dojo.lfx.html.slideBy(node, array)","use dojo.lfx.html.slideBy(node, {top: value, left: value});","0.5");
-_69c={top:_69c[0],left:_69c[1]};
-}
-dojo.lang.forEach(_69b,function(node){
-var top=null;
-var left=null;
-var init=(function(){
-var _6a6=node;
-return function(){
-var pos=_6a1(_6a6,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_6a1(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_6a1(node,"left"))||0);
-if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_6a6,true);
-dojo.html.setStyleAttributes(_6a6,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-top=ret.y;
-left=ret.x;
-}
-};
-})();
-init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:top+(_69c.top||0)},"left":{start:left,end:left+(_69c.left||0)}},_69d,_69e).connect("beforeBegin",init);
-if(_69f){
-anim.connect("onEnd",function(){
-_69f(_69b,anim);
-});
-}
-_6a0.push(anim);
-});
-return dojo.lfx.combine(_6a0);
-};
-dojo.lfx.html.explode=function(_6aa,_6ab,_6ac,_6ad,_6ae){
-var h=dojo.html;
-_6aa=dojo.byId(_6aa);
-_6ab=dojo.byId(_6ab);
-var _6b0=h.toCoordinateObject(_6aa,true);
-var _6b1=document.createElement("div");
-h.copyStyle(_6b1,_6ab);
-if(_6ab.explodeClassName){
-_6b1.className=_6ab.explodeClassName;
-}
-with(_6b1.style){
-position="absolute";
-display="none";
-var _6b2=h.getStyle(_6aa,"background-color");
-backgroundColor=_6b2?_6b2.toLowerCase():"transparent";
-backgroundColor=(backgroundColor=="transparent")?"rgb(221, 221, 221)":backgroundColor;
-}
-dojo.body().appendChild(_6b1);
-with(_6ab.style){
-visibility="hidden";
-display="block";
-}
-var _6b3=h.toCoordinateObject(_6ab,true);
-with(_6ab.style){
-display="none";
-visibility="visible";
-}
-var _6b4={opacity:{start:0.5,end:1}};
-dojo.lang.forEach(["height","width","top","left"],function(type){
-_6b4[type]={start:_6b0[type],end:_6b3[type]};
-});
-var anim=new dojo.lfx.propertyAnimation(_6b1,_6b4,_6ac,_6ad,{"beforeBegin":function(){
-h.setDisplay(_6b1,"block");
-},"onEnd":function(){
-h.setDisplay(_6ab,"block");
-_6b1.parentNode.removeChild(_6b1);
-}});
-if(_6ae){
-anim.connect("onEnd",function(){
-_6ae(_6ab,anim);
-});
-}
-return anim;
-};
-dojo.lfx.html.implode=function(_6b7,end,_6b9,_6ba,_6bb){
-var h=dojo.html;
-_6b7=dojo.byId(_6b7);
-end=dojo.byId(end);
-var _6bd=dojo.html.toCoordinateObject(_6b7,true);
-var _6be=dojo.html.toCoordinateObject(end,true);
-var _6bf=document.createElement("div");
-dojo.html.copyStyle(_6bf,_6b7);
-if(_6b7.explodeClassName){
-_6bf.className=_6b7.explodeClassName;
-}
-dojo.html.setOpacity(_6bf,0.3);
-with(_6bf.style){
-position="absolute";
-display="none";
-backgroundColor=h.getStyle(_6b7,"background-color").toLowerCase();
-}
-dojo.body().appendChild(_6bf);
-var _6c0={opacity:{start:1,end:0.5}};
-dojo.lang.forEach(["height","width","top","left"],function(type){
-_6c0[type]={start:_6bd[type],end:_6be[type]};
-});
-var anim=new dojo.lfx.propertyAnimation(_6bf,_6c0,_6b9,_6ba,{"beforeBegin":function(){
-dojo.html.hide(_6b7);
-dojo.html.show(_6bf);
-},"onEnd":function(){
-_6bf.parentNode.removeChild(_6bf);
-}});
-if(_6bb){
-anim.connect("onEnd",function(){
-_6bb(_6b7,anim);
-});
-}
-return anim;
-};
-dojo.lfx.html.highlight=function(_6c3,_6c4,_6c5,_6c6,_6c7){
-_6c3=dojo.lfx.html._byId(_6c3);
-var _6c8=[];
-dojo.lang.forEach(_6c3,function(node){
-var _6ca=dojo.html.getBackgroundColor(node);
-var bg=dojo.html.getStyle(node,"background-color").toLowerCase();
-var _6cc=dojo.html.getStyle(node,"background-image");
-var _6cd=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
-while(_6ca.length>3){
-_6ca.pop();
-}
-var rgb=new dojo.gfx.color.Color(_6c4);
-var _6cf=new dojo.gfx.color.Color(_6ca);
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:rgb,end:_6cf}},_6c5,_6c6,{"beforeBegin":function(){
-if(_6cc){
-node.style.backgroundImage="none";
-}
-node.style.backgroundColor="rgb("+rgb.toRgb().join(",")+")";
-},"onEnd":function(){
-if(_6cc){
-node.style.backgroundImage=_6cc;
-}
-if(_6cd){
-node.style.backgroundColor="transparent";
-}
-if(_6c7){
-_6c7(node,anim);
-}
-}});
-_6c8.push(anim);
-});
-return dojo.lfx.combine(_6c8);
-};
-dojo.lfx.html.unhighlight=function(_6d1,_6d2,_6d3,_6d4,_6d5){
-_6d1=dojo.lfx.html._byId(_6d1);
-var _6d6=[];
-dojo.lang.forEach(_6d1,function(node){
-var _6d8=new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
-var rgb=new dojo.gfx.color.Color(_6d2);
-var _6da=dojo.html.getStyle(node,"background-image");
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:_6d8,end:rgb}},_6d3,_6d4,{"beforeBegin":function(){
-if(_6da){
-node.style.backgroundImage="none";
-}
-node.style.backgroundColor="rgb("+_6d8.toRgb().join(",")+")";
-},"onEnd":function(){
-if(_6d5){
-_6d5(node,anim);
-}
-}});
-_6d6.push(anim);
-});
-return dojo.lfx.combine(_6d6);
-};
-dojo.lang.mixin(dojo.lfx,dojo.lfx.html);
-dojo.provide("dojo.lfx.*");
-dojo.provide("dojo.lfx.toggle");
-dojo.lfx.toggle.plain={show:function(node,_6dd,_6de,_6df){
-dojo.html.show(node);
-if(dojo.lang.isFunction(_6df)){
-_6df();
-}
-},hide:function(node,_6e1,_6e2,_6e3){
-dojo.html.hide(node);
-if(dojo.lang.isFunction(_6e3)){
-_6e3();
-}
-}};
-dojo.lfx.toggle.fade={show:function(node,_6e5,_6e6,_6e7){
-dojo.lfx.fadeShow(node,_6e5,_6e6,_6e7).play();
-},hide:function(node,_6e9,_6ea,_6eb){
-dojo.lfx.fadeHide(node,_6e9,_6ea,_6eb).play();
-}};
-dojo.lfx.toggle.wipe={show:function(node,_6ed,_6ee,_6ef){
-dojo.lfx.wipeIn(node,_6ed,_6ee,_6ef).play();
-},hide:function(node,_6f1,_6f2,_6f3){
-dojo.lfx.wipeOut(node,_6f1,_6f2,_6f3).play();
-}};
-dojo.lfx.toggle.explode={show:function(node,_6f5,_6f6,_6f7,_6f8){
-dojo.lfx.explode(_6f8||{x:0,y:0,width:0,height:0},node,_6f5,_6f6,_6f7).play();
-},hide:function(node,_6fa,_6fb,_6fc,_6fd){
-dojo.lfx.implode(node,_6fd||{x:0,y:0,width:0,height:0},_6fa,_6fb,_6fc).play();
-}};
-dojo.provide("dojo.widget.HtmlWidget");
-dojo.declare("dojo.widget.HtmlWidget",dojo.widget.DomWidget,{templateCssPath:null,templatePath:null,lang:"",toggle:"plain",toggleDuration:150,initialize:function(args,frag){
-},postMixInProperties:function(args,frag){
-if(this.lang===""){
-this.lang=null;
-}
-this.toggleObj=dojo.lfx.toggle[this.toggle.toLowerCase()]||dojo.lfx.toggle.plain;
-},createNodesFromText:function(txt,wrap){
-return dojo.html.createNodesFromText(txt,wrap);
-},destroyRendering:function(_704){
-try{
-if(this.bgIframe){
-this.bgIframe.remove();
-delete this.bgIframe;
-}
-if(!_704&&this.domNode){
-dojo.event.browser.clean(this.domNode);
-}
-dojo.widget.HtmlWidget.superclass.destroyRendering.call(this);
-}
-catch(e){
-}
-},isShowing:function(){
-return dojo.html.isShowing(this.domNode);
-},toggleShowing:function(){
-if(this.isShowing()){
-this.hide();
-}else{
-this.show();
-}
-},show:function(){
-if(this.isShowing()){
-return;
-}
-this.animationInProgress=true;
-this.toggleObj.show(this.domNode,this.toggleDuration,null,dojo.lang.hitch(this,this.onShow),this.explodeSrc);
-},onShow:function(){
-this.animationInProgress=false;
-this.checkSize();
-},hide:function(){
-if(!this.isShowing()){
-return;
-}
-this.animationInProgress=true;
-this.toggleObj.hide(this.domNode,this.toggleDuration,null,dojo.lang.hitch(this,this.onHide),this.explodeSrc);
-},onHide:function(){
-this.animationInProgress=false;
-},_isResized:function(w,h){
-if(!this.isShowing()){
-return false;
-}
-var wh=dojo.html.getMarginBox(this.domNode);
-var _708=w||wh.width;
-var _709=h||wh.height;
-if(this.width==_708&&this.height==_709){
-return false;
-}
-this.width=_708;
-this.height=_709;
-return true;
-},checkSize:function(){
-if(!this._isResized()){
-return;
-}
-this.onResized();
-},resizeTo:function(w,h){
-dojo.html.setMarginBox(this.domNode,{width:w,height:h});
-if(this.isShowing()){
-this.onResized();
-}
-},resizeSoon:function(){
-if(this.isShowing()){
-dojo.lang.setTimeout(this,this.onResized,0);
-}
-},onResized:function(){
-dojo.lang.forEach(this.children,function(_70c){
-if(_70c.checkSize){
-_70c.checkSize();
-}
-});
-}});
-dojo.provide("dojo.widget.*");
-dojo.provide("dojo.string.common");
-dojo.string.trim=function(str,wh){
-if(!str.replace){
-return str;
-}
-if(!str.length){
-return str;
-}
-var re=(wh>0)?(/^\s+/):(wh<0)?(/\s+$/):(/^\s+|\s+$/g);
-return str.replace(re,"");
-};
-dojo.string.trimStart=function(str){
-return dojo.string.trim(str,1);
-};
-dojo.string.trimEnd=function(str){
-return dojo.string.trim(str,-1);
-};
-dojo.string.repeat=function(str,_713,_714){
-var out="";
-for(var i=0;i<_713;i++){
-out+=str;
-if(_714&&i<_713-1){
-out+=_714;
-}
-}
-return out;
-};
-dojo.string.pad=function(str,len,c,dir){
-var out=String(str);
-if(!c){
-c="0";
-}
-if(!dir){
-dir=1;
-}
-while(out.length<len){
-if(dir>0){
-out=c+out;
-}else{
-out+=c;
-}
-}
-return out;
-};
-dojo.string.padLeft=function(str,len,c){
-return dojo.string.pad(str,len,c,1);
-};
-dojo.string.padRight=function(str,len,c){
-return dojo.string.pad(str,len,c,-1);
-};
-dojo.provide("dojo.string");
-dojo.provide("dojo.io.common");
-dojo.io.transports=[];
-dojo.io.hdlrFuncNames=["load","error","timeout"];
-dojo.io.Request=function(url,_723,_724,_725){
-if((arguments.length==1)&&(arguments[0].constructor==Object)){
-this.fromKwArgs(arguments[0]);
-}else{
-this.url=url;
-if(_723){
-this.mimetype=_723;
-}
-if(_724){
-this.transport=_724;
-}
-if(arguments.length>=4){
-this.changeUrl=_725;
-}
-}
-};
-dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_728,_729){
-},error:function(type,_72b,_72c,_72d){
-},timeout:function(type,_72f,_730,_731){
-},handle:function(type,data,_734,_735){
-},timeoutSeconds:0,abort:function(){
-},fromKwArgs:function(_736){
-if(_736["url"]){
-_736.url=_736.url.toString();
-}
-if(_736["formNode"]){
-_736.formNode=dojo.byId(_736.formNode);
-}
-if(!_736["method"]&&_736["formNode"]&&_736["formNode"].method){
-_736.method=_736["formNode"].method;
-}
-if(!_736["handle"]&&_736["handler"]){
-_736.handle=_736.handler;
-}
-if(!_736["load"]&&_736["loaded"]){
-_736.load=_736.loaded;
-}
-if(!_736["changeUrl"]&&_736["changeURL"]){
-_736.changeUrl=_736.changeURL;
-}
-_736.encoding=dojo.lang.firstValued(_736["encoding"],djConfig["bindEncoding"],"");
-_736.sendTransport=dojo.lang.firstValued(_736["sendTransport"],djConfig["ioSendTransport"],false);
-var _737=dojo.lang.isFunction;
-for(var x=0;x<dojo.io.hdlrFuncNames.length;x++){
-var fn=dojo.io.hdlrFuncNames[x];
-if(_736[fn]&&_737(_736[fn])){
-continue;
-}
-if(_736["handle"]&&_737(_736["handle"])){
-_736[fn]=_736.handle;
-}
-}
-dojo.lang.mixin(this,_736);
-}});
-dojo.io.Error=function(msg,type,num){
-this.message=msg;
-this.type=type||"unknown";
-this.number=num||0;
-};
-dojo.io.transports.addTransport=function(name){
-this.push(name);
-this[name]=dojo.io[name];
-};
-dojo.io.bind=function(_73e){
-if(!(_73e instanceof dojo.io.Request)){
-try{
-_73e=new dojo.io.Request(_73e);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _73f="";
-if(_73e["transport"]){
-_73f=_73e["transport"];
-if(!this[_73f]){
-dojo.io.sendBindError(_73e,"No dojo.io.bind() transport with name '"+_73e["transport"]+"'.");
-return _73e;
-}
-if(!this[_73f].canHandle(_73e)){
-dojo.io.sendBindError(_73e,"dojo.io.bind() transport with name '"+_73e["transport"]+"' cannot handle this type of request.");
-return _73e;
-}
-}else{
-for(var x=0;x<dojo.io.transports.length;x++){
-var tmp=dojo.io.transports[x];
-if((this[tmp])&&(this[tmp].canHandle(_73e))){
-_73f=tmp;
-break;
-}
-}
-if(_73f==""){
-dojo.io.sendBindError(_73e,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
-return _73e;
-}
-}
-this[_73f].bind(_73e);
-_73e.bindSuccess=true;
-return _73e;
-};
-dojo.io.sendBindError=function(_742,_743){
-if((typeof _742.error=="function"||typeof _742.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
-var _744=new dojo.io.Error(_743);
-setTimeout(function(){
-_742[(typeof _742.error=="function")?"error":"handle"]("error",_744,null,_742);
-},50);
-}else{
-dojo.raise(_743);
-}
-};
-dojo.io.queueBind=function(_745){
-if(!(_745 instanceof dojo.io.Request)){
-try{
-_745=new dojo.io.Request(_745);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _746=_745.load;
-_745.load=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_746.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-var _748=_745.error;
-_745.error=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_748.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-dojo.io._bindQueue.push(_745);
-dojo.io._dispatchNextQueueBind();
-return _745;
-};
-dojo.io._dispatchNextQueueBind=function(){
-if(!dojo.io._queueBindInFlight){
-dojo.io._queueBindInFlight=true;
-if(dojo.io._bindQueue.length>0){
-dojo.io.bind(dojo.io._bindQueue.shift());
-}else{
-dojo.io._queueBindInFlight=false;
-}
-}
-};
-dojo.io._bindQueue=[];
-dojo.io._queueBindInFlight=false;
-dojo.io.argsFromMap=function(map,_74b,last){
-var enc=/utf/i.test(_74b||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _74e=[];
-var _74f=new Object();
-for(var name in map){
-var _751=function(elt){
-var val=enc(name)+"="+enc(elt);
-_74e[(last==name)?"push":"unshift"](val);
-};
-if(!_74f[name]){
-var _754=map[name];
-if(dojo.lang.isArray(_754)){
-dojo.lang.forEach(_754,_751);
-}else{
-_751(_754);
-}
-}
-}
-return _74e.join("&");
-};
-dojo.io.setIFrameSrc=function(_755,src,_757){
-try{
-var r=dojo.render.html;
-if(!_757){
-if(r.safari){
-_755.location=src;
-}else{
-frames[_755.name].location=src;
-}
-}else{
-var idoc;
-if(r.ie){
-idoc=_755.contentWindow.document;
-}else{
-if(r.safari){
-idoc=_755.document;
-}else{
-idoc=_755.contentWindow;
-}
-}
-if(!idoc){
-_755.location=src;
-return;
-}else{
-idoc.location.replace(src);
-}
-}
-}
-catch(e){
-dojo.debug(e);
-dojo.debug("setIFrameSrc: "+e);
-}
-};
-dojo.provide("dojo.string.extras");
-dojo.string.substituteParams=function(_75a,hash){
-var map=(typeof hash=="object")?hash:dojo.lang.toArray(arguments,1);
-return _75a.replace(/\%\{(\w+)\}/g,function(_75d,key){
-if(typeof (map[key])!="undefined"&&map[key]!=null){
-return map[key];
-}
-dojo.raise("Substitution not found: "+key);
-});
-};
-dojo.string.capitalize=function(str){
-if(!dojo.lang.isString(str)){
-return "";
-}
-if(arguments.length==0){
-str=this;
-}
-var _760=str.split(" ");
-for(var i=0;i<_760.length;i++){
-_760[i]=_760[i].charAt(0).toUpperCase()+_760[i].substring(1);
-}
-return _760.join(" ");
-};
-dojo.string.isBlank=function(str){
-if(!dojo.lang.isString(str)){
-return true;
-}
-return (dojo.string.trim(str).length==0);
-};
-dojo.string.encodeAscii=function(str){
-if(!dojo.lang.isString(str)){
-return str;
-}
-var ret="";
-var _765=escape(str);
-var _766,re=/%u([0-9A-F]{4})/i;
-while((_766=_765.match(re))){
-var num=Number("0x"+_766[1]);
-var _769=escape("&#"+num+";");
-ret+=_765.substring(0,_766.index)+_769;
-_765=_765.substring(_766.index+_766[0].length);
-}
-ret+=_765.replace(/\+/g,"%2B");
-return ret;
-};
-dojo.string.escape=function(type,str){
-var args=dojo.lang.toArray(arguments,1);
-switch(type.toLowerCase()){
-case "xml":
-case "html":
-case "xhtml":
-return dojo.string.escapeXml.apply(this,args);
-case "sql":
-return dojo.string.escapeSql.apply(this,args);
-case "regexp":
-case "regex":
-return dojo.string.escapeRegExp.apply(this,args);
-case "javascript":
-case "jscript":
-case "js":
-return dojo.string.escapeJavaScript.apply(this,args);
-case "ascii":
-return dojo.string.encodeAscii.apply(this,args);
-default:
-return str;
-}
-};
-dojo.string.escapeXml=function(str,_76e){
-str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_76e){
-str=str.replace(/'/gm,"&#39;");
-}
-return str;
-};
-dojo.string.escapeSql=function(str){
-return str.replace(/'/gm,"''");
-};
-dojo.string.escapeRegExp=function(str){
-return str.replace(/\\/gm,"\\\\").replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm,"\\$1");
-};
-dojo.string.escapeJavaScript=function(str){
-return str.replace(/(["'\f\b\n\t\r])/gm,"\\$1");
-};
-dojo.string.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.string.summary=function(str,len){
-if(!len||str.length<=len){
-return str;
-}
-return str.substring(0,len).replace(/\.+$/,"")+"...";
-};
-dojo.string.endsWith=function(str,end,_777){
-if(_777){
-str=str.toLowerCase();
-end=end.toLowerCase();
-}
-if((str.length-end.length)<0){
-return false;
-}
-return str.lastIndexOf(end)==str.length-end.length;
-};
-dojo.string.endsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.endsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.startsWith=function(str,_77b,_77c){
-if(_77c){
-str=str.toLowerCase();
-_77b=_77b.toLowerCase();
-}
-return str.indexOf(_77b)==0;
-};
-dojo.string.startsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.startsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.has=function(str){
-for(var i=1;i<arguments.length;i++){
-if(str.indexOf(arguments[i])>-1){
-return true;
-}
-}
-return false;
-};
-dojo.string.normalizeNewlines=function(text,_782){
-if(_782=="\n"){
-text=text.replace(/\r\n/g,"\n");
-text=text.replace(/\r/g,"\n");
-}else{
-if(_782=="\r"){
-text=text.replace(/\r\n/g,"\r");
-text=text.replace(/\n/g,"\r");
-}else{
-text=text.replace(/([^\r])\n/g,"$1\r\n").replace(/\r([^\n])/g,"\r\n$1");
-}
-}
-return text;
-};
-dojo.string.splitEscaped=function(str,_784){
-var _785=[];
-for(var i=0,_787=0;i<str.length;i++){
-if(str.charAt(i)=="\\"){
-i++;
-continue;
-}
-if(str.charAt(i)==_784){
-_785.push(str.substring(_787,i));
-_787=i+1;
-}
-}
-_785.push(str.substr(_787));
-return _785;
-};
-dojo.provide("dojo.undo.browser");
-try{
-if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
-}
-}
-catch(e){
-}
-if(dojo.render.html.opera){
-dojo.debug("Opera is not supported with dojo.undo.browser, so back/forward detection will not work.");
-}
-dojo.undo.browser={initialHref:(!dj_undef("window"))?window.location.href:"",initialHash:(!dj_undef("window"))?window.location.hash:"",moveForward:false,historyStack:[],forwardStack:[],historyIframe:null,bookmarkAnchor:null,locationTimer:null,setInitialState:function(args){
-this.initialState=this._createState(this.initialHref,args,this.initialHash);
-},addToHistory:function(args){
-this.forwardStack=[];
-var hash=null;
-var url=null;
-if(!this.historyIframe){
-this.historyIframe=window.frames["djhistory"];
-}
-if(!this.bookmarkAnchor){
-this.bookmarkAnchor=document.createElement("a");
-dojo.body().appendChild(this.bookmarkAnchor);
-this.bookmarkAnchor.style.display="none";
-}
-if(args["changeUrl"]){
-hash="#"+((args["changeUrl"]!==true)?args["changeUrl"]:(new Date()).getTime());
-if(this.historyStack.length==0&&this.initialState.urlHash==hash){
-this.initialState=this._createState(url,args,hash);
-return;
-}else{
-if(this.historyStack.length>0&&this.historyStack[this.historyStack.length-1].urlHash==hash){
-this.historyStack[this.historyStack.length-1]=this._createState(url,args,hash);
-return;
-}
-}
-this.changingUrl=true;
-setTimeout("window.location.href = '"+hash+"'; dojo.undo.browser.changingUrl = false;",1);
-this.bookmarkAnchor.href=hash;
-if(dojo.render.html.ie){
-url=this._loadIframeHistory();
-var _78c=args["back"]||args["backButton"]||args["handle"];
-var tcb=function(_78e){
-if(window.location.hash!=""){
-setTimeout("window.location.href = '"+hash+"';",1);
-}
-_78c.apply(this,[_78e]);
-};
-if(args["back"]){
-args.back=tcb;
-}else{
-if(args["backButton"]){
-args.backButton=tcb;
-}else{
-if(args["handle"]){
-args.handle=tcb;
-}
-}
-}
-var _78f=args["forward"]||args["forwardButton"]||args["handle"];
-var tfw=function(_791){
-if(window.location.hash!=""){
-window.location.href=hash;
-}
-if(_78f){
-_78f.apply(this,[_791]);
-}
-};
-if(args["forward"]){
-args.forward=tfw;
-}else{
-if(args["forwardButton"]){
-args.forwardButton=tfw;
-}else{
-if(args["handle"]){
-args.handle=tfw;
-}
-}
-}
-}else{
-if(dojo.render.html.moz){
-if(!this.locationTimer){
-this.locationTimer=setInterval("dojo.undo.browser.checkLocation();",200);
-}
-}
-}
-}else{
-url=this._loadIframeHistory();
-}
-this.historyStack.push(this._createState(url,args,hash));
-},checkLocation:function(){
-if(!this.changingUrl){
-var hsl=this.historyStack.length;
-if((window.location.hash==this.initialHash||window.location.href==this.initialHref)&&(hsl==1)){
-this.handleBackButton();
-return;
-}
-if(this.forwardStack.length>0){
-if(this.forwardStack[this.forwardStack.length-1].urlHash==window.location.hash){
-this.handleForwardButton();
-return;
-}
-}
-if((hsl>=2)&&(this.historyStack[hsl-2])){
-if(this.historyStack[hsl-2].urlHash==window.location.hash){
-this.handleBackButton();
-return;
-}
-}
-}
-},iframeLoaded:function(evt,_794){
-if(!dojo.render.html.opera){
-var _795=this._getUrlQuery(_794.href);
-if(_795==null){
-if(this.historyStack.length==1){
-this.handleBackButton();
-}
-return;
-}
-if(this.moveForward){
-this.moveForward=false;
-return;
-}
-if(this.historyStack.length>=2&&_795==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
-this.handleBackButton();
-}else{
-if(this.forwardStack.length>0&&_795==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
-this.handleForwardButton();
-}
-}
-}
-},handleBackButton:function(){
-var _796=this.historyStack.pop();
-if(!_796){
-return;
-}
-var last=this.historyStack[this.historyStack.length-1];
-if(!last&&this.historyStack.length==0){
-last=this.initialState;
-}
-if(last){
-if(last.kwArgs["back"]){
-last.kwArgs["back"]();
-}else{
-if(last.kwArgs["backButton"]){
-last.kwArgs["backButton"]();
-}else{
-if(last.kwArgs["handle"]){
-last.kwArgs.handle("back");
-}
-}
-}
-}
-this.forwardStack.push(_796);
-},handleForwardButton:function(){
-var last=this.forwardStack.pop();
-if(!last){
-return;
-}
-if(last.kwArgs["forward"]){
-last.kwArgs.forward();
-}else{
-if(last.kwArgs["forwardButton"]){
-last.kwArgs.forwardButton();
-}else{
-if(last.kwArgs["handle"]){
-last.kwArgs.handle("forward");
-}
-}
-}
-this.historyStack.push(last);
-},_createState:function(url,args,hash){
-return {"url":url,"kwArgs":args,"urlHash":hash};
-},_getUrlQuery:function(url){
-var _79d=url.split("?");
-if(_79d.length<2){
-return null;
-}else{
-return _79d[1];
-}
-},_loadIframeHistory:function(){
-var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
-this.moveForward=true;
-dojo.io.setIFrameSrc(this.historyIframe,url,false);
-return url;
-}};
-dojo.provide("dojo.io.BrowserIO");
-if(!dj_undef("window")){
-dojo.io.checkChildrenForFile=function(node){
-var _7a0=false;
-var _7a1=node.getElementsByTagName("input");
-dojo.lang.forEach(_7a1,function(_7a2){
-if(_7a0){
-return;
-}
-if(_7a2.getAttribute("type")=="file"){
-_7a0=true;
-}
-});
-return _7a0;
-};
-dojo.io.formHasFile=function(_7a3){
-return dojo.io.checkChildrenForFile(_7a3);
-};
-dojo.io.updateNode=function(node,_7a5){
-node=dojo.byId(node);
-var args=_7a5;
-if(dojo.lang.isString(_7a5)){
-args={url:_7a5};
-}
-args.mimetype="text/html";
-args.load=function(t,d,e){
-while(node.firstChild){
-dojo.dom.destroyNode(node.firstChild);
-}
-node.innerHTML=d;
-};
-dojo.io.bind(args);
-};
-dojo.io.formFilter=function(node){
-var type=(node.type||"").toLowerCase();
-return !node.disabled&&node.name&&!dojo.lang.inArray(["file","submit","image","reset","button"],type);
-};
-dojo.io.encodeForm=function(_7ac,_7ad,_7ae){
-if((!_7ac)||(!_7ac.tagName)||(!_7ac.tagName.toLowerCase()=="form")){
-dojo.raise("Attempted to encode a non-form element.");
-}
-if(!_7ae){
-_7ae=dojo.io.formFilter;
-}
-var enc=/utf/i.test(_7ad||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _7b0=[];
-for(var i=0;i<_7ac.elements.length;i++){
-var elm=_7ac.elements[i];
-if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_7ae(elm)){
-continue;
-}
-var name=enc(elm.name);
-var type=elm.type.toLowerCase();
-if(type=="select-multiple"){
-for(var j=0;j<elm.options.length;j++){
-if(elm.options[j].selected){
-_7b0.push(name+"="+enc(elm.options[j].value));
-}
-}
-}else{
-if(dojo.lang.inArray(["radio","checkbox"],type)){
-if(elm.checked){
-_7b0.push(name+"="+enc(elm.value));
-}
-}else{
-_7b0.push(name+"="+enc(elm.value));
-}
-}
-}
-var _7b6=_7ac.getElementsByTagName("input");
-for(var i=0;i<_7b6.length;i++){
-var _7b7=_7b6[i];
-if(_7b7.type.toLowerCase()=="image"&&_7b7.form==_7ac&&_7ae(_7b7)){
-var name=enc(_7b7.name);
-_7b0.push(name+"="+enc(_7b7.value));
-_7b0.push(name+".x=0");
-_7b0.push(name+".y=0");
-}
-}
-return _7b0.join("&")+"&";
-};
-dojo.io.FormBind=function(args){
-this.bindArgs={};
-if(args&&args.formNode){
-this.init(args);
-}else{
-if(args){
-this.init({formNode:args});
-}
-}
-};
-dojo.lang.extend(dojo.io.FormBind,{form:null,bindArgs:null,clickedButton:null,init:function(args){
-var form=dojo.byId(args.formNode);
-if(!form||!form.tagName||form.tagName.toLowerCase()!="form"){
-throw new Error("FormBind: Couldn't apply, invalid form");
-}else{
-if(this.form==form){
-return;
-}else{
-if(this.form){
-throw new Error("FormBind: Already applied to a form");
-}
-}
-}
-dojo.lang.mixin(this.bindArgs,args);
-this.form=form;
-this.connect(form,"onsubmit","submit");
-for(var i=0;i<form.elements.length;i++){
-var node=form.elements[i];
-if(node&&node.type&&dojo.lang.inArray(["submit","button"],node.type.toLowerCase())){
-this.connect(node,"onclick","click");
-}
-}
-var _7bd=form.getElementsByTagName("input");
-for(var i=0;i<_7bd.length;i++){
-var _7be=_7bd[i];
-if(_7be.type.toLowerCase()=="image"&&_7be.form==form){
-this.connect(_7be,"onclick","click");
-}
-}
-},onSubmit:function(form){
-return true;
-},submit:function(e){
-e.preventDefault();
-if(this.onSubmit(this.form)){
-dojo.io.bind(dojo.lang.mixin(this.bindArgs,{formFilter:dojo.lang.hitch(this,"formFilter")}));
-}
-},click:function(e){
-var node=e.currentTarget;
-if(node.disabled){
-return;
-}
-this.clickedButton=node;
-},formFilter:function(node){
-var type=(node.type||"").toLowerCase();
-var _7c5=false;
-if(node.disabled||!node.name){
-_7c5=false;
-}else{
-if(dojo.lang.inArray(["submit","button","image"],type)){
-if(!this.clickedButton){
-this.clickedButton=node;
-}
-_7c5=node==this.clickedButton;
-}else{
-_7c5=!dojo.lang.inArray(["file","submit","reset","button"],type);
-}
-}
-return _7c5;
-},connect:function(_7c6,_7c7,_7c8){
-if(dojo.evalObjPath("dojo.event.connect")){
-dojo.event.connect(_7c6,_7c7,this,_7c8);
-}else{
-var fcn=dojo.lang.hitch(this,_7c8);
-_7c6[_7c7]=function(e){
-if(!e){
-e=window.event;
-}
-if(!e.currentTarget){
-e.currentTarget=e.srcElement;
-}
-if(!e.preventDefault){
-e.preventDefault=function(){
-window.event.returnValue=false;
-};
-}
-fcn(e);
-};
-}
-}});
-dojo.io.XMLHTTPTransport=new function(){
-var _7cb=this;
-var _7cc={};
-this.useCache=false;
-this.preventCache=false;
-function getCacheKey(url,_7ce,_7cf){
-return url+"|"+_7ce+"|"+_7cf.toLowerCase();
-}
-function addToCache(url,_7d1,_7d2,http){
-_7cc[getCacheKey(url,_7d1,_7d2)]=http;
-}
-function getFromCache(url,_7d5,_7d6){
-return _7cc[getCacheKey(url,_7d5,_7d6)];
-}
-this.clearCache=function(){
-_7cc={};
-};
-function doLoad(_7d7,http,url,_7da,_7db){
-if(((http.status>=200)&&(http.status<300))||(http.status==304)||(location.protocol=="file:"&&(http.status==0||http.status==undefined))||(location.protocol=="chrome:"&&(http.status==0||http.status==undefined))){
-var ret;
-if(_7d7.method.toLowerCase()=="head"){
-var _7dd=http.getAllResponseHeaders();
-ret={};
-ret.toString=function(){
-return _7dd;
-};
-var _7de=_7dd.split(/[\r\n]+/g);
-for(var i=0;i<_7de.length;i++){
-var pair=_7de[i].match(/^([^:]+)\s*:\s*(.+)$/i);
-if(pair){
-ret[pair[1]]=pair[2];
-}
-}
-}else{
-if(_7d7.mimetype=="text/javascript"){
-try{
-ret=dj_eval(http.responseText);
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(http.responseText);
-ret=null;
-}
-}else{
-if(_7d7.mimetype=="text/json"||_7d7.mimetype=="application/json"){
-try{
-ret=dj_eval("("+http.responseText+")");
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(http.responseText);
-ret=false;
-}
-}else{
-if((_7d7.mimetype=="application/xml")||(_7d7.mimetype=="text/xml")){
-ret=http.responseXML;
-if(!ret||typeof ret=="string"||!http.getResponseHeader("Content-Type")){
-ret=dojo.dom.createDocumentFromText(http.responseText);
-}
-}else{
-ret=http.responseText;
-}
-}
-}
-}
-if(_7db){
-addToCache(url,_7da,_7d7.method,http);
-}
-_7d7[(typeof _7d7.load=="function")?"load":"handle"]("load",ret,http,_7d7);
-}else{
-var _7e1=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-_7d7[(typeof _7d7.error=="function")?"error":"handle"]("error",_7e1,http,_7d7);
-}
-}
-function setHeaders(http,_7e3){
-if(_7e3["headers"]){
-for(var _7e4 in _7e3["headers"]){
-if(_7e4.toLowerCase()=="content-type"&&!_7e3["contentType"]){
-_7e3["contentType"]=_7e3["headers"][_7e4];
-}else{
-http.setRequestHeader(_7e4,_7e3["headers"][_7e4]);
-}
-}
-}
-}
-this.inFlight=[];
-this.inFlightTimer=null;
-this.startWatchingInFlight=function(){
-if(!this.inFlightTimer){
-this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
-}
-};
-this.watchInFlight=function(){
-var now=null;
-if(!dojo.hostenv._blockAsync&&!_7cb._blockAsync){
-for(var x=this.inFlight.length-1;x>=0;x--){
-try{
-var tif=this.inFlight[x];
-if(!tif||tif.http._aborted||!tif.http.readyState){
-this.inFlight.splice(x,1);
-continue;
-}
-if(4==tif.http.readyState){
-this.inFlight.splice(x,1);
-doLoad(tif.req,tif.http,tif.url,tif.query,tif.useCache);
-}else{
-if(tif.startTime){
-if(!now){
-now=(new Date()).getTime();
-}
-if(tif.startTime+(tif.req.timeoutSeconds*1000)<now){
-if(typeof tif.http.abort=="function"){
-tif.http.abort();
-}
-this.inFlight.splice(x,1);
-tif.req[(typeof tif.req.timeout=="function")?"timeout":"handle"]("timeout",null,tif.http,tif.req);
-}
-}
-}
-}
-catch(e){
-try{
-var _7e8=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
-tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_7e8,tif.http,tif.req);
-}
-catch(e2){
-dojo.debug("XMLHttpTransport error callback failed: "+e2);
-}
-}
-}
-}
-clearTimeout(this.inFlightTimer);
-if(this.inFlight.length==0){
-this.inFlightTimer=null;
-return;
-}
-this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
-};
-var _7e9=dojo.hostenv.getXmlhttpObject()?true:false;
-this.canHandle=function(_7ea){
-return _7e9&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_7ea["mimetype"].toLowerCase()||""))&&!(_7ea["formNode"]&&dojo.io.formHasFile(_7ea["formNode"]));
-};
-this.multipartBoundary="45309FFF-BD65-4d50-99C9-36986896A96F";
-this.bind=function(_7eb){
-if(!_7eb["url"]){
-if(!_7eb["formNode"]&&(_7eb["backButton"]||_7eb["back"]||_7eb["changeUrl"]||_7eb["watchForURL"])&&(!djConfig.preventBackButtonFix)){
-dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request","Use dojo.undo.browser.addToHistory() instead.","0.4");
-dojo.undo.browser.addToHistory(_7eb);
-return true;
-}
-}
-var url=_7eb.url;
-var _7ed="";
-if(_7eb["formNode"]){
-var ta=_7eb.formNode.getAttribute("action");
-if((ta)&&(!_7eb["url"])){
-url=ta;
-}
-var tp=_7eb.formNode.getAttribute("method");
-if((tp)&&(!_7eb["method"])){
-_7eb.method=tp;
-}
-_7ed+=dojo.io.encodeForm(_7eb.formNode,_7eb.encoding,_7eb["formFilter"]);
-}
-if(url.indexOf("#")>-1){
-dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url);
-url=url.split("#")[0];
-}
-if(_7eb["file"]){
-_7eb.method="post";
-}
-if(!_7eb["method"]){
-_7eb.method="get";
-}
-if(_7eb.method.toLowerCase()=="get"){
-_7eb.multipart=false;
-}else{
-if(_7eb["file"]){
-_7eb.multipart=true;
-}else{
-if(!_7eb["multipart"]){
-_7eb.multipart=false;
-}
-}
-}
-if(_7eb["backButton"]||_7eb["back"]||_7eb["changeUrl"]){
-dojo.undo.browser.addToHistory(_7eb);
-}
-var _7f0=_7eb["content"]||{};
-if(_7eb.sendTransport){
-_7f0["dojo.transport"]="xmlhttp";
-}
-do{
-if(_7eb.postContent){
-_7ed=_7eb.postContent;
-break;
-}
-if(_7f0){
-_7ed+=dojo.io.argsFromMap(_7f0,_7eb.encoding);
-}
-if(_7eb.method.toLowerCase()=="get"||!_7eb.multipart){
-break;
-}
-var t=[];
-if(_7ed.length){
-var q=_7ed.split("&");
-for(var i=0;i<q.length;++i){
-if(q[i].length){
-var p=q[i].split("=");
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+p[0]+"\"","",p[1]);
-}
-}
-}
-if(_7eb.file){
-if(dojo.lang.isArray(_7eb.file)){
-for(var i=0;i<_7eb.file.length;++i){
-var o=_7eb.file[i];
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}else{
-var o=_7eb.file;
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}
-if(t.length){
-t.push("--"+this.multipartBoundary+"--","");
-_7ed=t.join("\r\n");
-}
-}while(false);
-var _7f6=_7eb["sync"]?false:true;
-var _7f7=_7eb["preventCache"]||(this.preventCache==true&&_7eb["preventCache"]!=false);
-var _7f8=_7eb["useCache"]==true||(this.useCache==true&&_7eb["useCache"]!=false);
-if(!_7f7&&_7f8){
-var _7f9=getFromCache(url,_7ed,_7eb.method);
-if(_7f9){
-doLoad(_7eb,_7f9,url,_7ed,false);
-return;
-}
-}
-var http=dojo.hostenv.getXmlhttpObject(_7eb);
-var _7fb=false;
-if(_7f6){
-var _7fc=this.inFlight.push({"req":_7eb,"http":http,"url":url,"query":_7ed,"useCache":_7f8,"startTime":_7eb.timeoutSeconds?(new Date()).getTime():0});
-this.startWatchingInFlight();
-}else{
-_7cb._blockAsync=true;
-}
-if(_7eb.method.toLowerCase()=="post"){
-if(!_7eb.user){
-http.open("POST",url,_7f6);
-}else{
-http.open("POST",url,_7f6,_7eb.user,_7eb.password);
-}
-setHeaders(http,_7eb);
-http.setRequestHeader("Content-Type",_7eb.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_7eb.contentType||"application/x-www-form-urlencoded"));
-try{
-http.send(_7ed);
-}
-catch(e){
-if(typeof http.abort=="function"){
-http.abort();
-}
-doLoad(_7eb,{status:404},url,_7ed,_7f8);
-}
-}else{
-var _7fd=url;
-if(_7ed!=""){
-_7fd+=(_7fd.indexOf("?")>-1?"&":"?")+_7ed;
-}
-if(_7f7){
-_7fd+=(dojo.string.endsWithAny(_7fd,"?","&")?"":(_7fd.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
-}
-if(!_7eb.user){
-http.open(_7eb.method.toUpperCase(),_7fd,_7f6);
-}else{
-http.open(_7eb.method.toUpperCase(),_7fd,_7f6,_7eb.user,_7eb.password);
-}
-setHeaders(http,_7eb);
-try{
-http.send(null);
-}
-catch(e){
-if(typeof http.abort=="function"){
-http.abort();
-}
-doLoad(_7eb,{status:404},url,_7ed,_7f8);
-}
-}
-if(!_7f6){
-doLoad(_7eb,http,url,_7ed,_7f8);
-_7cb._blockAsync=false;
-}
-_7eb.abort=function(){
-try{
-http._aborted=true;
-}
-catch(e){
-}
-return http.abort();
-};
-return;
-};
-dojo.io.transports.addTransport("XMLHTTPTransport");
-};
-}
-dojo.provide("dojo.io.cookie");
-dojo.io.cookie.setCookie=function(name,_7ff,days,path,_802,_803){
-var _804=-1;
-if((typeof days=="number")&&(days>=0)){
-var d=new Date();
-d.setTime(d.getTime()+(days*24*60*60*1000));
-_804=d.toGMTString();
-}
-_7ff=escape(_7ff);
-document.cookie=name+"="+_7ff+";"+(_804!=-1?" expires="+_804+";":"")+(path?"path="+path:"")+(_802?"; domain="+_802:"")+(_803?"; secure":"");
-};
-dojo.io.cookie.set=dojo.io.cookie.setCookie;
-dojo.io.cookie.getCookie=function(name){
-var idx=document.cookie.lastIndexOf(name+"=");
-if(idx==-1){
-return null;
-}
-var _808=document.cookie.substring(idx+name.length+1);
-var end=_808.indexOf(";");
-if(end==-1){
-end=_808.length;
-}
-_808=_808.substring(0,end);
-_808=unescape(_808);
-return _808;
-};
-dojo.io.cookie.get=dojo.io.cookie.getCookie;
-dojo.io.cookie.deleteCookie=function(name){
-dojo.io.cookie.setCookie(name,"-",0);
-};
-dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_80f,_810,_811){
-if(arguments.length==5){
-_811=_80f;
-_80f=null;
-_810=null;
-}
-var _812=[],_813,_814="";
-if(!_811){
-_813=dojo.io.cookie.getObjectCookie(name);
-}
-if(days>=0){
-if(!_813){
-_813={};
-}
-for(var prop in obj){
-if(obj[prop]==null){
-delete _813[prop];
-}else{
-if((typeof obj[prop]=="string")||(typeof obj[prop]=="number")){
-_813[prop]=obj[prop];
-}
-}
-}
-prop=null;
-for(var prop in _813){
-_812.push(escape(prop)+"="+escape(_813[prop]));
-}
-_814=_812.join("&");
-}
-dojo.io.cookie.setCookie(name,_814,days,path,_80f,_810);
-};
-dojo.io.cookie.getObjectCookie=function(name){
-var _817=null,_818=dojo.io.cookie.getCookie(name);
-if(_818){
-_817={};
-var _819=_818.split("&");
-for(var i=0;i<_819.length;i++){
-var pair=_819[i].split("=");
-var _81c=pair[1];
-if(isNaN(_81c)){
-_81c=unescape(pair[1]);
-}
-_817[unescape(pair[0])]=_81c;
-}
-}
-return _817;
-};
-dojo.io.cookie.isSupported=function(){
-if(typeof navigator.cookieEnabled!="boolean"){
-dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__","CookiesAllowed",90,null);
-var _81d=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
-navigator.cookieEnabled=(_81d=="CookiesAllowed");
-if(navigator.cookieEnabled){
-this.deleteCookie("__TestingYourBrowserForCookieSupport__");
-}
-}
-return navigator.cookieEnabled;
-};
-if(!dojo.io.cookies){
-dojo.io.cookies=dojo.io.cookie;
-}
-dojo.provide("dojo.io.*");
-if(!this["dojo"]){
-alert("\"dojo/__package__.js\" is now located at \"dojo/dojo.js\". Please update your includes accordingly");
-}
-dojo.provide("dojo.widget.ContentPane");
-dojo.widget.defineWidget("dojo.widget.ContentPane",dojo.widget.HtmlWidget,function(){
-this._styleNodes=[];
-this._onLoadStack=[];
-this._onUnloadStack=[];
-this._callOnUnload=false;
-this._ioBindObj;
-this.scriptScope;
-this.bindArgs={};
-},{isContainer:true,adjustPaths:true,href:"",extractContent:true,parseContent:true,cacheContent:true,preload:false,refreshOnShow:false,handler:"",executeScripts:false,scriptSeparation:true,loadingMessage:"Loading...",isLoaded:false,postCreate:function(args,frag,_820){
-if(this.handler!==""){
-this.setHandler(this.handler);
-}
-if(this.isShowing()||this.preload){
-this.loadContents();
-}
-},show:function(){
-if(this.refreshOnShow){
-this.refresh();
-}else{
-this.loadContents();
-}
-dojo.widget.ContentPane.superclass.show.call(this);
-},refresh:function(){
-this.isLoaded=false;
-this.loadContents();
-},loadContents:function(){
-if(this.isLoaded){
-return;
-}
-if(dojo.lang.isFunction(this.handler)){
-this._runHandler();
-}else{
-if(this.href!=""){
-this._downloadExternalContent(this.href,this.cacheContent&&!this.refreshOnShow);
-}
-}
-},setUrl:function(url){
-this.href=url;
-this.isLoaded=false;
-if(this.preload||this.isShowing()){
-this.loadContents();
-}
-},abort:function(){
-var bind=this._ioBindObj;
-if(!bind||!bind.abort){
-return;
-}
-bind.abort();
-delete this._ioBindObj;
-},_downloadExternalContent:function(url,_824){
-this.abort();
-this._handleDefaults(this.loadingMessage,"onDownloadStart");
-var self=this;
-this._ioBindObj=dojo.io.bind(this._cacheSetting({url:url,mimetype:"text/html",handler:function(type,data,xhr){
-delete self._ioBindObj;
-if(type=="load"){
-self.onDownloadEnd.call(self,url,data);
-}else{
-var e={responseText:xhr.responseText,status:xhr.status,statusText:xhr.statusText,responseHeaders:xhr.getAllResponseHeaders(),text:"Error loading '"+url+"' ("+xhr.status+" "+xhr.statusText+")"};
-self._handleDefaults.call(self,e,"onDownloadError");
-self.onLoad();
-}
-}},_824));
-},_cacheSetting:function(_82a,_82b){
-for(var x in this.bindArgs){
-if(dojo.lang.isUndefined(_82a[x])){
-_82a[x]=this.bindArgs[x];
-}
-}
-if(dojo.lang.isUndefined(_82a.useCache)){
-_82a.useCache=_82b;
-}
-if(dojo.lang.isUndefined(_82a.preventCache)){
-_82a.preventCache=!_82b;
-}
-if(dojo.lang.isUndefined(_82a.mimetype)){
-_82a.mimetype="text/html";
-}
-return _82a;
-},onLoad:function(e){
-this._runStack("_onLoadStack");
-this.isLoaded=true;
-},onUnLoad:function(e){
-dojo.deprecated(this.widgetType+".onUnLoad, use .onUnload (lowercased load)",0.5);
-},onUnload:function(e){
-this._runStack("_onUnloadStack");
-delete this.scriptScope;
-if(this.onUnLoad!==dojo.widget.ContentPane.prototype.onUnLoad){
-this.onUnLoad.apply(this,arguments);
-}
-},_runStack:function(_830){
-var st=this[_830];
-var err="";
-var _833=this.scriptScope||window;
-for(var i=0;i<st.length;i++){
-try{
-st[i].call(_833);
-}
-catch(e){
-err+="\n"+st[i]+" failed: "+e.description;
-}
-}
-this[_830]=[];
-if(err.length){
-var name=(_830=="_onLoadStack")?"addOnLoad":"addOnUnLoad";
-this._handleDefaults(name+" failure\n "+err,"onExecError","debug");
-}
-},addOnLoad:function(obj,func){
-this._pushOnStack(this._onLoadStack,obj,func);
-},addOnUnload:function(obj,func){
-this._pushOnStack(this._onUnloadStack,obj,func);
-},addOnUnLoad:function(){
-dojo.deprecated(this.widgetType+".addOnUnLoad, use addOnUnload instead. (lowercased Load)",0.5);
-this.addOnUnload.apply(this,arguments);
-},_pushOnStack:function(_83a,obj,func){
-if(typeof func=="undefined"){
-_83a.push(obj);
-}else{
-_83a.push(function(){
-obj[func]();
-});
-}
-},destroy:function(){
-this.onUnload();
-dojo.widget.ContentPane.superclass.destroy.call(this);
-},onExecError:function(e){
-},onContentError:function(e){
-},onDownloadError:function(e){
-},onDownloadStart:function(e){
-},onDownloadEnd:function(url,data){
-data=this.splitAndFixPaths(data,url);
-this.setContent(data);
-},_handleDefaults:function(e,_844,_845){
-if(!_844){
-_844="onContentError";
-}
-if(dojo.lang.isString(e)){
-e={text:e};
-}
-if(!e.text){
-e.text=e.toString();
-}
-e.toString=function(){
-return this.text;
-};
-if(typeof e.returnValue!="boolean"){
-e.returnValue=true;
-}
-if(typeof e.preventDefault!="function"){
-e.preventDefault=function(){
-this.returnValue=false;
-};
-}
-this[_844](e);
-if(e.returnValue){
-switch(_845){
-case true:
-case "alert":
-alert(e.toString());
-break;
-case "debug":
-dojo.debug(e.toString());
-break;
-default:
-if(this._callOnUnload){
-this.onUnload();
-}
-this._callOnUnload=false;
-if(arguments.callee._loopStop){
-dojo.debug(e.toString());
-}else{
-arguments.callee._loopStop=true;
-this._setContent(e.toString());
-}
-}
-}
-arguments.callee._loopStop=false;
-},splitAndFixPaths:function(s,url){
-var _848=[],_849=[],tmp=[];
-var _84b=[],_84c=[],attr=[],_84e=[];
-var str="",path="",fix="",_852="",tag="",_854="";
-if(!url){
-url="./";
-}
-if(s){
-var _855=/<title[^>]*>([\s\S]*?)<\/title>/i;
-while(_84b=_855.exec(s)){
-_848.push(_84b[1]);
-s=s.substring(0,_84b.index)+s.substr(_84b.index+_84b[0].length);
-}
-if(this.adjustPaths){
-var _856=/<[a-z][a-z0-9]*[^>]*\s(?:(?:src|href|style)=[^>])+[^>]*>/i;
-var _857=/\s(src|href|style)=(['"]?)([\w()\[\]\/.,\\'"-:;#=&?\s@]+?)\2/i;
-var _858=/^(?:[#]|(?:(?:https?|ftps?|file|javascript|mailto|news):))/;
-while(tag=_856.exec(s)){
-str+=s.substring(0,tag.index);
-s=s.substring((tag.index+tag[0].length),s.length);
-tag=tag[0];
-_852="";
-while(attr=_857.exec(tag)){
-path="";
-_854=attr[3];
-switch(attr[1].toLowerCase()){
-case "src":
-case "href":
-if(_858.exec(_854)){
-path=_854;
-}else{
-path=(new dojo.uri.Uri(url,_854).toString());
-}
-break;
-case "style":
-path=dojo.html.fixPathsInCssText(_854,url);
-break;
-default:
-path=_854;
-}
-fix=" "+attr[1]+"="+attr[2]+path+attr[2];
-_852+=tag.substring(0,attr.index)+fix;
-tag=tag.substring((attr.index+attr[0].length),tag.length);
-}
-str+=_852+tag;
-}
-s=str+s;
-}
-_855=/(?:<(style)[^>]*>([\s\S]*?)<\/style>|<link ([^>]*rel=['"]?stylesheet['"]?[^>]*)>)/i;
-while(_84b=_855.exec(s)){
-if(_84b[1]&&_84b[1].toLowerCase()=="style"){
-_84e.push(dojo.html.fixPathsInCssText(_84b[2],url));
-}else{
-if(attr=_84b[3].match(/href=(['"]?)([^'">]*)\1/i)){
-_84e.push({path:attr[2]});
-}
-}
-s=s.substring(0,_84b.index)+s.substr(_84b.index+_84b[0].length);
-}
-var _855=/<script([^>]*)>([\s\S]*?)<\/script>/i;
-var _859=/src=(['"]?)([^"']*)\1/i;
-var _85a=/.*(\bdojo\b\.js(?:\.uncompressed\.js)?)$/;
-var _85b=/(?:var )?\bdjConfig\b(?:[\s]*=[\s]*\{[^}]+\}|\.[\w]*[\s]*=[\s]*[^;\n]*)?;?|dojo\.hostenv\.writeIncludes\(\s*\);?/g;
-var _85c=/dojo\.(?:(?:require(?:After)?(?:If)?)|(?:widget\.(?:manager\.)?registerWidgetPackage)|(?:(?:hostenv\.)?setModulePrefix|registerModulePath)|defineNamespace)\((['"]).*?\1\)\s*;?/;
-while(_84b=_855.exec(s)){
-if(this.executeScripts&&_84b[1]){
-if(attr=_859.exec(_84b[1])){
-if(_85a.exec(attr[2])){
-dojo.debug("Security note! inhibit:"+attr[2]+" from  being loaded again.");
-}else{
-_849.push({path:attr[2]});
-}
-}
-}
-if(_84b[2]){
-var sc=_84b[2].replace(_85b,"");
-if(!sc){
-continue;
-}
-while(tmp=_85c.exec(sc)){
-_84c.push(tmp[0]);
-sc=sc.substring(0,tmp.index)+sc.substr(tmp.index+tmp[0].length);
-}
-if(this.executeScripts){
-_849.push(sc);
-}
-}
-s=s.substr(0,_84b.index)+s.substr(_84b.index+_84b[0].length);
-}
-if(this.extractContent){
-_84b=s.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-if(_84b){
-s=_84b[1];
-}
-}
-if(this.executeScripts&&this.scriptSeparation){
-var _855=/(<[a-zA-Z][a-zA-Z0-9]*\s[^>]*?\S=)((['"])[^>]*scriptScope[^>]*>)/;
-var _85e=/([\s'";:\(])scriptScope(.*)/;
-str="";
-while(tag=_855.exec(s)){
-tmp=((tag[3]=="'")?"\"":"'");
-fix="";
-str+=s.substring(0,tag.index)+tag[1];
-while(attr=_85e.exec(tag[2])){
-tag[2]=tag[2].substring(0,attr.index)+attr[1]+"dojo.widget.byId("+tmp+this.widgetId+tmp+").scriptScope"+attr[2];
-}
-str+=tag[2];
-s=s.substr(tag.index+tag[0].length);
-}
-s=str+s;
-}
-}
-return {"xml":s,"styles":_84e,"titles":_848,"requires":_84c,"scripts":_849,"url":url};
-},_setContent:function(cont){
-this.destroyChildren();
-for(var i=0;i<this._styleNodes.length;i++){
-if(this._styleNodes[i]&&this._styleNodes[i].parentNode){
-this._styleNodes[i].parentNode.removeChild(this._styleNodes[i]);
-}
-}
-this._styleNodes=[];
-try{
-var node=this.containerNode||this.domNode;
-while(node.firstChild){
-dojo.html.destroyNode(node.firstChild);
-}
-if(typeof cont!="string"){
-node.appendChild(cont);
-}else{
-node.innerHTML=cont;
-}
-}
-catch(e){
-e.text="Couldn't load content:"+e.description;
-this._handleDefaults(e,"onContentError");
-}
-},setContent:function(data){
-this.abort();
-if(this._callOnUnload){
-this.onUnload();
-}
-this._callOnUnload=true;
-if(!data||dojo.html.isNode(data)){
-this._setContent(data);
-this.onResized();
-this.onLoad();
-}else{
-if(typeof data.xml!="string"){
-this.href="";
-data=this.splitAndFixPaths(data);
-}
-this._setContent(data.xml);
-for(var i=0;i<data.styles.length;i++){
-if(data.styles[i].path){
-this._styleNodes.push(dojo.html.insertCssFile(data.styles[i].path,dojo.doc(),false,true));
-}else{
-this._styleNodes.push(dojo.html.insertCssText(data.styles[i]));
-}
-}
-if(this.parseContent){
-for(var i=0;i<data.requires.length;i++){
-try{
-eval(data.requires[i]);
-}
-catch(e){
-e.text="ContentPane: error in package loading calls, "+(e.description||e);
-this._handleDefaults(e,"onContentError","debug");
-}
-}
-}
-var _864=this;
-function asyncParse(){
-if(_864.executeScripts){
-_864._executeScripts(data.scripts);
-}
-if(_864.parseContent){
-var node=_864.containerNode||_864.domNode;
-var _866=new dojo.xml.Parse();
-var frag=_866.parseElement(node,null,true);
-dojo.widget.getParser().createSubComponents(frag,_864);
-}
-_864.onResized();
-_864.onLoad();
-}
-if(dojo.hostenv.isXDomain&&data.requires.length){
-dojo.addOnLoad(asyncParse);
-}else{
-asyncParse();
-}
-}
-},setHandler:function(_868){
-var fcn=dojo.lang.isFunction(_868)?_868:window[_868];
-if(!dojo.lang.isFunction(fcn)){
-this._handleDefaults("Unable to set handler, '"+_868+"' not a function.","onExecError",true);
-return;
-}
-this.handler=function(){
-return fcn.apply(this,arguments);
-};
-},_runHandler:function(){
-var ret=true;
-if(dojo.lang.isFunction(this.handler)){
-this.handler(this,this.domNode);
-ret=false;
-}
-this.onLoad();
-return ret;
-},_executeScripts:function(_86b){
-var self=this;
-var tmp="",code="";
-for(var i=0;i<_86b.length;i++){
-if(_86b[i].path){
-dojo.io.bind(this._cacheSetting({"url":_86b[i].path,"load":function(type,_871){
-dojo.lang.hitch(self,tmp=";"+_871);
-},"error":function(type,_873){
-_873.text=type+" downloading remote script";
-self._handleDefaults.call(self,_873,"onExecError","debug");
-},"mimetype":"text/plain","sync":true},this.cacheContent));
-code+=tmp;
-}else{
-code+=_86b[i];
-}
-}
-try{
-if(this.scriptSeparation){
-delete this.scriptScope;
-this.scriptScope=new (new Function("_container_",code+"; return this;"))(self);
-}else{
-var djg=dojo.global();
-if(djg.execScript){
-djg.execScript(code);
-}else{
-var djd=dojo.doc();
-var sc=djd.createElement("script");
-sc.appendChild(djd.createTextNode(code));
-(this.containerNode||this.domNode).appendChild(sc);
-}
-}
-}
-catch(e){
-e.text="Error running scripts from content:\n"+e.description;
-this._handleDefaults(e,"onExecError","debug");
-}
-}});
-dojo.provide("dojo.html.*");
-dojo.provide("dojo.html.selection");
-dojo.html.selectionType={NONE:0,TEXT:1,CONTROL:2};
-dojo.html.clearSelection=function(){
-var _877=dojo.global();
-var _878=dojo.doc();
-try{
-if(_877["getSelection"]){
-if(dojo.render.html.safari){
-_877.getSelection().collapse();
-}else{
-_877.getSelection().removeAllRanges();
-}
-}else{
-if(_878.selection){
-if(_878.selection.empty){
-_878.selection.empty();
-}else{
-if(_878.selection.clear){
-_878.selection.clear();
-}
-}
-}
-}
-return true;
-}
-catch(e){
-dojo.debug(e);
-return false;
-}
-};
-dojo.html.disableSelection=function(_879){
-_879=dojo.byId(_879)||dojo.body();
-var h=dojo.render.html;
-if(h.mozilla){
-_879.style.MozUserSelect="none";
-}else{
-if(h.safari){
-_879.style.KhtmlUserSelect="none";
-}else{
-if(h.ie){
-_879.unselectable="on";
-}else{
-return false;
-}
-}
-}
-return true;
-};
-dojo.html.enableSelection=function(_87b){
-_87b=dojo.byId(_87b)||dojo.body();
-var h=dojo.render.html;
-if(h.mozilla){
-_87b.style.MozUserSelect="";
-}else{
-if(h.safari){
-_87b.style.KhtmlUserSelect="";
-}else{
-if(h.ie){
-_87b.unselectable="off";
-}else{
-return false;
-}
-}
-}
-return true;
-};
-dojo.html.selectElement=function(_87d){
-dojo.deprecated("dojo.html.selectElement","replaced by dojo.html.selection.selectElementChildren",0.5);
-};
-dojo.html.selectInputText=function(_87e){
-var _87f=dojo.global();
-var _880=dojo.doc();
-_87e=dojo.byId(_87e);
-if(_880["selection"]&&dojo.body()["createTextRange"]){
-var _881=_87e.createTextRange();
-_881.moveStart("character",0);
-_881.moveEnd("character",_87e.value.length);
-_881.select();
-}else{
-if(_87f["getSelection"]){
-var _882=_87f.getSelection();
-_87e.setSelectionRange(0,_87e.value.length);
-}
-}
-_87e.focus();
-};
-dojo.html.isSelectionCollapsed=function(){
-dojo.deprecated("dojo.html.isSelectionCollapsed","replaced by dojo.html.selection.isCollapsed",0.5);
-return dojo.html.selection.isCollapsed();
-};
-dojo.lang.mixin(dojo.html.selection,{getType:function(){
-if(dojo.doc()["selection"]){
-return dojo.html.selectionType[dojo.doc().selection.type.toUpperCase()];
-}else{
-var _883=dojo.html.selectionType.TEXT;
-var oSel;
-try{
-oSel=dojo.global().getSelection();
-}
-catch(e){
-}
-if(oSel&&oSel.rangeCount==1){
-var _885=oSel.getRangeAt(0);
-if(_885.startContainer==_885.endContainer&&(_885.endOffset-_885.startOffset)==1&&_885.startContainer.nodeType!=dojo.dom.TEXT_NODE){
-_883=dojo.html.selectionType.CONTROL;
-}
-}
-return _883;
-}
-},isCollapsed:function(){
-var _886=dojo.global();
-var _887=dojo.doc();
-if(_887["selection"]){
-return _887.selection.createRange().text=="";
-}else{
-if(_886["getSelection"]){
-var _888=_886.getSelection();
-if(dojo.lang.isString(_888)){
-return _888=="";
-}else{
-return _888.isCollapsed||_888.toString()=="";
-}
-}
-}
-},getSelectedElement:function(){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-if(dojo.doc()["selection"]){
-var _889=dojo.doc().selection.createRange();
-if(_889&&_889.item){
-return dojo.doc().selection.createRange().item(0);
-}
-}else{
-var _88a=dojo.global().getSelection();
-return _88a.anchorNode.childNodes[_88a.anchorOffset];
-}
-}
-},getParentElement:function(){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-var p=dojo.html.selection.getSelectedElement();
-if(p){
-return p.parentNode;
-}
-}else{
-if(dojo.doc()["selection"]){
-return dojo.doc().selection.createRange().parentElement();
-}else{
-var _88c=dojo.global().getSelection();
-if(_88c){
-var node=_88c.anchorNode;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.parentNode;
-}
-return node;
-}
-}
-}
-},getSelectedText:function(){
-if(dojo.doc()["selection"]){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-return null;
-}
-return dojo.doc().selection.createRange().text;
-}else{
-var _88e=dojo.global().getSelection();
-if(_88e){
-return _88e.toString();
-}
-}
-},getSelectedHtml:function(){
-if(dojo.doc()["selection"]){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-return null;
-}
-return dojo.doc().selection.createRange().htmlText;
-}else{
-var _88f=dojo.global().getSelection();
-if(_88f&&_88f.rangeCount){
-var frag=_88f.getRangeAt(0).cloneContents();
-var div=document.createElement("div");
-div.appendChild(frag);
-return div.innerHTML;
-}
-return null;
-}
-},hasAncestorElement:function(_892){
-return (dojo.html.selection.getAncestorElement.apply(this,arguments)!=null);
-},getAncestorElement:function(_893){
-var node=dojo.html.selection.getSelectedElement()||dojo.html.selection.getParentElement();
-while(node){
-if(dojo.html.selection.isTag(node,arguments).length>0){
-return node;
-}
-node=node.parentNode;
-}
-return null;
-},isTag:function(node,tags){
-if(node&&node.tagName){
-for(var i=0;i<tags.length;i++){
-if(node.tagName.toLowerCase()==String(tags[i]).toLowerCase()){
-return String(tags[i]).toLowerCase();
-}
-}
-}
-return "";
-},selectElement:function(_898){
-var _899=dojo.global();
-var _89a=dojo.doc();
-_898=dojo.byId(_898);
-if(_89a.selection&&dojo.body().createTextRange){
-try{
-var _89b=dojo.body().createControlRange();
-_89b.addElement(_898);
-_89b.select();
-}
-catch(e){
-dojo.html.selection.selectElementChildren(_898);
-}
-}else{
-if(_899["getSelection"]){
-var _89c=_899.getSelection();
-if(_89c["removeAllRanges"]){
-var _89b=_89a.createRange();
-_89b.selectNode(_898);
-_89c.removeAllRanges();
-_89c.addRange(_89b);
-}
-}
-}
-},selectElementChildren:function(_89d){
-var _89e=dojo.global();
-var _89f=dojo.doc();
-_89d=dojo.byId(_89d);
-if(_89f.selection&&dojo.body().createTextRange){
-var _8a0=dojo.body().createTextRange();
-_8a0.moveToElementText(_89d);
-_8a0.select();
-}else{
-if(_89e["getSelection"]){
-var _8a1=_89e.getSelection();
-if(_8a1["setBaseAndExtent"]){
-_8a1.setBaseAndExtent(_89d,0,_89d,_89d.innerText.length-1);
-}else{
-if(_8a1["selectAllChildren"]){
-_8a1.selectAllChildren(_89d);
-}
-}
-}
-}
-},getBookmark:function(){
-var _8a2;
-var _8a3=dojo.doc();
-if(_8a3["selection"]){
-var _8a4=_8a3.selection.createRange();
-_8a2=_8a4.getBookmark();
-}else{
-var _8a5;
-try{
-_8a5=dojo.global().getSelection();
-}
-catch(e){
-}
-if(_8a5){
-var _8a4=_8a5.getRangeAt(0);
-_8a2=_8a4.cloneRange();
-}else{
-dojo.debug("No idea how to store the current selection for this browser!");
-}
-}
-return _8a2;
-},moveToBookmark:function(_8a6){
-var _8a7=dojo.doc();
-if(_8a7["selection"]){
-var _8a8=_8a7.selection.createRange();
-_8a8.moveToBookmark(_8a6);
-_8a8.select();
-}else{
-var _8a9;
-try{
-_8a9=dojo.global().getSelection();
-}
-catch(e){
-}
-if(_8a9&&_8a9["removeAllRanges"]){
-_8a9.removeAllRanges();
-_8a9.addRange(_8a6);
-}else{
-dojo.debug("No idea how to restore selection for this browser!");
-}
-}
-},collapse:function(_8aa){
-if(dojo.global()["getSelection"]){
-var _8ab=dojo.global().getSelection();
-if(_8ab.removeAllRanges){
-if(_8aa){
-_8ab.collapseToStart();
-}else{
-_8ab.collapseToEnd();
-}
-}else{
-dojo.global().getSelection().collapse(_8aa);
-}
-}else{
-if(dojo.doc().selection){
-var _8ac=dojo.doc().selection.createRange();
-_8ac.collapse(_8aa);
-_8ac.select();
-}
-}
-},remove:function(){
-if(dojo.doc().selection){
-var _8ad=dojo.doc().selection;
-if(_8ad.type.toUpperCase()!="NONE"){
-_8ad.clear();
-}
-return _8ad;
-}else{
-var _8ad=dojo.global().getSelection();
-for(var i=0;i<_8ad.rangeCount;i++){
-_8ad.getRangeAt(i).deleteContents();
-}
-return _8ad;
-}
-}});
-dojo.provide("dojo.widget.Button");
-dojo.widget.defineWidget("dojo.widget.Button",dojo.widget.HtmlWidget,{isContainer:true,caption:"",templatePath:dojo.uri.dojoUri("src/widget/templates/ButtonTemplate.html"),templateCssPath:dojo.uri.dojoUri("src/widget/templates/ButtonTemplate.css"),inactiveImg:"src/widget/templates/images/soriaButton-",activeImg:"src/widget/templates/images/soriaActive-",pressedImg:"src/widget/templates/images/soriaPressed-",disabledImg:"src/widget/templates/images/soriaDisabled-",width2height:1/3,fillInTemplate:function(){
-if(this.caption){
-this.containerNode.appendChild(document.createTextNode(this.caption));
-}
-dojo.html.disableSelection(this.containerNode);
-},postCreate:function(){
-this._sizeMyself();
-},_sizeMyself:function(){
-if(this.domNode.parentNode){
-var _8af=document.createElement("span");
-dojo.html.insertBefore(_8af,this.domNode);
-}
-dojo.body().appendChild(this.domNode);
-this._sizeMyselfHelper();
-if(_8af){
-dojo.html.insertBefore(this.domNode,_8af);
-dojo.html.removeNode(_8af);
-}
-},_sizeMyselfHelper:function(){
-var mb=dojo.html.getMarginBox(this.containerNode);
-this.height=mb.height;
-this.containerWidth=mb.width;
-var _8b1=this.height*this.width2height;
-this.containerNode.style.left=_8b1+"px";
-this.leftImage.height=this.rightImage.height=this.centerImage.height=this.height;
-this.leftImage.width=this.rightImage.width=_8b1+1;
-this.centerImage.width=this.containerWidth;
-this.centerImage.style.left=_8b1+"px";
-this._setImage(this.disabled?this.disabledImg:this.inactiveImg);
-if(this.disabled){
-dojo.html.prependClass(this.domNode,"dojoButtonDisabled");
-this.domNode.removeAttribute("tabIndex");
-dojo.widget.wai.setAttr(this.domNode,"waiState","disabled",true);
-}else{
-dojo.html.removeClass(this.domNode,"dojoButtonDisabled");
-this.domNode.setAttribute("tabIndex","0");
-dojo.widget.wai.setAttr(this.domNode,"waiState","disabled",false);
-}
-this.domNode.style.height=this.height+"px";
-this.domNode.style.width=(this.containerWidth+2*_8b1)+"px";
-},onMouseOver:function(e){
-if(this.disabled){
-return;
-}
-dojo.html.prependClass(this.buttonNode,"dojoButtonHover");
-this._setImage(this.activeImg);
-},onMouseDown:function(e){
-if(this.disabled){
-return;
-}
-dojo.html.prependClass(this.buttonNode,"dojoButtonDepressed");
-dojo.html.removeClass(this.buttonNode,"dojoButtonHover");
-this._setImage(this.pressedImg);
-},onMouseUp:function(e){
-if(this.disabled){
-return;
-}
-dojo.html.prependClass(this.buttonNode,"dojoButtonHover");
-dojo.html.removeClass(this.buttonNode,"dojoButtonDepressed");
-this._setImage(this.activeImg);
-},onMouseOut:function(e){
-if(this.disabled){
-return;
-}
-if(e.toElement&&dojo.html.isDescendantOf(e.toElement,this.buttonNode)){
-return;
-}
-dojo.html.removeClass(this.buttonNode,"dojoButtonHover");
-dojo.html.removeClass(this.buttonNode,"dojoButtonDepressed");
-this._setImage(this.inactiveImg);
-},onKey:function(e){
-if(!e.key){
-return;
-}
-var menu=dojo.widget.getWidgetById(this.menuId);
-if(e.key==e.KEY_ENTER||e.key==" "){
-this.onMouseDown(e);
-this.buttonClick(e);
-dojo.lang.setTimeout(this,"onMouseUp",75,e);
-dojo.event.browser.stopEvent(e);
-}
-if(menu&&menu.isShowingNow&&e.key==e.KEY_DOWN_ARROW){
-dojo.event.disconnect(this.domNode,"onblur",this,"onBlur");
-}
-},onFocus:function(e){
-var menu=dojo.widget.getWidgetById(this.menuId);
-if(menu){
-dojo.event.connectOnce(this.domNode,"onblur",this,"onBlur");
-}
-},onBlur:function(e){
-var menu=dojo.widget.getWidgetById(this.menuId);
-if(!menu){
-return;
-}
-if(menu.close&&menu.isShowingNow){
-menu.close();
-}
-},buttonClick:function(e){
-if(!this.disabled){
-try{
-this.domNode.focus();
-}
-catch(e2){
-}
-this.onClick(e);
-}
-},onClick:function(e){
-},_setImage:function(_8be){
-this.leftImage.src=dojo.uri.dojoUri(_8be+"l.gif");
-this.centerImage.src=dojo.uri.dojoUri(_8be+"c.gif");
-this.rightImage.src=dojo.uri.dojoUri(_8be+"r.gif");
-},_toggleMenu:function(_8bf){
-var menu=dojo.widget.getWidgetById(_8bf);
-if(!menu){
-return;
-}
-if(menu.open&&!menu.isShowingNow){
-var pos=dojo.html.getAbsolutePosition(this.domNode,false);
-menu.open(pos.x,pos.y+this.height,this);
-}else{
-if(menu.close&&menu.isShowingNow){
-menu.close();
-}else{
-menu.toggle();
-}
-}
-},setCaption:function(_8c2){
-this.caption=_8c2;
-this.containerNode.innerHTML=_8c2;
-this._sizeMyself();
-},setDisabled:function(_8c3){
-this.disabled=_8c3;
-this._sizeMyself();
-}});
-dojo.widget.defineWidget("dojo.widget.DropDownButton",dojo.widget.Button,{menuId:"",downArrow:"src/widget/templates/images/whiteDownArrow.gif",disabledDownArrow:"src/widget/templates/images/whiteDownArrow.gif",fillInTemplate:function(){
-dojo.widget.DropDownButton.superclass.fillInTemplate.apply(this,arguments);
-this.arrow=document.createElement("img");
-dojo.html.setClass(this.arrow,"downArrow");
-dojo.widget.wai.setAttr(this.domNode,"waiState","haspopup",this.menuId);
-},_sizeMyselfHelper:function(){
-this.arrow.src=dojo.uri.dojoUri(this.disabled?this.disabledDownArrow:this.downArrow);
-this.containerNode.appendChild(this.arrow);
-dojo.widget.DropDownButton.superclass._sizeMyselfHelper.call(this);
-},onClick:function(e){
-this._toggleMenu(this.menuId);
-}});
-dojo.widget.defineWidget("dojo.widget.ComboButton",dojo.widget.Button,{menuId:"",templatePath:dojo.uri.dojoUri("src/widget/templates/ComboButtonTemplate.html"),splitWidth:2,arrowWidth:5,_sizeMyselfHelper:function(e){
-var mb=dojo.html.getMarginBox(this.containerNode);
-this.height=mb.height;
-this.containerWidth=mb.width;
-var _8c7=this.height/3;
-if(this.disabled){
-dojo.widget.wai.setAttr(this.domNode,"waiState","disabled",true);
-this.domNode.removeAttribute("tabIndex");
-}else{
-dojo.widget.wai.setAttr(this.domNode,"waiState","disabled",false);
-this.domNode.setAttribute("tabIndex","0");
-}
-this.leftImage.height=this.rightImage.height=this.centerImage.height=this.arrowBackgroundImage.height=this.height;
-this.leftImage.width=_8c7+1;
-this.centerImage.width=this.containerWidth;
-this.buttonNode.style.height=this.height+"px";
-this.buttonNode.style.width=_8c7+this.containerWidth+"px";
-this._setImage(this.disabled?this.disabledImg:this.inactiveImg);
-this.arrowBackgroundImage.width=this.arrowWidth;
-this.rightImage.width=_8c7+1;
-this.rightPart.style.height=this.height+"px";
-this.rightPart.style.width=this.arrowWidth+_8c7+"px";
-this._setImageR(this.disabled?this.disabledImg:this.inactiveImg);
-this.domNode.style.height=this.height+"px";
-var _8c8=this.containerWidth+this.splitWidth+this.arrowWidth+2*_8c7;
-this.domNode.style.width=_8c8+"px";
-},_setImage:function(_8c9){
-this.leftImage.src=dojo.uri.dojoUri(_8c9+"l.gif");
-this.centerImage.src=dojo.uri.dojoUri(_8c9+"c.gif");
-},rightOver:function(e){
-if(this.disabled){
-return;
-}
-dojo.html.prependClass(this.rightPart,"dojoButtonHover");
-this._setImageR(this.activeImg);
-},rightDown:function(e){
-if(this.disabled){
-return;
-}
-dojo.html.prependClass(this.rightPart,"dojoButtonDepressed");
-dojo.html.removeClass(this.rightPart,"dojoButtonHover");
-this._setImageR(this.pressedImg);
-},rightUp:function(e){
-if(this.disabled){
-return;
-}
-dojo.html.prependClass(this.rightPart,"dojoButtonHover");
-dojo.html.removeClass(this.rightPart,"dojoButtonDepressed");
-this._setImageR(this.activeImg);
-},rightOut:function(e){
-if(this.disabled){
-return;
-}
-dojo.html.removeClass(this.rightPart,"dojoButtonHover");
-dojo.html.removeClass(this.rightPart,"dojoButtonDepressed");
-this._setImageR(this.inactiveImg);
-},rightClick:function(e){
-if(this.disabled){
-return;
-}
-try{
-this.domNode.focus();
-}
-catch(e2){
-}
-this._toggleMenu(this.menuId);
-},_setImageR:function(_8cf){
-this.arrowBackgroundImage.src=dojo.uri.dojoUri(_8cf+"c.gif");
-this.rightImage.src=dojo.uri.dojoUri(_8cf+"r.gif");
-},onKey:function(e){
-if(!e.key){
-return;
-}
-var menu=dojo.widget.getWidgetById(this.menuId);
-if(e.key==e.KEY_ENTER||e.key==" "){
-this.onMouseDown(e);
-this.buttonClick(e);
-dojo.lang.setTimeout(this,"onMouseUp",75,e);
-dojo.event.browser.stopEvent(e);
-}else{
-if(e.key==e.KEY_DOWN_ARROW&&e.altKey){
-this.rightDown(e);
-this.rightClick(e);
-dojo.lang.setTimeout(this,"rightUp",75,e);
-dojo.event.browser.stopEvent(e);
-}else{
-if(menu&&menu.isShowingNow&&e.key==e.KEY_DOWN_ARROW){
-dojo.event.disconnect(this.domNode,"onblur",this,"onBlur");
-}
-}
-}
-}});
-dojo.provide("dojo.date.serialize");
-dojo.date.setIso8601=function(_8d2,_8d3){
-var _8d4=(_8d3.indexOf("T")==-1)?_8d3.split(" "):_8d3.split("T");
-_8d2=dojo.date.setIso8601Date(_8d2,_8d4[0]);
-if(_8d4.length==2){
-_8d2=dojo.date.setIso8601Time(_8d2,_8d4[1]);
-}
-return _8d2;
-};
-dojo.date.fromIso8601=function(_8d5){
-return dojo.date.setIso8601(new Date(0,0),_8d5);
-};
-dojo.date.setIso8601Date=function(_8d6,_8d7){
-var _8d8="^([0-9]{4})((-?([0-9]{2})(-?([0-9]{2}))?)|"+"(-?([0-9]{3}))|(-?W([0-9]{2})(-?([1-7]))?))?$";
-var d=_8d7.match(new RegExp(_8d8));
-if(!d){
-dojo.debug("invalid date string: "+_8d7);
-return null;
-}
-var year=d[1];
-var _8db=d[4];
-var date=d[6];
-var _8dd=d[8];
-var week=d[10];
-var _8df=d[12]?d[12]:1;
-_8d6.setFullYear(year);
-if(_8dd){
-_8d6.setMonth(0);
-_8d6.setDate(Number(_8dd));
-}else{
-if(week){
-_8d6.setMonth(0);
-_8d6.setDate(1);
-var gd=_8d6.getDay();
-var day=gd?gd:7;
-var _8e2=Number(_8df)+(7*Number(week));
-if(day<=4){
-_8d6.setDate(_8e2+1-day);
-}else{
-_8d6.setDate(_8e2+8-day);
-}
-}else{
-if(_8db){
-_8d6.setDate(1);
-_8d6.setMonth(_8db-1);
-}
-if(date){
-_8d6.setDate(date);
-}
-}
-}
-return _8d6;
-};
-dojo.date.fromIso8601Date=function(_8e3){
-return dojo.date.setIso8601Date(new Date(0,0),_8e3);
-};
-dojo.date.setIso8601Time=function(_8e4,_8e5){
-var _8e6="Z|(([-+])([0-9]{2})(:?([0-9]{2}))?)$";
-var d=_8e5.match(new RegExp(_8e6));
-var _8e8=0;
-if(d){
-if(d[0]!="Z"){
-_8e8=(Number(d[3])*60)+Number(d[5]);
-_8e8*=((d[2]=="-")?1:-1);
-}
-_8e8-=_8e4.getTimezoneOffset();
-_8e5=_8e5.substr(0,_8e5.length-d[0].length);
-}
-var _8e9="^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(.([0-9]+))?)?)?$";
-d=_8e5.match(new RegExp(_8e9));
-if(!d){
-dojo.debug("invalid time string: "+_8e5);
-return null;
-}
-var _8ea=d[1];
-var mins=Number((d[3])?d[3]:0);
-var secs=(d[5])?d[5]:0;
-var ms=d[7]?(Number("0."+d[7])*1000):0;
-_8e4.setHours(_8ea);
-_8e4.setMinutes(mins);
-_8e4.setSeconds(secs);
-_8e4.setMilliseconds(ms);
-if(_8e8!==0){
-_8e4.setTime(_8e4.getTime()+_8e8*60000);
-}
-return _8e4;
-};
-dojo.date.fromIso8601Time=function(_8ee){
-return dojo.date.setIso8601Time(new Date(0,0),_8ee);
-};
-dojo.date.toRfc3339=function(_8ef,_8f0){
-if(!_8ef){
-_8ef=new Date();
-}
-var _=dojo.string.pad;
-var _8f2=[];
-if(_8f0!="timeOnly"){
-var date=[_(_8ef.getFullYear(),4),_(_8ef.getMonth()+1,2),_(_8ef.getDate(),2)].join("-");
-_8f2.push(date);
-}
-if(_8f0!="dateOnly"){
-var time=[_(_8ef.getHours(),2),_(_8ef.getMinutes(),2),_(_8ef.getSeconds(),2)].join(":");
-var _8f5=_8ef.getTimezoneOffset();
-time+=(_8f5>0?"-":"+")+_(Math.floor(Math.abs(_8f5)/60),2)+":"+_(Math.abs(_8f5)%60,2);
-_8f2.push(time);
-}
-return _8f2.join("T");
-};
-dojo.date.fromRfc3339=function(_8f6){
-if(_8f6.indexOf("Tany")!=-1){
-_8f6=_8f6.replace("Tany","");
-}
-var _8f7=new Date();
-return dojo.date.setIso8601(_8f7,_8f6);
-};
-dojo.provide("dojo.date.common");
-dojo.date.setDayOfYear=function(_8f8,_8f9){
-_8f8.setMonth(0);
-_8f8.setDate(_8f9);
-return _8f8;
-};
-dojo.date.getDayOfYear=function(_8fa){
-var _8fb=_8fa.getFullYear();
-var _8fc=new Date(_8fb-1,11,31);
-return Math.floor((_8fa.getTime()-_8fc.getTime())/86400000);
-};
-dojo.date.setWeekOfYear=function(_8fd,week,_8ff){
-if(arguments.length==1){
-_8ff=0;
-}
-dojo.unimplemented("dojo.date.setWeekOfYear");
-};
-dojo.date.getWeekOfYear=function(_900,_901){
-if(arguments.length==1){
-_901=0;
-}
-var _902=new Date(_900.getFullYear(),0,1);
-var day=_902.getDay();
-_902.setDate(_902.getDate()-day+_901-(day>_901?7:0));
-return Math.floor((_900.getTime()-_902.getTime())/604800000);
-};
-dojo.date.setIsoWeekOfYear=function(_904,week,_906){
-if(arguments.length==1){
-_906=1;
-}
-dojo.unimplemented("dojo.date.setIsoWeekOfYear");
-};
-dojo.date.getIsoWeekOfYear=function(_907,_908){
-if(arguments.length==1){
-_908=1;
-}
-dojo.unimplemented("dojo.date.getIsoWeekOfYear");
-};
-dojo.date.shortTimezones=["IDLW","BET","HST","MART","AKST","PST","MST","CST","EST","AST","NFT","BST","FST","AT","GMT","CET","EET","MSK","IRT","GST","AFT","AGTT","IST","NPT","ALMT","MMT","JT","AWST","JST","ACST","AEST","LHST","VUT","NFT","NZT","CHAST","PHOT","LINT"];
-dojo.date.timezoneOffsets=[-720,-660,-600,-570,-540,-480,-420,-360,-300,-240,-210,-180,-120,-60,0,60,120,180,210,240,270,300,330,345,360,390,420,480,540,570,600,630,660,690,720,765,780,840];
-dojo.date.getDaysInMonth=function(_909){
-var _90a=_909.getMonth();
-var days=[31,28,31,30,31,30,31,31,30,31,30,31];
-if(_90a==1&&dojo.date.isLeapYear(_909)){
-return 29;
-}else{
-return days[_90a];
-}
-};
-dojo.date.isLeapYear=function(_90c){
-var year=_90c.getFullYear();
-return (year%400==0)?true:(year%100==0)?false:(year%4==0)?true:false;
-};
-dojo.date.getTimezoneName=function(_90e){
-var str=_90e.toString();
-var tz="";
-var _911;
-var pos=str.indexOf("(");
-if(pos>-1){
-pos++;
-tz=str.substring(pos,str.indexOf(")"));
-}else{
-var pat=/([A-Z\/]+) \d{4}$/;
-if((_911=str.match(pat))){
-tz=_911[1];
-}else{
-str=_90e.toLocaleString();
-pat=/ ([A-Z\/]+)$/;
-if((_911=str.match(pat))){
-tz=_911[1];
-}
-}
-}
-return tz=="AM"||tz=="PM"?"":tz;
-};
-dojo.date.getOrdinal=function(_914){
-var date=_914.getDate();
-if(date%100!=11&&date%10==1){
-return "st";
-}else{
-if(date%100!=12&&date%10==2){
-return "nd";
-}else{
-if(date%100!=13&&date%10==3){
-return "rd";
-}else{
-return "th";
-}
-}
-}
-};
-dojo.date.compareTypes={DATE:1,TIME:2};
-dojo.date.compare=function(_916,_917,_918){
-var dA=_916;
-var dB=_917||new Date();
-var now=new Date();
-with(dojo.date.compareTypes){
-var opt=_918||(DATE|TIME);
-var d1=new Date((opt&DATE)?dA.getFullYear():now.getFullYear(),(opt&DATE)?dA.getMonth():now.getMonth(),(opt&DATE)?dA.getDate():now.getDate(),(opt&TIME)?dA.getHours():0,(opt&TIME)?dA.getMinutes():0,(opt&TIME)?dA.getSeconds():0);
-var d2=new Date((opt&DATE)?dB.getFullYear():now.getFullYear(),(opt&DATE)?dB.getMonth():now.getMonth(),(opt&DATE)?dB.getDate():now.getDate(),(opt&TIME)?dB.getHours():0,(opt&TIME)?dB.getMinutes():0,(opt&TIME)?dB.getSeconds():0);
-}
-if(d1.valueOf()>d2.valueOf()){
-return 1;
-}
-if(d1.valueOf()<d2.valueOf()){
-return -1;
-}
+dojo.html.toPixelValue=function(_440,_441){
+if(!_441){
 return 0;
-};
-dojo.date.dateParts={YEAR:0,MONTH:1,DAY:2,HOUR:3,MINUTE:4,SECOND:5,MILLISECOND:6,QUARTER:7,WEEK:8,WEEKDAY:9};
-dojo.date.add=function(dt,_920,incr){
-if(typeof dt=="number"){
-dt=new Date(dt);
 }
-function fixOvershoot(){
-if(sum.getDate()<dt.getDate()){
-sum.setDate(0);
+if(_441.slice(-2)=="px"){
+return parseFloat(_441);
 }
-}
-var sum=new Date(dt);
-with(dojo.date.dateParts){
-switch(_920){
-case YEAR:
-sum.setFullYear(dt.getFullYear()+incr);
-fixOvershoot();
-break;
-case QUARTER:
-incr*=3;
-case MONTH:
-sum.setMonth(dt.getMonth()+incr);
-fixOvershoot();
-break;
-case WEEK:
-incr*=7;
-case DAY:
-sum.setDate(dt.getDate()+incr);
-break;
-case WEEKDAY:
-var dat=dt.getDate();
-var _924=0;
-var days=0;
-var strt=0;
-var trgt=0;
-var adj=0;
-var mod=incr%5;
-if(mod==0){
-days=(incr>0)?5:-5;
-_924=(incr>0)?((incr-5)/5):((incr+5)/5);
-}else{
-days=mod;
-_924=parseInt(incr/5);
-}
-strt=dt.getDay();
-if(strt==6&&incr>0){
-adj=1;
-}else{
-if(strt==0&&incr<0){
-adj=-1;
-}
-}
-trgt=(strt+days);
-if(trgt==0||trgt==6){
-adj=(incr>0)?2:-2;
-}
-sum.setDate(dat+(7*_924)+days+adj);
-break;
-case HOUR:
-sum.setHours(sum.getHours()+incr);
-break;
-case MINUTE:
-sum.setMinutes(sum.getMinutes()+incr);
-break;
-case SECOND:
-sum.setSeconds(sum.getSeconds()+incr);
-break;
-case MILLISECOND:
-sum.setMilliseconds(sum.getMilliseconds()+incr);
-break;
-default:
-break;
-}
-}
-return sum;
-};
-dojo.date.diff=function(dtA,dtB,_92c){
-if(typeof dtA=="number"){
-dtA=new Date(dtA);
-}
-if(typeof dtB=="number"){
-dtB=new Date(dtB);
-}
-var _92d=dtB.getFullYear()-dtA.getFullYear();
-var _92e=(dtB.getMonth()-dtA.getMonth())+(_92d*12);
-var _92f=dtB.getTime()-dtA.getTime();
-var _930=_92f/1000;
-var _931=_930/60;
-var _932=_931/60;
-var _933=_932/24;
-var _934=_933/7;
-var _935=0;
-with(dojo.date.dateParts){
-switch(_92c){
-case YEAR:
-_935=_92d;
-break;
-case QUARTER:
-var mA=dtA.getMonth();
-var mB=dtB.getMonth();
-var qA=Math.floor(mA/3)+1;
-var qB=Math.floor(mB/3)+1;
-qB+=(_92d*4);
-_935=qB-qA;
-break;
-case MONTH:
-_935=_92e;
-break;
-case WEEK:
-_935=parseInt(_934);
-break;
-case DAY:
-_935=_933;
-break;
-case WEEKDAY:
-var days=Math.round(_933);
-var _93b=parseInt(days/7);
-var mod=days%7;
-if(mod==0){
-days=_93b*5;
-}else{
-var adj=0;
-var aDay=dtA.getDay();
-var bDay=dtB.getDay();
-_93b=parseInt(days/7);
-mod=days%7;
-var _940=new Date(dtA);
-_940.setDate(_940.getDate()+(_93b*7));
-var _941=_940.getDay();
-if(_933>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 (_941+mod)>5:
-adj=-2;
-break;
-default:
-break;
-}
-}else{
-if(_933<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 (_941+mod)<0:
-adj=2;
-break;
-default:
-break;
-}
-}
-}
-days+=adj;
-days-=(_93b*2);
-}
-_935=days;
-break;
-case HOUR:
-_935=_932;
-break;
-case MINUTE:
-_935=_931;
-break;
-case SECOND:
-_935=_930;
-break;
-case MILLISECOND:
-_935=_92f;
-break;
-default:
-break;
-}
-}
-return Math.round(_935);
-};
-dojo.provide("dojo.date.supplemental");
-dojo.date.getFirstDayOfWeek=function(_942){
-var _943={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,gb:0,sy:4};
-_942=dojo.hostenv.normalizeLocale(_942);
-var _944=_942.split("-")[1];
-var dow=_943[_944];
-return (typeof dow=="undefined")?1:dow;
-};
-dojo.date.getWeekend=function(_946){
-var _947={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 _948={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};
-_946=dojo.hostenv.normalizeLocale(_946);
-var _949=_946.split("-")[1];
-var _94a=_947[_949];
-var end=_948[_949];
-if(typeof _94a=="undefined"){
-_94a=6;
-}
-if(typeof end=="undefined"){
-end=0;
-}
-return {start:_94a,end:end};
-};
-dojo.date.isWeekend=function(_94c,_94d){
-var _94e=dojo.date.getWeekend(_94d);
-var day=(_94c||new Date()).getDay();
-if(_94e.end<_94e.start){
-_94e.end+=7;
-if(day<_94e.start){
-day+=7;
-}
-}
-return day>=_94e.start&&day<=_94e.end;
-};
-dojo.provide("dojo.i18n.common");
-dojo.i18n.getLocalization=function(_950,_951,_952){
-dojo.hostenv.preloadLocalizations();
-_952=dojo.hostenv.normalizeLocale(_952);
-var _953=_952.split("-");
-var _954=[_950,"nls",_951].join(".");
-var _955=dojo.hostenv.findModule(_954,true);
-var _956;
-for(var i=_953.length;i>0;i--){
-var loc=_953.slice(0,i).join("_");
-if(_955[loc]){
-_956=_955[loc];
-break;
-}
-}
-if(!_956){
-_956=_955.ROOT;
-}
-if(_956){
-var _959=function(){
-};
-_959.prototype=_956;
-return new _959();
-}
-dojo.raise("Bundle not found: "+_951+" in "+_950+" , locale="+_952);
-};
-dojo.i18n.isLTR=function(_95a){
-var lang=dojo.hostenv.normalizeLocale(_95a).split("-")[0];
-var RTL={ar:true,fa:true,he:true,ur:true,yi:true};
-return !RTL[lang];
-};
-dojo.provide("dojo.date.format");
-(function(){
-dojo.date.format=function(_95d,_95e){
-if(typeof _95e=="string"){
-dojo.deprecated("dojo.date.format","To format dates with POSIX-style strings, please use dojo.date.strftime instead","0.5");
-return dojo.date.strftime(_95d,_95e);
-}
-function formatPattern(_95f,_960){
-return _960.replace(/([a-z])\1*/ig,function(_961){
-var s;
-var c=_961.charAt(0);
-var l=_961.length;
-var pad;
-var _966=["abbr","wide","narrow"];
-switch(c){
-case "G":
-if(l>3){
-dojo.unimplemented("Era format not implemented");
-}
-s=info.eras[_95f.getFullYear()<0?1:0];
-break;
-case "y":
-s=_95f.getFullYear();
-switch(l){
-case 1:
-break;
-case 2:
-s=String(s).substr(-2);
-break;
-default:
-pad=true;
-}
-break;
-case "Q":
-case "q":
-s=Math.ceil((_95f.getMonth()+1)/3);
-switch(l){
-case 1:
-case 2:
-pad=true;
-break;
-case 3:
-case 4:
-dojo.unimplemented("Quarter format not implemented");
-}
-break;
-case "M":
-case "L":
-var m=_95f.getMonth();
-var _969;
-switch(l){
-case 1:
-case 2:
-s=m+1;
-pad=true;
-break;
-case 3:
-case 4:
-case 5:
-_969=_966[l-3];
-break;
-}
-if(_969){
-var type=(c=="L")?"standalone":"format";
-var prop=["months",type,_969].join("-");
-s=info[prop][m];
-}
-break;
-case "w":
-var _96c=0;
-s=dojo.date.getWeekOfYear(_95f,_96c);
-pad=true;
-break;
-case "d":
-s=_95f.getDate();
-pad=true;
-break;
-case "D":
-s=dojo.date.getDayOfYear(_95f);
-pad=true;
-break;
-case "E":
-case "e":
-case "c":
-var d=_95f.getDay();
-var _969;
-switch(l){
-case 1:
-case 2:
-if(c=="e"){
-var _96e=dojo.date.getFirstDayOfWeek(_95e.locale);
-d=(d-_96e+7)%7;
-}
-if(c!="c"){
-s=d+1;
-pad=true;
-break;
-}
-case 3:
-case 4:
-case 5:
-_969=_966[l-3];
-break;
-}
-if(_969){
-var type=(c=="c")?"standalone":"format";
-var prop=["days",type,_969].join("-");
-s=info[prop][d];
-}
-break;
-case "a":
-var _96f=(_95f.getHours()<12)?"am":"pm";
-s=info[_96f];
-break;
-case "h":
-case "H":
-case "K":
-case "k":
-var h=_95f.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=_95f.getMinutes();
-pad=true;
-break;
-case "s":
-s=_95f.getSeconds();
-pad=true;
-break;
-case "S":
-s=Math.round(_95f.getMilliseconds()*Math.pow(10,l-3));
-break;
-case "v":
-case "z":
-s=dojo.date.getTimezoneName(_95f);
-if(s){
-break;
-}
-l=4;
-case "Z":
-var _971=_95f.getTimezoneOffset();
-var tz=[(_971<=0?"+":"-"),dojo.string.pad(Math.floor(Math.abs(_971)/60),2),dojo.string.pad(Math.abs(_971)%60,2)];
-if(l==4){
-tz.splice(0,0,"GMT");
-tz.splice(3,0,":");
-}
-s=tz.join("");
-break;
-case "Y":
-case "u":
-case "W":
-case "F":
-case "g":
-case "A":
-dojo.debug(_961+" modifier not yet implemented");
-s="?";
-break;
-default:
-dojo.raise("dojo.date.format: invalid pattern char: "+_960);
-}
-if(pad){
-s=dojo.string.pad(s,l);
-}
-return s;
-});
-}
-_95e=_95e||{};
-var _973=dojo.hostenv.normalizeLocale(_95e.locale);
-var _974=_95e.formatLength||"full";
-var info=dojo.date._getGregorianBundle(_973);
-var str=[];
-var _976=dojo.lang.curry(this,formatPattern,_95d);
-if(_95e.selector!="timeOnly"){
-var _977=_95e.datePattern||info["dateFormat-"+_974];
-if(_977){
-str.push(_processPattern(_977,_976));
-}
-}
-if(_95e.selector!="dateOnly"){
-var _978=_95e.timePattern||info["timeFormat-"+_974];
-if(_978){
-str.push(_processPattern(_978,_976));
-}
-}
-var _979=str.join(" ");
-return _979;
-};
-dojo.date.parse=function(_97a,_97b){
-_97b=_97b||{};
-var _97c=dojo.hostenv.normalizeLocale(_97b.locale);
-var info=dojo.date._getGregorianBundle(_97c);
-var _97e=_97b.formatLength||"full";
-if(!_97b.selector){
-_97b.selector="dateOnly";
-}
-var _97f=_97b.datePattern||info["dateFormat-"+_97e];
-var _980=_97b.timePattern||info["timeFormat-"+_97e];
-var _981;
-if(_97b.selector=="dateOnly"){
-_981=_97f;
-}else{
-if(_97b.selector=="timeOnly"){
-_981=_980;
-}else{
-if(_97b.selector=="dateTime"){
-_981=_97f+" "+_980;
-}else{
-var msg="dojo.date.parse: Unknown selector param passed: '"+_97b.selector+"'.";
-msg+=" Defaulting to date pattern.";
-dojo.debug(msg);
-_981=_97f;
-}
-}
-}
-var _983=[];
-var _984=_processPattern(_981,dojo.lang.curry(this,_buildDateTimeRE,_983,info,_97b));
-var _985=new RegExp("^"+_984+"$");
-var _986=_985.exec(_97a);
-if(!_986){
-return null;
-}
-var _987=["abbr","wide","narrow"];
-var _988=new Date(1972,0);
-var _989={};
-for(var i=1;i<_986.length;i++){
-var grp=_983[i-1];
-var l=grp.length;
-var v=_986[i];
-switch(grp.charAt(0)){
-case "y":
-if(l!=2){
-_988.setFullYear(v);
-_989.year=v;
-}else{
-if(v<100){
-v=Number(v);
-var year=""+new Date().getFullYear();
-var _98f=year.substring(0,2)*100;
-var _990=Number(year.substring(2,4));
-var _991=Math.min(_990+20,99);
-var num=(v<_991)?_98f+v:_98f-100+v;
-_988.setFullYear(num);
-_989.year=num;
-}else{
-if(_97b.strict){
-return null;
-}
-_988.setFullYear(v);
-_989.year=v;
-}
-}
-break;
-case "M":
-if(l>2){
-if(!_97b.strict){
-v=v.replace(/\./g,"");
-v=v.toLowerCase();
-}
-var _993=info["months-format-"+_987[l-3]].concat();
-for(var j=0;j<_993.length;j++){
-if(!_97b.strict){
-_993[j]=_993[j].toLowerCase();
-}
-if(v==_993[j]){
-_988.setMonth(j);
-_989.month=j;
-break;
-}
-}
-if(j==_993.length){
-dojo.debug("dojo.date.parse: Could not parse month name: '"+v+"'.");
-return null;
-}
-}else{
-_988.setMonth(v-1);
-_989.month=v-1;
-}
-break;
-case "E":
-case "e":
-if(!_97b.strict){
-v=v.toLowerCase();
-}
-var days=info["days-format-"+_987[l-3]].concat();
-for(var j=0;j<days.length;j++){
-if(!_97b.strict){
-days[j]=days[j].toLowerCase();
-}
-if(v==days[j]){
-break;
-}
-}
-if(j==days.length){
-dojo.debug("dojo.date.parse: Could not parse weekday name: '"+v+"'.");
-return null;
-}
-break;
-case "d":
-_988.setDate(v);
-_989.date=v;
-break;
-case "a":
-var am=_97b.am||info.am;
-var pm=_97b.pm||info.pm;
-if(!_97b.strict){
-v=v.replace(/\./g,"").toLowerCase();
-am=am.replace(/\./g,"").toLowerCase();
-pm=pm.replace(/\./g,"").toLowerCase();
-}
-if(_97b.strict&&v!=am&&v!=pm){
-dojo.debug("dojo.date.parse: Could not parse am/pm part.");
-return null;
-}
-var _998=_988.getHours();
-if(v==pm&&_998<12){
-_988.setHours(_998+12);
-}else{
-if(v==am&&_998==12){
-_988.setHours(0);
-}
-}
-break;
-case "K":
-if(v==24){
-v=0;
-}
-case "h":
-case "H":
-case "k":
-if(v>23){
-dojo.debug("dojo.date.parse: Illegal hours value");
-return null;
-}
-_988.setHours(v);
-break;
-case "m":
-_988.setMinutes(v);
-break;
-case "s":
-_988.setSeconds(v);
-break;
-case "S":
-_988.setMilliseconds(v);
-break;
-default:
-dojo.unimplemented("dojo.date.parse: unsupported pattern char="+grp.charAt(0));
-}
-}
-if(_989.year&&_988.getFullYear()!=_989.year){
-dojo.debug("Parsed year: '"+_988.getFullYear()+"' did not match input year: '"+_989.year+"'.");
-return null;
-}
-if(_989.month&&_988.getMonth()!=_989.month){
-dojo.debug("Parsed month: '"+_988.getMonth()+"' did not match input month: '"+_989.month+"'.");
-return null;
-}
-if(_989.date&&_988.getDate()!=_989.date){
-dojo.debug("Parsed day of month: '"+_988.getDate()+"' did not match input day of month: '"+_989.date+"'.");
-return null;
-}
-return _988;
-};
-function _processPattern(_999,_99a,_99b,_99c){
-var _99d=function(x){
-return x;
-};
-_99a=_99a||_99d;
-_99b=_99b||_99d;
-_99c=_99c||_99d;
-var _99f=_999.match(/(''|[^'])+/g);
-var _9a0=false;
-for(var i=0;i<_99f.length;i++){
-if(!_99f[i]){
-_99f[i]="";
-}else{
-_99f[i]=(_9a0?_99b:_99a)(_99f[i]);
-_9a0=!_9a0;
-}
-}
-return _99c(_99f.join(""));
-}
-function _buildDateTimeRE(_9a2,info,_9a4,_9a5){
-return _9a5.replace(/([a-z])\1*/ig,function(_9a6){
-var s;
-var c=_9a6.charAt(0);
-var l=_9a6.length;
-switch(c){
-case "y":
-s="\\d"+((l==2)?"{2,4}":"+");
-break;
-case "M":
-s=(l>2)?"\\S+":"\\d{1,2}";
-break;
-case "d":
-s="\\d{1,2}";
-break;
-case "E":
-s="\\S+";
-break;
-case "h":
-case "H":
-case "K":
-case "k":
-s="\\d{1,2}";
-break;
-case "m":
-case "s":
-s="[0-5]\\d";
-break;
-case "S":
-s="\\d{1,3}";
-break;
-case "a":
-var am=_9a4.am||info.am||"AM";
-var pm=_9a4.pm||info.pm||"PM";
-if(_9a4.strict){
-s=am+"|"+pm;
-}else{
-s=am;
-s+=(am!=am.toLowerCase())?"|"+am.toLowerCase():"";
-s+="|";
-s+=(pm!=pm.toLowerCase())?pm+"|"+pm.toLowerCase():pm;
-}
-break;
-default:
-dojo.unimplemented("parse of date format, pattern="+_9a5);
-}
-if(_9a2){
-_9a2.push(_9a6);
-}
-return "\\s*("+s+")\\s*";
-});
-}
-})();
-dojo.date.strftime=function(_9ac,_9ad,_9ae){
-var _9af=null;
-function _(s,n){
-return dojo.string.pad(s,n||2,_9af||"0");
-}
-var info=dojo.date._getGregorianBundle(_9ae);
-function $(_9b3){
-switch(_9b3){
-case "a":
-return dojo.date.getDayShortName(_9ac,_9ae);
-case "A":
-return dojo.date.getDayName(_9ac,_9ae);
-case "b":
-case "h":
-return dojo.date.getMonthShortName(_9ac,_9ae);
-case "B":
-return dojo.date.getMonthName(_9ac,_9ae);
-case "c":
-return dojo.date.format(_9ac,{locale:_9ae});
-case "C":
-return _(Math.floor(_9ac.getFullYear()/100));
-case "d":
-return _(_9ac.getDate());
-case "D":
-return $("m")+"/"+$("d")+"/"+$("y");
-case "e":
-if(_9af==null){
-_9af=" ";
-}
-return _(_9ac.getDate());
-case "f":
-if(_9af==null){
-_9af=" ";
-}
-return _(_9ac.getMonth()+1);
-case "g":
-break;
-case "G":
-dojo.unimplemented("unimplemented modifier 'G'");
-break;
-case "F":
-return $("Y")+"-"+$("m")+"-"+$("d");
-case "H":
-return _(_9ac.getHours());
-case "I":
-return _(_9ac.getHours()%12||12);
-case "j":
-return _(dojo.date.getDayOfYear(_9ac),3);
-case "k":
-if(_9af==null){
-_9af=" ";
-}
-return _(_9ac.getHours());
-case "l":
-if(_9af==null){
-_9af=" ";
-}
-return _(_9ac.getHours()%12||12);
-case "m":
-return _(_9ac.getMonth()+1);
-case "M":
-return _(_9ac.getMinutes());
-case "n":
-return "\n";
-case "p":
-return info[_9ac.getHours()<12?"am":"pm"];
-case "r":
-return $("I")+":"+$("M")+":"+$("S")+" "+$("p");
-case "R":
-return $("H")+":"+$("M");
-case "S":
-return _(_9ac.getSeconds());
-case "t":
-return "\t";
-case "T":
-return $("H")+":"+$("M")+":"+$("S");
-case "u":
-return String(_9ac.getDay()||7);
-case "U":
-return _(dojo.date.getWeekOfYear(_9ac));
-case "V":
-return _(dojo.date.getIsoWeekOfYear(_9ac));
-case "W":
-return _(dojo.date.getWeekOfYear(_9ac,1));
-case "w":
-return String(_9ac.getDay());
-case "x":
-return dojo.date.format(_9ac,{selector:"dateOnly",locale:_9ae});
-case "X":
-return dojo.date.format(_9ac,{selector:"timeOnly",locale:_9ae});
-case "y":
-return _(_9ac.getFullYear()%100);
-case "Y":
-return String(_9ac.getFullYear());
-case "z":
-var _9b4=_9ac.getTimezoneOffset();
-return (_9b4>0?"-":"+")+_(Math.floor(Math.abs(_9b4)/60))+":"+_(Math.abs(_9b4)%60);
-case "Z":
-return dojo.date.getTimezoneName(_9ac);
-case "%":
-return "%";
-}
-}
-var _9b5="";
-var i=0;
-var _9b7=0;
-var _9b8=null;
-while((_9b7=_9ad.indexOf("%",i))!=-1){
-_9b5+=_9ad.substring(i,_9b7++);
-switch(_9ad.charAt(_9b7++)){
-case "_":
-_9af=" ";
-break;
-case "-":
-_9af="";
-break;
-case "0":
-_9af="0";
-break;
-case "^":
-_9b8="upper";
-break;
-case "*":
-_9b8="lower";
-break;
-case "#":
-_9b8="swap";
-break;
-default:
-_9af=null;
-_9b7--;
-break;
-}
-var _9b9=$(_9ad.charAt(_9b7++));
-switch(_9b8){
-case "upper":
-_9b9=_9b9.toUpperCase();
-break;
-case "lower":
-_9b9=_9b9.toLowerCase();
-break;
-case "swap":
-var _9ba=_9b9.toLowerCase();
-var _9bb="";
-var j=0;
-var ch="";
-while(j<_9b9.length){
-ch=_9b9.charAt(j);
-_9bb+=(ch==_9ba.charAt(j))?ch.toUpperCase():ch.toLowerCase();
-j++;
-}
-_9b9=_9bb;
-break;
-default:
-break;
-}
-_9b8=null;
-_9b5+=_9b9;
-i=_9b7;
-}
-_9b5+=_9ad.substring(i);
-return _9b5;
-};
-(function(){
-var _9be=[];
-dojo.date.addCustomFormats=function(_9bf,_9c0){
-_9be.push({pkg:_9bf,name:_9c0});
-};
-dojo.date._getGregorianBundle=function(_9c1){
-var _9c2={};
-dojo.lang.forEach(_9be,function(desc){
-var _9c4=dojo.i18n.getLocalization(desc.pkg,desc.name,_9c1);
-_9c2=dojo.lang.mixin(_9c2,_9c4);
-},this);
-return _9c2;
-};
-})();
-dojo.date.addCustomFormats("dojo.i18n.calendar","gregorian");
-dojo.date.addCustomFormats("dojo.i18n.calendar","gregorianExtras");
-dojo.date.getNames=function(item,type,use,_9c8){
-var _9c9;
-var _9ca=dojo.date._getGregorianBundle(_9c8);
-var _9cb=[item,use,type];
-if(use=="standAlone"){
-_9c9=_9ca[_9cb.join("-")];
-}
-_9cb[1]="format";
-return (_9c9||_9ca[_9cb.join("-")]).concat();
-};
-dojo.date.getDayName=function(_9cc,_9cd){
-return dojo.date.getNames("days","wide","format",_9cd)[_9cc.getDay()];
-};
-dojo.date.getDayShortName=function(_9ce,_9cf){
-return dojo.date.getNames("days","abbr","format",_9cf)[_9ce.getDay()];
-};
-dojo.date.getMonthName=function(_9d0,_9d1){
-return dojo.date.getNames("months","wide","format",_9d1)[_9d0.getMonth()];
-};
-dojo.date.getMonthShortName=function(_9d2,_9d3){
-return dojo.date.getNames("months","abbr","format",_9d3)[_9d2.getMonth()];
-};
-dojo.date.toRelativeString=function(_9d4){
-var now=new Date();
-var diff=(now-_9d4)/1000;
-var end=" ago";
-var _9d8=false;
-if(diff<0){
-_9d8=true;
-end=" from now";
-diff=-diff;
-}
-if(diff<60){
-diff=Math.round(diff);
-return diff+" second"+(diff==1?"":"s")+end;
-}
-if(diff<60*60){
-diff=Math.round(diff/60);
-return diff+" minute"+(diff==1?"":"s")+end;
-}
-if(diff<60*60*24){
-diff=Math.round(diff/3600);
-return diff+" hour"+(diff==1?"":"s")+end;
-}
-if(diff<60*60*24*7){
-diff=Math.round(diff/(3600*24));
-if(diff==1){
-return _9d8?"Tomorrow":"Yesterday";
-}else{
-return diff+" days"+end;
-}
-}
-return dojo.date.format(_9d4);
-};
-dojo.date.toSql=function(_9d9,_9da){
-return dojo.date.strftime(_9d9,"%F"+!_9da?" %T":"");
-};
-dojo.date.fromSql=function(_9db){
-var _9dc=_9db.split(/[\- :]/g);
-while(_9dc.length<6){
-_9dc.push(0);
-}
-return new Date(_9dc[0],(parseInt(_9dc[1],10)-1),_9dc[2],_9dc[3],_9dc[4],_9dc[5]);
-};
-dojo.provide("dojo.widget.TimePicker");
-dojo.widget.defineWidget("dojo.widget.TimePicker",dojo.widget.HtmlWidget,function(){
-this.time="";
-this.useDefaultTime=false;
-this.useDefaultMinutes=false;
-this.storedTime="";
-this.currentTime={};
-this.classNames={selectedTime:"selectedItem"};
-this.any="any";
-this.selectedTime={hour:"",minute:"",amPm:"",anyTime:false};
-this.hourIndexMap=["",2,4,6,8,10,1,3,5,7,9,11,0];
-this.minuteIndexMap=[0,2,4,6,8,10,1,3,5,7,9,11];
-},{isContainer:false,templatePath:dojo.uri.dojoUri("src/widget/templates/TimePicker.html"),templateCssPath:dojo.uri.dojoUri("src/widget/templates/TimePicker.css"),postMixInProperties:function(_9dd,frag){
-dojo.widget.TimePicker.superclass.postMixInProperties.apply(this,arguments);
-this.calendar=dojo.i18n.getLocalization("dojo.i18n.calendar","gregorian",this.lang);
-this.widgetStrings=dojo.i18n.getLocalization("dojo.widget","TimePicker",this.lang);
-},fillInTemplate:function(args,frag){
-var _9e1=this.getFragNodeRef(frag);
-dojo.html.copyStyle(this.domNode,_9e1);
-if(args.value){
-if(args.value instanceof Date){
-this.storedTime=dojo.date.toRfc3339(args.value);
-}else{
-this.storedTime=args.value;
-}
-}
-this.initData();
-this.initUI();
-},initData:function(){
-if(this.storedTime.indexOf("T")!=-1&&this.storedTime.split("T")[1]&&this.storedTime!=" "&&this.storedTime.split("T")[1]!="any"){
-this.time=dojo.widget.TimePicker.util.fromRfcDateTime(this.storedTime,this.useDefaultMinutes,this.selectedTime.anyTime);
-}else{
-if(this.useDefaultTime){
-this.time=dojo.widget.TimePicker.util.fromRfcDateTime("",this.useDefaultMinutes,this.selectedTime.anyTime);
-}else{
-this.selectedTime.anyTime=true;
-this.time=dojo.widget.TimePicker.util.fromRfcDateTime("",0,1);
-}
-}
-},initUI:function(){
-if(!this.selectedTime.anyTime&&this.time){
-var _9e2=dojo.widget.TimePicker.util.toAmPmHour(this.time.getHours());
-var hour=_9e2[0];
-var isAm=_9e2[1];
-var _9e5=this.time.getMinutes();
-var _9e6=parseInt(_9e5/5);
-this.onSetSelectedHour(this.hourIndexMap[hour]);
-this.onSetSelectedMinute(this.minuteIndexMap[_9e6]);
-this.onSetSelectedAmPm(isAm);
-}else{
-this.onSetSelectedAnyTime();
-}
-},setTime:function(date){
-if(date){
-this.selectedTime.anyTime=false;
-this.setDateTime(dojo.date.toRfc3339(date));
-}else{
-this.selectedTime.anyTime=true;
-}
-this.initData();
-this.initUI();
-},setDateTime:function(_9e8){
-this.storedTime=_9e8;
-},onClearSelectedHour:function(evt){
-this.clearSelectedHour();
-},onClearSelectedMinute:function(evt){
-this.clearSelectedMinute();
-},onClearSelectedAmPm:function(evt){
-this.clearSelectedAmPm();
-},onClearSelectedAnyTime:function(evt){
-this.clearSelectedAnyTime();
-if(this.selectedTime.anyTime){
-this.selectedTime.anyTime=false;
-this.time=dojo.widget.TimePicker.util.fromRfcDateTime("",this.useDefaultMinutes);
-this.initUI();
-}
-},clearSelectedHour:function(){
-var _9ed=this.hourContainerNode.getElementsByTagName("td");
-for(var i=0;i<_9ed.length;i++){
-dojo.html.setClass(_9ed.item(i),"");
-}
-},clearSelectedMinute:function(){
-var _9ef=this.minuteContainerNode.getElementsByTagName("td");
-for(var i=0;i<_9ef.length;i++){
-dojo.html.setClass(_9ef.item(i),"");
-}
-},clearSelectedAmPm:function(){
-var _9f1=this.amPmContainerNode.getElementsByTagName("td");
-for(var i=0;i<_9f1.length;i++){
-dojo.html.setClass(_9f1.item(i),"");
-}
-},clearSelectedAnyTime:function(){
-dojo.html.setClass(this.anyTimeContainerNode,"anyTimeContainer");
-},onSetSelectedHour:function(evt){
-this.onClearSelectedAnyTime();
-this.onClearSelectedHour();
-this.setSelectedHour(evt);
-this.onSetTime();
-},setSelectedHour:function(evt){
-if(evt&&evt.target){
-if(evt.target.nodeType==dojo.dom.ELEMENT_NODE){
-var _9f5=evt.target;
-}else{
-var _9f5=evt.target.parentNode;
-}
-dojo.event.browser.stopEvent(evt);
-dojo.html.setClass(_9f5,this.classNames.selectedTime);
-this.selectedTime["hour"]=_9f5.innerHTML;
-}else{
-if(!isNaN(evt)){
-var _9f6=this.hourContainerNode.getElementsByTagName("td");
-if(_9f6.item(evt)){
-dojo.html.setClass(_9f6.item(evt),this.classNames.selectedTime);
-this.selectedTime["hour"]=_9f6.item(evt).innerHTML;
-}
-}
-}
-this.selectedTime.anyTime=false;
-},onSetSelectedMinute:function(evt){
-this.onClearSelectedAnyTime();
-this.onClearSelectedMinute();
-this.setSelectedMinute(evt);
-this.selectedTime.anyTime=false;
-this.onSetTime();
-},setSelectedMinute:function(evt){
-if(evt&&evt.target){
-if(evt.target.nodeType==dojo.dom.ELEMENT_NODE){
-var _9f9=evt.target;
-}else{
-var _9f9=evt.target.parentNode;
-}
-dojo.event.browser.stopEvent(evt);
-dojo.html.setClass(_9f9,this.classNames.selectedTime);
-this.selectedTime["minute"]=_9f9.innerHTML;
-}else{
-if(!isNaN(evt)){
-var _9fa=this.minuteContainerNode.getElementsByTagName("td");
-if(_9fa.item(evt)){
-dojo.html.setClass(_9fa.item(evt),this.classNames.selectedTime);
-this.selectedTime["minute"]=_9fa.item(evt).innerHTML;
-}
-}
-}
-},onSetSelectedAmPm:function(evt){
-this.onClearSelectedAnyTime();
-this.onClearSelectedAmPm();
-this.setSelectedAmPm(evt);
-this.selectedTime.anyTime=false;
-this.onSetTime();
-},setSelectedAmPm:function(evt){
-var _9fd=evt.target;
-if(evt&&_9fd){
-if(_9fd.nodeType!=dojo.dom.ELEMENT_NODE){
-_9fd=_9fd.parentNode;
-}
-dojo.event.browser.stopEvent(evt);
-this.selectedTime.amPm=_9fd.id;
-dojo.html.setClass(_9fd,this.classNames.selectedTime);
-}else{
-evt=evt?0:1;
-var _9fe=this.amPmContainerNode.getElementsByTagName("td");
-if(_9fe.item(evt)){
-this.selectedTime.amPm=_9fe.item(evt).id;
-dojo.html.setClass(_9fe.item(evt),this.classNames.selectedTime);
-}
-}
-},onSetSelectedAnyTime:function(evt){
-this.onClearSelectedHour();
-this.onClearSelectedMinute();
-this.onClearSelectedAmPm();
-this.setSelectedAnyTime();
-this.onSetTime();
-},setSelectedAnyTime:function(evt){
-this.selectedTime.anyTime=true;
-dojo.html.setClass(this.anyTimeContainerNode,this.classNames.selectedTime+" "+"anyTimeContainer");
-},onClick:function(evt){
-dojo.event.browser.stopEvent(evt);
-},onSetTime:function(){
-if(this.selectedTime.anyTime){
-this.time=new Date();
-var _a02=dojo.widget.TimePicker.util.toRfcDateTime(this.time);
-this.setDateTime(_a02.split("T")[0]);
-}else{
-var hour=12;
-var _a04=0;
-var isAm=false;
-if(this.selectedTime["hour"]){
-hour=parseInt(this.selectedTime["hour"],10);
-}
-if(this.selectedTime["minute"]){
-_a04=parseInt(this.selectedTime["minute"],10);
-}
-if(this.selectedTime["amPm"]){
-isAm=(this.selectedTime["amPm"].toLowerCase()=="am");
-}
-this.time=new Date();
-this.time.setHours(dojo.widget.TimePicker.util.fromAmPmHour(hour,isAm));
-this.time.setMinutes(_a04);
-this.setDateTime(dojo.widget.TimePicker.util.toRfcDateTime(this.time));
-}
-this.onValueChanged(this.time);
-},onValueChanged:function(date){
-}});
-dojo.widget.TimePicker.util=new function(){
-this.toRfcDateTime=function(_a07){
-if(!_a07){
-_a07=new Date();
-}
-_a07.setSeconds(0);
-return dojo.date.strftime(_a07,"%Y-%m-%dT%H:%M:00%z");
-};
-this.fromRfcDateTime=function(_a08,_a09,_a0a){
-var _a0b=new Date();
-if(!_a08||_a08.indexOf("T")==-1){
-if(_a09){
-_a0b.setMinutes(Math.floor(_a0b.getMinutes()/5)*5);
-}else{
-_a0b.setMinutes(0);
-}
-}else{
-var _a0c=_a08.split("T")[1].split(":");
-var _a0b=new Date();
-_a0b.setHours(_a0c[0]);
-_a0b.setMinutes(_a0c[1]);
-}
-return _a0b;
-};
-this.toAmPmHour=function(hour){
-var _a0e=hour;
-var isAm=true;
-if(_a0e==0){
-_a0e=12;
-}else{
-if(_a0e>12){
-_a0e=_a0e-12;
-isAm=false;
-}else{
-if(_a0e==12){
-isAm=false;
-}
-}
-}
-return [_a0e,isAm];
-};
-this.fromAmPmHour=function(_a10,isAm){
-var hour=parseInt(_a10,10);
-if(isAm&&hour==12){
-hour=0;
-}else{
-if(!isAm&&hour<12){
-hour=hour+12;
-}
-}
-return hour;
-};
-};
-
-
-__CPAN_EDITION__ dojoWebsite build.txt
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/dom.js,
-../src/xml/Parse.js,
-../src/lang/common.js,
-../src/lang/func.js,
-../src/lang/array.js,
-../src/lang/extras.js,
-../src/lang/declare.js,
-../src/ns.js,
-../src/event/common.js,
-../src/event/topic.js,
-../src/event/browser.js,
-../src/event/__package__.js,
-../src/widget/Manager.js,
-../src/uri/Uri.js,
-../src/uri/__package__.js,
-../src/html/common.js,
-../src/a11y.js,
-../src/widget/Widget.js,
-../src/widget/Parse.js,
-../src/html/style.js,
-../src/widget/DomWidget.js,
-../src/html/display.js,
-../src/html/layout.js,
-../src/html/util.js,
-../src/gfx/color.js,
-../src/lfx/Animation.js,
-../src/html/color.js,
-../src/lfx/html.js,
-../src/lfx/__package__.js,
-../src/lfx/toggle.js,
-../src/widget/HtmlWidget.js,
-../src/widget/__package__.js,
-../src/string/common.js,
-../src/string.js,
-../src/io/common.js,
-../src/string/extras.js,
-../src/undo/browser.js,
-../src/io/BrowserIO.js,
-../src/io/cookie.js,
-../src/io/__package__.js,
-../__package__.js,
-../src/widget/ContentPane.js,
-../src/html/__package__.js,
-../src/html/selection.js,
-../src/widget/Button.js,
-../src/date/serialize.js,
-../src/date/common.js,
-../src/date/supplemental.js,
-../src/i18n/common.js,
-../src/date/format.js,
-../src/widget/TimePicker.js
-
-		
-__CPAN_EDITION__ editor dojo.js
-/*
-	Copyright (c) 2004-2006, 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/community/licensing.shtml
-*/
-
-/*
-	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(typeof dojo=="undefined"){
-var dj_global=this;
-var dj_currentContext=this;
-function dj_undef(_1,_2){
-return (typeof (_2||dj_currentContext)[_1]=="undefined");
-}
-if(dj_undef("djConfig",this)){
-var djConfig={};
-}
-if(dj_undef("dojo",this)){
-var dojo={};
-}
-dojo.global=function(){
-return dj_currentContext;
-};
-dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
-with(dojo.version){
-return major+"."+minor+"."+patch+flag+" ("+revision+")";
-}
-}};
-dojo.evalProp=function(_3,_4,_5){
-if((!_4)||(!_3)){
-return undefined;
-}
-if(!dj_undef(_3,_4)){
-return _4[_3];
-}
-return (_5?(_4[_3]={}):undefined);
-};
-dojo.parseObjPath=function(_6,_7,_8){
-var _9=(_7||dojo.global());
-var _a=_6.split(".");
-var _b=_a.pop();
-for(var i=0,l=_a.length;i<l&&_9;i++){
-_9=dojo.evalProp(_a[i],_9,_8);
-}
-return {obj:_9,prop:_b};
-};
-dojo.evalObjPath=function(_e,_f){
-if(typeof _e!="string"){
-return dojo.global();
-}
-if(_e.indexOf(".")==-1){
-return dojo.evalProp(_e,dojo.global(),_f);
-}
-var ref=dojo.parseObjPath(_e,dojo.global(),_f);
-if(ref){
-return dojo.evalProp(ref.prop,ref.obj,_f);
-}
-return null;
-};
-dojo.errorToString=function(_11){
-if(!dj_undef("message",_11)){
-return _11.message;
-}else{
-if(!dj_undef("description",_11)){
-return _11.description;
-}else{
-return _11;
-}
-}
-};
-dojo.raise=function(_12,_13){
-if(_13){
-_12=_12+": "+dojo.errorToString(_13);
-}else{
-_12=dojo.errorToString(_12);
-}
+var _442=0;
+with(_440){
+var _443=style.left;
+var _444=runtimeStyle.left;
+runtimeStyle.left=currentStyle.left;
 try{
-if(djConfig.isDebug){
-dojo.hostenv.println("FATAL exception raised: "+_12);
+style.left=_441||0;
+_442=style.pixelLeft;
+style.left=_443;
+runtimeStyle.left=_444;
 }
-}
 catch(e){
 }
-throw _13||Error(_12);
-};
-dojo.debug=function(){
-};
-dojo.debugShallow=function(obj){
-};
-dojo.profile={start:function(){
-},end:function(){
-},stop:function(){
-},dump:function(){
-}};
-function dj_eval(_15){
-return dj_global.eval?dj_global.eval(_15):eval(_15);
 }
-dojo.unimplemented=function(_16,_17){
-var _18="'"+_16+"' not implemented";
-if(_17!=null){
-_18+=" "+_17;
-}
-dojo.raise(_18);
+return _442;
 };
-dojo.deprecated=function(_19,_1a,_1b){
-var _1c="DEPRECATED: "+_19;
-if(_1a){
-_1c+=" "+_1a;
-}
-if(_1b){
-_1c+=" -- will be removed in version: "+_1b;
-}
-dojo.debug(_1c);
-};
-dojo.render=(function(){
-function vscaffold(_1d,_1e){
-var tmp={capable:false,support:{builtin:false,plugin:false},prefixes:_1d};
-for(var i=0;i<_1e.length;i++){
-tmp[_1e[i]]=false;
-}
-return tmp;
-}
-return {name:"",ver:dojo.version,os:{win:false,linux:false,osx:false},html:vscaffold(["html"],["ie","opera","khtml","safari","moz"]),svg:vscaffold(["svg"],["corel","adobe","batik"]),vml:vscaffold(["vml"],["ie"]),swf:vscaffold(["Swf","Flash","Mm"],["mm"]),swt:vscaffold(["Swt"],["ibm"])};
-})();
-dojo.hostenv=(function(){
-var _21={isDebug:false,allowQueryConfig:false,baseScriptUri:"",baseRelativePath:"",libraryScriptUri:"",iePreventClobber:false,ieClobberMinimal:true,preventBackButtonFix:true,delayMozLoadingFix:false,searchIds:[],parseWidgets:true};
-if(typeof djConfig=="undefined"){
-djConfig=_21;
 }else{
-for(var _22 in _21){
-if(typeof djConfig[_22]=="undefined"){
-djConfig[_22]=_21[_22];
-}
-}
-}
-return {name_:"(unset)",version_:"(unset)",getName:function(){
-return this.name_;
-},getVersion:function(){
-return this.version_;
-},getText:function(uri){
-dojo.unimplemented("getText","uri="+uri);
-}};
-})();
-dojo.hostenv.getBaseScriptUri=function(){
-if(djConfig.baseScriptUri.length){
-return djConfig.baseScriptUri;
-}
-var uri=new String(djConfig.libraryScriptUri||djConfig.baseRelativePath);
-if(!uri){
-dojo.raise("Nothing returned by getLibraryScriptUri(): "+uri);
-}
-var _25=uri.lastIndexOf("/");
-djConfig.baseScriptUri=djConfig.baseRelativePath;
-return djConfig.baseScriptUri;
+dojo.html.toPixelValue=function(_445,_446){
+return (_446&&(_446.slice(-2)=="px")?parseFloat(_446):0);
 };
-(function(){
-var _26={pkgFileName:"__package__",loading_modules_:{},loaded_modules_:{},addedToLoadingCount:[],removedFromLoadingCount:[],inFlightCount:0,modulePrefixes_:{dojo:{name:"dojo",value:"src"}},setModulePrefix:function(_27,_28){
-this.modulePrefixes_[_27]={name:_27,value:_28};
-},moduleHasPrefix:function(_29){
-var mp=this.modulePrefixes_;
-return Boolean(mp[_29]&&mp[_29].value);
-},getModulePrefix:function(_2b){
-if(this.moduleHasPrefix(_2b)){
-return this.modulePrefixes_[_2b].value;
 }
-return _2b;
-},getTextStack:[],loadUriStack:[],loadedUris:[],post_load_:false,modulesLoadedListeners:[],unloadListeners:[],loadNotifying:false};
-for(var _2c in _26){
-dojo.hostenv[_2c]=_26[_2c];
-}
-})();
-dojo.hostenv.loadPath=function(_2d,_2e,cb){
-var uri;
-if(_2d.charAt(0)=="/"||_2d.match(/^\w+:/)){
-uri=_2d;
-}else{
-uri=this.getBaseScriptUri()+_2d;
-}
-if(djConfig.cacheBust&&dojo.render.html.capable){
-uri+="?"+String(djConfig.cacheBust).replace(/\W+/g,"");
-}
-try{
-return !_2e?this.loadUri(uri,cb):this.loadUriAndCheck(uri,_2e,cb);
-}
-catch(e){
-dojo.debug(e);
-return false;
-}
+dojo.html.getPixelValue=function(node,_448,_449){
+return dojo.html.toPixelValue(node,dojo.html.getComputedStyle(node,_448));
 };
-dojo.hostenv.loadUri=function(uri,cb){
-if(this.loadedUris[uri]){
-return true;
-}
-var _33=this.getText(uri,null,true);
-if(!_33){
+dojo.html.setPositivePixelValue=function(node,_44b,_44c){
+if(isNaN(_44c)){
 return false;
 }
-this.loadedUris[uri]=true;
-if(cb){
-_33="("+_33+")";
-}
-var _34=dj_eval(_33);
-if(cb){
-cb(_34);
-}
+node.style[_44b]=Math.max(0,_44c)+"px";
 return true;
 };
-dojo.hostenv.loadUriAndCheck=function(uri,_36,cb){
-var ok=true;
-try{
-ok=this.loadUri(uri,cb);
-}
-catch(e){
-dojo.debug("failed loading ",uri," with error: ",e);
-}
-return Boolean(ok&&this.findModule(_36,false));
-};
-dojo.loaded=function(){
-};
-dojo.unloaded=function(){
-};
-dojo.hostenv.loaded=function(){
-this.loadNotifying=true;
-this.post_load_=true;
-var mll=this.modulesLoadedListeners;
-for(var x=0;x<mll.length;x++){
-mll[x]();
-}
-this.modulesLoadedListeners=[];
-this.loadNotifying=false;
-dojo.loaded();
-};
-dojo.hostenv.unloaded=function(){
-var mll=this.unloadListeners;
-while(mll.length){
-(mll.pop())();
-}
-dojo.unloaded();
-};
-dojo.addOnLoad=function(obj,_3d){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.modulesLoadedListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.modulesLoadedListeners.push(function(){
-obj[_3d]();
-});
-}
-}
-if(dh.post_load_&&dh.inFlightCount==0&&!dh.loadNotifying){
-dh.callLoaded();
-}
-};
-dojo.addOnUnload=function(obj,_40){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.unloadListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.unloadListeners.push(function(){
-obj[_40]();
-});
-}
-}
-};
-dojo.hostenv.modulesLoaded=function(){
-if(this.post_load_){
-return;
-}
-if(this.loadUriStack.length==0&&this.getTextStack.length==0){
-if(this.inFlightCount>0){
-dojo.debug("files still in flight!");
-return;
-}
-dojo.hostenv.callLoaded();
-}
-};
-dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
-setTimeout("dojo.hostenv.loaded();",0);
-}else{
-dojo.hostenv.loaded();
-}
-};
-dojo.hostenv.getModuleSymbols=function(_42){
-var _43=_42.split(".");
-for(var i=_43.length;i>0;i--){
-var _45=_43.slice(0,i).join(".");
-if((i==1)&&!this.moduleHasPrefix(_45)){
-_43[0]="../"+_43[0];
-}else{
-var _46=this.getModulePrefix(_45);
-if(_46!=_45){
-_43.splice(0,i,_46);
-break;
-}
-}
-}
-return _43;
-};
-dojo.hostenv._global_omit_module_check=false;
-dojo.hostenv.loadModule=function(_47,_48,_49){
-if(!_47){
-return;
-}
-_49=this._global_omit_module_check||_49;
-var _4a=this.findModule(_47,false);
-if(_4a){
-return _4a;
-}
-if(dj_undef(_47,this.loading_modules_)){
-this.addedToLoadingCount.push(_47);
-}
-this.loading_modules_[_47]=1;
-var _4b=_47.replace(/\./g,"/")+".js";
-var _4c=_47.split(".");
-var _4d=this.getModuleSymbols(_47);
-var _4e=((_4d[0].charAt(0)!="/")&&!_4d[0].match(/^\w+:/));
-var _4f=_4d[_4d.length-1];
-var ok;
-if(_4f=="*"){
-_47=_4c.slice(0,-1).join(".");
-while(_4d.length){
-_4d.pop();
-_4d.push(this.pkgFileName);
-_4b=_4d.join("/")+".js";
-if(_4e&&_4b.charAt(0)=="/"){
-_4b=_4b.slice(1);
-}
-ok=this.loadPath(_4b,!_49?_47:null);
-if(ok){
-break;
-}
-_4d.pop();
-}
-}else{
-_4b=_4d.join("/")+".js";
-_47=_4c.join(".");
-var _51=!_49?_47:null;
-ok=this.loadPath(_4b,_51);
-if(!ok&&!_48){
-_4d.pop();
-while(_4d.length){
-_4b=_4d.join("/")+".js";
-ok=this.loadPath(_4b,_51);
-if(ok){
-break;
-}
-_4d.pop();
-_4b=_4d.join("/")+"/"+this.pkgFileName+".js";
-if(_4e&&_4b.charAt(0)=="/"){
-_4b=_4b.slice(1);
-}
-ok=this.loadPath(_4b,_51);
-if(ok){
-break;
-}
-}
-}
-if(!ok&&!_49){
-dojo.raise("Could not load '"+_47+"'; last tried '"+_4b+"'");
-}
-}
-if(!_49&&!this["isXDomain"]){
-_4a=this.findModule(_47,false);
-if(!_4a){
-dojo.raise("symbol '"+_47+"' is not defined after loading '"+_4b+"'");
-}
-}
-return _4a;
-};
-dojo.hostenv.startPackage=function(_52){
-var _53=String(_52);
-var _54=_53;
-var _55=_52.split(/\./);
-if(_55[_55.length-1]=="*"){
-_55.pop();
-_54=_55.join(".");
-}
-var _56=dojo.evalObjPath(_54,true);
-this.loaded_modules_[_53]=_56;
-this.loaded_modules_[_54]=_56;
-return _56;
-};
-dojo.hostenv.findModule=function(_57,_58){
-var lmn=String(_57);
-if(this.loaded_modules_[lmn]){
-return this.loaded_modules_[lmn];
-}
-if(_58){
-dojo.raise("no loaded module named '"+_57+"'");
-}
-return null;
-};
-dojo.kwCompoundRequire=function(_5a){
-var _5b=_5a["common"]||[];
-var _5c=_5a[dojo.hostenv.name_]?_5b.concat(_5a[dojo.hostenv.name_]||[]):_5b.concat(_5a["default"]||[]);
-for(var x=0;x<_5c.length;x++){
-var _5e=_5c[x];
-if(_5e.constructor==Array){
-dojo.hostenv.loadModule.apply(dojo.hostenv,_5e);
-}else{
-dojo.hostenv.loadModule(_5e);
-}
-}
-};
-dojo.require=function(_5f){
-dojo.hostenv.loadModule.apply(dojo.hostenv,arguments);
-};
-dojo.requireIf=function(_60,_61){
-var _62=arguments[0];
-if((_62===true)||(_62=="common")||(_62&&dojo.render[_62].capable)){
-var _63=[];
-for(var i=1;i<arguments.length;i++){
-_63.push(arguments[i]);
-}
-dojo.require.apply(dojo,_63);
-}
-};
-dojo.requireAfterIf=dojo.requireIf;
-dojo.provide=function(_65){
-return dojo.hostenv.startPackage.apply(dojo.hostenv,arguments);
-};
-dojo.registerModulePath=function(_66,_67){
-return dojo.hostenv.setModulePrefix(_66,_67);
-};
-dojo.setModulePrefix=function(_68,_69){
-dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
-return dojo.registerModulePath(_68,_69);
-};
-dojo.exists=function(obj,_6b){
-var p=_6b.split(".");
-for(var i=0;i<p.length;i++){
-if(!obj[p[i]]){
-return false;
-}
-obj=obj[p[i]];
-}
-return true;
-};
-dojo.hostenv.normalizeLocale=function(_6e){
-var _6f=_6e?_6e.toLowerCase():dojo.locale;
-if(_6f=="root"){
-_6f="ROOT";
-}
-return _6f;
-};
-dojo.hostenv.searchLocalePath=function(_70,_71,_72){
-_70=dojo.hostenv.normalizeLocale(_70);
-var _73=_70.split("-");
-var _74=[];
-for(var i=_73.length;i>0;i--){
-_74.push(_73.slice(0,i).join("-"));
-}
-_74.push(false);
-if(_71){
-_74.reverse();
-}
-for(var j=_74.length-1;j>=0;j--){
-var loc=_74[j]||"ROOT";
-var _78=_72(loc);
-if(_78){
-break;
-}
-}
-};
-dojo.hostenv.localesGenerated;
-dojo.hostenv.registerNlsPrefix=function(){
-dojo.registerModulePath("nls","nls");
-};
-dojo.hostenv.preloadLocalizations=function(){
-if(dojo.hostenv.localesGenerated){
-dojo.hostenv.registerNlsPrefix();
-function preload(_79){
-_79=dojo.hostenv.normalizeLocale(_79);
-dojo.hostenv.searchLocalePath(_79,true,function(loc){
-for(var i=0;i<dojo.hostenv.localesGenerated.length;i++){
-if(dojo.hostenv.localesGenerated[i]==loc){
-dojo["require"]("nls.dojo_"+loc);
-return true;
-}
-}
-return false;
-});
-}
-preload();
-var _7c=djConfig.extraLocale||[];
-for(var i=0;i<_7c.length;i++){
-preload(_7c[i]);
-}
-}
-dojo.hostenv.preloadLocalizations=function(){
-};
-};
-dojo.requireLocalization=function(_7e,_7f,_80,_81){
-dojo.hostenv.preloadLocalizations();
-var _82=dojo.hostenv.normalizeLocale(_80);
-var _83=[_7e,"nls",_7f].join(".");
-var _84="";
-if(_81){
-var _85=_81.split(",");
-for(var i=0;i<_85.length;i++){
-if(_82.indexOf(_85[i])==0){
-if(_85[i].length>_84.length){
-_84=_85[i];
-}
-}
-}
-if(!_84){
-_84="ROOT";
-}
-}
-var _87=_81?_84:_82;
-var _88=dojo.hostenv.findModule(_83);
-var _89=null;
-if(_88){
-if(djConfig.localizationComplete&&_88._built){
-return;
-}
-var _8a=_87.replace("-","_");
-var _8b=_83+"."+_8a;
-_89=dojo.hostenv.findModule(_8b);
-}
-if(!_89){
-_88=dojo.hostenv.startPackage(_83);
-var _8c=dojo.hostenv.getModuleSymbols(_7e);
-var _8d=_8c.concat("nls").join("/");
-var _8e;
-dojo.hostenv.searchLocalePath(_87,_81,function(loc){
-var _90=loc.replace("-","_");
-var _91=_83+"."+_90;
-var _92=false;
-if(!dojo.hostenv.findModule(_91)){
-dojo.hostenv.startPackage(_91);
-var _93=[_8d];
-if(loc!="ROOT"){
-_93.push(loc);
-}
-_93.push(_7f);
-var _94=_93.join("/")+".js";
-_92=dojo.hostenv.loadPath(_94,null,function(_95){
-var _96=function(){
-};
-_96.prototype=_8e;
-_88[_90]=new _96();
-for(var j in _95){
-_88[_90][j]=_95[j];
-}
-});
-}else{
-_92=true;
-}
-if(_92&&_88[_90]){
-_8e=_88[_90];
-}else{
-_88[_90]=_8e;
-}
-if(_81){
-return true;
-}
-});
-}
-if(_81&&_82!=_84){
-_88[_82.replace("-","_")]=_88[_84.replace("-","_")];
-}
-};
-(function(){
-var _98=djConfig.extraLocale;
-if(_98){
-if(!_98 instanceof Array){
-_98=[_98];
-}
-var req=dojo.requireLocalization;
-dojo.requireLocalization=function(m,b,_9c,_9d){
-req(m,b,_9c,_9d);
-if(_9c){
-return;
-}
-for(var i=0;i<_98.length;i++){
-req(m,b,_98[i],_9d);
-}
-};
-}
-})();
-}
-if(typeof window!="undefined"){
-(function(){
-if(djConfig.allowQueryConfig){
-var _9f=document.location.toString();
-var _a0=_9f.split("?",2);
-if(_a0.length>1){
-var _a1=_a0[1];
-var _a2=_a1.split("&");
-for(var x in _a2){
-var sp=_a2[x].split("=");
-if((sp[0].length>9)&&(sp[0].substr(0,9)=="djConfig.")){
-var opt=sp[0].substr(9);
-try{
-djConfig[opt]=eval(sp[1]);
-}
-catch(e){
-djConfig[opt]=sp[1];
-}
-}
-}
-}
-}
-if(((djConfig["baseScriptUri"]=="")||(djConfig["baseRelativePath"]==""))&&(document&&document.getElementsByTagName)){
-var _a6=document.getElementsByTagName("script");
-var _a7=/(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i;
-for(var i=0;i<_a6.length;i++){
-var src=_a6[i].getAttribute("src");
-if(!src){
-continue;
-}
-var m=src.match(_a7);
-if(m){
-var _ab=src.substring(0,m.index);
-if(src.indexOf("bootstrap1")>-1){
-_ab+="../";
-}
-if(!this["djConfig"]){
-djConfig={};
-}
-if(djConfig["baseScriptUri"]==""){
-djConfig["baseScriptUri"]=_ab;
-}
-if(djConfig["baseRelativePath"]==""){
-djConfig["baseRelativePath"]=_ab;
-}
-break;
-}
-}
-}
-var dr=dojo.render;
-var drh=dojo.render.html;
-var drs=dojo.render.svg;
-var dua=(drh.UA=navigator.userAgent);
-var dav=(drh.AV=navigator.appVersion);
-var t=true;
-var f=false;
-drh.capable=t;
-drh.support.builtin=t;
-dr.ver=parseFloat(drh.AV);
-dr.os.mac=dav.indexOf("Macintosh")>=0;
-dr.os.win=dav.indexOf("Windows")>=0;
-dr.os.linux=dav.indexOf("X11")>=0;
-drh.opera=dua.indexOf("Opera")>=0;
-drh.khtml=(dav.indexOf("Konqueror")>=0)||(dav.indexOf("Safari")>=0);
-drh.safari=dav.indexOf("Safari")>=0;
-var _b3=dua.indexOf("Gecko");
-drh.mozilla=drh.moz=(_b3>=0)&&(!drh.khtml);
-if(drh.mozilla){
-drh.geckoVersion=dua.substring(_b3+6,_b3+14);
-}
-drh.ie=(document.all)&&(!drh.opera);
-drh.ie50=drh.ie&&dav.indexOf("MSIE 5.0")>=0;
-drh.ie55=drh.ie&&dav.indexOf("MSIE 5.5")>=0;
-drh.ie60=drh.ie&&dav.indexOf("MSIE 6.0")>=0;
-drh.ie70=drh.ie&&dav.indexOf("MSIE 7.0")>=0;
-var cm=document["compatMode"];
-drh.quirks=(cm=="BackCompat")||(cm=="QuirksMode")||drh.ie55||drh.ie50;
-dojo.locale=dojo.locale||(drh.ie?navigator.userLanguage:navigator.language).toLowerCase();
-dr.vml.capable=drh.ie;
-drs.capable=f;
-drs.support.plugin=f;
-drs.support.builtin=f;
-var _b5=window["document"];
-var tdi=_b5["implementation"];
-if((tdi)&&(tdi["hasFeature"])&&(tdi.hasFeature("org.w3c.dom.svg","1.0"))){
-drs.capable=t;
-drs.support.builtin=t;
-drs.support.plugin=f;
-}
-if(drh.safari){
-var tmp=dua.split("AppleWebKit/")[1];
-var ver=parseFloat(tmp.split(" ")[0]);
-if(ver>=420){
-drs.capable=t;
-drs.support.builtin=t;
-drs.support.plugin=f;
-}
-}else{
-}
-})();
-dojo.hostenv.startPackage("dojo.hostenv");
-dojo.render.name=dojo.hostenv.name_="browser";
-dojo.hostenv.searchIds=[];
-dojo.hostenv._XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];
-dojo.hostenv.getXmlhttpObject=function(){
-var _b9=null;
-var _ba=null;
-try{
-_b9=new XMLHttpRequest();
-}
-catch(e){
-}
-if(!_b9){
-for(var i=0;i<3;++i){
-var _bc=dojo.hostenv._XMLHTTP_PROGIDS[i];
-try{
-_b9=new ActiveXObject(_bc);
-}
-catch(e){
-_ba=e;
-}
-if(_b9){
-dojo.hostenv._XMLHTTP_PROGIDS=[_bc];
-break;
-}
-}
-}
-if(!_b9){
-return dojo.raise("XMLHTTP not available",_ba);
-}
-return _b9;
-};
-dojo.hostenv._blockAsync=false;
-dojo.hostenv.getText=function(uri,_be,_bf){
-if(!_be){
-this._blockAsync=true;
-}
-var _c0=this.getXmlhttpObject();
-function isDocumentOk(_c1){
-var _c2=_c1["status"];
-return Boolean((!_c2)||((200<=_c2)&&(300>_c2))||(_c2==304));
-}
-if(_be){
-var _c3=this,_c4=null,gbl=dojo.global();
-var xhr=dojo.evalObjPath("dojo.io.XMLHTTPTransport");
-_c0.onreadystatechange=function(){
-if(_c4){
-gbl.clearTimeout(_c4);
-_c4=null;
-}
-if(_c3._blockAsync||(xhr&&xhr._blockAsync)){
-_c4=gbl.setTimeout(function(){
-_c0.onreadystatechange.apply(this);
-},10);
-}else{
-if(4==_c0.readyState){
-if(isDocumentOk(_c0)){
-_be(_c0.responseText);
-}
-}
-}
-};
-}
-_c0.open("GET",uri,_be?true:false);
-try{
-_c0.send(null);
-if(_be){
-return null;
-}
-if(!isDocumentOk(_c0)){
-var err=Error("Unable to load "+uri+" status:"+_c0.status);
-err.status=_c0.status;
-err.responseText=_c0.responseText;
-throw err;
-}
-}
-catch(e){
-this._blockAsync=false;
-if((_bf)&&(!_be)){
-return null;
-}else{
-throw e;
-}
-}
-this._blockAsync=false;
-return _c0.responseText;
-};
-dojo.hostenv.defaultDebugContainerId="dojoDebug";
-dojo.hostenv._println_buffer=[];
-dojo.hostenv._println_safe=false;
-dojo.hostenv.println=function(_c8){
-if(!dojo.hostenv._println_safe){
-dojo.hostenv._println_buffer.push(_c8);
-}else{
-try{
-var _c9=document.getElementById(djConfig.debugContainerId?djConfig.debugContainerId:dojo.hostenv.defaultDebugContainerId);
-if(!_c9){
-_c9=dojo.body();
-}
-var div=document.createElement("div");
-div.appendChild(document.createTextNode(_c8));
-_c9.appendChild(div);
-}
-catch(e){
-try{
-document.write("<div>"+_c8+"</div>");
-}
-catch(e2){
-window.status=_c8;
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-dojo.hostenv._println_safe=true;
-while(dojo.hostenv._println_buffer.length>0){
-dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
-}
-});
-function dj_addNodeEvtHdlr(_cb,_cc,fp){
-var _ce=_cb["on"+_cc]||function(){
-};
-_cb["on"+_cc]=function(){
-fp.apply(_cb,arguments);
-_ce.apply(_cb,arguments);
-};
-return true;
-}
-function dj_load_init(e){
-var _d0=(e&&e.type)?e.type.toLowerCase():"load";
-if(arguments.callee.initialized||(_d0!="domcontentloaded"&&_d0!="load")){
-return;
-}
-arguments.callee.initialized=true;
-if(typeof (_timer)!="undefined"){
-clearInterval(_timer);
-delete _timer;
-}
-var _d1=function(){
-if(dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-};
-if(dojo.hostenv.inFlightCount==0){
-_d1();
-dojo.hostenv.modulesLoaded();
-}else{
-dojo.hostenv.modulesLoadedListeners.unshift(_d1);
-}
-}
-if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
-document.addEventListener("DOMContentLoaded",dj_load_init,null);
-}
-window.addEventListener("load",dj_load_init,null);
-}
-if(dojo.render.html.ie&&dojo.render.os.win){
-document.attachEvent("onreadystatechange",function(e){
-if(document.readyState=="complete"){
-dj_load_init();
-}
-});
-}
-if(/(WebKit|khtml)/i.test(navigator.userAgent)){
-var _timer=setInterval(function(){
-if(/loaded|complete/.test(document.readyState)){
-dj_load_init();
-}
-},10);
-}
-if(dojo.render.html.ie){
-dj_addNodeEvtHdlr(window,"beforeunload",function(){
-dojo.hostenv._unloading=true;
-window.setTimeout(function(){
-dojo.hostenv._unloading=false;
-},0);
-});
-}
-dj_addNodeEvtHdlr(window,"unload",function(){
-dojo.hostenv.unloaded();
-if((!dojo.render.html.ie)||(dojo.render.html.ie&&dojo.hostenv._unloading)){
-dojo.hostenv.unloaded();
-}
-});
-dojo.hostenv.makeWidgets=function(){
-var _d3=[];
-if(djConfig.searchIds&&djConfig.searchIds.length>0){
-_d3=_d3.concat(djConfig.searchIds);
-}
-if(dojo.hostenv.searchIds&&dojo.hostenv.searchIds.length>0){
-_d3=_d3.concat(dojo.hostenv.searchIds);
-}
-if((djConfig.parseWidgets)||(_d3.length>0)){
-if(dojo.evalObjPath("dojo.widget.Parse")){
-var _d4=new dojo.xml.Parse();
-if(_d3.length>0){
-for(var x=0;x<_d3.length;x++){
-var _d6=document.getElementById(_d3[x]);
-if(!_d6){
-continue;
-}
-var _d7=_d4.parseElement(_d6,null,true);
-dojo.widget.getParser().createComponents(_d7);
-}
-}else{
-if(djConfig.parseWidgets){
-var _d7=_d4.parseElement(dojo.body(),null,true);
-dojo.widget.getParser().createComponents(_d7);
-}
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-if(!dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-});
-try{
-if(dojo.render.html.ie){
-document.namespaces.add("v","urn:schemas-microsoft-com:vml");
-document.createStyleSheet().addRule("v\\:*","behavior:url(#default#VML)");
-}
-}
-catch(e){
-}
-dojo.hostenv.writeIncludes=function(){
-};
-if(!dj_undef("document",this)){
-dj_currentDocument=this.document;
-}
-dojo.doc=function(){
-return dj_currentDocument;
-};
-dojo.body=function(){
-return dojo.doc().body||dojo.doc().getElementsByTagName("body")[0];
-};
-dojo.byId=function(id,doc){
-if((id)&&((typeof id=="string")||(id instanceof String))){
-if(!doc){
-doc=dj_currentDocument;
-}
-var ele=doc.getElementById(id);
-if(ele&&(ele.id!=id)&&doc.all){
-ele=null;
-eles=doc.all[id];
-if(eles){
-if(eles.length){
-for(var i=0;i<eles.length;i++){
-if(eles[i].id==id){
-ele=eles[i];
-break;
-}
-}
-}else{
-ele=eles;
-}
-}
-}
-return ele;
-}
-return id;
-};
-dojo.setContext=function(_dc,_dd){
-dj_currentContext=_dc;
-dj_currentDocument=_dd;
-};
-dojo._fireCallback=function(_de,_df,_e0){
-if((_df)&&((typeof _de=="string")||(_de instanceof String))){
-_de=_df[_de];
-}
-return (_df?_de.apply(_df,_e0||[]):_de());
-};
-dojo.withGlobal=function(_e1,_e2,_e3,_e4){
-var _e5;
-var _e6=dj_currentContext;
-var _e7=dj_currentDocument;
-try{
-dojo.setContext(_e1,_e1.document);
-_e5=dojo._fireCallback(_e2,_e3,_e4);
-}
-finally{
-dojo.setContext(_e6,_e7);
-}
-return _e5;
-};
-dojo.withDoc=function(_e8,_e9,_ea,_eb){
-var _ec;
-var _ed=dj_currentDocument;
-try{
-dj_currentDocument=_e8;
-_ec=dojo._fireCallback(_e9,_ea,_eb);
-}
-finally{
-dj_currentDocument=_ed;
-}
-return _ec;
-};
-}
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _ee=false;
-var _ef=false;
-var _f0=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_ee=true;
-}else{
-if(typeof this["load"]=="function"){
-_ef=true;
-}else{
-if(window.widget){
-_f0=true;
-}
-}
-}
-var _f1=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-_f1.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_ee)&&(!_f0)){
-_f1.push("browser_debug.js");
-}
-var _f2=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_f2=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<_f1.length;x++){
-var _f4=_f2+"src/"+_f1[x];
-if(_ee||_ef){
-load(_f4);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_f4+"'></scr"+"ipt>");
-}
-catch(e){
-var _f5=document.createElement("script");
-_f5.src=_f4;
-document.getElementsByTagName("head")[0].appendChild(_f5);
-}
-}
-}
-})();
-dojo.provide("dojo.dom");
-dojo.dom.ELEMENT_NODE=1;
-dojo.dom.ATTRIBUTE_NODE=2;
-dojo.dom.TEXT_NODE=3;
-dojo.dom.CDATA_SECTION_NODE=4;
-dojo.dom.ENTITY_REFERENCE_NODE=5;
-dojo.dom.ENTITY_NODE=6;
-dojo.dom.PROCESSING_INSTRUCTION_NODE=7;
-dojo.dom.COMMENT_NODE=8;
-dojo.dom.DOCUMENT_NODE=9;
-dojo.dom.DOCUMENT_TYPE_NODE=10;
-dojo.dom.DOCUMENT_FRAGMENT_NODE=11;
-dojo.dom.NOTATION_NODE=12;
-dojo.dom.dojoml="http://www.dojotoolkit.org/2004/dojoml";
-dojo.dom.xmlns={svg:"http://www.w3.org/2000/svg",smil:"http://www.w3.org/2001/SMIL20/",mml:"http://www.w3.org/1998/Math/MathML",cml:"http://www.xml-cml.org",xlink:"http://www.w3.org/1999/xlink",xhtml:"http://www.w3.org/1999/xhtml",xul:"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",xbl:"http://www.mozilla.org/xbl",fo:"http://www.w3.org/1999/XSL/Format",xsl:"http://www.w3.org/1999/XSL/Transform",xslt:"http://www.w3.org/1999/XSL/Transform",xi:"http://www.w3.org/2001/XInclude",xforms:"http://www.w3.org/2002/01/xforms",saxon:"http://icl.com/saxon",xalan:"http://xml.apache.org/xslt",xsd:"http://www.w3.org/2001/XMLSchema",dt:"http://www.w3.org/2001/XMLSchema-datatypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#",rdfs:"http://www.w3.org/2000/01/rdf-schema#",dc:"http://purl.org/dc/elements/1.1/",dcq:"http://purl.org/dc/qualifiers/1.0","soap-env":"http://schemas.xmlsoap.org/soap/envelope/",wsdl:"http://schemas.xmlsoap.org/wsdl/",AdobeExtensions:"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"};
-dojo.dom.isNode=function(wh){
-if(typeof Element=="function"){
-try{
-return wh instanceof Element;
-}
-catch(e){
-}
-}else{
-return wh&&!isNaN(wh.nodeType);
-}
-};
-dojo.dom.getUniqueId=function(){
-var _f7=dojo.doc();
-do{
-var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_f7.getElementById(id));
-return id;
-};
-dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_f9,_fa){
-var _fb=_f9.firstChild;
-while(_fb&&_fb.nodeType!=dojo.dom.ELEMENT_NODE){
-_fb=_fb.nextSibling;
-}
-if(_fa&&_fb&&_fb.tagName&&_fb.tagName.toLowerCase()!=_fa.toLowerCase()){
-_fb=dojo.dom.nextElement(_fb,_fa);
-}
-return _fb;
-};
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_fc,_fd){
-var _fe=_fc.lastChild;
-while(_fe&&_fe.nodeType!=dojo.dom.ELEMENT_NODE){
-_fe=_fe.previousSibling;
-}
-if(_fd&&_fe&&_fe.tagName&&_fe.tagName.toLowerCase()!=_fd.toLowerCase()){
-_fe=dojo.dom.prevElement(_fe,_fd);
-}
-return _fe;
-};
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(_ff,_100){
-if(!_ff){
-return null;
-}
-do{
-_ff=_ff.nextSibling;
-}while(_ff&&_ff.nodeType!=dojo.dom.ELEMENT_NODE);
-if(_ff&&_100&&_100.toLowerCase()!=_ff.tagName.toLowerCase()){
-return dojo.dom.nextElement(_ff,_100);
-}
-return _ff;
-};
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_102){
-if(!node){
-return null;
-}
-if(_102){
-_102=_102.toLowerCase();
-}
-do{
-node=node.previousSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_102&&_102.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_102);
-}
-return node;
-};
-dojo.dom.moveChildren=function(_103,_104,trim){
-var _106=0;
-if(trim){
-while(_103.hasChildNodes()&&_103.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_103.removeChild(_103.firstChild);
-}
-while(_103.hasChildNodes()&&_103.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_103.removeChild(_103.lastChild);
-}
-}
-while(_103.hasChildNodes()){
-_104.appendChild(_103.firstChild);
-_106++;
-}
-return _106;
-};
-dojo.dom.copyChildren=function(_107,_108,trim){
-var _10a=_107.cloneNode(true);
-return this.moveChildren(_10a,_108,trim);
-};
-dojo.dom.replaceChildren=function(node,_10c){
-var _10d=[];
-if(dojo.render.html.ie){
-for(var i=0;i<node.childNodes.length;i++){
-_10d.push(node.childNodes[i]);
-}
-}
-dojo.dom.removeChildren(node);
-node.appendChild(_10c);
-for(var i=0;i<_10d.length;i++){
-dojo.dom.destroyNode(_10d[i]);
-}
-};
-dojo.dom.removeChildren=function(node){
-var _110=node.childNodes.length;
-while(node.hasChildNodes()){
-dojo.dom.removeNode(node.firstChild);
-}
-return _110;
-};
-dojo.dom.replaceNode=function(node,_112){
-return node.parentNode.replaceChild(_112,node);
-};
-dojo.dom.destroyNode=function(node){
-if(node.parentNode){
-node=dojo.dom.removeNode(node);
-}
-if(node.nodeType!=3){
-if(dojo.evalObjPath("dojo.event.browser.clean",false)){
-dojo.event.browser.clean(node);
-}
-if(dojo.render.html.ie){
-node.outerHTML="";
-}
-}
-};
-dojo.dom.removeNode=function(node){
-if(node&&node.parentNode){
-return node.parentNode.removeChild(node);
-}
-};
-dojo.dom.getAncestors=function(node,_116,_117){
-var _118=[];
-var _119=(_116&&(_116 instanceof Function||typeof _116=="function"));
-while(node){
-if(!_119||_116(node)){
-_118.push(node);
-}
-if(_117&&_118.length>0){
-return _118[0];
-}
-node=node.parentNode;
-}
-if(_117){
-return null;
-}
-return _118;
-};
-dojo.dom.getAncestorsByTag=function(node,tag,_11c){
-tag=tag.toLowerCase();
-return dojo.dom.getAncestors(node,function(el){
-return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_11c);
-};
-dojo.dom.getFirstAncestorByTag=function(node,tag){
-return dojo.dom.getAncestorsByTag(node,tag,true);
-};
-dojo.dom.isDescendantOf=function(node,_121,_122){
-if(_122&&node){
-node=node.parentNode;
-}
-while(node){
-if(node==_121){
-return true;
-}
-node=node.parentNode;
-}
-return false;
-};
-dojo.dom.innerXML=function(node){
-if(node.innerXML){
-return node.innerXML;
-}else{
-if(node.xml){
-return node.xml;
-}else{
-if(typeof XMLSerializer!="undefined"){
-return (new XMLSerializer()).serializeToString(node);
-}
-}
-}
-};
-dojo.dom.createDocument=function(){
-var doc=null;
-var _125=dojo.doc();
-if(!dj_undef("ActiveXObject")){
-var _126=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_126.length;i++){
-try{
-doc=new ActiveXObject(_126[i]+".XMLDOM");
-}
-catch(e){
-}
-if(doc){
-break;
-}
-}
-}else{
-if((_125.implementation)&&(_125.implementation.createDocument)){
-doc=_125.implementation.createDocument("","",null);
-}
-}
-return doc;
-};
-dojo.dom.createDocumentFromText=function(str,_129){
-if(!_129){
-_129="text/xml";
-}
-if(!dj_undef("DOMParser")){
-var _12a=new DOMParser();
-return _12a.parseFromString(str,_129);
-}else{
-if(!dj_undef("ActiveXObject")){
-var _12b=dojo.dom.createDocument();
-if(_12b){
-_12b.async=false;
-_12b.loadXML(str);
-return _12b;
-}else{
-dojo.debug("toXml didn't work?");
-}
-}else{
-var _12c=dojo.doc();
-if(_12c.createElement){
-var tmp=_12c.createElement("xml");
-tmp.innerHTML=str;
-if(_12c.implementation&&_12c.implementation.createDocument){
-var _12e=_12c.implementation.createDocument("foo","",null);
-for(var i=0;i<tmp.childNodes.length;i++){
-_12e.importNode(tmp.childNodes.item(i),true);
-}
-return _12e;
-}
-return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
-}
-}
-}
-return null;
-};
-dojo.dom.prependChild=function(node,_131){
-if(_131.firstChild){
-_131.insertBefore(node,_131.firstChild);
-}else{
-_131.appendChild(node);
-}
-return true;
-};
-dojo.dom.insertBefore=function(node,ref,_134){
-if((_134!=true)&&(node===ref||node.nextSibling===ref)){
-return false;
-}
-var _135=ref.parentNode;
-_135.insertBefore(node,ref);
-return true;
-};
-dojo.dom.insertAfter=function(node,ref,_138){
-var pn=ref.parentNode;
-if(ref==pn.lastChild){
-if((_138!=true)&&(node===ref)){
-return false;
-}
-pn.appendChild(node);
-}else{
-return this.insertBefore(node,ref.nextSibling,_138);
-}
-return true;
-};
-dojo.dom.insertAtPosition=function(node,ref,_13c){
-if((!node)||(!ref)||(!_13c)){
-return false;
-}
-switch(_13c.toLowerCase()){
-case "before":
-return dojo.dom.insertBefore(node,ref);
-case "after":
-return dojo.dom.insertAfter(node,ref);
-case "first":
-if(ref.firstChild){
-return dojo.dom.insertBefore(node,ref.firstChild);
-}else{
-ref.appendChild(node);
-return true;
-}
-break;
-default:
-ref.appendChild(node);
-return true;
-}
-};
-dojo.dom.insertAtIndex=function(node,_13e,_13f){
-var _140=_13e.childNodes;
-if(!_140.length||_140.length==_13f){
-_13e.appendChild(node);
-return true;
-}
-if(_13f==0){
-return dojo.dom.prependChild(node,_13e);
-}
-return dojo.dom.insertAfter(node,_140[_13f-1]);
-};
-dojo.dom.textContent=function(node,text){
-if(arguments.length>1){
-var _143=dojo.doc();
-dojo.dom.replaceChildren(node,_143.createTextNode(text));
-return text;
-}else{
-if(node.textContent!=undefined){
-return node.textContent;
-}
-var _144="";
-if(node==null){
-return _144;
-}
-for(var i=0;i<node.childNodes.length;i++){
-switch(node.childNodes[i].nodeType){
-case 1:
-case 5:
-_144+=dojo.dom.textContent(node.childNodes[i]);
-break;
-case 3:
-case 2:
-case 4:
-_144+=node.childNodes[i].nodeValue;
-break;
-default:
-break;
-}
-}
-return _144;
-}
-};
-dojo.dom.hasParent=function(node){
-return Boolean(node&&node.parentNode&&dojo.dom.isNode(node.parentNode));
-};
-dojo.dom.isTag=function(node){
-if(node&&node.tagName){
-for(var i=1;i<arguments.length;i++){
-if(node.tagName==String(arguments[i])){
-return String(arguments[i]);
-}
-}
-}
-return "";
-};
-dojo.dom.setAttributeNS=function(elem,_14a,_14b,_14c){
-if(elem==null||((elem==undefined)&&(typeof elem=="undefined"))){
-dojo.raise("No element given to dojo.dom.setAttributeNS");
-}
-if(!((elem.setAttributeNS==undefined)&&(typeof elem.setAttributeNS=="undefined"))){
-elem.setAttributeNS(_14a,_14b,_14c);
-}else{
-var _14d=elem.ownerDocument;
-var _14e=_14d.createNode(2,_14b,_14a);
-_14e.nodeValue=_14c;
-elem.setAttributeNode(_14e);
-}
-};
-dojo.provide("dojo.xml.Parse");
-dojo.xml.Parse=function(){
-var isIE=((dojo.render.html.capable)&&(dojo.render.html.ie));
-function getTagName(node){
-try{
-return node.tagName.toLowerCase();
-}
-catch(e){
-return "";
-}
-}
-function getDojoTagName(node){
-var _152=getTagName(node);
-if(!_152){
-return "";
-}
-if((dojo.widget)&&(dojo.widget.tags[_152])){
-return _152;
-}
-var p=_152.indexOf(":");
-if(p>=0){
-return _152;
-}
-if(_152.substr(0,5)=="dojo:"){
-return _152;
-}
-if(dojo.render.html.capable&&dojo.render.html.ie&&node.scopeName!="HTML"){
-return node.scopeName.toLowerCase()+":"+_152;
-}
-if(_152.substr(0,4)=="dojo"){
-return "dojo:"+_152.substring(4);
-}
-var djt=node.getAttribute("dojoType")||node.getAttribute("dojotype");
-if(djt){
-if(djt.indexOf(":")<0){
-djt="dojo:"+djt;
-}
-return djt.toLowerCase();
-}
-djt=node.getAttributeNS&&node.getAttributeNS(dojo.dom.dojoml,"type");
-if(djt){
-return "dojo:"+djt.toLowerCase();
-}
-try{
-djt=node.getAttribute("dojo:type");
-}
-catch(e){
-}
-if(djt){
-return "dojo:"+djt.toLowerCase();
-}
-if((dj_global["djConfig"])&&(!djConfig["ignoreClassNames"])){
-var _155=node.className||node.getAttribute("class");
-if((_155)&&(_155.indexOf)&&(_155.indexOf("dojo-")!=-1)){
-var _156=_155.split(" ");
-for(var x=0,c=_156.length;x<c;x++){
-if(_156[x].slice(0,5)=="dojo-"){
-return "dojo:"+_156[x].substr(5).toLowerCase();
-}
-}
-}
-}
-return "";
-}
-this.parseElement=function(node,_15a,_15b,_15c){
-var _15d=getTagName(node);
-if(isIE&&_15d.indexOf("/")==0){
-return null;
-}
-try{
-var attr=node.getAttribute("parseWidgets");
-if(attr&&attr.toLowerCase()=="false"){
-return {};
-}
-}
-catch(e){
-}
-var _15f=true;
-if(_15b){
-var _160=getDojoTagName(node);
-_15d=_160||_15d;
-_15f=Boolean(_160);
-}
-var _161={};
-_161[_15d]=[];
-var pos=_15d.indexOf(":");
-if(pos>0){
-var ns=_15d.substring(0,pos);
-_161["ns"]=ns;
-if((dojo.ns)&&(!dojo.ns.allow(ns))){
-_15f=false;
-}
-}
-if(_15f){
-var _164=this.parseAttributes(node);
-for(var attr in _164){
-if((!_161[_15d][attr])||(typeof _161[_15d][attr]!="array")){
-_161[_15d][attr]=[];
-}
-_161[_15d][attr].push(_164[attr]);
-}
-_161[_15d].nodeRef=node;
-_161.tagName=_15d;
-_161.index=_15c||0;
-}
-var _165=0;
-for(var i=0;i<node.childNodes.length;i++){
-var tcn=node.childNodes.item(i);
-switch(tcn.nodeType){
-case dojo.dom.ELEMENT_NODE:
-var ctn=getDojoTagName(tcn)||getTagName(tcn);
-if(!_161[ctn]){
-_161[ctn]=[];
-}
-_161[ctn].push(this.parseElement(tcn,true,_15b,_165));
-if((tcn.childNodes.length==1)&&(tcn.childNodes.item(0).nodeType==dojo.dom.TEXT_NODE)){
-_161[ctn][_161[ctn].length-1].value=tcn.childNodes.item(0).nodeValue;
-}
-_165++;
-break;
-case dojo.dom.TEXT_NODE:
-if(node.childNodes.length==1){
-_161[_15d].push({value:node.childNodes.item(0).nodeValue});
-}
-break;
-default:
-break;
-}
-}
-return _161;
-};
-this.parseAttributes=function(node){
-var _16a={};
-var atts=node.attributes;
-var _16c,i=0;
-while((_16c=atts[i++])){
-if(isIE){
-if(!_16c){
-continue;
-}
-if((typeof _16c=="object")&&(typeof _16c.nodeValue=="undefined")||(_16c.nodeValue==null)||(_16c.nodeValue=="")){
-continue;
-}
-}
-var nn=_16c.nodeName.split(":");
-nn=(nn.length==2)?nn[1]:_16c.nodeName;
-_16a[nn]={value:_16c.nodeValue};
-}
-return _16a;
-};
-};
-dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_16f,_170){
-if(!dojo.lang.isFunction(_170)){
-dojo.raise("dojo.inherits: superclass argument ["+_170+"] must be a function (subclass: ["+_16f+"']");
-}
-_16f.prototype=new _170();
-_16f.prototype.constructor=_16f;
-_16f.superclass=_170.prototype;
-_16f["super"]=_170.prototype;
-};
-dojo.lang._mixin=function(obj,_172){
-var tobj={};
-for(var x in _172){
-if((typeof tobj[x]=="undefined")||(tobj[x]!=_172[x])){
-obj[x]=_172[x];
-}
-}
-if(dojo.render.html.ie&&(typeof (_172["toString"])=="function")&&(_172["toString"]!=obj["toString"])&&(_172["toString"]!=tobj["toString"])){
-obj.toString=_172.toString;
-}
-return obj;
-};
-dojo.lang.mixin=function(obj,_176){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(obj,arguments[i]);
-}
-return obj;
-};
-dojo.lang.extend=function(_179,_17a){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_179.prototype,arguments[i]);
-}
-return _179;
-};
-dojo.inherits=dojo.lang.inherits;
-dojo.mixin=dojo.lang.mixin;
-dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_17d,_17e,_17f,_180){
-if(!dojo.lang.isArrayLike(_17d)&&dojo.lang.isArrayLike(_17e)){
-dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_17d;
-_17d=_17e;
-_17e=temp;
-}
-var _182=dojo.lang.isString(_17d);
-if(_182){
-_17d=_17d.split("");
-}
-if(_180){
-var step=-1;
-var i=_17d.length-1;
-var end=-1;
-}else{
-var step=1;
-var i=0;
-var end=_17d.length;
-}
-if(_17f){
-while(i!=end){
-if(_17d[i]===_17e){
-return i;
-}
-i+=step;
-}
-}else{
-while(i!=end){
-if(_17d[i]==_17e){
-return i;
-}
-i+=step;
-}
-}
-return -1;
-};
-dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_186,_187,_188){
-return dojo.lang.find(_186,_187,_188,true);
-};
-dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_189,_18a){
-return dojo.lang.find(_189,_18a)>-1;
-};
-dojo.lang.isObject=function(it){
-if(typeof it=="undefined"){
-return false;
-}
-return (typeof it=="object"||it===null||dojo.lang.isArray(it)||dojo.lang.isFunction(it));
-};
-dojo.lang.isArray=function(it){
-return (it&&it instanceof Array||typeof it=="array");
-};
-dojo.lang.isArrayLike=function(it){
-if((!it)||(dojo.lang.isUndefined(it))){
-return false;
-}
-if(dojo.lang.isString(it)){
-return false;
-}
-if(dojo.lang.isFunction(it)){
-return false;
-}
-if(dojo.lang.isArray(it)){
-return true;
-}
-if((it.tagName)&&(it.tagName.toLowerCase()=="form")){
-return false;
-}
-if(dojo.lang.isNumber(it.length)&&isFinite(it.length)){
-return true;
-}
-return false;
-};
-dojo.lang.isFunction=function(it){
-return (it instanceof Function||typeof it=="function");
-};
-(function(){
-if((dojo.render.html.capable)&&(dojo.render.html["safari"])){
-dojo.lang.isFunction=function(it){
-if((typeof (it)=="function")&&(it=="[object NodeList]")){
-return false;
-}
-return (it instanceof Function||typeof it=="function");
-};
-}
-})();
-dojo.lang.isString=function(it){
-return (typeof it=="string"||it instanceof String);
-};
-dojo.lang.isAlien=function(it){
-if(!it){
-return false;
-}
-return !dojo.lang.isFunction(it)&&/\{\s*\[native code\]\s*\}/.test(String(it));
-};
-dojo.lang.isBoolean=function(it){
-return (it instanceof Boolean||typeof it=="boolean");
-};
-dojo.lang.isNumber=function(it){
-return (it instanceof Number||typeof it=="number");
-};
-dojo.lang.isUndefined=function(it){
-return ((typeof (it)=="undefined")&&(it==undefined));
-};
-dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_195,_196){
-var fcn=(dojo.lang.isString(_196)?_195[_196]:_196)||function(){
-};
-return function(){
-return fcn.apply(_195,arguments);
-};
-};
-dojo.lang.anonCtr=0;
-dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_198,_199,_19a){
-var nso=(_199||dojo.lang.anon);
-if((_19a)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
-for(var x in nso){
-try{
-if(nso[x]===_198){
-return x;
-}
-}
-catch(e){
-}
-}
-}
-var ret="__"+dojo.lang.anonCtr++;
-while(typeof nso[ret]!="undefined"){
-ret="__"+dojo.lang.anonCtr++;
-}
-nso[ret]=_198;
-return ret;
-};
-dojo.lang.forward=function(_19e){
-return function(){
-return this[_19e].apply(this,arguments);
-};
-};
-dojo.lang.curry=function(_19f,func){
-var _1a1=[];
-_19f=_19f||dj_global;
-if(dojo.lang.isString(func)){
-func=_19f[func];
-}
-for(var x=2;x<arguments.length;x++){
-_1a1.push(arguments[x]);
-}
-var _1a3=(func["__preJoinArity"]||func.length)-_1a1.length;
-function gather(_1a4,_1a5,_1a6){
-var _1a7=_1a6;
-var _1a8=_1a5.slice(0);
-for(var x=0;x<_1a4.length;x++){
-_1a8.push(_1a4[x]);
-}
-_1a6=_1a6-_1a4.length;
-if(_1a6<=0){
-var res=func.apply(_19f,_1a8);
-_1a6=_1a7;
-return res;
-}else{
-return function(){
-return gather(arguments,_1a8,_1a6);
-};
-}
-}
-return gather([],_1a1,_1a3);
-};
-dojo.lang.curryArguments=function(_1ab,func,args,_1ae){
-var _1af=[];
-var x=_1ae||0;
-for(x=_1ae;x<args.length;x++){
-_1af.push(args[x]);
-}
-return dojo.lang.curry.apply(dojo.lang,[_1ab,func].concat(_1af));
-};
-dojo.lang.tryThese=function(){
-for(var x=0;x<arguments.length;x++){
-try{
-if(typeof arguments[x]=="function"){
-var ret=(arguments[x]());
-if(ret){
-return ret;
-}
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-};
-dojo.lang.delayThese=function(farr,cb,_1b5,_1b6){
-if(!farr.length){
-if(typeof _1b6=="function"){
-_1b6();
-}
-return;
-}
-if((typeof _1b5=="undefined")&&(typeof cb=="number")){
-_1b5=cb;
-cb=function(){
-};
-}else{
-if(!cb){
-cb=function(){
-};
-if(!_1b5){
-_1b5=0;
-}
-}
-}
-setTimeout(function(){
-(farr.shift())();
-cb();
-dojo.lang.delayThese(farr,cb,_1b5,_1b6);
-},_1b5);
-};
-dojo.provide("dojo.lang.array");
-dojo.lang.mixin(dojo.lang,{has:function(obj,name){
-try{
-return typeof obj[name]!="undefined";
-}
-catch(e){
-return false;
-}
-},isEmpty:function(obj){
-if(dojo.lang.isObject(obj)){
-var tmp={};
-var _1bb=0;
-for(var x in obj){
-if(obj[x]&&(!tmp[x])){
-_1bb++;
-break;
-}
-}
-return _1bb==0;
-}else{
-if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
-return obj.length==0;
-}
-}
-},map:function(arr,obj,_1bf){
-var _1c0=dojo.lang.isString(arr);
-if(_1c0){
-arr=arr.split("");
-}
-if(dojo.lang.isFunction(obj)&&(!_1bf)){
-_1bf=obj;
-obj=dj_global;
-}else{
-if(dojo.lang.isFunction(obj)&&_1bf){
-var _1c1=obj;
-obj=_1bf;
-_1bf=_1c1;
-}
-}
-if(Array.map){
-var _1c2=Array.map(arr,_1bf,obj);
-}else{
-var _1c2=[];
-for(var i=0;i<arr.length;++i){
-_1c2.push(_1bf.call(obj,arr[i]));
-}
-}
-if(_1c0){
-return _1c2.join("");
-}else{
-return _1c2;
-}
-},reduce:function(arr,_1c5,obj,_1c7){
-var _1c8=_1c5;
-if(arguments.length==1){
-dojo.debug("dojo.lang.reduce called with too few arguments!");
-return false;
-}else{
-if(arguments.length==2){
-_1c7=_1c5;
-_1c8=arr.shift();
-}else{
-if(arguments.lenght==3){
-if(dojo.lang.isFunction(obj)){
-_1c7=obj;
-obj=null;
-}
-}else{
-if(dojo.lang.isFunction(obj)){
-var tmp=_1c7;
-_1c7=obj;
-obj=tmp;
-}
-}
-}
-}
-var ob=obj?obj:dj_global;
-dojo.lang.map(arr,function(val){
-_1c8=_1c7.call(ob,_1c8,val);
-});
-return _1c8;
-},forEach:function(_1cc,_1cd,_1ce){
-if(dojo.lang.isString(_1cc)){
-_1cc=_1cc.split("");
-}
-if(Array.forEach){
-Array.forEach(_1cc,_1cd,_1ce);
-}else{
-if(!_1ce){
-_1ce=dj_global;
-}
-for(var i=0,l=_1cc.length;i<l;i++){
-_1cd.call(_1ce,_1cc[i],i,_1cc);
-}
-}
-},_everyOrSome:function(_1d1,arr,_1d3,_1d4){
-if(dojo.lang.isString(arr)){
-arr=arr.split("");
-}
-if(Array.every){
-return Array[_1d1?"every":"some"](arr,_1d3,_1d4);
-}else{
-if(!_1d4){
-_1d4=dj_global;
-}
-for(var i=0,l=arr.length;i<l;i++){
-var _1d7=_1d3.call(_1d4,arr[i],i,arr);
-if(_1d1&&!_1d7){
-return false;
-}else{
-if((!_1d1)&&(_1d7)){
-return true;
-}
-}
-}
-return Boolean(_1d1);
-}
-},every:function(arr,_1d9,_1da){
-return this._everyOrSome(true,arr,_1d9,_1da);
-},some:function(arr,_1dc,_1dd){
-return this._everyOrSome(false,arr,_1dc,_1dd);
-},filter:function(arr,_1df,_1e0){
-var _1e1=dojo.lang.isString(arr);
-if(_1e1){
-arr=arr.split("");
-}
-var _1e2;
-if(Array.filter){
-_1e2=Array.filter(arr,_1df,_1e0);
-}else{
-if(!_1e0){
-if(arguments.length>=3){
-dojo.raise("thisObject doesn't exist!");
-}
-_1e0=dj_global;
-}
-_1e2=[];
-for(var i=0;i<arr.length;i++){
-if(_1df.call(_1e0,arr[i],i,arr)){
-_1e2.push(arr[i]);
-}
-}
-}
-if(_1e1){
-return _1e2.join("");
-}else{
-return _1e2;
-}
-},unnest:function(){
-var out=[];
-for(var i=0;i<arguments.length;i++){
-if(dojo.lang.isArrayLike(arguments[i])){
-var add=dojo.lang.unnest.apply(this,arguments[i]);
-out=out.concat(add);
-}else{
-out.push(arguments[i]);
-}
-}
-return out;
-},toArray:function(_1e7,_1e8){
-var _1e9=[];
-for(var i=_1e8||0;i<_1e7.length;i++){
-_1e9.push(_1e7[i]);
-}
-return _1e9;
-}});
-dojo.provide("dojo.lang.extras");
-dojo.lang.setTimeout=function(func,_1ec){
-var _1ed=window,_1ee=2;
-if(!dojo.lang.isFunction(func)){
-_1ed=func;
-func=_1ec;
-_1ec=arguments[2];
-_1ee++;
-}
-if(dojo.lang.isString(func)){
-func=_1ed[func];
-}
-var args=[];
-for(var i=_1ee;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-return dojo.global().setTimeout(function(){
-func.apply(_1ed,args);
-},_1ec);
-};
-dojo.lang.clearTimeout=function(_1f1){
-dojo.global().clearTimeout(_1f1);
-};
-dojo.lang.getNameInObj=function(ns,item){
-if(!ns){
-ns=dj_global;
-}
-for(var x in ns){
-if(ns[x]===item){
-return new String(x);
-}
-}
-return null;
-};
-dojo.lang.shallowCopy=function(obj,deep){
-var i,ret;
-if(obj===null){
-return null;
-}
-if(dojo.lang.isObject(obj)){
-ret=new obj.constructor();
-for(i in obj){
-if(dojo.lang.isUndefined(ret[i])){
-ret[i]=deep?dojo.lang.shallowCopy(obj[i],deep):obj[i];
-}
-}
-}else{
-if(dojo.lang.isArray(obj)){
-ret=[];
-for(i=0;i<obj.length;i++){
-ret[i]=deep?dojo.lang.shallowCopy(obj[i],deep):obj[i];
-}
-}else{
-ret=obj;
-}
-}
-return ret;
-};
-dojo.lang.firstValued=function(){
-for(var i=0;i<arguments.length;i++){
-if(typeof arguments[i]!="undefined"){
-return arguments[i];
-}
-}
-return undefined;
-};
-dojo.lang.getObjPathValue=function(_1fa,_1fb,_1fc){
-with(dojo.parseObjPath(_1fa,_1fb,_1fc)){
-return dojo.evalProp(prop,obj,_1fc);
-}
-};
-dojo.lang.setObjPathValue=function(_1fd,_1fe,_1ff,_200){
-dojo.deprecated("dojo.lang.setObjPathValue","use dojo.parseObjPath and the '=' operator","0.6");
-if(arguments.length<4){
-_200=true;
-}
-with(dojo.parseObjPath(_1fd,_1ff,_200)){
-if(obj&&(_200||(prop in obj))){
-obj[prop]=_1fe;
-}
-}
-};
-dojo.provide("dojo.lang.declare");
-dojo.lang.declare=function(_201,_202,init,_204){
-if((dojo.lang.isFunction(_204))||((!_204)&&(!dojo.lang.isFunction(init)))){
-var temp=_204;
-_204=init;
-init=temp;
-}
-var _206=[];
-if(dojo.lang.isArray(_202)){
-_206=_202;
-_202=_206.shift();
-}
-if(!init){
-init=dojo.evalObjPath(_201,false);
-if((init)&&(!dojo.lang.isFunction(init))){
-init=null;
-}
-}
-var ctor=dojo.lang.declare._makeConstructor();
-var scp=(_202?_202.prototype:null);
-if(scp){
-scp.prototyping=true;
-ctor.prototype=new _202();
-scp.prototyping=false;
-}
-ctor.superclass=scp;
-ctor.mixins=_206;
-for(var i=0,l=_206.length;i<l;i++){
-dojo.lang.extend(ctor,_206[i].prototype);
-}
-ctor.prototype.initializer=null;
-ctor.prototype.declaredClass=_201;
-if(dojo.lang.isArray(_204)){
-dojo.lang.extend.apply(dojo.lang,[ctor].concat(_204));
-}else{
-dojo.lang.extend(ctor,(_204)||{});
-}
-dojo.lang.extend(ctor,dojo.lang.declare._common);
-ctor.prototype.constructor=ctor;
-ctor.prototype.initializer=(ctor.prototype.initializer)||(init)||(function(){
-});
-var _20b=dojo.parseObjPath(_201,null,true);
-_20b.obj[_20b.prop]=ctor;
-return ctor;
-};
-dojo.lang.declare._makeConstructor=function(){
-return function(){
-var self=this._getPropContext();
-var s=self.constructor.superclass;
-if((s)&&(s.constructor)){
-if(s.constructor==arguments.callee){
-this._inherited("constructor",arguments);
-}else{
-this._contextMethod(s,"constructor",arguments);
-}
-}
-var ms=(self.constructor.mixins)||([]);
-for(var i=0,m;(m=ms[i]);i++){
-(((m.prototype)&&(m.prototype.initializer))||(m)).apply(this,arguments);
-}
-if((!this.prototyping)&&(self.initializer)){
-self.initializer.apply(this,arguments);
-}
-};
-};
-dojo.lang.declare._common={_getPropContext:function(){
-return (this.___proto||this);
-},_contextMethod:function(_211,_212,args){
-var _214,_215=this.___proto;
-this.___proto=_211;
-try{
-_214=_211[_212].apply(this,(args||[]));
-}
-catch(e){
-throw e;
-}
-finally{
-this.___proto=_215;
-}
-return _214;
-},_inherited:function(prop,args){
-var p=this._getPropContext();
-do{
-if((!p.constructor)||(!p.constructor.superclass)){
-return;
-}
-p=p.constructor.superclass;
-}while(!(prop in p));
-return (dojo.lang.isFunction(p[prop])?this._contextMethod(p,prop,args):p[prop]);
-},inherited:function(prop,args){
-dojo.deprecated("'inherited' method is dangerous, do not up-call! 'inherited' is slated for removal in 0.5; name your super class (or use superclass property) instead.","0.5");
-this._inherited(prop,args);
-}};
-dojo.declare=dojo.lang.declare;
-dojo.provide("dojo.ns");
-dojo.ns={namespaces:{},failed:{},loading:{},loaded:{},register:function(name,_21c,_21d,_21e){
-if(!_21e||!this.namespaces[name]){
-this.namespaces[name]=new dojo.ns.Ns(name,_21c,_21d);
-}
-},allow:function(name){
-if(this.failed[name]){
-return false;
-}
-if((djConfig.excludeNamespace)&&(dojo.lang.inArray(djConfig.excludeNamespace,name))){
-return false;
-}
-return ((name==this.dojo)||(!djConfig.includeNamespace)||(dojo.lang.inArray(djConfig.includeNamespace,name)));
-},get:function(name){
-return this.namespaces[name];
-},require:function(name){
-var ns=this.namespaces[name];
-if((ns)&&(this.loaded[name])){
-return ns;
-}
-if(!this.allow(name)){
-return false;
-}
-if(this.loading[name]){
-dojo.debug("dojo.namespace.require: re-entrant request to load namespace \""+name+"\" must fail.");
-return false;
-}
-var req=dojo.require;
-this.loading[name]=true;
-try{
-if(name=="dojo"){
-req("dojo.namespaces.dojo");
-}else{
-if(!dojo.hostenv.moduleHasPrefix(name)){
-dojo.registerModulePath(name,"../"+name);
-}
-req([name,"manifest"].join("."),false,true);
-}
-if(!this.namespaces[name]){
-this.failed[name]=true;
-}
-}
-finally{
-this.loading[name]=false;
-}
-return this.namespaces[name];
-}};
-dojo.ns.Ns=function(name,_225,_226){
-this.name=name;
-this.module=_225;
-this.resolver=_226;
-this._loaded=[];
-this._failed=[];
-};
-dojo.ns.Ns.prototype.resolve=function(name,_228,_229){
-if(!this.resolver||djConfig["skipAutoRequire"]){
-return false;
-}
-var _22a=this.resolver(name,_228);
-if((_22a)&&(!this._loaded[_22a])&&(!this._failed[_22a])){
-var req=dojo.require;
-req(_22a,false,true);
-if(dojo.hostenv.findModule(_22a,false)){
-this._loaded[_22a]=true;
-}else{
-if(!_229){
-dojo.raise("dojo.ns.Ns.resolve: module '"+_22a+"' not found after loading via namespace '"+this.name+"'");
-}
-this._failed[_22a]=true;
-}
-}
-return Boolean(this._loaded[_22a]);
-};
-dojo.registerNamespace=function(name,_22d,_22e){
-dojo.ns.register.apply(dojo.ns,arguments);
-};
-dojo.registerNamespaceResolver=function(name,_230){
-var n=dojo.ns.namespaces[name];
-if(n){
-n.resolver=_230;
-}
-};
-dojo.registerNamespaceManifest=function(_232,path,name,_235,_236){
-dojo.registerModulePath(name,path);
-dojo.registerNamespace(name,_235,_236);
-};
-dojo.registerNamespace("dojo","dojo.widget");
-dojo.provide("dojo.event.common");
-dojo.event=new function(){
-this._canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-function interpolateArgs(args,_238){
-var dl=dojo.lang;
-var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false};
-switch(args.length){
-case 0:
-return;
-case 1:
-return;
-case 2:
-ao.srcFunc=args[0];
-ao.adviceFunc=args[1];
-break;
-case 3:
-if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isString(args[2]))){
-ao.adviceType="after";
-ao.srcObj=args[0];
-ao.srcFunc=args[1];
-ao.adviceFunc=args[2];
-}else{
-if((dl.isString(args[1]))&&(dl.isString(args[2]))){
-ao.srcFunc=args[1];
-ao.adviceFunc=args[2];
-}else{
-if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isFunction(args[2]))){
-ao.adviceType="after";
-ao.srcObj=args[0];
-ao.srcFunc=args[1];
-var _23b=dl.nameAnonFunc(args[2],ao.adviceObj,_238);
-ao.adviceFunc=_23b;
-}else{
-if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
-ao.adviceType="after";
-ao.srcObj=dj_global;
-var _23b=dl.nameAnonFunc(args[0],ao.srcObj,_238);
-ao.srcFunc=_23b;
-ao.adviceObj=args[1];
-ao.adviceFunc=args[2];
-}
-}
-}
-}
-break;
-case 4:
-if((dl.isObject(args[0]))&&(dl.isObject(args[2]))){
-ao.adviceType="after";
-ao.srcObj=args[0];
-ao.srcFunc=args[1];
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-if((dl.isString(args[0]))&&(dl.isString(args[1]))&&(dl.isObject(args[2]))){
-ao.adviceType=args[0];
-ao.srcObj=dj_global;
-ao.srcFunc=args[1];
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
-ao.adviceType=args[0];
-ao.srcObj=dj_global;
-var _23b=dl.nameAnonFunc(args[1],dj_global,_238);
-ao.srcFunc=_23b;
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-var _23b=dl.nameAnonFunc(args[3],dj_global,_238);
-ao.adviceObj=dj_global;
-ao.adviceFunc=_23b;
-}else{
-if(dl.isObject(args[1])){
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-ao.adviceObj=dj_global;
-ao.adviceFunc=args[3];
-}else{
-if(dl.isObject(args[2])){
-ao.srcObj=dj_global;
-ao.srcFunc=args[1];
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-ao.srcObj=ao.adviceObj=ao.aroundObj=dj_global;
-ao.srcFunc=args[1];
-ao.adviceFunc=args[2];
-ao.aroundFunc=args[3];
-}
-}
-}
-}
-}
-}
-break;
-case 6:
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-ao.adviceObj=args[3];
-ao.adviceFunc=args[4];
-ao.aroundFunc=args[5];
-ao.aroundObj=dj_global;
-break;
-default:
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-ao.adviceObj=args[3];
-ao.adviceFunc=args[4];
-ao.aroundObj=args[5];
-ao.aroundFunc=args[6];
-ao.once=args[7];
-ao.delay=args[8];
-ao.rate=args[9];
-ao.adviceMsg=args[10];
-break;
-}
-if(dl.isFunction(ao.aroundFunc)){
-var _23b=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_238);
-ao.aroundFunc=_23b;
-}
-if(dl.isFunction(ao.srcFunc)){
-ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc);
-}
-if(dl.isFunction(ao.adviceFunc)){
-ao.adviceFunc=dl.getNameInObj(ao.adviceObj,ao.adviceFunc);
-}
-if((ao.aroundObj)&&(dl.isFunction(ao.aroundFunc))){
-ao.aroundFunc=dl.getNameInObj(ao.aroundObj,ao.aroundFunc);
-}
-if(!ao.srcObj){
-dojo.raise("bad srcObj for srcFunc: "+ao.srcFunc);
-}
-if(!ao.adviceObj){
-dojo.raise("bad adviceObj for adviceFunc: "+ao.adviceFunc);
-}
-if(!ao.adviceFunc){
-dojo.debug("bad adviceFunc for srcFunc: "+ao.srcFunc);
-dojo.debugShallow(ao);
-}
-return ao;
-}
-this.connect=function(){
-if(arguments.length==1){
-var ao=arguments[0];
-}else{
-var ao=interpolateArgs(arguments,true);
-}
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.connect(ao);
-}
-ao.srcFunc="onkeypress";
-}
-if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){
-var _23d={};
-for(var x in ao){
-_23d[x]=ao[x];
-}
-var mjps=[];
-dojo.lang.forEach(ao.srcObj,function(src){
-if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
-src=dojo.byId(src);
-}
-_23d.srcObj=src;
-mjps.push(dojo.event.connect.call(dojo.event,_23d));
-});
-return mjps;
-}
-var mjp=dojo.event.MethodJoinPoint.getForMethod(ao.srcObj,ao.srcFunc);
-if(ao.adviceFunc){
-var mjp2=dojo.event.MethodJoinPoint.getForMethod(ao.adviceObj,ao.adviceFunc);
-}
-mjp.kwAddAdvice(ao);
-return mjp;
-};
-this.log=function(a1,a2){
-var _245;
-if((arguments.length==1)&&(typeof a1=="object")){
-_245=a1;
-}else{
-_245={srcObj:a1,srcFunc:a2};
-}
-_245.adviceFunc=function(){
-var _246=[];
-for(var x=0;x<arguments.length;x++){
-_246.push(arguments[x]);
-}
-dojo.debug("("+_245.srcObj+")."+_245.srcFunc,":",_246.join(", "));
-};
-this.kwConnect(_245);
-};
-this.connectBefore=function(){
-var args=["before"];
-for(var i=0;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-return this.connect.apply(this,args);
-};
-this.connectAround=function(){
-var args=["around"];
-for(var i=0;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-return this.connect.apply(this,args);
-};
-this.connectOnce=function(){
-var ao=interpolateArgs(arguments,true);
-ao.once=true;
-return this.connect(ao);
-};
-this._kwConnectImpl=function(_24d,_24e){
-var fn=(_24e)?"disconnect":"connect";
-if(typeof _24d["srcFunc"]=="function"){
-_24d.srcObj=_24d["srcObj"]||dj_global;
-var _250=dojo.lang.nameAnonFunc(_24d.srcFunc,_24d.srcObj,true);
-_24d.srcFunc=_250;
-}
-if(typeof _24d["adviceFunc"]=="function"){
-_24d.adviceObj=_24d["adviceObj"]||dj_global;
-var _250=dojo.lang.nameAnonFunc(_24d.adviceFunc,_24d.adviceObj,true);
-_24d.adviceFunc=_250;
-}
-_24d.srcObj=_24d["srcObj"]||dj_global;
-_24d.adviceObj=_24d["adviceObj"]||_24d["targetObj"]||dj_global;
-_24d.adviceFunc=_24d["adviceFunc"]||_24d["targetFunc"];
-return dojo.event[fn](_24d);
-};
-this.kwConnect=function(_251){
-return this._kwConnectImpl(_251,false);
-};
-this.disconnect=function(){
-if(arguments.length==1){
-var ao=arguments[0];
-}else{
-var ao=interpolateArgs(arguments,true);
-}
-if(!ao.adviceFunc){
-return;
-}
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.disconnect(ao);
-}
-ao.srcFunc="onkeypress";
-}
-if(!ao.srcObj[ao.srcFunc]){
-return null;
-}
-var mjp=dojo.event.MethodJoinPoint.getForMethod(ao.srcObj,ao.srcFunc,true);
-mjp.removeAdvice(ao.adviceObj,ao.adviceFunc,ao.adviceType,ao.once);
-return mjp;
-};
-this.kwDisconnect=function(_254){
-return this._kwConnectImpl(_254,true);
-};
-};
-dojo.event.MethodInvocation=function(_255,obj,args){
-this.jp_=_255;
-this.object=obj;
-this.args=[];
-for(var x=0;x<args.length;x++){
-this.args[x]=args[x];
-}
-this.around_index=-1;
-};
-dojo.event.MethodInvocation.prototype.proceed=function(){
-this.around_index++;
-if(this.around_index>=this.jp_.around.length){
-return this.jp_.object[this.jp_.methodname].apply(this.jp_.object,this.args);
-}else{
-var ti=this.jp_.around[this.around_index];
-var mobj=ti[0]||dj_global;
-var meth=ti[1];
-return mobj[meth].call(mobj,this);
-}
-};
-dojo.event.MethodJoinPoint=function(obj,_25d){
-this.object=obj||dj_global;
-this.methodname=_25d;
-this.methodfunc=this.object[_25d];
-this.squelch=false;
-};
-dojo.event.MethodJoinPoint.getForMethod=function(obj,_25f){
-if(!obj){
-obj=dj_global;
-}
-if(!obj[_25f]){
-obj[_25f]=function(){
-};
-if(!obj[_25f]){
-dojo.raise("Cannot set do-nothing method on that object "+_25f);
-}
-}else{
-if((!dojo.lang.isFunction(obj[_25f]))&&(!dojo.lang.isAlien(obj[_25f]))){
-return null;
-}
-}
-var _260=_25f+"$joinpoint";
-var _261=_25f+"$joinpoint$method";
-var _262=obj[_260];
-if(!_262){
-var _263=false;
-if(dojo.event["browser"]){
-if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){
-_263=true;
-dojo.event.browser.addClobberNodeAttrs(obj,[_260,_261,_25f]);
-}
-}
-var _264=obj[_25f].length;
-obj[_261]=obj[_25f];
-_262=obj[_260]=new dojo.event.MethodJoinPoint(obj,_261);
-obj[_25f]=function(){
-var args=[];
-if((_263)&&(!arguments.length)){
-var evt=null;
-try{
-if(obj.ownerDocument){
-evt=obj.ownerDocument.parentWindow.event;
-}else{
-if(obj.documentElement){
-evt=obj.documentElement.ownerDocument.parentWindow.event;
-}else{
-if(obj.event){
-evt=obj.event;
-}else{
-evt=window.event;
-}
-}
-}
-}
-catch(e){
-evt=window.event;
-}
-if(evt){
-args.push(dojo.event.browser.fixEvent(evt,this));
-}
-}else{
-for(var x=0;x<arguments.length;x++){
-if((x==0)&&(_263)&&(dojo.event.browser.isEvent(arguments[x]))){
-args.push(dojo.event.browser.fixEvent(arguments[x],this));
-}else{
-args.push(arguments[x]);
-}
-}
-}
-return _262.run.apply(_262,args);
-};
-obj[_25f].__preJoinArity=_264;
-}
-return _262;
-};
-dojo.lang.extend(dojo.event.MethodJoinPoint,{unintercept:function(){
-this.object[this.methodname]=this.methodfunc;
-this.before=[];
-this.after=[];
-this.around=[];
-},disconnect:dojo.lang.forward("unintercept"),run:function(){
-var obj=this.object||dj_global;
-var args=arguments;
-var _26a=[];
-for(var x=0;x<args.length;x++){
-_26a[x]=args[x];
-}
-var _26c=function(marr){
-if(!marr){
-dojo.debug("Null argument to unrollAdvice()");
-return;
-}
-var _26e=marr[0]||dj_global;
-var _26f=marr[1];
-if(!_26e[_26f]){
-dojo.raise("function \""+_26f+"\" does not exist on \""+_26e+"\"");
-}
-var _270=marr[2]||dj_global;
-var _271=marr[3];
-var msg=marr[6];
-var _273;
-var to={args:[],jp_:this,object:obj,proceed:function(){
-return _26e[_26f].apply(_26e,to.args);
-}};
-to.args=_26a;
-var _275=parseInt(marr[4]);
-var _276=((!isNaN(_275))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
-if(marr[5]){
-var rate=parseInt(marr[5]);
-var cur=new Date();
-var _279=false;
-if((marr["last"])&&((cur-marr.last)<=rate)){
-if(dojo.event._canTimeout){
-if(marr["delayTimer"]){
-clearTimeout(marr.delayTimer);
-}
-var tod=parseInt(rate*2);
-var mcpy=dojo.lang.shallowCopy(marr);
-marr.delayTimer=setTimeout(function(){
-mcpy[5]=0;
-_26c(mcpy);
-},tod);
-}
-return;
-}else{
-marr.last=cur;
-}
-}
-if(_271){
-_270[_271].call(_270,to);
-}else{
-if((_276)&&((dojo.render.html)||(dojo.render.svg))){
-dj_global["setTimeout"](function(){
-if(msg){
-_26e[_26f].call(_26e,to);
-}else{
-_26e[_26f].apply(_26e,args);
-}
-},_275);
-}else{
-if(msg){
-_26e[_26f].call(_26e,to);
-}else{
-_26e[_26f].apply(_26e,args);
-}
-}
-}
-};
-var _27c=function(){
-if(this.squelch){
-try{
-return _26c.apply(this,arguments);
-}
-catch(e){
-dojo.debug(e);
-}
-}else{
-return _26c.apply(this,arguments);
-}
-};
-if((this["before"])&&(this.before.length>0)){
-dojo.lang.forEach(this.before.concat(new Array()),_27c);
-}
-var _27d;
-try{
-if((this["around"])&&(this.around.length>0)){
-var mi=new dojo.event.MethodInvocation(this,obj,args);
-_27d=mi.proceed();
-}else{
-if(this.methodfunc){
-_27d=this.object[this.methodname].apply(this.object,args);
-}
-}
-}
-catch(e){
-if(!this.squelch){
-dojo.debug(e,"when calling",this.methodname,"on",this.object,"with arguments",args);
-dojo.raise(e);
-}
-}
-if((this["after"])&&(this.after.length>0)){
-dojo.lang.forEach(this.after.concat(new Array()),_27c);
-}
-return (this.methodfunc)?_27d:null;
-},getArr:function(kind){
-var type="after";
-if((typeof kind=="string")&&(kind.indexOf("before")!=-1)){
-type="before";
-}else{
-if(kind=="around"){
-type="around";
-}
-}
-if(!this[type]){
-this[type]=[];
-}
-return this[type];
-},kwAddAdvice:function(args){
-this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"]);
-},addAdvice:function(_282,_283,_284,_285,_286,_287,once,_289,rate,_28b){
-var arr=this.getArr(_286);
-if(!arr){
-dojo.raise("bad this: "+this);
-}
-var ao=[_282,_283,_284,_285,_289,rate,_28b];
-if(once){
-if(this.hasAdvice(_282,_283,_286,arr)>=0){
-return;
-}
-}
-if(_287=="first"){
-arr.unshift(ao);
-}else{
-arr.push(ao);
-}
-},hasAdvice:function(_28e,_28f,_290,arr){
-if(!arr){
-arr=this.getArr(_290);
-}
-var ind=-1;
-for(var x=0;x<arr.length;x++){
-var aao=(typeof _28f=="object")?(new String(_28f)).toString():_28f;
-var a1o=(typeof arr[x][1]=="object")?(new String(arr[x][1])).toString():arr[x][1];
-if((arr[x][0]==_28e)&&(a1o==aao)){
-ind=x;
-}
-}
-return ind;
-},removeAdvice:function(_296,_297,_298,once){
-var arr=this.getArr(_298);
-var ind=this.hasAdvice(_296,_297,_298,arr);
-if(ind==-1){
-return false;
-}
-while(ind!=-1){
-arr.splice(ind,1);
-if(once){
-break;
-}
-ind=this.hasAdvice(_296,_297,_298,arr);
-}
-return true;
-}});
-dojo.provide("dojo.event.topic");
-dojo.event.topic=new function(){
-this.topics={};
-this.getTopic=function(_29c){
-if(!this.topics[_29c]){
-this.topics[_29c]=new this.TopicImpl(_29c);
-}
-return this.topics[_29c];
-};
-this.registerPublisher=function(_29d,obj,_29f){
-var _29d=this.getTopic(_29d);
-_29d.registerPublisher(obj,_29f);
-};
-this.subscribe=function(_2a0,obj,_2a2){
-var _2a0=this.getTopic(_2a0);
-_2a0.subscribe(obj,_2a2);
-};
-this.unsubscribe=function(_2a3,obj,_2a5){
-var _2a3=this.getTopic(_2a3);
-_2a3.unsubscribe(obj,_2a5);
-};
-this.destroy=function(_2a6){
-this.getTopic(_2a6).destroy();
-delete this.topics[_2a6];
-};
-this.publishApply=function(_2a7,args){
-var _2a7=this.getTopic(_2a7);
-_2a7.sendMessage.apply(_2a7,args);
-};
-this.publish=function(_2a9,_2aa){
-var _2a9=this.getTopic(_2a9);
-var args=[];
-for(var x=1;x<arguments.length;x++){
-args.push(arguments[x]);
-}
-_2a9.sendMessage.apply(_2a9,args);
-};
-};
-dojo.event.topic.TopicImpl=function(_2ad){
-this.topicName=_2ad;
-this.subscribe=function(_2ae,_2af){
-var tf=_2af||_2ae;
-var to=(!_2af)?dj_global:_2ae;
-return dojo.event.kwConnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
-};
-this.unsubscribe=function(_2b2,_2b3){
-var tf=(!_2b3)?_2b2:_2b3;
-var to=(!_2b3)?null:_2b2;
-return dojo.event.kwDisconnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
-};
-this._getJoinPoint=function(){
-return dojo.event.MethodJoinPoint.getForMethod(this,"sendMessage");
-};
-this.setSquelch=function(_2b6){
-this._getJoinPoint().squelch=_2b6;
-};
-this.destroy=function(){
-this._getJoinPoint().disconnect();
-};
-this.registerPublisher=function(_2b7,_2b8){
-dojo.event.connect(_2b7,_2b8,this,"sendMessage");
-};
-this.sendMessage=function(_2b9){
-};
-};
-dojo.provide("dojo.event.browser");
-dojo._ie_clobber=new function(){
-this.clobberNodes=[];
-function nukeProp(node,prop){
-try{
-node[prop]=null;
-}
-catch(e){
-}
-try{
-delete node[prop];
-}
-catch(e){
-}
-try{
-node.removeAttribute(prop);
-}
-catch(e){
-}
-}
-this.clobber=function(_2bc){
-var na;
-var tna;
-if(_2bc){
-tna=_2bc.all||_2bc.getElementsByTagName("*");
-na=[_2bc];
-for(var x=0;x<tna.length;x++){
-if(tna[x]["__doClobber__"]){
-na.push(tna[x]);
-}
-}
-}else{
-try{
-window.onload=null;
-}
-catch(e){
-}
-na=(this.clobberNodes.length)?this.clobberNodes:document.all;
-}
-tna=null;
-var _2c0={};
-for(var i=na.length-1;i>=0;i=i-1){
-var el=na[i];
-try{
-if(el&&el["__clobberAttrs__"]){
-for(var j=0;j<el.__clobberAttrs__.length;j++){
-nukeProp(el,el.__clobberAttrs__[j]);
-}
-nukeProp(el,"__clobberAttrs__");
-nukeProp(el,"__doClobber__");
-}
-}
-catch(e){
-}
-}
-na=null;
-};
-};
-if(dojo.render.html.ie){
-dojo.addOnUnload(function(){
-dojo._ie_clobber.clobber();
-try{
-if((dojo["widget"])&&(dojo.widget["manager"])){
-dojo.widget.manager.destroyAll();
-}
-}
-catch(e){
-}
-if(dojo.widget){
-for(var name in dojo.widget._templateCache){
-if(dojo.widget._templateCache[name].node){
-dojo.dom.destroyNode(dojo.widget._templateCache[name].node);
-dojo.widget._templateCache[name].node=null;
-delete dojo.widget._templateCache[name].node;
-}
-}
-}
-try{
-window.onload=null;
-}
-catch(e){
-}
-try{
-window.onunload=null;
-}
-catch(e){
-}
-dojo._ie_clobber.clobberNodes=[];
-});
-}
-dojo.event.browser=new function(){
-var _2c5=0;
-this.normalizedEventName=function(_2c6){
-switch(_2c6){
-case "CheckboxStateChange":
-case "DOMAttrModified":
-case "DOMMenuItemActive":
-case "DOMMenuItemInactive":
-case "DOMMouseScroll":
-case "DOMNodeInserted":
-case "DOMNodeRemoved":
-case "RadioStateChange":
-return _2c6;
-break;
-default:
-return _2c6.toLowerCase();
-break;
-}
-};
-this.clean=function(node){
-if(dojo.render.html.ie){
-dojo._ie_clobber.clobber(node);
-}
-};
-this.addClobberNode=function(node){
-if(!dojo.render.html.ie){
-return;
-}
-if(!node["__doClobber__"]){
-node.__doClobber__=true;
-dojo._ie_clobber.clobberNodes.push(node);
-node.__clobberAttrs__=[];
-}
-};
-this.addClobberNodeAttrs=function(node,_2ca){
-if(!dojo.render.html.ie){
-return;
-}
-this.addClobberNode(node);
-for(var x=0;x<_2ca.length;x++){
-node.__clobberAttrs__.push(_2ca[x]);
-}
-};
-this.removeListener=function(node,_2cd,fp,_2cf){
-if(!_2cf){
-var _2cf=false;
-}
-_2cd=dojo.event.browser.normalizedEventName(_2cd);
-if((_2cd=="onkey")||(_2cd=="key")){
-if(dojo.render.html.ie){
-this.removeListener(node,"onkeydown",fp,_2cf);
-}
-_2cd="onkeypress";
-}
-if(_2cd.substr(0,2)=="on"){
-_2cd=_2cd.substr(2);
-}
-if(node.removeEventListener){
-node.removeEventListener(_2cd,fp,_2cf);
-}
-};
-this.addListener=function(node,_2d1,fp,_2d3,_2d4){
-if(!node){
-return;
-}
-if(!_2d3){
-var _2d3=false;
-}
-_2d1=dojo.event.browser.normalizedEventName(_2d1);
-if((_2d1=="onkey")||(_2d1=="key")){
-if(dojo.render.html.ie){
-this.addListener(node,"onkeydown",fp,_2d3,_2d4);
-}
-_2d1="onkeypress";
-}
-if(_2d1.substr(0,2)!="on"){
-_2d1="on"+_2d1;
-}
-if(!_2d4){
-var _2d5=function(evt){
-if(!evt){
-evt=window.event;
-}
-var ret=fp(dojo.event.browser.fixEvent(evt,this));
-if(_2d3){
-dojo.event.browser.stopEvent(evt);
-}
-return ret;
-};
-}else{
-_2d5=fp;
-}
-if(node.addEventListener){
-node.addEventListener(_2d1.substr(2),_2d5,_2d3);
-return _2d5;
-}else{
-if(typeof node[_2d1]=="function"){
-var _2d8=node[_2d1];
-node[_2d1]=function(e){
-_2d8(e);
-return _2d5(e);
-};
-}else{
-node[_2d1]=_2d5;
-}
-if(dojo.render.html.ie){
-this.addClobberNodeAttrs(node,[_2d1]);
-}
-return _2d5;
-}
-};
-this.isEvent=function(obj){
-return (typeof obj!="undefined")&&(obj)&&(typeof Event!="undefined")&&(obj.eventPhase);
-};
-this.currentEvent=null;
-this.callListener=function(_2db,_2dc){
-if(typeof _2db!="function"){
-dojo.raise("listener not a function: "+_2db);
-}
-dojo.event.browser.currentEvent.currentTarget=_2dc;
-return _2db.call(_2dc,dojo.event.browser.currentEvent);
-};
-this._stopPropagation=function(){
-dojo.event.browser.currentEvent.cancelBubble=true;
-};
-this._preventDefault=function(){
-dojo.event.browser.currentEvent.returnValue=false;
-};
-this.keys={KEY_BACKSPACE:8,KEY_TAB:9,KEY_CLEAR:12,KEY_ENTER:13,KEY_SHIFT:16,KEY_CTRL:17,KEY_ALT:18,KEY_PAUSE:19,KEY_CAPS_LOCK:20,KEY_ESCAPE:27,KEY_SPACE:32,KEY_PAGE_UP:33,KEY_PAGE_DOWN:34,KEY_END:35,KEY_HOME:36,KEY_LEFT_ARROW:37,KEY_UP_ARROW:38,KEY_RIGHT_ARROW:39,KEY_DOWN_ARROW:40,KEY_INSERT:45,KEY_DELETE:46,KEY_HELP:47,KEY_LEFT_WINDOW:91,KEY_RIGHT_WINDOW:92,KEY_SELECT:93,KEY_NUMPAD_0:96,KEY_NUMPAD_1:97,KEY_NUMPAD_2:98,KEY_NUMPAD_3:99,KEY_NUMPAD_4:100,KEY_NUMPAD_5:101,KEY_NUMPAD_6:102,KEY_NUMPAD_7:103,KEY_NUMPAD_8:104,KEY_NUMPAD_9:105,KEY_NUMPAD_MULTIPLY:106,KEY_NUMPAD_PLUS:107,KEY_NUMPAD_ENTER:108,KEY_NUMPAD_MINUS:109,KEY_NUMPAD_PERIOD:110,KEY_NUMPAD_DIVIDE:111,KEY_F1:112,KEY_F2:113,KEY_F3:114,KEY_F4:115,KEY_F5:116,KEY_F6:117,KEY_F7:118,KEY_F8:119,KEY_F9:120,KEY_F10:121,KEY_F11:122,KEY_F12:123,KEY_F13:124,KEY_F14:125,KEY_F15:126,KEY_NUM_LOCK:144,KEY_SCROLL_LOCK:145};
-this.revKeys=[];
-for(var key in this.keys){
-this.revKeys[this.keys[key]]=key;
-}
-this.fixEvent=function(evt,_2df){
-if(!evt){
-if(window["event"]){
-evt=window.event;
-}
-}
-if((evt["type"])&&(evt["type"].indexOf("key")==0)){
-evt.keys=this.revKeys;
-for(var key in this.keys){
-evt[key]=this.keys[key];
-}
-if(evt["type"]=="keydown"&&dojo.render.html.ie){
-switch(evt.keyCode){
-case evt.KEY_SHIFT:
-case evt.KEY_CTRL:
-case evt.KEY_ALT:
-case evt.KEY_CAPS_LOCK:
-case evt.KEY_LEFT_WINDOW:
-case evt.KEY_RIGHT_WINDOW:
-case evt.KEY_SELECT:
-case evt.KEY_NUM_LOCK:
-case evt.KEY_SCROLL_LOCK:
-case evt.KEY_NUMPAD_0:
-case evt.KEY_NUMPAD_1:
-case evt.KEY_NUMPAD_2:
-case evt.KEY_NUMPAD_3:
-case evt.KEY_NUMPAD_4:
-case evt.KEY_NUMPAD_5:
-case evt.KEY_NUMPAD_6:
-case evt.KEY_NUMPAD_7:
-case evt.KEY_NUMPAD_8:
-case evt.KEY_NUMPAD_9:
-case evt.KEY_NUMPAD_PERIOD:
-break;
-case evt.KEY_NUMPAD_MULTIPLY:
-case evt.KEY_NUMPAD_PLUS:
-case evt.KEY_NUMPAD_ENTER:
-case evt.KEY_NUMPAD_MINUS:
-case evt.KEY_NUMPAD_DIVIDE:
-break;
-case evt.KEY_PAUSE:
-case evt.KEY_TAB:
-case evt.KEY_BACKSPACE:
-case evt.KEY_ENTER:
-case evt.KEY_ESCAPE:
-case evt.KEY_PAGE_UP:
-case evt.KEY_PAGE_DOWN:
-case evt.KEY_END:
-case evt.KEY_HOME:
-case evt.KEY_LEFT_ARROW:
-case evt.KEY_UP_ARROW:
-case evt.KEY_RIGHT_ARROW:
-case evt.KEY_DOWN_ARROW:
-case evt.KEY_INSERT:
-case evt.KEY_DELETE:
-case evt.KEY_F1:
-case evt.KEY_F2:
-case evt.KEY_F3:
-case evt.KEY_F4:
-case evt.KEY_F5:
-case evt.KEY_F6:
-case evt.KEY_F7:
-case evt.KEY_F8:
-case evt.KEY_F9:
-case evt.KEY_F10:
-case evt.KEY_F11:
-case evt.KEY_F12:
-case evt.KEY_F12:
-case evt.KEY_F13:
-case evt.KEY_F14:
-case evt.KEY_F15:
-case evt.KEY_CLEAR:
-case evt.KEY_HELP:
-evt.key=evt.keyCode;
-break;
-default:
-if(evt.ctrlKey||evt.altKey){
-var _2e1=evt.keyCode;
-if(_2e1>=65&&_2e1<=90&&evt.shiftKey==false){
-_2e1+=32;
-}
-if(_2e1>=1&&_2e1<=26&&evt.ctrlKey){
-_2e1+=96;
-}
-evt.key=String.fromCharCode(_2e1);
-}
-}
-}else{
-if(evt["type"]=="keypress"){
-if(dojo.render.html.opera){
-if(evt.which==0){
-evt.key=evt.keyCode;
-}else{
-if(evt.which>0){
-switch(evt.which){
-case evt.KEY_SHIFT:
-case evt.KEY_CTRL:
-case evt.KEY_ALT:
-case evt.KEY_CAPS_LOCK:
-case evt.KEY_NUM_LOCK:
-case evt.KEY_SCROLL_LOCK:
-break;
-case evt.KEY_PAUSE:
-case evt.KEY_TAB:
-case evt.KEY_BACKSPACE:
-case evt.KEY_ENTER:
-case evt.KEY_ESCAPE:
-evt.key=evt.which;
-break;
-default:
-var _2e1=evt.which;
-if((evt.ctrlKey||evt.altKey||evt.metaKey)&&(evt.which>=65&&evt.which<=90&&evt.shiftKey==false)){
-_2e1+=32;
-}
-evt.key=String.fromCharCode(_2e1);
-}
-}
-}
-}else{
-if(dojo.render.html.ie){
-if(!evt.ctrlKey&&!evt.altKey&&evt.keyCode>=evt.KEY_SPACE){
-evt.key=String.fromCharCode(evt.keyCode);
-}
-}else{
-if(dojo.render.html.safari){
-switch(evt.keyCode){
-case 25:
-evt.key=evt.KEY_TAB;
-evt.shift=true;
-break;
-case 63232:
-evt.key=evt.KEY_UP_ARROW;
-break;
-case 63233:
-evt.key=evt.KEY_DOWN_ARROW;
-break;
-case 63234:
-evt.key=evt.KEY_LEFT_ARROW;
-break;
-case 63235:
-evt.key=evt.KEY_RIGHT_ARROW;
-break;
-case 63236:
-evt.key=evt.KEY_F1;
-break;
-case 63237:
-evt.key=evt.KEY_F2;
-break;
-case 63238:
-evt.key=evt.KEY_F3;
-break;
-case 63239:
-evt.key=evt.KEY_F4;
-break;
-case 63240:
-evt.key=evt.KEY_F5;
-break;
-case 63241:
-evt.key=evt.KEY_F6;
-break;
-case 63242:
-evt.key=evt.KEY_F7;
-break;
-case 63243:
-evt.key=evt.KEY_F8;
-break;
-case 63244:
-evt.key=evt.KEY_F9;
-break;
-case 63245:
-evt.key=evt.KEY_F10;
-break;
-case 63246:
-evt.key=evt.KEY_F11;
-break;
-case 63247:
-evt.key=evt.KEY_F12;
-break;
-case 63250:
-evt.key=evt.KEY_PAUSE;
-break;
-case 63272:
-evt.key=evt.KEY_DELETE;
-break;
-case 63273:
-evt.key=evt.KEY_HOME;
-break;
-case 63275:
-evt.key=evt.KEY_END;
-break;
-case 63276:
-evt.key=evt.KEY_PAGE_UP;
-break;
-case 63277:
-evt.key=evt.KEY_PAGE_DOWN;
-break;
-case 63302:
-evt.key=evt.KEY_INSERT;
-break;
-case 63248:
-case 63249:
-case 63289:
-break;
-default:
-evt.key=evt.charCode>=evt.KEY_SPACE?String.fromCharCode(evt.charCode):evt.keyCode;
-}
-}else{
-evt.key=evt.charCode>0?String.fromCharCode(evt.charCode):evt.keyCode;
-}
-}
-}
-}
-}
-}
-if(dojo.render.html.ie){
-if(!evt.target){
-evt.target=evt.srcElement;
-}
-if(!evt.currentTarget){
-evt.currentTarget=(_2df?_2df:evt.srcElement);
-}
-if(!evt.layerX){
-evt.layerX=evt.offsetX;
-}
-if(!evt.layerY){
-evt.layerY=evt.offsetY;
-}
-var doc=(evt.srcElement&&evt.srcElement.ownerDocument)?evt.srcElement.ownerDocument:document;
-var _2e3=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
-if(!evt.pageX){
-evt.pageX=evt.clientX+(_2e3.scrollLeft||0);
-}
-if(!evt.pageY){
-evt.pageY=evt.clientY+(_2e3.scrollTop||0);
-}
-if(evt.type=="mouseover"){
-evt.relatedTarget=evt.fromElement;
-}
-if(evt.type=="mouseout"){
-evt.relatedTarget=evt.toElement;
-}
-this.currentEvent=evt;
-evt.callListener=this.callListener;
-evt.stopPropagation=this._stopPropagation;
-evt.preventDefault=this._preventDefault;
-}
-return evt;
-};
-this.stopEvent=function(evt){
-if(window.event){
-evt.cancelBubble=true;
-evt.returnValue=false;
-}else{
-evt.preventDefault();
-evt.stopPropagation();
-}
-};
-};
-dojo.provide("dojo.event.*");
-dojo.provide("dojo.widget.Manager");
-dojo.widget.manager=new function(){
-this.widgets=[];
-this.widgetIds=[];
-this.topWidgets={};
-var _2e5={};
-var _2e6=[];
-this.getUniqueId=function(_2e7){
-var _2e8;
-do{
-_2e8=_2e7+"_"+(_2e5[_2e7]!=undefined?++_2e5[_2e7]:_2e5[_2e7]=0);
-}while(this.getWidgetById(_2e8));
-return _2e8;
-};
-this.add=function(_2e9){
-this.widgets.push(_2e9);
-if(!_2e9.extraArgs["id"]){
-_2e9.extraArgs["id"]=_2e9.extraArgs["ID"];
-}
-if(_2e9.widgetId==""){
-if(_2e9["id"]){
-_2e9.widgetId=_2e9["id"];
-}else{
-if(_2e9.extraArgs["id"]){
-_2e9.widgetId=_2e9.extraArgs["id"];
-}else{
-_2e9.widgetId=this.getUniqueId(_2e9.ns+"_"+_2e9.widgetType);
-}
-}
-}
-if(this.widgetIds[_2e9.widgetId]){
-dojo.debug("widget ID collision on ID: "+_2e9.widgetId);
-}
-this.widgetIds[_2e9.widgetId]=_2e9;
-};
-this.destroyAll=function(){
-for(var x=this.widgets.length-1;x>=0;x--){
-try{
-this.widgets[x].destroy(true);
-delete this.widgets[x];
-}
-catch(e){
-}
-}
-};
-this.remove=function(_2eb){
-if(dojo.lang.isNumber(_2eb)){
-var tw=this.widgets[_2eb].widgetId;
-delete this.widgetIds[tw];
-this.widgets.splice(_2eb,1);
-}else{
-this.removeById(_2eb);
-}
-};
-this.removeById=function(id){
-if(!dojo.lang.isString(id)){
-id=id["widgetId"];
-if(!id){
-dojo.debug("invalid widget or id passed to removeById");
-return;
-}
-}
-for(var i=0;i<this.widgets.length;i++){
-if(this.widgets[i].widgetId==id){
-this.remove(i);
-break;
-}
-}
-};
-this.getWidgetById=function(id){
-if(dojo.lang.isString(id)){
-return this.widgetIds[id];
-}
-return id;
-};
-this.getWidgetsByType=function(type){
-var lt=type.toLowerCase();
-var _2f2=(type.indexOf(":")<0?function(x){
-return x.widgetType.toLowerCase();
-}:function(x){
-return x.getNamespacedType();
-});
-var ret=[];
-dojo.lang.forEach(this.widgets,function(x){
-if(_2f2(x)==lt){
-ret.push(x);
-}
-});
-return ret;
-};
-this.getWidgetsByFilter=function(_2f7,_2f8){
-var ret=[];
-dojo.lang.every(this.widgets,function(x){
-if(_2f7(x)){
-ret.push(x);
-if(_2f8){
-return false;
-}
-}
-return true;
-});
-return (_2f8?ret[0]:ret);
-};
-this.getAllWidgets=function(){
-return this.widgets.concat();
-};
-this.getWidgetByNode=function(node){
-var w=this.getAllWidgets();
-node=dojo.byId(node);
-for(var i=0;i<w.length;i++){
-if(w[i].domNode==node){
-return w[i];
-}
-}
-return null;
-};
-this.byId=this.getWidgetById;
-this.byType=this.getWidgetsByType;
-this.byFilter=this.getWidgetsByFilter;
-this.byNode=this.getWidgetByNode;
-var _2fe={};
-var _2ff=["dojo.widget"];
-for(var i=0;i<_2ff.length;i++){
-_2ff[_2ff[i]]=true;
-}
-this.registerWidgetPackage=function(_301){
-if(!_2ff[_301]){
-_2ff[_301]=true;
-_2ff.push(_301);
-}
-};
-this.getWidgetPackageList=function(){
-return dojo.lang.map(_2ff,function(elt){
-return (elt!==true?elt:undefined);
-});
-};
-this.getImplementation=function(_303,_304,_305,ns){
-var impl=this.getImplementationName(_303,ns);
-if(impl){
-var ret=_304?new impl(_304):new impl();
-return ret;
-}
-};
-function buildPrefixCache(){
-for(var _309 in dojo.render){
-if(dojo.render[_309]["capable"]===true){
-var _30a=dojo.render[_309].prefixes;
-for(var i=0;i<_30a.length;i++){
-_2e6.push(_30a[i].toLowerCase());
-}
-}
-}
-}
-var _30c=function(_30d,_30e){
-if(!_30e){
-return null;
-}
-for(var i=0,l=_2e6.length,_311;i<=l;i++){
-_311=(i<l?_30e[_2e6[i]]:_30e);
-if(!_311){
-continue;
-}
-for(var name in _311){
-if(name.toLowerCase()==_30d){
-return _311[name];
-}
-}
-}
-return null;
-};
-var _313=function(_314,_315){
-var _316=dojo.evalObjPath(_315,false);
-return (_316?_30c(_314,_316):null);
-};
-this.getImplementationName=function(_317,ns){
-var _319=_317.toLowerCase();
-ns=ns||"dojo";
-var imps=_2fe[ns]||(_2fe[ns]={});
-var impl=imps[_319];
-if(impl){
-return impl;
-}
-if(!_2e6.length){
-buildPrefixCache();
-}
-var _31c=dojo.ns.get(ns);
-if(!_31c){
-dojo.ns.register(ns,ns+".widget");
-_31c=dojo.ns.get(ns);
-}
-if(_31c){
-_31c.resolve(_317);
-}
-impl=_313(_319,_31c.module);
-if(impl){
-return (imps[_319]=impl);
-}
-_31c=dojo.ns.require(ns);
-if((_31c)&&(_31c.resolver)){
-_31c.resolve(_317);
-impl=_313(_319,_31c.module);
-if(impl){
-return (imps[_319]=impl);
-}
-}
-dojo.deprecated("dojo.widget.Manager.getImplementationName","Could not locate widget implementation for \""+_317+"\" in \""+_31c.module+"\" registered to namespace \""+_31c.name+"\". "+"Developers must specify correct namespaces for all non-Dojo widgets","0.5");
-for(var i=0;i<_2ff.length;i++){
-impl=_313(_319,_2ff[i]);
-if(impl){
-return (imps[_319]=impl);
-}
-}
-throw new Error("Could not locate widget implementation for \""+_317+"\" in \""+_31c.module+"\" registered to namespace \""+_31c.name+"\"");
-};
-this.resizing=false;
-this.onWindowResized=function(){
-if(this.resizing){
-return;
-}
-try{
-this.resizing=true;
-for(var id in this.topWidgets){
-var _31f=this.topWidgets[id];
-if(_31f.checkSize){
-_31f.checkSize();
-}
-}
-}
-catch(e){
-}
-finally{
-this.resizing=false;
-}
-};
-if(typeof window!="undefined"){
-dojo.addOnLoad(this,"onWindowResized");
-dojo.event.connect(window,"onresize",this,"onWindowResized");
-}
-};
-(function(){
-var dw=dojo.widget;
-var dwm=dw.manager;
-var h=dojo.lang.curry(dojo.lang,"hitch",dwm);
-var g=function(_324,_325){
-dw[(_325||_324)]=h(_324);
-};
-g("add","addWidget");
-g("destroyAll","destroyAllWidgets");
-g("remove","removeWidget");
-g("removeById","removeWidgetById");
-g("getWidgetById");
-g("getWidgetById","byId");
-g("getWidgetsByType");
-g("getWidgetsByFilter");
-g("getWidgetsByType","byType");
-g("getWidgetsByFilter","byFilter");
-g("getWidgetByNode","byNode");
-dw.all=function(n){
-var _327=dwm.getAllWidgets.apply(dwm,arguments);
-if(arguments.length>0){
-return _327[n];
-}
-return _327;
-};
-g("registerWidgetPackage");
-g("getImplementation","getWidgetImplementation");
-g("getImplementationName","getWidgetImplementationName");
-dw.widgets=dwm.widgets;
-dw.widgetIds=dwm.widgetIds;
-dw.root=dwm.root;
-})();
-dojo.provide("dojo.uri.Uri");
-dojo.uri=new function(){
-this.dojoUri=function(uri){
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(),uri);
-};
-this.moduleUri=function(_329,uri){
-var loc=dojo.hostenv.getModuleSymbols(_329).join("/");
-if(!loc){
-return null;
-}
-if(loc.lastIndexOf("/")!=loc.length-1){
-loc+="/";
-}
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri()+loc,uri);
-};
-this.Uri=function(){
-var uri=arguments[0];
-for(var i=1;i<arguments.length;i++){
-if(!arguments[i]){
-continue;
-}
-var _32e=new dojo.uri.Uri(arguments[i].toString());
-var _32f=new dojo.uri.Uri(uri.toString());
-if((_32e.path=="")&&(_32e.scheme==null)&&(_32e.authority==null)&&(_32e.query==null)){
-if(_32e.fragment!=null){
-_32f.fragment=_32e.fragment;
-}
-_32e=_32f;
-}else{
-if(_32e.scheme==null){
-_32e.scheme=_32f.scheme;
-if(_32e.authority==null){
-_32e.authority=_32f.authority;
-if(_32e.path.charAt(0)!="/"){
-var path=_32f.path.substring(0,_32f.path.lastIndexOf("/")+1)+_32e.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;
-}
-}
-}
-}
-_32e.path=segs.join("/");
-}
-}
-}
-}
-uri="";
-if(_32e.scheme!=null){
-uri+=_32e.scheme+":";
-}
-if(_32e.authority!=null){
-uri+="//"+_32e.authority;
-}
-uri+=_32e.path;
-if(_32e.query!=null){
-uri+="?"+_32e.query;
-}
-if(_32e.fragment!=null){
-uri+="#"+_32e.fragment;
-}
-}
-this.uri=uri.toString();
-var _333="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
-var r=this.uri.match(new RegExp(_333));
-this.scheme=r[2]||(r[1]?"":null);
-this.authority=r[4]||(r[3]?"":null);
-this.path=r[5];
-this.query=r[7]||(r[6]?"":null);
-this.fragment=r[9]||(r[8]?"":null);
-if(this.authority!=null){
-_333="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
-r=this.authority.match(new RegExp(_333));
-this.user=r[3]||null;
-this.password=r[4]||null;
-this.host=r[5];
-this.port=r[7]||null;
-}
-this.toString=function(){
-return this.uri;
-};
-};
-};
-dojo.provide("dojo.uri.*");
-dojo.provide("dojo.html.common");
-dojo.lang.mixin(dojo.html,dojo.dom);
-dojo.html.body=function(){
-dojo.deprecated("dojo.html.body() moved to dojo.body()","0.5");
-return dojo.body();
-};
-dojo.html.getEventTarget=function(evt){
-if(!evt){
-evt=dojo.global().event||{};
-}
-var t=(evt.srcElement?evt.srcElement:(evt.target?evt.target:null));
-while((t)&&(t.nodeType!=1)){
-t=t.parentNode;
-}
-return t;
-};
-dojo.html.getViewport=function(){
-var _337=dojo.global();
-var _338=dojo.doc();
-var w=0;
-var h=0;
-if(dojo.render.html.mozilla){
-w=_338.documentElement.clientWidth;
-h=_337.innerHeight;
-}else{
-if(!dojo.render.html.opera&&_337.innerWidth){
-w=_337.innerWidth;
-h=_337.innerHeight;
-}else{
-if(!dojo.render.html.opera&&dojo.exists(_338,"documentElement.clientWidth")){
-var w2=_338.documentElement.clientWidth;
-if(!w||w2&&w2<w){
-w=w2;
-}
-h=_338.documentElement.clientHeight;
-}else{
-if(dojo.body().clientWidth){
-w=dojo.body().clientWidth;
-h=dojo.body().clientHeight;
-}
-}
-}
-}
-return {width:w,height:h};
-};
-dojo.html.getScroll=function(){
-var _33c=dojo.global();
-var _33d=dojo.doc();
-var top=_33c.pageYOffset||_33d.documentElement.scrollTop||dojo.body().scrollTop||0;
-var left=_33c.pageXOffset||_33d.documentElement.scrollLeft||dojo.body().scrollLeft||0;
-return {top:top,left:left,offset:{x:left,y:top}};
-};
-dojo.html.getParentByType=function(node,type){
-var _342=dojo.doc();
-var _343=dojo.byId(node);
-type=type.toLowerCase();
-while((_343)&&(_343.nodeName.toLowerCase()!=type)){
-if(_343==(_342["body"]||_342["documentElement"])){
-return null;
-}
-_343=_343.parentNode;
-}
-return _343;
-};
-dojo.html.getAttribute=function(node,attr){
-node=dojo.byId(node);
-if((!node)||(!node.getAttribute)){
-return null;
-}
-var ta=typeof attr=="string"?attr:new String(attr);
-var v=node.getAttribute(ta.toUpperCase());
-if((v)&&(typeof v=="string")&&(v!="")){
-return v;
-}
-if(v&&v.value){
-return v.value;
-}
-if((node.getAttributeNode)&&(node.getAttributeNode(ta))){
-return (node.getAttributeNode(ta)).value;
-}else{
-if(node.getAttribute(ta)){
-return node.getAttribute(ta);
-}else{
-if(node.getAttribute(ta.toLowerCase())){
-return node.getAttribute(ta.toLowerCase());
-}
-}
-}
-return null;
-};
-dojo.html.hasAttribute=function(node,attr){
-return dojo.html.getAttribute(dojo.byId(node),attr)?true:false;
-};
-dojo.html.getCursorPosition=function(e){
-e=e||dojo.global().event;
-var _34b={x:0,y:0};
-if(e.pageX||e.pageY){
-_34b.x=e.pageX;
-_34b.y=e.pageY;
-}else{
-var de=dojo.doc().documentElement;
-var db=dojo.body();
-_34b.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
-_34b.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
-}
-return _34b;
-};
-dojo.html.isTag=function(node){
-node=dojo.byId(node);
-if(node&&node.tagName){
-for(var i=1;i<arguments.length;i++){
-if(node.tagName.toLowerCase()==String(arguments[i]).toLowerCase()){
-return String(arguments[i]).toLowerCase();
-}
-}
-}
-return "";
-};
-if(dojo.render.html.ie&&!dojo.render.html.ie70){
-if(window.location.href.substr(0,6).toLowerCase()!="https:"){
-(function(){
-var _350=dojo.doc().createElement("script");
-_350.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
-dojo.doc().getElementsByTagName("head")[0].appendChild(_350);
-})();
-}
-}else{
-dojo.html.createExternalElement=function(doc,tag){
-return doc.createElement(tag);
-};
-}
-dojo.html._callDeprecated=function(_353,_354,args,_356,_357){
-dojo.deprecated("dojo.html."+_353,"replaced by dojo.html."+_354+"("+(_356?"node, {"+_356+": "+_356+"}":"")+")"+(_357?"."+_357:""),"0.5");
-var _358=[];
-if(_356){
-var _359={};
-_359[_356]=args[1];
-_358.push(args[0]);
-_358.push(_359);
-}else{
-_358=args;
-}
-var ret=dojo.html[_354].apply(dojo.html,args);
-if(_357){
-return ret[_357];
-}else{
-return ret;
-}
-};
-dojo.html.getViewportWidth=function(){
-return dojo.html._callDeprecated("getViewportWidth","getViewport",arguments,null,"width");
-};
-dojo.html.getViewportHeight=function(){
-return dojo.html._callDeprecated("getViewportHeight","getViewport",arguments,null,"height");
-};
-dojo.html.getViewportSize=function(){
-return dojo.html._callDeprecated("getViewportSize","getViewport",arguments);
-};
-dojo.html.getScrollTop=function(){
-return dojo.html._callDeprecated("getScrollTop","getScroll",arguments,null,"top");
-};
-dojo.html.getScrollLeft=function(){
-return dojo.html._callDeprecated("getScrollLeft","getScroll",arguments,null,"left");
-};
-dojo.html.getScrollOffset=function(){
-return dojo.html._callDeprecated("getScrollOffset","getScroll",arguments,null,"offset");
-};
-dojo.provide("dojo.a11y");
-dojo.a11y={imgPath:dojo.uri.dojoUri("src/widget/templates/images"),doAccessibleCheck:true,accessible:null,checkAccessible:function(){
-if(this.accessible===null){
-this.accessible=false;
-if(this.doAccessibleCheck==true){
-this.accessible=this.testAccessible();
-}
-}
-return this.accessible;
-},testAccessible:function(){
-this.accessible=false;
-if(dojo.render.html.ie||dojo.render.html.mozilla){
-var div=document.createElement("div");
-div.style.backgroundImage="url(\""+this.imgPath+"/tab_close.gif\")";
-dojo.body().appendChild(div);
-var _35c=null;
-if(window.getComputedStyle){
-var _35d=getComputedStyle(div,"");
-_35c=_35d.getPropertyValue("background-image");
-}else{
-_35c=div.currentStyle.backgroundImage;
-}
-var _35e=false;
-if(_35c!=null&&(_35c=="none"||_35c=="url(invalid-url:)")){
-this.accessible=true;
-}
-dojo.body().removeChild(div);
-}
-return this.accessible;
-},setCheckAccessible:function(_35f){
-this.doAccessibleCheck=_35f;
-},setAccessibleMode:function(){
-if(this.accessible===null){
-if(this.checkAccessible()){
-dojo.render.html.prefixes.unshift("a11y");
-}
-}
-return this.accessible;
-}};
-dojo.provide("dojo.widget.Widget");
-dojo.declare("dojo.widget.Widget",null,function(){
-this.children=[];
-this.extraArgs={};
-},{parent:null,isTopLevel:false,disabled:false,isContainer:false,widgetId:"",widgetType:"Widget",ns:"dojo",getNamespacedType:function(){
-return (this.ns?this.ns+":"+this.widgetType:this.widgetType).toLowerCase();
-},toString:function(){
-return "[Widget "+this.getNamespacedType()+", "+(this.widgetId||"NO ID")+"]";
-},repr:function(){
-return this.toString();
-},enable:function(){
-this.disabled=false;
-},disable:function(){
-this.disabled=true;
-},onResized:function(){
-this.notifyChildrenOfResize();
-},notifyChildrenOfResize:function(){
-for(var i=0;i<this.children.length;i++){
-var _361=this.children[i];
-if(_361.onResized){
-_361.onResized();
-}
-}
-},create:function(args,_363,_364,ns){
-if(ns){
-this.ns=ns;
-}
-this.satisfyPropertySets(args,_363,_364);
-this.mixInProperties(args,_363,_364);
-this.postMixInProperties(args,_363,_364);
-dojo.widget.manager.add(this);
-this.buildRendering(args,_363,_364);
-this.initialize(args,_363,_364);
-this.postInitialize(args,_363,_364);
-this.postCreate(args,_363,_364);
-return this;
-},destroy:function(_366){
-if(this.parent){
-this.parent.removeChild(this);
-}
-this.destroyChildren();
-this.uninitialize();
-this.destroyRendering(_366);
-dojo.widget.manager.removeById(this.widgetId);
-},destroyChildren:function(){
-var _367;
-var i=0;
-while(this.children.length>i){
-_367=this.children[i];
-if(_367 instanceof dojo.widget.Widget){
-this.removeChild(_367);
-_367.destroy();
-continue;
-}
-i++;
-}
-},getChildrenOfType:function(type,_36a){
-var ret=[];
-var _36c=dojo.lang.isFunction(type);
-if(!_36c){
-type=type.toLowerCase();
-}
-for(var x=0;x<this.children.length;x++){
-if(_36c){
-if(this.children[x] instanceof type){
-ret.push(this.children[x]);
-}
-}else{
-if(this.children[x].widgetType.toLowerCase()==type){
-ret.push(this.children[x]);
-}
-}
-if(_36a){
-ret=ret.concat(this.children[x].getChildrenOfType(type,_36a));
-}
-}
-return ret;
-},getDescendants:function(){
-var _36e=[];
-var _36f=[this];
-var elem;
-while((elem=_36f.pop())){
-_36e.push(elem);
-if(elem.children){
-dojo.lang.forEach(elem.children,function(elem){
-_36f.push(elem);
-});
-}
-}
-return _36e;
-},isFirstChild:function(){
-return this===this.parent.children[0];
-},isLastChild:function(){
-return this===this.parent.children[this.parent.children.length-1];
-},satisfyPropertySets:function(args){
-return args;
-},mixInProperties:function(args,frag){
-if((args["fastMixIn"])||(frag["fastMixIn"])){
-for(var x in args){
-this[x]=args[x];
-}
-return;
-}
-var _376;
-var _377=dojo.widget.lcArgsCache[this.widgetType];
-if(_377==null){
-_377={};
-for(var y in this){
-_377[((new String(y)).toLowerCase())]=y;
-}
-dojo.widget.lcArgsCache[this.widgetType]=_377;
-}
-var _379={};
-for(var x in args){
-if(!this[x]){
-var y=_377[(new String(x)).toLowerCase()];
-if(y){
-args[y]=args[x];
-x=y;
-}
-}
-if(_379[x]){
-continue;
-}
-_379[x]=true;
-if((typeof this[x])!=(typeof _376)){
-if(typeof args[x]!="string"){
-this[x]=args[x];
-}else{
-if(dojo.lang.isString(this[x])){
-this[x]=args[x];
-}else{
-if(dojo.lang.isNumber(this[x])){
-this[x]=new Number(args[x]);
-}else{
-if(dojo.lang.isBoolean(this[x])){
-this[x]=(args[x].toLowerCase()=="false")?false:true;
-}else{
-if(dojo.lang.isFunction(this[x])){
-if(args[x].search(/[^\w\.]+/i)==-1){
-this[x]=dojo.evalObjPath(args[x],false);
-}else{
-var tn=dojo.lang.nameAnonFunc(new Function(args[x]),this);
-dojo.event.kwConnect({srcObj:this,srcFunc:x,adviceObj:this,adviceFunc:tn});
-}
-}else{
-if(dojo.lang.isArray(this[x])){
-this[x]=args[x].split(";");
-}else{
-if(this[x] instanceof Date){
-this[x]=new Date(Number(args[x]));
-}else{
-if(typeof this[x]=="object"){
-if(this[x] instanceof dojo.uri.Uri){
-this[x]=dojo.uri.dojoUri(args[x]);
-}else{
-var _37b=args[x].split(";");
-for(var y=0;y<_37b.length;y++){
-var si=_37b[y].indexOf(":");
-if((si!=-1)&&(_37b[y].length>si)){
-this[x][_37b[y].substr(0,si).replace(/^\s+|\s+$/g,"")]=_37b[y].substr(si+1);
-}
-}
-}
-}else{
-this[x]=args[x];
-}
-}
-}
-}
-}
-}
-}
-}
-}else{
-this.extraArgs[x.toLowerCase()]=args[x];
-}
-}
-},postMixInProperties:function(args,frag,_37f){
-},initialize:function(args,frag,_382){
-return false;
-},postInitialize:function(args,frag,_385){
-return false;
-},postCreate:function(args,frag,_388){
-return false;
-},uninitialize:function(){
-return false;
-},buildRendering:function(args,frag,_38b){
-dojo.unimplemented("dojo.widget.Widget.buildRendering, on "+this.toString()+", ");
-return false;
-},destroyRendering:function(){
-dojo.unimplemented("dojo.widget.Widget.destroyRendering");
-return false;
-},addedTo:function(_38c){
-},addChild:function(_38d){
-dojo.unimplemented("dojo.widget.Widget.addChild");
-return false;
-},removeChild:function(_38e){
-for(var x=0;x<this.children.length;x++){
-if(this.children[x]===_38e){
-this.children.splice(x,1);
-_38e.parent=null;
-break;
-}
-}
-return _38e;
-},getPreviousSibling:function(){
-var idx=this.getParentIndex();
-if(idx<=0){
-return null;
-}
-return this.parent.children[idx-1];
-},getSiblings:function(){
-return this.parent.children;
-},getParentIndex:function(){
-return dojo.lang.indexOf(this.parent.children,this,true);
-},getNextSibling:function(){
-var idx=this.getParentIndex();
-if(idx==this.parent.children.length-1){
-return null;
-}
-if(idx<0){
-return null;
-}
-return this.parent.children[idx+1];
-}});
-dojo.widget.lcArgsCache={};
-dojo.widget.tags={};
-dojo.widget.tags.addParseTreeHandler=function(type){
-dojo.deprecated("addParseTreeHandler",". ParseTreeHandlers are now reserved for components. Any unfiltered DojoML tag without a ParseTreeHandler is assumed to be a widget","0.5");
-};
-dojo.widget.tags["dojo:propertyset"]=function(_393,_394,_395){
-var _396=_394.parseProperties(_393["dojo:propertyset"]);
-};
-dojo.widget.tags["dojo:connect"]=function(_397,_398,_399){
-var _39a=_398.parseProperties(_397["dojo:connect"]);
-};
-dojo.widget.buildWidgetFromParseTree=function(type,frag,_39d,_39e,_39f,_3a0){
-dojo.a11y.setAccessibleMode();
-var _3a1=type.split(":");
-_3a1=(_3a1.length==2)?_3a1[1]:type;
-var _3a2=_3a0||_39d.parseProperties(frag[frag["ns"]+":"+_3a1]);
-var _3a3=dojo.widget.manager.getImplementation(_3a1,null,null,frag["ns"]);
-if(!_3a3){
-throw new Error("cannot find \""+type+"\" widget");
-}else{
-if(!_3a3.create){
-throw new Error("\""+type+"\" widget object has no \"create\" method and does not appear to implement *Widget");
-}
-}
-_3a2["dojoinsertionindex"]=_39f;
-var ret=_3a3.create(_3a2,frag,_39e,frag["ns"]);
-return ret;
-};
-dojo.widget.defineWidget=function(_3a5,_3a6,_3a7,init,_3a9){
-if(dojo.lang.isString(arguments[3])){
-dojo.widget._defineWidget(arguments[0],arguments[3],arguments[1],arguments[4],arguments[2]);
-}else{
-var args=[arguments[0]],p=3;
-if(dojo.lang.isString(arguments[1])){
-args.push(arguments[1],arguments[2]);
-}else{
-args.push("",arguments[1]);
-p=2;
-}
-if(dojo.lang.isFunction(arguments[p])){
-args.push(arguments[p],arguments[p+1]);
-}else{
-args.push(null,arguments[p]);
-}
-dojo.widget._defineWidget.apply(this,args);
-}
-};
-dojo.widget.defineWidget.renderers="html|svg|vml";
-dojo.widget._defineWidget=function(_3ac,_3ad,_3ae,init,_3b0){
-var _3b1=_3ac.split(".");
-var type=_3b1.pop();
-var regx="\\.("+(_3ad?_3ad+"|":"")+dojo.widget.defineWidget.renderers+")\\.";
-var r=_3ac.search(new RegExp(regx));
-_3b1=(r<0?_3b1.join("."):_3ac.substr(0,r));
-dojo.widget.manager.registerWidgetPackage(_3b1);
-var pos=_3b1.indexOf(".");
-var _3b6=(pos>-1)?_3b1.substring(0,pos):_3b1;
-_3b0=(_3b0)||{};
-_3b0.widgetType=type;
-if((!init)&&(_3b0["classConstructor"])){
-init=_3b0.classConstructor;
-delete _3b0.classConstructor;
-}
-dojo.declare(_3ac,_3ae,init,_3b0);
-};
-dojo.provide("dojo.widget.Parse");
-dojo.widget.Parse=function(_3b7){
-this.propertySetsList=[];
-this.fragment=_3b7;
-this.createComponents=function(frag,_3b9){
-var _3ba=[];
-var _3bb=false;
-try{
-if(frag&&frag.tagName&&(frag!=frag.nodeRef)){
-var _3bc=dojo.widget.tags;
-var tna=String(frag.tagName).split(";");
-for(var x=0;x<tna.length;x++){
-var ltn=tna[x].replace(/^\s+|\s+$/g,"").toLowerCase();
-frag.tagName=ltn;
-var ret;
-if(_3bc[ltn]){
-_3bb=true;
-ret=_3bc[ltn](frag,this,_3b9,frag.index);
-_3ba.push(ret);
-}else{
-if(ltn.indexOf(":")==-1){
-ltn="dojo:"+ltn;
-}
-ret=dojo.widget.buildWidgetFromParseTree(ltn,frag,this,_3b9,frag.index);
-if(ret){
-_3bb=true;
-_3ba.push(ret);
-}
-}
-}
-}
-}
-catch(e){
-dojo.debug("dojo.widget.Parse: error:",e);
-}
-if(!_3bb){
-_3ba=_3ba.concat(this.createSubComponents(frag,_3b9));
-}
-return _3ba;
-};
-this.createSubComponents=function(_3c1,_3c2){
-var frag,_3c4=[];
-for(var item in _3c1){
-frag=_3c1[item];
-if(frag&&typeof frag=="object"&&(frag!=_3c1.nodeRef)&&(frag!=_3c1.tagName)&&(!dojo.dom.isNode(frag))){
-_3c4=_3c4.concat(this.createComponents(frag,_3c2));
-}
-}
-return _3c4;
-};
-this.parsePropertySets=function(_3c6){
-return [];
-};
-this.parseProperties=function(_3c7){
-var _3c8={};
-for(var item in _3c7){
-if((_3c7[item]==_3c7.tagName)||(_3c7[item]==_3c7.nodeRef)){
-}else{
-var frag=_3c7[item];
-if(frag.tagName&&dojo.widget.tags[frag.tagName.toLowerCase()]){
-}else{
-if(frag[0]&&frag[0].value!=""&&frag[0].value!=null){
-try{
-if(item.toLowerCase()=="dataprovider"){
-var _3cb=this;
-this.getDataProvider(_3cb,frag[0].value);
-_3c8.dataProvider=this.dataProvider;
-}
-_3c8[item]=frag[0].value;
-var _3cc=this.parseProperties(frag);
-for(var _3cd in _3cc){
-_3c8[_3cd]=_3cc[_3cd];
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-}
-switch(item.toLowerCase()){
-case "checked":
-case "disabled":
-if(typeof _3c8[item]!="boolean"){
-_3c8[item]=true;
-}
-break;
-}
-}
-}
-return _3c8;
-};
-this.getDataProvider=function(_3ce,_3cf){
-dojo.io.bind({url:_3cf,load:function(type,_3d1){
-if(type=="load"){
-_3ce.dataProvider=_3d1;
-}
-},mimetype:"text/javascript",sync:true});
-};
-this.getPropertySetById=function(_3d2){
-for(var x=0;x<this.propertySetsList.length;x++){
-if(_3d2==this.propertySetsList[x]["id"][0].value){
-return this.propertySetsList[x];
-}
-}
-return "";
-};
-this.getPropertySetsByType=function(_3d4){
-var _3d5=[];
-for(var x=0;x<this.propertySetsList.length;x++){
-var cpl=this.propertySetsList[x];
-var cpcc=cpl.componentClass||cpl.componentType||null;
-var _3d9=this.propertySetsList[x]["id"][0].value;
-if(cpcc&&(_3d9==cpcc[0].value)){
-_3d5.push(cpl);
-}
-}
-return _3d5;
-};
-this.getPropertySets=function(_3da){
-var ppl="dojo:propertyproviderlist";
-var _3dc=[];
-var _3dd=_3da.tagName;
-if(_3da[ppl]){
-var _3de=_3da[ppl].value.split(" ");
-for(var _3df in _3de){
-if((_3df.indexOf("..")==-1)&&(_3df.indexOf("://")==-1)){
-var _3e0=this.getPropertySetById(_3df);
-if(_3e0!=""){
-_3dc.push(_3e0);
-}
-}else{
-}
-}
-}
-return this.getPropertySetsByType(_3dd).concat(_3dc);
-};
-this.createComponentFromScript=function(_3e1,_3e2,_3e3,ns){
-_3e3.fastMixIn=true;
-var ltn=(ns||"dojo")+":"+_3e2.toLowerCase();
-if(dojo.widget.tags[ltn]){
-return [dojo.widget.tags[ltn](_3e3,this,null,null,_3e3)];
-}
-return [dojo.widget.buildWidgetFromParseTree(ltn,_3e3,this,null,null,_3e3)];
-};
-};
-dojo.widget._parser_collection={"dojo":new dojo.widget.Parse()};
-dojo.widget.getParser=function(name){
-if(!name){
-name="dojo";
-}
-if(!this._parser_collection[name]){
-this._parser_collection[name]=new dojo.widget.Parse();
-}
-return this._parser_collection[name];
-};
-dojo.widget.createWidget=function(name,_3e8,_3e9,_3ea){
-var _3eb=false;
-var _3ec=(typeof name=="string");
-if(_3ec){
-var pos=name.indexOf(":");
-var ns=(pos>-1)?name.substring(0,pos):"dojo";
-if(pos>-1){
-name=name.substring(pos+1);
-}
-var _3ef=name.toLowerCase();
-var _3f0=ns+":"+_3ef;
-_3eb=(dojo.byId(name)&&!dojo.widget.tags[_3f0]);
-}
-if((arguments.length==1)&&(_3eb||!_3ec)){
-var xp=new dojo.xml.Parse();
-var tn=_3eb?dojo.byId(name):name;
-return dojo.widget.getParser().createComponents(xp.parseElement(tn,null,true))[0];
-}
-function fromScript(_3f3,name,_3f5,ns){
-_3f5[_3f0]={dojotype:[{value:_3ef}],nodeRef:_3f3,fastMixIn:true};
-_3f5.ns=ns;
-return dojo.widget.getParser().createComponentFromScript(_3f3,name,_3f5,ns);
-}
-_3e8=_3e8||{};
-var _3f7=false;
-var tn=null;
-var h=dojo.render.html.capable;
-if(h){
-tn=document.createElement("span");
-}
-if(!_3e9){
-_3f7=true;
-_3e9=tn;
-if(h){
-dojo.body().appendChild(_3e9);
-}
-}else{
-if(_3ea){
-dojo.dom.insertAtPosition(tn,_3e9,_3ea);
-}else{
-tn=_3e9;
-}
-}
-var _3f9=fromScript(tn,name.toLowerCase(),_3e8,ns);
-if((!_3f9)||(!_3f9[0])||(typeof _3f9[0].widgetType=="undefined")){
-throw new Error("createWidget: Creation of \""+name+"\" widget failed.");
-}
-try{
-if(_3f7&&_3f9[0].domNode.parentNode){
-_3f9[0].domNode.parentNode.removeChild(_3f9[0].domNode);
-}
-}
-catch(e){
-dojo.debug(e);
-}
-return _3f9[0];
-};
-dojo.provide("dojo.html.style");
-dojo.html.getClass=function(node){
-node=dojo.byId(node);
-if(!node){
-return "";
-}
-var cs="";
-if(node.className){
-cs=node.className;
-}else{
-if(dojo.html.hasAttribute(node,"class")){
-cs=dojo.html.getAttribute(node,"class");
-}
-}
-return cs.replace(/^\s+|\s+$/g,"");
-};
-dojo.html.getClasses=function(node){
-var c=dojo.html.getClass(node);
-return (c=="")?[]:c.split(/\s+/g);
-};
-dojo.html.hasClass=function(node,_3ff){
-return (new RegExp("(^|\\s+)"+_3ff+"(\\s+|$)")).test(dojo.html.getClass(node));
-};
-dojo.html.prependClass=function(node,_401){
-_401+=" "+dojo.html.getClass(node);
-return dojo.html.setClass(node,_401);
-};
-dojo.html.addClass=function(node,_403){
-if(dojo.html.hasClass(node,_403)){
-return false;
-}
-_403=(dojo.html.getClass(node)+" "+_403).replace(/^\s+|\s+$/g,"");
-return dojo.html.setClass(node,_403);
-};
-dojo.html.setClass=function(node,_405){
-node=dojo.byId(node);
-var cs=new String(_405);
-try{
-if(typeof node.className=="string"){
-node.className=cs;
-}else{
-if(node.setAttribute){
-node.setAttribute("class",_405);
-node.className=cs;
-}else{
-return false;
-}
-}
-}
-catch(e){
-dojo.debug("dojo.html.setClass() failed",e);
-}
-return true;
-};
-dojo.html.removeClass=function(node,_408,_409){
-try{
-if(!_409){
-var _40a=dojo.html.getClass(node).replace(new RegExp("(^|\\s+)"+_408+"(\\s+|$)"),"$1$2");
-}else{
-var _40a=dojo.html.getClass(node).replace(_408,"");
-}
-dojo.html.setClass(node,_40a);
-}
-catch(e){
-dojo.debug("dojo.html.removeClass() failed",e);
-}
-return true;
-};
-dojo.html.replaceClass=function(node,_40c,_40d){
-dojo.html.removeClass(node,_40d);
-dojo.html.addClass(node,_40c);
-};
-dojo.html.classMatchType={ContainsAll:0,ContainsAny:1,IsOnly:2};
-dojo.html.getElementsByClass=function(_40e,_40f,_410,_411,_412){
-_412=false;
-var _413=dojo.doc();
-_40f=dojo.byId(_40f)||_413;
-var _414=_40e.split(/\s+/g);
-var _415=[];
-if(_411!=1&&_411!=2){
-_411=0;
-}
-var _416=new RegExp("(\\s|^)(("+_414.join(")|(")+"))(\\s|$)");
-var _417=_414.join(" ").length;
-var _418=[];
-if(!_412&&_413.evaluate){
-var _419=".//"+(_410||"*")+"[contains(";
-if(_411!=dojo.html.classMatchType.ContainsAny){
-_419+="concat(' ', at class,' '), ' "+_414.join(" ') and contains(concat(' ', at class,' '), ' ")+" ')";
-if(_411==2){
-_419+=" and string-length(@class)="+_417+"]";
-}else{
-_419+="]";
-}
-}else{
-_419+="concat(' ', at class,' '), ' "+_414.join(" ') or contains(concat(' ', at class,' '), ' ")+" ')]";
-}
-var _41a=_413.evaluate(_419,_40f,null,XPathResult.ANY_TYPE,null);
-var _41b=_41a.iterateNext();
-while(_41b){
-try{
-_418.push(_41b);
-_41b=_41a.iterateNext();
-}
-catch(e){
-break;
-}
-}
-return _418;
-}else{
-if(!_410){
-_410="*";
-}
-_418=_40f.getElementsByTagName(_410);
-var node,i=0;
-outer:
-while(node=_418[i++]){
-var _41e=dojo.html.getClasses(node);
-if(_41e.length==0){
-continue outer;
-}
-var _41f=0;
-for(var j=0;j<_41e.length;j++){
-if(_416.test(_41e[j])){
-if(_411==dojo.html.classMatchType.ContainsAny){
-_415.push(node);
-continue outer;
-}else{
-_41f++;
-}
-}else{
-if(_411==dojo.html.classMatchType.IsOnly){
-continue outer;
-}
-}
-}
-if(_41f==_414.length){
-if((_411==dojo.html.classMatchType.IsOnly)&&(_41f==_41e.length)){
-_415.push(node);
-}else{
-if(_411==dojo.html.classMatchType.ContainsAll){
-_415.push(node);
-}
-}
-}
-}
-return _415;
-}
-};
-dojo.html.getElementsByClassName=dojo.html.getElementsByClass;
-dojo.html.toCamelCase=function(_421){
-var arr=_421.split("-"),cc=arr[0];
-for(var i=1;i<arr.length;i++){
-cc+=arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
-}
-return cc;
-};
-dojo.html.toSelectorCase=function(_425){
-return _425.replace(/([A-Z])/g,"-$1").toLowerCase();
-};
-dojo.html.getComputedStyle=function(node,_427,_428){
-node=dojo.byId(node);
-var _427=dojo.html.toSelectorCase(_427);
-var _429=dojo.html.toCamelCase(_427);
-if(!node||!node.style){
-return _428;
-}else{
-if(document.defaultView&&dojo.html.isDescendantOf(node,node.ownerDocument)){
-try{
-var cs=document.defaultView.getComputedStyle(node,"");
-if(cs){
-return cs.getPropertyValue(_427);
-}
-}
-catch(e){
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_427);
-}else{
-return _428;
-}
-}
-}else{
-if(node.currentStyle){
-return node.currentStyle[_429];
-}
-}
-}
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_427);
-}else{
-return _428;
-}
-};
-dojo.html.getStyleProperty=function(node,_42c){
-node=dojo.byId(node);
-return (node&&node.style?node.style[dojo.html.toCamelCase(_42c)]:undefined);
-};
-dojo.html.getStyle=function(node,_42e){
-var _42f=dojo.html.getStyleProperty(node,_42e);
-return (_42f?_42f:dojo.html.getComputedStyle(node,_42e));
-};
-dojo.html.setStyle=function(node,_431,_432){
-node=dojo.byId(node);
-if(node&&node.style){
-var _433=dojo.html.toCamelCase(_431);
-node.style[_433]=_432;
-}
-};
-dojo.html.setStyleText=function(_434,text){
-try{
-_434.style.cssText=text;
-}
-catch(e){
-_434.setAttribute("style",text);
-}
-};
-dojo.html.copyStyle=function(_436,_437){
-if(!_437.style.cssText){
-_436.setAttribute("style",_437.getAttribute("style"));
-}else{
-_436.style.cssText=_437.style.cssText;
-}
-dojo.html.addClass(_436,dojo.html.getClass(_437));
-};
-dojo.html.getUnitValue=function(node,_439,_43a){
-var s=dojo.html.getComputedStyle(node,_439);
-if((!s)||((s=="auto")&&(_43a))){
-return {value:0,units:"px"};
-}
-var _43c=s.match(/(\-?[\d.]+)([a-z%]*)/i);
-if(!_43c){
-return dojo.html.getUnitValue.bad;
-}
-return {value:Number(_43c[1]),units:_43c[2].toLowerCase()};
-};
-dojo.html.getUnitValue.bad={value:NaN,units:""};
-dojo.html.getPixelValue=function(node,_43e,_43f){
-var _440=dojo.html.getUnitValue(node,_43e,_43f);
-if(isNaN(_440.value)){
-return 0;
-}
-if((_440.value)&&(_440.units!="px")){
-return NaN;
-}
-return _440.value;
-};
-dojo.html.setPositivePixelValue=function(node,_442,_443){
-if(isNaN(_443)){
-return false;
-}
-node.style[_442]=Math.max(0,_443)+"px";
-return true;
-};
 dojo.html.styleSheet=null;
-dojo.html.insertCssRule=function(_444,_445,_446){
+dojo.html.insertCssRule=function(_44d,_44e,_44f){
 if(!dojo.html.styleSheet){
 if(document.createStyleSheet){
 dojo.html.styleSheet=document.createStyleSheet();
@@ -41407,161 +22591,161 @@
 }
 if(arguments.length<3){
 if(dojo.html.styleSheet.cssRules){
-_446=dojo.html.styleSheet.cssRules.length;
+_44f=dojo.html.styleSheet.cssRules.length;
 }else{
 if(dojo.html.styleSheet.rules){
-_446=dojo.html.styleSheet.rules.length;
+_44f=dojo.html.styleSheet.rules.length;
 }else{
 return null;
 }
 }
 }
 if(dojo.html.styleSheet.insertRule){
-var rule=_444+" { "+_445+" }";
-return dojo.html.styleSheet.insertRule(rule,_446);
+var rule=_44d+" { "+_44e+" }";
+return dojo.html.styleSheet.insertRule(rule,_44f);
 }else{
 if(dojo.html.styleSheet.addRule){
-return dojo.html.styleSheet.addRule(_444,_445,_446);
+return dojo.html.styleSheet.addRule(_44d,_44e,_44f);
 }else{
 return null;
 }
 }
 };
-dojo.html.removeCssRule=function(_448){
+dojo.html.removeCssRule=function(_451){
 if(!dojo.html.styleSheet){
 dojo.debug("no stylesheet defined for removing rules");
 return false;
 }
 if(dojo.render.html.ie){
-if(!_448){
-_448=dojo.html.styleSheet.rules.length;
-dojo.html.styleSheet.removeRule(_448);
+if(!_451){
+_451=dojo.html.styleSheet.rules.length;
+dojo.html.styleSheet.removeRule(_451);
 }
 }else{
 if(document.styleSheets[0]){
-if(!_448){
-_448=dojo.html.styleSheet.cssRules.length;
+if(!_451){
+_451=dojo.html.styleSheet.cssRules.length;
 }
-dojo.html.styleSheet.deleteRule(_448);
+dojo.html.styleSheet.deleteRule(_451);
 }
 }
 return true;
 };
 dojo.html._insertedCssFiles=[];
-dojo.html.insertCssFile=function(URI,doc,_44b,_44c){
+dojo.html.insertCssFile=function(URI,doc,_454,_455){
 if(!URI){
 return;
 }
 if(!doc){
 doc=document;
 }
-var _44d=dojo.hostenv.getText(URI,false,_44c);
-if(_44d===null){
+var _456=dojo.hostenv.getText(URI,false,_455);
+if(_456===null){
 return;
 }
-_44d=dojo.html.fixPathsInCssText(_44d,URI);
-if(_44b){
+_456=dojo.html.fixPathsInCssText(_456,URI);
+if(_454){
 var idx=-1,node,ent=dojo.html._insertedCssFiles;
 for(var i=0;i<ent.length;i++){
-if((ent[i].doc==doc)&&(ent[i].cssText==_44d)){
+if((ent[i].doc==doc)&&(ent[i].cssText==_456)){
 idx=i;
 node=ent[i].nodeRef;
 break;
 }
 }
 if(node){
-var _452=doc.getElementsByTagName("style");
-for(var i=0;i<_452.length;i++){
-if(_452[i]==node){
+var _45b=doc.getElementsByTagName("style");
+for(var i=0;i<_45b.length;i++){
+if(_45b[i]==node){
 return;
 }
 }
 dojo.html._insertedCssFiles.shift(idx,1);
 }
 }
-var _453=dojo.html.insertCssText(_44d,doc);
-dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_44d,"nodeRef":_453});
-if(_453&&djConfig.isDebug){
-_453.setAttribute("dbgHref",URI);
+var _45c=dojo.html.insertCssText(_456,doc);
+dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_456,"nodeRef":_45c});
+if(_45c&&djConfig.isDebug){
+_45c.setAttribute("dbgHref",URI);
 }
-return _453;
+return _45c;
 };
-dojo.html.insertCssText=function(_454,doc,URI){
-if(!_454){
+dojo.html.insertCssText=function(_45d,doc,URI){
+if(!_45d){
 return;
 }
 if(!doc){
 doc=document;
 }
 if(URI){
-_454=dojo.html.fixPathsInCssText(_454,URI);
+_45d=dojo.html.fixPathsInCssText(_45d,URI);
 }
-var _457=doc.createElement("style");
-_457.setAttribute("type","text/css");
+var _460=doc.createElement("style");
+_460.setAttribute("type","text/css");
 var head=doc.getElementsByTagName("head")[0];
 if(!head){
 dojo.debug("No head tag in document, aborting styles");
 return;
 }else{
-head.appendChild(_457);
+head.appendChild(_460);
 }
-if(_457.styleSheet){
-var _459=function(){
+if(_460.styleSheet){
+var _462=function(){
 try{
-_457.styleSheet.cssText=_454;
+_460.styleSheet.cssText=_45d;
 }
 catch(e){
 dojo.debug(e);
 }
 };
-if(_457.styleSheet.disabled){
-setTimeout(_459,10);
+if(_460.styleSheet.disabled){
+setTimeout(_462,10);
 }else{
-_459();
+_462();
 }
 }else{
-var _45a=doc.createTextNode(_454);
-_457.appendChild(_45a);
+var _463=doc.createTextNode(_45d);
+_460.appendChild(_463);
 }
-return _457;
+return _460;
 };
-dojo.html.fixPathsInCssText=function(_45b,URI){
-if(!_45b||!URI){
+dojo.html.fixPathsInCssText=function(_464,URI){
+if(!_464||!URI){
 return;
 }
-var _45d,str="",url="",_460="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
-var _461=new RegExp("url\\(\\s*("+_460+")\\s*\\)");
-var _462=/(file|https?|ftps?):\/\//;
-regexTrim=new RegExp("^[\\s]*(['\"]?)("+_460+")\\1[\\s]*?$");
+var _466,str="",url="",_469="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
+var _46a=new RegExp("url\\(\\s*("+_469+")\\s*\\)");
+var _46b=/(file|https?|ftps?):\/\//;
+regexTrim=new RegExp("^[\\s]*(['\"]?)("+_469+")\\1[\\s]*?$");
 if(dojo.render.html.ie55||dojo.render.html.ie60){
-var _463=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_460+")['\"]");
-while(_45d=_463.exec(_45b)){
-url=_45d[2].replace(regexTrim,"$2");
-if(!_462.exec(url)){
+var _46c=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_469+")['\"]");
+while(_466=_46c.exec(_464)){
+url=_466[2].replace(regexTrim,"$2");
+if(!_46b.exec(url)){
 url=(new dojo.uri.Uri(URI,url).toString());
 }
-str+=_45b.substring(0,_45d.index)+"AlphaImageLoader("+_45d[1]+"src='"+url+"'";
-_45b=_45b.substr(_45d.index+_45d[0].length);
+str+=_464.substring(0,_466.index)+"AlphaImageLoader("+_466[1]+"src='"+url+"'";
+_464=_464.substr(_466.index+_466[0].length);
 }
-_45b=str+_45b;
+_464=str+_464;
 str="";
 }
-while(_45d=_461.exec(_45b)){
-url=_45d[1].replace(regexTrim,"$2");
-if(!_462.exec(url)){
+while(_466=_46a.exec(_464)){
+url=_466[1].replace(regexTrim,"$2");
+if(!_46b.exec(url)){
 url=(new dojo.uri.Uri(URI,url).toString());
 }
-str+=_45b.substring(0,_45d.index)+"url("+url+")";
-_45b=_45b.substr(_45d.index+_45d[0].length);
+str+=_464.substring(0,_466.index)+"url("+url+")";
+_464=_464.substr(_466.index+_466[0].length);
 }
-return str+_45b;
+return str+_464;
 };
-dojo.html.setActiveStyleSheet=function(_464){
+dojo.html.setActiveStyleSheet=function(_46d){
 var i=0,a,els=dojo.doc().getElementsByTagName("link");
 while(a=els[i++]){
 if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")){
 a.disabled=true;
-if(a.getAttribute("title")==_464){
+if(a.getAttribute("title")==_46d){
 a.disabled=false;
 }
 }
@@ -41587,9 +22771,9 @@
 };
 dojo.html.applyBrowserClass=function(node){
 var drh=dojo.render.html;
-var _470={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
-for(var p in _470){
-if(_470[p]){
+var _479={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
+for(var p in _479){
+if(_479[p]){
 dojo.html.addClass(node,p);
 }
 }
@@ -41598,62 +22782,68 @@
 dojo.widget._cssFiles={};
 dojo.widget._cssStrings={};
 dojo.widget._templateCache={};
-dojo.widget.defaultStrings={dojoRoot:dojo.hostenv.getBaseScriptUri(),baseScriptUri:dojo.hostenv.getBaseScriptUri()};
-dojo.widget.fillFromTemplateCache=function(obj,_473,_474,_475){
-var _476=_473||obj.templatePath;
-var _477=dojo.widget._templateCache;
-if(!_476&&!obj["widgetType"]){
+dojo.widget.defaultStrings={dojoRoot:dojo.hostenv.getBaseScriptUri(),dojoWidgetModuleUri:dojo.uri.moduleUri("dojo.widget"),baseScriptUri:dojo.hostenv.getBaseScriptUri()};
+dojo.widget.fillFromTemplateCache=function(obj,_47c,_47d,_47e){
+var _47f=_47c||obj.templatePath;
+var _480=dojo.widget._templateCache;
+if(!_47f&&!obj["widgetType"]){
 do{
-var _478="__dummyTemplate__"+dojo.widget._templateCache.dummyCount++;
-}while(_477[_478]);
-obj.widgetType=_478;
+var _481="__dummyTemplate__"+dojo.widget._templateCache.dummyCount++;
+}while(_480[_481]);
+obj.widgetType=_481;
 }
-var wt=_476?_476.toString():obj.widgetType;
-var ts=_477[wt];
+var wt=_47f?_47f.toString():obj.widgetType;
+var ts=_480[wt];
 if(!ts){
-_477[wt]={"string":null,"node":null};
-if(_475){
+_480[wt]={"string":null,"node":null};
+if(_47e){
 ts={};
 }else{
-ts=_477[wt];
+ts=_480[wt];
 }
 }
-if((!obj.templateString)&&(!_475)){
-obj.templateString=_474||ts["string"];
+if((!obj.templateString)&&(!_47e)){
+obj.templateString=_47d||ts["string"];
 }
-if((!obj.templateNode)&&(!_475)){
+if(obj.templateString){
+obj.templateString=this._sanitizeTemplateString(obj.templateString);
+}
+if((!obj.templateNode)&&(!_47e)){
 obj.templateNode=ts["node"];
 }
-if((!obj.templateNode)&&(!obj.templateString)&&(_476)){
-var _47b=dojo.hostenv.getText(_476);
-if(_47b){
-_47b=_47b.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");
-var _47c=_47b.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-if(_47c){
-_47b=_47c[1];
+if((!obj.templateNode)&&(!obj.templateString)&&(_47f)){
+var _484=this._sanitizeTemplateString(dojo.hostenv.getText(_47f));
+obj.templateString=_484;
+if(!_47e){
+_480[wt]["string"]=_484;
 }
-}else{
-_47b="";
 }
-obj.templateString=_47b;
-if(!_475){
-_477[wt]["string"]=_47b;
+if((!ts["string"])&&(!_47e)){
+ts.string=obj.templateString;
 }
+};
+dojo.widget._sanitizeTemplateString=function(_485){
+if(_485){
+_485=_485.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");
+var _486=_485.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+if(_486){
+_485=_486[1];
 }
-if((!ts["string"])&&(!_475)){
-ts.string=obj.templateString;
+}else{
+_485="";
 }
+return _485;
 };
 dojo.widget._templateCache.dummyCount=0;
 dojo.widget.attachProperties=["dojoAttachPoint","id"];
 dojo.widget.eventAttachProperty="dojoAttachEvent";
 dojo.widget.onBuildProperty="dojoOnBuild";
 dojo.widget.waiNames=["waiRole","waiState"];
-dojo.widget.wai={waiRole:{name:"waiRole","namespace":"http://www.w3.org/TR/xhtml2",alias:"x2",prefix:"wairole:"},waiState:{name:"waiState","namespace":"http://www.w3.org/2005/07/aaa",alias:"aaa",prefix:""},setAttr:function(node,ns,attr,_480){
+dojo.widget.wai={waiRole:{name:"waiRole","namespace":"http://www.w3.org/TR/xhtml2",alias:"x2",prefix:"wairole:"},waiState:{name:"waiState","namespace":"http://www.w3.org/2005/07/aaa",alias:"aaa",prefix:""},setAttr:function(node,ns,attr,_48a){
 if(dojo.render.html.ie){
-node.setAttribute(this[ns].alias+":"+attr,this[ns].prefix+_480);
+node.setAttribute(this[ns].alias+":"+attr,this[ns].prefix+_48a);
 }else{
-node.setAttributeNS(this[ns]["namespace"],attr,this[ns].prefix+_480);
+node.setAttributeNS(this[ns]["namespace"],attr,this[ns].prefix+_48a);
 }
 },getAttr:function(node,ns,attr){
 if(dojo.render.html.ie){
@@ -41662,119 +22852,119 @@
 return node.getAttributeNS(this[ns]["namespace"],attr);
 }
 },removeAttr:function(node,ns,attr){
-var _487=true;
+var _491=true;
 if(dojo.render.html.ie){
-_487=node.removeAttribute(this[ns].alias+":"+attr);
+_491=node.removeAttribute(this[ns].alias+":"+attr);
 }else{
 node.removeAttributeNS(this[ns]["namespace"],attr);
 }
-return _487;
+return _491;
 }};
-dojo.widget.attachTemplateNodes=function(_488,_489,_48a){
-var _48b=dojo.dom.ELEMENT_NODE;
+dojo.widget.attachTemplateNodes=function(_492,_493,_494){
+var _495=dojo.dom.ELEMENT_NODE;
 function trim(str){
 return str.replace(/^\s+|\s+$/g,"");
 }
-if(!_488){
-_488=_489.domNode;
+if(!_492){
+_492=_493.domNode;
 }
-if(_488.nodeType!=_48b){
+if(_492.nodeType!=_495){
 return;
 }
-var _48d=_488.all||_488.getElementsByTagName("*");
-var _48e=_489;
-for(var x=-1;x<_48d.length;x++){
-var _490=(x==-1)?_488:_48d[x];
-var _491=[];
-if(!_489.widgetsInTemplate||!_490.getAttribute("dojoType")){
+var _497=_492.all||_492.getElementsByTagName("*");
+var _498=_493;
+for(var x=-1;x<_497.length;x++){
+var _49a=(x==-1)?_492:_497[x];
+var _49b=[];
+if(!_493.widgetsInTemplate||!_49a.getAttribute("dojoType")){
 for(var y=0;y<this.attachProperties.length;y++){
-var _493=_490.getAttribute(this.attachProperties[y]);
-if(_493){
-_491=_493.split(";");
-for(var z=0;z<_491.length;z++){
-if(dojo.lang.isArray(_489[_491[z]])){
-_489[_491[z]].push(_490);
+var _49d=_49a.getAttribute(this.attachProperties[y]);
+if(_49d){
+_49b=_49d.split(";");
+for(var z=0;z<_49b.length;z++){
+if(dojo.lang.isArray(_493[_49b[z]])){
+_493[_49b[z]].push(_49a);
 }else{
-_489[_491[z]]=_490;
+_493[_49b[z]]=_49a;
 }
 }
 break;
 }
 }
-var _495=_490.getAttribute(this.eventAttachProperty);
-if(_495){
-var evts=_495.split(";");
+var _49f=_49a.getAttribute(this.eventAttachProperty);
+if(_49f){
+var evts=_49f.split(";");
 for(var y=0;y<evts.length;y++){
 if((!evts[y])||(!evts[y].length)){
 continue;
 }
-var _497=null;
+var _4a1=null;
 var tevt=trim(evts[y]);
 if(evts[y].indexOf(":")>=0){
-var _499=tevt.split(":");
-tevt=trim(_499[0]);
-_497=trim(_499[1]);
+var _4a3=tevt.split(":");
+tevt=trim(_4a3[0]);
+_4a1=trim(_4a3[1]);
 }
-if(!_497){
-_497=tevt;
+if(!_4a1){
+_4a1=tevt;
 }
 var tf=function(){
-var ntf=new String(_497);
+var ntf=new String(_4a1);
 return function(evt){
-if(_48e[ntf]){
-_48e[ntf](dojo.event.browser.fixEvent(evt,this));
+if(_498[ntf]){
+_498[ntf](dojo.event.browser.fixEvent(evt,this));
 }
 };
 }();
-dojo.event.browser.addListener(_490,tevt,tf,false,true);
+dojo.event.browser.addListener(_49a,tevt,tf,false,true);
 }
 }
-for(var y=0;y<_48a.length;y++){
-var _49d=_490.getAttribute(_48a[y]);
-if((_49d)&&(_49d.length)){
-var _497=null;
-var _49e=_48a[y].substr(4);
-_497=trim(_49d);
-var _49f=[_497];
-if(_497.indexOf(";")>=0){
-_49f=dojo.lang.map(_497.split(";"),trim);
+for(var y=0;y<_494.length;y++){
+var _4a7=_49a.getAttribute(_494[y]);
+if((_4a7)&&(_4a7.length)){
+var _4a1=null;
+var _4a8=_494[y].substr(4);
+_4a1=trim(_4a7);
+var _4a9=[_4a1];
+if(_4a1.indexOf(";")>=0){
+_4a9=dojo.lang.map(_4a1.split(";"),trim);
 }
-for(var z=0;z<_49f.length;z++){
-if(!_49f[z].length){
+for(var z=0;z<_4a9.length;z++){
+if(!_4a9[z].length){
 continue;
 }
 var tf=function(){
-var ntf=new String(_49f[z]);
+var ntf=new String(_4a9[z]);
 return function(evt){
-if(_48e[ntf]){
-_48e[ntf](dojo.event.browser.fixEvent(evt,this));
+if(_498[ntf]){
+_498[ntf](dojo.event.browser.fixEvent(evt,this));
 }
 };
 }();
-dojo.event.browser.addListener(_490,_49e,tf,false,true);
+dojo.event.browser.addListener(_49a,_4a8,tf,false,true);
 }
 }
 }
 }
-var _4a2=_490.getAttribute(this.templateProperty);
-if(_4a2){
-_489[_4a2]=_490;
+var _4ac=_49a.getAttribute(this.templateProperty);
+if(_4ac){
+_493[_4ac]=_49a;
 }
 dojo.lang.forEach(dojo.widget.waiNames,function(name){
 var wai=dojo.widget.wai[name];
-var val=_490.getAttribute(wai.name);
+var val=_49a.getAttribute(wai.name);
 if(val){
 if(val.indexOf("-")==-1){
-dojo.widget.wai.setAttr(_490,wai.name,"role",val);
+dojo.widget.wai.setAttr(_49a,wai.name,"role",val);
 }else{
-var _4a6=val.split("-");
-dojo.widget.wai.setAttr(_490,wai.name,_4a6[0],_4a6[1]);
+var _4b0=val.split("-");
+dojo.widget.wai.setAttr(_49a,wai.name,_4b0[0],_4b0[1]);
 }
 }
 },this);
-var _4a7=_490.getAttribute(this.onBuildProperty);
-if(_4a7){
-eval("var node = baseNode; var widget = targetObj; "+_4a7);
+var _4b1=_49a.getAttribute(this.onBuildProperty);
+if(_4b1){
+eval("var node = baseNode; var widget = targetObj; "+_4b1);
 }
 }
 };
@@ -41800,23 +22990,23 @@
 if((arguments.length>0)&&(typeof arguments[0]=="object")){
 this.create(arguments[0]);
 }
-},{templateNode:null,templateString:null,templateCssString:null,preventClobber:false,domNode:null,containerNode:null,widgetsInTemplate:false,addChild:function(_4af,_4b0,pos,ref,_4b3){
+},{templateNode:null,templateString:null,templateCssString:null,preventClobber:false,domNode:null,containerNode:null,widgetsInTemplate:false,addChild:function(_4b9,_4ba,pos,ref,_4bd){
 if(!this.isContainer){
 dojo.debug("dojo.widget.DomWidget.addChild() attempted on non-container widget");
 return null;
 }else{
-if(_4b3==undefined){
-_4b3=this.children.length;
+if(_4bd==undefined){
+_4bd=this.children.length;
 }
-this.addWidgetAsDirectChild(_4af,_4b0,pos,ref,_4b3);
-this.registerChild(_4af,_4b3);
+this.addWidgetAsDirectChild(_4b9,_4ba,pos,ref,_4bd);
+this.registerChild(_4b9,_4bd);
 }
-return _4af;
-},addWidgetAsDirectChild:function(_4b4,_4b5,pos,ref,_4b8){
-if((!this.containerNode)&&(!_4b5)){
+return _4b9;
+},addWidgetAsDirectChild:function(_4be,_4bf,pos,ref,_4c2){
+if((!this.containerNode)&&(!_4bf)){
 this.containerNode=this.domNode;
 }
-var cn=(_4b5)?_4b5:this.containerNode;
+var cn=(_4bf)?_4bf:this.containerNode;
 if(!pos){
 pos="after";
 }
@@ -41826,38 +23016,38 @@
 }
 ref=cn.lastChild;
 }
-if(!_4b8){
-_4b8=0;
+if(!_4c2){
+_4c2=0;
 }
-_4b4.domNode.setAttribute("dojoinsertionindex",_4b8);
+_4be.domNode.setAttribute("dojoinsertionindex",_4c2);
 if(!ref){
-cn.appendChild(_4b4.domNode);
+cn.appendChild(_4be.domNode);
 }else{
 if(pos=="insertAtIndex"){
-dojo.dom.insertAtIndex(_4b4.domNode,ref.parentNode,_4b8);
+dojo.dom.insertAtIndex(_4be.domNode,ref.parentNode,_4c2);
 }else{
 if((pos=="after")&&(ref===cn.lastChild)){
-cn.appendChild(_4b4.domNode);
+cn.appendChild(_4be.domNode);
 }else{
-dojo.dom.insertAtPosition(_4b4.domNode,cn,pos);
+dojo.dom.insertAtPosition(_4be.domNode,cn,pos);
 }
 }
 }
-},registerChild:function(_4ba,_4bb){
-_4ba.dojoInsertionIndex=_4bb;
+},registerChild:function(_4c4,_4c5){
+_4c4.dojoInsertionIndex=_4c5;
 var idx=-1;
 for(var i=0;i<this.children.length;i++){
-if(this.children[i].dojoInsertionIndex<=_4bb){
+if(this.children[i].dojoInsertionIndex<=_4c5){
 idx=i;
 }
 }
-this.children.splice(idx+1,0,_4ba);
-_4ba.parent=this;
-_4ba.addedTo(this,idx+1);
-delete dojo.widget.manager.topWidgets[_4ba.widgetId];
-},removeChild:function(_4be){
-dojo.dom.removeNode(_4be.domNode);
-return dojo.widget.DomWidget.superclass.removeChild.call(this,_4be);
+this.children.splice(idx+1,0,_4c4);
+_4c4.parent=this;
+_4c4.addedTo(this,idx+1);
+delete dojo.widget.manager.topWidgets[_4c4.widgetId];
+},removeChild:function(_4c8){
+dojo.dom.removeNode(_4c8.domNode);
+return dojo.widget.DomWidget.superclass.removeChild.call(this,_4c8);
 },getFragNodeRef:function(frag){
 if(!frag){
 return null;
@@ -41866,91 +23056,91 @@
 dojo.raise("Error: no frag for widget type "+this.getNamespacedType()+", id "+this.widgetId+" (maybe a widget has set it's type incorrectly)");
 }
 return frag[this.getNamespacedType()]["nodeRef"];
-},postInitialize:function(args,frag,_4c2){
-var _4c3=this.getFragNodeRef(frag);
-if(_4c2&&(_4c2.snarfChildDomOutput||!_4c3)){
-_4c2.addWidgetAsDirectChild(this,"","insertAtIndex","",args["dojoinsertionindex"],_4c3);
+},postInitialize:function(args,frag,_4cc){
+var _4cd=this.getFragNodeRef(frag);
+if(_4cc&&(_4cc.snarfChildDomOutput||!_4cd)){
+_4cc.addWidgetAsDirectChild(this,"","insertAtIndex","",args["dojoinsertionindex"],_4cd);
 }else{
-if(_4c3){
-if(this.domNode&&(this.domNode!==_4c3)){
-this._sourceNodeRef=dojo.dom.replaceNode(_4c3,this.domNode);
+if(_4cd){
+if(this.domNode&&(this.domNode!==_4cd)){
+this._sourceNodeRef=dojo.dom.replaceNode(_4cd,this.domNode);
 }
 }
 }
-if(_4c2){
-_4c2.registerChild(this,args.dojoinsertionindex);
+if(_4cc){
+_4cc.registerChild(this,args.dojoinsertionindex);
 }else{
 dojo.widget.manager.topWidgets[this.widgetId]=this;
 }
 if(this.widgetsInTemplate){
-var _4c4=new dojo.xml.Parse();
-var _4c5;
-var _4c6=this.domNode.getElementsByTagName("*");
-for(var i=0;i<_4c6.length;i++){
-if(_4c6[i].getAttribute("dojoAttachPoint")=="subContainerWidget"){
-_4c5=_4c6[i];
+var _4ce=new dojo.xml.Parse();
+var _4cf;
+var _4d0=this.domNode.getElementsByTagName("*");
+for(var i=0;i<_4d0.length;i++){
+if(_4d0[i].getAttribute("dojoAttachPoint")=="subContainerWidget"){
+_4cf=_4d0[i];
 }
-if(_4c6[i].getAttribute("dojoType")){
-_4c6[i].setAttribute("isSubWidget",true);
+if(_4d0[i].getAttribute("dojoType")){
+_4d0[i].setAttribute("isSubWidget",true);
 }
 }
 if(this.isContainer&&!this.containerNode){
-if(_4c5){
+if(_4cf){
 var src=this.getFragNodeRef(frag);
 if(src){
-dojo.dom.moveChildren(src,_4c5);
+dojo.dom.moveChildren(src,_4cf);
 frag["dojoDontFollow"]=true;
 }
 }else{
 dojo.debug("No subContainerWidget node can be found in template file for widget "+this);
 }
 }
-var _4c9=_4c4.parseElement(this.domNode,null,true);
-dojo.widget.getParser().createSubComponents(_4c9,this);
-var _4ca=[];
-var _4cb=[this];
+var _4d3=_4ce.parseElement(this.domNode,null,true);
+dojo.widget.getParser().createSubComponents(_4d3,this);
+var _4d4=[];
+var _4d5=[this];
 var w;
-while((w=_4cb.pop())){
+while((w=_4d5.pop())){
 for(var i=0;i<w.children.length;i++){
-var _4cd=w.children[i];
-if(_4cd._processedSubWidgets||!_4cd.extraArgs["issubwidget"]){
+var _4d7=w.children[i];
+if(_4d7._processedSubWidgets||!_4d7.extraArgs["issubwidget"]){
 continue;
 }
-_4ca.push(_4cd);
-if(_4cd.isContainer){
-_4cb.push(_4cd);
+_4d4.push(_4d7);
+if(_4d7.isContainer){
+_4d5.push(_4d7);
 }
 }
 }
-for(var i=0;i<_4ca.length;i++){
-var _4ce=_4ca[i];
-if(_4ce._processedSubWidgets){
+for(var i=0;i<_4d4.length;i++){
+var _4d8=_4d4[i];
+if(_4d8._processedSubWidgets){
 dojo.debug("This should not happen: widget._processedSubWidgets is already true!");
 return;
 }
-_4ce._processedSubWidgets=true;
-if(_4ce.extraArgs["dojoattachevent"]){
-var evts=_4ce.extraArgs["dojoattachevent"].split(";");
+_4d8._processedSubWidgets=true;
+if(_4d8.extraArgs["dojoattachevent"]){
+var evts=_4d8.extraArgs["dojoattachevent"].split(";");
 for(var j=0;j<evts.length;j++){
-var _4d1=null;
+var _4db=null;
 var tevt=dojo.string.trim(evts[j]);
 if(tevt.indexOf(":")>=0){
-var _4d3=tevt.split(":");
-tevt=dojo.string.trim(_4d3[0]);
-_4d1=dojo.string.trim(_4d3[1]);
+var _4dd=tevt.split(":");
+tevt=dojo.string.trim(_4dd[0]);
+_4db=dojo.string.trim(_4dd[1]);
 }
-if(!_4d1){
-_4d1=tevt;
+if(!_4db){
+_4db=tevt;
 }
-if(dojo.lang.isFunction(_4ce[tevt])){
-dojo.event.kwConnect({srcObj:_4ce,srcFunc:tevt,targetObj:this,targetFunc:_4d1});
+if(dojo.lang.isFunction(_4d8[tevt])){
+dojo.event.kwConnect({srcObj:_4d8,srcFunc:tevt,targetObj:this,targetFunc:_4db});
 }else{
-alert(tevt+" is not a function in widget "+_4ce);
+alert(tevt+" is not a function in widget "+_4d8);
 }
 }
 }
-if(_4ce.extraArgs["dojoattachpoint"]){
-this[_4ce.extraArgs["dojoattachpoint"]]=_4ce;
+if(_4d8.extraArgs["dojoattachpoint"]){
+this[_4d8.extraArgs["dojoattachpoint"]]=_4d8;
 }
 }
 }
@@ -41962,16 +23152,16 @@
 if(args["templatecsspath"]){
 args["templateCssPath"]=args["templatecsspath"];
 }
-var _4d7=args["templateCssPath"]||this.templateCssPath;
-if(_4d7&&!dojo.widget._cssFiles[_4d7.toString()]){
-if((!this.templateCssString)&&(_4d7)){
-this.templateCssString=dojo.hostenv.getText(_4d7);
+var _4e1=args["templateCssPath"]||this.templateCssPath;
+if(_4e1&&!dojo.widget._cssFiles[_4e1.toString()]){
+if((!this.templateCssString)&&(_4e1)){
+this.templateCssString=dojo.hostenv.getText(_4e1);
 this.templateCssPath=null;
 }
-dojo.widget._cssFiles[_4d7.toString()]=true;
+dojo.widget._cssFiles[_4e1.toString()]=true;
 }
 if((this["templateCssString"])&&(!dojo.widget._cssStrings[this.templateCssString])){
-dojo.html.insertCssText(this.templateCssString,null,_4d7);
+dojo.html.insertCssText(this.templateCssString,null,_4e1);
 dojo.widget._cssStrings[this.templateCssString]=true;
 }
 if((!this.preventClobber)&&((this.templatePath)||(this.templateNode)||((this["templateString"])&&(this.templateString.length))||((typeof ts!="undefined")&&((ts["string"])||(ts["node"]))))){
@@ -41981,13 +23171,13 @@
 }
 this.fillInTemplate(args,frag);
 },buildFromTemplate:function(args,frag){
-var _4da=false;
+var _4e4=false;
 if(args["templatepath"]){
 args["templatePath"]=args["templatepath"];
 }
-dojo.widget.fillFromTemplateCache(this,args["templatePath"],null,_4da);
+dojo.widget.fillFromTemplateCache(this,args["templatePath"],null,_4e4);
 var ts=dojo.widget._templateCache[this.templatePath?this.templatePath.toString():this.widgetType];
-if((ts)&&(!_4da)){
+if((ts)&&(!_4e4)){
 if(!this.templateString.length){
 this.templateString=ts["string"];
 }
@@ -41995,43 +23185,43 @@
 this.templateNode=ts["node"];
 }
 }
-var _4dc=false;
+var _4e6=false;
 var node=null;
 var tstr=this.templateString;
 if((!this.templateNode)&&(this.templateString)){
-_4dc=this.templateString.match(/\$\{([^\}]+)\}/g);
-if(_4dc){
+_4e6=this.templateString.match(/\$\{([^\}]+)\}/g);
+if(_4e6){
 var hash=this.strings||{};
 for(var key in dojo.widget.defaultStrings){
 if(dojo.lang.isUndefined(hash[key])){
 hash[key]=dojo.widget.defaultStrings[key];
 }
 }
-for(var i=0;i<_4dc.length;i++){
-var key=_4dc[i];
+for(var i=0;i<_4e6.length;i++){
+var key=_4e6[i];
 key=key.substring(2,key.length-1);
 var kval=(key.substring(0,5)=="this.")?dojo.lang.getObjPathValue(key.substring(5),this):hash[key];
-var _4e3;
+var _4ed;
 if((kval)||(dojo.lang.isString(kval))){
-_4e3=new String((dojo.lang.isFunction(kval))?kval.call(this,key,this.templateString):kval);
-while(_4e3.indexOf("\"")>-1){
-_4e3=_4e3.replace("\"","&quot;");
+_4ed=new String((dojo.lang.isFunction(kval))?kval.call(this,key,this.templateString):kval);
+while(_4ed.indexOf("\"")>-1){
+_4ed=_4ed.replace("\"","&quot;");
 }
-tstr=tstr.replace(_4dc[i],_4e3);
+tstr=tstr.replace(_4e6[i],_4ed);
 }
 }
 }else{
 this.templateNode=this.createNodesFromText(this.templateString,true)[0];
-if(!_4da){
+if(!_4e4){
 ts.node=this.templateNode;
 }
 }
 }
-if((!this.templateNode)&&(!_4dc)){
+if((!this.templateNode)&&(!_4e6)){
 dojo.debug("DomWidget.buildFromTemplate: could not create template");
 return false;
 }else{
-if(!_4dc){
+if(!_4e6){
 node=this.templateNode.cloneNode(true);
 if(!node){
 return false;
@@ -42048,14 +23238,14 @@
 dojo.dom.moveChildren(src,this.containerNode);
 }
 }
-},attachTemplateNodes:function(_4e5,_4e6){
-if(!_4e5){
-_4e5=this.domNode;
+},attachTemplateNodes:function(_4ef,_4f0){
+if(!_4ef){
+_4ef=this.domNode;
 }
-if(!_4e6){
-_4e6=this;
+if(!_4f0){
+_4f0=this;
 }
-return dojo.widget.attachTemplateNodes(_4e5,_4e6,dojo.widget.getDojoEventsFromStr(this.templateString));
+return dojo.widget.attachTemplateNodes(_4ef,_4f0,dojo.widget.getDojoEventsFromStr(this.templateString));
 },fillInTemplate:function(){
 },destroyRendering:function(){
 try{
@@ -42075,10 +23265,10 @@
 dojo.unimplemented("dojo.widget.DomWidget.createNodesFromText");
 }});
 dojo.provide("dojo.html.display");
-dojo.html._toggle=function(node,_4e8,_4e9){
+dojo.html._toggle=function(node,_4f2,_4f3){
 node=dojo.byId(node);
-_4e9(node,!_4e8(node));
-return _4e8(node);
+_4f3(node,!_4f2(node));
+return _4f2(node);
 };
 dojo.html.show=function(node){
 node=dojo.byId(node);
@@ -42097,8 +23287,8 @@
 }
 dojo.html.setStyle(node,"display","none");
 };
-dojo.html.setShowing=function(node,_4ee){
-dojo.html[(_4ee?"show":"hide")](node);
+dojo.html.setShowing=function(node,_4f8){
+dojo.html[(_4f8?"show":"hide")](node);
 };
 dojo.html.isShowing=function(node){
 return (dojo.html.getStyleProperty(node,"display")!="none");
@@ -42114,8 +23304,8 @@
 return (tag in dojo.html.displayMap?dojo.html.displayMap[tag]:"block");
 }
 };
-dojo.html.setDisplay=function(node,_4f4){
-dojo.html.setStyle(node,"display",((_4f4 instanceof String||typeof _4f4=="string")?_4f4:(_4f4?dojo.html.suggestDisplayByTagName(node):"none")));
+dojo.html.setDisplay=function(node,_4fe){
+dojo.html.setStyle(node,"display",((_4fe instanceof String||typeof _4fe=="string")?_4fe:(_4fe?dojo.html.suggestDisplayByTagName(node):"none")));
 };
 dojo.html.isDisplayed=function(node){
 return (dojo.html.getComputedStyle(node,"display")!="none");
@@ -42123,8 +23313,8 @@
 dojo.html.toggleDisplay=function(node){
 return dojo.html._toggle(node,dojo.html.isDisplayed,dojo.html.setDisplay);
 };
-dojo.html.setVisibility=function(node,_4f8){
-dojo.html.setStyle(node,"visibility",((_4f8 instanceof String||typeof _4f8=="string")?_4f8:(_4f8?"visible":"hidden")));
+dojo.html.setVisibility=function(node,_502){
+dojo.html.setStyle(node,"visibility",((_502 instanceof String||typeof _502=="string")?_502:(_502?"visible":"hidden")));
 };
 dojo.html.isVisible=function(node){
 return (dojo.html.getComputedStyle(node,"visibility")!="hidden");
@@ -42132,20 +23322,20 @@
 dojo.html.toggleVisibility=function(node){
 return dojo.html._toggle(node,dojo.html.isVisible,dojo.html.setVisibility);
 };
-dojo.html.setOpacity=function(node,_4fc,_4fd){
+dojo.html.setOpacity=function(node,_506,_507){
 node=dojo.byId(node);
 var h=dojo.render.html;
-if(!_4fd){
-if(_4fc>=1){
+if(!_507){
+if(_506>=1){
 if(h.ie){
 dojo.html.clearOpacity(node);
 return;
 }else{
-_4fc=0.999999;
+_506=0.999999;
 }
 }else{
-if(_4fc<0){
-_4fc=0;
+if(_506<0){
+_506=0;
 }
 }
 }
@@ -42153,20 +23343,20 @@
 if(node.nodeName.toLowerCase()=="tr"){
 var tds=node.getElementsByTagName("td");
 for(var x=0;x<tds.length;x++){
-tds[x].style.filter="Alpha(Opacity="+_4fc*100+")";
+tds[x].style.filter="Alpha(Opacity="+_506*100+")";
 }
 }
-node.style.filter="Alpha(Opacity="+_4fc*100+")";
+node.style.filter="Alpha(Opacity="+_506*100+")";
 }else{
 if(h.moz){
-node.style.opacity=_4fc;
-node.style.MozOpacity=_4fc;
+node.style.opacity=_506;
+node.style.MozOpacity=_506;
 }else{
 if(h.safari){
-node.style.opacity=_4fc;
-node.style.KhtmlOpacity=_4fc;
+node.style.opacity=_506;
+node.style.KhtmlOpacity=_506;
 }else{
-node.style.opacity=_4fc;
+node.style.opacity=_506;
 }
 }
 }
@@ -42213,73 +23403,73 @@
 if(!node){
 return 0;
 }
-var _509=0;
+var _513=0;
 while(node){
 if(dojo.html.getComputedStyle(node,"position")=="fixed"){
 return 0;
 }
 var val=node[prop];
 if(val){
-_509+=val-0;
+_513+=val-0;
 if(node==dojo.body()){
 break;
 }
 }
 node=node.parentNode;
 }
-return _509;
+return _513;
 };
-dojo.html.setStyleAttributes=function(node,_50c){
+dojo.html.setStyleAttributes=function(node,_516){
 node=dojo.byId(node);
-var _50d=_50c.replace(/(;)?\s*$/,"").split(";");
-for(var i=0;i<_50d.length;i++){
-var _50f=_50d[i].split(":");
-var name=_50f[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
-var _511=_50f[1].replace(/\s*$/,"").replace(/^\s*/,"");
+var _517=_516.replace(/(;)?\s*$/,"").split(";");
+for(var i=0;i<_517.length;i++){
+var _519=_517[i].split(":");
+var name=_519[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
+var _51b=_519[1].replace(/\s*$/,"").replace(/^\s*/,"");
 switch(name){
 case "opacity":
-dojo.html.setOpacity(node,_511);
+dojo.html.setOpacity(node,_51b);
 break;
 case "content-height":
-dojo.html.setContentBox(node,{height:_511});
+dojo.html.setContentBox(node,{height:_51b});
 break;
 case "content-width":
-dojo.html.setContentBox(node,{width:_511});
+dojo.html.setContentBox(node,{width:_51b});
 break;
 case "outer-height":
-dojo.html.setMarginBox(node,{height:_511});
+dojo.html.setMarginBox(node,{height:_51b});
 break;
 case "outer-width":
-dojo.html.setMarginBox(node,{width:_511});
+dojo.html.setMarginBox(node,{width:_51b});
 break;
 default:
-node.style[dojo.html.toCamelCase(name)]=_511;
+node.style[dojo.html.toCamelCase(name)]=_51b;
 }
 }
 };
 dojo.html.boxSizing={MARGIN_BOX:"margin-box",BORDER_BOX:"border-box",PADDING_BOX:"padding-box",CONTENT_BOX:"content-box"};
-dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_513,_514){
+dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_51d,_51e){
 node=dojo.byId(node,node.ownerDocument);
 var ret={x:0,y:0};
 var bs=dojo.html.boxSizing;
-if(!_514){
-_514=bs.CONTENT_BOX;
+if(!_51e){
+_51e=bs.CONTENT_BOX;
 }
-var _517=2;
-var _518;
-switch(_514){
+var _521=2;
+var _522;
+switch(_51e){
 case bs.MARGIN_BOX:
-_518=3;
+_522=3;
 break;
 case bs.BORDER_BOX:
-_518=2;
+_522=2;
 break;
 case bs.PADDING_BOX:
 default:
-_518=1;
+_522=1;
 break;
 case bs.CONTENT_BOX:
-_518=0;
+_522=0;
 break;
 }
 var h=dojo.render.html;
@@ -42291,7 +23481,7 @@
 }
 }else{
 if(document.getBoxObjectFor){
-_517=1;
+_521=1;
 try{
 var bo=document.getBoxObjectFor(node);
 ret.x=bo.x-dojo.html.sumAncestorProperties(node,"scrollLeft");
@@ -42301,11 +23491,11 @@
 }
 }else{
 if(node["offsetParent"]){
-var _51c;
+var _526;
 if((h.safari)&&(node.style.getPropertyValue("position")=="absolute")&&(node.parentNode==db)){
-_51c=db;
+_526=db;
 }else{
-_51c=db.parentNode;
+_526=db.parentNode;
 }
 if(node.parentNode!=db){
 var nd=node;
@@ -42315,16 +23505,16 @@
 ret.x-=dojo.html.sumAncestorProperties(nd,"scrollLeft");
 ret.y-=dojo.html.sumAncestorProperties(nd,"scrollTop");
 }
-var _51e=node;
+var _528=node;
 do{
-var n=_51e["offsetLeft"];
+var n=_528["offsetLeft"];
 if(!h.opera||n>0){
 ret.x+=isNaN(n)?0:n;
 }
-var m=_51e["offsetTop"];
+var m=_528["offsetTop"];
 ret.y+=isNaN(m)?0:m;
-_51e=_51e.offsetParent;
-}while((_51e!=_51c)&&(_51e!=null));
+_528=_528.offsetParent;
+}while((_528!=_526)&&(_528!=null));
 }else{
 if(node["x"]&&node["y"]){
 ret.x+=isNaN(node.x)?0:node.x;
@@ -42333,22 +23523,22 @@
 }
 }
 }
-if(_513){
-var _521=dojo.html.getScroll();
-ret.y+=_521.top;
-ret.x+=_521.left;
+if(_51d){
+var _52b=dojo.html.getScroll();
+ret.y+=_52b.top;
+ret.x+=_52b.left;
 }
-var _522=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
-if(_517>_518){
-for(var i=_518;i<_517;++i){
-ret.y+=_522[i](node,"top");
-ret.x+=_522[i](node,"left");
+var _52c=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
+if(_521>_522){
+for(var i=_522;i<_521;++i){
+ret.y+=_52c[i](node,"top");
+ret.x+=_52c[i](node,"left");
 }
 }else{
-if(_517<_518){
-for(var i=_518;i>_517;--i){
-ret.y-=_522[i-1](node,"top");
-ret.x-=_522[i-1](node,"left");
+if(_521<_522){
+for(var i=_522;i>_521;--i){
+ret.y-=_52c[i-1](node,"top");
+ret.x-=_52c[i-1](node,"left");
 }
 }
 }
@@ -42359,12 +23549,12 @@
 dojo.html.isPositionAbsolute=function(node){
 return (dojo.html.getComputedStyle(node,"position")=="absolute");
 };
-dojo.html._sumPixelValues=function(node,_526,_527){
-var _528=0;
-for(var x=0;x<_526.length;x++){
-_528+=dojo.html.getPixelValue(node,_526[x],_527);
+dojo.html._sumPixelValues=function(node,_530,_531){
+var _532=0;
+for(var x=0;x<_530.length;x++){
+_532+=dojo.html.getPixelValue(node,_530[x],_531);
 }
-return _528;
+return _532;
 };
 dojo.html.getMargin=function(node){
 return {width:dojo.html._sumPixelValues(node,["margin-left","margin-right"],(dojo.html.getComputedStyle(node,"position")=="absolute")),height:dojo.html._sumPixelValues(node,["margin-top","margin-bottom"],(dojo.html.getComputedStyle(node,"position")=="absolute"))};
@@ -42386,13 +23576,13 @@
 };
 dojo.html.getPadBorder=function(node){
 var pad=dojo.html.getPadding(node);
-var _535=dojo.html.getBorder(node);
-return {width:pad.width+_535.width,height:pad.height+_535.height};
+var _53f=dojo.html.getBorder(node);
+return {width:pad.width+_53f.width,height:pad.height+_53f.height};
 };
 dojo.html.getBoxSizing=function(node){
 var h=dojo.render.html;
 var bs=dojo.html.boxSizing;
-if(((h.ie)||(h.opera))&&node.nodeName!="IMG"){
+if(((h.ie)||(h.opera))&&node.nodeName.toLowerCase()!="img"){
 var cm=document["compatMode"];
 if((cm=="BackCompat")||(cm=="QuirksMode")){
 return bs.BORDER_BOX;
@@ -42403,12 +23593,15 @@
 if(arguments.length==0){
 node=document.documentElement;
 }
-var _53a=dojo.html.getStyle(node,"-moz-box-sizing");
-if(!_53a){
-_53a=dojo.html.getStyle(node,"box-sizing");
+var _544;
+if(!h.ie){
+_544=dojo.html.getStyle(node,"-moz-box-sizing");
+if(!_544){
+_544=dojo.html.getStyle(node,"box-sizing");
 }
-return (_53a?_53a:bs.CONTENT_BOX);
 }
+return (_544?_544:bs.CONTENT_BOX);
+}
 };
 dojo.html.isBorderBox=function(node){
 return (dojo.html.getBoxSizing(node)==dojo.html.boxSizing.BORDER_BOX);
@@ -42419,53 +23612,53 @@
 };
 dojo.html.getPaddingBox=function(node){
 var box=dojo.html.getBorderBox(node);
-var _53f=dojo.html.getBorder(node);
-return {width:box.width-_53f.width,height:box.height-_53f.height};
+var _549=dojo.html.getBorder(node);
+return {width:box.width-_549.width,height:box.height-_549.height};
 };
 dojo.html.getContentBox=function(node){
 node=dojo.byId(node);
-var _541=dojo.html.getPadBorder(node);
-return {width:node.offsetWidth-_541.width,height:node.offsetHeight-_541.height};
+var _54b=dojo.html.getPadBorder(node);
+return {width:node.offsetWidth-_54b.width,height:node.offsetHeight-_54b.height};
 };
 dojo.html.setContentBox=function(node,args){
 node=dojo.byId(node);
-var _544=0;
-var _545=0;
+var _54e=0;
+var _54f=0;
 var isbb=dojo.html.isBorderBox(node);
-var _547=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
+var _551=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
 var ret={};
 if(typeof args.width!="undefined"){
-_544=args.width+_547.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_544);
+_54e=args.width+_551.width;
+ret.width=dojo.html.setPositivePixelValue(node,"width",_54e);
 }
 if(typeof args.height!="undefined"){
-_545=args.height+_547.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_545);
+_54f=args.height+_551.height;
+ret.height=dojo.html.setPositivePixelValue(node,"height",_54f);
 }
 return ret;
 };
 dojo.html.getMarginBox=function(node){
-var _54a=dojo.html.getBorderBox(node);
-var _54b=dojo.html.getMargin(node);
-return {width:_54a.width+_54b.width,height:_54a.height+_54b.height};
+var _554=dojo.html.getBorderBox(node);
+var _555=dojo.html.getMargin(node);
+return {width:_554.width+_555.width,height:_554.height+_555.height};
 };
 dojo.html.setMarginBox=function(node,args){
 node=dojo.byId(node);
-var _54e=0;
-var _54f=0;
+var _558=0;
+var _559=0;
 var isbb=dojo.html.isBorderBox(node);
-var _551=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
-var _552=dojo.html.getMargin(node);
+var _55b=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
+var _55c=dojo.html.getMargin(node);
 var ret={};
 if(typeof args.width!="undefined"){
-_54e=args.width-_551.width;
-_54e-=_552.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_54e);
+_558=args.width-_55b.width;
+_558-=_55c.width;
+ret.width=dojo.html.setPositivePixelValue(node,"width",_558);
 }
 if(typeof args.height!="undefined"){
-_54f=args.height-_551.height;
-_54f-=_552.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_54f);
+_559=args.height-_55b.height;
+_559-=_55c.height;
+ret.height=dojo.html.setPositivePixelValue(node,"height",_559);
 }
 return ret;
 };
@@ -42483,31 +23676,31 @@
 return dojo.html.getContentBox(node);
 }
 };
-dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_557,_558,_559){
-if(_557 instanceof Array||typeof _557=="array"){
+dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_561,_562,_563){
+if(_561 instanceof Array||typeof _561=="array"){
 dojo.deprecated("dojo.html.toCoordinateArray","use dojo.html.toCoordinateObject({left: , top: , width: , height: }) instead","0.5");
-while(_557.length<4){
-_557.push(0);
+while(_561.length<4){
+_561.push(0);
 }
-while(_557.length>4){
-_557.pop();
+while(_561.length>4){
+_561.pop();
 }
-var ret={left:_557[0],top:_557[1],width:_557[2],height:_557[3]};
+var ret={left:_561[0],top:_561[1],width:_561[2],height:_561[3]};
 }else{
-if(!_557.nodeType&&!(_557 instanceof String||typeof _557=="string")&&("width" in _557||"height" in _557||"left" in _557||"x" in _557||"top" in _557||"y" in _557)){
-var ret={left:_557.left||_557.x||0,top:_557.top||_557.y||0,width:_557.width||0,height:_557.height||0};
+if(!_561.nodeType&&!(_561 instanceof String||typeof _561=="string")&&("width" in _561||"height" in _561||"left" in _561||"x" in _561||"top" in _561||"y" in _561)){
+var ret={left:_561.left||_561.x||0,top:_561.top||_561.y||0,width:_561.width||0,height:_561.height||0};
 }else{
-var node=dojo.byId(_557);
-var pos=dojo.html.abs(node,_558,_559);
-var _55d=dojo.html.getMarginBox(node);
-var ret={left:pos.left,top:pos.top,width:_55d.width,height:_55d.height};
+var node=dojo.byId(_561);
+var pos=dojo.html.abs(node,_562,_563);
+var _567=dojo.html.getMarginBox(node);
+var ret={left:pos.left,top:pos.top,width:_567.width,height:_567.height};
 }
 }
 ret.x=ret.left;
 ret.y=ret.top;
 return ret;
 };
-dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_55f){
+dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_569){
 return dojo.html._callDeprecated("setMarginBoxWidth","setMarginBox",arguments,"width");
 };
 dojo.html.setMarginBoxHeight=dojo.html.setOuterHeight=function(){
@@ -42519,19 +23712,19 @@
 dojo.html.getMarginBoxHeight=dojo.html.getOuterHeight=function(){
 return dojo.html._callDeprecated("getMarginBoxHeight","getMarginBox",arguments,null,"height");
 };
-dojo.html.getTotalOffset=function(node,type,_562){
+dojo.html.getTotalOffset=function(node,type,_56c){
 return dojo.html._callDeprecated("getTotalOffset","getAbsolutePosition",arguments,null,type);
 };
-dojo.html.getAbsoluteX=function(node,_564){
+dojo.html.getAbsoluteX=function(node,_56e){
 return dojo.html._callDeprecated("getAbsoluteX","getAbsolutePosition",arguments,null,"x");
 };
-dojo.html.getAbsoluteY=function(node,_566){
+dojo.html.getAbsoluteY=function(node,_570){
 return dojo.html._callDeprecated("getAbsoluteY","getAbsolutePosition",arguments,null,"y");
 };
-dojo.html.totalOffsetLeft=function(node,_568){
+dojo.html.totalOffsetLeft=function(node,_572){
 return dojo.html._callDeprecated("totalOffsetLeft","getAbsolutePosition",arguments,null,"left");
 };
-dojo.html.totalOffsetTop=function(node,_56a){
+dojo.html.totalOffsetTop=function(node,_574){
 return dojo.html._callDeprecated("totalOffsetTop","getAbsolutePosition",arguments,null,"top");
 };
 dojo.html.getMarginWidth=function(node){
@@ -42570,15 +23763,15 @@
 dojo.html.getContentBoxHeight=dojo.html.getContentHeight=function(){
 return dojo.html._callDeprecated("getContentBoxHeight","getContentBox",arguments,null,"height");
 };
-dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_574){
+dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_57e){
 return dojo.html._callDeprecated("setContentBoxWidth","setContentBox",arguments,"width");
 };
-dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_576){
+dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_580){
 return dojo.html._callDeprecated("setContentBoxHeight","setContentBox",arguments,"height");
 };
 dojo.provide("dojo.html.util");
-dojo.html.getElementWindow=function(_577){
-return dojo.html.getDocumentWindow(_577.ownerDocument);
+dojo.html.getElementWindow=function(_581){
+return dojo.html.getDocumentWindow(_581.ownerDocument);
 };
 dojo.html.getDocumentWindow=function(doc){
 if(dojo.render.html.safari&&!doc._parentWindow){
@@ -42600,49 +23793,49 @@
 };
 dojo.html.gravity=function(node,e){
 node=dojo.byId(node);
-var _57f=dojo.html.getCursorPosition(e);
+var _589=dojo.html.getCursorPosition(e);
 with(dojo.html){
-var _580=getAbsolutePosition(node,true);
+var _58a=getAbsolutePosition(node,true);
 var bb=getBorderBox(node);
-var _582=_580.x+(bb.width/2);
-var _583=_580.y+(bb.height/2);
+var _58c=_58a.x+(bb.width/2);
+var _58d=_58a.y+(bb.height/2);
 }
 with(dojo.html.gravity){
-return ((_57f.x<_582?WEST:EAST)|(_57f.y<_583?NORTH:SOUTH));
+return ((_589.x<_58c?WEST:EAST)|(_589.y<_58d?NORTH:SOUTH));
 }
 };
 dojo.html.gravity.NORTH=1;
 dojo.html.gravity.SOUTH=1<<1;
 dojo.html.gravity.EAST=1<<2;
 dojo.html.gravity.WEST=1<<3;
-dojo.html.overElement=function(_584,e){
-_584=dojo.byId(_584);
-var _586=dojo.html.getCursorPosition(e);
-var bb=dojo.html.getBorderBox(_584);
-var _588=dojo.html.getAbsolutePosition(_584,true,dojo.html.boxSizing.BORDER_BOX);
-var top=_588.y;
-var _58a=top+bb.height;
-var left=_588.x;
-var _58c=left+bb.width;
-return (_586.x>=left&&_586.x<=_58c&&_586.y>=top&&_586.y<=_58a);
+dojo.html.overElement=function(_58e,e){
+_58e=dojo.byId(_58e);
+var _590=dojo.html.getCursorPosition(e);
+var bb=dojo.html.getBorderBox(_58e);
+var _592=dojo.html.getAbsolutePosition(_58e,true,dojo.html.boxSizing.BORDER_BOX);
+var top=_592.y;
+var _594=top+bb.height;
+var left=_592.x;
+var _596=left+bb.width;
+return (_590.x>=left&&_590.x<=_596&&_590.y>=top&&_590.y<=_594);
 };
 dojo.html.renderedTextContent=function(node){
 node=dojo.byId(node);
-var _58e="";
+var _598="";
 if(node==null){
-return _58e;
+return _598;
 }
 for(var i=0;i<node.childNodes.length;i++){
 switch(node.childNodes[i].nodeType){
 case 1:
 case 5:
-var _590="unknown";
+var _59a="unknown";
 try{
-_590=dojo.html.getStyle(node.childNodes[i],"display");
+_59a=dojo.html.getStyle(node.childNodes[i],"display");
 }
 catch(E){
 }
-switch(_590){
+switch(_59a){
 case "block":
 case "list-item":
 case "run-in":
@@ -42655,17 +23848,17 @@
 case "table-column":
 case "table-cell":
 case "table-caption":
-_58e+="\n";
-_58e+=dojo.html.renderedTextContent(node.childNodes[i]);
-_58e+="\n";
+_598+="\n";
+_598+=dojo.html.renderedTextContent(node.childNodes[i]);
+_598+="\n";
 break;
 case "none":
 break;
 default:
 if(node.childNodes[i].tagName&&node.childNodes[i].tagName.toLowerCase()=="br"){
-_58e+="\n";
+_598+="\n";
 }else{
-_58e+=dojo.html.renderedTextContent(node.childNodes[i]);
+_598+=dojo.html.renderedTextContent(node.childNodes[i]);
 }
 break;
 }
@@ -42674,19 +23867,19 @@
 case 2:
 case 4:
 var text=node.childNodes[i].nodeValue;
-var _592="unknown";
+var _59c="unknown";
 try{
-_592=dojo.html.getStyle(node,"text-transform");
+_59c=dojo.html.getStyle(node,"text-transform");
 }
 catch(E){
 }
-switch(_592){
+switch(_59c){
 case "capitalize":
-var _593=text.split(" ");
-for(var i=0;i<_593.length;i++){
-_593[i]=_593[i].charAt(0).toUpperCase()+_593[i].substring(1);
+var _59d=text.split(" ");
+for(var i=0;i<_59d.length;i++){
+_59d[i]=_59d[i].charAt(0).toUpperCase()+_59d[i].substring(1);
 }
-text=_593.join(" ");
+text=_59d.join(" ");
 break;
 case "uppercase":
 text=text.toUpperCase();
@@ -42697,7 +23890,7 @@
 default:
 break;
 }
-switch(_592){
+switch(_59c){
 case "nowrap":
 break;
 case "pre-wrap":
@@ -42708,18 +23901,18 @@
 break;
 default:
 text=text.replace(/\s+/," ");
-if(/\s$/.test(_58e)){
+if(/\s$/.test(_598)){
 text.replace(/^\s/,"");
 }
 break;
 }
-_58e+=text;
+_598+=text;
 break;
 default:
 break;
 }
 }
-return _58e;
+return _598;
 };
 dojo.html.createNodesFromText=function(txt,trim){
 if(trim){
@@ -42728,18 +23921,18 @@
 var tn=dojo.doc().createElement("div");
 tn.style.visibility="hidden";
 dojo.body().appendChild(tn);
-var _597="none";
+var _5a1="none";
 if((/^<t[dh][\s\r\n>]/i).test(txt.replace(/^\s+/))){
 txt="<table><tbody><tr>"+txt+"</tr></tbody></table>";
-_597="cell";
+_5a1="cell";
 }else{
 if((/^<tr[\s\r\n>]/i).test(txt.replace(/^\s+/))){
 txt="<table><tbody>"+txt+"</tbody></table>";
-_597="row";
+_5a1="row";
 }else{
 if((/^<(thead|tbody|tfoot)[\s\r\n>]/i).test(txt.replace(/^\s+/))){
 txt="<table>"+txt+"</table>";
-_597="section";
+_5a1="section";
 }
 }
 }
@@ -42747,147 +23940,147 @@
 if(tn["normalize"]){
 tn.normalize();
 }
-var _598=null;
-switch(_597){
+var _5a2=null;
+switch(_5a1){
 case "cell":
-_598=tn.getElementsByTagName("tr")[0];
+_5a2=tn.getElementsByTagName("tr")[0];
 break;
 case "row":
-_598=tn.getElementsByTagName("tbody")[0];
+_5a2=tn.getElementsByTagName("tbody")[0];
 break;
 case "section":
-_598=tn.getElementsByTagName("table")[0];
+_5a2=tn.getElementsByTagName("table")[0];
 break;
 default:
-_598=tn;
+_5a2=tn;
 break;
 }
-var _599=[];
-for(var x=0;x<_598.childNodes.length;x++){
-_599.push(_598.childNodes[x].cloneNode(true));
+var _5a3=[];
+for(var x=0;x<_5a2.childNodes.length;x++){
+_5a3.push(_5a2.childNodes[x].cloneNode(true));
 }
 tn.style.display="none";
 dojo.html.destroyNode(tn);
-return _599;
+return _5a3;
 };
-dojo.html.placeOnScreen=function(node,_59c,_59d,_59e,_59f,_5a0,_5a1){
-if(_59c instanceof Array||typeof _59c=="array"){
-_5a1=_5a0;
-_5a0=_59f;
-_59f=_59e;
-_59e=_59d;
-_59d=_59c[1];
-_59c=_59c[0];
+dojo.html.placeOnScreen=function(node,_5a6,_5a7,_5a8,_5a9,_5aa,_5ab){
+if(_5a6 instanceof Array||typeof _5a6=="array"){
+_5ab=_5aa;
+_5aa=_5a9;
+_5a9=_5a8;
+_5a8=_5a7;
+_5a7=_5a6[1];
+_5a6=_5a6[0];
 }
-if(_5a0 instanceof String||typeof _5a0=="string"){
-_5a0=_5a0.split(",");
+if(_5aa instanceof String||typeof _5aa=="string"){
+_5aa=_5aa.split(",");
 }
-if(!isNaN(_59e)){
-_59e=[Number(_59e),Number(_59e)];
+if(!isNaN(_5a8)){
+_5a8=[Number(_5a8),Number(_5a8)];
 }else{
-if(!(_59e instanceof Array||typeof _59e=="array")){
-_59e=[0,0];
+if(!(_5a8 instanceof Array||typeof _5a8=="array")){
+_5a8=[0,0];
 }
 }
-var _5a2=dojo.html.getScroll().offset;
+var _5ac=dojo.html.getScroll().offset;
 var view=dojo.html.getViewport();
 node=dojo.byId(node);
-var _5a4=node.style.display;
+var _5ae=node.style.display;
 node.style.display="";
 var bb=dojo.html.getBorderBox(node);
 var w=bb.width;
 var h=bb.height;
-node.style.display=_5a4;
-if(!(_5a0 instanceof Array||typeof _5a0=="array")){
-_5a0=["TL"];
+node.style.display=_5ae;
+if(!(_5aa instanceof Array||typeof _5aa=="array")){
+_5aa=["TL"];
 }
-var _5a8,_5a9,_5aa=Infinity,_5ab;
-for(var _5ac=0;_5ac<_5a0.length;++_5ac){
-var _5ad=_5a0[_5ac];
-var _5ae=true;
-var tryX=_59c-(_5ad.charAt(1)=="L"?0:w)+_59e[0]*(_5ad.charAt(1)=="L"?1:-1);
-var tryY=_59d-(_5ad.charAt(0)=="T"?0:h)+_59e[1]*(_5ad.charAt(0)=="T"?1:-1);
-if(_59f){
-tryX-=_5a2.x;
-tryY-=_5a2.y;
+var _5b2,_5b3,_5b4=Infinity,_5b5;
+for(var _5b6=0;_5b6<_5aa.length;++_5b6){
+var _5b7=_5aa[_5b6];
+var _5b8=true;
+var tryX=_5a6-(_5b7.charAt(1)=="L"?0:w)+_5a8[0]*(_5b7.charAt(1)=="L"?1:-1);
+var tryY=_5a7-(_5b7.charAt(0)=="T"?0:h)+_5a8[1]*(_5b7.charAt(0)=="T"?1:-1);
+if(_5a9){
+tryX-=_5ac.x;
+tryY-=_5ac.y;
 }
 if(tryX<0){
 tryX=0;
-_5ae=false;
+_5b8=false;
 }
 if(tryY<0){
 tryY=0;
-_5ae=false;
+_5b8=false;
 }
 var x=tryX+w;
 if(x>view.width){
 x=view.width-w;
-_5ae=false;
+_5b8=false;
 }else{
 x=tryX;
 }
-x=Math.max(_59e[0],x)+_5a2.x;
+x=Math.max(_5a8[0],x)+_5ac.x;
 var y=tryY+h;
 if(y>view.height){
 y=view.height-h;
-_5ae=false;
+_5b8=false;
 }else{
 y=tryY;
 }
-y=Math.max(_59e[1],y)+_5a2.y;
-if(_5ae){
-_5a8=x;
-_5a9=y;
-_5aa=0;
-_5ab=_5ad;
+y=Math.max(_5a8[1],y)+_5ac.y;
+if(_5b8){
+_5b2=x;
+_5b3=y;
+_5b4=0;
+_5b5=_5b7;
 break;
 }else{
-var dist=Math.pow(x-tryX-_5a2.x,2)+Math.pow(y-tryY-_5a2.y,2);
-if(_5aa>dist){
-_5aa=dist;
-_5a8=x;
-_5a9=y;
-_5ab=_5ad;
+var dist=Math.pow(x-tryX-_5ac.x,2)+Math.pow(y-tryY-_5ac.y,2);
+if(_5b4>dist){
+_5b4=dist;
+_5b2=x;
+_5b3=y;
+_5b5=_5b7;
 }
 }
 }
-if(!_5a1){
-node.style.left=_5a8+"px";
-node.style.top=_5a9+"px";
+if(!_5ab){
+node.style.left=_5b2+"px";
+node.style.top=_5b3+"px";
 }
-return {left:_5a8,top:_5a9,x:_5a8,y:_5a9,dist:_5aa,corner:_5ab};
+return {left:_5b2,top:_5b3,x:_5b2,y:_5b3,dist:_5b4,corner:_5b5};
 };
-dojo.html.placeOnScreenPoint=function(node,_5b5,_5b6,_5b7,_5b8){
+dojo.html.placeOnScreenPoint=function(node,_5bf,_5c0,_5c1,_5c2){
 dojo.deprecated("dojo.html.placeOnScreenPoint","use dojo.html.placeOnScreen() instead","0.5");
-return dojo.html.placeOnScreen(node,_5b5,_5b6,_5b7,_5b8,["TL","TR","BL","BR"]);
+return dojo.html.placeOnScreen(node,_5bf,_5c0,_5c1,_5c2,["TL","TR","BL","BR"]);
 };
-dojo.html.placeOnScreenAroundElement=function(node,_5ba,_5bb,_5bc,_5bd,_5be){
-var best,_5c0=Infinity;
-_5ba=dojo.byId(_5ba);
-var _5c1=_5ba.style.display;
-_5ba.style.display="";
-var mb=dojo.html.getElementBox(_5ba,_5bc);
-var _5c3=mb.width;
-var _5c4=mb.height;
-var _5c5=dojo.html.getAbsolutePosition(_5ba,true,_5bc);
-_5ba.style.display=_5c1;
-for(var _5c6 in _5bd){
-var pos,_5c8,_5c9;
-var _5ca=_5bd[_5c6];
-_5c8=_5c5.x+(_5c6.charAt(1)=="L"?0:_5c3);
-_5c9=_5c5.y+(_5c6.charAt(0)=="T"?0:_5c4);
-pos=dojo.html.placeOnScreen(node,_5c8,_5c9,_5bb,true,_5ca,true);
+dojo.html.placeOnScreenAroundElement=function(node,_5c4,_5c5,_5c6,_5c7,_5c8){
+var best,_5ca=Infinity;
+_5c4=dojo.byId(_5c4);
+var _5cb=_5c4.style.display;
+_5c4.style.display="";
+var mb=dojo.html.getElementBox(_5c4,_5c6);
+var _5cd=mb.width;
+var _5ce=mb.height;
+var _5cf=dojo.html.getAbsolutePosition(_5c4,true,_5c6);
+_5c4.style.display=_5cb;
+for(var _5d0 in _5c7){
+var pos,_5d2,_5d3;
+var _5d4=_5c7[_5d0];
+_5d2=_5cf.x+(_5d0.charAt(1)=="L"?0:_5cd);
+_5d3=_5cf.y+(_5d0.charAt(0)=="T"?0:_5ce);
+pos=dojo.html.placeOnScreen(node,_5d2,_5d3,_5c5,true,_5d4,true);
 if(pos.dist==0){
 best=pos;
 break;
 }else{
-if(_5c0>pos.dist){
-_5c0=pos.dist;
+if(_5ca>pos.dist){
+_5ca=pos.dist;
 best=pos;
 }
 }
 }
-if(!_5be){
+if(!_5c8){
 node.style.left=best.left+"px";
 node.style.top=best.top+"px";
 }
@@ -42905,14 +24098,14 @@
 if(dojo.render.html.mozilla){
 node.scrollIntoView(false);
 }else{
-var _5cc=node.parentNode;
-var _5cd=_5cc.scrollTop+dojo.html.getBorderBox(_5cc).height;
-var _5ce=node.offsetTop+dojo.html.getMarginBox(node).height;
-if(_5cd<_5ce){
-_5cc.scrollTop+=(_5ce-_5cd);
+var _5d6=node.parentNode;
+var _5d7=_5d6.scrollTop+dojo.html.getBorderBox(_5d6).height;
+var _5d8=node.offsetTop+dojo.html.getMarginBox(node).height;
+if(_5d7<_5d8){
+_5d6.scrollTop+=(_5d8-_5d7);
 }else{
-if(_5cc.scrollTop>node.offsetTop){
-_5cc.scrollTop-=(_5cc.scrollTop-node.offsetTop);
+if(_5d6.scrollTop>node.offsetTop){
+_5d6.scrollTop-=(_5d6.scrollTop-node.offsetTop);
 }
 }
 }
@@ -42950,8 +24143,8 @@
 dojo.gfx.color.Color.fromArray=function(arr){
 return new dojo.gfx.color.Color(arr[0],arr[1],arr[2],arr[3]);
 };
-dojo.extend(dojo.gfx.color.Color,{toRgb:function(_5d5){
-if(_5d5){
+dojo.extend(dojo.gfx.color.Color,{toRgb:function(_5df){
+if(_5df){
 return this.toRgba();
 }else{
 return [this.r,this.g,this.b];
@@ -42964,62 +24157,62 @@
 return "rgb("+this.toRgb().join()+")";
 },toString:function(){
 return this.toHex();
-},blend:function(_5d6,_5d7){
+},blend:function(_5e0,_5e1){
 var rgb=null;
-if(dojo.lang.isArray(_5d6)){
-rgb=_5d6;
+if(dojo.lang.isArray(_5e0)){
+rgb=_5e0;
 }else{
-if(_5d6 instanceof dojo.gfx.color.Color){
-rgb=_5d6.toRgb();
+if(_5e0 instanceof dojo.gfx.color.Color){
+rgb=_5e0.toRgb();
 }else{
-rgb=new dojo.gfx.color.Color(_5d6).toRgb();
+rgb=new dojo.gfx.color.Color(_5e0).toRgb();
 }
 }
-return dojo.gfx.color.blend(this.toRgb(),rgb,_5d7);
+return dojo.gfx.color.blend(this.toRgb(),rgb,_5e1);
 }});
 dojo.gfx.color.named={white:[255,255,255],black:[0,0,0],red:[255,0,0],green:[0,255,0],lime:[0,255,0],blue:[0,0,255],navy:[0,0,128],gray:[128,128,128],silver:[192,192,192]};
-dojo.gfx.color.blend=function(a,b,_5db){
+dojo.gfx.color.blend=function(a,b,_5e5){
 if(typeof a=="string"){
-return dojo.gfx.color.blendHex(a,b,_5db);
+return dojo.gfx.color.blendHex(a,b,_5e5);
 }
-if(!_5db){
-_5db=0;
+if(!_5e5){
+_5e5=0;
 }
-_5db=Math.min(Math.max(-1,_5db),1);
-_5db=((_5db+1)/2);
+_5e5=Math.min(Math.max(-1,_5e5),1);
+_5e5=((_5e5+1)/2);
 var c=[];
 for(var x=0;x<3;x++){
-c[x]=parseInt(b[x]+((a[x]-b[x])*_5db));
+c[x]=parseInt(b[x]+((a[x]-b[x])*_5e5));
 }
 return c;
 };
-dojo.gfx.color.blendHex=function(a,b,_5e0){
-return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_5e0));
+dojo.gfx.color.blendHex=function(a,b,_5ea){
+return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_5ea));
 };
-dojo.gfx.color.extractRGB=function(_5e1){
+dojo.gfx.color.extractRGB=function(_5eb){
 var hex="0123456789abcdef";
-_5e1=_5e1.toLowerCase();
-if(_5e1.indexOf("rgb")==0){
-var _5e3=_5e1.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-var ret=_5e3.splice(1,3);
+_5eb=_5eb.toLowerCase();
+if(_5eb.indexOf("rgb")==0){
+var _5ed=_5eb.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
+var ret=_5ed.splice(1,3);
 return ret;
 }else{
-var _5e5=dojo.gfx.color.hex2rgb(_5e1);
-if(_5e5){
-return _5e5;
+var _5ef=dojo.gfx.color.hex2rgb(_5eb);
+if(_5ef){
+return _5ef;
 }else{
-return dojo.gfx.color.named[_5e1]||[255,255,255];
+return dojo.gfx.color.named[_5eb]||[255,255,255];
 }
 }
 };
 dojo.gfx.color.hex2rgb=function(hex){
-var _5e7="0123456789ABCDEF";
+var _5f1="0123456789ABCDEF";
 var rgb=new Array(3);
 if(hex.indexOf("#")==0){
 hex=hex.substring(1);
 }
 hex=hex.toUpperCase();
-if(hex.replace(new RegExp("["+_5e7+"]","g"),"")!=""){
+if(hex.replace(new RegExp("["+_5f1+"]","g"),"")!=""){
 return null;
 }
 if(hex.length==3){
@@ -43032,7 +24225,7 @@
 rgb[2]=hex.substring(4);
 }
 for(var i=0;i<rgb.length;i++){
-rgb[i]=_5e7.indexOf(rgb[i].charAt(0))*16+_5e7.indexOf(rgb[i].charAt(1));
+rgb[i]=_5f1.indexOf(rgb[i].charAt(0))*16+_5f1.indexOf(rgb[i].charAt(1));
 }
 return rgb;
 };
@@ -43054,10 +24247,10 @@
 return ret.join("");
 };
 dojo.provide("dojo.lfx.Animation");
-dojo.lfx.Line=function(_5f0,end){
-this.start=_5f0;
+dojo.lfx.Line=function(_5fa,end){
+this.start=_5fa;
 this.end=end;
-if(dojo.lang.isArray(_5f0)){
+if(dojo.lang.isArray(_5fa)){
 var diff=[];
 dojo.lang.forEach(this.start,function(s,i){
 diff[i]=this.end[i]-s;
@@ -43070,19 +24263,21 @@
 return res;
 };
 }else{
-var diff=end-_5f0;
+var diff=end-_5fa;
 this.getValue=function(n){
 return (diff*n)+this.start;
 };
 }
 };
+if((dojo.render.html.khtml)&&(!dojo.render.html.safari)){
 dojo.lfx.easeDefault=function(n){
-if(dojo.render.html.khtml){
 return (parseFloat("0.5")+((Math.sin((n+parseFloat("1.5"))*Math.PI))/2));
+};
 }else{
+dojo.lfx.easeDefault=function(n){
 return (0.5+((Math.sin((n+1.5)*Math.PI))/2));
-}
 };
+}
 dojo.lfx.easeIn=function(n){
 return Math.pow(n,3);
 };
@@ -43094,17 +24289,17 @@
 };
 dojo.lfx.IAnimation=function(){
 };
-dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:25,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,connect:function(evt,_5ff,_600){
-if(!_600){
-_600=_5ff;
-_5ff=this;
+dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:10,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,connect:function(evt,_60a,_60b){
+if(!_60b){
+_60b=_60a;
+_60a=this;
 }
-_600=dojo.lang.hitch(_5ff,_600);
-var _601=this[evt]||function(){
+_60b=dojo.lang.hitch(_60a,_60b);
+var _60c=this[evt]||function(){
 };
 this[evt]=function(){
-var ret=_601.apply(this,arguments);
-_600.apply(this,arguments);
+var ret=_60c.apply(this,arguments);
+_60b.apply(this,arguments);
 return ret;
 };
 return this;
@@ -43113,57 +24308,57 @@
 this[evt].apply(this,(args||[]));
 }
 return this;
-},repeat:function(_605){
-this.repeatCount=_605;
+},repeat:function(_610){
+this.repeatCount=_610;
 return this;
 },_active:false,_paused:false});
-dojo.lfx.Animation=function(_606,_607,_608,_609,_60a,rate){
+dojo.lfx.Animation=function(_611,_612,_613,_614,_615,rate){
 dojo.lfx.IAnimation.call(this);
-if(dojo.lang.isNumber(_606)||(!_606&&_607.getValue)){
-rate=_60a;
-_60a=_609;
-_609=_608;
-_608=_607;
-_607=_606;
-_606=null;
+if(dojo.lang.isNumber(_611)||(!_611&&_612.getValue)){
+rate=_615;
+_615=_614;
+_614=_613;
+_613=_612;
+_612=_611;
+_611=null;
 }else{
-if(_606.getValue||dojo.lang.isArray(_606)){
-rate=_609;
-_60a=_608;
-_609=_607;
-_608=_606;
-_607=null;
-_606=null;
+if(_611.getValue||dojo.lang.isArray(_611)){
+rate=_614;
+_615=_613;
+_614=_612;
+_613=_611;
+_612=null;
+_611=null;
 }
 }
-if(dojo.lang.isArray(_608)){
-this.curve=new dojo.lfx.Line(_608[0],_608[1]);
+if(dojo.lang.isArray(_613)){
+this.curve=new dojo.lfx.Line(_613[0],_613[1]);
 }else{
-this.curve=_608;
+this.curve=_613;
 }
-if(_607!=null&&_607>0){
-this.duration=_607;
+if(_612!=null&&_612>0){
+this.duration=_612;
 }
-if(_60a){
-this.repeatCount=_60a;
+if(_615){
+this.repeatCount=_615;
 }
 if(rate){
 this.rate=rate;
 }
-if(_606){
+if(_611){
 dojo.lang.forEach(["handler","beforeBegin","onBegin","onEnd","onPlay","onStop","onAnimate"],function(item){
-if(_606[item]){
-this.connect(item,_606[item]);
+if(_611[item]){
+this.connect(item,_611[item]);
 }
 },this);
 }
-if(_609&&dojo.lang.isFunction(_609)){
-this.easing=_609;
+if(_614&&dojo.lang.isFunction(_614)){
+this.easing=_614;
 }
 };
 dojo.inherits(dojo.lfx.Animation,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_60d,_60e){
-if(_60e){
+dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_618,_619){
+if(_619){
 clearTimeout(this._timer);
 this._active=false;
 this._paused=false;
@@ -43175,10 +24370,10 @@
 }
 this.fire("handler",["beforeBegin"]);
 this.fire("beforeBegin");
-if(_60d>0){
+if(_618>0){
 setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_60e);
-}),_60d);
+this.play(null,_619);
+}),_618);
 return this;
 }
 this._startTime=new Date().valueOf();
@@ -43189,16 +24384,16 @@
 this._active=true;
 this._paused=false;
 var step=this._percent/100;
-var _610=this.curve.getValue(step);
+var _61b=this.curve.getValue(step);
 if(this._percent==0){
 if(!this._startRepeatCount){
 this._startRepeatCount=this.repeatCount;
 }
-this.fire("handler",["begin",_610]);
-this.fire("onBegin",[_610]);
+this.fire("handler",["begin",_61b]);
+this.fire("onBegin",[_61b]);
 }
-this.fire("handler",["play",_610]);
-this.fire("onPlay",[_610]);
+this.fire("handler",["play",_61b]);
+this.fire("onPlay",[_61b]);
 this._cycle();
 return this;
 },pause:function(){
@@ -43207,28 +24402,28 @@
 return this;
 }
 this._paused=true;
-var _611=this.curve.getValue(this._percent/100);
-this.fire("handler",["pause",_611]);
-this.fire("onPause",[_611]);
+var _61c=this.curve.getValue(this._percent/100);
+this.fire("handler",["pause",_61c]);
+this.fire("onPause",[_61c]);
 return this;
-},gotoPercent:function(pct,_613){
+},gotoPercent:function(pct,_61e){
 clearTimeout(this._timer);
 this._active=true;
 this._paused=true;
 this._percent=pct;
-if(_613){
+if(_61e){
 this.play();
 }
 return this;
-},stop:function(_614){
+},stop:function(_61f){
 clearTimeout(this._timer);
 var step=this._percent/100;
-if(_614){
+if(_61f){
 step=1;
 }
-var _616=this.curve.getValue(step);
-this.fire("handler",["stop",_616]);
-this.fire("onStop",[_616]);
+var _621=this.curve.getValue(step);
+this.fire("handler",["stop",_621]);
+this.fire("onStop",[_621]);
 this._active=false;
 this._paused=false;
 return this;
@@ -43253,9 +24448,9 @@
 if((this.easing)&&(dojo.lang.isFunction(this.easing))){
 step=this.easing(step);
 }
-var _619=this.curve.getValue(step);
-this.fire("handler",["animate",_619]);
-this.fire("onAnimate",[_619]);
+var _624=this.curve.getValue(step);
+this.fire("handler",["animate",_624]);
+this.fire("onAnimate",[_624]);
 if(step<1){
 this._timer=setTimeout(dojo.lang.hitch(this,"_cycle"),this.rate);
 }else{
@@ -43279,44 +24474,44 @@
 }
 return this;
 }});
-dojo.lfx.Combine=function(_61a){
+dojo.lfx.Combine=function(_625){
 dojo.lfx.IAnimation.call(this);
 this._anims=[];
 this._animsEnded=0;
-var _61b=arguments;
-if(_61b.length==1&&(dojo.lang.isArray(_61b[0])||dojo.lang.isArrayLike(_61b[0]))){
-_61b=_61b[0];
+var _626=arguments;
+if(_626.length==1&&(dojo.lang.isArray(_626[0])||dojo.lang.isArrayLike(_626[0]))){
+_626=_626[0];
 }
-dojo.lang.forEach(_61b,function(anim){
+dojo.lang.forEach(_626,function(anim){
 this._anims.push(anim);
 anim.connect("onEnd",dojo.lang.hitch(this,"_onAnimsEnded"));
 },this);
 };
 dojo.inherits(dojo.lfx.Combine,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_61d,_61e){
+dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_628,_629){
 if(!this._anims.length){
 return this;
 }
 this.fire("beforeBegin");
-if(_61d>0){
+if(_628>0){
 setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_61e);
-}),_61d);
+this.play(null,_629);
+}),_628);
 return this;
 }
-if(_61e||this._anims[0].percent==0){
+if(_629||this._anims[0].percent==0){
 this.fire("onBegin");
 }
 this.fire("onPlay");
-this._animsCall("play",null,_61e);
+this._animsCall("play",null,_629);
 return this;
 },pause:function(){
 this.fire("onPause");
 this._animsCall("pause");
 return this;
-},stop:function(_61f){
+},stop:function(_62a){
 this.fire("onStop");
-this._animsCall("stop",_61f);
+this._animsCall("stop",_62a);
 return this;
 },_onAnimsEnded:function(){
 this._animsEnded++;
@@ -43324,31 +24519,31 @@
 this.fire("onEnd");
 }
 return this;
-},_animsCall:function(_620){
+},_animsCall:function(_62b){
 var args=[];
 if(arguments.length>1){
 for(var i=1;i<arguments.length;i++){
 args.push(arguments[i]);
 }
 }
-var _623=this;
+var _62e=this;
 dojo.lang.forEach(this._anims,function(anim){
-anim[_620](args);
-},_623);
+anim[_62b](args);
+},_62e);
 return this;
 }});
-dojo.lfx.Chain=function(_625){
+dojo.lfx.Chain=function(_630){
 dojo.lfx.IAnimation.call(this);
 this._anims=[];
 this._currAnim=-1;
-var _626=arguments;
-if(_626.length==1&&(dojo.lang.isArray(_626[0])||dojo.lang.isArrayLike(_626[0]))){
-_626=_626[0];
+var _631=arguments;
+if(_631.length==1&&(dojo.lang.isArray(_631[0])||dojo.lang.isArrayLike(_631[0]))){
+_631=_631[0];
 }
-var _627=this;
-dojo.lang.forEach(_626,function(anim,i,_62a){
+var _632=this;
+dojo.lang.forEach(_631,function(anim,i,_635){
 this._anims.push(anim);
-if(i<_62a.length-1){
+if(i<_635.length-1){
 anim.connect("onEnd",dojo.lang.hitch(this,"_playNext"));
 }else{
 anim.connect("onEnd",dojo.lang.hitch(this,function(){
@@ -43358,28 +24553,28 @@
 },this);
 };
 dojo.inherits(dojo.lfx.Chain,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_62b,_62c){
+dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_636,_637){
 if(!this._anims.length){
 return this;
 }
-if(_62c||!this._anims[this._currAnim]){
+if(_637||!this._anims[this._currAnim]){
 this._currAnim=0;
 }
-var _62d=this._anims[this._currAnim];
+var _638=this._anims[this._currAnim];
 this.fire("beforeBegin");
-if(_62b>0){
+if(_636>0){
 setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_62c);
-}),_62b);
+this.play(null,_637);
+}),_636);
 return this;
 }
-if(_62d){
+if(_638){
 if(this._currAnim==0){
 this.fire("handler",["begin",this._currAnim]);
 this.fire("onBegin",[this._currAnim]);
 }
 this.fire("onPlay",[this._currAnim]);
-_62d.play(null,_62c);
+_638.play(null,_637);
 }
 return this;
 },pause:function(){
@@ -43395,9 +24590,9 @@
 if(this._currAnim==-1){
 this._currAnim=0;
 }
-var _62e=this._anims[this._currAnim];
-if(_62e){
-if(!_62e._active||_62e._paused){
+var _639=this._anims[this._currAnim];
+if(_639){
+if(!_639._active||_639._paused){
 this.play();
 }else{
 this.pause();
@@ -43405,12 +24600,12 @@
 }
 return this;
 },stop:function(){
-var _62f=this._anims[this._currAnim];
-if(_62f){
-_62f.stop();
+var _63a=this._anims[this._currAnim];
+if(_63a){
+_63a.stop();
 this.fire("onStop",[this._currAnim]);
 }
-return _62f;
+return _63a;
 },_playNext:function(){
 if(this._currAnim==-1||this._anims.length==0){
 return this;
@@ -43421,82 +24616,82 @@
 }
 return this;
 }});
-dojo.lfx.combine=function(_630){
-var _631=arguments;
+dojo.lfx.combine=function(_63b){
+var _63c=arguments;
 if(dojo.lang.isArray(arguments[0])){
-_631=arguments[0];
+_63c=arguments[0];
 }
-if(_631.length==1){
-return _631[0];
+if(_63c.length==1){
+return _63c[0];
 }
-return new dojo.lfx.Combine(_631);
+return new dojo.lfx.Combine(_63c);
 };
-dojo.lfx.chain=function(_632){
-var _633=arguments;
+dojo.lfx.chain=function(_63d){
+var _63e=arguments;
 if(dojo.lang.isArray(arguments[0])){
-_633=arguments[0];
+_63e=arguments[0];
 }
-if(_633.length==1){
-return _633[0];
+if(_63e.length==1){
+return _63e[0];
 }
-return new dojo.lfx.Chain(_633);
+return new dojo.lfx.Chain(_63e);
 };
 dojo.provide("dojo.html.color");
 dojo.html.getBackgroundColor=function(node){
 node=dojo.byId(node);
-var _635;
+var _640;
 do{
-_635=dojo.html.getStyle(node,"background-color");
-if(_635.toLowerCase()=="rgba(0, 0, 0, 0)"){
-_635="transparent";
+_640=dojo.html.getStyle(node,"background-color");
+if(_640.toLowerCase()=="rgba(0, 0, 0, 0)"){
+_640="transparent";
 }
 if(node==document.getElementsByTagName("body")[0]){
 node=null;
 break;
 }
 node=node.parentNode;
-}while(node&&dojo.lang.inArray(["transparent",""],_635));
-if(_635=="transparent"){
-_635=[255,255,255,0];
+}while(node&&dojo.lang.inArray(["transparent",""],_640));
+if(_640=="transparent"){
+_640=[255,255,255,0];
 }else{
-_635=dojo.gfx.color.extractRGB(_635);
+_640=dojo.gfx.color.extractRGB(_640);
 }
-return _635;
+return _640;
 };
 dojo.provide("dojo.lfx.html");
-dojo.lfx.html._byId=function(_636){
-if(!_636){
+dojo.lfx.html._byId=function(_641){
+if(!_641){
 return [];
 }
-if(dojo.lang.isArrayLike(_636)){
-if(!_636.alreadyChecked){
+if(dojo.lang.isArrayLike(_641)){
+if(!_641.alreadyChecked){
 var n=[];
-dojo.lang.forEach(_636,function(node){
+dojo.lang.forEach(_641,function(node){
 n.push(dojo.byId(node));
 });
 n.alreadyChecked=true;
 return n;
 }else{
-return _636;
+return _641;
 }
 }else{
 var n=[];
-n.push(dojo.byId(_636));
+n.push(dojo.byId(_641));
 n.alreadyChecked=true;
 return n;
 }
 };
-dojo.lfx.html.propertyAnimation=function(_639,_63a,_63b,_63c,_63d){
-_639=dojo.lfx.html._byId(_639);
-var _63e={"propertyMap":_63a,"nodes":_639,"duration":_63b,"easing":_63c||dojo.lfx.easeDefault};
-var _63f=function(args){
+dojo.lfx.html.propertyAnimation=function(_644,_645,_646,_647,_648){
+_644=dojo.lfx.html._byId(_644);
+var _649={"propertyMap":_645,"nodes":_644,"duration":_646,"easing":_647||dojo.lfx.easeDefault};
+var _64a=function(args){
 if(args.nodes.length==1){
 var pm=args.propertyMap;
 if(!dojo.lang.isArray(args.propertyMap)){
 var parr=[];
-for(var _643 in pm){
-pm[_643].property=_643;
-parr.push(pm[_643]);
+for(var _64e in pm){
+pm[_64e].property=_64e;
+parr.push(pm[_64e]);
 }
 pm=args.propertyMap=parr;
 }
@@ -43511,24 +24706,24 @@
 });
 }
 };
-var _645=function(_646){
-var _647=[];
-dojo.lang.forEach(_646,function(c){
-_647.push(Math.round(c));
+var _650=function(_651){
+var _652=[];
+dojo.lang.forEach(_651,function(c){
+_652.push(Math.round(c));
 });
-return _647;
+return _652;
 };
-var _649=function(n,_64b){
+var _654=function(n,_656){
 n=dojo.byId(n);
 if(!n||!n.style){
 return;
 }
-for(var s in _64b){
+for(var s in _656){
 try{
 if(s=="opacity"){
-dojo.html.setOpacity(n,_64b[s]);
+dojo.html.setOpacity(n,_656[s]);
 }else{
-n.style[s]=_64b[s];
+n.style[s]=_656[s];
 }
 }
 catch(e){
@@ -43536,10 +24731,10 @@
 }
 }
 };
-var _64d=function(_64e){
-this._properties=_64e;
-this.diffs=new Array(_64e.length);
-dojo.lang.forEach(_64e,function(prop,i){
+var _658=function(_659){
+this._properties=_659;
+this.diffs=new Array(_659.length);
+dojo.lang.forEach(_659,function(prop,i){
 if(dojo.lang.isFunction(prop.start)){
 prop.start=prop.start(prop,i);
 }
@@ -43560,43 +24755,43 @@
 this.getValue=function(n){
 var ret={};
 dojo.lang.forEach(this._properties,function(prop,i){
-var _655=null;
+var _660=null;
 if(dojo.lang.isArray(prop.start)){
 }else{
 if(prop.start instanceof dojo.gfx.color.Color){
-_655=(prop.units||"rgb")+"(";
+_660=(prop.units||"rgb")+"(";
 for(var j=0;j<prop.startRgb.length;j++){
-_655+=Math.round(((prop.endRgb[j]-prop.startRgb[j])*n)+prop.startRgb[j])+(j<prop.startRgb.length-1?",":"");
+_660+=Math.round(((prop.endRgb[j]-prop.startRgb[j])*n)+prop.startRgb[j])+(j<prop.startRgb.length-1?",":"");
 }
-_655+=")";
+_660+=")";
 }else{
-_655=((this.diffs[i])*n)+prop.start+(prop.property!="opacity"?prop.units||"px":"");
+_660=((this.diffs[i])*n)+prop.start+(prop.property!="opacity"?prop.units||"px":"");
 }
 }
-ret[dojo.html.toCamelCase(prop.property)]=_655;
+ret[dojo.html.toCamelCase(prop.property)]=_660;
 },this);
 return ret;
 };
 };
 var anim=new dojo.lfx.Animation({beforeBegin:function(){
-_63f(_63e);
-anim.curve=new _64d(_63e.propertyMap);
-},onAnimate:function(_658){
-dojo.lang.forEach(_63e.nodes,function(node){
-_649(node,_658);
+_64a(_649);
+anim.curve=new _658(_649.propertyMap);
+},onAnimate:function(_663){
+dojo.lang.forEach(_649.nodes,function(node){
+_654(node,_663);
 });
-}},_63e.duration,null,_63e.easing);
-if(_63d){
-for(var x in _63d){
-if(dojo.lang.isFunction(_63d[x])){
-anim.connect(x,anim,_63d[x]);
+}},_649.duration,null,_649.easing);
+if(_648){
+for(var x in _648){
+if(dojo.lang.isFunction(_648[x])){
+anim.connect(x,anim,_648[x]);
 }
 }
 }
 return anim;
 };
-dojo.lfx.html._makeFadeable=function(_65b){
-var _65c=function(node){
+dojo.lfx.html._makeFadeable=function(_666){
+var _667=function(node){
 if(dojo.render.html.ie){
 if((node.style.zoom.length==0)&&(dojo.html.getStyle(node,"zoom")=="normal")){
 node.style.zoom="1";
@@ -43606,129 +24801,129 @@
 }
 }
 };
-if(dojo.lang.isArrayLike(_65b)){
-dojo.lang.forEach(_65b,_65c);
+if(dojo.lang.isArrayLike(_666)){
+dojo.lang.forEach(_666,_667);
 }else{
-_65c(_65b);
+_667(_666);
 }
 };
-dojo.lfx.html.fade=function(_65e,_65f,_660,_661,_662){
-_65e=dojo.lfx.html._byId(_65e);
-var _663={property:"opacity"};
-if(!dj_undef("start",_65f)){
-_663.start=_65f.start;
+dojo.lfx.html.fade=function(_669,_66a,_66b,_66c,_66d){
+_669=dojo.lfx.html._byId(_669);
+var _66e={property:"opacity"};
+if(!dj_undef("start",_66a)){
+_66e.start=_66a.start;
 }else{
-_663.start=function(){
-return dojo.html.getOpacity(_65e[0]);
+_66e.start=function(){
+return dojo.html.getOpacity(_669[0]);
 };
 }
-if(!dj_undef("end",_65f)){
-_663.end=_65f.end;
+if(!dj_undef("end",_66a)){
+_66e.end=_66a.end;
 }else{
 dojo.raise("dojo.lfx.html.fade needs an end value");
 }
-var anim=dojo.lfx.propertyAnimation(_65e,[_663],_660,_661);
+var anim=dojo.lfx.propertyAnimation(_669,[_66e],_66b,_66c);
 anim.connect("beforeBegin",function(){
-dojo.lfx.html._makeFadeable(_65e);
+dojo.lfx.html._makeFadeable(_669);
 });
-if(_662){
+if(_66d){
 anim.connect("onEnd",function(){
-_662(_65e,anim);
+_66d(_669,anim);
 });
 }
 return anim;
 };
-dojo.lfx.html.fadeIn=function(_665,_666,_667,_668){
-return dojo.lfx.html.fade(_665,{end:1},_666,_667,_668);
+dojo.lfx.html.fadeIn=function(_670,_671,_672,_673){
+return dojo.lfx.html.fade(_670,{end:1},_671,_672,_673);
 };
-dojo.lfx.html.fadeOut=function(_669,_66a,_66b,_66c){
-return dojo.lfx.html.fade(_669,{end:0},_66a,_66b,_66c);
+dojo.lfx.html.fadeOut=function(_674,_675,_676,_677){
+return dojo.lfx.html.fade(_674,{end:0},_675,_676,_677);
 };
-dojo.lfx.html.fadeShow=function(_66d,_66e,_66f,_670){
-_66d=dojo.lfx.html._byId(_66d);
-dojo.lang.forEach(_66d,function(node){
+dojo.lfx.html.fadeShow=function(_678,_679,_67a,_67b){
+_678=dojo.lfx.html._byId(_678);
+dojo.lang.forEach(_678,function(node){
 dojo.html.setOpacity(node,0);
 });
-var anim=dojo.lfx.html.fadeIn(_66d,_66e,_66f,_670);
+var anim=dojo.lfx.html.fadeIn(_678,_679,_67a,_67b);
 anim.connect("beforeBegin",function(){
-if(dojo.lang.isArrayLike(_66d)){
-dojo.lang.forEach(_66d,dojo.html.show);
+if(dojo.lang.isArrayLike(_678)){
+dojo.lang.forEach(_678,dojo.html.show);
 }else{
-dojo.html.show(_66d);
+dojo.html.show(_678);
 }
 });
 return anim;
 };
-dojo.lfx.html.fadeHide=function(_673,_674,_675,_676){
-var anim=dojo.lfx.html.fadeOut(_673,_674,_675,function(){
-if(dojo.lang.isArrayLike(_673)){
-dojo.lang.forEach(_673,dojo.html.hide);
+dojo.lfx.html.fadeHide=function(_67e,_67f,_680,_681){
+var anim=dojo.lfx.html.fadeOut(_67e,_67f,_680,function(){
+if(dojo.lang.isArrayLike(_67e)){
+dojo.lang.forEach(_67e,dojo.html.hide);
 }else{
-dojo.html.hide(_673);
+dojo.html.hide(_67e);
 }
-if(_676){
-_676(_673,anim);
+if(_681){
+_681(_67e,anim);
 }
 });
 return anim;
 };
-dojo.lfx.html.wipeIn=function(_678,_679,_67a,_67b){
-_678=dojo.lfx.html._byId(_678);
-var _67c=[];
-dojo.lang.forEach(_678,function(node){
-var _67e={};
-var _67f,_680,_681;
+dojo.lfx.html.wipeIn=function(_683,_684,_685,_686){
+_683=dojo.lfx.html._byId(_683);
+var _687=[];
+dojo.lang.forEach(_683,function(node){
+var _689={};
+var _68a,_68b,_68c;
 with(node.style){
-_67f=top;
-_680=left;
-_681=position;
+_68a=top;
+_68b=left;
+_68c=position;
 top="-9999px";
 left="-9999px";
 position="absolute";
 display="";
 }
-var _682=dojo.html.getBorderBox(node).height;
+var _68d=dojo.html.getBorderBox(node).height;
 with(node.style){
-top=_67f;
-left=_680;
-position=_681;
+top=_68a;
+left=_68b;
+position=_68c;
 display="none";
 }
 var anim=dojo.lfx.propertyAnimation(node,{"height":{start:1,end:function(){
-return _682;
-}}},_679,_67a);
+return _68d;
+}}},_684,_685);
 anim.connect("beforeBegin",function(){
-_67e.overflow=node.style.overflow;
-_67e.height=node.style.height;
+_689.overflow=node.style.overflow;
+_689.height=node.style.height;
 with(node.style){
 overflow="hidden";
-_682="1px";
+height="1px";
 }
 dojo.html.show(node);
 });
 anim.connect("onEnd",function(){
 with(node.style){
-overflow=_67e.overflow;
-_682=_67e.height;
+overflow=_689.overflow;
+height=_689.height;
 }
-if(_67b){
-_67b(node,anim);
+if(_686){
+_686(node,anim);
 }
 });
-_67c.push(anim);
+_687.push(anim);
 });
-return dojo.lfx.combine(_67c);
+return dojo.lfx.combine(_687);
 };
-dojo.lfx.html.wipeOut=function(_684,_685,_686,_687){
-_684=dojo.lfx.html._byId(_684);
-var _688=[];
-dojo.lang.forEach(_684,function(node){
-var _68a={};
+dojo.lfx.html.wipeOut=function(_68f,_690,_691,_692){
+_68f=dojo.lfx.html._byId(_68f);
+var _693=[];
+dojo.lang.forEach(_68f,function(node){
+var _695={};
 var anim=dojo.lfx.propertyAnimation(node,{"height":{start:function(){
 return dojo.html.getContentBox(node).height;
-},end:1}},_685,_686,{"beforeBegin":function(){
-_68a.overflow=node.style.overflow;
-_68a.height=node.style.height;
+},end:1}},_690,_691,{"beforeBegin":function(){
+_695.overflow=node.style.overflow;
+_695.height=node.style.height;
 with(node.style){
 overflow="hidden";
 }
@@ -43736,250 +24931,251 @@
 },"onEnd":function(){
 dojo.html.hide(node);
 with(node.style){
-overflow=_68a.overflow;
-height=_68a.height;
+overflow=_695.overflow;
+height=_695.height;
 }
-if(_687){
-_687(node,anim);
+if(_692){
+_692(node,anim);
 }
 }});
-_688.push(anim);
+_693.push(anim);
 });
-return dojo.lfx.combine(_688);
+return dojo.lfx.combine(_693);
 };
-dojo.lfx.html.slideTo=function(_68c,_68d,_68e,_68f,_690){
-_68c=dojo.lfx.html._byId(_68c);
-var _691=[];
-var _692=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_68d)){
+dojo.lfx.html.slideTo=function(_697,_698,_699,_69a,_69b){
+_697=dojo.lfx.html._byId(_697);
+var _69c=[];
+var _69d=dojo.html.getComputedStyle;
+if(dojo.lang.isArray(_698)){
 dojo.deprecated("dojo.lfx.html.slideTo(node, array)","use dojo.lfx.html.slideTo(node, {top: value, left: value});","0.5");
-_68d={top:_68d[0],left:_68d[1]};
+_698={top:_698[0],left:_698[1]};
 }
-dojo.lang.forEach(_68c,function(node){
+dojo.lang.forEach(_697,function(node){
 var top=null;
 var left=null;
 var init=(function(){
-var _697=node;
+var _6a2=node;
 return function(){
-var pos=_692(_697,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_692(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_692(node,"left"))||0);
+var pos=_69d(_6a2,"position");
+top=(pos=="absolute"?node.offsetTop:parseInt(_69d(node,"top"))||0);
+left=(pos=="absolute"?node.offsetLeft:parseInt(_69d(node,"left"))||0);
 if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_697,true);
-dojo.html.setStyleAttributes(_697,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
+var ret=dojo.html.abs(_6a2,true);
+dojo.html.setStyleAttributes(_6a2,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
 top=ret.y;
 left=ret.x;
 }
 };
 })();
 init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:(_68d.top||0)},"left":{start:left,end:(_68d.left||0)}},_68e,_68f,{"beforeBegin":init});
-if(_690){
+var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:(_698.top||0)},"left":{start:left,end:(_698.left||0)}},_699,_69a,{"beforeBegin":init});
+if(_69b){
 anim.connect("onEnd",function(){
-_690(_68c,anim);
+_69b(_697,anim);
 });
 }
-_691.push(anim);
+_69c.push(anim);
 });
-return dojo.lfx.combine(_691);
+return dojo.lfx.combine(_69c);
 };
-dojo.lfx.html.slideBy=function(_69b,_69c,_69d,_69e,_69f){
-_69b=dojo.lfx.html._byId(_69b);
-var _6a0=[];
-var _6a1=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_69c)){
+dojo.lfx.html.slideBy=function(_6a6,_6a7,_6a8,_6a9,_6aa){
+_6a6=dojo.lfx.html._byId(_6a6);
+var _6ab=[];
+var _6ac=dojo.html.getComputedStyle;
+if(dojo.lang.isArray(_6a7)){
 dojo.deprecated("dojo.lfx.html.slideBy(node, array)","use dojo.lfx.html.slideBy(node, {top: value, left: value});","0.5");
-_69c={top:_69c[0],left:_69c[1]};
+_6a7={top:_6a7[0],left:_6a7[1]};
 }
-dojo.lang.forEach(_69b,function(node){
+dojo.lang.forEach(_6a6,function(node){
 var top=null;
 var left=null;
 var init=(function(){
-var _6a6=node;
+var _6b1=node;
 return function(){
-var pos=_6a1(_6a6,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_6a1(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_6a1(node,"left"))||0);
+var pos=_6ac(_6b1,"position");
+top=(pos=="absolute"?node.offsetTop:parseInt(_6ac(node,"top"))||0);
+left=(pos=="absolute"?node.offsetLeft:parseInt(_6ac(node,"left"))||0);
 if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_6a6,true);
-dojo.html.setStyleAttributes(_6a6,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
+var ret=dojo.html.abs(_6b1,true);
+dojo.html.setStyleAttributes(_6b1,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
 top=ret.y;
 left=ret.x;
 }
 };
 })();
 init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:top+(_69c.top||0)},"left":{start:left,end:left+(_69c.left||0)}},_69d,_69e).connect("beforeBegin",init);
-if(_69f){
+var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:top+(_6a7.top||0)},"left":{start:left,end:left+(_6a7.left||0)}},_6a8,_6a9).connect("beforeBegin",init);
+if(_6aa){
 anim.connect("onEnd",function(){
-_69f(_69b,anim);
+_6aa(_6a6,anim);
 });
 }
-_6a0.push(anim);
+_6ab.push(anim);
 });
-return dojo.lfx.combine(_6a0);
+return dojo.lfx.combine(_6ab);
 };
-dojo.lfx.html.explode=function(_6aa,_6ab,_6ac,_6ad,_6ae){
+dojo.lfx.html.explode=function(_6b5,_6b6,_6b7,_6b8,_6b9){
 var h=dojo.html;
-_6aa=dojo.byId(_6aa);
-_6ab=dojo.byId(_6ab);
-var _6b0=h.toCoordinateObject(_6aa,true);
-var _6b1=document.createElement("div");
-h.copyStyle(_6b1,_6ab);
-if(_6ab.explodeClassName){
-_6b1.className=_6ab.explodeClassName;
+_6b5=dojo.byId(_6b5);
+_6b6=dojo.byId(_6b6);
+var _6bb=h.toCoordinateObject(_6b5,true);
+var _6bc=document.createElement("div");
+h.copyStyle(_6bc,_6b6);
+if(_6b6.explodeClassName){
+_6bc.className=_6b6.explodeClassName;
 }
-with(_6b1.style){
+with(_6bc.style){
 position="absolute";
 display="none";
-var _6b2=h.getStyle(_6aa,"background-color");
-backgroundColor=_6b2?_6b2.toLowerCase():"transparent";
+var _6bd=h.getStyle(_6b5,"background-color");
+backgroundColor=_6bd?_6bd.toLowerCase():"transparent";
 backgroundColor=(backgroundColor=="transparent")?"rgb(221, 221, 221)":backgroundColor;
 }
-dojo.body().appendChild(_6b1);
-with(_6ab.style){
+dojo.body().appendChild(_6bc);
+with(_6b6.style){
 visibility="hidden";
 display="block";
 }
-var _6b3=h.toCoordinateObject(_6ab,true);
-with(_6ab.style){
+var _6be=h.toCoordinateObject(_6b6,true);
+with(_6b6.style){
 display="none";
 visibility="visible";
 }
-var _6b4={opacity:{start:0.5,end:1}};
+var _6bf={opacity:{start:0.5,end:1}};
 dojo.lang.forEach(["height","width","top","left"],function(type){
-_6b4[type]={start:_6b0[type],end:_6b3[type]};
+_6bf[type]={start:_6bb[type],end:_6be[type]};
 });
-var anim=new dojo.lfx.propertyAnimation(_6b1,_6b4,_6ac,_6ad,{"beforeBegin":function(){
-h.setDisplay(_6b1,"block");
+var anim=new dojo.lfx.propertyAnimation(_6bc,_6bf,_6b7,_6b8,{"beforeBegin":function(){
+h.setDisplay(_6bc,"block");
 },"onEnd":function(){
-h.setDisplay(_6ab,"block");
-_6b1.parentNode.removeChild(_6b1);
+h.setDisplay(_6b6,"block");
+_6bc.parentNode.removeChild(_6bc);
 }});
-if(_6ae){
+if(_6b9){
 anim.connect("onEnd",function(){
-_6ae(_6ab,anim);
+_6b9(_6b6,anim);
 });
 }
 return anim;
 };
-dojo.lfx.html.implode=function(_6b7,end,_6b9,_6ba,_6bb){
+dojo.lfx.html.implode=function(_6c2,end,_6c4,_6c5,_6c6){
 var h=dojo.html;
-_6b7=dojo.byId(_6b7);
+_6c2=dojo.byId(_6c2);
 end=dojo.byId(end);
-var _6bd=dojo.html.toCoordinateObject(_6b7,true);
-var _6be=dojo.html.toCoordinateObject(end,true);
-var _6bf=document.createElement("div");
-dojo.html.copyStyle(_6bf,_6b7);
-if(_6b7.explodeClassName){
-_6bf.className=_6b7.explodeClassName;
+var _6c8=dojo.html.toCoordinateObject(_6c2,true);
+var _6c9=dojo.html.toCoordinateObject(end,true);
+var _6ca=document.createElement("div");
+dojo.html.copyStyle(_6ca,_6c2);
+if(_6c2.explodeClassName){
+_6ca.className=_6c2.explodeClassName;
 }
-dojo.html.setOpacity(_6bf,0.3);
-with(_6bf.style){
+dojo.html.setOpacity(_6ca,0.3);
+with(_6ca.style){
 position="absolute";
 display="none";
-backgroundColor=h.getStyle(_6b7,"background-color").toLowerCase();
+backgroundColor=h.getStyle(_6c2,"background-color").toLowerCase();
 }
-dojo.body().appendChild(_6bf);
-var _6c0={opacity:{start:1,end:0.5}};
+dojo.body().appendChild(_6ca);
+var _6cb={opacity:{start:1,end:0.5}};
 dojo.lang.forEach(["height","width","top","left"],function(type){
-_6c0[type]={start:_6bd[type],end:_6be[type]};
+_6cb[type]={start:_6c8[type],end:_6c9[type]};
 });
-var anim=new dojo.lfx.propertyAnimation(_6bf,_6c0,_6b9,_6ba,{"beforeBegin":function(){
-dojo.html.hide(_6b7);
-dojo.html.show(_6bf);
+var anim=new dojo.lfx.propertyAnimation(_6ca,_6cb,_6c4,_6c5,{"beforeBegin":function(){
+dojo.html.hide(_6c2);
+dojo.html.show(_6ca);
 },"onEnd":function(){
-_6bf.parentNode.removeChild(_6bf);
+_6ca.parentNode.removeChild(_6ca);
 }});
-if(_6bb){
+if(_6c6){
 anim.connect("onEnd",function(){
-_6bb(_6b7,anim);
+_6c6(_6c2,anim);
 });
 }
 return anim;
 };
-dojo.lfx.html.highlight=function(_6c3,_6c4,_6c5,_6c6,_6c7){
-_6c3=dojo.lfx.html._byId(_6c3);
-var _6c8=[];
-dojo.lang.forEach(_6c3,function(node){
-var _6ca=dojo.html.getBackgroundColor(node);
+dojo.lfx.html.highlight=function(_6ce,_6cf,_6d0,_6d1,_6d2){
+_6ce=dojo.lfx.html._byId(_6ce);
+var _6d3=[];
+dojo.lang.forEach(_6ce,function(node){
+var _6d5=dojo.html.getBackgroundColor(node);
 var bg=dojo.html.getStyle(node,"background-color").toLowerCase();
-var _6cc=dojo.html.getStyle(node,"background-image");
-var _6cd=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
-while(_6ca.length>3){
-_6ca.pop();
+var _6d7=dojo.html.getStyle(node,"background-image");
+var _6d8=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
+while(_6d5.length>3){
+_6d5.pop();
 }
-var rgb=new dojo.gfx.color.Color(_6c4);
-var _6cf=new dojo.gfx.color.Color(_6ca);
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:rgb,end:_6cf}},_6c5,_6c6,{"beforeBegin":function(){
-if(_6cc){
+var rgb=new dojo.gfx.color.Color(_6cf);
+var _6da=new dojo.gfx.color.Color(_6d5);
+var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:rgb,end:_6da}},_6d0,_6d1,{"beforeBegin":function(){
+if(_6d7){
 node.style.backgroundImage="none";
 }
 node.style.backgroundColor="rgb("+rgb.toRgb().join(",")+")";
 },"onEnd":function(){
-if(_6cc){
-node.style.backgroundImage=_6cc;
+if(_6d7){
+node.style.backgroundImage=_6d7;
 }
-if(_6cd){
+if(_6d8){
 node.style.backgroundColor="transparent";
 }
-if(_6c7){
-_6c7(node,anim);
+if(_6d2){
+_6d2(node,anim);
 }
 }});
-_6c8.push(anim);
+_6d3.push(anim);
 });
-return dojo.lfx.combine(_6c8);
+return dojo.lfx.combine(_6d3);
 };
-dojo.lfx.html.unhighlight=function(_6d1,_6d2,_6d3,_6d4,_6d5){
-_6d1=dojo.lfx.html._byId(_6d1);
-var _6d6=[];
-dojo.lang.forEach(_6d1,function(node){
-var _6d8=new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
-var rgb=new dojo.gfx.color.Color(_6d2);
-var _6da=dojo.html.getStyle(node,"background-image");
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:_6d8,end:rgb}},_6d3,_6d4,{"beforeBegin":function(){
-if(_6da){
+dojo.lfx.html.unhighlight=function(_6dc,_6dd,_6de,_6df,_6e0){
+_6dc=dojo.lfx.html._byId(_6dc);
+var _6e1=[];
+dojo.lang.forEach(_6dc,function(node){
+var _6e3=new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
+var rgb=new dojo.gfx.color.Color(_6dd);
+var _6e5=dojo.html.getStyle(node,"background-image");
+var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:_6e3,end:rgb}},_6de,_6df,{"beforeBegin":function(){
+if(_6e5){
 node.style.backgroundImage="none";
 }
-node.style.backgroundColor="rgb("+_6d8.toRgb().join(",")+")";
+node.style.backgroundColor="rgb("+_6e3.toRgb().join(",")+")";
 },"onEnd":function(){
-if(_6d5){
-_6d5(node,anim);
+if(_6e0){
+_6e0(node,anim);
 }
 }});
-_6d6.push(anim);
+_6e1.push(anim);
 });
-return dojo.lfx.combine(_6d6);
+return dojo.lfx.combine(_6e1);
 };
 dojo.lang.mixin(dojo.lfx,dojo.lfx.html);
+dojo.kwCompoundRequire({browser:["dojo.lfx.html"],dashboard:["dojo.lfx.html"]});
 dojo.provide("dojo.lfx.*");
 dojo.provide("dojo.lfx.toggle");
-dojo.lfx.toggle.plain={show:function(node,_6dd,_6de,_6df){
+dojo.lfx.toggle.plain={show:function(node,_6e8,_6e9,_6ea){
 dojo.html.show(node);
-if(dojo.lang.isFunction(_6df)){
-_6df();
+if(dojo.lang.isFunction(_6ea)){
+_6ea();
 }
-},hide:function(node,_6e1,_6e2,_6e3){
+},hide:function(node,_6ec,_6ed,_6ee){
 dojo.html.hide(node);
-if(dojo.lang.isFunction(_6e3)){
-_6e3();
+if(dojo.lang.isFunction(_6ee)){
+_6ee();
 }
 }};
-dojo.lfx.toggle.fade={show:function(node,_6e5,_6e6,_6e7){
-dojo.lfx.fadeShow(node,_6e5,_6e6,_6e7).play();
-},hide:function(node,_6e9,_6ea,_6eb){
-dojo.lfx.fadeHide(node,_6e9,_6ea,_6eb).play();
+dojo.lfx.toggle.fade={show:function(node,_6f0,_6f1,_6f2){
+dojo.lfx.fadeShow(node,_6f0,_6f1,_6f2).play();
+},hide:function(node,_6f4,_6f5,_6f6){
+dojo.lfx.fadeHide(node,_6f4,_6f5,_6f6).play();
 }};
-dojo.lfx.toggle.wipe={show:function(node,_6ed,_6ee,_6ef){
-dojo.lfx.wipeIn(node,_6ed,_6ee,_6ef).play();
-},hide:function(node,_6f1,_6f2,_6f3){
-dojo.lfx.wipeOut(node,_6f1,_6f2,_6f3).play();
+dojo.lfx.toggle.wipe={show:function(node,_6f8,_6f9,_6fa){
+dojo.lfx.wipeIn(node,_6f8,_6f9,_6fa).play();
+},hide:function(node,_6fc,_6fd,_6fe){
+dojo.lfx.wipeOut(node,_6fc,_6fd,_6fe).play();
 }};
-dojo.lfx.toggle.explode={show:function(node,_6f5,_6f6,_6f7,_6f8){
-dojo.lfx.explode(_6f8||{x:0,y:0,width:0,height:0},node,_6f5,_6f6,_6f7).play();
-},hide:function(node,_6fa,_6fb,_6fc,_6fd){
-dojo.lfx.implode(node,_6fd||{x:0,y:0,width:0,height:0},_6fa,_6fb,_6fc).play();
+dojo.lfx.toggle.explode={show:function(node,_700,_701,_702,_703){
+dojo.lfx.explode(_703||{x:0,y:0,width:0,height:0},node,_700,_701,_702).play();
+},hide:function(node,_705,_706,_707,_708){
+dojo.lfx.implode(node,_708||{x:0,y:0,width:0,height:0},_705,_706,_707).play();
 }};
 dojo.provide("dojo.widget.HtmlWidget");
 dojo.declare("dojo.widget.HtmlWidget",dojo.widget.DomWidget,{templateCssPath:null,templatePath:null,lang:"",toggle:"plain",toggleDuration:150,initialize:function(args,frag){
@@ -43990,13 +25186,13 @@
 this.toggleObj=dojo.lfx.toggle[this.toggle.toLowerCase()]||dojo.lfx.toggle.plain;
 },createNodesFromText:function(txt,wrap){
 return dojo.html.createNodesFromText(txt,wrap);
-},destroyRendering:function(_704){
+},destroyRendering:function(_70f){
 try{
 if(this.bgIframe){
 this.bgIframe.remove();
 delete this.bgIframe;
 }
-if(!_704&&this.domNode){
+if(!_70f&&this.domNode){
 dojo.event.browser.clean(this.domNode);
 }
 dojo.widget.HtmlWidget.superclass.destroyRendering.call(this);
@@ -44033,13 +25229,13 @@
 return false;
 }
 var wh=dojo.html.getMarginBox(this.domNode);
-var _708=w||wh.width;
-var _709=h||wh.height;
-if(this.width==_708&&this.height==_709){
+var _713=w||wh.width;
+var _714=h||wh.height;
+if(this.width==_713&&this.height==_714){
 return false;
 }
-this.width=_708;
-this.height=_709;
+this.width=_713;
+this.height=_714;
 return true;
 },checkSize:function(){
 if(!this._isResized()){
@@ -44056,12 +25252,13 @@
 dojo.lang.setTimeout(this,this.onResized,0);
 }
 },onResized:function(){
-dojo.lang.forEach(this.children,function(_70c){
-if(_70c.checkSize){
-_70c.checkSize();
+dojo.lang.forEach(this.children,function(_717){
+if(_717.checkSize){
+_717.checkSize();
 }
 });
 }});
+dojo.kwCompoundRequire({common:["dojo.xml.Parse","dojo.widget.Widget","dojo.widget.Parse","dojo.widget.Manager"],browser:["dojo.widget.DomWidget","dojo.widget.HtmlWidget"],dashboard:["dojo.widget.DomWidget","dojo.widget.HtmlWidget"],svg:["dojo.widget.SvgWidget"],rhino:["dojo.widget.SwtWidget"]});
 dojo.provide("dojo.widget.*");
 dojo.provide("dojo.string.common");
 dojo.string.trim=function(str,wh){
@@ -44080,12 +25277,12 @@
 dojo.string.trimEnd=function(str){
 return dojo.string.trim(str,-1);
 };
-dojo.string.repeat=function(str,_713,_714){
+dojo.string.repeat=function(str,_71e,_71f){
 var out="";
-for(var i=0;i<_713;i++){
+for(var i=0;i<_71e;i++){
 out+=str;
-if(_714&&i<_713-1){
-out+=_714;
+if(_71f&&i<_71e-1){
+out+=_71f;
 }
 }
 return out;
@@ -44117,59 +25314,59 @@
 dojo.provide("dojo.io.common");
 dojo.io.transports=[];
 dojo.io.hdlrFuncNames=["load","error","timeout"];
-dojo.io.Request=function(url,_723,_724,_725){
+dojo.io.Request=function(url,_72e,_72f,_730){
 if((arguments.length==1)&&(arguments[0].constructor==Object)){
 this.fromKwArgs(arguments[0]);
 }else{
 this.url=url;
-if(_723){
-this.mimetype=_723;
+if(_72e){
+this.mimetype=_72e;
 }
-if(_724){
-this.transport=_724;
+if(_72f){
+this.transport=_72f;
 }
 if(arguments.length>=4){
-this.changeUrl=_725;
+this.changeUrl=_730;
 }
 }
 };
-dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_728,_729){
-},error:function(type,_72b,_72c,_72d){
-},timeout:function(type,_72f,_730,_731){
-},handle:function(type,data,_734,_735){
+dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_733,_734){
+},error:function(type,_736,_737,_738){
+},timeout:function(type,_73a,_73b,_73c){
+},handle:function(type,data,_73f,_740){
 },timeoutSeconds:0,abort:function(){
-},fromKwArgs:function(_736){
-if(_736["url"]){
-_736.url=_736.url.toString();
+},fromKwArgs:function(_741){
+if(_741["url"]){
+_741.url=_741.url.toString();
 }
-if(_736["formNode"]){
-_736.formNode=dojo.byId(_736.formNode);
+if(_741["formNode"]){
+_741.formNode=dojo.byId(_741.formNode);
 }
-if(!_736["method"]&&_736["formNode"]&&_736["formNode"].method){
-_736.method=_736["formNode"].method;
+if(!_741["method"]&&_741["formNode"]&&_741["formNode"].method){
+_741.method=_741["formNode"].method;
 }
-if(!_736["handle"]&&_736["handler"]){
-_736.handle=_736.handler;
+if(!_741["handle"]&&_741["handler"]){
+_741.handle=_741.handler;
 }
-if(!_736["load"]&&_736["loaded"]){
-_736.load=_736.loaded;
+if(!_741["load"]&&_741["loaded"]){
+_741.load=_741.loaded;
 }
-if(!_736["changeUrl"]&&_736["changeURL"]){
-_736.changeUrl=_736.changeURL;
+if(!_741["changeUrl"]&&_741["changeURL"]){
+_741.changeUrl=_741.changeURL;
 }
-_736.encoding=dojo.lang.firstValued(_736["encoding"],djConfig["bindEncoding"],"");
-_736.sendTransport=dojo.lang.firstValued(_736["sendTransport"],djConfig["ioSendTransport"],false);
-var _737=dojo.lang.isFunction;
+_741.encoding=dojo.lang.firstValued(_741["encoding"],djConfig["bindEncoding"],"");
+_741.sendTransport=dojo.lang.firstValued(_741["sendTransport"],djConfig["ioSendTransport"],false);
+var _742=dojo.lang.isFunction;
 for(var x=0;x<dojo.io.hdlrFuncNames.length;x++){
 var fn=dojo.io.hdlrFuncNames[x];
-if(_736[fn]&&_737(_736[fn])){
+if(_741[fn]&&_742(_741[fn])){
 continue;
 }
-if(_736["handle"]&&_737(_736["handle"])){
-_736[fn]=_736.handle;
+if(_741["handle"]&&_742(_741["handle"])){
+_741[fn]=_741.handle;
 }
 }
-dojo.lang.mixin(this,_736);
+dojo.lang.mixin(this,_741);
 }});
 dojo.io.Error=function(msg,type,num){
 this.message=msg;
@@ -44180,79 +25377,79 @@
 this.push(name);
 this[name]=dojo.io[name];
 };
-dojo.io.bind=function(_73e){
-if(!(_73e instanceof dojo.io.Request)){
+dojo.io.bind=function(_749){
+if(!(_749 instanceof dojo.io.Request)){
 try{
-_73e=new dojo.io.Request(_73e);
+_749=new dojo.io.Request(_749);
 }
 catch(e){
 dojo.debug(e);
 }
 }
-var _73f="";
-if(_73e["transport"]){
-_73f=_73e["transport"];
-if(!this[_73f]){
-dojo.io.sendBindError(_73e,"No dojo.io.bind() transport with name '"+_73e["transport"]+"'.");
-return _73e;
+var _74a="";
+if(_749["transport"]){
+_74a=_749["transport"];
+if(!this[_74a]){
+dojo.io.sendBindError(_749,"No dojo.io.bind() transport with name '"+_749["transport"]+"'.");
+return _749;
 }
-if(!this[_73f].canHandle(_73e)){
-dojo.io.sendBindError(_73e,"dojo.io.bind() transport with name '"+_73e["transport"]+"' cannot handle this type of request.");
-return _73e;
+if(!this[_74a].canHandle(_749)){
+dojo.io.sendBindError(_749,"dojo.io.bind() transport with name '"+_749["transport"]+"' cannot handle this type of request.");
+return _749;
 }
 }else{
 for(var x=0;x<dojo.io.transports.length;x++){
 var tmp=dojo.io.transports[x];
-if((this[tmp])&&(this[tmp].canHandle(_73e))){
-_73f=tmp;
+if((this[tmp])&&(this[tmp].canHandle(_749))){
+_74a=tmp;
 break;
 }
 }
-if(_73f==""){
-dojo.io.sendBindError(_73e,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
-return _73e;
+if(_74a==""){
+dojo.io.sendBindError(_749,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
+return _749;
 }
 }
-this[_73f].bind(_73e);
-_73e.bindSuccess=true;
-return _73e;
+this[_74a].bind(_749);
+_749.bindSuccess=true;
+return _749;
 };
-dojo.io.sendBindError=function(_742,_743){
-if((typeof _742.error=="function"||typeof _742.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
-var _744=new dojo.io.Error(_743);
+dojo.io.sendBindError=function(_74d,_74e){
+if((typeof _74d.error=="function"||typeof _74d.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
+var _74f=new dojo.io.Error(_74e);
 setTimeout(function(){
-_742[(typeof _742.error=="function")?"error":"handle"]("error",_744,null,_742);
+_74d[(typeof _74d.error=="function")?"error":"handle"]("error",_74f,null,_74d);
 },50);
 }else{
-dojo.raise(_743);
+dojo.raise(_74e);
 }
 };
-dojo.io.queueBind=function(_745){
-if(!(_745 instanceof dojo.io.Request)){
+dojo.io.queueBind=function(_750){
+if(!(_750 instanceof dojo.io.Request)){
 try{
-_745=new dojo.io.Request(_745);
+_750=new dojo.io.Request(_750);
 }
 catch(e){
 dojo.debug(e);
 }
 }
-var _746=_745.load;
-_745.load=function(){
+var _751=_750.load;
+_750.load=function(){
 dojo.io._queueBindInFlight=false;
-var ret=_746.apply(this,arguments);
+var ret=_751.apply(this,arguments);
 dojo.io._dispatchNextQueueBind();
 return ret;
 };
-var _748=_745.error;
-_745.error=function(){
+var _753=_750.error;
+_750.error=function(){
 dojo.io._queueBindInFlight=false;
-var ret=_748.apply(this,arguments);
+var ret=_753.apply(this,arguments);
 dojo.io._dispatchNextQueueBind();
 return ret;
 };
-dojo.io._bindQueue.push(_745);
+dojo.io._bindQueue.push(_750);
 dojo.io._dispatchNextQueueBind();
-return _745;
+return _750;
 };
 dojo.io._dispatchNextQueueBind=function(){
 if(!dojo.io._queueBindInFlight){
@@ -44266,48 +25463,48 @@
 };
 dojo.io._bindQueue=[];
 dojo.io._queueBindInFlight=false;
-dojo.io.argsFromMap=function(map,_74b,last){
-var enc=/utf/i.test(_74b||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _74e=[];
-var _74f=new Object();
+dojo.io.argsFromMap=function(map,_756,last){
+var enc=/utf/i.test(_756||"")?encodeURIComponent:dojo.string.encodeAscii;
+var _759=[];
+var _75a=new Object();
 for(var name in map){
-var _751=function(elt){
+var _75c=function(elt){
 var val=enc(name)+"="+enc(elt);
-_74e[(last==name)?"push":"unshift"](val);
+_759[(last==name)?"push":"unshift"](val);
 };
-if(!_74f[name]){
-var _754=map[name];
-if(dojo.lang.isArray(_754)){
-dojo.lang.forEach(_754,_751);
+if(!_75a[name]){
+var _75f=map[name];
+if(dojo.lang.isArray(_75f)){
+dojo.lang.forEach(_75f,_75c);
 }else{
-_751(_754);
+_75c(_75f);
 }
 }
 }
-return _74e.join("&");
+return _759.join("&");
 };
-dojo.io.setIFrameSrc=function(_755,src,_757){
+dojo.io.setIFrameSrc=function(_760,src,_762){
 try{
 var r=dojo.render.html;
-if(!_757){
+if(!_762){
 if(r.safari){
-_755.location=src;
+_760.location=src;
 }else{
-frames[_755.name].location=src;
+frames[_760.name].location=src;
 }
 }else{
 var idoc;
 if(r.ie){
-idoc=_755.contentWindow.document;
+idoc=_760.contentWindow.document;
 }else{
 if(r.safari){
-idoc=_755.document;
+idoc=_760.document;
 }else{
-idoc=_755.contentWindow;
+idoc=_760.contentWindow;
 }
 }
 if(!idoc){
-_755.location=src;
+_760.location=src;
 return;
 }else{
 idoc.location.replace(src);
@@ -44320,9 +25517,9 @@
 }
 };
 dojo.provide("dojo.string.extras");
-dojo.string.substituteParams=function(_75a,hash){
+dojo.string.substituteParams=function(_765,hash){
 var map=(typeof hash=="object")?hash:dojo.lang.toArray(arguments,1);
-return _75a.replace(/\%\{(\w+)\}/g,function(_75d,key){
+return _765.replace(/\%\{(\w+)\}/g,function(_768,key){
 if(typeof (map[key])!="undefined"&&map[key]!=null){
 return map[key];
 }
@@ -44336,11 +25533,11 @@
 if(arguments.length==0){
 str=this;
 }
-var _760=str.split(" ");
-for(var i=0;i<_760.length;i++){
-_760[i]=_760[i].charAt(0).toUpperCase()+_760[i].substring(1);
+var _76b=str.split(" ");
+for(var i=0;i<_76b.length;i++){
+_76b[i]=_76b[i].charAt(0).toUpperCase()+_76b[i].substring(1);
 }
-return _760.join(" ");
+return _76b.join(" ");
 };
 dojo.string.isBlank=function(str){
 if(!dojo.lang.isString(str)){
@@ -44353,15 +25550,15 @@
 return str;
 }
 var ret="";
-var _765=escape(str);
-var _766,re=/%u([0-9A-F]{4})/i;
-while((_766=_765.match(re))){
-var num=Number("0x"+_766[1]);
-var _769=escape("&#"+num+";");
-ret+=_765.substring(0,_766.index)+_769;
-_765=_765.substring(_766.index+_766[0].length);
+var _770=escape(str);
+var _771,re=/%u([0-9A-F]{4})/i;
+while((_771=_770.match(re))){
+var num=Number("0x"+_771[1]);
+var _774=escape("&#"+num+";");
+ret+=_770.substring(0,_771.index)+_774;
+_770=_770.substring(_771.index+_771[0].length);
 }
-ret+=_765.replace(/\+/g,"%2B");
+ret+=_770.replace(/\+/g,"%2B");
 return ret;
 };
 dojo.string.escape=function(type,str){
@@ -44386,9 +25583,9 @@
 return str;
 }
 };
-dojo.string.escapeXml=function(str,_76e){
+dojo.string.escapeXml=function(str,_779){
 str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_76e){
+if(!_779){
 str=str.replace(/'/gm,"&#39;");
 }
 return str;
@@ -44411,8 +25608,8 @@
 }
 return str.substring(0,len).replace(/\.+$/,"")+"...";
 };
-dojo.string.endsWith=function(str,end,_777){
-if(_777){
+dojo.string.endsWith=function(str,end,_782){
+if(_782){
 str=str.toLowerCase();
 end=end.toLowerCase();
 }
@@ -44429,12 +25626,12 @@
 }
 return false;
 };
-dojo.string.startsWith=function(str,_77b,_77c){
-if(_77c){
+dojo.string.startsWith=function(str,_786,_787){
+if(_787){
 str=str.toLowerCase();
-_77b=_77b.toLowerCase();
+_786=_786.toLowerCase();
 }
-return str.indexOf(_77b)==0;
+return str.indexOf(_786)==0;
 };
 dojo.string.startsWithAny=function(str){
 for(var i=1;i<arguments.length;i++){
@@ -44452,12 +25649,12 @@
 }
 return false;
 };
-dojo.string.normalizeNewlines=function(text,_782){
-if(_782=="\n"){
+dojo.string.normalizeNewlines=function(text,_78d){
+if(_78d=="\n"){
 text=text.replace(/\r\n/g,"\n");
 text=text.replace(/\r/g,"\n");
 }else{
-if(_782=="\r"){
+if(_78d=="\r"){
 text=text.replace(/\r\n/g,"\r");
 text=text.replace(/\n/g,"\r");
 }else{
@@ -44466,25 +25663,25 @@
 }
 return text;
 };
-dojo.string.splitEscaped=function(str,_784){
-var _785=[];
-for(var i=0,_787=0;i<str.length;i++){
+dojo.string.splitEscaped=function(str,_78f){
+var _790=[];
+for(var i=0,_792=0;i<str.length;i++){
 if(str.charAt(i)=="\\"){
 i++;
 continue;
 }
-if(str.charAt(i)==_784){
-_785.push(str.substring(_787,i));
-_787=i+1;
+if(str.charAt(i)==_78f){
+_790.push(str.substring(_792,i));
+_792=i+1;
 }
 }
-_785.push(str.substr(_787));
-return _785;
+_790.push(str.substr(_792));
+return _790;
 };
 dojo.provide("dojo.undo.browser");
 try{
 if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
+document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
 }
 }
 catch(e){
@@ -44499,6 +25696,9 @@
 var hash=null;
 var url=null;
 if(!this.historyIframe){
+if(djConfig["useXDomain"]&&!djConfig["dojoIframeHistoryUrl"]){
+dojo.debug("dojo.undo.browser: When using cross-domain Dojo builds,"+" please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"+" to the path on your domain to iframe_history.html");
+}
 this.historyIframe=window.frames["djhistory"];
 }
 if(!this.bookmarkAnchor){
@@ -44522,12 +25722,12 @@
 this.bookmarkAnchor.href=hash;
 if(dojo.render.html.ie){
 url=this._loadIframeHistory();
-var _78c=args["back"]||args["backButton"]||args["handle"];
-var tcb=function(_78e){
+var _797=args["back"]||args["backButton"]||args["handle"];
+var tcb=function(_799){
 if(window.location.hash!=""){
 setTimeout("window.location.href = '"+hash+"';",1);
 }
-_78c.apply(this,[_78e]);
+_797.apply(this,[_799]);
 };
 if(args["back"]){
 args.back=tcb;
@@ -44540,13 +25740,13 @@
 }
 }
 }
-var _78f=args["forward"]||args["forwardButton"]||args["handle"];
-var tfw=function(_791){
+var _79a=args["forward"]||args["forwardButton"]||args["handle"];
+var tfw=function(_79c){
 if(window.location.hash!=""){
 window.location.href=hash;
 }
-if(_78f){
-_78f.apply(this,[_791]);
+if(_79a){
+_79a.apply(this,[_79c]);
 }
 };
 if(args["forward"]){
@@ -44591,10 +25791,10 @@
 }
 }
 }
-},iframeLoaded:function(evt,_794){
+},iframeLoaded:function(evt,_79f){
 if(!dojo.render.html.opera){
-var _795=this._getUrlQuery(_794.href);
-if(_795==null){
+var _7a0=this._getUrlQuery(_79f.href);
+if(_7a0==null){
 if(this.historyStack.length==1){
 this.handleBackButton();
 }
@@ -44604,17 +25804,17 @@
 this.moveForward=false;
 return;
 }
-if(this.historyStack.length>=2&&_795==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
+if(this.historyStack.length>=2&&_7a0==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
 this.handleBackButton();
 }else{
-if(this.forwardStack.length>0&&_795==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
+if(this.forwardStack.length>0&&_7a0==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
 this.handleForwardButton();
 }
 }
 }
 },handleBackButton:function(){
-var _796=this.historyStack.pop();
-if(!_796){
+var _7a1=this.historyStack.pop();
+if(!_7a1){
 return;
 }
 var last=this.historyStack[this.historyStack.length-1];
@@ -44634,7 +25834,7 @@
 }
 }
 }
-this.forwardStack.push(_796);
+this.forwardStack.push(_7a1);
 },handleForwardButton:function(){
 var last=this.forwardStack.pop();
 if(!last){
@@ -44655,14 +25855,14 @@
 },_createState:function(url,args,hash){
 return {"url":url,"kwArgs":args,"urlHash":hash};
 },_getUrlQuery:function(url){
-var _79d=url.split("?");
-if(_79d.length<2){
+var _7a8=url.split("?");
+if(_7a8.length<2){
 return null;
 }else{
-return _79d[1];
+return _7a8[1];
 }
 },_loadIframeHistory:function(){
-var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
+var url=(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"?"+(new Date()).getTime();
 this.moveForward=true;
 dojo.io.setIFrameSrc(this.historyIframe,url,false);
 return url;
@@ -44670,26 +25870,26 @@
 dojo.provide("dojo.io.BrowserIO");
 if(!dj_undef("window")){
 dojo.io.checkChildrenForFile=function(node){
-var _7a0=false;
-var _7a1=node.getElementsByTagName("input");
-dojo.lang.forEach(_7a1,function(_7a2){
-if(_7a0){
+var _7ab=false;
+var _7ac=node.getElementsByTagName("input");
+dojo.lang.forEach(_7ac,function(_7ad){
+if(_7ab){
 return;
 }
-if(_7a2.getAttribute("type")=="file"){
-_7a0=true;
+if(_7ad.getAttribute("type")=="file"){
+_7ab=true;
 }
 });
-return _7a0;
+return _7ab;
 };
-dojo.io.formHasFile=function(_7a3){
-return dojo.io.checkChildrenForFile(_7a3);
+dojo.io.formHasFile=function(_7ae){
+return dojo.io.checkChildrenForFile(_7ae);
 };
-dojo.io.updateNode=function(node,_7a5){
+dojo.io.updateNode=function(node,_7b0){
 node=dojo.byId(node);
-var args=_7a5;
-if(dojo.lang.isString(_7a5)){
-args={url:_7a5};
+var args=_7b0;
+if(dojo.lang.isString(_7b0)){
+args={url:_7b0};
 }
 args.mimetype="text/html";
 args.load=function(t,d,e){
@@ -44704,18 +25904,18 @@
 var type=(node.type||"").toLowerCase();
 return !node.disabled&&node.name&&!dojo.lang.inArray(["file","submit","image","reset","button"],type);
 };
-dojo.io.encodeForm=function(_7ac,_7ad,_7ae){
-if((!_7ac)||(!_7ac.tagName)||(!_7ac.tagName.toLowerCase()=="form")){
+dojo.io.encodeForm=function(_7b7,_7b8,_7b9){
+if((!_7b7)||(!_7b7.tagName)||(!_7b7.tagName.toLowerCase()=="form")){
 dojo.raise("Attempted to encode a non-form element.");
 }
-if(!_7ae){
-_7ae=dojo.io.formFilter;
+if(!_7b9){
+_7b9=dojo.io.formFilter;
 }
-var enc=/utf/i.test(_7ad||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _7b0=[];
-for(var i=0;i<_7ac.elements.length;i++){
-var elm=_7ac.elements[i];
-if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_7ae(elm)){
+var enc=/utf/i.test(_7b8||"")?encodeURIComponent:dojo.string.encodeAscii;
+var _7bb=[];
+for(var i=0;i<_7b7.elements.length;i++){
+var elm=_7b7.elements[i];
+if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_7b9(elm)){
 continue;
 }
 var name=enc(elm.name);
@@ -44723,30 +25923,30 @@
 if(type=="select-multiple"){
 for(var j=0;j<elm.options.length;j++){
 if(elm.options[j].selected){
-_7b0.push(name+"="+enc(elm.options[j].value));
+_7bb.push(name+"="+enc(elm.options[j].value));
 }
 }
 }else{
 if(dojo.lang.inArray(["radio","checkbox"],type)){
 if(elm.checked){
-_7b0.push(name+"="+enc(elm.value));
+_7bb.push(name+"="+enc(elm.value));
 }
 }else{
-_7b0.push(name+"="+enc(elm.value));
+_7bb.push(name+"="+enc(elm.value));
 }
 }
 }
-var _7b6=_7ac.getElementsByTagName("input");
-for(var i=0;i<_7b6.length;i++){
-var _7b7=_7b6[i];
-if(_7b7.type.toLowerCase()=="image"&&_7b7.form==_7ac&&_7ae(_7b7)){
-var name=enc(_7b7.name);
-_7b0.push(name+"="+enc(_7b7.value));
-_7b0.push(name+".x=0");
-_7b0.push(name+".y=0");
+var _7c1=_7b7.getElementsByTagName("input");
+for(var i=0;i<_7c1.length;i++){
+var _7c2=_7c1[i];
+if(_7c2.type.toLowerCase()=="image"&&_7c2.form==_7b7&&_7b9(_7c2)){
+var name=enc(_7c2.name);
+_7bb.push(name+"="+enc(_7c2.value));
+_7bb.push(name+".x=0");
+_7bb.push(name+".y=0");
 }
 }
-return _7b0.join("&")+"&";
+return _7bb.join("&")+"&";
 };
 dojo.io.FormBind=function(args){
 this.bindArgs={};
@@ -44780,11 +25980,11 @@
 this.connect(node,"onclick","click");
 }
 }
-var _7bd=form.getElementsByTagName("input");
-for(var i=0;i<_7bd.length;i++){
-var _7be=_7bd[i];
-if(_7be.type.toLowerCase()=="image"&&_7be.form==form){
-this.connect(_7be,"onclick","click");
+var _7c8=form.getElementsByTagName("input");
+for(var i=0;i<_7c8.length;i++){
+var _7c9=_7c8[i];
+if(_7c9.type.toLowerCase()=="image"&&_7c9.form==form){
+this.connect(_7c9,"onclick","click");
 }
 }
 },onSubmit:function(form){
@@ -44802,26 +26002,26 @@
 this.clickedButton=node;
 },formFilter:function(node){
 var type=(node.type||"").toLowerCase();
-var _7c5=false;
+var _7d0=false;
 if(node.disabled||!node.name){
-_7c5=false;
+_7d0=false;
 }else{
 if(dojo.lang.inArray(["submit","button","image"],type)){
 if(!this.clickedButton){
 this.clickedButton=node;
 }
-_7c5=node==this.clickedButton;
+_7d0=node==this.clickedButton;
 }else{
-_7c5=!dojo.lang.inArray(["file","submit","reset","button"],type);
+_7d0=!dojo.lang.inArray(["file","submit","reset","button"],type);
 }
 }
-return _7c5;
-},connect:function(_7c6,_7c7,_7c8){
+return _7d0;
+},connect:function(_7d1,_7d2,_7d3){
 if(dojo.evalObjPath("dojo.event.connect")){
-dojo.event.connect(_7c6,_7c7,this,_7c8);
+dojo.event.connect(_7d1,_7d2,this,_7d3);
 }else{
-var fcn=dojo.lang.hitch(this,_7c8);
-_7c6[_7c7]=function(e){
+var fcn=dojo.lang.hitch(this,_7d3);
+_7d1[_7d2]=function(e){
 if(!e){
 e=window.event;
 }
@@ -44838,40 +26038,40 @@
 }
 }});
 dojo.io.XMLHTTPTransport=new function(){
-var _7cb=this;
-var _7cc={};
+var _7d6=this;
+var _7d7={};
 this.useCache=false;
 this.preventCache=false;
-function getCacheKey(url,_7ce,_7cf){
-return url+"|"+_7ce+"|"+_7cf.toLowerCase();
+function getCacheKey(url,_7d9,_7da){
+return url+"|"+_7d9+"|"+_7da.toLowerCase();
 }
-function addToCache(url,_7d1,_7d2,http){
-_7cc[getCacheKey(url,_7d1,_7d2)]=http;
+function addToCache(url,_7dc,_7dd,http){
+_7d7[getCacheKey(url,_7dc,_7dd)]=http;
 }
-function getFromCache(url,_7d5,_7d6){
-return _7cc[getCacheKey(url,_7d5,_7d6)];
+function getFromCache(url,_7e0,_7e1){
+return _7d7[getCacheKey(url,_7e0,_7e1)];
 }
 this.clearCache=function(){
-_7cc={};
+_7d7={};
 };
-function doLoad(_7d7,http,url,_7da,_7db){
+function doLoad(_7e2,http,url,_7e5,_7e6){
 if(((http.status>=200)&&(http.status<300))||(http.status==304)||(location.protocol=="file:"&&(http.status==0||http.status==undefined))||(location.protocol=="chrome:"&&(http.status==0||http.status==undefined))){
 var ret;
-if(_7d7.method.toLowerCase()=="head"){
-var _7dd=http.getAllResponseHeaders();
+if(_7e2.method.toLowerCase()=="head"){
+var _7e8=http.getAllResponseHeaders();
 ret={};
 ret.toString=function(){
-return _7dd;
+return _7e8;
 };
-var _7de=_7dd.split(/[\r\n]+/g);
-for(var i=0;i<_7de.length;i++){
-var pair=_7de[i].match(/^([^:]+)\s*:\s*(.+)$/i);
+var _7e9=_7e8.split(/[\r\n]+/g);
+for(var i=0;i<_7e9.length;i++){
+var pair=_7e9[i].match(/^([^:]+)\s*:\s*(.+)$/i);
 if(pair){
 ret[pair[1]]=pair[2];
 }
 }
 }else{
-if(_7d7.mimetype=="text/javascript"){
+if(_7e2.mimetype=="text/javascript"){
 try{
 ret=dj_eval(http.responseText);
 }
@@ -44881,7 +26081,7 @@
 ret=null;
 }
 }else{
-if(_7d7.mimetype=="text/json"||_7d7.mimetype=="application/json"){
+if(_7e2.mimetype=="text/json"||_7e2.mimetype=="application/json"){
 try{
 ret=dj_eval("("+http.responseText+")");
 }
@@ -44891,7 +26091,7 @@
 ret=false;
 }
 }else{
-if((_7d7.mimetype=="application/xml")||(_7d7.mimetype=="text/xml")){
+if((_7e2.mimetype=="application/xml")||(_7e2.mimetype=="text/xml")){
 ret=http.responseXML;
 if(!ret||typeof ret=="string"||!http.getResponseHeader("Content-Type")){
 ret=dojo.dom.createDocumentFromText(http.responseText);
@@ -44902,22 +26102,22 @@
 }
 }
 }
-if(_7db){
-addToCache(url,_7da,_7d7.method,http);
+if(_7e6){
+addToCache(url,_7e5,_7e2.method,http);
 }
-_7d7[(typeof _7d7.load=="function")?"load":"handle"]("load",ret,http,_7d7);
+_7e2[(typeof _7e2.load=="function")?"load":"handle"]("load",ret,http,_7e2);
 }else{
-var _7e1=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-_7d7[(typeof _7d7.error=="function")?"error":"handle"]("error",_7e1,http,_7d7);
+var _7ec=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
+_7e2[(typeof _7e2.error=="function")?"error":"handle"]("error",_7ec,http,_7e2);
 }
 }
-function setHeaders(http,_7e3){
-if(_7e3["headers"]){
-for(var _7e4 in _7e3["headers"]){
-if(_7e4.toLowerCase()=="content-type"&&!_7e3["contentType"]){
-_7e3["contentType"]=_7e3["headers"][_7e4];
+function setHeaders(http,_7ee){
+if(_7ee["headers"]){
+for(var _7ef in _7ee["headers"]){
+if(_7ef.toLowerCase()=="content-type"&&!_7ee["contentType"]){
+_7ee["contentType"]=_7ee["headers"][_7ef];
 }else{
-http.setRequestHeader(_7e4,_7e3["headers"][_7e4]);
+http.setRequestHeader(_7ef,_7ee["headers"][_7ef]);
 }
 }
 }
@@ -44931,7 +26131,7 @@
 };
 this.watchInFlight=function(){
 var now=null;
-if(!dojo.hostenv._blockAsync&&!_7cb._blockAsync){
+if(!dojo.hostenv._blockAsync&&!_7d6._blockAsync){
 for(var x=this.inFlight.length-1;x>=0;x--){
 try{
 var tif=this.inFlight[x];
@@ -44959,8 +26159,8 @@
 }
 catch(e){
 try{
-var _7e8=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
-tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_7e8,tif.http,tif.req);
+var _7f3=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
+tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_7f3,tif.http,tif.req);
 }
 catch(e2){
 dojo.debug("XMLHttpTransport error callback failed: "+e2);
@@ -44975,74 +26175,74 @@
 }
 this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
 };
-var _7e9=dojo.hostenv.getXmlhttpObject()?true:false;
-this.canHandle=function(_7ea){
-return _7e9&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_7ea["mimetype"].toLowerCase()||""))&&!(_7ea["formNode"]&&dojo.io.formHasFile(_7ea["formNode"]));
+var _7f4=dojo.hostenv.getXmlhttpObject()?true:false;
+this.canHandle=function(_7f5){
+return _7f4&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_7f5["mimetype"].toLowerCase()||""))&&!(_7f5["formNode"]&&dojo.io.formHasFile(_7f5["formNode"]));
 };
 this.multipartBoundary="45309FFF-BD65-4d50-99C9-36986896A96F";
-this.bind=function(_7eb){
-if(!_7eb["url"]){
-if(!_7eb["formNode"]&&(_7eb["backButton"]||_7eb["back"]||_7eb["changeUrl"]||_7eb["watchForURL"])&&(!djConfig.preventBackButtonFix)){
+this.bind=function(_7f6){
+if(!_7f6["url"]){
+if(!_7f6["formNode"]&&(_7f6["backButton"]||_7f6["back"]||_7f6["changeUrl"]||_7f6["watchForURL"])&&(!djConfig.preventBackButtonFix)){
 dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request","Use dojo.undo.browser.addToHistory() instead.","0.4");
-dojo.undo.browser.addToHistory(_7eb);
+dojo.undo.browser.addToHistory(_7f6);
 return true;
 }
 }
-var url=_7eb.url;
-var _7ed="";
-if(_7eb["formNode"]){
-var ta=_7eb.formNode.getAttribute("action");
-if((ta)&&(!_7eb["url"])){
+var url=_7f6.url;
+var _7f8="";
+if(_7f6["formNode"]){
+var ta=_7f6.formNode.getAttribute("action");
+if((ta)&&(!_7f6["url"])){
 url=ta;
 }
-var tp=_7eb.formNode.getAttribute("method");
-if((tp)&&(!_7eb["method"])){
-_7eb.method=tp;
+var tp=_7f6.formNode.getAttribute("method");
+if((tp)&&(!_7f6["method"])){
+_7f6.method=tp;
 }
-_7ed+=dojo.io.encodeForm(_7eb.formNode,_7eb.encoding,_7eb["formFilter"]);
+_7f8+=dojo.io.encodeForm(_7f6.formNode,_7f6.encoding,_7f6["formFilter"]);
 }
 if(url.indexOf("#")>-1){
 dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url);
 url=url.split("#")[0];
 }
-if(_7eb["file"]){
-_7eb.method="post";
+if(_7f6["file"]){
+_7f6.method="post";
 }
-if(!_7eb["method"]){
-_7eb.method="get";
+if(!_7f6["method"]){
+_7f6.method="get";
 }
-if(_7eb.method.toLowerCase()=="get"){
-_7eb.multipart=false;
+if(_7f6.method.toLowerCase()=="get"){
+_7f6.multipart=false;
 }else{
-if(_7eb["file"]){
-_7eb.multipart=true;
+if(_7f6["file"]){
+_7f6.multipart=true;
 }else{
-if(!_7eb["multipart"]){
-_7eb.multipart=false;
+if(!_7f6["multipart"]){
+_7f6.multipart=false;
 }
 }
 }
-if(_7eb["backButton"]||_7eb["back"]||_7eb["changeUrl"]){
-dojo.undo.browser.addToHistory(_7eb);
+if(_7f6["backButton"]||_7f6["back"]||_7f6["changeUrl"]){
+dojo.undo.browser.addToHistory(_7f6);
 }
-var _7f0=_7eb["content"]||{};
-if(_7eb.sendTransport){
-_7f0["dojo.transport"]="xmlhttp";
+var _7fb=_7f6["content"]||{};
+if(_7f6.sendTransport){
+_7fb["dojo.transport"]="xmlhttp";
 }
 do{
-if(_7eb.postContent){
-_7ed=_7eb.postContent;
+if(_7f6.postContent){
+_7f8=_7f6.postContent;
 break;
 }
-if(_7f0){
-_7ed+=dojo.io.argsFromMap(_7f0,_7eb.encoding);
+if(_7fb){
+_7f8+=dojo.io.argsFromMap(_7fb,_7f6.encoding);
 }
-if(_7eb.method.toLowerCase()=="get"||!_7eb.multipart){
+if(_7f6.method.toLowerCase()=="get"||!_7f6.multipart){
 break;
 }
 var t=[];
-if(_7ed.length){
-var q=_7ed.split("&");
+if(_7f8.length){
+var q=_7f8.split("&");
 for(var i=0;i<q.length;++i){
 if(q[i].length){
 var p=q[i].split("=");
@@ -45050,71 +26250,71 @@
 }
 }
 }
-if(_7eb.file){
-if(dojo.lang.isArray(_7eb.file)){
-for(var i=0;i<_7eb.file.length;++i){
-var o=_7eb.file[i];
+if(_7f6.file){
+if(dojo.lang.isArray(_7f6.file)){
+for(var i=0;i<_7f6.file.length;++i){
+var o=_7f6.file[i];
 t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
 }
 }else{
-var o=_7eb.file;
+var o=_7f6.file;
 t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
 }
 }
 if(t.length){
 t.push("--"+this.multipartBoundary+"--","");
-_7ed=t.join("\r\n");
+_7f8=t.join("\r\n");
 }
 }while(false);
-var _7f6=_7eb["sync"]?false:true;
-var _7f7=_7eb["preventCache"]||(this.preventCache==true&&_7eb["preventCache"]!=false);
-var _7f8=_7eb["useCache"]==true||(this.useCache==true&&_7eb["useCache"]!=false);
-if(!_7f7&&_7f8){
-var _7f9=getFromCache(url,_7ed,_7eb.method);
-if(_7f9){
-doLoad(_7eb,_7f9,url,_7ed,false);
+var _801=_7f6["sync"]?false:true;
+var _802=_7f6["preventCache"]||(this.preventCache==true&&_7f6["preventCache"]!=false);
+var _803=_7f6["useCache"]==true||(this.useCache==true&&_7f6["useCache"]!=false);
+if(!_802&&_803){
+var _804=getFromCache(url,_7f8,_7f6.method);
+if(_804){
+doLoad(_7f6,_804,url,_7f8,false);
 return;
 }
 }
-var http=dojo.hostenv.getXmlhttpObject(_7eb);
-var _7fb=false;
-if(_7f6){
-var _7fc=this.inFlight.push({"req":_7eb,"http":http,"url":url,"query":_7ed,"useCache":_7f8,"startTime":_7eb.timeoutSeconds?(new Date()).getTime():0});
+var http=dojo.hostenv.getXmlhttpObject(_7f6);
+var _806=false;
+if(_801){
+var _807=this.inFlight.push({"req":_7f6,"http":http,"url":url,"query":_7f8,"useCache":_803,"startTime":_7f6.timeoutSeconds?(new Date()).getTime():0});
 this.startWatchingInFlight();
 }else{
-_7cb._blockAsync=true;
+_7d6._blockAsync=true;
 }
-if(_7eb.method.toLowerCase()=="post"){
-if(!_7eb.user){
-http.open("POST",url,_7f6);
+if(_7f6.method.toLowerCase()=="post"){
+if(!_7f6.user){
+http.open("POST",url,_801);
 }else{
-http.open("POST",url,_7f6,_7eb.user,_7eb.password);
+http.open("POST",url,_801,_7f6.user,_7f6.password);
 }
-setHeaders(http,_7eb);
-http.setRequestHeader("Content-Type",_7eb.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_7eb.contentType||"application/x-www-form-urlencoded"));
+setHeaders(http,_7f6);
+http.setRequestHeader("Content-Type",_7f6.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_7f6.contentType||"application/x-www-form-urlencoded"));
 try{
-http.send(_7ed);
+http.send(_7f8);
 }
 catch(e){
 if(typeof http.abort=="function"){
 http.abort();
 }
-doLoad(_7eb,{status:404},url,_7ed,_7f8);
+doLoad(_7f6,{status:404},url,_7f8,_803);
 }
 }else{
-var _7fd=url;
-if(_7ed!=""){
-_7fd+=(_7fd.indexOf("?")>-1?"&":"?")+_7ed;
+var _808=url;
+if(_7f8!=""){
+_808+=(_808.indexOf("?")>-1?"&":"?")+_7f8;
 }
-if(_7f7){
-_7fd+=(dojo.string.endsWithAny(_7fd,"?","&")?"":(_7fd.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
+if(_802){
+_808+=(dojo.string.endsWithAny(_808,"?","&")?"":(_808.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
 }
-if(!_7eb.user){
-http.open(_7eb.method.toUpperCase(),_7fd,_7f6);
+if(!_7f6.user){
+http.open(_7f6.method.toUpperCase(),_808,_801);
 }else{
-http.open(_7eb.method.toUpperCase(),_7fd,_7f6,_7eb.user,_7eb.password);
+http.open(_7f6.method.toUpperCase(),_808,_801,_7f6.user,_7f6.password);
 }
-setHeaders(http,_7eb);
+setHeaders(http,_7f6);
 try{
 http.send(null);
 }
@@ -45122,14 +26322,14 @@
 if(typeof http.abort=="function"){
 http.abort();
 }
-doLoad(_7eb,{status:404},url,_7ed,_7f8);
+doLoad(_7f6,{status:404},url,_7f8,_803);
 }
 }
-if(!_7f6){
-doLoad(_7eb,http,url,_7ed,_7f8);
-_7cb._blockAsync=false;
+if(!_801){
+doLoad(_7f6,http,url,_7f8,_803);
+_7d6._blockAsync=false;
 }
-_7eb.abort=function(){
+_7f6.abort=function(){
 try{
 http._aborted=true;
 }
@@ -45143,15 +26343,15 @@
 };
 }
 dojo.provide("dojo.io.cookie");
-dojo.io.cookie.setCookie=function(name,_7ff,days,path,_802,_803){
-var _804=-1;
+dojo.io.cookie.setCookie=function(name,_80a,days,path,_80d,_80e){
+var _80f=-1;
 if((typeof days=="number")&&(days>=0)){
 var d=new Date();
 d.setTime(d.getTime()+(days*24*60*60*1000));
-_804=d.toGMTString();
+_80f=d.toGMTString();
 }
-_7ff=escape(_7ff);
-document.cookie=name+"="+_7ff+";"+(_804!=-1?" expires="+_804+";":"")+(path?"path="+path:"")+(_802?"; domain="+_802:"")+(_803?"; secure":"");
+_80a=escape(_80a);
+document.cookie=name+"="+_80a+";"+(_80f!=-1?" expires="+_80f+";":"")+(path?"path="+path:"")+(_80d?"; domain="+_80d:"")+(_80e?"; secure":"");
 };
 dojo.io.cookie.set=dojo.io.cookie.setCookie;
 dojo.io.cookie.getCookie=function(name){
@@ -45159,71 +26359,71 @@
 if(idx==-1){
 return null;
 }
-var _808=document.cookie.substring(idx+name.length+1);
-var end=_808.indexOf(";");
+var _813=document.cookie.substring(idx+name.length+1);
+var end=_813.indexOf(";");
 if(end==-1){
-end=_808.length;
+end=_813.length;
 }
-_808=_808.substring(0,end);
-_808=unescape(_808);
-return _808;
+_813=_813.substring(0,end);
+_813=unescape(_813);
+return _813;
 };
 dojo.io.cookie.get=dojo.io.cookie.getCookie;
 dojo.io.cookie.deleteCookie=function(name){
 dojo.io.cookie.setCookie(name,"-",0);
 };
-dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_80f,_810,_811){
+dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_81a,_81b,_81c){
 if(arguments.length==5){
-_811=_80f;
-_80f=null;
-_810=null;
+_81c=_81a;
+_81a=null;
+_81b=null;
 }
-var _812=[],_813,_814="";
-if(!_811){
-_813=dojo.io.cookie.getObjectCookie(name);
+var _81d=[],_81e,_81f="";
+if(!_81c){
+_81e=dojo.io.cookie.getObjectCookie(name);
 }
 if(days>=0){
-if(!_813){
-_813={};
+if(!_81e){
+_81e={};
 }
 for(var prop in obj){
 if(obj[prop]==null){
-delete _813[prop];
+delete _81e[prop];
 }else{
 if((typeof obj[prop]=="string")||(typeof obj[prop]=="number")){
-_813[prop]=obj[prop];
+_81e[prop]=obj[prop];
 }
 }
 }
 prop=null;
-for(var prop in _813){
-_812.push(escape(prop)+"="+escape(_813[prop]));
+for(var prop in _81e){
+_81d.push(escape(prop)+"="+escape(_81e[prop]));
 }
-_814=_812.join("&");
+_81f=_81d.join("&");
 }
-dojo.io.cookie.setCookie(name,_814,days,path,_80f,_810);
+dojo.io.cookie.setCookie(name,_81f,days,path,_81a,_81b);
 };
 dojo.io.cookie.getObjectCookie=function(name){
-var _817=null,_818=dojo.io.cookie.getCookie(name);
-if(_818){
-_817={};
-var _819=_818.split("&");
-for(var i=0;i<_819.length;i++){
-var pair=_819[i].split("=");
-var _81c=pair[1];
-if(isNaN(_81c)){
-_81c=unescape(pair[1]);
+var _822=null,_823=dojo.io.cookie.getCookie(name);
+if(_823){
+_822={};
+var _824=_823.split("&");
+for(var i=0;i<_824.length;i++){
+var pair=_824[i].split("=");
+var _827=pair[1];
+if(isNaN(_827)){
+_827=unescape(pair[1]);
 }
-_817[unescape(pair[0])]=_81c;
+_822[unescape(pair[0])]=_827;
 }
 }
-return _817;
+return _822;
 };
 dojo.io.cookie.isSupported=function(){
 if(typeof navigator.cookieEnabled!="boolean"){
 dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__","CookiesAllowed",90,null);
-var _81d=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
-navigator.cookieEnabled=(_81d=="CookiesAllowed");
+var _828=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
+navigator.cookieEnabled=(_828=="CookiesAllowed");
 if(navigator.cookieEnabled){
 this.deleteCookie("__TestingYourBrowserForCookieSupport__");
 }
@@ -45233,736 +26433,29 @@
 if(!dojo.io.cookies){
 dojo.io.cookies=dojo.io.cookie;
 }
+dojo.kwCompoundRequire({common:["dojo.io.common"],rhino:["dojo.io.RhinoIO"],browser:["dojo.io.BrowserIO","dojo.io.cookie"],dashboard:["dojo.io.BrowserIO","dojo.io.cookie"]});
 dojo.provide("dojo.io.*");
-dojo.provide("dojo.widget.Toolbar");
-dojo.widget.defineWidget("dojo.widget.ToolbarContainer",dojo.widget.HtmlWidget,{isContainer:true,templateString:"<div class=\"toolbarContainer\" dojoAttachPoint=\"containerNode\"></div>",templateCssPath:dojo.uri.dojoUri("src/widget/templates/Toolbar.css"),getItem:function(name){
-if(name instanceof dojo.widget.ToolbarItem){
-return name;
-}
-for(var i=0;i<this.children.length;i++){
-var _820=this.children[i];
-if(_820 instanceof dojo.widget.Toolbar){
-var item=_820.getItem(name);
-if(item){
-return item;
-}
-}
-}
-return null;
-},getItems:function(){
-var _822=[];
-for(var i=0;i<this.children.length;i++){
-var _824=this.children[i];
-if(_824 instanceof dojo.widget.Toolbar){
-_822=_822.concat(_824.getItems());
-}
-}
-return _822;
-},enable:function(){
-for(var i=0;i<this.children.length;i++){
-var _826=this.children[i];
-if(_826 instanceof dojo.widget.Toolbar){
-_826.enable.apply(_826,arguments);
-}
-}
-},disable:function(){
-for(var i=0;i<this.children.length;i++){
-var _828=this.children[i];
-if(_828 instanceof dojo.widget.Toolbar){
-_828.disable.apply(_828,arguments);
-}
-}
-},select:function(name){
-for(var i=0;i<this.children.length;i++){
-var _82b=this.children[i];
-if(_82b instanceof dojo.widget.Toolbar){
-_82b.select(arguments);
-}
-}
-},deselect:function(name){
-for(var i=0;i<this.children.length;i++){
-var _82e=this.children[i];
-if(_82e instanceof dojo.widget.Toolbar){
-_82e.deselect(arguments);
-}
-}
-},getItemsState:function(){
-var _82f={};
-for(var i=0;i<this.children.length;i++){
-var _831=this.children[i];
-if(_831 instanceof dojo.widget.Toolbar){
-dojo.lang.mixin(_82f,_831.getItemsState());
-}
-}
-return _82f;
-},getItemsActiveState:function(){
-var _832={};
-for(var i=0;i<this.children.length;i++){
-var _834=this.children[i];
-if(_834 instanceof dojo.widget.Toolbar){
-dojo.lang.mixin(_832,_834.getItemsActiveState());
-}
-}
-return _832;
-},getItemsSelectedState:function(){
-var _835={};
-for(var i=0;i<this.children.length;i++){
-var _837=this.children[i];
-if(_837 instanceof dojo.widget.Toolbar){
-dojo.lang.mixin(_835,_837.getItemsSelectedState());
-}
-}
-return _835;
-}});
-dojo.widget.defineWidget("dojo.widget.Toolbar",dojo.widget.HtmlWidget,{isContainer:true,templateString:"<div class=\"toolbar\" dojoAttachPoint=\"containerNode\" unselectable=\"on\" dojoOnMouseover=\"_onmouseover\" dojoOnMouseout=\"_onmouseout\" dojoOnClick=\"_onclick\" dojoOnMousedown=\"_onmousedown\" dojoOnMouseup=\"_onmouseup\"></div>",_getItem:function(node){
-var _839=new Date();
-var _83a=null;
-while(node&&node!=this.domNode){
-if(dojo.html.hasClass(node,"toolbarItem")){
-var _83b=dojo.widget.manager.getWidgetsByFilter(function(w){
-return w.domNode==node;
-});
-if(_83b.length==1){
-_83a=_83b[0];
-break;
-}else{
-if(_83b.length>1){
-dojo.raise("Toolbar._getItem: More than one widget matches the node");
-}
-}
-}
-node=node.parentNode;
-}
-return _83a;
-},_onmouseover:function(e){
-var _83e=this._getItem(e.target);
-if(_83e&&_83e._onmouseover){
-_83e._onmouseover(e);
-}
-},_onmouseout:function(e){
-var _840=this._getItem(e.target);
-if(_840&&_840._onmouseout){
-_840._onmouseout(e);
-}
-},_onclick:function(e){
-var _842=this._getItem(e.target);
-if(_842&&_842._onclick){
-_842._onclick(e);
-}
-},_onmousedown:function(e){
-var _844=this._getItem(e.target);
-if(_844&&_844._onmousedown){
-_844._onmousedown(e);
-}
-},_onmouseup:function(e){
-var _846=this._getItem(e.target);
-if(_846&&_846._onmouseup){
-_846._onmouseup(e);
-}
-},addChild:function(item,pos,_849){
-var _84a=dojo.widget.ToolbarItem.make(item,null,_849);
-var ret=dojo.widget.Toolbar.superclass.addChild.call(this,_84a,null,pos,null);
-return ret;
-},push:function(){
-for(var i=0;i<arguments.length;i++){
-this.addChild(arguments[i]);
-}
-},getItem:function(name){
-if(name instanceof dojo.widget.ToolbarItem){
-return name;
-}
-for(var i=0;i<this.children.length;i++){
-var _84f=this.children[i];
-if(_84f instanceof dojo.widget.ToolbarItem&&_84f._name==name){
-return _84f;
-}
-}
-return null;
-},getItems:function(){
-var _850=[];
-for(var i=0;i<this.children.length;i++){
-var _852=this.children[i];
-if(_852 instanceof dojo.widget.ToolbarItem){
-_850.push(_852);
-}
-}
-return _850;
-},getItemsState:function(){
-var _853={};
-for(var i=0;i<this.children.length;i++){
-var _855=this.children[i];
-if(_855 instanceof dojo.widget.ToolbarItem){
-_853[_855._name]={selected:_855._selected,enabled:!_855.disabled};
-}
-}
-return _853;
-},getItemsActiveState:function(){
-var _856=this.getItemsState();
-for(var item in _856){
-_856[item]=_856[item].enabled;
-}
-return _856;
-},getItemsSelectedState:function(){
-var _858=this.getItemsState();
-for(var item in _858){
-_858[item]=_858[item].selected;
-}
-return _858;
-},enable:function(){
-var _85a=arguments.length?arguments:this.children;
-for(var i=0;i<_85a.length;i++){
-var _85c=this.getItem(_85a[i]);
-if(_85c instanceof dojo.widget.ToolbarItem){
-_85c.enable(false,true);
-}
-}
-},disable:function(){
-var _85d=arguments.length?arguments:this.children;
-for(var i=0;i<_85d.length;i++){
-var _85f=this.getItem(_85d[i]);
-if(_85f instanceof dojo.widget.ToolbarItem){
-_85f.disable();
-}
-}
-},select:function(){
-for(var i=0;i<arguments.length;i++){
-var name=arguments[i];
-var item=this.getItem(name);
-if(item){
-item.select();
-}
-}
-},deselect:function(){
-for(var i=0;i<arguments.length;i++){
-var name=arguments[i];
-var item=this.getItem(name);
-if(item){
-item.disable();
-}
-}
-},setValue:function(){
-for(var i=0;i<arguments.length;i+=2){
-var name=arguments[i],_868=arguments[i+1];
-var item=this.getItem(name);
-if(item){
-if(item instanceof dojo.widget.ToolbarItem){
-item.setValue(_868);
-}
-}
-}
-}});
-dojo.widget.defineWidget("dojo.widget.ToolbarItem",dojo.widget.HtmlWidget,{templateString:"<span unselectable=\"on\" class=\"toolbarItem\"></span>",_name:null,getName:function(){
-return this._name;
-},setName:function(_86a){
-return (this._name=_86a);
-},getValue:function(){
-return this.getName();
-},setValue:function(_86b){
-return this.setName(_86b);
-},_selected:false,isSelected:function(){
-return this._selected;
-},setSelected:function(is,_86d,_86e){
-if(!this._toggleItem&&!_86d){
-return;
-}
-is=Boolean(is);
-if(_86d||!this.disabled&&this._selected!=is){
-this._selected=is;
-this.update();
-if(!_86e){
-this._fireEvent(is?"onSelect":"onDeselect");
-this._fireEvent("onChangeSelect");
-}
-}
-},select:function(_86f,_870){
-return this.setSelected(true,_86f,_870);
-},deselect:function(_871,_872){
-return this.setSelected(false,_871,_872);
-},_toggleItem:false,isToggleItem:function(){
-return this._toggleItem;
-},setToggleItem:function(_873){
-this._toggleItem=Boolean(_873);
-},toggleSelected:function(_874){
-return this.setSelected(!this._selected,_874);
-},isEnabled:function(){
-return !this.disabled;
-},setEnabled:function(is,_876,_877){
-is=Boolean(is);
-if(_876||this.disabled==is){
-this.disabled=!is;
-this.update();
-if(!_877){
-this._fireEvent(this.disabled?"onDisable":"onEnable");
-this._fireEvent("onChangeEnabled");
-}
-}
-return !this.disabled;
-},enable:function(_878,_879){
-return this.setEnabled(true,_878,_879);
-},disable:function(_87a,_87b){
-return this.setEnabled(false,_87a,_87b);
-},toggleEnabled:function(_87c,_87d){
-return this.setEnabled(this.disabled,_87c,_87d);
-},_icon:null,getIcon:function(){
-return this._icon;
-},setIcon:function(_87e){
-var icon=dojo.widget.Icon.make(_87e);
-if(this._icon){
-this._icon.setIcon(icon);
-}else{
-this._icon=icon;
-}
-var _880=this._icon.getNode();
-if(_880.parentNode!=this.domNode){
-if(this.domNode.hasChildNodes()){
-this.domNode.insertBefore(_880,this.domNode.firstChild);
-}else{
-this.domNode.appendChild(_880);
-}
-}
-return this._icon;
-},_label:"",getLabel:function(){
-return this._label;
-},setLabel:function(_881){
-var ret=(this._label=_881);
-if(!this.labelNode){
-this.labelNode=document.createElement("span");
-this.domNode.appendChild(this.labelNode);
-}
-this.labelNode.innerHTML="";
-this.labelNode.appendChild(document.createTextNode(this._label));
-this.update();
-return ret;
-},update:function(){
-if(this.disabled){
-this._selected=false;
-dojo.html.addClass(this.domNode,"disabled");
-dojo.html.removeClass(this.domNode,"down");
-dojo.html.removeClass(this.domNode,"hover");
-}else{
-dojo.html.removeClass(this.domNode,"disabled");
-if(this._selected){
-dojo.html.addClass(this.domNode,"selected");
-}else{
-dojo.html.removeClass(this.domNode,"selected");
-}
-}
-this._updateIcon();
-},_updateIcon:function(){
-if(this._icon){
-if(this.disabled){
-this._icon.disable();
-}else{
-if(this._cssHover){
-this._icon.hover();
-}else{
-if(this._selected){
-this._icon.select();
-}else{
-this._icon.enable();
-}
-}
-}
-}
-},_fireEvent:function(evt){
-if(typeof this[evt]=="function"){
-var args=[this];
-for(var i=1;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-this[evt].apply(this,args);
-}
-},_onmouseover:function(e){
-if(this.disabled){
-return;
-}
-dojo.html.addClass(this.domNode,"hover");
-this._fireEvent("onMouseOver");
-},_onmouseout:function(e){
-dojo.html.removeClass(this.domNode,"hover");
-dojo.html.removeClass(this.domNode,"down");
-if(!this._selected){
-dojo.html.removeClass(this.domNode,"selected");
-}
-this._fireEvent("onMouseOut");
-},_onclick:function(e){
-if(!this.disabled&&!this._toggleItem){
-this._fireEvent("onClick");
-}
-},_onmousedown:function(e){
-if(e.preventDefault){
-e.preventDefault();
-}
-if(this.disabled){
-return;
-}
-dojo.html.addClass(this.domNode,"down");
-if(this._toggleItem){
-if(this.parent.preventDeselect&&this._selected){
-return;
-}
-this.toggleSelected();
-}
-this._fireEvent("onMouseDown");
-},_onmouseup:function(e){
-dojo.html.removeClass(this.domNode,"down");
-this._fireEvent("onMouseUp");
-},onClick:function(){
-},onMouseOver:function(){
-},onMouseOut:function(){
-},onMouseDown:function(){
-},onMouseUp:function(){
-},fillInTemplate:function(args,frag){
-if(args.name){
-this._name=args.name;
-}
-if(args.selected){
-this.select();
-}
-if(args.disabled){
-this.disable();
-}
-if(args.label){
-this.setLabel(args.label);
-}
-if(args.icon){
-this.setIcon(args.icon);
-}
-if(args.toggleitem||args.toggleItem){
-this.setToggleItem(true);
-}
-}});
-dojo.widget.ToolbarItem.make=function(wh,_88e,_88f){
-var item=null;
-if(wh instanceof Array){
-item=dojo.widget.createWidget("ToolbarButtonGroup",_88f);
-item.setName(wh[0]);
-for(var i=1;i<wh.length;i++){
-item.addChild(wh[i]);
-}
-}else{
-if(wh instanceof dojo.widget.ToolbarItem){
-item=wh;
-}else{
-if(wh instanceof dojo.uri.Uri){
-item=dojo.widget.createWidget("ToolbarButton",dojo.lang.mixin(_88f||{},{icon:new dojo.widget.Icon(wh.toString())}));
-}else{
-if(_88e){
-item=dojo.widget.createWidget(wh,_88f);
-}else{
-if(typeof wh=="string"||wh instanceof String){
-switch(wh.charAt(0)){
-case "|":
-case "-":
-case "/":
-item=dojo.widget.createWidget("ToolbarSeparator",_88f);
-break;
-case " ":
-if(wh.length==1){
-item=dojo.widget.createWidget("ToolbarSpace",_88f);
-}else{
-item=dojo.widget.createWidget("ToolbarFlexibleSpace",_88f);
-}
-break;
-default:
-if(/\.(gif|jpg|jpeg|png)$/i.test(wh)){
-item=dojo.widget.createWidget("ToolbarButton",dojo.lang.mixin(_88f||{},{icon:new dojo.widget.Icon(wh.toString())}));
-}else{
-item=dojo.widget.createWidget("ToolbarButton",dojo.lang.mixin(_88f||{},{label:wh.toString()}));
-}
-}
-}else{
-if(wh&&wh.tagName&&/^img$/i.test(wh.tagName)){
-item=dojo.widget.createWidget("ToolbarButton",dojo.lang.mixin(_88f||{},{icon:wh}));
-}else{
-item=dojo.widget.createWidget("ToolbarButton",dojo.lang.mixin(_88f||{},{label:wh.toString()}));
-}
-}
-}
-}
-}
-}
-return item;
-};
-dojo.widget.defineWidget("dojo.widget.ToolbarButtonGroup",dojo.widget.ToolbarItem,{isContainer:true,templateString:"<span unselectable=\"on\" class=\"toolbarButtonGroup\" dojoAttachPoint=\"containerNode\"></span>",defaultButton:"",postCreate:function(){
-for(var i=0;i<this.children.length;i++){
-this._injectChild(this.children[i]);
-}
-},addChild:function(item,pos,_895){
-var _896=dojo.widget.ToolbarItem.make(item,null,dojo.lang.mixin(_895||{},{toggleItem:true}));
-var ret=dojo.widget.ToolbarButtonGroup.superclass.addChild.call(this,_896,null,pos,null);
-this._injectChild(_896);
-return ret;
-},_injectChild:function(_898){
-dojo.event.connect(_898,"onSelect",this,"onChildSelected");
-dojo.event.connect(_898,"onDeselect",this,"onChildDeSelected");
-if(_898._name==this.defaultButton||(typeof this.defaultButton=="number"&&this.children.length-1==this.defaultButton)){
-_898.select(false,true);
-}
-},getItem:function(name){
-if(name instanceof dojo.widget.ToolbarItem){
-return name;
-}
-for(var i=0;i<this.children.length;i++){
-var _89b=this.children[i];
-if(_89b instanceof dojo.widget.ToolbarItem&&_89b._name==name){
-return _89b;
-}
-}
-return null;
-},getItems:function(){
-var _89c=[];
-for(var i=0;i<this.children.length;i++){
-var _89e=this.children[i];
-if(_89e instanceof dojo.widget.ToolbarItem){
-_89c.push(_89e);
-}
-}
-return _89c;
-},onChildSelected:function(e){
-this.select(e._name);
-},onChildDeSelected:function(e){
-this._fireEvent("onChangeSelect",this._value);
-},enable:function(_8a1,_8a2){
-for(var i=0;i<this.children.length;i++){
-var _8a4=this.children[i];
-if(_8a4 instanceof dojo.widget.ToolbarItem){
-_8a4.enable(_8a1,_8a2);
-if(_8a4._name==this._value){
-_8a4.select(_8a1,_8a2);
-}
-}
-}
-},disable:function(_8a5,_8a6){
-for(var i=0;i<this.children.length;i++){
-var _8a8=this.children[i];
-if(_8a8 instanceof dojo.widget.ToolbarItem){
-_8a8.disable(_8a5,_8a6);
-}
-}
-},_value:"",getValue:function(){
-return this._value;
-},select:function(name,_8aa,_8ab){
-for(var i=0;i<this.children.length;i++){
-var _8ad=this.children[i];
-if(_8ad instanceof dojo.widget.ToolbarItem){
-if(_8ad._name==name){
-_8ad.select(_8aa,_8ab);
-this._value=name;
-}else{
-_8ad.deselect(true,true);
-}
-}
-}
-if(!_8ab){
-this._fireEvent("onSelect",this._value);
-this._fireEvent("onChangeSelect",this._value);
-}
-},setValue:this.select,preventDeselect:false});
-dojo.widget.defineWidget("dojo.widget.ToolbarButton",dojo.widget.ToolbarItem,{fillInTemplate:function(args,frag){
-dojo.widget.ToolbarButton.superclass.fillInTemplate.call(this,args,frag);
-dojo.html.addClass(this.domNode,"toolbarButton");
-if(this._icon){
-this.setIcon(this._icon);
-}
-if(this._label){
-this.setLabel(this._label);
-}
-if(!this._name){
-if(this._label){
-this.setName(this._label);
-}else{
-if(this._icon){
-var src=this._icon.getSrc("enabled").match(/[\/^]([^\.\/]+)\.(gif|jpg|jpeg|png)$/i);
-if(src){
-this.setName(src[1]);
-}
-}else{
-this._name=this._widgetId;
-}
-}
-}
-}});
-dojo.widget.defineWidget("dojo.widget.ToolbarDialog",dojo.widget.ToolbarButton,{fillInTemplate:function(args,frag){
-dojo.widget.ToolbarDialog.superclass.fillInTemplate.call(this,args,frag);
-dojo.event.connect(this,"onSelect",this,"showDialog");
-dojo.event.connect(this,"onDeselect",this,"hideDialog");
-},showDialog:function(e){
-dojo.lang.setTimeout(dojo.event.connect,1,document,"onmousedown",this,"deselect");
-},hideDialog:function(e){
-dojo.event.disconnect(document,"onmousedown",this,"deselect");
-}});
-dojo.widget.defineWidget("dojo.widget.ToolbarMenu",dojo.widget.ToolbarDialog,{});
-dojo.widget.ToolbarMenuItem=function(){
-};
-dojo.widget.defineWidget("dojo.widget.ToolbarSeparator",dojo.widget.ToolbarItem,{templateString:"<span unselectable=\"on\" class=\"toolbarItem toolbarSeparator\"></span>",defaultIconPath:new dojo.uri.dojoUri("src/widget/templates/buttons/sep.gif"),fillInTemplate:function(args,frag,skip){
-dojo.widget.ToolbarSeparator.superclass.fillInTemplate.call(this,args,frag);
-this._name=this.widgetId;
-if(!skip){
-if(!this._icon){
-this.setIcon(this.defaultIconPath);
-}
-this.domNode.appendChild(this._icon.getNode());
-}
-},_onmouseover:null,_onmouseout:null,_onclick:null,_onmousedown:null,_onmouseup:null});
-dojo.widget.defineWidget("dojo.widget.ToolbarSpace",dojo.widget.ToolbarSeparator,{fillInTemplate:function(args,frag,skip){
-dojo.widget.ToolbarSpace.superclass.fillInTemplate.call(this,args,frag,true);
-if(!skip){
-dojo.html.addClass(this.domNode,"toolbarSpace");
-}
-}});
-dojo.widget.defineWidget("dojo.widget.ToolbarSelect",dojo.widget.ToolbarItem,{templateString:"<span class=\"toolbarItem toolbarSelect\" unselectable=\"on\"><select dojoAttachPoint=\"selectBox\" dojoOnChange=\"changed\"></select></span>",fillInTemplate:function(args,frag){
-dojo.widget.ToolbarSelect.superclass.fillInTemplate.call(this,args,frag,true);
-var keys=args.values;
-var i=0;
-for(var val in keys){
-var opt=document.createElement("option");
-opt.setAttribute("value",keys[val]);
-opt.innerHTML=val;
-this.selectBox.appendChild(opt);
-}
-},changed:function(e){
-this._fireEvent("onSetValue",this.selectBox.value);
-},setEnabled:function(is,_8c3,_8c4){
-var ret=dojo.widget.ToolbarSelect.superclass.setEnabled.call(this,is,_8c3,_8c4);
-this.selectBox.disabled=this.disabled;
-return ret;
-},_onmouseover:null,_onmouseout:null,_onclick:null,_onmousedown:null,_onmouseup:null});
-dojo.widget.Icon=function(_8c6,_8c7,_8c8,_8c9){
-if(!arguments.length){
-throw new Error("Icon must have at least an enabled state");
-}
-var _8ca=["enabled","disabled","hovered","selected"];
-var _8cb="enabled";
-var _8cc=document.createElement("img");
-this.getState=function(){
-return _8cb;
-};
-this.setState=function(_8cd){
-if(dojo.lang.inArray(_8ca,_8cd)){
-if(this[_8cd]){
-_8cb=_8cd;
-var img=this[_8cb];
-if((dojo.render.html.ie55||dojo.render.html.ie60)&&img.src&&img.src.match(/[.]png$/i)){
-_8cc.width=img.width||img.offsetWidth;
-_8cc.height=img.height||img.offsetHeight;
-_8cc.setAttribute("src",dojo.uri.dojoUri("src/widget/templates/images/blank.gif").uri);
-_8cc.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+img.src+"',sizingMethod='image')";
-}else{
-_8cc.setAttribute("src",img.src);
-}
-}
-}else{
-throw new Error("Invalid state set on Icon (state: "+_8cd+")");
-}
-};
-this.setSrc=function(_8cf,_8d0){
-if(/^img$/i.test(_8d0.tagName)){
-this[_8cf]=_8d0;
-}else{
-if(typeof _8d0=="string"||_8d0 instanceof String||_8d0 instanceof dojo.uri.Uri){
-this[_8cf]=new Image();
-this[_8cf].src=_8d0.toString();
-}
-}
-return this[_8cf];
-};
-this.setIcon=function(icon){
-for(var i=0;i<_8ca.length;i++){
-if(icon[_8ca[i]]){
-this.setSrc(_8ca[i],icon[_8ca[i]]);
-}
-}
-this.update();
-};
-this.enable=function(){
-this.setState("enabled");
-};
-this.disable=function(){
-this.setState("disabled");
-};
-this.hover=function(){
-this.setState("hovered");
-};
-this.select=function(){
-this.setState("selected");
-};
-this.getSize=function(){
-return {width:_8cc.width||_8cc.offsetWidth,height:_8cc.height||_8cc.offsetHeight};
-};
-this.setSize=function(w,h){
-_8cc.width=w;
-_8cc.height=h;
-return {width:w,height:h};
-};
-this.getNode=function(){
-return _8cc;
-};
-this.getSrc=function(_8d5){
-if(_8d5){
-return this[_8d5].src;
-}
-return _8cc.src||"";
-};
-this.update=function(){
-this.setState(_8cb);
-};
-for(var i=0;i<_8ca.length;i++){
-var arg=arguments[i];
-var _8d8=_8ca[i];
-this[_8d8]=null;
-if(!arg){
-continue;
-}
-this.setSrc(_8d8,arg);
-}
-this.enable();
-};
-dojo.widget.Icon.make=function(a,b,c,d){
-for(var i=0;i<arguments.length;i++){
-if(arguments[i] instanceof dojo.widget.Icon){
-return arguments[i];
-}
-}
-return new dojo.widget.Icon(a,b,c,d);
-};
-dojo.widget.defineWidget("dojo.widget.ToolbarColorDialog",dojo.widget.ToolbarDialog,{palette:"7x10",fillInTemplate:function(args,frag){
-dojo.widget.ToolbarColorDialog.superclass.fillInTemplate.call(this,args,frag);
-this.dialog=dojo.widget.createWidget("ColorPalette",{palette:this.palette});
-this.dialog.domNode.style.position="absolute";
-dojo.event.connect(this.dialog,"onColorSelect",this,"_setValue");
-},_setValue:function(_8e0){
-this._value=_8e0;
-this._fireEvent("onSetValue",_8e0);
-},showDialog:function(e){
-dojo.widget.ToolbarColorDialog.superclass.showDialog.call(this,e);
-var abs=dojo.html.getAbsolutePosition(this.domNode,true);
-var y=abs.y+dojo.html.getBorderBox(this.domNode).height;
-this.dialog.showAt(abs.x,y);
-},hideDialog:function(e){
-dojo.widget.ToolbarColorDialog.superclass.hideDialog.call(this,e);
-this.dialog.hide();
-}});
+dojo.kwCompoundRequire({common:["dojo.html.common","dojo.html.style"]});
 dojo.provide("dojo.html.*");
 dojo.provide("dojo.html.selection");
 dojo.html.selectionType={NONE:0,TEXT:1,CONTROL:2};
 dojo.html.clearSelection=function(){
-var _8e5=dojo.global();
-var _8e6=dojo.doc();
+var _829=dojo.global();
+var _82a=dojo.doc();
 try{
-if(_8e5["getSelection"]){
+if(_829["getSelection"]){
 if(dojo.render.html.safari){
-_8e5.getSelection().collapse();
+_829.getSelection().collapse();
 }else{
-_8e5.getSelection().removeAllRanges();
+_829.getSelection().removeAllRanges();
 }
 }else{
-if(_8e6.selection){
-if(_8e6.selection.empty){
-_8e6.selection.empty();
+if(_82a.selection){
+if(_82a.selection.empty){
+_82a.selection.empty();
 }else{
-if(_8e6.selection.clear){
-_8e6.selection.clear();
+if(_82a.selection.clear){
+_82a.selection.clear();
 }
 }
 }
@@ -45974,17 +26467,17 @@
 return false;
 }
 };
-dojo.html.disableSelection=function(_8e7){
-_8e7=dojo.byId(_8e7)||dojo.body();
+dojo.html.disableSelection=function(_82b){
+_82b=dojo.byId(_82b)||dojo.body();
 var h=dojo.render.html;
 if(h.mozilla){
-_8e7.style.MozUserSelect="none";
+_82b.style.MozUserSelect="none";
 }else{
 if(h.safari){
-_8e7.style.KhtmlUserSelect="none";
+_82b.style.KhtmlUserSelect="none";
 }else{
 if(h.ie){
-_8e7.unselectable="on";
+_82b.unselectable="on";
 }else{
 return false;
 }
@@ -45992,17 +26485,17 @@
 }
 return true;
 };
-dojo.html.enableSelection=function(_8e9){
-_8e9=dojo.byId(_8e9)||dojo.body();
+dojo.html.enableSelection=function(_82d){
+_82d=dojo.byId(_82d)||dojo.body();
 var h=dojo.render.html;
 if(h.mozilla){
-_8e9.style.MozUserSelect="";
+_82d.style.MozUserSelect="";
 }else{
 if(h.safari){
-_8e9.style.KhtmlUserSelect="";
+_82d.style.KhtmlUserSelect="";
 }else{
 if(h.ie){
-_8e9.unselectable="off";
+_82d.unselectable="off";
 }else{
 return false;
 }
@@ -46010,25 +26503,25 @@
 }
 return true;
 };
-dojo.html.selectElement=function(_8eb){
+dojo.html.selectElement=function(_82f){
 dojo.deprecated("dojo.html.selectElement","replaced by dojo.html.selection.selectElementChildren",0.5);
 };
-dojo.html.selectInputText=function(_8ec){
-var _8ed=dojo.global();
-var _8ee=dojo.doc();
-_8ec=dojo.byId(_8ec);
-if(_8ee["selection"]&&dojo.body()["createTextRange"]){
-var _8ef=_8ec.createTextRange();
-_8ef.moveStart("character",0);
-_8ef.moveEnd("character",_8ec.value.length);
-_8ef.select();
+dojo.html.selectInputText=function(_830){
+var _831=dojo.global();
+var _832=dojo.doc();
+_830=dojo.byId(_830);
+if(_832["selection"]&&dojo.body()["createTextRange"]){
+var _833=_830.createTextRange();
+_833.moveStart("character",0);
+_833.moveEnd("character",_830.value.length);
+_833.select();
 }else{
-if(_8ed["getSelection"]){
-var _8f0=_8ed.getSelection();
-_8ec.setSelectionRange(0,_8ec.value.length);
+if(_831["getSelection"]){
+var _834=_831.getSelection();
+_830.setSelectionRange(0,_830.value.length);
 }
 }
-_8ec.focus();
+_830.focus();
 };
 dojo.html.isSelectionCollapsed=function(){
 dojo.deprecated("dojo.html.isSelectionCollapsed","replaced by dojo.html.selection.isCollapsed",0.5);
@@ -46038,7 +26531,7 @@
 if(dojo.doc()["selection"]){
 return dojo.html.selectionType[dojo.doc().selection.type.toUpperCase()];
 }else{
-var _8f1=dojo.html.selectionType.TEXT;
+var _835=dojo.html.selectionType.TEXT;
 var oSel;
 try{
 oSel=dojo.global().getSelection();
@@ -46046,38 +26539,38 @@
 catch(e){
 }
 if(oSel&&oSel.rangeCount==1){
-var _8f3=oSel.getRangeAt(0);
-if(_8f3.startContainer==_8f3.endContainer&&(_8f3.endOffset-_8f3.startOffset)==1&&_8f3.startContainer.nodeType!=dojo.dom.TEXT_NODE){
-_8f1=dojo.html.selectionType.CONTROL;
+var _837=oSel.getRangeAt(0);
+if(_837.startContainer==_837.endContainer&&(_837.endOffset-_837.startOffset)==1&&_837.startContainer.nodeType!=dojo.dom.TEXT_NODE){
+_835=dojo.html.selectionType.CONTROL;
 }
 }
-return _8f1;
+return _835;
 }
 },isCollapsed:function(){
-var _8f4=dojo.global();
-var _8f5=dojo.doc();
-if(_8f5["selection"]){
-return _8f5.selection.createRange().text=="";
+var _838=dojo.global();
+var _839=dojo.doc();
+if(_839["selection"]){
+return _839.selection.createRange().text=="";
 }else{
-if(_8f4["getSelection"]){
-var _8f6=_8f4.getSelection();
-if(dojo.lang.isString(_8f6)){
-return _8f6=="";
+if(_838["getSelection"]){
+var _83a=_838.getSelection();
+if(dojo.lang.isString(_83a)){
+return _83a=="";
 }else{
-return _8f6.isCollapsed||_8f6.toString()=="";
+return _83a.isCollapsed||_83a.toString()=="";
 }
 }
 }
 },getSelectedElement:function(){
 if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
 if(dojo.doc()["selection"]){
-var _8f7=dojo.doc().selection.createRange();
-if(_8f7&&_8f7.item){
+var _83b=dojo.doc().selection.createRange();
+if(_83b&&_83b.item){
 return dojo.doc().selection.createRange().item(0);
 }
 }else{
-var _8f8=dojo.global().getSelection();
-return _8f8.anchorNode.childNodes[_8f8.anchorOffset];
+var _83c=dojo.global().getSelection();
+return _83c.anchorNode.childNodes[_83c.anchorOffset];
 }
 }
 },getParentElement:function(){
@@ -46090,9 +26583,9 @@
 if(dojo.doc()["selection"]){
 return dojo.doc().selection.createRange().parentElement();
 }else{
-var _8fa=dojo.global().getSelection();
-if(_8fa){
-var node=_8fa.anchorNode;
+var _83e=dojo.global().getSelection();
+if(_83e){
+var node=_83e.anchorNode;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.parentNode;
 }
@@ -46107,9 +26600,9 @@
 }
 return dojo.doc().selection.createRange().text;
 }else{
-var _8fc=dojo.global().getSelection();
-if(_8fc){
-return _8fc.toString();
+var _840=dojo.global().getSelection();
+if(_840){
+return _840.toString();
 }
 }
 },getSelectedHtml:function(){
@@ -46119,18 +26612,18 @@
 }
 return dojo.doc().selection.createRange().htmlText;
 }else{
-var _8fd=dojo.global().getSelection();
-if(_8fd&&_8fd.rangeCount){
-var frag=_8fd.getRangeAt(0).cloneContents();
+var _841=dojo.global().getSelection();
+if(_841&&_841.rangeCount){
+var frag=_841.getRangeAt(0).cloneContents();
 var div=document.createElement("div");
 div.appendChild(frag);
 return div.innerHTML;
 }
 return null;
 }
-},hasAncestorElement:function(_900){
+},hasAncestorElement:function(_844){
 return (dojo.html.selection.getAncestorElement.apply(this,arguments)!=null);
-},getAncestorElement:function(_901){
+},getAncestorElement:function(_845){
 var node=dojo.html.selection.getSelectedElement()||dojo.html.selection.getParentElement();
 while(node){
 if(dojo.html.selection.isTag(node,arguments).length>0){
@@ -46148,133 +26641,133 @@
 }
 }
 return "";
-},selectElement:function(_906){
-var _907=dojo.global();
-var _908=dojo.doc();
-_906=dojo.byId(_906);
-if(_908.selection&&dojo.body().createTextRange){
+},selectElement:function(_84a){
+var _84b=dojo.global();
+var _84c=dojo.doc();
+_84a=dojo.byId(_84a);
+if(_84c.selection&&dojo.body().createTextRange){
 try{
-var _909=dojo.body().createControlRange();
-_909.addElement(_906);
-_909.select();
+var _84d=dojo.body().createControlRange();
+_84d.addElement(_84a);
+_84d.select();
 }
 catch(e){
-dojo.html.selection.selectElementChildren(_906);
+dojo.html.selection.selectElementChildren(_84a);
 }
 }else{
-if(_907["getSelection"]){
-var _90a=_907.getSelection();
-if(_90a["removeAllRanges"]){
-var _909=_908.createRange();
-_909.selectNode(_906);
-_90a.removeAllRanges();
-_90a.addRange(_909);
+if(_84b["getSelection"]){
+var _84e=_84b.getSelection();
+if(_84e["removeAllRanges"]){
+var _84d=_84c.createRange();
+_84d.selectNode(_84a);
+_84e.removeAllRanges();
+_84e.addRange(_84d);
 }
 }
 }
-},selectElementChildren:function(_90b){
-var _90c=dojo.global();
-var _90d=dojo.doc();
-_90b=dojo.byId(_90b);
-if(_90d.selection&&dojo.body().createTextRange){
-var _90e=dojo.body().createTextRange();
-_90e.moveToElementText(_90b);
-_90e.select();
+},selectElementChildren:function(_84f){
+var _850=dojo.global();
+var _851=dojo.doc();
+_84f=dojo.byId(_84f);
+if(_851.selection&&dojo.body().createTextRange){
+var _852=dojo.body().createTextRange();
+_852.moveToElementText(_84f);
+_852.select();
 }else{
-if(_90c["getSelection"]){
-var _90f=_90c.getSelection();
-if(_90f["setBaseAndExtent"]){
-_90f.setBaseAndExtent(_90b,0,_90b,_90b.innerText.length-1);
+if(_850["getSelection"]){
+var _853=_850.getSelection();
+if(_853["setBaseAndExtent"]){
+_853.setBaseAndExtent(_84f,0,_84f,_84f.innerText.length-1);
 }else{
-if(_90f["selectAllChildren"]){
-_90f.selectAllChildren(_90b);
+if(_853["selectAllChildren"]){
+_853.selectAllChildren(_84f);
 }
 }
 }
 }
 },getBookmark:function(){
-var _910;
-var _911=dojo.doc();
-if(_911["selection"]){
-var _912=_911.selection.createRange();
-_910=_912.getBookmark();
+var _854;
+var _855=dojo.doc();
+if(_855["selection"]){
+var _856=_855.selection.createRange();
+_854=_856.getBookmark();
 }else{
-var _913;
+var _857;
 try{
-_913=dojo.global().getSelection();
+_857=dojo.global().getSelection();
 }
 catch(e){
 }
-if(_913){
-var _912=_913.getRangeAt(0);
-_910=_912.cloneRange();
+if(_857){
+var _856=_857.getRangeAt(0);
+_854=_856.cloneRange();
 }else{
 dojo.debug("No idea how to store the current selection for this browser!");
 }
 }
-return _910;
-},moveToBookmark:function(_914){
-var _915=dojo.doc();
-if(_915["selection"]){
-var _916=_915.selection.createRange();
-_916.moveToBookmark(_914);
-_916.select();
+return _854;
+},moveToBookmark:function(_858){
+var _859=dojo.doc();
+if(_859["selection"]){
+var _85a=_859.selection.createRange();
+_85a.moveToBookmark(_858);
+_85a.select();
 }else{
-var _917;
+var _85b;
 try{
-_917=dojo.global().getSelection();
+_85b=dojo.global().getSelection();
 }
 catch(e){
 }
-if(_917&&_917["removeAllRanges"]){
-_917.removeAllRanges();
-_917.addRange(_914);
+if(_85b&&_85b["removeAllRanges"]){
+_85b.removeAllRanges();
+_85b.addRange(_858);
 }else{
 dojo.debug("No idea how to restore selection for this browser!");
 }
 }
-},collapse:function(_918){
+},collapse:function(_85c){
 if(dojo.global()["getSelection"]){
-var _919=dojo.global().getSelection();
-if(_919.removeAllRanges){
-if(_918){
-_919.collapseToStart();
+var _85d=dojo.global().getSelection();
+if(_85d.removeAllRanges){
+if(_85c){
+_85d.collapseToStart();
 }else{
-_919.collapseToEnd();
+_85d.collapseToEnd();
 }
 }else{
-dojo.global().getSelection().collapse(_918);
+dojo.global().getSelection().collapse(_85c);
 }
 }else{
 if(dojo.doc().selection){
-var _91a=dojo.doc().selection.createRange();
-_91a.collapse(_918);
-_91a.select();
+var _85e=dojo.doc().selection.createRange();
+_85e.collapse(_85c);
+_85e.select();
 }
 }
 },remove:function(){
 if(dojo.doc().selection){
-var _91b=dojo.doc().selection;
-if(_91b.type.toUpperCase()!="NONE"){
-_91b.clear();
+var _85f=dojo.doc().selection;
+if(_85f.type.toUpperCase()!="NONE"){
+_85f.clear();
 }
-return _91b;
+return _85f;
 }else{
-var _91b=dojo.global().getSelection();
-for(var i=0;i<_91b.rangeCount;i++){
-_91b.getRangeAt(i).deleteContents();
+var _85f=dojo.global().getSelection();
+for(var i=0;i<_85f.rangeCount;i++){
+_85f.getRangeAt(i).deleteContents();
 }
-return _91b;
+return _85f;
 }
 }});
 dojo.provide("dojo.Deferred");
-dojo.Deferred=function(_91d){
+dojo.Deferred=function(_861){
 this.chain=[];
 this.id=this._nextId();
 this.fired=-1;
 this.paused=0;
 this.results=[null,null];
-this.canceller=_91d;
+this.canceller=_861;
 this.silentlyCancelled=false;
 };
 dojo.lang.extend(dojo.Deferred,{getFunctionFromArgs:function(){
@@ -46294,21 +26787,21 @@
 }
 return null;
 },makeCalled:function(){
-var _91f=new dojo.Deferred();
-_91f.callback();
-return _91f;
+var _863=new dojo.Deferred();
+_863.callback();
+return _863;
 },repr:function(){
-var _920;
+var _864;
 if(this.fired==-1){
-_920="unfired";
+_864="unfired";
 }else{
 if(this.fired==0){
-_920="success";
+_864="success";
 }else{
-_920="error";
+_864="error";
 }
 }
-return "Deferred("+this.id+", "+_920+")";
+return "Deferred("+this.id+", "+_864+")";
 },toString:dojo.lang.forward("repr"),_nextId:(function(){
 var n=1;
 return function(){
@@ -46361,23 +26854,23 @@
 }
 this._resback(res);
 },addBoth:function(cb,cbfn){
-var _928=this.getFunctionFromArgs(cb,cbfn);
+var _86c=this.getFunctionFromArgs(cb,cbfn);
 if(arguments.length>2){
-_928=dojo.lang.curryArguments(null,_928,arguments,2);
+_86c=dojo.lang.curryArguments(null,_86c,arguments,2);
 }
-return this.addCallbacks(_928,_928);
+return this.addCallbacks(_86c,_86c);
 },addCallback:function(cb,cbfn){
-var _92b=this.getFunctionFromArgs(cb,cbfn);
+var _86f=this.getFunctionFromArgs(cb,cbfn);
 if(arguments.length>2){
-_92b=dojo.lang.curryArguments(null,_92b,arguments,2);
+_86f=dojo.lang.curryArguments(null,_86f,arguments,2);
 }
-return this.addCallbacks(_92b,null);
+return this.addCallbacks(_86f,null);
 },addErrback:function(cb,cbfn){
-var _92e=this.getFunctionFromArgs(cb,cbfn);
+var _872=this.getFunctionFromArgs(cb,cbfn);
 if(arguments.length>2){
-_92e=dojo.lang.curryArguments(null,_92e,arguments,2);
+_872=dojo.lang.curryArguments(null,_872,arguments,2);
 }
-return this.addCallbacks(null,_92e);
+return this.addCallbacks(null,_872);
 return this.addCallbacks(null,cbfn);
 },addCallbacks:function(cb,eb){
 this.chain.push([cb,eb]);
@@ -46386,20 +26879,20 @@
 }
 return this;
 },_fire:function(){
-var _931=this.chain;
-var _932=this.fired;
-var res=this.results[_932];
+var _875=this.chain;
+var _876=this.fired;
+var res=this.results[_876];
 var self=this;
 var cb=null;
-while(_931.length>0&&this.paused==0){
-var pair=_931.shift();
-var f=pair[_932];
+while(_875.length>0&&this.paused==0){
+var pair=_875.shift();
+var f=pair[_876];
 if(f==null){
 continue;
 }
 try{
 res=f(res);
-_932=((res instanceof Error)?1:0);
+_876=((res instanceof Error)?1:0);
 if(res instanceof dojo.Deferred){
 cb=function(res){
 self._continue(res);
@@ -46408,23 +26901,24 @@
 }
 }
 catch(err){
-_932=1;
+_876=1;
 res=err;
 }
 }
-this.fired=_932;
-this.results[_932]=res;
+this.fired=_876;
+this.results[_876]=res;
 if((cb)&&(this.paused)){
 res.addBoth(cb);
 }
 }});
 dojo.provide("dojo.widget.RichText");
+if(!djConfig["useXDomain"]||djConfig["allowXdRichTextSave"]){
 if(dojo.hostenv.post_load_){
 (function(){
-var _939=dojo.doc().createElement("textarea");
-_939.id="dojo.widget.RichText.savedContent";
-_939.style="display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;";
-dojo.body().appendChild(_939);
+var _87d=dojo.doc().createElement("textarea");
+_87d.id="dojo.widget.RichText.savedContent";
+_87d.style="display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;";
+dojo.body().appendChild(_87d);
 })();
 }else{
 try{
@@ -46433,6 +26927,7 @@
 catch(e){
 }
 }
+}
 dojo.widget.defineWidget("dojo.widget.RichText",dojo.widget.HtmlWidget,function(){
 this.contentPreFilters=[];
 this.contentPostFilters=[];
@@ -46478,7 +26973,7 @@
 if(!dojo.render.html.ie){
 this.addKeyHandler("Z",ctrl,exec("redo"));
 }
-},events:["onBlur","onFocus","onKeyPress","onKeyDown","onKeyUp","onClick"],open:function(_93e){
+},events:["onBlur","onFocus","onKeyPress","onKeyDown","onKeyUp","onClick"],open:function(_882){
 if(this.onLoadDeferred.fired>=0){
 this.onLoadDeferred=new dojo.Deferred();
 }
@@ -46488,15 +26983,15 @@
 }
 dojo.event.topic.publish("dojo.widget.RichText::open",this);
 this._content="";
-if((arguments.length==1)&&(_93e["nodeName"])){
-this.domNode=_93e;
+if((arguments.length==1)&&(_882["nodeName"])){
+this.domNode=_882;
 }
 if((this.domNode["nodeName"])&&(this.domNode.nodeName.toLowerCase()=="textarea")){
 this.textarea=this.domNode;
-var html=dojo.string.trim(this.textarea.value);
+var html=this._preFilterContent(this.textarea.value);
 this.domNode=dojo.doc().createElement("div");
 dojo.html.copyStyle(this.domNode,this.textarea);
-var _941=dojo.lang.hitch(this,function(){
+var _885=dojo.lang.hitch(this,function(){
 with(this.textarea.style){
 display="block";
 position="absolute";
@@ -46508,9 +27003,9 @@
 }
 });
 if(h.ie){
-setTimeout(_941,10);
+setTimeout(_885,10);
 }else{
-_941();
+_885();
 }
 if(!h.safari){
 dojo.html.insertBefore(this.domNode,this.textarea);
@@ -46520,9 +27015,9 @@
 this.textarea.value=this.getEditorContent();
 }));
 }
-var _942=this;
+var _886=this;
 dojo.event.connect(this,"postCreate",function(){
-dojo.html.insertAfter(_942.textarea,_942.domNode);
+dojo.html.insertAfter(_886.textarea,_886.domNode);
 });
 }else{
 var html=this._preFilterContent(dojo.string.trim(this.domNode.innerHTML));
@@ -46530,27 +27025,27 @@
 if(html==""){
 html="&nbsp;";
 }
-var _943=dojo.html.getContentBox(this.domNode);
-this._oldHeight=_943.height;
-this._oldWidth=_943.width;
+var _887=dojo.html.getContentBox(this.domNode);
+this._oldHeight=_887.height;
+this._oldWidth=_887.width;
 this._firstChildContributingMargin=this._getContributingMargin(this.domNode,"top");
 this._lastChildContributingMargin=this._getContributingMargin(this.domNode,"bottom");
-this.savedContent=this.domNode.innerHTML;
+this.savedContent=html;
 this.domNode.innerHTML="";
 this.editingArea=dojo.doc().createElement("div");
 this.domNode.appendChild(this.editingArea);
 if((this.domNode["nodeName"])&&(this.domNode.nodeName=="LI")){
 this.domNode.innerHTML=" <br>";
 }
-if(this.saveName!=""){
-var _944=dojo.doc().getElementById("dojo.widget.RichText.savedContent");
-if(_944.value!=""){
-var _945=_944.value.split(this._SEPARATOR);
-for(var i=0;i<_945.length;i++){
-var data=_945[i].split(":");
+if(this.saveName!=""&&(!djConfig["useXDomain"]||djConfig["allowXdRichTextSave"])){
+var _888=dojo.doc().getElementById("dojo.widget.RichText.savedContent");
+if(_888.value!=""){
+var _889=_888.value.split(this._SEPARATOR);
+for(var i=0;i<_889.length;i++){
+var data=_889[i].split(":");
 if(data[0]==this.saveName){
 html=data[1];
-_945.splice(i,1);
+_889.splice(i,1);
 break;
 }
 }
@@ -46596,13 +27091,13 @@
 height=this.height?this.height:this.minHeight;
 }
 }
-var _949=["p","pre","address","h1","h2","h3","h4","h5","h6","ol","div","ul"];
-var _94a="";
-for(var i in _949){
-if(_949[i].charAt(1)!="l"){
-_94a+="<"+_949[i]+"><span>content</span></"+_949[i]+">";
+var _88d=["p","pre","address","h1","h2","h3","h4","h5","h6","ol","div","ul"];
+var _88e="";
+for(var i in _88d){
+if(_88d[i].charAt(1)!="l"){
+_88e+="<"+_88d[i]+"><span>content</span></"+_88d[i]+">";
 }else{
-_94a+="<"+_949[i]+"><li>content</li></"+_949[i]+">";
+_88e+="<"+_88d[i]+"><li>content</li></"+_88d[i]+">";
 }
 }
 with(this.editNode.style){
@@ -46610,13 +27105,13 @@
 left="-2000px";
 top="-2000px";
 }
-this.editNode.innerHTML=_94a;
+this.editNode.innerHTML=_88e;
 var node=this.editNode.firstChild;
 while(node){
 dojo.withGlobal(this.window,"selectElement",dojo.html.selection,[node.firstChild]);
-var _94c=node.tagName.toLowerCase();
-this._local2NativeFormatNames[_94c]=this.queryCommandValue("formatblock");
-this._native2LocalFormatNames[this._local2NativeFormatNames[_94c]]=_94c;
+var _890=node.tagName.toLowerCase();
+this._local2NativeFormatNames[_890]=this.queryCommandValue("formatblock");
+this._native2LocalFormatNames[this._local2NativeFormatNames[_890]]=_890;
 node=node.nextSibling;
 }
 with(this.editNode.style){
@@ -46642,70 +27137,70 @@
 }
 dojo.html.addClass(this.domNode,"RichTextEditable");
 this.isClosed=false;
-},_hasCollapseableMargin:function(_94e,side){
-if(dojo.html.getPixelValue(_94e,"border-"+side+"-width",false)){
+},_hasCollapseableMargin:function(_892,side){
+if(dojo.html.getPixelValue(_892,"border-"+side+"-width",false)){
 return false;
 }else{
-if(dojo.html.getPixelValue(_94e,"padding-"+side,false)){
+if(dojo.html.getPixelValue(_892,"padding-"+side,false)){
 return false;
 }else{
 return true;
 }
 }
-},_getContributingMargin:function(_950,_951){
-if(_951=="top"){
-var _952="previousSibling";
-var _953="nextSibling";
-var _954="firstChild";
-var _955="margin-top";
-var _956="margin-bottom";
+},_getContributingMargin:function(_894,_895){
+if(_895=="top"){
+var _896="previousSibling";
+var _897="nextSibling";
+var _898="firstChild";
+var _899="margin-top";
+var _89a="margin-bottom";
 }else{
-var _952="nextSibling";
-var _953="previousSibling";
-var _954="lastChild";
-var _955="margin-bottom";
-var _956="margin-top";
+var _896="nextSibling";
+var _897="previousSibling";
+var _898="lastChild";
+var _899="margin-bottom";
+var _89a="margin-top";
 }
-var _957=dojo.html.getPixelValue(_950,_955,false);
-function isSignificantNode(_958){
-return !(_958.nodeType==3&&dojo.string.isBlank(_958.data))&&dojo.html.getStyle(_958,"display")!="none"&&!dojo.html.isPositionAbsolute(_958);
+var _89b=dojo.html.getPixelValue(_894,_899,false);
+function isSignificantNode(_89c){
+return !(_89c.nodeType==3&&dojo.string.isBlank(_89c.data))&&dojo.html.getStyle(_89c,"display")!="none"&&!dojo.html.isPositionAbsolute(_89c);
 }
-var _959=0;
-var _95a=_950[_954];
-while(_95a){
-while((!isSignificantNode(_95a))&&_95a[_953]){
-_95a=_95a[_953];
+var _89d=0;
+var _89e=_894[_898];
+while(_89e){
+while((!isSignificantNode(_89e))&&_89e[_897]){
+_89e=_89e[_897];
 }
-_959=Math.max(_959,dojo.html.getPixelValue(_95a,_955,false));
-if(!this._hasCollapseableMargin(_95a,_951)){
+_89d=Math.max(_89d,dojo.html.getPixelValue(_89e,_899,false));
+if(!this._hasCollapseableMargin(_89e,_895)){
 break;
 }
-_95a=_95a[_954];
+_89e=_89e[_898];
 }
-if(!this._hasCollapseableMargin(_950,_951)){
-return parseInt(_959);
+if(!this._hasCollapseableMargin(_894,_895)){
+return parseInt(_89d);
 }
-var _95b=0;
-var _95c=_950[_952];
-while(_95c){
-if(isSignificantNode(_95c)){
-_95b=dojo.html.getPixelValue(_95c,_956,false);
+var _89f=0;
+var _8a0=_894[_896];
+while(_8a0){
+if(isSignificantNode(_8a0)){
+_89f=dojo.html.getPixelValue(_8a0,_89a,false);
 break;
 }
-_95c=_95c[_952];
+_8a0=_8a0[_896];
 }
-if(!_95c){
-_95b=dojo.html.getPixelValue(_950.parentNode,_955,false);
+if(!_8a0){
+_89f=dojo.html.getPixelValue(_894.parentNode,_899,false);
 }
-if(_959>_957){
-return parseInt(Math.max((_959-_957)-_95b,0));
+if(_89d>_89b){
+return parseInt(Math.max((_89d-_89b)-_89f,0));
 }else{
 return 0;
 }
 },_drawIframe:function(html){
-var _95e=Boolean(dojo.render.html.moz&&(typeof window.XML=="undefined"));
+var _8a2=Boolean(dojo.render.html.moz&&(typeof window.XML=="undefined"));
 if(!this.iframe){
-var _95f=(new dojo.uri.Uri(dojo.doc().location)).host;
+var _8a3=(new dojo.uri.Uri(dojo.doc().location)).host;
 this.iframe=dojo.doc().createElement("iframe");
 with(this.iframe){
 style.border="none";
@@ -46714,46 +27209,49 @@
 scrolling=this.height?"auto":"no";
 }
 }
-this.iframe.src=dojo.uri.dojoUri("src/widget/templates/richtextframe.html")+((dojo.doc().domain!=_95f)?("#"+dojo.doc().domain):"");
+if(djConfig["useXDomain"]&&!djConfig["dojoRichTextFrameUrl"]){
+dojo.debug("dojo.widget.RichText: When using cross-domain Dojo builds,"+" please save src/widget/templates/richtextframe.html to your domain and set djConfig.dojoRichTextFrameUrl"+" to the path on your domain to richtextframe.html");
+}
+this.iframe.src=(djConfig["dojoRichTextFrameUrl"]||dojo.uri.moduleUri("dojo.widget","templates/richtextframe.html"))+((dojo.doc().domain!=_8a3)?("#"+dojo.doc().domain):"");
 this.iframe.width=this.inheritWidth?this._oldWidth:"100%";
 if(this.height){
 this.iframe.style.height=this.height;
 }else{
-var _960=this._oldHeight;
+var _8a4=this._oldHeight;
 if(this._hasCollapseableMargin(this.domNode,"top")){
-_960+=this._firstChildContributingMargin;
+_8a4+=this._firstChildContributingMargin;
 }
 if(this._hasCollapseableMargin(this.domNode,"bottom")){
-_960+=this._lastChildContributingMargin;
+_8a4+=this._lastChildContributingMargin;
 }
-this.iframe.height=_960;
+this.iframe.height=_8a4;
 }
-var _961=dojo.doc().createElement("div");
-_961.innerHTML=html;
-this.editingArea.appendChild(_961);
+var _8a5=dojo.doc().createElement("div");
+_8a5.innerHTML=html;
+this.editingArea.appendChild(_8a5);
 if(this.relativeImageUrls){
-var imgs=_961.getElementsByTagName("img");
+var imgs=_8a5.getElementsByTagName("img");
 for(var i=0;i<imgs.length;i++){
 imgs[i].src=(new dojo.uri.Uri(dojo.global().location,imgs[i].src)).toString();
 }
-html=_961.innerHTML;
+html=_8a5.innerHTML;
 }
-var _964=dojo.html.firstElement(_961);
-var _965=dojo.html.lastElement(_961);
-if(_964){
-_964.style.marginTop=this._firstChildContributingMargin+"px";
+var _8a8=dojo.html.firstElement(_8a5);
+var _8a9=dojo.html.lastElement(_8a5);
+if(_8a8){
+_8a8.style.marginTop=this._firstChildContributingMargin+"px";
 }
-if(_965){
-_965.style.marginBottom=this._lastChildContributingMargin+"px";
+if(_8a9){
+_8a9.style.marginBottom=this._lastChildContributingMargin+"px";
 }
 this.editingArea.appendChild(this.iframe);
 if(dojo.render.html.safari){
 this.iframe.src=this.iframe.src;
 }
-var _966=false;
-var _967=dojo.lang.hitch(this,function(){
-if(!_966){
-_966=true;
+var _8aa=false;
+var _8ab=dojo.lang.hitch(this,function(){
+if(!_8aa){
+_8aa=true;
 }else{
 return;
 }
@@ -46767,52 +27265,52 @@
 this.document=this.iframe.contentDocument;
 }
 }
-var _968=(function(_969){
-return function(_96a){
-return dojo.html.getStyle(_969,_96a);
+var _8ac=(function(_8ad){
+return function(_8ae){
+return dojo.html.getStyle(_8ad,_8ae);
 };
 })(this.domNode);
-var font=_968("font-weight")+" "+_968("font-size")+" "+_968("font-family");
-var _96c="1.0";
-var _96d=dojo.html.getUnitValue(this.domNode,"line-height");
-if(_96d.value&&_96d.units==""){
-_96c=_96d.value;
+var font=_8ac("font-weight")+" "+_8ac("font-size")+" "+_8ac("font-family");
+var _8b0="1.0";
+var _8b1=dojo.html.getUnitValue(this.domNode,"line-height");
+if(_8b1.value&&_8b1.units==""){
+_8b0=_8b1.value;
 }
-dojo.html.insertCssText("body,html{background:transparent;padding:0;margin:0;}"+"body{top:0;left:0;right:0;"+(((this.height)||(dojo.render.html.opera))?"":"position:fixed;")+"font:"+font+";"+"min-height:"+this.minHeight+";"+"line-height:"+_96c+"}"+"p{margin: 1em 0 !important;}"+"body > *:first-child{padding-top:0 !important;margin-top:"+this._firstChildContributingMargin+"px !important;}"+"body > *:last-child{padding-bottom:0 !important;margin-bottom:"+this._lastChildContributingMargin+"px !important;}"+"li > ul:-moz-first-node, li > ol:-moz-first-node{padding-top:1.2em;}\n"+"li{min-height:1.2em;}"+"",this.document);
-dojo.html.removeNode(_961);
+dojo.html.insertCssText("body,html{background:transparent;padding:0;margin:0;}"+"body{top:0;left:0;right:0;"+(((this.height)||(dojo.render.html.opera))?"":"position:fixed;")+"font:"+font+";"+"min-height:"+this.minHeight+";"+"line-height:"+_8b0+"}"+"p{margin: 1em 0 !important;}"+"body > *:first-child{padding-top:0 !important;margin-top:"+this._firstChildContributingMargin+"px !important;}"+"body > *:last-child{padding-bottom:0 !important;margin-bottom:"+this._lastChildContributingMargin+"px !important;}"+"li > ul:-moz-first-node, li > ol:-moz-first-node{padding-top:1.2em;}\n"+"li{min-height:1.2em;}"+"",this.document);
+dojo.html.removeNode(_8a5);
 this.document.body.innerHTML=html;
-if(_95e||dojo.render.html.safari){
+if(_8a2||dojo.render.html.safari){
 this.document.designMode="on";
 }
 this.onLoad();
 }else{
-dojo.html.removeNode(_961);
+dojo.html.removeNode(_8a5);
 this.editNode.innerHTML=html;
 this.onDisplayChanged();
 }
 });
 if(this.editNode){
-_967();
+_8ab();
 }else{
 if(dojo.render.html.moz){
 this.iframe.onload=function(){
-setTimeout(_967,250);
+setTimeout(_8ab,250);
 };
 }else{
-this.iframe.onload=_967;
+this.iframe.onload=_8ab;
 }
 }
 },_applyEditingAreaStyleSheets:function(){
-var _96e=[];
+var _8b2=[];
 if(this.styleSheets){
-_96e=this.styleSheets.split(";");
+_8b2=this.styleSheets.split(";");
 this.styleSheets="";
 }
-_96e=_96e.concat(this.editingAreaStyleSheets);
+_8b2=_8b2.concat(this.editingAreaStyleSheets);
 this.editingAreaStyleSheets=[];
-if(_96e.length>0){
-for(var i=0;i<_96e.length;i++){
-var url=_96e[i];
+if(_8b2.length>0){
+for(var i=0;i<_8b2.length;i++){
+var url=_8b2[i];
 if(url){
 this.addStyleSheet(dojo.uri.dojoUri(url));
 }
@@ -46832,32 +27330,32 @@
 this.document.createStyleSheet(url);
 }else{
 var head=this.document.getElementsByTagName("head")[0];
-var _974=this.document.createElement("link");
-with(_974){
+var _8b8=this.document.createElement("link");
+with(_8b8){
 rel="stylesheet";
 type="text/css";
 href=url;
 }
-head.appendChild(_974);
+head.appendChild(_8b8);
 }
 },removeStyleSheet:function(uri){
 var url=uri.toString();
 if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){
 url=(new dojo.uri.Uri(dojo.global().location,url)).toString();
 }
-var _977=dojo.lang.find(this.editingAreaStyleSheets,url);
-if(_977==-1){
+var _8bb=dojo.lang.find(this.editingAreaStyleSheets,url);
+if(_8bb==-1){
 dojo.debug("dojo.widget.RichText.removeStyleSheet: Style sheet "+url+" is not applied to the editing area so it can not be removed!");
 return;
 }
-delete this.editingAreaStyleSheets[_977];
-var _978=this.document.getElementsByTagName("link");
-for(var i=0;i<_978.length;i++){
-if(_978[i].href==url){
+delete this.editingAreaStyleSheets[_8bb];
+var _8bc=this.document.getElementsByTagName("link");
+for(var i=0;i<_8bc.length;i++){
+if(_8bc[i].href==url){
 if(dojo.render.html.ie){
-_978[i].href="";
+_8bc[i].href="";
 }
-dojo.html.removeNode(_978[i]);
+dojo.html.removeNode(_8bc[i]);
 break;
 }
 }
@@ -46881,7 +27379,7 @@
 },_local2NativeFormatNames:{},_native2LocalFormatNames:{},_cacheLocalBlockFormatNames:function(){
 if(!this._native2LocalFormatNames["p"]){
 var obj=this.object;
-var _97d=false;
+var _8c1=false;
 if(!obj){
 try{
 obj=dojo.html.createExternalElement(dojo.doc(),"object");
@@ -46890,30 +27388,30 @@
 obj.DocumentHTML="<html><head></head><body></body></html>";
 }
 catch(e){
-_97d=true;
+_8c1=true;
 }
 }
 try{
-var _97e=new ActiveXObject("DEGetBlockFmtNamesParam.DEGetBlockFmtNamesParam");
-obj.ExecCommand(this._activeX.command["getblockformatnames"],0,_97e);
-var _97f=new VBArray(_97e.Names);
-var _980=_97f.toArray();
-var _981=["p","pre","address","h1","h2","h3","h4","h5","h6","ol","ul","","","","","div"];
-for(var i=0;i<_981.length;++i){
-if(_981[i].length>0){
-this._local2NativeFormatNames[_980[i]]=_981[i];
-this._native2LocalFormatNames[_981[i]]=_980[i];
+var _8c2=new ActiveXObject("DEGetBlockFmtNamesParam.DEGetBlockFmtNamesParam");
+obj.ExecCommand(this._activeX.command["getblockformatnames"],0,_8c2);
+var _8c3=new VBArray(_8c2.Names);
+var _8c4=_8c3.toArray();
+var _8c5=["p","pre","address","h1","h2","h3","h4","h5","h6","ol","ul","","","","","div"];
+for(var i=0;i<_8c5.length;++i){
+if(_8c5[i].length>0){
+this._local2NativeFormatNames[_8c4[i]]=_8c5[i];
+this._native2LocalFormatNames[_8c5[i]]=_8c4[i];
 }
 }
 }
 catch(e){
-_97d=true;
+_8c1=true;
 }
 if(obj&&!this.object){
 dojo.body().removeChild(obj);
 }
 }
-return !_97d;
+return !_8c1;
 },_isResized:function(){
 return false;
 },onLoad:function(e){
@@ -46947,15 +27445,15 @@
 }else{
 if(dojo.render.html.mozilla||dojo.render.html.opera){
 var doc=this.document;
-var _985=dojo.event.browser.addListener;
+var _8c9=dojo.event.browser.addListener;
 var self=this;
 dojo.lang.forEach(this.events,function(e){
-var l=_985(self.document,e.substr(2).toLowerCase(),dojo.lang.hitch(self,e));
+var l=_8c9(self.document,e.substr(2).toLowerCase(),dojo.lang.hitch(self,e));
 if(e=="onBlur"){
-var _989={unBlur:function(e){
+var _8cd={unBlur:function(e){
 dojo.event.browser.removeListener(doc,"blur",l);
 }};
-dojo.event.connect("before",self,"close",_989,"unBlur");
+dojo.event.connect("before",self,"close",_8cd,"unBlur");
 }
 });
 }
@@ -46999,23 +27497,23 @@
 if((!e)&&(this.object)){
 e=dojo.event.browser.fixEvent(this.window.event);
 }
-var _98e=e.ctrlKey?this.KEY_CTRL:0;
+var _8d2=e.ctrlKey?this.KEY_CTRL:0;
 if(this._keyHandlers[e.key]){
-var _98f=this._keyHandlers[e.key],i=0,_991;
-while(_991=_98f[i++]){
-if(_98e==_991.modifiers){
+var _8d3=this._keyHandlers[e.key],i=0,_8d5;
+while(_8d5=_8d3[i++]){
+if(_8d2==_8d5.modifiers){
 e.preventDefault();
-_991.handler.call(this);
+_8d5.handler.call(this);
 break;
 }
 }
 }
 dojo.lang.setTimeout(this,this.onKeyPressed,1,e);
-},addKeyHandler:function(key,_993,_994){
+},addKeyHandler:function(key,_8d7,_8d8){
 if(!(this._keyHandlers[key] instanceof Array)){
 this._keyHandlers[key]=[];
 }
-this._keyHandlers[key].push({modifiers:_993||0,handler:_994});
+this._keyHandlers[key].push({modifiers:_8d7||0,handler:_8d8});
 },onKeyPressed:function(e){
 this.onDisplayChanged();
 },onClick:function(e){
@@ -47057,50 +27555,50 @@
 },onDisplayChanged:function(e){
 },_activeX:{command:{bold:5000,italic:5023,underline:5048,justifycenter:5024,justifyleft:5025,justifyright:5026,cut:5003,copy:5002,paste:5032,"delete":5004,undo:5049,redo:5033,removeformat:5034,selectall:5035,unlink:5050,indent:5018,outdent:5031,insertorderedlist:5030,insertunorderedlist:5051,inserttable:5022,insertcell:5019,insertcol:5020,insertrow:5021,deletecells:5005,deletecols:5006,deleterows:5007,mergecells:5029,splitcell:5047,setblockformat:5043,getblockformat:5011,getblockformatnames:5012,setfontname:5044,getfontname:5013,setfontsize:5045,getfontsize:5014,setbackcolor:5042,getbackcolor:5010,setforecolor:5046,getforecolor:5015,findtext:5008,font:5009,hyperlink:5016,image:5017,lockelement:5027,makeabsolute:5028,sendbackward:5036,bringforward:5037,sendbelowtext:5038,bringabovetext:5039,sendtoback:5040,bringtofront:5041,properties:5052},ui:{"default":0,prompt:1,noprompt:2},status:{notsupported:0,disabled:1,enabled:3,latched:7,ninched:11},appearance:{flat:0,inset:1},state:{unchecked:0,checked:1,gray:2}},_normalizeCommand:function(cmd){
 var drh=dojo.render.html;
-var _99c=cmd.toLowerCase();
-if(_99c=="formatblock"){
+var _8e0=cmd.toLowerCase();
+if(_8e0=="formatblock"){
 if(drh.safari){
-_99c="heading";
+_8e0="heading";
 }
 }else{
 if(this.object){
-switch(_99c){
+switch(_8e0){
 case "createlink":
-_99c="hyperlink";
+_8e0="hyperlink";
 break;
 case "insertimage":
-_99c="image";
+_8e0="image";
 break;
 }
 }else{
-if(_99c=="hilitecolor"&&!drh.mozilla){
-_99c="backcolor";
+if(_8e0=="hilitecolor"&&!drh.mozilla){
+_8e0="backcolor";
 }
 }
 }
-return _99c;
+return _8e0;
 },_safariIsLeopard:function(){
-var _99d=false;
+var _8e1=false;
 if(dojo.render.html.safari){
 var tmp=dojo.render.html.UA.split("AppleWebKit/")[1];
 var ver=parseFloat(tmp.split(" ")[0]);
 if(ver>=420){
-_99d=true;
+_8e1=true;
 }
 }
-return _99d;
-},queryCommandAvailable:function(_9a0){
+return _8e1;
+},queryCommandAvailable:function(_8e4){
 var ie=1;
-var _9a2=1<<1;
-var _9a3=1<<2;
-var _9a4=1<<3;
-var _9a5=1<<4;
-var _9a6=this._safariIsLeopard();
-function isSupportedBy(_9a7){
-return {ie:Boolean(_9a7&ie),mozilla:Boolean(_9a7&_9a2),safari:Boolean(_9a7&_9a3),safari420:Boolean(_9a7&_9a5),opera:Boolean(_9a7&_9a4)};
+var _8e6=1<<1;
+var _8e7=1<<2;
+var _8e8=1<<3;
+var _8e9=1<<4;
+var _8ea=this._safariIsLeopard();
+function isSupportedBy(_8eb){
+return {ie:Boolean(_8eb&ie),mozilla:Boolean(_8eb&_8e6),safari:Boolean(_8eb&_8e7),safari420:Boolean(_8eb&_8e9),opera:Boolean(_8eb&_8e8)};
 }
-var _9a8=null;
-switch(_9a0.toLowerCase()){
+var _8ec=null;
+switch(_8e4.toLowerCase()){
 case "bold":
 case "italic":
 case "underline":
@@ -47116,7 +27614,7 @@
 case "justifyright":
 case "delete":
 case "selectall":
-_9a8=isSupportedBy(_9a2|ie|_9a3|_9a4);
+_8ec=isSupportedBy(_8e6|ie|_8e7|_8e8);
 break;
 case "createlink":
 case "unlink":
@@ -47132,7 +27630,7 @@
 case "undo":
 case "redo":
 case "strikethrough":
-_9a8=isSupportedBy(_9a2|ie|_9a4|_9a5);
+_8ec=isSupportedBy(_8e6|ie|_8e8|_8e9);
 break;
 case "blockdirltr":
 case "blockdirrtl":
@@ -47140,15 +27638,15 @@
 case "dirrtl":
 case "inlinedirltr":
 case "inlinedirrtl":
-_9a8=isSupportedBy(ie);
+_8ec=isSupportedBy(ie);
 break;
 case "cut":
 case "copy":
 case "paste":
-_9a8=isSupportedBy(ie|_9a2|_9a5);
+_8ec=isSupportedBy(ie|_8e6|_8e9);
 break;
 case "inserttable":
-_9a8=isSupportedBy(_9a2|(this.object?ie:0));
+_8ec=isSupportedBy(_8e6|(this.object?ie:0));
 break;
 case "insertcell":
 case "insertcol":
@@ -47158,116 +27656,116 @@
 case "deleterows":
 case "mergecells":
 case "splitcell":
-_9a8=isSupportedBy(this.object?ie:0);
+_8ec=isSupportedBy(this.object?ie:0);
 break;
 default:
 return false;
 }
-return (dojo.render.html.ie&&_9a8.ie)||(dojo.render.html.mozilla&&_9a8.mozilla)||(dojo.render.html.safari&&_9a8.safari)||(_9a6&&_9a8.safari420)||(dojo.render.html.opera&&_9a8.opera);
-},execCommand:function(_9a9,_9aa){
-var _9ab;
+return (dojo.render.html.ie&&_8ec.ie)||(dojo.render.html.mozilla&&_8ec.mozilla)||(dojo.render.html.safari&&_8ec.safari)||(_8ea&&_8ec.safari420)||(dojo.render.html.opera&&_8ec.opera);
+},execCommand:function(_8ed,_8ee){
+var _8ef;
 this.focus();
-_9a9=this._normalizeCommand(_9a9);
-if(_9aa!=undefined){
-if(_9a9=="heading"){
+_8ed=this._normalizeCommand(_8ed);
+if(_8ee!=undefined){
+if(_8ed=="heading"){
 throw new Error("unimplemented");
 }else{
-if(_9a9=="formatblock"){
+if(_8ed=="formatblock"){
 if(this.object){
-_9aa=this._native2LocalFormatNames[_9aa];
+_8ee=this._native2LocalFormatNames[_8ee];
 }else{
 if(dojo.render.html.ie){
-_9aa="<"+_9aa+">";
+_8ee="<"+_8ee+">";
 }
 }
 }
 }
 }
 if(this.object){
-switch(_9a9){
+switch(_8ed){
 case "hilitecolor":
-_9a9="setbackcolor";
+_8ed="setbackcolor";
 break;
 case "forecolor":
 case "backcolor":
 case "fontsize":
 case "fontname":
-_9a9="set"+_9a9;
+_8ed="set"+_8ed;
 break;
 case "formatblock":
-_9a9="setblockformat";
+_8ed="setblockformat";
 }
-if(_9a9=="strikethrough"){
-_9a9="inserthtml";
-var _9ac=this.document.selection.createRange();
-if(!_9ac.htmlText){
+if(_8ed=="strikethrough"){
+_8ed="inserthtml";
+var _8f0=this.document.selection.createRange();
+if(!_8f0.htmlText){
 return;
 }
-_9aa=_9ac.htmlText.strike();
+_8ee=_8f0.htmlText.strike();
 }else{
-if(_9a9=="inserthorizontalrule"){
-_9a9="inserthtml";
-_9aa="<hr>";
+if(_8ed=="inserthorizontalrule"){
+_8ed="inserthtml";
+_8ee="<hr>";
 }
 }
-if(_9a9=="inserthtml"){
-var _9ac=this.document.selection.createRange();
+if(_8ed=="inserthtml"){
+var _8f0=this.document.selection.createRange();
 if(this.document.selection.type.toUpperCase()=="CONTROL"){
-for(var i=0;i<_9ac.length;i++){
-_9ac.item(i).outerHTML=_9aa;
+for(var i=0;i<_8f0.length;i++){
+_8f0.item(i).outerHTML=_8ee;
 }
 }else{
-_9ac.pasteHTML(_9aa);
-_9ac.select();
+_8f0.pasteHTML(_8ee);
+_8f0.select();
 }
-_9ab=true;
+_8ef=true;
 }else{
 if(arguments.length==1){
-_9ab=this.object.ExecCommand(this._activeX.command[_9a9],this._activeX.ui.noprompt);
+_8ef=this.object.ExecCommand(this._activeX.command[_8ed],this._activeX.ui.noprompt);
 }else{
-_9ab=this.object.ExecCommand(this._activeX.command[_9a9],this._activeX.ui.noprompt,_9aa);
+_8ef=this.object.ExecCommand(this._activeX.command[_8ed],this._activeX.ui.noprompt,_8ee);
 }
 }
 }else{
-if(_9a9=="inserthtml"){
+if(_8ed=="inserthtml"){
 if(dojo.render.html.ie){
-var _9ae=this.document.selection.createRange();
-_9ae.pasteHTML(_9aa);
-_9ae.select();
+var _8f2=this.document.selection.createRange();
+_8f2.pasteHTML(_8ee);
+_8f2.select();
 return true;
 }else{
-return this.document.execCommand(_9a9,false,_9aa);
+return this.document.execCommand(_8ed,false,_8ee);
 }
 }else{
-if((_9a9=="unlink")&&(this.queryCommandEnabled("unlink"))&&(dojo.render.html.mozilla)){
-var _9af=this.window.getSelection();
-var _9b0=_9af.getRangeAt(0);
-var _9b1=_9b0.startContainer;
-var _9b2=_9b0.startOffset;
-var _9b3=_9b0.endContainer;
-var _9b4=_9b0.endOffset;
+if((_8ed=="unlink")&&(this.queryCommandEnabled("unlink"))&&(dojo.render.html.mozilla)){
+var _8f3=this.window.getSelection();
+var _8f4=_8f3.getRangeAt(0);
+var _8f5=_8f4.startContainer;
+var _8f6=_8f4.startOffset;
+var _8f7=_8f4.endContainer;
+var _8f8=_8f4.endOffset;
 var a=dojo.withGlobal(this.window,"getAncestorElement",dojo.html.selection,["a"]);
 dojo.withGlobal(this.window,"selectElement",dojo.html.selection,[a]);
-_9ab=this.document.execCommand("unlink",false,null);
-var _9b0=this.document.createRange();
-_9b0.setStart(_9b1,_9b2);
-_9b0.setEnd(_9b3,_9b4);
-_9af.removeAllRanges();
-_9af.addRange(_9b0);
-return _9ab;
+_8ef=this.document.execCommand("unlink",false,null);
+var _8f4=this.document.createRange();
+_8f4.setStart(_8f5,_8f6);
+_8f4.setEnd(_8f7,_8f8);
+_8f3.removeAllRanges();
+_8f3.addRange(_8f4);
+return _8ef;
 }else{
-if((_9a9=="hilitecolor")&&(dojo.render.html.mozilla)){
+if((_8ed=="hilitecolor")&&(dojo.render.html.mozilla)){
 this.document.execCommand("useCSS",false,false);
-_9ab=this.document.execCommand(_9a9,false,_9aa);
+_8ef=this.document.execCommand(_8ed,false,_8ee);
 this.document.execCommand("useCSS",false,true);
 }else{
-if((dojo.render.html.ie)&&((_9a9=="backcolor")||(_9a9=="forecolor"))){
-_9aa=arguments.length>1?_9aa:null;
-_9ab=this.document.execCommand(_9a9,false,_9aa);
+if((dojo.render.html.ie)&&((_8ed=="backcolor")||(_8ed=="forecolor"))){
+_8ee=arguments.length>1?_8ee:null;
+_8ef=this.document.execCommand(_8ed,false,_8ee);
 }else{
-_9aa=arguments.length>1?_9aa:null;
-if(_9aa||_9a9!="createlink"){
-_9ab=this.document.execCommand(_9a9,false,_9aa);
+_8ee=arguments.length>1?_8ee:null;
+if(_8ee||_8ed!="createlink"){
+_8ef=this.document.execCommand(_8ed,false,_8ee);
 }
 }
 }
@@ -47275,94 +27773,94 @@
 }
 }
 this.onDisplayChanged();
-return _9ab;
-},queryCommandEnabled:function(_9b6){
-_9b6=this._normalizeCommand(_9b6);
+return _8ef;
+},queryCommandEnabled:function(_8fa){
+_8fa=this._normalizeCommand(_8fa);
 if(this.object){
-switch(_9b6){
+switch(_8fa){
 case "hilitecolor":
-_9b6="setbackcolor";
+_8fa="setbackcolor";
 break;
 case "forecolor":
 case "backcolor":
 case "fontsize":
 case "fontname":
-_9b6="set"+_9b6;
+_8fa="set"+_8fa;
 break;
 case "formatblock":
-_9b6="setblockformat";
+_8fa="setblockformat";
 break;
 case "strikethrough":
-_9b6="bold";
+_8fa="bold";
 break;
 case "inserthorizontalrule":
 return true;
 }
-if(typeof this._activeX.command[_9b6]=="undefined"){
+if(typeof this._activeX.command[_8fa]=="undefined"){
 return false;
 }
-var _9b7=this.object.QueryStatus(this._activeX.command[_9b6]);
-return ((_9b7!=this._activeX.status.notsupported)&&(_9b7!=this._activeX.status.disabled));
+var _8fb=this.object.QueryStatus(this._activeX.command[_8fa]);
+return ((_8fb!=this._activeX.status.notsupported)&&(_8fb!=this._activeX.status.disabled));
 }else{
 if(dojo.render.html.mozilla){
-if(_9b6=="unlink"){
+if(_8fa=="unlink"){
 return dojo.withGlobal(this.window,"hasAncestorElement",dojo.html.selection,["a"]);
 }else{
-if(_9b6=="inserttable"){
+if(_8fa=="inserttable"){
 return true;
 }
 }
 }
 var elem=(dojo.render.html.ie)?this.document.selection.createRange():this.document;
-return elem.queryCommandEnabled(_9b6);
+return elem.queryCommandEnabled(_8fa);
 }
-},queryCommandState:function(_9b9){
-_9b9=this._normalizeCommand(_9b9);
+},queryCommandState:function(_8fd){
+_8fd=this._normalizeCommand(_8fd);
 if(this.object){
-if(_9b9=="forecolor"){
-_9b9="setforecolor";
+if(_8fd=="forecolor"){
+_8fd="setforecolor";
 }else{
-if(_9b9=="backcolor"){
-_9b9="setbackcolor";
+if(_8fd=="backcolor"){
+_8fd="setbackcolor";
 }else{
-if(_9b9=="strikethrough"){
+if(_8fd=="strikethrough"){
 return dojo.withGlobal(this.window,"hasAncestorElement",dojo.html.selection,["strike"]);
 }else{
-if(_9b9=="inserthorizontalrule"){
+if(_8fd=="inserthorizontalrule"){
 return false;
 }
 }
 }
 }
-if(typeof this._activeX.command[_9b9]=="undefined"){
+if(typeof this._activeX.command[_8fd]=="undefined"){
 return null;
 }
-var _9ba=this.object.QueryStatus(this._activeX.command[_9b9]);
-return ((_9ba==this._activeX.status.latched)||(_9ba==this._activeX.status.ninched));
+var _8fe=this.object.QueryStatus(this._activeX.command[_8fd]);
+return ((_8fe==this._activeX.status.latched)||(_8fe==this._activeX.status.ninched));
 }else{
-return this.document.queryCommandState(_9b9);
+return this.document.queryCommandState(_8fd);
 }
-},queryCommandValue:function(_9bb){
-_9bb=this._normalizeCommand(_9bb);
+},queryCommandValue:function(_8ff){
+_8ff=this._normalizeCommand(_8ff);
 if(this.object){
-switch(_9bb){
+switch(_8ff){
 case "forecolor":
 case "backcolor":
 case "fontsize":
 case "fontname":
-_9bb="get"+_9bb;
-return this.object.execCommand(this._activeX.command[_9bb],this._activeX.ui.noprompt);
+_8ff="get"+_8ff;
+return this.object.execCommand(this._activeX.command[_8ff],this._activeX.ui.noprompt);
 case "formatblock":
-var _9bc=this.object.execCommand(this._activeX.command["getblockformat"],this._activeX.ui.noprompt);
-if(_9bc){
-return this._local2NativeFormatNames[_9bc];
+var _900=this.object.execCommand(this._activeX.command["getblockformat"],this._activeX.ui.noprompt);
+if(_900){
+return this._local2NativeFormatNames[_900];
 }
 }
 }else{
-if(dojo.render.html.ie&&_9bb=="formatblock"){
-return this._local2NativeFormatNames[this.document.queryCommandValue(_9bb)]||this.document.queryCommandValue(_9bb);
+if(dojo.render.html.ie&&_8ff=="formatblock"){
+return this._local2NativeFormatNames[this.document.queryCommandValue(_8ff)]||this.document.queryCommandValue(_8ff);
 }
-return this.document.queryCommandValue(_9bb);
+return this.document.queryCommandValue(_8ff);
 }
 },placeCursorAtStart:function(){
 this.focus();
@@ -47435,20 +27933,20 @@
 if(this.height){
 return;
 }
-var _9c8=dojo.html.getBorderBox(this.editNode).height;
-if(!_9c8){
-_9c8=dojo.html.getBorderBox(this.document.body).height;
+var _90c=dojo.html.getBorderBox(this.editNode).height;
+if(!_90c){
+_90c=dojo.html.getBorderBox(this.document.body).height;
 }
-if(_9c8==0){
+if(_90c==0){
 dojo.debug("Can not figure out the height of the editing area!");
 return;
 }
-this._lastHeight=_9c8;
+this._lastHeight=_90c;
 this.editorObject.style.height=this._lastHeight+"px";
 this.window.scrollTo(0,0);
 },_saveContent:function(e){
-var _9ca=dojo.doc().getElementById("dojo.widget.RichText.savedContent");
-_9ca.value+=this._SEPARATOR+this.saveName+":"+this.getEditorContent();
+var _90e=dojo.doc().getElementById("dojo.widget.RichText.savedContent");
+_90e.value+=this._SEPARATOR+this.saveName+":"+this.getEditorContent();
 },getEditorContent:function(){
 var ec="";
 try{
@@ -47465,21 +27963,21 @@
 }
 ec=this._postFilterContent(ec);
 if(this.relativeImageUrls){
-var _9cd=dojo.global().location.protocol+"//"+dojo.global().location.host;
-var _9ce=dojo.global().location.pathname;
-if(_9ce.match(/\/$/)){
+var _911=dojo.global().location.protocol+"//"+dojo.global().location.host;
+var _912=dojo.global().location.pathname;
+if(_912.match(/\/$/)){
 }else{
-var _9cf=_9ce.split("/");
-if(_9cf.length){
-_9cf.pop();
+var _913=_912.split("/");
+if(_913.length){
+_913.pop();
 }
-_9ce=_9cf.join("/")+"/";
+_912=_913.join("/")+"/";
 }
-var _9d0=new RegExp("(<img[^>]* src=[\"'])("+_9cd+"("+_9ce+")?)","ig");
-ec=ec.replace(_9d0,"$1");
+var _914=new RegExp("(<img[^>]* src=[\"'])("+_911+"("+_912+")?)","ig");
+ec=ec.replace(_914,"$1");
 }
 return ec;
-},close:function(save,_9d2){
+},close:function(save,_916){
 if(this.isClosed){
 return false;
 }
@@ -47487,7 +27985,7 @@
 save=true;
 }
 this._content=this._postFilterContent(this.editNode.innerHTML);
-var _9d3=(this.savedContent!=this._content);
+var _917=(this.savedContent!=this._content);
 if(this.interval){
 clearInterval(this.interval);
 }
@@ -47538,7 +28036,7 @@
 this.object=null;
 this.editingArea=null;
 this.editorObject=null;
-return _9d3;
+return _917;
 },destroyRendering:function(){
 },destroy:function(){
 this.destroyRendering();
@@ -47546,11 +28044,11 @@
 this.close(false);
 }
 dojo.widget.RichText.superclass.destroy.call(this);
-},connect:function(_9d5,_9d6,_9d7){
-dojo.event.connect(_9d5,_9d6,this,_9d7);
-},disconnect:function(_9d8,_9d9,_9da){
-dojo.event.disconnect(_9d8,_9d9,this,_9da);
-},disconnectAllWithRoot:function(_9db){
+},connect:function(_919,_91a,_91b){
+dojo.event.connect(_919,_91a,this,_91b);
+},disconnect:function(_91c,_91d,_91e){
+dojo.event.disconnect(_91c,_91d,this,_91e);
+},disconnectAllWithRoot:function(_91f){
 dojo.deprecated("disconnectAllWithRoot","is deprecated. No need to disconnect manually","0.5");
 },_fixContentForMoz:function(html){
 html=html.replace(/<strong([ \>])/gi,"<b$1");
@@ -47559,455 +28057,41 @@
 html=html.replace(/<\/em>/gi,"</i>");
 return html;
 }});
-dojo.provide("dojo.widget.ColorPalette");
-dojo.widget.defineWidget("dojo.widget.ColorPalette",dojo.widget.HtmlWidget,{palette:"7x10",_palettes:{"7x10":[["fff","fcc","fc9","ff9","ffc","9f9","9ff","cff","ccf","fcf"],["ccc","f66","f96","ff6","ff3","6f9","3ff","6ff","99f","f9f"],["c0c0c0","f00","f90","fc6","ff0","3f3","6cc","3cf","66c","c6c"],["999","c00","f60","fc3","fc0","3c0","0cc","36f","63f","c3c"],["666","900","c60","c93","990","090","399","33f","60c","939"],["333","600","930","963","660","060","366","009","339","636"],["000","300","630","633","330","030","033","006","309","303"]],"3x4":[["ffffff","00ff00","008000","0000ff"],["c0c0c0","ffff00","ff00ff","000080"],["808080","ff0000","800080","000000"]]},buildRendering:function(){
-this.domNode=document.createElement("table");
-dojo.html.disableSelection(this.domNode);
-dojo.event.connect(this.domNode,"onmousedown",function(e){
-e.preventDefault();
-});
-with(this.domNode){
-cellPadding="0";
-cellSpacing="1";
-border="1";
-style.backgroundColor="white";
-}
-var _9de=this._palettes[this.palette];
-for(var i=0;i<_9de.length;i++){
-var tr=this.domNode.insertRow(-1);
-for(var j=0;j<_9de[i].length;j++){
-if(_9de[i][j].length==3){
-_9de[i][j]=_9de[i][j].replace(/(.)(.)(.)/,"$1$1$2$2$3$3");
-}
-var td=tr.insertCell(-1);
-with(td.style){
-backgroundColor="#"+_9de[i][j];
-border="1px solid gray";
-width=height="15px";
-fontSize="1px";
-}
-td.color="#"+_9de[i][j];
-td.onmouseover=function(e){
-this.style.borderColor="white";
-};
-td.onmouseout=function(e){
-this.style.borderColor="gray";
-};
-dojo.event.connect(td,"onmousedown",this,"onClick");
-td.innerHTML="&nbsp;";
-}
-}
-},onClick:function(e){
-this.onColorSelect(e.currentTarget.color);
-e.currentTarget.style.borderColor="gray";
-},onColorSelect:function(_9e6){
-}});
-dojo.provide("dojo.widget.Editor");
-dojo.deprecated("dojo.widget.Editor","is replaced by dojo.widget.Editor2","0.5");
-dojo.widget.tags.addParseTreeHandler("dojo:Editor");
-dojo.widget.Editor=function(){
-dojo.widget.HtmlWidget.call(this);
-this.contentFilters=[];
-this._toolbars=[];
-};
-dojo.inherits(dojo.widget.Editor,dojo.widget.HtmlWidget);
-dojo.widget.Editor.itemGroups={textGroup:["bold","italic","underline","strikethrough"],blockGroup:["formatBlock","fontName","fontSize"],justifyGroup:["justifyleft","justifycenter","justifyright"],commandGroup:["save","cancel"],colorGroup:["forecolor","hilitecolor"],listGroup:["insertorderedlist","insertunorderedlist"],indentGroup:["outdent","indent"],linkGroup:["createlink","insertimage","inserthorizontalrule"]};
-dojo.widget.Editor.formatBlockValues={"Normal":"p","Main heading":"h2","Sub heading":"h3","Sub sub heading":"h4","Preformatted":"pre"};
-dojo.widget.Editor.fontNameValues={"Arial":"Arial, Helvetica, sans-serif","Verdana":"Verdana, sans-serif","Times New Roman":"Times New Roman, serif","Courier":"Courier New, monospace"};
-dojo.widget.Editor.fontSizeValues={"1 (8 pt)":"1","2 (10 pt)":"2","3 (12 pt)":"3","4 (14 pt)":"4","5 (18 pt)":"5","6 (24 pt)":"6","7 (36 pt)":"7"};
-dojo.widget.Editor.defaultItems=["commandGroup","|","blockGroup","|","textGroup","|","colorGroup","|","justifyGroup","|","listGroup","indentGroup","|","linkGroup"];
-dojo.widget.Editor.supportedCommands=["save","cancel","|","-","/"," "];
-dojo.lang.extend(dojo.widget.Editor,{widgetType:"Editor",saveUrl:"",saveMethod:"post",saveArgName:"editorContent",closeOnSave:false,items:dojo.widget.Editor.defaultItems,formatBlockItems:dojo.lang.shallowCopy(dojo.widget.Editor.formatBlockValues),fontNameItems:dojo.lang.shallowCopy(dojo.widget.Editor.fontNameValues),fontSizeItems:dojo.lang.shallowCopy(dojo.widget.Editor.fontSizeValues),getItemProperties:function(name){
-var _9e8={};
-switch(name.toLowerCase()){
-case "bold":
-case "italic":
-case "underline":
-case "strikethrough":
-_9e8.toggleItem=true;
-break;
-case "justifygroup":
-_9e8.defaultButton="justifyleft";
-_9e8.preventDeselect=true;
-_9e8.buttonGroup=true;
-break;
-case "listgroup":
-_9e8.buttonGroup=true;
-break;
-case "save":
-case "cancel":
-_9e8.label=dojo.string.capitalize(name);
-break;
-case "forecolor":
-case "hilitecolor":
-_9e8.name=name;
-_9e8.toggleItem=true;
-_9e8.icon=this.getCommandImage(name);
-break;
-case "formatblock":
-_9e8.name="formatBlock";
-_9e8.values=this.formatBlockItems;
-break;
-case "fontname":
-_9e8.name="fontName";
-_9e8.values=this.fontNameItems;
-case "fontsize":
-_9e8.name="fontSize";
-_9e8.values=this.fontSizeItems;
-}
-return _9e8;
-},validateItems:true,focusOnLoad:true,minHeight:"1em",_richText:null,_richTextType:"RichText",_toolbarContainer:null,_toolbarContainerType:"ToolbarContainer",_toolbars:[],_toolbarType:"Toolbar",_toolbarItemType:"ToolbarItem",buildRendering:function(args,frag){
-var node=frag["dojo:"+this.widgetType.toLowerCase()]["nodeRef"];
-var trt=dojo.widget.createWidget(this._richTextType,{focusOnLoad:this.focusOnLoad,minHeight:this.minHeight},node);
-var _9ed=this;
-setTimeout(function(){
-_9ed.setRichText(trt);
-_9ed.initToolbar();
-_9ed.fillInTemplate(args,frag);
-},0);
-},setRichText:function(_9ee){
-if(this._richText&&this._richText==_9ee){
-dojo.debug("Already set the richText to this richText!");
-return;
-}
-if(this._richText&&!this._richText.isClosed){
-dojo.debug("You are switching richTexts yet you haven't closed the current one. Losing reference!");
-}
-this._richText=_9ee;
-dojo.event.connect(this._richText,"close",this,"onClose");
-dojo.event.connect(this._richText,"onLoad",this,"onLoad");
-dojo.event.connect(this._richText,"onDisplayChanged",this,"updateToolbar");
-if(this._toolbarContainer){
-this._toolbarContainer.enable();
-this.updateToolbar(true);
-}
-},initToolbar:function(){
-if(this._toolbarContainer){
-return;
-}
-this._toolbarContainer=dojo.widget.createWidget(this._toolbarContainerType);
-var tb=this.addToolbar();
-var last=true;
-for(var i=0;i<this.items.length;i++){
-if(this.items[i]=="\n"){
-tb=this.addToolbar();
-}else{
-if((this.items[i]=="|")&&(!last)){
-last=true;
-}else{
-last=this.addItem(this.items[i],tb);
-}
-}
-}
-this.insertToolbar(this._toolbarContainer.domNode,this._richText.domNode);
-},insertToolbar:function(_9f2,_9f3){
-dojo.html.insertBefore(_9f2,_9f3);
-},addToolbar:function(_9f4){
-this.initToolbar();
-if(!(_9f4 instanceof dojo.widget.Toolbar)){
-_9f4=dojo.widget.createWidget(this._toolbarType);
-}
-this._toolbarContainer.addChild(_9f4);
-this._toolbars.push(_9f4);
-return _9f4;
-},addItem:function(item,tb,_9f7){
-if(!tb){
-tb=this._toolbars[0];
-}
-var cmd=((item)&&(!dojo.lang.isUndefined(item["getValue"])))?cmd=item["getValue"]():item;
-var _9f9=dojo.widget.Editor.itemGroups;
-if(item instanceof dojo.widget.ToolbarItem){
-tb.addChild(item);
-}else{
-if(_9f9[cmd]){
-var _9fa=_9f9[cmd];
-var _9fb=true;
-if(cmd=="justifyGroup"||cmd=="listGroup"){
-var _9fc=[cmd];
-for(var i=0;i<_9fa.length;i++){
-if(_9f7||this.isSupportedCommand(_9fa[i])){
-_9fc.push(this.getCommandImage(_9fa[i]));
-}else{
-_9fb=false;
-}
-}
-if(_9fc.length){
-var btn=tb.addChild(_9fc,null,this.getItemProperties(cmd));
-dojo.event.connect(btn,"onClick",this,"_action");
-dojo.event.connect(btn,"onChangeSelect",this,"_action");
-}
-return _9fb;
-}else{
-for(var i=0;i<_9fa.length;i++){
-if(!this.addItem(_9fa[i],tb)){
-_9fb=false;
-}
-}
-return _9fb;
-}
-}else{
-if((!_9f7)&&(!this.isSupportedCommand(cmd))){
-return false;
-}
-if(_9f7||this.isSupportedCommand(cmd)){
-cmd=cmd.toLowerCase();
-if(cmd=="formatblock"){
-var _9ff=dojo.widget.createWidget("ToolbarSelect",{name:"formatBlock",values:this.formatBlockItems});
-tb.addChild(_9ff);
-var _a00=this;
-dojo.event.connect(_9ff,"onSetValue",function(item,_a02){
-_a00.onAction("formatBlock",_a02);
-});
-}else{
-if(cmd=="fontname"){
-var _9ff=dojo.widget.createWidget("ToolbarSelect",{name:"fontName",values:this.fontNameItems});
-tb.addChild(_9ff);
-dojo.event.connect(_9ff,"onSetValue",dojo.lang.hitch(this,function(item,_a04){
-this.onAction("fontName",_a04);
-}));
-}else{
-if(cmd=="fontsize"){
-var _9ff=dojo.widget.createWidget("ToolbarSelect",{name:"fontSize",values:this.fontSizeItems});
-tb.addChild(_9ff);
-dojo.event.connect(_9ff,"onSetValue",dojo.lang.hitch(this,function(item,_a06){
-this.onAction("fontSize",_a06);
-}));
-}else{
-if(dojo.lang.inArray(cmd,["forecolor","hilitecolor"])){
-var btn=tb.addChild(dojo.widget.createWidget("ToolbarColorDialog",this.getItemProperties(cmd)));
-dojo.event.connect(btn,"onSetValue",this,"_setValue");
-}else{
-var btn=tb.addChild(this.getCommandImage(cmd),null,this.getItemProperties(cmd));
-if(cmd=="save"){
-dojo.event.connect(btn,"onClick",this,"_save");
-}else{
-if(cmd=="cancel"){
-dojo.event.connect(btn,"onClick",this,"_close");
-}else{
-dojo.event.connect(btn,"onClick",this,"_action");
-dojo.event.connect(btn,"onChangeSelect",this,"_action");
-}
-}
-}
-}
-}
-}
-}
-}
-}
-return true;
-},enableToolbar:function(){
-if(this._toolbarContainer){
-this._toolbarContainer.domNode.style.display="";
-this._toolbarContainer.enable();
-}
-},disableToolbar:function(hide){
-if(hide){
-if(this._toolbarContainer){
-this._toolbarContainer.domNode.style.display="none";
-}
-}else{
-if(this._toolbarContainer){
-this._toolbarContainer.disable();
-}
-}
-},_updateToolbarLastRan:null,_updateToolbarTimer:null,_updateToolbarFrequency:500,updateToolbar:function(_a08){
-if(!this._toolbarContainer){
-return;
-}
-var diff=new Date()-this._updateToolbarLastRan;
-if(!_a08&&this._updateToolbarLastRan&&(diff<this._updateToolbarFrequency)){
-clearTimeout(this._updateToolbarTimer);
-var _a0a=this;
-this._updateToolbarTimer=setTimeout(function(){
-_a0a.updateToolbar();
-},this._updateToolbarFrequency/2);
-return;
-}else{
-this._updateToolbarLastRan=new Date();
-}
-var _a0b=this._toolbarContainer.getItems();
-for(var i=0;i<_a0b.length;i++){
-var item=_a0b[i];
-if(item instanceof dojo.widget.ToolbarSeparator){
-continue;
-}
-var cmd=item._name;
-if(cmd=="save"||cmd=="cancel"){
-continue;
-}else{
-if(cmd=="justifyGroup"){
-try{
-if(!this._richText.queryCommandEnabled("justifyleft")){
-item.disable(false,true);
-}else{
-item.enable(false,true);
-var _a0f=item.getItems();
-for(var j=0;j<_a0f.length;j++){
-var name=_a0f[j]._name;
-var _a12=this._richText.queryCommandValue(name);
-if(typeof _a12=="boolean"&&_a12){
-_a12=name;
-break;
-}else{
-if(typeof _a12=="string"){
-_a12="justify"+_a12;
-}else{
-_a12=null;
-}
-}
-}
-if(!_a12){
-_a12="justifyleft";
-}
-item.setValue(_a12,false,true);
-}
-}
-catch(err){
-}
-}else{
-if(cmd=="listGroup"){
-var _a13=item.getItems();
-for(var j=0;j<_a13.length;j++){
-this.updateItem(_a13[j]);
-}
-}else{
-this.updateItem(item);
-}
-}
-}
-}
-},updateItem:function(item){
-try{
-var cmd=item._name;
-var _a16=this._richText.queryCommandEnabled(cmd);
-item.setEnabled(_a16,false,true);
-var _a17=this._richText.queryCommandState(cmd);
-if(_a17&&cmd=="underline"){
-_a17=!this._richText.queryCommandEnabled("unlink");
-}
-item.setSelected(_a17,false,true);
-return true;
-}
-catch(err){
-return false;
-}
-},supportedCommands:dojo.widget.Editor.supportedCommands.concat(),isSupportedCommand:function(cmd){
-var yes=dojo.lang.inArray(cmd,this.supportedCommands);
-if(!yes){
-try{
-var _a1a=this._richText||dojo.widget.HtmlRichText.prototype;
-yes=_a1a.queryCommandAvailable(cmd);
-}
-catch(E){
-}
-}
-return yes;
-},getCommandImage:function(cmd){
-if(cmd=="|"){
-return cmd;
-}else{
-return dojo.uri.dojoUri("src/widget/templates/buttons/"+cmd+".gif");
-}
-},_action:function(e){
-this._fire("onAction",e.getValue());
-},_setValue:function(a,b){
-this._fire("onAction",a.getValue(),b);
-},_save:function(e){
-if(!this._richText.isClosed){
-if(this.saveUrl.length){
-var _a20={};
-_a20[this.saveArgName]=this.getHtml();
-dojo.io.bind({method:this.saveMethod,url:this.saveUrl,content:_a20});
-}else{
-dojo.debug("please set a saveUrl for the editor");
-}
-if(this.closeOnSave){
-this._richText.close(e.getName().toLowerCase()=="save");
-}
-}
-},_close:function(e){
-if(!this._richText.isClosed){
-this._richText.close(e.getName().toLowerCase()=="save");
-}
-},onAction:function(cmd,_a23){
-switch(cmd){
-case "createlink":
-if(!(_a23=prompt("Please enter the URL of the link:","http://"))){
-return;
-}
-break;
-case "insertimage":
-if(!(_a23=prompt("Please enter the URL of the image:","http://"))){
-return;
-}
-break;
-}
-this._richText.execCommand(cmd,_a23);
-},fillInTemplate:function(args,frag){
-},_fire:function(_a26){
-if(dojo.lang.isFunction(this[_a26])){
-var args=[];
-if(arguments.length==1){
-args.push(this);
-}else{
-for(var i=1;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-}
-this[_a26].apply(this,args);
-}
-},getHtml:function(){
-this._richText.contentFilters=this._richText.contentFilters.concat(this.contentFilters);
-return this._richText.getEditorContent();
-},getEditorContent:function(){
-return this.getHtml();
-},onClose:function(save,hide){
-this.disableToolbar(hide);
-if(save){
-this._fire("onSave");
-}else{
-this._fire("onCancel");
-}
-},onLoad:function(){
-},onSave:function(){
-},onCancel:function(){
-}});
 dojo.provide("dojo.lang.type");
-dojo.lang.whatAmI=function(_a2b){
+dojo.lang.whatAmI=function(_921){
 dojo.deprecated("dojo.lang.whatAmI","use dojo.lang.getType instead","0.5");
-return dojo.lang.getType(_a2b);
+return dojo.lang.getType(_921);
 };
 dojo.lang.whatAmI.custom={};
-dojo.lang.getType=function(_a2c){
+dojo.lang.getType=function(_922){
 try{
-if(dojo.lang.isArray(_a2c)){
+if(dojo.lang.isArray(_922)){
 return "array";
 }
-if(dojo.lang.isFunction(_a2c)){
+if(dojo.lang.isFunction(_922)){
 return "function";
 }
-if(dojo.lang.isString(_a2c)){
+if(dojo.lang.isString(_922)){
 return "string";
 }
-if(dojo.lang.isNumber(_a2c)){
+if(dojo.lang.isNumber(_922)){
 return "number";
 }
-if(dojo.lang.isBoolean(_a2c)){
+if(dojo.lang.isBoolean(_922)){
 return "boolean";
 }
-if(dojo.lang.isAlien(_a2c)){
+if(dojo.lang.isAlien(_922)){
 return "alien";
 }
-if(dojo.lang.isUndefined(_a2c)){
+if(dojo.lang.isUndefined(_922)){
 return "undefined";
 }
 for(var name in dojo.lang.whatAmI.custom){
-if(dojo.lang.whatAmI.custom[name](_a2c)){
+if(dojo.lang.whatAmI.custom[name](_922)){
 return name;
 }
 }
-if(dojo.lang.isObject(_a2c)){
+if(dojo.lang.isObject(_922)){
 return "object";
 }
 }
@@ -48015,28 +28099,28 @@
 }
 return "unknown";
 };
-dojo.lang.isNumeric=function(_a2e){
-return (!isNaN(_a2e)&&isFinite(_a2e)&&(_a2e!=null)&&!dojo.lang.isBoolean(_a2e)&&!dojo.lang.isArray(_a2e)&&!/^\s*$/.test(_a2e));
+dojo.lang.isNumeric=function(_924){
+return (!isNaN(_924)&&isFinite(_924)&&(_924!=null)&&!dojo.lang.isBoolean(_924)&&!dojo.lang.isArray(_924)&&!/^\s*$/.test(_924));
 };
-dojo.lang.isBuiltIn=function(_a2f){
-return (dojo.lang.isArray(_a2f)||dojo.lang.isFunction(_a2f)||dojo.lang.isString(_a2f)||dojo.lang.isNumber(_a2f)||dojo.lang.isBoolean(_a2f)||(_a2f==null)||(_a2f instanceof Error)||(typeof _a2f=="error"));
+dojo.lang.isBuiltIn=function(_925){
+return (dojo.lang.isArray(_925)||dojo.lang.isFunction(_925)||dojo.lang.isString(_925)||dojo.lang.isNumber(_925)||dojo.lang.isBoolean(_925)||(_925==null)||(_925 instanceof Error)||(typeof _925=="error"));
 };
-dojo.lang.isPureObject=function(_a30){
-return ((_a30!=null)&&dojo.lang.isObject(_a30)&&_a30.constructor==Object);
+dojo.lang.isPureObject=function(_926){
+return ((_926!=null)&&dojo.lang.isObject(_926)&&_926.constructor==Object);
 };
-dojo.lang.isOfType=function(_a31,type,_a33){
-var _a34=false;
-if(_a33){
-_a34=_a33["optional"];
+dojo.lang.isOfType=function(_927,type,_929){
+var _92a=false;
+if(_929){
+_92a=_929["optional"];
 }
-if(_a34&&((_a31===null)||dojo.lang.isUndefined(_a31))){
+if(_92a&&((_927===null)||dojo.lang.isUndefined(_927))){
 return true;
 }
 if(dojo.lang.isArray(type)){
-var _a35=type;
-for(var i in _a35){
-var _a37=_a35[i];
-if(dojo.lang.isOfType(_a31,_a37)){
+var _92b=type;
+for(var i in _92b){
+var _92d=_92b[i];
+if(dojo.lang.isOfType(_927,_92d)){
 return true;
 }
 }
@@ -48048,41 +28132,41 @@
 switch(type){
 case Array:
 case "array":
-return dojo.lang.isArray(_a31);
+return dojo.lang.isArray(_927);
 case Function:
 case "function":
-return dojo.lang.isFunction(_a31);
+return dojo.lang.isFunction(_927);
 case String:
 case "string":
-return dojo.lang.isString(_a31);
+return dojo.lang.isString(_927);
 case Number:
 case "number":
-return dojo.lang.isNumber(_a31);
+return dojo.lang.isNumber(_927);
 case "numeric":
-return dojo.lang.isNumeric(_a31);
+return dojo.lang.isNumeric(_927);
 case Boolean:
 case "boolean":
-return dojo.lang.isBoolean(_a31);
+return dojo.lang.isBoolean(_927);
 case Object:
 case "object":
-return dojo.lang.isObject(_a31);
+return dojo.lang.isObject(_927);
 case "pureobject":
-return dojo.lang.isPureObject(_a31);
+return dojo.lang.isPureObject(_927);
 case "builtin":
-return dojo.lang.isBuiltIn(_a31);
+return dojo.lang.isBuiltIn(_927);
 case "alien":
-return dojo.lang.isAlien(_a31);
+return dojo.lang.isAlien(_927);
 case "undefined":
-return dojo.lang.isUndefined(_a31);
+return dojo.lang.isUndefined(_927);
 case null:
 case "null":
-return (_a31===null);
+return (_927===null);
 case "optional":
 dojo.deprecated("dojo.lang.isOfType(value, [type, \"optional\"])","use dojo.lang.isOfType(value, type, {optional: true} ) instead","0.5");
-return ((_a31===null)||dojo.lang.isUndefined(_a31));
+return ((_927===null)||dojo.lang.isUndefined(_927));
 default:
 if(dojo.lang.isFunction(type)){
-return (_a31 instanceof type);
+return (_927 instanceof type);
 }else{
 dojo.raise("dojo.lang.isOfType() was passed an invalid type");
 }
@@ -48091,70 +28175,70 @@
 dojo.raise("If we get here, it means a bug was introduced above.");
 };
 dojo.lang.getObject=function(str){
-var _a39=str.split("."),i=0,obj=dj_global;
+var _92f=str.split("."),i=0,obj=dj_global;
 do{
-obj=obj[_a39[i++]];
-}while(i<_a39.length&&obj);
+obj=obj[_92f[i++]];
+}while(i<_92f.length&&obj);
 return (obj!=dj_global)?obj:null;
 };
 dojo.lang.doesObjectExist=function(str){
-var _a3d=str.split("."),i=0,obj=dj_global;
+var _933=str.split("."),i=0,obj=dj_global;
 do{
-obj=obj[_a3d[i++]];
-}while(i<_a3d.length&&obj);
+obj=obj[_933[i++]];
+}while(i<_933.length&&obj);
 return (obj&&obj!=dj_global);
 };
 dojo.provide("dojo.lang.assert");
-dojo.lang.assert=function(_a40,_a41){
-if(!_a40){
-var _a42="An assert statement failed.\n"+"The method dojo.lang.assert() was called with a 'false' value.\n";
-if(_a41){
-_a42+="Here's the assert message:\n"+_a41+"\n";
+dojo.lang.assert=function(_936,_937){
+if(!_936){
+var _938="An assert statement failed.\n"+"The method dojo.lang.assert() was called with a 'false' value.\n";
+if(_937){
+_938+="Here's the assert message:\n"+_937+"\n";
 }
-throw new Error(_a42);
+throw new Error(_938);
 }
 };
-dojo.lang.assertType=function(_a43,type,_a45){
-if(dojo.lang.isString(_a45)){
+dojo.lang.assertType=function(_939,type,_93b){
+if(dojo.lang.isString(_93b)){
 dojo.deprecated("dojo.lang.assertType(value, type, \"message\")","use dojo.lang.assertType(value, type) instead","0.5");
 }
-if(!dojo.lang.isOfType(_a43,type,_a45)){
+if(!dojo.lang.isOfType(_939,type,_93b)){
 if(!dojo.lang.assertType._errorMessage){
 dojo.lang.assertType._errorMessage="Type mismatch: dojo.lang.assertType() failed.";
 }
 dojo.lang.assert(false,dojo.lang.assertType._errorMessage);
 }
 };
-dojo.lang.assertValidKeywords=function(_a46,_a47,_a48){
+dojo.lang.assertValidKeywords=function(_93c,_93d,_93e){
 var key;
-if(!_a48){
+if(!_93e){
 if(!dojo.lang.assertValidKeywords._errorMessage){
 dojo.lang.assertValidKeywords._errorMessage="In dojo.lang.assertValidKeywords(), found invalid keyword:";
 }
-_a48=dojo.lang.assertValidKeywords._errorMessage;
+_93e=dojo.lang.assertValidKeywords._errorMessage;
 }
-if(dojo.lang.isArray(_a47)){
-for(key in _a46){
-if(!dojo.lang.inArray(_a47,key)){
-dojo.lang.assert(false,_a48+" "+key);
+if(dojo.lang.isArray(_93d)){
+for(key in _93c){
+if(!dojo.lang.inArray(_93d,key)){
+dojo.lang.assert(false,_93e+" "+key);
 }
 }
 }else{
-for(key in _a46){
-if(!(key in _a47)){
-dojo.lang.assert(false,_a48+" "+key);
+for(key in _93c){
+if(!(key in _93d)){
+dojo.lang.assert(false,_93e+" "+key);
 }
 }
 }
 };
 dojo.provide("dojo.AdapterRegistry");
-dojo.AdapterRegistry=function(_a4a){
+dojo.AdapterRegistry=function(_940){
 this.pairs=[];
-this.returnWrappers=_a4a||false;
+this.returnWrappers=_940||false;
 };
-dojo.lang.extend(dojo.AdapterRegistry,{register:function(name,_a4c,wrap,_a4e,_a4f){
-var type=(_a4f)?"unshift":"push";
-this.pairs[type]([name,_a4c,wrap,_a4e]);
+dojo.lang.extend(dojo.AdapterRegistry,{register:function(name,_942,wrap,_944,_945){
+var type=(_945)?"unshift":"push";
+this.pairs[type]([name,_942,wrap,_944]);
 },match:function(){
 for(var i=0;i<this.pairs.length;i++){
 var pair=this.pairs[i];
@@ -48179,8 +28263,8 @@
 }});
 dojo.provide("dojo.lang.repr");
 dojo.lang.reprRegistry=new dojo.AdapterRegistry();
-dojo.lang.registerRepr=function(name,_a57,wrap,_a59){
-dojo.lang.reprRegistry.register(name,_a57,wrap,_a59);
+dojo.lang.registerRepr=function(name,_94d,wrap,_94f){
+dojo.lang.reprRegistry.register(name,_94d,wrap,_94f);
 };
 dojo.lang.repr=function(obj){
 if(typeof (obj)=="undefined"){
@@ -48229,14 +28313,15 @@
 m.registerRepr("numbers",m.isNumber,m.reprNumber);
 m.registerRepr("boolean",m.isBoolean,m.reprNumber);
 })();
+dojo.kwCompoundRequire({common:["dojo.lang.common","dojo.lang.assert","dojo.lang.array","dojo.lang.type","dojo.lang.func","dojo.lang.extras","dojo.lang.repr","dojo.lang.declare"]});
 dojo.provide("dojo.lang.*");
 dojo.provide("dojo.html.iframe");
-dojo.html.iframeContentWindow=function(_a5f){
-var win=dojo.html.getDocumentWindow(dojo.html.iframeContentDocument(_a5f))||dojo.html.iframeContentDocument(_a5f).__parent__||(_a5f.name&&document.frames[_a5f.name])||null;
+dojo.html.iframeContentWindow=function(_955){
+var win=dojo.html.getDocumentWindow(dojo.html.iframeContentDocument(_955))||dojo.html.iframeContentDocument(_955).__parent__||(_955.name&&document.frames[_955.name])||null;
 return win;
 };
-dojo.html.iframeContentDocument=function(_a61){
-var doc=_a61.contentDocument||((_a61.contentWindow)&&(_a61.contentWindow.document))||((_a61.name)&&(document.frames[_a61.name])&&(document.frames[_a61.name].document))||null;
+dojo.html.iframeContentDocument=function(_957){
+var doc=_957.contentDocument||((_957.contentWindow)&&(_957.contentWindow.document))||((_957.name)&&(document.frames[_957.name])&&(document.frames[_957.name].document))||null;
 return doc;
 };
 dojo.html.BackgroundIframe=function(node){
@@ -48255,24 +28340,24 @@
 };
 dojo.lang.extend(dojo.html.BackgroundIframe,{iframe:null,onResized:function(){
 if(this.iframe&&this.domNode&&this.domNode.parentNode){
-var _a65=dojo.html.getMarginBox(this.domNode);
-if(_a65.width==0||_a65.height==0){
+var _95b=dojo.html.getMarginBox(this.domNode);
+if(_95b.width==0||_95b.height==0){
 dojo.lang.setTimeout(this,this.onResized,100);
 return;
 }
-this.iframe.style.width=_a65.width+"px";
-this.iframe.style.height=_a65.height+"px";
+this.iframe.style.width=_95b.width+"px";
+this.iframe.style.height=_95b.height+"px";
 }
 },size:function(node){
 if(!this.iframe){
 return;
 }
-var _a67=dojo.html.toCoordinateObject(node,true,dojo.html.boxSizing.BORDER_BOX);
+var _95d=dojo.html.toCoordinateObject(node,true,dojo.html.boxSizing.BORDER_BOX);
 with(this.iframe.style){
-width=_a67.width+"px";
-height=_a67.height+"px";
-left=_a67.left+"px";
-top=_a67.top+"px";
+width=_95d.width+"px";
+height=_95d.height+"px";
+left=_95d.left+"px";
+top=_95d.top+"px";
 }
 },setZIndex:function(node){
 if(!this.iframe){
@@ -48303,7 +28388,7 @@
 dojo.provide("dojo.widget.PopupContainer");
 dojo.declare("dojo.widget.PopupContainerBase",null,function(){
 this.queueOnAnimationFinish=[];
-},{isContainer:true,templateString:"<div dojoAttachPoint=\"containerNode\" style=\"display:none;position:absolute;\" class=\"dojoPopupContainer\" ></div>",isShowingNow:false,currentSubpopup:null,beginZIndex:1000,parentPopup:null,parent:null,popupIndex:0,aroundBox:dojo.html.boxSizing.BORDER_BOX,openedForWindow:null,processKey:function(evt){
+},{isShowingNow:false,currentSubpopup:null,beginZIndex:1000,parentPopup:null,parent:null,popupIndex:0,aroundBox:dojo.html.boxSizing.BORDER_BOX,openedForWindow:null,processKey:function(evt){
 return false;
 },applyPopupBasicStyle:function(){
 with(this.domNode.style){
@@ -48311,7 +28396,7 @@
 position="absolute";
 }
 },aboutToShow:function(){
-},open:function(x,y,_a6c,_a6d,_a6e,_a6f){
+},open:function(x,y,_962,_963,_964,_965){
 if(this.isShowingNow){
 return;
 }
@@ -48320,80 +28405,80 @@
 return;
 }
 this.aboutToShow();
-var _a70=false,node,_a72;
+var _966=false,node,_968;
 if(typeof x=="object"){
 node=x;
-_a72=_a6d;
-_a6d=_a6c;
-_a6c=y;
-_a70=true;
+_968=_963;
+_963=_962;
+_962=y;
+_966=true;
 }
-this.parent=_a6c;
+this.parent=_962;
 dojo.body().appendChild(this.domNode);
-_a6d=_a6d||_a6c["domNode"]||[];
-var _a73=null;
+_963=_963||_962["domNode"]||[];
+var _969=null;
 this.isTopLevel=true;
-while(_a6c){
-if(_a6c!==this&&(_a6c.setOpenedSubpopup!=undefined&&_a6c.applyPopupBasicStyle!=undefined)){
-_a73=_a6c;
+while(_962){
+if(_962!==this&&(_962.setOpenedSubpopup!=undefined&&_962.applyPopupBasicStyle!=undefined)){
+_969=_962;
 this.isTopLevel=false;
-_a73.setOpenedSubpopup(this);
+_969.setOpenedSubpopup(this);
 break;
 }
-_a6c=_a6c.parent;
+_962=_962.parent;
 }
-this.parentPopup=_a73;
-this.popupIndex=_a73?_a73.popupIndex+1:1;
+this.parentPopup=_969;
+this.popupIndex=_969?_969.popupIndex+1:1;
 if(this.isTopLevel){
-var _a74=dojo.html.isNode(_a6d)?_a6d:null;
-dojo.widget.PopupManager.opened(this,_a74);
+var _96a=dojo.html.isNode(_963)?_963:null;
+dojo.widget.PopupManager.opened(this,_96a);
 }
 if(this.isTopLevel&&!dojo.withGlobal(this.openedForWindow||dojo.global(),dojo.html.selection.isCollapsed)){
 this._bookmark=dojo.withGlobal(this.openedForWindow||dojo.global(),dojo.html.selection.getBookmark);
 }else{
 this._bookmark=null;
 }
-if(_a6d instanceof Array){
-_a6d={left:_a6d[0],top:_a6d[1],width:0,height:0};
+if(_963 instanceof Array){
+_963={left:_963[0],top:_963[1],width:0,height:0};
 }
 with(this.domNode.style){
 display="";
 zIndex=this.beginZIndex+this.popupIndex;
 }
-if(_a70){
-this.move(node,_a6f,_a72);
+if(_966){
+this.move(node,_965,_968);
 }else{
-this.move(x,y,_a6f,_a6e);
+this.move(x,y,_965,_964);
 }
 this.domNode.style.display="none";
-this.explodeSrc=_a6d;
+this.explodeSrc=_963;
 this.show();
 this.isShowingNow=true;
-},move:function(x,y,_a77,_a78){
-var _a79=(typeof x=="object");
-if(_a79){
-var _a7a=_a77;
+},move:function(x,y,_96d,_96e){
+var _96f=(typeof x=="object");
+if(_96f){
+var _970=_96d;
 var node=x;
-_a77=y;
-if(!_a7a){
-_a7a={"BL":"TL","TL":"BL"};
+_96d=y;
+if(!_970){
+_970={"BL":"TL","TL":"BL"};
 }
-dojo.html.placeOnScreenAroundElement(this.domNode,node,_a77,this.aroundBox,_a7a);
+dojo.html.placeOnScreenAroundElement(this.domNode,node,_96d,this.aroundBox,_970);
 }else{
-if(!_a78){
-_a78="TL,TR,BL,BR";
+if(!_96e){
+_96e="TL,TR,BL,BR";
 }
-dojo.html.placeOnScreen(this.domNode,x,y,_a77,true,_a78);
+dojo.html.placeOnScreen(this.domNode,x,y,_96d,true,_96e);
 }
-},close:function(_a7c){
-if(_a7c){
+},close:function(_972){
+if(_972){
 this.domNode.style.display="none";
 }
 if(this.animationInProgress){
 this.queueOnAnimationFinish.push(this.close,[]);
 return;
 }
-this.closeSubpopup(_a7c);
+this.closeSubpopup(_972);
 this.hide();
 if(this.bgIframe){
 this.bgIframe.hide();
@@ -48428,19 +28513,19 @@
 }
 }
 this._bookmark=null;
-},closeAll:function(_a7d){
+},closeAll:function(_973){
 if(this.parentPopup){
-this.parentPopup.closeAll(_a7d);
+this.parentPopup.closeAll(_973);
 }else{
-this.close(_a7d);
+this.close(_973);
 }
-},setOpenedSubpopup:function(_a7e){
-this.currentSubpopup=_a7e;
-},closeSubpopup:function(_a7f){
+},setOpenedSubpopup:function(_974){
+this.currentSubpopup=_974;
+},closeSubpopup:function(_975){
 if(this.currentSubpopup==null){
 return;
 }
-this.currentSubpopup.close(_a7f);
+this.currentSubpopup.close(_975);
 this.currentSubpopup=null;
 },onShow:function(){
 dojo.widget.PopupContainer.superclass.onShow.apply(this,arguments);
@@ -48471,7 +28556,10 @@
 }
 this.processQueue();
 }});
-dojo.widget.defineWidget("dojo.widget.PopupContainer",[dojo.widget.HtmlWidget,dojo.widget.PopupContainerBase],{});
+dojo.widget.defineWidget("dojo.widget.PopupContainer",[dojo.widget.HtmlWidget,dojo.widget.PopupContainerBase],{isContainer:true,fillInTemplate:function(){
+this.applyPopupBasicStyle();
+dojo.widget.PopupContainer.superclass.fillInTemplate.apply(this,arguments);
+}});
 dojo.widget.PopupManager=new function(){
 this.currentMenu=null;
 this.currentButton=null;
@@ -48487,14 +28575,14 @@
 this.registeredWindows.push(win);
 }
 };
-this.registerAllWindows=function(_a83){
-if(!_a83){
-_a83=dojo.html.getDocumentWindow(window.top&&window.top.document||window.document);
+this.registerAllWindows=function(_979){
+if(!_979){
+_979=dojo.html.getDocumentWindow(window.top&&window.top.document||window.document);
 }
-this.registerWin(_a83);
-for(var i=0;i<_a83.frames.length;i++){
+this.registerWin(_979);
+for(var i=0;i<_979.frames.length;i++){
 try{
-var win=dojo.html.getDocumentWindow(_a83.frames[i].document);
+var win=dojo.html.getDocumentWindow(_979.frames[i].document);
 if(win){
 this.registerAllWindows(win);
 }
@@ -48526,7 +28614,7 @@
 this.currentFocusMenu=null;
 }
 };
-this.opened=function(menu,_a8a){
+this.opened=function(menu,_980){
 if(menu==this.currentMenu){
 return;
 }
@@ -48535,7 +28623,7 @@
 }
 this.currentMenu=menu;
 this.currentFocusMenu=menu;
-this.currentButton=_a8a;
+this.currentButton=_980;
 };
 this.setFocusedMenu=function(menu){
 this.currentFocusMenu=menu;
@@ -48554,13 +28642,13 @@
 e.stopPropagation();
 break;
 }
-m=m.parentPopup;
+m=m.parentPopup||m.parentMenu;
 }
 },this.onClick=function(e){
 if(!this.currentMenu){
 return;
 }
-var _a8f=dojo.html.getScroll().offset;
+var _985=dojo.html.getScroll().offset;
 var m=this.currentMenu;
 while(m){
 if(dojo.html.overElement(m.domNode,e)||dojo.html.isDescendantOf(e.target,m.domNode)){
@@ -48571,9 +28659,52 @@
 if(this.currentButton&&dojo.html.overElement(this.currentButton,e)){
 return;
 }
-this.currentMenu.close();
+this.currentMenu.closeAll(true);
 };
 };
+dojo.provide("dojo.widget.ColorPalette");
+dojo.widget.defineWidget("dojo.widget.ColorPalette",dojo.widget.HtmlWidget,{palette:"7x10",_palettes:{"7x10":[["fff","fcc","fc9","ff9","ffc","9f9","9ff","cff","ccf","fcf"],["ccc","f66","f96","ff6","ff3","6f9","3ff","6ff","99f","f9f"],["c0c0c0","f00","f90","fc6","ff0","3f3","6cc","3cf","66c","c6c"],["999","c00","f60","fc3","fc0","3c0","0cc","36f","63f","c3c"],["666","900","c60","c93","990","090","399","33f","60c","939"],["333","600","930","963","660","060","366","009","339","636"],["000","300","630","633","330","030","033","006","309","303"]],"3x4":[["ffffff","00ff00","008000","0000ff"],["c0c0c0","ffff00","ff00ff","000080"],["808080","ff0000","800080","000000"]]},buildRendering:function(){
+this.domNode=document.createElement("table");
+dojo.html.disableSelection(this.domNode);
+dojo.event.connect(this.domNode,"onmousedown",function(e){
+e.preventDefault();
+});
+with(this.domNode){
+cellPadding="0";
+cellSpacing="1";
+border="1";
+style.backgroundColor="white";
+}
+var _988=this._palettes[this.palette];
+for(var i=0;i<_988.length;i++){
+var tr=this.domNode.insertRow(-1);
+for(var j=0;j<_988[i].length;j++){
+if(_988[i][j].length==3){
+_988[i][j]=_988[i][j].replace(/(.)(.)(.)/,"$1$1$2$2$3$3");
+}
+var td=tr.insertCell(-1);
+with(td.style){
+backgroundColor="#"+_988[i][j];
+border="1px solid gray";
+width=height="15px";
+fontSize="1px";
+}
+td.color="#"+_988[i][j];
+td.onmouseover=function(e){
+this.style.borderColor="white";
+};
+td.onmouseout=function(e){
+this.style.borderColor="gray";
+};
+dojo.event.connect(td,"onmousedown",this,"onClick");
+td.innerHTML="&nbsp;";
+}
+}
+},onClick:function(e){
+this.onColorSelect(e.currentTarget.color);
+e.currentTarget.style.borderColor="gray";
+},onColorSelect:function(_990){
+}});
 dojo.provide("dojo.widget.ContentPane");
 dojo.widget.defineWidget("dojo.widget.ContentPane",dojo.widget.HtmlWidget,function(){
 this._styleNodes=[];
@@ -48583,7 +28714,7 @@
 this._ioBindObj;
 this.scriptScope;
 this.bindArgs={};
-},{isContainer:true,adjustPaths:true,href:"",extractContent:true,parseContent:true,cacheContent:true,preload:false,refreshOnShow:false,handler:"",executeScripts:false,scriptSeparation:true,loadingMessage:"Loading...",isLoaded:false,postCreate:function(args,frag,_a93){
+},{isContainer:true,adjustPaths:true,href:"",extractContent:true,parseContent:true,cacheContent:true,preload:false,refreshOnShow:false,handler:"",executeScripts:false,scriptSeparation:true,loadingMessage:"Loading...",isLoaded:false,postCreate:function(args,frag,_993){
 if(this.handler!==""){
 this.setHandler(this.handler);
 }
@@ -48624,7 +28755,7 @@
 }
 bind.abort();
 delete this._ioBindObj;
-},_downloadExternalContent:function(url,_a97){
+},_downloadExternalContent:function(url,_997){
 this.abort();
 this._handleDefaults(this.loadingMessage,"onDownloadStart");
 var self=this;
@@ -48637,23 +28768,23 @@
 self._handleDefaults.call(self,e,"onDownloadError");
 self.onLoad();
 }
-}},_a97));
-},_cacheSetting:function(_a9d,_a9e){
+}},_997));
+},_cacheSetting:function(_99d,_99e){
 for(var x in this.bindArgs){
-if(dojo.lang.isUndefined(_a9d[x])){
-_a9d[x]=this.bindArgs[x];
+if(dojo.lang.isUndefined(_99d[x])){
+_99d[x]=this.bindArgs[x];
 }
 }
-if(dojo.lang.isUndefined(_a9d.useCache)){
-_a9d.useCache=_a9e;
+if(dojo.lang.isUndefined(_99d.useCache)){
+_99d.useCache=_99e;
 }
-if(dojo.lang.isUndefined(_a9d.preventCache)){
-_a9d.preventCache=!_a9e;
+if(dojo.lang.isUndefined(_99d.preventCache)){
+_99d.preventCache=!_99e;
 }
-if(dojo.lang.isUndefined(_a9d.mimetype)){
-_a9d.mimetype="text/html";
+if(dojo.lang.isUndefined(_99d.mimetype)){
+_99d.mimetype="text/html";
 }
-return _a9d;
+return _99d;
 },onLoad:function(e){
 this._runStack("_onLoadStack");
 this.isLoaded=true;
@@ -48665,21 +28796,21 @@
 if(this.onUnLoad!==dojo.widget.ContentPane.prototype.onUnLoad){
 this.onUnLoad.apply(this,arguments);
 }
-},_runStack:function(_aa3){
-var st=this[_aa3];
+},_runStack:function(_9a3){
+var st=this[_9a3];
 var err="";
-var _aa6=this.scriptScope||window;
+var _9a6=this.scriptScope||window;
 for(var i=0;i<st.length;i++){
 try{
-st[i].call(_aa6);
+st[i].call(_9a6);
 }
 catch(e){
 err+="\n"+st[i]+" failed: "+e.description;
 }
 }
-this[_aa3]=[];
+this[_9a3]=[];
 if(err.length){
-var name=(_aa3=="_onLoadStack")?"addOnLoad":"addOnUnLoad";
+var name=(_9a3=="_onLoadStack")?"addOnLoad":"addOnUnLoad";
 this._handleDefaults(name+" failure\n "+err,"onExecError","debug");
 }
 },addOnLoad:function(obj,func){
@@ -48689,11 +28820,11 @@
 },addOnUnLoad:function(){
 dojo.deprecated(this.widgetType+".addOnUnLoad, use addOnUnload instead. (lowercased Load)",0.5);
 this.addOnUnload.apply(this,arguments);
-},_pushOnStack:function(_aad,obj,func){
+},_pushOnStack:function(_9ad,obj,func){
 if(typeof func=="undefined"){
-_aad.push(obj);
+_9ad.push(obj);
 }else{
-_aad.push(function(){
+_9ad.push(function(){
 obj[func]();
 });
 }
@@ -48707,9 +28838,9 @@
 },onDownloadEnd:function(url,data){
 data=this.splitAndFixPaths(data,url);
 this.setContent(data);
-},_handleDefaults:function(e,_ab7,_ab8){
-if(!_ab7){
-_ab7="onContentError";
+},_handleDefaults:function(e,_9b7,_9b8){
+if(!_9b7){
+_9b7="onContentError";
 }
 if(dojo.lang.isString(e)){
 e={text:e};
@@ -48728,9 +28859,9 @@
 this.returnValue=false;
 };
 }
-this[_ab7](e);
+this[_9b7](e);
 if(e.returnValue){
-switch(_ab8){
+switch(_9b8){
 case true:
 case "alert":
 alert(e.toString());
@@ -48753,109 +28884,109 @@
 }
 arguments.callee._loopStop=false;
 },splitAndFixPaths:function(s,url){
-var _abb=[],_abc=[],tmp=[];
-var _abe=[],_abf=[],attr=[],_ac1=[];
-var str="",path="",fix="",_ac5="",tag="",_ac7="";
+var _9bb=[],_9bc=[],tmp=[];
+var _9be=[],_9bf=[],attr=[],_9c1=[];
+var str="",path="",fix="",_9c5="",tag="",_9c7="";
 if(!url){
 url="./";
 }
 if(s){
-var _ac8=/<title[^>]*>([\s\S]*?)<\/title>/i;
-while(_abe=_ac8.exec(s)){
-_abb.push(_abe[1]);
-s=s.substring(0,_abe.index)+s.substr(_abe.index+_abe[0].length);
+var _9c8=/<title[^>]*>([\s\S]*?)<\/title>/i;
+while(_9be=_9c8.exec(s)){
+_9bb.push(_9be[1]);
+s=s.substring(0,_9be.index)+s.substr(_9be.index+_9be[0].length);
 }
 if(this.adjustPaths){
-var _ac9=/<[a-z][a-z0-9]*[^>]*\s(?:(?:src|href|style)=[^>])+[^>]*>/i;
-var _aca=/\s(src|href|style)=(['"]?)([\w()\[\]\/.,\\'"-:;#=&?\s@]+?)\2/i;
-var _acb=/^(?:[#]|(?:(?:https?|ftps?|file|javascript|mailto|news):))/;
-while(tag=_ac9.exec(s)){
+var _9c9=/<[a-z][a-z0-9]*[^>]*\s(?:(?:src|href|style)=[^>])+[^>]*>/i;
+var _9ca=/\s(src|href|style)=(['"]?)([\w()\[\]\/.,\\'"-:;#=&?\s@]+?)\2/i;
+var _9cb=/^(?:[#]|(?:(?:https?|ftps?|file|javascript|mailto|news):))/;
+while(tag=_9c9.exec(s)){
 str+=s.substring(0,tag.index);
 s=s.substring((tag.index+tag[0].length),s.length);
 tag=tag[0];
-_ac5="";
-while(attr=_aca.exec(tag)){
+_9c5="";
+while(attr=_9ca.exec(tag)){
 path="";
-_ac7=attr[3];
+_9c7=attr[3];
 switch(attr[1].toLowerCase()){
 case "src":
 case "href":
-if(_acb.exec(_ac7)){
-path=_ac7;
+if(_9cb.exec(_9c7)){
+path=_9c7;
 }else{
-path=(new dojo.uri.Uri(url,_ac7).toString());
+path=(new dojo.uri.Uri(url,_9c7).toString());
 }
 break;
 case "style":
-path=dojo.html.fixPathsInCssText(_ac7,url);
+path=dojo.html.fixPathsInCssText(_9c7,url);
 break;
 default:
-path=_ac7;
+path=_9c7;
 }
 fix=" "+attr[1]+"="+attr[2]+path+attr[2];
-_ac5+=tag.substring(0,attr.index)+fix;
+_9c5+=tag.substring(0,attr.index)+fix;
 tag=tag.substring((attr.index+attr[0].length),tag.length);
 }
-str+=_ac5+tag;
+str+=_9c5+tag;
 }
 s=str+s;
 }
-_ac8=/(?:<(style)[^>]*>([\s\S]*?)<\/style>|<link ([^>]*rel=['"]?stylesheet['"]?[^>]*)>)/i;
-while(_abe=_ac8.exec(s)){
-if(_abe[1]&&_abe[1].toLowerCase()=="style"){
-_ac1.push(dojo.html.fixPathsInCssText(_abe[2],url));
+_9c8=/(?:<(style)[^>]*>([\s\S]*?)<\/style>|<link ([^>]*rel=['"]?stylesheet['"]?[^>]*)>)/i;
+while(_9be=_9c8.exec(s)){
+if(_9be[1]&&_9be[1].toLowerCase()=="style"){
+_9c1.push(dojo.html.fixPathsInCssText(_9be[2],url));
 }else{
-if(attr=_abe[3].match(/href=(['"]?)([^'">]*)\1/i)){
-_ac1.push({path:attr[2]});
+if(attr=_9be[3].match(/href=(['"]?)([^'">]*)\1/i)){
+_9c1.push({path:attr[2]});
 }
 }
-s=s.substring(0,_abe.index)+s.substr(_abe.index+_abe[0].length);
+s=s.substring(0,_9be.index)+s.substr(_9be.index+_9be[0].length);
 }
-var _ac8=/<script([^>]*)>([\s\S]*?)<\/script>/i;
-var _acc=/src=(['"]?)([^"']*)\1/i;
-var _acd=/.*(\bdojo\b\.js(?:\.uncompressed\.js)?)$/;
-var _ace=/(?:var )?\bdjConfig\b(?:[\s]*=[\s]*\{[^}]+\}|\.[\w]*[\s]*=[\s]*[^;\n]*)?;?|dojo\.hostenv\.writeIncludes\(\s*\);?/g;
-var _acf=/dojo\.(?:(?:require(?:After)?(?:If)?)|(?:widget\.(?:manager\.)?registerWidgetPackage)|(?:(?:hostenv\.)?setModulePrefix|registerModulePath)|defineNamespace)\((['"]).*?\1\)\s*;?/;
-while(_abe=_ac8.exec(s)){
-if(this.executeScripts&&_abe[1]){
-if(attr=_acc.exec(_abe[1])){
-if(_acd.exec(attr[2])){
+var _9c8=/<script([^>]*)>([\s\S]*?)<\/script>/i;
+var _9cc=/src=(['"]?)([^"']*)\1/i;
+var _9cd=/.*(\bdojo\b\.js(?:\.uncompressed\.js)?)$/;
+var _9ce=/(?:var )?\bdjConfig\b(?:[\s]*=[\s]*\{[^}]+\}|\.[\w]*[\s]*=[\s]*[^;\n]*)?;?|dojo\.hostenv\.writeIncludes\(\s*\);?/g;
+var _9cf=/dojo\.(?:(?:require(?:After)?(?:If)?)|(?:widget\.(?:manager\.)?registerWidgetPackage)|(?:(?:hostenv\.)?setModulePrefix|registerModulePath)|defineNamespace)\((['"]).*?\1\)\s*;?/;
+while(_9be=_9c8.exec(s)){
+if(this.executeScripts&&_9be[1]){
+if(attr=_9cc.exec(_9be[1])){
+if(_9cd.exec(attr[2])){
 dojo.debug("Security note! inhibit:"+attr[2]+" from  being loaded again.");
 }else{
-_abc.push({path:attr[2]});
+_9bc.push({path:attr[2]});
 }
 }
 }
-if(_abe[2]){
-var sc=_abe[2].replace(_ace,"");
+if(_9be[2]){
+var sc=_9be[2].replace(_9ce,"");
 if(!sc){
 continue;
 }
-while(tmp=_acf.exec(sc)){
-_abf.push(tmp[0]);
+while(tmp=_9cf.exec(sc)){
+_9bf.push(tmp[0]);
 sc=sc.substring(0,tmp.index)+sc.substr(tmp.index+tmp[0].length);
 }
 if(this.executeScripts){
-_abc.push(sc);
+_9bc.push(sc);
 }
 }
-s=s.substr(0,_abe.index)+s.substr(_abe.index+_abe[0].length);
+s=s.substr(0,_9be.index)+s.substr(_9be.index+_9be[0].length);
 }
 if(this.extractContent){
-_abe=s.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-if(_abe){
-s=_abe[1];
+_9be=s.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+if(_9be){
+s=_9be[1];
 }
 }
 if(this.executeScripts&&this.scriptSeparation){
-var _ac8=/(<[a-zA-Z][a-zA-Z0-9]*\s[^>]*?\S=)((['"])[^>]*scriptScope[^>]*>)/;
-var _ad1=/([\s'";:\(])scriptScope(.*)/;
+var _9c8=/(<[a-zA-Z][a-zA-Z0-9]*\s[^>]*?\S=)((['"])[^>]*scriptScope[^>]*>)/;
+var _9d1=/([\s'";:\(])scriptScope(.*)/;
 str="";
-while(tag=_ac8.exec(s)){
+while(tag=_9c8.exec(s)){
 tmp=((tag[3]=="'")?"\"":"'");
 fix="";
 str+=s.substring(0,tag.index)+tag[1];
-while(attr=_ad1.exec(tag[2])){
+while(attr=_9d1.exec(tag[2])){
 tag[2]=tag[2].substring(0,attr.index)+attr[1]+"dojo.widget.byId("+tmp+this.widgetId+tmp+").scriptScope"+attr[2];
 }
 str+=tag[2];
@@ -48864,7 +28995,7 @@
 s=str+s;
 }
 }
-return {"xml":s,"styles":_ac1,"titles":_abb,"requires":_abf,"scripts":_abc,"url":url};
+return {"xml":s,"styles":_9c1,"titles":_9bb,"requires":_9bf,"scripts":_9bc,"url":url};
 },_setContent:function(cont){
 this.destroyChildren();
 for(var i=0;i<this._styleNodes.length;i++){
@@ -48922,19 +29053,19 @@
 }
 }
 }
-var _ad7=this;
+var _9d7=this;
 function asyncParse(){
-if(_ad7.executeScripts){
-_ad7._executeScripts(data.scripts);
+if(_9d7.executeScripts){
+_9d7._executeScripts(data.scripts);
 }
-if(_ad7.parseContent){
-var node=_ad7.containerNode||_ad7.domNode;
-var _ad9=new dojo.xml.Parse();
-var frag=_ad9.parseElement(node,null,true);
-dojo.widget.getParser().createSubComponents(frag,_ad7);
+if(_9d7.parseContent){
+var node=_9d7.containerNode||_9d7.domNode;
+var _9d9=new dojo.xml.Parse();
+var frag=_9d9.parseElement(node,null,true);
+dojo.widget.getParser().createSubComponents(frag,_9d7);
 }
-_ad7.onResized();
-_ad7.onLoad();
+_9d7.onResized();
+_9d7.onLoad();
 }
 if(dojo.hostenv.isXDomain&&data.requires.length){
 dojo.addOnLoad(asyncParse);
@@ -48942,10 +29073,10 @@
 asyncParse();
 }
 }
-},setHandler:function(_adb){
-var fcn=dojo.lang.isFunction(_adb)?_adb:window[_adb];
+},setHandler:function(_9db){
+var fcn=dojo.lang.isFunction(_9db)?_9db:window[_9db];
 if(!dojo.lang.isFunction(fcn)){
-this._handleDefaults("Unable to set handler, '"+_adb+"' not a function.","onExecError",true);
+this._handleDefaults("Unable to set handler, '"+_9db+"' not a function.","onExecError",true);
 return;
 }
 this.handler=function(){
@@ -48959,20 +29090,20 @@
 }
 this.onLoad();
 return ret;
-},_executeScripts:function(_ade){
+},_executeScripts:function(_9de){
 var self=this;
 var tmp="",code="";
-for(var i=0;i<_ade.length;i++){
-if(_ade[i].path){
-dojo.io.bind(this._cacheSetting({"url":_ade[i].path,"load":function(type,_ae4){
-dojo.lang.hitch(self,tmp=";"+_ae4);
-},"error":function(type,_ae6){
-_ae6.text=type+" downloading remote script";
-self._handleDefaults.call(self,_ae6,"onExecError","debug");
+for(var i=0;i<_9de.length;i++){
+if(_9de[i].path){
+dojo.io.bind(this._cacheSetting({"url":_9de[i].path,"load":function(type,_9e4){
+dojo.lang.hitch(self,tmp=";"+_9e4);
+},"error":function(type,_9e6){
+_9e6.text=type+" downloading remote script";
+self._handleDefaults.call(self,_9e6,"onExecError","debug");
 },"mimetype":"text/plain","sync":true},this.cacheContent));
 code+=tmp;
 }else{
-code+=_ade[i];
+code+=_9de[i];
 }
 }
 try{
@@ -49104,30 +29235,30 @@
 dojo.addOnUnload(dojo.widget.Editor2ToolbarItemManager,"destroy");
 dojo.declare("dojo.widget.Editor2ToolbarButton",null,function(name){
 this._name=name;
-},{create:function(node,_af4,_af5){
+},{create:function(node,_9f4,_9f5){
 this._domNode=node;
-var cmd=_af4.parent.getCommand(this._name);
+var cmd=_9f4.parent.getCommand(this._name);
 if(cmd){
 this._domNode.title=cmd.getText();
 }
 this.disableSelection(this._domNode);
-this._parentToolbar=_af4;
+this._parentToolbar=_9f4;
 dojo.event.connect(this._domNode,"onclick",this,"onClick");
-if(!_af5){
+if(!_9f5){
 dojo.event.connect(this._domNode,"onmouseover",this,"onMouseOver");
 dojo.event.connect(this._domNode,"onmouseout",this,"onMouseOut");
 }
-},disableSelection:function(_af7){
-dojo.html.disableSelection(_af7);
-var _af8=_af7.all||_af7.getElementsByTagName("*");
-for(var x=0;x<_af8.length;x++){
-dojo.html.disableSelection(_af8[x]);
+},disableSelection:function(_9f7){
+dojo.html.disableSelection(_9f7);
+var _9f8=_9f7.all||_9f7.getElementsByTagName("*");
+for(var x=0;x<_9f8.length;x++){
+dojo.html.disableSelection(_9f8[x]);
 }
 },onMouseOver:function(){
-var _afa=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_afa){
-var _afb=_afa.getCommand(this._name);
-if(_afb&&_afb.getState()!=dojo.widget.Editor2Manager.commandState.Disabled){
+var _9fa=dojo.widget.Editor2Manager.getCurrentInstance();
+if(_9fa){
+var _9fb=_9fa.getCommand(this._name);
+if(_9fb&&_9fb.getState()!=dojo.widget.Editor2Manager.commandState.Disabled){
 this.highlightToolbarItem();
 }
 }
@@ -49140,23 +29271,23 @@
 if(this._domNode&&!this._domNode.disabled&&this._parentToolbar.checkAvailability()){
 e.preventDefault();
 e.stopPropagation();
-var _afd=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_afd){
-var _afe=_afd.getCommand(this._name);
-if(_afe){
-_afe.execute();
+var _9fd=dojo.widget.Editor2Manager.getCurrentInstance();
+if(_9fd){
+var _9fe=_9fd.getCommand(this._name);
+if(_9fe){
+_9fe.execute();
 }
 }
 }
 },refreshState:function(){
-var _aff=dojo.widget.Editor2Manager.getCurrentInstance();
+var _9ff=dojo.widget.Editor2Manager.getCurrentInstance();
 var em=dojo.widget.Editor2Manager;
-if(_aff){
-var _b01=_aff.getCommand(this._name);
-if(_b01){
-var _b02=_b01.getState();
-if(_b02!=this._lastState){
-switch(_b02){
+if(_9ff){
+var _a01=_9ff.getCommand(this._name);
+if(_a01){
+var _a02=_a01.getState();
+if(_a02!=this._lastState){
+switch(_a02){
 case em.commandState.Latched:
 this.latchToolbarItem();
 break;
@@ -49167,7 +29298,7 @@
 default:
 this.disableToolbarItem();
 }
-this._lastState=_b02;
+this._lastState=_a02;
 }
 }
 }
@@ -49226,19 +29357,19 @@
 dojo.event.connect(this._dropdown,"open",this,"latchToolbarItem");
 dojo.event.connect(this._dropdown,"close",this,"enableToolbarItem");
 }
-},setColor:function(_b03){
+},setColor:function(_a03){
 this._dropdown.close();
-var _b04=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_b04){
-var _b05=_b04.getCommand(this._name);
-if(_b05){
-_b05.execute(_b03);
+var _a04=dojo.widget.Editor2Manager.getCurrentInstance();
+if(_a04){
+var _a05=_a04.getCommand(this._name);
+if(_a05){
+_a05.execute(_a03);
 }
 }
 }});
-dojo.declare("dojo.widget.Editor2ToolbarFormatBlockPlainSelect",dojo.widget.Editor2ToolbarButton,{create:function(node,_b07){
+dojo.declare("dojo.widget.Editor2ToolbarFormatBlockPlainSelect",dojo.widget.Editor2ToolbarButton,{create:function(node,_a07){
 this._domNode=node;
-this._parentToolbar=_b07;
+this._parentToolbar=_a07;
 this._domNode=node;
 this.disableSelection(this._domNode);
 dojo.event.connect(this._domNode,"onchange",this,"onChange");
@@ -49247,27 +29378,27 @@
 },onChange:function(){
 if(this._parentToolbar.checkAvailability()){
 var sv=this._domNode.value.toLowerCase();
-var _b09=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_b09){
-var _b0a=_b09.getCommand(this._name);
-if(_b0a){
-_b0a.execute(sv);
+var _a09=dojo.widget.Editor2Manager.getCurrentInstance();
+if(_a09){
+var _a0a=_a09.getCommand(this._name);
+if(_a0a){
+_a0a.execute(sv);
 }
 }
 }
 },refreshState:function(){
 if(this._domNode){
 dojo.widget.Editor2ToolbarFormatBlockPlainSelect.superclass.refreshState.call(this);
-var _b0b=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_b0b){
-var _b0c=_b0b.getCommand(this._name);
-if(_b0c){
-var _b0d=_b0c.getValue();
-if(!_b0d){
-_b0d="";
+var _a0b=dojo.widget.Editor2Manager.getCurrentInstance();
+if(_a0b){
+var _a0c=_a0b.getCommand(this._name);
+if(_a0c){
+var _a0d=_a0c.getValue();
+if(!_a0d){
+_a0d="";
 }
 dojo.lang.forEach(this._domNode.options,function(item){
-if(item.value.toLowerCase()==_b0d.toLowerCase()){
+if(item.value.toLowerCase()==_a0d.toLowerCase()){
 item.selected=true;
 }
 });
@@ -49275,10 +29406,9 @@
 }
 }
 }});
-dojo.declare("dojo.widget.Editor2ToolbarComboItem",dojo.widget.Editor2ToolbarDropDownButton,{href:null,create:function(node,_b10){
+dojo.declare("dojo.widget.Editor2ToolbarComboItem",dojo.widget.Editor2ToolbarDropDownButton,{href:null,create:function(node,_a10){
 dojo.widget.Editor2ToolbarComboItem.superclass.create.apply(this,arguments);
 if(!this._contentPane){
-dojo.require("dojo.widget.ContentPane");
 this._contentPane=dojo.widget.createWidget("ContentPane",{preload:"true"});
 this._contentPane.addOnLoad(this,"setup");
 this._contentPane.setUrl(this.href);
@@ -49298,11 +29428,11 @@
 },onChange:function(e){
 if(this._parentToolbar.checkAvailability()){
 var name=e.currentTarget.getAttribute("dropDownItemName");
-var _b15=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_b15){
-var _b16=_b15.getCommand(this._name);
-if(_b16){
-_b16.execute(name);
+var _a15=dojo.widget.Editor2Manager.getCurrentInstance();
+if(_a15){
+var _a16=_a15.getCommand(this._name);
+if(_a16){
+_a16.execute(name);
 }
 }
 }
@@ -49312,19 +29442,19 @@
 },onMouseOutItem:function(e){
 dojo.html.removeClass(e.currentTarget,this._parentToolbar.ToolbarHighlightedSelectItemStyle);
 }});
-dojo.declare("dojo.widget.Editor2ToolbarFormatBlockSelect",dojo.widget.Editor2ToolbarComboItem,{href:dojo.uri.dojoUri("src/widget/templates/Editor2/EditorToolbar_FormatBlock.html"),setup:function(){
+dojo.declare("dojo.widget.Editor2ToolbarFormatBlockSelect",dojo.widget.Editor2ToolbarComboItem,{href:dojo.uri.moduleUri("dojo.widget","templates/Editor2/EditorToolbar_FormatBlock.html"),setup:function(){
 dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.setup.call(this);
-var _b19=this._contentPane.domNode.all||this._contentPane.domNode.getElementsByTagName("*");
+var _a19=this._contentPane.domNode.all||this._contentPane.domNode.getElementsByTagName("*");
 this._blockNames={};
 this._blockDisplayNames={};
-for(var x=0;x<_b19.length;x++){
-var node=_b19[x];
+for(var x=0;x<_a19.length;x++){
+var node=_a19[x];
 dojo.html.disableSelection(node);
 var name=node.getAttribute("dropDownItemName");
 if(name){
 this._blockNames[name]=node;
-var _b1d=node.getElementsByTagName(name);
-this._blockDisplayNames[name]=_b1d[_b1d.length-1].innerHTML;
+var _a1d=node.getElementsByTagName(name);
+this._blockDisplayNames[name]=_a1d[_a1d.length-1].innerHTML;
 }
 }
 for(var name in this._blockNames){
@@ -49342,27 +29472,27 @@
 },refreshState:function(){
 dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.refreshState.call(this);
 if(this._lastState!=dojo.widget.Editor2Manager.commandState.Disabled){
-var _b1f=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_b1f){
-var _b20=_b1f.getCommand(this._name);
-if(_b20){
-var _b21=_b20.getValue();
-if(_b21==this._lastSelectedFormat&&this._blockDisplayNames){
+var _a1f=dojo.widget.Editor2Manager.getCurrentInstance();
+if(_a1f){
+var _a20=_a1f.getCommand(this._name);
+if(_a20){
+var _a21=_a20.getValue();
+if(_a21==this._lastSelectedFormat&&this._blockDisplayNames){
 return this._lastState;
 }
-this._lastSelectedFormat=_b21;
-var _b22=this._domNode.getElementsByTagName("label")[0];
-var _b23=false;
+this._lastSelectedFormat=_a21;
+var _a22=this._domNode.getElementsByTagName("label")[0];
+var _a23=false;
 if(this._blockDisplayNames){
 for(var name in this._blockDisplayNames){
-if(name==_b21){
-_b22.innerHTML=this._blockDisplayNames[name];
-_b23=true;
+if(name==_a21){
+_a22.innerHTML=this._blockDisplayNames[name];
+_a23=true;
 break;
 }
 }
-if(!_b23){
-_b22.innerHTML="&nbsp;";
+if(!_a23){
+_a22.innerHTML="&nbsp;";
 }
 }
 }
@@ -49370,13 +29500,13 @@
 }
 return this._lastState;
 }});
-dojo.declare("dojo.widget.Editor2ToolbarFontSizeSelect",dojo.widget.Editor2ToolbarComboItem,{href:dojo.uri.dojoUri("src/widget/templates/Editor2/EditorToolbar_FontSize.html"),setup:function(){
+dojo.declare("dojo.widget.Editor2ToolbarFontSizeSelect",dojo.widget.Editor2ToolbarComboItem,{href:dojo.uri.moduleUri("dojo.widget","templates/Editor2/EditorToolbar_FontSize.html"),setup:function(){
 dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.setup.call(this);
-var _b25=this._contentPane.domNode.all||this._contentPane.domNode.getElementsByTagName("*");
+var _a25=this._contentPane.domNode.all||this._contentPane.domNode.getElementsByTagName("*");
 this._fontsizes={};
 this._fontSizeDisplayNames={};
-for(var x=0;x<_b25.length;x++){
-var node=_b25[x];
+for(var x=0;x<_a25.length;x++){
+var node=_a25[x];
 dojo.html.disableSelection(node);
 var name=node.getAttribute("dropDownItemName");
 if(name){
@@ -49399,27 +29529,27 @@
 },refreshState:function(){
 dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.refreshState.call(this);
 if(this._lastState!=dojo.widget.Editor2Manager.commandState.Disabled){
-var _b2a=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_b2a){
-var _b2b=_b2a.getCommand(this._name);
-if(_b2b){
-var size=_b2b.getValue();
+var _a2a=dojo.widget.Editor2Manager.getCurrentInstance();
+if(_a2a){
+var _a2b=_a2a.getCommand(this._name);
+if(_a2b){
+var size=_a2b.getValue();
 if(size==this._lastSelectedSize&&this._fontSizeDisplayNames){
 return this._lastState;
 }
 this._lastSelectedSize=size;
-var _b2d=this._domNode.getElementsByTagName("label")[0];
-var _b2e=false;
+var _a2d=this._domNode.getElementsByTagName("label")[0];
+var _a2e=false;
 if(this._fontSizeDisplayNames){
 for(var name in this._fontSizeDisplayNames){
 if(name==size){
-_b2d.innerHTML=this._fontSizeDisplayNames[name];
-_b2e=true;
+_a2d.innerHTML=this._fontSizeDisplayNames[name];
+_a2e=true;
 break;
 }
 }
-if(!_b2e){
-_b2d.innerHTML="&nbsp;";
+if(!_a2e){
+_a2d.innerHTML="&nbsp;";
 }
 }
 }
@@ -49427,24 +29557,24 @@
 }
 return this._lastState;
 }});
-dojo.declare("dojo.widget.Editor2ToolbarFontNameSelect",dojo.widget.Editor2ToolbarFontSizeSelect,{href:dojo.uri.dojoUri("src/widget/templates/Editor2/EditorToolbar_FontName.html")});
+dojo.declare("dojo.widget.Editor2ToolbarFontNameSelect",dojo.widget.Editor2ToolbarFontSizeSelect,{href:dojo.uri.moduleUri("dojo.widget","templates/Editor2/EditorToolbar_FontName.html")});
 dojo.widget.defineWidget("dojo.widget.Editor2Toolbar",dojo.widget.HtmlWidget,function(){
 dojo.event.connect(this,"fillInTemplate",dojo.lang.hitch(this,function(){
 if(dojo.render.html.ie){
 this.domNode.style.zoom=1;
 }
 }));
-},{templatePath:dojo.uri.dojoUri("src/widget/templates/EditorToolbar.html"),templateCssPath:dojo.uri.dojoUri("src/widget/templates/EditorToolbar.css"),ToolbarLatchedItemStyle:"ToolbarButtonLatched",ToolbarEnabledItemStyle:"ToolbarButtonEnabled",ToolbarDisabledItemStyle:"ToolbarButtonDisabled",ToolbarHighlightedItemStyle:"ToolbarButtonHighlighted",ToolbarHighlightedSelectStyle:"ToolbarSelectHighlighted",ToolbarHighlightedSelectItemStyle:"ToolbarSelectHighlightedItem",postCreate:function(){
-var _b30=dojo.html.getElementsByClass("dojoEditorToolbarItem",this.domNode);
+},{templateString:"<div dojoAttachPoint=\"domNode\" class=\"EditorToolbarDomNode\" unselectable=\"on\">\n\t<table cellpadding=\"3\" cellspacing=\"0\" border=\"0\">\n\t\t<!--\n\t\t\tour toolbar should look something like:\n\n\t\t\t+=======+=======+=======+=============================================+\n\t\t\t| w   w | style | copy  | bo | it | un | le | ce | ri |\n\t\t\t| w w w | style |=======|==============|==============|\n\t\t\t|  w w  | style | paste |  undo | redo | change style |\n\t\t\t+=======+=======+=======+=============================================+\n\t\t-->\n\t\t<tbody>\n\t\t\t<tr valign=\"top\">\n\t\t\t\t<td rowspan=\"2\">\n\t\t\t\t\t<div class=\"bigIcon\" dojoAttachPoint=\"wikiWordButton\"\n\t\t\t\t\t\tdojoOnClick=\"wikiWordClick; buttonClick;\">\n\t\t\t\t\t\t<span style=\"font-size: 30px; margin-left: 5px;\">\n\t\t\t\t\t\t\tW\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</td>\n\t\t\t\t<td rowspan=\"2\">\n\t\t\t\t\t<div class=\"bigIcon\" dojoAttachPoint=\"styleDropdownButton\"\n\t\t\t\t\t\tdojoOnClick=\"styleDropdownClick; buttonClick;\">\n\t\t\t\t\t\t<span unselectable=\"on\"\n\t\t\t\t\t\t\tstyle=\"font-size: 30px; margin-left: 5px;\">\n\t\t\t\t\t\t\tS\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"StyleDropdownContainer\" style=\"display: none;\"\n\t\t\t\t\t\tdojoAttachPoint=\"styleDropdownContainer\">\n\t\t\t\t\t\t<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\"\n\t\t\t\t\t\t\theight=\"100%\" width=\"100%\">\n\t\t\t\t\t\t\t<tr valign=\"top\">\n\t\t\t\t\t\t\t\t<td rowspan=\"2\">\n\t\t\t\t\t\t\t\t\t<div style=\"height: 245px; overflow: auto;\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"normalTextClick\">normal</div>\n\t\t\t\t\t\t\t\t\t\t<h1 class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"h1TextClick\">Heading 1</h1>\n\t\t\t\t\t\t\t\t\t\t<h2 class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"h2TextClick\">Heading 2</h2>\n\t\t\t\t\t\t\t\t\t\t<h3 class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"h3TextClick\">Heading 3</h3>\n\t\t\t\t\t\t\t\t\t\t<h4 class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"h4TextClick\">Heading 4</h4>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"blahTextClick\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"blahTextClick\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"blahTextClick\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\">blah</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<!--\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<span class=\"iconContainer\" dojoOnClick=\"buttonClick;\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"icon justifyleft\" \n\t\t\t\t\t\t\t\t\t\t\tstyle=\"float: left;\">&nbsp;</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<span class=\"iconContainer\" dojoOnClick=\"buttonClick;\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"icon justifycenter\" \n\t\t\t\t\t\t\t\t\t\t\tstyle=\"float: left;\">&nbsp;</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<span class=\"iconContainer\" dojoOnClick=\"buttonClick;\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"icon justifyright\" \n\t\t\t\t\t\t\t\t\t\t\tstyle=\"float: left;\">&nbsp;</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<span class=\"iconContainer\" dojoOnClick=\"buttonClick;\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"icon justifyfull\" \n\t\t\t\t\t\t\t\t\t\t\tstyle=\"float: left;\">&nbsp;</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t-->\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr valign=\"top\">\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\tthud\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</div>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<!-- copy -->\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"copyButton\"\n\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\tdojoOnClick=\"copyClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon copy\" \n\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\tstyle=\"float: left;\">&nbsp;</span> copy\n\t\t\t\t\t</span>\n\t\t\t\t\t<!-- \"droppable\" options -->\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"boldButton\"\n\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\tdojoOnClick=\"boldClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon bold\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"italicButton\"\n\t\t\t\t\t\tdojoOnClick=\"italicClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon italic\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"underlineButton\"\n\t\t\t\t\t\tdojoOnClick=\"underlineClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon underline\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"leftButton\"\n\t\t\t\t\t\tdojoOnClick=\"leftClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon justifyleft\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"fullButton\"\n\t\t\t\t\t\tdojoOnClick=\"fullClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon justifyfull\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"rightButton\"\n\t\t\t\t\t\tdojoOnClick=\"rightClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon justifyright\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>\n\t\t\t\t\t<!-- paste -->\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"pasteButton\"\n\t\t\t\t\t\tdojoOnClick=\"pasteClick; buttonClick;\" unselectable=\"on\">\n\t\t\t\t\t\t<span class=\"icon paste\" style=\"float: left;\" unselectable=\"on\">&nbsp;</span> paste\n\t\t\t\t\t</span>\n\t\t\t\t\t<!-- \"droppable\" options -->\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"undoButton\"\n\t\t\t\t\t\tdojoOnClick=\"undoClick; buttonClick;\" unselectable=\"on\">\n\t\t\t\t\t\t<span class=\"icon undo\" style=\"float: left;\" unselectable=\"on\">&nbsp;</span> undo\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"redoButton\"\n\t\t\t\t\t\tdojoOnClick=\"redoClick; buttonClick;\" unselectable=\"on\">\n\t\t\t\t\t\t<span class=\"icon redo\" style=\"float: left;\" unselectable=\"on\">&nbsp;</span> redo\n\t\t\t\t\t</span>\n\t\t\t\t</td>\t\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n",templateCssString:".StyleDropdownContainer {\n\tposition: absolute;\n\tz-index: 1000;\n\toverflow: auto;\n\tcursor: default;\n\twidth: 250px;\n\theight: 250px;\n\tbackground-color: white;\n\tborder: 1px solid black;\n}\n\n.ColorDropdownContainer {\n\tposition: absolute;\n\tz-index: 1000;\n\toverflow: auto;\n\tcursor: default;\n\twidth: 250px;\n\theight: 150px;\n\tbackground-color: white;\n\tborder: 1px solid black;\n}\n\n.EditorToolbarDomNode {\n\tbackground-image: url(buttons/bg-fade.png);\n\tbackground-repeat: repeat-x;\n\tbackground-position: 0px -50px;\n}\n\n.EditorToolbarSmallBg {\n\tbackground-image: url(images/toolbar-bg.gif);\n\tbackground-repeat: repeat-x;\n\tbackground-position: 0px 0px;\n}\n\n/*\nbody {\n\tbackground:url(images/blank.gif) fixed;\n}*/\n\n.IEFixedToolbar {\n\tposition:absolute;\n\t/* top:0; */\n\ttop: expression(eval((document.documentElement||document.body).scrollTop));\n}\n\ndiv.bigIcon {\n\twidth: 40px;\n\theight: 40px; \n\t/* background-color: white; */\n\t/* border: 1px solid #a6a7a3; */\n\tfont-family: Verdana, Trebuchet, Tahoma, Arial;\n}\n\n.iconContainer {\n\tfont-family: Verdana, Trebuchet, Tahoma, Arial;\n\tfont-size: 13px;\n\tfloat: left;\n\theight: 18px;\n\tdisplay: block;\n\t/* background-color: white; */\n\tcursor: pointer;\n\tpadding: 1px 4px 1px 1px; /* almost the same as a transparent border */\n\tborder: 0px;\n}\n\n.dojoE2TBIcon {\n\tdisplay: block;\n\ttext-align: center;\n\tmin-width: 18px;\n\twidth: 18px;\n\theight: 18px;\n\t/* background-color: #a6a7a3; */\n\tbackground-repeat: no-repeat;\n\tbackground-image: url(buttons/aggregate.gif);\n}\n\n\n.dojoE2TBIcon[class~=dojoE2TBIcon] {\n}\n\n.ToolbarButtonLatched {\n    border: #316ac5 1px solid; !important;\n    padding: 0px 3px 0px 0px; !important; /* make room for border */\n    background-color: #c1d2ee;\n}\n\n.ToolbarButtonHighlighted {\n    border: #316ac5 1px solid; !important;\n    padding: 0px 3px 0px 0px; !important; /* make room for border */\n    background-color: #dff1ff;\n}\n\n.ToolbarButtonDisabled{\n    filter: gray() alpha(opacity=30); /* IE */\n    opacity: 0.30; /* Safari, Opera and Mozilla */\n}\n\n.headingContainer {\n\twidth: 150px;\n\theight: 30px;\n\tmargin: 0px;\n\t/* padding-left: 5px; */\n\toverflow: hidden;\n\tline-height: 25px;\n\tborder-bottom: 1px solid black;\n\tborder-top: 1px solid white;\n}\n\n.EditorToolbarDomNode select {\n\tfont-size: 14px;\n}\n \n.dojoE2TBIcon_Sep { width: 5px; min-width: 5px; max-width: 5px; background-position: 0px 0px}\n.dojoE2TBIcon_Backcolor { background-position: -18px 0px}\n.dojoE2TBIcon_Bold { background-position: -36px 0px}\n.dojoE2TBIcon_Cancel { background-position: -54px 0px}\n.dojoE2TBIcon_Copy { background-position: -72px 0px}\n.dojoE2TBIcon_Link { background-position: -90px 0px}\n.dojoE2TBIcon_Cut { background-position: -108px 0px}\n.dojoE2TBIcon_Delete { background-position: -126px 0px}\n.dojoE2TBIcon_TextColor { background-position: -144px 0px}\n.dojoE2TBIcon_BackgroundColor { background-position: -162px 0px}\n.dojoE2TBIcon_Indent { background-position: -180px 0px}\n.dojoE2TBIcon_HorizontalLine { background-position: -198px 0px}\n.dojoE2TBIcon_Image { background-position: -216px 0px}\n.dojoE2TBIcon_NumberedList { background-position: -234px 0px}\n.dojoE2TBIcon_Table { background-position: -252px 0px}\n.dojoE2TBIcon_BulletedList { background-position: -270px 0px}\n.dojoE2TBIcon_Italic { background-position: -288px 0px}\n.dojoE2TBIcon_CenterJustify { background-position: -306px 0px}\n.dojoE2TBIcon_BlockJustify { background-position: -324px 0px}\n.dojoE2TBIcon_LeftJustify { background-position: -342px 0px}\n.dojoE2TBIcon_RightJustify { background-position: -360px 0px}\n.dojoE2TBIcon_left_to_right { background-position: -378px 0px}\n.dojoE2TBIcon_list_bullet_indent { background-position: -396px 0px}\n.dojoE2TBIcon_list_bullet_outdent { background-position: -414px 0px}\n.dojoE2TBIcon_list_num_indent { background-position: -432px 0px}\n.dojoE2TBIcon_list_num_outdent { background-position: -450px 0px}\n.dojoE2TBIcon_Outdent { background-position: -468px 0px}\n.dojoE2TBIcon_Paste { background-position: -486px 0px}\n.dojoE2TBIcon_Redo { background-position: -504px 0px}\ndojoE2TBIcon_RemoveFormat { background-position: -522px 0px}\n.dojoE2TBIcon_right_to_left { background-position: -540px 0px}\n.dojoE2TBIcon_Save { background-position: -558px 0px}\n.dojoE2TBIcon_Space { background-position: -576px 0px}\n.dojoE2TBIcon_StrikeThrough { background-position: -594px 0px}\n.dojoE2TBIcon_Subscript { background-position: -612px 0px}\n.dojoE2TBIcon_Superscript { background-position: -630px 0px}\n.dojoE2TBIcon_Underline { background-position: -648px 0px}\n.dojoE2TBIcon_Undo { background-position: -666px 0px}\n.dojoE2TBIcon_WikiWord { background-position: -684px 0px}\n\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/EditorToolbar.css"),ToolbarLatchedItemStyle:"ToolbarButtonLatched",ToolbarEnabledItemStyle:"ToolbarButtonEnabled",ToolbarDisabledItemStyle:"ToolbarButtonDisabled",ToolbarHighlightedItemStyle:"ToolbarButtonHighlighted",ToolbarHighlightedSelectStyle:"ToolbarSelectHighlighted",ToolbarHighlightedSelectItemStyle:"ToolbarSelectHighlightedItem",postCreate:function(){
+var _a30=dojo.html.getElementsByClass("dojoEditorToolbarItem",this.domNode);
 this.items={};
-for(var x=0;x<_b30.length;x++){
-var node=_b30[x];
-var _b33=node.getAttribute("dojoETItemName");
-if(_b33){
-var item=dojo.widget.Editor2ToolbarItemManager.getToolbarItem(_b33);
+for(var x=0;x<_a30.length;x++){
+var node=_a30[x];
+var _a33=node.getAttribute("dojoETItemName");
+if(_a33){
+var item=dojo.widget.Editor2ToolbarItemManager.getToolbarItem(_a33);
 if(item){
 item.create(node,this);
-this.items[_b33.toLowerCase()]=item;
+this.items[_a33.toLowerCase()]=item;
 }else{
 node.style.display="none";
 }
@@ -49459,8 +29589,8 @@
 this.parent.focus();
 return true;
 }
-var _b36=dojo.widget.Editor2Manager.getCurrentInstance();
-if(this.shareGroup==_b36.toolbarGroup){
+var _a36=dojo.widget.Editor2Manager.getCurrentInstance();
+if(this.shareGroup==_a36.toolbarGroup){
 return true;
 }
 return false;
@@ -49471,9 +29601,28 @@
 }
 dojo.widget.Editor2Toolbar.superclass.destroy.call(this);
 }});
+dojo.provide("dojo.uri.cache");
+dojo.uri.cache={_cache:{},set:function(uri,_a39){
+this._cache[uri.toString()]=_a39;
+return uri;
+},remove:function(uri){
+delete this._cache[uri.toString()];
+},get:function(uri){
+var key=uri.toString();
+var _a3d=this._cache[key];
+if(!_a3d){
+_a3d=dojo.hostenv.getText(key);
+if(_a3d){
+this._cache[key]=_a3d;
+}
+}
+return _a3d;
+},allow:function(uri){
+return uri;
+}};
 dojo.provide("dojo.lfx.shadow");
 dojo.lfx.shadow=function(node){
-this.shadowPng=dojo.uri.dojoUri("src/html/images/shadow");
+this.shadowPng=dojo.uri.moduleUri("dojo.html","images/shadow");
 this.shadowThickness=8;
 this.shadowOffset=15;
 this.init(node);
@@ -49491,77 +29640,77 @@
 this._makePiece("bl","top",0,"left",x1);
 this._makePiece("b","top",0,"left",0,"crop");
 this._makePiece("br","top",0,"left",0);
-},_makePiece:function(name,_b3e,_b3f,_b40,_b41,_b42){
+},_makePiece:function(name,_a45,_a46,_a47,_a48,_a49){
 var img;
 var url=this.shadowPng+name.toUpperCase()+".png";
 if(dojo.render.html.ie55||dojo.render.html.ie60){
 img=dojo.doc().createElement("div");
-img.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+url+"'"+(_b42?", sizingMethod='"+_b42+"'":"")+")";
+img.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+url+"'"+(_a49?", sizingMethod='"+_a49+"'":"")+")";
 }else{
 img=dojo.doc().createElement("img");
 img.src=url;
 }
 img.style.position="absolute";
-img.style[_b3e]=_b3f+"px";
-img.style[_b40]=_b41+"px";
+img.style[_a45]=_a46+"px";
+img.style[_a47]=_a48+"px";
 img.style.width=this.shadowThickness+"px";
 img.style.height=this.shadowThickness+"px";
 this.pieces[name]=img;
 this.node.appendChild(img);
-},size:function(_b45,_b46){
-var _b47=_b46-(this.shadowOffset+this.shadowThickness+1);
-if(_b47<0){
-_b47=0;
+},size:function(_a4c,_a4d){
+var _a4e=_a4d-(this.shadowOffset+this.shadowThickness+1);
+if(_a4e<0){
+_a4e=0;
 }
-if(_b46<1){
-_b46=1;
+if(_a4d<1){
+_a4d=1;
 }
-if(_b45<1){
-_b45=1;
+if(_a4c<1){
+_a4c=1;
 }
 with(this.pieces){
-l.style.height=_b47+"px";
-r.style.height=_b47+"px";
-b.style.width=(_b45-1)+"px";
-bl.style.top=(_b46-1)+"px";
-b.style.top=(_b46-1)+"px";
-br.style.top=(_b46-1)+"px";
-tr.style.left=(_b45-1)+"px";
-r.style.left=(_b45-1)+"px";
-br.style.left=(_b45-1)+"px";
+l.style.height=_a4e+"px";
+r.style.height=_a4e+"px";
+b.style.width=(_a4c-1)+"px";
+bl.style.top=(_a4d-1)+"px";
+b.style.top=(_a4d-1)+"px";
+br.style.top=(_a4d-1)+"px";
+tr.style.left=(_a4c-1)+"px";
+r.style.left=(_a4c-1)+"px";
+br.style.left=(_a4c-1)+"px";
 }
 }});
 dojo.provide("dojo.widget.html.layout");
-dojo.widget.html.layout=function(_b48,_b49,_b4a){
-dojo.html.addClass(_b48,"dojoLayoutContainer");
-_b49=dojo.lang.filter(_b49,function(_b4b,idx){
-_b4b.idx=idx;
-return dojo.lang.inArray(["top","bottom","left","right","client","flood"],_b4b.layoutAlign);
+dojo.widget.html.layout=function(_a4f,_a50,_a51){
+dojo.html.addClass(_a4f,"dojoLayoutContainer");
+_a50=dojo.lang.filter(_a50,function(_a52,idx){
+_a52.idx=idx;
+return dojo.lang.inArray(["top","bottom","left","right","client","flood"],_a52.layoutAlign);
 });
-if(_b4a&&_b4a!="none"){
-var rank=function(_b4e){
-switch(_b4e.layoutAlign){
+if(_a51&&_a51!="none"){
+var rank=function(_a55){
+switch(_a55.layoutAlign){
 case "flood":
 return 1;
 case "left":
 case "right":
-return (_b4a=="left-right")?2:3;
+return (_a51=="left-right")?2:3;
 case "top":
 case "bottom":
-return (_b4a=="left-right")?3:2;
+return (_a51=="left-right")?3:2;
 default:
 return 4;
 }
 };
-_b49.sort(function(a,b){
+_a50.sort(function(a,b){
 return (rank(a)-rank(b))||(a.idx-b.idx);
 });
 }
-var f={top:dojo.html.getPixelValue(_b48,"padding-top",true),left:dojo.html.getPixelValue(_b48,"padding-left",true)};
-dojo.lang.mixin(f,dojo.html.getContentBox(_b48));
-dojo.lang.forEach(_b49,function(_b52){
-var elm=_b52.domNode;
-var pos=_b52.layoutAlign;
+var f={top:dojo.html.getPixelValue(_a4f,"padding-top",true),left:dojo.html.getPixelValue(_a4f,"padding-left",true)};
+dojo.lang.mixin(f,dojo.html.getContentBox(_a4f));
+dojo.lang.forEach(_a50,function(_a59){
+var elm=_a59.domNode;
+var pos=_a59.layoutAlign;
 with(elm.style){
 left=f.left+"px";
 top=f.top+"px";
@@ -49578,14 +29727,14 @@
 }else{
 elm.style.top=f.top+f.height+"px";
 }
-if(_b52.onResized){
-_b52.onResized();
+if(_a59.onResized){
+_a59.onResized();
 }
 }else{
 if(pos=="left"||pos=="right"){
 var w=dojo.html.getMarginBox(elm).width;
-if(_b52.resizeTo){
-_b52.resizeTo(w,f.height);
+if(_a59.resizeTo){
+_a59.resizeTo(w,f.height);
 }else{
 dojo.html.setMarginBox(elm,{width:w,height:f.height});
 }
@@ -49597,8 +29746,8 @@
 }
 }else{
 if(pos=="flood"||pos=="client"){
-if(_b52.resizeTo){
-_b52.resizeTo(f.width,f.height);
+if(_a59.resizeTo){
+_a59.resizeTo(f.width,f.height);
 }else{
 dojo.html.setMarginBox(elm,{width:f.width,height:f.height});
 }
@@ -49635,10 +29784,10 @@
 }
 }
 return true;
-},accepts:function(_b61){
+},accepts:function(_a68){
 if(!dojo.lang.inArray(this.acceptedTypes,"*")){
-for(var i=0;i<_b61.length;i++){
-if(!dojo.lang.inArray(this.acceptedTypes,_b61[i].type)){
+for(var i=0;i<_a68.length;i++){
+if(!dojo.lang.inArray(this.acceptedTypes,_a68[i].type)){
 return false;
 }
 }
@@ -49661,24 +29810,24 @@
 this.target=null;
 this.eventStatus="success";
 };
-dojo.declare("dojo.dnd.DragManager",null,{selectedSources:[],dragObjects:[],dragSources:[],registerDragSource:function(_b68){
-},dropTargets:[],registerDropTarget:function(_b69){
+dojo.declare("dojo.dnd.DragManager",null,{selectedSources:[],dragObjects:[],dragSources:[],registerDragSource:function(_a6f){
+},dropTargets:[],registerDropTarget:function(_a70){
 },lastDragTarget:null,currentDragTarget:null,onKeyDown:function(){
 },onMouseOut:function(){
 },onMouseMove:function(){
 },onMouseUp:function(){
 }});
 dojo.provide("dojo.dnd.HtmlDragManager");
-dojo.declare("dojo.dnd.HtmlDragManager",dojo.dnd.DragManager,{disabled:false,nestedTargets:false,mouseDownTimer:null,dsCounter:0,dsPrefix:"dojoDragSource",dropTargetDimensions:[],currentDropTarget:null,previousDropTarget:null,_dragTriggered:false,selectedSources:[],dragObjects:[],dragSources:[],currentX:null,currentY:null,lastX:null,lastY:null,mouseDownX:null,mouseDownY:null,threshold:7,dropAcceptable:false,cancelEvent:function(e){
+dojo.declare("dojo.dnd.HtmlDragManager",dojo.dnd.DragManager,{disabled:false,nestedTargets:false,mouseDownTimer:null,dsCounter:0,dsPrefix:"dojoDragSource",dropTargetDimensions:[],currentDropTarget:null,previousDropTarget:null,_dragTriggered:false,selectedSources:[],dragObjects:[],dragSources:[],dropTargets:[],currentX:null,currentY:null,lastX:null,lastY:null,mouseDownX:null,mouseDownY:null,threshold:7,dropAcceptable:false,cancelEvent:function(e){
 e.stopPropagation();
 e.preventDefault();
 },registerDragSource:function(ds){
 if(ds["domNode"]){
 var dp=this.dsPrefix;
-var _b6d=dp+"Idx_"+(this.dsCounter++);
-ds.dragSourceId=_b6d;
-this.dragSources[_b6d]=ds;
-ds.domNode.setAttribute(dp,_b6d);
+var _a74=dp+"Idx_"+(this.dsCounter++);
+ds.dragSourceId=_a74;
+this.dragSources[_a74]=ds;
+ds.domNode.setAttribute(dp,_a74);
 if(dojo.render.html.ie){
 dojo.event.browser.addListener(ds.domNode,"ondragstart",this.cancelEvent);
 }
@@ -49686,9 +29835,9 @@
 },unregisterDragSource:function(ds){
 if(ds["domNode"]){
 var dp=this.dsPrefix;
-var _b70=ds.dragSourceId;
+var _a77=ds.dragSourceId;
 delete ds.dragSourceId;
-delete this.dragSources[_b70];
+delete this.dragSources[_a77];
 ds.domNode.setAttribute(dp,null);
 if(dojo.render.html.ie){
 dojo.event.browser.removeListener(ds.domNode,"ondragstart",this.cancelEvent);
@@ -49697,9 +29846,9 @@
 },registerDropTarget:function(dt){
 this.dropTargets.push(dt);
 },unregisterDropTarget:function(dt){
-var _b73=dojo.lang.find(this.dropTargets,dt,true);
-if(_b73>=0){
-this.dropTargets.splice(_b73,1);
+var _a7a=dojo.lang.find(this.dropTargets,dt,true);
+if(_a7a>=0){
+this.dropTargets.splice(_a7a,1);
 }
 },getDragSource:function(e){
 var tn=e.target;
@@ -49729,8 +29878,8 @@
 return;
 }
 }
-var _b79=e.target.nodeType==dojo.html.TEXT_NODE?e.target.parentNode:e.target;
-if(dojo.html.isTag(_b79,"button","textarea","input","select","option")){
+var _a80=e.target.nodeType==dojo.html.TEXT_NODE?e.target.parentNode:e.target;
+if(dojo.html.isTag(_a80,"button","textarea","input","select","option")){
 return;
 }
 var ds=this.getDragSource(e);
@@ -49745,7 +29894,7 @@
 this.mouseDownY=e.pageY;
 e.preventDefault();
 dojo.event.connect(document,"onmousemove",this,"onMouseMove");
-},onMouseUp:function(e,_b7c){
+},onMouseUp:function(e,_a83){
 if(this.selectedSources.length==0){
 return;
 }
@@ -49757,17 +29906,17 @@
 if(this.currentDropTarget){
 this.currentDropTarget.onDropStart();
 }
-dojo.lang.forEach(this.dragObjects,function(_b7d){
+dojo.lang.forEach(this.dragObjects,function(_a84){
 var ret=null;
-if(!_b7d){
+if(!_a84){
 return;
 }
 if(this.currentDropTarget){
-e.dragObject=_b7d;
+e.dragObject=_a84;
 var ce=this.currentDropTarget.domNode.childNodes;
 if(ce.length>0){
 e.dropTarget=ce[0];
-while(e.dropTarget==_b7d.domNode){
+while(e.dropTarget==_a84.domNode){
 e.dropTarget=e.dropTarget.nextSibling;
 }
 }else{
@@ -49782,21 +29931,21 @@
 e.dragStatus=this.dropAcceptable&&ret?"dropSuccess":"dropFailure";
 dojo.lang.delayThese([function(){
 try{
-_b7d.dragSource.onDragEnd(e);
+_a84.dragSource.onDragEnd(e);
 }
 catch(err){
-var _b80={};
+var _a87={};
 for(var i in e){
 if(i=="type"){
-_b80.type="mouseup";
+_a87.type="mouseup";
 continue;
 }
-_b80[i]=e[i];
+_a87[i]=e[i];
 }
-_b7d.dragSource.onDragEnd(_b80);
+_a84.dragSource.onDragEnd(_a87);
 }
 },function(){
-_b7d.onDragEnd(e);
+_a84.onDragEnd(e);
 }]);
 },this);
 this.selectedSources=[];
@@ -49830,14 +29979,14 @@
 },cacheTargetLocations:function(){
 dojo.profile.start("cacheTargetLocations");
 this.dropTargetDimensions=[];
-dojo.lang.forEach(this.dropTargets,function(_b89){
-var tn=_b89.domNode;
-if(!tn||!_b89.accepts([this.dragSource])){
+dojo.lang.forEach(this.dropTargets,function(_a90){
+var tn=_a90.domNode;
+if(!tn||!_a90.accepts([this.dragSource])){
 return;
 }
 var abs=dojo.html.getAbsolutePosition(tn,true);
 var bb=dojo.html.getBorderBox(tn);
-this.dropTargetDimensions.push([[abs.x,abs.y],[abs.x+bb.width,abs.y+bb.height],_b89]);
+this.dropTargetDimensions.push([[abs.x,abs.y],[abs.x+bb.width,abs.y+bb.height],_a90]);
 },this);
 dojo.profile.end("cacheTargetLocations");
 },onMouseMove:function(e){
@@ -49858,25 +30007,25 @@
 dy=e.pageY-this.mouseDownY;
 }
 this.dragSource=this.selectedSources[0];
-dojo.lang.forEach(this.selectedSources,function(_b90){
-if(!_b90){
+dojo.lang.forEach(this.selectedSources,function(_a97){
+if(!_a97){
 return;
 }
-var tdo=_b90.onDragStart(e);
+var tdo=_a97.onDragStart(e);
 if(tdo){
 tdo.onDragStart(e);
 tdo.dragOffset.y+=dy;
 tdo.dragOffset.x+=dx;
-tdo.dragSource=_b90;
+tdo.dragSource=_a97;
 this.dragObjects.push(tdo);
 }
 },this);
 this.previousDropTarget=null;
 this.cacheTargetLocations();
 }
-dojo.lang.forEach(this.dragObjects,function(_b92){
-if(_b92){
-_b92.onDragMove(e);
+dojo.lang.forEach(this.dragObjects,function(_a99){
+if(_a99){
+_a99.onDragMove(e);
 }
 });
 if(this.currentDropTarget){
@@ -49888,8 +30037,8 @@
 this.currentDropTarget.onDragMove(e,this.dragObjects);
 }
 }else{
-var _b95=this.findBestTarget(e);
-if(_b95.target===null){
+var _a9c=this.findBestTarget(e);
+if(_a9c.target===null){
 if(this.currentDropTarget){
 this.currentDropTarget.onDragOut(e);
 this.previousDropTarget=this.currentDropTarget;
@@ -49898,12 +30047,12 @@
 this.dropAcceptable=false;
 return;
 }
-if(this.currentDropTarget!==_b95.target){
+if(this.currentDropTarget!==_a9c.target){
 if(this.currentDropTarget){
 this.previousDropTarget=this.currentDropTarget;
 this.currentDropTarget.onDragOut(e);
 }
-this.currentDropTarget=_b95.target;
+this.currentDropTarget=_a9c.target;
 e.dragObjects=this.dragObjects;
 this.dropAcceptable=this.currentDropTarget.onDragOver(e);
 }else{
@@ -49913,21 +30062,21 @@
 }
 }
 },findBestTarget:function(e){
-var _b97=this;
-var _b98=new Object();
-_b98.target=null;
-_b98.points=null;
-dojo.lang.every(this.dropTargetDimensions,function(_b99){
-if(!_b97.isInsideBox(e,_b99)){
+var _a9e=this;
+var _a9f=new Object();
+_a9f.target=null;
+_a9f.points=null;
+dojo.lang.every(this.dropTargetDimensions,function(_aa0){
+if(!_a9e.isInsideBox(e,_aa0)){
 return true;
 }
-_b98.target=_b99[2];
-_b98.points=_b99;
-return Boolean(_b97.nestedTargets);
+_a9f.target=_aa0[2];
+_a9f.points=_aa0;
+return Boolean(_a9e.nestedTargets);
 });
-return _b98;
-},isInsideBox:function(e,_b9b){
-if((e.pageX>_b9b[0][0])&&(e.pageX<_b9b[1][0])&&(e.pageY>_b9b[0][1])&&(e.pageY<_b9b[1][1])){
+return _a9f;
+},isInsideBox:function(e,_aa2){
+if((e.pageX>_aa2[0][0])&&(e.pageX<_aa2[1][0])&&(e.pageY>_aa2[0][1])&&(e.pageY<_aa2[1][1])){
 return true;
 }
 return false;
@@ -49947,14 +30096,14 @@
 })();
 dojo.provide("dojo.dnd.HtmlDragAndDrop");
 dojo.declare("dojo.dnd.HtmlDragSource",dojo.dnd.DragSource,{dragClass:"",onDragStart:function(){
-var _ba0=new dojo.dnd.HtmlDragObject(this.dragObject,this.type);
+var _aa7=new dojo.dnd.HtmlDragObject(this.dragObject,this.type);
 if(this.dragClass){
-_ba0.dragClass=this.dragClass;
+_aa7.dragClass=this.dragClass;
 }
 if(this.constrainToContainer){
-_ba0.constrainTo(this.constrainingContainer||this.domNode.parentNode);
+_aa7.constrainTo(this.constrainingContainer||this.domNode.parentNode);
 }
-return _ba0;
+return _aa7;
 },setDragHandle:function(node){
 node=dojo.byId(node);
 dojo.dnd.dragManager.unregisterDragSource(this);
@@ -49962,10 +30111,10 @@
 dojo.dnd.dragManager.registerDragSource(this);
 },setDragTarget:function(node){
 this.dragObject=node;
-},constrainTo:function(_ba3){
+},constrainTo:function(_aaa){
 this.constrainToContainer=true;
-if(_ba3){
-this.constrainingContainer=_ba3;
+if(_aaa){
+this.constrainingContainer=_aaa;
 }
 },onSelected:function(){
 for(var i=0;i<this.dragObjects.length;i++){
@@ -49998,35 +30147,35 @@
 var isTr=(ltn=="tr");
 if((isTr)||(ltn=="tbody")){
 var doc=this.domNode.ownerDocument;
-var _bad=doc.createElement("table");
+var _ab4=doc.createElement("table");
 if(isTr){
-var _bae=doc.createElement("tbody");
-_bad.appendChild(_bae);
-_bae.appendChild(node);
+var _ab5=doc.createElement("tbody");
+_ab4.appendChild(_ab5);
+_ab5.appendChild(node);
 }else{
-_bad.appendChild(node);
+_ab4.appendChild(node);
 }
-var _baf=((isTr)?this.domNode:this.domNode.firstChild);
-var _bb0=((isTr)?node:node.firstChild);
-var _bb1=tdp.childNodes;
-var _bb2=_bb0.childNodes;
-for(var i=0;i<_bb1.length;i++){
-if((_bb2[i])&&(_bb2[i].style)){
-_bb2[i].style.width=dojo.html.getContentBox(_bb1[i]).width+"px";
+var _ab6=((isTr)?this.domNode:this.domNode.firstChild);
+var _ab7=((isTr)?node:node.firstChild);
+var _ab8=_ab6.childNodes;
+var _ab9=_ab7.childNodes;
+for(var i=0;i<_ab8.length;i++){
+if((_ab9[i])&&(_ab9[i].style)){
+_ab9[i].style.width=dojo.html.getContentBox(_ab8[i]).width+"px";
 }
 }
-node=_bad;
+node=_ab4;
 }
 if((dojo.render.html.ie55||dojo.render.html.ie60)&&this.createIframe){
 with(node.style){
 top="0px";
 left="0px";
 }
-var _bb4=document.createElement("div");
-_bb4.appendChild(node);
-this.bgIframe=new dojo.html.BackgroundIframe(_bb4);
-_bb4.appendChild(this.bgIframe.iframe);
-node=_bb4;
+var _abb=document.createElement("div");
+_abb.appendChild(node);
+this.bgIframe=new dojo.html.BackgroundIframe(_abb);
+_abb.appendChild(this.bgIframe.iframe);
+node=_abb;
 }
 node.style.zIndex=999;
 return node;
@@ -50049,32 +30198,32 @@
 dojo.event.topic.publish("dragStart",{source:this});
 },getConstraints:function(){
 if(this.constrainingContainer.nodeName.toLowerCase()=="body"){
-var _bb6=dojo.html.getViewport();
-var _bb7=_bb6.width;
-var _bb8=_bb6.height;
-var _bb9=dojo.html.getScroll().offset;
-var x=_bb9.x;
-var y=_bb9.y;
+var _abd=dojo.html.getViewport();
+var _abe=_abd.width;
+var _abf=_abd.height;
+var _ac0=dojo.html.getScroll().offset;
+var x=_ac0.x;
+var y=_ac0.y;
 }else{
-var _bbc=dojo.html.getContentBox(this.constrainingContainer);
-_bb7=_bbc.width;
-_bb8=_bbc.height;
+var _ac3=dojo.html.getContentBox(this.constrainingContainer);
+_abe=_ac3.width;
+_abf=_ac3.height;
 x=this.containingBlockPosition.x+dojo.html.getPixelValue(this.constrainingContainer,"padding-left",true)+dojo.html.getBorderExtent(this.constrainingContainer,"left");
 y=this.containingBlockPosition.y+dojo.html.getPixelValue(this.constrainingContainer,"padding-top",true)+dojo.html.getBorderExtent(this.constrainingContainer,"top");
 }
 var mb=dojo.html.getMarginBox(this.domNode);
-return {minX:x,minY:y,maxX:x+_bb7-mb.width,maxY:y+_bb8-mb.height};
+return {minX:x,minY:y,maxX:x+_abe-mb.width,maxY:y+_abf-mb.height};
 },updateDragOffset:function(){
-var _bbe=dojo.html.getScroll().offset;
-if(_bbe.y!=this.scrollOffset.y){
-var diff=_bbe.y-this.scrollOffset.y;
+var _ac5=dojo.html.getScroll().offset;
+if(_ac5.y!=this.scrollOffset.y){
+var diff=_ac5.y-this.scrollOffset.y;
 this.dragOffset.y+=diff;
-this.scrollOffset.y=_bbe.y;
+this.scrollOffset.y=_ac5.y;
 }
-if(_bbe.x!=this.scrollOffset.x){
-var diff=_bbe.x-this.scrollOffset.x;
+if(_ac5.x!=this.scrollOffset.x){
+var diff=_ac5.x-this.scrollOffset.x;
 this.dragOffset.x+=diff;
-this.scrollOffset.x=_bbe.x;
+this.scrollOffset.x=_ac5.x;
 }
 },onDragMove:function(e){
 this.updateDragOffset();
@@ -50110,22 +30259,22 @@
 this.dragClone=null;
 break;
 case "dropFailure":
-var _bc6=dojo.html.getAbsolutePosition(this.dragClone,true);
-var _bc7={left:this.dragStartPosition.x+1,top:this.dragStartPosition.y+1};
-var anim=dojo.lfx.slideTo(this.dragClone,_bc7,300);
-var _bc9=this;
+var _acd=dojo.html.getAbsolutePosition(this.dragClone,true);
+var _ace={left:this.dragStartPosition.x+1,top:this.dragStartPosition.y+1};
+var anim=dojo.lfx.slideTo(this.dragClone,_ace,300);
+var _ad0=this;
 dojo.event.connect(anim,"onEnd",function(e){
-dojo.html.removeNode(_bc9.dragClone);
-_bc9.dragClone=null;
+dojo.html.removeNode(_ad0.dragClone);
+_ad0.dragClone=null;
 });
 anim.play();
 break;
 }
 dojo.event.topic.publish("dragEnd",{source:this});
-},constrainTo:function(_bcb){
+},constrainTo:function(_ad2){
 this.constrainToContainer=true;
-if(_bcb){
-this.constrainingContainer=_bcb;
+if(_ad2){
+this.constrainingContainer=_ad2;
 }else{
 this.constrainingContainer=this.domNode.parentNode;
 }
@@ -50141,18 +30290,18 @@
 return false;
 }
 this.childBoxes=[];
-for(var i=0,_bd0;i<this.domNode.childNodes.length;i++){
-_bd0=this.domNode.childNodes[i];
-if(_bd0.nodeType!=dojo.html.ELEMENT_NODE){
+for(var i=0,_ad7;i<this.domNode.childNodes.length;i++){
+_ad7=this.domNode.childNodes[i];
+if(_ad7.nodeType!=dojo.html.ELEMENT_NODE){
 continue;
 }
-var pos=dojo.html.getAbsolutePosition(_bd0,true);
-var _bd2=dojo.html.getBorderBox(_bd0);
-this.childBoxes.push({top:pos.y,bottom:pos.y+_bd2.height,left:pos.x,right:pos.x+_bd2.width,height:_bd2.height,width:_bd2.width,node:_bd0});
+var pos=dojo.html.getAbsolutePosition(_ad7,true);
+var _ad9=dojo.html.getBorderBox(_ad7);
+this.childBoxes.push({top:pos.y,bottom:pos.y+_ad9.height,left:pos.x,right:pos.x+_ad9.width,height:_ad9.height,width:_ad9.width,node:_ad7});
 }
 return true;
 },_getNodeUnderMouse:function(e){
-for(var i=0,_bd5;i<this.childBoxes.length;i++){
+for(var i=0,_adc;i<this.childBoxes.length;i++){
 with(this.childBoxes[i]){
 if(e.pageX>=left&&e.pageX<=right&&e.pageY>=top&&e.pageY<=bottom){
 return i;
@@ -50179,30 +30328,30 @@
 left=dojo.html.getAbsolutePosition(this.domNode,true).x+"px";
 }
 }
-},onDragMove:function(e,_bd7){
+},onDragMove:function(e,_ade){
 var i=this._getNodeUnderMouse(e);
 if(!this.dropIndicator){
 this.createDropIndicator();
 }
-var _bd9=this.vertical?dojo.html.gravity.WEST:dojo.html.gravity.NORTH;
+var _ae0=this.vertical?dojo.html.gravity.WEST:dojo.html.gravity.NORTH;
 var hide=false;
 if(i<0){
 if(this.childBoxes.length){
-var _bdb=(dojo.html.gravity(this.childBoxes[0].node,e)&_bd9);
-if(_bdb){
+var _ae2=(dojo.html.gravity(this.childBoxes[0].node,e)&_ae0);
+if(_ae2){
 hide=true;
 }
 }else{
-var _bdb=true;
+var _ae2=true;
 }
 }else{
-var _bdc=this.childBoxes[i];
-var _bdb=(dojo.html.gravity(_bdc.node,e)&_bd9);
-if(_bdc.node===_bd7[0].dragSource.domNode){
+var _ae3=this.childBoxes[i];
+var _ae2=(dojo.html.gravity(_ae3.node,e)&_ae0);
+if(_ae3.node===_ade[0].dragSource.domNode){
 hide=true;
 }else{
-var _bdd=_bdb?(i>0?this.childBoxes[i-1]:_bdc):(i<this.childBoxes.length-1?this.childBoxes[i+1]:_bdc);
-if(_bdd.node===_bd7[0].dragSource.domNode){
+var _ae4=_ae2?(i>0?this.childBoxes[i-1]:_ae3):(i<this.childBoxes.length-1?this.childBoxes[i+1]:_ae3);
+if(_ae4.node===_ade[0].dragSource.domNode){
 hide=true;
 }
 }
@@ -50213,30 +30362,30 @@
 }else{
 this.dropIndicator.style.display="";
 }
-this.placeIndicator(e,_bd7,i,_bdb);
+this.placeIndicator(e,_ade,i,_ae2);
 if(!dojo.html.hasParent(this.dropIndicator)){
 dojo.body().appendChild(this.dropIndicator);
 }
-},placeIndicator:function(e,_bdf,_be0,_be1){
-var _be2=this.vertical?"left":"top";
-var _be3;
-if(_be0<0){
+},placeIndicator:function(e,_ae6,_ae7,_ae8){
+var _ae9=this.vertical?"left":"top";
+var _aea;
+if(_ae7<0){
 if(this.childBoxes.length){
-_be3=_be1?this.childBoxes[0]:this.childBoxes[this.childBoxes.length-1];
+_aea=_ae8?this.childBoxes[0]:this.childBoxes[this.childBoxes.length-1];
 }else{
-this.dropIndicator.style[_be2]=dojo.html.getAbsolutePosition(this.domNode,true)[this.vertical?"x":"y"]+"px";
+this.dropIndicator.style[_ae9]=dojo.html.getAbsolutePosition(this.domNode,true)[this.vertical?"x":"y"]+"px";
 }
 }else{
-_be3=this.childBoxes[_be0];
+_aea=this.childBoxes[_ae7];
 }
-if(_be3){
-this.dropIndicator.style[_be2]=(_be1?_be3[_be2]:_be3[this.vertical?"right":"bottom"])+"px";
+if(_aea){
+this.dropIndicator.style[_ae9]=(_ae8?_aea[_ae9]:_aea[this.vertical?"right":"bottom"])+"px";
 if(this.vertical){
-this.dropIndicator.style.height=_be3.height+"px";
-this.dropIndicator.style.top=_be3.top+"px";
+this.dropIndicator.style.height=_aea.height+"px";
+this.dropIndicator.style.top=_aea.top+"px";
 }else{
-this.dropIndicator.style.width=_be3.width+"px";
-this.dropIndicator.style.left=_be3.left+"px";
+this.dropIndicator.style.width=_aea.width+"px";
+this.dropIndicator.style.left=_aea.left+"px";
 }
 }
 },onDragOut:function(e){
@@ -50247,10 +30396,10 @@
 },onDrop:function(e){
 this.onDragOut(e);
 var i=this._getNodeUnderMouse(e);
-var _be7=this.vertical?dojo.html.gravity.WEST:dojo.html.gravity.NORTH;
+var _aee=this.vertical?dojo.html.gravity.WEST:dojo.html.gravity.NORTH;
 if(i<0){
 if(this.childBoxes.length){
-if(dojo.html.gravity(this.childBoxes[0].node,e)&_be7){
+if(dojo.html.gravity(this.childBoxes[0].node,e)&_aee){
 return this.insert(e,this.childBoxes[0].node,"before");
 }else{
 return this.insert(e,this.childBoxes[this.childBoxes.length-1].node,"after");
@@ -50258,47 +30407,48 @@
 }
 return this.insert(e,this.domNode,"append");
 }
-var _be8=this.childBoxes[i];
-if(dojo.html.gravity(_be8.node,e)&_be7){
-return this.insert(e,_be8.node,"before");
+var _aef=this.childBoxes[i];
+if(dojo.html.gravity(_aef.node,e)&_aee){
+return this.insert(e,_aef.node,"before");
 }else{
-return this.insert(e,_be8.node,"after");
+return this.insert(e,_aef.node,"after");
 }
-},insert:function(e,_bea,_beb){
+},insert:function(e,_af1,_af2){
 var node=e.dragObject.domNode;
-if(_beb=="before"){
-return dojo.html.insertBefore(node,_bea);
+if(_af2=="before"){
+return dojo.html.insertBefore(node,_af1);
 }else{
-if(_beb=="after"){
-return dojo.html.insertAfter(node,_bea);
+if(_af2=="after"){
+return dojo.html.insertAfter(node,_af1);
 }else{
-if(_beb=="append"){
-_bea.appendChild(node);
+if(_af2=="append"){
+_af1.appendChild(node);
 return true;
 }
 }
 }
 return false;
-}},function(node,_bee){
+}},function(node,_af5){
 if(arguments.length==0){
 return;
 }
 this.domNode=dojo.byId(node);
 dojo.dnd.DropTarget.call(this);
-if(_bee&&dojo.lang.isString(_bee)){
-_bee=[_bee];
+if(_af5&&dojo.lang.isString(_af5)){
+_af5=[_af5];
 }
-this.acceptedTypes=_bee||[];
+this.acceptedTypes=_af5||[];
 dojo.dnd.dragManager.registerDropTarget(this);
 });
+dojo.kwCompoundRequire({common:["dojo.dnd.DragAndDrop"],browser:["dojo.dnd.HtmlDragAndDrop"],dashboard:["dojo.dnd.HtmlDragAndDrop"]});
 dojo.provide("dojo.dnd.*");
 dojo.provide("dojo.dnd.HtmlDragMove");
 dojo.declare("dojo.dnd.HtmlDragMoveSource",dojo.dnd.HtmlDragSource,{onDragStart:function(){
-var _bef=new dojo.dnd.HtmlDragMoveObject(this.dragObject,this.type);
+var _af6=new dojo.dnd.HtmlDragMoveObject(this.dragObject,this.type);
 if(this.constrainToContainer){
-_bef.constrainTo(this.constrainingContainer);
+_af6.constrainTo(this.constrainingContainer);
 }
-return _bef;
+return _af6;
 },onSelected:function(){
 for(var i=0;i<this.dragObjects.length;i++){
 dojo.dnd.dragManager.selectedSources.push(new dojo.dnd.HtmlDragMoveSource(this.dragObjects[i]));
@@ -50372,9 +30522,9 @@
 }
 }
 },clearTrap:function(e){
-var _bfa=this;
+var _b01=this;
 setTimeout(function(){
-_bfa._fromTrap=false;
+_b01._fromTrap=false;
 },100);
 },postCreate:function(){
 with(this.domNode.style){
@@ -50410,14 +30560,14 @@
 },uninitialize:function(){
 this.bgIframe.remove();
 dojo.html.removeNode(this.bg,true);
-},setBackgroundColor:function(_bfc){
+},setBackgroundColor:function(_b03){
 if(arguments.length>=3){
-_bfc=new dojo.gfx.color.Color(arguments[0],arguments[1],arguments[2]);
+_b03=new dojo.gfx.color.Color(arguments[0],arguments[1],arguments[2]);
 }else{
-_bfc=new dojo.gfx.color.Color(_bfc);
+_b03=new dojo.gfx.color.Color(_b03);
 }
-this.bg.style.backgroundColor=_bfc.toString();
-return this.bgColor=_bfc;
+this.bg.style.backgroundColor=_b03.toString();
+return this.bgColor=_b03;
 },setBackgroundOpacity:function(op){
 if(arguments.length==0){
 op=this.bgOpacity;
@@ -50432,22 +30582,22 @@
 return this.bgOpacity;
 },_sizeBackground:function(){
 if(this.bgOpacity>0){
-var _bfe=dojo.html.getViewport();
-var h=_bfe.height;
-var w=_bfe.width;
+var _b05=dojo.html.getViewport();
+var h=_b05.height;
+var w=_b05.width;
 with(this.bg.style){
 width=w+"px";
 height=h+"px";
 }
-var _c01=dojo.html.getScroll().offset;
-this.bg.style.top=_c01.y+"px";
-this.bg.style.left=_c01.x+"px";
-var _bfe=dojo.html.getViewport();
-if(_bfe.width!=w){
-this.bg.style.width=_bfe.width+"px";
+var _b08=dojo.html.getScroll().offset;
+this.bg.style.top=_b08.y+"px";
+this.bg.style.left=_b08.x+"px";
+var _b05=dojo.html.getViewport();
+if(_b05.width!=w){
+this.bg.style.width=_b05.width+"px";
 }
-if(_bfe.height!=h){
-this.bg.style.height=_bfe.height+"px";
+if(_b05.height!=h){
+this.bg.style.height=_b05.height+"px";
 }
 }
 this.bgIframe.size(this.bg);
@@ -50459,8 +30609,8 @@
 this.bgIframe.iframe.style.display="block";
 }
 },placeModalDialog:function(){
-var _c02=dojo.html.getScroll().offset;
-var _c03=dojo.html.getViewport();
+var _b09=dojo.html.getScroll().offset;
+var _b0a=dojo.html.getViewport();
 var mb;
 if(this.isShowing()){
 mb=dojo.html.getMarginBox(this.domNode);
@@ -50471,8 +30621,8 @@
 dojo.html.hide(this.domNode);
 dojo.html.setVisibility(this.domNode,true);
 }
-var x=_c02.x+(_c03.width-mb.width)/2;
-var y=_c02.y+(_c03.height-mb.height)/2;
+var x=_b09.x+(_b0a.width-mb.width)/2;
+var y=_b09.y+(_b0a.height-mb.height)/2;
 with(this.domNode.style){
 left=x+"px";
 top=y+"px";
@@ -50532,9 +30682,9 @@
 dojo.event.disconnect(window,"onscroll",this,"_onScroll");
 }
 },_onScroll:function(){
-var _c09=dojo.html.getScroll().offset;
-this.bg.style.top=_c09.y+"px";
-this.bg.style.left=_c09.x+"px";
+var _b10=dojo.html.getScroll().offset;
+this.bg.style.top=_b10.y+"px";
+this.bg.style.left=_b10.x+"px";
 this.placeModalDialog();
 },checkSize:function(){
 if(this.isShowing()){
@@ -50548,7 +30698,7 @@
 }
 this.hide();
 }});
-dojo.widget.defineWidget("dojo.widget.Dialog",[dojo.widget.ContentPane,dojo.widget.ModalDialogBase],{templatePath:dojo.uri.dojoUri("src/widget/templates/Dialog.html"),blockDuration:0,lifetime:0,closeNode:"",postMixInProperties:function(){
+dojo.widget.defineWidget("dojo.widget.Dialog",[dojo.widget.ContentPane,dojo.widget.ModalDialogBase],{templateString:"<div id=\"${this.widgetId}\" class=\"dojoDialog\" dojoattachpoint=\"wrapper\">\n\t<span dojoattachpoint=\"tabStartOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\"\ttabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabStart\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<div dojoattachpoint=\"containerNode\" style=\"position: relative; z-index: 2;\"></div>\n\t<span dojoattachpoint=\"tabEnd\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabEndOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n</div>\n",blockDuration:0,lifetime:0,closeNode:"",postMixInProperties:function(){
 dojo.widget.Dialog.superclass.postMixInProperties.apply(this,arguments);
 if(this.closeNode){
 this.setCloseControl(this.closeNode);
@@ -50613,7 +30763,7 @@
 }
 }});
 dojo.provide("dojo.widget.ResizeHandle");
-dojo.widget.defineWidget("dojo.widget.ResizeHandle",dojo.widget.HtmlWidget,{targetElmId:"",templateCssPath:dojo.uri.dojoUri("src/widget/templates/ResizeHandle.css"),templateString:"<div class=\"dojoHtmlResizeHandle\"><div></div></div>",postCreate:function(){
+dojo.widget.defineWidget("dojo.widget.ResizeHandle",dojo.widget.HtmlWidget,{targetElmId:"",templateCssString:".dojoHtmlResizeHandle {\n\tfloat: right;\n\tposition: absolute;\n\tright: 2px;\n\tbottom: 2px;\n\twidth: 13px;\n\theight: 13px;\n\tz-index: 20;\n\tcursor: nw-resize;\n\tbackground-image: url(grabCorner.gif);\n\tline-height: 0px;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/ResizeHandle.css"),templateString:"<div class=\"dojoHtmlResizeHandle\"><div></div></div>",postCreate:function(){
 dojo.event.connect(this.domNode,"onmousedown",this,"_beginSizing");
 },_beginSizing:function(e){
 if(this._isSizing){
@@ -50665,9 +30815,9 @@
 this._isSizing=false;
 }});
 dojo.provide("dojo.widget.FloatingPane");
-dojo.declare("dojo.widget.FloatingPaneBase",null,{title:"",iconSrc:"",hasShadow:false,constrainToContainer:false,taskBarId:"",resizable:true,titleBarDisplay:true,windowState:"normal",displayCloseAction:false,displayMinimizeAction:false,displayMaximizeAction:false,_max_taskBarConnectAttempts:5,_taskBarConnectAttempts:0,templatePath:dojo.uri.dojoUri("src/widget/templates/FloatingPane.html"),templateCssPath:dojo.uri.dojoUri("src/widget/templates/FloatingPane.css"),fillInFloatingPaneTemplate:function(args,frag){
-var _c18=this.getFragNodeRef(frag);
-dojo.html.copyStyle(this.domNode,_c18);
+dojo.declare("dojo.widget.FloatingPaneBase",null,{title:"",iconSrc:"",hasShadow:false,constrainToContainer:false,taskBarId:"",resizable:true,titleBarDisplay:true,windowState:"normal",displayCloseAction:false,displayMinimizeAction:false,displayMaximizeAction:false,_max_taskBarConnectAttempts:5,_taskBarConnectAttempts:0,templateString:"<div id=\"${this.widgetId}\" dojoAttachEvent=\"onMouseDown\" class=\"dojoFloatingPane\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dojoFloatingPaneTitleBar\"  style=\"display:none\">\n\t  \t<img dojoAttachPoint=\"titleBarIcon\"  class=\"dojoFloatingPaneTitleBarIcon\">\n\t\t<div dojoAttachPoint=\"closeAction\" dojoAttachEvent=\"onClick:closeWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneCloseIcon\"></div>\n\t\t<div dojoAttachPoint=\"restoreAction\" dojoAttachEvent=\"onClick:restoreWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneRestoreIcon\"></div>\n\t\t<div dojoAttachPoint=\"maximizeAction\" dojoAttachEvent=\"onClick:maximizeWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneMaximizeIcon\"></div>\n\t\t<div dojoAttachPoint=\"minimizeAction\" dojoAttachEvent=\"onClick:minimizeWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneMinimizeIcon\"></div>\n\t  \t<div dojoAttachPoint=\"titleBarText\" class=\"dojoFloatingPaneTitleText\">${this.title}</div>\n\t</div>\n\n\t<div id=\"${this.widgetId}_container\" dojoAttachPoint=\"containerNode\" class=\"dojoFloatingPaneClient\"></div>\n\n\t<div dojoAttachPoint=\"resizeBar\" class=\"dojoFloatingPaneResizebar\" style=\"display:none\"></div>\n</div>\n",templateCssString:"\n/********** Outer Window ***************/\n\n.dojoFloatingPane {\n\t/* essential css */\n\tposition: absolute;\n\toverflow: visible;\t\t/* so drop shadow is displayed */\n\tz-index: 10;\n\n\t/* styling css */\n\tborder: 1px solid;\n\tborder-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;\n\tbackground-color: ThreeDFace;\n}\n\n\n/********** Title Bar ****************/\n\n.dojoFloatingPaneTitleBar {\n\tvertical-align: top;\n\tmargin: 2px 2px 2px 2px;\n\tz-index: 10;\n\tbackground-color: #7596c6;\n\tcursor: default;\n\toverflow: hidden;\n\tborder-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;\n\tvertical-align: middle;\n}\n\n.dojoFloatingPaneTitleText {\n\tfloat: left;\n\tpadding: 2px 4px 2px 2px;\n\twhite-space: nowrap;\n\tcolor: CaptionText;\n\tfont: small-caption;\n}\n\n.dojoTitleBarIcon {\n\tfloat: left;\n\theight: 22px;\n\twidth: 22px;\n\tvertical-align: middle;\n\tmargin-right: 5px;\n\tmargin-left: 5px;\n}\n\n.dojoFloatingPaneActions{\n\tfloat: right;\n\tposition: absolute;\n\tright: 2px;\n\ttop: 2px;\n\tvertical-align: middle;\n}\n\n\n.dojoFloatingPaneActionItem {\n\tvertical-align: middle;\n\tmargin-right: 1px;\n\theight: 22px;\n\twidth: 22px;\n}\n\n\n.dojoFloatingPaneTitleBarIcon {\n\t/* essential css */\n\tfloat: left;\n\n\t/* styling css */\n\tmargin-left: 2px;\n\tmargin-right: 4px;\n\theight: 22px;\n}\n\n/* minimize/maximize icons are specified by CSS only */\n.dojoFloatingPaneMinimizeIcon,\n.dojoFloatingPaneMaximizeIcon,\n.dojoFloatingPaneRestoreIcon,\n.dojoFloatingPaneCloseIcon {\n\tvertical-align: middle;\n\theight: 22px;\n\twidth: 22px;\n\tfloat: right;\n}\n.dojoFloatingPaneMinimizeIcon {\n\tbackground-image: url(images/floatingPaneMinimize.gif);\n}\n.dojoFloatingPaneMaximizeIcon {\n\tbackground-image: url(images/floatingPaneMaximize.gif);\n}\n.dojoFloatingPaneRestoreIcon {\n\tbackground-image: url(images/floatingPaneRestore.gif);\n}\n.dojoFloatingPaneCloseIcon {\n\tbackground-image: url(images/floatingPaneClose.gif);\n}\n\n/* bar at bottom of window that holds resize handle */\n.dojoFloatingPaneResizebar {\n\tz-index: 10;\n\theight: 13px;\n\tbackground-color: ThreeDFace;\n}\n\n/************* Client Area ***************/\n\n.dojoFloatingPaneClient {\n\tposition: relative;\n\tz-index: 10;\n\tborder: 1px solid;\n\tborder-color: ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow;\n\tmargin: 2px;\n\tbackground-color: ThreeDFace;\n\tpadding: 8px;\n\tfont-family: Verdana, Helvetica, Garamond, sans-serif;\n\tfont-size: 12px;\n\toverflow: auto;\n}\n\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/FloatingPane.css"),fillInFloatingPaneTemplate:function(args,frag){
+var _b1f=this.getFragNodeRef(frag);
+dojo.html.copyStyle(this.domNode,_b1f);
 dojo.body().appendChild(this.domNode);
 if(!this.isShowing()){
 this.windowState="minimized";
@@ -50727,12 +30877,12 @@
 this.domNode.style.left=dojo.html.getPixelValue(this.domNode.parentNode,"padding-left",true)+"px";
 this.domNode.style.top=dojo.html.getPixelValue(this.domNode.parentNode,"padding-top",true)+"px";
 if((this.domNode.parentNode.nodeName.toLowerCase()=="body")){
-var _c1d=dojo.html.getViewport();
-var _c1e=dojo.html.getPadding(dojo.body());
-this.resizeTo(_c1d.width-_c1e.width,_c1d.height-_c1e.height);
+var _b24=dojo.html.getViewport();
+var _b25=dojo.html.getPadding(dojo.body());
+this.resizeTo(_b24.width-_b25.width,_b24.height-_b25.height);
 }else{
-var _c1f=dojo.html.getContentBox(this.domNode.parentNode);
-this.resizeTo(_c1f.width,_c1f.height);
+var _b26=dojo.html.getContentBox(this.domNode.parentNode);
+this.resizeTo(_b26.width,_b26.height);
 }
 this.maximizeAction.style.display="none";
 this.restoreAction.style.display="";
@@ -50790,20 +30940,20 @@
 },onMouseDown:function(evt){
 this.bringToTop();
 },bringToTop:function(){
-var _c26=dojo.widget.manager.getWidgetsByType(this.widgetType);
-var _c27=[];
-for(var x=0;x<_c26.length;x++){
-if(this.widgetId!=_c26[x].widgetId){
-_c27.push(_c26[x]);
+var _b2d=dojo.widget.manager.getWidgetsByType(this.widgetType);
+var _b2e=[];
+for(var x=0;x<_b2d.length;x++){
+if(this.widgetId!=_b2d[x].widgetId){
+_b2e.push(_b2d[x]);
 }
 }
-_c27.sort(function(a,b){
+_b2e.sort(function(a,b){
 return a.domNode.style.zIndex-b.domNode.style.zIndex;
 });
-_c27.push(this);
-var _c2b=100;
-for(x=0;x<_c27.length;x++){
-_c27[x].domNode.style.zIndex=_c2b+x*2;
+_b2e.push(this);
+var _b32=100;
+for(x=0;x<_b2e.length;x++){
+_b2e[x].domNode.style.zIndex=_b32+x*2;
 }
 },_setInitialWindowState:function(){
 if(this.isShowing()){
@@ -50826,8 +30976,8 @@
 }
 this.windowState="minimized";
 },_taskBarSetup:function(){
-var _c2d=dojo.widget.getWidgetById(this.taskBarId);
-if(!_c2d){
+var _b34=dojo.widget.getWidgetById(this.taskBarId);
+if(!_b34){
 if(this._taskBarConnectAttempts<this._max_taskBarConnectAttempts){
 dojo.lang.setTimeout(this,this._taskBarSetup,50);
 this._taskBarConnectAttempts++;
@@ -50836,19 +30986,19 @@
 }
 return;
 }
-_c2d.addChild(this);
+_b34.addChild(this);
 },showFloatingPane:function(){
 this.bringToTop();
 },onFloatingPaneShow:function(){
 var mb=dojo.html.getMarginBox(this.domNode);
 this.resizeTo(mb.width,mb.height);
-},resizeTo:function(_c2f,_c30){
-dojo.html.setMarginBox(this.domNode,{width:_c2f,height:_c30});
+},resizeTo:function(_b36,_b37){
+dojo.html.setMarginBox(this.domNode,{width:_b36,height:_b37});
 dojo.widget.html.layout(this.domNode,[{domNode:this.titleBar,layoutAlign:"top"},{domNode:this.resizeBar,layoutAlign:"bottom"},{domNode:this.containerNode,layoutAlign:"client"}]);
 dojo.widget.html.layout(this.containerNode,this.children,"top-bottom");
 this.bgIframe.onResized();
 if(this.shadow){
-this.shadow.size(_c2f,_c30);
+this.shadow.size(_b36,_b37);
 }
 this.onResized();
 },checkSize:function(){
@@ -50889,13 +31039,13 @@
 dojo.widget.ModalFloatingPane.superclass.closeWindow.apply(this,arguments);
 }});
 dojo.provide("dojo.widget.Editor2Plugin.AlwaysShowToolbar");
-dojo.event.topic.subscribe("dojo.widget.Editor2::onLoad",function(_c33){
-if(_c33.toolbarAlwaysVisible){
-var p=new dojo.widget.Editor2Plugin.AlwaysShowToolbar(_c33);
+dojo.event.topic.subscribe("dojo.widget.Editor2::onLoad",function(_b3a){
+if(_b3a.toolbarAlwaysVisible){
+var p=new dojo.widget.Editor2Plugin.AlwaysShowToolbar(_b3a);
 }
 });
-dojo.declare("dojo.widget.Editor2Plugin.AlwaysShowToolbar",null,function(_c35){
-this.editor=_c35;
+dojo.declare("dojo.widget.Editor2Plugin.AlwaysShowToolbar",null,function(_b3c){
+this.editor=_b3c;
 this.editor.registerLoadedPlugin(this);
 this.setup();
 },{_scrollSetUp:false,_fixEnabled:false,_scrollThreshold:false,_handleScroll:true,setup:function(){
@@ -50916,20 +31066,20 @@
 var db=dojo.body();
 if(!this._scrollSetUp){
 this._scrollSetUp=true;
-var _c3b=dh.getMarginBox(this.editor.domNode).width;
+var _b42=dh.getMarginBox(this.editor.domNode).width;
 this._scrollThreshold=dh.abs(tdn,true).y;
 if((isIE)&&(db)&&(dh.getStyle(db,"background-image")=="none")){
 with(db.style){
-backgroundImage="url("+dojo.uri.dojoUri("src/widget/templates/images/blank.gif")+")";
+backgroundImage="url("+dojo.uri.moduleUri("dojo.widget","templates/images/blank.gif")+")";
 backgroundAttachment="fixed";
 }
 }
 }
-var _c3c=(window["pageYOffset"])?window["pageYOffset"]:(document["documentElement"]||document["body"]).scrollTop;
-if(_c3c>this._scrollThreshold){
+var _b43=(window["pageYOffset"])?window["pageYOffset"]:(document["documentElement"]||document["body"]).scrollTop;
+if(_b43>this._scrollThreshold){
 if(!this._fixEnabled){
-var _c3d=dojo.html.getMarginBox(tdn);
-this.editor.editorObject.style.marginTop=_c3d.height+"px";
+var _b44=dojo.html.getMarginBox(tdn);
+this.editor.editorObject.style.marginTop=_b44.height+"px";
 if(isIE){
 tdn.style.left=dojo.html.abs(tdn,dojo.html.boxSizing.MARGIN_BOX).x;
 if(tdn.previousSibling){
@@ -50949,13 +31099,13 @@
 top="0px";
 }
 }
-tdn.style.width=_c3d.width+"px";
+tdn.style.width=_b44.width+"px";
 tdn.style.zIndex=1000;
 this._fixEnabled=true;
 }
 if(!dojo.render.html.safari){
-var _c3e=(this.height)?parseInt(this.editor.height):this.editor._lastHeight;
-if(_c3c>(this._scrollThreshold+_c3e)){
+var _b45=(this.height)?parseInt(this.editor.height):this.editor._lastHeight;
+if(_b43>(this._scrollThreshold+_b45)){
 tdn.style.display="none";
 }else{
 tdn.style.display="";
@@ -50999,48 +31149,48 @@
 return this._currentInstance;
 },setCurrentInstance:function(inst){
 this._currentInstance=inst;
-},getCommand:function(_c40,name){
-var _c42;
+},getCommand:function(_b47,name){
+var _b49;
 name=name.toLowerCase();
 for(var i=0;i<this._registeredHandlers.length;i++){
-_c42=this._registeredHandlers[i](_c40,name);
-if(_c42){
-return _c42;
+_b49=this._registeredHandlers[i](_b47,name);
+if(_b49){
+return _b49;
 }
 }
 switch(name){
 case "htmltoggle":
-_c42=new dojo.widget.Editor2BrowserCommand(_c40,name);
+_b49=new dojo.widget.Editor2BrowserCommand(_b47,name);
 break;
 case "formatblock":
-_c42=new dojo.widget.Editor2FormatBlockCommand(_c40,name);
+_b49=new dojo.widget.Editor2FormatBlockCommand(_b47,name);
 break;
 case "anchor":
-_c42=new dojo.widget.Editor2Command(_c40,name);
+_b49=new dojo.widget.Editor2Command(_b47,name);
 break;
 case "createlink":
-_c42=new dojo.widget.Editor2DialogCommand(_c40,name,{contentFile:"dojo.widget.Editor2Plugin.CreateLinkDialog",contentClass:"Editor2CreateLinkDialog",title:"Insert/Edit Link",width:"300px",height:"200px"});
+_b49=new dojo.widget.Editor2DialogCommand(_b47,name,{contentFile:"dojo.widget.Editor2Plugin.CreateLinkDialog",contentClass:"Editor2CreateLinkDialog",title:"Insert/Edit Link",width:"300px",height:"200px"});
 break;
 case "insertimage":
-_c42=new dojo.widget.Editor2DialogCommand(_c40,name,{contentFile:"dojo.widget.Editor2Plugin.InsertImageDialog",contentClass:"Editor2InsertImageDialog",title:"Insert/Edit Image",width:"400px",height:"270px"});
+_b49=new dojo.widget.Editor2DialogCommand(_b47,name,{contentFile:"dojo.widget.Editor2Plugin.InsertImageDialog",contentClass:"Editor2InsertImageDialog",title:"Insert/Edit Image",width:"400px",height:"270px"});
 break;
 default:
-var _c44=this.getCurrentInstance();
-if((_c44&&_c44.queryCommandAvailable(name))||(!_c44&&dojo.widget.Editor2.prototype.queryCommandAvailable(name))){
-_c42=new dojo.widget.Editor2BrowserCommand(_c40,name);
+var _b4b=this.getCurrentInstance();
+if((_b4b&&_b4b.queryCommandAvailable(name))||(!_b4b&&dojo.widget.Editor2.prototype.queryCommandAvailable(name))){
+_b49=new dojo.widget.Editor2BrowserCommand(_b47,name);
 }else{
 dojo.debug("dojo.widget.Editor2Manager.getCommand: Unknown command "+name);
 return;
 }
 }
-return _c42;
+return _b49;
 },destroy:function(){
 this._currentInstance=null;
 dojo.widget.HandlerManager.prototype.destroy.call(this);
 }});
 dojo.addOnUnload(dojo.widget.Editor2Manager,"destroy");
-dojo.lang.declare("dojo.widget.Editor2Command",null,function(_c45,name){
-this._editor=_c45;
+dojo.lang.declare("dojo.widget.Editor2Command",null,function(_b4c,name){
+this._editor=_b4c;
 this._updateTime=0;
 this._name=name;
 },{_text:"Unknown",execute:function(para){
@@ -51052,7 +31202,7 @@
 },destroy:function(){
 }});
 dojo.widget.Editor2BrowserCommandNames={"bold":"Bold","copy":"Copy","cut":"Cut","Delete":"Delete","indent":"Indent","inserthorizontalrule":"Horizental Rule","insertorderedlist":"Numbered List","insertunorderedlist":"Bullet List","italic":"Italic","justifycenter":"Align Center","justifyfull":"Justify","justifyleft":"Align Left","justifyright":"Align Right","outdent":"Outdent","paste":"Paste","redo":"Redo","removeformat":"Remove Format","selectall":"Select All","strikethrough":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Underline","undo":"Undo","unlink":"Remove Link","createlink":"Create Link","insertimage":"Insert Image","htmltoggle":"HTML Source","forecolor":"Foreground Color","hilitecolor":"Background Color","plainformatblock":"Paragraph Style","formatblock":"Paragraph Style","fontsize":"Font Size","fontname":"Font Name"};
-dojo.lang.declare("dojo.widget.Editor2BrowserCommand",dojo.widget.Editor2Command,function(_c48,name){
+dojo.lang.declare("dojo.widget.Editor2BrowserCommand",dojo.widget.Editor2Command,function(_b4f,name){
 var text=dojo.widget.Editor2BrowserCommandNames[name.toLowerCase()];
 if(text){
 this._text=text;
@@ -51086,7 +31236,7 @@
 }
 }});
 dojo.lang.declare("dojo.widget.Editor2FormatBlockCommand",dojo.widget.Editor2BrowserCommand,{});
-dojo.widget.defineWidget("dojo.widget.Editor2Dialog",[dojo.widget.HtmlWidget,dojo.widget.FloatingPaneBase,dojo.widget.ModalDialogBase],{templatePath:dojo.uri.dojoUri("src/widget/templates/Editor2/EditorDialog.html"),modal:true,width:"",height:"",windowState:"minimized",displayCloseAction:true,contentFile:"",contentClass:"",fillInTemplate:function(args,frag){
+dojo.widget.defineWidget("dojo.widget.Editor2Dialog",[dojo.widget.HtmlWidget,dojo.widget.FloatingPaneBase,dojo.widget.ModalDialogBase],{templateString:"<div id=\"${this.widgetId}\" class=\"dojoFloatingPane\">\n\t<span dojoattachpoint=\"tabStartOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\"\ttabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabStart\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<div dojoAttachPoint=\"titleBar\" class=\"dojoFloatingPaneTitleBar\"  style=\"display:none\">\n\t  \t<img dojoAttachPoint=\"titleBarIcon\"  class=\"dojoFloatingPaneTitleBarIcon\">\n\t\t<div dojoAttachPoint=\"closeAction\" dojoAttachEvent=\"onClick:hide\"\n   \t  \t\tclass=\"dojoFloatingPaneCloseIcon\"></div>\n\t\t<div dojoAttachPoint=\"restoreAction\" dojoAttachEvent=\"onClick:restoreWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneRestoreIcon\"></div>\n\t\t<div dojoAttachPoint=\"maximizeAction\" dojoAttachEvent=\"onClick:maximizeWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneMaximizeIcon\"></div>\n\t\t<div dojoAttachPoint=\"minimizeAction\" dojoAttachEvent=\"onClick:minimizeWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneMinimizeIcon\"></div>\n\t  \t<div dojoAttachPoint=\"titleBarText\" class=\"dojoFloatingPaneTitleText\">${this.title}</div>\n\t</div>\n\n\t<div id=\"${this.widgetId}_container\" dojoAttachPoint=\"containerNode\" class=\"dojoFloatingPaneClient\"></div>\n\t<span dojoattachpoint=\"tabEnd\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabEndOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<div dojoAttachPoint=\"resizeBar\" class=\"dojoFloatingPaneResizebar\" style=\"display:none\"></div>\n</div>\n",modal:true,width:"",height:"",windowState:"minimized",displayCloseAction:true,contentFile:"",contentClass:"",fillInTemplate:function(args,frag){
 this.fillInFloatingPaneTemplate(args,frag);
 dojo.widget.Editor2Dialog.superclass.fillInTemplate.call(this,args,frag);
 },postCreate:function(){
@@ -51156,8 +31306,8 @@
 },cancel:function(){
 this.parent.hide();
 }});
-dojo.lang.declare("dojo.widget.Editor2DialogCommand",dojo.widget.Editor2BrowserCommand,function(_c4e,name,_c50){
-this.dialogParas=_c50;
+dojo.lang.declare("dojo.widget.Editor2DialogCommand",dojo.widget.Editor2BrowserCommand,function(_b55,name,_b57){
+this.dialogParas=_b57;
 },{execute:function(){
 if(!this.dialog){
 if(!this.dialogParas.contentFile||!this.dialogParas.contentClass){
@@ -51175,10 +31325,9 @@
 dojo.widget.Editor2ToolbarGroups={};
 dojo.widget.defineWidget("dojo.widget.Editor2",dojo.widget.RichText,function(){
 this._loadedCommands={};
-},{toolbarAlwaysVisible:false,toolbarWidget:null,scrollInterval:null,toolbarTemplatePath:dojo.uri.dojoUri("src/widget/templates/EditorToolbarOneline.html"),toolbarTemplateCssPath:null,toolbarPlaceHolder:"",_inSourceMode:false,_htmlEditNode:null,toolbarGroup:"",shareToolbar:false,contextMenuGroupSet:"",editorOnLoad:function(){
+},{toolbarAlwaysVisible:false,toolbarWidget:null,scrollInterval:null,toolbarTemplatePath:dojo.uri.cache.set(dojo.uri.moduleUri("dojo.widget","templates/EditorToolbarOneline.html"), "<div class=\"EditorToolbarDomNode EditorToolbarSmallBg\">\n\t<table cellpadding=\"1\" cellspacing=\"0\" border=\"0\">\n\t\t<tbody>\n\t\t\t<tr valign=\"top\" align=\"left\">\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"htmltoggle\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon\" \n\t\t\t\t\t\tstyle=\"background-image: none; width: 30px;\" >&lt;h&gt;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"copy\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Copy\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"paste\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Paste\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"undo\">\n\t\t\t\t\t\t<!-- FIXME: should we have the text \"undo\" here? -->\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Undo\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"redo\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Redo\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td isSpacer=\"true\">\n\t\t\t\t\t<span class=\"iconContainer\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Sep\"\tstyle=\"width: 5px; min-width: 5px;\"></span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"createlink\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Link\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"insertimage\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Image\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"inserthorizontalrule\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_HorizontalLine \">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"bold\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Bold\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"italic\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Italic\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"underline\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Underline\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"strikethrough\">\n\t\t\t\t\t\t<span \n\t\t\t\t\t\t\tclass=\"dojoE2TBIcon dojoE2TBIcon_StrikeThrough\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td isSpacer=\"true\">\n\t\t\t\t\t<span class=\"iconContainer\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Sep\" \n\t\t\t\t\t\t\tstyle=\"width: 5px; min-width: 5px;\"></span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"insertunorderedlist\">\n\t\t\t\t\t\t<span \n\t\t\t\t\t\t\tclass=\"dojoE2TBIcon dojoE2TBIcon_BulletedList\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"insertorderedlist\">\n\t\t\t\t\t\t<span \n\t\t\t\t\t\t\tclass=\"dojoE2TBIcon dojoE2TBIcon_NumberedList\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td isSpacer=\"true\">\n\t\t\t\t\t<span class=\"iconContainer\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Sep\" style=\"width: 5px; min-width: 5px;\"></span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"indent\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Indent\" \n\t\t\t\t\t\t\tunselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"outdent\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Outdent\" \n\t\t\t\t\t\t\tunselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td isSpacer=\"true\">\n\t\t\t\t\t<span class=\"iconContainer\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Sep\" style=\"width: 5px; min-width: 5px;\"></span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"forecolor\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_TextColor\" \n\t\t\t\t\t\t\tunselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"hilitecolor\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_BackgroundColor\" \n\t\t\t\t\t\t\tunselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td isSpacer=\"true\">\n\t\t\t\t\t<span class=\"iconContainer\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Sep\" style=\"width: 5px; min-width: 5px;\"></span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"justifyleft\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_LeftJustify\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"justifycenter\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_CenterJustify\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"justifyright\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_RightJustify\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"justifyfull\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_BlockJustify\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\t\n\t\t\t\t<td>\n\t\t\t\t\t<select class=\"dojoEditorToolbarItem\" dojoETItemName=\"plainformatblock\">\n\t\t\t\t\t\t<!-- FIXME: using \"p\" here inserts a paragraph in most cases! -->\n\t\t\t\t\t\t<option value=\"\">-- format --</option>\n\t\t\t\t\t\t<option value=\"p\">Normal</option>\n\t\t\t\t\t\t<option value=\"pre\">Fixed Font</option>\n\t\t\t\t\t\t<option value=\"h1\">Main Heading</option>\n\t\t\t\t\t\t<option value=\"h2\">Section Heading</option>\n\t\t\t\t\t\t<option value=\"h3\">Sub-Heading</option>\n\t\t\t\t\t\t<!-- <option value=\"blockquote\">Block Quote</option> -->\n\t\t\t\t\t</select>\n\t\t\t\t</td>\n\t\t\t\t<td><!-- uncomment to enable save button -->\n\t\t\t\t\t<!-- save -->\n\t\t\t\t\t<!--span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"save\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Save\">&nbsp;</span>\n\t\t\t\t\t</span-->\n\t\t\t\t</td>\n\t\t\t\t<td width=\"*\">&nbsp;</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n"),toolbarTemplateCssPath:null,toolbarPlaceHolder:"",_inSourceMode:false,_htmlEditNode:null,toolbarGroup:"",shareToolbar:false,contextMenuGroupSet:"",editorOnLoad:function(){
 dojo.event.topic.publish("dojo.widget.Editor2::preLoadingToolbar",this);
 if(this.toolbarAlwaysVisible){
-dojo.require("dojo.widget.Editor2Plugin.AlwaysShowToolbar");
 }
 if(this.toolbarWidget){
 this.toolbarWidget.show();
@@ -51194,15 +31343,16 @@
 }
 }
 if(!this.toolbarWidget){
-var _c51={shareGroup:this.toolbarGroup,parent:this};
-_c51.templatePath=this.toolbarTemplatePath;
+var _b58={shareGroup:this.toolbarGroup,parent:this};
+_b58.templateString=dojo.uri.cache.get(this.toolbarTemplatePath);
 if(this.toolbarTemplateCssPath){
-_c51.templateCssPath=this.toolbarTemplateCssPath;
+_b58.templateCssPath=this.toolbarTemplateCssPath;
+_b58.templateCssString=dojo.uri.cache.get(this.toolbarTemplateCssPath);
 }
 if(this.toolbarPlaceHolder){
-this.toolbarWidget=dojo.widget.createWidget("Editor2Toolbar",_c51,dojo.byId(this.toolbarPlaceHolder),"after");
+this.toolbarWidget=dojo.widget.createWidget("Editor2Toolbar",_b58,dojo.byId(this.toolbarPlaceHolder),"after");
 }else{
-this.toolbarWidget=dojo.widget.createWidget("Editor2Toolbar",_c51,this.domNode.firstChild,"before");
+this.toolbarWidget=dojo.widget.createWidget("Editor2Toolbar",_b58,this.domNode.firstChild,"before");
 }
 if(this.toolbarGroup){
 dojo.widget.Editor2ToolbarGroups[this.toolbarGroup]=this.toolbarWidget;
@@ -51228,16 +31378,16 @@
 }
 }
 dojo.debug("dojo.widget.Editor2.unregisterLoadedPlugin: unknow plugin object: "+obj);
-},execCommand:function(_c55,_c56){
-switch(_c55.toLowerCase()){
+},execCommand:function(_b5c,_b5d){
+switch(_b5c.toLowerCase()){
 case "htmltoggle":
 this.toggleHtmlEditing();
 break;
 default:
 dojo.widget.Editor2.superclass.execCommand.apply(this,arguments);
 }
-},queryCommandEnabled:function(_c57,_c58){
-switch(_c57.toLowerCase()){
+},queryCommandEnabled:function(_b5e,_b5f){
+switch(_b5e.toLowerCase()){
 case "htmltoggle":
 return true;
 default:
@@ -51246,8 +31396,8 @@
 }
 return dojo.widget.Editor2.superclass.queryCommandEnabled.apply(this,arguments);
 }
-},queryCommandState:function(_c59,_c5a){
-switch(_c59.toLowerCase()){
+},queryCommandState:function(_b60,_b61){
+switch(_b60.toLowerCase()){
 case "htmltoggle":
 return this._inSourceMode;
 default:
@@ -51313,16 +31463,16 @@
 }else{
 dojo.debug("restoreSelection: no saved selection is found!");
 }
-},_updateToolbarLastRan:null,_updateToolbarTimer:null,_updateToolbarFrequency:500,updateToolbar:function(_c5d){
+},_updateToolbarLastRan:null,_updateToolbarTimer:null,_updateToolbarFrequency:500,updateToolbar:function(_b64){
 if((!this.isLoaded)||(!this.toolbarWidget)){
 return;
 }
 var diff=new Date()-this._updateToolbarLastRan;
-if((!_c5d)&&(this._updateToolbarLastRan)&&((diff<this._updateToolbarFrequency))){
+if((!_b64)&&(this._updateToolbarLastRan)&&((diff<this._updateToolbarFrequency))){
 clearTimeout(this._updateToolbarTimer);
-var _c5f=this;
+var _b66=this;
 this._updateToolbarTimer=setTimeout(function(){
-_c5f.updateToolbar();
+_b66.updateToolbar();
 },this._updateToolbarFrequency/2);
 return;
 }else{
@@ -51332,17 +31482,17 @@
 return;
 }
 this.toolbarWidget.update();
-},destroy:function(_c60){
+},destroy:function(_b67){
 this._htmlEditNode=null;
 dojo.event.disconnect(this,"close",this.toolbarWidget,"hide");
-if(!_c60){
+if(!_b67){
 this.toolbarWidget.destroy();
 }
 dojo.widget.Editor2.superclass.destroy.call(this);
-},_lastStateTimestamp:0,onDisplayChanged:function(e,_c62){
+},_lastStateTimestamp:0,onDisplayChanged:function(e,_b69){
 this._lastStateTimestamp=(new Date()).getTime();
 dojo.widget.Editor2.superclass.onDisplayChanged.call(this,e);
-this.updateToolbar(_c62);
+this.updateToolbar(_b69);
 },onLoad:function(){
 try{
 dojo.widget.Editor2.superclass.onLoad.call(this);
@@ -51389,85 +31539,79 @@
 
 
 __CPAN_EDITION__ editor build.txt
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/dom.js,
-../src/xml/Parse.js,
-../src/lang/common.js,
-../src/lang/func.js,
-../src/lang/array.js,
-../src/lang/extras.js,
-../src/lang/declare.js,
-../src/ns.js,
-../src/event/common.js,
-../src/event/topic.js,
-../src/event/browser.js,
-../src/event/__package__.js,
-../src/widget/Manager.js,
-../src/uri/Uri.js,
-../src/uri/__package__.js,
-../src/html/common.js,
-../src/a11y.js,
-../src/widget/Widget.js,
-../src/widget/Parse.js,
-../src/html/style.js,
-../src/widget/DomWidget.js,
-../src/html/display.js,
-../src/html/layout.js,
-../src/html/util.js,
-../src/gfx/color.js,
-../src/lfx/Animation.js,
-../src/html/color.js,
-../src/lfx/html.js,
-../src/lfx/__package__.js,
-../src/lfx/toggle.js,
-../src/widget/HtmlWidget.js,
-../src/widget/__package__.js,
-../src/string/common.js,
-../src/string.js,
-../src/io/common.js,
-../src/string/extras.js,
-../src/undo/browser.js,
-../src/io/BrowserIO.js,
-../src/io/cookie.js,
-../src/io/__package__.js,
-../src/widget/Toolbar.js,
-../src/html/__package__.js,
-../src/html/selection.js,
-../src/Deferred.js,
-../src/widget/RichText.js,
-../src/widget/ColorPalette.js,
-../src/widget/Editor.js,
-../src/lang/type.js,
-../src/lang/assert.js,
-../src/AdapterRegistry.js,
-../src/lang/repr.js,
-../src/lang/__package__.js,
-../src/html/iframe.js,
-../src/widget/PopupContainer.js,
-../src/widget/ContentPane.js,
-../src/widget/Editor2Toolbar.js,
-../src/lfx/shadow.js,
-../src/widget/html/layout.js,
-../src/dnd/DragAndDrop.js,
-../src/dnd/HtmlDragManager.js,
-../src/dnd/HtmlDragAndDrop.js,
-../src/dnd/__package__.js,
-../src/dnd/HtmlDragMove.js,
-../src/widget/Dialog.js,
-../src/widget/ResizeHandle.js,
-../src/widget/FloatingPane.js,
-../src/widget/Editor2Plugin/AlwaysShowToolbar.js,
+Files baked into this build:
+dojoGuardStart.js
+../src/bootstrap1.js
+../src/loader.js
+dojoGuardEnd.js
+../src/hostenv_browser.js
+../src/dom.js
+../src/xml/Parse.js
+../src/lang/common.js
+../src/lang/func.js
+../src/lang/array.js
+../src/lang/extras.js
+../src/lang/declare.js
+../src/ns.js
+../src/event/common.js
+../src/event/topic.js
+../src/event/browser.js
+../src/event/__package__.js
+../src/widget/Manager.js
+../src/uri/Uri.js
+../src/uri/__package__.js
+../src/html/common.js
+../src/a11y.js
+../src/widget/Widget.js
+../src/widget/Parse.js
+../src/html/style.js
+../src/widget/DomWidget.js
+../src/html/display.js
+../src/html/layout.js
+../src/html/util.js
+../src/gfx/color.js
+../src/lfx/Animation.js
+../src/html/color.js
+../src/lfx/html.js
+../src/lfx/__package__.js
+../src/lfx/toggle.js
+../src/widget/HtmlWidget.js
+../src/widget/__package__.js
+../src/string/common.js
+../src/string.js
+../src/io/common.js
+../src/string/extras.js
+../src/undo/browser.js
+../src/io/BrowserIO.js
+../src/io/cookie.js
+../src/io/__package__.js
+../src/html/__package__.js
+../src/html/selection.js
+../src/Deferred.js
+../src/widget/RichText.js
+../src/lang/type.js
+../src/lang/assert.js
+../src/AdapterRegistry.js
+../src/lang/repr.js
+../src/lang/__package__.js
+../src/html/iframe.js
+../src/widget/PopupContainer.js
+../src/widget/ColorPalette.js
+../src/widget/ContentPane.js
+../src/widget/Editor2Toolbar.js
+../src/uri/cache.js
+../src/lfx/shadow.js
+../src/widget/html/layout.js
+../src/dnd/DragAndDrop.js
+../src/dnd/HtmlDragManager.js
+../src/dnd/HtmlDragAndDrop.js
+../src/dnd/__package__.js
+../src/dnd/HtmlDragMove.js
+../src/widget/Dialog.js
+../src/widget/ResizeHandle.js
+../src/widget/FloatingPane.js
+../src/widget/Editor2Plugin/AlwaysShowToolbar.js
 ../src/widget/Editor2.js
-
-		
 __CPAN_EDITION__ event dojo.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -51504,7 +31648,7 @@
 return dj_currentContext;
 };
 dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
+dojo.version={major:0,minor:4,patch:2,flag:"",revision:Number("$Rev: 7616 $".match(/[0-9]+/)[0]),toString:function(){
 with(dojo.version){
 return major+"."+minor+"."+patch+flag+" ("+revision+")";
 }
@@ -51760,7 +31904,7 @@
 }
 };
 dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
+if(typeof setTimeout=="object"||(djConfig["useXDomain"]&&dojo.render.html.opera)){
 setTimeout("dojo.hostenv.loaded();",0);
 }else{
 dojo.hostenv.loaded();
@@ -51908,6 +32052,11 @@
 dojo.registerModulePath=function(_66,_67){
 return dojo.hostenv.setModulePrefix(_66,_67);
 };
+if(djConfig["modulePaths"]){
+for(var param in djConfig["modulePaths"]){
+dojo.registerModulePath(param,djConfig["modulePaths"][param]);
+}
+}
 dojo.setModulePrefix=function(_68,_69){
 dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
 return dojo.registerModulePath(_68,_69);
@@ -52318,7 +32467,7 @@
 }
 }
 if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
+if(dojo.render.html.opera||(dojo.render.html.moz&&(djConfig["enableMozDomContentLoaded"]===true))){
 document.addEventListener("DOMContentLoaded",dj_load_init,null);
 }
 window.addEventListener("load",dj_load_init,null);
@@ -52466,118 +32615,76 @@
 return _ec;
 };
 }
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _ee=false;
-var _ef=false;
-var _f0=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_ee=true;
-}else{
-if(typeof this["load"]=="function"){
-_ef=true;
-}else{
-if(window.widget){
-_f0=true;
-}
-}
-}
-var _f1=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-_f1.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_ee)&&(!_f0)){
-_f1.push("browser_debug.js");
-}
-var _f2=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_f2=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<_f1.length;x++){
-var _f4=_f2+"src/"+_f1[x];
-if(_ee||_ef){
-load(_f4);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_f4+"'></scr"+"ipt>");
-}
-catch(e){
-var _f5=document.createElement("script");
-_f5.src=_f4;
-document.getElementsByTagName("head")[0].appendChild(_f5);
-}
-}
-}
-})();
+dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&!djConfig["useXDomain"],"dojo.browser_debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&djConfig["useXDomain"],"dojo.browser_debug_xd");
 dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_f6,_f7){
-if(!dojo.lang.isFunction(_f7)){
-dojo.raise("dojo.inherits: superclass argument ["+_f7+"] must be a function (subclass: ["+_f6+"']");
+dojo.lang.inherits=function(_ee,_ef){
+if(!dojo.lang.isFunction(_ef)){
+dojo.raise("dojo.inherits: superclass argument ["+_ef+"] must be a function (subclass: ["+_ee+"']");
 }
-_f6.prototype=new _f7();
-_f6.prototype.constructor=_f6;
-_f6.superclass=_f7.prototype;
-_f6["super"]=_f7.prototype;
+_ee.prototype=new _ef();
+_ee.prototype.constructor=_ee;
+_ee.superclass=_ef.prototype;
+_ee["super"]=_ef.prototype;
 };
-dojo.lang._mixin=function(obj,_f9){
-var _fa={};
-for(var x in _f9){
-if((typeof _fa[x]=="undefined")||(_fa[x]!=_f9[x])){
-obj[x]=_f9[x];
+dojo.lang._mixin=function(obj,_f1){
+var _f2={};
+for(var x in _f1){
+if((typeof _f2[x]=="undefined")||(_f2[x]!=_f1[x])){
+obj[x]=_f1[x];
 }
 }
-if(dojo.render.html.ie&&(typeof (_f9["toString"])=="function")&&(_f9["toString"]!=obj["toString"])&&(_f9["toString"]!=_fa["toString"])){
-obj.toString=_f9.toString;
+if(dojo.render.html.ie&&(typeof (_f1["toString"])=="function")&&(_f1["toString"]!=obj["toString"])&&(_f1["toString"]!=_f2["toString"])){
+obj.toString=_f1.toString;
 }
 return obj;
 };
-dojo.lang.mixin=function(obj,_fd){
+dojo.lang.mixin=function(obj,_f5){
 for(var i=1,l=arguments.length;i<l;i++){
 dojo.lang._mixin(obj,arguments[i]);
 }
 return obj;
 };
-dojo.lang.extend=function(_100,_101){
+dojo.lang.extend=function(_f8,_f9){
 for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_100.prototype,arguments[i]);
+dojo.lang._mixin(_f8.prototype,arguments[i]);
 }
-return _100;
+return _f8;
 };
 dojo.inherits=dojo.lang.inherits;
 dojo.mixin=dojo.lang.mixin;
 dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_104,_105,_106,_107){
-if(!dojo.lang.isArrayLike(_104)&&dojo.lang.isArrayLike(_105)){
+dojo.lang.find=function(_fc,_fd,_fe,_ff){
+if(!dojo.lang.isArrayLike(_fc)&&dojo.lang.isArrayLike(_fd)){
 dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_104;
-_104=_105;
-_105=temp;
+var temp=_fc;
+_fc=_fd;
+_fd=temp;
 }
-var _109=dojo.lang.isString(_104);
-if(_109){
-_104=_104.split("");
+var _101=dojo.lang.isString(_fc);
+if(_101){
+_fc=_fc.split("");
 }
-if(_107){
+if(_ff){
 var step=-1;
-var i=_104.length-1;
+var i=_fc.length-1;
 var end=-1;
 }else{
 var step=1;
 var i=0;
-var end=_104.length;
+var end=_fc.length;
 }
-if(_106){
+if(_fe){
 while(i!=end){
-if(_104[i]===_105){
+if(_fc[i]===_fd){
 return i;
 }
 i+=step;
 }
 }else{
 while(i!=end){
-if(_104[i]==_105){
+if(_fc[i]==_fd){
 return i;
 }
 i+=step;
@@ -52586,12 +32693,12 @@
 return -1;
 };
 dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_10d,_10e,_10f){
-return dojo.lang.find(_10d,_10e,_10f,true);
+dojo.lang.findLast=function(_105,_106,_107){
+return dojo.lang.find(_105,_106,_107,true);
 };
 dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_110,_111){
-return dojo.lang.find(_110,_111)>-1;
+dojo.lang.inArray=function(_108,_109){
+return dojo.lang.find(_108,_109)>-1;
 };
 dojo.lang.isObject=function(it){
 if(typeof it=="undefined"){
@@ -52665,142 +32772,138 @@
 },isEmpty:function(obj){
 if(dojo.lang.isObject(obj)){
 var tmp={};
-var _120=0;
+var _118=0;
 for(var x in obj){
 if(obj[x]&&(!tmp[x])){
-_120++;
+_118++;
 break;
 }
 }
-return _120==0;
+return _118==0;
 }else{
 if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
 return obj.length==0;
 }
 }
-},map:function(arr,obj,_124){
-var _125=dojo.lang.isString(arr);
-if(_125){
+},map:function(arr,obj,_11c){
+var _11d=dojo.lang.isString(arr);
+if(_11d){
 arr=arr.split("");
 }
-if(dojo.lang.isFunction(obj)&&(!_124)){
-_124=obj;
+if(dojo.lang.isFunction(obj)&&(!_11c)){
+_11c=obj;
 obj=dj_global;
 }else{
-if(dojo.lang.isFunction(obj)&&_124){
-var _126=obj;
-obj=_124;
-_124=_126;
+if(dojo.lang.isFunction(obj)&&_11c){
+var _11e=obj;
+obj=_11c;
+_11c=_11e;
 }
 }
 if(Array.map){
-var _127=Array.map(arr,_124,obj);
+var _11f=Array.map(arr,_11c,obj);
 }else{
-var _127=[];
+var _11f=[];
 for(var i=0;i<arr.length;++i){
-_127.push(_124.call(obj,arr[i]));
+_11f.push(_11c.call(obj,arr[i]));
 }
 }
-if(_125){
-return _127.join("");
+if(_11d){
+return _11f.join("");
 }else{
-return _127;
+return _11f;
 }
-},reduce:function(arr,_12a,obj,_12c){
-var _12d=_12a;
-if(arguments.length==1){
-dojo.debug("dojo.lang.reduce called with too few arguments!");
-return false;
-}else{
+},reduce:function(arr,_122,obj,_124){
+var _125=_122;
 if(arguments.length==2){
-_12c=_12a;
-_12d=arr.shift();
+_124=_122;
+_125=arr[0];
+arr=arr.slice(1);
 }else{
-if(arguments.lenght==3){
+if(arguments.length==3){
 if(dojo.lang.isFunction(obj)){
-_12c=obj;
+_124=obj;
 obj=null;
 }
 }else{
 if(dojo.lang.isFunction(obj)){
-var tmp=_12c;
-_12c=obj;
+var tmp=_124;
+_124=obj;
 obj=tmp;
 }
 }
 }
-}
-var ob=obj?obj:dj_global;
+var ob=obj||dj_global;
 dojo.lang.map(arr,function(val){
-_12d=_12c.call(ob,_12d,val);
+_125=_124.call(ob,_125,val);
 });
-return _12d;
-},forEach:function(_131,_132,_133){
-if(dojo.lang.isString(_131)){
-_131=_131.split("");
+return _125;
+},forEach:function(_129,_12a,_12b){
+if(dojo.lang.isString(_129)){
+_129=_129.split("");
 }
 if(Array.forEach){
-Array.forEach(_131,_132,_133);
+Array.forEach(_129,_12a,_12b);
 }else{
-if(!_133){
-_133=dj_global;
+if(!_12b){
+_12b=dj_global;
 }
-for(var i=0,l=_131.length;i<l;i++){
-_132.call(_133,_131[i],i,_131);
+for(var i=0,l=_129.length;i<l;i++){
+_12a.call(_12b,_129[i],i,_129);
 }
 }
-},_everyOrSome:function(_136,arr,_138,_139){
+},_everyOrSome:function(_12e,arr,_130,_131){
 if(dojo.lang.isString(arr)){
 arr=arr.split("");
 }
 if(Array.every){
-return Array[_136?"every":"some"](arr,_138,_139);
+return Array[_12e?"every":"some"](arr,_130,_131);
 }else{
-if(!_139){
-_139=dj_global;
+if(!_131){
+_131=dj_global;
 }
 for(var i=0,l=arr.length;i<l;i++){
-var _13c=_138.call(_139,arr[i],i,arr);
-if(_136&&!_13c){
+var _134=_130.call(_131,arr[i],i,arr);
+if(_12e&&!_134){
 return false;
 }else{
-if((!_136)&&(_13c)){
+if((!_12e)&&(_134)){
 return true;
 }
 }
 }
-return Boolean(_136);
+return Boolean(_12e);
 }
-},every:function(arr,_13e,_13f){
-return this._everyOrSome(true,arr,_13e,_13f);
-},some:function(arr,_141,_142){
-return this._everyOrSome(false,arr,_141,_142);
-},filter:function(arr,_144,_145){
-var _146=dojo.lang.isString(arr);
-if(_146){
+},every:function(arr,_136,_137){
+return this._everyOrSome(true,arr,_136,_137);
+},some:function(arr,_139,_13a){
+return this._everyOrSome(false,arr,_139,_13a);
+},filter:function(arr,_13c,_13d){
+var _13e=dojo.lang.isString(arr);
+if(_13e){
 arr=arr.split("");
 }
-var _147;
+var _13f;
 if(Array.filter){
-_147=Array.filter(arr,_144,_145);
+_13f=Array.filter(arr,_13c,_13d);
 }else{
-if(!_145){
+if(!_13d){
 if(arguments.length>=3){
 dojo.raise("thisObject doesn't exist!");
 }
-_145=dj_global;
+_13d=dj_global;
 }
-_147=[];
+_13f=[];
 for(var i=0;i<arr.length;i++){
-if(_144.call(_145,arr[i],i,arr)){
-_147.push(arr[i]);
+if(_13c.call(_13d,arr[i],i,arr)){
+_13f.push(arr[i]);
 }
 }
 }
-if(_146){
-return _147.join("");
+if(_13e){
+return _13f.join("");
 }else{
-return _147;
+return _13f;
 }
 },unnest:function(){
 var out=[];
@@ -52813,35 +32916,35 @@
 }
 }
 return out;
-},toArray:function(_14c,_14d){
-var _14e=[];
-for(var i=_14d||0;i<_14c.length;i++){
-_14e.push(_14c[i]);
+},toArray:function(_144,_145){
+var _146=[];
+for(var i=_145||0;i<_144.length;i++){
+_146.push(_144[i]);
 }
-return _14e;
+return _146;
 }});
 dojo.provide("dojo.lang.extras");
-dojo.lang.setTimeout=function(func,_151){
-var _152=window,_153=2;
+dojo.lang.setTimeout=function(func,_149){
+var _14a=window,_14b=2;
 if(!dojo.lang.isFunction(func)){
-_152=func;
-func=_151;
-_151=arguments[2];
-_153++;
+_14a=func;
+func=_149;
+_149=arguments[2];
+_14b++;
 }
 if(dojo.lang.isString(func)){
-func=_152[func];
+func=_14a[func];
 }
 var args=[];
-for(var i=_153;i<arguments.length;i++){
+for(var i=_14b;i<arguments.length;i++){
 args.push(arguments[i]);
 }
 return dojo.global().setTimeout(function(){
-func.apply(_152,args);
-},_151);
+func.apply(_14a,args);
+},_149);
 };
-dojo.lang.clearTimeout=function(_156){
-dojo.global().clearTimeout(_156);
+dojo.lang.clearTimeout=function(_14e){
+dojo.global().clearTimeout(_14e);
 };
 dojo.lang.getNameInObj=function(ns,item){
 if(!ns){
@@ -52886,38 +32989,38 @@
 }
 return undefined;
 };
-dojo.lang.getObjPathValue=function(_15f,_160,_161){
-with(dojo.parseObjPath(_15f,_160,_161)){
-return dojo.evalProp(prop,obj,_161);
+dojo.lang.getObjPathValue=function(_157,_158,_159){
+with(dojo.parseObjPath(_157,_158,_159)){
+return dojo.evalProp(prop,obj,_159);
 }
 };
-dojo.lang.setObjPathValue=function(_162,_163,_164,_165){
+dojo.lang.setObjPathValue=function(_15a,_15b,_15c,_15d){
 dojo.deprecated("dojo.lang.setObjPathValue","use dojo.parseObjPath and the '=' operator","0.6");
 if(arguments.length<4){
-_165=true;
+_15d=true;
 }
-with(dojo.parseObjPath(_162,_164,_165)){
-if(obj&&(_165||(prop in obj))){
-obj[prop]=_163;
+with(dojo.parseObjPath(_15a,_15c,_15d)){
+if(obj&&(_15d||(prop in obj))){
+obj[prop]=_15b;
 }
 }
 };
 dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_166,_167){
-var fcn=(dojo.lang.isString(_167)?_166[_167]:_167)||function(){
+dojo.lang.hitch=function(_15e,_15f){
+var fcn=(dojo.lang.isString(_15f)?_15e[_15f]:_15f)||function(){
 };
 return function(){
-return fcn.apply(_166,arguments);
+return fcn.apply(_15e,arguments);
 };
 };
 dojo.lang.anonCtr=0;
 dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_169,_16a,_16b){
-var nso=(_16a||dojo.lang.anon);
-if((_16b)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
+dojo.lang.nameAnonFunc=function(_161,_162,_163){
+var nso=(_162||dojo.lang.anon);
+if((_163)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
 for(var x in nso){
 try{
-if(nso[x]===_169){
+if(nso[x]===_161){
 return x;
 }
 }
@@ -52929,50 +33032,50 @@
 while(typeof nso[ret]!="undefined"){
 ret="__"+dojo.lang.anonCtr++;
 }
-nso[ret]=_169;
+nso[ret]=_161;
 return ret;
 };
-dojo.lang.forward=function(_16f){
+dojo.lang.forward=function(_167){
 return function(){
-return this[_16f].apply(this,arguments);
+return this[_167].apply(this,arguments);
 };
 };
-dojo.lang.curry=function(_170,func){
-var _172=[];
-_170=_170||dj_global;
+dojo.lang.curry=function(_168,func){
+var _16a=[];
+_168=_168||dj_global;
 if(dojo.lang.isString(func)){
-func=_170[func];
+func=_168[func];
 }
 for(var x=2;x<arguments.length;x++){
-_172.push(arguments[x]);
+_16a.push(arguments[x]);
 }
-var _174=(func["__preJoinArity"]||func.length)-_172.length;
-function gather(_175,_176,_177){
-var _178=_177;
-var _179=_176.slice(0);
-for(var x=0;x<_175.length;x++){
-_179.push(_175[x]);
+var _16c=(func["__preJoinArity"]||func.length)-_16a.length;
+function gather(_16d,_16e,_16f){
+var _170=_16f;
+var _171=_16e.slice(0);
+for(var x=0;x<_16d.length;x++){
+_171.push(_16d[x]);
 }
-_177=_177-_175.length;
-if(_177<=0){
-var res=func.apply(_170,_179);
-_177=_178;
+_16f=_16f-_16d.length;
+if(_16f<=0){
+var res=func.apply(_168,_171);
+_16f=_170;
 return res;
 }else{
 return function(){
-return gather(arguments,_179,_177);
+return gather(arguments,_171,_16f);
 };
 }
 }
-return gather([],_172,_174);
+return gather([],_16a,_16c);
 };
-dojo.lang.curryArguments=function(_17c,func,args,_17f){
-var _180=[];
-var x=_17f||0;
-for(x=_17f;x<args.length;x++){
-_180.push(args[x]);
+dojo.lang.curryArguments=function(_174,func,args,_177){
+var _178=[];
+var x=_177||0;
+for(x=_177;x<args.length;x++){
+_178.push(args[x]);
 }
-return dojo.lang.curry.apply(dojo.lang,[_17c,func].concat(_180));
+return dojo.lang.curry.apply(dojo.lang,[_174,func].concat(_178));
 };
 dojo.lang.tryThese=function(){
 for(var x=0;x<arguments.length;x++){
@@ -52989,38 +33092,38 @@
 }
 }
 };
-dojo.lang.delayThese=function(farr,cb,_186,_187){
+dojo.lang.delayThese=function(farr,cb,_17e,_17f){
 if(!farr.length){
-if(typeof _187=="function"){
-_187();
+if(typeof _17f=="function"){
+_17f();
 }
 return;
 }
-if((typeof _186=="undefined")&&(typeof cb=="number")){
-_186=cb;
+if((typeof _17e=="undefined")&&(typeof cb=="number")){
+_17e=cb;
 cb=function(){
 };
 }else{
 if(!cb){
 cb=function(){
 };
-if(!_186){
-_186=0;
+if(!_17e){
+_17e=0;
 }
 }
 }
 setTimeout(function(){
 (farr.shift())();
 cb();
-dojo.lang.delayThese(farr,cb,_186,_187);
-},_186);
+dojo.lang.delayThese(farr,cb,_17e,_17f);
+},_17e);
 };
 dojo.provide("dojo.event.common");
 dojo.event=new function(){
 this._canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-function interpolateArgs(args,_189){
+function interpolateArgs(args,_181){
 var dl=dojo.lang;
-var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false};
+var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false,maxCalls:-1};
 switch(args.length){
 case 0:
 return;
@@ -53045,14 +33148,14 @@
 ao.adviceType="after";
 ao.srcObj=args[0];
 ao.srcFunc=args[1];
-var _18c=dl.nameAnonFunc(args[2],ao.adviceObj,_189);
-ao.adviceFunc=_18c;
+var _184=dl.nameAnonFunc(args[2],ao.adviceObj,_181);
+ao.adviceFunc=_184;
 }else{
 if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
 ao.adviceType="after";
 ao.srcObj=dj_global;
-var _18c=dl.nameAnonFunc(args[0],ao.srcObj,_189);
-ao.srcFunc=_18c;
+var _184=dl.nameAnonFunc(args[0],ao.srcObj,_181);
+ao.srcFunc=_184;
 ao.adviceObj=args[1];
 ao.adviceFunc=args[2];
 }
@@ -53078,17 +33181,17 @@
 if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
 ao.adviceType=args[0];
 ao.srcObj=dj_global;
-var _18c=dl.nameAnonFunc(args[1],dj_global,_189);
-ao.srcFunc=_18c;
+var _184=dl.nameAnonFunc(args[1],dj_global,_181);
+ao.srcFunc=_184;
 ao.adviceObj=args[2];
 ao.adviceFunc=args[3];
 }else{
 if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
 ao.srcObj=args[1];
 ao.srcFunc=args[2];
-var _18c=dl.nameAnonFunc(args[3],dj_global,_189);
+var _184=dl.nameAnonFunc(args[3],dj_global,_181);
 ao.adviceObj=dj_global;
-ao.adviceFunc=_18c;
+ao.adviceFunc=_184;
 }else{
 if(dl.isObject(args[1])){
 ao.srcObj=args[1];
@@ -53132,11 +33235,12 @@
 ao.delay=args[8];
 ao.rate=args[9];
 ao.adviceMsg=args[10];
+ao.maxCalls=(!isNaN(parseInt(args[11])))?args[11]:-1;
 break;
 }
 if(dl.isFunction(ao.aroundFunc)){
-var _18c=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_189);
-ao.aroundFunc=_18c;
+var _184=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_181);
+ao.aroundFunc=_184;
 }
 if(dl.isFunction(ao.srcFunc)){
 ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc);
@@ -53165,25 +33269,18 @@
 }else{
 var ao=interpolateArgs(arguments,true);
 }
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.connect(ao);
-}
-ao.srcFunc="onkeypress";
-}
 if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){
-var _18e={};
+var _186={};
 for(var x in ao){
-_18e[x]=ao[x];
+_186[x]=ao[x];
 }
 var mjps=[];
 dojo.lang.forEach(ao.srcObj,function(src){
 if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
 src=dojo.byId(src);
 }
-_18e.srcObj=src;
-mjps.push(dojo.event.connect.call(dojo.event,_18e));
+_186.srcObj=src;
+mjps.push(dojo.event.connect.call(dojo.event,_186));
 });
 return mjps;
 }
@@ -53195,20 +33292,20 @@
 return mjp;
 };
 this.log=function(a1,a2){
-var _196;
+var _18e;
 if((arguments.length==1)&&(typeof a1=="object")){
-_196=a1;
+_18e=a1;
 }else{
-_196={srcObj:a1,srcFunc:a2};
+_18e={srcObj:a1,srcFunc:a2};
 }
-_196.adviceFunc=function(){
-var _197=[];
+_18e.adviceFunc=function(){
+var _18f=[];
 for(var x=0;x<arguments.length;x++){
-_197.push(arguments[x]);
+_18f.push(arguments[x]);
 }
-dojo.debug("("+_196.srcObj+")."+_196.srcFunc,":",_197.join(", "));
+dojo.debug("("+_18e.srcObj+")."+_18e.srcFunc,":",_18f.join(", "));
 };
-this.kwConnect(_196);
+this.kwConnect(_18e);
 };
 this.connectBefore=function(){
 var args=["before"];
@@ -53229,25 +33326,30 @@
 ao.once=true;
 return this.connect(ao);
 };
-this._kwConnectImpl=function(_19e,_19f){
-var fn=(_19f)?"disconnect":"connect";
-if(typeof _19e["srcFunc"]=="function"){
-_19e.srcObj=_19e["srcObj"]||dj_global;
-var _1a1=dojo.lang.nameAnonFunc(_19e.srcFunc,_19e.srcObj,true);
-_19e.srcFunc=_1a1;
+this.connectRunOnce=function(){
+var ao=interpolateArgs(arguments,true);
+ao.maxCalls=1;
+return this.connect(ao);
+};
+this._kwConnectImpl=function(_197,_198){
+var fn=(_198)?"disconnect":"connect";
+if(typeof _197["srcFunc"]=="function"){
+_197.srcObj=_197["srcObj"]||dj_global;
+var _19a=dojo.lang.nameAnonFunc(_197.srcFunc,_197.srcObj,true);
+_197.srcFunc=_19a;
 }
-if(typeof _19e["adviceFunc"]=="function"){
-_19e.adviceObj=_19e["adviceObj"]||dj_global;
-var _1a1=dojo.lang.nameAnonFunc(_19e.adviceFunc,_19e.adviceObj,true);
-_19e.adviceFunc=_1a1;
+if(typeof _197["adviceFunc"]=="function"){
+_197.adviceObj=_197["adviceObj"]||dj_global;
+var _19a=dojo.lang.nameAnonFunc(_197.adviceFunc,_197.adviceObj,true);
+_197.adviceFunc=_19a;
 }
-_19e.srcObj=_19e["srcObj"]||dj_global;
-_19e.adviceObj=_19e["adviceObj"]||_19e["targetObj"]||dj_global;
-_19e.adviceFunc=_19e["adviceFunc"]||_19e["targetFunc"];
-return dojo.event[fn](_19e);
+_197.srcObj=_197["srcObj"]||dj_global;
+_197.adviceObj=_197["adviceObj"]||_197["targetObj"]||dj_global;
+_197.adviceFunc=_197["adviceFunc"]||_197["targetFunc"];
+return dojo.event[fn](_197);
 };
-this.kwConnect=function(_1a2){
-return this._kwConnectImpl(_1a2,false);
+this.kwConnect=function(_19b){
+return this._kwConnectImpl(_19b,false);
 };
 this.disconnect=function(){
 if(arguments.length==1){
@@ -53272,12 +33374,12 @@
 mjp.removeAdvice(ao.adviceObj,ao.adviceFunc,ao.adviceType,ao.once);
 return mjp;
 };
-this.kwDisconnect=function(_1a5){
-return this._kwConnectImpl(_1a5,true);
+this.kwDisconnect=function(_19e){
+return this._kwConnectImpl(_19e,true);
 };
 };
-dojo.event.MethodInvocation=function(_1a6,obj,args){
-this.jp_=_1a6;
+dojo.event.MethodInvocation=function(_19f,obj,args){
+this.jp_=_19f;
 this.object=obj;
 this.args=[];
 for(var x=0;x<args.length;x++){
@@ -53296,44 +33398,50 @@
 return mobj[meth].call(mobj,this);
 }
 };
-dojo.event.MethodJoinPoint=function(obj,_1ae){
+dojo.event.MethodJoinPoint=function(obj,_1a7){
 this.object=obj||dj_global;
-this.methodname=_1ae;
-this.methodfunc=this.object[_1ae];
+this.methodname=_1a7;
+this.methodfunc=this.object[_1a7];
 this.squelch=false;
 };
-dojo.event.MethodJoinPoint.getForMethod=function(obj,_1b0){
+dojo.event.MethodJoinPoint.getForMethod=function(obj,_1a9){
 if(!obj){
 obj=dj_global;
 }
-if(!obj[_1b0]){
-obj[_1b0]=function(){
+var ofn=obj[_1a9];
+if(!ofn){
+ofn=obj[_1a9]=function(){
 };
-if(!obj[_1b0]){
-dojo.raise("Cannot set do-nothing method on that object "+_1b0);
+if(!obj[_1a9]){
+dojo.raise("Cannot set do-nothing method on that object "+_1a9);
 }
 }else{
-if((!dojo.lang.isFunction(obj[_1b0]))&&(!dojo.lang.isAlien(obj[_1b0]))){
+if((typeof ofn!="function")&&(!dojo.lang.isFunction(ofn))&&(!dojo.lang.isAlien(ofn))){
 return null;
 }
 }
-var _1b1=_1b0+"$joinpoint";
-var _1b2=_1b0+"$joinpoint$method";
-var _1b3=obj[_1b1];
-if(!_1b3){
-var _1b4=false;
+var _1ab=_1a9+"$joinpoint";
+var _1ac=_1a9+"$joinpoint$method";
+var _1ad=obj[_1ab];
+if(!_1ad){
+var _1ae=false;
 if(dojo.event["browser"]){
 if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){
-_1b4=true;
-dojo.event.browser.addClobberNodeAttrs(obj,[_1b1,_1b2,_1b0]);
+_1ae=true;
+dojo.event.browser.addClobberNodeAttrs(obj,[_1ab,_1ac,_1a9]);
 }
 }
-var _1b5=obj[_1b0].length;
-obj[_1b2]=obj[_1b0];
-_1b3=obj[_1b1]=new dojo.event.MethodJoinPoint(obj,_1b2);
-obj[_1b0]=function(){
+var _1af=ofn.length;
+obj[_1ac]=ofn;
+_1ad=obj[_1ab]=new dojo.event.MethodJoinPoint(obj,_1ac);
+if(!_1ae){
+obj[_1a9]=function(){
+return _1ad.run.apply(_1ad,arguments);
+};
+}else{
+obj[_1a9]=function(){
 var args=[];
-if((_1b4)&&(!arguments.length)){
+if(!arguments.length){
 var evt=null;
 try{
 if(obj.ownerDocument){
@@ -53358,20 +33466,21 @@
 }
 }else{
 for(var x=0;x<arguments.length;x++){
-if((x==0)&&(_1b4)&&(dojo.event.browser.isEvent(arguments[x]))){
+if((x==0)&&(dojo.event.browser.isEvent(arguments[x]))){
 args.push(dojo.event.browser.fixEvent(arguments[x],this));
 }else{
 args.push(arguments[x]);
 }
 }
 }
-return _1b3.run.apply(_1b3,args);
+return _1ad.run.apply(_1ad,args);
 };
-obj[_1b0].__preJoinArity=_1b5;
 }
-return _1b3;
+obj[_1a9].__preJoinArity=_1af;
+}
+return _1ad;
 };
-dojo.lang.extend(dojo.event.MethodJoinPoint,{unintercept:function(){
+dojo.lang.extend(dojo.event.MethodJoinPoint,{squelch:false,unintercept:function(){
 this.object[this.methodname]=this.methodfunc;
 this.before=[];
 this.after=[];
@@ -53379,34 +33488,41 @@
 },disconnect:dojo.lang.forward("unintercept"),run:function(){
 var obj=this.object||dj_global;
 var args=arguments;
-var _1bb=[];
+var _1b5=[];
 for(var x=0;x<args.length;x++){
-_1bb[x]=args[x];
+_1b5[x]=args[x];
 }
-var _1bd=function(marr){
+var _1b7=function(marr){
 if(!marr){
 dojo.debug("Null argument to unrollAdvice()");
 return;
 }
-var _1bf=marr[0]||dj_global;
-var _1c0=marr[1];
-if(!_1bf[_1c0]){
-dojo.raise("function \""+_1c0+"\" does not exist on \""+_1bf+"\"");
+var _1b9=marr[0]||dj_global;
+var _1ba=marr[1];
+if(!_1b9[_1ba]){
+dojo.raise("function \""+_1ba+"\" does not exist on \""+_1b9+"\"");
 }
-var _1c1=marr[2]||dj_global;
-var _1c2=marr[3];
+var _1bb=marr[2]||dj_global;
+var _1bc=marr[3];
 var msg=marr[6];
-var _1c4;
+var _1be=marr[7];
+if(_1be>-1){
+if(_1be==0){
+return;
+}
+marr[7]--;
+}
+var _1bf;
 var to={args:[],jp_:this,object:obj,proceed:function(){
-return _1bf[_1c0].apply(_1bf,to.args);
+return _1b9[_1ba].apply(_1b9,to.args);
 }};
-to.args=_1bb;
-var _1c6=parseInt(marr[4]);
-var _1c7=((!isNaN(_1c6))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
+to.args=_1b5;
+var _1c1=parseInt(marr[4]);
+var _1c2=((!isNaN(_1c1))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
 if(marr[5]){
 var rate=parseInt(marr[5]);
 var cur=new Date();
-var _1ca=false;
+var _1c5=false;
 if((marr["last"])&&((cur-marr.last)<=rate)){
 if(dojo.event._canTimeout){
 if(marr["delayTimer"]){
@@ -53416,7 +33532,7 @@
 var mcpy=dojo.lang.shallowCopy(marr);
 marr.delayTimer=setTimeout(function(){
 mcpy[5]=0;
-_1bd(mcpy);
+_1b7(mcpy);
 },tod);
 }
 return;
@@ -53424,49 +33540,49 @@
 marr.last=cur;
 }
 }
-if(_1c2){
-_1c1[_1c2].call(_1c1,to);
+if(_1bc){
+_1bb[_1bc].call(_1bb,to);
 }else{
-if((_1c7)&&((dojo.render.html)||(dojo.render.svg))){
+if((_1c2)&&((dojo.render.html)||(dojo.render.svg))){
 dj_global["setTimeout"](function(){
 if(msg){
-_1bf[_1c0].call(_1bf,to);
+_1b9[_1ba].call(_1b9,to);
 }else{
-_1bf[_1c0].apply(_1bf,args);
+_1b9[_1ba].apply(_1b9,args);
 }
-},_1c6);
+},_1c1);
 }else{
 if(msg){
-_1bf[_1c0].call(_1bf,to);
+_1b9[_1ba].call(_1b9,to);
 }else{
-_1bf[_1c0].apply(_1bf,args);
+_1b9[_1ba].apply(_1b9,args);
 }
 }
 }
 };
-var _1cd=function(){
+var _1c8=function(){
 if(this.squelch){
 try{
-return _1bd.apply(this,arguments);
+return _1b7.apply(this,arguments);
 }
 catch(e){
 dojo.debug(e);
 }
 }else{
-return _1bd.apply(this,arguments);
+return _1b7.apply(this,arguments);
 }
 };
 if((this["before"])&&(this.before.length>0)){
-dojo.lang.forEach(this.before.concat(new Array()),_1cd);
+dojo.lang.forEach(this.before.concat(new Array()),_1c8);
 }
-var _1ce;
+var _1c9;
 try{
 if((this["around"])&&(this.around.length>0)){
 var mi=new dojo.event.MethodInvocation(this,obj,args);
-_1ce=mi.proceed();
+_1c9=mi.proceed();
 }else{
 if(this.methodfunc){
-_1ce=this.object[this.methodname].apply(this.object,args);
+_1c9=this.object[this.methodname].apply(this.object,args);
 }
 }
 }
@@ -53477,9 +33593,9 @@
 }
 }
 if((this["after"])&&(this.after.length>0)){
-dojo.lang.forEach(this.after.concat(new Array()),_1cd);
+dojo.lang.forEach(this.after.concat(new Array()),_1c8);
 }
-return (this.methodfunc)?_1ce:null;
+return (this.methodfunc)?_1c9:null;
 },getArr:function(kind){
 var type="after";
 if((typeof kind=="string")&&(kind.indexOf("before")!=-1)){
@@ -53494,39 +33610,39 @@
 }
 return this[type];
 },kwAddAdvice:function(args){
-this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"]);
-},addAdvice:function(_1d3,_1d4,_1d5,_1d6,_1d7,_1d8,once,_1da,rate,_1dc){
-var arr=this.getArr(_1d7);
+this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"],args["maxCalls"]);
+},addAdvice:function(_1ce,_1cf,_1d0,_1d1,_1d2,_1d3,once,_1d5,rate,_1d7,_1d8){
+var arr=this.getArr(_1d2);
 if(!arr){
 dojo.raise("bad this: "+this);
 }
-var ao=[_1d3,_1d4,_1d5,_1d6,_1da,rate,_1dc];
+var ao=[_1ce,_1cf,_1d0,_1d1,_1d5,rate,_1d7,_1d8];
 if(once){
-if(this.hasAdvice(_1d3,_1d4,_1d7,arr)>=0){
+if(this.hasAdvice(_1ce,_1cf,_1d2,arr)>=0){
 return;
 }
 }
-if(_1d8=="first"){
+if(_1d3=="first"){
 arr.unshift(ao);
 }else{
 arr.push(ao);
 }
-},hasAdvice:function(_1df,_1e0,_1e1,arr){
+},hasAdvice:function(_1db,_1dc,_1dd,arr){
 if(!arr){
-arr=this.getArr(_1e1);
+arr=this.getArr(_1dd);
 }
 var ind=-1;
 for(var x=0;x<arr.length;x++){
-var aao=(typeof _1e0=="object")?(new String(_1e0)).toString():_1e0;
+var aao=(typeof _1dc=="object")?(new String(_1dc)).toString():_1dc;
 var a1o=(typeof arr[x][1]=="object")?(new String(arr[x][1])).toString():arr[x][1];
-if((arr[x][0]==_1df)&&(a1o==aao)){
+if((arr[x][0]==_1db)&&(a1o==aao)){
 ind=x;
 }
 }
 return ind;
-},removeAdvice:function(_1e7,_1e8,_1e9,once){
-var arr=this.getArr(_1e9);
-var ind=this.hasAdvice(_1e7,_1e8,_1e9,arr);
+},removeAdvice:function(_1e3,_1e4,_1e5,once){
+var arr=this.getArr(_1e5);
+var ind=this.hasAdvice(_1e3,_1e4,_1e5,arr);
 if(ind==-1){
 return false;
 }
@@ -53535,73 +33651,73 @@
 if(once){
 break;
 }
-ind=this.hasAdvice(_1e7,_1e8,_1e9,arr);
+ind=this.hasAdvice(_1e3,_1e4,_1e5,arr);
 }
 return true;
 }});
 dojo.provide("dojo.event.topic");
 dojo.event.topic=new function(){
 this.topics={};
-this.getTopic=function(_1ed){
-if(!this.topics[_1ed]){
-this.topics[_1ed]=new this.TopicImpl(_1ed);
+this.getTopic=function(_1e9){
+if(!this.topics[_1e9]){
+this.topics[_1e9]=new this.TopicImpl(_1e9);
 }
-return this.topics[_1ed];
+return this.topics[_1e9];
 };
-this.registerPublisher=function(_1ee,obj,_1f0){
-var _1ee=this.getTopic(_1ee);
-_1ee.registerPublisher(obj,_1f0);
+this.registerPublisher=function(_1ea,obj,_1ec){
+var _1ea=this.getTopic(_1ea);
+_1ea.registerPublisher(obj,_1ec);
 };
-this.subscribe=function(_1f1,obj,_1f3){
-var _1f1=this.getTopic(_1f1);
-_1f1.subscribe(obj,_1f3);
+this.subscribe=function(_1ed,obj,_1ef){
+var _1ed=this.getTopic(_1ed);
+_1ed.subscribe(obj,_1ef);
 };
-this.unsubscribe=function(_1f4,obj,_1f6){
-var _1f4=this.getTopic(_1f4);
-_1f4.unsubscribe(obj,_1f6);
+this.unsubscribe=function(_1f0,obj,_1f2){
+var _1f0=this.getTopic(_1f0);
+_1f0.unsubscribe(obj,_1f2);
 };
-this.destroy=function(_1f7){
-this.getTopic(_1f7).destroy();
-delete this.topics[_1f7];
+this.destroy=function(_1f3){
+this.getTopic(_1f3).destroy();
+delete this.topics[_1f3];
 };
-this.publishApply=function(_1f8,args){
-var _1f8=this.getTopic(_1f8);
-_1f8.sendMessage.apply(_1f8,args);
+this.publishApply=function(_1f4,args){
+var _1f4=this.getTopic(_1f4);
+_1f4.sendMessage.apply(_1f4,args);
 };
-this.publish=function(_1fa,_1fb){
-var _1fa=this.getTopic(_1fa);
+this.publish=function(_1f6,_1f7){
+var _1f6=this.getTopic(_1f6);
 var args=[];
 for(var x=1;x<arguments.length;x++){
 args.push(arguments[x]);
 }
-_1fa.sendMessage.apply(_1fa,args);
+_1f6.sendMessage.apply(_1f6,args);
 };
 };
-dojo.event.topic.TopicImpl=function(_1fe){
-this.topicName=_1fe;
-this.subscribe=function(_1ff,_200){
-var tf=_200||_1ff;
-var to=(!_200)?dj_global:_1ff;
+dojo.event.topic.TopicImpl=function(_1fa){
+this.topicName=_1fa;
+this.subscribe=function(_1fb,_1fc){
+var tf=_1fc||_1fb;
+var to=(!_1fc)?dj_global:_1fb;
 return dojo.event.kwConnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
-this.unsubscribe=function(_203,_204){
-var tf=(!_204)?_203:_204;
-var to=(!_204)?null:_203;
+this.unsubscribe=function(_1ff,_200){
+var tf=(!_200)?_1ff:_200;
+var to=(!_200)?null:_1ff;
 return dojo.event.kwDisconnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
 this._getJoinPoint=function(){
 return dojo.event.MethodJoinPoint.getForMethod(this,"sendMessage");
 };
-this.setSquelch=function(_207){
-this._getJoinPoint().squelch=_207;
+this.setSquelch=function(_203){
+this._getJoinPoint().squelch=_203;
 };
 this.destroy=function(){
 this._getJoinPoint().disconnect();
 };
-this.registerPublisher=function(_208,_209){
-dojo.event.connect(_208,_209,this,"sendMessage");
+this.registerPublisher=function(_204,_205){
+dojo.event.connect(_204,_205,this,"sendMessage");
 };
-this.sendMessage=function(_20a){
+this.sendMessage=function(_206){
 };
 };
 dojo.provide("dojo.event.browser");
@@ -53624,12 +33740,12 @@
 catch(e){
 }
 }
-this.clobber=function(_20d){
+this.clobber=function(_209){
 var na;
 var tna;
-if(_20d){
-tna=_20d.all||_20d.getElementsByTagName("*");
-na=[_20d];
+if(_209){
+tna=_209.all||_209.getElementsByTagName("*");
+na=[_209];
 for(var x=0;x<tna.length;x++){
 if(tna[x]["__doClobber__"]){
 na.push(tna[x]);
@@ -53644,7 +33760,7 @@
 na=(this.clobberNodes.length)?this.clobberNodes:document.all;
 }
 tna=null;
-var _211={};
+var _20d={};
 for(var i=na.length-1;i>=0;i=i-1){
 var el=na[i];
 try{
@@ -53695,9 +33811,9 @@
 });
 }
 dojo.event.browser=new function(){
-var _216=0;
-this.normalizedEventName=function(_217){
-switch(_217){
+var _212=0;
+this.normalizedEventName=function(_213){
+switch(_213){
 case "CheckboxStateChange":
 case "DOMAttrModified":
 case "DOMMenuItemActive":
@@ -53706,10 +33822,11 @@
 case "DOMNodeInserted":
 case "DOMNodeRemoved":
 case "RadioStateChange":
-return _217;
+return _213;
 break;
 default:
-return _217.toLowerCase();
+var lcn=_213.toLowerCase();
+return (lcn.indexOf("on")==0)?lcn.substr(2):lcn;
 break;
 }
 };
@@ -53728,93 +33845,88 @@
 node.__clobberAttrs__=[];
 }
 };
-this.addClobberNodeAttrs=function(node,_21b){
+this.addClobberNodeAttrs=function(node,_218){
 if(!dojo.render.html.ie){
 return;
 }
 this.addClobberNode(node);
-for(var x=0;x<_21b.length;x++){
-node.__clobberAttrs__.push(_21b[x]);
+for(var x=0;x<_218.length;x++){
+node.__clobberAttrs__.push(_218[x]);
 }
 };
-this.removeListener=function(node,_21e,fp,_220){
-if(!_220){
-var _220=false;
+this.removeListener=function(node,_21b,fp,_21d){
+if(!_21d){
+var _21d=false;
 }
-_21e=dojo.event.browser.normalizedEventName(_21e);
-if((_21e=="onkey")||(_21e=="key")){
+_21b=dojo.event.browser.normalizedEventName(_21b);
+if(_21b=="key"){
 if(dojo.render.html.ie){
-this.removeListener(node,"onkeydown",fp,_220);
+this.removeListener(node,"onkeydown",fp,_21d);
 }
-_21e="onkeypress";
+_21b="keypress";
 }
-if(_21e.substr(0,2)=="on"){
-_21e=_21e.substr(2);
-}
 if(node.removeEventListener){
-node.removeEventListener(_21e,fp,_220);
+node.removeEventListener(_21b,fp,_21d);
 }
 };
-this.addListener=function(node,_222,fp,_224,_225){
+this.addListener=function(node,_21f,fp,_221,_222){
 if(!node){
 return;
 }
-if(!_224){
-var _224=false;
+if(!_221){
+var _221=false;
 }
-_222=dojo.event.browser.normalizedEventName(_222);
-if((_222=="onkey")||(_222=="key")){
+_21f=dojo.event.browser.normalizedEventName(_21f);
+if(_21f=="key"){
 if(dojo.render.html.ie){
-this.addListener(node,"onkeydown",fp,_224,_225);
+this.addListener(node,"onkeydown",fp,_221,_222);
 }
-_222="onkeypress";
+_21f="keypress";
 }
-if(_222.substr(0,2)!="on"){
-_222="on"+_222;
-}
-if(!_225){
-var _226=function(evt){
+if(!_222){
+var _223=function(evt){
 if(!evt){
 evt=window.event;
 }
 var ret=fp(dojo.event.browser.fixEvent(evt,this));
-if(_224){
+if(_221){
 dojo.event.browser.stopEvent(evt);
 }
 return ret;
 };
 }else{
-_226=fp;
+_223=fp;
 }
 if(node.addEventListener){
-node.addEventListener(_222.substr(2),_226,_224);
-return _226;
+node.addEventListener(_21f,_223,_221);
+return _223;
 }else{
-if(typeof node[_222]=="function"){
-var _229=node[_222];
-node[_222]=function(e){
-_229(e);
-return _226(e);
+_21f="on"+_21f;
+if(typeof node[_21f]=="function"){
+var _226=node[_21f];
+node[_21f]=function(e){
+_226(e);
+return _223(e);
 };
 }else{
-node[_222]=_226;
+node[_21f]=_223;
 }
 if(dojo.render.html.ie){
-this.addClobberNodeAttrs(node,[_222]);
+this.addClobberNodeAttrs(node,[_21f]);
 }
-return _226;
+return _223;
 }
 };
 this.isEvent=function(obj){
 return (typeof obj!="undefined")&&(obj)&&(typeof Event!="undefined")&&(obj.eventPhase);
 };
 this.currentEvent=null;
-this.callListener=function(_22c,_22d){
-if(typeof _22c!="function"){
-dojo.raise("listener not a function: "+_22c);
+this.callListener=function(_229,_22a){
+if(typeof _229!="function"){
+dojo.raise("listener not a function: "+_229);
 }
-dojo.event.browser.currentEvent.currentTarget=_22d;
-return _22c.call(_22d,dojo.event.browser.currentEvent);
+dojo.event.browser.currentEvent.currentTarget=_22a;
+return _229.call(_22a,dojo.event.browser.currentEvent);
 };
 this._stopPropagation=function(){
 dojo.event.browser.currentEvent.cancelBubble=true;
@@ -53827,7 +33939,7 @@
 for(var key in this.keys){
 this.revKeys[this.keys[key]]=key;
 }
-this.fixEvent=function(evt,_230){
+this.fixEvent=function(evt,_22d){
 if(!evt){
 if(window["event"]){
 evt=window.event;
@@ -53904,14 +34016,14 @@
 break;
 default:
 if(evt.ctrlKey||evt.altKey){
-var _232=evt.keyCode;
-if(_232>=65&&_232<=90&&evt.shiftKey==false){
-_232+=32;
+var _22f=evt.keyCode;
+if(_22f>=65&&_22f<=90&&evt.shiftKey==false){
+_22f+=32;
 }
-if(_232>=1&&_232<=26&&evt.ctrlKey){
-_232+=96;
+if(_22f>=1&&_22f<=26&&evt.ctrlKey){
+_22f+=96;
 }
-evt.key=String.fromCharCode(_232);
+evt.key=String.fromCharCode(_22f);
 }
 }
 }else{
@@ -53937,11 +34049,11 @@
 evt.key=evt.which;
 break;
 default:
-var _232=evt.which;
+var _22f=evt.which;
 if((evt.ctrlKey||evt.altKey||evt.metaKey)&&(evt.which>=65&&evt.which<=90&&evt.shiftKey==false)){
-_232+=32;
+_22f+=32;
 }
-evt.key=String.fromCharCode(_232);
+evt.key=String.fromCharCode(_22f);
 }
 }
 }
@@ -54046,7 +34158,7 @@
 evt.target=evt.srcElement;
 }
 if(!evt.currentTarget){
-evt.currentTarget=(_230?_230:evt.srcElement);
+evt.currentTarget=(_22d?_22d:evt.srcElement);
 }
 if(!evt.layerX){
 evt.layerX=evt.offsetX;
@@ -54055,12 +34167,12 @@
 evt.layerY=evt.offsetY;
 }
 var doc=(evt.srcElement&&evt.srcElement.ownerDocument)?evt.srcElement.ownerDocument:document;
-var _234=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
+var _231=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
 if(!evt.pageX){
-evt.pageX=evt.clientX+(_234.scrollLeft||0);
+evt.pageX=evt.clientX+(_231.scrollLeft||0);
 }
 if(!evt.pageY){
-evt.pageY=evt.clientY+(_234.scrollTop||0);
+evt.pageY=evt.clientY+(_231.scrollTop||0);
 }
 if(evt.type=="mouseover"){
 evt.relatedTarget=evt.fromElement;
@@ -54085,29 +34197,25 @@
 }
 };
 };
+dojo.kwCompoundRequire({common:["dojo.event.common","dojo.event.topic"],browser:["dojo.event.browser"],dashboard:["dojo.event.browser"]});
 dojo.provide("dojo.event.*");
 
 
 __CPAN_EDITION__ event build.txt
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/lang/common.js,
-../src/lang/array.js,
-../src/lang/extras.js,
-../src/lang/func.js,
-../src/event/common.js,
-../src/event/topic.js,
-../src/event/browser.js,
+Files baked into this build:
+dojoGuardStart.js
+../src/bootstrap1.js
+../src/loader.js
+dojoGuardEnd.js
+../src/hostenv_browser.js
+../src/lang/common.js
+../src/lang/array.js
+../src/lang/extras.js
+../src/lang/func.js
+../src/event/common.js
+../src/event/topic.js
+../src/event/browser.js
 ../src/event/__package__.js
-
-		
 __CPAN_EDITION__ event_and_io dojo.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -54144,7 +34252,7 @@
 return dj_currentContext;
 };
 dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
+dojo.version={major:0,minor:4,patch:2,flag:"",revision:Number("$Rev: 7616 $".match(/[0-9]+/)[0]),toString:function(){
 with(dojo.version){
 return major+"."+minor+"."+patch+flag+" ("+revision+")";
 }
@@ -54400,7 +34508,7 @@
 }
 };
 dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
+if(typeof setTimeout=="object"||(djConfig["useXDomain"]&&dojo.render.html.opera)){
 setTimeout("dojo.hostenv.loaded();",0);
 }else{
 dojo.hostenv.loaded();
@@ -54548,6 +34656,11 @@
 dojo.registerModulePath=function(_66,_67){
 return dojo.hostenv.setModulePrefix(_66,_67);
 };
+if(djConfig["modulePaths"]){
+for(var param in djConfig["modulePaths"]){
+dojo.registerModulePath(param,djConfig["modulePaths"][param]);
+}
+}
 dojo.setModulePrefix=function(_68,_69){
 dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
 return dojo.registerModulePath(_68,_69);
@@ -54958,7 +35071,7 @@
 }
 }
 if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
+if(dojo.render.html.opera||(dojo.render.html.moz&&(djConfig["enableMozDomContentLoaded"]===true))){
 document.addEventListener("DOMContentLoaded",dj_load_init,null);
 }
 window.addEventListener("load",dj_load_init,null);
@@ -55106,51 +35219,9 @@
 return _ec;
 };
 }
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _ee=false;
-var _ef=false;
-var _f0=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_ee=true;
-}else{
-if(typeof this["load"]=="function"){
-_ef=true;
-}else{
-if(window.widget){
-_f0=true;
-}
-}
-}
-var _f1=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-_f1.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_ee)&&(!_f0)){
-_f1.push("browser_debug.js");
-}
-var _f2=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_f2=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<_f1.length;x++){
-var _f4=_f2+"src/"+_f1[x];
-if(_ee||_ef){
-load(_f4);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_f4+"'></scr"+"ipt>");
-}
-catch(e){
-var _f5=document.createElement("script");
-_f5.src=_f4;
-document.getElementsByTagName("head")[0].appendChild(_f5);
-}
-}
-}
-})();
+dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&!djConfig["useXDomain"],"dojo.browser_debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&djConfig["useXDomain"],"dojo.browser_debug_xd");
 dojo.provide("dojo.string.common");
 dojo.string.trim=function(str,wh){
 if(!str.replace){
@@ -55168,12 +35239,12 @@
 dojo.string.trimEnd=function(str){
 return dojo.string.trim(str,-1);
 };
-dojo.string.repeat=function(str,_fc,_fd){
+dojo.string.repeat=function(str,_f4,_f5){
 var out="";
-for(var i=0;i<_fc;i++){
+for(var i=0;i<_f4;i++){
 out+=str;
-if(_fd&&i<_fc-1){
-out+=_fd;
+if(_f5&&i<_f4-1){
+out+=_f5;
 }
 }
 return out;
@@ -55203,72 +35274,72 @@
 };
 dojo.provide("dojo.string");
 dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_10b,_10c){
-if(!dojo.lang.isFunction(_10c)){
-dojo.raise("dojo.inherits: superclass argument ["+_10c+"] must be a function (subclass: ["+_10b+"']");
+dojo.lang.inherits=function(_103,_104){
+if(!dojo.lang.isFunction(_104)){
+dojo.raise("dojo.inherits: superclass argument ["+_104+"] must be a function (subclass: ["+_103+"']");
 }
-_10b.prototype=new _10c();
-_10b.prototype.constructor=_10b;
-_10b.superclass=_10c.prototype;
-_10b["super"]=_10c.prototype;
+_103.prototype=new _104();
+_103.prototype.constructor=_103;
+_103.superclass=_104.prototype;
+_103["super"]=_104.prototype;
 };
-dojo.lang._mixin=function(obj,_10e){
+dojo.lang._mixin=function(obj,_106){
 var tobj={};
-for(var x in _10e){
-if((typeof tobj[x]=="undefined")||(tobj[x]!=_10e[x])){
-obj[x]=_10e[x];
+for(var x in _106){
+if((typeof tobj[x]=="undefined")||(tobj[x]!=_106[x])){
+obj[x]=_106[x];
 }
 }
-if(dojo.render.html.ie&&(typeof (_10e["toString"])=="function")&&(_10e["toString"]!=obj["toString"])&&(_10e["toString"]!=tobj["toString"])){
-obj.toString=_10e.toString;
+if(dojo.render.html.ie&&(typeof (_106["toString"])=="function")&&(_106["toString"]!=obj["toString"])&&(_106["toString"]!=tobj["toString"])){
+obj.toString=_106.toString;
 }
 return obj;
 };
-dojo.lang.mixin=function(obj,_112){
+dojo.lang.mixin=function(obj,_10a){
 for(var i=1,l=arguments.length;i<l;i++){
 dojo.lang._mixin(obj,arguments[i]);
 }
 return obj;
 };
-dojo.lang.extend=function(_115,_116){
+dojo.lang.extend=function(_10d,_10e){
 for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_115.prototype,arguments[i]);
+dojo.lang._mixin(_10d.prototype,arguments[i]);
 }
-return _115;
+return _10d;
 };
 dojo.inherits=dojo.lang.inherits;
 dojo.mixin=dojo.lang.mixin;
 dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_119,_11a,_11b,_11c){
-if(!dojo.lang.isArrayLike(_119)&&dojo.lang.isArrayLike(_11a)){
+dojo.lang.find=function(_111,_112,_113,_114){
+if(!dojo.lang.isArrayLike(_111)&&dojo.lang.isArrayLike(_112)){
 dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_119;
-_119=_11a;
-_11a=temp;
+var temp=_111;
+_111=_112;
+_112=temp;
 }
-var _11e=dojo.lang.isString(_119);
-if(_11e){
-_119=_119.split("");
+var _116=dojo.lang.isString(_111);
+if(_116){
+_111=_111.split("");
 }
-if(_11c){
+if(_114){
 var step=-1;
-var i=_119.length-1;
+var i=_111.length-1;
 var end=-1;
 }else{
 var step=1;
 var i=0;
-var end=_119.length;
+var end=_111.length;
 }
-if(_11b){
+if(_113){
 while(i!=end){
-if(_119[i]===_11a){
+if(_111[i]===_112){
 return i;
 }
 i+=step;
 }
 }else{
 while(i!=end){
-if(_119[i]==_11a){
+if(_111[i]==_112){
 return i;
 }
 i+=step;
@@ -55277,12 +35348,12 @@
 return -1;
 };
 dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_122,_123,_124){
-return dojo.lang.find(_122,_123,_124,true);
+dojo.lang.findLast=function(_11a,_11b,_11c){
+return dojo.lang.find(_11a,_11b,_11c,true);
 };
 dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_125,_126){
-return dojo.lang.find(_125,_126)>-1;
+dojo.lang.inArray=function(_11d,_11e){
+return dojo.lang.find(_11d,_11e)>-1;
 };
 dojo.lang.isObject=function(it){
 if(typeof it=="undefined"){
@@ -55346,27 +35417,27 @@
 return ((typeof (it)=="undefined")&&(it==undefined));
 };
 dojo.provide("dojo.lang.extras");
-dojo.lang.setTimeout=function(func,_132){
-var _133=window,_134=2;
+dojo.lang.setTimeout=function(func,_12a){
+var _12b=window,_12c=2;
 if(!dojo.lang.isFunction(func)){
-_133=func;
-func=_132;
-_132=arguments[2];
-_134++;
+_12b=func;
+func=_12a;
+_12a=arguments[2];
+_12c++;
 }
 if(dojo.lang.isString(func)){
-func=_133[func];
+func=_12b[func];
 }
 var args=[];
-for(var i=_134;i<arguments.length;i++){
+for(var i=_12c;i<arguments.length;i++){
 args.push(arguments[i]);
 }
 return dojo.global().setTimeout(function(){
-func.apply(_133,args);
-},_132);
+func.apply(_12b,args);
+},_12a);
 };
-dojo.lang.clearTimeout=function(_137){
-dojo.global().clearTimeout(_137);
+dojo.lang.clearTimeout=function(_12f){
+dojo.global().clearTimeout(_12f);
 };
 dojo.lang.getNameInObj=function(ns,item){
 if(!ns){
@@ -55411,78 +35482,78 @@
 }
 return undefined;
 };
-dojo.lang.getObjPathValue=function(_140,_141,_142){
-with(dojo.parseObjPath(_140,_141,_142)){
-return dojo.evalProp(prop,obj,_142);
+dojo.lang.getObjPathValue=function(_138,_139,_13a){
+with(dojo.parseObjPath(_138,_139,_13a)){
+return dojo.evalProp(prop,obj,_13a);
 }
 };
-dojo.lang.setObjPathValue=function(_143,_144,_145,_146){
+dojo.lang.setObjPathValue=function(_13b,_13c,_13d,_13e){
 dojo.deprecated("dojo.lang.setObjPathValue","use dojo.parseObjPath and the '=' operator","0.6");
 if(arguments.length<4){
-_146=true;
+_13e=true;
 }
-with(dojo.parseObjPath(_143,_145,_146)){
-if(obj&&(_146||(prop in obj))){
-obj[prop]=_144;
+with(dojo.parseObjPath(_13b,_13d,_13e)){
+if(obj&&(_13e||(prop in obj))){
+obj[prop]=_13c;
 }
 }
 };
 dojo.provide("dojo.io.common");
 dojo.io.transports=[];
 dojo.io.hdlrFuncNames=["load","error","timeout"];
-dojo.io.Request=function(url,_148,_149,_14a){
+dojo.io.Request=function(url,_140,_141,_142){
 if((arguments.length==1)&&(arguments[0].constructor==Object)){
 this.fromKwArgs(arguments[0]);
 }else{
 this.url=url;
-if(_148){
-this.mimetype=_148;
+if(_140){
+this.mimetype=_140;
 }
-if(_149){
-this.transport=_149;
+if(_141){
+this.transport=_141;
 }
 if(arguments.length>=4){
-this.changeUrl=_14a;
+this.changeUrl=_142;
 }
 }
 };
-dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_14d,_14e){
-},error:function(type,_150,_151,_152){
-},timeout:function(type,_154,_155,_156){
-},handle:function(type,data,_159,_15a){
+dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_145,_146){
+},error:function(type,_148,_149,_14a){
+},timeout:function(type,_14c,_14d,_14e){
+},handle:function(type,data,_151,_152){
 },timeoutSeconds:0,abort:function(){
-},fromKwArgs:function(_15b){
-if(_15b["url"]){
-_15b.url=_15b.url.toString();
+},fromKwArgs:function(_153){
+if(_153["url"]){
+_153.url=_153.url.toString();
 }
-if(_15b["formNode"]){
-_15b.formNode=dojo.byId(_15b.formNode);
+if(_153["formNode"]){
+_153.formNode=dojo.byId(_153.formNode);
 }
-if(!_15b["method"]&&_15b["formNode"]&&_15b["formNode"].method){
-_15b.method=_15b["formNode"].method;
+if(!_153["method"]&&_153["formNode"]&&_153["formNode"].method){
+_153.method=_153["formNode"].method;
 }
-if(!_15b["handle"]&&_15b["handler"]){
-_15b.handle=_15b.handler;
+if(!_153["handle"]&&_153["handler"]){
+_153.handle=_153.handler;
 }
-if(!_15b["load"]&&_15b["loaded"]){
-_15b.load=_15b.loaded;
+if(!_153["load"]&&_153["loaded"]){
+_153.load=_153.loaded;
 }
-if(!_15b["changeUrl"]&&_15b["changeURL"]){
-_15b.changeUrl=_15b.changeURL;
+if(!_153["changeUrl"]&&_153["changeURL"]){
+_153.changeUrl=_153.changeURL;
 }
-_15b.encoding=dojo.lang.firstValued(_15b["encoding"],djConfig["bindEncoding"],"");
-_15b.sendTransport=dojo.lang.firstValued(_15b["sendTransport"],djConfig["ioSendTransport"],false);
-var _15c=dojo.lang.isFunction;
+_153.encoding=dojo.lang.firstValued(_153["encoding"],djConfig["bindEncoding"],"");
+_153.sendTransport=dojo.lang.firstValued(_153["sendTransport"],djConfig["ioSendTransport"],false);
+var _154=dojo.lang.isFunction;
 for(var x=0;x<dojo.io.hdlrFuncNames.length;x++){
 var fn=dojo.io.hdlrFuncNames[x];
-if(_15b[fn]&&_15c(_15b[fn])){
+if(_153[fn]&&_154(_153[fn])){
 continue;
 }
-if(_15b["handle"]&&_15c(_15b["handle"])){
-_15b[fn]=_15b.handle;
+if(_153["handle"]&&_154(_153["handle"])){
+_153[fn]=_153.handle;
 }
 }
-dojo.lang.mixin(this,_15b);
+dojo.lang.mixin(this,_153);
 }});
 dojo.io.Error=function(msg,type,num){
 this.message=msg;
@@ -55493,79 +35564,79 @@
 this.push(name);
 this[name]=dojo.io[name];
 };
-dojo.io.bind=function(_163){
-if(!(_163 instanceof dojo.io.Request)){
+dojo.io.bind=function(_15b){
+if(!(_15b instanceof dojo.io.Request)){
 try{
-_163=new dojo.io.Request(_163);
+_15b=new dojo.io.Request(_15b);
 }
 catch(e){
 dojo.debug(e);
 }
 }
-var _164="";
-if(_163["transport"]){
-_164=_163["transport"];
-if(!this[_164]){
-dojo.io.sendBindError(_163,"No dojo.io.bind() transport with name '"+_163["transport"]+"'.");
-return _163;
+var _15c="";
+if(_15b["transport"]){
+_15c=_15b["transport"];
+if(!this[_15c]){
+dojo.io.sendBindError(_15b,"No dojo.io.bind() transport with name '"+_15b["transport"]+"'.");
+return _15b;
 }
-if(!this[_164].canHandle(_163)){
-dojo.io.sendBindError(_163,"dojo.io.bind() transport with name '"+_163["transport"]+"' cannot handle this type of request.");
-return _163;
+if(!this[_15c].canHandle(_15b)){
+dojo.io.sendBindError(_15b,"dojo.io.bind() transport with name '"+_15b["transport"]+"' cannot handle this type of request.");
+return _15b;
 }
 }else{
 for(var x=0;x<dojo.io.transports.length;x++){
 var tmp=dojo.io.transports[x];
-if((this[tmp])&&(this[tmp].canHandle(_163))){
-_164=tmp;
+if((this[tmp])&&(this[tmp].canHandle(_15b))){
+_15c=tmp;
 break;
 }
 }
-if(_164==""){
-dojo.io.sendBindError(_163,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
-return _163;
+if(_15c==""){
+dojo.io.sendBindError(_15b,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
+return _15b;
 }
 }
-this[_164].bind(_163);
-_163.bindSuccess=true;
-return _163;
+this[_15c].bind(_15b);
+_15b.bindSuccess=true;
+return _15b;
 };
-dojo.io.sendBindError=function(_167,_168){
-if((typeof _167.error=="function"||typeof _167.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
-var _169=new dojo.io.Error(_168);
+dojo.io.sendBindError=function(_15f,_160){
+if((typeof _15f.error=="function"||typeof _15f.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
+var _161=new dojo.io.Error(_160);
 setTimeout(function(){
-_167[(typeof _167.error=="function")?"error":"handle"]("error",_169,null,_167);
+_15f[(typeof _15f.error=="function")?"error":"handle"]("error",_161,null,_15f);
 },50);
 }else{
-dojo.raise(_168);
+dojo.raise(_160);
 }
 };
-dojo.io.queueBind=function(_16a){
-if(!(_16a instanceof dojo.io.Request)){
+dojo.io.queueBind=function(_162){
+if(!(_162 instanceof dojo.io.Request)){
 try{
-_16a=new dojo.io.Request(_16a);
+_162=new dojo.io.Request(_162);
 }
 catch(e){
 dojo.debug(e);
 }
 }
-var _16b=_16a.load;
-_16a.load=function(){
+var _163=_162.load;
+_162.load=function(){
 dojo.io._queueBindInFlight=false;
-var ret=_16b.apply(this,arguments);
+var ret=_163.apply(this,arguments);
 dojo.io._dispatchNextQueueBind();
 return ret;
 };
-var _16d=_16a.error;
-_16a.error=function(){
+var _165=_162.error;
+_162.error=function(){
 dojo.io._queueBindInFlight=false;
-var ret=_16d.apply(this,arguments);
+var ret=_165.apply(this,arguments);
 dojo.io._dispatchNextQueueBind();
 return ret;
 };
-dojo.io._bindQueue.push(_16a);
+dojo.io._bindQueue.push(_162);
 dojo.io._dispatchNextQueueBind();
-return _16a;
+return _162;
 };
 dojo.io._dispatchNextQueueBind=function(){
 if(!dojo.io._queueBindInFlight){
@@ -55579,48 +35650,48 @@
 };
 dojo.io._bindQueue=[];
 dojo.io._queueBindInFlight=false;
-dojo.io.argsFromMap=function(map,_170,last){
-var enc=/utf/i.test(_170||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _173=[];
-var _174=new Object();
+dojo.io.argsFromMap=function(map,_168,last){
+var enc=/utf/i.test(_168||"")?encodeURIComponent:dojo.string.encodeAscii;
+var _16b=[];
+var _16c=new Object();
 for(var name in map){
-var _176=function(elt){
+var _16e=function(elt){
 var val=enc(name)+"="+enc(elt);
-_173[(last==name)?"push":"unshift"](val);
+_16b[(last==name)?"push":"unshift"](val);
 };
-if(!_174[name]){
-var _179=map[name];
-if(dojo.lang.isArray(_179)){
-dojo.lang.forEach(_179,_176);
+if(!_16c[name]){
+var _171=map[name];
+if(dojo.lang.isArray(_171)){
+dojo.lang.forEach(_171,_16e);
 }else{
-_176(_179);
+_16e(_171);
 }
 }
 }
-return _173.join("&");
+return _16b.join("&");
 };
-dojo.io.setIFrameSrc=function(_17a,src,_17c){
+dojo.io.setIFrameSrc=function(_172,src,_174){
 try{
 var r=dojo.render.html;
-if(!_17c){
+if(!_174){
 if(r.safari){
-_17a.location=src;
+_172.location=src;
 }else{
-frames[_17a.name].location=src;
+frames[_172.name].location=src;
 }
 }else{
 var idoc;
 if(r.ie){
-idoc=_17a.contentWindow.document;
+idoc=_172.contentWindow.document;
 }else{
 if(r.safari){
-idoc=_17a.document;
+idoc=_172.document;
 }else{
-idoc=_17a.contentWindow;
+idoc=_172.contentWindow;
 }
 }
 if(!idoc){
-_17a.location=src;
+_172.location=src;
 return;
 }else{
 idoc.location.replace(src);
@@ -55643,142 +35714,138 @@
 },isEmpty:function(obj){
 if(dojo.lang.isObject(obj)){
 var tmp={};
-var _183=0;
+var _17b=0;
 for(var x in obj){
 if(obj[x]&&(!tmp[x])){
-_183++;
+_17b++;
 break;
 }
 }
-return _183==0;
+return _17b==0;
 }else{
 if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
 return obj.length==0;
 }
 }
-},map:function(arr,obj,_187){
-var _188=dojo.lang.isString(arr);
-if(_188){
+},map:function(arr,obj,_17f){
+var _180=dojo.lang.isString(arr);
+if(_180){
 arr=arr.split("");
 }
-if(dojo.lang.isFunction(obj)&&(!_187)){
-_187=obj;
+if(dojo.lang.isFunction(obj)&&(!_17f)){
+_17f=obj;
 obj=dj_global;
 }else{
-if(dojo.lang.isFunction(obj)&&_187){
-var _189=obj;
-obj=_187;
-_187=_189;
+if(dojo.lang.isFunction(obj)&&_17f){
+var _181=obj;
+obj=_17f;
+_17f=_181;
 }
 }
 if(Array.map){
-var _18a=Array.map(arr,_187,obj);
+var _182=Array.map(arr,_17f,obj);
 }else{
-var _18a=[];
+var _182=[];
 for(var i=0;i<arr.length;++i){
-_18a.push(_187.call(obj,arr[i]));
+_182.push(_17f.call(obj,arr[i]));
 }
 }
-if(_188){
-return _18a.join("");
+if(_180){
+return _182.join("");
 }else{
-return _18a;
+return _182;
 }
-},reduce:function(arr,_18d,obj,_18f){
-var _190=_18d;
-if(arguments.length==1){
-dojo.debug("dojo.lang.reduce called with too few arguments!");
-return false;
-}else{
+},reduce:function(arr,_185,obj,_187){
+var _188=_185;
 if(arguments.length==2){
-_18f=_18d;
-_190=arr.shift();
+_187=_185;
+_188=arr[0];
+arr=arr.slice(1);
 }else{
-if(arguments.lenght==3){
+if(arguments.length==3){
 if(dojo.lang.isFunction(obj)){
-_18f=obj;
+_187=obj;
 obj=null;
 }
 }else{
 if(dojo.lang.isFunction(obj)){
-var tmp=_18f;
-_18f=obj;
+var tmp=_187;
+_187=obj;
 obj=tmp;
 }
 }
 }
-}
-var ob=obj?obj:dj_global;
+var ob=obj||dj_global;
 dojo.lang.map(arr,function(val){
-_190=_18f.call(ob,_190,val);
+_188=_187.call(ob,_188,val);
 });
-return _190;
-},forEach:function(_194,_195,_196){
-if(dojo.lang.isString(_194)){
-_194=_194.split("");
+return _188;
+},forEach:function(_18c,_18d,_18e){
+if(dojo.lang.isString(_18c)){
+_18c=_18c.split("");
 }
 if(Array.forEach){
-Array.forEach(_194,_195,_196);
+Array.forEach(_18c,_18d,_18e);
 }else{
-if(!_196){
-_196=dj_global;
+if(!_18e){
+_18e=dj_global;
 }
-for(var i=0,l=_194.length;i<l;i++){
-_195.call(_196,_194[i],i,_194);
+for(var i=0,l=_18c.length;i<l;i++){
+_18d.call(_18e,_18c[i],i,_18c);
 }
 }
-},_everyOrSome:function(_199,arr,_19b,_19c){
+},_everyOrSome:function(_191,arr,_193,_194){
 if(dojo.lang.isString(arr)){
 arr=arr.split("");
 }
 if(Array.every){
-return Array[_199?"every":"some"](arr,_19b,_19c);
+return Array[_191?"every":"some"](arr,_193,_194);
 }else{
-if(!_19c){
-_19c=dj_global;
+if(!_194){
+_194=dj_global;
 }
 for(var i=0,l=arr.length;i<l;i++){
-var _19f=_19b.call(_19c,arr[i],i,arr);
-if(_199&&!_19f){
+var _197=_193.call(_194,arr[i],i,arr);
+if(_191&&!_197){
 return false;
 }else{
-if((!_199)&&(_19f)){
+if((!_191)&&(_197)){
 return true;
 }
 }
 }
-return Boolean(_199);
+return Boolean(_191);
 }
-},every:function(arr,_1a1,_1a2){
-return this._everyOrSome(true,arr,_1a1,_1a2);
-},some:function(arr,_1a4,_1a5){
-return this._everyOrSome(false,arr,_1a4,_1a5);
-},filter:function(arr,_1a7,_1a8){
-var _1a9=dojo.lang.isString(arr);
-if(_1a9){
+},every:function(arr,_199,_19a){
+return this._everyOrSome(true,arr,_199,_19a);
+},some:function(arr,_19c,_19d){
+return this._everyOrSome(false,arr,_19c,_19d);
+},filter:function(arr,_19f,_1a0){
+var _1a1=dojo.lang.isString(arr);
+if(_1a1){
 arr=arr.split("");
 }
-var _1aa;
+var _1a2;
 if(Array.filter){
-_1aa=Array.filter(arr,_1a7,_1a8);
+_1a2=Array.filter(arr,_19f,_1a0);
 }else{
-if(!_1a8){
+if(!_1a0){
 if(arguments.length>=3){
 dojo.raise("thisObject doesn't exist!");
 }
-_1a8=dj_global;
+_1a0=dj_global;
 }
-_1aa=[];
+_1a2=[];
 for(var i=0;i<arr.length;i++){
-if(_1a7.call(_1a8,arr[i],i,arr)){
-_1aa.push(arr[i]);
+if(_19f.call(_1a0,arr[i],i,arr)){
+_1a2.push(arr[i]);
 }
 }
 }
-if(_1a9){
-return _1aa.join("");
+if(_1a1){
+return _1a2.join("");
 }else{
-return _1aa;
+return _1a2;
 }
 },unnest:function(){
 var out=[];
@@ -55791,29 +35858,29 @@
 }
 }
 return out;
-},toArray:function(_1af,_1b0){
-var _1b1=[];
-for(var i=_1b0||0;i<_1af.length;i++){
-_1b1.push(_1af[i]);
+},toArray:function(_1a7,_1a8){
+var _1a9=[];
+for(var i=_1a8||0;i<_1a7.length;i++){
+_1a9.push(_1a7[i]);
 }
-return _1b1;
+return _1a9;
 }});
 dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_1b3,_1b4){
-var fcn=(dojo.lang.isString(_1b4)?_1b3[_1b4]:_1b4)||function(){
+dojo.lang.hitch=function(_1ab,_1ac){
+var fcn=(dojo.lang.isString(_1ac)?_1ab[_1ac]:_1ac)||function(){
 };
 return function(){
-return fcn.apply(_1b3,arguments);
+return fcn.apply(_1ab,arguments);
 };
 };
 dojo.lang.anonCtr=0;
 dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_1b6,_1b7,_1b8){
-var nso=(_1b7||dojo.lang.anon);
-if((_1b8)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
+dojo.lang.nameAnonFunc=function(_1ae,_1af,_1b0){
+var nso=(_1af||dojo.lang.anon);
+if((_1b0)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
 for(var x in nso){
 try{
-if(nso[x]===_1b6){
+if(nso[x]===_1ae){
 return x;
 }
 }
@@ -55825,50 +35892,50 @@
 while(typeof nso[ret]!="undefined"){
 ret="__"+dojo.lang.anonCtr++;
 }
-nso[ret]=_1b6;
+nso[ret]=_1ae;
 return ret;
 };
-dojo.lang.forward=function(_1bc){
+dojo.lang.forward=function(_1b4){
 return function(){
-return this[_1bc].apply(this,arguments);
+return this[_1b4].apply(this,arguments);
 };
 };
-dojo.lang.curry=function(_1bd,func){
-var _1bf=[];
-_1bd=_1bd||dj_global;
+dojo.lang.curry=function(_1b5,func){
+var _1b7=[];
+_1b5=_1b5||dj_global;
 if(dojo.lang.isString(func)){
-func=_1bd[func];
+func=_1b5[func];
 }
 for(var x=2;x<arguments.length;x++){
-_1bf.push(arguments[x]);
+_1b7.push(arguments[x]);
 }
-var _1c1=(func["__preJoinArity"]||func.length)-_1bf.length;
-function gather(_1c2,_1c3,_1c4){
-var _1c5=_1c4;
-var _1c6=_1c3.slice(0);
-for(var x=0;x<_1c2.length;x++){
-_1c6.push(_1c2[x]);
+var _1b9=(func["__preJoinArity"]||func.length)-_1b7.length;
+function gather(_1ba,_1bb,_1bc){
+var _1bd=_1bc;
+var _1be=_1bb.slice(0);
+for(var x=0;x<_1ba.length;x++){
+_1be.push(_1ba[x]);
 }
-_1c4=_1c4-_1c2.length;
-if(_1c4<=0){
-var res=func.apply(_1bd,_1c6);
-_1c4=_1c5;
+_1bc=_1bc-_1ba.length;
+if(_1bc<=0){
+var res=func.apply(_1b5,_1be);
+_1bc=_1bd;
 return res;
 }else{
 return function(){
-return gather(arguments,_1c6,_1c4);
+return gather(arguments,_1be,_1bc);
 };
 }
 }
-return gather([],_1bf,_1c1);
+return gather([],_1b7,_1b9);
 };
-dojo.lang.curryArguments=function(_1c9,func,args,_1cc){
-var _1cd=[];
-var x=_1cc||0;
-for(x=_1cc;x<args.length;x++){
-_1cd.push(args[x]);
+dojo.lang.curryArguments=function(_1c1,func,args,_1c4){
+var _1c5=[];
+var x=_1c4||0;
+for(x=_1c4;x<args.length;x++){
+_1c5.push(args[x]);
 }
-return dojo.lang.curry.apply(dojo.lang,[_1c9,func].concat(_1cd));
+return dojo.lang.curry.apply(dojo.lang,[_1c1,func].concat(_1c5));
 };
 dojo.lang.tryThese=function(){
 for(var x=0;x<arguments.length;x++){
@@ -55885,36 +35952,36 @@
 }
 }
 };
-dojo.lang.delayThese=function(farr,cb,_1d3,_1d4){
+dojo.lang.delayThese=function(farr,cb,_1cb,_1cc){
 if(!farr.length){
-if(typeof _1d4=="function"){
-_1d4();
+if(typeof _1cc=="function"){
+_1cc();
 }
 return;
 }
-if((typeof _1d3=="undefined")&&(typeof cb=="number")){
-_1d3=cb;
+if((typeof _1cb=="undefined")&&(typeof cb=="number")){
+_1cb=cb;
 cb=function(){
 };
 }else{
 if(!cb){
 cb=function(){
 };
-if(!_1d3){
-_1d3=0;
+if(!_1cb){
+_1cb=0;
 }
 }
 }
 setTimeout(function(){
 (farr.shift())();
 cb();
-dojo.lang.delayThese(farr,cb,_1d3,_1d4);
-},_1d3);
+dojo.lang.delayThese(farr,cb,_1cb,_1cc);
+},_1cb);
 };
 dojo.provide("dojo.string.extras");
-dojo.string.substituteParams=function(_1d5,hash){
+dojo.string.substituteParams=function(_1cd,hash){
 var map=(typeof hash=="object")?hash:dojo.lang.toArray(arguments,1);
-return _1d5.replace(/\%\{(\w+)\}/g,function(_1d8,key){
+return _1cd.replace(/\%\{(\w+)\}/g,function(_1d0,key){
 if(typeof (map[key])!="undefined"&&map[key]!=null){
 return map[key];
 }
@@ -55928,11 +35995,11 @@
 if(arguments.length==0){
 str=this;
 }
-var _1db=str.split(" ");
-for(var i=0;i<_1db.length;i++){
-_1db[i]=_1db[i].charAt(0).toUpperCase()+_1db[i].substring(1);
+var _1d3=str.split(" ");
+for(var i=0;i<_1d3.length;i++){
+_1d3[i]=_1d3[i].charAt(0).toUpperCase()+_1d3[i].substring(1);
 }
-return _1db.join(" ");
+return _1d3.join(" ");
 };
 dojo.string.isBlank=function(str){
 if(!dojo.lang.isString(str)){
@@ -55945,15 +36012,15 @@
 return str;
 }
 var ret="";
-var _1e0=escape(str);
-var _1e1,re=/%u([0-9A-F]{4})/i;
-while((_1e1=_1e0.match(re))){
-var num=Number("0x"+_1e1[1]);
-var _1e4=escape("&#"+num+";");
-ret+=_1e0.substring(0,_1e1.index)+_1e4;
-_1e0=_1e0.substring(_1e1.index+_1e1[0].length);
+var _1d8=escape(str);
+var _1d9,re=/%u([0-9A-F]{4})/i;
+while((_1d9=_1d8.match(re))){
+var num=Number("0x"+_1d9[1]);
+var _1dc=escape("&#"+num+";");
+ret+=_1d8.substring(0,_1d9.index)+_1dc;
+_1d8=_1d8.substring(_1d9.index+_1d9[0].length);
 }
-ret+=_1e0.replace(/\+/g,"%2B");
+ret+=_1d8.replace(/\+/g,"%2B");
 return ret;
 };
 dojo.string.escape=function(type,str){
@@ -55978,9 +36045,9 @@
 return str;
 }
 };
-dojo.string.escapeXml=function(str,_1e9){
+dojo.string.escapeXml=function(str,_1e1){
 str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_1e9){
+if(!_1e1){
 str=str.replace(/'/gm,"&#39;");
 }
 return str;
@@ -56003,8 +36070,8 @@
 }
 return str.substring(0,len).replace(/\.+$/,"")+"...";
 };
-dojo.string.endsWith=function(str,end,_1f2){
-if(_1f2){
+dojo.string.endsWith=function(str,end,_1ea){
+if(_1ea){
 str=str.toLowerCase();
 end=end.toLowerCase();
 }
@@ -56021,12 +36088,12 @@
 }
 return false;
 };
-dojo.string.startsWith=function(str,_1f6,_1f7){
-if(_1f7){
+dojo.string.startsWith=function(str,_1ee,_1ef){
+if(_1ef){
 str=str.toLowerCase();
-_1f6=_1f6.toLowerCase();
+_1ee=_1ee.toLowerCase();
 }
-return str.indexOf(_1f6)==0;
+return str.indexOf(_1ee)==0;
 };
 dojo.string.startsWithAny=function(str){
 for(var i=1;i<arguments.length;i++){
@@ -56044,12 +36111,12 @@
 }
 return false;
 };
-dojo.string.normalizeNewlines=function(text,_1fd){
-if(_1fd=="\n"){
+dojo.string.normalizeNewlines=function(text,_1f5){
+if(_1f5=="\n"){
 text=text.replace(/\r\n/g,"\n");
 text=text.replace(/\r/g,"\n");
 }else{
-if(_1fd=="\r"){
+if(_1f5=="\r"){
 text=text.replace(/\r\n/g,"\r");
 text=text.replace(/\n/g,"\r");
 }else{
@@ -56058,20 +36125,20 @@
 }
 return text;
 };
-dojo.string.splitEscaped=function(str,_1ff){
-var _200=[];
-for(var i=0,_202=0;i<str.length;i++){
+dojo.string.splitEscaped=function(str,_1f7){
+var _1f8=[];
+for(var i=0,_1fa=0;i<str.length;i++){
 if(str.charAt(i)=="\\"){
 i++;
 continue;
 }
-if(str.charAt(i)==_1ff){
-_200.push(str.substring(_202,i));
-_202=i+1;
+if(str.charAt(i)==_1f7){
+_1f8.push(str.substring(_1fa,i));
+_1fa=i+1;
 }
 }
-_200.push(str.substr(_202));
-return _200;
+_1f8.push(str.substr(_1fa));
+return _1f8;
 };
 dojo.provide("dojo.dom");
 dojo.dom.ELEMENT_NODE=1;
@@ -56100,102 +36167,102 @@
 }
 };
 dojo.dom.getUniqueId=function(){
-var _204=dojo.doc();
+var _1fc=dojo.doc();
 do{
 var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_204.getElementById(id));
+}while(_1fc.getElementById(id));
 return id;
 };
 dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_206,_207){
-var node=_206.firstChild;
+dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_1fe,_1ff){
+var node=_1fe.firstChild;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.nextSibling;
 }
-if(_207&&node&&node.tagName&&node.tagName.toLowerCase()!=_207.toLowerCase()){
-node=dojo.dom.nextElement(node,_207);
+if(_1ff&&node&&node.tagName&&node.tagName.toLowerCase()!=_1ff.toLowerCase()){
+node=dojo.dom.nextElement(node,_1ff);
 }
 return node;
 };
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_209,_20a){
-var node=_209.lastChild;
+dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_201,_202){
+var node=_201.lastChild;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.previousSibling;
 }
-if(_20a&&node&&node.tagName&&node.tagName.toLowerCase()!=_20a.toLowerCase()){
-node=dojo.dom.prevElement(node,_20a);
+if(_202&&node&&node.tagName&&node.tagName.toLowerCase()!=_202.toLowerCase()){
+node=dojo.dom.prevElement(node,_202);
 }
 return node;
 };
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_20d){
+dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_205){
 if(!node){
 return null;
 }
 do{
 node=node.nextSibling;
 }while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_20d&&_20d.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.nextElement(node,_20d);
+if(node&&_205&&_205.toLowerCase()!=node.tagName.toLowerCase()){
+return dojo.dom.nextElement(node,_205);
 }
 return node;
 };
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_20f){
+dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_207){
 if(!node){
 return null;
 }
-if(_20f){
-_20f=_20f.toLowerCase();
+if(_207){
+_207=_207.toLowerCase();
 }
 do{
 node=node.previousSibling;
 }while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_20f&&_20f.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_20f);
+if(node&&_207&&_207.toLowerCase()!=node.tagName.toLowerCase()){
+return dojo.dom.prevElement(node,_207);
 }
 return node;
 };
-dojo.dom.moveChildren=function(_210,_211,trim){
-var _213=0;
+dojo.dom.moveChildren=function(_208,_209,trim){
+var _20b=0;
 if(trim){
-while(_210.hasChildNodes()&&_210.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_210.removeChild(_210.firstChild);
+while(_208.hasChildNodes()&&_208.firstChild.nodeType==dojo.dom.TEXT_NODE){
+_208.removeChild(_208.firstChild);
 }
-while(_210.hasChildNodes()&&_210.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_210.removeChild(_210.lastChild);
+while(_208.hasChildNodes()&&_208.lastChild.nodeType==dojo.dom.TEXT_NODE){
+_208.removeChild(_208.lastChild);
 }
 }
-while(_210.hasChildNodes()){
-_211.appendChild(_210.firstChild);
-_213++;
+while(_208.hasChildNodes()){
+_209.appendChild(_208.firstChild);
+_20b++;
 }
-return _213;
+return _20b;
 };
-dojo.dom.copyChildren=function(_214,_215,trim){
-var _217=_214.cloneNode(true);
-return this.moveChildren(_217,_215,trim);
+dojo.dom.copyChildren=function(_20c,_20d,trim){
+var _20f=_20c.cloneNode(true);
+return this.moveChildren(_20f,_20d,trim);
 };
-dojo.dom.replaceChildren=function(node,_219){
-var _21a=[];
+dojo.dom.replaceChildren=function(node,_211){
+var _212=[];
 if(dojo.render.html.ie){
 for(var i=0;i<node.childNodes.length;i++){
-_21a.push(node.childNodes[i]);
+_212.push(node.childNodes[i]);
 }
 }
 dojo.dom.removeChildren(node);
-node.appendChild(_219);
-for(var i=0;i<_21a.length;i++){
-dojo.dom.destroyNode(_21a[i]);
+node.appendChild(_211);
+for(var i=0;i<_212.length;i++){
+dojo.dom.destroyNode(_212[i]);
 }
 };
 dojo.dom.removeChildren=function(node){
-var _21d=node.childNodes.length;
+var _215=node.childNodes.length;
 while(node.hasChildNodes()){
 dojo.dom.removeNode(node.firstChild);
 }
-return _21d;
+return _215;
 };
-dojo.dom.replaceNode=function(node,_21f){
-return node.parentNode.replaceChild(_21f,node);
+dojo.dom.replaceNode=function(node,_217){
+return node.parentNode.replaceChild(_217,node);
 };
 dojo.dom.destroyNode=function(node){
 if(node.parentNode){
@@ -56215,38 +36282,38 @@
 return node.parentNode.removeChild(node);
 }
 };
-dojo.dom.getAncestors=function(node,_223,_224){
-var _225=[];
-var _226=(_223&&(_223 instanceof Function||typeof _223=="function"));
+dojo.dom.getAncestors=function(node,_21b,_21c){
+var _21d=[];
+var _21e=(_21b&&(_21b instanceof Function||typeof _21b=="function"));
 while(node){
-if(!_226||_223(node)){
-_225.push(node);
+if(!_21e||_21b(node)){
+_21d.push(node);
 }
-if(_224&&_225.length>0){
-return _225[0];
+if(_21c&&_21d.length>0){
+return _21d[0];
 }
 node=node.parentNode;
 }
-if(_224){
+if(_21c){
 return null;
 }
-return _225;
+return _21d;
 };
-dojo.dom.getAncestorsByTag=function(node,tag,_229){
+dojo.dom.getAncestorsByTag=function(node,tag,_221){
 tag=tag.toLowerCase();
 return dojo.dom.getAncestors(node,function(el){
 return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_229);
+},_221);
 };
 dojo.dom.getFirstAncestorByTag=function(node,tag){
 return dojo.dom.getAncestorsByTag(node,tag,true);
 };
-dojo.dom.isDescendantOf=function(node,_22e,_22f){
-if(_22f&&node){
+dojo.dom.isDescendantOf=function(node,_226,_227){
+if(_227&&node){
 node=node.parentNode;
 }
 while(node){
-if(node==_22e){
+if(node==_226){
 return true;
 }
 node=node.parentNode;
@@ -56268,12 +36335,12 @@
 };
 dojo.dom.createDocument=function(){
 var doc=null;
-var _232=dojo.doc();
+var _22a=dojo.doc();
 if(!dj_undef("ActiveXObject")){
-var _233=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_233.length;i++){
+var _22b=["MSXML2","Microsoft","MSXML","MSXML3"];
+for(var i=0;i<_22b.length;i++){
 try{
-doc=new ActiveXObject(_233[i]+".XMLDOM");
+doc=new ActiveXObject(_22b[i]+".XMLDOM");
 }
 catch(e){
 }
@@ -56282,40 +36349,40 @@
 }
 }
 }else{
-if((_232.implementation)&&(_232.implementation.createDocument)){
-doc=_232.implementation.createDocument("","",null);
+if((_22a.implementation)&&(_22a.implementation.createDocument)){
+doc=_22a.implementation.createDocument("","",null);
 }
 }
 return doc;
 };
-dojo.dom.createDocumentFromText=function(str,_236){
-if(!_236){
-_236="text/xml";
+dojo.dom.createDocumentFromText=function(str,_22e){
+if(!_22e){
+_22e="text/xml";
 }
 if(!dj_undef("DOMParser")){
-var _237=new DOMParser();
-return _237.parseFromString(str,_236);
+var _22f=new DOMParser();
+return _22f.parseFromString(str,_22e);
 }else{
 if(!dj_undef("ActiveXObject")){
-var _238=dojo.dom.createDocument();
-if(_238){
-_238.async=false;
-_238.loadXML(str);
-return _238;
+var _230=dojo.dom.createDocument();
+if(_230){
+_230.async=false;
+_230.loadXML(str);
+return _230;
 }else{
 dojo.debug("toXml didn't work?");
 }
 }else{
-var _239=dojo.doc();
-if(_239.createElement){
-var tmp=_239.createElement("xml");
+var _231=dojo.doc();
+if(_231.createElement){
+var tmp=_231.createElement("xml");
 tmp.innerHTML=str;
-if(_239.implementation&&_239.implementation.createDocument){
-var _23b=_239.implementation.createDocument("foo","",null);
+if(_231.implementation&&_231.implementation.createDocument){
+var _233=_231.implementation.createDocument("foo","",null);
 for(var i=0;i<tmp.childNodes.length;i++){
-_23b.importNode(tmp.childNodes.item(i),true);
+_233.importNode(tmp.childNodes.item(i),true);
 }
-return _23b;
+return _233;
 }
 return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
 }
@@ -56323,39 +36390,39 @@
 }
 return null;
 };
-dojo.dom.prependChild=function(node,_23e){
-if(_23e.firstChild){
-_23e.insertBefore(node,_23e.firstChild);
+dojo.dom.prependChild=function(node,_236){
+if(_236.firstChild){
+_236.insertBefore(node,_236.firstChild);
 }else{
-_23e.appendChild(node);
+_236.appendChild(node);
 }
 return true;
 };
-dojo.dom.insertBefore=function(node,ref,_241){
-if((_241!=true)&&(node===ref||node.nextSibling===ref)){
+dojo.dom.insertBefore=function(node,ref,_239){
+if((_239!=true)&&(node===ref||node.nextSibling===ref)){
 return false;
 }
-var _242=ref.parentNode;
-_242.insertBefore(node,ref);
+var _23a=ref.parentNode;
+_23a.insertBefore(node,ref);
 return true;
 };
-dojo.dom.insertAfter=function(node,ref,_245){
+dojo.dom.insertAfter=function(node,ref,_23d){
 var pn=ref.parentNode;
 if(ref==pn.lastChild){
-if((_245!=true)&&(node===ref)){
+if((_23d!=true)&&(node===ref)){
 return false;
 }
 pn.appendChild(node);
 }else{
-return this.insertBefore(node,ref.nextSibling,_245);
+return this.insertBefore(node,ref.nextSibling,_23d);
 }
 return true;
 };
-dojo.dom.insertAtPosition=function(node,ref,_249){
-if((!node)||(!ref)||(!_249)){
+dojo.dom.insertAtPosition=function(node,ref,_241){
+if((!node)||(!ref)||(!_241)){
 return false;
 }
-switch(_249.toLowerCase()){
+switch(_241.toLowerCase()){
 case "before":
 return dojo.dom.insertBefore(node,ref);
 case "after":
@@ -56373,46 +36440,46 @@
 return true;
 }
 };
-dojo.dom.insertAtIndex=function(node,_24b,_24c){
-var _24d=_24b.childNodes;
-if(!_24d.length||_24d.length==_24c){
-_24b.appendChild(node);
+dojo.dom.insertAtIndex=function(node,_243,_244){
+var _245=_243.childNodes;
+if(!_245.length||_245.length==_244){
+_243.appendChild(node);
 return true;
 }
-if(_24c==0){
-return dojo.dom.prependChild(node,_24b);
+if(_244==0){
+return dojo.dom.prependChild(node,_243);
 }
-return dojo.dom.insertAfter(node,_24d[_24c-1]);
+return dojo.dom.insertAfter(node,_245[_244-1]);
 };
 dojo.dom.textContent=function(node,text){
 if(arguments.length>1){
-var _250=dojo.doc();
-dojo.dom.replaceChildren(node,_250.createTextNode(text));
+var _248=dojo.doc();
+dojo.dom.replaceChildren(node,_248.createTextNode(text));
 return text;
 }else{
 if(node.textContent!=undefined){
 return node.textContent;
 }
-var _251="";
+var _249="";
 if(node==null){
-return _251;
+return _249;
 }
 for(var i=0;i<node.childNodes.length;i++){
 switch(node.childNodes[i].nodeType){
 case 1:
 case 5:
-_251+=dojo.dom.textContent(node.childNodes[i]);
+_249+=dojo.dom.textContent(node.childNodes[i]);
 break;
 case 3:
 case 2:
 case 4:
-_251+=node.childNodes[i].nodeValue;
+_249+=node.childNodes[i].nodeValue;
 break;
 default:
 break;
 }
 }
-return _251;
+return _249;
 }
 };
 dojo.dom.hasParent=function(node){
@@ -56428,23 +36495,23 @@
 }
 return "";
 };
-dojo.dom.setAttributeNS=function(elem,_257,_258,_259){
+dojo.dom.setAttributeNS=function(elem,_24f,_250,_251){
 if(elem==null||((elem==undefined)&&(typeof elem=="undefined"))){
 dojo.raise("No element given to dojo.dom.setAttributeNS");
 }
 if(!((elem.setAttributeNS==undefined)&&(typeof elem.setAttributeNS=="undefined"))){
-elem.setAttributeNS(_257,_258,_259);
+elem.setAttributeNS(_24f,_250,_251);
 }else{
-var _25a=elem.ownerDocument;
-var _25b=_25a.createNode(2,_258,_257);
-_25b.nodeValue=_259;
-elem.setAttributeNode(_25b);
+var _252=elem.ownerDocument;
+var _253=_252.createNode(2,_250,_24f);
+_253.nodeValue=_251;
+elem.setAttributeNode(_253);
 }
 };
 dojo.provide("dojo.undo.browser");
 try{
 if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
+document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
 }
 }
 catch(e){
@@ -56459,6 +36526,9 @@
 var hash=null;
 var url=null;
 if(!this.historyIframe){
+if(djConfig["useXDomain"]&&!djConfig["dojoIframeHistoryUrl"]){
+dojo.debug("dojo.undo.browser: When using cross-domain Dojo builds,"+" please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"+" to the path on your domain to iframe_history.html");
+}
 this.historyIframe=window.frames["djhistory"];
 }
 if(!this.bookmarkAnchor){
@@ -56482,12 +36552,12 @@
 this.bookmarkAnchor.href=hash;
 if(dojo.render.html.ie){
 url=this._loadIframeHistory();
-var _260=args["back"]||args["backButton"]||args["handle"];
-var tcb=function(_262){
+var _258=args["back"]||args["backButton"]||args["handle"];
+var tcb=function(_25a){
 if(window.location.hash!=""){
 setTimeout("window.location.href = '"+hash+"';",1);
 }
-_260.apply(this,[_262]);
+_258.apply(this,[_25a]);
 };
 if(args["back"]){
 args.back=tcb;
@@ -56500,13 +36570,13 @@
 }
 }
 }
-var _263=args["forward"]||args["forwardButton"]||args["handle"];
-var tfw=function(_265){
+var _25b=args["forward"]||args["forwardButton"]||args["handle"];
+var tfw=function(_25d){
 if(window.location.hash!=""){
 window.location.href=hash;
 }
-if(_263){
-_263.apply(this,[_265]);
+if(_25b){
+_25b.apply(this,[_25d]);
 }
 };
 if(args["forward"]){
@@ -56551,10 +36621,10 @@
 }
 }
 }
-},iframeLoaded:function(evt,_268){
+},iframeLoaded:function(evt,_260){
 if(!dojo.render.html.opera){
-var _269=this._getUrlQuery(_268.href);
-if(_269==null){
+var _261=this._getUrlQuery(_260.href);
+if(_261==null){
 if(this.historyStack.length==1){
 this.handleBackButton();
 }
@@ -56564,17 +36634,17 @@
 this.moveForward=false;
 return;
 }
-if(this.historyStack.length>=2&&_269==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
+if(this.historyStack.length>=2&&_261==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
 this.handleBackButton();
 }else{
-if(this.forwardStack.length>0&&_269==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
+if(this.forwardStack.length>0&&_261==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
 this.handleForwardButton();
 }
 }
 }
 },handleBackButton:function(){
-var _26a=this.historyStack.pop();
-if(!_26a){
+var _262=this.historyStack.pop();
+if(!_262){
 return;
 }
 var last=this.historyStack[this.historyStack.length-1];
@@ -56594,7 +36664,7 @@
 }
 }
 }
-this.forwardStack.push(_26a);
+this.forwardStack.push(_262);
 },handleForwardButton:function(){
 var last=this.forwardStack.pop();
 if(!last){
@@ -56615,14 +36685,14 @@
 },_createState:function(url,args,hash){
 return {"url":url,"kwArgs":args,"urlHash":hash};
 },_getUrlQuery:function(url){
-var _271=url.split("?");
-if(_271.length<2){
+var _269=url.split("?");
+if(_269.length<2){
 return null;
 }else{
-return _271[1];
+return _269[1];
 }
 },_loadIframeHistory:function(){
-var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
+var url=(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"?"+(new Date()).getTime();
 this.moveForward=true;
 dojo.io.setIFrameSrc(this.historyIframe,url,false);
 return url;
@@ -56630,26 +36700,26 @@
 dojo.provide("dojo.io.BrowserIO");
 if(!dj_undef("window")){
 dojo.io.checkChildrenForFile=function(node){
-var _274=false;
-var _275=node.getElementsByTagName("input");
-dojo.lang.forEach(_275,function(_276){
-if(_274){
+var _26c=false;
+var _26d=node.getElementsByTagName("input");
+dojo.lang.forEach(_26d,function(_26e){
+if(_26c){
 return;
 }
-if(_276.getAttribute("type")=="file"){
-_274=true;
+if(_26e.getAttribute("type")=="file"){
+_26c=true;
 }
 });
-return _274;
+return _26c;
 };
-dojo.io.formHasFile=function(_277){
-return dojo.io.checkChildrenForFile(_277);
+dojo.io.formHasFile=function(_26f){
+return dojo.io.checkChildrenForFile(_26f);
 };
-dojo.io.updateNode=function(node,_279){
+dojo.io.updateNode=function(node,_271){
 node=dojo.byId(node);
-var args=_279;
-if(dojo.lang.isString(_279)){
-args={url:_279};
+var args=_271;
+if(dojo.lang.isString(_271)){
+args={url:_271};
 }
 args.mimetype="text/html";
 args.load=function(t,d,e){
@@ -56664,18 +36734,18 @@
 var type=(node.type||"").toLowerCase();
 return !node.disabled&&node.name&&!dojo.lang.inArray(["file","submit","image","reset","button"],type);
 };
-dojo.io.encodeForm=function(_280,_281,_282){
-if((!_280)||(!_280.tagName)||(!_280.tagName.toLowerCase()=="form")){
+dojo.io.encodeForm=function(_278,_279,_27a){
+if((!_278)||(!_278.tagName)||(!_278.tagName.toLowerCase()=="form")){
 dojo.raise("Attempted to encode a non-form element.");
 }
-if(!_282){
-_282=dojo.io.formFilter;
+if(!_27a){
+_27a=dojo.io.formFilter;
 }
-var enc=/utf/i.test(_281||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _284=[];
-for(var i=0;i<_280.elements.length;i++){
-var elm=_280.elements[i];
-if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_282(elm)){
+var enc=/utf/i.test(_279||"")?encodeURIComponent:dojo.string.encodeAscii;
+var _27c=[];
+for(var i=0;i<_278.elements.length;i++){
+var elm=_278.elements[i];
+if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_27a(elm)){
 continue;
 }
 var name=enc(elm.name);
@@ -56683,30 +36753,30 @@
 if(type=="select-multiple"){
 for(var j=0;j<elm.options.length;j++){
 if(elm.options[j].selected){
-_284.push(name+"="+enc(elm.options[j].value));
+_27c.push(name+"="+enc(elm.options[j].value));
 }
 }
 }else{
 if(dojo.lang.inArray(["radio","checkbox"],type)){
 if(elm.checked){
-_284.push(name+"="+enc(elm.value));
+_27c.push(name+"="+enc(elm.value));
 }
 }else{
-_284.push(name+"="+enc(elm.value));
+_27c.push(name+"="+enc(elm.value));
 }
 }
 }
-var _28a=_280.getElementsByTagName("input");
-for(var i=0;i<_28a.length;i++){
-var _28b=_28a[i];
-if(_28b.type.toLowerCase()=="image"&&_28b.form==_280&&_282(_28b)){
-var name=enc(_28b.name);
-_284.push(name+"="+enc(_28b.value));
-_284.push(name+".x=0");
-_284.push(name+".y=0");
+var _282=_278.getElementsByTagName("input");
+for(var i=0;i<_282.length;i++){
+var _283=_282[i];
+if(_283.type.toLowerCase()=="image"&&_283.form==_278&&_27a(_283)){
+var name=enc(_283.name);
+_27c.push(name+"="+enc(_283.value));
+_27c.push(name+".x=0");
+_27c.push(name+".y=0");
 }
 }
-return _284.join("&")+"&";
+return _27c.join("&")+"&";
 };
 dojo.io.FormBind=function(args){
 this.bindArgs={};
@@ -56740,11 +36810,11 @@
 this.connect(node,"onclick","click");
 }
 }
-var _291=form.getElementsByTagName("input");
-for(var i=0;i<_291.length;i++){
-var _292=_291[i];
-if(_292.type.toLowerCase()=="image"&&_292.form==form){
-this.connect(_292,"onclick","click");
+var _289=form.getElementsByTagName("input");
+for(var i=0;i<_289.length;i++){
+var _28a=_289[i];
+if(_28a.type.toLowerCase()=="image"&&_28a.form==form){
+this.connect(_28a,"onclick","click");
 }
 }
 },onSubmit:function(form){
@@ -56762,26 +36832,26 @@
 this.clickedButton=node;
 },formFilter:function(node){
 var type=(node.type||"").toLowerCase();
-var _299=false;
+var _291=false;
 if(node.disabled||!node.name){
-_299=false;
+_291=false;
 }else{
 if(dojo.lang.inArray(["submit","button","image"],type)){
 if(!this.clickedButton){
 this.clickedButton=node;
 }
-_299=node==this.clickedButton;
+_291=node==this.clickedButton;
 }else{
-_299=!dojo.lang.inArray(["file","submit","reset","button"],type);
+_291=!dojo.lang.inArray(["file","submit","reset","button"],type);
 }
 }
-return _299;
-},connect:function(_29a,_29b,_29c){
+return _291;
+},connect:function(_292,_293,_294){
 if(dojo.evalObjPath("dojo.event.connect")){
-dojo.event.connect(_29a,_29b,this,_29c);
+dojo.event.connect(_292,_293,this,_294);
 }else{
-var fcn=dojo.lang.hitch(this,_29c);
-_29a[_29b]=function(e){
+var fcn=dojo.lang.hitch(this,_294);
+_292[_293]=function(e){
 if(!e){
 e=window.event;
 }
@@ -56798,40 +36868,40 @@
 }
 }});
 dojo.io.XMLHTTPTransport=new function(){
-var _29f=this;
-var _2a0={};
+var _297=this;
+var _298={};
 this.useCache=false;
 this.preventCache=false;
-function getCacheKey(url,_2a2,_2a3){
-return url+"|"+_2a2+"|"+_2a3.toLowerCase();
+function getCacheKey(url,_29a,_29b){
+return url+"|"+_29a+"|"+_29b.toLowerCase();
 }
-function addToCache(url,_2a5,_2a6,http){
-_2a0[getCacheKey(url,_2a5,_2a6)]=http;
+function addToCache(url,_29d,_29e,http){
+_298[getCacheKey(url,_29d,_29e)]=http;
 }
-function getFromCache(url,_2a9,_2aa){
-return _2a0[getCacheKey(url,_2a9,_2aa)];
+function getFromCache(url,_2a1,_2a2){
+return _298[getCacheKey(url,_2a1,_2a2)];
 }
 this.clearCache=function(){
-_2a0={};
+_298={};
 };
-function doLoad(_2ab,http,url,_2ae,_2af){
+function doLoad(_2a3,http,url,_2a6,_2a7){
 if(((http.status>=200)&&(http.status<300))||(http.status==304)||(location.protocol=="file:"&&(http.status==0||http.status==undefined))||(location.protocol=="chrome:"&&(http.status==0||http.status==undefined))){
 var ret;
-if(_2ab.method.toLowerCase()=="head"){
-var _2b1=http.getAllResponseHeaders();
+if(_2a3.method.toLowerCase()=="head"){
+var _2a9=http.getAllResponseHeaders();
 ret={};
 ret.toString=function(){
-return _2b1;
+return _2a9;
 };
-var _2b2=_2b1.split(/[\r\n]+/g);
-for(var i=0;i<_2b2.length;i++){
-var pair=_2b2[i].match(/^([^:]+)\s*:\s*(.+)$/i);
+var _2aa=_2a9.split(/[\r\n]+/g);
+for(var i=0;i<_2aa.length;i++){
+var pair=_2aa[i].match(/^([^:]+)\s*:\s*(.+)$/i);
 if(pair){
 ret[pair[1]]=pair[2];
 }
 }
 }else{
-if(_2ab.mimetype=="text/javascript"){
+if(_2a3.mimetype=="text/javascript"){
 try{
 ret=dj_eval(http.responseText);
 }
@@ -56841,7 +36911,7 @@
 ret=null;
 }
 }else{
-if(_2ab.mimetype=="text/json"||_2ab.mimetype=="application/json"){
+if(_2a3.mimetype=="text/json"||_2a3.mimetype=="application/json"){
 try{
 ret=dj_eval("("+http.responseText+")");
 }
@@ -56851,7 +36921,7 @@
 ret=false;
 }
 }else{
-if((_2ab.mimetype=="application/xml")||(_2ab.mimetype=="text/xml")){
+if((_2a3.mimetype=="application/xml")||(_2a3.mimetype=="text/xml")){
 ret=http.responseXML;
 if(!ret||typeof ret=="string"||!http.getResponseHeader("Content-Type")){
 ret=dojo.dom.createDocumentFromText(http.responseText);
@@ -56862,22 +36932,22 @@
 }
 }
 }
-if(_2af){
-addToCache(url,_2ae,_2ab.method,http);
+if(_2a7){
+addToCache(url,_2a6,_2a3.method,http);
 }
-_2ab[(typeof _2ab.load=="function")?"load":"handle"]("load",ret,http,_2ab);
+_2a3[(typeof _2a3.load=="function")?"load":"handle"]("load",ret,http,_2a3);
 }else{
-var _2b5=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-_2ab[(typeof _2ab.error=="function")?"error":"handle"]("error",_2b5,http,_2ab);
+var _2ad=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
+_2a3[(typeof _2a3.error=="function")?"error":"handle"]("error",_2ad,http,_2a3);
 }
 }
-function setHeaders(http,_2b7){
-if(_2b7["headers"]){
-for(var _2b8 in _2b7["headers"]){
-if(_2b8.toLowerCase()=="content-type"&&!_2b7["contentType"]){
-_2b7["contentType"]=_2b7["headers"][_2b8];
+function setHeaders(http,_2af){
+if(_2af["headers"]){
+for(var _2b0 in _2af["headers"]){
+if(_2b0.toLowerCase()=="content-type"&&!_2af["contentType"]){
+_2af["contentType"]=_2af["headers"][_2b0];
 }else{
-http.setRequestHeader(_2b8,_2b7["headers"][_2b8]);
+http.setRequestHeader(_2b0,_2af["headers"][_2b0]);
 }
 }
 }
@@ -56891,7 +36961,7 @@
 };
 this.watchInFlight=function(){
 var now=null;
-if(!dojo.hostenv._blockAsync&&!_29f._blockAsync){
+if(!dojo.hostenv._blockAsync&&!_297._blockAsync){
 for(var x=this.inFlight.length-1;x>=0;x--){
 try{
 var tif=this.inFlight[x];
@@ -56919,8 +36989,8 @@
 }
 catch(e){
 try{
-var _2bc=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
-tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_2bc,tif.http,tif.req);
+var _2b4=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
+tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_2b4,tif.http,tif.req);
 }
 catch(e2){
 dojo.debug("XMLHttpTransport error callback failed: "+e2);
@@ -56935,74 +37005,74 @@
 }
 this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
 };
-var _2bd=dojo.hostenv.getXmlhttpObject()?true:false;
-this.canHandle=function(_2be){
-return _2bd&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_2be["mimetype"].toLowerCase()||""))&&!(_2be["formNode"]&&dojo.io.formHasFile(_2be["formNode"]));
+var _2b5=dojo.hostenv.getXmlhttpObject()?true:false;
+this.canHandle=function(_2b6){
+return _2b5&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_2b6["mimetype"].toLowerCase()||""))&&!(_2b6["formNode"]&&dojo.io.formHasFile(_2b6["formNode"]));
 };
 this.multipartBoundary="45309FFF-BD65-4d50-99C9-36986896A96F";
-this.bind=function(_2bf){
-if(!_2bf["url"]){
-if(!_2bf["formNode"]&&(_2bf["backButton"]||_2bf["back"]||_2bf["changeUrl"]||_2bf["watchForURL"])&&(!djConfig.preventBackButtonFix)){
+this.bind=function(_2b7){
+if(!_2b7["url"]){
+if(!_2b7["formNode"]&&(_2b7["backButton"]||_2b7["back"]||_2b7["changeUrl"]||_2b7["watchForURL"])&&(!djConfig.preventBackButtonFix)){
 dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request","Use dojo.undo.browser.addToHistory() instead.","0.4");
-dojo.undo.browser.addToHistory(_2bf);
+dojo.undo.browser.addToHistory(_2b7);
 return true;
 }
 }
-var url=_2bf.url;
-var _2c1="";
-if(_2bf["formNode"]){
-var ta=_2bf.formNode.getAttribute("action");
-if((ta)&&(!_2bf["url"])){
+var url=_2b7.url;
+var _2b9="";
+if(_2b7["formNode"]){
+var ta=_2b7.formNode.getAttribute("action");
+if((ta)&&(!_2b7["url"])){
 url=ta;
 }
-var tp=_2bf.formNode.getAttribute("method");
-if((tp)&&(!_2bf["method"])){
-_2bf.method=tp;
+var tp=_2b7.formNode.getAttribute("method");
+if((tp)&&(!_2b7["method"])){
+_2b7.method=tp;
 }
-_2c1+=dojo.io.encodeForm(_2bf.formNode,_2bf.encoding,_2bf["formFilter"]);
+_2b9+=dojo.io.encodeForm(_2b7.formNode,_2b7.encoding,_2b7["formFilter"]);
 }
 if(url.indexOf("#")>-1){
 dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url);
 url=url.split("#")[0];
 }
-if(_2bf["file"]){
-_2bf.method="post";
+if(_2b7["file"]){
+_2b7.method="post";
 }
-if(!_2bf["method"]){
-_2bf.method="get";
+if(!_2b7["method"]){
+_2b7.method="get";
 }
-if(_2bf.method.toLowerCase()=="get"){
-_2bf.multipart=false;
+if(_2b7.method.toLowerCase()=="get"){
+_2b7.multipart=false;
 }else{
-if(_2bf["file"]){
-_2bf.multipart=true;
+if(_2b7["file"]){
+_2b7.multipart=true;
 }else{
-if(!_2bf["multipart"]){
-_2bf.multipart=false;
+if(!_2b7["multipart"]){
+_2b7.multipart=false;
 }
 }
 }
-if(_2bf["backButton"]||_2bf["back"]||_2bf["changeUrl"]){
-dojo.undo.browser.addToHistory(_2bf);
+if(_2b7["backButton"]||_2b7["back"]||_2b7["changeUrl"]){
+dojo.undo.browser.addToHistory(_2b7);
 }
-var _2c4=_2bf["content"]||{};
-if(_2bf.sendTransport){
-_2c4["dojo.transport"]="xmlhttp";
+var _2bc=_2b7["content"]||{};
+if(_2b7.sendTransport){
+_2bc["dojo.transport"]="xmlhttp";
 }
 do{
-if(_2bf.postContent){
-_2c1=_2bf.postContent;
+if(_2b7.postContent){
+_2b9=_2b7.postContent;
 break;
 }
-if(_2c4){
-_2c1+=dojo.io.argsFromMap(_2c4,_2bf.encoding);
+if(_2bc){
+_2b9+=dojo.io.argsFromMap(_2bc,_2b7.encoding);
 }
-if(_2bf.method.toLowerCase()=="get"||!_2bf.multipart){
+if(_2b7.method.toLowerCase()=="get"||!_2b7.multipart){
 break;
 }
 var t=[];
-if(_2c1.length){
-var q=_2c1.split("&");
+if(_2b9.length){
+var q=_2b9.split("&");
 for(var i=0;i<q.length;++i){
 if(q[i].length){
 var p=q[i].split("=");
@@ -57010,71 +37080,71 @@
 }
 }
 }
-if(_2bf.file){
-if(dojo.lang.isArray(_2bf.file)){
-for(var i=0;i<_2bf.file.length;++i){
-var o=_2bf.file[i];
+if(_2b7.file){
+if(dojo.lang.isArray(_2b7.file)){
+for(var i=0;i<_2b7.file.length;++i){
+var o=_2b7.file[i];
 t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
 }
 }else{
-var o=_2bf.file;
+var o=_2b7.file;
 t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
 }
 }
 if(t.length){
 t.push("--"+this.multipartBoundary+"--","");
-_2c1=t.join("\r\n");
+_2b9=t.join("\r\n");
 }
 }while(false);
-var _2ca=_2bf["sync"]?false:true;
-var _2cb=_2bf["preventCache"]||(this.preventCache==true&&_2bf["preventCache"]!=false);
-var _2cc=_2bf["useCache"]==true||(this.useCache==true&&_2bf["useCache"]!=false);
-if(!_2cb&&_2cc){
-var _2cd=getFromCache(url,_2c1,_2bf.method);
-if(_2cd){
-doLoad(_2bf,_2cd,url,_2c1,false);
+var _2c2=_2b7["sync"]?false:true;
+var _2c3=_2b7["preventCache"]||(this.preventCache==true&&_2b7["preventCache"]!=false);
+var _2c4=_2b7["useCache"]==true||(this.useCache==true&&_2b7["useCache"]!=false);
+if(!_2c3&&_2c4){
+var _2c5=getFromCache(url,_2b9,_2b7.method);
+if(_2c5){
+doLoad(_2b7,_2c5,url,_2b9,false);
 return;
 }
 }
-var http=dojo.hostenv.getXmlhttpObject(_2bf);
-var _2cf=false;
-if(_2ca){
-var _2d0=this.inFlight.push({"req":_2bf,"http":http,"url":url,"query":_2c1,"useCache":_2cc,"startTime":_2bf.timeoutSeconds?(new Date()).getTime():0});
+var http=dojo.hostenv.getXmlhttpObject(_2b7);
+var _2c7=false;
+if(_2c2){
+var _2c8=this.inFlight.push({"req":_2b7,"http":http,"url":url,"query":_2b9,"useCache":_2c4,"startTime":_2b7.timeoutSeconds?(new Date()).getTime():0});
 this.startWatchingInFlight();
 }else{
-_29f._blockAsync=true;
+_297._blockAsync=true;
 }
-if(_2bf.method.toLowerCase()=="post"){
-if(!_2bf.user){
-http.open("POST",url,_2ca);
+if(_2b7.method.toLowerCase()=="post"){
+if(!_2b7.user){
+http.open("POST",url,_2c2);
 }else{
-http.open("POST",url,_2ca,_2bf.user,_2bf.password);
+http.open("POST",url,_2c2,_2b7.user,_2b7.password);
 }
-setHeaders(http,_2bf);
-http.setRequestHeader("Content-Type",_2bf.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_2bf.contentType||"application/x-www-form-urlencoded"));
+setHeaders(http,_2b7);
+http.setRequestHeader("Content-Type",_2b7.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_2b7.contentType||"application/x-www-form-urlencoded"));
 try{
-http.send(_2c1);
+http.send(_2b9);
 }
 catch(e){
 if(typeof http.abort=="function"){
 http.abort();
 }
-doLoad(_2bf,{status:404},url,_2c1,_2cc);
+doLoad(_2b7,{status:404},url,_2b9,_2c4);
 }
 }else{
-var _2d1=url;
-if(_2c1!=""){
-_2d1+=(_2d1.indexOf("?")>-1?"&":"?")+_2c1;
+var _2c9=url;
+if(_2b9!=""){
+_2c9+=(_2c9.indexOf("?")>-1?"&":"?")+_2b9;
 }
-if(_2cb){
-_2d1+=(dojo.string.endsWithAny(_2d1,"?","&")?"":(_2d1.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
+if(_2c3){
+_2c9+=(dojo.string.endsWithAny(_2c9,"?","&")?"":(_2c9.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
 }
-if(!_2bf.user){
-http.open(_2bf.method.toUpperCase(),_2d1,_2ca);
+if(!_2b7.user){
+http.open(_2b7.method.toUpperCase(),_2c9,_2c2);
 }else{
-http.open(_2bf.method.toUpperCase(),_2d1,_2ca,_2bf.user,_2bf.password);
+http.open(_2b7.method.toUpperCase(),_2c9,_2c2,_2b7.user,_2b7.password);
 }
-setHeaders(http,_2bf);
+setHeaders(http,_2b7);
 try{
 http.send(null);
 }
@@ -57082,14 +37152,14 @@
 if(typeof http.abort=="function"){
 http.abort();
 }
-doLoad(_2bf,{status:404},url,_2c1,_2cc);
+doLoad(_2b7,{status:404},url,_2b9,_2c4);
 }
 }
-if(!_2ca){
-doLoad(_2bf,http,url,_2c1,_2cc);
-_29f._blockAsync=false;
+if(!_2c2){
+doLoad(_2b7,http,url,_2b9,_2c4);
+_297._blockAsync=false;
 }
-_2bf.abort=function(){
+_2b7.abort=function(){
 try{
 http._aborted=true;
 }
@@ -57103,15 +37173,15 @@
 };
 }
 dojo.provide("dojo.io.cookie");
-dojo.io.cookie.setCookie=function(name,_2d3,days,path,_2d6,_2d7){
-var _2d8=-1;
+dojo.io.cookie.setCookie=function(name,_2cb,days,path,_2ce,_2cf){
+var _2d0=-1;
 if((typeof days=="number")&&(days>=0)){
 var d=new Date();
 d.setTime(d.getTime()+(days*24*60*60*1000));
-_2d8=d.toGMTString();
+_2d0=d.toGMTString();
 }
-_2d3=escape(_2d3);
-document.cookie=name+"="+_2d3+";"+(_2d8!=-1?" expires="+_2d8+";":"")+(path?"path="+path:"")+(_2d6?"; domain="+_2d6:"")+(_2d7?"; secure":"");
+_2cb=escape(_2cb);
+document.cookie=name+"="+_2cb+";"+(_2d0!=-1?" expires="+_2d0+";":"")+(path?"path="+path:"")+(_2ce?"; domain="+_2ce:"")+(_2cf?"; secure":"");
 };
 dojo.io.cookie.set=dojo.io.cookie.setCookie;
 dojo.io.cookie.getCookie=function(name){
@@ -57119,71 +37189,71 @@
 if(idx==-1){
 return null;
 }
-var _2dc=document.cookie.substring(idx+name.length+1);
-var end=_2dc.indexOf(";");
+var _2d4=document.cookie.substring(idx+name.length+1);
+var end=_2d4.indexOf(";");
 if(end==-1){
-end=_2dc.length;
+end=_2d4.length;
 }
-_2dc=_2dc.substring(0,end);
-_2dc=unescape(_2dc);
-return _2dc;
+_2d4=_2d4.substring(0,end);
+_2d4=unescape(_2d4);
+return _2d4;
 };
 dojo.io.cookie.get=dojo.io.cookie.getCookie;
 dojo.io.cookie.deleteCookie=function(name){
 dojo.io.cookie.setCookie(name,"-",0);
 };
-dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_2e3,_2e4,_2e5){
+dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_2db,_2dc,_2dd){
 if(arguments.length==5){
-_2e5=_2e3;
-_2e3=null;
-_2e4=null;
+_2dd=_2db;
+_2db=null;
+_2dc=null;
 }
-var _2e6=[],_2e7,_2e8="";
-if(!_2e5){
-_2e7=dojo.io.cookie.getObjectCookie(name);
+var _2de=[],_2df,_2e0="";
+if(!_2dd){
+_2df=dojo.io.cookie.getObjectCookie(name);
 }
 if(days>=0){
-if(!_2e7){
-_2e7={};
+if(!_2df){
+_2df={};
 }
 for(var prop in obj){
 if(obj[prop]==null){
-delete _2e7[prop];
+delete _2df[prop];
 }else{
 if((typeof obj[prop]=="string")||(typeof obj[prop]=="number")){
-_2e7[prop]=obj[prop];
+_2df[prop]=obj[prop];
 }
 }
 }
 prop=null;
-for(var prop in _2e7){
-_2e6.push(escape(prop)+"="+escape(_2e7[prop]));
+for(var prop in _2df){
+_2de.push(escape(prop)+"="+escape(_2df[prop]));
 }
-_2e8=_2e6.join("&");
+_2e0=_2de.join("&");
 }
-dojo.io.cookie.setCookie(name,_2e8,days,path,_2e3,_2e4);
+dojo.io.cookie.setCookie(name,_2e0,days,path,_2db,_2dc);
 };
 dojo.io.cookie.getObjectCookie=function(name){
-var _2eb=null,_2ec=dojo.io.cookie.getCookie(name);
-if(_2ec){
-_2eb={};
-var _2ed=_2ec.split("&");
-for(var i=0;i<_2ed.length;i++){
-var pair=_2ed[i].split("=");
-var _2f0=pair[1];
-if(isNaN(_2f0)){
-_2f0=unescape(pair[1]);
+var _2e3=null,_2e4=dojo.io.cookie.getCookie(name);
+if(_2e4){
+_2e3={};
+var _2e5=_2e4.split("&");
+for(var i=0;i<_2e5.length;i++){
+var pair=_2e5[i].split("=");
+var _2e8=pair[1];
+if(isNaN(_2e8)){
+_2e8=unescape(pair[1]);
 }
-_2eb[unescape(pair[0])]=_2f0;
+_2e3[unescape(pair[0])]=_2e8;
 }
 }
-return _2eb;
+return _2e3;
 };
 dojo.io.cookie.isSupported=function(){
 if(typeof navigator.cookieEnabled!="boolean"){
 dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__","CookiesAllowed",90,null);
-var _2f1=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
-navigator.cookieEnabled=(_2f1=="CookiesAllowed");
+var _2e9=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
+navigator.cookieEnabled=(_2e9=="CookiesAllowed");
 if(navigator.cookieEnabled){
 this.deleteCookie("__TestingYourBrowserForCookieSupport__");
 }
@@ -57193,13 +37263,14 @@
 if(!dojo.io.cookies){
 dojo.io.cookies=dojo.io.cookie;
 }
+dojo.kwCompoundRequire({common:["dojo.io.common"],rhino:["dojo.io.RhinoIO"],browser:["dojo.io.BrowserIO","dojo.io.cookie"],dashboard:["dojo.io.BrowserIO","dojo.io.cookie"]});
 dojo.provide("dojo.io.*");
 dojo.provide("dojo.event.common");
 dojo.event=new function(){
 this._canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-function interpolateArgs(args,_2f3){
+function interpolateArgs(args,_2eb){
 var dl=dojo.lang;
-var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false};
+var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false,maxCalls:-1};
 switch(args.length){
 case 0:
 return;
@@ -57224,14 +37295,14 @@
 ao.adviceType="after";
 ao.srcObj=args[0];
 ao.srcFunc=args[1];
-var _2f6=dl.nameAnonFunc(args[2],ao.adviceObj,_2f3);
-ao.adviceFunc=_2f6;
+var _2ee=dl.nameAnonFunc(args[2],ao.adviceObj,_2eb);
+ao.adviceFunc=_2ee;
 }else{
 if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
 ao.adviceType="after";
 ao.srcObj=dj_global;
-var _2f6=dl.nameAnonFunc(args[0],ao.srcObj,_2f3);
-ao.srcFunc=_2f6;
+var _2ee=dl.nameAnonFunc(args[0],ao.srcObj,_2eb);
+ao.srcFunc=_2ee;
 ao.adviceObj=args[1];
 ao.adviceFunc=args[2];
 }
@@ -57257,17 +37328,17 @@
 if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
 ao.adviceType=args[0];
 ao.srcObj=dj_global;
-var _2f6=dl.nameAnonFunc(args[1],dj_global,_2f3);
-ao.srcFunc=_2f6;
+var _2ee=dl.nameAnonFunc(args[1],dj_global,_2eb);
+ao.srcFunc=_2ee;
 ao.adviceObj=args[2];
 ao.adviceFunc=args[3];
 }else{
 if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
 ao.srcObj=args[1];
 ao.srcFunc=args[2];
-var _2f6=dl.nameAnonFunc(args[3],dj_global,_2f3);
+var _2ee=dl.nameAnonFunc(args[3],dj_global,_2eb);
 ao.adviceObj=dj_global;
-ao.adviceFunc=_2f6;
+ao.adviceFunc=_2ee;
 }else{
 if(dl.isObject(args[1])){
 ao.srcObj=args[1];
@@ -57311,11 +37382,12 @@
 ao.delay=args[8];
 ao.rate=args[9];
 ao.adviceMsg=args[10];
+ao.maxCalls=(!isNaN(parseInt(args[11])))?args[11]:-1;
 break;
 }
 if(dl.isFunction(ao.aroundFunc)){
-var _2f6=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_2f3);
-ao.aroundFunc=_2f6;
+var _2ee=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_2eb);
+ao.aroundFunc=_2ee;
 }
 if(dl.isFunction(ao.srcFunc)){
 ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc);
@@ -57344,25 +37416,18 @@
 }else{
 var ao=interpolateArgs(arguments,true);
 }
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.connect(ao);
-}
-ao.srcFunc="onkeypress";
-}
 if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){
-var _2f8={};
+var _2f0={};
 for(var x in ao){
-_2f8[x]=ao[x];
+_2f0[x]=ao[x];
 }
 var mjps=[];
 dojo.lang.forEach(ao.srcObj,function(src){
 if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
 src=dojo.byId(src);
 }
-_2f8.srcObj=src;
-mjps.push(dojo.event.connect.call(dojo.event,_2f8));
+_2f0.srcObj=src;
+mjps.push(dojo.event.connect.call(dojo.event,_2f0));
 });
 return mjps;
 }
@@ -57374,20 +37439,20 @@
 return mjp;
 };
 this.log=function(a1,a2){
-var _300;
+var _2f8;
 if((arguments.length==1)&&(typeof a1=="object")){
-_300=a1;
+_2f8=a1;
 }else{
-_300={srcObj:a1,srcFunc:a2};
+_2f8={srcObj:a1,srcFunc:a2};
 }
-_300.adviceFunc=function(){
-var _301=[];
+_2f8.adviceFunc=function(){
+var _2f9=[];
 for(var x=0;x<arguments.length;x++){
-_301.push(arguments[x]);
+_2f9.push(arguments[x]);
 }
-dojo.debug("("+_300.srcObj+")."+_300.srcFunc,":",_301.join(", "));
+dojo.debug("("+_2f8.srcObj+")."+_2f8.srcFunc,":",_2f9.join(", "));
 };
-this.kwConnect(_300);
+this.kwConnect(_2f8);
 };
 this.connectBefore=function(){
 var args=["before"];
@@ -57408,25 +37473,30 @@
 ao.once=true;
 return this.connect(ao);
 };
-this._kwConnectImpl=function(_308,_309){
-var fn=(_309)?"disconnect":"connect";
-if(typeof _308["srcFunc"]=="function"){
-_308.srcObj=_308["srcObj"]||dj_global;
-var _30b=dojo.lang.nameAnonFunc(_308.srcFunc,_308.srcObj,true);
-_308.srcFunc=_30b;
+this.connectRunOnce=function(){
+var ao=interpolateArgs(arguments,true);
+ao.maxCalls=1;
+return this.connect(ao);
+};
+this._kwConnectImpl=function(_301,_302){
+var fn=(_302)?"disconnect":"connect";
+if(typeof _301["srcFunc"]=="function"){
+_301.srcObj=_301["srcObj"]||dj_global;
+var _304=dojo.lang.nameAnonFunc(_301.srcFunc,_301.srcObj,true);
+_301.srcFunc=_304;
 }
-if(typeof _308["adviceFunc"]=="function"){
-_308.adviceObj=_308["adviceObj"]||dj_global;
-var _30b=dojo.lang.nameAnonFunc(_308.adviceFunc,_308.adviceObj,true);
-_308.adviceFunc=_30b;
+if(typeof _301["adviceFunc"]=="function"){
+_301.adviceObj=_301["adviceObj"]||dj_global;
+var _304=dojo.lang.nameAnonFunc(_301.adviceFunc,_301.adviceObj,true);
+_301.adviceFunc=_304;
 }
-_308.srcObj=_308["srcObj"]||dj_global;
-_308.adviceObj=_308["adviceObj"]||_308["targetObj"]||dj_global;
-_308.adviceFunc=_308["adviceFunc"]||_308["targetFunc"];
-return dojo.event[fn](_308);
+_301.srcObj=_301["srcObj"]||dj_global;
+_301.adviceObj=_301["adviceObj"]||_301["targetObj"]||dj_global;
+_301.adviceFunc=_301["adviceFunc"]||_301["targetFunc"];
+return dojo.event[fn](_301);
 };
-this.kwConnect=function(_30c){
-return this._kwConnectImpl(_30c,false);
+this.kwConnect=function(_305){
+return this._kwConnectImpl(_305,false);
 };
 this.disconnect=function(){
 if(arguments.length==1){
@@ -57451,12 +37521,12 @@
 mjp.removeAdvice(ao.adviceObj,ao.adviceFunc,ao.adviceType,ao.once);
 return mjp;
 };
-this.kwDisconnect=function(_30f){
-return this._kwConnectImpl(_30f,true);
+this.kwDisconnect=function(_308){
+return this._kwConnectImpl(_308,true);
 };
 };
-dojo.event.MethodInvocation=function(_310,obj,args){
-this.jp_=_310;
+dojo.event.MethodInvocation=function(_309,obj,args){
+this.jp_=_309;
 this.object=obj;
 this.args=[];
 for(var x=0;x<args.length;x++){
@@ -57475,44 +37545,50 @@
 return mobj[meth].call(mobj,this);
 }
 };
-dojo.event.MethodJoinPoint=function(obj,_318){
+dojo.event.MethodJoinPoint=function(obj,_311){
 this.object=obj||dj_global;
-this.methodname=_318;
-this.methodfunc=this.object[_318];
+this.methodname=_311;
+this.methodfunc=this.object[_311];
 this.squelch=false;
 };
-dojo.event.MethodJoinPoint.getForMethod=function(obj,_31a){
+dojo.event.MethodJoinPoint.getForMethod=function(obj,_313){
 if(!obj){
 obj=dj_global;
 }
-if(!obj[_31a]){
-obj[_31a]=function(){
+var ofn=obj[_313];
+if(!ofn){
+ofn=obj[_313]=function(){
 };
-if(!obj[_31a]){
-dojo.raise("Cannot set do-nothing method on that object "+_31a);
+if(!obj[_313]){
+dojo.raise("Cannot set do-nothing method on that object "+_313);
 }
 }else{
-if((!dojo.lang.isFunction(obj[_31a]))&&(!dojo.lang.isAlien(obj[_31a]))){
+if((typeof ofn!="function")&&(!dojo.lang.isFunction(ofn))&&(!dojo.lang.isAlien(ofn))){
 return null;
 }
 }
-var _31b=_31a+"$joinpoint";
-var _31c=_31a+"$joinpoint$method";
-var _31d=obj[_31b];
-if(!_31d){
-var _31e=false;
+var _315=_313+"$joinpoint";
+var _316=_313+"$joinpoint$method";
+var _317=obj[_315];
+if(!_317){
+var _318=false;
 if(dojo.event["browser"]){
 if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){
-_31e=true;
-dojo.event.browser.addClobberNodeAttrs(obj,[_31b,_31c,_31a]);
+_318=true;
+dojo.event.browser.addClobberNodeAttrs(obj,[_315,_316,_313]);
 }
 }
-var _31f=obj[_31a].length;
-obj[_31c]=obj[_31a];
-_31d=obj[_31b]=new dojo.event.MethodJoinPoint(obj,_31c);
-obj[_31a]=function(){
+var _319=ofn.length;
+obj[_316]=ofn;
+_317=obj[_315]=new dojo.event.MethodJoinPoint(obj,_316);
+if(!_318){
+obj[_313]=function(){
+return _317.run.apply(_317,arguments);
+};
+}else{
+obj[_313]=function(){
 var args=[];
-if((_31e)&&(!arguments.length)){
+if(!arguments.length){
 var evt=null;
 try{
 if(obj.ownerDocument){
@@ -57537,20 +37613,21 @@
 }
 }else{
 for(var x=0;x<arguments.length;x++){
-if((x==0)&&(_31e)&&(dojo.event.browser.isEvent(arguments[x]))){
+if((x==0)&&(dojo.event.browser.isEvent(arguments[x]))){
 args.push(dojo.event.browser.fixEvent(arguments[x],this));
 }else{
 args.push(arguments[x]);
 }
 }
 }
-return _31d.run.apply(_31d,args);
+return _317.run.apply(_317,args);
 };
-obj[_31a].__preJoinArity=_31f;
 }
-return _31d;
+obj[_313].__preJoinArity=_319;
+}
+return _317;
 };
-dojo.lang.extend(dojo.event.MethodJoinPoint,{unintercept:function(){
+dojo.lang.extend(dojo.event.MethodJoinPoint,{squelch:false,unintercept:function(){
 this.object[this.methodname]=this.methodfunc;
 this.before=[];
 this.after=[];
@@ -57558,34 +37635,41 @@
 },disconnect:dojo.lang.forward("unintercept"),run:function(){
 var obj=this.object||dj_global;
 var args=arguments;
-var _325=[];
+var _31f=[];
 for(var x=0;x<args.length;x++){
-_325[x]=args[x];
+_31f[x]=args[x];
 }
-var _327=function(marr){
+var _321=function(marr){
 if(!marr){
 dojo.debug("Null argument to unrollAdvice()");
 return;
 }
-var _329=marr[0]||dj_global;
-var _32a=marr[1];
-if(!_329[_32a]){
-dojo.raise("function \""+_32a+"\" does not exist on \""+_329+"\"");
+var _323=marr[0]||dj_global;
+var _324=marr[1];
+if(!_323[_324]){
+dojo.raise("function \""+_324+"\" does not exist on \""+_323+"\"");
 }
-var _32b=marr[2]||dj_global;
-var _32c=marr[3];
+var _325=marr[2]||dj_global;
+var _326=marr[3];
 var msg=marr[6];
-var _32e;
+var _328=marr[7];
+if(_328>-1){
+if(_328==0){
+return;
+}
+marr[7]--;
+}
+var _329;
 var to={args:[],jp_:this,object:obj,proceed:function(){
-return _329[_32a].apply(_329,to.args);
+return _323[_324].apply(_323,to.args);
 }};
-to.args=_325;
-var _330=parseInt(marr[4]);
-var _331=((!isNaN(_330))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
+to.args=_31f;
+var _32b=parseInt(marr[4]);
+var _32c=((!isNaN(_32b))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
 if(marr[5]){
 var rate=parseInt(marr[5]);
 var cur=new Date();
-var _334=false;
+var _32f=false;
 if((marr["last"])&&((cur-marr.last)<=rate)){
 if(dojo.event._canTimeout){
 if(marr["delayTimer"]){
@@ -57595,7 +37679,7 @@
 var mcpy=dojo.lang.shallowCopy(marr);
 marr.delayTimer=setTimeout(function(){
 mcpy[5]=0;
-_327(mcpy);
+_321(mcpy);
 },tod);
 }
 return;
@@ -57603,49 +37687,49 @@
 marr.last=cur;
 }
 }
-if(_32c){
-_32b[_32c].call(_32b,to);
+if(_326){
+_325[_326].call(_325,to);
 }else{
-if((_331)&&((dojo.render.html)||(dojo.render.svg))){
+if((_32c)&&((dojo.render.html)||(dojo.render.svg))){
 dj_global["setTimeout"](function(){
 if(msg){
-_329[_32a].call(_329,to);
+_323[_324].call(_323,to);
 }else{
-_329[_32a].apply(_329,args);
+_323[_324].apply(_323,args);
 }
-},_330);
+},_32b);
 }else{
 if(msg){
-_329[_32a].call(_329,to);
+_323[_324].call(_323,to);
 }else{
-_329[_32a].apply(_329,args);
+_323[_324].apply(_323,args);
 }
 }
 }
 };
-var _337=function(){
+var _332=function(){
 if(this.squelch){
 try{
-return _327.apply(this,arguments);
+return _321.apply(this,arguments);
 }
 catch(e){
 dojo.debug(e);
 }
 }else{
-return _327.apply(this,arguments);
+return _321.apply(this,arguments);
 }
 };
 if((this["before"])&&(this.before.length>0)){
-dojo.lang.forEach(this.before.concat(new Array()),_337);
+dojo.lang.forEach(this.before.concat(new Array()),_332);
 }
-var _338;
+var _333;
 try{
 if((this["around"])&&(this.around.length>0)){
 var mi=new dojo.event.MethodInvocation(this,obj,args);
-_338=mi.proceed();
+_333=mi.proceed();
 }else{
 if(this.methodfunc){
-_338=this.object[this.methodname].apply(this.object,args);
+_333=this.object[this.methodname].apply(this.object,args);
 }
 }
 }
@@ -57656,9 +37740,9 @@
 }
 }
 if((this["after"])&&(this.after.length>0)){
-dojo.lang.forEach(this.after.concat(new Array()),_337);
+dojo.lang.forEach(this.after.concat(new Array()),_332);
 }
-return (this.methodfunc)?_338:null;
+return (this.methodfunc)?_333:null;
 },getArr:function(kind){
 var type="after";
 if((typeof kind=="string")&&(kind.indexOf("before")!=-1)){
@@ -57673,39 +37757,39 @@
 }
 return this[type];
 },kwAddAdvice:function(args){
-this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"]);
-},addAdvice:function(_33d,_33e,_33f,_340,_341,_342,once,_344,rate,_346){
-var arr=this.getArr(_341);
+this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"],args["maxCalls"]);
+},addAdvice:function(_338,_339,_33a,_33b,_33c,_33d,once,_33f,rate,_341,_342){
+var arr=this.getArr(_33c);
 if(!arr){
 dojo.raise("bad this: "+this);
 }
-var ao=[_33d,_33e,_33f,_340,_344,rate,_346];
+var ao=[_338,_339,_33a,_33b,_33f,rate,_341,_342];
 if(once){
-if(this.hasAdvice(_33d,_33e,_341,arr)>=0){
+if(this.hasAdvice(_338,_339,_33c,arr)>=0){
 return;
 }
 }
-if(_342=="first"){
+if(_33d=="first"){
 arr.unshift(ao);
 }else{
 arr.push(ao);
 }
-},hasAdvice:function(_349,_34a,_34b,arr){
+},hasAdvice:function(_345,_346,_347,arr){
 if(!arr){
-arr=this.getArr(_34b);
+arr=this.getArr(_347);
 }
 var ind=-1;
 for(var x=0;x<arr.length;x++){
-var aao=(typeof _34a=="object")?(new String(_34a)).toString():_34a;
+var aao=(typeof _346=="object")?(new String(_346)).toString():_346;
 var a1o=(typeof arr[x][1]=="object")?(new String(arr[x][1])).toString():arr[x][1];
-if((arr[x][0]==_349)&&(a1o==aao)){
+if((arr[x][0]==_345)&&(a1o==aao)){
 ind=x;
 }
 }
 return ind;
-},removeAdvice:function(_351,_352,_353,once){
-var arr=this.getArr(_353);
-var ind=this.hasAdvice(_351,_352,_353,arr);
+},removeAdvice:function(_34d,_34e,_34f,once){
+var arr=this.getArr(_34f);
+var ind=this.hasAdvice(_34d,_34e,_34f,arr);
 if(ind==-1){
 return false;
 }
@@ -57714,73 +37798,73 @@
 if(once){
 break;
 }
-ind=this.hasAdvice(_351,_352,_353,arr);
+ind=this.hasAdvice(_34d,_34e,_34f,arr);
 }
 return true;
 }});
 dojo.provide("dojo.event.topic");
 dojo.event.topic=new function(){
 this.topics={};
-this.getTopic=function(_357){
-if(!this.topics[_357]){
-this.topics[_357]=new this.TopicImpl(_357);
+this.getTopic=function(_353){
+if(!this.topics[_353]){
+this.topics[_353]=new this.TopicImpl(_353);
 }
-return this.topics[_357];
+return this.topics[_353];
 };
-this.registerPublisher=function(_358,obj,_35a){
-var _358=this.getTopic(_358);
-_358.registerPublisher(obj,_35a);
+this.registerPublisher=function(_354,obj,_356){
+var _354=this.getTopic(_354);
+_354.registerPublisher(obj,_356);
 };
-this.subscribe=function(_35b,obj,_35d){
-var _35b=this.getTopic(_35b);
-_35b.subscribe(obj,_35d);
+this.subscribe=function(_357,obj,_359){
+var _357=this.getTopic(_357);
+_357.subscribe(obj,_359);
 };
-this.unsubscribe=function(_35e,obj,_360){
-var _35e=this.getTopic(_35e);
-_35e.unsubscribe(obj,_360);
+this.unsubscribe=function(_35a,obj,_35c){
+var _35a=this.getTopic(_35a);
+_35a.unsubscribe(obj,_35c);
 };
-this.destroy=function(_361){
-this.getTopic(_361).destroy();
-delete this.topics[_361];
+this.destroy=function(_35d){
+this.getTopic(_35d).destroy();
+delete this.topics[_35d];
 };
-this.publishApply=function(_362,args){
-var _362=this.getTopic(_362);
-_362.sendMessage.apply(_362,args);
+this.publishApply=function(_35e,args){
+var _35e=this.getTopic(_35e);
+_35e.sendMessage.apply(_35e,args);
 };
-this.publish=function(_364,_365){
-var _364=this.getTopic(_364);
+this.publish=function(_360,_361){
+var _360=this.getTopic(_360);
 var args=[];
 for(var x=1;x<arguments.length;x++){
 args.push(arguments[x]);
 }
-_364.sendMessage.apply(_364,args);
+_360.sendMessage.apply(_360,args);
 };
 };
-dojo.event.topic.TopicImpl=function(_368){
-this.topicName=_368;
-this.subscribe=function(_369,_36a){
-var tf=_36a||_369;
-var to=(!_36a)?dj_global:_369;
+dojo.event.topic.TopicImpl=function(_364){
+this.topicName=_364;
+this.subscribe=function(_365,_366){
+var tf=_366||_365;
+var to=(!_366)?dj_global:_365;
 return dojo.event.kwConnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
-this.unsubscribe=function(_36d,_36e){
-var tf=(!_36e)?_36d:_36e;
-var to=(!_36e)?null:_36d;
+this.unsubscribe=function(_369,_36a){
+var tf=(!_36a)?_369:_36a;
+var to=(!_36a)?null:_369;
 return dojo.event.kwDisconnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
 this._getJoinPoint=function(){
 return dojo.event.MethodJoinPoint.getForMethod(this,"sendMessage");
 };
-this.setSquelch=function(_371){
-this._getJoinPoint().squelch=_371;
+this.setSquelch=function(_36d){
+this._getJoinPoint().squelch=_36d;
 };
 this.destroy=function(){
 this._getJoinPoint().disconnect();
 };
-this.registerPublisher=function(_372,_373){
-dojo.event.connect(_372,_373,this,"sendMessage");
+this.registerPublisher=function(_36e,_36f){
+dojo.event.connect(_36e,_36f,this,"sendMessage");
 };
-this.sendMessage=function(_374){
+this.sendMessage=function(_370){
 };
 };
 dojo.provide("dojo.event.browser");
@@ -57803,12 +37887,12 @@
 catch(e){
 }
 }
-this.clobber=function(_377){
+this.clobber=function(_373){
 var na;
 var tna;
-if(_377){
-tna=_377.all||_377.getElementsByTagName("*");
-na=[_377];
+if(_373){
+tna=_373.all||_373.getElementsByTagName("*");
+na=[_373];
 for(var x=0;x<tna.length;x++){
 if(tna[x]["__doClobber__"]){
 na.push(tna[x]);
@@ -57823,7 +37907,7 @@
 na=(this.clobberNodes.length)?this.clobberNodes:document.all;
 }
 tna=null;
-var _37b={};
+var _377={};
 for(var i=na.length-1;i>=0;i=i-1){
 var el=na[i];
 try{
@@ -57874,9 +37958,9 @@
 });
 }
 dojo.event.browser=new function(){
-var _380=0;
-this.normalizedEventName=function(_381){
-switch(_381){
+var _37c=0;
+this.normalizedEventName=function(_37d){
+switch(_37d){
 case "CheckboxStateChange":
 case "DOMAttrModified":
 case "DOMMenuItemActive":
@@ -57885,10 +37969,11 @@
 case "DOMNodeInserted":
 case "DOMNodeRemoved":
 case "RadioStateChange":
-return _381;
+return _37d;
 break;
 default:
-return _381.toLowerCase();
+var lcn=_37d.toLowerCase();
+return (lcn.indexOf("on")==0)?lcn.substr(2):lcn;
 break;
 }
 };
@@ -57907,93 +37992,88 @@
 node.__clobberAttrs__=[];
 }
 };
-this.addClobberNodeAttrs=function(node,_385){
+this.addClobberNodeAttrs=function(node,_382){
 if(!dojo.render.html.ie){
 return;
 }
 this.addClobberNode(node);
-for(var x=0;x<_385.length;x++){
-node.__clobberAttrs__.push(_385[x]);
+for(var x=0;x<_382.length;x++){
+node.__clobberAttrs__.push(_382[x]);
 }
 };
-this.removeListener=function(node,_388,fp,_38a){
-if(!_38a){
-var _38a=false;
+this.removeListener=function(node,_385,fp,_387){
+if(!_387){
+var _387=false;
 }
-_388=dojo.event.browser.normalizedEventName(_388);
-if((_388=="onkey")||(_388=="key")){
+_385=dojo.event.browser.normalizedEventName(_385);
+if(_385=="key"){
 if(dojo.render.html.ie){
-this.removeListener(node,"onkeydown",fp,_38a);
+this.removeListener(node,"onkeydown",fp,_387);
 }
-_388="onkeypress";
+_385="keypress";
 }
-if(_388.substr(0,2)=="on"){
-_388=_388.substr(2);
-}
 if(node.removeEventListener){
-node.removeEventListener(_388,fp,_38a);
+node.removeEventListener(_385,fp,_387);
 }
 };
-this.addListener=function(node,_38c,fp,_38e,_38f){
+this.addListener=function(node,_389,fp,_38b,_38c){
 if(!node){
 return;
 }
-if(!_38e){
-var _38e=false;
+if(!_38b){
+var _38b=false;
 }
-_38c=dojo.event.browser.normalizedEventName(_38c);
-if((_38c=="onkey")||(_38c=="key")){
+_389=dojo.event.browser.normalizedEventName(_389);
+if(_389=="key"){
 if(dojo.render.html.ie){
-this.addListener(node,"onkeydown",fp,_38e,_38f);
+this.addListener(node,"onkeydown",fp,_38b,_38c);
 }
-_38c="onkeypress";
+_389="keypress";
 }
-if(_38c.substr(0,2)!="on"){
-_38c="on"+_38c;
-}
-if(!_38f){
-var _390=function(evt){
+if(!_38c){
+var _38d=function(evt){
 if(!evt){
 evt=window.event;
 }
 var ret=fp(dojo.event.browser.fixEvent(evt,this));
-if(_38e){
+if(_38b){
 dojo.event.browser.stopEvent(evt);
 }
 return ret;
 };
 }else{
-_390=fp;
+_38d=fp;
 }
 if(node.addEventListener){
-node.addEventListener(_38c.substr(2),_390,_38e);
-return _390;
+node.addEventListener(_389,_38d,_38b);
+return _38d;
 }else{
-if(typeof node[_38c]=="function"){
-var _393=node[_38c];
-node[_38c]=function(e){
-_393(e);
-return _390(e);
+_389="on"+_389;
+if(typeof node[_389]=="function"){
+var _390=node[_389];
+node[_389]=function(e){
+_390(e);
+return _38d(e);
 };
 }else{
-node[_38c]=_390;
+node[_389]=_38d;
 }
 if(dojo.render.html.ie){
-this.addClobberNodeAttrs(node,[_38c]);
+this.addClobberNodeAttrs(node,[_389]);
 }
-return _390;
+return _38d;
 }
 };
 this.isEvent=function(obj){
 return (typeof obj!="undefined")&&(obj)&&(typeof Event!="undefined")&&(obj.eventPhase);
 };
 this.currentEvent=null;
-this.callListener=function(_396,_397){
-if(typeof _396!="function"){
-dojo.raise("listener not a function: "+_396);
+this.callListener=function(_393,_394){
+if(typeof _393!="function"){
+dojo.raise("listener not a function: "+_393);
 }
-dojo.event.browser.currentEvent.currentTarget=_397;
-return _396.call(_397,dojo.event.browser.currentEvent);
+dojo.event.browser.currentEvent.currentTarget=_394;
+return _393.call(_394,dojo.event.browser.currentEvent);
 };
 this._stopPropagation=function(){
 dojo.event.browser.currentEvent.cancelBubble=true;
@@ -58006,7 +38086,7 @@
 for(var key in this.keys){
 this.revKeys[this.keys[key]]=key;
 }
-this.fixEvent=function(evt,_39a){
+this.fixEvent=function(evt,_397){
 if(!evt){
 if(window["event"]){
 evt=window.event;
@@ -58083,14 +38163,14 @@
 break;
 default:
 if(evt.ctrlKey||evt.altKey){
-var _39c=evt.keyCode;
-if(_39c>=65&&_39c<=90&&evt.shiftKey==false){
-_39c+=32;
+var _399=evt.keyCode;
+if(_399>=65&&_399<=90&&evt.shiftKey==false){
+_399+=32;
 }
-if(_39c>=1&&_39c<=26&&evt.ctrlKey){
-_39c+=96;
+if(_399>=1&&_399<=26&&evt.ctrlKey){
+_399+=96;
 }
-evt.key=String.fromCharCode(_39c);
+evt.key=String.fromCharCode(_399);
 }
 }
 }else{
@@ -58116,11 +38196,11 @@
 evt.key=evt.which;
 break;
 default:
-var _39c=evt.which;
+var _399=evt.which;
 if((evt.ctrlKey||evt.altKey||evt.metaKey)&&(evt.which>=65&&evt.which<=90&&evt.shiftKey==false)){
-_39c+=32;
+_399+=32;
 }
-evt.key=String.fromCharCode(_39c);
+evt.key=String.fromCharCode(_399);
 }
 }
 }
@@ -58225,7 +38305,7 @@
 evt.target=evt.srcElement;
 }
 if(!evt.currentTarget){
-evt.currentTarget=(_39a?_39a:evt.srcElement);
+evt.currentTarget=(_397?_397:evt.srcElement);
 }
 if(!evt.layerX){
 evt.layerX=evt.offsetX;
@@ -58234,12 +38314,12 @@
 evt.layerY=evt.offsetY;
 }
 var doc=(evt.srcElement&&evt.srcElement.ownerDocument)?evt.srcElement.ownerDocument:document;
-var _39e=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
+var _39b=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
 if(!evt.pageX){
-evt.pageX=evt.clientX+(_39e.scrollLeft||0);
+evt.pageX=evt.clientX+(_39b.scrollLeft||0);
 }
 if(!evt.pageY){
-evt.pageY=evt.clientY+(_39e.scrollTop||0);
+evt.pageY=evt.clientY+(_39b.scrollTop||0);
 }
 if(evt.type=="mouseover"){
 evt.relatedTarget=evt.fromElement;
@@ -58264,38 +38344,34 @@
 }
 };
 };
+dojo.kwCompoundRequire({common:["dojo.event.common","dojo.event.topic"],browser:["dojo.event.browser"],dashboard:["dojo.event.browser"]});
 dojo.provide("dojo.event.*");
 
 
 __CPAN_EDITION__ event_and_io build.txt
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/string/common.js,
-../src/string.js,
-../src/lang/common.js,
-../src/lang/extras.js,
-../src/io/common.js,
-../src/lang/array.js,
-../src/lang/func.js,
-../src/string/extras.js,
-../src/dom.js,
-../src/undo/browser.js,
-../src/io/BrowserIO.js,
-../src/io/cookie.js,
-../src/io/__package__.js,
-../src/event/common.js,
-../src/event/topic.js,
-../src/event/browser.js,
+Files baked into this build:
+dojoGuardStart.js
+../src/bootstrap1.js
+../src/loader.js
+dojoGuardEnd.js
+../src/hostenv_browser.js
+../src/string/common.js
+../src/string.js
+../src/lang/common.js
+../src/lang/extras.js
+../src/io/common.js
+../src/lang/array.js
+../src/lang/func.js
+../src/string/extras.js
+../src/dom.js
+../src/undo/browser.js
+../src/io/BrowserIO.js
+../src/io/cookie.js
+../src/io/__package__.js
+../src/event/common.js
+../src/event/topic.js
+../src/event/browser.js
 ../src/event/__package__.js
-
-		
 __CPAN_EDITION__ kitchen_sink dojo.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -58332,7 +38408,7 @@
 return dj_currentContext;
 };
 dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
+dojo.version={major:0,minor:4,patch:2,flag:"",revision:Number("$Rev: 7616 $".match(/[0-9]+/)[0]),toString:function(){
 with(dojo.version){
 return major+"."+minor+"."+patch+flag+" ("+revision+")";
 }
@@ -58588,7 +38664,7 @@
 }
 };
 dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
+if(typeof setTimeout=="object"||(djConfig["useXDomain"]&&dojo.render.html.opera)){
 setTimeout("dojo.hostenv.loaded();",0);
 }else{
 dojo.hostenv.loaded();
@@ -58736,6 +38812,11 @@
 dojo.registerModulePath=function(_66,_67){
 return dojo.hostenv.setModulePrefix(_66,_67);
 };
+if(djConfig["modulePaths"]){
+for(var param in djConfig["modulePaths"]){
+dojo.registerModulePath(param,djConfig["modulePaths"][param]);
+}
+}
 dojo.setModulePrefix=function(_68,_69){
 dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
 return dojo.registerModulePath(_68,_69);
@@ -59146,7 +39227,7 @@
 }
 }
 if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
+if(dojo.render.html.opera||(dojo.render.html.moz&&(djConfig["enableMozDomContentLoaded"]===true))){
 document.addEventListener("DOMContentLoaded",dj_load_init,null);
 }
 window.addEventListener("load",dj_load_init,null);
@@ -59294,118 +39375,76 @@
 return _ec;
 };
 }
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _ee=false;
-var _ef=false;
-var _f0=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_ee=true;
-}else{
-if(typeof this["load"]=="function"){
-_ef=true;
-}else{
-if(window.widget){
-_f0=true;
-}
-}
-}
-var _f1=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-_f1.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_ee)&&(!_f0)){
-_f1.push("browser_debug.js");
-}
-var _f2=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_f2=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<_f1.length;x++){
-var _f4=_f2+"src/"+_f1[x];
-if(_ee||_ef){
-load(_f4);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_f4+"'></scr"+"ipt>");
-}
-catch(e){
-var _f5=document.createElement("script");
-_f5.src=_f4;
-document.getElementsByTagName("head")[0].appendChild(_f5);
-}
-}
-}
-})();
+dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&!djConfig["useXDomain"],"dojo.browser_debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&djConfig["useXDomain"],"dojo.browser_debug_xd");
 dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_f6,_f7){
-if(!dojo.lang.isFunction(_f7)){
-dojo.raise("dojo.inherits: superclass argument ["+_f7+"] must be a function (subclass: ["+_f6+"']");
+dojo.lang.inherits=function(_ee,_ef){
+if(!dojo.lang.isFunction(_ef)){
+dojo.raise("dojo.inherits: superclass argument ["+_ef+"] must be a function (subclass: ["+_ee+"']");
 }
-_f6.prototype=new _f7();
-_f6.prototype.constructor=_f6;
-_f6.superclass=_f7.prototype;
-_f6["super"]=_f7.prototype;
+_ee.prototype=new _ef();
+_ee.prototype.constructor=_ee;
+_ee.superclass=_ef.prototype;
+_ee["super"]=_ef.prototype;
 };
-dojo.lang._mixin=function(obj,_f9){
-var _fa={};
-for(var x in _f9){
-if((typeof _fa[x]=="undefined")||(_fa[x]!=_f9[x])){
-obj[x]=_f9[x];
+dojo.lang._mixin=function(obj,_f1){
+var _f2={};
+for(var x in _f1){
+if((typeof _f2[x]=="undefined")||(_f2[x]!=_f1[x])){
+obj[x]=_f1[x];
 }
 }
-if(dojo.render.html.ie&&(typeof (_f9["toString"])=="function")&&(_f9["toString"]!=obj["toString"])&&(_f9["toString"]!=_fa["toString"])){
-obj.toString=_f9.toString;
+if(dojo.render.html.ie&&(typeof (_f1["toString"])=="function")&&(_f1["toString"]!=obj["toString"])&&(_f1["toString"]!=_f2["toString"])){
+obj.toString=_f1.toString;
 }
 return obj;
 };
-dojo.lang.mixin=function(obj,_fd){
+dojo.lang.mixin=function(obj,_f5){
 for(var i=1,l=arguments.length;i<l;i++){
 dojo.lang._mixin(obj,arguments[i]);
 }
 return obj;
 };
-dojo.lang.extend=function(_100,_101){
+dojo.lang.extend=function(_f8,_f9){
 for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_100.prototype,arguments[i]);
+dojo.lang._mixin(_f8.prototype,arguments[i]);
 }
-return _100;
+return _f8;
 };
 dojo.inherits=dojo.lang.inherits;
 dojo.mixin=dojo.lang.mixin;
 dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_104,_105,_106,_107){
-if(!dojo.lang.isArrayLike(_104)&&dojo.lang.isArrayLike(_105)){
+dojo.lang.find=function(_fc,_fd,_fe,_ff){
+if(!dojo.lang.isArrayLike(_fc)&&dojo.lang.isArrayLike(_fd)){
 dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_104;
-_104=_105;
-_105=temp;
+var temp=_fc;
+_fc=_fd;
+_fd=temp;
 }
-var _109=dojo.lang.isString(_104);
-if(_109){
-_104=_104.split("");
+var _101=dojo.lang.isString(_fc);
+if(_101){
+_fc=_fc.split("");
 }
-if(_107){
+if(_ff){
 var step=-1;
-var i=_104.length-1;
+var i=_fc.length-1;
 var end=-1;
 }else{
 var step=1;
 var i=0;
-var end=_104.length;
+var end=_fc.length;
 }
-if(_106){
+if(_fe){
 while(i!=end){
-if(_104[i]===_105){
+if(_fc[i]===_fd){
 return i;
 }
 i+=step;
 }
 }else{
 while(i!=end){
-if(_104[i]==_105){
+if(_fc[i]==_fd){
 return i;
 }
 i+=step;
@@ -59414,12 +39453,12 @@
 return -1;
 };
 dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_10d,_10e,_10f){
-return dojo.lang.find(_10d,_10e,_10f,true);
+dojo.lang.findLast=function(_105,_106,_107){
+return dojo.lang.find(_105,_106,_107,true);
 };
 dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_110,_111){
-return dojo.lang.find(_110,_111)>-1;
+dojo.lang.inArray=function(_108,_109){
+return dojo.lang.find(_108,_109)>-1;
 };
 dojo.lang.isObject=function(it){
 if(typeof it=="undefined"){
@@ -59511,102 +39550,102 @@
 }
 };
 dojo.dom.getUniqueId=function(){
-var _11d=dojo.doc();
+var _115=dojo.doc();
 do{
 var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_11d.getElementById(id));
+}while(_115.getElementById(id));
 return id;
 };
 dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_11f,_120){
-var node=_11f.firstChild;
+dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_117,_118){
+var node=_117.firstChild;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.nextSibling;
 }
-if(_120&&node&&node.tagName&&node.tagName.toLowerCase()!=_120.toLowerCase()){
-node=dojo.dom.nextElement(node,_120);
+if(_118&&node&&node.tagName&&node.tagName.toLowerCase()!=_118.toLowerCase()){
+node=dojo.dom.nextElement(node,_118);
 }
 return node;
 };
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_122,_123){
-var node=_122.lastChild;
+dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_11a,_11b){
+var node=_11a.lastChild;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.previousSibling;
 }
-if(_123&&node&&node.tagName&&node.tagName.toLowerCase()!=_123.toLowerCase()){
-node=dojo.dom.prevElement(node,_123);
+if(_11b&&node&&node.tagName&&node.tagName.toLowerCase()!=_11b.toLowerCase()){
+node=dojo.dom.prevElement(node,_11b);
 }
 return node;
 };
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_126){
+dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_11e){
 if(!node){
 return null;
 }
 do{
 node=node.nextSibling;
 }while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_126&&_126.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.nextElement(node,_126);
+if(node&&_11e&&_11e.toLowerCase()!=node.tagName.toLowerCase()){
+return dojo.dom.nextElement(node,_11e);
 }
 return node;
 };
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_128){
+dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_120){
 if(!node){
 return null;
 }
-if(_128){
-_128=_128.toLowerCase();
+if(_120){
+_120=_120.toLowerCase();
 }
 do{
 node=node.previousSibling;
 }while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_128&&_128.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_128);
+if(node&&_120&&_120.toLowerCase()!=node.tagName.toLowerCase()){
+return dojo.dom.prevElement(node,_120);
 }
 return node;
 };
-dojo.dom.moveChildren=function(_129,_12a,trim){
-var _12c=0;
+dojo.dom.moveChildren=function(_121,_122,trim){
+var _124=0;
 if(trim){
-while(_129.hasChildNodes()&&_129.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_129.removeChild(_129.firstChild);
+while(_121.hasChildNodes()&&_121.firstChild.nodeType==dojo.dom.TEXT_NODE){
+_121.removeChild(_121.firstChild);
 }
-while(_129.hasChildNodes()&&_129.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_129.removeChild(_129.lastChild);
+while(_121.hasChildNodes()&&_121.lastChild.nodeType==dojo.dom.TEXT_NODE){
+_121.removeChild(_121.lastChild);
 }
 }
-while(_129.hasChildNodes()){
-_12a.appendChild(_129.firstChild);
-_12c++;
+while(_121.hasChildNodes()){
+_122.appendChild(_121.firstChild);
+_124++;
 }
-return _12c;
+return _124;
 };
-dojo.dom.copyChildren=function(_12d,_12e,trim){
-var _130=_12d.cloneNode(true);
-return this.moveChildren(_130,_12e,trim);
+dojo.dom.copyChildren=function(_125,_126,trim){
+var _128=_125.cloneNode(true);
+return this.moveChildren(_128,_126,trim);
 };
-dojo.dom.replaceChildren=function(node,_132){
-var _133=[];
+dojo.dom.replaceChildren=function(node,_12a){
+var _12b=[];
 if(dojo.render.html.ie){
 for(var i=0;i<node.childNodes.length;i++){
-_133.push(node.childNodes[i]);
+_12b.push(node.childNodes[i]);
 }
 }
 dojo.dom.removeChildren(node);
-node.appendChild(_132);
-for(var i=0;i<_133.length;i++){
-dojo.dom.destroyNode(_133[i]);
+node.appendChild(_12a);
+for(var i=0;i<_12b.length;i++){
+dojo.dom.destroyNode(_12b[i]);
 }
 };
 dojo.dom.removeChildren=function(node){
-var _136=node.childNodes.length;
+var _12e=node.childNodes.length;
 while(node.hasChildNodes()){
 dojo.dom.removeNode(node.firstChild);
 }
-return _136;
+return _12e;
 };
-dojo.dom.replaceNode=function(node,_138){
-return node.parentNode.replaceChild(_138,node);
+dojo.dom.replaceNode=function(node,_130){
+return node.parentNode.replaceChild(_130,node);
 };
 dojo.dom.destroyNode=function(node){
 if(node.parentNode){
@@ -59626,38 +39665,38 @@
 return node.parentNode.removeChild(node);
 }
 };
-dojo.dom.getAncestors=function(node,_13c,_13d){
-var _13e=[];
-var _13f=(_13c&&(_13c instanceof Function||typeof _13c=="function"));
+dojo.dom.getAncestors=function(node,_134,_135){
+var _136=[];
+var _137=(_134&&(_134 instanceof Function||typeof _134=="function"));
 while(node){
-if(!_13f||_13c(node)){
-_13e.push(node);
+if(!_137||_134(node)){
+_136.push(node);
 }
-if(_13d&&_13e.length>0){
-return _13e[0];
+if(_135&&_136.length>0){
+return _136[0];
 }
 node=node.parentNode;
 }
-if(_13d){
+if(_135){
 return null;
 }
-return _13e;
+return _136;
 };
-dojo.dom.getAncestorsByTag=function(node,tag,_142){
+dojo.dom.getAncestorsByTag=function(node,tag,_13a){
 tag=tag.toLowerCase();
 return dojo.dom.getAncestors(node,function(el){
 return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_142);
+},_13a);
 };
 dojo.dom.getFirstAncestorByTag=function(node,tag){
 return dojo.dom.getAncestorsByTag(node,tag,true);
 };
-dojo.dom.isDescendantOf=function(node,_147,_148){
-if(_148&&node){
+dojo.dom.isDescendantOf=function(node,_13f,_140){
+if(_140&&node){
 node=node.parentNode;
 }
 while(node){
-if(node==_147){
+if(node==_13f){
 return true;
 }
 node=node.parentNode;
@@ -59679,12 +39718,12 @@
 };
 dojo.dom.createDocument=function(){
 var doc=null;
-var _14b=dojo.doc();
+var _143=dojo.doc();
 if(!dj_undef("ActiveXObject")){
-var _14c=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_14c.length;i++){
+var _144=["MSXML2","Microsoft","MSXML","MSXML3"];
+for(var i=0;i<_144.length;i++){
 try{
-doc=new ActiveXObject(_14c[i]+".XMLDOM");
+doc=new ActiveXObject(_144[i]+".XMLDOM");
 }
 catch(e){
 }
@@ -59693,40 +39732,40 @@
 }
 }
 }else{
-if((_14b.implementation)&&(_14b.implementation.createDocument)){
-doc=_14b.implementation.createDocument("","",null);
+if((_143.implementation)&&(_143.implementation.createDocument)){
+doc=_143.implementation.createDocument("","",null);
 }
 }
 return doc;
 };
-dojo.dom.createDocumentFromText=function(str,_14f){
-if(!_14f){
-_14f="text/xml";
+dojo.dom.createDocumentFromText=function(str,_147){
+if(!_147){
+_147="text/xml";
 }
 if(!dj_undef("DOMParser")){
-var _150=new DOMParser();
-return _150.parseFromString(str,_14f);
+var _148=new DOMParser();
+return _148.parseFromString(str,_147);
 }else{
 if(!dj_undef("ActiveXObject")){
-var _151=dojo.dom.createDocument();
-if(_151){
-_151.async=false;
-_151.loadXML(str);
-return _151;
+var _149=dojo.dom.createDocument();
+if(_149){
+_149.async=false;
+_149.loadXML(str);
+return _149;
 }else{
 dojo.debug("toXml didn't work?");
 }
 }else{
-var _152=dojo.doc();
-if(_152.createElement){
-var tmp=_152.createElement("xml");
+var _14a=dojo.doc();
+if(_14a.createElement){
+var tmp=_14a.createElement("xml");
 tmp.innerHTML=str;
-if(_152.implementation&&_152.implementation.createDocument){
-var _154=_152.implementation.createDocument("foo","",null);
+if(_14a.implementation&&_14a.implementation.createDocument){
+var _14c=_14a.implementation.createDocument("foo","",null);
 for(var i=0;i<tmp.childNodes.length;i++){
-_154.importNode(tmp.childNodes.item(i),true);
+_14c.importNode(tmp.childNodes.item(i),true);
 }
-return _154;
+return _14c;
 }
 return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
 }
@@ -59734,39 +39773,39 @@
 }
 return null;
 };
-dojo.dom.prependChild=function(node,_157){
-if(_157.firstChild){
-_157.insertBefore(node,_157.firstChild);
+dojo.dom.prependChild=function(node,_14f){
+if(_14f.firstChild){
+_14f.insertBefore(node,_14f.firstChild);
 }else{
-_157.appendChild(node);
+_14f.appendChild(node);
 }
 return true;
 };
-dojo.dom.insertBefore=function(node,ref,_15a){
-if((_15a!=true)&&(node===ref||node.nextSibling===ref)){
+dojo.dom.insertBefore=function(node,ref,_152){
+if((_152!=true)&&(node===ref||node.nextSibling===ref)){
 return false;
 }
-var _15b=ref.parentNode;
-_15b.insertBefore(node,ref);
+var _153=ref.parentNode;
+_153.insertBefore(node,ref);
 return true;
 };
-dojo.dom.insertAfter=function(node,ref,_15e){
+dojo.dom.insertAfter=function(node,ref,_156){
 var pn=ref.parentNode;
 if(ref==pn.lastChild){
-if((_15e!=true)&&(node===ref)){
+if((_156!=true)&&(node===ref)){
 return false;
 }
 pn.appendChild(node);
 }else{
-return this.insertBefore(node,ref.nextSibling,_15e);
+return this.insertBefore(node,ref.nextSibling,_156);
 }
 return true;
 };
-dojo.dom.insertAtPosition=function(node,ref,_162){
-if((!node)||(!ref)||(!_162)){
+dojo.dom.insertAtPosition=function(node,ref,_15a){
+if((!node)||(!ref)||(!_15a)){
 return false;
 }
-switch(_162.toLowerCase()){
+switch(_15a.toLowerCase()){
 case "before":
 return dojo.dom.insertBefore(node,ref);
 case "after":
@@ -59784,46 +39823,46 @@
 return true;
 }
 };
-dojo.dom.insertAtIndex=function(node,_164,_165){
-var _166=_164.childNodes;
-if(!_166.length||_166.length==_165){
-_164.appendChild(node);
+dojo.dom.insertAtIndex=function(node,_15c,_15d){
+var _15e=_15c.childNodes;
+if(!_15e.length||_15e.length==_15d){
+_15c.appendChild(node);
 return true;
 }
-if(_165==0){
-return dojo.dom.prependChild(node,_164);
+if(_15d==0){
+return dojo.dom.prependChild(node,_15c);
 }
-return dojo.dom.insertAfter(node,_166[_165-1]);
+return dojo.dom.insertAfter(node,_15e[_15d-1]);
 };
 dojo.dom.textContent=function(node,text){
 if(arguments.length>1){
-var _169=dojo.doc();
-dojo.dom.replaceChildren(node,_169.createTextNode(text));
+var _161=dojo.doc();
+dojo.dom.replaceChildren(node,_161.createTextNode(text));
 return text;
 }else{
 if(node.textContent!=undefined){
 return node.textContent;
 }
-var _16a="";
+var _162="";
 if(node==null){
-return _16a;
+return _162;
 }
 for(var i=0;i<node.childNodes.length;i++){
 switch(node.childNodes[i].nodeType){
 case 1:
 case 5:
-_16a+=dojo.dom.textContent(node.childNodes[i]);
+_162+=dojo.dom.textContent(node.childNodes[i]);
 break;
 case 3:
 case 2:
 case 4:
-_16a+=node.childNodes[i].nodeValue;
+_162+=node.childNodes[i].nodeValue;
 break;
 default:
 break;
 }
 }
-return _16a;
+return _162;
 }
 };
 dojo.dom.hasParent=function(node){
@@ -59839,17 +39878,17 @@
 }
 return "";
 };
-dojo.dom.setAttributeNS=function(elem,_170,_171,_172){
+dojo.dom.setAttributeNS=function(elem,_168,_169,_16a){
 if(elem==null||((elem==undefined)&&(typeof elem=="undefined"))){
 dojo.raise("No element given to dojo.dom.setAttributeNS");
 }
 if(!((elem.setAttributeNS==undefined)&&(typeof elem.setAttributeNS=="undefined"))){
-elem.setAttributeNS(_170,_171,_172);
+elem.setAttributeNS(_168,_169,_16a);
 }else{
-var _173=elem.ownerDocument;
-var _174=_173.createNode(2,_171,_170);
-_174.nodeValue=_172;
-elem.setAttributeNode(_174);
+var _16b=elem.ownerDocument;
+var _16c=_16b.createNode(2,_169,_168);
+_16c.nodeValue=_16a;
+elem.setAttributeNode(_16c);
 }
 };
 dojo.provide("dojo.html.common");
@@ -59869,24 +39908,24 @@
 return t;
 };
 dojo.html.getViewport=function(){
-var _177=dojo.global();
-var _178=dojo.doc();
+var _16f=dojo.global();
+var _170=dojo.doc();
 var w=0;
 var h=0;
 if(dojo.render.html.mozilla){
-w=_178.documentElement.clientWidth;
-h=_177.innerHeight;
+w=_170.documentElement.clientWidth;
+h=_16f.innerHeight;
 }else{
-if(!dojo.render.html.opera&&_177.innerWidth){
-w=_177.innerWidth;
-h=_177.innerHeight;
+if(!dojo.render.html.opera&&_16f.innerWidth){
+w=_16f.innerWidth;
+h=_16f.innerHeight;
 }else{
-if(!dojo.render.html.opera&&dojo.exists(_178,"documentElement.clientWidth")){
-var w2=_178.documentElement.clientWidth;
+if(!dojo.render.html.opera&&dojo.exists(_170,"documentElement.clientWidth")){
+var w2=_170.documentElement.clientWidth;
 if(!w||w2&&w2<w){
 w=w2;
 }
-h=_178.documentElement.clientHeight;
+h=_170.documentElement.clientHeight;
 }else{
 if(dojo.body().clientWidth){
 w=dojo.body().clientWidth;
@@ -59898,23 +39937,23 @@
 return {width:w,height:h};
 };
 dojo.html.getScroll=function(){
-var _17c=dojo.global();
-var _17d=dojo.doc();
-var top=_17c.pageYOffset||_17d.documentElement.scrollTop||dojo.body().scrollTop||0;
-var left=_17c.pageXOffset||_17d.documentElement.scrollLeft||dojo.body().scrollLeft||0;
+var _174=dojo.global();
+var _175=dojo.doc();
+var top=_174.pageYOffset||_175.documentElement.scrollTop||dojo.body().scrollTop||0;
+var left=_174.pageXOffset||_175.documentElement.scrollLeft||dojo.body().scrollLeft||0;
 return {top:top,left:left,offset:{x:left,y:top}};
 };
 dojo.html.getParentByType=function(node,type){
-var _182=dojo.doc();
-var _183=dojo.byId(node);
+var _17a=dojo.doc();
+var _17b=dojo.byId(node);
 type=type.toLowerCase();
-while((_183)&&(_183.nodeName.toLowerCase()!=type)){
-if(_183==(_182["body"]||_182["documentElement"])){
+while((_17b)&&(_17b.nodeName.toLowerCase()!=type)){
+if(_17b==(_17a["body"]||_17a["documentElement"])){
 return null;
 }
-_183=_183.parentNode;
+_17b=_17b.parentNode;
 }
-return _183;
+return _17b;
 };
 dojo.html.getAttribute=function(node,attr){
 node=dojo.byId(node);
@@ -59947,17 +39986,17 @@
 };
 dojo.html.getCursorPosition=function(e){
 e=e||dojo.global().event;
-var _18b={x:0,y:0};
+var _183={x:0,y:0};
 if(e.pageX||e.pageY){
-_18b.x=e.pageX;
-_18b.y=e.pageY;
+_183.x=e.pageX;
+_183.y=e.pageY;
 }else{
 var de=dojo.doc().documentElement;
 var db=dojo.body();
-_18b.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
-_18b.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
+_183.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
+_183.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
 }
-return _18b;
+return _183;
 };
 dojo.html.isTag=function(node){
 node=dojo.byId(node);
@@ -59973,9 +40012,9 @@
 if(dojo.render.html.ie&&!dojo.render.html.ie70){
 if(window.location.href.substr(0,6).toLowerCase()!="https:"){
 (function(){
-var _190=dojo.doc().createElement("script");
-_190.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
-dojo.doc().getElementsByTagName("head")[0].appendChild(_190);
+var _188=dojo.doc().createElement("script");
+_188.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
+dojo.doc().getElementsByTagName("head")[0].appendChild(_188);
 })();
 }
 }else{
@@ -59983,20 +40022,20 @@
 return doc.createElement(tag);
 };
 }
-dojo.html._callDeprecated=function(_193,_194,args,_196,_197){
-dojo.deprecated("dojo.html."+_193,"replaced by dojo.html."+_194+"("+(_196?"node, {"+_196+": "+_196+"}":"")+")"+(_197?"."+_197:""),"0.5");
-var _198=[];
-if(_196){
-var _199={};
-_199[_196]=args[1];
-_198.push(args[0]);
-_198.push(_199);
+dojo.html._callDeprecated=function(_18b,_18c,args,_18e,_18f){
+dojo.deprecated("dojo.html."+_18b,"replaced by dojo.html."+_18c+"("+(_18e?"node, {"+_18e+": "+_18e+"}":"")+")"+(_18f?"."+_18f:""),"0.5");
+var _190=[];
+if(_18e){
+var _191={};
+_191[_18e]=args[1];
+_190.push(args[0]);
+_190.push(_191);
 }else{
-_198=args;
+_190=args;
 }
-var ret=dojo.html[_194].apply(dojo.html,args);
-if(_197){
-return ret[_197];
+var ret=dojo.html[_18c].apply(dojo.html,args);
+if(_18f){
+return ret[_18f];
 }else{
 return ret;
 }
@@ -60024,15 +40063,20 @@
 this.dojoUri=function(uri){
 return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(),uri);
 };
-this.moduleUri=function(_19c,uri){
-var loc=dojo.hostenv.getModuleSymbols(_19c).join("/");
+this.moduleUri=function(_194,uri){
+var loc=dojo.hostenv.getModuleSymbols(_194).join("/");
 if(!loc){
 return null;
 }
 if(loc.lastIndexOf("/")!=loc.length-1){
 loc+="/";
 }
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri()+loc,uri);
+var _197=loc.indexOf(":");
+var _198=loc.indexOf("/");
+if(loc.charAt(0)!="/"&&(_197==-1||_197>_198)){
+loc=dojo.hostenv.getBaseScriptUri()+loc;
+}
+return new dojo.uri.Uri(loc,uri);
 };
 this.Uri=function(){
 var uri=arguments[0];
@@ -60040,20 +40084,20 @@
 if(!arguments[i]){
 continue;
 }
-var _1a1=new dojo.uri.Uri(arguments[i].toString());
-var _1a2=new dojo.uri.Uri(uri.toString());
-if((_1a1.path=="")&&(_1a1.scheme==null)&&(_1a1.authority==null)&&(_1a1.query==null)){
-if(_1a1.fragment!=null){
-_1a2.fragment=_1a1.fragment;
+var _19b=new dojo.uri.Uri(arguments[i].toString());
+var _19c=new dojo.uri.Uri(uri.toString());
+if((_19b.path=="")&&(_19b.scheme==null)&&(_19b.authority==null)&&(_19b.query==null)){
+if(_19b.fragment!=null){
+_19c.fragment=_19b.fragment;
 }
-_1a1=_1a2;
+_19b=_19c;
 }else{
-if(_1a1.scheme==null){
-_1a1.scheme=_1a2.scheme;
-if(_1a1.authority==null){
-_1a1.authority=_1a2.authority;
-if(_1a1.path.charAt(0)!="/"){
-var path=_1a2.path.substring(0,_1a2.path.lastIndexOf("/")+1)+_1a1.path;
+if(_19b.scheme==null){
+_19b.scheme=_19c.scheme;
+if(_19b.authority==null){
+_19b.authority=_19c.authority;
+if(_19b.path.charAt(0)!="/"){
+var path=_19c.path.substring(0,_19c.path.lastIndexOf("/")+1)+_19b.path;
 var segs=path.split("/");
 for(var j=0;j<segs.length;j++){
 if(segs[j]=="."){
@@ -60075,37 +40119,37 @@
 }
 }
 }
-_1a1.path=segs.join("/");
+_19b.path=segs.join("/");
 }
 }
 }
 }
 uri="";
-if(_1a1.scheme!=null){
-uri+=_1a1.scheme+":";
+if(_19b.scheme!=null){
+uri+=_19b.scheme+":";
 }
-if(_1a1.authority!=null){
-uri+="//"+_1a1.authority;
+if(_19b.authority!=null){
+uri+="//"+_19b.authority;
 }
-uri+=_1a1.path;
-if(_1a1.query!=null){
-uri+="?"+_1a1.query;
+uri+=_19b.path;
+if(_19b.query!=null){
+uri+="?"+_19b.query;
 }
-if(_1a1.fragment!=null){
-uri+="#"+_1a1.fragment;
+if(_19b.fragment!=null){
+uri+="#"+_19b.fragment;
 }
 }
 this.uri=uri.toString();
-var _1a6="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
-var r=this.uri.match(new RegExp(_1a6));
+var _1a0="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
+var r=this.uri.match(new RegExp(_1a0));
 this.scheme=r[2]||(r[1]?"":null);
 this.authority=r[4]||(r[3]?"":null);
 this.path=r[5];
 this.query=r[7]||(r[6]?"":null);
 this.fragment=r[9]||(r[8]?"":null);
 if(this.authority!=null){
-_1a6="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
-r=this.authority.match(new RegExp(_1a6));
+_1a0="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
+r=this.authority.match(new RegExp(_1a0));
 this.user=r[3]||null;
 this.password=r[4]||null;
 this.host=r[5];
@@ -60136,29 +40180,29 @@
 var c=dojo.html.getClass(node);
 return (c=="")?[]:c.split(/\s+/g);
 };
-dojo.html.hasClass=function(node,_1ad){
-return (new RegExp("(^|\\s+)"+_1ad+"(\\s+|$)")).test(dojo.html.getClass(node));
+dojo.html.hasClass=function(node,_1a7){
+return (new RegExp("(^|\\s+)"+_1a7+"(\\s+|$)")).test(dojo.html.getClass(node));
 };
-dojo.html.prependClass=function(node,_1af){
-_1af+=" "+dojo.html.getClass(node);
-return dojo.html.setClass(node,_1af);
+dojo.html.prependClass=function(node,_1a9){
+_1a9+=" "+dojo.html.getClass(node);
+return dojo.html.setClass(node,_1a9);
 };
-dojo.html.addClass=function(node,_1b1){
-if(dojo.html.hasClass(node,_1b1)){
+dojo.html.addClass=function(node,_1ab){
+if(dojo.html.hasClass(node,_1ab)){
 return false;
 }
-_1b1=(dojo.html.getClass(node)+" "+_1b1).replace(/^\s+|\s+$/g,"");
-return dojo.html.setClass(node,_1b1);
+_1ab=(dojo.html.getClass(node)+" "+_1ab).replace(/^\s+|\s+$/g,"");
+return dojo.html.setClass(node,_1ab);
 };
-dojo.html.setClass=function(node,_1b3){
+dojo.html.setClass=function(node,_1ad){
 node=dojo.byId(node);
-var cs=new String(_1b3);
+var cs=new String(_1ad);
 try{
 if(typeof node.className=="string"){
 node.className=cs;
 }else{
 if(node.setAttribute){
-node.setAttribute("class",_1b3);
+node.setAttribute("class",_1ad);
 node.className=cs;
 }else{
 return false;
@@ -60170,207 +40214,220 @@
 }
 return true;
 };
-dojo.html.removeClass=function(node,_1b6,_1b7){
+dojo.html.removeClass=function(node,_1b0,_1b1){
 try{
-if(!_1b7){
-var _1b8=dojo.html.getClass(node).replace(new RegExp("(^|\\s+)"+_1b6+"(\\s+|$)"),"$1$2");
+if(!_1b1){
+var _1b2=dojo.html.getClass(node).replace(new RegExp("(^|\\s+)"+_1b0+"(\\s+|$)"),"$1$2");
 }else{
-var _1b8=dojo.html.getClass(node).replace(_1b6,"");
+var _1b2=dojo.html.getClass(node).replace(_1b0,"");
 }
-dojo.html.setClass(node,_1b8);
+dojo.html.setClass(node,_1b2);
 }
 catch(e){
 dojo.debug("dojo.html.removeClass() failed",e);
 }
 return true;
 };
-dojo.html.replaceClass=function(node,_1ba,_1bb){
-dojo.html.removeClass(node,_1bb);
-dojo.html.addClass(node,_1ba);
+dojo.html.replaceClass=function(node,_1b4,_1b5){
+dojo.html.removeClass(node,_1b5);
+dojo.html.addClass(node,_1b4);
 };
 dojo.html.classMatchType={ContainsAll:0,ContainsAny:1,IsOnly:2};
-dojo.html.getElementsByClass=function(_1bc,_1bd,_1be,_1bf,_1c0){
-_1c0=false;
-var _1c1=dojo.doc();
-_1bd=dojo.byId(_1bd)||_1c1;
-var _1c2=_1bc.split(/\s+/g);
-var _1c3=[];
-if(_1bf!=1&&_1bf!=2){
-_1bf=0;
+dojo.html.getElementsByClass=function(_1b6,_1b7,_1b8,_1b9,_1ba){
+_1ba=false;
+var _1bb=dojo.doc();
+_1b7=dojo.byId(_1b7)||_1bb;
+var _1bc=_1b6.split(/\s+/g);
+var _1bd=[];
+if(_1b9!=1&&_1b9!=2){
+_1b9=0;
 }
-var _1c4=new RegExp("(\\s|^)(("+_1c2.join(")|(")+"))(\\s|$)");
-var _1c5=_1c2.join(" ").length;
-var _1c6=[];
-if(!_1c0&&_1c1.evaluate){
-var _1c7=".//"+(_1be||"*")+"[contains(";
-if(_1bf!=dojo.html.classMatchType.ContainsAny){
-_1c7+="concat(' ', at class,' '), ' "+_1c2.join(" ') and contains(concat(' ', at class,' '), ' ")+" ')";
-if(_1bf==2){
-_1c7+=" and string-length(@class)="+_1c5+"]";
+var _1be=new RegExp("(\\s|^)(("+_1bc.join(")|(")+"))(\\s|$)");
+var _1bf=_1bc.join(" ").length;
+var _1c0=[];
+if(!_1ba&&_1bb.evaluate){
+var _1c1=".//"+(_1b8||"*")+"[contains(";
+if(_1b9!=dojo.html.classMatchType.ContainsAny){
+_1c1+="concat(' ', at class,' '), ' "+_1bc.join(" ') and contains(concat(' ', at class,' '), ' ")+" ')";
+if(_1b9==2){
+_1c1+=" and string-length(@class)="+_1bf+"]";
 }else{
-_1c7+="]";
+_1c1+="]";
 }
 }else{
-_1c7+="concat(' ', at class,' '), ' "+_1c2.join(" ') or contains(concat(' ', at class,' '), ' ")+" ')]";
+_1c1+="concat(' ', at class,' '), ' "+_1bc.join(" ') or contains(concat(' ', at class,' '), ' ")+" ')]";
 }
-var _1c8=_1c1.evaluate(_1c7,_1bd,null,XPathResult.ANY_TYPE,null);
-var _1c9=_1c8.iterateNext();
-while(_1c9){
+var _1c2=_1bb.evaluate(_1c1,_1b7,null,XPathResult.ANY_TYPE,null);
+var _1c3=_1c2.iterateNext();
+while(_1c3){
 try{
-_1c6.push(_1c9);
-_1c9=_1c8.iterateNext();
+_1c0.push(_1c3);
+_1c3=_1c2.iterateNext();
 }
 catch(e){
 break;
 }
 }
-return _1c6;
+return _1c0;
 }else{
-if(!_1be){
-_1be="*";
+if(!_1b8){
+_1b8="*";
 }
-_1c6=_1bd.getElementsByTagName(_1be);
+_1c0=_1b7.getElementsByTagName(_1b8);
 var node,i=0;
 outer:
-while(node=_1c6[i++]){
-var _1cc=dojo.html.getClasses(node);
-if(_1cc.length==0){
+while(node=_1c0[i++]){
+var _1c6=dojo.html.getClasses(node);
+if(_1c6.length==0){
 continue outer;
 }
-var _1cd=0;
-for(var j=0;j<_1cc.length;j++){
-if(_1c4.test(_1cc[j])){
-if(_1bf==dojo.html.classMatchType.ContainsAny){
-_1c3.push(node);
+var _1c7=0;
+for(var j=0;j<_1c6.length;j++){
+if(_1be.test(_1c6[j])){
+if(_1b9==dojo.html.classMatchType.ContainsAny){
+_1bd.push(node);
 continue outer;
 }else{
-_1cd++;
+_1c7++;
 }
 }else{
-if(_1bf==dojo.html.classMatchType.IsOnly){
+if(_1b9==dojo.html.classMatchType.IsOnly){
 continue outer;
 }
 }
 }
-if(_1cd==_1c2.length){
-if((_1bf==dojo.html.classMatchType.IsOnly)&&(_1cd==_1cc.length)){
-_1c3.push(node);
+if(_1c7==_1bc.length){
+if((_1b9==dojo.html.classMatchType.IsOnly)&&(_1c7==_1c6.length)){
+_1bd.push(node);
 }else{
-if(_1bf==dojo.html.classMatchType.ContainsAll){
-_1c3.push(node);
+if(_1b9==dojo.html.classMatchType.ContainsAll){
+_1bd.push(node);
 }
 }
 }
 }
-return _1c3;
+return _1bd;
 }
 };
 dojo.html.getElementsByClassName=dojo.html.getElementsByClass;
-dojo.html.toCamelCase=function(_1cf){
-var arr=_1cf.split("-"),cc=arr[0];
+dojo.html.toCamelCase=function(_1c9){
+var arr=_1c9.split("-"),cc=arr[0];
 for(var i=1;i<arr.length;i++){
 cc+=arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
 }
 return cc;
 };
-dojo.html.toSelectorCase=function(_1d3){
-return _1d3.replace(/([A-Z])/g,"-$1").toLowerCase();
+dojo.html.toSelectorCase=function(_1cd){
+return _1cd.replace(/([A-Z])/g,"-$1").toLowerCase();
 };
-dojo.html.getComputedStyle=function(node,_1d5,_1d6){
+if(dojo.render.html.ie){
+dojo.html.getComputedStyle=function(node,_1cf,_1d0){
 node=dojo.byId(node);
-var _1d5=dojo.html.toSelectorCase(_1d5);
-var _1d7=dojo.html.toCamelCase(_1d5);
 if(!node||!node.style){
-return _1d6;
-}else{
-if(document.defaultView&&dojo.html.isDescendantOf(node,node.ownerDocument)){
-try{
-var cs=document.defaultView.getComputedStyle(node,"");
-if(cs){
-return cs.getPropertyValue(_1d5);
+return _1d0;
 }
-}
-catch(e){
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_1d5);
+return node.currentStyle[dojo.html.toCamelCase(_1cf)];
+};
+dojo.html.getComputedStyles=function(node){
+return node.currentStyle;
+};
 }else{
-return _1d6;
+dojo.html.getComputedStyle=function(node,_1d3,_1d4){
+node=dojo.byId(node);
+if(!node||!node.style){
+return _1d4;
 }
-}
-}else{
-if(node.currentStyle){
-return node.currentStyle[_1d7];
-}
-}
-}
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_1d5);
-}else{
-return _1d6;
-}
+var s=document.defaultView.getComputedStyle(node,null);
+return (s&&s[dojo.html.toCamelCase(_1d3)])||"";
 };
-dojo.html.getStyleProperty=function(node,_1da){
+dojo.html.getComputedStyles=function(node){
+return document.defaultView.getComputedStyle(node,null);
+};
+}
+dojo.html.getStyleProperty=function(node,_1d8){
 node=dojo.byId(node);
-return (node&&node.style?node.style[dojo.html.toCamelCase(_1da)]:undefined);
+return (node&&node.style?node.style[dojo.html.toCamelCase(_1d8)]:undefined);
 };
-dojo.html.getStyle=function(node,_1dc){
-var _1dd=dojo.html.getStyleProperty(node,_1dc);
-return (_1dd?_1dd:dojo.html.getComputedStyle(node,_1dc));
+dojo.html.getStyle=function(node,_1da){
+var _1db=dojo.html.getStyleProperty(node,_1da);
+return (_1db?_1db:dojo.html.getComputedStyle(node,_1da));
 };
-dojo.html.setStyle=function(node,_1df,_1e0){
+dojo.html.setStyle=function(node,_1dd,_1de){
 node=dojo.byId(node);
 if(node&&node.style){
-var _1e1=dojo.html.toCamelCase(_1df);
-node.style[_1e1]=_1e0;
+var _1df=dojo.html.toCamelCase(_1dd);
+node.style[_1df]=_1de;
 }
 };
-dojo.html.setStyleText=function(_1e2,text){
+dojo.html.setStyleText=function(_1e0,text){
 try{
-_1e2.style.cssText=text;
+_1e0.style.cssText=text;
 }
 catch(e){
-_1e2.setAttribute("style",text);
+_1e0.setAttribute("style",text);
 }
 };
-dojo.html.copyStyle=function(_1e4,_1e5){
-if(!_1e5.style.cssText){
-_1e4.setAttribute("style",_1e5.getAttribute("style"));
+dojo.html.copyStyle=function(_1e2,_1e3){
+if(!_1e3.style.cssText){
+_1e2.setAttribute("style",_1e3.getAttribute("style"));
 }else{
-_1e4.style.cssText=_1e5.style.cssText;
+_1e2.style.cssText=_1e3.style.cssText;
 }
-dojo.html.addClass(_1e4,dojo.html.getClass(_1e5));
+dojo.html.addClass(_1e2,dojo.html.getClass(_1e3));
 };
-dojo.html.getUnitValue=function(node,_1e7,_1e8){
-var s=dojo.html.getComputedStyle(node,_1e7);
-if((!s)||((s=="auto")&&(_1e8))){
+dojo.html.getUnitValue=function(node,_1e5,_1e6){
+var s=dojo.html.getComputedStyle(node,_1e5);
+if((!s)||((s=="auto")&&(_1e6))){
 return {value:0,units:"px"};
 }
-var _1ea=s.match(/(\-?[\d.]+)([a-z%]*)/i);
-if(!_1ea){
+var _1e8=s.match(/(\-?[\d.]+)([a-z%]*)/i);
+if(!_1e8){
 return dojo.html.getUnitValue.bad;
 }
-return {value:Number(_1ea[1]),units:_1ea[2].toLowerCase()};
+return {value:Number(_1e8[1]),units:_1e8[2].toLowerCase()};
 };
 dojo.html.getUnitValue.bad={value:NaN,units:""};
-dojo.html.getPixelValue=function(node,_1ec,_1ed){
-var _1ee=dojo.html.getUnitValue(node,_1ec,_1ed);
-if(isNaN(_1ee.value)){
+if(dojo.render.html.ie){
+dojo.html.toPixelValue=function(_1e9,_1ea){
+if(!_1ea){
 return 0;
 }
-if((_1ee.value)&&(_1ee.units!="px")){
-return NaN;
+if(_1ea.slice(-2)=="px"){
+return parseFloat(_1ea);
 }
-return _1ee.value;
+var _1eb=0;
+with(_1e9){
+var _1ec=style.left;
+var _1ed=runtimeStyle.left;
+runtimeStyle.left=currentStyle.left;
+try{
+style.left=_1ea||0;
+_1eb=style.pixelLeft;
+style.left=_1ec;
+runtimeStyle.left=_1ed;
+}
+catch(e){
+}
+}
+return _1eb;
 };
-dojo.html.setPositivePixelValue=function(node,_1f0,_1f1){
-if(isNaN(_1f1)){
+}else{
+dojo.html.toPixelValue=function(_1ee,_1ef){
+return (_1ef&&(_1ef.slice(-2)=="px")?parseFloat(_1ef):0);
+};
+}
+dojo.html.getPixelValue=function(node,_1f1,_1f2){
+return dojo.html.toPixelValue(node,dojo.html.getComputedStyle(node,_1f1));
+};
+dojo.html.setPositivePixelValue=function(node,_1f4,_1f5){
+if(isNaN(_1f5)){
 return false;
 }
-node.style[_1f0]=Math.max(0,_1f1)+"px";
+node.style[_1f4]=Math.max(0,_1f5)+"px";
 return true;
 };
 dojo.html.styleSheet=null;
-dojo.html.insertCssRule=function(_1f2,_1f3,_1f4){
+dojo.html.insertCssRule=function(_1f6,_1f7,_1f8){
 if(!dojo.html.styleSheet){
 if(document.createStyleSheet){
 dojo.html.styleSheet=document.createStyleSheet();
@@ -60384,161 +40441,161 @@
 }
 if(arguments.length<3){
 if(dojo.html.styleSheet.cssRules){
-_1f4=dojo.html.styleSheet.cssRules.length;
+_1f8=dojo.html.styleSheet.cssRules.length;
 }else{
 if(dojo.html.styleSheet.rules){
-_1f4=dojo.html.styleSheet.rules.length;
+_1f8=dojo.html.styleSheet.rules.length;
 }else{
 return null;
 }
 }
 }
 if(dojo.html.styleSheet.insertRule){
-var rule=_1f2+" { "+_1f3+" }";
-return dojo.html.styleSheet.insertRule(rule,_1f4);
+var rule=_1f6+" { "+_1f7+" }";
+return dojo.html.styleSheet.insertRule(rule,_1f8);
 }else{
 if(dojo.html.styleSheet.addRule){
-return dojo.html.styleSheet.addRule(_1f2,_1f3,_1f4);
+return dojo.html.styleSheet.addRule(_1f6,_1f7,_1f8);
 }else{
 return null;
 }
 }
 };
-dojo.html.removeCssRule=function(_1f6){
+dojo.html.removeCssRule=function(_1fa){
 if(!dojo.html.styleSheet){
 dojo.debug("no stylesheet defined for removing rules");
 return false;
 }
 if(dojo.render.html.ie){
-if(!_1f6){
-_1f6=dojo.html.styleSheet.rules.length;
-dojo.html.styleSheet.removeRule(_1f6);
+if(!_1fa){
+_1fa=dojo.html.styleSheet.rules.length;
+dojo.html.styleSheet.removeRule(_1fa);
 }
 }else{
 if(document.styleSheets[0]){
-if(!_1f6){
-_1f6=dojo.html.styleSheet.cssRules.length;
+if(!_1fa){
+_1fa=dojo.html.styleSheet.cssRules.length;
 }
-dojo.html.styleSheet.deleteRule(_1f6);
+dojo.html.styleSheet.deleteRule(_1fa);
 }
 }
 return true;
 };
 dojo.html._insertedCssFiles=[];
-dojo.html.insertCssFile=function(URI,doc,_1f9,_1fa){
+dojo.html.insertCssFile=function(URI,doc,_1fd,_1fe){
 if(!URI){
 return;
 }
 if(!doc){
 doc=document;
 }
-var _1fb=dojo.hostenv.getText(URI,false,_1fa);
-if(_1fb===null){
+var _1ff=dojo.hostenv.getText(URI,false,_1fe);
+if(_1ff===null){
 return;
 }
-_1fb=dojo.html.fixPathsInCssText(_1fb,URI);
-if(_1f9){
+_1ff=dojo.html.fixPathsInCssText(_1ff,URI);
+if(_1fd){
 var idx=-1,node,ent=dojo.html._insertedCssFiles;
 for(var i=0;i<ent.length;i++){
-if((ent[i].doc==doc)&&(ent[i].cssText==_1fb)){
+if((ent[i].doc==doc)&&(ent[i].cssText==_1ff)){
 idx=i;
 node=ent[i].nodeRef;
 break;
 }
 }
 if(node){
-var _200=doc.getElementsByTagName("style");
-for(var i=0;i<_200.length;i++){
-if(_200[i]==node){
+var _204=doc.getElementsByTagName("style");
+for(var i=0;i<_204.length;i++){
+if(_204[i]==node){
 return;
 }
 }
 dojo.html._insertedCssFiles.shift(idx,1);
 }
 }
-var _201=dojo.html.insertCssText(_1fb,doc);
-dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_1fb,"nodeRef":_201});
-if(_201&&djConfig.isDebug){
-_201.setAttribute("dbgHref",URI);
+var _205=dojo.html.insertCssText(_1ff,doc);
+dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_1ff,"nodeRef":_205});
+if(_205&&djConfig.isDebug){
+_205.setAttribute("dbgHref",URI);
 }
-return _201;
+return _205;
 };
-dojo.html.insertCssText=function(_202,doc,URI){
-if(!_202){
+dojo.html.insertCssText=function(_206,doc,URI){
+if(!_206){
 return;
 }
 if(!doc){
 doc=document;
 }
 if(URI){
-_202=dojo.html.fixPathsInCssText(_202,URI);
+_206=dojo.html.fixPathsInCssText(_206,URI);
 }
-var _205=doc.createElement("style");
-_205.setAttribute("type","text/css");
+var _209=doc.createElement("style");
+_209.setAttribute("type","text/css");
 var head=doc.getElementsByTagName("head")[0];
 if(!head){
 dojo.debug("No head tag in document, aborting styles");
 return;
 }else{
-head.appendChild(_205);
+head.appendChild(_209);
 }
-if(_205.styleSheet){
-var _207=function(){
+if(_209.styleSheet){
+var _20b=function(){
 try{
-_205.styleSheet.cssText=_202;
+_209.styleSheet.cssText=_206;
 }
 catch(e){
 dojo.debug(e);
 }
 };
-if(_205.styleSheet.disabled){
-setTimeout(_207,10);
+if(_209.styleSheet.disabled){
+setTimeout(_20b,10);
 }else{
-_207();
+_20b();
 }
 }else{
-var _208=doc.createTextNode(_202);
-_205.appendChild(_208);
+var _20c=doc.createTextNode(_206);
+_209.appendChild(_20c);
 }
-return _205;
+return _209;
 };
-dojo.html.fixPathsInCssText=function(_209,URI){
-if(!_209||!URI){
+dojo.html.fixPathsInCssText=function(_20d,URI){
+if(!_20d||!URI){
 return;
 }
-var _20b,str="",url="",_20e="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
-var _20f=new RegExp("url\\(\\s*("+_20e+")\\s*\\)");
-var _210=/(file|https?|ftps?):\/\//;
-regexTrim=new RegExp("^[\\s]*(['\"]?)("+_20e+")\\1[\\s]*?$");
+var _20f,str="",url="",_212="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
+var _213=new RegExp("url\\(\\s*("+_212+")\\s*\\)");
+var _214=/(file|https?|ftps?):\/\//;
+regexTrim=new RegExp("^[\\s]*(['\"]?)("+_212+")\\1[\\s]*?$");
 if(dojo.render.html.ie55||dojo.render.html.ie60){
-var _211=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_20e+")['\"]");
-while(_20b=_211.exec(_209)){
-url=_20b[2].replace(regexTrim,"$2");
-if(!_210.exec(url)){
+var _215=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_212+")['\"]");
+while(_20f=_215.exec(_20d)){
+url=_20f[2].replace(regexTrim,"$2");
+if(!_214.exec(url)){
 url=(new dojo.uri.Uri(URI,url).toString());
 }
-str+=_209.substring(0,_20b.index)+"AlphaImageLoader("+_20b[1]+"src='"+url+"'";
-_209=_209.substr(_20b.index+_20b[0].length);
+str+=_20d.substring(0,_20f.index)+"AlphaImageLoader("+_20f[1]+"src='"+url+"'";
+_20d=_20d.substr(_20f.index+_20f[0].length);
 }
-_209=str+_209;
+_20d=str+_20d;
 str="";
 }
-while(_20b=_20f.exec(_209)){
-url=_20b[1].replace(regexTrim,"$2");
-if(!_210.exec(url)){
+while(_20f=_213.exec(_20d)){
+url=_20f[1].replace(regexTrim,"$2");
+if(!_214.exec(url)){
 url=(new dojo.uri.Uri(URI,url).toString());
 }
-str+=_209.substring(0,_20b.index)+"url("+url+")";
-_209=_209.substr(_20b.index+_20b[0].length);
+str+=_20d.substring(0,_20f.index)+"url("+url+")";
+_20d=_20d.substr(_20f.index+_20f[0].length);
 }
-return str+_209;
+return str+_20d;
 };
-dojo.html.setActiveStyleSheet=function(_212){
+dojo.html.setActiveStyleSheet=function(_216){
 var i=0,a,els=dojo.doc().getElementsByTagName("link");
 while(a=els[i++]){
 if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")){
 a.disabled=true;
-if(a.getAttribute("title")==_212){
+if(a.getAttribute("title")==_216){
 a.disabled=false;
 }
 }
@@ -60564,19 +40621,20 @@
 };
 dojo.html.applyBrowserClass=function(node){
 var drh=dojo.render.html;
-var _21e={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
-for(var p in _21e){
-if(_21e[p]){
+var _222={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
+for(var p in _222){
+if(_222[p]){
 dojo.html.addClass(node,p);
 }
 }
 };
+dojo.kwCompoundRequire({common:["dojo.html.common","dojo.html.style"]});
 dojo.provide("dojo.html.*");
 dojo.provide("dojo.html.display");
-dojo.html._toggle=function(node,_221,_222){
+dojo.html._toggle=function(node,_225,_226){
 node=dojo.byId(node);
-_222(node,!_221(node));
-return _221(node);
+_226(node,!_225(node));
+return _225(node);
 };
 dojo.html.show=function(node){
 node=dojo.byId(node);
@@ -60595,8 +40653,8 @@
 }
 dojo.html.setStyle(node,"display","none");
 };
-dojo.html.setShowing=function(node,_227){
-dojo.html[(_227?"show":"hide")](node);
+dojo.html.setShowing=function(node,_22b){
+dojo.html[(_22b?"show":"hide")](node);
 };
 dojo.html.isShowing=function(node){
 return (dojo.html.getStyleProperty(node,"display")!="none");
@@ -60612,8 +40670,8 @@
 return (tag in dojo.html.displayMap?dojo.html.displayMap[tag]:"block");
 }
 };
-dojo.html.setDisplay=function(node,_22d){
-dojo.html.setStyle(node,"display",((_22d instanceof String||typeof _22d=="string")?_22d:(_22d?dojo.html.suggestDisplayByTagName(node):"none")));
+dojo.html.setDisplay=function(node,_231){
+dojo.html.setStyle(node,"display",((_231 instanceof String||typeof _231=="string")?_231:(_231?dojo.html.suggestDisplayByTagName(node):"none")));
 };
 dojo.html.isDisplayed=function(node){
 return (dojo.html.getComputedStyle(node,"display")!="none");
@@ -60621,8 +40679,8 @@
 dojo.html.toggleDisplay=function(node){
 return dojo.html._toggle(node,dojo.html.isDisplayed,dojo.html.setDisplay);
 };
-dojo.html.setVisibility=function(node,_231){
-dojo.html.setStyle(node,"visibility",((_231 instanceof String||typeof _231=="string")?_231:(_231?"visible":"hidden")));
+dojo.html.setVisibility=function(node,_235){
+dojo.html.setStyle(node,"visibility",((_235 instanceof String||typeof _235=="string")?_235:(_235?"visible":"hidden")));
 };
 dojo.html.isVisible=function(node){
 return (dojo.html.getComputedStyle(node,"visibility")!="hidden");
@@ -60630,20 +40688,20 @@
 dojo.html.toggleVisibility=function(node){
 return dojo.html._toggle(node,dojo.html.isVisible,dojo.html.setVisibility);
 };
-dojo.html.setOpacity=function(node,_235,_236){
+dojo.html.setOpacity=function(node,_239,_23a){
 node=dojo.byId(node);
 var h=dojo.render.html;
-if(!_236){
-if(_235>=1){
+if(!_23a){
+if(_239>=1){
 if(h.ie){
 dojo.html.clearOpacity(node);
 return;
 }else{
-_235=0.999999;
+_239=0.999999;
 }
 }else{
-if(_235<0){
-_235=0;
+if(_239<0){
+_239=0;
 }
 }
 }
@@ -60651,20 +40709,20 @@
 if(node.nodeName.toLowerCase()=="tr"){
 var tds=node.getElementsByTagName("td");
 for(var x=0;x<tds.length;x++){
-tds[x].style.filter="Alpha(Opacity="+_235*100+")";
+tds[x].style.filter="Alpha(Opacity="+_239*100+")";
 }
 }
-node.style.filter="Alpha(Opacity="+_235*100+")";
+node.style.filter="Alpha(Opacity="+_239*100+")";
 }else{
 if(h.moz){
-node.style.opacity=_235;
-node.style.MozOpacity=_235;
+node.style.opacity=_239;
+node.style.MozOpacity=_239;
 }else{
 if(h.safari){
-node.style.opacity=_235;
-node.style.KhtmlOpacity=_235;
+node.style.opacity=_239;
+node.style.KhtmlOpacity=_239;
 }else{
-node.style.opacity=_235;
+node.style.opacity=_239;
 }
 }
 }
@@ -60711,73 +40769,73 @@
 if(!node){
 return 0;
 }
-var _242=0;
+var _246=0;
 while(node){
 if(dojo.html.getComputedStyle(node,"position")=="fixed"){
 return 0;
 }
 var val=node[prop];
 if(val){
-_242+=val-0;
+_246+=val-0;
 if(node==dojo.body()){
 break;
 }
 }
 node=node.parentNode;
 }
-return _242;
+return _246;
 };
-dojo.html.setStyleAttributes=function(node,_245){
+dojo.html.setStyleAttributes=function(node,_249){
 node=dojo.byId(node);
-var _246=_245.replace(/(;)?\s*$/,"").split(";");
-for(var i=0;i<_246.length;i++){
-var _248=_246[i].split(":");
-var name=_248[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
-var _24a=_248[1].replace(/\s*$/,"").replace(/^\s*/,"");
+var _24a=_249.replace(/(;)?\s*$/,"").split(";");
+for(var i=0;i<_24a.length;i++){
+var _24c=_24a[i].split(":");
+var name=_24c[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
+var _24e=_24c[1].replace(/\s*$/,"").replace(/^\s*/,"");
 switch(name){
 case "opacity":
-dojo.html.setOpacity(node,_24a);
+dojo.html.setOpacity(node,_24e);
 break;
 case "content-height":
-dojo.html.setContentBox(node,{height:_24a});
+dojo.html.setContentBox(node,{height:_24e});
 break;
 case "content-width":
-dojo.html.setContentBox(node,{width:_24a});
+dojo.html.setContentBox(node,{width:_24e});
 break;
 case "outer-height":
-dojo.html.setMarginBox(node,{height:_24a});
+dojo.html.setMarginBox(node,{height:_24e});
 break;
 case "outer-width":
-dojo.html.setMarginBox(node,{width:_24a});
+dojo.html.setMarginBox(node,{width:_24e});
 break;
 default:
-node.style[dojo.html.toCamelCase(name)]=_24a;
+node.style[dojo.html.toCamelCase(name)]=_24e;
 }
 }
 };
 dojo.html.boxSizing={MARGIN_BOX:"margin-box",BORDER_BOX:"border-box",PADDING_BOX:"padding-box",CONTENT_BOX:"content-box"};
-dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_24c,_24d){
+dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_250,_251){
 node=dojo.byId(node,node.ownerDocument);
 var ret={x:0,y:0};
 var bs=dojo.html.boxSizing;
-if(!_24d){
-_24d=bs.CONTENT_BOX;
+if(!_251){
+_251=bs.CONTENT_BOX;
 }
-var _250=2;
-var _251;
-switch(_24d){
+var _254=2;
+var _255;
+switch(_251){
 case bs.MARGIN_BOX:
-_251=3;
+_255=3;
 break;
 case bs.BORDER_BOX:
-_251=2;
+_255=2;
 break;
 case bs.PADDING_BOX:
 default:
-_251=1;
+_255=1;
 break;
 case bs.CONTENT_BOX:
-_251=0;
+_255=0;
 break;
 }
 var h=dojo.render.html;
@@ -60789,7 +40847,7 @@
 }
 }else{
 if(document.getBoxObjectFor){
-_250=1;
+_254=1;
 try{
 var bo=document.getBoxObjectFor(node);
 ret.x=bo.x-dojo.html.sumAncestorProperties(node,"scrollLeft");
@@ -60799,11 +40857,11 @@
 }
 }else{
 if(node["offsetParent"]){
-var _255;
+var _259;
 if((h.safari)&&(node.style.getPropertyValue("position")=="absolute")&&(node.parentNode==db)){
-_255=db;
+_259=db;
 }else{
-_255=db.parentNode;
+_259=db.parentNode;
 }
 if(node.parentNode!=db){
 var nd=node;
@@ -60813,16 +40871,16 @@
 ret.x-=dojo.html.sumAncestorProperties(nd,"scrollLeft");
 ret.y-=dojo.html.sumAncestorProperties(nd,"scrollTop");
 }
-var _257=node;
+var _25b=node;
 do{
-var n=_257["offsetLeft"];
+var n=_25b["offsetLeft"];
 if(!h.opera||n>0){
 ret.x+=isNaN(n)?0:n;
 }
-var m=_257["offsetTop"];
+var m=_25b["offsetTop"];
 ret.y+=isNaN(m)?0:m;
-_257=_257.offsetParent;
-}while((_257!=_255)&&(_257!=null));
+_25b=_25b.offsetParent;
+}while((_25b!=_259)&&(_25b!=null));
 }else{
 if(node["x"]&&node["y"]){
 ret.x+=isNaN(node.x)?0:node.x;
@@ -60831,22 +40889,22 @@
 }
 }
 }
-if(_24c){
-var _25a=dojo.html.getScroll();
-ret.y+=_25a.top;
-ret.x+=_25a.left;
+if(_250){
+var _25e=dojo.html.getScroll();
+ret.y+=_25e.top;
+ret.x+=_25e.left;
 }
-var _25b=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
-if(_250>_251){
-for(var i=_251;i<_250;++i){
-ret.y+=_25b[i](node,"top");
-ret.x+=_25b[i](node,"left");
+var _25f=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
+if(_254>_255){
+for(var i=_255;i<_254;++i){
+ret.y+=_25f[i](node,"top");
+ret.x+=_25f[i](node,"left");
 }
 }else{
-if(_250<_251){
-for(var i=_251;i>_250;--i){
-ret.y-=_25b[i-1](node,"top");
-ret.x-=_25b[i-1](node,"left");
+if(_254<_255){
+for(var i=_255;i>_254;--i){
+ret.y-=_25f[i-1](node,"top");
+ret.x-=_25f[i-1](node,"left");
 }
 }
 }
@@ -60857,12 +40915,12 @@
 dojo.html.isPositionAbsolute=function(node){
 return (dojo.html.getComputedStyle(node,"position")=="absolute");
 };
-dojo.html._sumPixelValues=function(node,_25f,_260){
-var _261=0;
-for(var x=0;x<_25f.length;x++){
-_261+=dojo.html.getPixelValue(node,_25f[x],_260);
+dojo.html._sumPixelValues=function(node,_263,_264){
+var _265=0;
+for(var x=0;x<_263.length;x++){
+_265+=dojo.html.getPixelValue(node,_263[x],_264);
 }
-return _261;
+return _265;
 };
 dojo.html.getMargin=function(node){
 return {width:dojo.html._sumPixelValues(node,["margin-left","margin-right"],(dojo.html.getComputedStyle(node,"position")=="absolute")),height:dojo.html._sumPixelValues(node,["margin-top","margin-bottom"],(dojo.html.getComputedStyle(node,"position")=="absolute"))};
@@ -60884,13 +40942,13 @@
 };
 dojo.html.getPadBorder=function(node){
 var pad=dojo.html.getPadding(node);
-var _26e=dojo.html.getBorder(node);
-return {width:pad.width+_26e.width,height:pad.height+_26e.height};
+var _272=dojo.html.getBorder(node);
+return {width:pad.width+_272.width,height:pad.height+_272.height};
 };
 dojo.html.getBoxSizing=function(node){
 var h=dojo.render.html;
 var bs=dojo.html.boxSizing;
-if(((h.ie)||(h.opera))&&node.nodeName!="IMG"){
+if(((h.ie)||(h.opera))&&node.nodeName.toLowerCase()!="img"){
 var cm=document["compatMode"];
 if((cm=="BackCompat")||(cm=="QuirksMode")){
 return bs.BORDER_BOX;
@@ -60901,12 +40959,15 @@
 if(arguments.length==0){
 node=document.documentElement;
 }
-var _273=dojo.html.getStyle(node,"-moz-box-sizing");
-if(!_273){
-_273=dojo.html.getStyle(node,"box-sizing");
+var _277;
+if(!h.ie){
+_277=dojo.html.getStyle(node,"-moz-box-sizing");
+if(!_277){
+_277=dojo.html.getStyle(node,"box-sizing");
 }
-return (_273?_273:bs.CONTENT_BOX);
 }
+return (_277?_277:bs.CONTENT_BOX);
+}
 };
 dojo.html.isBorderBox=function(node){
 return (dojo.html.getBoxSizing(node)==dojo.html.boxSizing.BORDER_BOX);
@@ -60917,53 +40978,53 @@
 };
 dojo.html.getPaddingBox=function(node){
 var box=dojo.html.getBorderBox(node);
-var _278=dojo.html.getBorder(node);
-return {width:box.width-_278.width,height:box.height-_278.height};
+var _27c=dojo.html.getBorder(node);
+return {width:box.width-_27c.width,height:box.height-_27c.height};
 };
 dojo.html.getContentBox=function(node){
 node=dojo.byId(node);
-var _27a=dojo.html.getPadBorder(node);
-return {width:node.offsetWidth-_27a.width,height:node.offsetHeight-_27a.height};
+var _27e=dojo.html.getPadBorder(node);
+return {width:node.offsetWidth-_27e.width,height:node.offsetHeight-_27e.height};
 };
 dojo.html.setContentBox=function(node,args){
 node=dojo.byId(node);
-var _27d=0;
-var _27e=0;
+var _281=0;
+var _282=0;
 var isbb=dojo.html.isBorderBox(node);
-var _280=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
+var _284=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
 var ret={};
 if(typeof args.width!="undefined"){
-_27d=args.width+_280.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_27d);
+_281=args.width+_284.width;
+ret.width=dojo.html.setPositivePixelValue(node,"width",_281);
 }
 if(typeof args.height!="undefined"){
-_27e=args.height+_280.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_27e);
+_282=args.height+_284.height;
+ret.height=dojo.html.setPositivePixelValue(node,"height",_282);
 }
 return ret;
 };
 dojo.html.getMarginBox=function(node){
-var _283=dojo.html.getBorderBox(node);
-var _284=dojo.html.getMargin(node);
-return {width:_283.width+_284.width,height:_283.height+_284.height};
+var _287=dojo.html.getBorderBox(node);
+var _288=dojo.html.getMargin(node);
+return {width:_287.width+_288.width,height:_287.height+_288.height};
 };
 dojo.html.setMarginBox=function(node,args){
 node=dojo.byId(node);
-var _287=0;
-var _288=0;
+var _28b=0;
+var _28c=0;
 var isbb=dojo.html.isBorderBox(node);
-var _28a=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
-var _28b=dojo.html.getMargin(node);
+var _28e=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
+var _28f=dojo.html.getMargin(node);
 var ret={};
 if(typeof args.width!="undefined"){
-_287=args.width-_28a.width;
-_287-=_28b.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_287);
+_28b=args.width-_28e.width;
+_28b-=_28f.width;
+ret.width=dojo.html.setPositivePixelValue(node,"width",_28b);
 }
 if(typeof args.height!="undefined"){
-_288=args.height-_28a.height;
-_288-=_28b.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_288);
+_28c=args.height-_28e.height;
+_28c-=_28f.height;
+ret.height=dojo.html.setPositivePixelValue(node,"height",_28c);
 }
 return ret;
 };
@@ -60981,31 +41042,31 @@
 return dojo.html.getContentBox(node);
 }
 };
-dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_290,_291,_292){
-if(_290 instanceof Array||typeof _290=="array"){
+dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_294,_295,_296){
+if(_294 instanceof Array||typeof _294=="array"){
 dojo.deprecated("dojo.html.toCoordinateArray","use dojo.html.toCoordinateObject({left: , top: , width: , height: }) instead","0.5");
-while(_290.length<4){
-_290.push(0);
+while(_294.length<4){
+_294.push(0);
 }
-while(_290.length>4){
-_290.pop();
+while(_294.length>4){
+_294.pop();
 }
-var ret={left:_290[0],top:_290[1],width:_290[2],height:_290[3]};
+var ret={left:_294[0],top:_294[1],width:_294[2],height:_294[3]};
 }else{
-if(!_290.nodeType&&!(_290 instanceof String||typeof _290=="string")&&("width" in _290||"height" in _290||"left" in _290||"x" in _290||"top" in _290||"y" in _290)){
-var ret={left:_290.left||_290.x||0,top:_290.top||_290.y||0,width:_290.width||0,height:_290.height||0};
+if(!_294.nodeType&&!(_294 instanceof String||typeof _294=="string")&&("width" in _294||"height" in _294||"left" in _294||"x" in _294||"top" in _294||"y" in _294)){
+var ret={left:_294.left||_294.x||0,top:_294.top||_294.y||0,width:_294.width||0,height:_294.height||0};
 }else{
-var node=dojo.byId(_290);
-var pos=dojo.html.abs(node,_291,_292);
-var _296=dojo.html.getMarginBox(node);
-var ret={left:pos.left,top:pos.top,width:_296.width,height:_296.height};
+var node=dojo.byId(_294);
+var pos=dojo.html.abs(node,_295,_296);
+var _29a=dojo.html.getMarginBox(node);
+var ret={left:pos.left,top:pos.top,width:_29a.width,height:_29a.height};
 }
 }
 ret.x=ret.left;
 ret.y=ret.top;
 return ret;
 };
-dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_298){
+dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_29c){
 return dojo.html._callDeprecated("setMarginBoxWidth","setMarginBox",arguments,"width");
 };
 dojo.html.setMarginBoxHeight=dojo.html.setOuterHeight=function(){
@@ -61017,19 +41078,19 @@
 dojo.html.getMarginBoxHeight=dojo.html.getOuterHeight=function(){
 return dojo.html._callDeprecated("getMarginBoxHeight","getMarginBox",arguments,null,"height");
 };
-dojo.html.getTotalOffset=function(node,type,_29b){
+dojo.html.getTotalOffset=function(node,type,_29f){
 return dojo.html._callDeprecated("getTotalOffset","getAbsolutePosition",arguments,null,type);
 };
-dojo.html.getAbsoluteX=function(node,_29d){
+dojo.html.getAbsoluteX=function(node,_2a1){
 return dojo.html._callDeprecated("getAbsoluteX","getAbsolutePosition",arguments,null,"x");
 };
-dojo.html.getAbsoluteY=function(node,_29f){
+dojo.html.getAbsoluteY=function(node,_2a3){
 return dojo.html._callDeprecated("getAbsoluteY","getAbsolutePosition",arguments,null,"y");
 };
-dojo.html.totalOffsetLeft=function(node,_2a1){
+dojo.html.totalOffsetLeft=function(node,_2a5){
 return dojo.html._callDeprecated("totalOffsetLeft","getAbsolutePosition",arguments,null,"left");
 };
-dojo.html.totalOffsetTop=function(node,_2a3){
+dojo.html.totalOffsetTop=function(node,_2a7){
 return dojo.html._callDeprecated("totalOffsetTop","getAbsolutePosition",arguments,null,"top");
 };
 dojo.html.getMarginWidth=function(node){
@@ -61068,15 +41129,15 @@
 dojo.html.getContentBoxHeight=dojo.html.getContentHeight=function(){
 return dojo.html._callDeprecated("getContentBoxHeight","getContentBox",arguments,null,"height");
 };
-dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_2ad){
+dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_2b1){
 return dojo.html._callDeprecated("setContentBoxWidth","setContentBox",arguments,"width");
 };
-dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_2af){
+dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_2b3){
 return dojo.html._callDeprecated("setContentBoxHeight","setContentBox",arguments,"height");
 };
 dojo.provide("dojo.html.util");
-dojo.html.getElementWindow=function(_2b0){
-return dojo.html.getDocumentWindow(_2b0.ownerDocument);
+dojo.html.getElementWindow=function(_2b4){
+return dojo.html.getDocumentWindow(_2b4.ownerDocument);
 };
 dojo.html.getDocumentWindow=function(doc){
 if(dojo.render.html.safari&&!doc._parentWindow){
@@ -61098,49 +41159,49 @@
 };
 dojo.html.gravity=function(node,e){
 node=dojo.byId(node);
-var _2b8=dojo.html.getCursorPosition(e);
+var _2bc=dojo.html.getCursorPosition(e);
 with(dojo.html){
-var _2b9=getAbsolutePosition(node,true);
+var _2bd=getAbsolutePosition(node,true);
 var bb=getBorderBox(node);
-var _2bb=_2b9.x+(bb.width/2);
-var _2bc=_2b9.y+(bb.height/2);
+var _2bf=_2bd.x+(bb.width/2);
+var _2c0=_2bd.y+(bb.height/2);
 }
 with(dojo.html.gravity){
-return ((_2b8.x<_2bb?WEST:EAST)|(_2b8.y<_2bc?NORTH:SOUTH));
+return ((_2bc.x<_2bf?WEST:EAST)|(_2bc.y<_2c0?NORTH:SOUTH));
 }
 };
 dojo.html.gravity.NORTH=1;
 dojo.html.gravity.SOUTH=1<<1;
 dojo.html.gravity.EAST=1<<2;
 dojo.html.gravity.WEST=1<<3;
-dojo.html.overElement=function(_2bd,e){
-_2bd=dojo.byId(_2bd);
-var _2bf=dojo.html.getCursorPosition(e);
-var bb=dojo.html.getBorderBox(_2bd);
-var _2c1=dojo.html.getAbsolutePosition(_2bd,true,dojo.html.boxSizing.BORDER_BOX);
-var top=_2c1.y;
-var _2c3=top+bb.height;
-var left=_2c1.x;
-var _2c5=left+bb.width;
-return (_2bf.x>=left&&_2bf.x<=_2c5&&_2bf.y>=top&&_2bf.y<=_2c3);
+dojo.html.overElement=function(_2c1,e){
+_2c1=dojo.byId(_2c1);
+var _2c3=dojo.html.getCursorPosition(e);
+var bb=dojo.html.getBorderBox(_2c1);
+var _2c5=dojo.html.getAbsolutePosition(_2c1,true,dojo.html.boxSizing.BORDER_BOX);
+var top=_2c5.y;
+var _2c7=top+bb.height;
+var left=_2c5.x;
+var _2c9=left+bb.width;
+return (_2c3.x>=left&&_2c3.x<=_2c9&&_2c3.y>=top&&_2c3.y<=_2c7);
 };
 dojo.html.renderedTextContent=function(node){
 node=dojo.byId(node);
-var _2c7="";
+var _2cb="";
 if(node==null){
-return _2c7;
+return _2cb;
 }
 for(var i=0;i<node.childNodes.length;i++){
 switch(node.childNodes[i].nodeType){
 case 1:
 case 5:
-var _2c9="unknown";
+var _2cd="unknown";
 try{
-_2c9=dojo.html.getStyle(node.childNodes[i],"display");
+_2cd=dojo.html.getStyle(node.childNodes[i],"display");
 }
 catch(E){
 }
-switch(_2c9){
+switch(_2cd){
 case "block":
 case "list-item":
 case "run-in":
@@ -61153,17 +41214,17 @@
 case "table-column":
 case "table-cell":
 case "table-caption":
-_2c7+="\n";
-_2c7+=dojo.html.renderedTextContent(node.childNodes[i]);
-_2c7+="\n";
+_2cb+="\n";
+_2cb+=dojo.html.renderedTextContent(node.childNodes[i]);
+_2cb+="\n";
 break;
 case "none":
 break;
 default:
 if(node.childNodes[i].tagName&&node.childNodes[i].tagName.toLowerCase()=="br"){
-_2c7+="\n";
+_2cb+="\n";
 }else{
-_2c7+=dojo.html.renderedTextContent(node.childNodes[i]);
+_2cb+=dojo.html.renderedTextContent(node.childNodes[i]);
 }
 break;
 }
@@ -61172,19 +41233,19 @@
 case 2:
 case 4:
 var text=node.childNodes[i].nodeValue;
-var _2cb="unknown";
+var _2cf="unknown";
 try{
-_2cb=dojo.html.getStyle(node,"text-transform");
+_2cf=dojo.html.getStyle(node,"text-transform");
 }
 catch(E){
 }
-switch(_2cb){
+switch(_2cf){
 case "capitalize":
-var _2cc=text.split(" ");
-for(var i=0;i<_2cc.length;i++){
-_2cc[i]=_2cc[i].charAt(0).toUpperCase()+_2cc[i].substring(1);
+var _2d0=text.split(" ");
+for(var i=0;i<_2d0.length;i++){
+_2d0[i]=_2d0[i].charAt(0).toUpperCase()+_2d0[i].substring(1);
 }
-text=_2cc.join(" ");
+text=_2d0.join(" ");
 break;
 case "uppercase":
 text=text.toUpperCase();
@@ -61195,7 +41256,7 @@
 default:
 break;
 }
-switch(_2cb){
+switch(_2cf){
 case "nowrap":
 break;
 case "pre-wrap":
@@ -61206,18 +41267,18 @@
 break;
 default:
 text=text.replace(/\s+/," ");
-if(/\s$/.test(_2c7)){
+if(/\s$/.test(_2cb)){
 text.replace(/^\s/,"");
 }
 break;
 }
-_2c7+=text;
+_2cb+=text;
 break;
 default:
 break;
 }
 }
-return _2c7;
+return _2cb;
 };
 dojo.html.createNodesFromText=function(txt,trim){
 if(trim){
@@ -61226,18 +41287,18 @@
 var tn=dojo.doc().createElement("div");
 tn.style.visibility="hidden";
 dojo.body().appendChild(tn);
-var _2d0="none";
+var _2d4="none";
 if((/^<t[dh][\s\r\n>]/i).test(txt.replace(/^\s+/))){
 txt="<table><tbody><tr>"+txt+"</tr></tbody></table>";
-_2d0="cell";
+_2d4="cell";
 }else{
 if((/^<tr[\s\r\n>]/i).test(txt.replace(/^\s+/))){
 txt="<table><tbody>"+txt+"</tbody></table>";
-_2d0="row";
+_2d4="row";
 }else{
 if((/^<(thead|tbody|tfoot)[\s\r\n>]/i).test(txt.replace(/^\s+/))){
 txt="<table>"+txt+"</table>";
-_2d0="section";
+_2d4="section";
 }
 }
 }
@@ -61245,147 +41306,147 @@
 if(tn["normalize"]){
 tn.normalize();
 }
-var _2d1=null;
-switch(_2d0){
+var _2d5=null;
+switch(_2d4){
 case "cell":
-_2d1=tn.getElementsByTagName("tr")[0];
+_2d5=tn.getElementsByTagName("tr")[0];
 break;
 case "row":
-_2d1=tn.getElementsByTagName("tbody")[0];
+_2d5=tn.getElementsByTagName("tbody")[0];
 break;
 case "section":
-_2d1=tn.getElementsByTagName("table")[0];
+_2d5=tn.getElementsByTagName("table")[0];
 break;
 default:
-_2d1=tn;
+_2d5=tn;
 break;
 }
-var _2d2=[];
-for(var x=0;x<_2d1.childNodes.length;x++){
-_2d2.push(_2d1.childNodes[x].cloneNode(true));
+var _2d6=[];
+for(var x=0;x<_2d5.childNodes.length;x++){
+_2d6.push(_2d5.childNodes[x].cloneNode(true));
 }
 tn.style.display="none";
 dojo.html.destroyNode(tn);
-return _2d2;
+return _2d6;
 };
-dojo.html.placeOnScreen=function(node,_2d5,_2d6,_2d7,_2d8,_2d9,_2da){
-if(_2d5 instanceof Array||typeof _2d5=="array"){
-_2da=_2d9;
-_2d9=_2d8;
-_2d8=_2d7;
-_2d7=_2d6;
-_2d6=_2d5[1];
-_2d5=_2d5[0];
+dojo.html.placeOnScreen=function(node,_2d9,_2da,_2db,_2dc,_2dd,_2de){
+if(_2d9 instanceof Array||typeof _2d9=="array"){
+_2de=_2dd;
+_2dd=_2dc;
+_2dc=_2db;
+_2db=_2da;
+_2da=_2d9[1];
+_2d9=_2d9[0];
 }
-if(_2d9 instanceof String||typeof _2d9=="string"){
-_2d9=_2d9.split(",");
+if(_2dd instanceof String||typeof _2dd=="string"){
+_2dd=_2dd.split(",");
 }
-if(!isNaN(_2d7)){
-_2d7=[Number(_2d7),Number(_2d7)];
+if(!isNaN(_2db)){
+_2db=[Number(_2db),Number(_2db)];
 }else{
-if(!(_2d7 instanceof Array||typeof _2d7=="array")){
-_2d7=[0,0];
+if(!(_2db instanceof Array||typeof _2db=="array")){
+_2db=[0,0];
 }
 }
-var _2db=dojo.html.getScroll().offset;
+var _2df=dojo.html.getScroll().offset;
 var view=dojo.html.getViewport();
 node=dojo.byId(node);
-var _2dd=node.style.display;
+var _2e1=node.style.display;
 node.style.display="";
 var bb=dojo.html.getBorderBox(node);
 var w=bb.width;
 var h=bb.height;
-node.style.display=_2dd;
-if(!(_2d9 instanceof Array||typeof _2d9=="array")){
-_2d9=["TL"];
+node.style.display=_2e1;
+if(!(_2dd instanceof Array||typeof _2dd=="array")){
+_2dd=["TL"];
 }
-var _2e1,_2e2,_2e3=Infinity,_2e4;
-for(var _2e5=0;_2e5<_2d9.length;++_2e5){
-var _2e6=_2d9[_2e5];
-var _2e7=true;
-var tryX=_2d5-(_2e6.charAt(1)=="L"?0:w)+_2d7[0]*(_2e6.charAt(1)=="L"?1:-1);
-var tryY=_2d6-(_2e6.charAt(0)=="T"?0:h)+_2d7[1]*(_2e6.charAt(0)=="T"?1:-1);
-if(_2d8){
-tryX-=_2db.x;
-tryY-=_2db.y;
+var _2e5,_2e6,_2e7=Infinity,_2e8;
+for(var _2e9=0;_2e9<_2dd.length;++_2e9){
+var _2ea=_2dd[_2e9];
+var _2eb=true;
+var tryX=_2d9-(_2ea.charAt(1)=="L"?0:w)+_2db[0]*(_2ea.charAt(1)=="L"?1:-1);
+var tryY=_2da-(_2ea.charAt(0)=="T"?0:h)+_2db[1]*(_2ea.charAt(0)=="T"?1:-1);
+if(_2dc){
+tryX-=_2df.x;
+tryY-=_2df.y;
 }
 if(tryX<0){
 tryX=0;
-_2e7=false;
+_2eb=false;
 }
 if(tryY<0){
 tryY=0;
-_2e7=false;
+_2eb=false;
 }
 var x=tryX+w;
 if(x>view.width){
 x=view.width-w;
-_2e7=false;
+_2eb=false;
 }else{
 x=tryX;
 }
-x=Math.max(_2d7[0],x)+_2db.x;
+x=Math.max(_2db[0],x)+_2df.x;
 var y=tryY+h;
 if(y>view.height){
 y=view.height-h;
-_2e7=false;
+_2eb=false;
 }else{
 y=tryY;
 }
-y=Math.max(_2d7[1],y)+_2db.y;
-if(_2e7){
-_2e1=x;
-_2e2=y;
-_2e3=0;
-_2e4=_2e6;
+y=Math.max(_2db[1],y)+_2df.y;
+if(_2eb){
+_2e5=x;
+_2e6=y;
+_2e7=0;
+_2e8=_2ea;
 break;
 }else{
-var dist=Math.pow(x-tryX-_2db.x,2)+Math.pow(y-tryY-_2db.y,2);
-if(_2e3>dist){
-_2e3=dist;
-_2e1=x;
-_2e2=y;
-_2e4=_2e6;
+var dist=Math.pow(x-tryX-_2df.x,2)+Math.pow(y-tryY-_2df.y,2);
+if(_2e7>dist){
+_2e7=dist;
+_2e5=x;
+_2e6=y;
+_2e8=_2ea;
 }
 }
 }
-if(!_2da){
-node.style.left=_2e1+"px";
-node.style.top=_2e2+"px";
+if(!_2de){
+node.style.left=_2e5+"px";
+node.style.top=_2e6+"px";
 }
-return {left:_2e1,top:_2e2,x:_2e1,y:_2e2,dist:_2e3,corner:_2e4};
+return {left:_2e5,top:_2e6,x:_2e5,y:_2e6,dist:_2e7,corner:_2e8};
 };
-dojo.html.placeOnScreenPoint=function(node,_2ee,_2ef,_2f0,_2f1){
+dojo.html.placeOnScreenPoint=function(node,_2f2,_2f3,_2f4,_2f5){
 dojo.deprecated("dojo.html.placeOnScreenPoint","use dojo.html.placeOnScreen() instead","0.5");
-return dojo.html.placeOnScreen(node,_2ee,_2ef,_2f0,_2f1,["TL","TR","BL","BR"]);
+return dojo.html.placeOnScreen(node,_2f2,_2f3,_2f4,_2f5,["TL","TR","BL","BR"]);
 };
-dojo.html.placeOnScreenAroundElement=function(node,_2f3,_2f4,_2f5,_2f6,_2f7){
-var best,_2f9=Infinity;
-_2f3=dojo.byId(_2f3);
-var _2fa=_2f3.style.display;
-_2f3.style.display="";
-var mb=dojo.html.getElementBox(_2f3,_2f5);
-var _2fc=mb.width;
-var _2fd=mb.height;
-var _2fe=dojo.html.getAbsolutePosition(_2f3,true,_2f5);
-_2f3.style.display=_2fa;
-for(var _2ff in _2f6){
-var pos,_301,_302;
-var _303=_2f6[_2ff];
-_301=_2fe.x+(_2ff.charAt(1)=="L"?0:_2fc);
-_302=_2fe.y+(_2ff.charAt(0)=="T"?0:_2fd);
-pos=dojo.html.placeOnScreen(node,_301,_302,_2f4,true,_303,true);
+dojo.html.placeOnScreenAroundElement=function(node,_2f7,_2f8,_2f9,_2fa,_2fb){
+var best,_2fd=Infinity;
+_2f7=dojo.byId(_2f7);
+var _2fe=_2f7.style.display;
+_2f7.style.display="";
+var mb=dojo.html.getElementBox(_2f7,_2f9);
+var _300=mb.width;
+var _301=mb.height;
+var _302=dojo.html.getAbsolutePosition(_2f7,true,_2f9);
+_2f7.style.display=_2fe;
+for(var _303 in _2fa){
+var pos,_305,_306;
+var _307=_2fa[_303];
+_305=_302.x+(_303.charAt(1)=="L"?0:_300);
+_306=_302.y+(_303.charAt(0)=="T"?0:_301);
+pos=dojo.html.placeOnScreen(node,_305,_306,_2f8,true,_307,true);
 if(pos.dist==0){
 best=pos;
 break;
 }else{
-if(_2f9>pos.dist){
-_2f9=pos.dist;
+if(_2fd>pos.dist){
+_2fd=pos.dist;
 best=pos;
 }
 }
 }
-if(!_2f7){
+if(!_2fb){
 node.style.left=best.left+"px";
 node.style.top=best.top+"px";
 }
@@ -61403,14 +41464,14 @@
 if(dojo.render.html.mozilla){
 node.scrollIntoView(false);
 }else{
-var _305=node.parentNode;
-var _306=_305.scrollTop+dojo.html.getBorderBox(_305).height;
-var _307=node.offsetTop+dojo.html.getMarginBox(node).height;
-if(_306<_307){
-_305.scrollTop+=(_307-_306);
+var _309=node.parentNode;
+var _30a=_309.scrollTop+dojo.html.getBorderBox(_309).height;
+var _30b=node.offsetTop+dojo.html.getMarginBox(node).height;
+if(_30a<_30b){
+_309.scrollTop+=(_30b-_30a);
 }else{
-if(_305.scrollTop>node.offsetTop){
-_305.scrollTop-=(_305.scrollTop-node.offsetTop);
+if(_309.scrollTop>node.offsetTop){
+_309.scrollTop-=(_309.scrollTop-node.offsetTop);
 }
 }
 }
@@ -61427,142 +41488,138 @@
 },isEmpty:function(obj){
 if(dojo.lang.isObject(obj)){
 var tmp={};
-var _30c=0;
+var _310=0;
 for(var x in obj){
 if(obj[x]&&(!tmp[x])){
-_30c++;
+_310++;
 break;
 }
 }
-return _30c==0;
+return _310==0;
 }else{
 if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
 return obj.length==0;
 }
 }
-},map:function(arr,obj,_310){
-var _311=dojo.lang.isString(arr);
-if(_311){
+},map:function(arr,obj,_314){
+var _315=dojo.lang.isString(arr);
+if(_315){
 arr=arr.split("");
 }
-if(dojo.lang.isFunction(obj)&&(!_310)){
-_310=obj;
+if(dojo.lang.isFunction(obj)&&(!_314)){
+_314=obj;
 obj=dj_global;
 }else{
-if(dojo.lang.isFunction(obj)&&_310){
-var _312=obj;
-obj=_310;
-_310=_312;
+if(dojo.lang.isFunction(obj)&&_314){
+var _316=obj;
+obj=_314;
+_314=_316;
 }
 }
 if(Array.map){
-var _313=Array.map(arr,_310,obj);
+var _317=Array.map(arr,_314,obj);
 }else{
-var _313=[];
+var _317=[];
 for(var i=0;i<arr.length;++i){
-_313.push(_310.call(obj,arr[i]));
+_317.push(_314.call(obj,arr[i]));
 }
 }
-if(_311){
-return _313.join("");
+if(_315){
+return _317.join("");
 }else{
-return _313;
+return _317;
 }
-},reduce:function(arr,_316,obj,_318){
-var _319=_316;
-if(arguments.length==1){
-dojo.debug("dojo.lang.reduce called with too few arguments!");
-return false;
-}else{
+},reduce:function(arr,_31a,obj,_31c){
+var _31d=_31a;
 if(arguments.length==2){
-_318=_316;
-_319=arr.shift();
+_31c=_31a;
+_31d=arr[0];
+arr=arr.slice(1);
 }else{
-if(arguments.lenght==3){
+if(arguments.length==3){
 if(dojo.lang.isFunction(obj)){
-_318=obj;
+_31c=obj;
 obj=null;
 }
 }else{
 if(dojo.lang.isFunction(obj)){
-var tmp=_318;
-_318=obj;
+var tmp=_31c;
+_31c=obj;
 obj=tmp;
 }
 }
 }
-}
-var ob=obj?obj:dj_global;
+var ob=obj||dj_global;
 dojo.lang.map(arr,function(val){
-_319=_318.call(ob,_319,val);
+_31d=_31c.call(ob,_31d,val);
 });
-return _319;
-},forEach:function(_31d,_31e,_31f){
-if(dojo.lang.isString(_31d)){
-_31d=_31d.split("");
+return _31d;
+},forEach:function(_321,_322,_323){
+if(dojo.lang.isString(_321)){
+_321=_321.split("");
 }
 if(Array.forEach){
-Array.forEach(_31d,_31e,_31f);
+Array.forEach(_321,_322,_323);
 }else{
-if(!_31f){
-_31f=dj_global;
+if(!_323){
+_323=dj_global;
 }
-for(var i=0,l=_31d.length;i<l;i++){
-_31e.call(_31f,_31d[i],i,_31d);
+for(var i=0,l=_321.length;i<l;i++){
+_322.call(_323,_321[i],i,_321);
 }
 }
-},_everyOrSome:function(_322,arr,_324,_325){
+},_everyOrSome:function(_326,arr,_328,_329){
 if(dojo.lang.isString(arr)){
 arr=arr.split("");
 }
 if(Array.every){
-return Array[_322?"every":"some"](arr,_324,_325);
+return Array[_326?"every":"some"](arr,_328,_329);
 }else{
-if(!_325){
-_325=dj_global;
+if(!_329){
+_329=dj_global;
 }
 for(var i=0,l=arr.length;i<l;i++){
-var _328=_324.call(_325,arr[i],i,arr);
-if(_322&&!_328){
+var _32c=_328.call(_329,arr[i],i,arr);
+if(_326&&!_32c){
 return false;
 }else{
-if((!_322)&&(_328)){
+if((!_326)&&(_32c)){
 return true;
 }
 }
 }
-return Boolean(_322);
+return Boolean(_326);
 }
-},every:function(arr,_32a,_32b){
-return this._everyOrSome(true,arr,_32a,_32b);
-},some:function(arr,_32d,_32e){
-return this._everyOrSome(false,arr,_32d,_32e);
-},filter:function(arr,_330,_331){
-var _332=dojo.lang.isString(arr);
-if(_332){
+},every:function(arr,_32e,_32f){
+return this._everyOrSome(true,arr,_32e,_32f);
+},some:function(arr,_331,_332){
+return this._everyOrSome(false,arr,_331,_332);
+},filter:function(arr,_334,_335){
+var _336=dojo.lang.isString(arr);
+if(_336){
 arr=arr.split("");
 }
-var _333;
+var _337;
 if(Array.filter){
-_333=Array.filter(arr,_330,_331);
+_337=Array.filter(arr,_334,_335);
 }else{
-if(!_331){
+if(!_335){
 if(arguments.length>=3){
 dojo.raise("thisObject doesn't exist!");
 }
-_331=dj_global;
+_335=dj_global;
 }
-_333=[];
+_337=[];
 for(var i=0;i<arr.length;i++){
-if(_330.call(_331,arr[i],i,arr)){
-_333.push(arr[i]);
+if(_334.call(_335,arr[i],i,arr)){
+_337.push(arr[i]);
 }
 }
 }
-if(_332){
-return _333.join("");
+if(_336){
+return _337.join("");
 }else{
-return _333;
+return _337;
 }
 },unnest:function(){
 var out=[];
@@ -61575,12 +41632,12 @@
 }
 }
 return out;
-},toArray:function(_338,_339){
-var _33a=[];
-for(var i=_339||0;i<_338.length;i++){
-_33a.push(_338[i]);
+},toArray:function(_33c,_33d){
+var _33e=[];
+for(var i=_33d||0;i<_33c.length;i++){
+_33e.push(_33c[i]);
 }
-return _33a;
+return _33e;
 }});
 dojo.provide("dojo.gfx.color");
 dojo.gfx.color.Color=function(r,g,b,a){
@@ -61614,8 +41671,8 @@
 dojo.gfx.color.Color.fromArray=function(arr){
 return new dojo.gfx.color.Color(arr[0],arr[1],arr[2],arr[3]);
 };
-dojo.extend(dojo.gfx.color.Color,{toRgb:function(_342){
-if(_342){
+dojo.extend(dojo.gfx.color.Color,{toRgb:function(_346){
+if(_346){
 return this.toRgba();
 }else{
 return [this.r,this.g,this.b];
@@ -61628,62 +41685,62 @@
 return "rgb("+this.toRgb().join()+")";
 },toString:function(){
 return this.toHex();
-},blend:function(_343,_344){
+},blend:function(_347,_348){
 var rgb=null;
-if(dojo.lang.isArray(_343)){
-rgb=_343;
+if(dojo.lang.isArray(_347)){
+rgb=_347;
 }else{
-if(_343 instanceof dojo.gfx.color.Color){
-rgb=_343.toRgb();
+if(_347 instanceof dojo.gfx.color.Color){
+rgb=_347.toRgb();
 }else{
-rgb=new dojo.gfx.color.Color(_343).toRgb();
+rgb=new dojo.gfx.color.Color(_347).toRgb();
 }
 }
-return dojo.gfx.color.blend(this.toRgb(),rgb,_344);
+return dojo.gfx.color.blend(this.toRgb(),rgb,_348);
 }});
 dojo.gfx.color.named={white:[255,255,255],black:[0,0,0],red:[255,0,0],green:[0,255,0],lime:[0,255,0],blue:[0,0,255],navy:[0,0,128],gray:[128,128,128],silver:[192,192,192]};
-dojo.gfx.color.blend=function(a,b,_348){
+dojo.gfx.color.blend=function(a,b,_34c){
 if(typeof a=="string"){
-return dojo.gfx.color.blendHex(a,b,_348);
+return dojo.gfx.color.blendHex(a,b,_34c);
 }
-if(!_348){
-_348=0;
+if(!_34c){
+_34c=0;
 }
-_348=Math.min(Math.max(-1,_348),1);
-_348=((_348+1)/2);
+_34c=Math.min(Math.max(-1,_34c),1);
+_34c=((_34c+1)/2);
 var c=[];
 for(var x=0;x<3;x++){
-c[x]=parseInt(b[x]+((a[x]-b[x])*_348));
+c[x]=parseInt(b[x]+((a[x]-b[x])*_34c));
 }
 return c;
 };
-dojo.gfx.color.blendHex=function(a,b,_34d){
-return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_34d));
+dojo.gfx.color.blendHex=function(a,b,_351){
+return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_351));
 };
-dojo.gfx.color.extractRGB=function(_34e){
+dojo.gfx.color.extractRGB=function(_352){
 var hex="0123456789abcdef";
-_34e=_34e.toLowerCase();
-if(_34e.indexOf("rgb")==0){
-var _350=_34e.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-var ret=_350.splice(1,3);
+_352=_352.toLowerCase();
+if(_352.indexOf("rgb")==0){
+var _354=_352.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
+var ret=_354.splice(1,3);
 return ret;
 }else{
-var _352=dojo.gfx.color.hex2rgb(_34e);
-if(_352){
-return _352;
+var _356=dojo.gfx.color.hex2rgb(_352);
+if(_356){
+return _356;
 }else{
-return dojo.gfx.color.named[_34e]||[255,255,255];
+return dojo.gfx.color.named[_352]||[255,255,255];
 }
 }
 };
 dojo.gfx.color.hex2rgb=function(hex){
-var _354="0123456789ABCDEF";
+var _358="0123456789ABCDEF";
 var rgb=new Array(3);
 if(hex.indexOf("#")==0){
 hex=hex.substring(1);
 }
 hex=hex.toUpperCase();
-if(hex.replace(new RegExp("["+_354+"]","g"),"")!=""){
+if(hex.replace(new RegExp("["+_358+"]","g"),"")!=""){
 return null;
 }
 if(hex.length==3){
@@ -61696,7 +41753,7 @@
 rgb[2]=hex.substring(4);
 }
 for(var i=0;i<rgb.length;i++){
-rgb[i]=_354.indexOf(rgb[i].charAt(0))*16+_354.indexOf(rgb[i].charAt(1));
+rgb[i]=_358.indexOf(rgb[i].charAt(0))*16+_358.indexOf(rgb[i].charAt(1));
 }
 return rgb;
 };
@@ -61718,21 +41775,21 @@
 return ret.join("");
 };
 dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_35d,_35e){
-var fcn=(dojo.lang.isString(_35e)?_35d[_35e]:_35e)||function(){
+dojo.lang.hitch=function(_361,_362){
+var fcn=(dojo.lang.isString(_362)?_361[_362]:_362)||function(){
 };
 return function(){
-return fcn.apply(_35d,arguments);
+return fcn.apply(_361,arguments);
 };
 };
 dojo.lang.anonCtr=0;
 dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_360,_361,_362){
-var nso=(_361||dojo.lang.anon);
-if((_362)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
+dojo.lang.nameAnonFunc=function(_364,_365,_366){
+var nso=(_365||dojo.lang.anon);
+if((_366)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
 for(var x in nso){
 try{
-if(nso[x]===_360){
+if(nso[x]===_364){
 return x;
 }
 }
@@ -61744,50 +41801,50 @@
 while(typeof nso[ret]!="undefined"){
 ret="__"+dojo.lang.anonCtr++;
 }
-nso[ret]=_360;
+nso[ret]=_364;
 return ret;
 };
-dojo.lang.forward=function(_366){
+dojo.lang.forward=function(_36a){
 return function(){
-return this[_366].apply(this,arguments);
+return this[_36a].apply(this,arguments);
 };
 };
-dojo.lang.curry=function(_367,func){
-var _369=[];
-_367=_367||dj_global;
+dojo.lang.curry=function(_36b,func){
+var _36d=[];
+_36b=_36b||dj_global;
 if(dojo.lang.isString(func)){
-func=_367[func];
+func=_36b[func];
 }
 for(var x=2;x<arguments.length;x++){
-_369.push(arguments[x]);
+_36d.push(arguments[x]);
 }
-var _36b=(func["__preJoinArity"]||func.length)-_369.length;
-function gather(_36c,_36d,_36e){
-var _36f=_36e;
-var _370=_36d.slice(0);
-for(var x=0;x<_36c.length;x++){
-_370.push(_36c[x]);
+var _36f=(func["__preJoinArity"]||func.length)-_36d.length;
+function gather(_370,_371,_372){
+var _373=_372;
+var _374=_371.slice(0);
+for(var x=0;x<_370.length;x++){
+_374.push(_370[x]);
 }
-_36e=_36e-_36c.length;
-if(_36e<=0){
-var res=func.apply(_367,_370);
-_36e=_36f;
+_372=_372-_370.length;
+if(_372<=0){
+var res=func.apply(_36b,_374);
+_372=_373;
 return res;
 }else{
 return function(){
-return gather(arguments,_370,_36e);
+return gather(arguments,_374,_372);
 };
 }
 }
-return gather([],_369,_36b);
+return gather([],_36d,_36f);
 };
-dojo.lang.curryArguments=function(_373,func,args,_376){
-var _377=[];
-var x=_376||0;
-for(x=_376;x<args.length;x++){
-_377.push(args[x]);
+dojo.lang.curryArguments=function(_377,func,args,_37a){
+var _37b=[];
+var x=_37a||0;
+for(x=_37a;x<args.length;x++){
+_37b.push(args[x]);
 }
-return dojo.lang.curry.apply(dojo.lang,[_373,func].concat(_377));
+return dojo.lang.curry.apply(dojo.lang,[_377,func].concat(_37b));
 };
 dojo.lang.tryThese=function(){
 for(var x=0;x<arguments.length;x++){
@@ -61804,37 +41861,37 @@
 }
 }
 };
-dojo.lang.delayThese=function(farr,cb,_37d,_37e){
+dojo.lang.delayThese=function(farr,cb,_381,_382){
 if(!farr.length){
-if(typeof _37e=="function"){
-_37e();
+if(typeof _382=="function"){
+_382();
 }
 return;
 }
-if((typeof _37d=="undefined")&&(typeof cb=="number")){
-_37d=cb;
+if((typeof _381=="undefined")&&(typeof cb=="number")){
+_381=cb;
 cb=function(){
 };
 }else{
 if(!cb){
 cb=function(){
 };
-if(!_37d){
-_37d=0;
+if(!_381){
+_381=0;
 }
 }
 }
 setTimeout(function(){
 (farr.shift())();
 cb();
-dojo.lang.delayThese(farr,cb,_37d,_37e);
-},_37d);
+dojo.lang.delayThese(farr,cb,_381,_382);
+},_381);
 };
 dojo.provide("dojo.lfx.Animation");
-dojo.lfx.Line=function(_37f,end){
-this.start=_37f;
+dojo.lfx.Line=function(_383,end){
+this.start=_383;
 this.end=end;
-if(dojo.lang.isArray(_37f)){
+if(dojo.lang.isArray(_383)){
 var diff=[];
 dojo.lang.forEach(this.start,function(s,i){
 diff[i]=this.end[i]-s;
@@ -61847,19 +41904,21 @@
 return res;
 };
 }else{
-var diff=end-_37f;
+var diff=end-_383;
 this.getValue=function(n){
 return (diff*n)+this.start;
 };
 }
 };
+if((dojo.render.html.khtml)&&(!dojo.render.html.safari)){
 dojo.lfx.easeDefault=function(n){
-if(dojo.render.html.khtml){
 return (parseFloat("0.5")+((Math.sin((n+parseFloat("1.5"))*Math.PI))/2));
+};
 }else{
+dojo.lfx.easeDefault=function(n){
 return (0.5+((Math.sin((n+1.5)*Math.PI))/2));
-}
 };
+}
 dojo.lfx.easeIn=function(n){
 return Math.pow(n,3);
 };
@@ -61871,17 +41930,17 @@
 };
 dojo.lfx.IAnimation=function(){
 };
-dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:25,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,connect:function(evt,_38e,_38f){
-if(!_38f){
-_38f=_38e;
-_38e=this;
+dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:10,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,connect:function(evt,_393,_394){
+if(!_394){
+_394=_393;
+_393=this;
 }
-_38f=dojo.lang.hitch(_38e,_38f);
-var _390=this[evt]||function(){
+_394=dojo.lang.hitch(_393,_394);
+var _395=this[evt]||function(){
 };
 this[evt]=function(){
-var ret=_390.apply(this,arguments);
-_38f.apply(this,arguments);
+var ret=_395.apply(this,arguments);
+_394.apply(this,arguments);
 return ret;
 };
 return this;
@@ -61890,57 +41949,57 @@
 this[evt].apply(this,(args||[]));
 }
 return this;
-},repeat:function(_394){
-this.repeatCount=_394;
+},repeat:function(_399){
+this.repeatCount=_399;
 return this;
 },_active:false,_paused:false});
-dojo.lfx.Animation=function(_395,_396,_397,_398,_399,rate){
+dojo.lfx.Animation=function(_39a,_39b,_39c,_39d,_39e,rate){
 dojo.lfx.IAnimation.call(this);
-if(dojo.lang.isNumber(_395)||(!_395&&_396.getValue)){
-rate=_399;
-_399=_398;
-_398=_397;
-_397=_396;
-_396=_395;
-_395=null;
+if(dojo.lang.isNumber(_39a)||(!_39a&&_39b.getValue)){
+rate=_39e;
+_39e=_39d;
+_39d=_39c;
+_39c=_39b;
+_39b=_39a;
+_39a=null;
 }else{
-if(_395.getValue||dojo.lang.isArray(_395)){
-rate=_398;
-_399=_397;
-_398=_396;
-_397=_395;
-_396=null;
-_395=null;
+if(_39a.getValue||dojo.lang.isArray(_39a)){
+rate=_39d;
+_39e=_39c;
+_39d=_39b;
+_39c=_39a;
+_39b=null;
+_39a=null;
 }
 }
-if(dojo.lang.isArray(_397)){
-this.curve=new dojo.lfx.Line(_397[0],_397[1]);
+if(dojo.lang.isArray(_39c)){
+this.curve=new dojo.lfx.Line(_39c[0],_39c[1]);
 }else{
-this.curve=_397;
+this.curve=_39c;
 }
-if(_396!=null&&_396>0){
-this.duration=_396;
+if(_39b!=null&&_39b>0){
+this.duration=_39b;
 }
-if(_399){
-this.repeatCount=_399;
+if(_39e){
+this.repeatCount=_39e;
 }
 if(rate){
 this.rate=rate;
 }
-if(_395){
+if(_39a){
 dojo.lang.forEach(["handler","beforeBegin","onBegin","onEnd","onPlay","onStop","onAnimate"],function(item){
-if(_395[item]){
-this.connect(item,_395[item]);
+if(_39a[item]){
+this.connect(item,_39a[item]);
 }
 },this);
 }
-if(_398&&dojo.lang.isFunction(_398)){
-this.easing=_398;
+if(_39d&&dojo.lang.isFunction(_39d)){
+this.easing=_39d;
 }
 };
 dojo.inherits(dojo.lfx.Animation,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_39c,_39d){
-if(_39d){
+dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_3a1,_3a2){
+if(_3a2){
 clearTimeout(this._timer);
 this._active=false;
 this._paused=false;
@@ -61952,10 +42011,10 @@
 }
 this.fire("handler",["beforeBegin"]);
 this.fire("beforeBegin");
-if(_39c>0){
+if(_3a1>0){
 setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_39d);
-}),_39c);
+this.play(null,_3a2);
+}),_3a1);
 return this;
 }
 this._startTime=new Date().valueOf();
@@ -61966,16 +42025,16 @@
 this._active=true;
 this._paused=false;
 var step=this._percent/100;
-var _39f=this.curve.getValue(step);
+var _3a4=this.curve.getValue(step);
 if(this._percent==0){
 if(!this._startRepeatCount){
 this._startRepeatCount=this.repeatCount;
 }
-this.fire("handler",["begin",_39f]);
-this.fire("onBegin",[_39f]);
+this.fire("handler",["begin",_3a4]);
+this.fire("onBegin",[_3a4]);
 }
-this.fire("handler",["play",_39f]);
-this.fire("onPlay",[_39f]);
+this.fire("handler",["play",_3a4]);
+this.fire("onPlay",[_3a4]);
 this._cycle();
 return this;
 },pause:function(){
@@ -61984,28 +42043,28 @@
 return this;
 }
 this._paused=true;
-var _3a0=this.curve.getValue(this._percent/100);
-this.fire("handler",["pause",_3a0]);
-this.fire("onPause",[_3a0]);
+var _3a5=this.curve.getValue(this._percent/100);
+this.fire("handler",["pause",_3a5]);
+this.fire("onPause",[_3a5]);
 return this;
-},gotoPercent:function(pct,_3a2){
+},gotoPercent:function(pct,_3a7){
 clearTimeout(this._timer);
 this._active=true;
 this._paused=true;
 this._percent=pct;
-if(_3a2){
+if(_3a7){
 this.play();
 }
 return this;
-},stop:function(_3a3){
+},stop:function(_3a8){
 clearTimeout(this._timer);
 var step=this._percent/100;
-if(_3a3){
+if(_3a8){
 step=1;
 }
-var _3a5=this.curve.getValue(step);
-this.fire("handler",["stop",_3a5]);
-this.fire("onStop",[_3a5]);
+var _3aa=this.curve.getValue(step);
+this.fire("handler",["stop",_3aa]);
+this.fire("onStop",[_3aa]);
 this._active=false;
 this._paused=false;
 return this;
@@ -62030,9 +42089,9 @@
 if((this.easing)&&(dojo.lang.isFunction(this.easing))){
 step=this.easing(step);
 }
-var _3a8=this.curve.getValue(step);
-this.fire("handler",["animate",_3a8]);
-this.fire("onAnimate",[_3a8]);
+var _3ad=this.curve.getValue(step);
+this.fire("handler",["animate",_3ad]);
+this.fire("onAnimate",[_3ad]);
 if(step<1){
 this._timer=setTimeout(dojo.lang.hitch(this,"_cycle"),this.rate);
 }else{
@@ -62056,44 +42115,44 @@
 }
 return this;
 }});
-dojo.lfx.Combine=function(_3a9){
+dojo.lfx.Combine=function(_3ae){
 dojo.lfx.IAnimation.call(this);
 this._anims=[];
 this._animsEnded=0;
-var _3aa=arguments;
-if(_3aa.length==1&&(dojo.lang.isArray(_3aa[0])||dojo.lang.isArrayLike(_3aa[0]))){
-_3aa=_3aa[0];
+var _3af=arguments;
+if(_3af.length==1&&(dojo.lang.isArray(_3af[0])||dojo.lang.isArrayLike(_3af[0]))){
+_3af=_3af[0];
 }
-dojo.lang.forEach(_3aa,function(anim){
+dojo.lang.forEach(_3af,function(anim){
 this._anims.push(anim);
 anim.connect("onEnd",dojo.lang.hitch(this,"_onAnimsEnded"));
 },this);
 };
 dojo.inherits(dojo.lfx.Combine,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_3ac,_3ad){
+dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_3b1,_3b2){
 if(!this._anims.length){
 return this;
 }
 this.fire("beforeBegin");
-if(_3ac>0){
+if(_3b1>0){
 setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_3ad);
-}),_3ac);
+this.play(null,_3b2);
+}),_3b1);
 return this;
 }
-if(_3ad||this._anims[0].percent==0){
+if(_3b2||this._anims[0].percent==0){
 this.fire("onBegin");
 }
 this.fire("onPlay");
-this._animsCall("play",null,_3ad);
+this._animsCall("play",null,_3b2);
 return this;
 },pause:function(){
 this.fire("onPause");
 this._animsCall("pause");
 return this;
-},stop:function(_3ae){
+},stop:function(_3b3){
 this.fire("onStop");
-this._animsCall("stop",_3ae);
+this._animsCall("stop",_3b3);
 return this;
 },_onAnimsEnded:function(){
 this._animsEnded++;
@@ -62101,31 +42160,31 @@
 this.fire("onEnd");
 }
 return this;
-},_animsCall:function(_3af){
+},_animsCall:function(_3b4){
 var args=[];
 if(arguments.length>1){
 for(var i=1;i<arguments.length;i++){
 args.push(arguments[i]);
 }
 }
-var _3b2=this;
+var _3b7=this;
 dojo.lang.forEach(this._anims,function(anim){
-anim[_3af](args);
-},_3b2);
+anim[_3b4](args);
+},_3b7);
 return this;
 }});
-dojo.lfx.Chain=function(_3b4){
+dojo.lfx.Chain=function(_3b9){
 dojo.lfx.IAnimation.call(this);
 this._anims=[];
 this._currAnim=-1;
-var _3b5=arguments;
-if(_3b5.length==1&&(dojo.lang.isArray(_3b5[0])||dojo.lang.isArrayLike(_3b5[0]))){
-_3b5=_3b5[0];
+var _3ba=arguments;
+if(_3ba.length==1&&(dojo.lang.isArray(_3ba[0])||dojo.lang.isArrayLike(_3ba[0]))){
+_3ba=_3ba[0];
 }
-var _3b6=this;
-dojo.lang.forEach(_3b5,function(anim,i,_3b9){
+var _3bb=this;
+dojo.lang.forEach(_3ba,function(anim,i,_3be){
 this._anims.push(anim);
-if(i<_3b9.length-1){
+if(i<_3be.length-1){
 anim.connect("onEnd",dojo.lang.hitch(this,"_playNext"));
 }else{
 anim.connect("onEnd",dojo.lang.hitch(this,function(){
@@ -62135,28 +42194,28 @@
 },this);
 };
 dojo.inherits(dojo.lfx.Chain,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_3ba,_3bb){
+dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_3bf,_3c0){
 if(!this._anims.length){
 return this;
 }
-if(_3bb||!this._anims[this._currAnim]){
+if(_3c0||!this._anims[this._currAnim]){
 this._currAnim=0;
 }
-var _3bc=this._anims[this._currAnim];
+var _3c1=this._anims[this._currAnim];
 this.fire("beforeBegin");
-if(_3ba>0){
+if(_3bf>0){
 setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_3bb);
-}),_3ba);
+this.play(null,_3c0);
+}),_3bf);
 return this;
 }
-if(_3bc){
+if(_3c1){
 if(this._currAnim==0){
 this.fire("handler",["begin",this._currAnim]);
 this.fire("onBegin",[this._currAnim]);
 }
 this.fire("onPlay",[this._currAnim]);
-_3bc.play(null,_3bb);
+_3c1.play(null,_3c0);
 }
 return this;
 },pause:function(){
@@ -62172,9 +42231,9 @@
 if(this._currAnim==-1){
 this._currAnim=0;
 }
-var _3bd=this._anims[this._currAnim];
-if(_3bd){
-if(!_3bd._active||_3bd._paused){
+var _3c2=this._anims[this._currAnim];
+if(_3c2){
+if(!_3c2._active||_3c2._paused){
 this.play();
 }else{
 this.pause();
@@ -62182,12 +42241,12 @@
 }
 return this;
 },stop:function(){
-var _3be=this._anims[this._currAnim];
-if(_3be){
-_3be.stop();
+var _3c3=this._anims[this._currAnim];
+if(_3c3){
+_3c3.stop();
 this.fire("onStop",[this._currAnim]);
 }
-return _3be;
+return _3c3;
 },_playNext:function(){
 if(this._currAnim==-1||this._anims.length==0){
 return this;
@@ -62198,82 +42257,82 @@
 }
 return this;
 }});
-dojo.lfx.combine=function(_3bf){
-var _3c0=arguments;
+dojo.lfx.combine=function(_3c4){
+var _3c5=arguments;
 if(dojo.lang.isArray(arguments[0])){
-_3c0=arguments[0];
+_3c5=arguments[0];
 }
-if(_3c0.length==1){
-return _3c0[0];
+if(_3c5.length==1){
+return _3c5[0];
 }
-return new dojo.lfx.Combine(_3c0);
+return new dojo.lfx.Combine(_3c5);
 };
-dojo.lfx.chain=function(_3c1){
-var _3c2=arguments;
+dojo.lfx.chain=function(_3c6){
+var _3c7=arguments;
 if(dojo.lang.isArray(arguments[0])){
-_3c2=arguments[0];
+_3c7=arguments[0];
 }
-if(_3c2.length==1){
-return _3c2[0];
+if(_3c7.length==1){
+return _3c7[0];
 }
-return new dojo.lfx.Chain(_3c2);
+return new dojo.lfx.Chain(_3c7);
 };
 dojo.provide("dojo.html.color");
 dojo.html.getBackgroundColor=function(node){
 node=dojo.byId(node);
-var _3c4;
+var _3c9;
 do{
-_3c4=dojo.html.getStyle(node,"background-color");
-if(_3c4.toLowerCase()=="rgba(0, 0, 0, 0)"){
-_3c4="transparent";
+_3c9=dojo.html.getStyle(node,"background-color");
+if(_3c9.toLowerCase()=="rgba(0, 0, 0, 0)"){
+_3c9="transparent";
 }
 if(node==document.getElementsByTagName("body")[0]){
 node=null;
 break;
 }
 node=node.parentNode;
-}while(node&&dojo.lang.inArray(["transparent",""],_3c4));
-if(_3c4=="transparent"){
-_3c4=[255,255,255,0];
+}while(node&&dojo.lang.inArray(["transparent",""],_3c9));
+if(_3c9=="transparent"){
+_3c9=[255,255,255,0];
 }else{
-_3c4=dojo.gfx.color.extractRGB(_3c4);
+_3c9=dojo.gfx.color.extractRGB(_3c9);
 }
-return _3c4;
+return _3c9;
 };
 dojo.provide("dojo.lfx.html");
-dojo.lfx.html._byId=function(_3c5){
-if(!_3c5){
+dojo.lfx.html._byId=function(_3ca){
+if(!_3ca){
 return [];
 }
-if(dojo.lang.isArrayLike(_3c5)){
-if(!_3c5.alreadyChecked){
+if(dojo.lang.isArrayLike(_3ca)){
+if(!_3ca.alreadyChecked){
 var n=[];
-dojo.lang.forEach(_3c5,function(node){
+dojo.lang.forEach(_3ca,function(node){
 n.push(dojo.byId(node));
 });
 n.alreadyChecked=true;
 return n;
 }else{
-return _3c5;
+return _3ca;
 }
 }else{
 var n=[];
-n.push(dojo.byId(_3c5));
+n.push(dojo.byId(_3ca));
 n.alreadyChecked=true;
 return n;
 }
 };
-dojo.lfx.html.propertyAnimation=function(_3c8,_3c9,_3ca,_3cb,_3cc){
-_3c8=dojo.lfx.html._byId(_3c8);
-var _3cd={"propertyMap":_3c9,"nodes":_3c8,"duration":_3ca,"easing":_3cb||dojo.lfx.easeDefault};
-var _3ce=function(args){
+dojo.lfx.html.propertyAnimation=function(_3cd,_3ce,_3cf,_3d0,_3d1){
+_3cd=dojo.lfx.html._byId(_3cd);
+var _3d2={"propertyMap":_3ce,"nodes":_3cd,"duration":_3cf,"easing":_3d0||dojo.lfx.easeDefault};
+var _3d3=function(args){
 if(args.nodes.length==1){
 var pm=args.propertyMap;
 if(!dojo.lang.isArray(args.propertyMap)){
 var parr=[];
-for(var _3d2 in pm){
-pm[_3d2].property=_3d2;
-parr.push(pm[_3d2]);
+for(var _3d7 in pm){
+pm[_3d7].property=_3d7;
+parr.push(pm[_3d7]);
 }
 pm=args.propertyMap=parr;
 }
@@ -62288,24 +42347,24 @@
 });
 }
 };
-var _3d4=function(_3d5){
-var _3d6=[];
-dojo.lang.forEach(_3d5,function(c){
-_3d6.push(Math.round(c));
+var _3d9=function(_3da){
+var _3db=[];
+dojo.lang.forEach(_3da,function(c){
+_3db.push(Math.round(c));
 });
-return _3d6;
+return _3db;
 };
-var _3d8=function(n,_3da){
+var _3dd=function(n,_3df){
 n=dojo.byId(n);
 if(!n||!n.style){
 return;
 }
-for(var s in _3da){
+for(var s in _3df){
 try{
 if(s=="opacity"){
-dojo.html.setOpacity(n,_3da[s]);
+dojo.html.setOpacity(n,_3df[s]);
 }else{
-n.style[s]=_3da[s];
+n.style[s]=_3df[s];
 }
 }
 catch(e){
@@ -62313,10 +42372,10 @@
 }
 }
 };
-var _3dc=function(_3dd){
-this._properties=_3dd;
-this.diffs=new Array(_3dd.length);
-dojo.lang.forEach(_3dd,function(prop,i){
+var _3e1=function(_3e2){
+this._properties=_3e2;
+this.diffs=new Array(_3e2.length);
+dojo.lang.forEach(_3e2,function(prop,i){
 if(dojo.lang.isFunction(prop.start)){
 prop.start=prop.start(prop,i);
 }
@@ -62337,43 +42396,43 @@
 this.getValue=function(n){
 var ret={};
 dojo.lang.forEach(this._properties,function(prop,i){
-var _3e4=null;
+var _3e9=null;
 if(dojo.lang.isArray(prop.start)){
 }else{
 if(prop.start instanceof dojo.gfx.color.Color){
-_3e4=(prop.units||"rgb")+"(";
+_3e9=(prop.units||"rgb")+"(";
 for(var j=0;j<prop.startRgb.length;j++){
-_3e4+=Math.round(((prop.endRgb[j]-prop.startRgb[j])*n)+prop.startRgb[j])+(j<prop.startRgb.length-1?",":"");
+_3e9+=Math.round(((prop.endRgb[j]-prop.startRgb[j])*n)+prop.startRgb[j])+(j<prop.startRgb.length-1?",":"");
 }
-_3e4+=")";
+_3e9+=")";
 }else{
-_3e4=((this.diffs[i])*n)+prop.start+(prop.property!="opacity"?prop.units||"px":"");
+_3e9=((this.diffs[i])*n)+prop.start+(prop.property!="opacity"?prop.units||"px":"");
 }
 }
-ret[dojo.html.toCamelCase(prop.property)]=_3e4;
+ret[dojo.html.toCamelCase(prop.property)]=_3e9;
 },this);
 return ret;
 };
 };
 var anim=new dojo.lfx.Animation({beforeBegin:function(){
-_3ce(_3cd);
-anim.curve=new _3dc(_3cd.propertyMap);
-},onAnimate:function(_3e7){
-dojo.lang.forEach(_3cd.nodes,function(node){
-_3d8(node,_3e7);
+_3d3(_3d2);
+anim.curve=new _3e1(_3d2.propertyMap);
+},onAnimate:function(_3ec){
+dojo.lang.forEach(_3d2.nodes,function(node){
+_3dd(node,_3ec);
 });
-}},_3cd.duration,null,_3cd.easing);
-if(_3cc){
-for(var x in _3cc){
-if(dojo.lang.isFunction(_3cc[x])){
-anim.connect(x,anim,_3cc[x]);
+}},_3d2.duration,null,_3d2.easing);
+if(_3d1){
+for(var x in _3d1){
+if(dojo.lang.isFunction(_3d1[x])){
+anim.connect(x,anim,_3d1[x]);
 }
 }
 }
 return anim;
 };
-dojo.lfx.html._makeFadeable=function(_3ea){
-var _3eb=function(node){
+dojo.lfx.html._makeFadeable=function(_3ef){
+var _3f0=function(node){
 if(dojo.render.html.ie){
 if((node.style.zoom.length==0)&&(dojo.html.getStyle(node,"zoom")=="normal")){
 node.style.zoom="1";
@@ -62383,129 +42442,129 @@
 }
 }
 };
-if(dojo.lang.isArrayLike(_3ea)){
-dojo.lang.forEach(_3ea,_3eb);
+if(dojo.lang.isArrayLike(_3ef)){
+dojo.lang.forEach(_3ef,_3f0);
 }else{
-_3eb(_3ea);
+_3f0(_3ef);
 }
 };
-dojo.lfx.html.fade=function(_3ed,_3ee,_3ef,_3f0,_3f1){
-_3ed=dojo.lfx.html._byId(_3ed);
-var _3f2={property:"opacity"};
-if(!dj_undef("start",_3ee)){
-_3f2.start=_3ee.start;
+dojo.lfx.html.fade=function(_3f2,_3f3,_3f4,_3f5,_3f6){
+_3f2=dojo.lfx.html._byId(_3f2);
+var _3f7={property:"opacity"};
+if(!dj_undef("start",_3f3)){
+_3f7.start=_3f3.start;
 }else{
-_3f2.start=function(){
-return dojo.html.getOpacity(_3ed[0]);
+_3f7.start=function(){
+return dojo.html.getOpacity(_3f2[0]);
 };
 }
-if(!dj_undef("end",_3ee)){
-_3f2.end=_3ee.end;
+if(!dj_undef("end",_3f3)){
+_3f7.end=_3f3.end;
 }else{
 dojo.raise("dojo.lfx.html.fade needs an end value");
 }
-var anim=dojo.lfx.propertyAnimation(_3ed,[_3f2],_3ef,_3f0);
+var anim=dojo.lfx.propertyAnimation(_3f2,[_3f7],_3f4,_3f5);
 anim.connect("beforeBegin",function(){
-dojo.lfx.html._makeFadeable(_3ed);
+dojo.lfx.html._makeFadeable(_3f2);
 });
-if(_3f1){
+if(_3f6){
 anim.connect("onEnd",function(){
-_3f1(_3ed,anim);
+_3f6(_3f2,anim);
 });
 }
 return anim;
 };
-dojo.lfx.html.fadeIn=function(_3f4,_3f5,_3f6,_3f7){
-return dojo.lfx.html.fade(_3f4,{end:1},_3f5,_3f6,_3f7);
+dojo.lfx.html.fadeIn=function(_3f9,_3fa,_3fb,_3fc){
+return dojo.lfx.html.fade(_3f9,{end:1},_3fa,_3fb,_3fc);
 };
-dojo.lfx.html.fadeOut=function(_3f8,_3f9,_3fa,_3fb){
-return dojo.lfx.html.fade(_3f8,{end:0},_3f9,_3fa,_3fb);
+dojo.lfx.html.fadeOut=function(_3fd,_3fe,_3ff,_400){
+return dojo.lfx.html.fade(_3fd,{end:0},_3fe,_3ff,_400);
 };
-dojo.lfx.html.fadeShow=function(_3fc,_3fd,_3fe,_3ff){
-_3fc=dojo.lfx.html._byId(_3fc);
-dojo.lang.forEach(_3fc,function(node){
+dojo.lfx.html.fadeShow=function(_401,_402,_403,_404){
+_401=dojo.lfx.html._byId(_401);
+dojo.lang.forEach(_401,function(node){
 dojo.html.setOpacity(node,0);
 });
-var anim=dojo.lfx.html.fadeIn(_3fc,_3fd,_3fe,_3ff);
+var anim=dojo.lfx.html.fadeIn(_401,_402,_403,_404);
 anim.connect("beforeBegin",function(){
-if(dojo.lang.isArrayLike(_3fc)){
-dojo.lang.forEach(_3fc,dojo.html.show);
+if(dojo.lang.isArrayLike(_401)){
+dojo.lang.forEach(_401,dojo.html.show);
 }else{
-dojo.html.show(_3fc);
+dojo.html.show(_401);
 }
 });
 return anim;
 };
-dojo.lfx.html.fadeHide=function(_402,_403,_404,_405){
-var anim=dojo.lfx.html.fadeOut(_402,_403,_404,function(){
-if(dojo.lang.isArrayLike(_402)){
-dojo.lang.forEach(_402,dojo.html.hide);
+dojo.lfx.html.fadeHide=function(_407,_408,_409,_40a){
+var anim=dojo.lfx.html.fadeOut(_407,_408,_409,function(){
+if(dojo.lang.isArrayLike(_407)){
+dojo.lang.forEach(_407,dojo.html.hide);
 }else{
-dojo.html.hide(_402);
+dojo.html.hide(_407);
 }
-if(_405){
-_405(_402,anim);
+if(_40a){
+_40a(_407,anim);
 }
 });
 return anim;
 };
-dojo.lfx.html.wipeIn=function(_407,_408,_409,_40a){
-_407=dojo.lfx.html._byId(_407);
-var _40b=[];
-dojo.lang.forEach(_407,function(node){
-var _40d={};
-var _40e,_40f,_410;
+dojo.lfx.html.wipeIn=function(_40c,_40d,_40e,_40f){
+_40c=dojo.lfx.html._byId(_40c);
+var _410=[];
+dojo.lang.forEach(_40c,function(node){
+var _412={};
+var _413,_414,_415;
 with(node.style){
-_40e=top;
-_40f=left;
-_410=position;
+_413=top;
+_414=left;
+_415=position;
 top="-9999px";
 left="-9999px";
 position="absolute";
 display="";
 }
-var _411=dojo.html.getBorderBox(node).height;
+var _416=dojo.html.getBorderBox(node).height;
 with(node.style){
-top=_40e;
-left=_40f;
-position=_410;
+top=_413;
+left=_414;
+position=_415;
 display="none";
 }
 var anim=dojo.lfx.propertyAnimation(node,{"height":{start:1,end:function(){
-return _411;
-}}},_408,_409);
+return _416;
+}}},_40d,_40e);
 anim.connect("beforeBegin",function(){
-_40d.overflow=node.style.overflow;
-_40d.height=node.style.height;
+_412.overflow=node.style.overflow;
+_412.height=node.style.height;
 with(node.style){
 overflow="hidden";
-_411="1px";
+height="1px";
 }
 dojo.html.show(node);
 });
 anim.connect("onEnd",function(){
 with(node.style){
-overflow=_40d.overflow;
-_411=_40d.height;
+overflow=_412.overflow;
+height=_412.height;
 }
-if(_40a){
-_40a(node,anim);
+if(_40f){
+_40f(node,anim);
 }
 });
-_40b.push(anim);
+_410.push(anim);
 });
-return dojo.lfx.combine(_40b);
+return dojo.lfx.combine(_410);
 };
-dojo.lfx.html.wipeOut=function(_413,_414,_415,_416){
-_413=dojo.lfx.html._byId(_413);
-var _417=[];
-dojo.lang.forEach(_413,function(node){
-var _419={};
+dojo.lfx.html.wipeOut=function(_418,_419,_41a,_41b){
+_418=dojo.lfx.html._byId(_418);
+var _41c=[];
+dojo.lang.forEach(_418,function(node){
+var _41e={};
 var anim=dojo.lfx.propertyAnimation(node,{"height":{start:function(){
 return dojo.html.getContentBox(node).height;
-},end:1}},_414,_415,{"beforeBegin":function(){
-_419.overflow=node.style.overflow;
-_419.height=node.style.height;
+},end:1}},_419,_41a,{"beforeBegin":function(){
+_41e.overflow=node.style.overflow;
+_41e.height=node.style.height;
 with(node.style){
 overflow="hidden";
 }
@@ -62513,246 +42572,247 @@
 },"onEnd":function(){
 dojo.html.hide(node);
 with(node.style){
-overflow=_419.overflow;
-height=_419.height;
+overflow=_41e.overflow;
+height=_41e.height;
 }
-if(_416){
-_416(node,anim);
+if(_41b){
+_41b(node,anim);
 }
 }});
-_417.push(anim);
+_41c.push(anim);
 });
-return dojo.lfx.combine(_417);
+return dojo.lfx.combine(_41c);
 };
-dojo.lfx.html.slideTo=function(_41b,_41c,_41d,_41e,_41f){
-_41b=dojo.lfx.html._byId(_41b);
-var _420=[];
-var _421=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_41c)){
+dojo.lfx.html.slideTo=function(_420,_421,_422,_423,_424){
+_420=dojo.lfx.html._byId(_420);
+var _425=[];
+var _426=dojo.html.getComputedStyle;
+if(dojo.lang.isArray(_421)){
 dojo.deprecated("dojo.lfx.html.slideTo(node, array)","use dojo.lfx.html.slideTo(node, {top: value, left: value});","0.5");
-_41c={top:_41c[0],left:_41c[1]};
+_421={top:_421[0],left:_421[1]};
 }
-dojo.lang.forEach(_41b,function(node){
+dojo.lang.forEach(_420,function(node){
 var top=null;
 var left=null;
 var init=(function(){
-var _426=node;
+var _42b=node;
 return function(){
-var pos=_421(_426,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_421(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_421(node,"left"))||0);
+var pos=_426(_42b,"position");
+top=(pos=="absolute"?node.offsetTop:parseInt(_426(node,"top"))||0);
+left=(pos=="absolute"?node.offsetLeft:parseInt(_426(node,"left"))||0);
 if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_426,true);
-dojo.html.setStyleAttributes(_426,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
+var ret=dojo.html.abs(_42b,true);
+dojo.html.setStyleAttributes(_42b,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
 top=ret.y;
 left=ret.x;
 }
 };
 })();
 init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:(_41c.top||0)},"left":{start:left,end:(_41c.left||0)}},_41d,_41e,{"beforeBegin":init});
-if(_41f){
+var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:(_421.top||0)},"left":{start:left,end:(_421.left||0)}},_422,_423,{"beforeBegin":init});
+if(_424){
 anim.connect("onEnd",function(){
-_41f(_41b,anim);
+_424(_420,anim);
 });
 }
-_420.push(anim);
+_425.push(anim);
 });
-return dojo.lfx.combine(_420);
+return dojo.lfx.combine(_425);
 };
-dojo.lfx.html.slideBy=function(_42a,_42b,_42c,_42d,_42e){
-_42a=dojo.lfx.html._byId(_42a);
-var _42f=[];
-var _430=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_42b)){
+dojo.lfx.html.slideBy=function(_42f,_430,_431,_432,_433){
+_42f=dojo.lfx.html._byId(_42f);
+var _434=[];
+var _435=dojo.html.getComputedStyle;
+if(dojo.lang.isArray(_430)){
 dojo.deprecated("dojo.lfx.html.slideBy(node, array)","use dojo.lfx.html.slideBy(node, {top: value, left: value});","0.5");
-_42b={top:_42b[0],left:_42b[1]};
+_430={top:_430[0],left:_430[1]};
 }
-dojo.lang.forEach(_42a,function(node){
+dojo.lang.forEach(_42f,function(node){
 var top=null;
 var left=null;
 var init=(function(){
-var _435=node;
+var _43a=node;
 return function(){
-var pos=_430(_435,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_430(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_430(node,"left"))||0);
+var pos=_435(_43a,"position");
+top=(pos=="absolute"?node.offsetTop:parseInt(_435(node,"top"))||0);
+left=(pos=="absolute"?node.offsetLeft:parseInt(_435(node,"left"))||0);
 if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_435,true);
-dojo.html.setStyleAttributes(_435,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
+var ret=dojo.html.abs(_43a,true);
+dojo.html.setStyleAttributes(_43a,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
 top=ret.y;
 left=ret.x;
 }
 };
 })();
 init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:top+(_42b.top||0)},"left":{start:left,end:left+(_42b.left||0)}},_42c,_42d).connect("beforeBegin",init);
-if(_42e){
+var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:top+(_430.top||0)},"left":{start:left,end:left+(_430.left||0)}},_431,_432).connect("beforeBegin",init);
+if(_433){
 anim.connect("onEnd",function(){
-_42e(_42a,anim);
+_433(_42f,anim);
 });
 }
-_42f.push(anim);
+_434.push(anim);
 });
-return dojo.lfx.combine(_42f);
+return dojo.lfx.combine(_434);
 };
-dojo.lfx.html.explode=function(_439,_43a,_43b,_43c,_43d){
+dojo.lfx.html.explode=function(_43e,_43f,_440,_441,_442){
 var h=dojo.html;
-_439=dojo.byId(_439);
-_43a=dojo.byId(_43a);
-var _43f=h.toCoordinateObject(_439,true);
-var _440=document.createElement("div");
-h.copyStyle(_440,_43a);
-if(_43a.explodeClassName){
-_440.className=_43a.explodeClassName;
+_43e=dojo.byId(_43e);
+_43f=dojo.byId(_43f);
+var _444=h.toCoordinateObject(_43e,true);
+var _445=document.createElement("div");
+h.copyStyle(_445,_43f);
+if(_43f.explodeClassName){
+_445.className=_43f.explodeClassName;
 }
-with(_440.style){
+with(_445.style){
 position="absolute";
 display="none";
-var _441=h.getStyle(_439,"background-color");
-backgroundColor=_441?_441.toLowerCase():"transparent";
+var _446=h.getStyle(_43e,"background-color");
+backgroundColor=_446?_446.toLowerCase():"transparent";
 backgroundColor=(backgroundColor=="transparent")?"rgb(221, 221, 221)":backgroundColor;
 }
-dojo.body().appendChild(_440);
-with(_43a.style){
+dojo.body().appendChild(_445);
+with(_43f.style){
 visibility="hidden";
 display="block";
 }
-var _442=h.toCoordinateObject(_43a,true);
-with(_43a.style){
+var _447=h.toCoordinateObject(_43f,true);
+with(_43f.style){
 display="none";
 visibility="visible";
 }
-var _443={opacity:{start:0.5,end:1}};
+var _448={opacity:{start:0.5,end:1}};
 dojo.lang.forEach(["height","width","top","left"],function(type){
-_443[type]={start:_43f[type],end:_442[type]};
+_448[type]={start:_444[type],end:_447[type]};
 });
-var anim=new dojo.lfx.propertyAnimation(_440,_443,_43b,_43c,{"beforeBegin":function(){
-h.setDisplay(_440,"block");
+var anim=new dojo.lfx.propertyAnimation(_445,_448,_440,_441,{"beforeBegin":function(){
+h.setDisplay(_445,"block");
 },"onEnd":function(){
-h.setDisplay(_43a,"block");
-_440.parentNode.removeChild(_440);
+h.setDisplay(_43f,"block");
+_445.parentNode.removeChild(_445);
 }});
-if(_43d){
+if(_442){
 anim.connect("onEnd",function(){
-_43d(_43a,anim);
+_442(_43f,anim);
 });
 }
 return anim;
 };
-dojo.lfx.html.implode=function(_446,end,_448,_449,_44a){
+dojo.lfx.html.implode=function(_44b,end,_44d,_44e,_44f){
 var h=dojo.html;
-_446=dojo.byId(_446);
+_44b=dojo.byId(_44b);
 end=dojo.byId(end);
-var _44c=dojo.html.toCoordinateObject(_446,true);
-var _44d=dojo.html.toCoordinateObject(end,true);
-var _44e=document.createElement("div");
-dojo.html.copyStyle(_44e,_446);
-if(_446.explodeClassName){
-_44e.className=_446.explodeClassName;
+var _451=dojo.html.toCoordinateObject(_44b,true);
+var _452=dojo.html.toCoordinateObject(end,true);
+var _453=document.createElement("div");
+dojo.html.copyStyle(_453,_44b);
+if(_44b.explodeClassName){
+_453.className=_44b.explodeClassName;
 }
-dojo.html.setOpacity(_44e,0.3);
-with(_44e.style){
+dojo.html.setOpacity(_453,0.3);
+with(_453.style){
 position="absolute";
 display="none";
-backgroundColor=h.getStyle(_446,"background-color").toLowerCase();
+backgroundColor=h.getStyle(_44b,"background-color").toLowerCase();
 }
-dojo.body().appendChild(_44e);
-var _44f={opacity:{start:1,end:0.5}};
+dojo.body().appendChild(_453);
+var _454={opacity:{start:1,end:0.5}};
 dojo.lang.forEach(["height","width","top","left"],function(type){
-_44f[type]={start:_44c[type],end:_44d[type]};
+_454[type]={start:_451[type],end:_452[type]};
 });
-var anim=new dojo.lfx.propertyAnimation(_44e,_44f,_448,_449,{"beforeBegin":function(){
-dojo.html.hide(_446);
-dojo.html.show(_44e);
+var anim=new dojo.lfx.propertyAnimation(_453,_454,_44d,_44e,{"beforeBegin":function(){
+dojo.html.hide(_44b);
+dojo.html.show(_453);
 },"onEnd":function(){
-_44e.parentNode.removeChild(_44e);
+_453.parentNode.removeChild(_453);
 }});
-if(_44a){
+if(_44f){
 anim.connect("onEnd",function(){
-_44a(_446,anim);
+_44f(_44b,anim);
 });
 }
 return anim;
 };
-dojo.lfx.html.highlight=function(_452,_453,_454,_455,_456){
-_452=dojo.lfx.html._byId(_452);
-var _457=[];
-dojo.lang.forEach(_452,function(node){
-var _459=dojo.html.getBackgroundColor(node);
+dojo.lfx.html.highlight=function(_457,_458,_459,_45a,_45b){
+_457=dojo.lfx.html._byId(_457);
+var _45c=[];
+dojo.lang.forEach(_457,function(node){
+var _45e=dojo.html.getBackgroundColor(node);
 var bg=dojo.html.getStyle(node,"background-color").toLowerCase();
-var _45b=dojo.html.getStyle(node,"background-image");
-var _45c=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
-while(_459.length>3){
-_459.pop();
+var _460=dojo.html.getStyle(node,"background-image");
+var _461=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
+while(_45e.length>3){
+_45e.pop();
 }
-var rgb=new dojo.gfx.color.Color(_453);
-var _45e=new dojo.gfx.color.Color(_459);
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:rgb,end:_45e}},_454,_455,{"beforeBegin":function(){
-if(_45b){
+var rgb=new dojo.gfx.color.Color(_458);
+var _463=new dojo.gfx.color.Color(_45e);
+var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:rgb,end:_463}},_459,_45a,{"beforeBegin":function(){
+if(_460){
 node.style.backgroundImage="none";
 }
 node.style.backgroundColor="rgb("+rgb.toRgb().join(",")+")";
 },"onEnd":function(){
-if(_45b){
-node.style.backgroundImage=_45b;
+if(_460){
+node.style.backgroundImage=_460;
 }
-if(_45c){
+if(_461){
 node.style.backgroundColor="transparent";
 }
-if(_456){
-_456(node,anim);
+if(_45b){
+_45b(node,anim);
 }
 }});
-_457.push(anim);
+_45c.push(anim);
 });
-return dojo.lfx.combine(_457);
+return dojo.lfx.combine(_45c);
 };
-dojo.lfx.html.unhighlight=function(_460,_461,_462,_463,_464){
-_460=dojo.lfx.html._byId(_460);
-var _465=[];
-dojo.lang.forEach(_460,function(node){
-var _467=new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
-var rgb=new dojo.gfx.color.Color(_461);
-var _469=dojo.html.getStyle(node,"background-image");
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:_467,end:rgb}},_462,_463,{"beforeBegin":function(){
-if(_469){
+dojo.lfx.html.unhighlight=function(_465,_466,_467,_468,_469){
+_465=dojo.lfx.html._byId(_465);
+var _46a=[];
+dojo.lang.forEach(_465,function(node){
+var _46c=new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
+var rgb=new dojo.gfx.color.Color(_466);
+var _46e=dojo.html.getStyle(node,"background-image");
+var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:_46c,end:rgb}},_467,_468,{"beforeBegin":function(){
+if(_46e){
 node.style.backgroundImage="none";
 }
-node.style.backgroundColor="rgb("+_467.toRgb().join(",")+")";
+node.style.backgroundColor="rgb("+_46c.toRgb().join(",")+")";
 },"onEnd":function(){
-if(_464){
-_464(node,anim);
+if(_469){
+_469(node,anim);
 }
 }});
-_465.push(anim);
+_46a.push(anim);
 });
-return dojo.lfx.combine(_465);
+return dojo.lfx.combine(_46a);
 };
 dojo.lang.mixin(dojo.lfx,dojo.lfx.html);
+dojo.kwCompoundRequire({browser:["dojo.lfx.html"],dashboard:["dojo.lfx.html"]});
 dojo.provide("dojo.lfx.*");
 dojo.provide("dojo.lang.extras");
-dojo.lang.setTimeout=function(func,_46c){
-var _46d=window,_46e=2;
+dojo.lang.setTimeout=function(func,_471){
+var _472=window,_473=2;
 if(!dojo.lang.isFunction(func)){
-_46d=func;
-func=_46c;
-_46c=arguments[2];
-_46e++;
+_472=func;
+func=_471;
+_471=arguments[2];
+_473++;
 }
 if(dojo.lang.isString(func)){
-func=_46d[func];
+func=_472[func];
 }
 var args=[];
-for(var i=_46e;i<arguments.length;i++){
+for(var i=_473;i<arguments.length;i++){
 args.push(arguments[i]);
 }
 return dojo.global().setTimeout(function(){
-func.apply(_46d,args);
-},_46c);
+func.apply(_472,args);
+},_471);
 };
-dojo.lang.clearTimeout=function(_471){
-dojo.global().clearTimeout(_471);
+dojo.lang.clearTimeout=function(_476){
+dojo.global().clearTimeout(_476);
 };
 dojo.lang.getNameInObj=function(ns,item){
 if(!ns){
@@ -62797,28 +42857,28 @@
 }
 return undefined;
 };
-dojo.lang.getObjPathValue=function(_47a,_47b,_47c){
-with(dojo.parseObjPath(_47a,_47b,_47c)){
-return dojo.evalProp(prop,obj,_47c);
+dojo.lang.getObjPathValue=function(_47f,_480,_481){
+with(dojo.parseObjPath(_47f,_480,_481)){
+return dojo.evalProp(prop,obj,_481);
 }
 };
-dojo.lang.setObjPathValue=function(_47d,_47e,_47f,_480){
+dojo.lang.setObjPathValue=function(_482,_483,_484,_485){
 dojo.deprecated("dojo.lang.setObjPathValue","use dojo.parseObjPath and the '=' operator","0.6");
 if(arguments.length<4){
-_480=true;
+_485=true;
 }
-with(dojo.parseObjPath(_47d,_47f,_480)){
-if(obj&&(_480||(prop in obj))){
-obj[prop]=_47e;
+with(dojo.parseObjPath(_482,_484,_485)){
+if(obj&&(_485||(prop in obj))){
+obj[prop]=_483;
 }
 }
 };
 dojo.provide("dojo.event.common");
 dojo.event=new function(){
 this._canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-function interpolateArgs(args,_482){
+function interpolateArgs(args,_487){
 var dl=dojo.lang;
-var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false};
+var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false,maxCalls:-1};
 switch(args.length){
 case 0:
 return;
@@ -62843,14 +42903,14 @@
 ao.adviceType="after";
 ao.srcObj=args[0];
 ao.srcFunc=args[1];
-var _485=dl.nameAnonFunc(args[2],ao.adviceObj,_482);
-ao.adviceFunc=_485;
+var _48a=dl.nameAnonFunc(args[2],ao.adviceObj,_487);
+ao.adviceFunc=_48a;
 }else{
 if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
 ao.adviceType="after";
 ao.srcObj=dj_global;
-var _485=dl.nameAnonFunc(args[0],ao.srcObj,_482);
-ao.srcFunc=_485;
+var _48a=dl.nameAnonFunc(args[0],ao.srcObj,_487);
+ao.srcFunc=_48a;
 ao.adviceObj=args[1];
 ao.adviceFunc=args[2];
 }
@@ -62876,17 +42936,17 @@
 if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
 ao.adviceType=args[0];
 ao.srcObj=dj_global;
-var _485=dl.nameAnonFunc(args[1],dj_global,_482);
-ao.srcFunc=_485;
+var _48a=dl.nameAnonFunc(args[1],dj_global,_487);
+ao.srcFunc=_48a;
 ao.adviceObj=args[2];
 ao.adviceFunc=args[3];
 }else{
 if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
 ao.srcObj=args[1];
 ao.srcFunc=args[2];
-var _485=dl.nameAnonFunc(args[3],dj_global,_482);
+var _48a=dl.nameAnonFunc(args[3],dj_global,_487);
 ao.adviceObj=dj_global;
-ao.adviceFunc=_485;
+ao.adviceFunc=_48a;
 }else{
 if(dl.isObject(args[1])){
 ao.srcObj=args[1];
@@ -62930,11 +42990,12 @@
 ao.delay=args[8];
 ao.rate=args[9];
 ao.adviceMsg=args[10];
+ao.maxCalls=(!isNaN(parseInt(args[11])))?args[11]:-1;
 break;
 }
 if(dl.isFunction(ao.aroundFunc)){
-var _485=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_482);
-ao.aroundFunc=_485;
+var _48a=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_487);
+ao.aroundFunc=_48a;
 }
 if(dl.isFunction(ao.srcFunc)){
 ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc);
@@ -62963,25 +43024,18 @@
 }else{
 var ao=interpolateArgs(arguments,true);
 }
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.connect(ao);
-}
-ao.srcFunc="onkeypress";
-}
 if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){
-var _487={};
+var _48c={};
 for(var x in ao){
-_487[x]=ao[x];
+_48c[x]=ao[x];
 }
 var mjps=[];
 dojo.lang.forEach(ao.srcObj,function(src){
 if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
 src=dojo.byId(src);
 }
-_487.srcObj=src;
-mjps.push(dojo.event.connect.call(dojo.event,_487));
+_48c.srcObj=src;
+mjps.push(dojo.event.connect.call(dojo.event,_48c));
 });
 return mjps;
 }
@@ -62993,20 +43047,20 @@
 return mjp;
 };
 this.log=function(a1,a2){
-var _48f;
+var _494;
 if((arguments.length==1)&&(typeof a1=="object")){
-_48f=a1;
+_494=a1;
 }else{
-_48f={srcObj:a1,srcFunc:a2};
+_494={srcObj:a1,srcFunc:a2};
 }
-_48f.adviceFunc=function(){
-var _490=[];
+_494.adviceFunc=function(){
+var _495=[];
 for(var x=0;x<arguments.length;x++){
-_490.push(arguments[x]);
+_495.push(arguments[x]);
 }
-dojo.debug("("+_48f.srcObj+")."+_48f.srcFunc,":",_490.join(", "));
+dojo.debug("("+_494.srcObj+")."+_494.srcFunc,":",_495.join(", "));
 };
-this.kwConnect(_48f);
+this.kwConnect(_494);
 };
 this.connectBefore=function(){
 var args=["before"];
@@ -63027,25 +43081,30 @@
 ao.once=true;
 return this.connect(ao);
 };
-this._kwConnectImpl=function(_497,_498){
-var fn=(_498)?"disconnect":"connect";
-if(typeof _497["srcFunc"]=="function"){
-_497.srcObj=_497["srcObj"]||dj_global;
-var _49a=dojo.lang.nameAnonFunc(_497.srcFunc,_497.srcObj,true);
-_497.srcFunc=_49a;
+this.connectRunOnce=function(){
+var ao=interpolateArgs(arguments,true);
+ao.maxCalls=1;
+return this.connect(ao);
+};
+this._kwConnectImpl=function(_49d,_49e){
+var fn=(_49e)?"disconnect":"connect";
+if(typeof _49d["srcFunc"]=="function"){
+_49d.srcObj=_49d["srcObj"]||dj_global;
+var _4a0=dojo.lang.nameAnonFunc(_49d.srcFunc,_49d.srcObj,true);
+_49d.srcFunc=_4a0;
 }
-if(typeof _497["adviceFunc"]=="function"){
-_497.adviceObj=_497["adviceObj"]||dj_global;
-var _49a=dojo.lang.nameAnonFunc(_497.adviceFunc,_497.adviceObj,true);
-_497.adviceFunc=_49a;
+if(typeof _49d["adviceFunc"]=="function"){
+_49d.adviceObj=_49d["adviceObj"]||dj_global;
+var _4a0=dojo.lang.nameAnonFunc(_49d.adviceFunc,_49d.adviceObj,true);
+_49d.adviceFunc=_4a0;
 }
-_497.srcObj=_497["srcObj"]||dj_global;
-_497.adviceObj=_497["adviceObj"]||_497["targetObj"]||dj_global;
-_497.adviceFunc=_497["adviceFunc"]||_497["targetFunc"];
-return dojo.event[fn](_497);
+_49d.srcObj=_49d["srcObj"]||dj_global;
+_49d.adviceObj=_49d["adviceObj"]||_49d["targetObj"]||dj_global;
+_49d.adviceFunc=_49d["adviceFunc"]||_49d["targetFunc"];
+return dojo.event[fn](_49d);
 };
-this.kwConnect=function(_49b){
-return this._kwConnectImpl(_49b,false);
+this.kwConnect=function(_4a1){
+return this._kwConnectImpl(_4a1,false);
 };
 this.disconnect=function(){
 if(arguments.length==1){
@@ -63070,12 +43129,12 @@
 mjp.removeAdvice(ao.adviceObj,ao.adviceFunc,ao.adviceType,ao.once);
 return mjp;
 };
-this.kwDisconnect=function(_49e){
-return this._kwConnectImpl(_49e,true);
+this.kwDisconnect=function(_4a4){
+return this._kwConnectImpl(_4a4,true);
 };
 };
-dojo.event.MethodInvocation=function(_49f,obj,args){
-this.jp_=_49f;
+dojo.event.MethodInvocation=function(_4a5,obj,args){
+this.jp_=_4a5;
 this.object=obj;
 this.args=[];
 for(var x=0;x<args.length;x++){
@@ -63094,44 +43153,50 @@
 return mobj[meth].call(mobj,this);
 }
 };
-dojo.event.MethodJoinPoint=function(obj,_4a7){
+dojo.event.MethodJoinPoint=function(obj,_4ad){
 this.object=obj||dj_global;
-this.methodname=_4a7;
-this.methodfunc=this.object[_4a7];
+this.methodname=_4ad;
+this.methodfunc=this.object[_4ad];
 this.squelch=false;
 };
-dojo.event.MethodJoinPoint.getForMethod=function(obj,_4a9){
+dojo.event.MethodJoinPoint.getForMethod=function(obj,_4af){
 if(!obj){
 obj=dj_global;
 }
-if(!obj[_4a9]){
-obj[_4a9]=function(){
+var ofn=obj[_4af];
+if(!ofn){
+ofn=obj[_4af]=function(){
 };
-if(!obj[_4a9]){
-dojo.raise("Cannot set do-nothing method on that object "+_4a9);
+if(!obj[_4af]){
+dojo.raise("Cannot set do-nothing method on that object "+_4af);
 }
 }else{
-if((!dojo.lang.isFunction(obj[_4a9]))&&(!dojo.lang.isAlien(obj[_4a9]))){
+if((typeof ofn!="function")&&(!dojo.lang.isFunction(ofn))&&(!dojo.lang.isAlien(ofn))){
 return null;
 }
 }
-var _4aa=_4a9+"$joinpoint";
-var _4ab=_4a9+"$joinpoint$method";
-var _4ac=obj[_4aa];
-if(!_4ac){
-var _4ad=false;
+var _4b1=_4af+"$joinpoint";
+var _4b2=_4af+"$joinpoint$method";
+var _4b3=obj[_4b1];
+if(!_4b3){
+var _4b4=false;
 if(dojo.event["browser"]){
 if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){
-_4ad=true;
-dojo.event.browser.addClobberNodeAttrs(obj,[_4aa,_4ab,_4a9]);
+_4b4=true;
+dojo.event.browser.addClobberNodeAttrs(obj,[_4b1,_4b2,_4af]);
 }
 }
-var _4ae=obj[_4a9].length;
-obj[_4ab]=obj[_4a9];
-_4ac=obj[_4aa]=new dojo.event.MethodJoinPoint(obj,_4ab);
-obj[_4a9]=function(){
+var _4b5=ofn.length;
+obj[_4b2]=ofn;
+_4b3=obj[_4b1]=new dojo.event.MethodJoinPoint(obj,_4b2);
+if(!_4b4){
+obj[_4af]=function(){
+return _4b3.run.apply(_4b3,arguments);
+};
+}else{
+obj[_4af]=function(){
 var args=[];
-if((_4ad)&&(!arguments.length)){
+if(!arguments.length){
 var evt=null;
 try{
 if(obj.ownerDocument){
@@ -63156,20 +43221,21 @@
 }
 }else{
 for(var x=0;x<arguments.length;x++){
-if((x==0)&&(_4ad)&&(dojo.event.browser.isEvent(arguments[x]))){
+if((x==0)&&(dojo.event.browser.isEvent(arguments[x]))){
 args.push(dojo.event.browser.fixEvent(arguments[x],this));
 }else{
 args.push(arguments[x]);
 }
 }
 }
-return _4ac.run.apply(_4ac,args);
+return _4b3.run.apply(_4b3,args);
 };
-obj[_4a9].__preJoinArity=_4ae;
 }
-return _4ac;
+obj[_4af].__preJoinArity=_4b5;
+}
+return _4b3;
 };
-dojo.lang.extend(dojo.event.MethodJoinPoint,{unintercept:function(){
+dojo.lang.extend(dojo.event.MethodJoinPoint,{squelch:false,unintercept:function(){
 this.object[this.methodname]=this.methodfunc;
 this.before=[];
 this.after=[];
@@ -63177,34 +43243,41 @@
 },disconnect:dojo.lang.forward("unintercept"),run:function(){
 var obj=this.object||dj_global;
 var args=arguments;
-var _4b4=[];
+var _4bb=[];
 for(var x=0;x<args.length;x++){
-_4b4[x]=args[x];
+_4bb[x]=args[x];
 }
-var _4b6=function(marr){
+var _4bd=function(marr){
 if(!marr){
 dojo.debug("Null argument to unrollAdvice()");
 return;
 }
-var _4b8=marr[0]||dj_global;
-var _4b9=marr[1];
-if(!_4b8[_4b9]){
-dojo.raise("function \""+_4b9+"\" does not exist on \""+_4b8+"\"");
+var _4bf=marr[0]||dj_global;
+var _4c0=marr[1];
+if(!_4bf[_4c0]){
+dojo.raise("function \""+_4c0+"\" does not exist on \""+_4bf+"\"");
 }
-var _4ba=marr[2]||dj_global;
-var _4bb=marr[3];
+var _4c1=marr[2]||dj_global;
+var _4c2=marr[3];
 var msg=marr[6];
-var _4bd;
+var _4c4=marr[7];
+if(_4c4>-1){
+if(_4c4==0){
+return;
+}
+marr[7]--;
+}
+var _4c5;
 var to={args:[],jp_:this,object:obj,proceed:function(){
-return _4b8[_4b9].apply(_4b8,to.args);
+return _4bf[_4c0].apply(_4bf,to.args);
 }};
-to.args=_4b4;
-var _4bf=parseInt(marr[4]);
-var _4c0=((!isNaN(_4bf))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
+to.args=_4bb;
+var _4c7=parseInt(marr[4]);
+var _4c8=((!isNaN(_4c7))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
 if(marr[5]){
 var rate=parseInt(marr[5]);
 var cur=new Date();
-var _4c3=false;
+var _4cb=false;
 if((marr["last"])&&((cur-marr.last)<=rate)){
 if(dojo.event._canTimeout){
 if(marr["delayTimer"]){
@@ -63214,7 +43287,7 @@
 var mcpy=dojo.lang.shallowCopy(marr);
 marr.delayTimer=setTimeout(function(){
 mcpy[5]=0;
-_4b6(mcpy);
+_4bd(mcpy);
 },tod);
 }
 return;
@@ -63222,49 +43295,49 @@
 marr.last=cur;
 }
 }
-if(_4bb){
-_4ba[_4bb].call(_4ba,to);
+if(_4c2){
+_4c1[_4c2].call(_4c1,to);
 }else{
-if((_4c0)&&((dojo.render.html)||(dojo.render.svg))){
+if((_4c8)&&((dojo.render.html)||(dojo.render.svg))){
 dj_global["setTimeout"](function(){
 if(msg){
-_4b8[_4b9].call(_4b8,to);
+_4bf[_4c0].call(_4bf,to);
 }else{
-_4b8[_4b9].apply(_4b8,args);
+_4bf[_4c0].apply(_4bf,args);
 }
-},_4bf);
+},_4c7);
 }else{
 if(msg){
-_4b8[_4b9].call(_4b8,to);
+_4bf[_4c0].call(_4bf,to);
 }else{
-_4b8[_4b9].apply(_4b8,args);
+_4bf[_4c0].apply(_4bf,args);
 }
 }
 }
 };
-var _4c6=function(){
+var _4ce=function(){
 if(this.squelch){
 try{
-return _4b6.apply(this,arguments);
+return _4bd.apply(this,arguments);
 }
 catch(e){
 dojo.debug(e);
 }
 }else{
-return _4b6.apply(this,arguments);
+return _4bd.apply(this,arguments);
 }
 };
 if((this["before"])&&(this.before.length>0)){
-dojo.lang.forEach(this.before.concat(new Array()),_4c6);
+dojo.lang.forEach(this.before.concat(new Array()),_4ce);
 }
-var _4c7;
+var _4cf;
 try{
 if((this["around"])&&(this.around.length>0)){
 var mi=new dojo.event.MethodInvocation(this,obj,args);
-_4c7=mi.proceed();
+_4cf=mi.proceed();
 }else{
 if(this.methodfunc){
-_4c7=this.object[this.methodname].apply(this.object,args);
+_4cf=this.object[this.methodname].apply(this.object,args);
 }
 }
 }
@@ -63275,9 +43348,9 @@
 }
 }
 if((this["after"])&&(this.after.length>0)){
-dojo.lang.forEach(this.after.concat(new Array()),_4c6);
+dojo.lang.forEach(this.after.concat(new Array()),_4ce);
 }
-return (this.methodfunc)?_4c7:null;
+return (this.methodfunc)?_4cf:null;
 },getArr:function(kind){
 var type="after";
 if((typeof kind=="string")&&(kind.indexOf("before")!=-1)){
@@ -63292,39 +43365,39 @@
 }
 return this[type];
 },kwAddAdvice:function(args){
-this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"]);
-},addAdvice:function(_4cc,_4cd,_4ce,_4cf,_4d0,_4d1,once,_4d3,rate,_4d5){
-var arr=this.getArr(_4d0);
+this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"],args["maxCalls"]);
+},addAdvice:function(_4d4,_4d5,_4d6,_4d7,_4d8,_4d9,once,_4db,rate,_4dd,_4de){
+var arr=this.getArr(_4d8);
 if(!arr){
 dojo.raise("bad this: "+this);
 }
-var ao=[_4cc,_4cd,_4ce,_4cf,_4d3,rate,_4d5];
+var ao=[_4d4,_4d5,_4d6,_4d7,_4db,rate,_4dd,_4de];
 if(once){
-if(this.hasAdvice(_4cc,_4cd,_4d0,arr)>=0){
+if(this.hasAdvice(_4d4,_4d5,_4d8,arr)>=0){
 return;
 }
 }
-if(_4d1=="first"){
+if(_4d9=="first"){
 arr.unshift(ao);
 }else{
 arr.push(ao);
 }
-},hasAdvice:function(_4d8,_4d9,_4da,arr){
+},hasAdvice:function(_4e1,_4e2,_4e3,arr){
 if(!arr){
-arr=this.getArr(_4da);
+arr=this.getArr(_4e3);
 }
 var ind=-1;
 for(var x=0;x<arr.length;x++){
-var aao=(typeof _4d9=="object")?(new String(_4d9)).toString():_4d9;
+var aao=(typeof _4e2=="object")?(new String(_4e2)).toString():_4e2;
 var a1o=(typeof arr[x][1]=="object")?(new String(arr[x][1])).toString():arr[x][1];
-if((arr[x][0]==_4d8)&&(a1o==aao)){
+if((arr[x][0]==_4e1)&&(a1o==aao)){
 ind=x;
 }
 }
 return ind;
-},removeAdvice:function(_4e0,_4e1,_4e2,once){
-var arr=this.getArr(_4e2);
-var ind=this.hasAdvice(_4e0,_4e1,_4e2,arr);
+},removeAdvice:function(_4e9,_4ea,_4eb,once){
+var arr=this.getArr(_4eb);
+var ind=this.hasAdvice(_4e9,_4ea,_4eb,arr);
 if(ind==-1){
 return false;
 }
@@ -63333,73 +43406,73 @@
 if(once){
 break;
 }
-ind=this.hasAdvice(_4e0,_4e1,_4e2,arr);
+ind=this.hasAdvice(_4e9,_4ea,_4eb,arr);
 }
 return true;
 }});
 dojo.provide("dojo.event.topic");
 dojo.event.topic=new function(){
 this.topics={};
-this.getTopic=function(_4e6){
-if(!this.topics[_4e6]){
-this.topics[_4e6]=new this.TopicImpl(_4e6);
+this.getTopic=function(_4ef){
+if(!this.topics[_4ef]){
+this.topics[_4ef]=new this.TopicImpl(_4ef);
 }
-return this.topics[_4e6];
+return this.topics[_4ef];
 };
-this.registerPublisher=function(_4e7,obj,_4e9){
-var _4e7=this.getTopic(_4e7);
-_4e7.registerPublisher(obj,_4e9);
+this.registerPublisher=function(_4f0,obj,_4f2){
+var _4f0=this.getTopic(_4f0);
+_4f0.registerPublisher(obj,_4f2);
 };
-this.subscribe=function(_4ea,obj,_4ec){
-var _4ea=this.getTopic(_4ea);
-_4ea.subscribe(obj,_4ec);
+this.subscribe=function(_4f3,obj,_4f5){
+var _4f3=this.getTopic(_4f3);
+_4f3.subscribe(obj,_4f5);
 };
-this.unsubscribe=function(_4ed,obj,_4ef){
-var _4ed=this.getTopic(_4ed);
-_4ed.unsubscribe(obj,_4ef);
+this.unsubscribe=function(_4f6,obj,_4f8){
+var _4f6=this.getTopic(_4f6);
+_4f6.unsubscribe(obj,_4f8);
 };
-this.destroy=function(_4f0){
-this.getTopic(_4f0).destroy();
-delete this.topics[_4f0];
+this.destroy=function(_4f9){
+this.getTopic(_4f9).destroy();
+delete this.topics[_4f9];
 };
-this.publishApply=function(_4f1,args){
-var _4f1=this.getTopic(_4f1);
-_4f1.sendMessage.apply(_4f1,args);
+this.publishApply=function(_4fa,args){
+var _4fa=this.getTopic(_4fa);
+_4fa.sendMessage.apply(_4fa,args);
 };
-this.publish=function(_4f3,_4f4){
-var _4f3=this.getTopic(_4f3);
+this.publish=function(_4fc,_4fd){
+var _4fc=this.getTopic(_4fc);
 var args=[];
 for(var x=1;x<arguments.length;x++){
 args.push(arguments[x]);
 }
-_4f3.sendMessage.apply(_4f3,args);
+_4fc.sendMessage.apply(_4fc,args);
 };
 };
-dojo.event.topic.TopicImpl=function(_4f7){
-this.topicName=_4f7;
-this.subscribe=function(_4f8,_4f9){
-var tf=_4f9||_4f8;
-var to=(!_4f9)?dj_global:_4f8;
+dojo.event.topic.TopicImpl=function(_500){
+this.topicName=_500;
+this.subscribe=function(_501,_502){
+var tf=_502||_501;
+var to=(!_502)?dj_global:_501;
 return dojo.event.kwConnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
-this.unsubscribe=function(_4fc,_4fd){
-var tf=(!_4fd)?_4fc:_4fd;
-var to=(!_4fd)?null:_4fc;
+this.unsubscribe=function(_505,_506){
+var tf=(!_506)?_505:_506;
+var to=(!_506)?null:_505;
 return dojo.event.kwDisconnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
 this._getJoinPoint=function(){
 return dojo.event.MethodJoinPoint.getForMethod(this,"sendMessage");
 };
-this.setSquelch=function(_500){
-this._getJoinPoint().squelch=_500;
+this.setSquelch=function(_509){
+this._getJoinPoint().squelch=_509;
 };
 this.destroy=function(){
 this._getJoinPoint().disconnect();
 };
-this.registerPublisher=function(_501,_502){
-dojo.event.connect(_501,_502,this,"sendMessage");
+this.registerPublisher=function(_50a,_50b){
+dojo.event.connect(_50a,_50b,this,"sendMessage");
 };
-this.sendMessage=function(_503){
+this.sendMessage=function(_50c){
 };
 };
 dojo.provide("dojo.event.browser");
@@ -63422,12 +43495,12 @@
 catch(e){
 }
 }
-this.clobber=function(_506){
+this.clobber=function(_50f){
 var na;
 var tna;
-if(_506){
-tna=_506.all||_506.getElementsByTagName("*");
-na=[_506];
+if(_50f){
+tna=_50f.all||_50f.getElementsByTagName("*");
+na=[_50f];
 for(var x=0;x<tna.length;x++){
 if(tna[x]["__doClobber__"]){
 na.push(tna[x]);
@@ -63442,7 +43515,7 @@
 na=(this.clobberNodes.length)?this.clobberNodes:document.all;
 }
 tna=null;
-var _50a={};
+var _513={};
 for(var i=na.length-1;i>=0;i=i-1){
 var el=na[i];
 try{
@@ -63493,9 +43566,9 @@
 });
 }
 dojo.event.browser=new function(){
-var _50f=0;
-this.normalizedEventName=function(_510){
-switch(_510){
+var _518=0;
+this.normalizedEventName=function(_519){
+switch(_519){
 case "CheckboxStateChange":
 case "DOMAttrModified":
 case "DOMMenuItemActive":
@@ -63504,10 +43577,11 @@
 case "DOMNodeInserted":
 case "DOMNodeRemoved":
 case "RadioStateChange":
-return _510;
+return _519;
 break;
 default:
-return _510.toLowerCase();
+var lcn=_519.toLowerCase();
+return (lcn.indexOf("on")==0)?lcn.substr(2):lcn;
 break;
 }
 };
@@ -63526,93 +43600,88 @@
 node.__clobberAttrs__=[];
 }
 };
-this.addClobberNodeAttrs=function(node,_514){
+this.addClobberNodeAttrs=function(node,_51e){
 if(!dojo.render.html.ie){
 return;
 }
 this.addClobberNode(node);
-for(var x=0;x<_514.length;x++){
-node.__clobberAttrs__.push(_514[x]);
+for(var x=0;x<_51e.length;x++){
+node.__clobberAttrs__.push(_51e[x]);
 }
 };
-this.removeListener=function(node,_517,fp,_519){
-if(!_519){
-var _519=false;
+this.removeListener=function(node,_521,fp,_523){
+if(!_523){
+var _523=false;
 }
-_517=dojo.event.browser.normalizedEventName(_517);
-if((_517=="onkey")||(_517=="key")){
+_521=dojo.event.browser.normalizedEventName(_521);
+if(_521=="key"){
 if(dojo.render.html.ie){
-this.removeListener(node,"onkeydown",fp,_519);
+this.removeListener(node,"onkeydown",fp,_523);
 }
-_517="onkeypress";
+_521="keypress";
 }
-if(_517.substr(0,2)=="on"){
-_517=_517.substr(2);
-}
 if(node.removeEventListener){
-node.removeEventListener(_517,fp,_519);
+node.removeEventListener(_521,fp,_523);
 }
 };
-this.addListener=function(node,_51b,fp,_51d,_51e){
+this.addListener=function(node,_525,fp,_527,_528){
 if(!node){
 return;
 }
-if(!_51d){
-var _51d=false;
+if(!_527){
+var _527=false;
 }
-_51b=dojo.event.browser.normalizedEventName(_51b);
-if((_51b=="onkey")||(_51b=="key")){
+_525=dojo.event.browser.normalizedEventName(_525);
+if(_525=="key"){
 if(dojo.render.html.ie){
-this.addListener(node,"onkeydown",fp,_51d,_51e);
+this.addListener(node,"onkeydown",fp,_527,_528);
 }
-_51b="onkeypress";
+_525="keypress";
 }
-if(_51b.substr(0,2)!="on"){
-_51b="on"+_51b;
-}
-if(!_51e){
-var _51f=function(evt){
+if(!_528){
+var _529=function(evt){
 if(!evt){
 evt=window.event;
 }
 var ret=fp(dojo.event.browser.fixEvent(evt,this));
-if(_51d){
+if(_527){
 dojo.event.browser.stopEvent(evt);
 }
 return ret;
 };
 }else{
-_51f=fp;
+_529=fp;
 }
 if(node.addEventListener){
-node.addEventListener(_51b.substr(2),_51f,_51d);
-return _51f;
+node.addEventListener(_525,_529,_527);
+return _529;
 }else{
-if(typeof node[_51b]=="function"){
-var _522=node[_51b];
-node[_51b]=function(e){
-_522(e);
-return _51f(e);
+_525="on"+_525;
+if(typeof node[_525]=="function"){
+var _52c=node[_525];
+node[_525]=function(e){
+_52c(e);
+return _529(e);
 };
 }else{
-node[_51b]=_51f;
+node[_525]=_529;
 }
 if(dojo.render.html.ie){
-this.addClobberNodeAttrs(node,[_51b]);
+this.addClobberNodeAttrs(node,[_525]);
 }
-return _51f;
+return _529;
 }
 };
 this.isEvent=function(obj){
 return (typeof obj!="undefined")&&(obj)&&(typeof Event!="undefined")&&(obj.eventPhase);
 };
 this.currentEvent=null;
-this.callListener=function(_525,_526){
-if(typeof _525!="function"){
-dojo.raise("listener not a function: "+_525);
+this.callListener=function(_52f,_530){
+if(typeof _52f!="function"){
+dojo.raise("listener not a function: "+_52f);
 }
-dojo.event.browser.currentEvent.currentTarget=_526;
-return _525.call(_526,dojo.event.browser.currentEvent);
+dojo.event.browser.currentEvent.currentTarget=_530;
+return _52f.call(_530,dojo.event.browser.currentEvent);
 };
 this._stopPropagation=function(){
 dojo.event.browser.currentEvent.cancelBubble=true;
@@ -63625,7 +43694,7 @@
 for(var key in this.keys){
 this.revKeys[this.keys[key]]=key;
 }
-this.fixEvent=function(evt,_529){
+this.fixEvent=function(evt,_533){
 if(!evt){
 if(window["event"]){
 evt=window.event;
@@ -63702,14 +43771,14 @@
 break;
 default:
 if(evt.ctrlKey||evt.altKey){
-var _52b=evt.keyCode;
-if(_52b>=65&&_52b<=90&&evt.shiftKey==false){
-_52b+=32;
+var _535=evt.keyCode;
+if(_535>=65&&_535<=90&&evt.shiftKey==false){
+_535+=32;
 }
-if(_52b>=1&&_52b<=26&&evt.ctrlKey){
-_52b+=96;
+if(_535>=1&&_535<=26&&evt.ctrlKey){
+_535+=96;
 }
-evt.key=String.fromCharCode(_52b);
+evt.key=String.fromCharCode(_535);
 }
 }
 }else{
@@ -63735,11 +43804,11 @@
 evt.key=evt.which;
 break;
 default:
-var _52b=evt.which;
+var _535=evt.which;
 if((evt.ctrlKey||evt.altKey||evt.metaKey)&&(evt.which>=65&&evt.which<=90&&evt.shiftKey==false)){
-_52b+=32;
+_535+=32;
 }
-evt.key=String.fromCharCode(_52b);
+evt.key=String.fromCharCode(_535);
 }
 }
 }
@@ -63844,7 +43913,7 @@
 evt.target=evt.srcElement;
 }
 if(!evt.currentTarget){
-evt.currentTarget=(_529?_529:evt.srcElement);
+evt.currentTarget=(_533?_533:evt.srcElement);
 }
 if(!evt.layerX){
 evt.layerX=evt.offsetX;
@@ -63853,12 +43922,12 @@
 evt.layerY=evt.offsetY;
 }
 var doc=(evt.srcElement&&evt.srcElement.ownerDocument)?evt.srcElement.ownerDocument:document;
-var _52d=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
+var _537=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
 if(!evt.pageX){
-evt.pageX=evt.clientX+(_52d.scrollLeft||0);
+evt.pageX=evt.clientX+(_537.scrollLeft||0);
 }
 if(!evt.pageY){
-evt.pageY=evt.clientY+(_52d.scrollTop||0);
+evt.pageY=evt.clientY+(_537.scrollTop||0);
 }
 if(evt.type=="mouseover"){
 evt.relatedTarget=evt.fromElement;
@@ -63883,50 +43952,51 @@
 }
 };
 };
+dojo.kwCompoundRequire({common:["dojo.event.common","dojo.event.topic"],browser:["dojo.event.browser"],dashboard:["dojo.event.browser"]});
 dojo.provide("dojo.event.*");
 dojo.provide("dojo.lang.declare");
-dojo.lang.declare=function(_52f,_530,init,_532){
-if((dojo.lang.isFunction(_532))||((!_532)&&(!dojo.lang.isFunction(init)))){
-var temp=_532;
-_532=init;
+dojo.lang.declare=function(_539,_53a,init,_53c){
+if((dojo.lang.isFunction(_53c))||((!_53c)&&(!dojo.lang.isFunction(init)))){
+var temp=_53c;
+_53c=init;
 init=temp;
 }
-var _534=[];
-if(dojo.lang.isArray(_530)){
-_534=_530;
-_530=_534.shift();
+var _53e=[];
+if(dojo.lang.isArray(_53a)){
+_53e=_53a;
+_53a=_53e.shift();
 }
 if(!init){
-init=dojo.evalObjPath(_52f,false);
+init=dojo.evalObjPath(_539,false);
 if((init)&&(!dojo.lang.isFunction(init))){
 init=null;
 }
 }
 var ctor=dojo.lang.declare._makeConstructor();
-var scp=(_530?_530.prototype:null);
+var scp=(_53a?_53a.prototype:null);
 if(scp){
 scp.prototyping=true;
-ctor.prototype=new _530();
+ctor.prototype=new _53a();
 scp.prototyping=false;
 }
 ctor.superclass=scp;
-ctor.mixins=_534;
-for(var i=0,l=_534.length;i<l;i++){
-dojo.lang.extend(ctor,_534[i].prototype);
+ctor.mixins=_53e;
+for(var i=0,l=_53e.length;i<l;i++){
+dojo.lang.extend(ctor,_53e[i].prototype);
 }
 ctor.prototype.initializer=null;
-ctor.prototype.declaredClass=_52f;
-if(dojo.lang.isArray(_532)){
-dojo.lang.extend.apply(dojo.lang,[ctor].concat(_532));
+ctor.prototype.declaredClass=_539;
+if(dojo.lang.isArray(_53c)){
+dojo.lang.extend.apply(dojo.lang,[ctor].concat(_53c));
 }else{
-dojo.lang.extend(ctor,(_532)||{});
+dojo.lang.extend(ctor,(_53c)||{});
 }
 dojo.lang.extend(ctor,dojo.lang.declare._common);
 ctor.prototype.constructor=ctor;
 ctor.prototype.initializer=(ctor.prototype.initializer)||(init)||(function(){
 });
-var _539=dojo.parseObjPath(_52f,null,true);
-_539.obj[_539.prop]=ctor;
+var _543=dojo.parseObjPath(_539,null,true);
+_543.obj[_543.prop]=ctor;
 return ctor;
 };
 dojo.lang.declare._makeConstructor=function(){
@@ -63951,19 +44021,19 @@
 };
 dojo.lang.declare._common={_getPropContext:function(){
 return (this.___proto||this);
-},_contextMethod:function(_53f,_540,args){
-var _542,_543=this.___proto;
-this.___proto=_53f;
+},_contextMethod:function(_549,_54a,args){
+var _54c,_54d=this.___proto;
+this.___proto=_549;
 try{
-_542=_53f[_540].apply(this,(args||[]));
+_54c=_549[_54a].apply(this,(args||[]));
 }
 catch(e){
 throw e;
 }
 finally{
-this.___proto=_543;
+this.___proto=_54d;
 }
-return _542;
+return _54c;
 },_inherited:function(prop,args){
 var p=this._getPropContext();
 do{
@@ -63982,23 +44052,23 @@
 dojo.provide("dojo.logging.LogFilter");
 dojo.provide("dojo.logging.Record");
 dojo.provide("dojo.log");
-dojo.logging.Record=function(_549,_54a){
-this.level=_549;
+dojo.logging.Record=function(_553,_554){
+this.level=_553;
 this.message="";
 this.msgArgs=[];
 this.time=new Date();
-if(dojo.lang.isArray(_54a)){
-if(_54a.length>0&&dojo.lang.isString(_54a[0])){
-this.message=_54a.shift();
+if(dojo.lang.isArray(_554)){
+if(_554.length>0&&dojo.lang.isString(_554[0])){
+this.message=_554.shift();
 }
-this.msgArgs=_54a;
+this.msgArgs=_554;
 }else{
-this.message=_54a;
+this.message=_554;
 }
 };
-dojo.logging.LogFilter=function(_54b){
-this.passChain=_54b||"";
-this.filter=function(_54c){
+dojo.logging.LogFilter=function(_555){
+this.passChain=_555||"";
+this.filter=function(_556){
 return true;
 };
 };
@@ -64028,15 +44098,15 @@
 },addFilter:function(flt){
 this.filters.push(flt);
 return this.filters.length-1;
-},removeFilterByIndex:function(_553){
-if(this.filters[_553]){
-delete this.filters[_553];
+},removeFilterByIndex:function(_55d){
+if(this.filters[_55d]){
+delete this.filters[_55d];
 return true;
 }
 return false;
-},removeFilter:function(_554){
+},removeFilter:function(_55e){
 for(var x=0;x<this.filters.length;x++){
-if(this.filters[x]===_554){
+if(this.filters[x]===_55e){
 delete this.filters[x];
 return true;
 }
@@ -64081,17 +44151,17 @@
 return this.logType("ERROR",this._argsToArr(arguments));
 },critical:function(msg){
 return this.logType("CRITICAL",this._argsToArr(arguments));
-},exception:function(msg,e,_564){
+},exception:function(msg,e,_56e){
 if(e){
-var _565=[e.name,(e.description||e.message)];
+var _56f=[e.name,(e.description||e.message)];
 if(e.fileName){
-_565.push(e.fileName);
-_565.push("line "+e.lineNumber);
+_56f.push(e.fileName);
+_56f.push("line "+e.lineNumber);
 }
-msg+=" "+_565.join(" : ");
+msg+=" "+_56f.join(" : ");
 }
 this.logType("ERROR",msg);
-if(!_564){
+if(!_56e){
 throw e;
 }
 },logType:function(type,args){
@@ -64103,31 +44173,31 @@
 },crit:function(){
 this.critical.apply(this,arguments);
 }});
-dojo.logging.LogHandler=function(_568){
-this.cutOffLevel=(_568)?_568:0;
+dojo.logging.LogHandler=function(_572){
+this.cutOffLevel=(_572)?_572:0;
 this.formatter=null;
 this.data=[];
 this.filters=[];
 };
-dojo.lang.extend(dojo.logging.LogHandler,{setFormatter:function(_569){
+dojo.lang.extend(dojo.logging.LogHandler,{setFormatter:function(_573){
 dojo.unimplemented("setFormatter");
 },flush:function(){
 },close:function(){
 },handleError:function(){
 dojo.deprecated("dojo.logging.LogHandler.handleError","use handle()","0.6");
-},handle:function(_56a){
-if((this.filter(_56a))&&(_56a.level>=this.cutOffLevel)){
-this.emit(_56a);
+},handle:function(_574){
+if((this.filter(_574))&&(_574.level>=this.cutOffLevel)){
+this.emit(_574);
 }
-},emit:function(_56b){
+},emit:function(_575){
 dojo.unimplemented("emit");
 }});
 void (function(){
-var _56c=["setLevel","addFilter","removeFilterByIndex","removeFilter","removeAllFilters","filter"];
+var _576=["setLevel","addFilter","removeFilterByIndex","removeFilter","removeAllFilters","filter"];
 var tgt=dojo.logging.LogHandler.prototype;
 var src=dojo.logging.Logger.prototype;
-for(var x=0;x<_56c.length;x++){
-tgt[_56c[x]]=src[_56c[x]];
+for(var x=0;x<_576.length;x++){
+tgt[_576[x]]=src[_576[x]];
 }
 })();
 dojo.logging.log=new dojo.logging.Logger();
@@ -64156,20 +44226,20 @@
 }
 return null;
 };
-dojo.declare("dojo.logging.MemoryLogHandler",dojo.logging.LogHandler,{initializer:function(_575,_576,_577,_578){
-dojo.logging.LogHandler.call(this,_575);
-this.numRecords=(typeof djConfig["loggingNumRecords"]!="undefined")?djConfig["loggingNumRecords"]:((_576)?_576:-1);
-this.postType=(typeof djConfig["loggingPostType"]!="undefined")?djConfig["loggingPostType"]:(_577||-1);
-this.postInterval=(typeof djConfig["loggingPostInterval"]!="undefined")?djConfig["loggingPostInterval"]:(_577||-1);
-},emit:function(_579){
+dojo.declare("dojo.logging.MemoryLogHandler",dojo.logging.LogHandler,{initializer:function(_57f,_580,_581,_582){
+dojo.logging.LogHandler.call(this,_57f);
+this.numRecords=(typeof djConfig["loggingNumRecords"]!="undefined")?djConfig["loggingNumRecords"]:((_580)?_580:-1);
+this.postType=(typeof djConfig["loggingPostType"]!="undefined")?djConfig["loggingPostType"]:(_581||-1);
+this.postInterval=(typeof djConfig["loggingPostInterval"]!="undefined")?djConfig["loggingPostInterval"]:(_581||-1);
+},emit:function(_583){
 if(!djConfig.isDebug){
 return;
 }
-var _57a=String(dojo.log.getLevelName(_579.level)+": "+_579.time.toLocaleTimeString())+": "+_579.message;
+var _584=String(dojo.log.getLevelName(_583.level)+": "+_583.time.toLocaleTimeString())+": "+_583.message;
 if(!dj_undef("println",dojo.hostenv)){
-dojo.hostenv.println(_57a,_579.msgArgs);
+dojo.hostenv.println(_584,_583.msgArgs);
 }
-this.data.push(_579);
+this.data.push(_583);
 if(this.numRecords!=-1){
 while(this.data.length>this.numRecords){
 this.data.shift();
@@ -64179,6 +44249,7 @@
 dojo.logging.logQueueHandler=new dojo.logging.MemoryLogHandler(0,50,0,10000);
 dojo.logging.log.addHandler(dojo.logging.logQueueHandler);
 dojo.log=dojo.logging.log;
+dojo.kwCompoundRequire({common:[["dojo.logging.Logger",false,false]],rhino:["dojo.logging.RhinoLogger"]});
 dojo.provide("dojo.logging.*");
 dojo.provide("dojo.string.common");
 dojo.string.trim=function(str,wh){
@@ -64197,12 +44268,12 @@
 dojo.string.trimEnd=function(str){
 return dojo.string.trim(str,-1);
 };
-dojo.string.repeat=function(str,_581,_582){
+dojo.string.repeat=function(str,_58b,_58c){
 var out="";
-for(var i=0;i<_581;i++){
+for(var i=0;i<_58b;i++){
 out+=str;
-if(_582&&i<_581-1){
-out+=_582;
+if(_58c&&i<_58b-1){
+out+=_58c;
 }
 }
 return out;
@@ -64234,59 +44305,59 @@
 dojo.provide("dojo.io.common");
 dojo.io.transports=[];
 dojo.io.hdlrFuncNames=["load","error","timeout"];
-dojo.io.Request=function(url,_591,_592,_593){
+dojo.io.Request=function(url,_59b,_59c,_59d){
 if((arguments.length==1)&&(arguments[0].constructor==Object)){
 this.fromKwArgs(arguments[0]);
 }else{
 this.url=url;
-if(_591){
-this.mimetype=_591;
+if(_59b){
+this.mimetype=_59b;
 }
-if(_592){
-this.transport=_592;
+if(_59c){
+this.transport=_59c;
 }
 if(arguments.length>=4){
-this.changeUrl=_593;
+this.changeUrl=_59d;
 }
 }
 };
-dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_596,_597){
-},error:function(type,_599,_59a,_59b){
-},timeout:function(type,_59d,_59e,_59f){
-},handle:function(type,data,_5a2,_5a3){
+dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_5a0,_5a1){
+},error:function(type,_5a3,_5a4,_5a5){
+},timeout:function(type,_5a7,_5a8,_5a9){
+},handle:function(type,data,_5ac,_5ad){
 },timeoutSeconds:0,abort:function(){
-},fromKwArgs:function(_5a4){
-if(_5a4["url"]){
-_5a4.url=_5a4.url.toString();
+},fromKwArgs:function(_5ae){
+if(_5ae["url"]){
+_5ae.url=_5ae.url.toString();
 }
-if(_5a4["formNode"]){
-_5a4.formNode=dojo.byId(_5a4.formNode);
+if(_5ae["formNode"]){
+_5ae.formNode=dojo.byId(_5ae.formNode);
 }
-if(!_5a4["method"]&&_5a4["formNode"]&&_5a4["formNode"].method){
-_5a4.method=_5a4["formNode"].method;
+if(!_5ae["method"]&&_5ae["formNode"]&&_5ae["formNode"].method){
+_5ae.method=_5ae["formNode"].method;
 }
-if(!_5a4["handle"]&&_5a4["handler"]){
-_5a4.handle=_5a4.handler;
+if(!_5ae["handle"]&&_5ae["handler"]){
+_5ae.handle=_5ae.handler;
 }
-if(!_5a4["load"]&&_5a4["loaded"]){
-_5a4.load=_5a4.loaded;
+if(!_5ae["load"]&&_5ae["loaded"]){
+_5ae.load=_5ae.loaded;
 }
-if(!_5a4["changeUrl"]&&_5a4["changeURL"]){
-_5a4.changeUrl=_5a4.changeURL;
+if(!_5ae["changeUrl"]&&_5ae["changeURL"]){
+_5ae.changeUrl=_5ae.changeURL;
 }
-_5a4.encoding=dojo.lang.firstValued(_5a4["encoding"],djConfig["bindEncoding"],"");
-_5a4.sendTransport=dojo.lang.firstValued(_5a4["sendTransport"],djConfig["ioSendTransport"],false);
-var _5a5=dojo.lang.isFunction;
+_5ae.encoding=dojo.lang.firstValued(_5ae["encoding"],djConfig["bindEncoding"],"");
+_5ae.sendTransport=dojo.lang.firstValued(_5ae["sendTransport"],djConfig["ioSendTransport"],false);
+var _5af=dojo.lang.isFunction;
 for(var x=0;x<dojo.io.hdlrFuncNames.length;x++){
 var fn=dojo.io.hdlrFuncNames[x];
-if(_5a4[fn]&&_5a5(_5a4[fn])){
+if(_5ae[fn]&&_5af(_5ae[fn])){
 continue;
 }
-if(_5a4["handle"]&&_5a5(_5a4["handle"])){
-_5a4[fn]=_5a4.handle;
+if(_5ae["handle"]&&_5af(_5ae["handle"])){
+_5ae[fn]=_5ae.handle;
 }
 }
-dojo.lang.mixin(this,_5a4);
+dojo.lang.mixin(this,_5ae);
 }});
 dojo.io.Error=function(msg,type,num){
 this.message=msg;
@@ -64297,79 +44368,79 @@
 this.push(name);
 this[name]=dojo.io[name];
 };
-dojo.io.bind=function(_5ac){
-if(!(_5ac instanceof dojo.io.Request)){
+dojo.io.bind=function(_5b6){
+if(!(_5b6 instanceof dojo.io.Request)){
 try{
-_5ac=new dojo.io.Request(_5ac);
+_5b6=new dojo.io.Request(_5b6);
 }
 catch(e){
 dojo.debug(e);
 }
 }
-var _5ad="";
-if(_5ac["transport"]){
-_5ad=_5ac["transport"];
-if(!this[_5ad]){
-dojo.io.sendBindError(_5ac,"No dojo.io.bind() transport with name '"+_5ac["transport"]+"'.");
-return _5ac;
+var _5b7="";
+if(_5b6["transport"]){
+_5b7=_5b6["transport"];
+if(!this[_5b7]){
+dojo.io.sendBindError(_5b6,"No dojo.io.bind() transport with name '"+_5b6["transport"]+"'.");
+return _5b6;
 }
-if(!this[_5ad].canHandle(_5ac)){
-dojo.io.sendBindError(_5ac,"dojo.io.bind() transport with name '"+_5ac["transport"]+"' cannot handle this type of request.");
-return _5ac;
+if(!this[_5b7].canHandle(_5b6)){
+dojo.io.sendBindError(_5b6,"dojo.io.bind() transport with name '"+_5b6["transport"]+"' cannot handle this type of request.");
+return _5b6;
 }
 }else{
 for(var x=0;x<dojo.io.transports.length;x++){
 var tmp=dojo.io.transports[x];
-if((this[tmp])&&(this[tmp].canHandle(_5ac))){
-_5ad=tmp;
+if((this[tmp])&&(this[tmp].canHandle(_5b6))){
+_5b7=tmp;
 break;
 }
 }
-if(_5ad==""){
-dojo.io.sendBindError(_5ac,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
-return _5ac;
+if(_5b7==""){
+dojo.io.sendBindError(_5b6,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
+return _5b6;
 }
 }
-this[_5ad].bind(_5ac);
-_5ac.bindSuccess=true;
-return _5ac;
+this[_5b7].bind(_5b6);
+_5b6.bindSuccess=true;
+return _5b6;
 };
-dojo.io.sendBindError=function(_5b0,_5b1){
-if((typeof _5b0.error=="function"||typeof _5b0.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
-var _5b2=new dojo.io.Error(_5b1);
+dojo.io.sendBindError=function(_5ba,_5bb){
+if((typeof _5ba.error=="function"||typeof _5ba.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
+var _5bc=new dojo.io.Error(_5bb);
 setTimeout(function(){
-_5b0[(typeof _5b0.error=="function")?"error":"handle"]("error",_5b2,null,_5b0);
+_5ba[(typeof _5ba.error=="function")?"error":"handle"]("error",_5bc,null,_5ba);
 },50);
 }else{
-dojo.raise(_5b1);
+dojo.raise(_5bb);
 }
 };
-dojo.io.queueBind=function(_5b3){
-if(!(_5b3 instanceof dojo.io.Request)){
+dojo.io.queueBind=function(_5bd){
+if(!(_5bd instanceof dojo.io.Request)){
 try{
-_5b3=new dojo.io.Request(_5b3);
+_5bd=new dojo.io.Request(_5bd);
 }
 catch(e){
 dojo.debug(e);
 }
 }
-var _5b4=_5b3.load;
-_5b3.load=function(){
+var _5be=_5bd.load;
+_5bd.load=function(){
 dojo.io._queueBindInFlight=false;
-var ret=_5b4.apply(this,arguments);
+var ret=_5be.apply(this,arguments);
 dojo.io._dispatchNextQueueBind();
 return ret;
 };
-var _5b6=_5b3.error;
-_5b3.error=function(){
+var _5c0=_5bd.error;
+_5bd.error=function(){
 dojo.io._queueBindInFlight=false;
-var ret=_5b6.apply(this,arguments);
+var ret=_5c0.apply(this,arguments);
 dojo.io._dispatchNextQueueBind();
 return ret;
 };
-dojo.io._bindQueue.push(_5b3);
+dojo.io._bindQueue.push(_5bd);
 dojo.io._dispatchNextQueueBind();
-return _5b3;
+return _5bd;
 };
 dojo.io._dispatchNextQueueBind=function(){
 if(!dojo.io._queueBindInFlight){
@@ -64383,48 +44454,48 @@
 };
 dojo.io._bindQueue=[];
 dojo.io._queueBindInFlight=false;
-dojo.io.argsFromMap=function(map,_5b9,last){
-var enc=/utf/i.test(_5b9||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _5bc=[];
-var _5bd=new Object();
+dojo.io.argsFromMap=function(map,_5c3,last){
+var enc=/utf/i.test(_5c3||"")?encodeURIComponent:dojo.string.encodeAscii;
+var _5c6=[];
+var _5c7=new Object();
 for(var name in map){
-var _5bf=function(elt){
+var _5c9=function(elt){
 var val=enc(name)+"="+enc(elt);
-_5bc[(last==name)?"push":"unshift"](val);
+_5c6[(last==name)?"push":"unshift"](val);
 };
-if(!_5bd[name]){
-var _5c2=map[name];
-if(dojo.lang.isArray(_5c2)){
-dojo.lang.forEach(_5c2,_5bf);
+if(!_5c7[name]){
+var _5cc=map[name];
+if(dojo.lang.isArray(_5cc)){
+dojo.lang.forEach(_5cc,_5c9);
 }else{
-_5bf(_5c2);
+_5c9(_5cc);
 }
 }
 }
-return _5bc.join("&");
+return _5c6.join("&");
 };
-dojo.io.setIFrameSrc=function(_5c3,src,_5c5){
+dojo.io.setIFrameSrc=function(_5cd,src,_5cf){
 try{
 var r=dojo.render.html;
-if(!_5c5){
+if(!_5cf){
 if(r.safari){
-_5c3.location=src;
+_5cd.location=src;
 }else{
-frames[_5c3.name].location=src;
+frames[_5cd.name].location=src;
 }
 }else{
 var idoc;
 if(r.ie){
-idoc=_5c3.contentWindow.document;
+idoc=_5cd.contentWindow.document;
 }else{
 if(r.safari){
-idoc=_5c3.document;
+idoc=_5cd.document;
 }else{
-idoc=_5c3.contentWindow;
+idoc=_5cd.contentWindow;
 }
 }
 if(!idoc){
-_5c3.location=src;
+_5cd.location=src;
 return;
 }else{
 idoc.location.replace(src);
@@ -64437,9 +44508,9 @@
 }
 };
 dojo.provide("dojo.string.extras");
-dojo.string.substituteParams=function(_5c8,hash){
+dojo.string.substituteParams=function(_5d2,hash){
 var map=(typeof hash=="object")?hash:dojo.lang.toArray(arguments,1);
-return _5c8.replace(/\%\{(\w+)\}/g,function(_5cb,key){
+return _5d2.replace(/\%\{(\w+)\}/g,function(_5d5,key){
 if(typeof (map[key])!="undefined"&&map[key]!=null){
 return map[key];
 }
@@ -64453,11 +44524,11 @@
 if(arguments.length==0){
 str=this;
 }
-var _5ce=str.split(" ");
-for(var i=0;i<_5ce.length;i++){
-_5ce[i]=_5ce[i].charAt(0).toUpperCase()+_5ce[i].substring(1);
+var _5d8=str.split(" ");
+for(var i=0;i<_5d8.length;i++){
+_5d8[i]=_5d8[i].charAt(0).toUpperCase()+_5d8[i].substring(1);
 }
-return _5ce.join(" ");
+return _5d8.join(" ");
 };
 dojo.string.isBlank=function(str){
 if(!dojo.lang.isString(str)){
@@ -64470,15 +44541,15 @@
 return str;
 }
 var ret="";
-var _5d3=escape(str);
-var _5d4,re=/%u([0-9A-F]{4})/i;
-while((_5d4=_5d3.match(re))){
-var num=Number("0x"+_5d4[1]);
-var _5d7=escape("&#"+num+";");
-ret+=_5d3.substring(0,_5d4.index)+_5d7;
-_5d3=_5d3.substring(_5d4.index+_5d4[0].length);
+var _5dd=escape(str);
+var _5de,re=/%u([0-9A-F]{4})/i;
+while((_5de=_5dd.match(re))){
+var num=Number("0x"+_5de[1]);
+var _5e1=escape("&#"+num+";");
+ret+=_5dd.substring(0,_5de.index)+_5e1;
+_5dd=_5dd.substring(_5de.index+_5de[0].length);
 }
-ret+=_5d3.replace(/\+/g,"%2B");
+ret+=_5dd.replace(/\+/g,"%2B");
 return ret;
 };
 dojo.string.escape=function(type,str){
@@ -64503,9 +44574,9 @@
 return str;
 }
 };
-dojo.string.escapeXml=function(str,_5dc){
+dojo.string.escapeXml=function(str,_5e6){
 str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_5dc){
+if(!_5e6){
 str=str.replace(/'/gm,"&#39;");
 }
 return str;
@@ -64528,8 +44599,8 @@
 }
 return str.substring(0,len).replace(/\.+$/,"")+"...";
 };
-dojo.string.endsWith=function(str,end,_5e5){
-if(_5e5){
+dojo.string.endsWith=function(str,end,_5ef){
+if(_5ef){
 str=str.toLowerCase();
 end=end.toLowerCase();
 }
@@ -64546,12 +44617,12 @@
 }
 return false;
 };
-dojo.string.startsWith=function(str,_5e9,_5ea){
-if(_5ea){
+dojo.string.startsWith=function(str,_5f3,_5f4){
+if(_5f4){
 str=str.toLowerCase();
-_5e9=_5e9.toLowerCase();
+_5f3=_5f3.toLowerCase();
 }
-return str.indexOf(_5e9)==0;
+return str.indexOf(_5f3)==0;
 };
 dojo.string.startsWithAny=function(str){
 for(var i=1;i<arguments.length;i++){
@@ -64569,12 +44640,12 @@
 }
 return false;
 };
-dojo.string.normalizeNewlines=function(text,_5f0){
-if(_5f0=="\n"){
+dojo.string.normalizeNewlines=function(text,_5fa){
+if(_5fa=="\n"){
 text=text.replace(/\r\n/g,"\n");
 text=text.replace(/\r/g,"\n");
 }else{
-if(_5f0=="\r"){
+if(_5fa=="\r"){
 text=text.replace(/\r\n/g,"\r");
 text=text.replace(/\n/g,"\r");
 }else{
@@ -64583,25 +44654,25 @@
 }
 return text;
 };
-dojo.string.splitEscaped=function(str,_5f2){
-var _5f3=[];
-for(var i=0,_5f5=0;i<str.length;i++){
+dojo.string.splitEscaped=function(str,_5fc){
+var _5fd=[];
+for(var i=0,_5ff=0;i<str.length;i++){
 if(str.charAt(i)=="\\"){
 i++;
 continue;
 }
-if(str.charAt(i)==_5f2){
-_5f3.push(str.substring(_5f5,i));
-_5f5=i+1;
+if(str.charAt(i)==_5fc){
+_5fd.push(str.substring(_5ff,i));
+_5ff=i+1;
 }
 }
-_5f3.push(str.substr(_5f5));
-return _5f3;
+_5fd.push(str.substr(_5ff));
+return _5fd;
 };
 dojo.provide("dojo.undo.browser");
 try{
 if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
+document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
 }
 }
 catch(e){
@@ -64616,6 +44687,9 @@
 var hash=null;
 var url=null;
 if(!this.historyIframe){
+if(djConfig["useXDomain"]&&!djConfig["dojoIframeHistoryUrl"]){
+dojo.debug("dojo.undo.browser: When using cross-domain Dojo builds,"+" please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"+" to the path on your domain to iframe_history.html");
+}
 this.historyIframe=window.frames["djhistory"];
 }
 if(!this.bookmarkAnchor){
@@ -64639,12 +44713,12 @@
 this.bookmarkAnchor.href=hash;
 if(dojo.render.html.ie){
 url=this._loadIframeHistory();
-var _5fa=args["back"]||args["backButton"]||args["handle"];
-var tcb=function(_5fc){
+var _604=args["back"]||args["backButton"]||args["handle"];
+var tcb=function(_606){
 if(window.location.hash!=""){
 setTimeout("window.location.href = '"+hash+"';",1);
 }
-_5fa.apply(this,[_5fc]);
+_604.apply(this,[_606]);
 };
 if(args["back"]){
 args.back=tcb;
@@ -64657,13 +44731,13 @@
 }
 }
 }
-var _5fd=args["forward"]||args["forwardButton"]||args["handle"];
-var tfw=function(_5ff){
+var _607=args["forward"]||args["forwardButton"]||args["handle"];
+var tfw=function(_609){
 if(window.location.hash!=""){
 window.location.href=hash;
 }
-if(_5fd){
-_5fd.apply(this,[_5ff]);
+if(_607){
+_607.apply(this,[_609]);
 }
 };
 if(args["forward"]){
@@ -64708,10 +44782,10 @@
 }
 }
 }
-},iframeLoaded:function(evt,_602){
+},iframeLoaded:function(evt,_60c){
 if(!dojo.render.html.opera){
-var _603=this._getUrlQuery(_602.href);
-if(_603==null){
+var _60d=this._getUrlQuery(_60c.href);
+if(_60d==null){
 if(this.historyStack.length==1){
 this.handleBackButton();
 }
@@ -64721,17 +44795,17 @@
 this.moveForward=false;
 return;
 }
-if(this.historyStack.length>=2&&_603==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
+if(this.historyStack.length>=2&&_60d==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
 this.handleBackButton();
 }else{
-if(this.forwardStack.length>0&&_603==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
+if(this.forwardStack.length>0&&_60d==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
 this.handleForwardButton();
 }
 }
 }
 },handleBackButton:function(){
-var _604=this.historyStack.pop();
-if(!_604){
+var _60e=this.historyStack.pop();
+if(!_60e){
 return;
 }
 var last=this.historyStack[this.historyStack.length-1];
@@ -64751,7 +44825,7 @@
 }
 }
 }
-this.forwardStack.push(_604);
+this.forwardStack.push(_60e);
 },handleForwardButton:function(){
 var last=this.forwardStack.pop();
 if(!last){
@@ -64772,14 +44846,14 @@
 },_createState:function(url,args,hash){
 return {"url":url,"kwArgs":args,"urlHash":hash};
 },_getUrlQuery:function(url){
-var _60b=url.split("?");
-if(_60b.length<2){
+var _615=url.split("?");
+if(_615.length<2){
 return null;
 }else{
-return _60b[1];
+return _615[1];
 }
 },_loadIframeHistory:function(){
-var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
+var url=(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"?"+(new Date()).getTime();
 this.moveForward=true;
 dojo.io.setIFrameSrc(this.historyIframe,url,false);
 return url;
@@ -64787,26 +44861,26 @@
 dojo.provide("dojo.io.BrowserIO");
 if(!dj_undef("window")){
 dojo.io.checkChildrenForFile=function(node){
-var _60e=false;
-var _60f=node.getElementsByTagName("input");
-dojo.lang.forEach(_60f,function(_610){
-if(_60e){
+var _618=false;
+var _619=node.getElementsByTagName("input");
+dojo.lang.forEach(_619,function(_61a){
+if(_618){
 return;
 }
-if(_610.getAttribute("type")=="file"){
-_60e=true;
+if(_61a.getAttribute("type")=="file"){
+_618=true;
 }
 });
-return _60e;
+return _618;
 };
-dojo.io.formHasFile=function(_611){
-return dojo.io.checkChildrenForFile(_611);
+dojo.io.formHasFile=function(_61b){
+return dojo.io.checkChildrenForFile(_61b);
 };
-dojo.io.updateNode=function(node,_613){
+dojo.io.updateNode=function(node,_61d){
 node=dojo.byId(node);
-var args=_613;
-if(dojo.lang.isString(_613)){
-args={url:_613};
+var args=_61d;
+if(dojo.lang.isString(_61d)){
+args={url:_61d};
 }
 args.mimetype="text/html";
 args.load=function(t,d,e){
@@ -64821,18 +44895,18 @@
 var type=(node.type||"").toLowerCase();
 return !node.disabled&&node.name&&!dojo.lang.inArray(["file","submit","image","reset","button"],type);
 };
-dojo.io.encodeForm=function(_61a,_61b,_61c){
-if((!_61a)||(!_61a.tagName)||(!_61a.tagName.toLowerCase()=="form")){
+dojo.io.encodeForm=function(_624,_625,_626){
+if((!_624)||(!_624.tagName)||(!_624.tagName.toLowerCase()=="form")){
 dojo.raise("Attempted to encode a non-form element.");
 }
-if(!_61c){
-_61c=dojo.io.formFilter;
+if(!_626){
+_626=dojo.io.formFilter;
 }
-var enc=/utf/i.test(_61b||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _61e=[];
-for(var i=0;i<_61a.elements.length;i++){
-var elm=_61a.elements[i];
-if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_61c(elm)){
+var enc=/utf/i.test(_625||"")?encodeURIComponent:dojo.string.encodeAscii;
+var _628=[];
+for(var i=0;i<_624.elements.length;i++){
+var elm=_624.elements[i];
+if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_626(elm)){
 continue;
 }
 var name=enc(elm.name);
@@ -64840,30 +44914,30 @@
 if(type=="select-multiple"){
 for(var j=0;j<elm.options.length;j++){
 if(elm.options[j].selected){
-_61e.push(name+"="+enc(elm.options[j].value));
+_628.push(name+"="+enc(elm.options[j].value));
 }
 }
 }else{
 if(dojo.lang.inArray(["radio","checkbox"],type)){
 if(elm.checked){
-_61e.push(name+"="+enc(elm.value));
+_628.push(name+"="+enc(elm.value));
 }
 }else{
-_61e.push(name+"="+enc(elm.value));
+_628.push(name+"="+enc(elm.value));
 }
 }
 }
-var _624=_61a.getElementsByTagName("input");
-for(var i=0;i<_624.length;i++){
-var _625=_624[i];
-if(_625.type.toLowerCase()=="image"&&_625.form==_61a&&_61c(_625)){
-var name=enc(_625.name);
-_61e.push(name+"="+enc(_625.value));
-_61e.push(name+".x=0");
-_61e.push(name+".y=0");
+var _62e=_624.getElementsByTagName("input");
+for(var i=0;i<_62e.length;i++){
+var _62f=_62e[i];
+if(_62f.type.toLowerCase()=="image"&&_62f.form==_624&&_626(_62f)){
+var name=enc(_62f.name);
+_628.push(name+"="+enc(_62f.value));
+_628.push(name+".x=0");
+_628.push(name+".y=0");
 }
 }
-return _61e.join("&")+"&";
+return _628.join("&")+"&";
 };
 dojo.io.FormBind=function(args){
 this.bindArgs={};
@@ -64897,11 +44971,11 @@
 this.connect(node,"onclick","click");
 }
 }
-var _62b=form.getElementsByTagName("input");
-for(var i=0;i<_62b.length;i++){
-var _62c=_62b[i];
-if(_62c.type.toLowerCase()=="image"&&_62c.form==form){
-this.connect(_62c,"onclick","click");
+var _635=form.getElementsByTagName("input");
+for(var i=0;i<_635.length;i++){
+var _636=_635[i];
+if(_636.type.toLowerCase()=="image"&&_636.form==form){
+this.connect(_636,"onclick","click");
 }
 }
 },onSubmit:function(form){
@@ -64919,26 +44993,26 @@
 this.clickedButton=node;
 },formFilter:function(node){
 var type=(node.type||"").toLowerCase();
-var _633=false;
+var _63d=false;
 if(node.disabled||!node.name){
-_633=false;
+_63d=false;
 }else{
 if(dojo.lang.inArray(["submit","button","image"],type)){
 if(!this.clickedButton){
 this.clickedButton=node;
 }
-_633=node==this.clickedButton;
+_63d=node==this.clickedButton;
 }else{
-_633=!dojo.lang.inArray(["file","submit","reset","button"],type);
+_63d=!dojo.lang.inArray(["file","submit","reset","button"],type);
 }
 }
-return _633;
-},connect:function(_634,_635,_636){
+return _63d;
+},connect:function(_63e,_63f,_640){
 if(dojo.evalObjPath("dojo.event.connect")){
-dojo.event.connect(_634,_635,this,_636);
+dojo.event.connect(_63e,_63f,this,_640);
 }else{
-var fcn=dojo.lang.hitch(this,_636);
-_634[_635]=function(e){
+var fcn=dojo.lang.hitch(this,_640);
+_63e[_63f]=function(e){
 if(!e){
 e=window.event;
 }
@@ -64955,40 +45029,40 @@
 }
 }});
 dojo.io.XMLHTTPTransport=new function(){
-var _639=this;
-var _63a={};
+var _643=this;
+var _644={};
 this.useCache=false;
 this.preventCache=false;
-function getCacheKey(url,_63c,_63d){
-return url+"|"+_63c+"|"+_63d.toLowerCase();
+function getCacheKey(url,_646,_647){
+return url+"|"+_646+"|"+_647.toLowerCase();
 }
-function addToCache(url,_63f,_640,http){
-_63a[getCacheKey(url,_63f,_640)]=http;
+function addToCache(url,_649,_64a,http){
+_644[getCacheKey(url,_649,_64a)]=http;
 }
-function getFromCache(url,_643,_644){
-return _63a[getCacheKey(url,_643,_644)];
+function getFromCache(url,_64d,_64e){
+return _644[getCacheKey(url,_64d,_64e)];
 }
 this.clearCache=function(){
-_63a={};
+_644={};
 };
-function doLoad(_645,http,url,_648,_649){
+function doLoad(_64f,http,url,_652,_653){
 if(((http.status>=200)&&(http.status<300))||(http.status==304)||(location.protocol=="file:"&&(http.status==0||http.status==undefined))||(location.protocol=="chrome:"&&(http.status==0||http.status==undefined))){
 var ret;
-if(_645.method.toLowerCase()=="head"){
-var _64b=http.getAllResponseHeaders();
+if(_64f.method.toLowerCase()=="head"){
+var _655=http.getAllResponseHeaders();
 ret={};
 ret.toString=function(){
-return _64b;
+return _655;
 };
-var _64c=_64b.split(/[\r\n]+/g);
-for(var i=0;i<_64c.length;i++){
-var pair=_64c[i].match(/^([^:]+)\s*:\s*(.+)$/i);
+var _656=_655.split(/[\r\n]+/g);
+for(var i=0;i<_656.length;i++){
+var pair=_656[i].match(/^([^:]+)\s*:\s*(.+)$/i);
 if(pair){
 ret[pair[1]]=pair[2];
 }
 }
 }else{
-if(_645.mimetype=="text/javascript"){
+if(_64f.mimetype=="text/javascript"){
 try{
 ret=dj_eval(http.responseText);
 }
@@ -64998,7 +45072,7 @@
 ret=null;
 }
 }else{
-if(_645.mimetype=="text/json"||_645.mimetype=="application/json"){
+if(_64f.mimetype=="text/json"||_64f.mimetype=="application/json"){
 try{
 ret=dj_eval("("+http.responseText+")");
 }
@@ -65008,7 +45082,7 @@
 ret=false;
 }
 }else{
-if((_645.mimetype=="application/xml")||(_645.mimetype=="text/xml")){
+if((_64f.mimetype=="application/xml")||(_64f.mimetype=="text/xml")){
 ret=http.responseXML;
 if(!ret||typeof ret=="string"||!http.getResponseHeader("Content-Type")){
 ret=dojo.dom.createDocumentFromText(http.responseText);
@@ -65019,22 +45093,22 @@
 }
 }
 }
-if(_649){
-addToCache(url,_648,_645.method,http);
+if(_653){
+addToCache(url,_652,_64f.method,http);
 }
-_645[(typeof _645.load=="function")?"load":"handle"]("load",ret,http,_645);
+_64f[(typeof _64f.load=="function")?"load":"handle"]("load",ret,http,_64f);
 }else{
-var _64f=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-_645[(typeof _645.error=="function")?"error":"handle"]("error",_64f,http,_645);
+var _659=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
+_64f[(typeof _64f.error=="function")?"error":"handle"]("error",_659,http,_64f);
 }
 }
-function setHeaders(http,_651){
-if(_651["headers"]){
-for(var _652 in _651["headers"]){
-if(_652.toLowerCase()=="content-type"&&!_651["contentType"]){
-_651["contentType"]=_651["headers"][_652];
+function setHeaders(http,_65b){
+if(_65b["headers"]){
+for(var _65c in _65b["headers"]){
+if(_65c.toLowerCase()=="content-type"&&!_65b["contentType"]){
+_65b["contentType"]=_65b["headers"][_65c];
 }else{
-http.setRequestHeader(_652,_651["headers"][_652]);
+http.setRequestHeader(_65c,_65b["headers"][_65c]);
 }
 }
 }
@@ -65048,7 +45122,7 @@
 };
 this.watchInFlight=function(){
 var now=null;
-if(!dojo.hostenv._blockAsync&&!_639._blockAsync){
+if(!dojo.hostenv._blockAsync&&!_643._blockAsync){
 for(var x=this.inFlight.length-1;x>=0;x--){
 try{
 var tif=this.inFlight[x];
@@ -65076,8 +45150,8 @@
 }
 catch(e){
 try{
-var _656=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
-tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_656,tif.http,tif.req);
+var _660=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
+tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_660,tif.http,tif.req);
 }
 catch(e2){
 dojo.debug("XMLHttpTransport error callback failed: "+e2);
@@ -65092,74 +45166,74 @@
 }
 this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
 };
-var _657=dojo.hostenv.getXmlhttpObject()?true:false;
-this.canHandle=function(_658){
-return _657&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_658["mimetype"].toLowerCase()||""))&&!(_658["formNode"]&&dojo.io.formHasFile(_658["formNode"]));
+var _661=dojo.hostenv.getXmlhttpObject()?true:false;
+this.canHandle=function(_662){
+return _661&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_662["mimetype"].toLowerCase()||""))&&!(_662["formNode"]&&dojo.io.formHasFile(_662["formNode"]));
 };
 this.multipartBoundary="45309FFF-BD65-4d50-99C9-36986896A96F";
-this.bind=function(_659){
-if(!_659["url"]){
-if(!_659["formNode"]&&(_659["backButton"]||_659["back"]||_659["changeUrl"]||_659["watchForURL"])&&(!djConfig.preventBackButtonFix)){
+this.bind=function(_663){
+if(!_663["url"]){
+if(!_663["formNode"]&&(_663["backButton"]||_663["back"]||_663["changeUrl"]||_663["watchForURL"])&&(!djConfig.preventBackButtonFix)){
 dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request","Use dojo.undo.browser.addToHistory() instead.","0.4");
-dojo.undo.browser.addToHistory(_659);
+dojo.undo.browser.addToHistory(_663);
 return true;
 }
 }
-var url=_659.url;
-var _65b="";
-if(_659["formNode"]){
-var ta=_659.formNode.getAttribute("action");
-if((ta)&&(!_659["url"])){
+var url=_663.url;
+var _665="";
+if(_663["formNode"]){
+var ta=_663.formNode.getAttribute("action");
+if((ta)&&(!_663["url"])){
 url=ta;
 }
-var tp=_659.formNode.getAttribute("method");
-if((tp)&&(!_659["method"])){
-_659.method=tp;
+var tp=_663.formNode.getAttribute("method");
+if((tp)&&(!_663["method"])){
+_663.method=tp;
 }
-_65b+=dojo.io.encodeForm(_659.formNode,_659.encoding,_659["formFilter"]);
+_665+=dojo.io.encodeForm(_663.formNode,_663.encoding,_663["formFilter"]);
 }
 if(url.indexOf("#")>-1){
 dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url);
 url=url.split("#")[0];
 }
-if(_659["file"]){
-_659.method="post";
+if(_663["file"]){
+_663.method="post";
 }
-if(!_659["method"]){
-_659.method="get";
+if(!_663["method"]){
+_663.method="get";
 }
-if(_659.method.toLowerCase()=="get"){
-_659.multipart=false;
+if(_663.method.toLowerCase()=="get"){
+_663.multipart=false;
 }else{
-if(_659["file"]){
-_659.multipart=true;
+if(_663["file"]){
+_663.multipart=true;
 }else{
-if(!_659["multipart"]){
-_659.multipart=false;
+if(!_663["multipart"]){
+_663.multipart=false;
 }
 }
 }
-if(_659["backButton"]||_659["back"]||_659["changeUrl"]){
-dojo.undo.browser.addToHistory(_659);
+if(_663["backButton"]||_663["back"]||_663["changeUrl"]){
+dojo.undo.browser.addToHistory(_663);
 }
-var _65e=_659["content"]||{};
-if(_659.sendTransport){
-_65e["dojo.transport"]="xmlhttp";
+var _668=_663["content"]||{};
+if(_663.sendTransport){
+_668["dojo.transport"]="xmlhttp";
 }
 do{
-if(_659.postContent){
-_65b=_659.postContent;
+if(_663.postContent){
+_665=_663.postContent;
 break;
 }
-if(_65e){
-_65b+=dojo.io.argsFromMap(_65e,_659.encoding);
+if(_668){
+_665+=dojo.io.argsFromMap(_668,_663.encoding);
 }
-if(_659.method.toLowerCase()=="get"||!_659.multipart){
+if(_663.method.toLowerCase()=="get"||!_663.multipart){
 break;
 }
 var t=[];
-if(_65b.length){
-var q=_65b.split("&");
+if(_665.length){
+var q=_665.split("&");
 for(var i=0;i<q.length;++i){
 if(q[i].length){
 var p=q[i].split("=");
@@ -65167,71 +45241,71 @@
 }
 }
 }
-if(_659.file){
-if(dojo.lang.isArray(_659.file)){
-for(var i=0;i<_659.file.length;++i){
-var o=_659.file[i];
+if(_663.file){
+if(dojo.lang.isArray(_663.file)){
+for(var i=0;i<_663.file.length;++i){
+var o=_663.file[i];
 t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
 }
 }else{
-var o=_659.file;
+var o=_663.file;
 t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
 }
 }
 if(t.length){
 t.push("--"+this.multipartBoundary+"--","");
-_65b=t.join("\r\n");
+_665=t.join("\r\n");
 }
 }while(false);
-var _664=_659["sync"]?false:true;
-var _665=_659["preventCache"]||(this.preventCache==true&&_659["preventCache"]!=false);
-var _666=_659["useCache"]==true||(this.useCache==true&&_659["useCache"]!=false);
-if(!_665&&_666){
-var _667=getFromCache(url,_65b,_659.method);
-if(_667){
-doLoad(_659,_667,url,_65b,false);
+var _66e=_663["sync"]?false:true;
+var _66f=_663["preventCache"]||(this.preventCache==true&&_663["preventCache"]!=false);
+var _670=_663["useCache"]==true||(this.useCache==true&&_663["useCache"]!=false);
+if(!_66f&&_670){
+var _671=getFromCache(url,_665,_663.method);
+if(_671){
+doLoad(_663,_671,url,_665,false);
 return;
 }
 }
-var http=dojo.hostenv.getXmlhttpObject(_659);
-var _669=false;
-if(_664){
-var _66a=this.inFlight.push({"req":_659,"http":http,"url":url,"query":_65b,"useCache":_666,"startTime":_659.timeoutSeconds?(new Date()).getTime():0});
+var http=dojo.hostenv.getXmlhttpObject(_663);
+var _673=false;
+if(_66e){
+var _674=this.inFlight.push({"req":_663,"http":http,"url":url,"query":_665,"useCache":_670,"startTime":_663.timeoutSeconds?(new Date()).getTime():0});
 this.startWatchingInFlight();
 }else{
-_639._blockAsync=true;
+_643._blockAsync=true;
 }
-if(_659.method.toLowerCase()=="post"){
-if(!_659.user){
-http.open("POST",url,_664);
+if(_663.method.toLowerCase()=="post"){
+if(!_663.user){
+http.open("POST",url,_66e);
 }else{
-http.open("POST",url,_664,_659.user,_659.password);
+http.open("POST",url,_66e,_663.user,_663.password);
 }
-setHeaders(http,_659);
-http.setRequestHeader("Content-Type",_659.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_659.contentType||"application/x-www-form-urlencoded"));
+setHeaders(http,_663);
+http.setRequestHeader("Content-Type",_663.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_663.contentType||"application/x-www-form-urlencoded"));
 try{
-http.send(_65b);
+http.send(_665);
 }
 catch(e){
 if(typeof http.abort=="function"){
 http.abort();
 }
-doLoad(_659,{status:404},url,_65b,_666);
+doLoad(_663,{status:404},url,_665,_670);
 }
 }else{
-var _66b=url;
-if(_65b!=""){
-_66b+=(_66b.indexOf("?")>-1?"&":"?")+_65b;
+var _675=url;
+if(_665!=""){
+_675+=(_675.indexOf("?")>-1?"&":"?")+_665;
 }
-if(_665){
-_66b+=(dojo.string.endsWithAny(_66b,"?","&")?"":(_66b.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
+if(_66f){
+_675+=(dojo.string.endsWithAny(_675,"?","&")?"":(_675.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
 }
-if(!_659.user){
-http.open(_659.method.toUpperCase(),_66b,_664);
+if(!_663.user){
+http.open(_663.method.toUpperCase(),_675,_66e);
 }else{
-http.open(_659.method.toUpperCase(),_66b,_664,_659.user,_659.password);
+http.open(_663.method.toUpperCase(),_675,_66e,_663.user,_663.password);
 }
-setHeaders(http,_659);
+setHeaders(http,_663);
 try{
 http.send(null);
 }
@@ -65239,14 +45313,14 @@
 if(typeof http.abort=="function"){
 http.abort();
 }
-doLoad(_659,{status:404},url,_65b,_666);
+doLoad(_663,{status:404},url,_665,_670);
 }
 }
-if(!_664){
-doLoad(_659,http,url,_65b,_666);
-_639._blockAsync=false;
+if(!_66e){
+doLoad(_663,http,url,_665,_670);
+_643._blockAsync=false;
 }
-_659.abort=function(){
+_663.abort=function(){
 try{
 http._aborted=true;
 }
@@ -65260,15 +45334,15 @@
 };
 }
 dojo.provide("dojo.io.cookie");
-dojo.io.cookie.setCookie=function(name,_66d,days,path,_670,_671){
-var _672=-1;
+dojo.io.cookie.setCookie=function(name,_677,days,path,_67a,_67b){
+var _67c=-1;
 if((typeof days=="number")&&(days>=0)){
 var d=new Date();
 d.setTime(d.getTime()+(days*24*60*60*1000));
-_672=d.toGMTString();
+_67c=d.toGMTString();
 }
-_66d=escape(_66d);
-document.cookie=name+"="+_66d+";"+(_672!=-1?" expires="+_672+";":"")+(path?"path="+path:"")+(_670?"; domain="+_670:"")+(_671?"; secure":"");
+_677=escape(_677);
+document.cookie=name+"="+_677+";"+(_67c!=-1?" expires="+_67c+";":"")+(path?"path="+path:"")+(_67a?"; domain="+_67a:"")+(_67b?"; secure":"");
 };
 dojo.io.cookie.set=dojo.io.cookie.setCookie;
 dojo.io.cookie.getCookie=function(name){
@@ -65276,71 +45350,71 @@
 if(idx==-1){
 return null;
 }
-var _676=document.cookie.substring(idx+name.length+1);
-var end=_676.indexOf(";");
+var _680=document.cookie.substring(idx+name.length+1);
+var end=_680.indexOf(";");
 if(end==-1){
-end=_676.length;
+end=_680.length;
 }
-_676=_676.substring(0,end);
-_676=unescape(_676);
-return _676;
+_680=_680.substring(0,end);
+_680=unescape(_680);
+return _680;
 };
 dojo.io.cookie.get=dojo.io.cookie.getCookie;
 dojo.io.cookie.deleteCookie=function(name){
 dojo.io.cookie.setCookie(name,"-",0);
 };
-dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_67d,_67e,_67f){
+dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_687,_688,_689){
 if(arguments.length==5){
-_67f=_67d;
-_67d=null;
-_67e=null;
+_689=_687;
+_687=null;
+_688=null;
 }
-var _680=[],_681,_682="";
-if(!_67f){
-_681=dojo.io.cookie.getObjectCookie(name);
+var _68a=[],_68b,_68c="";
+if(!_689){
+_68b=dojo.io.cookie.getObjectCookie(name);
 }
 if(days>=0){
-if(!_681){
-_681={};
+if(!_68b){
+_68b={};
 }
 for(var prop in obj){
 if(obj[prop]==null){
-delete _681[prop];
+delete _68b[prop];
 }else{
 if((typeof obj[prop]=="string")||(typeof obj[prop]=="number")){
-_681[prop]=obj[prop];
+_68b[prop]=obj[prop];
 }
 }
 }
 prop=null;
-for(var prop in _681){
-_680.push(escape(prop)+"="+escape(_681[prop]));
+for(var prop in _68b){
+_68a.push(escape(prop)+"="+escape(_68b[prop]));
 }
-_682=_680.join("&");
+_68c=_68a.join("&");
 }
-dojo.io.cookie.setCookie(name,_682,days,path,_67d,_67e);
+dojo.io.cookie.setCookie(name,_68c,days,path,_687,_688);
 };
 dojo.io.cookie.getObjectCookie=function(name){
-var _685=null,_686=dojo.io.cookie.getCookie(name);
-if(_686){
-_685={};
-var _687=_686.split("&");
-for(var i=0;i<_687.length;i++){
-var pair=_687[i].split("=");
-var _68a=pair[1];
-if(isNaN(_68a)){
-_68a=unescape(pair[1]);
+var _68f=null,_690=dojo.io.cookie.getCookie(name);
+if(_690){
+_68f={};
+var _691=_690.split("&");
+for(var i=0;i<_691.length;i++){
+var pair=_691[i].split("=");
+var _694=pair[1];
+if(isNaN(_694)){
+_694=unescape(pair[1]);
 }
-_685[unescape(pair[0])]=_68a;
+_68f[unescape(pair[0])]=_694;
 }
 }
-return _685;
+return _68f;
 };
 dojo.io.cookie.isSupported=function(){
 if(typeof navigator.cookieEnabled!="boolean"){
 dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__","CookiesAllowed",90,null);
-var _68b=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
-navigator.cookieEnabled=(_68b=="CookiesAllowed");
+var _695=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
+navigator.cookieEnabled=(_695=="CookiesAllowed");
 if(navigator.cookieEnabled){
 this.deleteCookie("__TestingYourBrowserForCookieSupport__");
 }
@@ -65350,29 +45424,37 @@
 if(!dojo.io.cookies){
 dojo.io.cookies=dojo.io.cookie;
 }
+dojo.kwCompoundRequire({common:["dojo.io.common"],rhino:["dojo.io.RhinoIO"],browser:["dojo.io.BrowserIO","dojo.io.cookie"],dashboard:["dojo.io.BrowserIO","dojo.io.cookie"]});
 dojo.provide("dojo.io.*");
+dojo.kwCompoundRequire({common:[["dojo.uri.Uri",false,false]]});
 dojo.provide("dojo.uri.*");
 dojo.provide("dojo.io.IframeIO");
-dojo.io.createIFrame=function(_68c,_68d,uri){
-if(window[_68c]){
-return window[_68c];
+dojo.io.createIFrame=function(_696,_697,uri){
+if(window[_696]){
+return window[_696];
 }
-if(window.frames[_68c]){
-return window.frames[_68c];
+if(window.frames[_696]){
+return window.frames[_696];
 }
 var r=dojo.render.html;
-var _690=null;
-var turi=uri||dojo.uri.dojoUri("iframe_history.html?noInit=true");
-var _692=((r.ie)&&(dojo.render.os.win))?"<iframe name=\""+_68c+"\" src=\""+turi+"\" onload=\""+_68d+"\">":"iframe";
-_690=document.createElement(_692);
-with(_690){
-name=_68c;
-setAttribute("name",_68c);
-id=_68c;
+var _69a=null;
+var turi=uri;
+if(!turi){
+if(djConfig["useXDomain"]&&!djConfig["dojoIframeHistoryUrl"]){
+dojo.debug("dojo.io.createIFrame: When using cross-domain Dojo builds,"+" please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"+" to the path on your domain to iframe_history.html");
 }
-dojo.body().appendChild(_690);
-window[_68c]=_690;
-with(_690.style){
+turi=(djConfig["dojoIframeHistoryUrl"]||dojo.uri.moduleUri("dojo","../iframe_history.html"))+"#noInit=true";
+}
+var _69c=((r.ie)&&(dojo.render.os.win))?"<iframe name=\""+_696+"\" src=\""+turi+"\" onload=\""+_697+"\">":"iframe";
+_69a=document.createElement(_69c);
+with(_69a){
+name=_696;
+setAttribute("name",_696);
+id=_696;
+}
+dojo.body().appendChild(_69a);
+window[_696]=_69a;
+with(_69a.style){
 if(!r.safari){
 position="absolute";
 }
@@ -65381,13 +45463,13 @@
 visibility="hidden";
 }
 if(!r.ie){
-dojo.io.setIFrameSrc(_690,turi,true);
-_690.onload=new Function(_68d);
+dojo.io.setIFrameSrc(_69a,turi,true);
+_69a.onload=new Function(_697);
 }
-return _690;
+return _69a;
 };
 dojo.io.IframeTransport=new function(){
-var _693=this;
+var _69d=this;
 this.currentRequest=null;
 this.requestQueue=[];
 this.iframeName="dojoIoIframe";
@@ -65399,28 +45481,28 @@
 var cr=this.currentRequest=this.requestQueue.shift();
 cr._contentToClean=[];
 var fn=cr["formNode"];
-var _696=cr["content"]||{};
+var _6a0=cr["content"]||{};
 if(cr.sendTransport){
-_696["dojo.transport"]="iframe";
+_6a0["dojo.transport"]="iframe";
 }
 if(fn){
-if(_696){
-for(var x in _696){
+if(_6a0){
+for(var x in _6a0){
 if(!fn[x]){
 var tn;
 if(dojo.render.html.ie){
-tn=document.createElement("<input type='hidden' name='"+x+"' value='"+_696[x]+"'>");
+tn=document.createElement("<input type='hidden' name='"+x+"' value='"+_6a0[x]+"'>");
 fn.appendChild(tn);
 }else{
 tn=document.createElement("input");
 fn.appendChild(tn);
 tn.type="hidden";
 tn.name=x;
-tn.value=_696[x];
+tn.value=_6a0[x];
 }
 cr._contentToClean.push(x);
 }else{
-fn[x].value=_696[x];
+fn[x].value=_6a0[x];
 }
 }
 }
@@ -65436,52 +45518,52 @@
 fn.target=this.iframeName;
 fn.submit();
 }else{
-var _699=dojo.io.argsFromMap(this.currentRequest.content);
-var _69a=cr.url+(cr.url.indexOf("?")>-1?"&":"?")+_699;
-dojo.io.setIFrameSrc(this.iframe,_69a,true);
+var _6a3=dojo.io.argsFromMap(this.currentRequest.content);
+var _6a4=cr.url+(cr.url.indexOf("?")>-1?"&":"?")+_6a3;
+dojo.io.setIFrameSrc(this.iframe,_6a4,true);
 }
 }
 catch(e){
 this.iframeOnload(e);
 }
 };
-this.canHandle=function(_69b){
-return ((dojo.lang.inArray(["text/plain","text/html","text/javascript","text/json","application/json"],_69b["mimetype"]))&&(dojo.lang.inArray(["post","get"],_69b["method"].toLowerCase()))&&(!((_69b["sync"])&&(_69b["sync"]==true))));
+this.canHandle=function(_6a5){
+return ((dojo.lang.inArray(["text/plain","text/html","text/javascript","text/json","application/json"],_6a5["mimetype"]))&&(dojo.lang.inArray(["post","get"],_6a5["method"].toLowerCase()))&&(!((_6a5["sync"])&&(_6a5["sync"]==true))));
 };
-this.bind=function(_69c){
+this.bind=function(_6a6){
 if(!this["iframe"]){
 this.setUpIframe();
 }
-this.requestQueue.push(_69c);
+this.requestQueue.push(_6a6);
 this.fireNextRequest();
 return;
 };
 this.setUpIframe=function(){
 this.iframe=dojo.io.createIFrame(this.iframeName,"dojo.io.IframeTransport.iframeOnload();");
 };
-this.iframeOnload=function(_69d){
-if(!_693.currentRequest){
-_693.fireNextRequest();
+this.iframeOnload=function(_6a7){
+if(!_69d.currentRequest){
+_69d.fireNextRequest();
 return;
 }
-var req=_693.currentRequest;
+var req=_69d.currentRequest;
 if(req.formNode){
-var _69f=req._contentToClean;
-for(var i=0;i<_69f.length;i++){
-var key=_69f[i];
+var _6a9=req._contentToClean;
+for(var i=0;i<_6a9.length;i++){
+var key=_6a9[i];
 if(dojo.render.html.safari){
-var _6a2=req.formNode;
-for(var j=0;j<_6a2.childNodes.length;j++){
-var _6a4=_6a2.childNodes[j];
-if(_6a4.name==key){
-var _6a5=_6a4.parentNode;
-_6a5.removeChild(_6a4);
+var _6ac=req.formNode;
+for(var j=0;j<_6ac.childNodes.length;j++){
+var _6ae=_6ac.childNodes[j];
+if(_6ae.name==key){
+var _6af=_6ae.parentNode;
+_6af.removeChild(_6ae);
 break;
 }
 }
 }else{
-var _6a6=req.formNode[key];
-req.formNode.removeChild(_6a6);
+var _6b0=req.formNode[key];
+req.formNode.removeChild(_6b0);
 req.formNode[key]=null;
 }
 }
@@ -65493,16 +45575,16 @@
 req.formNode.target=req._originalTarget;
 }
 }
-var _6a7=function(_6a8){
-var doc=_6a8.contentDocument||((_6a8.contentWindow)&&(_6a8.contentWindow.document))||((_6a8.name)&&(document.frames[_6a8.name])&&(document.frames[_6a8.name].document))||null;
+var _6b1=function(_6b2){
+var doc=_6b2.contentDocument||((_6b2.contentWindow)&&(_6b2.contentWindow.document))||((_6b2.name)&&(document.frames[_6b2.name])&&(document.frames[_6b2.name].document))||null;
 return doc;
 };
-var _6aa;
-var _6ab=false;
-if(_69d){
-this._callError(req,"IframeTransport Request Error: "+_69d);
+var _6b4;
+var _6b5=false;
+if(_6a7){
+this._callError(req,"IframeTransport Request Error: "+_6a7);
 }else{
-var ifd=_6a7(_693.iframe);
+var ifd=_6b1(_69d.iframe);
 try{
 var cmt=req.mimetype;
 if((cmt=="text/javascript")||(cmt=="text/json")||(cmt=="application/json")){
@@ -65510,37 +45592,37 @@
 if(cmt=="text/json"||cmt=="application/json"){
 js="("+js+")";
 }
-_6aa=dj_eval(js);
+_6b4=dj_eval(js);
 }else{
 if(cmt=="text/html"){
-_6aa=ifd;
+_6b4=ifd;
 }else{
-_6aa=ifd.getElementsByTagName("textarea")[0].value;
+_6b4=ifd.getElementsByTagName("textarea")[0].value;
 }
 }
-_6ab=true;
+_6b5=true;
 }
 catch(e){
 this._callError(req,"IframeTransport Error: "+e);
 }
 }
 try{
-if(_6ab&&dojo.lang.isFunction(req["load"])){
-req.load("load",_6aa,req);
+if(_6b5&&dojo.lang.isFunction(req["load"])){
+req.load("load",_6b4,req);
 }
 }
 catch(e){
 throw e;
 }
 finally{
-_693.currentRequest=null;
-_693.fireNextRequest();
+_69d.currentRequest=null;
+_69d.fireNextRequest();
 }
 };
-this._callError=function(req,_6b0){
-var _6b1=new dojo.io.Error(_6b0);
+this._callError=function(req,_6ba){
+var _6bb=new dojo.io.Error(_6ba);
 if(dojo.lang.isFunction(req["error"])){
-req.error("error",_6b1,req);
+req.error("error",_6bb,req);
 }
 };
 dojo.io.transports.addTransport("IframeTransport");
@@ -65552,7 +45634,7 @@
 this.arrConcat=(dojo.render.html.capable&&dojo.render.html["ie"]);
 var a=[];
 var b="";
-var _6b5=this.length=b.length;
+var _6bf=this.length=b.length;
 if(this.arrConcat){
 if(b.length>0){
 a.push(b);
@@ -65573,8 +45655,8 @@
 }else{
 b+=s;
 }
-_6b5+=s.length;
-this.length=_6b5;
+_6bf+=s.length;
+this.length=_6bf;
 }
 }
 return this;
@@ -65582,7 +45664,7 @@
 this.clear=function(){
 a=[];
 b="";
-_6b5=this.length=0;
+_6bf=this.length=0;
 return this;
 };
 this.remove=function(f,l){
@@ -65595,7 +45677,7 @@
 s=b.substring(0,(f-1));
 }
 b=s+b.substring(f+l);
-_6b5=this.length=b.length;
+_6bf=this.length=b.length;
 if(this.arrConcat){
 a.push(b);
 b="";
@@ -65608,7 +45690,7 @@
 }
 a=[];
 b=b.replace(o,n);
-_6b5=this.length=b.length;
+_6bf=this.length=b.length;
 if(this.arrConcat){
 a.push(b);
 b="";
@@ -65627,7 +45709,7 @@
 t.splice(idx,0,s);
 b=t.join("");
 }
-_6b5=this.length=b.length;
+_6bf=this.length=b.length;
 if(this.arrConcat){
 a.push(b);
 b="";
@@ -65636,18 +45718,19 @@
 };
 this.append.apply(this,arguments);
 };
+dojo.kwCompoundRequire({common:["dojo.string","dojo.string.common","dojo.string.extras","dojo.string.Builder"]});
 dojo.provide("dojo.string.*");
 if(!this["dojo"]){
 alert("\"dojo/__package__.js\" is now located at \"dojo/dojo.js\". Please update your includes accordingly");
 }
 dojo.provide("dojo.AdapterRegistry");
-dojo.AdapterRegistry=function(_6c0){
+dojo.AdapterRegistry=function(_6ca){
 this.pairs=[];
-this.returnWrappers=_6c0||false;
+this.returnWrappers=_6ca||false;
 };
-dojo.lang.extend(dojo.AdapterRegistry,{register:function(name,_6c2,wrap,_6c4,_6c5){
-var type=(_6c5)?"unshift":"push";
-this.pairs[type]([name,_6c2,wrap,_6c4]);
+dojo.lang.extend(dojo.AdapterRegistry,{register:function(name,_6cc,wrap,_6ce,_6cf){
+var type=(_6cf)?"unshift":"push";
+this.pairs[type]([name,_6cc,wrap,_6ce]);
 },match:function(){
 for(var i=0;i<this.pairs.length;i++){
 var pair=this.pairs[i];
@@ -65671,8 +45754,8 @@
 return false;
 }});
 dojo.provide("dojo.json");
-dojo.json={jsonRegistry:new dojo.AdapterRegistry(),register:function(name,_6cd,wrap,_6cf){
-dojo.json.jsonRegistry.register(name,_6cd,wrap,_6cf);
+dojo.json={jsonRegistry:new dojo.AdapterRegistry(),register:function(name,_6d7,wrap,_6d9){
+dojo.json.jsonRegistry.register(name,_6d7,wrap,_6d9);
 },evalJson:function(json){
 try{
 return eval("("+json+")");
@@ -65682,11 +45765,11 @@
 return json;
 }
 },serialize:function(o){
-var _6d2=typeof (o);
-if(_6d2=="undefined"){
+var _6dc=typeof (o);
+if(_6dc=="undefined"){
 return "undefined";
 }else{
-if((_6d2=="number")||(_6d2=="boolean")){
+if((_6dc=="number")||(_6dc=="boolean")){
 return o+"";
 }else{
 if(o===null){
@@ -65694,24 +45777,24 @@
 }
 }
 }
-if(_6d2=="string"){
+if(_6dc=="string"){
 return dojo.string.escapeString(o);
 }
 var me=arguments.callee;
-var _6d4;
+var _6de;
 if(typeof (o.__json__)=="function"){
-_6d4=o.__json__();
-if(o!==_6d4){
-return me(_6d4);
+_6de=o.__json__();
+if(o!==_6de){
+return me(_6de);
 }
 }
 if(typeof (o.json)=="function"){
-_6d4=o.json();
-if(o!==_6d4){
-return me(_6d4);
+_6de=o.json();
+if(o!==_6de){
+return me(_6de);
 }
 }
-if(_6d2!="function"&&typeof (o.length)=="number"){
+if(_6dc!="function"&&typeof (o.length)=="number"){
 var res=[];
 for(var i=0;i<o.length;i++){
 var val=me(o[i]);
@@ -65724,22 +45807,22 @@
 }
 try{
 window.o=o;
-_6d4=dojo.json.jsonRegistry.match(o);
-return me(_6d4);
+_6de=dojo.json.jsonRegistry.match(o);
+return me(_6de);
 }
 catch(e){
 }
-if(_6d2=="function"){
+if(_6dc=="function"){
 return null;
 }
 res=[];
 for(var k in o){
-var _6d9;
+var _6e3;
 if(typeof (k)=="number"){
-_6d9="\""+k+"\"";
+_6e3="\""+k+"\"";
 }else{
 if(typeof (k)=="string"){
-_6d9=dojo.string.escapeString(k);
+_6e3=dojo.string.escapeString(k);
 }else{
 continue;
 }
@@ -65748,18 +45831,18 @@
 if(typeof (val)!="string"){
 continue;
 }
-res.push(_6d9+":"+val);
+res.push(_6e3+":"+val);
 }
 return "{"+res.join(",")+"}";
 }};
 dojo.provide("dojo.Deferred");
-dojo.Deferred=function(_6da){
+dojo.Deferred=function(_6e4){
 this.chain=[];
 this.id=this._nextId();
 this.fired=-1;
 this.paused=0;
 this.results=[null,null];
-this.canceller=_6da;
+this.canceller=_6e4;
 this.silentlyCancelled=false;
 };
 dojo.lang.extend(dojo.Deferred,{getFunctionFromArgs:function(){
@@ -65779,21 +45862,21 @@
 }
 return null;
 },makeCalled:function(){
-var _6dc=new dojo.Deferred();
-_6dc.callback();
-return _6dc;
+var _6e6=new dojo.Deferred();
+_6e6.callback();
+return _6e6;
 },repr:function(){
-var _6dd;
+var _6e7;
 if(this.fired==-1){
-_6dd="unfired";
+_6e7="unfired";
 }else{
 if(this.fired==0){
-_6dd="success";
+_6e7="success";
 }else{
-_6dd="error";
+_6e7="error";
 }
 }
-return "Deferred("+this.id+", "+_6dd+")";
+return "Deferred("+this.id+", "+_6e7+")";
 },toString:dojo.lang.forward("repr"),_nextId:(function(){
 var n=1;
 return function(){
@@ -65846,23 +45929,23 @@
 }
 this._resback(res);
 },addBoth:function(cb,cbfn){
-var _6e5=this.getFunctionFromArgs(cb,cbfn);
+var _6ef=this.getFunctionFromArgs(cb,cbfn);
 if(arguments.length>2){
-_6e5=dojo.lang.curryArguments(null,_6e5,arguments,2);
+_6ef=dojo.lang.curryArguments(null,_6ef,arguments,2);
 }
-return this.addCallbacks(_6e5,_6e5);
+return this.addCallbacks(_6ef,_6ef);
 },addCallback:function(cb,cbfn){
-var _6e8=this.getFunctionFromArgs(cb,cbfn);
+var _6f2=this.getFunctionFromArgs(cb,cbfn);
 if(arguments.length>2){
-_6e8=dojo.lang.curryArguments(null,_6e8,arguments,2);
+_6f2=dojo.lang.curryArguments(null,_6f2,arguments,2);
 }
-return this.addCallbacks(_6e8,null);
+return this.addCallbacks(_6f2,null);
 },addErrback:function(cb,cbfn){
-var _6eb=this.getFunctionFromArgs(cb,cbfn);
+var _6f5=this.getFunctionFromArgs(cb,cbfn);
 if(arguments.length>2){
-_6eb=dojo.lang.curryArguments(null,_6eb,arguments,2);
+_6f5=dojo.lang.curryArguments(null,_6f5,arguments,2);
 }
-return this.addCallbacks(null,_6eb);
+return this.addCallbacks(null,_6f5);
 return this.addCallbacks(null,cbfn);
 },addCallbacks:function(cb,eb){
 this.chain.push([cb,eb]);
@@ -65871,20 +45954,20 @@
 }
 return this;
 },_fire:function(){
-var _6ee=this.chain;
-var _6ef=this.fired;
-var res=this.results[_6ef];
+var _6f8=this.chain;
+var _6f9=this.fired;
+var res=this.results[_6f9];
 var self=this;
 var cb=null;
-while(_6ee.length>0&&this.paused==0){
-var pair=_6ee.shift();
-var f=pair[_6ef];
+while(_6f8.length>0&&this.paused==0){
+var pair=_6f8.shift();
+var f=pair[_6f9];
 if(f==null){
 continue;
 }
 try{
 res=f(res);
-_6ef=((res instanceof Error)?1:0);
+_6f9=((res instanceof Error)?1:0);
 if(res instanceof dojo.Deferred){
 cb=function(res){
 self._continue(res);
@@ -65893,12 +45976,12 @@
 }
 }
 catch(err){
-_6ef=1;
+_6f9=1;
 res=err;
 }
 }
-this.fired=_6ef;
-this.results[_6ef]=res;
+this.fired=_6f9;
+this.results[_6f9]=res;
 if((cb)&&(this.paused)){
 res.addBoth(cb);
 }
@@ -65911,36 +45994,36 @@
 };
 dojo.lang.extend(dojo.rpc.RpcService,{strictArgChecks:true,serviceUrl:"",parseResults:function(obj){
 return obj;
-},errorCallback:function(_6f8){
+},errorCallback:function(_702){
 return function(type,e){
-_6f8.errback(new Error(e.message));
+_702.errback(new Error(e.message));
 };
-},resultCallback:function(_6fb){
+},resultCallback:function(_705){
 var tf=dojo.lang.hitch(this,function(type,obj,e){
 if(obj["error"]!=null){
 var err=new Error(obj.error);
 err.id=obj.id;
-_6fb.errback(err);
+_705.errback(err);
 }else{
-var _701=this.parseResults(obj);
-_6fb.callback(_701);
+var _70b=this.parseResults(obj);
+_705.callback(_70b);
 }
 });
 return tf;
-},generateMethod:function(_702,_703,url){
+},generateMethod:function(_70c,_70d,url){
 return dojo.lang.hitch(this,function(){
-var _705=new dojo.Deferred();
-if((this.strictArgChecks)&&(_703!=null)&&(arguments.length!=_703.length)){
+var _70f=new dojo.Deferred();
+if((this.strictArgChecks)&&(_70d!=null)&&(arguments.length!=_70d.length)){
 dojo.raise("Invalid number of parameters for remote method.");
 }else{
-this.bind(_702,arguments,_705,url);
+this.bind(_70c,arguments,_70f,url);
 }
-return _705;
+return _70f;
 });
-},processSmd:function(_706){
+},processSmd:function(_710){
 dojo.debug("RpcService: Processing returned SMD.");
-if(_706.methods){
-dojo.lang.forEach(_706.methods,function(m){
+if(_710.methods){
+dojo.lang.forEach(_710.methods,function(m){
 if(m&&m["name"]){
 dojo.debug("RpcService: Creating Method: this.",m.name,"()");
 this[m.name]=this.generateMethod(m.name,m.parameters,m["url"]||m["serviceUrl"]||m["serviceURL"]);
@@ -65952,12 +46035,12 @@
 }
 },this);
 }
-this.serviceUrl=_706.serviceUrl||_706.serviceURL;
+this.serviceUrl=_710.serviceUrl||_710.serviceURL;
 dojo.debug("RpcService: Dojo RpcService is ready for use.");
-},connect:function(_708){
-dojo.debug("RpcService: Attempting to load SMD document from:",_708);
-dojo.io.bind({url:_708,mimetype:"text/json",load:dojo.lang.hitch(this,function(type,_70a,e){
-return this.processSmd(_70a);
+},connect:function(_712){
+dojo.debug("RpcService: Attempting to load SMD document from:",_712);
+dojo.io.bind({url:_712,mimetype:"text/json",load:dojo.lang.hitch(this,function(type,_714,e){
+return this.processSmd(_714);
 }),sync:true});
 }});
 dojo.provide("dojo.rpc.JsonService");
@@ -65985,14 +46068,14 @@
 }
 };
 dojo.inherits(dojo.rpc.JsonService,dojo.rpc.RpcService);
-dojo.extend(dojo.rpc.JsonService,{bustCache:false,contentType:"application/json-rpc",lastSubmissionId:0,callRemote:function(_70d,_70e){
-var _70f=new dojo.Deferred();
-this.bind(_70d,_70e,_70f);
-return _70f;
-},bind:function(_710,_711,_712,url){
-dojo.io.bind({url:url||this.serviceUrl,postContent:this.createRequest(_710,_711),method:"POST",contentType:this.contentType,mimetype:"text/json",load:this.resultCallback(_712),error:this.errorCallback(_712),preventCache:this.bustCache});
-},createRequest:function(_714,_715){
-var req={"params":_715,"method":_714,"id":++this.lastSubmissionId};
+dojo.extend(dojo.rpc.JsonService,{bustCache:false,contentType:"application/json-rpc",lastSubmissionId:0,callRemote:function(_717,_718){
+var _719=new dojo.Deferred();
+this.bind(_717,_718,_719);
+return _719;
+},bind:function(_71a,_71b,_71c,url){
+dojo.io.bind({url:url||this.serviceUrl,postContent:this.createRequest(_71a,_71b),method:"POST",contentType:this.contentType,mimetype:"text/json",load:this.resultCallback(_71c),error:this.errorCallback(_71c),preventCache:this.bustCache});
+},createRequest:function(_71e,_71f){
+var req={"params":_71f,"method":_71e,"id":++this.lastSubmissionId};
 var data=dojo.json.serialize(req);
 dojo.debug("JsonService: JSON-RPC Request: "+data);
 return data;
@@ -66014,6 +46097,7 @@
 }
 }
 }});
+dojo.kwCompoundRequire({common:[["dojo.rpc.JsonService",false,false]]});
 dojo.provide("dojo.rpc.*");
 dojo.provide("dojo.xml.Parse");
 dojo.xml.Parse=function(){
@@ -66027,25 +46111,25 @@
 }
 }
 function getDojoTagName(node){
-var _71c=getTagName(node);
-if(!_71c){
+var _726=getTagName(node);
+if(!_726){
 return "";
 }
-if((dojo.widget)&&(dojo.widget.tags[_71c])){
-return _71c;
+if((dojo.widget)&&(dojo.widget.tags[_726])){
+return _726;
 }
-var p=_71c.indexOf(":");
+var p=_726.indexOf(":");
 if(p>=0){
-return _71c;
+return _726;
 }
-if(_71c.substr(0,5)=="dojo:"){
-return _71c;
+if(_726.substr(0,5)=="dojo:"){
+return _726;
 }
 if(dojo.render.html.capable&&dojo.render.html.ie&&node.scopeName!="HTML"){
-return node.scopeName.toLowerCase()+":"+_71c;
+return node.scopeName.toLowerCase()+":"+_726;
 }
-if(_71c.substr(0,4)=="dojo"){
-return "dojo:"+_71c.substring(4);
+if(_726.substr(0,4)=="dojo"){
+return "dojo:"+_726.substring(4);
 }
 var djt=node.getAttribute("dojoType")||node.getAttribute("dojotype");
 if(djt){
@@ -66067,21 +46151,21 @@
 return "dojo:"+djt.toLowerCase();
 }
 if((dj_global["djConfig"])&&(!djConfig["ignoreClassNames"])){
-var _71f=node.className||node.getAttribute("class");
-if((_71f)&&(_71f.indexOf)&&(_71f.indexOf("dojo-")!=-1)){
-var _720=_71f.split(" ");
-for(var x=0,c=_720.length;x<c;x++){
-if(_720[x].slice(0,5)=="dojo-"){
-return "dojo:"+_720[x].substr(5).toLowerCase();
+var _729=node.className||node.getAttribute("class");
+if((_729)&&(_729.indexOf)&&(_729.indexOf("dojo-")!=-1)){
+var _72a=_729.split(" ");
+for(var x=0,c=_72a.length;x<c;x++){
+if(_72a[x].slice(0,5)=="dojo-"){
+return "dojo:"+_72a[x].substr(5).toLowerCase();
 }
 }
 }
 }
 return "";
 }
-this.parseElement=function(node,_724,_725,_726){
-var _727=getTagName(node);
-if(isIE&&_727.indexOf("/")==0){
+this.parseElement=function(node,_72e,_72f,_730){
+var _731=getTagName(node);
+if(isIE&&_731.indexOf("/")==0){
 return null;
 }
 try{
@@ -66092,90 +46176,91 @@
 }
 catch(e){
 }
-var _729=true;
-if(_725){
-var _72a=getDojoTagName(node);
-_727=_72a||_727;
-_729=Boolean(_72a);
+var _733=true;
+if(_72f){
+var _734=getDojoTagName(node);
+_731=_734||_731;
+_733=Boolean(_734);
 }
-var _72b={};
-_72b[_727]=[];
-var pos=_727.indexOf(":");
+var _735={};
+_735[_731]=[];
+var pos=_731.indexOf(":");
 if(pos>0){
-var ns=_727.substring(0,pos);
-_72b["ns"]=ns;
+var ns=_731.substring(0,pos);
+_735["ns"]=ns;
 if((dojo.ns)&&(!dojo.ns.allow(ns))){
-_729=false;
+_733=false;
 }
 }
-if(_729){
-var _72e=this.parseAttributes(node);
-for(var attr in _72e){
-if((!_72b[_727][attr])||(typeof _72b[_727][attr]!="array")){
-_72b[_727][attr]=[];
+if(_733){
+var _738=this.parseAttributes(node);
+for(var attr in _738){
+if((!_735[_731][attr])||(typeof _735[_731][attr]!="array")){
+_735[_731][attr]=[];
 }
-_72b[_727][attr].push(_72e[attr]);
+_735[_731][attr].push(_738[attr]);
 }
-_72b[_727].nodeRef=node;
-_72b.tagName=_727;
-_72b.index=_726||0;
+_735[_731].nodeRef=node;
+_735.tagName=_731;
+_735.index=_730||0;
 }
-var _72f=0;
+var _739=0;
 for(var i=0;i<node.childNodes.length;i++){
 var tcn=node.childNodes.item(i);
 switch(tcn.nodeType){
 case dojo.dom.ELEMENT_NODE:
 var ctn=getDojoTagName(tcn)||getTagName(tcn);
-if(!_72b[ctn]){
-_72b[ctn]=[];
+if(!_735[ctn]){
+_735[ctn]=[];
 }
-_72b[ctn].push(this.parseElement(tcn,true,_725,_72f));
+_735[ctn].push(this.parseElement(tcn,true,_72f,_739));
 if((tcn.childNodes.length==1)&&(tcn.childNodes.item(0).nodeType==dojo.dom.TEXT_NODE)){
-_72b[ctn][_72b[ctn].length-1].value=tcn.childNodes.item(0).nodeValue;
+_735[ctn][_735[ctn].length-1].value=tcn.childNodes.item(0).nodeValue;
 }
-_72f++;
+_739++;
 break;
 case dojo.dom.TEXT_NODE:
 if(node.childNodes.length==1){
-_72b[_727].push({value:node.childNodes.item(0).nodeValue});
+_735[_731].push({value:node.childNodes.item(0).nodeValue});
 }
 break;
 default:
 break;
 }
 }
-return _72b;
+return _735;
 };
 this.parseAttributes=function(node){
-var _734={};
+var _73e={};
 var atts=node.attributes;
-var _736,i=0;
-while((_736=atts[i++])){
+var _740,i=0;
+while((_740=atts[i++])){
 if(isIE){
-if(!_736){
+if(!_740){
 continue;
 }
-if((typeof _736=="object")&&(typeof _736.nodeValue=="undefined")||(_736.nodeValue==null)||(_736.nodeValue=="")){
+if((typeof _740=="object")&&(typeof _740.nodeValue=="undefined")||(_740.nodeValue==null)||(_740.nodeValue=="")){
 continue;
 }
 }
-var nn=_736.nodeName.split(":");
-nn=(nn.length==2)?nn[1]:_736.nodeName;
-_734[nn]={value:_736.nodeValue};
+var nn=_740.nodeName.split(":");
+nn=(nn.length==2)?nn[1]:_740.nodeName;
+_73e[nn]={value:_740.nodeValue};
 }
-return _734;
+return _73e;
 };
 };
+dojo.kwCompoundRequire({common:["dojo.dom"],browser:["dojo.html.*"],dashboard:["dojo.html.*"]});
 dojo.provide("dojo.xml.*");
 dojo.provide("dojo.undo.Manager");
-dojo.undo.Manager=function(_739){
+dojo.undo.Manager=function(_743){
 this.clear();
-this._parent=_739;
+this._parent=_743;
 };
-dojo.extend(dojo.undo.Manager,{_parent:null,_undoStack:null,_redoStack:null,_currentManager:null,canUndo:false,canRedo:false,isUndoing:false,isRedoing:false,onUndo:function(_73a,item){
-},onRedo:function(_73c,item){
-},onUndoAny:function(_73e,item){
-},onRedoAny:function(_740,item){
+dojo.extend(dojo.undo.Manager,{_parent:null,_undoStack:null,_redoStack:null,_currentManager:null,canUndo:false,canRedo:false,isUndoing:false,isRedoing:false,onUndo:function(_744,item){
+},onRedo:function(_746,item){
+},onUndoAny:function(_748,item){
+},onRedoAny:function(_74a,item){
 },_updateStatus:function(){
 this.canUndo=this._undoStack.length>0;
 this.canRedo=this._redoStack.length>0;
@@ -66235,51 +46320,51 @@
 while(this._redoStack.length>0){
 this.redo();
 }
-},push:function(undo,redo,_746){
+},push:function(undo,redo,_750){
 if(!undo){
 return;
 }
 if(this._currentManager==this){
-this._undoStack.push({undo:undo,redo:redo,description:_746});
+this._undoStack.push({undo:undo,redo:redo,description:_750});
 }else{
 this._currentManager.push.apply(this._currentManager,arguments);
 }
 this._redoStack=[];
 this._updateStatus();
-},concat:function(_747){
-if(!_747){
+},concat:function(_751){
+if(!_751){
 return;
 }
 if(this._currentManager==this){
-for(var x=0;x<_747._undoStack.length;x++){
-this._undoStack.push(_747._undoStack[x]);
+for(var x=0;x<_751._undoStack.length;x++){
+this._undoStack.push(_751._undoStack[x]);
 }
-if(_747._undoStack.length>0){
+if(_751._undoStack.length>0){
 this._redoStack=[];
 }
 this._updateStatus();
 }else{
 this._currentManager.concat.apply(this._currentManager,arguments);
 }
-},beginTransaction:function(_749){
+},beginTransaction:function(_753){
 if(this._currentManager==this){
 var mgr=new dojo.undo.Manager(this);
-mgr.description=_749?_749:"";
+mgr.description=_753?_753:"";
 this._undoStack.push(mgr);
 this._currentManager=mgr;
 return mgr;
 }else{
 this._currentManager=this._currentManager.beginTransaction.apply(this._currentManager,arguments);
 }
-},endTransaction:function(_74b){
+},endTransaction:function(_755){
 if(this._currentManager==this){
 if(this._parent){
 this._parent._currentManager=this._parent;
-if(this._undoStack.length==0||_74b){
+if(this._undoStack.length==0||_755){
 var idx=dojo.lang.find(this._parent._undoStack,this);
 if(idx>=0){
 this._parent._undoStack.splice(idx,1);
-if(_74b){
+if(_755){
 for(var x=0;x<this._undoStack.length;x++){
 this._parent._undoStack.splice(idx++,0,this._undoStack[x]);
 }
@@ -66309,18 +46394,18 @@
 dojo.crypto.outputTypes={Base64:0,Hex:1,String:2,Raw:3};
 dojo.provide("dojo.crypto.MD5");
 dojo.crypto.MD5=new function(){
-var _74e=8;
-var mask=(1<<_74e)-1;
+var _758=8;
+var mask=(1<<_758)-1;
 function toWord(s){
 var wa=[];
-for(var i=0;i<s.length*_74e;i+=_74e){
-wa[i>>5]|=(s.charCodeAt(i/_74e)&mask)<<(i%32);
+for(var i=0;i<s.length*_758;i+=_758){
+wa[i>>5]|=(s.charCodeAt(i/_758)&mask)<<(i%32);
 }
 return wa;
 }
 function toString(wa){
 var s=[];
-for(var i=0;i<wa.length*32;i+=_74e){
+for(var i=0;i<wa.length*32;i+=_758){
 s.push(String.fromCharCode((wa[i>>5]>>>(i%32))&mask));
 }
 return s.join("");
@@ -66458,29 +46543,29 @@
 function hmac(data,key){
 var wa=toWord(key);
 if(wa.length>16){
-wa=core(wa,key.length*_74e);
+wa=core(wa,key.length*_758);
 }
 var l=[],r=[];
 for(var i=0;i<16;i++){
 l[i]=wa[i]^909522486;
 r[i]=wa[i]^1549556828;
 }
-var h=core(l.concat(toWord(data)),512+data.length*_74e);
+var h=core(l.concat(toWord(data)),512+data.length*_758);
 return core(r.concat(h),640);
 }
-this.compute=function(data,_79c){
-var out=_79c||dojo.crypto.outputTypes.Base64;
+this.compute=function(data,_7a6){
+var out=_7a6||dojo.crypto.outputTypes.Base64;
 switch(out){
 case dojo.crypto.outputTypes.Hex:
-return toHex(core(toWord(data),data.length*_74e));
+return toHex(core(toWord(data),data.length*_758));
 case dojo.crypto.outputTypes.String:
-return toString(core(toWord(data),data.length*_74e));
+return toString(core(toWord(data),data.length*_758));
 default:
-return toBase64(core(toWord(data),data.length*_74e));
+return toBase64(core(toWord(data),data.length*_758));
 }
 };
-this.getHMAC=function(data,key,_7a0){
-var out=_7a0||dojo.crypto.outputTypes.Base64;
+this.getHMAC=function(data,key,_7aa){
+var out=_7aa||dojo.crypto.outputTypes.Base64;
 switch(out){
 case dojo.crypto.outputTypes.Hex:
 return toHex(hmac(data,key));
@@ -66491,6 +46576,7 @@
 }
 };
 }();
+dojo.kwCompoundRequire({common:["dojo.crypto","dojo.crypto.MD5"]});
 dojo.provide("dojo.crypto.*");
 dojo.provide("dojo.collections.Collections");
 dojo.collections.DictionaryEntry=function(k,v){
@@ -66505,20 +46591,20 @@
 };
 dojo.collections.Iterator=function(arr){
 var a=arr;
-var _7a6=0;
-this.element=a[_7a6]||null;
+var _7b0=0;
+this.element=a[_7b0]||null;
 this.atEnd=function(){
-return (_7a6>=a.length);
+return (_7b0>=a.length);
 };
 this.get=function(){
 if(this.atEnd()){
 return null;
 }
-this.element=a[_7a6++];
+this.element=a[_7b0++];
 return this.element;
 };
-this.map=function(fn,_7a8){
-var s=_7a8||dj_global;
+this.map=function(fn,_7b2){
+var s=_7b2||dj_global;
 if(Array.map){
 return Array.map(a,fn,s);
 }else{
@@ -66530,32 +46616,32 @@
 }
 };
 this.reset=function(){
-_7a6=0;
-this.element=a[_7a6];
+_7b0=0;
+this.element=a[_7b0];
 };
 };
 dojo.collections.DictionaryIterator=function(obj){
 var a=[];
-var _7ae={};
+var _7b8={};
 for(var p in obj){
-if(!_7ae[p]){
+if(!_7b8[p]){
 a.push(obj[p]);
 }
 }
-var _7b0=0;
-this.element=a[_7b0]||null;
+var _7ba=0;
+this.element=a[_7ba]||null;
 this.atEnd=function(){
-return (_7b0>=a.length);
+return (_7ba>=a.length);
 };
 this.get=function(){
 if(this.atEnd()){
 return null;
 }
-this.element=a[_7b0++];
+this.element=a[_7ba++];
 return this.element;
 };
-this.map=function(fn,_7b2){
-var s=_7b2||dj_global;
+this.map=function(fn,_7bc){
+var s=_7bc||dj_global;
 if(Array.map){
 return Array.map(a,fn,s);
 }else{
@@ -66567,20 +46653,20 @@
 }
 };
 this.reset=function(){
-_7b0=0;
-this.element=a[_7b0];
+_7ba=0;
+this.element=a[_7ba];
 };
 };
 dojo.provide("dojo.collections.ArrayList");
 dojo.collections.ArrayList=function(arr){
-var _7b7=[];
+var _7c1=[];
 if(arr){
-_7b7=_7b7.concat(arr);
+_7c1=_7c1.concat(arr);
 }
-this.count=_7b7.length;
+this.count=_7c1.length;
 this.add=function(obj){
-_7b7.push(obj);
-this.count=_7b7.length;
+_7c1.push(obj);
+this.count=_7c1.length;
 };
 this.addRange=function(a){
 if(a.getIterator){
@@ -66588,87 +46674,87 @@
 while(!e.atEnd()){
 this.add(e.get());
 }
-this.count=_7b7.length;
+this.count=_7c1.length;
 }else{
 for(var i=0;i<a.length;i++){
-_7b7.push(a[i]);
+_7c1.push(a[i]);
 }
-this.count=_7b7.length;
+this.count=_7c1.length;
 }
 };
 this.clear=function(){
-_7b7.splice(0,_7b7.length);
+_7c1.splice(0,_7c1.length);
 this.count=0;
 };
 this.clone=function(){
-return new dojo.collections.ArrayList(_7b7);
+return new dojo.collections.ArrayList(_7c1);
 };
 this.contains=function(obj){
-for(var i=0;i<_7b7.length;i++){
-if(_7b7[i]==obj){
+for(var i=0;i<_7c1.length;i++){
+if(_7c1[i]==obj){
 return true;
 }
 }
 return false;
 };
-this.forEach=function(fn,_7bf){
-var s=_7bf||dj_global;
+this.forEach=function(fn,_7c9){
+var s=_7c9||dj_global;
 if(Array.forEach){
-Array.forEach(_7b7,fn,s);
+Array.forEach(_7c1,fn,s);
 }else{
-for(var i=0;i<_7b7.length;i++){
-fn.call(s,_7b7[i],i,_7b7);
+for(var i=0;i<_7c1.length;i++){
+fn.call(s,_7c1[i],i,_7c1);
 }
 }
 };
 this.getIterator=function(){
-return new dojo.collections.Iterator(_7b7);
+return new dojo.collections.Iterator(_7c1);
 };
 this.indexOf=function(obj){
-for(var i=0;i<_7b7.length;i++){
-if(_7b7[i]==obj){
+for(var i=0;i<_7c1.length;i++){
+if(_7c1[i]==obj){
 return i;
 }
 }
 return -1;
 };
 this.insert=function(i,obj){
-_7b7.splice(i,0,obj);
-this.count=_7b7.length;
+_7c1.splice(i,0,obj);
+this.count=_7c1.length;
 };
 this.item=function(i){
-return _7b7[i];
+return _7c1[i];
 };
 this.remove=function(obj){
 var i=this.indexOf(obj);
 if(i>=0){
-_7b7.splice(i,1);
+_7c1.splice(i,1);
 }
-this.count=_7b7.length;
+this.count=_7c1.length;
 };
 this.removeAt=function(i){
-_7b7.splice(i,1);
-this.count=_7b7.length;
+_7c1.splice(i,1);
+this.count=_7c1.length;
 };
 this.reverse=function(){
-_7b7.reverse();
+_7c1.reverse();
 };
 this.sort=function(fn){
 if(fn){
-_7b7.sort(fn);
+_7c1.sort(fn);
 }else{
-_7b7.sort();
+_7c1.sort();
 }
 };
 this.setByIndex=function(i,obj){
-_7b7[i]=obj;
-this.count=_7b7.length;
+_7c1[i]=obj;
+this.count=_7c1.length;
 };
 this.toArray=function(){
-return [].concat(_7b7);
+return [].concat(_7c1);
 };
-this.toString=function(_7cd){
-return _7b7.join((_7cd||","));
+this.toString=function(_7d7){
+return _7c1.join((_7d7||","));
 };
 };
 dojo.provide("dojo.collections.Queue");
@@ -66704,8 +46790,8 @@
 this.enqueue=function(o){
 this.count=q.push(o);
 };
-this.forEach=function(fn,_7d7){
-var s=_7d7||dj_global;
+this.forEach=function(fn,_7e1){
+var s=_7e1||dj_global;
 if(Array.forEach){
 Array.forEach(q,fn,s);
 }else{
@@ -66749,8 +46835,8 @@
 this.copyTo=function(arr,i){
 arr.splice(i,0,q);
 };
-this.forEach=function(fn,_7e1){
-var s=_7e1||dj_global;
+this.forEach=function(fn,_7eb){
+var s=_7eb||dj_global;
 if(Array.forEach){
 Array.forEach(q,fn,s);
 }else{
@@ -66804,10 +46890,10 @@
 }
 }
 return true;
-},accepts:function(_7f0){
+},accepts:function(_7fa){
 if(!dojo.lang.inArray(this.acceptedTypes,"*")){
-for(var i=0;i<_7f0.length;i++){
-if(!dojo.lang.inArray(this.acceptedTypes,_7f0[i].type)){
+for(var i=0;i<_7fa.length;i++){
+if(!dojo.lang.inArray(this.acceptedTypes,_7fa[i].type)){
 return false;
 }
 }
@@ -66830,24 +46916,24 @@
 this.target=null;
 this.eventStatus="success";
 };
-dojo.declare("dojo.dnd.DragManager",null,{selectedSources:[],dragObjects:[],dragSources:[],registerDragSource:function(_7f7){
-},dropTargets:[],registerDropTarget:function(_7f8){
+dojo.declare("dojo.dnd.DragManager",null,{selectedSources:[],dragObjects:[],dragSources:[],registerDragSource:function(_801){
+},dropTargets:[],registerDropTarget:function(_802){
 },lastDragTarget:null,currentDragTarget:null,onKeyDown:function(){
 },onMouseOut:function(){
 },onMouseMove:function(){
 },onMouseUp:function(){
 }});
 dojo.provide("dojo.dnd.HtmlDragManager");
-dojo.declare("dojo.dnd.HtmlDragManager",dojo.dnd.DragManager,{disabled:false,nestedTargets:false,mouseDownTimer:null,dsCounter:0,dsPrefix:"dojoDragSource",dropTargetDimensions:[],currentDropTarget:null,previousDropTarget:null,_dragTriggered:false,selectedSources:[],dragObjects:[],dragSources:[],currentX:null,currentY:null,lastX:null,lastY:null,mouseDownX:null,mouseDownY:null,threshold:7,dropAcceptable:false,cancelEvent:function(e){
+dojo.declare("dojo.dnd.HtmlDragManager",dojo.dnd.DragManager,{disabled:false,nestedTargets:false,mouseDownTimer:null,dsCounter:0,dsPrefix:"dojoDragSource",dropTargetDimensions:[],currentDropTarget:null,previousDropTarget:null,_dragTriggered:false,selectedSources:[],dragObjects:[],dragSources:[],dropTargets:[],currentX:null,currentY:null,lastX:null,lastY:null,mouseDownX:null,mouseDownY:null,threshold:7,dropAcceptable:false,cancelEvent:function(e){
 e.stopPropagation();
 e.preventDefault();
 },registerDragSource:function(ds){
 if(ds["domNode"]){
 var dp=this.dsPrefix;
-var _7fc=dp+"Idx_"+(this.dsCounter++);
-ds.dragSourceId=_7fc;
-this.dragSources[_7fc]=ds;
-ds.domNode.setAttribute(dp,_7fc);
+var _806=dp+"Idx_"+(this.dsCounter++);
+ds.dragSourceId=_806;
+this.dragSources[_806]=ds;
+ds.domNode.setAttribute(dp,_806);
 if(dojo.render.html.ie){
 dojo.event.browser.addListener(ds.domNode,"ondragstart",this.cancelEvent);
 }
@@ -66855,9 +46941,9 @@
 },unregisterDragSource:function(ds){
 if(ds["domNode"]){
 var dp=this.dsPrefix;
-var _7ff=ds.dragSourceId;
+var _809=ds.dragSourceId;
 delete ds.dragSourceId;
-delete this.dragSources[_7ff];
+delete this.dragSources[_809];
 ds.domNode.setAttribute(dp,null);
 if(dojo.render.html.ie){
 dojo.event.browser.removeListener(ds.domNode,"ondragstart",this.cancelEvent);
@@ -66866,9 +46952,9 @@
 },registerDropTarget:function(dt){
 this.dropTargets.push(dt);
 },unregisterDropTarget:function(dt){
-var _802=dojo.lang.find(this.dropTargets,dt,true);
-if(_802>=0){
-this.dropTargets.splice(_802,1);
+var _80c=dojo.lang.find(this.dropTargets,dt,true);
+if(_80c>=0){
+this.dropTargets.splice(_80c,1);
 }
 },getDragSource:function(e){
 var tn=e.target;
@@ -66898,8 +46984,8 @@
 return;
 }
 }
-var _808=e.target.nodeType==dojo.html.TEXT_NODE?e.target.parentNode:e.target;
-if(dojo.html.isTag(_808,"button","textarea","input","select","option")){
+var _812=e.target.nodeType==dojo.html.TEXT_NODE?e.target.parentNode:e.target;
+if(dojo.html.isTag(_812,"button","textarea","input","select","option")){
 return;
 }
 var ds=this.getDragSource(e);
@@ -66914,7 +47000,7 @@
 this.mouseDownY=e.pageY;
 e.preventDefault();
 dojo.event.connect(document,"onmousemove",this,"onMouseMove");
-},onMouseUp:function(e,_80b){
+},onMouseUp:function(e,_815){
 if(this.selectedSources.length==0){
 return;
 }
@@ -66926,17 +47012,17 @@
 if(this.currentDropTarget){
 this.currentDropTarget.onDropStart();
 }
-dojo.lang.forEach(this.dragObjects,function(_80c){
+dojo.lang.forEach(this.dragObjects,function(_816){
 var ret=null;
-if(!_80c){
+if(!_816){
 return;
 }
 if(this.currentDropTarget){
-e.dragObject=_80c;
+e.dragObject=_816;
 var ce=this.currentDropTarget.domNode.childNodes;
 if(ce.length>0){
 e.dropTarget=ce[0];
-while(e.dropTarget==_80c.domNode){
+while(e.dropTarget==_816.domNode){
 e.dropTarget=e.dropTarget.nextSibling;
 }
 }else{
@@ -66951,21 +47037,21 @@
 e.dragStatus=this.dropAcceptable&&ret?"dropSuccess":"dropFailure";
 dojo.lang.delayThese([function(){
 try{
-_80c.dragSource.onDragEnd(e);
+_816.dragSource.onDragEnd(e);
 }
 catch(err){
-var _80f={};
+var _819={};
 for(var i in e){
 if(i=="type"){
-_80f.type="mouseup";
+_819.type="mouseup";
 continue;
 }
-_80f[i]=e[i];
+_819[i]=e[i];
 }
-_80c.dragSource.onDragEnd(_80f);
+_816.dragSource.onDragEnd(_819);
 }
 },function(){
-_80c.onDragEnd(e);
+_816.onDragEnd(e);
 }]);
 },this);
 this.selectedSources=[];
@@ -66999,14 +47085,14 @@
 },cacheTargetLocations:function(){
 dojo.profile.start("cacheTargetLocations");
 this.dropTargetDimensions=[];
-dojo.lang.forEach(this.dropTargets,function(_818){
-var tn=_818.domNode;
-if(!tn||!_818.accepts([this.dragSource])){
+dojo.lang.forEach(this.dropTargets,function(_822){
+var tn=_822.domNode;
+if(!tn||!_822.accepts([this.dragSource])){
 return;
 }
 var abs=dojo.html.getAbsolutePosition(tn,true);
 var bb=dojo.html.getBorderBox(tn);
-this.dropTargetDimensions.push([[abs.x,abs.y],[abs.x+bb.width,abs.y+bb.height],_818]);
+this.dropTargetDimensions.push([[abs.x,abs.y],[abs.x+bb.width,abs.y+bb.height],_822]);
 },this);
 dojo.profile.end("cacheTargetLocations");
 },onMouseMove:function(e){
@@ -67027,25 +47113,25 @@
 dy=e.pageY-this.mouseDownY;
 }
 this.dragSource=this.selectedSources[0];
-dojo.lang.forEach(this.selectedSources,function(_81f){
-if(!_81f){
+dojo.lang.forEach(this.selectedSources,function(_829){
+if(!_829){
 return;
 }
-var tdo=_81f.onDragStart(e);
+var tdo=_829.onDragStart(e);
 if(tdo){
 tdo.onDragStart(e);
 tdo.dragOffset.y+=dy;
 tdo.dragOffset.x+=dx;
-tdo.dragSource=_81f;
+tdo.dragSource=_829;
 this.dragObjects.push(tdo);
 }
 },this);
 this.previousDropTarget=null;
 this.cacheTargetLocations();
 }
-dojo.lang.forEach(this.dragObjects,function(_821){
-if(_821){
-_821.onDragMove(e);
+dojo.lang.forEach(this.dragObjects,function(_82b){
+if(_82b){
+_82b.onDragMove(e);
 }
 });
 if(this.currentDropTarget){
@@ -67057,8 +47143,8 @@
 this.currentDropTarget.onDragMove(e,this.dragObjects);
 }
 }else{
-var _824=this.findBestTarget(e);
-if(_824.target===null){
+var _82e=this.findBestTarget(e);
+if(_82e.target===null){
 if(this.currentDropTarget){
 this.currentDropTarget.onDragOut(e);
 this.previousDropTarget=this.currentDropTarget;
@@ -67067,12 +47153,12 @@
 this.dropAcceptable=false;
 return;
 }
-if(this.currentDropTarget!==_824.target){
+if(this.currentDropTarget!==_82e.target){
 if(this.currentDropTarget){
 this.previousDropTarget=this.currentDropTarget;
 this.currentDropTarget.onDragOut(e);
 }
-this.currentDropTarget=_824.target;
+this.currentDropTarget=_82e.target;
 e.dragObjects=this.dragObjects;
 this.dropAcceptable=this.currentDropTarget.onDragOver(e);
 }else{
@@ -67082,21 +47168,21 @@
 }
 }
 },findBestTarget:function(e){
-var _826=this;
-var _827=new Object();
-_827.target=null;
-_827.points=null;
-dojo.lang.every(this.dropTargetDimensions,function(_828){
-if(!_826.isInsideBox(e,_828)){
+var _830=this;
+var _831=new Object();
+_831.target=null;
+_831.points=null;
+dojo.lang.every(this.dropTargetDimensions,function(_832){
+if(!_830.isInsideBox(e,_832)){
 return true;
 }
-_827.target=_828[2];
-_827.points=_828;
-return Boolean(_826.nestedTargets);
+_831.target=_832[2];
+_831.points=_832;
+return Boolean(_830.nestedTargets);
 });
-return _827;
-},isInsideBox:function(e,_82a){
-if((e.pageX>_82a[0][0])&&(e.pageX<_82a[1][0])&&(e.pageY>_82a[0][1])&&(e.pageY<_82a[1][1])){
+return _831;
+},isInsideBox:function(e,_834){
+if((e.pageX>_834[0][0])&&(e.pageX<_834[1][0])&&(e.pageY>_834[0][1])&&(e.pageY<_834[1][1])){
 return true;
 }
 return false;
@@ -67117,22 +47203,22 @@
 dojo.provide("dojo.html.selection");
 dojo.html.selectionType={NONE:0,TEXT:1,CONTROL:2};
 dojo.html.clearSelection=function(){
-var _82f=dojo.global();
-var _830=dojo.doc();
+var _839=dojo.global();
+var _83a=dojo.doc();
 try{
-if(_82f["getSelection"]){
+if(_839["getSelection"]){
 if(dojo.render.html.safari){
-_82f.getSelection().collapse();
+_839.getSelection().collapse();
 }else{
-_82f.getSelection().removeAllRanges();
+_839.getSelection().removeAllRanges();
 }
 }else{
-if(_830.selection){
-if(_830.selection.empty){
-_830.selection.empty();
+if(_83a.selection){
+if(_83a.selection.empty){
+_83a.selection.empty();
 }else{
-if(_830.selection.clear){
-_830.selection.clear();
+if(_83a.selection.clear){
+_83a.selection.clear();
 }
 }
 }
@@ -67144,17 +47230,17 @@
 return false;
 }
 };
-dojo.html.disableSelection=function(_831){
-_831=dojo.byId(_831)||dojo.body();
+dojo.html.disableSelection=function(_83b){
+_83b=dojo.byId(_83b)||dojo.body();
 var h=dojo.render.html;
 if(h.mozilla){
-_831.style.MozUserSelect="none";
+_83b.style.MozUserSelect="none";
 }else{
 if(h.safari){
-_831.style.KhtmlUserSelect="none";
+_83b.style.KhtmlUserSelect="none";
 }else{
 if(h.ie){
-_831.unselectable="on";
+_83b.unselectable="on";
 }else{
 return false;
 }
@@ -67162,17 +47248,17 @@
 }
 return true;
 };
-dojo.html.enableSelection=function(_833){
-_833=dojo.byId(_833)||dojo.body();
+dojo.html.enableSelection=function(_83d){
+_83d=dojo.byId(_83d)||dojo.body();
 var h=dojo.render.html;
 if(h.mozilla){
-_833.style.MozUserSelect="";
+_83d.style.MozUserSelect="";
 }else{
 if(h.safari){
-_833.style.KhtmlUserSelect="";
+_83d.style.KhtmlUserSelect="";
 }else{
 if(h.ie){
-_833.unselectable="off";
+_83d.unselectable="off";
 }else{
 return false;
 }
@@ -67180,25 +47266,25 @@
 }
 return true;
 };
-dojo.html.selectElement=function(_835){
+dojo.html.selectElement=function(_83f){
 dojo.deprecated("dojo.html.selectElement","replaced by dojo.html.selection.selectElementChildren",0.5);
 };
-dojo.html.selectInputText=function(_836){
-var _837=dojo.global();
-var _838=dojo.doc();
-_836=dojo.byId(_836);
-if(_838["selection"]&&dojo.body()["createTextRange"]){
-var _839=_836.createTextRange();
-_839.moveStart("character",0);
-_839.moveEnd("character",_836.value.length);
-_839.select();
+dojo.html.selectInputText=function(_840){
+var _841=dojo.global();
+var _842=dojo.doc();
+_840=dojo.byId(_840);
+if(_842["selection"]&&dojo.body()["createTextRange"]){
+var _843=_840.createTextRange();
+_843.moveStart("character",0);
+_843.moveEnd("character",_840.value.length);
+_843.select();
 }else{
-if(_837["getSelection"]){
-var _83a=_837.getSelection();
-_836.setSelectionRange(0,_836.value.length);
+if(_841["getSelection"]){
+var _844=_841.getSelection();
+_840.setSelectionRange(0,_840.value.length);
 }
 }
-_836.focus();
+_840.focus();
 };
 dojo.html.isSelectionCollapsed=function(){
 dojo.deprecated("dojo.html.isSelectionCollapsed","replaced by dojo.html.selection.isCollapsed",0.5);
@@ -67208,7 +47294,7 @@
 if(dojo.doc()["selection"]){
 return dojo.html.selectionType[dojo.doc().selection.type.toUpperCase()];
 }else{
-var _83b=dojo.html.selectionType.TEXT;
+var _845=dojo.html.selectionType.TEXT;
 var oSel;
 try{
 oSel=dojo.global().getSelection();
@@ -67216,38 +47302,38 @@
 catch(e){
 }
 if(oSel&&oSel.rangeCount==1){
-var _83d=oSel.getRangeAt(0);
-if(_83d.startContainer==_83d.endContainer&&(_83d.endOffset-_83d.startOffset)==1&&_83d.startContainer.nodeType!=dojo.dom.TEXT_NODE){
-_83b=dojo.html.selectionType.CONTROL;
+var _847=oSel.getRangeAt(0);
+if(_847.startContainer==_847.endContainer&&(_847.endOffset-_847.startOffset)==1&&_847.startContainer.nodeType!=dojo.dom.TEXT_NODE){
+_845=dojo.html.selectionType.CONTROL;
 }
 }
-return _83b;
+return _845;
 }
 },isCollapsed:function(){
-var _83e=dojo.global();
-var _83f=dojo.doc();
-if(_83f["selection"]){
-return _83f.selection.createRange().text=="";
+var _848=dojo.global();
+var _849=dojo.doc();
+if(_849["selection"]){
+return _849.selection.createRange().text=="";
 }else{
-if(_83e["getSelection"]){
-var _840=_83e.getSelection();
-if(dojo.lang.isString(_840)){
-return _840=="";
+if(_848["getSelection"]){
+var _84a=_848.getSelection();
+if(dojo.lang.isString(_84a)){
+return _84a=="";
 }else{
-return _840.isCollapsed||_840.toString()=="";
+return _84a.isCollapsed||_84a.toString()=="";
 }
 }
 }
 },getSelectedElement:function(){
 if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
 if(dojo.doc()["selection"]){
-var _841=dojo.doc().selection.createRange();
-if(_841&&_841.item){
+var _84b=dojo.doc().selection.createRange();
+if(_84b&&_84b.item){
 return dojo.doc().selection.createRange().item(0);
 }
 }else{
-var _842=dojo.global().getSelection();
-return _842.anchorNode.childNodes[_842.anchorOffset];
+var _84c=dojo.global().getSelection();
+return _84c.anchorNode.childNodes[_84c.anchorOffset];
 }
 }
 },getParentElement:function(){
@@ -67260,9 +47346,9 @@
 if(dojo.doc()["selection"]){
 return dojo.doc().selection.createRange().parentElement();
 }else{
-var _844=dojo.global().getSelection();
-if(_844){
-var node=_844.anchorNode;
+var _84e=dojo.global().getSelection();
+if(_84e){
+var node=_84e.anchorNode;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.parentNode;
 }
@@ -67277,9 +47363,9 @@
 }
 return dojo.doc().selection.createRange().text;
 }else{
-var _846=dojo.global().getSelection();
-if(_846){
-return _846.toString();
+var _850=dojo.global().getSelection();
+if(_850){
+return _850.toString();
 }
 }
 },getSelectedHtml:function(){
@@ -67289,18 +47375,18 @@
 }
 return dojo.doc().selection.createRange().htmlText;
 }else{
-var _847=dojo.global().getSelection();
-if(_847&&_847.rangeCount){
-var frag=_847.getRangeAt(0).cloneContents();
+var _851=dojo.global().getSelection();
+if(_851&&_851.rangeCount){
+var frag=_851.getRangeAt(0).cloneContents();
 var div=document.createElement("div");
 div.appendChild(frag);
 return div.innerHTML;
 }
 return null;
 }
-},hasAncestorElement:function(_84a){
+},hasAncestorElement:function(_854){
 return (dojo.html.selection.getAncestorElement.apply(this,arguments)!=null);
-},getAncestorElement:function(_84b){
+},getAncestorElement:function(_855){
 var node=dojo.html.selection.getSelectedElement()||dojo.html.selection.getParentElement();
 while(node){
 if(dojo.html.selection.isTag(node,arguments).length>0){
@@ -67318,132 +47404,132 @@
 }
 }
 return "";
-},selectElement:function(_850){
-var _851=dojo.global();
-var _852=dojo.doc();
-_850=dojo.byId(_850);
-if(_852.selection&&dojo.body().createTextRange){
+},selectElement:function(_85a){
+var _85b=dojo.global();
+var _85c=dojo.doc();
+_85a=dojo.byId(_85a);
+if(_85c.selection&&dojo.body().createTextRange){
 try{
-var _853=dojo.body().createControlRange();
-_853.addElement(_850);
-_853.select();
+var _85d=dojo.body().createControlRange();
+_85d.addElement(_85a);
+_85d.select();
 }
 catch(e){
-dojo.html.selection.selectElementChildren(_850);
+dojo.html.selection.selectElementChildren(_85a);
 }
 }else{
-if(_851["getSelection"]){
-var _854=_851.getSelection();
-if(_854["removeAllRanges"]){
-var _853=_852.createRange();
-_853.selectNode(_850);
-_854.removeAllRanges();
-_854.addRange(_853);
+if(_85b["getSelection"]){
+var _85e=_85b.getSelection();
+if(_85e["removeAllRanges"]){
+var _85d=_85c.createRange();
+_85d.selectNode(_85a);
+_85e.removeAllRanges();
+_85e.addRange(_85d);
 }
 }
 }
-},selectElementChildren:function(_855){
-var _856=dojo.global();
-var _857=dojo.doc();
-_855=dojo.byId(_855);
-if(_857.selection&&dojo.body().createTextRange){
-var _858=dojo.body().createTextRange();
-_858.moveToElementText(_855);
-_858.select();
+},selectElementChildren:function(_85f){
+var _860=dojo.global();
+var _861=dojo.doc();
+_85f=dojo.byId(_85f);
+if(_861.selection&&dojo.body().createTextRange){
+var _862=dojo.body().createTextRange();
+_862.moveToElementText(_85f);
+_862.select();
 }else{
-if(_856["getSelection"]){
-var _859=_856.getSelection();
-if(_859["setBaseAndExtent"]){
-_859.setBaseAndExtent(_855,0,_855,_855.innerText.length-1);
+if(_860["getSelection"]){
+var _863=_860.getSelection();
+if(_863["setBaseAndExtent"]){
+_863.setBaseAndExtent(_85f,0,_85f,_85f.innerText.length-1);
 }else{
-if(_859["selectAllChildren"]){
-_859.selectAllChildren(_855);
+if(_863["selectAllChildren"]){
+_863.selectAllChildren(_85f);
 }
 }
 }
 }
 },getBookmark:function(){
-var _85a;
-var _85b=dojo.doc();
-if(_85b["selection"]){
-var _85c=_85b.selection.createRange();
-_85a=_85c.getBookmark();
+var _864;
+var _865=dojo.doc();
+if(_865["selection"]){
+var _866=_865.selection.createRange();
+_864=_866.getBookmark();
 }else{
-var _85d;
+var _867;
 try{
-_85d=dojo.global().getSelection();
+_867=dojo.global().getSelection();
 }
 catch(e){
 }
-if(_85d){
-var _85c=_85d.getRangeAt(0);
-_85a=_85c.cloneRange();
+if(_867){
+var _866=_867.getRangeAt(0);
+_864=_866.cloneRange();
 }else{
 dojo.debug("No idea how to store the current selection for this browser!");
 }
 }
-return _85a;
-},moveToBookmark:function(_85e){
-var _85f=dojo.doc();
-if(_85f["selection"]){
-var _860=_85f.selection.createRange();
-_860.moveToBookmark(_85e);
-_860.select();
+return _864;
+},moveToBookmark:function(_868){
+var _869=dojo.doc();
+if(_869["selection"]){
+var _86a=_869.selection.createRange();
+_86a.moveToBookmark(_868);
+_86a.select();
 }else{
-var _861;
+var _86b;
 try{
-_861=dojo.global().getSelection();
+_86b=dojo.global().getSelection();
 }
 catch(e){
 }
-if(_861&&_861["removeAllRanges"]){
-_861.removeAllRanges();
-_861.addRange(_85e);
+if(_86b&&_86b["removeAllRanges"]){
+_86b.removeAllRanges();
+_86b.addRange(_868);
 }else{
 dojo.debug("No idea how to restore selection for this browser!");
 }
 }
-},collapse:function(_862){
+},collapse:function(_86c){
 if(dojo.global()["getSelection"]){
-var _863=dojo.global().getSelection();
-if(_863.removeAllRanges){
-if(_862){
-_863.collapseToStart();
+var _86d=dojo.global().getSelection();
+if(_86d.removeAllRanges){
+if(_86c){
+_86d.collapseToStart();
 }else{
-_863.collapseToEnd();
+_86d.collapseToEnd();
 }
 }else{
-dojo.global().getSelection().collapse(_862);
+dojo.global().getSelection().collapse(_86c);
 }
 }else{
 if(dojo.doc().selection){
-var _864=dojo.doc().selection.createRange();
-_864.collapse(_862);
-_864.select();
+var _86e=dojo.doc().selection.createRange();
+_86e.collapse(_86c);
+_86e.select();
 }
 }
 },remove:function(){
 if(dojo.doc().selection){
-var _865=dojo.doc().selection;
-if(_865.type.toUpperCase()!="NONE"){
-_865.clear();
+var _86f=dojo.doc().selection;
+if(_86f.type.toUpperCase()!="NONE"){
+_86f.clear();
 }
-return _865;
+return _86f;
 }else{
-var _865=dojo.global().getSelection();
-for(var i=0;i<_865.rangeCount;i++){
-_865.getRangeAt(i).deleteContents();
+var _86f=dojo.global().getSelection();
+for(var i=0;i<_86f.rangeCount;i++){
+_86f.getRangeAt(i).deleteContents();
 }
-return _865;
+return _86f;
 }
 }});
 dojo.provide("dojo.html.iframe");
-dojo.html.iframeContentWindow=function(_867){
-var win=dojo.html.getDocumentWindow(dojo.html.iframeContentDocument(_867))||dojo.html.iframeContentDocument(_867).__parent__||(_867.name&&document.frames[_867.name])||null;
+dojo.html.iframeContentWindow=function(_871){
+var win=dojo.html.getDocumentWindow(dojo.html.iframeContentDocument(_871))||dojo.html.iframeContentDocument(_871).__parent__||(_871.name&&document.frames[_871.name])||null;
 return win;
 };
-dojo.html.iframeContentDocument=function(_869){
-var doc=_869.contentDocument||((_869.contentWindow)&&(_869.contentWindow.document))||((_869.name)&&(document.frames[_869.name])&&(document.frames[_869.name].document))||null;
+dojo.html.iframeContentDocument=function(_873){
+var doc=_873.contentDocument||((_873.contentWindow)&&(_873.contentWindow.document))||((_873.name)&&(document.frames[_873.name])&&(document.frames[_873.name].document))||null;
 return doc;
 };
 dojo.html.BackgroundIframe=function(node){
@@ -67462,24 +47548,24 @@
 };
 dojo.lang.extend(dojo.html.BackgroundIframe,{iframe:null,onResized:function(){
 if(this.iframe&&this.domNode&&this.domNode.parentNode){
-var _86d=dojo.html.getMarginBox(this.domNode);
-if(_86d.width==0||_86d.height==0){
+var _877=dojo.html.getMarginBox(this.domNode);
+if(_877.width==0||_877.height==0){
 dojo.lang.setTimeout(this,this.onResized,100);
 return;
 }
-this.iframe.style.width=_86d.width+"px";
-this.iframe.style.height=_86d.height+"px";
+this.iframe.style.width=_877.width+"px";
+this.iframe.style.height=_877.height+"px";
 }
 },size:function(node){
 if(!this.iframe){
 return;
 }
-var _86f=dojo.html.toCoordinateObject(node,true,dojo.html.boxSizing.BORDER_BOX);
+var _879=dojo.html.toCoordinateObject(node,true,dojo.html.boxSizing.BORDER_BOX);
 with(this.iframe.style){
-width=_86f.width+"px";
-height=_86f.height+"px";
-left=_86f.left+"px";
-top=_86f.top+"px";
+width=_879.width+"px";
+height=_879.height+"px";
+left=_879.left+"px";
+top=_879.top+"px";
 }
 },setZIndex:function(node){
 if(!this.iframe){
@@ -67509,14 +47595,14 @@
 }});
 dojo.provide("dojo.dnd.HtmlDragAndDrop");
 dojo.declare("dojo.dnd.HtmlDragSource",dojo.dnd.DragSource,{dragClass:"",onDragStart:function(){
-var _871=new dojo.dnd.HtmlDragObject(this.dragObject,this.type);
+var _87b=new dojo.dnd.HtmlDragObject(this.dragObject,this.type);
 if(this.dragClass){
-_871.dragClass=this.dragClass;
+_87b.dragClass=this.dragClass;
 }
 if(this.constrainToContainer){
-_871.constrainTo(this.constrainingContainer||this.domNode.parentNode);
+_87b.constrainTo(this.constrainingContainer||this.domNode.parentNode);
 }
-return _871;
+return _87b;
 },setDragHandle:function(node){
 node=dojo.byId(node);
 dojo.dnd.dragManager.unregisterDragSource(this);
@@ -67524,10 +47610,10 @@
 dojo.dnd.dragManager.registerDragSource(this);
 },setDragTarget:function(node){
 this.dragObject=node;
-},constrainTo:function(_874){
+},constrainTo:function(_87e){
 this.constrainToContainer=true;
-if(_874){
-this.constrainingContainer=_874;
+if(_87e){
+this.constrainingContainer=_87e;
 }
 },onSelected:function(){
 for(var i=0;i<this.dragObjects.length;i++){
@@ -67560,35 +47646,35 @@
 var isTr=(ltn=="tr");
 if((isTr)||(ltn=="tbody")){
 var doc=this.domNode.ownerDocument;
-var _87e=doc.createElement("table");
+var _888=doc.createElement("table");
 if(isTr){
-var _87f=doc.createElement("tbody");
-_87e.appendChild(_87f);
-_87f.appendChild(node);
+var _889=doc.createElement("tbody");
+_888.appendChild(_889);
+_889.appendChild(node);
 }else{
-_87e.appendChild(node);
+_888.appendChild(node);
 }
-var _880=((isTr)?this.domNode:this.domNode.firstChild);
-var _881=((isTr)?node:node.firstChild);
-var _882=tdp.childNodes;
-var _883=_881.childNodes;
-for(var i=0;i<_882.length;i++){
-if((_883[i])&&(_883[i].style)){
-_883[i].style.width=dojo.html.getContentBox(_882[i]).width+"px";
+var _88a=((isTr)?this.domNode:this.domNode.firstChild);
+var _88b=((isTr)?node:node.firstChild);
+var _88c=_88a.childNodes;
+var _88d=_88b.childNodes;
+for(var i=0;i<_88c.length;i++){
+if((_88d[i])&&(_88d[i].style)){
+_88d[i].style.width=dojo.html.getContentBox(_88c[i]).width+"px";
 }
 }
-node=_87e;
+node=_888;
 }
 if((dojo.render.html.ie55||dojo.render.html.ie60)&&this.createIframe){
 with(node.style){
 top="0px";
 left="0px";
 }
-var _885=document.createElement("div");
-_885.appendChild(node);
-this.bgIframe=new dojo.html.BackgroundIframe(_885);
-_885.appendChild(this.bgIframe.iframe);
-node=_885;
+var _88f=document.createElement("div");
+_88f.appendChild(node);
+this.bgIframe=new dojo.html.BackgroundIframe(_88f);
+_88f.appendChild(this.bgIframe.iframe);
+node=_88f;
 }
 node.style.zIndex=999;
 return node;
@@ -67611,32 +47697,32 @@
 dojo.event.topic.publish("dragStart",{source:this});
 },getConstraints:function(){
 if(this.constrainingContainer.nodeName.toLowerCase()=="body"){
-var _887=dojo.html.getViewport();
-var _888=_887.width;
-var _889=_887.height;
-var _88a=dojo.html.getScroll().offset;
-var x=_88a.x;
-var y=_88a.y;
+var _891=dojo.html.getViewport();
+var _892=_891.width;
+var _893=_891.height;
+var _894=dojo.html.getScroll().offset;
+var x=_894.x;
+var y=_894.y;
 }else{
-var _88d=dojo.html.getContentBox(this.constrainingContainer);
-_888=_88d.width;
-_889=_88d.height;
+var _897=dojo.html.getContentBox(this.constrainingContainer);
+_892=_897.width;
+_893=_897.height;
 x=this.containingBlockPosition.x+dojo.html.getPixelValue(this.constrainingContainer,"padding-left",true)+dojo.html.getBorderExtent(this.constrainingContainer,"left");
 y=this.containingBlockPosition.y+dojo.html.getPixelValue(this.constrainingContainer,"padding-top",true)+dojo.html.getBorderExtent(this.constrainingContainer,"top");
 }
 var mb=dojo.html.getMarginBox(this.domNode);
-return {minX:x,minY:y,maxX:x+_888-mb.width,maxY:y+_889-mb.height};
+return {minX:x,minY:y,maxX:x+_892-mb.width,maxY:y+_893-mb.height};
 },updateDragOffset:function(){
-var _88f=dojo.html.getScroll().offset;
-if(_88f.y!=this.scrollOffset.y){
-var diff=_88f.y-this.scrollOffset.y;
+var _899=dojo.html.getScroll().offset;
+if(_899.y!=this.scrollOffset.y){
+var diff=_899.y-this.scrollOffset.y;
 this.dragOffset.y+=diff;
-this.scrollOffset.y=_88f.y;
+this.scrollOffset.y=_899.y;
 }
-if(_88f.x!=this.scrollOffset.x){
-var diff=_88f.x-this.scrollOffset.x;
+if(_899.x!=this.scrollOffset.x){
+var diff=_899.x-this.scrollOffset.x;
 this.dragOffset.x+=diff;
-this.scrollOffset.x=_88f.x;
+this.scrollOffset.x=_899.x;
 }
 },onDragMove:function(e){
 this.updateDragOffset();
@@ -67672,22 +47758,22 @@
 this.dragClone=null;
 break;
 case "dropFailure":
-var _897=dojo.html.getAbsolutePosition(this.dragClone,true);
-var _898={left:this.dragStartPosition.x+1,top:this.dragStartPosition.y+1};
-var anim=dojo.lfx.slideTo(this.dragClone,_898,300);
-var _89a=this;
+var _8a1=dojo.html.getAbsolutePosition(this.dragClone,true);
+var _8a2={left:this.dragStartPosition.x+1,top:this.dragStartPosition.y+1};
+var anim=dojo.lfx.slideTo(this.dragClone,_8a2,300);
+var _8a4=this;
 dojo.event.connect(anim,"onEnd",function(e){
-dojo.html.removeNode(_89a.dragClone);
-_89a.dragClone=null;
+dojo.html.removeNode(_8a4.dragClone);
+_8a4.dragClone=null;
 });
 anim.play();
 break;
 }
 dojo.event.topic.publish("dragEnd",{source:this});
-},constrainTo:function(_89c){
+},constrainTo:function(_8a6){
 this.constrainToContainer=true;
-if(_89c){
-this.constrainingContainer=_89c;
+if(_8a6){
+this.constrainingContainer=_8a6;
 }else{
 this.constrainingContainer=this.domNode.parentNode;
 }
@@ -67703,18 +47789,18 @@
 return false;
 }
 this.childBoxes=[];
-for(var i=0,_8a1;i<this.domNode.childNodes.length;i++){
-_8a1=this.domNode.childNodes[i];
-if(_8a1.nodeType!=dojo.html.ELEMENT_NODE){
+for(var i=0,_8ab;i<this.domNode.childNodes.length;i++){
+_8ab=this.domNode.childNodes[i];
+if(_8ab.nodeType!=dojo.html.ELEMENT_NODE){
 continue;
 }
-var pos=dojo.html.getAbsolutePosition(_8a1,true);
-var _8a3=dojo.html.getBorderBox(_8a1);
-this.childBoxes.push({top:pos.y,bottom:pos.y+_8a3.height,left:pos.x,right:pos.x+_8a3.width,height:_8a3.height,width:_8a3.width,node:_8a1});
+var pos=dojo.html.getAbsolutePosition(_8ab,true);
+var _8ad=dojo.html.getBorderBox(_8ab);
+this.childBoxes.push({top:pos.y,bottom:pos.y+_8ad.height,left:pos.x,right:pos.x+_8ad.width,height:_8ad.height,width:_8ad.width,node:_8ab});
 }
 return true;
 },_getNodeUnderMouse:function(e){
-for(var i=0,_8a6;i<this.childBoxes.length;i++){
+for(var i=0,_8b0;i<this.childBoxes.length;i++){
 with(this.childBoxes[i]){
 if(e.pageX>=left&&e.pageX<=right&&e.pageY>=top&&e.pageY<=bottom){
 return i;
@@ -67741,30 +47827,30 @@
 left=dojo.html.getAbsolutePosition(this.domNode,true).x+"px";
 }
 }
-},onDragMove:function(e,_8a8){
+},onDragMove:function(e,_8b2){
 var i=this._getNodeUnderMouse(e);
 if(!this.dropIndicator){
 this.createDropIndicator();
 }
-var _8aa=this.vertical?dojo.html.gravity.WEST:dojo.html.gravity.NORTH;
+var _8b4=this.vertical?dojo.html.gravity.WEST:dojo.html.gravity.NORTH;
 var hide=false;
 if(i<0){
 if(this.childBoxes.length){
-var _8ac=(dojo.html.gravity(this.childBoxes[0].node,e)&_8aa);
-if(_8ac){
+var _8b6=(dojo.html.gravity(this.childBoxes[0].node,e)&_8b4);
+if(_8b6){
 hide=true;
 }
 }else{
-var _8ac=true;
+var _8b6=true;
 }
 }else{
-var _8ad=this.childBoxes[i];
-var _8ac=(dojo.html.gravity(_8ad.node,e)&_8aa);
-if(_8ad.node===_8a8[0].dragSource.domNode){
+var _8b7=this.childBoxes[i];
+var _8b6=(dojo.html.gravity(_8b7.node,e)&_8b4);
+if(_8b7.node===_8b2[0].dragSource.domNode){
 hide=true;
 }else{
-var _8ae=_8ac?(i>0?this.childBoxes[i-1]:_8ad):(i<this.childBoxes.length-1?this.childBoxes[i+1]:_8ad);
-if(_8ae.node===_8a8[0].dragSource.domNode){
+var _8b8=_8b6?(i>0?this.childBoxes[i-1]:_8b7):(i<this.childBoxes.length-1?this.childBoxes[i+1]:_8b7);
+if(_8b8.node===_8b2[0].dragSource.domNode){
 hide=true;
 }
 }
@@ -67775,30 +47861,30 @@
 }else{
 this.dropIndicator.style.display="";
 }
-this.placeIndicator(e,_8a8,i,_8ac);
+this.placeIndicator(e,_8b2,i,_8b6);
 if(!dojo.html.hasParent(this.dropIndicator)){
 dojo.body().appendChild(this.dropIndicator);
 }
-},placeIndicator:function(e,_8b0,_8b1,_8b2){
-var _8b3=this.vertical?"left":"top";
-var _8b4;
-if(_8b1<0){
+},placeIndicator:function(e,_8ba,_8bb,_8bc){
+var _8bd=this.vertical?"left":"top";
+var _8be;
+if(_8bb<0){
 if(this.childBoxes.length){
-_8b4=_8b2?this.childBoxes[0]:this.childBoxes[this.childBoxes.length-1];
+_8be=_8bc?this.childBoxes[0]:this.childBoxes[this.childBoxes.length-1];
 }else{
-this.dropIndicator.style[_8b3]=dojo.html.getAbsolutePosition(this.domNode,true)[this.vertical?"x":"y"]+"px";
+this.dropIndicator.style[_8bd]=dojo.html.getAbsolutePosition(this.domNode,true)[this.vertical?"x":"y"]+"px";
 }
 }else{
-_8b4=this.childBoxes[_8b1];
+_8be=this.childBoxes[_8bb];
 }
-if(_8b4){
-this.dropIndicator.style[_8b3]=(_8b2?_8b4[_8b3]:_8b4[this.vertical?"right":"bottom"])+"px";
+if(_8be){
+this.dropIndicator.style[_8bd]=(_8bc?_8be[_8bd]:_8be[this.vertical?"right":"bottom"])+"px";
 if(this.vertical){
-this.dropIndicator.style.height=_8b4.height+"px";
-this.dropIndicator.style.top=_8b4.top+"px";
+this.dropIndicator.style.height=_8be.height+"px";
+this.dropIndicator.style.top=_8be.top+"px";
 }else{
-this.dropIndicator.style.width=_8b4.width+"px";
-this.dropIndicator.style.left=_8b4.left+"px";
+this.dropIndicator.style.width=_8be.width+"px";
+this.dropIndicator.style.left=_8be.left+"px";
 }
 }
 },onDragOut:function(e){
@@ -67809,10 +47895,10 @@
 },onDrop:function(e){
 this.onDragOut(e);
 var i=this._getNodeUnderMouse(e);
-var _8b8=this.vertical?dojo.html.gravity.WEST:dojo.html.gravity.NORTH;
+var _8c2=this.vertical?dojo.html.gravity.WEST:dojo.html.gravity.NORTH;
 if(i<0){
 if(this.childBoxes.length){
-if(dojo.html.gravity(this.childBoxes[0].node,e)&_8b8){
+if(dojo.html.gravity(this.childBoxes[0].node,e)&_8c2){
 return this.insert(e,this.childBoxes[0].node,"before");
 }else{
 return this.insert(e,this.childBoxes[this.childBoxes.length-1].node,"after");
@@ -67820,44 +47906,45 @@
 }
 return this.insert(e,this.domNode,"append");
 }
-var _8b9=this.childBoxes[i];
-if(dojo.html.gravity(_8b9.node,e)&_8b8){
-return this.insert(e,_8b9.node,"before");
+var _8c3=this.childBoxes[i];
+if(dojo.html.gravity(_8c3.node,e)&_8c2){
+return this.insert(e,_8c3.node,"before");
 }else{
-return this.insert(e,_8b9.node,"after");
+return this.insert(e,_8c3.node,"after");
 }
-},insert:function(e,_8bb,_8bc){
+},insert:function(e,_8c5,_8c6){
 var node=e.dragObject.domNode;
-if(_8bc=="before"){
-return dojo.html.insertBefore(node,_8bb);
+if(_8c6=="before"){
+return dojo.html.insertBefore(node,_8c5);
 }else{
-if(_8bc=="after"){
-return dojo.html.insertAfter(node,_8bb);
+if(_8c6=="after"){
+return dojo.html.insertAfter(node,_8c5);
 }else{
-if(_8bc=="append"){
-_8bb.appendChild(node);
+if(_8c6=="append"){
+_8c5.appendChild(node);
 return true;
 }
 }
 }
 return false;
-}},function(node,_8bf){
+}},function(node,_8c9){
 if(arguments.length==0){
 return;
 }
 this.domNode=dojo.byId(node);
 dojo.dnd.DropTarget.call(this);
-if(_8bf&&dojo.lang.isString(_8bf)){
-_8bf=[_8bf];
+if(_8c9&&dojo.lang.isString(_8c9)){
+_8c9=[_8c9];
 }
-this.acceptedTypes=_8bf||[];
+this.acceptedTypes=_8c9||[];
 dojo.dnd.dragManager.registerDropTarget(this);
 });
+dojo.kwCompoundRequire({common:["dojo.dnd.DragAndDrop"],browser:["dojo.dnd.HtmlDragAndDrop"],dashboard:["dojo.dnd.HtmlDragAndDrop"]});
 dojo.provide("dojo.dnd.*");
 dojo.provide("dojo.ns");
-dojo.ns={namespaces:{},failed:{},loading:{},loaded:{},register:function(name,_8c1,_8c2,_8c3){
-if(!_8c3||!this.namespaces[name]){
-this.namespaces[name]=new dojo.ns.Ns(name,_8c1,_8c2);
+dojo.ns={namespaces:{},failed:{},loading:{},loaded:{},register:function(name,_8cb,_8cc,_8cd){
+if(!_8cd||!this.namespaces[name]){
+this.namespaces[name]=new dojo.ns.Ns(name,_8cb,_8cc);
 }
 },allow:function(name){
 if(this.failed[name]){
@@ -67901,44 +47988,44 @@
 }
 return this.namespaces[name];
 }};
-dojo.ns.Ns=function(name,_8ca,_8cb){
+dojo.ns.Ns=function(name,_8d4,_8d5){
 this.name=name;
-this.module=_8ca;
-this.resolver=_8cb;
+this.module=_8d4;
+this.resolver=_8d5;
 this._loaded=[];
 this._failed=[];
 };
-dojo.ns.Ns.prototype.resolve=function(name,_8cd,_8ce){
+dojo.ns.Ns.prototype.resolve=function(name,_8d7,_8d8){
 if(!this.resolver||djConfig["skipAutoRequire"]){
 return false;
 }
-var _8cf=this.resolver(name,_8cd);
-if((_8cf)&&(!this._loaded[_8cf])&&(!this._failed[_8cf])){
+var _8d9=this.resolver(name,_8d7);
+if((_8d9)&&(!this._loaded[_8d9])&&(!this._failed[_8d9])){
 var req=dojo.require;
-req(_8cf,false,true);
-if(dojo.hostenv.findModule(_8cf,false)){
-this._loaded[_8cf]=true;
+req(_8d9,false,true);
+if(dojo.hostenv.findModule(_8d9,false)){
+this._loaded[_8d9]=true;
 }else{
-if(!_8ce){
-dojo.raise("dojo.ns.Ns.resolve: module '"+_8cf+"' not found after loading via namespace '"+this.name+"'");
+if(!_8d8){
+dojo.raise("dojo.ns.Ns.resolve: module '"+_8d9+"' not found after loading via namespace '"+this.name+"'");
 }
-this._failed[_8cf]=true;
+this._failed[_8d9]=true;
 }
 }
-return Boolean(this._loaded[_8cf]);
+return Boolean(this._loaded[_8d9]);
 };
-dojo.registerNamespace=function(name,_8d2,_8d3){
+dojo.registerNamespace=function(name,_8dc,_8dd){
 dojo.ns.register.apply(dojo.ns,arguments);
 };
-dojo.registerNamespaceResolver=function(name,_8d5){
+dojo.registerNamespaceResolver=function(name,_8df){
 var n=dojo.ns.namespaces[name];
 if(n){
-n.resolver=_8d5;
+n.resolver=_8df;
 }
 };
-dojo.registerNamespaceManifest=function(_8d7,path,name,_8da,_8db){
+dojo.registerNamespaceManifest=function(_8e1,path,name,_8e4,_8e5){
 dojo.registerModulePath(name,path);
-dojo.registerNamespace(name,_8da,_8db);
+dojo.registerNamespace(name,_8e4,_8e5);
 };
 dojo.registerNamespace("dojo","dojo.widget");
 dojo.provide("dojo.widget.Manager");
@@ -67946,35 +48033,35 @@
 this.widgets=[];
 this.widgetIds=[];
 this.topWidgets={};
-var _8dc={};
-var _8dd=[];
-this.getUniqueId=function(_8de){
-var _8df;
+var _8e6={};
+var _8e7=[];
+this.getUniqueId=function(_8e8){
+var _8e9;
 do{
-_8df=_8de+"_"+(_8dc[_8de]!=undefined?++_8dc[_8de]:_8dc[_8de]=0);
-}while(this.getWidgetById(_8df));
-return _8df;
+_8e9=_8e8+"_"+(_8e6[_8e8]!=undefined?++_8e6[_8e8]:_8e6[_8e8]=0);
+}while(this.getWidgetById(_8e9));
+return _8e9;
 };
-this.add=function(_8e0){
-this.widgets.push(_8e0);
-if(!_8e0.extraArgs["id"]){
-_8e0.extraArgs["id"]=_8e0.extraArgs["ID"];
+this.add=function(_8ea){
+this.widgets.push(_8ea);
+if(!_8ea.extraArgs["id"]){
+_8ea.extraArgs["id"]=_8ea.extraArgs["ID"];
 }
-if(_8e0.widgetId==""){
-if(_8e0["id"]){
-_8e0.widgetId=_8e0["id"];
+if(_8ea.widgetId==""){
+if(_8ea["id"]){
+_8ea.widgetId=_8ea["id"];
 }else{
-if(_8e0.extraArgs["id"]){
-_8e0.widgetId=_8e0.extraArgs["id"];
+if(_8ea.extraArgs["id"]){
+_8ea.widgetId=_8ea.extraArgs["id"];
 }else{
-_8e0.widgetId=this.getUniqueId(_8e0.ns+"_"+_8e0.widgetType);
+_8ea.widgetId=this.getUniqueId(_8ea.ns+"_"+_8ea.widgetType);
 }
 }
 }
-if(this.widgetIds[_8e0.widgetId]){
-dojo.debug("widget ID collision on ID: "+_8e0.widgetId);
+if(this.widgetIds[_8ea.widgetId]){
+dojo.debug("widget ID collision on ID: "+_8ea.widgetId);
 }
-this.widgetIds[_8e0.widgetId]=_8e0;
+this.widgetIds[_8ea.widgetId]=_8ea;
 };
 this.destroyAll=function(){
 for(var x=this.widgets.length-1;x>=0;x--){
@@ -67986,13 +48073,14 @@
 }
 }
 };
-this.remove=function(_8e2){
-if(dojo.lang.isNumber(_8e2)){
-var tw=this.widgets[_8e2].widgetId;
+this.remove=function(_8ec){
+if(dojo.lang.isNumber(_8ec)){
+var tw=this.widgets[_8ec].widgetId;
+delete this.topWidgets[tw];
 delete this.widgetIds[tw];
-this.widgets.splice(_8e2,1);
+this.widgets.splice(_8ec,1);
 }else{
-this.removeById(_8e2);
+this.removeById(_8ec);
 }
 };
 this.removeById=function(id){
@@ -68018,31 +48106,31 @@
 };
 this.getWidgetsByType=function(type){
 var lt=type.toLowerCase();
-var _8e9=(type.indexOf(":")<0?function(x){
+var _8f3=(type.indexOf(":")<0?function(x){
 return x.widgetType.toLowerCase();
 }:function(x){
 return x.getNamespacedType();
 });
 var ret=[];
 dojo.lang.forEach(this.widgets,function(x){
-if(_8e9(x)==lt){
+if(_8f3(x)==lt){
 ret.push(x);
 }
 });
 return ret;
 };
-this.getWidgetsByFilter=function(_8ee,_8ef){
+this.getWidgetsByFilter=function(_8f8,_8f9){
 var ret=[];
 dojo.lang.every(this.widgets,function(x){
-if(_8ee(x)){
+if(_8f8(x)){
 ret.push(x);
-if(_8ef){
+if(_8f9){
 return false;
 }
 }
 return true;
 });
-return (_8ef?ret[0]:ret);
+return (_8f9?ret[0]:ret);
 };
 this.getAllWidgets=function(){
 return this.widgets.concat();
@@ -68061,99 +48149,99 @@
 this.byType=this.getWidgetsByType;
 this.byFilter=this.getWidgetsByFilter;
 this.byNode=this.getWidgetByNode;
-var _8f5={};
-var _8f6=["dojo.widget"];
-for(var i=0;i<_8f6.length;i++){
-_8f6[_8f6[i]]=true;
+var _8ff={};
+var _900=["dojo.widget"];
+for(var i=0;i<_900.length;i++){
+_900[_900[i]]=true;
 }
-this.registerWidgetPackage=function(_8f8){
-if(!_8f6[_8f8]){
-_8f6[_8f8]=true;
-_8f6.push(_8f8);
+this.registerWidgetPackage=function(_902){
+if(!_900[_902]){
+_900[_902]=true;
+_900.push(_902);
 }
 };
 this.getWidgetPackageList=function(){
-return dojo.lang.map(_8f6,function(elt){
+return dojo.lang.map(_900,function(elt){
 return (elt!==true?elt:undefined);
 });
 };
-this.getImplementation=function(_8fa,_8fb,_8fc,ns){
-var impl=this.getImplementationName(_8fa,ns);
+this.getImplementation=function(_904,_905,_906,ns){
+var impl=this.getImplementationName(_904,ns);
 if(impl){
-var ret=_8fb?new impl(_8fb):new impl();
+var ret=_905?new impl(_905):new impl();
 return ret;
 }
 };
 function buildPrefixCache(){
-for(var _900 in dojo.render){
-if(dojo.render[_900]["capable"]===true){
-var _901=dojo.render[_900].prefixes;
-for(var i=0;i<_901.length;i++){
-_8dd.push(_901[i].toLowerCase());
+for(var _90a in dojo.render){
+if(dojo.render[_90a]["capable"]===true){
+var _90b=dojo.render[_90a].prefixes;
+for(var i=0;i<_90b.length;i++){
+_8e7.push(_90b[i].toLowerCase());
 }
 }
 }
 }
-var _903=function(_904,_905){
-if(!_905){
+var _90d=function(_90e,_90f){
+if(!_90f){
 return null;
 }
-for(var i=0,l=_8dd.length,_908;i<=l;i++){
-_908=(i<l?_905[_8dd[i]]:_905);
-if(!_908){
+for(var i=0,l=_8e7.length,_912;i<=l;i++){
+_912=(i<l?_90f[_8e7[i]]:_90f);
+if(!_912){
 continue;
 }
-for(var name in _908){
-if(name.toLowerCase()==_904){
-return _908[name];
+for(var name in _912){
+if(name.toLowerCase()==_90e){
+return _912[name];
 }
 }
 }
 return null;
 };
-var _90a=function(_90b,_90c){
-var _90d=dojo.evalObjPath(_90c,false);
-return (_90d?_903(_90b,_90d):null);
+var _914=function(_915,_916){
+var _917=dojo.evalObjPath(_916,false);
+return (_917?_90d(_915,_917):null);
 };
-this.getImplementationName=function(_90e,ns){
-var _910=_90e.toLowerCase();
+this.getImplementationName=function(_918,ns){
+var _91a=_918.toLowerCase();
 ns=ns||"dojo";
-var imps=_8f5[ns]||(_8f5[ns]={});
-var impl=imps[_910];
+var imps=_8ff[ns]||(_8ff[ns]={});
+var impl=imps[_91a];
 if(impl){
 return impl;
 }
-if(!_8dd.length){
+if(!_8e7.length){
 buildPrefixCache();
 }
-var _913=dojo.ns.get(ns);
-if(!_913){
+var _91d=dojo.ns.get(ns);
+if(!_91d){
 dojo.ns.register(ns,ns+".widget");
-_913=dojo.ns.get(ns);
+_91d=dojo.ns.get(ns);
 }
-if(_913){
-_913.resolve(_90e);
+if(_91d){
+_91d.resolve(_918);
 }
-impl=_90a(_910,_913.module);
+impl=_914(_91a,_91d.module);
 if(impl){
-return (imps[_910]=impl);
+return (imps[_91a]=impl);
 }
-_913=dojo.ns.require(ns);
-if((_913)&&(_913.resolver)){
-_913.resolve(_90e);
-impl=_90a(_910,_913.module);
+_91d=dojo.ns.require(ns);
+if((_91d)&&(_91d.resolver)){
+_91d.resolve(_918);
+impl=_914(_91a,_91d.module);
 if(impl){
-return (imps[_910]=impl);
+return (imps[_91a]=impl);
 }
 }
-dojo.deprecated("dojo.widget.Manager.getImplementationName","Could not locate widget implementation for \""+_90e+"\" in \""+_913.module+"\" registered to namespace \""+_913.name+"\". "+"Developers must specify correct namespaces for all non-Dojo widgets","0.5");
-for(var i=0;i<_8f6.length;i++){
-impl=_90a(_910,_8f6[i]);
+dojo.deprecated("dojo.widget.Manager.getImplementationName","Could not locate widget implementation for \""+_918+"\" in \""+_91d.module+"\" registered to namespace \""+_91d.name+"\". "+"Developers must specify correct namespaces for all non-Dojo widgets","0.5");
+for(var i=0;i<_900.length;i++){
+impl=_914(_91a,_900[i]);
 if(impl){
-return (imps[_910]=impl);
+return (imps[_91a]=impl);
 }
 }
-throw new Error("Could not locate widget implementation for \""+_90e+"\" in \""+_913.module+"\" registered to namespace \""+_913.name+"\"");
+throw new Error("Could not locate widget implementation for \""+_918+"\" in \""+_91d.module+"\" registered to namespace \""+_91d.name+"\"");
 };
 this.resizing=false;
 this.onWindowResized=function(){
@@ -68163,9 +48251,9 @@
 try{
 this.resizing=true;
 for(var id in this.topWidgets){
-var _916=this.topWidgets[id];
-if(_916.checkSize){
-_916.checkSize();
+var _920=this.topWidgets[id];
+if(_920.checkSize){
+_920.checkSize();
 }
 }
 }
@@ -68184,8 +48272,8 @@
 var dw=dojo.widget;
 var dwm=dw.manager;
 var h=dojo.lang.curry(dojo.lang,"hitch",dwm);
-var g=function(_91b,_91c){
-dw[(_91c||_91b)]=h(_91b);
+var g=function(_925,_926){
+dw[(_926||_925)]=h(_925);
 };
 g("add","addWidget");
 g("destroyAll","destroyAllWidgets");
@@ -68199,11 +48287,11 @@
 g("getWidgetsByFilter","byFilter");
 g("getWidgetByNode","byNode");
 dw.all=function(n){
-var _91e=dwm.getAllWidgets.apply(dwm,arguments);
+var _928=dwm.getAllWidgets.apply(dwm,arguments);
 if(arguments.length>0){
-return _91e[n];
+return _928[n];
 }
-return _91e;
+return _928;
 };
 g("registerWidgetPackage");
 g("getImplementation","getWidgetImplementation");
@@ -68213,7 +48301,7 @@
 dw.root=dwm.root;
 })();
 dojo.provide("dojo.a11y");
-dojo.a11y={imgPath:dojo.uri.dojoUri("src/widget/templates/images"),doAccessibleCheck:true,accessible:null,checkAccessible:function(){
+dojo.a11y={imgPath:dojo.uri.moduleUri("dojo.widget","templates/images"),doAccessibleCheck:true,accessible:null,checkAccessible:function(){
 if(this.accessible===null){
 this.accessible=false;
 if(this.doAccessibleCheck==true){
@@ -68227,22 +48315,22 @@
 var div=document.createElement("div");
 div.style.backgroundImage="url(\""+this.imgPath+"/tab_close.gif\")";
 dojo.body().appendChild(div);
-var _920=null;
+var _92a=null;
 if(window.getComputedStyle){
-var _921=getComputedStyle(div,"");
-_920=_921.getPropertyValue("background-image");
+var _92b=getComputedStyle(div,"");
+_92a=_92b.getPropertyValue("background-image");
 }else{
-_920=div.currentStyle.backgroundImage;
+_92a=div.currentStyle.backgroundImage;
 }
-var _922=false;
-if(_920!=null&&(_920=="none"||_920=="url(invalid-url:)")){
+var _92c=false;
+if(_92a!=null&&(_92a=="none"||_92a=="url(invalid-url:)")){
 this.accessible=true;
 }
 dojo.body().removeChild(div);
 }
 return this.accessible;
-},setCheckAccessible:function(_923){
-this.doAccessibleCheck=_923;
+},setCheckAccessible:function(_92d){
+this.doAccessibleCheck=_92d;
 },setAccessibleMode:function(){
 if(this.accessible===null){
 if(this.checkAccessible()){
@@ -68269,52 +48357,52 @@
 this.notifyChildrenOfResize();
 },notifyChildrenOfResize:function(){
 for(var i=0;i<this.children.length;i++){
-var _925=this.children[i];
-if(_925.onResized){
-_925.onResized();
+var _92f=this.children[i];
+if(_92f.onResized){
+_92f.onResized();
 }
 }
-},create:function(args,_927,_928,ns){
+},create:function(args,_931,_932,ns){
 if(ns){
 this.ns=ns;
 }
-this.satisfyPropertySets(args,_927,_928);
-this.mixInProperties(args,_927,_928);
-this.postMixInProperties(args,_927,_928);
+this.satisfyPropertySets(args,_931,_932);
+this.mixInProperties(args,_931,_932);
+this.postMixInProperties(args,_931,_932);
 dojo.widget.manager.add(this);
-this.buildRendering(args,_927,_928);
-this.initialize(args,_927,_928);
-this.postInitialize(args,_927,_928);
-this.postCreate(args,_927,_928);
+this.buildRendering(args,_931,_932);
+this.initialize(args,_931,_932);
+this.postInitialize(args,_931,_932);
+this.postCreate(args,_931,_932);
 return this;
-},destroy:function(_92a){
+},destroy:function(_934){
 if(this.parent){
 this.parent.removeChild(this);
 }
 this.destroyChildren();
 this.uninitialize();
-this.destroyRendering(_92a);
+this.destroyRendering(_934);
 dojo.widget.manager.removeById(this.widgetId);
 },destroyChildren:function(){
-var _92b;
+var _935;
 var i=0;
 while(this.children.length>i){
-_92b=this.children[i];
-if(_92b instanceof dojo.widget.Widget){
-this.removeChild(_92b);
-_92b.destroy();
+_935=this.children[i];
+if(_935 instanceof dojo.widget.Widget){
+this.removeChild(_935);
+_935.destroy();
 continue;
 }
 i++;
 }
-},getChildrenOfType:function(type,_92e){
+},getChildrenOfType:function(type,_938){
 var ret=[];
-var _930=dojo.lang.isFunction(type);
-if(!_930){
+var _93a=dojo.lang.isFunction(type);
+if(!_93a){
 type=type.toLowerCase();
 }
 for(var x=0;x<this.children.length;x++){
-if(_930){
+if(_93a){
 if(this.children[x] instanceof type){
 ret.push(this.children[x]);
 }
@@ -68323,24 +48411,24 @@
 ret.push(this.children[x]);
 }
 }
-if(_92e){
-ret=ret.concat(this.children[x].getChildrenOfType(type,_92e));
+if(_938){
+ret=ret.concat(this.children[x].getChildrenOfType(type,_938));
 }
 }
 return ret;
 },getDescendants:function(){
-var _932=[];
-var _933=[this];
+var _93c=[];
+var _93d=[this];
 var elem;
-while((elem=_933.pop())){
-_932.push(elem);
+while((elem=_93d.pop())){
+_93c.push(elem);
 if(elem.children){
 dojo.lang.forEach(elem.children,function(elem){
-_933.push(elem);
+_93d.push(elem);
 });
 }
 }
-return _932;
+return _93c;
 },isFirstChild:function(){
 return this===this.parent.children[0];
 },isLastChild:function(){
@@ -68354,29 +48442,29 @@
 }
 return;
 }
-var _93a;
-var _93b=dojo.widget.lcArgsCache[this.widgetType];
-if(_93b==null){
-_93b={};
+var _944;
+var _945=dojo.widget.lcArgsCache[this.widgetType];
+if(_945==null){
+_945={};
 for(var y in this){
-_93b[((new String(y)).toLowerCase())]=y;
+_945[((new String(y)).toLowerCase())]=y;
 }
-dojo.widget.lcArgsCache[this.widgetType]=_93b;
+dojo.widget.lcArgsCache[this.widgetType]=_945;
 }
-var _93d={};
+var _947={};
 for(var x in args){
 if(!this[x]){
-var y=_93b[(new String(x)).toLowerCase()];
+var y=_945[(new String(x)).toLowerCase()];
 if(y){
 args[y]=args[x];
 x=y;
 }
 }
-if(_93d[x]){
+if(_947[x]){
 continue;
 }
-_93d[x]=true;
-if((typeof this[x])!=(typeof _93a)){
+_947[x]=true;
+if((typeof this[x])!=(typeof _944)){
 if(typeof args[x]!="string"){
 this[x]=args[x];
 }else{
@@ -68407,11 +48495,11 @@
 if(this[x] instanceof dojo.uri.Uri){
 this[x]=dojo.uri.dojoUri(args[x]);
 }else{
-var _93f=args[x].split(";");
-for(var y=0;y<_93f.length;y++){
-var si=_93f[y].indexOf(":");
-if((si!=-1)&&(_93f[y].length>si)){
-this[x][_93f[y].substr(0,si).replace(/^\s+|\s+$/g,"")]=_93f[y].substr(si+1);
+var _949=args[x].split(";");
+for(var y=0;y<_949.length;y++){
+var si=_949[y].indexOf(":");
+if((si!=-1)&&(_949[y].length>si)){
+this[x][_949[y].substr(0,si).replace(/^\s+|\s+$/g,"")]=_949[y].substr(si+1);
 }
 }
 }
@@ -68429,34 +48517,34 @@
 this.extraArgs[x.toLowerCase()]=args[x];
 }
 }
-},postMixInProperties:function(args,frag,_943){
-},initialize:function(args,frag,_946){
+},postMixInProperties:function(args,frag,_94d){
+},initialize:function(args,frag,_950){
 return false;
-},postInitialize:function(args,frag,_949){
+},postInitialize:function(args,frag,_953){
 return false;
-},postCreate:function(args,frag,_94c){
+},postCreate:function(args,frag,_956){
 return false;
 },uninitialize:function(){
 return false;
-},buildRendering:function(args,frag,_94f){
+},buildRendering:function(args,frag,_959){
 dojo.unimplemented("dojo.widget.Widget.buildRendering, on "+this.toString()+", ");
 return false;
 },destroyRendering:function(){
 dojo.unimplemented("dojo.widget.Widget.destroyRendering");
 return false;
-},addedTo:function(_950){
-},addChild:function(_951){
+},addedTo:function(_95a){
+},addChild:function(_95b){
 dojo.unimplemented("dojo.widget.Widget.addChild");
 return false;
-},removeChild:function(_952){
+},removeChild:function(_95c){
 for(var x=0;x<this.children.length;x++){
-if(this.children[x]===_952){
+if(this.children[x]===_95c){
 this.children.splice(x,1);
-_952.parent=null;
+_95c.parent=null;
 break;
 }
 }
-return _952;
+return _95c;
 },getPreviousSibling:function(){
 var idx=this.getParentIndex();
 if(idx<=0){
@@ -68482,30 +48570,30 @@
 dojo.widget.tags.addParseTreeHandler=function(type){
 dojo.deprecated("addParseTreeHandler",". ParseTreeHandlers are now reserved for components. Any unfiltered DojoML tag without a ParseTreeHandler is assumed to be a widget","0.5");
 };
-dojo.widget.tags["dojo:propertyset"]=function(_957,_958,_959){
-var _95a=_958.parseProperties(_957["dojo:propertyset"]);
+dojo.widget.tags["dojo:propertyset"]=function(_961,_962,_963){
+var _964=_962.parseProperties(_961["dojo:propertyset"]);
 };
-dojo.widget.tags["dojo:connect"]=function(_95b,_95c,_95d){
-var _95e=_95c.parseProperties(_95b["dojo:connect"]);
+dojo.widget.tags["dojo:connect"]=function(_965,_966,_967){
+var _968=_966.parseProperties(_965["dojo:connect"]);
 };
-dojo.widget.buildWidgetFromParseTree=function(type,frag,_961,_962,_963,_964){
+dojo.widget.buildWidgetFromParseTree=function(type,frag,_96b,_96c,_96d,_96e){
 dojo.a11y.setAccessibleMode();
-var _965=type.split(":");
-_965=(_965.length==2)?_965[1]:type;
-var _966=_964||_961.parseProperties(frag[frag["ns"]+":"+_965]);
-var _967=dojo.widget.manager.getImplementation(_965,null,null,frag["ns"]);
-if(!_967){
+var _96f=type.split(":");
+_96f=(_96f.length==2)?_96f[1]:type;
+var _970=_96e||_96b.parseProperties(frag[frag["ns"]+":"+_96f]);
+var _971=dojo.widget.manager.getImplementation(_96f,null,null,frag["ns"]);
+if(!_971){
 throw new Error("cannot find \""+type+"\" widget");
 }else{
-if(!_967.create){
+if(!_971.create){
 throw new Error("\""+type+"\" widget object has no \"create\" method and does not appear to implement *Widget");
 }
 }
-_966["dojoinsertionindex"]=_963;
-var ret=_967.create(_966,frag,_962,frag["ns"]);
+_970["dojoinsertionindex"]=_96d;
+var ret=_971.create(_970,frag,_96c,frag["ns"]);
 return ret;
 };
-dojo.widget.defineWidget=function(_969,_96a,_96b,init,_96d){
+dojo.widget.defineWidget=function(_973,_974,_975,init,_977){
 if(dojo.lang.isString(arguments[3])){
 dojo.widget._defineWidget(arguments[0],arguments[3],arguments[1],arguments[4],arguments[2]);
 }else{
@@ -68525,50 +48613,50 @@
 }
 };
 dojo.widget.defineWidget.renderers="html|svg|vml";
-dojo.widget._defineWidget=function(_970,_971,_972,init,_974){
-var _975=_970.split(".");
-var type=_975.pop();
-var regx="\\.("+(_971?_971+"|":"")+dojo.widget.defineWidget.renderers+")\\.";
-var r=_970.search(new RegExp(regx));
-_975=(r<0?_975.join("."):_970.substr(0,r));
-dojo.widget.manager.registerWidgetPackage(_975);
-var pos=_975.indexOf(".");
-var _97a=(pos>-1)?_975.substring(0,pos):_975;
-_974=(_974)||{};
-_974.widgetType=type;
-if((!init)&&(_974["classConstructor"])){
-init=_974.classConstructor;
-delete _974.classConstructor;
+dojo.widget._defineWidget=function(_97a,_97b,_97c,init,_97e){
+var _97f=_97a.split(".");
+var type=_97f.pop();
+var regx="\\.("+(_97b?_97b+"|":"")+dojo.widget.defineWidget.renderers+")\\.";
+var r=_97a.search(new RegExp(regx));
+_97f=(r<0?_97f.join("."):_97a.substr(0,r));
+dojo.widget.manager.registerWidgetPackage(_97f);
+var pos=_97f.indexOf(".");
+var _984=(pos>-1)?_97f.substring(0,pos):_97f;
+_97e=(_97e)||{};
+_97e.widgetType=type;
+if((!init)&&(_97e["classConstructor"])){
+init=_97e.classConstructor;
+delete _97e.classConstructor;
 }
-dojo.declare(_970,_972,init,_974);
+dojo.declare(_97a,_97c,init,_97e);
 };
 dojo.provide("dojo.widget.Parse");
-dojo.widget.Parse=function(_97b){
+dojo.widget.Parse=function(_985){
 this.propertySetsList=[];
-this.fragment=_97b;
-this.createComponents=function(frag,_97d){
-var _97e=[];
-var _97f=false;
+this.fragment=_985;
+this.createComponents=function(frag,_987){
+var _988=[];
+var _989=false;
 try{
 if(frag&&frag.tagName&&(frag!=frag.nodeRef)){
-var _980=dojo.widget.tags;
+var _98a=dojo.widget.tags;
 var tna=String(frag.tagName).split(";");
 for(var x=0;x<tna.length;x++){
 var ltn=tna[x].replace(/^\s+|\s+$/g,"").toLowerCase();
 frag.tagName=ltn;
 var ret;
-if(_980[ltn]){
-_97f=true;
-ret=_980[ltn](frag,this,_97d,frag.index);
-_97e.push(ret);
+if(_98a[ltn]){
+_989=true;
+ret=_98a[ltn](frag,this,_987,frag.index);
+_988.push(ret);
 }else{
 if(ltn.indexOf(":")==-1){
 ltn="dojo:"+ltn;
 }
-ret=dojo.widget.buildWidgetFromParseTree(ltn,frag,this,_97d,frag.index);
+ret=dojo.widget.buildWidgetFromParseTree(ltn,frag,this,_987,frag.index);
 if(ret){
-_97f=true;
-_97e.push(ret);
+_989=true;
+_988.push(ret);
 }
 }
 }
@@ -68577,43 +48665,43 @@
 catch(e){
 dojo.debug("dojo.widget.Parse: error:",e);
 }
-if(!_97f){
-_97e=_97e.concat(this.createSubComponents(frag,_97d));
+if(!_989){
+_988=_988.concat(this.createSubComponents(frag,_987));
 }
-return _97e;
+return _988;
 };
-this.createSubComponents=function(_985,_986){
-var frag,_988=[];
-for(var item in _985){
-frag=_985[item];
-if(frag&&typeof frag=="object"&&(frag!=_985.nodeRef)&&(frag!=_985.tagName)&&(!dojo.dom.isNode(frag))){
-_988=_988.concat(this.createComponents(frag,_986));
+this.createSubComponents=function(_98f,_990){
+var frag,_992=[];
+for(var item in _98f){
+frag=_98f[item];
+if(frag&&typeof frag=="object"&&(frag!=_98f.nodeRef)&&(frag!=_98f.tagName)&&(!dojo.dom.isNode(frag))){
+_992=_992.concat(this.createComponents(frag,_990));
 }
 }
-return _988;
+return _992;
 };
-this.parsePropertySets=function(_98a){
+this.parsePropertySets=function(_994){
 return [];
 };
-this.parseProperties=function(_98b){
-var _98c={};
-for(var item in _98b){
-if((_98b[item]==_98b.tagName)||(_98b[item]==_98b.nodeRef)){
+this.parseProperties=function(_995){
+var _996={};
+for(var item in _995){
+if((_995[item]==_995.tagName)||(_995[item]==_995.nodeRef)){
 }else{
-var frag=_98b[item];
+var frag=_995[item];
 if(frag.tagName&&dojo.widget.tags[frag.tagName.toLowerCase()]){
 }else{
 if(frag[0]&&frag[0].value!=""&&frag[0].value!=null){
 try{
 if(item.toLowerCase()=="dataprovider"){
-var _98f=this;
-this.getDataProvider(_98f,frag[0].value);
-_98c.dataProvider=this.dataProvider;
+var _999=this;
+this.getDataProvider(_999,frag[0].value);
+_996.dataProvider=this.dataProvider;
 }
-_98c[item]=frag[0].value;
-var _990=this.parseProperties(frag);
-for(var _991 in _990){
-_98c[_991]=_990[_991];
+_996[item]=frag[0].value;
+var _99a=this.parseProperties(frag);
+for(var _99b in _99a){
+_996[_99b]=_99a[_99b];
 }
 }
 catch(e){
@@ -68624,67 +48712,67 @@
 switch(item.toLowerCase()){
 case "checked":
 case "disabled":
-if(typeof _98c[item]!="boolean"){
-_98c[item]=true;
+if(typeof _996[item]!="boolean"){
+_996[item]=true;
 }
 break;
 }
 }
 }
-return _98c;
+return _996;
 };
-this.getDataProvider=function(_992,_993){
-dojo.io.bind({url:_993,load:function(type,_995){
+this.getDataProvider=function(_99c,_99d){
+dojo.io.bind({url:_99d,load:function(type,_99f){
 if(type=="load"){
-_992.dataProvider=_995;
+_99c.dataProvider=_99f;
 }
 },mimetype:"text/javascript",sync:true});
 };
-this.getPropertySetById=function(_996){
+this.getPropertySetById=function(_9a0){
 for(var x=0;x<this.propertySetsList.length;x++){
-if(_996==this.propertySetsList[x]["id"][0].value){
+if(_9a0==this.propertySetsList[x]["id"][0].value){
 return this.propertySetsList[x];
 }
 }
 return "";
 };
-this.getPropertySetsByType=function(_998){
-var _999=[];
+this.getPropertySetsByType=function(_9a2){
+var _9a3=[];
 for(var x=0;x<this.propertySetsList.length;x++){
 var cpl=this.propertySetsList[x];
 var cpcc=cpl.componentClass||cpl.componentType||null;
-var _99d=this.propertySetsList[x]["id"][0].value;
-if(cpcc&&(_99d==cpcc[0].value)){
-_999.push(cpl);
+var _9a7=this.propertySetsList[x]["id"][0].value;
+if(cpcc&&(_9a7==cpcc[0].value)){
+_9a3.push(cpl);
 }
 }
-return _999;
+return _9a3;
 };
-this.getPropertySets=function(_99e){
+this.getPropertySets=function(_9a8){
 var ppl="dojo:propertyproviderlist";
-var _9a0=[];
-var _9a1=_99e.tagName;
-if(_99e[ppl]){
-var _9a2=_99e[ppl].value.split(" ");
-for(var _9a3 in _9a2){
-if((_9a3.indexOf("..")==-1)&&(_9a3.indexOf("://")==-1)){
-var _9a4=this.getPropertySetById(_9a3);
-if(_9a4!=""){
-_9a0.push(_9a4);
+var _9aa=[];
+var _9ab=_9a8.tagName;
+if(_9a8[ppl]){
+var _9ac=_9a8[ppl].value.split(" ");
+for(var _9ad in _9ac){
+if((_9ad.indexOf("..")==-1)&&(_9ad.indexOf("://")==-1)){
+var _9ae=this.getPropertySetById(_9ad);
+if(_9ae!=""){
+_9aa.push(_9ae);
 }
 }else{
 }
 }
 }
-return this.getPropertySetsByType(_9a1).concat(_9a0);
+return this.getPropertySetsByType(_9ab).concat(_9aa);
 };
-this.createComponentFromScript=function(_9a5,_9a6,_9a7,ns){
-_9a7.fastMixIn=true;
-var ltn=(ns||"dojo")+":"+_9a6.toLowerCase();
+this.createComponentFromScript=function(_9af,_9b0,_9b1,ns){
+_9b1.fastMixIn=true;
+var ltn=(ns||"dojo")+":"+_9b0.toLowerCase();
 if(dojo.widget.tags[ltn]){
-return [dojo.widget.tags[ltn](_9a7,this,null,null,_9a7)];
+return [dojo.widget.tags[ltn](_9b1,this,null,null,_9b1)];
 }
-return [dojo.widget.buildWidgetFromParseTree(ltn,_9a7,this,null,null,_9a7)];
+return [dojo.widget.buildWidgetFromParseTree(ltn,_9b1,this,null,null,_9b1)];
 };
 };
 dojo.widget._parser_collection={"dojo":new dojo.widget.Parse()};
@@ -68697,123 +48785,129 @@
 }
 return this._parser_collection[name];
 };
-dojo.widget.createWidget=function(name,_9ac,_9ad,_9ae){
-var _9af=false;
-var _9b0=(typeof name=="string");
-if(_9b0){
+dojo.widget.createWidget=function(name,_9b6,_9b7,_9b8){
+var _9b9=false;
+var _9ba=(typeof name=="string");
+if(_9ba){
 var pos=name.indexOf(":");
 var ns=(pos>-1)?name.substring(0,pos):"dojo";
 if(pos>-1){
 name=name.substring(pos+1);
 }
-var _9b3=name.toLowerCase();
-var _9b4=ns+":"+_9b3;
-_9af=(dojo.byId(name)&&!dojo.widget.tags[_9b4]);
+var _9bd=name.toLowerCase();
+var _9be=ns+":"+_9bd;
+_9b9=(dojo.byId(name)&&!dojo.widget.tags[_9be]);
 }
-if((arguments.length==1)&&(_9af||!_9b0)){
+if((arguments.length==1)&&(_9b9||!_9ba)){
 var xp=new dojo.xml.Parse();
-var tn=_9af?dojo.byId(name):name;
+var tn=_9b9?dojo.byId(name):name;
 return dojo.widget.getParser().createComponents(xp.parseElement(tn,null,true))[0];
 }
-function fromScript(_9b7,name,_9b9,ns){
-_9b9[_9b4]={dojotype:[{value:_9b3}],nodeRef:_9b7,fastMixIn:true};
-_9b9.ns=ns;
-return dojo.widget.getParser().createComponentFromScript(_9b7,name,_9b9,ns);
+function fromScript(_9c1,name,_9c3,ns){
+_9c3[_9be]={dojotype:[{value:_9bd}],nodeRef:_9c1,fastMixIn:true};
+_9c3.ns=ns;
+return dojo.widget.getParser().createComponentFromScript(_9c1,name,_9c3,ns);
 }
-_9ac=_9ac||{};
-var _9bb=false;
+_9b6=_9b6||{};
+var _9c5=false;
 var tn=null;
 var h=dojo.render.html.capable;
 if(h){
 tn=document.createElement("span");
 }
-if(!_9ad){
-_9bb=true;
-_9ad=tn;
+if(!_9b7){
+_9c5=true;
+_9b7=tn;
 if(h){
-dojo.body().appendChild(_9ad);
+dojo.body().appendChild(_9b7);
 }
 }else{
-if(_9ae){
-dojo.dom.insertAtPosition(tn,_9ad,_9ae);
+if(_9b8){
+dojo.dom.insertAtPosition(tn,_9b7,_9b8);
 }else{
-tn=_9ad;
+tn=_9b7;
 }
 }
-var _9bd=fromScript(tn,name.toLowerCase(),_9ac,ns);
-if((!_9bd)||(!_9bd[0])||(typeof _9bd[0].widgetType=="undefined")){
+var _9c7=fromScript(tn,name.toLowerCase(),_9b6,ns);
+if((!_9c7)||(!_9c7[0])||(typeof _9c7[0].widgetType=="undefined")){
 throw new Error("createWidget: Creation of \""+name+"\" widget failed.");
 }
 try{
-if(_9bb&&_9bd[0].domNode.parentNode){
-_9bd[0].domNode.parentNode.removeChild(_9bd[0].domNode);
+if(_9c5&&_9c7[0].domNode.parentNode){
+_9c7[0].domNode.parentNode.removeChild(_9c7[0].domNode);
 }
 }
 catch(e){
 dojo.debug(e);
 }
-return _9bd[0];
+return _9c7[0];
 };
 dojo.provide("dojo.widget.DomWidget");
 dojo.widget._cssFiles={};
 dojo.widget._cssStrings={};
 dojo.widget._templateCache={};
-dojo.widget.defaultStrings={dojoRoot:dojo.hostenv.getBaseScriptUri(),baseScriptUri:dojo.hostenv.getBaseScriptUri()};
-dojo.widget.fillFromTemplateCache=function(obj,_9bf,_9c0,_9c1){
-var _9c2=_9bf||obj.templatePath;
-var _9c3=dojo.widget._templateCache;
-if(!_9c2&&!obj["widgetType"]){
+dojo.widget.defaultStrings={dojoRoot:dojo.hostenv.getBaseScriptUri(),dojoWidgetModuleUri:dojo.uri.moduleUri("dojo.widget"),baseScriptUri:dojo.hostenv.getBaseScriptUri()};
+dojo.widget.fillFromTemplateCache=function(obj,_9c9,_9ca,_9cb){
+var _9cc=_9c9||obj.templatePath;
+var _9cd=dojo.widget._templateCache;
+if(!_9cc&&!obj["widgetType"]){
 do{
-var _9c4="__dummyTemplate__"+dojo.widget._templateCache.dummyCount++;
-}while(_9c3[_9c4]);
-obj.widgetType=_9c4;
+var _9ce="__dummyTemplate__"+dojo.widget._templateCache.dummyCount++;
+}while(_9cd[_9ce]);
+obj.widgetType=_9ce;
 }
-var wt=_9c2?_9c2.toString():obj.widgetType;
-var ts=_9c3[wt];
+var wt=_9cc?_9cc.toString():obj.widgetType;
+var ts=_9cd[wt];
 if(!ts){
-_9c3[wt]={"string":null,"node":null};
-if(_9c1){
+_9cd[wt]={"string":null,"node":null};
+if(_9cb){
 ts={};
 }else{
-ts=_9c3[wt];
+ts=_9cd[wt];
 }
 }
-if((!obj.templateString)&&(!_9c1)){
-obj.templateString=_9c0||ts["string"];
+if((!obj.templateString)&&(!_9cb)){
+obj.templateString=_9ca||ts["string"];
 }
-if((!obj.templateNode)&&(!_9c1)){
+if(obj.templateString){
+obj.templateString=this._sanitizeTemplateString(obj.templateString);
+}
+if((!obj.templateNode)&&(!_9cb)){
 obj.templateNode=ts["node"];
 }
-if((!obj.templateNode)&&(!obj.templateString)&&(_9c2)){
-var _9c7=dojo.hostenv.getText(_9c2);
-if(_9c7){
-_9c7=_9c7.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");
-var _9c8=_9c7.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-if(_9c8){
-_9c7=_9c8[1];
+if((!obj.templateNode)&&(!obj.templateString)&&(_9cc)){
+var _9d1=this._sanitizeTemplateString(dojo.hostenv.getText(_9cc));
+obj.templateString=_9d1;
+if(!_9cb){
+_9cd[wt]["string"]=_9d1;
 }
-}else{
-_9c7="";
 }
-obj.templateString=_9c7;
-if(!_9c1){
-_9c3[wt]["string"]=_9c7;
+if((!ts["string"])&&(!_9cb)){
+ts.string=obj.templateString;
 }
+};
+dojo.widget._sanitizeTemplateString=function(_9d2){
+if(_9d2){
+_9d2=_9d2.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");
+var _9d3=_9d2.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+if(_9d3){
+_9d2=_9d3[1];
 }
-if((!ts["string"])&&(!_9c1)){
-ts.string=obj.templateString;
+}else{
+_9d2="";
 }
+return _9d2;
 };
 dojo.widget._templateCache.dummyCount=0;
 dojo.widget.attachProperties=["dojoAttachPoint","id"];
 dojo.widget.eventAttachProperty="dojoAttachEvent";
 dojo.widget.onBuildProperty="dojoOnBuild";
 dojo.widget.waiNames=["waiRole","waiState"];
-dojo.widget.wai={waiRole:{name:"waiRole","namespace":"http://www.w3.org/TR/xhtml2",alias:"x2",prefix:"wairole:"},waiState:{name:"waiState","namespace":"http://www.w3.org/2005/07/aaa",alias:"aaa",prefix:""},setAttr:function(node,ns,attr,_9cc){
+dojo.widget.wai={waiRole:{name:"waiRole","namespace":"http://www.w3.org/TR/xhtml2",alias:"x2",prefix:"wairole:"},waiState:{name:"waiState","namespace":"http://www.w3.org/2005/07/aaa",alias:"aaa",prefix:""},setAttr:function(node,ns,attr,_9d7){
 if(dojo.render.html.ie){
-node.setAttribute(this[ns].alias+":"+attr,this[ns].prefix+_9cc);
+node.setAttribute(this[ns].alias+":"+attr,this[ns].prefix+_9d7);
 }else{
-node.setAttributeNS(this[ns]["namespace"],attr,this[ns].prefix+_9cc);
+node.setAttributeNS(this[ns]["namespace"],attr,this[ns].prefix+_9d7);
 }
 },getAttr:function(node,ns,attr){
 if(dojo.render.html.ie){
@@ -68822,119 +48916,119 @@
 return node.getAttributeNS(this[ns]["namespace"],attr);
 }
 },removeAttr:function(node,ns,attr){
-var _9d3=true;
+var _9de=true;
 if(dojo.render.html.ie){
-_9d3=node.removeAttribute(this[ns].alias+":"+attr);
+_9de=node.removeAttribute(this[ns].alias+":"+attr);
 }else{
 node.removeAttributeNS(this[ns]["namespace"],attr);
 }
-return _9d3;
+return _9de;
 }};
-dojo.widget.attachTemplateNodes=function(_9d4,_9d5,_9d6){
-var _9d7=dojo.dom.ELEMENT_NODE;
+dojo.widget.attachTemplateNodes=function(_9df,_9e0,_9e1){
+var _9e2=dojo.dom.ELEMENT_NODE;
 function trim(str){
 return str.replace(/^\s+|\s+$/g,"");
 }
-if(!_9d4){
-_9d4=_9d5.domNode;
+if(!_9df){
+_9df=_9e0.domNode;
 }
-if(_9d4.nodeType!=_9d7){
+if(_9df.nodeType!=_9e2){
 return;
 }
-var _9d9=_9d4.all||_9d4.getElementsByTagName("*");
-var _9da=_9d5;
-for(var x=-1;x<_9d9.length;x++){
-var _9dc=(x==-1)?_9d4:_9d9[x];
-var _9dd=[];
-if(!_9d5.widgetsInTemplate||!_9dc.getAttribute("dojoType")){
+var _9e4=_9df.all||_9df.getElementsByTagName("*");
+var _9e5=_9e0;
+for(var x=-1;x<_9e4.length;x++){
+var _9e7=(x==-1)?_9df:_9e4[x];
+var _9e8=[];
+if(!_9e0.widgetsInTemplate||!_9e7.getAttribute("dojoType")){
 for(var y=0;y<this.attachProperties.length;y++){
-var _9df=_9dc.getAttribute(this.attachProperties[y]);
-if(_9df){
-_9dd=_9df.split(";");
-for(var z=0;z<_9dd.length;z++){
-if(dojo.lang.isArray(_9d5[_9dd[z]])){
-_9d5[_9dd[z]].push(_9dc);
+var _9ea=_9e7.getAttribute(this.attachProperties[y]);
+if(_9ea){
+_9e8=_9ea.split(";");
+for(var z=0;z<_9e8.length;z++){
+if(dojo.lang.isArray(_9e0[_9e8[z]])){
+_9e0[_9e8[z]].push(_9e7);
 }else{
-_9d5[_9dd[z]]=_9dc;
+_9e0[_9e8[z]]=_9e7;
 }
 }
 break;
 }
 }
-var _9e1=_9dc.getAttribute(this.eventAttachProperty);
-if(_9e1){
-var evts=_9e1.split(";");
+var _9ec=_9e7.getAttribute(this.eventAttachProperty);
+if(_9ec){
+var evts=_9ec.split(";");
 for(var y=0;y<evts.length;y++){
 if((!evts[y])||(!evts[y].length)){
 continue;
 }
-var _9e3=null;
+var _9ee=null;
 var tevt=trim(evts[y]);
 if(evts[y].indexOf(":")>=0){
-var _9e5=tevt.split(":");
-tevt=trim(_9e5[0]);
-_9e3=trim(_9e5[1]);
+var _9f0=tevt.split(":");
+tevt=trim(_9f0[0]);
+_9ee=trim(_9f0[1]);
 }
-if(!_9e3){
-_9e3=tevt;
+if(!_9ee){
+_9ee=tevt;
 }
 var tf=function(){
-var ntf=new String(_9e3);
+var ntf=new String(_9ee);
 return function(evt){
-if(_9da[ntf]){
-_9da[ntf](dojo.event.browser.fixEvent(evt,this));
+if(_9e5[ntf]){
+_9e5[ntf](dojo.event.browser.fixEvent(evt,this));
 }
 };
 }();
-dojo.event.browser.addListener(_9dc,tevt,tf,false,true);
+dojo.event.browser.addListener(_9e7,tevt,tf,false,true);
 }
 }
-for(var y=0;y<_9d6.length;y++){
-var _9e9=_9dc.getAttribute(_9d6[y]);
-if((_9e9)&&(_9e9.length)){
-var _9e3=null;
-var _9ea=_9d6[y].substr(4);
-_9e3=trim(_9e9);
-var _9eb=[_9e3];
-if(_9e3.indexOf(";")>=0){
-_9eb=dojo.lang.map(_9e3.split(";"),trim);
+for(var y=0;y<_9e1.length;y++){
+var _9f4=_9e7.getAttribute(_9e1[y]);
+if((_9f4)&&(_9f4.length)){
+var _9ee=null;
+var _9f5=_9e1[y].substr(4);
+_9ee=trim(_9f4);
+var _9f6=[_9ee];
+if(_9ee.indexOf(";")>=0){
+_9f6=dojo.lang.map(_9ee.split(";"),trim);
 }
-for(var z=0;z<_9eb.length;z++){
-if(!_9eb[z].length){
+for(var z=0;z<_9f6.length;z++){
+if(!_9f6[z].length){
 continue;
 }
 var tf=function(){
-var ntf=new String(_9eb[z]);
+var ntf=new String(_9f6[z]);
 return function(evt){
-if(_9da[ntf]){
-_9da[ntf](dojo.event.browser.fixEvent(evt,this));
+if(_9e5[ntf]){
+_9e5[ntf](dojo.event.browser.fixEvent(evt,this));
 }
 };
 }();
-dojo.event.browser.addListener(_9dc,_9ea,tf,false,true);
+dojo.event.browser.addListener(_9e7,_9f5,tf,false,true);
 }
 }
 }
 }
-var _9ee=_9dc.getAttribute(this.templateProperty);
-if(_9ee){
-_9d5[_9ee]=_9dc;
+var _9f9=_9e7.getAttribute(this.templateProperty);
+if(_9f9){
+_9e0[_9f9]=_9e7;
 }
 dojo.lang.forEach(dojo.widget.waiNames,function(name){
 var wai=dojo.widget.wai[name];
-var val=_9dc.getAttribute(wai.name);
+var val=_9e7.getAttribute(wai.name);
 if(val){
 if(val.indexOf("-")==-1){
-dojo.widget.wai.setAttr(_9dc,wai.name,"role",val);
+dojo.widget.wai.setAttr(_9e7,wai.name,"role",val);
 }else{
-var _9f2=val.split("-");
-dojo.widget.wai.setAttr(_9dc,wai.name,_9f2[0],_9f2[1]);
+var _9fd=val.split("-");
+dojo.widget.wai.setAttr(_9e7,wai.name,_9fd[0],_9fd[1]);
 }
 }
 },this);
-var _9f3=_9dc.getAttribute(this.onBuildProperty);
-if(_9f3){
-eval("var node = baseNode; var widget = targetObj; "+_9f3);
+var _9fe=_9e7.getAttribute(this.onBuildProperty);
+if(_9fe){
+eval("var node = baseNode; var widget = targetObj; "+_9fe);
 }
 }
 };
@@ -68960,23 +49054,23 @@
 if((arguments.length>0)&&(typeof arguments[0]=="object")){
 this.create(arguments[0]);
 }
-},{templateNode:null,templateString:null,templateCssString:null,preventClobber:false,domNode:null,containerNode:null,widgetsInTemplate:false,addChild:function(_9fb,_9fc,pos,ref,_9ff){
+},{templateNode:null,templateString:null,templateCssString:null,preventClobber:false,domNode:null,containerNode:null,widgetsInTemplate:false,addChild:function(_a06,_a07,pos,ref,_a0a){
 if(!this.isContainer){
 dojo.debug("dojo.widget.DomWidget.addChild() attempted on non-container widget");
 return null;
 }else{
-if(_9ff==undefined){
-_9ff=this.children.length;
+if(_a0a==undefined){
+_a0a=this.children.length;
 }
-this.addWidgetAsDirectChild(_9fb,_9fc,pos,ref,_9ff);
-this.registerChild(_9fb,_9ff);
+this.addWidgetAsDirectChild(_a06,_a07,pos,ref,_a0a);
+this.registerChild(_a06,_a0a);
 }
-return _9fb;
-},addWidgetAsDirectChild:function(_a00,_a01,pos,ref,_a04){
-if((!this.containerNode)&&(!_a01)){
+return _a06;
+},addWidgetAsDirectChild:function(_a0b,_a0c,pos,ref,_a0f){
+if((!this.containerNode)&&(!_a0c)){
 this.containerNode=this.domNode;
 }
-var cn=(_a01)?_a01:this.containerNode;
+var cn=(_a0c)?_a0c:this.containerNode;
 if(!pos){
 pos="after";
 }
@@ -68986,38 +49080,38 @@
 }
 ref=cn.lastChild;
 }
-if(!_a04){
-_a04=0;
+if(!_a0f){
+_a0f=0;
 }
-_a00.domNode.setAttribute("dojoinsertionindex",_a04);
+_a0b.domNode.setAttribute("dojoinsertionindex",_a0f);
 if(!ref){
-cn.appendChild(_a00.domNode);
+cn.appendChild(_a0b.domNode);
 }else{
 if(pos=="insertAtIndex"){
-dojo.dom.insertAtIndex(_a00.domNode,ref.parentNode,_a04);
+dojo.dom.insertAtIndex(_a0b.domNode,ref.parentNode,_a0f);
 }else{
 if((pos=="after")&&(ref===cn.lastChild)){
-cn.appendChild(_a00.domNode);
+cn.appendChild(_a0b.domNode);
 }else{
-dojo.dom.insertAtPosition(_a00.domNode,cn,pos);
+dojo.dom.insertAtPosition(_a0b.domNode,cn,pos);
 }
 }
 }
-},registerChild:function(_a06,_a07){
-_a06.dojoInsertionIndex=_a07;
+},registerChild:function(_a11,_a12){
+_a11.dojoInsertionIndex=_a12;
 var idx=-1;
 for(var i=0;i<this.children.length;i++){
-if(this.children[i].dojoInsertionIndex<=_a07){
+if(this.children[i].dojoInsertionIndex<=_a12){
 idx=i;
 }
 }
-this.children.splice(idx+1,0,_a06);
-_a06.parent=this;
-_a06.addedTo(this,idx+1);
-delete dojo.widget.manager.topWidgets[_a06.widgetId];
-},removeChild:function(_a0a){
-dojo.dom.removeNode(_a0a.domNode);
-return dojo.widget.DomWidget.superclass.removeChild.call(this,_a0a);
+this.children.splice(idx+1,0,_a11);
+_a11.parent=this;
+_a11.addedTo(this,idx+1);
+delete dojo.widget.manager.topWidgets[_a11.widgetId];
+},removeChild:function(_a15){
+dojo.dom.removeNode(_a15.domNode);
+return dojo.widget.DomWidget.superclass.removeChild.call(this,_a15);
 },getFragNodeRef:function(frag){
 if(!frag){
 return null;
@@ -69026,91 +49120,91 @@
 dojo.raise("Error: no frag for widget type "+this.getNamespacedType()+", id "+this.widgetId+" (maybe a widget has set it's type incorrectly)");
 }
 return frag[this.getNamespacedType()]["nodeRef"];
-},postInitialize:function(args,frag,_a0e){
-var _a0f=this.getFragNodeRef(frag);
-if(_a0e&&(_a0e.snarfChildDomOutput||!_a0f)){
-_a0e.addWidgetAsDirectChild(this,"","insertAtIndex","",args["dojoinsertionindex"],_a0f);
+},postInitialize:function(args,frag,_a19){
+var _a1a=this.getFragNodeRef(frag);
+if(_a19&&(_a19.snarfChildDomOutput||!_a1a)){
+_a19.addWidgetAsDirectChild(this,"","insertAtIndex","",args["dojoinsertionindex"],_a1a);
 }else{
-if(_a0f){
-if(this.domNode&&(this.domNode!==_a0f)){
-this._sourceNodeRef=dojo.dom.replaceNode(_a0f,this.domNode);
+if(_a1a){
+if(this.domNode&&(this.domNode!==_a1a)){
+this._sourceNodeRef=dojo.dom.replaceNode(_a1a,this.domNode);
 }
 }
 }
-if(_a0e){
-_a0e.registerChild(this,args.dojoinsertionindex);
+if(_a19){
+_a19.registerChild(this,args.dojoinsertionindex);
 }else{
 dojo.widget.manager.topWidgets[this.widgetId]=this;
 }
 if(this.widgetsInTemplate){
-var _a10=new dojo.xml.Parse();
-var _a11;
-var _a12=this.domNode.getElementsByTagName("*");
-for(var i=0;i<_a12.length;i++){
-if(_a12[i].getAttribute("dojoAttachPoint")=="subContainerWidget"){
-_a11=_a12[i];
+var _a1b=new dojo.xml.Parse();
+var _a1c;
+var _a1d=this.domNode.getElementsByTagName("*");
+for(var i=0;i<_a1d.length;i++){
+if(_a1d[i].getAttribute("dojoAttachPoint")=="subContainerWidget"){
+_a1c=_a1d[i];
 }
-if(_a12[i].getAttribute("dojoType")){
-_a12[i].setAttribute("isSubWidget",true);
+if(_a1d[i].getAttribute("dojoType")){
+_a1d[i].setAttribute("isSubWidget",true);
 }
 }
 if(this.isContainer&&!this.containerNode){
-if(_a11){
+if(_a1c){
 var src=this.getFragNodeRef(frag);
 if(src){
-dojo.dom.moveChildren(src,_a11);
+dojo.dom.moveChildren(src,_a1c);
 frag["dojoDontFollow"]=true;
 }
 }else{
 dojo.debug("No subContainerWidget node can be found in template file for widget "+this);
 }
 }
-var _a15=_a10.parseElement(this.domNode,null,true);
-dojo.widget.getParser().createSubComponents(_a15,this);
-var _a16=[];
-var _a17=[this];
+var _a20=_a1b.parseElement(this.domNode,null,true);
+dojo.widget.getParser().createSubComponents(_a20,this);
+var _a21=[];
+var _a22=[this];
 var w;
-while((w=_a17.pop())){
+while((w=_a22.pop())){
 for(var i=0;i<w.children.length;i++){
-var _a19=w.children[i];
-if(_a19._processedSubWidgets||!_a19.extraArgs["issubwidget"]){
+var _a24=w.children[i];
+if(_a24._processedSubWidgets||!_a24.extraArgs["issubwidget"]){
 continue;
 }
-_a16.push(_a19);
-if(_a19.isContainer){
-_a17.push(_a19);
+_a21.push(_a24);
+if(_a24.isContainer){
+_a22.push(_a24);
 }
 }
 }
-for(var i=0;i<_a16.length;i++){
-var _a1a=_a16[i];
-if(_a1a._processedSubWidgets){
+for(var i=0;i<_a21.length;i++){
+var _a25=_a21[i];
+if(_a25._processedSubWidgets){
 dojo.debug("This should not happen: widget._processedSubWidgets is already true!");
 return;
 }
-_a1a._processedSubWidgets=true;
-if(_a1a.extraArgs["dojoattachevent"]){
-var evts=_a1a.extraArgs["dojoattachevent"].split(";");
+_a25._processedSubWidgets=true;
+if(_a25.extraArgs["dojoattachevent"]){
+var evts=_a25.extraArgs["dojoattachevent"].split(";");
 for(var j=0;j<evts.length;j++){
-var _a1d=null;
+var _a28=null;
 var tevt=dojo.string.trim(evts[j]);
 if(tevt.indexOf(":")>=0){
-var _a1f=tevt.split(":");
-tevt=dojo.string.trim(_a1f[0]);
-_a1d=dojo.string.trim(_a1f[1]);
+var _a2a=tevt.split(":");
+tevt=dojo.string.trim(_a2a[0]);
+_a28=dojo.string.trim(_a2a[1]);
 }
-if(!_a1d){
-_a1d=tevt;
+if(!_a28){
+_a28=tevt;
 }
-if(dojo.lang.isFunction(_a1a[tevt])){
-dojo.event.kwConnect({srcObj:_a1a,srcFunc:tevt,targetObj:this,targetFunc:_a1d});
+if(dojo.lang.isFunction(_a25[tevt])){
+dojo.event.kwConnect({srcObj:_a25,srcFunc:tevt,targetObj:this,targetFunc:_a28});
 }else{
-alert(tevt+" is not a function in widget "+_a1a);
+alert(tevt+" is not a function in widget "+_a25);
 }
 }
 }
-if(_a1a.extraArgs["dojoattachpoint"]){
-this[_a1a.extraArgs["dojoattachpoint"]]=_a1a;
+if(_a25.extraArgs["dojoattachpoint"]){
+this[_a25.extraArgs["dojoattachpoint"]]=_a25;
 }
 }
 }
@@ -69122,16 +49216,16 @@
 if(args["templatecsspath"]){
 args["templateCssPath"]=args["templatecsspath"];
 }
-var _a23=args["templateCssPath"]||this.templateCssPath;
-if(_a23&&!dojo.widget._cssFiles[_a23.toString()]){
-if((!this.templateCssString)&&(_a23)){
-this.templateCssString=dojo.hostenv.getText(_a23);
+var _a2e=args["templateCssPath"]||this.templateCssPath;
+if(_a2e&&!dojo.widget._cssFiles[_a2e.toString()]){
+if((!this.templateCssString)&&(_a2e)){
+this.templateCssString=dojo.hostenv.getText(_a2e);
 this.templateCssPath=null;
 }
-dojo.widget._cssFiles[_a23.toString()]=true;
+dojo.widget._cssFiles[_a2e.toString()]=true;
 }
 if((this["templateCssString"])&&(!dojo.widget._cssStrings[this.templateCssString])){
-dojo.html.insertCssText(this.templateCssString,null,_a23);
+dojo.html.insertCssText(this.templateCssString,null,_a2e);
 dojo.widget._cssStrings[this.templateCssString]=true;
 }
 if((!this.preventClobber)&&((this.templatePath)||(this.templateNode)||((this["templateString"])&&(this.templateString.length))||((typeof ts!="undefined")&&((ts["string"])||(ts["node"]))))){
@@ -69141,13 +49235,13 @@
 }
 this.fillInTemplate(args,frag);
 },buildFromTemplate:function(args,frag){
-var _a26=false;
+var _a31=false;
 if(args["templatepath"]){
 args["templatePath"]=args["templatepath"];
 }
-dojo.widget.fillFromTemplateCache(this,args["templatePath"],null,_a26);
+dojo.widget.fillFromTemplateCache(this,args["templatePath"],null,_a31);
 var ts=dojo.widget._templateCache[this.templatePath?this.templatePath.toString():this.widgetType];
-if((ts)&&(!_a26)){
+if((ts)&&(!_a31)){
 if(!this.templateString.length){
 this.templateString=ts["string"];
 }
@@ -69155,43 +49249,43 @@
 this.templateNode=ts["node"];
 }
 }
-var _a28=false;
+var _a33=false;
 var node=null;
 var tstr=this.templateString;
 if((!this.templateNode)&&(this.templateString)){
-_a28=this.templateString.match(/\$\{([^\}]+)\}/g);
-if(_a28){
+_a33=this.templateString.match(/\$\{([^\}]+)\}/g);
+if(_a33){
 var hash=this.strings||{};
 for(var key in dojo.widget.defaultStrings){
 if(dojo.lang.isUndefined(hash[key])){
 hash[key]=dojo.widget.defaultStrings[key];
 }
 }
-for(var i=0;i<_a28.length;i++){
-var key=_a28[i];
+for(var i=0;i<_a33.length;i++){
+var key=_a33[i];
 key=key.substring(2,key.length-1);
 var kval=(key.substring(0,5)=="this.")?dojo.lang.getObjPathValue(key.substring(5),this):hash[key];
-var _a2f;
+var _a3a;
 if((kval)||(dojo.lang.isString(kval))){
-_a2f=new String((dojo.lang.isFunction(kval))?kval.call(this,key,this.templateString):kval);
-while(_a2f.indexOf("\"")>-1){
-_a2f=_a2f.replace("\"","&quot;");
+_a3a=new String((dojo.lang.isFunction(kval))?kval.call(this,key,this.templateString):kval);
+while(_a3a.indexOf("\"")>-1){
+_a3a=_a3a.replace("\"","&quot;");
 }
-tstr=tstr.replace(_a28[i],_a2f);
+tstr=tstr.replace(_a33[i],_a3a);
 }
 }
 }else{
 this.templateNode=this.createNodesFromText(this.templateString,true)[0];
-if(!_a26){
+if(!_a31){
 ts.node=this.templateNode;
 }
 }
 }
-if((!this.templateNode)&&(!_a28)){
+if((!this.templateNode)&&(!_a33)){
 dojo.debug("DomWidget.buildFromTemplate: could not create template");
 return false;
 }else{
-if(!_a28){
+if(!_a33){
 node=this.templateNode.cloneNode(true);
 if(!node){
 return false;
@@ -69208,14 +49302,14 @@
 dojo.dom.moveChildren(src,this.containerNode);
 }
 }
-},attachTemplateNodes:function(_a31,_a32){
-if(!_a31){
-_a31=this.domNode;
+},attachTemplateNodes:function(_a3c,_a3d){
+if(!_a3c){
+_a3c=this.domNode;
 }
-if(!_a32){
-_a32=this;
+if(!_a3d){
+_a3d=this;
 }
-return dojo.widget.attachTemplateNodes(_a31,_a32,dojo.widget.getDojoEventsFromStr(this.templateString));
+return dojo.widget.attachTemplateNodes(_a3c,_a3d,dojo.widget.getDojoEventsFromStr(this.templateString));
 },fillInTemplate:function(){
 },destroyRendering:function(){
 try{
@@ -69235,31 +49329,31 @@
 dojo.unimplemented("dojo.widget.DomWidget.createNodesFromText");
 }});
 dojo.provide("dojo.lfx.toggle");
-dojo.lfx.toggle.plain={show:function(node,_a34,_a35,_a36){
+dojo.lfx.toggle.plain={show:function(node,_a3f,_a40,_a41){
 dojo.html.show(node);
-if(dojo.lang.isFunction(_a36)){
-_a36();
+if(dojo.lang.isFunction(_a41)){
+_a41();
 }
-},hide:function(node,_a38,_a39,_a3a){
+},hide:function(node,_a43,_a44,_a45){
 dojo.html.hide(node);
-if(dojo.lang.isFunction(_a3a)){
-_a3a();
+if(dojo.lang.isFunction(_a45)){
+_a45();
 }
 }};
-dojo.lfx.toggle.fade={show:function(node,_a3c,_a3d,_a3e){
-dojo.lfx.fadeShow(node,_a3c,_a3d,_a3e).play();
-},hide:function(node,_a40,_a41,_a42){
-dojo.lfx.fadeHide(node,_a40,_a41,_a42).play();
+dojo.lfx.toggle.fade={show:function(node,_a47,_a48,_a49){
+dojo.lfx.fadeShow(node,_a47,_a48,_a49).play();
+},hide:function(node,_a4b,_a4c,_a4d){
+dojo.lfx.fadeHide(node,_a4b,_a4c,_a4d).play();
 }};
-dojo.lfx.toggle.wipe={show:function(node,_a44,_a45,_a46){
-dojo.lfx.wipeIn(node,_a44,_a45,_a46).play();
-},hide:function(node,_a48,_a49,_a4a){
-dojo.lfx.wipeOut(node,_a48,_a49,_a4a).play();
+dojo.lfx.toggle.wipe={show:function(node,_a4f,_a50,_a51){
+dojo.lfx.wipeIn(node,_a4f,_a50,_a51).play();
+},hide:function(node,_a53,_a54,_a55){
+dojo.lfx.wipeOut(node,_a53,_a54,_a55).play();
 }};
-dojo.lfx.toggle.explode={show:function(node,_a4c,_a4d,_a4e,_a4f){
-dojo.lfx.explode(_a4f||{x:0,y:0,width:0,height:0},node,_a4c,_a4d,_a4e).play();
-},hide:function(node,_a51,_a52,_a53,_a54){
-dojo.lfx.implode(node,_a54||{x:0,y:0,width:0,height:0},_a51,_a52,_a53).play();
+dojo.lfx.toggle.explode={show:function(node,_a57,_a58,_a59,_a5a){
+dojo.lfx.explode(_a5a||{x:0,y:0,width:0,height:0},node,_a57,_a58,_a59).play();
+},hide:function(node,_a5c,_a5d,_a5e,_a5f){
+dojo.lfx.implode(node,_a5f||{x:0,y:0,width:0,height:0},_a5c,_a5d,_a5e).play();
 }};
 dojo.provide("dojo.widget.HtmlWidget");
 dojo.declare("dojo.widget.HtmlWidget",dojo.widget.DomWidget,{templateCssPath:null,templatePath:null,lang:"",toggle:"plain",toggleDuration:150,initialize:function(args,frag){
@@ -69270,13 +49364,13 @@
 this.toggleObj=dojo.lfx.toggle[this.toggle.toLowerCase()]||dojo.lfx.toggle.plain;
 },createNodesFromText:function(txt,wrap){
 return dojo.html.createNodesFromText(txt,wrap);
-},destroyRendering:function(_a5b){
+},destroyRendering:function(_a66){
 try{
 if(this.bgIframe){
 this.bgIframe.remove();
 delete this.bgIframe;
 }
-if(!_a5b&&this.domNode){
+if(!_a66&&this.domNode){
 dojo.event.browser.clean(this.domNode);
 }
 dojo.widget.HtmlWidget.superclass.destroyRendering.call(this);
@@ -69313,13 +49407,13 @@
 return false;
 }
 var wh=dojo.html.getMarginBox(this.domNode);
-var _a5f=w||wh.width;
-var _a60=h||wh.height;
-if(this.width==_a5f&&this.height==_a60){
+var _a6a=w||wh.width;
+var _a6b=h||wh.height;
+if(this.width==_a6a&&this.height==_a6b){
 return false;
 }
-this.width=_a5f;
-this.height=_a60;
+this.width=_a6a;
+this.height=_a6b;
 return true;
 },checkSize:function(){
 if(!this._isResized()){
@@ -69336,12 +49430,13 @@
 dojo.lang.setTimeout(this,this.onResized,0);
 }
 },onResized:function(){
-dojo.lang.forEach(this.children,function(_a63){
-if(_a63.checkSize){
-_a63.checkSize();
+dojo.lang.forEach(this.children,function(_a6e){
+if(_a6e.checkSize){
+_a6e.checkSize();
 }
 });
 }});
+dojo.kwCompoundRequire({common:["dojo.xml.Parse","dojo.widget.Widget","dojo.widget.Parse","dojo.widget.Manager"],browser:["dojo.widget.DomWidget","dojo.widget.HtmlWidget"],dashboard:["dojo.widget.DomWidget","dojo.widget.HtmlWidget"],svg:["dojo.widget.SvgWidget"],rhino:["dojo.widget.SwtWidget"]});
 dojo.provide("dojo.widget.*");
 dojo.provide("dojo.math");
 dojo.math.degToRad=function(x){
@@ -69354,11 +49449,11 @@
 if(n<1){
 return 0;
 }
-var _a67=1;
+var _a72=1;
 for(var i=1;i<=n;i++){
-_a67*=i;
+_a72*=i;
 }
-return _a67;
+return _a72;
 };
 dojo.math.permutations=function(n,k){
 if(n==0||k==0){
@@ -69386,33 +49481,33 @@
 return i*k;
 };
 dojo.math.mean=function(){
-var _a73=dojo.lang.isArray(arguments[0])?arguments[0]:arguments;
+var _a7e=dojo.lang.isArray(arguments[0])?arguments[0]:arguments;
 var mean=0;
-for(var i=0;i<_a73.length;i++){
-mean+=_a73[i];
+for(var i=0;i<_a7e.length;i++){
+mean+=_a7e[i];
 }
-return mean/_a73.length;
+return mean/_a7e.length;
 };
-dojo.math.round=function(_a76,_a77){
-if(!_a77){
-var _a78=1;
+dojo.math.round=function(_a81,_a82){
+if(!_a82){
+var _a83=1;
 }else{
-var _a78=Math.pow(10,_a77);
+var _a83=Math.pow(10,_a82);
 }
-return Math.round(_a76*_a78)/_a78;
+return Math.round(_a81*_a83)/_a83;
 };
 dojo.math.sd=dojo.math.standardDeviation=function(){
-var _a79=dojo.lang.isArray(arguments[0])?arguments[0]:arguments;
-return Math.sqrt(dojo.math.variance(_a79));
+var _a84=dojo.lang.isArray(arguments[0])?arguments[0]:arguments;
+return Math.sqrt(dojo.math.variance(_a84));
 };
 dojo.math.variance=function(){
-var _a7a=dojo.lang.isArray(arguments[0])?arguments[0]:arguments;
-var mean=0,_a7c=0;
-for(var i=0;i<_a7a.length;i++){
-mean+=_a7a[i];
-_a7c+=Math.pow(_a7a[i],2);
+var _a85=dojo.lang.isArray(arguments[0])?arguments[0]:arguments;
+var mean=0,_a87=0;
+for(var i=0;i<_a85.length;i++){
+mean+=_a85[i];
+_a87+=Math.pow(_a85[i],2);
 }
-return (_a7c/_a7a.length)-Math.pow(mean/_a7a.length,2);
+return (_a87/_a85.length)-Math.pow(mean/_a85.length,2);
 };
 dojo.math.range=function(a,b,step){
 if(arguments.length<2){
@@ -69422,39 +49517,39 @@
 if(arguments.length<3){
 step=1;
 }
-var _a81=[];
+var _a8c=[];
 if(step>0){
 for(var i=a;i<b;i+=step){
-_a81.push(i);
+_a8c.push(i);
 }
 }else{
 if(step<0){
 for(var i=a;i>b;i+=step){
-_a81.push(i);
+_a8c.push(i);
 }
 }else{
 throw new Error("dojo.math.range: step must be non-zero");
 }
 }
-return _a81;
+return _a8c;
 };
 dojo.provide("dojo.math.curves");
-dojo.math.curves={Line:function(_a83,end){
-this.start=_a83;
+dojo.math.curves={Line:function(_a8e,end){
+this.start=_a8e;
 this.end=end;
-this.dimensions=_a83.length;
-for(var i=0;i<_a83.length;i++){
-_a83[i]=Number(_a83[i]);
+this.dimensions=_a8e.length;
+for(var i=0;i<_a8e.length;i++){
+_a8e[i]=Number(_a8e[i]);
 }
 for(var i=0;i<end.length;i++){
 end[i]=Number(end[i]);
 }
 this.getValue=function(n){
-var _a87=new Array(this.dimensions);
+var _a92=new Array(this.dimensions);
 for(var i=0;i<this.dimensions;i++){
-_a87[i]=((this.end[i]-this.start[i])*n)+this.start[i];
+_a92[i]=((this.end[i]-this.start[i])*n)+this.start[i];
 }
-return _a87;
+return _a92;
 };
 return this;
 },Bezier:function(pnts){
@@ -69465,9 +49560,9 @@
 if(step<=0){
 return this.p[0];
 }
-var _a8b=new Array(this.p[0].length);
+var _a96=new Array(this.p[0].length);
 for(var k=0;j<this.p[0].length;k++){
-_a8b[k]=0;
+_a96[k]=0;
 }
 for(var j=0;j<this.p[0].length;j++){
 var C=0;
@@ -69478,17 +49573,17 @@
 for(var l=0;l<this.p.length;l++){
 D+=this.p[this.p.length-1][0]*dojo.math.bernstein(step,this.p.length,l);
 }
-_a8b[j]=C/D;
+_a96[j]=C/D;
 }
-return _a8b;
+return _a96;
 };
 this.p=pnts;
 return this;
 },CatmullRom:function(pnts,c){
 this.getValue=function(step){
-var _a95=step*(this.p.length-1);
-var node=Math.floor(_a95);
-var _a97=_a95-node;
+var _aa0=step*(this.p.length-1);
+var node=Math.floor(_aa0);
+var _aa2=_aa0-node;
 var i0=node-1;
 if(i0<0){
 i0=0;
@@ -69502,18 +49597,18 @@
 if(i2>=this.p.length){
 i2=this.p.length-1;
 }
-var u=_a97;
-var u2=_a97*_a97;
-var u3=_a97*_a97*_a97;
-var _a9f=new Array(this.p[0].length);
+var u=_aa2;
+var u2=_aa2*_aa2;
+var u3=_aa2*_aa2*_aa2;
+var _aaa=new Array(this.p[0].length);
 for(var k=0;k<this.p[0].length;k++){
 var x1=(-this.c*this.p[i0][k])+((2-this.c)*this.p[i][k])+((this.c-2)*this.p[i1][k])+(this.c*this.p[i2][k]);
 var x2=(2*this.c*this.p[i0][k])+((this.c-3)*this.p[i][k])+((3-2*this.c)*this.p[i1][k])+(-this.c*this.p[i2][k]);
 var x3=(-this.c*this.p[i0][k])+(this.c*this.p[i1][k]);
 var x4=this.p[i][k];
-_a9f[k]=x1*u3+x2*u2+x3*u+x4;
+_aaa[k]=x1*u3+x2*u2+x3*u+x4;
 }
-return _a9f;
+return _aaa;
 };
 if(!c){
 this.c=0.7;
@@ -69522,88 +49617,88 @@
 }
 this.p=pnts;
 return this;
-},Arc:function(_aa5,end,ccw){
-var _aa8=dojo.math.points.midpoint(_aa5,end);
-var _aa9=dojo.math.points.translate(dojo.math.points.invert(_aa8),_aa5);
-var rad=Math.sqrt(Math.pow(_aa9[0],2)+Math.pow(_aa9[1],2));
-var _aab=dojo.math.radToDeg(Math.atan(_aa9[1]/_aa9[0]));
-if(_aa9[0]<0){
-_aab-=90;
+},Arc:function(_ab0,end,ccw){
+var _ab3=dojo.math.points.midpoint(_ab0,end);
+var _ab4=dojo.math.points.translate(dojo.math.points.invert(_ab3),_ab0);
+var rad=Math.sqrt(Math.pow(_ab4[0],2)+Math.pow(_ab4[1],2));
+var _ab6=dojo.math.radToDeg(Math.atan(_ab4[1]/_ab4[0]));
+if(_ab4[0]<0){
+_ab6-=90;
 }else{
-_aab+=90;
+_ab6+=90;
 }
-dojo.math.curves.CenteredArc.call(this,_aa8,rad,_aab,_aab+(ccw?-180:180));
-},CenteredArc:function(_aac,_aad,_aae,end){
-this.center=_aac;
-this.radius=_aad;
-this.start=_aae||0;
+dojo.math.curves.CenteredArc.call(this,_ab3,rad,_ab6,_ab6+(ccw?-180:180));
+},CenteredArc:function(_ab7,_ab8,_ab9,end){
+this.center=_ab7;
+this.radius=_ab8;
+this.start=_ab9||0;
 this.end=end;
 this.getValue=function(n){
-var _ab1=new Array(2);
-var _ab2=dojo.math.degToRad(this.start+((this.end-this.start)*n));
-_ab1[0]=this.center[0]+this.radius*Math.sin(_ab2);
-_ab1[1]=this.center[1]-this.radius*Math.cos(_ab2);
-return _ab1;
+var _abc=new Array(2);
+var _abd=dojo.math.degToRad(this.start+((this.end-this.start)*n));
+_abc[0]=this.center[0]+this.radius*Math.sin(_abd);
+_abc[1]=this.center[1]-this.radius*Math.cos(_abd);
+return _abc;
 };
 return this;
-},Circle:function(_ab3,_ab4){
-dojo.math.curves.CenteredArc.call(this,_ab3,_ab4,0,360);
+},Circle:function(_abe,_abf){
+dojo.math.curves.CenteredArc.call(this,_abe,_abf,0,360);
 return this;
 },Path:function(){
-var _ab5=[];
-var _ab6=[];
-var _ab7=[];
-var _ab8=0;
-this.add=function(_ab9,_aba){
-if(_aba<0){
+var _ac0=[];
+var _ac1=[];
+var _ac2=[];
+var _ac3=0;
+this.add=function(_ac4,_ac5){
+if(_ac5<0){
 dojo.raise("dojo.math.curves.Path.add: weight cannot be less than 0");
 }
-_ab5.push(_ab9);
-_ab6.push(_aba);
-_ab8+=_aba;
+_ac0.push(_ac4);
+_ac1.push(_ac5);
+_ac3+=_ac5;
 computeRanges();
 };
-this.remove=function(_abb){
-for(var i=0;i<_ab5.length;i++){
-if(_ab5[i]==_abb){
-_ab5.splice(i,1);
-_ab8-=_ab6.splice(i,1)[0];
+this.remove=function(_ac6){
+for(var i=0;i<_ac0.length;i++){
+if(_ac0[i]==_ac6){
+_ac0.splice(i,1);
+_ac3-=_ac1.splice(i,1)[0];
 break;
 }
 }
 computeRanges();
 };
 this.removeAll=function(){
-_ab5=[];
-_ab6=[];
-_ab8=0;
+_ac0=[];
+_ac1=[];
+_ac3=0;
 };
 this.getValue=function(n){
-var _abe=false,_abf=0;
-for(var i=0;i<_ab7.length;i++){
-var r=_ab7[i];
+var _ac9=false,_aca=0;
+for(var i=0;i<_ac2.length;i++){
+var r=_ac2[i];
 if(n>=r[0]&&n<r[1]){
 var subN=(n-r[0])/r[2];
-_abf=_ab5[i].getValue(subN);
-_abe=true;
+_aca=_ac0[i].getValue(subN);
+_ac9=true;
 break;
 }
 }
-if(!_abe){
-_abf=_ab5[_ab5.length-1].getValue(1);
+if(!_ac9){
+_aca=_ac0[_ac0.length-1].getValue(1);
 }
 for(var j=0;j<i;j++){
-_abf=dojo.math.points.translate(_abf,_ab5[j].getValue(1));
+_aca=dojo.math.points.translate(_aca,_ac0[j].getValue(1));
 }
-return _abf;
+return _aca;
 };
 function computeRanges(){
-var _ac4=0;
-for(var i=0;i<_ab6.length;i++){
-var end=_ac4+_ab6[i]/_ab8;
-var len=end-_ac4;
-_ab7[i]=[_ac4,end,len];
-_ac4=end;
+var _acf=0;
+for(var i=0;i<_ac1.length;i++){
+var end=_acf+_ac1[i]/_ac3;
+var len=end-_acf;
+_ac2[i]=[_acf,end,len];
+_acf=end;
 }
 }
 return this;
@@ -69636,97 +49731,93 @@
 },distance:function(a,b){
 return Math.sqrt(Math.pow(b[0]-a[0],2)+Math.pow(b[1]-a[1],2));
 }};
+dojo.kwCompoundRequire({common:[["dojo.math",false,false],["dojo.math.curves",false,false],["dojo.math.points",false,false]]});
 dojo.provide("dojo.math.*");
 
 
 __CPAN_EDITION__ kitchen_sink build.txt
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/lang/common.js,
-../src/lang.js,
-../src/dom.js,
-../src/html/common.js,
-../src/uri/Uri.js,
-../src/html/style.js,
-../src/html/__package__.js,
-../src/html/display.js,
-../src/html/layout.js,
-../src/html/util.js,
-../src/lang/array.js,
-../src/gfx/color.js,
-../src/lang/func.js,
-../src/lfx/Animation.js,
-../src/html/color.js,
-../src/lfx/html.js,
-../src/lfx/__package__.js,
-../src/lang/extras.js,
-../src/event/common.js,
-../src/event/topic.js,
-../src/event/browser.js,
-../src/event/__package__.js,
-../src/lang/declare.js,
-../src/logging/Logger.js,
-../src/logging/__package__.js,
-../src/string/common.js,
-../src/string.js,
-../src/io/common.js,
-../src/string/extras.js,
-../src/undo/browser.js,
-../src/io/BrowserIO.js,
-../src/io/cookie.js,
-../src/io/__package__.js,
-../src/uri/__package__.js,
-../src/io/IframeIO.js,
-../src/date.js,
-../src/string/Builder.js,
-../src/string/__package__.js,
-../__package__.js,
-../src/AdapterRegistry.js,
-../src/json.js,
-../src/Deferred.js,
-../src/rpc/RpcService.js,
-../src/rpc/JsonService.js,
-../src/rpc/__package__.js,
-../src/xml/Parse.js,
-../src/xml/__package__.js,
-../src/undo/Manager.js,
-../src/undo/__package__.js,
-../src/crypto.js,
-../src/crypto/MD5.js,
-../src/crypto/__package__.js,
-../src/collections/Collections.js,
-../src/collections/ArrayList.js,
-../src/collections/Queue.js,
-../src/collections/Stack.js,
-../src/dnd/DragAndDrop.js,
-../src/dnd/HtmlDragManager.js,
-../src/html/selection.js,
-../src/html/iframe.js,
-../src/dnd/HtmlDragAndDrop.js,
-../src/dnd/__package__.js,
-../src/ns.js,
-../src/widget/Manager.js,
-../src/a11y.js,
-../src/widget/Widget.js,
-../src/widget/Parse.js,
-../src/widget/DomWidget.js,
-../src/lfx/toggle.js,
-../src/widget/HtmlWidget.js,
-../src/widget/__package__.js,
-../src/math.js,
-../src/math/curves.js,
-../src/math/points.js,
+Files baked into this build:
+dojoGuardStart.js
+../src/bootstrap1.js
+../src/loader.js
+dojoGuardEnd.js
+../src/hostenv_browser.js
+../src/lang/common.js
+../src/lang.js
+../src/dom.js
+../src/html/common.js
+../src/uri/Uri.js
+../src/html/style.js
+../src/html/__package__.js
+../src/html/display.js
+../src/html/layout.js
+../src/html/util.js
+../src/lang/array.js
+../src/gfx/color.js
+../src/lang/func.js
+../src/lfx/Animation.js
+../src/html/color.js
+../src/lfx/html.js
+../src/lfx/__package__.js
+../src/lang/extras.js
+../src/event/common.js
+../src/event/topic.js
+../src/event/browser.js
+../src/event/__package__.js
+../src/lang/declare.js
+../src/logging/Logger.js
+../src/logging/__package__.js
+../src/string/common.js
+../src/string.js
+../src/io/common.js
+../src/string/extras.js
+../src/undo/browser.js
+../src/io/BrowserIO.js
+../src/io/cookie.js
+../src/io/__package__.js
+../src/uri/__package__.js
+../src/io/IframeIO.js
+../src/date.js
+../src/string/Builder.js
+../src/string/__package__.js
+../__package__.js
+../src/AdapterRegistry.js
+../src/json.js
+../src/Deferred.js
+../src/rpc/RpcService.js
+../src/rpc/JsonService.js
+../src/rpc/__package__.js
+../src/xml/Parse.js
+../src/xml/__package__.js
+../src/undo/Manager.js
+../src/undo/__package__.js
+../src/crypto.js
+../src/crypto/MD5.js
+../src/crypto/__package__.js
+../src/collections/Collections.js
+../src/collections/ArrayList.js
+../src/collections/Queue.js
+../src/collections/Stack.js
+../src/dnd/DragAndDrop.js
+../src/dnd/HtmlDragManager.js
+../src/html/selection.js
+../src/html/iframe.js
+../src/dnd/HtmlDragAndDrop.js
+../src/dnd/__package__.js
+../src/ns.js
+../src/widget/Manager.js
+../src/a11y.js
+../src/widget/Widget.js
+../src/widget/Parse.js
+../src/widget/DomWidget.js
+../src/lfx/toggle.js
+../src/widget/HtmlWidget.js
+../src/widget/__package__.js
+../src/math.js
+../src/math/curves.js
+../src/math/points.js
 ../src/math/__package__.js
-
-		
-__CPAN_EDITION__ lfx dojo.js
+__CPAN_EDITION__ minimal dojo.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
 	All Rights Reserved.
@@ -69762,7 +49853,7 @@
 return dj_currentContext;
 };
 dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
+dojo.version={major:0,minor:4,patch:2,flag:"",revision:Number("$Rev: 7616 $".match(/[0-9]+/)[0]),toString:function(){
 with(dojo.version){
 return major+"."+minor+"."+patch+flag+" ("+revision+")";
 }
@@ -70018,7 +50109,7 @@
 }
 };
 dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
+if(typeof setTimeout=="object"||(djConfig["useXDomain"]&&dojo.render.html.opera)){
 setTimeout("dojo.hostenv.loaded();",0);
 }else{
 dojo.hostenv.loaded();
@@ -70166,4122 +50257,11 @@
 dojo.registerModulePath=function(_66,_67){
 return dojo.hostenv.setModulePrefix(_66,_67);
 };
-dojo.setModulePrefix=function(_68,_69){
-dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
-return dojo.registerModulePath(_68,_69);
-};
-dojo.exists=function(obj,_6b){
-var p=_6b.split(".");
-for(var i=0;i<p.length;i++){
-if(!obj[p[i]]){
-return false;
+if(djConfig["modulePaths"]){
+for(var param in djConfig["modulePaths"]){
+dojo.registerModulePath(param,djConfig["modulePaths"][param]);
 }
-obj=obj[p[i]];
 }
-return true;
-};
-dojo.hostenv.normalizeLocale=function(_6e){
-var _6f=_6e?_6e.toLowerCase():dojo.locale;
-if(_6f=="root"){
-_6f="ROOT";
-}
-return _6f;
-};
-dojo.hostenv.searchLocalePath=function(_70,_71,_72){
-_70=dojo.hostenv.normalizeLocale(_70);
-var _73=_70.split("-");
-var _74=[];
-for(var i=_73.length;i>0;i--){
-_74.push(_73.slice(0,i).join("-"));
-}
-_74.push(false);
-if(_71){
-_74.reverse();
-}
-for(var j=_74.length-1;j>=0;j--){
-var loc=_74[j]||"ROOT";
-var _78=_72(loc);
-if(_78){
-break;
-}
-}
-};
-dojo.hostenv.localesGenerated;
-dojo.hostenv.registerNlsPrefix=function(){
-dojo.registerModulePath("nls","nls");
-};
-dojo.hostenv.preloadLocalizations=function(){
-if(dojo.hostenv.localesGenerated){
-dojo.hostenv.registerNlsPrefix();
-function preload(_79){
-_79=dojo.hostenv.normalizeLocale(_79);
-dojo.hostenv.searchLocalePath(_79,true,function(loc){
-for(var i=0;i<dojo.hostenv.localesGenerated.length;i++){
-if(dojo.hostenv.localesGenerated[i]==loc){
-dojo["require"]("nls.dojo_"+loc);
-return true;
-}
-}
-return false;
-});
-}
-preload();
-var _7c=djConfig.extraLocale||[];
-for(var i=0;i<_7c.length;i++){
-preload(_7c[i]);
-}
-}
-dojo.hostenv.preloadLocalizations=function(){
-};
-};
-dojo.requireLocalization=function(_7e,_7f,_80,_81){
-dojo.hostenv.preloadLocalizations();
-var _82=dojo.hostenv.normalizeLocale(_80);
-var _83=[_7e,"nls",_7f].join(".");
-var _84="";
-if(_81){
-var _85=_81.split(",");
-for(var i=0;i<_85.length;i++){
-if(_82.indexOf(_85[i])==0){
-if(_85[i].length>_84.length){
-_84=_85[i];
-}
-}
-}
-if(!_84){
-_84="ROOT";
-}
-}
-var _87=_81?_84:_82;
-var _88=dojo.hostenv.findModule(_83);
-var _89=null;
-if(_88){
-if(djConfig.localizationComplete&&_88._built){
-return;
-}
-var _8a=_87.replace("-","_");
-var _8b=_83+"."+_8a;
-_89=dojo.hostenv.findModule(_8b);
-}
-if(!_89){
-_88=dojo.hostenv.startPackage(_83);
-var _8c=dojo.hostenv.getModuleSymbols(_7e);
-var _8d=_8c.concat("nls").join("/");
-var _8e;
-dojo.hostenv.searchLocalePath(_87,_81,function(loc){
-var _90=loc.replace("-","_");
-var _91=_83+"."+_90;
-var _92=false;
-if(!dojo.hostenv.findModule(_91)){
-dojo.hostenv.startPackage(_91);
-var _93=[_8d];
-if(loc!="ROOT"){
-_93.push(loc);
-}
-_93.push(_7f);
-var _94=_93.join("/")+".js";
-_92=dojo.hostenv.loadPath(_94,null,function(_95){
-var _96=function(){
-};
-_96.prototype=_8e;
-_88[_90]=new _96();
-for(var j in _95){
-_88[_90][j]=_95[j];
-}
-});
-}else{
-_92=true;
-}
-if(_92&&_88[_90]){
-_8e=_88[_90];
-}else{
-_88[_90]=_8e;
-}
-if(_81){
-return true;
-}
-});
-}
-if(_81&&_82!=_84){
-_88[_82.replace("-","_")]=_88[_84.replace("-","_")];
-}
-};
-(function(){
-var _98=djConfig.extraLocale;
-if(_98){
-if(!_98 instanceof Array){
-_98=[_98];
-}
-var req=dojo.requireLocalization;
-dojo.requireLocalization=function(m,b,_9c,_9d){
-req(m,b,_9c,_9d);
-if(_9c){
-return;
-}
-for(var i=0;i<_98.length;i++){
-req(m,b,_98[i],_9d);
-}
-};
-}
-})();
-}
-if(typeof window!="undefined"){
-(function(){
-if(djConfig.allowQueryConfig){
-var _9f=document.location.toString();
-var _a0=_9f.split("?",2);
-if(_a0.length>1){
-var _a1=_a0[1];
-var _a2=_a1.split("&");
-for(var x in _a2){
-var sp=_a2[x].split("=");
-if((sp[0].length>9)&&(sp[0].substr(0,9)=="djConfig.")){
-var opt=sp[0].substr(9);
-try{
-djConfig[opt]=eval(sp[1]);
-}
-catch(e){
-djConfig[opt]=sp[1];
-}
-}
-}
-}
-}
-if(((djConfig["baseScriptUri"]=="")||(djConfig["baseRelativePath"]==""))&&(document&&document.getElementsByTagName)){
-var _a6=document.getElementsByTagName("script");
-var _a7=/(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i;
-for(var i=0;i<_a6.length;i++){
-var src=_a6[i].getAttribute("src");
-if(!src){
-continue;
-}
-var m=src.match(_a7);
-if(m){
-var _ab=src.substring(0,m.index);
-if(src.indexOf("bootstrap1")>-1){
-_ab+="../";
-}
-if(!this["djConfig"]){
-djConfig={};
-}
-if(djConfig["baseScriptUri"]==""){
-djConfig["baseScriptUri"]=_ab;
-}
-if(djConfig["baseRelativePath"]==""){
-djConfig["baseRelativePath"]=_ab;
-}
-break;
-}
-}
-}
-var dr=dojo.render;
-var drh=dojo.render.html;
-var drs=dojo.render.svg;
-var dua=(drh.UA=navigator.userAgent);
-var dav=(drh.AV=navigator.appVersion);
-var t=true;
-var f=false;
-drh.capable=t;
-drh.support.builtin=t;
-dr.ver=parseFloat(drh.AV);
-dr.os.mac=dav.indexOf("Macintosh")>=0;
-dr.os.win=dav.indexOf("Windows")>=0;
-dr.os.linux=dav.indexOf("X11")>=0;
-drh.opera=dua.indexOf("Opera")>=0;
-drh.khtml=(dav.indexOf("Konqueror")>=0)||(dav.indexOf("Safari")>=0);
-drh.safari=dav.indexOf("Safari")>=0;
-var _b3=dua.indexOf("Gecko");
-drh.mozilla=drh.moz=(_b3>=0)&&(!drh.khtml);
-if(drh.mozilla){
-drh.geckoVersion=dua.substring(_b3+6,_b3+14);
-}
-drh.ie=(document.all)&&(!drh.opera);
-drh.ie50=drh.ie&&dav.indexOf("MSIE 5.0")>=0;
-drh.ie55=drh.ie&&dav.indexOf("MSIE 5.5")>=0;
-drh.ie60=drh.ie&&dav.indexOf("MSIE 6.0")>=0;
-drh.ie70=drh.ie&&dav.indexOf("MSIE 7.0")>=0;
-var cm=document["compatMode"];
-drh.quirks=(cm=="BackCompat")||(cm=="QuirksMode")||drh.ie55||drh.ie50;
-dojo.locale=dojo.locale||(drh.ie?navigator.userLanguage:navigator.language).toLowerCase();
-dr.vml.capable=drh.ie;
-drs.capable=f;
-drs.support.plugin=f;
-drs.support.builtin=f;
-var _b5=window["document"];
-var tdi=_b5["implementation"];
-if((tdi)&&(tdi["hasFeature"])&&(tdi.hasFeature("org.w3c.dom.svg","1.0"))){
-drs.capable=t;
-drs.support.builtin=t;
-drs.support.plugin=f;
-}
-if(drh.safari){
-var tmp=dua.split("AppleWebKit/")[1];
-var ver=parseFloat(tmp.split(" ")[0]);
-if(ver>=420){
-drs.capable=t;
-drs.support.builtin=t;
-drs.support.plugin=f;
-}
-}else{
-}
-})();
-dojo.hostenv.startPackage("dojo.hostenv");
-dojo.render.name=dojo.hostenv.name_="browser";
-dojo.hostenv.searchIds=[];
-dojo.hostenv._XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];
-dojo.hostenv.getXmlhttpObject=function(){
-var _b9=null;
-var _ba=null;
-try{
-_b9=new XMLHttpRequest();
-}
-catch(e){
-}
-if(!_b9){
-for(var i=0;i<3;++i){
-var _bc=dojo.hostenv._XMLHTTP_PROGIDS[i];
-try{
-_b9=new ActiveXObject(_bc);
-}
-catch(e){
-_ba=e;
-}
-if(_b9){
-dojo.hostenv._XMLHTTP_PROGIDS=[_bc];
-break;
-}
-}
-}
-if(!_b9){
-return dojo.raise("XMLHTTP not available",_ba);
-}
-return _b9;
-};
-dojo.hostenv._blockAsync=false;
-dojo.hostenv.getText=function(uri,_be,_bf){
-if(!_be){
-this._blockAsync=true;
-}
-var _c0=this.getXmlhttpObject();
-function isDocumentOk(_c1){
-var _c2=_c1["status"];
-return Boolean((!_c2)||((200<=_c2)&&(300>_c2))||(_c2==304));
-}
-if(_be){
-var _c3=this,_c4=null,gbl=dojo.global();
-var xhr=dojo.evalObjPath("dojo.io.XMLHTTPTransport");
-_c0.onreadystatechange=function(){
-if(_c4){
-gbl.clearTimeout(_c4);
-_c4=null;
-}
-if(_c3._blockAsync||(xhr&&xhr._blockAsync)){
-_c4=gbl.setTimeout(function(){
-_c0.onreadystatechange.apply(this);
-},10);
-}else{
-if(4==_c0.readyState){
-if(isDocumentOk(_c0)){
-_be(_c0.responseText);
-}
-}
-}
-};
-}
-_c0.open("GET",uri,_be?true:false);
-try{
-_c0.send(null);
-if(_be){
-return null;
-}
-if(!isDocumentOk(_c0)){
-var err=Error("Unable to load "+uri+" status:"+_c0.status);
-err.status=_c0.status;
-err.responseText=_c0.responseText;
-throw err;
-}
-}
-catch(e){
-this._blockAsync=false;
-if((_bf)&&(!_be)){
-return null;
-}else{
-throw e;
-}
-}
-this._blockAsync=false;
-return _c0.responseText;
-};
-dojo.hostenv.defaultDebugContainerId="dojoDebug";
-dojo.hostenv._println_buffer=[];
-dojo.hostenv._println_safe=false;
-dojo.hostenv.println=function(_c8){
-if(!dojo.hostenv._println_safe){
-dojo.hostenv._println_buffer.push(_c8);
-}else{
-try{
-var _c9=document.getElementById(djConfig.debugContainerId?djConfig.debugContainerId:dojo.hostenv.defaultDebugContainerId);
-if(!_c9){
-_c9=dojo.body();
-}
-var div=document.createElement("div");
-div.appendChild(document.createTextNode(_c8));
-_c9.appendChild(div);
-}
-catch(e){
-try{
-document.write("<div>"+_c8+"</div>");
-}
-catch(e2){
-window.status=_c8;
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-dojo.hostenv._println_safe=true;
-while(dojo.hostenv._println_buffer.length>0){
-dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
-}
-});
-function dj_addNodeEvtHdlr(_cb,_cc,fp){
-var _ce=_cb["on"+_cc]||function(){
-};
-_cb["on"+_cc]=function(){
-fp.apply(_cb,arguments);
-_ce.apply(_cb,arguments);
-};
-return true;
-}
-function dj_load_init(e){
-var _d0=(e&&e.type)?e.type.toLowerCase():"load";
-if(arguments.callee.initialized||(_d0!="domcontentloaded"&&_d0!="load")){
-return;
-}
-arguments.callee.initialized=true;
-if(typeof (_timer)!="undefined"){
-clearInterval(_timer);
-delete _timer;
-}
-var _d1=function(){
-if(dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-};
-if(dojo.hostenv.inFlightCount==0){
-_d1();
-dojo.hostenv.modulesLoaded();
-}else{
-dojo.hostenv.modulesLoadedListeners.unshift(_d1);
-}
-}
-if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
-document.addEventListener("DOMContentLoaded",dj_load_init,null);
-}
-window.addEventListener("load",dj_load_init,null);
-}
-if(dojo.render.html.ie&&dojo.render.os.win){
-document.attachEvent("onreadystatechange",function(e){
-if(document.readyState=="complete"){
-dj_load_init();
-}
-});
-}
-if(/(WebKit|khtml)/i.test(navigator.userAgent)){
-var _timer=setInterval(function(){
-if(/loaded|complete/.test(document.readyState)){
-dj_load_init();
-}
-},10);
-}
-if(dojo.render.html.ie){
-dj_addNodeEvtHdlr(window,"beforeunload",function(){
-dojo.hostenv._unloading=true;
-window.setTimeout(function(){
-dojo.hostenv._unloading=false;
-},0);
-});
-}
-dj_addNodeEvtHdlr(window,"unload",function(){
-dojo.hostenv.unloaded();
-if((!dojo.render.html.ie)||(dojo.render.html.ie&&dojo.hostenv._unloading)){
-dojo.hostenv.unloaded();
-}
-});
-dojo.hostenv.makeWidgets=function(){
-var _d3=[];
-if(djConfig.searchIds&&djConfig.searchIds.length>0){
-_d3=_d3.concat(djConfig.searchIds);
-}
-if(dojo.hostenv.searchIds&&dojo.hostenv.searchIds.length>0){
-_d3=_d3.concat(dojo.hostenv.searchIds);
-}
-if((djConfig.parseWidgets)||(_d3.length>0)){
-if(dojo.evalObjPath("dojo.widget.Parse")){
-var _d4=new dojo.xml.Parse();
-if(_d3.length>0){
-for(var x=0;x<_d3.length;x++){
-var _d6=document.getElementById(_d3[x]);
-if(!_d6){
-continue;
-}
-var _d7=_d4.parseElement(_d6,null,true);
-dojo.widget.getParser().createComponents(_d7);
-}
-}else{
-if(djConfig.parseWidgets){
-var _d7=_d4.parseElement(dojo.body(),null,true);
-dojo.widget.getParser().createComponents(_d7);
-}
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-if(!dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-});
-try{
-if(dojo.render.html.ie){
-document.namespaces.add("v","urn:schemas-microsoft-com:vml");
-document.createStyleSheet().addRule("v\\:*","behavior:url(#default#VML)");
-}
-}
-catch(e){
-}
-dojo.hostenv.writeIncludes=function(){
-};
-if(!dj_undef("document",this)){
-dj_currentDocument=this.document;
-}
-dojo.doc=function(){
-return dj_currentDocument;
-};
-dojo.body=function(){
-return dojo.doc().body||dojo.doc().getElementsByTagName("body")[0];
-};
-dojo.byId=function(id,doc){
-if((id)&&((typeof id=="string")||(id instanceof String))){
-if(!doc){
-doc=dj_currentDocument;
-}
-var ele=doc.getElementById(id);
-if(ele&&(ele.id!=id)&&doc.all){
-ele=null;
-eles=doc.all[id];
-if(eles){
-if(eles.length){
-for(var i=0;i<eles.length;i++){
-if(eles[i].id==id){
-ele=eles[i];
-break;
-}
-}
-}else{
-ele=eles;
-}
-}
-}
-return ele;
-}
-return id;
-};
-dojo.setContext=function(_dc,_dd){
-dj_currentContext=_dc;
-dj_currentDocument=_dd;
-};
-dojo._fireCallback=function(_de,_df,_e0){
-if((_df)&&((typeof _de=="string")||(_de instanceof String))){
-_de=_df[_de];
-}
-return (_df?_de.apply(_df,_e0||[]):_de());
-};
-dojo.withGlobal=function(_e1,_e2,_e3,_e4){
-var _e5;
-var _e6=dj_currentContext;
-var _e7=dj_currentDocument;
-try{
-dojo.setContext(_e1,_e1.document);
-_e5=dojo._fireCallback(_e2,_e3,_e4);
-}
-finally{
-dojo.setContext(_e6,_e7);
-}
-return _e5;
-};
-dojo.withDoc=function(_e8,_e9,_ea,_eb){
-var _ec;
-var _ed=dj_currentDocument;
-try{
-dj_currentDocument=_e8;
-_ec=dojo._fireCallback(_e9,_ea,_eb);
-}
-finally{
-dj_currentDocument=_ed;
-}
-return _ec;
-};
-}
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _ee=false;
-var _ef=false;
-var _f0=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_ee=true;
-}else{
-if(typeof this["load"]=="function"){
-_ef=true;
-}else{
-if(window.widget){
-_f0=true;
-}
-}
-}
-var _f1=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-_f1.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_ee)&&(!_f0)){
-_f1.push("browser_debug.js");
-}
-var _f2=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_f2=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<_f1.length;x++){
-var _f4=_f2+"src/"+_f1[x];
-if(_ee||_ef){
-load(_f4);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_f4+"'></scr"+"ipt>");
-}
-catch(e){
-var _f5=document.createElement("script");
-_f5.src=_f4;
-document.getElementsByTagName("head")[0].appendChild(_f5);
-}
-}
-}
-})();
-dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_f6,_f7){
-if(!dojo.lang.isFunction(_f7)){
-dojo.raise("dojo.inherits: superclass argument ["+_f7+"] must be a function (subclass: ["+_f6+"']");
-}
-_f6.prototype=new _f7();
-_f6.prototype.constructor=_f6;
-_f6.superclass=_f7.prototype;
-_f6["super"]=_f7.prototype;
-};
-dojo.lang._mixin=function(obj,_f9){
-var _fa={};
-for(var x in _f9){
-if((typeof _fa[x]=="undefined")||(_fa[x]!=_f9[x])){
-obj[x]=_f9[x];
-}
-}
-if(dojo.render.html.ie&&(typeof (_f9["toString"])=="function")&&(_f9["toString"]!=obj["toString"])&&(_f9["toString"]!=_fa["toString"])){
-obj.toString=_f9.toString;
-}
-return obj;
-};
-dojo.lang.mixin=function(obj,_fd){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(obj,arguments[i]);
-}
-return obj;
-};
-dojo.lang.extend=function(_100,_101){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_100.prototype,arguments[i]);
-}
-return _100;
-};
-dojo.inherits=dojo.lang.inherits;
-dojo.mixin=dojo.lang.mixin;
-dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_104,_105,_106,_107){
-if(!dojo.lang.isArrayLike(_104)&&dojo.lang.isArrayLike(_105)){
-dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_104;
-_104=_105;
-_105=temp;
-}
-var _109=dojo.lang.isString(_104);
-if(_109){
-_104=_104.split("");
-}
-if(_107){
-var step=-1;
-var i=_104.length-1;
-var end=-1;
-}else{
-var step=1;
-var i=0;
-var end=_104.length;
-}
-if(_106){
-while(i!=end){
-if(_104[i]===_105){
-return i;
-}
-i+=step;
-}
-}else{
-while(i!=end){
-if(_104[i]==_105){
-return i;
-}
-i+=step;
-}
-}
-return -1;
-};
-dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_10d,_10e,_10f){
-return dojo.lang.find(_10d,_10e,_10f,true);
-};
-dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_110,_111){
-return dojo.lang.find(_110,_111)>-1;
-};
-dojo.lang.isObject=function(it){
-if(typeof it=="undefined"){
-return false;
-}
-return (typeof it=="object"||it===null||dojo.lang.isArray(it)||dojo.lang.isFunction(it));
-};
-dojo.lang.isArray=function(it){
-return (it&&it instanceof Array||typeof it=="array");
-};
-dojo.lang.isArrayLike=function(it){
-if((!it)||(dojo.lang.isUndefined(it))){
-return false;
-}
-if(dojo.lang.isString(it)){
-return false;
-}
-if(dojo.lang.isFunction(it)){
-return false;
-}
-if(dojo.lang.isArray(it)){
-return true;
-}
-if((it.tagName)&&(it.tagName.toLowerCase()=="form")){
-return false;
-}
-if(dojo.lang.isNumber(it.length)&&isFinite(it.length)){
-return true;
-}
-return false;
-};
-dojo.lang.isFunction=function(it){
-return (it instanceof Function||typeof it=="function");
-};
-(function(){
-if((dojo.render.html.capable)&&(dojo.render.html["safari"])){
-dojo.lang.isFunction=function(it){
-if((typeof (it)=="function")&&(it=="[object NodeList]")){
-return false;
-}
-return (it instanceof Function||typeof it=="function");
-};
-}
-})();
-dojo.lang.isString=function(it){
-return (typeof it=="string"||it instanceof String);
-};
-dojo.lang.isAlien=function(it){
-if(!it){
-return false;
-}
-return !dojo.lang.isFunction(it)&&/\{\s*\[native code\]\s*\}/.test(String(it));
-};
-dojo.lang.isBoolean=function(it){
-return (it instanceof Boolean||typeof it=="boolean");
-};
-dojo.lang.isNumber=function(it){
-return (it instanceof Number||typeof it=="number");
-};
-dojo.lang.isUndefined=function(it){
-return ((typeof (it)=="undefined")&&(it==undefined));
-};
-dojo.provide("dojo.lang.array");
-dojo.lang.mixin(dojo.lang,{has:function(obj,name){
-try{
-return typeof obj[name]!="undefined";
-}
-catch(e){
-return false;
-}
-},isEmpty:function(obj){
-if(dojo.lang.isObject(obj)){
-var tmp={};
-var _120=0;
-for(var x in obj){
-if(obj[x]&&(!tmp[x])){
-_120++;
-break;
-}
-}
-return _120==0;
-}else{
-if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
-return obj.length==0;
-}
-}
-},map:function(arr,obj,_124){
-var _125=dojo.lang.isString(arr);
-if(_125){
-arr=arr.split("");
-}
-if(dojo.lang.isFunction(obj)&&(!_124)){
-_124=obj;
-obj=dj_global;
-}else{
-if(dojo.lang.isFunction(obj)&&_124){
-var _126=obj;
-obj=_124;
-_124=_126;
-}
-}
-if(Array.map){
-var _127=Array.map(arr,_124,obj);
-}else{
-var _127=[];
-for(var i=0;i<arr.length;++i){
-_127.push(_124.call(obj,arr[i]));
-}
-}
-if(_125){
-return _127.join("");
-}else{
-return _127;
-}
-},reduce:function(arr,_12a,obj,_12c){
-var _12d=_12a;
-if(arguments.length==1){
-dojo.debug("dojo.lang.reduce called with too few arguments!");
-return false;
-}else{
-if(arguments.length==2){
-_12c=_12a;
-_12d=arr.shift();
-}else{
-if(arguments.lenght==3){
-if(dojo.lang.isFunction(obj)){
-_12c=obj;
-obj=null;
-}
-}else{
-if(dojo.lang.isFunction(obj)){
-var tmp=_12c;
-_12c=obj;
-obj=tmp;
-}
-}
-}
-}
-var ob=obj?obj:dj_global;
-dojo.lang.map(arr,function(val){
-_12d=_12c.call(ob,_12d,val);
-});
-return _12d;
-},forEach:function(_131,_132,_133){
-if(dojo.lang.isString(_131)){
-_131=_131.split("");
-}
-if(Array.forEach){
-Array.forEach(_131,_132,_133);
-}else{
-if(!_133){
-_133=dj_global;
-}
-for(var i=0,l=_131.length;i<l;i++){
-_132.call(_133,_131[i],i,_131);
-}
-}
-},_everyOrSome:function(_136,arr,_138,_139){
-if(dojo.lang.isString(arr)){
-arr=arr.split("");
-}
-if(Array.every){
-return Array[_136?"every":"some"](arr,_138,_139);
-}else{
-if(!_139){
-_139=dj_global;
-}
-for(var i=0,l=arr.length;i<l;i++){
-var _13c=_138.call(_139,arr[i],i,arr);
-if(_136&&!_13c){
-return false;
-}else{
-if((!_136)&&(_13c)){
-return true;
-}
-}
-}
-return Boolean(_136);
-}
-},every:function(arr,_13e,_13f){
-return this._everyOrSome(true,arr,_13e,_13f);
-},some:function(arr,_141,_142){
-return this._everyOrSome(false,arr,_141,_142);
-},filter:function(arr,_144,_145){
-var _146=dojo.lang.isString(arr);
-if(_146){
-arr=arr.split("");
-}
-var _147;
-if(Array.filter){
-_147=Array.filter(arr,_144,_145);
-}else{
-if(!_145){
-if(arguments.length>=3){
-dojo.raise("thisObject doesn't exist!");
-}
-_145=dj_global;
-}
-_147=[];
-for(var i=0;i<arr.length;i++){
-if(_144.call(_145,arr[i],i,arr)){
-_147.push(arr[i]);
-}
-}
-}
-if(_146){
-return _147.join("");
-}else{
-return _147;
-}
-},unnest:function(){
-var out=[];
-for(var i=0;i<arguments.length;i++){
-if(dojo.lang.isArrayLike(arguments[i])){
-var add=dojo.lang.unnest.apply(this,arguments[i]);
-out=out.concat(add);
-}else{
-out.push(arguments[i]);
-}
-}
-return out;
-},toArray:function(_14c,_14d){
-var _14e=[];
-for(var i=_14d||0;i<_14c.length;i++){
-_14e.push(_14c[i]);
-}
-return _14e;
-}});
-dojo.provide("dojo.gfx.color");
-dojo.gfx.color.Color=function(r,g,b,a){
-if(dojo.lang.isArray(r)){
-this.r=r[0];
-this.g=r[1];
-this.b=r[2];
-this.a=r[3]||1;
-}else{
-if(dojo.lang.isString(r)){
-var rgb=dojo.gfx.color.extractRGB(r);
-this.r=rgb[0];
-this.g=rgb[1];
-this.b=rgb[2];
-this.a=g||1;
-}else{
-if(r instanceof dojo.gfx.color.Color){
-this.r=r.r;
-this.b=r.b;
-this.g=r.g;
-this.a=r.a;
-}else{
-this.r=r;
-this.g=g;
-this.b=b;
-this.a=a;
-}
-}
-}
-};
-dojo.gfx.color.Color.fromArray=function(arr){
-return new dojo.gfx.color.Color(arr[0],arr[1],arr[2],arr[3]);
-};
-dojo.extend(dojo.gfx.color.Color,{toRgb:function(_156){
-if(_156){
-return this.toRgba();
-}else{
-return [this.r,this.g,this.b];
-}
-},toRgba:function(){
-return [this.r,this.g,this.b,this.a];
-},toHex:function(){
-return dojo.gfx.color.rgb2hex(this.toRgb());
-},toCss:function(){
-return "rgb("+this.toRgb().join()+")";
-},toString:function(){
-return this.toHex();
-},blend:function(_157,_158){
-var rgb=null;
-if(dojo.lang.isArray(_157)){
-rgb=_157;
-}else{
-if(_157 instanceof dojo.gfx.color.Color){
-rgb=_157.toRgb();
-}else{
-rgb=new dojo.gfx.color.Color(_157).toRgb();
-}
-}
-return dojo.gfx.color.blend(this.toRgb(),rgb,_158);
-}});
-dojo.gfx.color.named={white:[255,255,255],black:[0,0,0],red:[255,0,0],green:[0,255,0],lime:[0,255,0],blue:[0,0,255],navy:[0,0,128],gray:[128,128,128],silver:[192,192,192]};
-dojo.gfx.color.blend=function(a,b,_15c){
-if(typeof a=="string"){
-return dojo.gfx.color.blendHex(a,b,_15c);
-}
-if(!_15c){
-_15c=0;
-}
-_15c=Math.min(Math.max(-1,_15c),1);
-_15c=((_15c+1)/2);
-var c=[];
-for(var x=0;x<3;x++){
-c[x]=parseInt(b[x]+((a[x]-b[x])*_15c));
-}
-return c;
-};
-dojo.gfx.color.blendHex=function(a,b,_161){
-return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_161));
-};
-dojo.gfx.color.extractRGB=function(_162){
-var hex="0123456789abcdef";
-_162=_162.toLowerCase();
-if(_162.indexOf("rgb")==0){
-var _164=_162.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-var ret=_164.splice(1,3);
-return ret;
-}else{
-var _166=dojo.gfx.color.hex2rgb(_162);
-if(_166){
-return _166;
-}else{
-return dojo.gfx.color.named[_162]||[255,255,255];
-}
-}
-};
-dojo.gfx.color.hex2rgb=function(hex){
-var _168="0123456789ABCDEF";
-var rgb=new Array(3);
-if(hex.indexOf("#")==0){
-hex=hex.substring(1);
-}
-hex=hex.toUpperCase();
-if(hex.replace(new RegExp("["+_168+"]","g"),"")!=""){
-return null;
-}
-if(hex.length==3){
-rgb[0]=hex.charAt(0)+hex.charAt(0);
-rgb[1]=hex.charAt(1)+hex.charAt(1);
-rgb[2]=hex.charAt(2)+hex.charAt(2);
-}else{
-rgb[0]=hex.substring(0,2);
-rgb[1]=hex.substring(2,4);
-rgb[2]=hex.substring(4);
-}
-for(var i=0;i<rgb.length;i++){
-rgb[i]=_168.indexOf(rgb[i].charAt(0))*16+_168.indexOf(rgb[i].charAt(1));
-}
-return rgb;
-};
-dojo.gfx.color.rgb2hex=function(r,g,b){
-if(dojo.lang.isArray(r)){
-g=r[1]||0;
-b=r[2]||0;
-r=r[0]||0;
-}
-var ret=dojo.lang.map([r,g,b],function(x){
-x=new Number(x);
-var s=x.toString(16);
-while(s.length<2){
-s="0"+s;
-}
-return s;
-});
-ret.unshift("#");
-return ret.join("");
-};
-dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_171,_172){
-var fcn=(dojo.lang.isString(_172)?_171[_172]:_172)||function(){
-};
-return function(){
-return fcn.apply(_171,arguments);
-};
-};
-dojo.lang.anonCtr=0;
-dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_174,_175,_176){
-var nso=(_175||dojo.lang.anon);
-if((_176)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
-for(var x in nso){
-try{
-if(nso[x]===_174){
-return x;
-}
-}
-catch(e){
-}
-}
-}
-var ret="__"+dojo.lang.anonCtr++;
-while(typeof nso[ret]!="undefined"){
-ret="__"+dojo.lang.anonCtr++;
-}
-nso[ret]=_174;
-return ret;
-};
-dojo.lang.forward=function(_17a){
-return function(){
-return this[_17a].apply(this,arguments);
-};
-};
-dojo.lang.curry=function(_17b,func){
-var _17d=[];
-_17b=_17b||dj_global;
-if(dojo.lang.isString(func)){
-func=_17b[func];
-}
-for(var x=2;x<arguments.length;x++){
-_17d.push(arguments[x]);
-}
-var _17f=(func["__preJoinArity"]||func.length)-_17d.length;
-function gather(_180,_181,_182){
-var _183=_182;
-var _184=_181.slice(0);
-for(var x=0;x<_180.length;x++){
-_184.push(_180[x]);
-}
-_182=_182-_180.length;
-if(_182<=0){
-var res=func.apply(_17b,_184);
-_182=_183;
-return res;
-}else{
-return function(){
-return gather(arguments,_184,_182);
-};
-}
-}
-return gather([],_17d,_17f);
-};
-dojo.lang.curryArguments=function(_187,func,args,_18a){
-var _18b=[];
-var x=_18a||0;
-for(x=_18a;x<args.length;x++){
-_18b.push(args[x]);
-}
-return dojo.lang.curry.apply(dojo.lang,[_187,func].concat(_18b));
-};
-dojo.lang.tryThese=function(){
-for(var x=0;x<arguments.length;x++){
-try{
-if(typeof arguments[x]=="function"){
-var ret=(arguments[x]());
-if(ret){
-return ret;
-}
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-};
-dojo.lang.delayThese=function(farr,cb,_191,_192){
-if(!farr.length){
-if(typeof _192=="function"){
-_192();
-}
-return;
-}
-if((typeof _191=="undefined")&&(typeof cb=="number")){
-_191=cb;
-cb=function(){
-};
-}else{
-if(!cb){
-cb=function(){
-};
-if(!_191){
-_191=0;
-}
-}
-}
-setTimeout(function(){
-(farr.shift())();
-cb();
-dojo.lang.delayThese(farr,cb,_191,_192);
-},_191);
-};
-dojo.provide("dojo.lfx.Animation");
-dojo.lfx.Line=function(_193,end){
-this.start=_193;
-this.end=end;
-if(dojo.lang.isArray(_193)){
-var diff=[];
-dojo.lang.forEach(this.start,function(s,i){
-diff[i]=this.end[i]-s;
-},this);
-this.getValue=function(n){
-var res=[];
-dojo.lang.forEach(this.start,function(s,i){
-res[i]=(diff[i]*n)+s;
-},this);
-return res;
-};
-}else{
-var diff=end-_193;
-this.getValue=function(n){
-return (diff*n)+this.start;
-};
-}
-};
-dojo.lfx.easeDefault=function(n){
-if(dojo.render.html.khtml){
-return (parseFloat("0.5")+((Math.sin((n+parseFloat("1.5"))*Math.PI))/2));
-}else{
-return (0.5+((Math.sin((n+1.5)*Math.PI))/2));
-}
-};
-dojo.lfx.easeIn=function(n){
-return Math.pow(n,3);
-};
-dojo.lfx.easeOut=function(n){
-return (1-Math.pow(1-n,3));
-};
-dojo.lfx.easeInOut=function(n){
-return ((3*Math.pow(n,2))-(2*Math.pow(n,3)));
-};
-dojo.lfx.IAnimation=function(){
-};
-dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:25,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,connect:function(evt,_1a2,_1a3){
-if(!_1a3){
-_1a3=_1a2;
-_1a2=this;
-}
-_1a3=dojo.lang.hitch(_1a2,_1a3);
-var _1a4=this[evt]||function(){
-};
-this[evt]=function(){
-var ret=_1a4.apply(this,arguments);
-_1a3.apply(this,arguments);
-return ret;
-};
-return this;
-},fire:function(evt,args){
-if(this[evt]){
-this[evt].apply(this,(args||[]));
-}
-return this;
-},repeat:function(_1a8){
-this.repeatCount=_1a8;
-return this;
-},_active:false,_paused:false});
-dojo.lfx.Animation=function(_1a9,_1aa,_1ab,_1ac,_1ad,rate){
-dojo.lfx.IAnimation.call(this);
-if(dojo.lang.isNumber(_1a9)||(!_1a9&&_1aa.getValue)){
-rate=_1ad;
-_1ad=_1ac;
-_1ac=_1ab;
-_1ab=_1aa;
-_1aa=_1a9;
-_1a9=null;
-}else{
-if(_1a9.getValue||dojo.lang.isArray(_1a9)){
-rate=_1ac;
-_1ad=_1ab;
-_1ac=_1aa;
-_1ab=_1a9;
-_1aa=null;
-_1a9=null;
-}
-}
-if(dojo.lang.isArray(_1ab)){
-this.curve=new dojo.lfx.Line(_1ab[0],_1ab[1]);
-}else{
-this.curve=_1ab;
-}
-if(_1aa!=null&&_1aa>0){
-this.duration=_1aa;
-}
-if(_1ad){
-this.repeatCount=_1ad;
-}
-if(rate){
-this.rate=rate;
-}
-if(_1a9){
-dojo.lang.forEach(["handler","beforeBegin","onBegin","onEnd","onPlay","onStop","onAnimate"],function(item){
-if(_1a9[item]){
-this.connect(item,_1a9[item]);
-}
-},this);
-}
-if(_1ac&&dojo.lang.isFunction(_1ac)){
-this.easing=_1ac;
-}
-};
-dojo.inherits(dojo.lfx.Animation,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_1b0,_1b1){
-if(_1b1){
-clearTimeout(this._timer);
-this._active=false;
-this._paused=false;
-this._percent=0;
-}else{
-if(this._active&&!this._paused){
-return this;
-}
-}
-this.fire("handler",["beforeBegin"]);
-this.fire("beforeBegin");
-if(_1b0>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_1b1);
-}),_1b0);
-return this;
-}
-this._startTime=new Date().valueOf();
-if(this._paused){
-this._startTime-=(this.duration*this._percent/100);
-}
-this._endTime=this._startTime+this.duration;
-this._active=true;
-this._paused=false;
-var step=this._percent/100;
-var _1b3=this.curve.getValue(step);
-if(this._percent==0){
-if(!this._startRepeatCount){
-this._startRepeatCount=this.repeatCount;
-}
-this.fire("handler",["begin",_1b3]);
-this.fire("onBegin",[_1b3]);
-}
-this.fire("handler",["play",_1b3]);
-this.fire("onPlay",[_1b3]);
-this._cycle();
-return this;
-},pause:function(){
-clearTimeout(this._timer);
-if(!this._active){
-return this;
-}
-this._paused=true;
-var _1b4=this.curve.getValue(this._percent/100);
-this.fire("handler",["pause",_1b4]);
-this.fire("onPause",[_1b4]);
-return this;
-},gotoPercent:function(pct,_1b6){
-clearTimeout(this._timer);
-this._active=true;
-this._paused=true;
-this._percent=pct;
-if(_1b6){
-this.play();
-}
-return this;
-},stop:function(_1b7){
-clearTimeout(this._timer);
-var step=this._percent/100;
-if(_1b7){
-step=1;
-}
-var _1b9=this.curve.getValue(step);
-this.fire("handler",["stop",_1b9]);
-this.fire("onStop",[_1b9]);
-this._active=false;
-this._paused=false;
-return this;
-},status:function(){
-if(this._active){
-return this._paused?"paused":"playing";
-}else{
-return "stopped";
-}
-return this;
-},_cycle:function(){
-clearTimeout(this._timer);
-if(this._active){
-var curr=new Date().valueOf();
-var step=(curr-this._startTime)/(this._endTime-this._startTime);
-if(step>=1){
-step=1;
-this._percent=100;
-}else{
-this._percent=step*100;
-}
-if((this.easing)&&(dojo.lang.isFunction(this.easing))){
-step=this.easing(step);
-}
-var _1bc=this.curve.getValue(step);
-this.fire("handler",["animate",_1bc]);
-this.fire("onAnimate",[_1bc]);
-if(step<1){
-this._timer=setTimeout(dojo.lang.hitch(this,"_cycle"),this.rate);
-}else{
-this._active=false;
-this.fire("handler",["end"]);
-this.fire("onEnd");
-if(this.repeatCount>0){
-this.repeatCount--;
-this.play(null,true);
-}else{
-if(this.repeatCount==-1){
-this.play(null,true);
-}else{
-if(this._startRepeatCount){
-this.repeatCount=this._startRepeatCount;
-this._startRepeatCount=0;
-}
-}
-}
-}
-}
-return this;
-}});
-dojo.lfx.Combine=function(_1bd){
-dojo.lfx.IAnimation.call(this);
-this._anims=[];
-this._animsEnded=0;
-var _1be=arguments;
-if(_1be.length==1&&(dojo.lang.isArray(_1be[0])||dojo.lang.isArrayLike(_1be[0]))){
-_1be=_1be[0];
-}
-dojo.lang.forEach(_1be,function(anim){
-this._anims.push(anim);
-anim.connect("onEnd",dojo.lang.hitch(this,"_onAnimsEnded"));
-},this);
-};
-dojo.inherits(dojo.lfx.Combine,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_1c0,_1c1){
-if(!this._anims.length){
-return this;
-}
-this.fire("beforeBegin");
-if(_1c0>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_1c1);
-}),_1c0);
-return this;
-}
-if(_1c1||this._anims[0].percent==0){
-this.fire("onBegin");
-}
-this.fire("onPlay");
-this._animsCall("play",null,_1c1);
-return this;
-},pause:function(){
-this.fire("onPause");
-this._animsCall("pause");
-return this;
-},stop:function(_1c2){
-this.fire("onStop");
-this._animsCall("stop",_1c2);
-return this;
-},_onAnimsEnded:function(){
-this._animsEnded++;
-if(this._animsEnded>=this._anims.length){
-this.fire("onEnd");
-}
-return this;
-},_animsCall:function(_1c3){
-var args=[];
-if(arguments.length>1){
-for(var i=1;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-}
-var _1c6=this;
-dojo.lang.forEach(this._anims,function(anim){
-anim[_1c3](args);
-},_1c6);
-return this;
-}});
-dojo.lfx.Chain=function(_1c8){
-dojo.lfx.IAnimation.call(this);
-this._anims=[];
-this._currAnim=-1;
-var _1c9=arguments;
-if(_1c9.length==1&&(dojo.lang.isArray(_1c9[0])||dojo.lang.isArrayLike(_1c9[0]))){
-_1c9=_1c9[0];
-}
-var _1ca=this;
-dojo.lang.forEach(_1c9,function(anim,i,_1cd){
-this._anims.push(anim);
-if(i<_1cd.length-1){
-anim.connect("onEnd",dojo.lang.hitch(this,"_playNext"));
-}else{
-anim.connect("onEnd",dojo.lang.hitch(this,function(){
-this.fire("onEnd");
-}));
-}
-},this);
-};
-dojo.inherits(dojo.lfx.Chain,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_1ce,_1cf){
-if(!this._anims.length){
-return this;
-}
-if(_1cf||!this._anims[this._currAnim]){
-this._currAnim=0;
-}
-var _1d0=this._anims[this._currAnim];
-this.fire("beforeBegin");
-if(_1ce>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_1cf);
-}),_1ce);
-return this;
-}
-if(_1d0){
-if(this._currAnim==0){
-this.fire("handler",["begin",this._currAnim]);
-this.fire("onBegin",[this._currAnim]);
-}
-this.fire("onPlay",[this._currAnim]);
-_1d0.play(null,_1cf);
-}
-return this;
-},pause:function(){
-if(this._anims[this._currAnim]){
-this._anims[this._currAnim].pause();
-this.fire("onPause",[this._currAnim]);
-}
-return this;
-},playPause:function(){
-if(this._anims.length==0){
-return this;
-}
-if(this._currAnim==-1){
-this._currAnim=0;
-}
-var _1d1=this._anims[this._currAnim];
-if(_1d1){
-if(!_1d1._active||_1d1._paused){
-this.play();
-}else{
-this.pause();
-}
-}
-return this;
-},stop:function(){
-var _1d2=this._anims[this._currAnim];
-if(_1d2){
-_1d2.stop();
-this.fire("onStop",[this._currAnim]);
-}
-return _1d2;
-},_playNext:function(){
-if(this._currAnim==-1||this._anims.length==0){
-return this;
-}
-this._currAnim++;
-if(this._anims[this._currAnim]){
-this._anims[this._currAnim].play(null,true);
-}
-return this;
-}});
-dojo.lfx.combine=function(_1d3){
-var _1d4=arguments;
-if(dojo.lang.isArray(arguments[0])){
-_1d4=arguments[0];
-}
-if(_1d4.length==1){
-return _1d4[0];
-}
-return new dojo.lfx.Combine(_1d4);
-};
-dojo.lfx.chain=function(_1d5){
-var _1d6=arguments;
-if(dojo.lang.isArray(arguments[0])){
-_1d6=arguments[0];
-}
-if(_1d6.length==1){
-return _1d6[0];
-}
-return new dojo.lfx.Chain(_1d6);
-};
-dojo.provide("dojo.dom");
-dojo.dom.ELEMENT_NODE=1;
-dojo.dom.ATTRIBUTE_NODE=2;
-dojo.dom.TEXT_NODE=3;
-dojo.dom.CDATA_SECTION_NODE=4;
-dojo.dom.ENTITY_REFERENCE_NODE=5;
-dojo.dom.ENTITY_NODE=6;
-dojo.dom.PROCESSING_INSTRUCTION_NODE=7;
-dojo.dom.COMMENT_NODE=8;
-dojo.dom.DOCUMENT_NODE=9;
-dojo.dom.DOCUMENT_TYPE_NODE=10;
-dojo.dom.DOCUMENT_FRAGMENT_NODE=11;
-dojo.dom.NOTATION_NODE=12;
-dojo.dom.dojoml="http://www.dojotoolkit.org/2004/dojoml";
-dojo.dom.xmlns={svg:"http://www.w3.org/2000/svg",smil:"http://www.w3.org/2001/SMIL20/",mml:"http://www.w3.org/1998/Math/MathML",cml:"http://www.xml-cml.org",xlink:"http://www.w3.org/1999/xlink",xhtml:"http://www.w3.org/1999/xhtml",xul:"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",xbl:"http://www.mozilla.org/xbl",fo:"http://www.w3.org/1999/XSL/Format",xsl:"http://www.w3.org/1999/XSL/Transform",xslt:"http://www.w3.org/1999/XSL/Transform",xi:"http://www.w3.org/2001/XInclude",xforms:"http://www.w3.org/2002/01/xforms",saxon:"http://icl.com/saxon",xalan:"http://xml.apache.org/xslt",xsd:"http://www.w3.org/2001/XMLSchema",dt:"http://www.w3.org/2001/XMLSchema-datatypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#",rdfs:"http://www.w3.org/2000/01/rdf-schema#",dc:"http://purl.org/dc/elements/1.1/",dcq:"http://purl.org/dc/qualifiers/1.0","soap-env":"http://schemas.xmlsoap.org/soap/envelope/",wsdl:"http://schemas.xmlsoap.org/wsdl/",AdobeExtensions:"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"};
-dojo.dom.isNode=function(wh){
-if(typeof Element=="function"){
-try{
-return wh instanceof Element;
-}
-catch(e){
-}
-}else{
-return wh&&!isNaN(wh.nodeType);
-}
-};
-dojo.dom.getUniqueId=function(){
-var _1d8=dojo.doc();
-do{
-var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_1d8.getElementById(id));
-return id;
-};
-dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_1da,_1db){
-var node=_1da.firstChild;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.nextSibling;
-}
-if(_1db&&node&&node.tagName&&node.tagName.toLowerCase()!=_1db.toLowerCase()){
-node=dojo.dom.nextElement(node,_1db);
-}
-return node;
-};
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_1dd,_1de){
-var node=_1dd.lastChild;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.previousSibling;
-}
-if(_1de&&node&&node.tagName&&node.tagName.toLowerCase()!=_1de.toLowerCase()){
-node=dojo.dom.prevElement(node,_1de);
-}
-return node;
-};
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_1e1){
-if(!node){
-return null;
-}
-do{
-node=node.nextSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_1e1&&_1e1.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.nextElement(node,_1e1);
-}
-return node;
-};
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_1e3){
-if(!node){
-return null;
-}
-if(_1e3){
-_1e3=_1e3.toLowerCase();
-}
-do{
-node=node.previousSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_1e3&&_1e3.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_1e3);
-}
-return node;
-};
-dojo.dom.moveChildren=function(_1e4,_1e5,trim){
-var _1e7=0;
-if(trim){
-while(_1e4.hasChildNodes()&&_1e4.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_1e4.removeChild(_1e4.firstChild);
-}
-while(_1e4.hasChildNodes()&&_1e4.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_1e4.removeChild(_1e4.lastChild);
-}
-}
-while(_1e4.hasChildNodes()){
-_1e5.appendChild(_1e4.firstChild);
-_1e7++;
-}
-return _1e7;
-};
-dojo.dom.copyChildren=function(_1e8,_1e9,trim){
-var _1eb=_1e8.cloneNode(true);
-return this.moveChildren(_1eb,_1e9,trim);
-};
-dojo.dom.replaceChildren=function(node,_1ed){
-var _1ee=[];
-if(dojo.render.html.ie){
-for(var i=0;i<node.childNodes.length;i++){
-_1ee.push(node.childNodes[i]);
-}
-}
-dojo.dom.removeChildren(node);
-node.appendChild(_1ed);
-for(var i=0;i<_1ee.length;i++){
-dojo.dom.destroyNode(_1ee[i]);
-}
-};
-dojo.dom.removeChildren=function(node){
-var _1f1=node.childNodes.length;
-while(node.hasChildNodes()){
-dojo.dom.removeNode(node.firstChild);
-}
-return _1f1;
-};
-dojo.dom.replaceNode=function(node,_1f3){
-return node.parentNode.replaceChild(_1f3,node);
-};
-dojo.dom.destroyNode=function(node){
-if(node.parentNode){
-node=dojo.dom.removeNode(node);
-}
-if(node.nodeType!=3){
-if(dojo.evalObjPath("dojo.event.browser.clean",false)){
-dojo.event.browser.clean(node);
-}
-if(dojo.render.html.ie){
-node.outerHTML="";
-}
-}
-};
-dojo.dom.removeNode=function(node){
-if(node&&node.parentNode){
-return node.parentNode.removeChild(node);
-}
-};
-dojo.dom.getAncestors=function(node,_1f7,_1f8){
-var _1f9=[];
-var _1fa=(_1f7&&(_1f7 instanceof Function||typeof _1f7=="function"));
-while(node){
-if(!_1fa||_1f7(node)){
-_1f9.push(node);
-}
-if(_1f8&&_1f9.length>0){
-return _1f9[0];
-}
-node=node.parentNode;
-}
-if(_1f8){
-return null;
-}
-return _1f9;
-};
-dojo.dom.getAncestorsByTag=function(node,tag,_1fd){
-tag=tag.toLowerCase();
-return dojo.dom.getAncestors(node,function(el){
-return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_1fd);
-};
-dojo.dom.getFirstAncestorByTag=function(node,tag){
-return dojo.dom.getAncestorsByTag(node,tag,true);
-};
-dojo.dom.isDescendantOf=function(node,_202,_203){
-if(_203&&node){
-node=node.parentNode;
-}
-while(node){
-if(node==_202){
-return true;
-}
-node=node.parentNode;
-}
-return false;
-};
-dojo.dom.innerXML=function(node){
-if(node.innerXML){
-return node.innerXML;
-}else{
-if(node.xml){
-return node.xml;
-}else{
-if(typeof XMLSerializer!="undefined"){
-return (new XMLSerializer()).serializeToString(node);
-}
-}
-}
-};
-dojo.dom.createDocument=function(){
-var doc=null;
-var _206=dojo.doc();
-if(!dj_undef("ActiveXObject")){
-var _207=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_207.length;i++){
-try{
-doc=new ActiveXObject(_207[i]+".XMLDOM");
-}
-catch(e){
-}
-if(doc){
-break;
-}
-}
-}else{
-if((_206.implementation)&&(_206.implementation.createDocument)){
-doc=_206.implementation.createDocument("","",null);
-}
-}
-return doc;
-};
-dojo.dom.createDocumentFromText=function(str,_20a){
-if(!_20a){
-_20a="text/xml";
-}
-if(!dj_undef("DOMParser")){
-var _20b=new DOMParser();
-return _20b.parseFromString(str,_20a);
-}else{
-if(!dj_undef("ActiveXObject")){
-var _20c=dojo.dom.createDocument();
-if(_20c){
-_20c.async=false;
-_20c.loadXML(str);
-return _20c;
-}else{
-dojo.debug("toXml didn't work?");
-}
-}else{
-var _20d=dojo.doc();
-if(_20d.createElement){
-var tmp=_20d.createElement("xml");
-tmp.innerHTML=str;
-if(_20d.implementation&&_20d.implementation.createDocument){
-var _20f=_20d.implementation.createDocument("foo","",null);
-for(var i=0;i<tmp.childNodes.length;i++){
-_20f.importNode(tmp.childNodes.item(i),true);
-}
-return _20f;
-}
-return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
-}
-}
-}
-return null;
-};
-dojo.dom.prependChild=function(node,_212){
-if(_212.firstChild){
-_212.insertBefore(node,_212.firstChild);
-}else{
-_212.appendChild(node);
-}
-return true;
-};
-dojo.dom.insertBefore=function(node,ref,_215){
-if((_215!=true)&&(node===ref||node.nextSibling===ref)){
-return false;
-}
-var _216=ref.parentNode;
-_216.insertBefore(node,ref);
-return true;
-};
-dojo.dom.insertAfter=function(node,ref,_219){
-var pn=ref.parentNode;
-if(ref==pn.lastChild){
-if((_219!=true)&&(node===ref)){
-return false;
-}
-pn.appendChild(node);
-}else{
-return this.insertBefore(node,ref.nextSibling,_219);
-}
-return true;
-};
-dojo.dom.insertAtPosition=function(node,ref,_21d){
-if((!node)||(!ref)||(!_21d)){
-return false;
-}
-switch(_21d.toLowerCase()){
-case "before":
-return dojo.dom.insertBefore(node,ref);
-case "after":
-return dojo.dom.insertAfter(node,ref);
-case "first":
-if(ref.firstChild){
-return dojo.dom.insertBefore(node,ref.firstChild);
-}else{
-ref.appendChild(node);
-return true;
-}
-break;
-default:
-ref.appendChild(node);
-return true;
-}
-};
-dojo.dom.insertAtIndex=function(node,_21f,_220){
-var _221=_21f.childNodes;
-if(!_221.length||_221.length==_220){
-_21f.appendChild(node);
-return true;
-}
-if(_220==0){
-return dojo.dom.prependChild(node,_21f);
-}
-return dojo.dom.insertAfter(node,_221[_220-1]);
-};
-dojo.dom.textContent=function(node,text){
-if(arguments.length>1){
-var _224=dojo.doc();
-dojo.dom.replaceChildren(node,_224.createTextNode(text));
-return text;
-}else{
-if(node.textContent!=undefined){
-return node.textContent;
-}
-var _225="";
-if(node==null){
-return _225;
-}
-for(var i=0;i<node.childNodes.length;i++){
-switch(node.childNodes[i].nodeType){
-case 1:
-case 5:
-_225+=dojo.dom.textContent(node.childNodes[i]);
-break;
-case 3:
-case 2:
-case 4:
-_225+=node.childNodes[i].nodeValue;
-break;
-default:
-break;
-}
-}
-return _225;
-}
-};
-dojo.dom.hasParent=function(node){
-return Boolean(node&&node.parentNode&&dojo.dom.isNode(node.parentNode));
-};
-dojo.dom.isTag=function(node){
-if(node&&node.tagName){
-for(var i=1;i<arguments.length;i++){
-if(node.tagName==String(arguments[i])){
-return String(arguments[i]);
-}
-}
-}
-return "";
-};
-dojo.dom.setAttributeNS=function(elem,_22b,_22c,_22d){
-if(elem==null||((elem==undefined)&&(typeof elem=="undefined"))){
-dojo.raise("No element given to dojo.dom.setAttributeNS");
-}
-if(!((elem.setAttributeNS==undefined)&&(typeof elem.setAttributeNS=="undefined"))){
-elem.setAttributeNS(_22b,_22c,_22d);
-}else{
-var _22e=elem.ownerDocument;
-var _22f=_22e.createNode(2,_22c,_22b);
-_22f.nodeValue=_22d;
-elem.setAttributeNode(_22f);
-}
-};
-dojo.provide("dojo.html.common");
-dojo.lang.mixin(dojo.html,dojo.dom);
-dojo.html.body=function(){
-dojo.deprecated("dojo.html.body() moved to dojo.body()","0.5");
-return dojo.body();
-};
-dojo.html.getEventTarget=function(evt){
-if(!evt){
-evt=dojo.global().event||{};
-}
-var t=(evt.srcElement?evt.srcElement:(evt.target?evt.target:null));
-while((t)&&(t.nodeType!=1)){
-t=t.parentNode;
-}
-return t;
-};
-dojo.html.getViewport=function(){
-var _232=dojo.global();
-var _233=dojo.doc();
-var w=0;
-var h=0;
-if(dojo.render.html.mozilla){
-w=_233.documentElement.clientWidth;
-h=_232.innerHeight;
-}else{
-if(!dojo.render.html.opera&&_232.innerWidth){
-w=_232.innerWidth;
-h=_232.innerHeight;
-}else{
-if(!dojo.render.html.opera&&dojo.exists(_233,"documentElement.clientWidth")){
-var w2=_233.documentElement.clientWidth;
-if(!w||w2&&w2<w){
-w=w2;
-}
-h=_233.documentElement.clientHeight;
-}else{
-if(dojo.body().clientWidth){
-w=dojo.body().clientWidth;
-h=dojo.body().clientHeight;
-}
-}
-}
-}
-return {width:w,height:h};
-};
-dojo.html.getScroll=function(){
-var _237=dojo.global();
-var _238=dojo.doc();
-var top=_237.pageYOffset||_238.documentElement.scrollTop||dojo.body().scrollTop||0;
-var left=_237.pageXOffset||_238.documentElement.scrollLeft||dojo.body().scrollLeft||0;
-return {top:top,left:left,offset:{x:left,y:top}};
-};
-dojo.html.getParentByType=function(node,type){
-var _23d=dojo.doc();
-var _23e=dojo.byId(node);
-type=type.toLowerCase();
-while((_23e)&&(_23e.nodeName.toLowerCase()!=type)){
-if(_23e==(_23d["body"]||_23d["documentElement"])){
-return null;
-}
-_23e=_23e.parentNode;
-}
-return _23e;
-};
-dojo.html.getAttribute=function(node,attr){
-node=dojo.byId(node);
-if((!node)||(!node.getAttribute)){
-return null;
-}
-var ta=typeof attr=="string"?attr:new String(attr);
-var v=node.getAttribute(ta.toUpperCase());
-if((v)&&(typeof v=="string")&&(v!="")){
-return v;
-}
-if(v&&v.value){
-return v.value;
-}
-if((node.getAttributeNode)&&(node.getAttributeNode(ta))){
-return (node.getAttributeNode(ta)).value;
-}else{
-if(node.getAttribute(ta)){
-return node.getAttribute(ta);
-}else{
-if(node.getAttribute(ta.toLowerCase())){
-return node.getAttribute(ta.toLowerCase());
-}
-}
-}
-return null;
-};
-dojo.html.hasAttribute=function(node,attr){
-return dojo.html.getAttribute(dojo.byId(node),attr)?true:false;
-};
-dojo.html.getCursorPosition=function(e){
-e=e||dojo.global().event;
-var _246={x:0,y:0};
-if(e.pageX||e.pageY){
-_246.x=e.pageX;
-_246.y=e.pageY;
-}else{
-var de=dojo.doc().documentElement;
-var db=dojo.body();
-_246.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
-_246.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
-}
-return _246;
-};
-dojo.html.isTag=function(node){
-node=dojo.byId(node);
-if(node&&node.tagName){
-for(var i=1;i<arguments.length;i++){
-if(node.tagName.toLowerCase()==String(arguments[i]).toLowerCase()){
-return String(arguments[i]).toLowerCase();
-}
-}
-}
-return "";
-};
-if(dojo.render.html.ie&&!dojo.render.html.ie70){
-if(window.location.href.substr(0,6).toLowerCase()!="https:"){
-(function(){
-var _24b=dojo.doc().createElement("script");
-_24b.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
-dojo.doc().getElementsByTagName("head")[0].appendChild(_24b);
-})();
-}
-}else{
-dojo.html.createExternalElement=function(doc,tag){
-return doc.createElement(tag);
-};
-}
-dojo.html._callDeprecated=function(_24e,_24f,args,_251,_252){
-dojo.deprecated("dojo.html."+_24e,"replaced by dojo.html."+_24f+"("+(_251?"node, {"+_251+": "+_251+"}":"")+")"+(_252?"."+_252:""),"0.5");
-var _253=[];
-if(_251){
-var _254={};
-_254[_251]=args[1];
-_253.push(args[0]);
-_253.push(_254);
-}else{
-_253=args;
-}
-var ret=dojo.html[_24f].apply(dojo.html,args);
-if(_252){
-return ret[_252];
-}else{
-return ret;
-}
-};
-dojo.html.getViewportWidth=function(){
-return dojo.html._callDeprecated("getViewportWidth","getViewport",arguments,null,"width");
-};
-dojo.html.getViewportHeight=function(){
-return dojo.html._callDeprecated("getViewportHeight","getViewport",arguments,null,"height");
-};
-dojo.html.getViewportSize=function(){
-return dojo.html._callDeprecated("getViewportSize","getViewport",arguments);
-};
-dojo.html.getScrollTop=function(){
-return dojo.html._callDeprecated("getScrollTop","getScroll",arguments,null,"top");
-};
-dojo.html.getScrollLeft=function(){
-return dojo.html._callDeprecated("getScrollLeft","getScroll",arguments,null,"left");
-};
-dojo.html.getScrollOffset=function(){
-return dojo.html._callDeprecated("getScrollOffset","getScroll",arguments,null,"offset");
-};
-dojo.provide("dojo.uri.Uri");
-dojo.uri=new function(){
-this.dojoUri=function(uri){
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(),uri);
-};
-this.moduleUri=function(_257,uri){
-var loc=dojo.hostenv.getModuleSymbols(_257).join("/");
-if(!loc){
-return null;
-}
-if(loc.lastIndexOf("/")!=loc.length-1){
-loc+="/";
-}
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri()+loc,uri);
-};
-this.Uri=function(){
-var uri=arguments[0];
-for(var i=1;i<arguments.length;i++){
-if(!arguments[i]){
-continue;
-}
-var _25c=new dojo.uri.Uri(arguments[i].toString());
-var _25d=new dojo.uri.Uri(uri.toString());
-if((_25c.path=="")&&(_25c.scheme==null)&&(_25c.authority==null)&&(_25c.query==null)){
-if(_25c.fragment!=null){
-_25d.fragment=_25c.fragment;
-}
-_25c=_25d;
-}else{
-if(_25c.scheme==null){
-_25c.scheme=_25d.scheme;
-if(_25c.authority==null){
-_25c.authority=_25d.authority;
-if(_25c.path.charAt(0)!="/"){
-var path=_25d.path.substring(0,_25d.path.lastIndexOf("/")+1)+_25c.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;
-}
-}
-}
-}
-_25c.path=segs.join("/");
-}
-}
-}
-}
-uri="";
-if(_25c.scheme!=null){
-uri+=_25c.scheme+":";
-}
-if(_25c.authority!=null){
-uri+="//"+_25c.authority;
-}
-uri+=_25c.path;
-if(_25c.query!=null){
-uri+="?"+_25c.query;
-}
-if(_25c.fragment!=null){
-uri+="#"+_25c.fragment;
-}
-}
-this.uri=uri.toString();
-var _261="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
-var r=this.uri.match(new RegExp(_261));
-this.scheme=r[2]||(r[1]?"":null);
-this.authority=r[4]||(r[3]?"":null);
-this.path=r[5];
-this.query=r[7]||(r[6]?"":null);
-this.fragment=r[9]||(r[8]?"":null);
-if(this.authority!=null){
-_261="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
-r=this.authority.match(new RegExp(_261));
-this.user=r[3]||null;
-this.password=r[4]||null;
-this.host=r[5];
-this.port=r[7]||null;
-}
-this.toString=function(){
-return this.uri;
-};
-};
-};
-dojo.provide("dojo.html.style");
-dojo.html.getClass=function(node){
-node=dojo.byId(node);
-if(!node){
-return "";
-}
-var cs="";
-if(node.className){
-cs=node.className;
-}else{
-if(dojo.html.hasAttribute(node,"class")){
-cs=dojo.html.getAttribute(node,"class");
-}
-}
-return cs.replace(/^\s+|\s+$/g,"");
-};
-dojo.html.getClasses=function(node){
-var c=dojo.html.getClass(node);
-return (c=="")?[]:c.split(/\s+/g);
-};
-dojo.html.hasClass=function(node,_268){
-return (new RegExp("(^|\\s+)"+_268+"(\\s+|$)")).test(dojo.html.getClass(node));
-};
-dojo.html.prependClass=function(node,_26a){
-_26a+=" "+dojo.html.getClass(node);
-return dojo.html.setClass(node,_26a);
-};
-dojo.html.addClass=function(node,_26c){
-if(dojo.html.hasClass(node,_26c)){
-return false;
-}
-_26c=(dojo.html.getClass(node)+" "+_26c).replace(/^\s+|\s+$/g,"");
-return dojo.html.setClass(node,_26c);
-};
-dojo.html.setClass=function(node,_26e){
-node=dojo.byId(node);
-var cs=new String(_26e);
-try{
-if(typeof node.className=="string"){
-node.className=cs;
-}else{
-if(node.setAttribute){
-node.setAttribute("class",_26e);
-node.className=cs;
-}else{
-return false;
-}
-}
-}
-catch(e){
-dojo.debug("dojo.html.setClass() failed",e);
-}
-return true;
-};
-dojo.html.removeClass=function(node,_271,_272){
-try{
-if(!_272){
-var _273=dojo.html.getClass(node).replace(new RegExp("(^|\\s+)"+_271+"(\\s+|$)"),"$1$2");
-}else{
-var _273=dojo.html.getClass(node).replace(_271,"");
-}
-dojo.html.setClass(node,_273);
-}
-catch(e){
-dojo.debug("dojo.html.removeClass() failed",e);
-}
-return true;
-};
-dojo.html.replaceClass=function(node,_275,_276){
-dojo.html.removeClass(node,_276);
-dojo.html.addClass(node,_275);
-};
-dojo.html.classMatchType={ContainsAll:0,ContainsAny:1,IsOnly:2};
-dojo.html.getElementsByClass=function(_277,_278,_279,_27a,_27b){
-_27b=false;
-var _27c=dojo.doc();
-_278=dojo.byId(_278)||_27c;
-var _27d=_277.split(/\s+/g);
-var _27e=[];
-if(_27a!=1&&_27a!=2){
-_27a=0;
-}
-var _27f=new RegExp("(\\s|^)(("+_27d.join(")|(")+"))(\\s|$)");
-var _280=_27d.join(" ").length;
-var _281=[];
-if(!_27b&&_27c.evaluate){
-var _282=".//"+(_279||"*")+"[contains(";
-if(_27a!=dojo.html.classMatchType.ContainsAny){
-_282+="concat(' ', at class,' '), ' "+_27d.join(" ') and contains(concat(' ', at class,' '), ' ")+" ')";
-if(_27a==2){
-_282+=" and string-length(@class)="+_280+"]";
-}else{
-_282+="]";
-}
-}else{
-_282+="concat(' ', at class,' '), ' "+_27d.join(" ') or contains(concat(' ', at class,' '), ' ")+" ')]";
-}
-var _283=_27c.evaluate(_282,_278,null,XPathResult.ANY_TYPE,null);
-var _284=_283.iterateNext();
-while(_284){
-try{
-_281.push(_284);
-_284=_283.iterateNext();
-}
-catch(e){
-break;
-}
-}
-return _281;
-}else{
-if(!_279){
-_279="*";
-}
-_281=_278.getElementsByTagName(_279);
-var node,i=0;
-outer:
-while(node=_281[i++]){
-var _287=dojo.html.getClasses(node);
-if(_287.length==0){
-continue outer;
-}
-var _288=0;
-for(var j=0;j<_287.length;j++){
-if(_27f.test(_287[j])){
-if(_27a==dojo.html.classMatchType.ContainsAny){
-_27e.push(node);
-continue outer;
-}else{
-_288++;
-}
-}else{
-if(_27a==dojo.html.classMatchType.IsOnly){
-continue outer;
-}
-}
-}
-if(_288==_27d.length){
-if((_27a==dojo.html.classMatchType.IsOnly)&&(_288==_287.length)){
-_27e.push(node);
-}else{
-if(_27a==dojo.html.classMatchType.ContainsAll){
-_27e.push(node);
-}
-}
-}
-}
-return _27e;
-}
-};
-dojo.html.getElementsByClassName=dojo.html.getElementsByClass;
-dojo.html.toCamelCase=function(_28a){
-var arr=_28a.split("-"),cc=arr[0];
-for(var i=1;i<arr.length;i++){
-cc+=arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
-}
-return cc;
-};
-dojo.html.toSelectorCase=function(_28e){
-return _28e.replace(/([A-Z])/g,"-$1").toLowerCase();
-};
-dojo.html.getComputedStyle=function(node,_290,_291){
-node=dojo.byId(node);
-var _290=dojo.html.toSelectorCase(_290);
-var _292=dojo.html.toCamelCase(_290);
-if(!node||!node.style){
-return _291;
-}else{
-if(document.defaultView&&dojo.html.isDescendantOf(node,node.ownerDocument)){
-try{
-var cs=document.defaultView.getComputedStyle(node,"");
-if(cs){
-return cs.getPropertyValue(_290);
-}
-}
-catch(e){
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_290);
-}else{
-return _291;
-}
-}
-}else{
-if(node.currentStyle){
-return node.currentStyle[_292];
-}
-}
-}
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_290);
-}else{
-return _291;
-}
-};
-dojo.html.getStyleProperty=function(node,_295){
-node=dojo.byId(node);
-return (node&&node.style?node.style[dojo.html.toCamelCase(_295)]:undefined);
-};
-dojo.html.getStyle=function(node,_297){
-var _298=dojo.html.getStyleProperty(node,_297);
-return (_298?_298:dojo.html.getComputedStyle(node,_297));
-};
-dojo.html.setStyle=function(node,_29a,_29b){
-node=dojo.byId(node);
-if(node&&node.style){
-var _29c=dojo.html.toCamelCase(_29a);
-node.style[_29c]=_29b;
-}
-};
-dojo.html.setStyleText=function(_29d,text){
-try{
-_29d.style.cssText=text;
-}
-catch(e){
-_29d.setAttribute("style",text);
-}
-};
-dojo.html.copyStyle=function(_29f,_2a0){
-if(!_2a0.style.cssText){
-_29f.setAttribute("style",_2a0.getAttribute("style"));
-}else{
-_29f.style.cssText=_2a0.style.cssText;
-}
-dojo.html.addClass(_29f,dojo.html.getClass(_2a0));
-};
-dojo.html.getUnitValue=function(node,_2a2,_2a3){
-var s=dojo.html.getComputedStyle(node,_2a2);
-if((!s)||((s=="auto")&&(_2a3))){
-return {value:0,units:"px"};
-}
-var _2a5=s.match(/(\-?[\d.]+)([a-z%]*)/i);
-if(!_2a5){
-return dojo.html.getUnitValue.bad;
-}
-return {value:Number(_2a5[1]),units:_2a5[2].toLowerCase()};
-};
-dojo.html.getUnitValue.bad={value:NaN,units:""};
-dojo.html.getPixelValue=function(node,_2a7,_2a8){
-var _2a9=dojo.html.getUnitValue(node,_2a7,_2a8);
-if(isNaN(_2a9.value)){
-return 0;
-}
-if((_2a9.value)&&(_2a9.units!="px")){
-return NaN;
-}
-return _2a9.value;
-};
-dojo.html.setPositivePixelValue=function(node,_2ab,_2ac){
-if(isNaN(_2ac)){
-return false;
-}
-node.style[_2ab]=Math.max(0,_2ac)+"px";
-return true;
-};
-dojo.html.styleSheet=null;
-dojo.html.insertCssRule=function(_2ad,_2ae,_2af){
-if(!dojo.html.styleSheet){
-if(document.createStyleSheet){
-dojo.html.styleSheet=document.createStyleSheet();
-}else{
-if(document.styleSheets[0]){
-dojo.html.styleSheet=document.styleSheets[0];
-}else{
-return null;
-}
-}
-}
-if(arguments.length<3){
-if(dojo.html.styleSheet.cssRules){
-_2af=dojo.html.styleSheet.cssRules.length;
-}else{
-if(dojo.html.styleSheet.rules){
-_2af=dojo.html.styleSheet.rules.length;
-}else{
-return null;
-}
-}
-}
-if(dojo.html.styleSheet.insertRule){
-var rule=_2ad+" { "+_2ae+" }";
-return dojo.html.styleSheet.insertRule(rule,_2af);
-}else{
-if(dojo.html.styleSheet.addRule){
-return dojo.html.styleSheet.addRule(_2ad,_2ae,_2af);
-}else{
-return null;
-}
-}
-};
-dojo.html.removeCssRule=function(_2b1){
-if(!dojo.html.styleSheet){
-dojo.debug("no stylesheet defined for removing rules");
-return false;
-}
-if(dojo.render.html.ie){
-if(!_2b1){
-_2b1=dojo.html.styleSheet.rules.length;
-dojo.html.styleSheet.removeRule(_2b1);
-}
-}else{
-if(document.styleSheets[0]){
-if(!_2b1){
-_2b1=dojo.html.styleSheet.cssRules.length;
-}
-dojo.html.styleSheet.deleteRule(_2b1);
-}
-}
-return true;
-};
-dojo.html._insertedCssFiles=[];
-dojo.html.insertCssFile=function(URI,doc,_2b4,_2b5){
-if(!URI){
-return;
-}
-if(!doc){
-doc=document;
-}
-var _2b6=dojo.hostenv.getText(URI,false,_2b5);
-if(_2b6===null){
-return;
-}
-_2b6=dojo.html.fixPathsInCssText(_2b6,URI);
-if(_2b4){
-var idx=-1,node,ent=dojo.html._insertedCssFiles;
-for(var i=0;i<ent.length;i++){
-if((ent[i].doc==doc)&&(ent[i].cssText==_2b6)){
-idx=i;
-node=ent[i].nodeRef;
-break;
-}
-}
-if(node){
-var _2bb=doc.getElementsByTagName("style");
-for(var i=0;i<_2bb.length;i++){
-if(_2bb[i]==node){
-return;
-}
-}
-dojo.html._insertedCssFiles.shift(idx,1);
-}
-}
-var _2bc=dojo.html.insertCssText(_2b6,doc);
-dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_2b6,"nodeRef":_2bc});
-if(_2bc&&djConfig.isDebug){
-_2bc.setAttribute("dbgHref",URI);
-}
-return _2bc;
-};
-dojo.html.insertCssText=function(_2bd,doc,URI){
-if(!_2bd){
-return;
-}
-if(!doc){
-doc=document;
-}
-if(URI){
-_2bd=dojo.html.fixPathsInCssText(_2bd,URI);
-}
-var _2c0=doc.createElement("style");
-_2c0.setAttribute("type","text/css");
-var head=doc.getElementsByTagName("head")[0];
-if(!head){
-dojo.debug("No head tag in document, aborting styles");
-return;
-}else{
-head.appendChild(_2c0);
-}
-if(_2c0.styleSheet){
-var _2c2=function(){
-try{
-_2c0.styleSheet.cssText=_2bd;
-}
-catch(e){
-dojo.debug(e);
-}
-};
-if(_2c0.styleSheet.disabled){
-setTimeout(_2c2,10);
-}else{
-_2c2();
-}
-}else{
-var _2c3=doc.createTextNode(_2bd);
-_2c0.appendChild(_2c3);
-}
-return _2c0;
-};
-dojo.html.fixPathsInCssText=function(_2c4,URI){
-if(!_2c4||!URI){
-return;
-}
-var _2c6,str="",url="",_2c9="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
-var _2ca=new RegExp("url\\(\\s*("+_2c9+")\\s*\\)");
-var _2cb=/(file|https?|ftps?):\/\//;
-regexTrim=new RegExp("^[\\s]*(['\"]?)("+_2c9+")\\1[\\s]*?$");
-if(dojo.render.html.ie55||dojo.render.html.ie60){
-var _2cc=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_2c9+")['\"]");
-while(_2c6=_2cc.exec(_2c4)){
-url=_2c6[2].replace(regexTrim,"$2");
-if(!_2cb.exec(url)){
-url=(new dojo.uri.Uri(URI,url).toString());
-}
-str+=_2c4.substring(0,_2c6.index)+"AlphaImageLoader("+_2c6[1]+"src='"+url+"'";
-_2c4=_2c4.substr(_2c6.index+_2c6[0].length);
-}
-_2c4=str+_2c4;
-str="";
-}
-while(_2c6=_2ca.exec(_2c4)){
-url=_2c6[1].replace(regexTrim,"$2");
-if(!_2cb.exec(url)){
-url=(new dojo.uri.Uri(URI,url).toString());
-}
-str+=_2c4.substring(0,_2c6.index)+"url("+url+")";
-_2c4=_2c4.substr(_2c6.index+_2c6[0].length);
-}
-return str+_2c4;
-};
-dojo.html.setActiveStyleSheet=function(_2cd){
-var i=0,a,els=dojo.doc().getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")){
-a.disabled=true;
-if(a.getAttribute("title")==_2cd){
-a.disabled=false;
-}
-}
-}
-};
-dojo.html.getActiveStyleSheet=function(){
-var i=0,a,els=dojo.doc().getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")&&!a.disabled){
-return a.getAttribute("title");
-}
-}
-return null;
-};
-dojo.html.getPreferredStyleSheet=function(){
-var i=0,a,els=dojo.doc().getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("rel").indexOf("alt")==-1&&a.getAttribute("title")){
-return a.getAttribute("title");
-}
-}
-return null;
-};
-dojo.html.applyBrowserClass=function(node){
-var drh=dojo.render.html;
-var _2d9={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
-for(var p in _2d9){
-if(_2d9[p]){
-dojo.html.addClass(node,p);
-}
-}
-};
-dojo.provide("dojo.html.display");
-dojo.html._toggle=function(node,_2dc,_2dd){
-node=dojo.byId(node);
-_2dd(node,!_2dc(node));
-return _2dc(node);
-};
-dojo.html.show=function(node){
-node=dojo.byId(node);
-if(dojo.html.getStyleProperty(node,"display")=="none"){
-dojo.html.setStyle(node,"display",(node.dojoDisplayCache||""));
-node.dojoDisplayCache=undefined;
-}
-};
-dojo.html.hide=function(node){
-node=dojo.byId(node);
-if(typeof node["dojoDisplayCache"]=="undefined"){
-var d=dojo.html.getStyleProperty(node,"display");
-if(d!="none"){
-node.dojoDisplayCache=d;
-}
-}
-dojo.html.setStyle(node,"display","none");
-};
-dojo.html.setShowing=function(node,_2e2){
-dojo.html[(_2e2?"show":"hide")](node);
-};
-dojo.html.isShowing=function(node){
-return (dojo.html.getStyleProperty(node,"display")!="none");
-};
-dojo.html.toggleShowing=function(node){
-return dojo.html._toggle(node,dojo.html.isShowing,dojo.html.setShowing);
-};
-dojo.html.displayMap={tr:"",td:"",th:"",img:"inline",span:"inline",input:"inline",button:"inline"};
-dojo.html.suggestDisplayByTagName=function(node){
-node=dojo.byId(node);
-if(node&&node.tagName){
-var tag=node.tagName.toLowerCase();
-return (tag in dojo.html.displayMap?dojo.html.displayMap[tag]:"block");
-}
-};
-dojo.html.setDisplay=function(node,_2e8){
-dojo.html.setStyle(node,"display",((_2e8 instanceof String||typeof _2e8=="string")?_2e8:(_2e8?dojo.html.suggestDisplayByTagName(node):"none")));
-};
-dojo.html.isDisplayed=function(node){
-return (dojo.html.getComputedStyle(node,"display")!="none");
-};
-dojo.html.toggleDisplay=function(node){
-return dojo.html._toggle(node,dojo.html.isDisplayed,dojo.html.setDisplay);
-};
-dojo.html.setVisibility=function(node,_2ec){
-dojo.html.setStyle(node,"visibility",((_2ec instanceof String||typeof _2ec=="string")?_2ec:(_2ec?"visible":"hidden")));
-};
-dojo.html.isVisible=function(node){
-return (dojo.html.getComputedStyle(node,"visibility")!="hidden");
-};
-dojo.html.toggleVisibility=function(node){
-return dojo.html._toggle(node,dojo.html.isVisible,dojo.html.setVisibility);
-};
-dojo.html.setOpacity=function(node,_2f0,_2f1){
-node=dojo.byId(node);
-var h=dojo.render.html;
-if(!_2f1){
-if(_2f0>=1){
-if(h.ie){
-dojo.html.clearOpacity(node);
-return;
-}else{
-_2f0=0.999999;
-}
-}else{
-if(_2f0<0){
-_2f0=0;
-}
-}
-}
-if(h.ie){
-if(node.nodeName.toLowerCase()=="tr"){
-var tds=node.getElementsByTagName("td");
-for(var x=0;x<tds.length;x++){
-tds[x].style.filter="Alpha(Opacity="+_2f0*100+")";
-}
-}
-node.style.filter="Alpha(Opacity="+_2f0*100+")";
-}else{
-if(h.moz){
-node.style.opacity=_2f0;
-node.style.MozOpacity=_2f0;
-}else{
-if(h.safari){
-node.style.opacity=_2f0;
-node.style.KhtmlOpacity=_2f0;
-}else{
-node.style.opacity=_2f0;
-}
-}
-}
-};
-dojo.html.clearOpacity=function(node){
-node=dojo.byId(node);
-var ns=node.style;
-var h=dojo.render.html;
-if(h.ie){
-try{
-if(node.filters&&node.filters.alpha){
-ns.filter="";
-}
-}
-catch(e){
-}
-}else{
-if(h.moz){
-ns.opacity=1;
-ns.MozOpacity=1;
-}else{
-if(h.safari){
-ns.opacity=1;
-ns.KhtmlOpacity=1;
-}else{
-ns.opacity=1;
-}
-}
-}
-};
-dojo.html.getOpacity=function(node){
-node=dojo.byId(node);
-var h=dojo.render.html;
-if(h.ie){
-var opac=(node.filters&&node.filters.alpha&&typeof node.filters.alpha.opacity=="number"?node.filters.alpha.opacity:100)/100;
-}else{
-var opac=node.style.opacity||node.style.MozOpacity||node.style.KhtmlOpacity||1;
-}
-return opac>=0.999999?1:Number(opac);
-};
-dojo.provide("dojo.html.color");
-dojo.html.getBackgroundColor=function(node){
-node=dojo.byId(node);
-var _2fc;
-do{
-_2fc=dojo.html.getStyle(node,"background-color");
-if(_2fc.toLowerCase()=="rgba(0, 0, 0, 0)"){
-_2fc="transparent";
-}
-if(node==document.getElementsByTagName("body")[0]){
-node=null;
-break;
-}
-node=node.parentNode;
-}while(node&&dojo.lang.inArray(["transparent",""],_2fc));
-if(_2fc=="transparent"){
-_2fc=[255,255,255,0];
-}else{
-_2fc=dojo.gfx.color.extractRGB(_2fc);
-}
-return _2fc;
-};
-dojo.provide("dojo.html.layout");
-dojo.html.sumAncestorProperties=function(node,prop){
-node=dojo.byId(node);
-if(!node){
-return 0;
-}
-var _2ff=0;
-while(node){
-if(dojo.html.getComputedStyle(node,"position")=="fixed"){
-return 0;
-}
-var val=node[prop];
-if(val){
-_2ff+=val-0;
-if(node==dojo.body()){
-break;
-}
-}
-node=node.parentNode;
-}
-return _2ff;
-};
-dojo.html.setStyleAttributes=function(node,_302){
-node=dojo.byId(node);
-var _303=_302.replace(/(;)?\s*$/,"").split(";");
-for(var i=0;i<_303.length;i++){
-var _305=_303[i].split(":");
-var name=_305[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
-var _307=_305[1].replace(/\s*$/,"").replace(/^\s*/,"");
-switch(name){
-case "opacity":
-dojo.html.setOpacity(node,_307);
-break;
-case "content-height":
-dojo.html.setContentBox(node,{height:_307});
-break;
-case "content-width":
-dojo.html.setContentBox(node,{width:_307});
-break;
-case "outer-height":
-dojo.html.setMarginBox(node,{height:_307});
-break;
-case "outer-width":
-dojo.html.setMarginBox(node,{width:_307});
-break;
-default:
-node.style[dojo.html.toCamelCase(name)]=_307;
-}
-}
-};
-dojo.html.boxSizing={MARGIN_BOX:"margin-box",BORDER_BOX:"border-box",PADDING_BOX:"padding-box",CONTENT_BOX:"content-box"};
-dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_309,_30a){
-node=dojo.byId(node,node.ownerDocument);
-var ret={x:0,y:0};
-var bs=dojo.html.boxSizing;
-if(!_30a){
-_30a=bs.CONTENT_BOX;
-}
-var _30d=2;
-var _30e;
-switch(_30a){
-case bs.MARGIN_BOX:
-_30e=3;
-break;
-case bs.BORDER_BOX:
-_30e=2;
-break;
-case bs.PADDING_BOX:
-default:
-_30e=1;
-break;
-case bs.CONTENT_BOX:
-_30e=0;
-break;
-}
-var h=dojo.render.html;
-var db=document["body"]||document["documentElement"];
-if(h.ie){
-with(node.getBoundingClientRect()){
-ret.x=left-2;
-ret.y=top-2;
-}
-}else{
-if(document.getBoxObjectFor){
-_30d=1;
-try{
-var bo=document.getBoxObjectFor(node);
-ret.x=bo.x-dojo.html.sumAncestorProperties(node,"scrollLeft");
-ret.y=bo.y-dojo.html.sumAncestorProperties(node,"scrollTop");
-}
-catch(e){
-}
-}else{
-if(node["offsetParent"]){
-var _312;
-if((h.safari)&&(node.style.getPropertyValue("position")=="absolute")&&(node.parentNode==db)){
-_312=db;
-}else{
-_312=db.parentNode;
-}
-if(node.parentNode!=db){
-var nd=node;
-if(dojo.render.html.opera){
-nd=db;
-}
-ret.x-=dojo.html.sumAncestorProperties(nd,"scrollLeft");
-ret.y-=dojo.html.sumAncestorProperties(nd,"scrollTop");
-}
-var _314=node;
-do{
-var n=_314["offsetLeft"];
-if(!h.opera||n>0){
-ret.x+=isNaN(n)?0:n;
-}
-var m=_314["offsetTop"];
-ret.y+=isNaN(m)?0:m;
-_314=_314.offsetParent;
-}while((_314!=_312)&&(_314!=null));
-}else{
-if(node["x"]&&node["y"]){
-ret.x+=isNaN(node.x)?0:node.x;
-ret.y+=isNaN(node.y)?0:node.y;
-}
-}
-}
-}
-if(_309){
-var _317=dojo.html.getScroll();
-ret.y+=_317.top;
-ret.x+=_317.left;
-}
-var _318=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
-if(_30d>_30e){
-for(var i=_30e;i<_30d;++i){
-ret.y+=_318[i](node,"top");
-ret.x+=_318[i](node,"left");
-}
-}else{
-if(_30d<_30e){
-for(var i=_30e;i>_30d;--i){
-ret.y-=_318[i-1](node,"top");
-ret.x-=_318[i-1](node,"left");
-}
-}
-}
-ret.top=ret.y;
-ret.left=ret.x;
-return ret;
-};
-dojo.html.isPositionAbsolute=function(node){
-return (dojo.html.getComputedStyle(node,"position")=="absolute");
-};
-dojo.html._sumPixelValues=function(node,_31c,_31d){
-var _31e=0;
-for(var x=0;x<_31c.length;x++){
-_31e+=dojo.html.getPixelValue(node,_31c[x],_31d);
-}
-return _31e;
-};
-dojo.html.getMargin=function(node){
-return {width:dojo.html._sumPixelValues(node,["margin-left","margin-right"],(dojo.html.getComputedStyle(node,"position")=="absolute")),height:dojo.html._sumPixelValues(node,["margin-top","margin-bottom"],(dojo.html.getComputedStyle(node,"position")=="absolute"))};
-};
-dojo.html.getBorder=function(node){
-return {width:dojo.html.getBorderExtent(node,"left")+dojo.html.getBorderExtent(node,"right"),height:dojo.html.getBorderExtent(node,"top")+dojo.html.getBorderExtent(node,"bottom")};
-};
-dojo.html.getBorderExtent=function(node,side){
-return (dojo.html.getStyle(node,"border-"+side+"-style")=="none"?0:dojo.html.getPixelValue(node,"border-"+side+"-width"));
-};
-dojo.html.getMarginExtent=function(node,side){
-return dojo.html._sumPixelValues(node,["margin-"+side],dojo.html.isPositionAbsolute(node));
-};
-dojo.html.getPaddingExtent=function(node,side){
-return dojo.html._sumPixelValues(node,["padding-"+side],true);
-};
-dojo.html.getPadding=function(node){
-return {width:dojo.html._sumPixelValues(node,["padding-left","padding-right"],true),height:dojo.html._sumPixelValues(node,["padding-top","padding-bottom"],true)};
-};
-dojo.html.getPadBorder=function(node){
-var pad=dojo.html.getPadding(node);
-var _32b=dojo.html.getBorder(node);
-return {width:pad.width+_32b.width,height:pad.height+_32b.height};
-};
-dojo.html.getBoxSizing=function(node){
-var h=dojo.render.html;
-var bs=dojo.html.boxSizing;
-if(((h.ie)||(h.opera))&&node.nodeName!="IMG"){
-var cm=document["compatMode"];
-if((cm=="BackCompat")||(cm=="QuirksMode")){
-return bs.BORDER_BOX;
-}else{
-return bs.CONTENT_BOX;
-}
-}else{
-if(arguments.length==0){
-node=document.documentElement;
-}
-var _330=dojo.html.getStyle(node,"-moz-box-sizing");
-if(!_330){
-_330=dojo.html.getStyle(node,"box-sizing");
-}
-return (_330?_330:bs.CONTENT_BOX);
-}
-};
-dojo.html.isBorderBox=function(node){
-return (dojo.html.getBoxSizing(node)==dojo.html.boxSizing.BORDER_BOX);
-};
-dojo.html.getBorderBox=function(node){
-node=dojo.byId(node);
-return {width:node.offsetWidth,height:node.offsetHeight};
-};
-dojo.html.getPaddingBox=function(node){
-var box=dojo.html.getBorderBox(node);
-var _335=dojo.html.getBorder(node);
-return {width:box.width-_335.width,height:box.height-_335.height};
-};
-dojo.html.getContentBox=function(node){
-node=dojo.byId(node);
-var _337=dojo.html.getPadBorder(node);
-return {width:node.offsetWidth-_337.width,height:node.offsetHeight-_337.height};
-};
-dojo.html.setContentBox=function(node,args){
-node=dojo.byId(node);
-var _33a=0;
-var _33b=0;
-var isbb=dojo.html.isBorderBox(node);
-var _33d=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
-var ret={};
-if(typeof args.width!="undefined"){
-_33a=args.width+_33d.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_33a);
-}
-if(typeof args.height!="undefined"){
-_33b=args.height+_33d.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_33b);
-}
-return ret;
-};
-dojo.html.getMarginBox=function(node){
-var _340=dojo.html.getBorderBox(node);
-var _341=dojo.html.getMargin(node);
-return {width:_340.width+_341.width,height:_340.height+_341.height};
-};
-dojo.html.setMarginBox=function(node,args){
-node=dojo.byId(node);
-var _344=0;
-var _345=0;
-var isbb=dojo.html.isBorderBox(node);
-var _347=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
-var _348=dojo.html.getMargin(node);
-var ret={};
-if(typeof args.width!="undefined"){
-_344=args.width-_347.width;
-_344-=_348.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_344);
-}
-if(typeof args.height!="undefined"){
-_345=args.height-_347.height;
-_345-=_348.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_345);
-}
-return ret;
-};
-dojo.html.getElementBox=function(node,type){
-var bs=dojo.html.boxSizing;
-switch(type){
-case bs.MARGIN_BOX:
-return dojo.html.getMarginBox(node);
-case bs.BORDER_BOX:
-return dojo.html.getBorderBox(node);
-case bs.PADDING_BOX:
-return dojo.html.getPaddingBox(node);
-case bs.CONTENT_BOX:
-default:
-return dojo.html.getContentBox(node);
-}
-};
-dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_34d,_34e,_34f){
-if(_34d instanceof Array||typeof _34d=="array"){
-dojo.deprecated("dojo.html.toCoordinateArray","use dojo.html.toCoordinateObject({left: , top: , width: , height: }) instead","0.5");
-while(_34d.length<4){
-_34d.push(0);
-}
-while(_34d.length>4){
-_34d.pop();
-}
-var ret={left:_34d[0],top:_34d[1],width:_34d[2],height:_34d[3]};
-}else{
-if(!_34d.nodeType&&!(_34d instanceof String||typeof _34d=="string")&&("width" in _34d||"height" in _34d||"left" in _34d||"x" in _34d||"top" in _34d||"y" in _34d)){
-var ret={left:_34d.left||_34d.x||0,top:_34d.top||_34d.y||0,width:_34d.width||0,height:_34d.height||0};
-}else{
-var node=dojo.byId(_34d);
-var pos=dojo.html.abs(node,_34e,_34f);
-var _353=dojo.html.getMarginBox(node);
-var ret={left:pos.left,top:pos.top,width:_353.width,height:_353.height};
-}
-}
-ret.x=ret.left;
-ret.y=ret.top;
-return ret;
-};
-dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_355){
-return dojo.html._callDeprecated("setMarginBoxWidth","setMarginBox",arguments,"width");
-};
-dojo.html.setMarginBoxHeight=dojo.html.setOuterHeight=function(){
-return dojo.html._callDeprecated("setMarginBoxHeight","setMarginBox",arguments,"height");
-};
-dojo.html.getMarginBoxWidth=dojo.html.getOuterWidth=function(){
-return dojo.html._callDeprecated("getMarginBoxWidth","getMarginBox",arguments,null,"width");
-};
-dojo.html.getMarginBoxHeight=dojo.html.getOuterHeight=function(){
-return dojo.html._callDeprecated("getMarginBoxHeight","getMarginBox",arguments,null,"height");
-};
-dojo.html.getTotalOffset=function(node,type,_358){
-return dojo.html._callDeprecated("getTotalOffset","getAbsolutePosition",arguments,null,type);
-};
-dojo.html.getAbsoluteX=function(node,_35a){
-return dojo.html._callDeprecated("getAbsoluteX","getAbsolutePosition",arguments,null,"x");
-};
-dojo.html.getAbsoluteY=function(node,_35c){
-return dojo.html._callDeprecated("getAbsoluteY","getAbsolutePosition",arguments,null,"y");
-};
-dojo.html.totalOffsetLeft=function(node,_35e){
-return dojo.html._callDeprecated("totalOffsetLeft","getAbsolutePosition",arguments,null,"left");
-};
-dojo.html.totalOffsetTop=function(node,_360){
-return dojo.html._callDeprecated("totalOffsetTop","getAbsolutePosition",arguments,null,"top");
-};
-dojo.html.getMarginWidth=function(node){
-return dojo.html._callDeprecated("getMarginWidth","getMargin",arguments,null,"width");
-};
-dojo.html.getMarginHeight=function(node){
-return dojo.html._callDeprecated("getMarginHeight","getMargin",arguments,null,"height");
-};
-dojo.html.getBorderWidth=function(node){
-return dojo.html._callDeprecated("getBorderWidth","getBorder",arguments,null,"width");
-};
-dojo.html.getBorderHeight=function(node){
-return dojo.html._callDeprecated("getBorderHeight","getBorder",arguments,null,"height");
-};
-dojo.html.getPaddingWidth=function(node){
-return dojo.html._callDeprecated("getPaddingWidth","getPadding",arguments,null,"width");
-};
-dojo.html.getPaddingHeight=function(node){
-return dojo.html._callDeprecated("getPaddingHeight","getPadding",arguments,null,"height");
-};
-dojo.html.getPadBorderWidth=function(node){
-return dojo.html._callDeprecated("getPadBorderWidth","getPadBorder",arguments,null,"width");
-};
-dojo.html.getPadBorderHeight=function(node){
-return dojo.html._callDeprecated("getPadBorderHeight","getPadBorder",arguments,null,"height");
-};
-dojo.html.getBorderBoxWidth=dojo.html.getInnerWidth=function(){
-return dojo.html._callDeprecated("getBorderBoxWidth","getBorderBox",arguments,null,"width");
-};
-dojo.html.getBorderBoxHeight=dojo.html.getInnerHeight=function(){
-return dojo.html._callDeprecated("getBorderBoxHeight","getBorderBox",arguments,null,"height");
-};
-dojo.html.getContentBoxWidth=dojo.html.getContentWidth=function(){
-return dojo.html._callDeprecated("getContentBoxWidth","getContentBox",arguments,null,"width");
-};
-dojo.html.getContentBoxHeight=dojo.html.getContentHeight=function(){
-return dojo.html._callDeprecated("getContentBoxHeight","getContentBox",arguments,null,"height");
-};
-dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_36a){
-return dojo.html._callDeprecated("setContentBoxWidth","setContentBox",arguments,"width");
-};
-dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_36c){
-return dojo.html._callDeprecated("setContentBoxHeight","setContentBox",arguments,"height");
-};
-dojo.provide("dojo.lfx.html");
-dojo.lfx.html._byId=function(_36d){
-if(!_36d){
-return [];
-}
-if(dojo.lang.isArrayLike(_36d)){
-if(!_36d.alreadyChecked){
-var n=[];
-dojo.lang.forEach(_36d,function(node){
-n.push(dojo.byId(node));
-});
-n.alreadyChecked=true;
-return n;
-}else{
-return _36d;
-}
-}else{
-var n=[];
-n.push(dojo.byId(_36d));
-n.alreadyChecked=true;
-return n;
-}
-};
-dojo.lfx.html.propertyAnimation=function(_370,_371,_372,_373,_374){
-_370=dojo.lfx.html._byId(_370);
-var _375={"propertyMap":_371,"nodes":_370,"duration":_372,"easing":_373||dojo.lfx.easeDefault};
-var _376=function(args){
-if(args.nodes.length==1){
-var pm=args.propertyMap;
-if(!dojo.lang.isArray(args.propertyMap)){
-var parr=[];
-for(var _37a in pm){
-pm[_37a].property=_37a;
-parr.push(pm[_37a]);
-}
-pm=args.propertyMap=parr;
-}
-dojo.lang.forEach(pm,function(prop){
-if(dj_undef("start",prop)){
-if(prop.property!="opacity"){
-prop.start=parseInt(dojo.html.getComputedStyle(args.nodes[0],prop.property));
-}else{
-prop.start=dojo.html.getOpacity(args.nodes[0]);
-}
-}
-});
-}
-};
-var _37c=function(_37d){
-var _37e=[];
-dojo.lang.forEach(_37d,function(c){
-_37e.push(Math.round(c));
-});
-return _37e;
-};
-var _380=function(n,_382){
-n=dojo.byId(n);
-if(!n||!n.style){
-return;
-}
-for(var s in _382){
-try{
-if(s=="opacity"){
-dojo.html.setOpacity(n,_382[s]);
-}else{
-n.style[s]=_382[s];
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-};
-var _384=function(_385){
-this._properties=_385;
-this.diffs=new Array(_385.length);
-dojo.lang.forEach(_385,function(prop,i){
-if(dojo.lang.isFunction(prop.start)){
-prop.start=prop.start(prop,i);
-}
-if(dojo.lang.isFunction(prop.end)){
-prop.end=prop.end(prop,i);
-}
-if(dojo.lang.isArray(prop.start)){
-this.diffs[i]=null;
-}else{
-if(prop.start instanceof dojo.gfx.color.Color){
-prop.startRgb=prop.start.toRgb();
-prop.endRgb=prop.end.toRgb();
-}else{
-this.diffs[i]=prop.end-prop.start;
-}
-}
-},this);
-this.getValue=function(n){
-var ret={};
-dojo.lang.forEach(this._properties,function(prop,i){
-var _38c=null;
-if(dojo.lang.isArray(prop.start)){
-}else{
-if(prop.start instanceof dojo.gfx.color.Color){
-_38c=(prop.units||"rgb")+"(";
-for(var j=0;j<prop.startRgb.length;j++){
-_38c+=Math.round(((prop.endRgb[j]-prop.startRgb[j])*n)+prop.startRgb[j])+(j<prop.startRgb.length-1?",":"");
-}
-_38c+=")";
-}else{
-_38c=((this.diffs[i])*n)+prop.start+(prop.property!="opacity"?prop.units||"px":"");
-}
-}
-ret[dojo.html.toCamelCase(prop.property)]=_38c;
-},this);
-return ret;
-};
-};
-var anim=new dojo.lfx.Animation({beforeBegin:function(){
-_376(_375);
-anim.curve=new _384(_375.propertyMap);
-},onAnimate:function(_38f){
-dojo.lang.forEach(_375.nodes,function(node){
-_380(node,_38f);
-});
-}},_375.duration,null,_375.easing);
-if(_374){
-for(var x in _374){
-if(dojo.lang.isFunction(_374[x])){
-anim.connect(x,anim,_374[x]);
-}
-}
-}
-return anim;
-};
-dojo.lfx.html._makeFadeable=function(_392){
-var _393=function(node){
-if(dojo.render.html.ie){
-if((node.style.zoom.length==0)&&(dojo.html.getStyle(node,"zoom")=="normal")){
-node.style.zoom="1";
-}
-if((node.style.width.length==0)&&(dojo.html.getStyle(node,"width")=="auto")){
-node.style.width="auto";
-}
-}
-};
-if(dojo.lang.isArrayLike(_392)){
-dojo.lang.forEach(_392,_393);
-}else{
-_393(_392);
-}
-};
-dojo.lfx.html.fade=function(_395,_396,_397,_398,_399){
-_395=dojo.lfx.html._byId(_395);
-var _39a={property:"opacity"};
-if(!dj_undef("start",_396)){
-_39a.start=_396.start;
-}else{
-_39a.start=function(){
-return dojo.html.getOpacity(_395[0]);
-};
-}
-if(!dj_undef("end",_396)){
-_39a.end=_396.end;
-}else{
-dojo.raise("dojo.lfx.html.fade needs an end value");
-}
-var anim=dojo.lfx.propertyAnimation(_395,[_39a],_397,_398);
-anim.connect("beforeBegin",function(){
-dojo.lfx.html._makeFadeable(_395);
-});
-if(_399){
-anim.connect("onEnd",function(){
-_399(_395,anim);
-});
-}
-return anim;
-};
-dojo.lfx.html.fadeIn=function(_39c,_39d,_39e,_39f){
-return dojo.lfx.html.fade(_39c,{end:1},_39d,_39e,_39f);
-};
-dojo.lfx.html.fadeOut=function(_3a0,_3a1,_3a2,_3a3){
-return dojo.lfx.html.fade(_3a0,{end:0},_3a1,_3a2,_3a3);
-};
-dojo.lfx.html.fadeShow=function(_3a4,_3a5,_3a6,_3a7){
-_3a4=dojo.lfx.html._byId(_3a4);
-dojo.lang.forEach(_3a4,function(node){
-dojo.html.setOpacity(node,0);
-});
-var anim=dojo.lfx.html.fadeIn(_3a4,_3a5,_3a6,_3a7);
-anim.connect("beforeBegin",function(){
-if(dojo.lang.isArrayLike(_3a4)){
-dojo.lang.forEach(_3a4,dojo.html.show);
-}else{
-dojo.html.show(_3a4);
-}
-});
-return anim;
-};
-dojo.lfx.html.fadeHide=function(_3aa,_3ab,_3ac,_3ad){
-var anim=dojo.lfx.html.fadeOut(_3aa,_3ab,_3ac,function(){
-if(dojo.lang.isArrayLike(_3aa)){
-dojo.lang.forEach(_3aa,dojo.html.hide);
-}else{
-dojo.html.hide(_3aa);
-}
-if(_3ad){
-_3ad(_3aa,anim);
-}
-});
-return anim;
-};
-dojo.lfx.html.wipeIn=function(_3af,_3b0,_3b1,_3b2){
-_3af=dojo.lfx.html._byId(_3af);
-var _3b3=[];
-dojo.lang.forEach(_3af,function(node){
-var _3b5={};
-var _3b6,_3b7,_3b8;
-with(node.style){
-_3b6=top;
-_3b7=left;
-_3b8=position;
-top="-9999px";
-left="-9999px";
-position="absolute";
-display="";
-}
-var _3b9=dojo.html.getBorderBox(node).height;
-with(node.style){
-top=_3b6;
-left=_3b7;
-position=_3b8;
-display="none";
-}
-var anim=dojo.lfx.propertyAnimation(node,{"height":{start:1,end:function(){
-return _3b9;
-}}},_3b0,_3b1);
-anim.connect("beforeBegin",function(){
-_3b5.overflow=node.style.overflow;
-_3b5.height=node.style.height;
-with(node.style){
-overflow="hidden";
-_3b9="1px";
-}
-dojo.html.show(node);
-});
-anim.connect("onEnd",function(){
-with(node.style){
-overflow=_3b5.overflow;
-_3b9=_3b5.height;
-}
-if(_3b2){
-_3b2(node,anim);
-}
-});
-_3b3.push(anim);
-});
-return dojo.lfx.combine(_3b3);
-};
-dojo.lfx.html.wipeOut=function(_3bb,_3bc,_3bd,_3be){
-_3bb=dojo.lfx.html._byId(_3bb);
-var _3bf=[];
-dojo.lang.forEach(_3bb,function(node){
-var _3c1={};
-var anim=dojo.lfx.propertyAnimation(node,{"height":{start:function(){
-return dojo.html.getContentBox(node).height;
-},end:1}},_3bc,_3bd,{"beforeBegin":function(){
-_3c1.overflow=node.style.overflow;
-_3c1.height=node.style.height;
-with(node.style){
-overflow="hidden";
-}
-dojo.html.show(node);
-},"onEnd":function(){
-dojo.html.hide(node);
-with(node.style){
-overflow=_3c1.overflow;
-height=_3c1.height;
-}
-if(_3be){
-_3be(node,anim);
-}
-}});
-_3bf.push(anim);
-});
-return dojo.lfx.combine(_3bf);
-};
-dojo.lfx.html.slideTo=function(_3c3,_3c4,_3c5,_3c6,_3c7){
-_3c3=dojo.lfx.html._byId(_3c3);
-var _3c8=[];
-var _3c9=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_3c4)){
-dojo.deprecated("dojo.lfx.html.slideTo(node, array)","use dojo.lfx.html.slideTo(node, {top: value, left: value});","0.5");
-_3c4={top:_3c4[0],left:_3c4[1]};
-}
-dojo.lang.forEach(_3c3,function(node){
-var top=null;
-var left=null;
-var init=(function(){
-var _3ce=node;
-return function(){
-var pos=_3c9(_3ce,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_3c9(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_3c9(node,"left"))||0);
-if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_3ce,true);
-dojo.html.setStyleAttributes(_3ce,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-top=ret.y;
-left=ret.x;
-}
-};
-})();
-init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:(_3c4.top||0)},"left":{start:left,end:(_3c4.left||0)}},_3c5,_3c6,{"beforeBegin":init});
-if(_3c7){
-anim.connect("onEnd",function(){
-_3c7(_3c3,anim);
-});
-}
-_3c8.push(anim);
-});
-return dojo.lfx.combine(_3c8);
-};
-dojo.lfx.html.slideBy=function(_3d2,_3d3,_3d4,_3d5,_3d6){
-_3d2=dojo.lfx.html._byId(_3d2);
-var _3d7=[];
-var _3d8=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_3d3)){
-dojo.deprecated("dojo.lfx.html.slideBy(node, array)","use dojo.lfx.html.slideBy(node, {top: value, left: value});","0.5");
-_3d3={top:_3d3[0],left:_3d3[1]};
-}
-dojo.lang.forEach(_3d2,function(node){
-var top=null;
-var left=null;
-var init=(function(){
-var _3dd=node;
-return function(){
-var pos=_3d8(_3dd,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_3d8(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_3d8(node,"left"))||0);
-if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_3dd,true);
-dojo.html.setStyleAttributes(_3dd,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-top=ret.y;
-left=ret.x;
-}
-};
-})();
-init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:top+(_3d3.top||0)},"left":{start:left,end:left+(_3d3.left||0)}},_3d4,_3d5).connect("beforeBegin",init);
-if(_3d6){
-anim.connect("onEnd",function(){
-_3d6(_3d2,anim);
-});
-}
-_3d7.push(anim);
-});
-return dojo.lfx.combine(_3d7);
-};
-dojo.lfx.html.explode=function(_3e1,_3e2,_3e3,_3e4,_3e5){
-var h=dojo.html;
-_3e1=dojo.byId(_3e1);
-_3e2=dojo.byId(_3e2);
-var _3e7=h.toCoordinateObject(_3e1,true);
-var _3e8=document.createElement("div");
-h.copyStyle(_3e8,_3e2);
-if(_3e2.explodeClassName){
-_3e8.className=_3e2.explodeClassName;
-}
-with(_3e8.style){
-position="absolute";
-display="none";
-var _3e9=h.getStyle(_3e1,"background-color");
-backgroundColor=_3e9?_3e9.toLowerCase():"transparent";
-backgroundColor=(backgroundColor=="transparent")?"rgb(221, 221, 221)":backgroundColor;
-}
-dojo.body().appendChild(_3e8);
-with(_3e2.style){
-visibility="hidden";
-display="block";
-}
-var _3ea=h.toCoordinateObject(_3e2,true);
-with(_3e2.style){
-display="none";
-visibility="visible";
-}
-var _3eb={opacity:{start:0.5,end:1}};
-dojo.lang.forEach(["height","width","top","left"],function(type){
-_3eb[type]={start:_3e7[type],end:_3ea[type]};
-});
-var anim=new dojo.lfx.propertyAnimation(_3e8,_3eb,_3e3,_3e4,{"beforeBegin":function(){
-h.setDisplay(_3e8,"block");
-},"onEnd":function(){
-h.setDisplay(_3e2,"block");
-_3e8.parentNode.removeChild(_3e8);
-}});
-if(_3e5){
-anim.connect("onEnd",function(){
-_3e5(_3e2,anim);
-});
-}
-return anim;
-};
-dojo.lfx.html.implode=function(_3ee,end,_3f0,_3f1,_3f2){
-var h=dojo.html;
-_3ee=dojo.byId(_3ee);
-end=dojo.byId(end);
-var _3f4=dojo.html.toCoordinateObject(_3ee,true);
-var _3f5=dojo.html.toCoordinateObject(end,true);
-var _3f6=document.createElement("div");
-dojo.html.copyStyle(_3f6,_3ee);
-if(_3ee.explodeClassName){
-_3f6.className=_3ee.explodeClassName;
-}
-dojo.html.setOpacity(_3f6,0.3);
-with(_3f6.style){
-position="absolute";
-display="none";
-backgroundColor=h.getStyle(_3ee,"background-color").toLowerCase();
-}
-dojo.body().appendChild(_3f6);
-var _3f7={opacity:{start:1,end:0.5}};
-dojo.lang.forEach(["height","width","top","left"],function(type){
-_3f7[type]={start:_3f4[type],end:_3f5[type]};
-});
-var anim=new dojo.lfx.propertyAnimation(_3f6,_3f7,_3f0,_3f1,{"beforeBegin":function(){
-dojo.html.hide(_3ee);
-dojo.html.show(_3f6);
-},"onEnd":function(){
-_3f6.parentNode.removeChild(_3f6);
-}});
-if(_3f2){
-anim.connect("onEnd",function(){
-_3f2(_3ee,anim);
-});
-}
-return anim;
-};
-dojo.lfx.html.highlight=function(_3fa,_3fb,_3fc,_3fd,_3fe){
-_3fa=dojo.lfx.html._byId(_3fa);
-var _3ff=[];
-dojo.lang.forEach(_3fa,function(node){
-var _401=dojo.html.getBackgroundColor(node);
-var bg=dojo.html.getStyle(node,"background-color").toLowerCase();
-var _403=dojo.html.getStyle(node,"background-image");
-var _404=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
-while(_401.length>3){
-_401.pop();
-}
-var rgb=new dojo.gfx.color.Color(_3fb);
-var _406=new dojo.gfx.color.Color(_401);
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:rgb,end:_406}},_3fc,_3fd,{"beforeBegin":function(){
-if(_403){
-node.style.backgroundImage="none";
-}
-node.style.backgroundColor="rgb("+rgb.toRgb().join(",")+")";
-},"onEnd":function(){
-if(_403){
-node.style.backgroundImage=_403;
-}
-if(_404){
-node.style.backgroundColor="transparent";
-}
-if(_3fe){
-_3fe(node,anim);
-}
-}});
-_3ff.push(anim);
-});
-return dojo.lfx.combine(_3ff);
-};
-dojo.lfx.html.unhighlight=function(_408,_409,_40a,_40b,_40c){
-_408=dojo.lfx.html._byId(_408);
-var _40d=[];
-dojo.lang.forEach(_408,function(node){
-var _40f=new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
-var rgb=new dojo.gfx.color.Color(_409);
-var _411=dojo.html.getStyle(node,"background-image");
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:_40f,end:rgb}},_40a,_40b,{"beforeBegin":function(){
-if(_411){
-node.style.backgroundImage="none";
-}
-node.style.backgroundColor="rgb("+_40f.toRgb().join(",")+")";
-},"onEnd":function(){
-if(_40c){
-_40c(node,anim);
-}
-}});
-_40d.push(anim);
-});
-return dojo.lfx.combine(_40d);
-};
-dojo.lang.mixin(dojo.lfx,dojo.lfx.html);
-
-
-__CPAN_EDITION__ lfx build.txt
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/lang/common.js,
-../src/lang/array.js,
-../src/gfx/color.js,
-../src/lang/func.js,
-../src/lfx/Animation.js,
-../src/dom.js,
-../src/html/common.js,
-../src/uri/Uri.js,
-../src/html/style.js,
-../src/html/display.js,
-../src/html/color.js,
-../src/html/layout.js,
-../src/lfx/html.js
-
-		
-__CPAN_EDITION__ minimal dojo.js
-/*
-	Copyright (c) 2004-2006, 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/community/licensing.shtml
-*/
-
-/*
-	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(typeof dojo=="undefined"){
-var dj_global=this;
-var dj_currentContext=this;
-function dj_undef(_1,_2){
-return (typeof (_2||dj_currentContext)[_1]=="undefined");
-}
-if(dj_undef("djConfig",this)){
-var djConfig={};
-}
-if(dj_undef("dojo",this)){
-var dojo={};
-}
-dojo.global=function(){
-return dj_currentContext;
-};
-dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
-with(dojo.version){
-return major+"."+minor+"."+patch+flag+" ("+revision+")";
-}
-}};
-dojo.evalProp=function(_3,_4,_5){
-if((!_4)||(!_3)){
-return undefined;
-}
-if(!dj_undef(_3,_4)){
-return _4[_3];
-}
-return (_5?(_4[_3]={}):undefined);
-};
-dojo.parseObjPath=function(_6,_7,_8){
-var _9=(_7||dojo.global());
-var _a=_6.split(".");
-var _b=_a.pop();
-for(var i=0,l=_a.length;i<l&&_9;i++){
-_9=dojo.evalProp(_a[i],_9,_8);
-}
-return {obj:_9,prop:_b};
-};
-dojo.evalObjPath=function(_e,_f){
-if(typeof _e!="string"){
-return dojo.global();
-}
-if(_e.indexOf(".")==-1){
-return dojo.evalProp(_e,dojo.global(),_f);
-}
-var ref=dojo.parseObjPath(_e,dojo.global(),_f);
-if(ref){
-return dojo.evalProp(ref.prop,ref.obj,_f);
-}
-return null;
-};
-dojo.errorToString=function(_11){
-if(!dj_undef("message",_11)){
-return _11.message;
-}else{
-if(!dj_undef("description",_11)){
-return _11.description;
-}else{
-return _11;
-}
-}
-};
-dojo.raise=function(_12,_13){
-if(_13){
-_12=_12+": "+dojo.errorToString(_13);
-}else{
-_12=dojo.errorToString(_12);
-}
-try{
-if(djConfig.isDebug){
-dojo.hostenv.println("FATAL exception raised: "+_12);
-}
-}
-catch(e){
-}
-throw _13||Error(_12);
-};
-dojo.debug=function(){
-};
-dojo.debugShallow=function(obj){
-};
-dojo.profile={start:function(){
-},end:function(){
-},stop:function(){
-},dump:function(){
-}};
-function dj_eval(_15){
-return dj_global.eval?dj_global.eval(_15):eval(_15);
-}
-dojo.unimplemented=function(_16,_17){
-var _18="'"+_16+"' not implemented";
-if(_17!=null){
-_18+=" "+_17;
-}
-dojo.raise(_18);
-};
-dojo.deprecated=function(_19,_1a,_1b){
-var _1c="DEPRECATED: "+_19;
-if(_1a){
-_1c+=" "+_1a;
-}
-if(_1b){
-_1c+=" -- will be removed in version: "+_1b;
-}
-dojo.debug(_1c);
-};
-dojo.render=(function(){
-function vscaffold(_1d,_1e){
-var tmp={capable:false,support:{builtin:false,plugin:false},prefixes:_1d};
-for(var i=0;i<_1e.length;i++){
-tmp[_1e[i]]=false;
-}
-return tmp;
-}
-return {name:"",ver:dojo.version,os:{win:false,linux:false,osx:false},html:vscaffold(["html"],["ie","opera","khtml","safari","moz"]),svg:vscaffold(["svg"],["corel","adobe","batik"]),vml:vscaffold(["vml"],["ie"]),swf:vscaffold(["Swf","Flash","Mm"],["mm"]),swt:vscaffold(["Swt"],["ibm"])};
-})();
-dojo.hostenv=(function(){
-var _21={isDebug:false,allowQueryConfig:false,baseScriptUri:"",baseRelativePath:"",libraryScriptUri:"",iePreventClobber:false,ieClobberMinimal:true,preventBackButtonFix:true,delayMozLoadingFix:false,searchIds:[],parseWidgets:true};
-if(typeof djConfig=="undefined"){
-djConfig=_21;
-}else{
-for(var _22 in _21){
-if(typeof djConfig[_22]=="undefined"){
-djConfig[_22]=_21[_22];
-}
-}
-}
-return {name_:"(unset)",version_:"(unset)",getName:function(){
-return this.name_;
-},getVersion:function(){
-return this.version_;
-},getText:function(uri){
-dojo.unimplemented("getText","uri="+uri);
-}};
-})();
-dojo.hostenv.getBaseScriptUri=function(){
-if(djConfig.baseScriptUri.length){
-return djConfig.baseScriptUri;
-}
-var uri=new String(djConfig.libraryScriptUri||djConfig.baseRelativePath);
-if(!uri){
-dojo.raise("Nothing returned by getLibraryScriptUri(): "+uri);
-}
-var _25=uri.lastIndexOf("/");
-djConfig.baseScriptUri=djConfig.baseRelativePath;
-return djConfig.baseScriptUri;
-};
-(function(){
-var _26={pkgFileName:"__package__",loading_modules_:{},loaded_modules_:{},addedToLoadingCount:[],removedFromLoadingCount:[],inFlightCount:0,modulePrefixes_:{dojo:{name:"dojo",value:"src"}},setModulePrefix:function(_27,_28){
-this.modulePrefixes_[_27]={name:_27,value:_28};
-},moduleHasPrefix:function(_29){
-var mp=this.modulePrefixes_;
-return Boolean(mp[_29]&&mp[_29].value);
-},getModulePrefix:function(_2b){
-if(this.moduleHasPrefix(_2b)){
-return this.modulePrefixes_[_2b].value;
-}
-return _2b;
-},getTextStack:[],loadUriStack:[],loadedUris:[],post_load_:false,modulesLoadedListeners:[],unloadListeners:[],loadNotifying:false};
-for(var _2c in _26){
-dojo.hostenv[_2c]=_26[_2c];
-}
-})();
-dojo.hostenv.loadPath=function(_2d,_2e,cb){
-var uri;
-if(_2d.charAt(0)=="/"||_2d.match(/^\w+:/)){
-uri=_2d;
-}else{
-uri=this.getBaseScriptUri()+_2d;
-}
-if(djConfig.cacheBust&&dojo.render.html.capable){
-uri+="?"+String(djConfig.cacheBust).replace(/\W+/g,"");
-}
-try{
-return !_2e?this.loadUri(uri,cb):this.loadUriAndCheck(uri,_2e,cb);
-}
-catch(e){
-dojo.debug(e);
-return false;
-}
-};
-dojo.hostenv.loadUri=function(uri,cb){
-if(this.loadedUris[uri]){
-return true;
-}
-var _33=this.getText(uri,null,true);
-if(!_33){
-return false;
-}
-this.loadedUris[uri]=true;
-if(cb){
-_33="("+_33+")";
-}
-var _34=dj_eval(_33);
-if(cb){
-cb(_34);
-}
-return true;
-};
-dojo.hostenv.loadUriAndCheck=function(uri,_36,cb){
-var ok=true;
-try{
-ok=this.loadUri(uri,cb);
-}
-catch(e){
-dojo.debug("failed loading ",uri," with error: ",e);
-}
-return Boolean(ok&&this.findModule(_36,false));
-};
-dojo.loaded=function(){
-};
-dojo.unloaded=function(){
-};
-dojo.hostenv.loaded=function(){
-this.loadNotifying=true;
-this.post_load_=true;
-var mll=this.modulesLoadedListeners;
-for(var x=0;x<mll.length;x++){
-mll[x]();
-}
-this.modulesLoadedListeners=[];
-this.loadNotifying=false;
-dojo.loaded();
-};
-dojo.hostenv.unloaded=function(){
-var mll=this.unloadListeners;
-while(mll.length){
-(mll.pop())();
-}
-dojo.unloaded();
-};
-dojo.addOnLoad=function(obj,_3d){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.modulesLoadedListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.modulesLoadedListeners.push(function(){
-obj[_3d]();
-});
-}
-}
-if(dh.post_load_&&dh.inFlightCount==0&&!dh.loadNotifying){
-dh.callLoaded();
-}
-};
-dojo.addOnUnload=function(obj,_40){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.unloadListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.unloadListeners.push(function(){
-obj[_40]();
-});
-}
-}
-};
-dojo.hostenv.modulesLoaded=function(){
-if(this.post_load_){
-return;
-}
-if(this.loadUriStack.length==0&&this.getTextStack.length==0){
-if(this.inFlightCount>0){
-dojo.debug("files still in flight!");
-return;
-}
-dojo.hostenv.callLoaded();
-}
-};
-dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
-setTimeout("dojo.hostenv.loaded();",0);
-}else{
-dojo.hostenv.loaded();
-}
-};
-dojo.hostenv.getModuleSymbols=function(_42){
-var _43=_42.split(".");
-for(var i=_43.length;i>0;i--){
-var _45=_43.slice(0,i).join(".");
-if((i==1)&&!this.moduleHasPrefix(_45)){
-_43[0]="../"+_43[0];
-}else{
-var _46=this.getModulePrefix(_45);
-if(_46!=_45){
-_43.splice(0,i,_46);
-break;
-}
-}
-}
-return _43;
-};
-dojo.hostenv._global_omit_module_check=false;
-dojo.hostenv.loadModule=function(_47,_48,_49){
-if(!_47){
-return;
-}
-_49=this._global_omit_module_check||_49;
-var _4a=this.findModule(_47,false);
-if(_4a){
-return _4a;
-}
-if(dj_undef(_47,this.loading_modules_)){
-this.addedToLoadingCount.push(_47);
-}
-this.loading_modules_[_47]=1;
-var _4b=_47.replace(/\./g,"/")+".js";
-var _4c=_47.split(".");
-var _4d=this.getModuleSymbols(_47);
-var _4e=((_4d[0].charAt(0)!="/")&&!_4d[0].match(/^\w+:/));
-var _4f=_4d[_4d.length-1];
-var ok;
-if(_4f=="*"){
-_47=_4c.slice(0,-1).join(".");
-while(_4d.length){
-_4d.pop();
-_4d.push(this.pkgFileName);
-_4b=_4d.join("/")+".js";
-if(_4e&&_4b.charAt(0)=="/"){
-_4b=_4b.slice(1);
-}
-ok=this.loadPath(_4b,!_49?_47:null);
-if(ok){
-break;
-}
-_4d.pop();
-}
-}else{
-_4b=_4d.join("/")+".js";
-_47=_4c.join(".");
-var _51=!_49?_47:null;
-ok=this.loadPath(_4b,_51);
-if(!ok&&!_48){
-_4d.pop();
-while(_4d.length){
-_4b=_4d.join("/")+".js";
-ok=this.loadPath(_4b,_51);
-if(ok){
-break;
-}
-_4d.pop();
-_4b=_4d.join("/")+"/"+this.pkgFileName+".js";
-if(_4e&&_4b.charAt(0)=="/"){
-_4b=_4b.slice(1);
-}
-ok=this.loadPath(_4b,_51);
-if(ok){
-break;
-}
-}
-}
-if(!ok&&!_49){
-dojo.raise("Could not load '"+_47+"'; last tried '"+_4b+"'");
-}
-}
-if(!_49&&!this["isXDomain"]){
-_4a=this.findModule(_47,false);
-if(!_4a){
-dojo.raise("symbol '"+_47+"' is not defined after loading '"+_4b+"'");
-}
-}
-return _4a;
-};
-dojo.hostenv.startPackage=function(_52){
-var _53=String(_52);
-var _54=_53;
-var _55=_52.split(/\./);
-if(_55[_55.length-1]=="*"){
-_55.pop();
-_54=_55.join(".");
-}
-var _56=dojo.evalObjPath(_54,true);
-this.loaded_modules_[_53]=_56;
-this.loaded_modules_[_54]=_56;
-return _56;
-};
-dojo.hostenv.findModule=function(_57,_58){
-var lmn=String(_57);
-if(this.loaded_modules_[lmn]){
-return this.loaded_modules_[lmn];
-}
-if(_58){
-dojo.raise("no loaded module named '"+_57+"'");
-}
-return null;
-};
-dojo.kwCompoundRequire=function(_5a){
-var _5b=_5a["common"]||[];
-var _5c=_5a[dojo.hostenv.name_]?_5b.concat(_5a[dojo.hostenv.name_]||[]):_5b.concat(_5a["default"]||[]);
-for(var x=0;x<_5c.length;x++){
-var _5e=_5c[x];
-if(_5e.constructor==Array){
-dojo.hostenv.loadModule.apply(dojo.hostenv,_5e);
-}else{
-dojo.hostenv.loadModule(_5e);
-}
-}
-};
-dojo.require=function(_5f){
-dojo.hostenv.loadModule.apply(dojo.hostenv,arguments);
-};
-dojo.requireIf=function(_60,_61){
-var _62=arguments[0];
-if((_62===true)||(_62=="common")||(_62&&dojo.render[_62].capable)){
-var _63=[];
-for(var i=1;i<arguments.length;i++){
-_63.push(arguments[i]);
-}
-dojo.require.apply(dojo,_63);
-}
-};
-dojo.requireAfterIf=dojo.requireIf;
-dojo.provide=function(_65){
-return dojo.hostenv.startPackage.apply(dojo.hostenv,arguments);
-};
-dojo.registerModulePath=function(_66,_67){
-return dojo.hostenv.setModulePrefix(_66,_67);
-};
 dojo.setModulePrefix=function(_68,_69){
 dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
 return dojo.registerModulePath(_68,_69);
@@ -74692,7 +50672,7 @@
 }
 }
 if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
+if(dojo.render.html.opera||(dojo.render.html.moz&&(djConfig["enableMozDomContentLoaded"]===true))){
 document.addEventListener("DOMContentLoaded",dj_load_init,null);
 }
 window.addEventListener("load",dj_load_init,null);
@@ -74840,14611 +50820,100 @@
 return _ec;
 };
 }
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _ee=false;
-var _ef=false;
-var _f0=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_ee=true;
-}else{
-if(typeof this["load"]=="function"){
-_ef=true;
-}else{
-if(window.widget){
-_f0=true;
-}
-}
-}
-var _f1=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-_f1.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_ee)&&(!_f0)){
-_f1.push("browser_debug.js");
-}
-var _f2=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_f2=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<_f1.length;x++){
-var _f4=_f2+"src/"+_f1[x];
-if(_ee||_ef){
-load(_f4);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_f4+"'></scr"+"ipt>");
-}
-catch(e){
-var _f5=document.createElement("script");
-_f5.src=_f4;
-document.getElementsByTagName("head")[0].appendChild(_f5);
-}
-}
-}
-})();
+dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&!djConfig["useXDomain"],"dojo.browser_debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&djConfig["useXDomain"],"dojo.browser_debug_xd");
 
 
 __CPAN_EDITION__ minimal build.txt
+Files baked into this build:
+dojoGuardStart.js
+../src/bootstrap1.js
+../src/loader.js
+dojoGuardEnd.js
+../src/hostenv_browser.js
+__CPAN_EDITION__ src dojo.js
+if(typeof dojo == "undefined"){
+	dj_usingBootstrap = true; //Needed for bootstrap2.js to work properly.
+	(function(){
+		var hostEnv = "browser";
+		var isRhino = false;
+		var isSpidermonkey = false;
+		var isDashboard = false;
+		if((typeof this["load"] == "function")&&((typeof this["Packages"] == "function")||(typeof this["Packages"] == "object"))){
+			var isRhino = true;
+			hostEnv = "rhino";
+		}else if(typeof this["load"] == "function"){
+			isSpidermonkey  = true;
+			hostEnv = "spidermonkey";
+		}else if(window.widget){
+			isDashboard = true;
+			hostEnv = "dashboard";
+		}
+		var tmps = ["bootstrap1.js", "loader.js", "hostenv_"+hostEnv+".js"];
+	
+		if((this["djConfig"])&&((djConfig["forceXDomain"])||(djConfig["useXDomain"]))){
+			tmps.push("loader_xd.js");
+		}
+	
+		if(hostEnv == "dashboard"){
+			tmps.splice(1, 0, "hostenv_browser.js");
+		}
 
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js
-
-		
-__CPAN_EDITION__ moxie dojo.js
-/*
-	Copyright (c) 2004-2006, 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/community/licensing.shtml
-*/
-
-/*
-	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(typeof dojo=="undefined"){
-var dj_global=this;
-var dj_currentContext=this;
-function dj_undef(_1,_2){
-return (typeof (_2||dj_currentContext)[_1]=="undefined");
-}
-if(dj_undef("djConfig",this)){
-var djConfig={};
-}
-if(dj_undef("dojo",this)){
-var dojo={};
-}
-dojo.global=function(){
-return dj_currentContext;
+		if((this["djConfig"])&&(djConfig["baseScriptUri"])){
+			var root = djConfig["baseScriptUri"];
+		}else if((this["djConfig"])&&(djConfig["baseRelativePath"])){
+			var root = djConfig["baseRelativePath"];
+		}else{
+			var root = "./";
+			if(isSpidermonkey){
+				// auto-detect the base path via an exception. Hack!
+				try{ throw new Error(""); }catch(e){ root = e.fileName.split("dojo.js")[0]; };
+			}
+			if(!this["djConfig"]){
+				djConfig = { baseRelativePath: root };
+			}
+	
+			// attempt to figure out the path to dojo if it isn't set in the config
+			if((this["document"])&&(this["document"]["getElementsByTagName"])){
+				var scripts = document.getElementsByTagName("script");
+				var rePkg = /(__package__|dojo)\.js([\?\.]|$)/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) {
+						root = src.substring(0, m.index);
+						if(!this["djConfig"]) { djConfig = {}; }
+						djConfig["baseScriptUri"] = djConfig["baseRelativePath"] = root;
+						break;
+					}
+				}
+			}
+		}
+	
+		var loaderRoot = root;
+		if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
+			loaderRoot = djConfig["baseLoaderUri"];
+		}
+	
+		for(var x=0; x < tmps.length; x++){
+			var spath = loaderRoot+"src/"+tmps[x];
+			if(isRhino||isSpidermonkey){
+				load(spath);
+			} else {
+				try {
+					document.write("<scr"+"ipt type='text/javascript' src='"+spath+"'></scr"+"ipt>");
+				} catch (e) {
+					var script = document.createElement("script");
+					script.src = spath;
+					document.getElementsByTagName("head")[0].appendChild(script);
+				}
+			}
+		}
+	})();
 };
-dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
-with(dojo.version){
-return major+"."+minor+"."+patch+flag+" ("+revision+")";
-}
-}};
-dojo.evalProp=function(_3,_4,_5){
-if((!_4)||(!_3)){
-return undefined;
-}
-if(!dj_undef(_3,_4)){
-return _4[_3];
-}
-return (_5?(_4[_3]={}):undefined);
-};
-dojo.parseObjPath=function(_6,_7,_8){
-var _9=(_7||dojo.global());
-var _a=_6.split(".");
-var _b=_a.pop();
-for(var i=0,l=_a.length;i<l&&_9;i++){
-_9=dojo.evalProp(_a[i],_9,_8);
-}
-return {obj:_9,prop:_b};
-};
-dojo.evalObjPath=function(_e,_f){
-if(typeof _e!="string"){
-return dojo.global();
-}
-if(_e.indexOf(".")==-1){
-return dojo.evalProp(_e,dojo.global(),_f);
-}
-var ref=dojo.parseObjPath(_e,dojo.global(),_f);
-if(ref){
-return dojo.evalProp(ref.prop,ref.obj,_f);
-}
-return null;
-};
-dojo.errorToString=function(_11){
-if(!dj_undef("message",_11)){
-return _11.message;
-}else{
-if(!dj_undef("description",_11)){
-return _11.description;
-}else{
-return _11;
-}
-}
-};
-dojo.raise=function(_12,_13){
-if(_13){
-_12=_12+": "+dojo.errorToString(_13);
-}else{
-_12=dojo.errorToString(_12);
-}
-try{
-if(djConfig.isDebug){
-dojo.hostenv.println("FATAL exception raised: "+_12);
-}
-}
-catch(e){
-}
-throw _13||Error(_12);
-};
-dojo.debug=function(){
-};
-dojo.debugShallow=function(obj){
-};
-dojo.profile={start:function(){
-},end:function(){
-},stop:function(){
-},dump:function(){
-}};
-function dj_eval(_15){
-return dj_global.eval?dj_global.eval(_15):eval(_15);
-}
-dojo.unimplemented=function(_16,_17){
-var _18="'"+_16+"' not implemented";
-if(_17!=null){
-_18+=" "+_17;
-}
-dojo.raise(_18);
-};
-dojo.deprecated=function(_19,_1a,_1b){
-var _1c="DEPRECATED: "+_19;
-if(_1a){
-_1c+=" "+_1a;
-}
-if(_1b){
-_1c+=" -- will be removed in version: "+_1b;
-}
-dojo.debug(_1c);
-};
-dojo.render=(function(){
-function vscaffold(_1d,_1e){
-var tmp={capable:false,support:{builtin:false,plugin:false},prefixes:_1d};
-for(var i=0;i<_1e.length;i++){
-tmp[_1e[i]]=false;
-}
-return tmp;
-}
-return {name:"",ver:dojo.version,os:{win:false,linux:false,osx:false},html:vscaffold(["html"],["ie","opera","khtml","safari","moz"]),svg:vscaffold(["svg"],["corel","adobe","batik"]),vml:vscaffold(["vml"],["ie"]),swf:vscaffold(["Swf","Flash","Mm"],["mm"]),swt:vscaffold(["Swt"],["ibm"])};
-})();
-dojo.hostenv=(function(){
-var _21={isDebug:false,allowQueryConfig:false,baseScriptUri:"",baseRelativePath:"",libraryScriptUri:"",iePreventClobber:false,ieClobberMinimal:true,preventBackButtonFix:true,delayMozLoadingFix:false,searchIds:[],parseWidgets:true};
-if(typeof djConfig=="undefined"){
-djConfig=_21;
-}else{
-for(var _22 in _21){
-if(typeof djConfig[_22]=="undefined"){
-djConfig[_22]=_21[_22];
-}
-}
-}
-return {name_:"(unset)",version_:"(unset)",getName:function(){
-return this.name_;
-},getVersion:function(){
-return this.version_;
-},getText:function(uri){
-dojo.unimplemented("getText","uri="+uri);
-}};
-})();
-dojo.hostenv.getBaseScriptUri=function(){
-if(djConfig.baseScriptUri.length){
-return djConfig.baseScriptUri;
-}
-var uri=new String(djConfig.libraryScriptUri||djConfig.baseRelativePath);
-if(!uri){
-dojo.raise("Nothing returned by getLibraryScriptUri(): "+uri);
-}
-var _25=uri.lastIndexOf("/");
-djConfig.baseScriptUri=djConfig.baseRelativePath;
-return djConfig.baseScriptUri;
-};
-(function(){
-var _26={pkgFileName:"__package__",loading_modules_:{},loaded_modules_:{},addedToLoadingCount:[],removedFromLoadingCount:[],inFlightCount:0,modulePrefixes_:{dojo:{name:"dojo",value:"src"}},setModulePrefix:function(_27,_28){
-this.modulePrefixes_[_27]={name:_27,value:_28};
-},moduleHasPrefix:function(_29){
-var mp=this.modulePrefixes_;
-return Boolean(mp[_29]&&mp[_29].value);
-},getModulePrefix:function(_2b){
-if(this.moduleHasPrefix(_2b)){
-return this.modulePrefixes_[_2b].value;
-}
-return _2b;
-},getTextStack:[],loadUriStack:[],loadedUris:[],post_load_:false,modulesLoadedListeners:[],unloadListeners:[],loadNotifying:false};
-for(var _2c in _26){
-dojo.hostenv[_2c]=_26[_2c];
-}
-})();
-dojo.hostenv.loadPath=function(_2d,_2e,cb){
-var uri;
-if(_2d.charAt(0)=="/"||_2d.match(/^\w+:/)){
-uri=_2d;
-}else{
-uri=this.getBaseScriptUri()+_2d;
-}
-if(djConfig.cacheBust&&dojo.render.html.capable){
-uri+="?"+String(djConfig.cacheBust).replace(/\W+/g,"");
-}
-try{
-return !_2e?this.loadUri(uri,cb):this.loadUriAndCheck(uri,_2e,cb);
-}
-catch(e){
-dojo.debug(e);
-return false;
-}
-};
-dojo.hostenv.loadUri=function(uri,cb){
-if(this.loadedUris[uri]){
-return true;
-}
-var _33=this.getText(uri,null,true);
-if(!_33){
-return false;
-}
-this.loadedUris[uri]=true;
-if(cb){
-_33="("+_33+")";
-}
-var _34=dj_eval(_33);
-if(cb){
-cb(_34);
-}
-return true;
-};
-dojo.hostenv.loadUriAndCheck=function(uri,_36,cb){
-var ok=true;
-try{
-ok=this.loadUri(uri,cb);
-}
-catch(e){
-dojo.debug("failed loading ",uri," with error: ",e);
-}
-return Boolean(ok&&this.findModule(_36,false));
-};
-dojo.loaded=function(){
-};
-dojo.unloaded=function(){
-};
-dojo.hostenv.loaded=function(){
-this.loadNotifying=true;
-this.post_load_=true;
-var mll=this.modulesLoadedListeners;
-for(var x=0;x<mll.length;x++){
-mll[x]();
-}
-this.modulesLoadedListeners=[];
-this.loadNotifying=false;
-dojo.loaded();
-};
-dojo.hostenv.unloaded=function(){
-var mll=this.unloadListeners;
-while(mll.length){
-(mll.pop())();
-}
-dojo.unloaded();
-};
-dojo.addOnLoad=function(obj,_3d){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.modulesLoadedListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.modulesLoadedListeners.push(function(){
-obj[_3d]();
-});
-}
-}
-if(dh.post_load_&&dh.inFlightCount==0&&!dh.loadNotifying){
-dh.callLoaded();
-}
-};
-dojo.addOnUnload=function(obj,_40){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.unloadListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.unloadListeners.push(function(){
-obj[_40]();
-});
-}
-}
-};
-dojo.hostenv.modulesLoaded=function(){
-if(this.post_load_){
-return;
-}
-if(this.loadUriStack.length==0&&this.getTextStack.length==0){
-if(this.inFlightCount>0){
-dojo.debug("files still in flight!");
-return;
-}
-dojo.hostenv.callLoaded();
-}
-};
-dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
-setTimeout("dojo.hostenv.loaded();",0);
-}else{
-dojo.hostenv.loaded();
-}
-};
-dojo.hostenv.getModuleSymbols=function(_42){
-var _43=_42.split(".");
-for(var i=_43.length;i>0;i--){
-var _45=_43.slice(0,i).join(".");
-if((i==1)&&!this.moduleHasPrefix(_45)){
-_43[0]="../"+_43[0];
-}else{
-var _46=this.getModulePrefix(_45);
-if(_46!=_45){
-_43.splice(0,i,_46);
-break;
-}
-}
-}
-return _43;
-};
-dojo.hostenv._global_omit_module_check=false;
-dojo.hostenv.loadModule=function(_47,_48,_49){
-if(!_47){
-return;
-}
-_49=this._global_omit_module_check||_49;
-var _4a=this.findModule(_47,false);
-if(_4a){
-return _4a;
-}
-if(dj_undef(_47,this.loading_modules_)){
-this.addedToLoadingCount.push(_47);
-}
-this.loading_modules_[_47]=1;
-var _4b=_47.replace(/\./g,"/")+".js";
-var _4c=_47.split(".");
-var _4d=this.getModuleSymbols(_47);
-var _4e=((_4d[0].charAt(0)!="/")&&!_4d[0].match(/^\w+:/));
-var _4f=_4d[_4d.length-1];
-var ok;
-if(_4f=="*"){
-_47=_4c.slice(0,-1).join(".");
-while(_4d.length){
-_4d.pop();
-_4d.push(this.pkgFileName);
-_4b=_4d.join("/")+".js";
-if(_4e&&_4b.charAt(0)=="/"){
-_4b=_4b.slice(1);
-}
-ok=this.loadPath(_4b,!_49?_47:null);
-if(ok){
-break;
-}
-_4d.pop();
-}
-}else{
-_4b=_4d.join("/")+".js";
-_47=_4c.join(".");
-var _51=!_49?_47:null;
-ok=this.loadPath(_4b,_51);
-if(!ok&&!_48){
-_4d.pop();
-while(_4d.length){
-_4b=_4d.join("/")+".js";
-ok=this.loadPath(_4b,_51);
-if(ok){
-break;
-}
-_4d.pop();
-_4b=_4d.join("/")+"/"+this.pkgFileName+".js";
-if(_4e&&_4b.charAt(0)=="/"){
-_4b=_4b.slice(1);
-}
-ok=this.loadPath(_4b,_51);
-if(ok){
-break;
-}
-}
-}
-if(!ok&&!_49){
-dojo.raise("Could not load '"+_47+"'; last tried '"+_4b+"'");
-}
-}
-if(!_49&&!this["isXDomain"]){
-_4a=this.findModule(_47,false);
-if(!_4a){
-dojo.raise("symbol '"+_47+"' is not defined after loading '"+_4b+"'");
-}
-}
-return _4a;
-};
-dojo.hostenv.startPackage=function(_52){
-var _53=String(_52);
-var _54=_53;
-var _55=_52.split(/\./);
-if(_55[_55.length-1]=="*"){
-_55.pop();
-_54=_55.join(".");
-}
-var _56=dojo.evalObjPath(_54,true);
-this.loaded_modules_[_53]=_56;
-this.loaded_modules_[_54]=_56;
-return _56;
-};
-dojo.hostenv.findModule=function(_57,_58){
-var lmn=String(_57);
-if(this.loaded_modules_[lmn]){
-return this.loaded_modules_[lmn];
-}
-if(_58){
-dojo.raise("no loaded module named '"+_57+"'");
-}
-return null;
-};
-dojo.kwCompoundRequire=function(_5a){
-var _5b=_5a["common"]||[];
-var _5c=_5a[dojo.hostenv.name_]?_5b.concat(_5a[dojo.hostenv.name_]||[]):_5b.concat(_5a["default"]||[]);
-for(var x=0;x<_5c.length;x++){
-var _5e=_5c[x];
-if(_5e.constructor==Array){
-dojo.hostenv.loadModule.apply(dojo.hostenv,_5e);
-}else{
-dojo.hostenv.loadModule(_5e);
-}
-}
-};
-dojo.require=function(_5f){
-dojo.hostenv.loadModule.apply(dojo.hostenv,arguments);
-};
-dojo.requireIf=function(_60,_61){
-var _62=arguments[0];
-if((_62===true)||(_62=="common")||(_62&&dojo.render[_62].capable)){
-var _63=[];
-for(var i=1;i<arguments.length;i++){
-_63.push(arguments[i]);
-}
-dojo.require.apply(dojo,_63);
-}
-};
-dojo.requireAfterIf=dojo.requireIf;
-dojo.provide=function(_65){
-return dojo.hostenv.startPackage.apply(dojo.hostenv,arguments);
-};
-dojo.registerModulePath=function(_66,_67){
-return dojo.hostenv.setModulePrefix(_66,_67);
-};
-dojo.setModulePrefix=function(_68,_69){
-dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
-return dojo.registerModulePath(_68,_69);
-};
-dojo.exists=function(obj,_6b){
-var p=_6b.split(".");
-for(var i=0;i<p.length;i++){
-if(!obj[p[i]]){
-return false;
-}
-obj=obj[p[i]];
-}
-return true;
-};
-dojo.hostenv.normalizeLocale=function(_6e){
-var _6f=_6e?_6e.toLowerCase():dojo.locale;
-if(_6f=="root"){
-_6f="ROOT";
-}
-return _6f;
-};
-dojo.hostenv.searchLocalePath=function(_70,_71,_72){
-_70=dojo.hostenv.normalizeLocale(_70);
-var _73=_70.split("-");
-var _74=[];
-for(var i=_73.length;i>0;i--){
-_74.push(_73.slice(0,i).join("-"));
-}
-_74.push(false);
-if(_71){
-_74.reverse();
-}
-for(var j=_74.length-1;j>=0;j--){
-var loc=_74[j]||"ROOT";
-var _78=_72(loc);
-if(_78){
-break;
-}
-}
-};
-dojo.hostenv.localesGenerated;
-dojo.hostenv.registerNlsPrefix=function(){
-dojo.registerModulePath("nls","nls");
-};
-dojo.hostenv.preloadLocalizations=function(){
-if(dojo.hostenv.localesGenerated){
-dojo.hostenv.registerNlsPrefix();
-function preload(_79){
-_79=dojo.hostenv.normalizeLocale(_79);
-dojo.hostenv.searchLocalePath(_79,true,function(loc){
-for(var i=0;i<dojo.hostenv.localesGenerated.length;i++){
-if(dojo.hostenv.localesGenerated[i]==loc){
-dojo["require"]("nls.dojo_"+loc);
-return true;
-}
-}
-return false;
-});
-}
-preload();
-var _7c=djConfig.extraLocale||[];
-for(var i=0;i<_7c.length;i++){
-preload(_7c[i]);
-}
-}
-dojo.hostenv.preloadLocalizations=function(){
-};
-};
-dojo.requireLocalization=function(_7e,_7f,_80,_81){
-dojo.hostenv.preloadLocalizations();
-var _82=dojo.hostenv.normalizeLocale(_80);
-var _83=[_7e,"nls",_7f].join(".");
-var _84="";
-if(_81){
-var _85=_81.split(",");
-for(var i=0;i<_85.length;i++){
-if(_82.indexOf(_85[i])==0){
-if(_85[i].length>_84.length){
-_84=_85[i];
-}
-}
-}
-if(!_84){
-_84="ROOT";
-}
-}
-var _87=_81?_84:_82;
-var _88=dojo.hostenv.findModule(_83);
-var _89=null;
-if(_88){
-if(djConfig.localizationComplete&&_88._built){
-return;
-}
-var _8a=_87.replace("-","_");
-var _8b=_83+"."+_8a;
-_89=dojo.hostenv.findModule(_8b);
-}
-if(!_89){
-_88=dojo.hostenv.startPackage(_83);
-var _8c=dojo.hostenv.getModuleSymbols(_7e);
-var _8d=_8c.concat("nls").join("/");
-var _8e;
-dojo.hostenv.searchLocalePath(_87,_81,function(loc){
-var _90=loc.replace("-","_");
-var _91=_83+"."+_90;
-var _92=false;
-if(!dojo.hostenv.findModule(_91)){
-dojo.hostenv.startPackage(_91);
-var _93=[_8d];
-if(loc!="ROOT"){
-_93.push(loc);
-}
-_93.push(_7f);
-var _94=_93.join("/")+".js";
-_92=dojo.hostenv.loadPath(_94,null,function(_95){
-var _96=function(){
-};
-_96.prototype=_8e;
-_88[_90]=new _96();
-for(var j in _95){
-_88[_90][j]=_95[j];
-}
-});
-}else{
-_92=true;
-}
-if(_92&&_88[_90]){
-_8e=_88[_90];
-}else{
-_88[_90]=_8e;
-}
-if(_81){
-return true;
-}
-});
-}
-if(_81&&_82!=_84){
-_88[_82.replace("-","_")]=_88[_84.replace("-","_")];
-}
-};
-(function(){
-var _98=djConfig.extraLocale;
-if(_98){
-if(!_98 instanceof Array){
-_98=[_98];
-}
-var req=dojo.requireLocalization;
-dojo.requireLocalization=function(m,b,_9c,_9d){
-req(m,b,_9c,_9d);
-if(_9c){
-return;
-}
-for(var i=0;i<_98.length;i++){
-req(m,b,_98[i],_9d);
-}
-};
-}
-})();
-}
-if(typeof window!="undefined"){
-(function(){
-if(djConfig.allowQueryConfig){
-var _9f=document.location.toString();
-var _a0=_9f.split("?",2);
-if(_a0.length>1){
-var _a1=_a0[1];
-var _a2=_a1.split("&");
-for(var x in _a2){
-var sp=_a2[x].split("=");
-if((sp[0].length>9)&&(sp[0].substr(0,9)=="djConfig.")){
-var opt=sp[0].substr(9);
-try{
-djConfig[opt]=eval(sp[1]);
-}
-catch(e){
-djConfig[opt]=sp[1];
-}
-}
-}
-}
-}
-if(((djConfig["baseScriptUri"]=="")||(djConfig["baseRelativePath"]==""))&&(document&&document.getElementsByTagName)){
-var _a6=document.getElementsByTagName("script");
-var _a7=/(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i;
-for(var i=0;i<_a6.length;i++){
-var src=_a6[i].getAttribute("src");
-if(!src){
-continue;
-}
-var m=src.match(_a7);
-if(m){
-var _ab=src.substring(0,m.index);
-if(src.indexOf("bootstrap1")>-1){
-_ab+="../";
-}
-if(!this["djConfig"]){
-djConfig={};
-}
-if(djConfig["baseScriptUri"]==""){
-djConfig["baseScriptUri"]=_ab;
-}
-if(djConfig["baseRelativePath"]==""){
-djConfig["baseRelativePath"]=_ab;
-}
-break;
-}
-}
-}
-var dr=dojo.render;
-var drh=dojo.render.html;
-var drs=dojo.render.svg;
-var dua=(drh.UA=navigator.userAgent);
-var dav=(drh.AV=navigator.appVersion);
-var t=true;
-var f=false;
-drh.capable=t;
-drh.support.builtin=t;
-dr.ver=parseFloat(drh.AV);
-dr.os.mac=dav.indexOf("Macintosh")>=0;
-dr.os.win=dav.indexOf("Windows")>=0;
-dr.os.linux=dav.indexOf("X11")>=0;
-drh.opera=dua.indexOf("Opera")>=0;
-drh.khtml=(dav.indexOf("Konqueror")>=0)||(dav.indexOf("Safari")>=0);
-drh.safari=dav.indexOf("Safari")>=0;
-var _b3=dua.indexOf("Gecko");
-drh.mozilla=drh.moz=(_b3>=0)&&(!drh.khtml);
-if(drh.mozilla){
-drh.geckoVersion=dua.substring(_b3+6,_b3+14);
-}
-drh.ie=(document.all)&&(!drh.opera);
-drh.ie50=drh.ie&&dav.indexOf("MSIE 5.0")>=0;
-drh.ie55=drh.ie&&dav.indexOf("MSIE 5.5")>=0;
-drh.ie60=drh.ie&&dav.indexOf("MSIE 6.0")>=0;
-drh.ie70=drh.ie&&dav.indexOf("MSIE 7.0")>=0;
-var cm=document["compatMode"];
-drh.quirks=(cm=="BackCompat")||(cm=="QuirksMode")||drh.ie55||drh.ie50;
-dojo.locale=dojo.locale||(drh.ie?navigator.userLanguage:navigator.language).toLowerCase();
-dr.vml.capable=drh.ie;
-drs.capable=f;
-drs.support.plugin=f;
-drs.support.builtin=f;
-var _b5=window["document"];
-var tdi=_b5["implementation"];
-if((tdi)&&(tdi["hasFeature"])&&(tdi.hasFeature("org.w3c.dom.svg","1.0"))){
-drs.capable=t;
-drs.support.builtin=t;
-drs.support.plugin=f;
-}
-if(drh.safari){
-var tmp=dua.split("AppleWebKit/")[1];
-var ver=parseFloat(tmp.split(" ")[0]);
-if(ver>=420){
-drs.capable=t;
-drs.support.builtin=t;
-drs.support.plugin=f;
-}
-}else{
-}
-})();
-dojo.hostenv.startPackage("dojo.hostenv");
-dojo.render.name=dojo.hostenv.name_="browser";
-dojo.hostenv.searchIds=[];
-dojo.hostenv._XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];
-dojo.hostenv.getXmlhttpObject=function(){
-var _b9=null;
-var _ba=null;
-try{
-_b9=new XMLHttpRequest();
-}
-catch(e){
-}
-if(!_b9){
-for(var i=0;i<3;++i){
-var _bc=dojo.hostenv._XMLHTTP_PROGIDS[i];
-try{
-_b9=new ActiveXObject(_bc);
-}
-catch(e){
-_ba=e;
-}
-if(_b9){
-dojo.hostenv._XMLHTTP_PROGIDS=[_bc];
-break;
-}
-}
-}
-if(!_b9){
-return dojo.raise("XMLHTTP not available",_ba);
-}
-return _b9;
-};
-dojo.hostenv._blockAsync=false;
-dojo.hostenv.getText=function(uri,_be,_bf){
-if(!_be){
-this._blockAsync=true;
-}
-var _c0=this.getXmlhttpObject();
-function isDocumentOk(_c1){
-var _c2=_c1["status"];
-return Boolean((!_c2)||((200<=_c2)&&(300>_c2))||(_c2==304));
-}
-if(_be){
-var _c3=this,_c4=null,gbl=dojo.global();
-var xhr=dojo.evalObjPath("dojo.io.XMLHTTPTransport");
-_c0.onreadystatechange=function(){
-if(_c4){
-gbl.clearTimeout(_c4);
-_c4=null;
-}
-if(_c3._blockAsync||(xhr&&xhr._blockAsync)){
-_c4=gbl.setTimeout(function(){
-_c0.onreadystatechange.apply(this);
-},10);
-}else{
-if(4==_c0.readyState){
-if(isDocumentOk(_c0)){
-_be(_c0.responseText);
-}
-}
-}
-};
-}
-_c0.open("GET",uri,_be?true:false);
-try{
-_c0.send(null);
-if(_be){
-return null;
-}
-if(!isDocumentOk(_c0)){
-var err=Error("Unable to load "+uri+" status:"+_c0.status);
-err.status=_c0.status;
-err.responseText=_c0.responseText;
-throw err;
-}
-}
-catch(e){
-this._blockAsync=false;
-if((_bf)&&(!_be)){
-return null;
-}else{
-throw e;
-}
-}
-this._blockAsync=false;
-return _c0.responseText;
-};
-dojo.hostenv.defaultDebugContainerId="dojoDebug";
-dojo.hostenv._println_buffer=[];
-dojo.hostenv._println_safe=false;
-dojo.hostenv.println=function(_c8){
-if(!dojo.hostenv._println_safe){
-dojo.hostenv._println_buffer.push(_c8);
-}else{
-try{
-var _c9=document.getElementById(djConfig.debugContainerId?djConfig.debugContainerId:dojo.hostenv.defaultDebugContainerId);
-if(!_c9){
-_c9=dojo.body();
-}
-var div=document.createElement("div");
-div.appendChild(document.createTextNode(_c8));
-_c9.appendChild(div);
-}
-catch(e){
-try{
-document.write("<div>"+_c8+"</div>");
-}
-catch(e2){
-window.status=_c8;
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-dojo.hostenv._println_safe=true;
-while(dojo.hostenv._println_buffer.length>0){
-dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
-}
-});
-function dj_addNodeEvtHdlr(_cb,_cc,fp){
-var _ce=_cb["on"+_cc]||function(){
-};
-_cb["on"+_cc]=function(){
-fp.apply(_cb,arguments);
-_ce.apply(_cb,arguments);
-};
-return true;
-}
-function dj_load_init(e){
-var _d0=(e&&e.type)?e.type.toLowerCase():"load";
-if(arguments.callee.initialized||(_d0!="domcontentloaded"&&_d0!="load")){
-return;
-}
-arguments.callee.initialized=true;
-if(typeof (_timer)!="undefined"){
-clearInterval(_timer);
-delete _timer;
-}
-var _d1=function(){
-if(dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-};
-if(dojo.hostenv.inFlightCount==0){
-_d1();
-dojo.hostenv.modulesLoaded();
-}else{
-dojo.hostenv.modulesLoadedListeners.unshift(_d1);
-}
-}
-if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
-document.addEventListener("DOMContentLoaded",dj_load_init,null);
-}
-window.addEventListener("load",dj_load_init,null);
-}
-if(dojo.render.html.ie&&dojo.render.os.win){
-document.attachEvent("onreadystatechange",function(e){
-if(document.readyState=="complete"){
-dj_load_init();
-}
-});
-}
-if(/(WebKit|khtml)/i.test(navigator.userAgent)){
-var _timer=setInterval(function(){
-if(/loaded|complete/.test(document.readyState)){
-dj_load_init();
-}
-},10);
-}
-if(dojo.render.html.ie){
-dj_addNodeEvtHdlr(window,"beforeunload",function(){
-dojo.hostenv._unloading=true;
-window.setTimeout(function(){
-dojo.hostenv._unloading=false;
-},0);
-});
-}
-dj_addNodeEvtHdlr(window,"unload",function(){
-dojo.hostenv.unloaded();
-if((!dojo.render.html.ie)||(dojo.render.html.ie&&dojo.hostenv._unloading)){
-dojo.hostenv.unloaded();
-}
-});
-dojo.hostenv.makeWidgets=function(){
-var _d3=[];
-if(djConfig.searchIds&&djConfig.searchIds.length>0){
-_d3=_d3.concat(djConfig.searchIds);
-}
-if(dojo.hostenv.searchIds&&dojo.hostenv.searchIds.length>0){
-_d3=_d3.concat(dojo.hostenv.searchIds);
-}
-if((djConfig.parseWidgets)||(_d3.length>0)){
-if(dojo.evalObjPath("dojo.widget.Parse")){
-var _d4=new dojo.xml.Parse();
-if(_d3.length>0){
-for(var x=0;x<_d3.length;x++){
-var _d6=document.getElementById(_d3[x]);
-if(!_d6){
-continue;
-}
-var _d7=_d4.parseElement(_d6,null,true);
-dojo.widget.getParser().createComponents(_d7);
-}
-}else{
-if(djConfig.parseWidgets){
-var _d7=_d4.parseElement(dojo.body(),null,true);
-dojo.widget.getParser().createComponents(_d7);
-}
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-if(!dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-});
-try{
-if(dojo.render.html.ie){
-document.namespaces.add("v","urn:schemas-microsoft-com:vml");
-document.createStyleSheet().addRule("v\\:*","behavior:url(#default#VML)");
-}
-}
-catch(e){
-}
-dojo.hostenv.writeIncludes=function(){
-};
-if(!dj_undef("document",this)){
-dj_currentDocument=this.document;
-}
-dojo.doc=function(){
-return dj_currentDocument;
-};
-dojo.body=function(){
-return dojo.doc().body||dojo.doc().getElementsByTagName("body")[0];
-};
-dojo.byId=function(id,doc){
-if((id)&&((typeof id=="string")||(id instanceof String))){
-if(!doc){
-doc=dj_currentDocument;
-}
-var ele=doc.getElementById(id);
-if(ele&&(ele.id!=id)&&doc.all){
-ele=null;
-eles=doc.all[id];
-if(eles){
-if(eles.length){
-for(var i=0;i<eles.length;i++){
-if(eles[i].id==id){
-ele=eles[i];
-break;
-}
-}
-}else{
-ele=eles;
-}
-}
-}
-return ele;
-}
-return id;
-};
-dojo.setContext=function(_dc,_dd){
-dj_currentContext=_dc;
-dj_currentDocument=_dd;
-};
-dojo._fireCallback=function(_de,_df,_e0){
-if((_df)&&((typeof _de=="string")||(_de instanceof String))){
-_de=_df[_de];
-}
-return (_df?_de.apply(_df,_e0||[]):_de());
-};
-dojo.withGlobal=function(_e1,_e2,_e3,_e4){
-var _e5;
-var _e6=dj_currentContext;
-var _e7=dj_currentDocument;
-try{
-dojo.setContext(_e1,_e1.document);
-_e5=dojo._fireCallback(_e2,_e3,_e4);
-}
-finally{
-dojo.setContext(_e6,_e7);
-}
-return _e5;
-};
-dojo.withDoc=function(_e8,_e9,_ea,_eb){
-var _ec;
-var _ed=dj_currentDocument;
-try{
-dj_currentDocument=_e8;
-_ec=dojo._fireCallback(_e9,_ea,_eb);
-}
-finally{
-dj_currentDocument=_ed;
-}
-return _ec;
-};
-}
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _ee=false;
-var _ef=false;
-var _f0=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_ee=true;
-}else{
-if(typeof this["load"]=="function"){
-_ef=true;
-}else{
-if(window.widget){
-_f0=true;
-}
-}
-}
-var _f1=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-_f1.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_ee)&&(!_f0)){
-_f1.push("browser_debug.js");
-}
-var _f2=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_f2=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<_f1.length;x++){
-var _f4=_f2+"src/"+_f1[x];
-if(_ee||_ef){
-load(_f4);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_f4+"'></scr"+"ipt>");
-}
-catch(e){
-var _f5=document.createElement("script");
-_f5.src=_f4;
-document.getElementsByTagName("head")[0].appendChild(_f5);
-}
-}
-}
-})();
-dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_f6,_f7){
-if(!dojo.lang.isFunction(_f7)){
-dojo.raise("dojo.inherits: superclass argument ["+_f7+"] must be a function (subclass: ["+_f6+"']");
-}
-_f6.prototype=new _f7();
-_f6.prototype.constructor=_f6;
-_f6.superclass=_f7.prototype;
-_f6["super"]=_f7.prototype;
-};
-dojo.lang._mixin=function(obj,_f9){
-var _fa={};
-for(var x in _f9){
-if((typeof _fa[x]=="undefined")||(_fa[x]!=_f9[x])){
-obj[x]=_f9[x];
-}
-}
-if(dojo.render.html.ie&&(typeof (_f9["toString"])=="function")&&(_f9["toString"]!=obj["toString"])&&(_f9["toString"]!=_fa["toString"])){
-obj.toString=_f9.toString;
-}
-return obj;
-};
-dojo.lang.mixin=function(obj,_fd){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(obj,arguments[i]);
-}
-return obj;
-};
-dojo.lang.extend=function(_100,_101){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_100.prototype,arguments[i]);
-}
-return _100;
-};
-dojo.inherits=dojo.lang.inherits;
-dojo.mixin=dojo.lang.mixin;
-dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_104,_105,_106,_107){
-if(!dojo.lang.isArrayLike(_104)&&dojo.lang.isArrayLike(_105)){
-dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_104;
-_104=_105;
-_105=temp;
-}
-var _109=dojo.lang.isString(_104);
-if(_109){
-_104=_104.split("");
-}
-if(_107){
-var step=-1;
-var i=_104.length-1;
-var end=-1;
-}else{
-var step=1;
-var i=0;
-var end=_104.length;
-}
-if(_106){
-while(i!=end){
-if(_104[i]===_105){
-return i;
-}
-i+=step;
-}
-}else{
-while(i!=end){
-if(_104[i]==_105){
-return i;
-}
-i+=step;
-}
-}
-return -1;
-};
-dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_10d,_10e,_10f){
-return dojo.lang.find(_10d,_10e,_10f,true);
-};
-dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_110,_111){
-return dojo.lang.find(_110,_111)>-1;
-};
-dojo.lang.isObject=function(it){
-if(typeof it=="undefined"){
-return false;
-}
-return (typeof it=="object"||it===null||dojo.lang.isArray(it)||dojo.lang.isFunction(it));
-};
-dojo.lang.isArray=function(it){
-return (it&&it instanceof Array||typeof it=="array");
-};
-dojo.lang.isArrayLike=function(it){
-if((!it)||(dojo.lang.isUndefined(it))){
-return false;
-}
-if(dojo.lang.isString(it)){
-return false;
-}
-if(dojo.lang.isFunction(it)){
-return false;
-}
-if(dojo.lang.isArray(it)){
-return true;
-}
-if((it.tagName)&&(it.tagName.toLowerCase()=="form")){
-return false;
-}
-if(dojo.lang.isNumber(it.length)&&isFinite(it.length)){
-return true;
-}
-return false;
-};
-dojo.lang.isFunction=function(it){
-return (it instanceof Function||typeof it=="function");
-};
-(function(){
-if((dojo.render.html.capable)&&(dojo.render.html["safari"])){
-dojo.lang.isFunction=function(it){
-if((typeof (it)=="function")&&(it=="[object NodeList]")){
-return false;
-}
-return (it instanceof Function||typeof it=="function");
-};
-}
-})();
-dojo.lang.isString=function(it){
-return (typeof it=="string"||it instanceof String);
-};
-dojo.lang.isAlien=function(it){
-if(!it){
-return false;
-}
-return !dojo.lang.isFunction(it)&&/\{\s*\[native code\]\s*\}/.test(String(it));
-};
-dojo.lang.isBoolean=function(it){
-return (it instanceof Boolean||typeof it=="boolean");
-};
-dojo.lang.isNumber=function(it){
-return (it instanceof Number||typeof it=="number");
-};
-dojo.lang.isUndefined=function(it){
-return ((typeof (it)=="undefined")&&(it==undefined));
-};
-dojo.provide("dojo.dom");
-dojo.dom.ELEMENT_NODE=1;
-dojo.dom.ATTRIBUTE_NODE=2;
-dojo.dom.TEXT_NODE=3;
-dojo.dom.CDATA_SECTION_NODE=4;
-dojo.dom.ENTITY_REFERENCE_NODE=5;
-dojo.dom.ENTITY_NODE=6;
-dojo.dom.PROCESSING_INSTRUCTION_NODE=7;
-dojo.dom.COMMENT_NODE=8;
-dojo.dom.DOCUMENT_NODE=9;
-dojo.dom.DOCUMENT_TYPE_NODE=10;
-dojo.dom.DOCUMENT_FRAGMENT_NODE=11;
-dojo.dom.NOTATION_NODE=12;
-dojo.dom.dojoml="http://www.dojotoolkit.org/2004/dojoml";
-dojo.dom.xmlns={svg:"http://www.w3.org/2000/svg",smil:"http://www.w3.org/2001/SMIL20/",mml:"http://www.w3.org/1998/Math/MathML",cml:"http://www.xml-cml.org",xlink:"http://www.w3.org/1999/xlink",xhtml:"http://www.w3.org/1999/xhtml",xul:"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",xbl:"http://www.mozilla.org/xbl",fo:"http://www.w3.org/1999/XSL/Format",xsl:"http://www.w3.org/1999/XSL/Transform",xslt:"http://www.w3.org/1999/XSL/Transform",xi:"http://www.w3.org/2001/XInclude",xforms:"http://www.w3.org/2002/01/xforms",saxon:"http://icl.com/saxon",xalan:"http://xml.apache.org/xslt",xsd:"http://www.w3.org/2001/XMLSchema",dt:"http://www.w3.org/2001/XMLSchema-datatypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#",rdfs:"http://www.w3.org/2000/01/rdf-schema#",dc:"http://purl.org/dc/elements/1.1/",dcq:"http://purl.org/dc/qualifiers/1.0","soap-env":"http://schemas.xmlsoap.org/soap/envelope/",wsdl:"http://schemas.xmlsoap.org/wsdl/",AdobeExtensions:"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"};
-dojo.dom.isNode=function(wh){
-if(typeof Element=="function"){
-try{
-return wh instanceof Element;
-}
-catch(e){
-}
-}else{
-return wh&&!isNaN(wh.nodeType);
-}
-};
-dojo.dom.getUniqueId=function(){
-var _11d=dojo.doc();
-do{
-var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_11d.getElementById(id));
-return id;
-};
-dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_11f,_120){
-var node=_11f.firstChild;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.nextSibling;
-}
-if(_120&&node&&node.tagName&&node.tagName.toLowerCase()!=_120.toLowerCase()){
-node=dojo.dom.nextElement(node,_120);
-}
-return node;
-};
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_122,_123){
-var node=_122.lastChild;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.previousSibling;
-}
-if(_123&&node&&node.tagName&&node.tagName.toLowerCase()!=_123.toLowerCase()){
-node=dojo.dom.prevElement(node,_123);
-}
-return node;
-};
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_126){
-if(!node){
-return null;
-}
-do{
-node=node.nextSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_126&&_126.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.nextElement(node,_126);
-}
-return node;
-};
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_128){
-if(!node){
-return null;
-}
-if(_128){
-_128=_128.toLowerCase();
-}
-do{
-node=node.previousSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_128&&_128.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_128);
-}
-return node;
-};
-dojo.dom.moveChildren=function(_129,_12a,trim){
-var _12c=0;
-if(trim){
-while(_129.hasChildNodes()&&_129.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_129.removeChild(_129.firstChild);
-}
-while(_129.hasChildNodes()&&_129.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_129.removeChild(_129.lastChild);
-}
-}
-while(_129.hasChildNodes()){
-_12a.appendChild(_129.firstChild);
-_12c++;
-}
-return _12c;
-};
-dojo.dom.copyChildren=function(_12d,_12e,trim){
-var _130=_12d.cloneNode(true);
-return this.moveChildren(_130,_12e,trim);
-};
-dojo.dom.replaceChildren=function(node,_132){
-var _133=[];
-if(dojo.render.html.ie){
-for(var i=0;i<node.childNodes.length;i++){
-_133.push(node.childNodes[i]);
-}
-}
-dojo.dom.removeChildren(node);
-node.appendChild(_132);
-for(var i=0;i<_133.length;i++){
-dojo.dom.destroyNode(_133[i]);
-}
-};
-dojo.dom.removeChildren=function(node){
-var _136=node.childNodes.length;
-while(node.hasChildNodes()){
-dojo.dom.removeNode(node.firstChild);
-}
-return _136;
-};
-dojo.dom.replaceNode=function(node,_138){
-return node.parentNode.replaceChild(_138,node);
-};
-dojo.dom.destroyNode=function(node){
-if(node.parentNode){
-node=dojo.dom.removeNode(node);
-}
-if(node.nodeType!=3){
-if(dojo.evalObjPath("dojo.event.browser.clean",false)){
-dojo.event.browser.clean(node);
-}
-if(dojo.render.html.ie){
-node.outerHTML="";
-}
-}
-};
-dojo.dom.removeNode=function(node){
-if(node&&node.parentNode){
-return node.parentNode.removeChild(node);
-}
-};
-dojo.dom.getAncestors=function(node,_13c,_13d){
-var _13e=[];
-var _13f=(_13c&&(_13c instanceof Function||typeof _13c=="function"));
-while(node){
-if(!_13f||_13c(node)){
-_13e.push(node);
-}
-if(_13d&&_13e.length>0){
-return _13e[0];
-}
-node=node.parentNode;
-}
-if(_13d){
-return null;
-}
-return _13e;
-};
-dojo.dom.getAncestorsByTag=function(node,tag,_142){
-tag=tag.toLowerCase();
-return dojo.dom.getAncestors(node,function(el){
-return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_142);
-};
-dojo.dom.getFirstAncestorByTag=function(node,tag){
-return dojo.dom.getAncestorsByTag(node,tag,true);
-};
-dojo.dom.isDescendantOf=function(node,_147,_148){
-if(_148&&node){
-node=node.parentNode;
-}
-while(node){
-if(node==_147){
-return true;
-}
-node=node.parentNode;
-}
-return false;
-};
-dojo.dom.innerXML=function(node){
-if(node.innerXML){
-return node.innerXML;
-}else{
-if(node.xml){
-return node.xml;
-}else{
-if(typeof XMLSerializer!="undefined"){
-return (new XMLSerializer()).serializeToString(node);
-}
-}
-}
-};
-dojo.dom.createDocument=function(){
-var doc=null;
-var _14b=dojo.doc();
-if(!dj_undef("ActiveXObject")){
-var _14c=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_14c.length;i++){
-try{
-doc=new ActiveXObject(_14c[i]+".XMLDOM");
-}
-catch(e){
-}
-if(doc){
-break;
-}
-}
-}else{
-if((_14b.implementation)&&(_14b.implementation.createDocument)){
-doc=_14b.implementation.createDocument("","",null);
-}
-}
-return doc;
-};
-dojo.dom.createDocumentFromText=function(str,_14f){
-if(!_14f){
-_14f="text/xml";
-}
-if(!dj_undef("DOMParser")){
-var _150=new DOMParser();
-return _150.parseFromString(str,_14f);
-}else{
-if(!dj_undef("ActiveXObject")){
-var _151=dojo.dom.createDocument();
-if(_151){
-_151.async=false;
-_151.loadXML(str);
-return _151;
-}else{
-dojo.debug("toXml didn't work?");
-}
-}else{
-var _152=dojo.doc();
-if(_152.createElement){
-var tmp=_152.createElement("xml");
-tmp.innerHTML=str;
-if(_152.implementation&&_152.implementation.createDocument){
-var _154=_152.implementation.createDocument("foo","",null);
-for(var i=0;i<tmp.childNodes.length;i++){
-_154.importNode(tmp.childNodes.item(i),true);
-}
-return _154;
-}
-return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
-}
-}
-}
-return null;
-};
-dojo.dom.prependChild=function(node,_157){
-if(_157.firstChild){
-_157.insertBefore(node,_157.firstChild);
-}else{
-_157.appendChild(node);
-}
-return true;
-};
-dojo.dom.insertBefore=function(node,ref,_15a){
-if((_15a!=true)&&(node===ref||node.nextSibling===ref)){
-return false;
-}
-var _15b=ref.parentNode;
-_15b.insertBefore(node,ref);
-return true;
-};
-dojo.dom.insertAfter=function(node,ref,_15e){
-var pn=ref.parentNode;
-if(ref==pn.lastChild){
-if((_15e!=true)&&(node===ref)){
-return false;
-}
-pn.appendChild(node);
-}else{
-return this.insertBefore(node,ref.nextSibling,_15e);
-}
-return true;
-};
-dojo.dom.insertAtPosition=function(node,ref,_162){
-if((!node)||(!ref)||(!_162)){
-return false;
-}
-switch(_162.toLowerCase()){
-case "before":
-return dojo.dom.insertBefore(node,ref);
-case "after":
-return dojo.dom.insertAfter(node,ref);
-case "first":
-if(ref.firstChild){
-return dojo.dom.insertBefore(node,ref.firstChild);
-}else{
-ref.appendChild(node);
-return true;
-}
-break;
-default:
-ref.appendChild(node);
-return true;
-}
-};
-dojo.dom.insertAtIndex=function(node,_164,_165){
-var _166=_164.childNodes;
-if(!_166.length||_166.length==_165){
-_164.appendChild(node);
-return true;
-}
-if(_165==0){
-return dojo.dom.prependChild(node,_164);
-}
-return dojo.dom.insertAfter(node,_166[_165-1]);
-};
-dojo.dom.textContent=function(node,text){
-if(arguments.length>1){
-var _169=dojo.doc();
-dojo.dom.replaceChildren(node,_169.createTextNode(text));
-return text;
-}else{
-if(node.textContent!=undefined){
-return node.textContent;
-}
-var _16a="";
-if(node==null){
-return _16a;
-}
-for(var i=0;i<node.childNodes.length;i++){
-switch(node.childNodes[i].nodeType){
-case 1:
-case 5:
-_16a+=dojo.dom.textContent(node.childNodes[i]);
-break;
-case 3:
-case 2:
-case 4:
-_16a+=node.childNodes[i].nodeValue;
-break;
-default:
-break;
-}
-}
-return _16a;
-}
-};
-dojo.dom.hasParent=function(node){
-return Boolean(node&&node.parentNode&&dojo.dom.isNode(node.parentNode));
-};
-dojo.dom.isTag=function(node){
-if(node&&node.tagName){
-for(var i=1;i<arguments.length;i++){
-if(node.tagName==String(arguments[i])){
-return String(arguments[i]);
-}
-}
-}
-return "";
-};
-dojo.dom.setAttributeNS=function(elem,_170,_171,_172){
-if(elem==null||((elem==undefined)&&(typeof elem=="undefined"))){
-dojo.raise("No element given to dojo.dom.setAttributeNS");
-}
-if(!((elem.setAttributeNS==undefined)&&(typeof elem.setAttributeNS=="undefined"))){
-elem.setAttributeNS(_170,_171,_172);
-}else{
-var _173=elem.ownerDocument;
-var _174=_173.createNode(2,_171,_170);
-_174.nodeValue=_172;
-elem.setAttributeNode(_174);
-}
-};
-dojo.provide("dojo.html.common");
-dojo.lang.mixin(dojo.html,dojo.dom);
-dojo.html.body=function(){
-dojo.deprecated("dojo.html.body() moved to dojo.body()","0.5");
-return dojo.body();
-};
-dojo.html.getEventTarget=function(evt){
-if(!evt){
-evt=dojo.global().event||{};
-}
-var t=(evt.srcElement?evt.srcElement:(evt.target?evt.target:null));
-while((t)&&(t.nodeType!=1)){
-t=t.parentNode;
-}
-return t;
-};
-dojo.html.getViewport=function(){
-var _177=dojo.global();
-var _178=dojo.doc();
-var w=0;
-var h=0;
-if(dojo.render.html.mozilla){
-w=_178.documentElement.clientWidth;
-h=_177.innerHeight;
-}else{
-if(!dojo.render.html.opera&&_177.innerWidth){
-w=_177.innerWidth;
-h=_177.innerHeight;
-}else{
-if(!dojo.render.html.opera&&dojo.exists(_178,"documentElement.clientWidth")){
-var w2=_178.documentElement.clientWidth;
-if(!w||w2&&w2<w){
-w=w2;
-}
-h=_178.documentElement.clientHeight;
-}else{
-if(dojo.body().clientWidth){
-w=dojo.body().clientWidth;
-h=dojo.body().clientHeight;
-}
-}
-}
-}
-return {width:w,height:h};
-};
-dojo.html.getScroll=function(){
-var _17c=dojo.global();
-var _17d=dojo.doc();
-var top=_17c.pageYOffset||_17d.documentElement.scrollTop||dojo.body().scrollTop||0;
-var left=_17c.pageXOffset||_17d.documentElement.scrollLeft||dojo.body().scrollLeft||0;
-return {top:top,left:left,offset:{x:left,y:top}};
-};
-dojo.html.getParentByType=function(node,type){
-var _182=dojo.doc();
-var _183=dojo.byId(node);
-type=type.toLowerCase();
-while((_183)&&(_183.nodeName.toLowerCase()!=type)){
-if(_183==(_182["body"]||_182["documentElement"])){
-return null;
-}
-_183=_183.parentNode;
-}
-return _183;
-};
-dojo.html.getAttribute=function(node,attr){
-node=dojo.byId(node);
-if((!node)||(!node.getAttribute)){
-return null;
-}
-var ta=typeof attr=="string"?attr:new String(attr);
-var v=node.getAttribute(ta.toUpperCase());
-if((v)&&(typeof v=="string")&&(v!="")){
-return v;
-}
-if(v&&v.value){
-return v.value;
-}
-if((node.getAttributeNode)&&(node.getAttributeNode(ta))){
-return (node.getAttributeNode(ta)).value;
-}else{
-if(node.getAttribute(ta)){
-return node.getAttribute(ta);
-}else{
-if(node.getAttribute(ta.toLowerCase())){
-return node.getAttribute(ta.toLowerCase());
-}
-}
-}
-return null;
-};
-dojo.html.hasAttribute=function(node,attr){
-return dojo.html.getAttribute(dojo.byId(node),attr)?true:false;
-};
-dojo.html.getCursorPosition=function(e){
-e=e||dojo.global().event;
-var _18b={x:0,y:0};
-if(e.pageX||e.pageY){
-_18b.x=e.pageX;
-_18b.y=e.pageY;
-}else{
-var de=dojo.doc().documentElement;
-var db=dojo.body();
-_18b.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
-_18b.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
-}
-return _18b;
-};
-dojo.html.isTag=function(node){
-node=dojo.byId(node);
-if(node&&node.tagName){
-for(var i=1;i<arguments.length;i++){
-if(node.tagName.toLowerCase()==String(arguments[i]).toLowerCase()){
-return String(arguments[i]).toLowerCase();
-}
-}
-}
-return "";
-};
-if(dojo.render.html.ie&&!dojo.render.html.ie70){
-if(window.location.href.substr(0,6).toLowerCase()!="https:"){
-(function(){
-var _190=dojo.doc().createElement("script");
-_190.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
-dojo.doc().getElementsByTagName("head")[0].appendChild(_190);
-})();
-}
-}else{
-dojo.html.createExternalElement=function(doc,tag){
-return doc.createElement(tag);
-};
-}
-dojo.html._callDeprecated=function(_193,_194,args,_196,_197){
-dojo.deprecated("dojo.html."+_193,"replaced by dojo.html."+_194+"("+(_196?"node, {"+_196+": "+_196+"}":"")+")"+(_197?"."+_197:""),"0.5");
-var _198=[];
-if(_196){
-var _199={};
-_199[_196]=args[1];
-_198.push(args[0]);
-_198.push(_199);
-}else{
-_198=args;
-}
-var ret=dojo.html[_194].apply(dojo.html,args);
-if(_197){
-return ret[_197];
-}else{
-return ret;
-}
-};
-dojo.html.getViewportWidth=function(){
-return dojo.html._callDeprecated("getViewportWidth","getViewport",arguments,null,"width");
-};
-dojo.html.getViewportHeight=function(){
-return dojo.html._callDeprecated("getViewportHeight","getViewport",arguments,null,"height");
-};
-dojo.html.getViewportSize=function(){
-return dojo.html._callDeprecated("getViewportSize","getViewport",arguments);
-};
-dojo.html.getScrollTop=function(){
-return dojo.html._callDeprecated("getScrollTop","getScroll",arguments,null,"top");
-};
-dojo.html.getScrollLeft=function(){
-return dojo.html._callDeprecated("getScrollLeft","getScroll",arguments,null,"left");
-};
-dojo.html.getScrollOffset=function(){
-return dojo.html._callDeprecated("getScrollOffset","getScroll",arguments,null,"offset");
-};
-dojo.provide("dojo.uri.Uri");
-dojo.uri=new function(){
-this.dojoUri=function(uri){
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(),uri);
-};
-this.moduleUri=function(_19c,uri){
-var loc=dojo.hostenv.getModuleSymbols(_19c).join("/");
-if(!loc){
-return null;
-}
-if(loc.lastIndexOf("/")!=loc.length-1){
-loc+="/";
-}
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri()+loc,uri);
-};
-this.Uri=function(){
-var uri=arguments[0];
-for(var i=1;i<arguments.length;i++){
-if(!arguments[i]){
-continue;
-}
-var _1a1=new dojo.uri.Uri(arguments[i].toString());
-var _1a2=new dojo.uri.Uri(uri.toString());
-if((_1a1.path=="")&&(_1a1.scheme==null)&&(_1a1.authority==null)&&(_1a1.query==null)){
-if(_1a1.fragment!=null){
-_1a2.fragment=_1a1.fragment;
-}
-_1a1=_1a2;
-}else{
-if(_1a1.scheme==null){
-_1a1.scheme=_1a2.scheme;
-if(_1a1.authority==null){
-_1a1.authority=_1a2.authority;
-if(_1a1.path.charAt(0)!="/"){
-var path=_1a2.path.substring(0,_1a2.path.lastIndexOf("/")+1)+_1a1.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;
-}
-}
-}
-}
-_1a1.path=segs.join("/");
-}
-}
-}
-}
-uri="";
-if(_1a1.scheme!=null){
-uri+=_1a1.scheme+":";
-}
-if(_1a1.authority!=null){
-uri+="//"+_1a1.authority;
-}
-uri+=_1a1.path;
-if(_1a1.query!=null){
-uri+="?"+_1a1.query;
-}
-if(_1a1.fragment!=null){
-uri+="#"+_1a1.fragment;
-}
-}
-this.uri=uri.toString();
-var _1a6="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
-var r=this.uri.match(new RegExp(_1a6));
-this.scheme=r[2]||(r[1]?"":null);
-this.authority=r[4]||(r[3]?"":null);
-this.path=r[5];
-this.query=r[7]||(r[6]?"":null);
-this.fragment=r[9]||(r[8]?"":null);
-if(this.authority!=null){
-_1a6="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
-r=this.authority.match(new RegExp(_1a6));
-this.user=r[3]||null;
-this.password=r[4]||null;
-this.host=r[5];
-this.port=r[7]||null;
-}
-this.toString=function(){
-return this.uri;
-};
-};
-};
-dojo.provide("dojo.html.style");
-dojo.html.getClass=function(node){
-node=dojo.byId(node);
-if(!node){
-return "";
-}
-var cs="";
-if(node.className){
-cs=node.className;
-}else{
-if(dojo.html.hasAttribute(node,"class")){
-cs=dojo.html.getAttribute(node,"class");
-}
-}
-return cs.replace(/^\s+|\s+$/g,"");
-};
-dojo.html.getClasses=function(node){
-var c=dojo.html.getClass(node);
-return (c=="")?[]:c.split(/\s+/g);
-};
-dojo.html.hasClass=function(node,_1ad){
-return (new RegExp("(^|\\s+)"+_1ad+"(\\s+|$)")).test(dojo.html.getClass(node));
-};
-dojo.html.prependClass=function(node,_1af){
-_1af+=" "+dojo.html.getClass(node);
-return dojo.html.setClass(node,_1af);
-};
-dojo.html.addClass=function(node,_1b1){
-if(dojo.html.hasClass(node,_1b1)){
-return false;
-}
-_1b1=(dojo.html.getClass(node)+" "+_1b1).replace(/^\s+|\s+$/g,"");
-return dojo.html.setClass(node,_1b1);
-};
-dojo.html.setClass=function(node,_1b3){
-node=dojo.byId(node);
-var cs=new String(_1b3);
-try{
-if(typeof node.className=="string"){
-node.className=cs;
-}else{
-if(node.setAttribute){
-node.setAttribute("class",_1b3);
-node.className=cs;
-}else{
-return false;
-}
-}
-}
-catch(e){
-dojo.debug("dojo.html.setClass() failed",e);
-}
-return true;
-};
-dojo.html.removeClass=function(node,_1b6,_1b7){
-try{
-if(!_1b7){
-var _1b8=dojo.html.getClass(node).replace(new RegExp("(^|\\s+)"+_1b6+"(\\s+|$)"),"$1$2");
-}else{
-var _1b8=dojo.html.getClass(node).replace(_1b6,"");
-}
-dojo.html.setClass(node,_1b8);
-}
-catch(e){
-dojo.debug("dojo.html.removeClass() failed",e);
-}
-return true;
-};
-dojo.html.replaceClass=function(node,_1ba,_1bb){
-dojo.html.removeClass(node,_1bb);
-dojo.html.addClass(node,_1ba);
-};
-dojo.html.classMatchType={ContainsAll:0,ContainsAny:1,IsOnly:2};
-dojo.html.getElementsByClass=function(_1bc,_1bd,_1be,_1bf,_1c0){
-_1c0=false;
-var _1c1=dojo.doc();
-_1bd=dojo.byId(_1bd)||_1c1;
-var _1c2=_1bc.split(/\s+/g);
-var _1c3=[];
-if(_1bf!=1&&_1bf!=2){
-_1bf=0;
-}
-var _1c4=new RegExp("(\\s|^)(("+_1c2.join(")|(")+"))(\\s|$)");
-var _1c5=_1c2.join(" ").length;
-var _1c6=[];
-if(!_1c0&&_1c1.evaluate){
-var _1c7=".//"+(_1be||"*")+"[contains(";
-if(_1bf!=dojo.html.classMatchType.ContainsAny){
-_1c7+="concat(' ', at class,' '), ' "+_1c2.join(" ') and contains(concat(' ', at class,' '), ' ")+" ')";
-if(_1bf==2){
-_1c7+=" and string-length(@class)="+_1c5+"]";
-}else{
-_1c7+="]";
-}
-}else{
-_1c7+="concat(' ', at class,' '), ' "+_1c2.join(" ') or contains(concat(' ', at class,' '), ' ")+" ')]";
-}
-var _1c8=_1c1.evaluate(_1c7,_1bd,null,XPathResult.ANY_TYPE,null);
-var _1c9=_1c8.iterateNext();
-while(_1c9){
-try{
-_1c6.push(_1c9);
-_1c9=_1c8.iterateNext();
-}
-catch(e){
-break;
-}
-}
-return _1c6;
-}else{
-if(!_1be){
-_1be="*";
-}
-_1c6=_1bd.getElementsByTagName(_1be);
-var node,i=0;
-outer:
-while(node=_1c6[i++]){
-var _1cc=dojo.html.getClasses(node);
-if(_1cc.length==0){
-continue outer;
-}
-var _1cd=0;
-for(var j=0;j<_1cc.length;j++){
-if(_1c4.test(_1cc[j])){
-if(_1bf==dojo.html.classMatchType.ContainsAny){
-_1c3.push(node);
-continue outer;
-}else{
-_1cd++;
-}
-}else{
-if(_1bf==dojo.html.classMatchType.IsOnly){
-continue outer;
-}
-}
-}
-if(_1cd==_1c2.length){
-if((_1bf==dojo.html.classMatchType.IsOnly)&&(_1cd==_1cc.length)){
-_1c3.push(node);
-}else{
-if(_1bf==dojo.html.classMatchType.ContainsAll){
-_1c3.push(node);
-}
-}
-}
-}
-return _1c3;
-}
-};
-dojo.html.getElementsByClassName=dojo.html.getElementsByClass;
-dojo.html.toCamelCase=function(_1cf){
-var arr=_1cf.split("-"),cc=arr[0];
-for(var i=1;i<arr.length;i++){
-cc+=arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
-}
-return cc;
-};
-dojo.html.toSelectorCase=function(_1d3){
-return _1d3.replace(/([A-Z])/g,"-$1").toLowerCase();
-};
-dojo.html.getComputedStyle=function(node,_1d5,_1d6){
-node=dojo.byId(node);
-var _1d5=dojo.html.toSelectorCase(_1d5);
-var _1d7=dojo.html.toCamelCase(_1d5);
-if(!node||!node.style){
-return _1d6;
-}else{
-if(document.defaultView&&dojo.html.isDescendantOf(node,node.ownerDocument)){
-try{
-var cs=document.defaultView.getComputedStyle(node,"");
-if(cs){
-return cs.getPropertyValue(_1d5);
-}
-}
-catch(e){
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_1d5);
-}else{
-return _1d6;
-}
-}
-}else{
-if(node.currentStyle){
-return node.currentStyle[_1d7];
-}
-}
-}
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_1d5);
-}else{
-return _1d6;
-}
-};
-dojo.html.getStyleProperty=function(node,_1da){
-node=dojo.byId(node);
-return (node&&node.style?node.style[dojo.html.toCamelCase(_1da)]:undefined);
-};
-dojo.html.getStyle=function(node,_1dc){
-var _1dd=dojo.html.getStyleProperty(node,_1dc);
-return (_1dd?_1dd:dojo.html.getComputedStyle(node,_1dc));
-};
-dojo.html.setStyle=function(node,_1df,_1e0){
-node=dojo.byId(node);
-if(node&&node.style){
-var _1e1=dojo.html.toCamelCase(_1df);
-node.style[_1e1]=_1e0;
-}
-};
-dojo.html.setStyleText=function(_1e2,text){
-try{
-_1e2.style.cssText=text;
-}
-catch(e){
-_1e2.setAttribute("style",text);
-}
-};
-dojo.html.copyStyle=function(_1e4,_1e5){
-if(!_1e5.style.cssText){
-_1e4.setAttribute("style",_1e5.getAttribute("style"));
-}else{
-_1e4.style.cssText=_1e5.style.cssText;
-}
-dojo.html.addClass(_1e4,dojo.html.getClass(_1e5));
-};
-dojo.html.getUnitValue=function(node,_1e7,_1e8){
-var s=dojo.html.getComputedStyle(node,_1e7);
-if((!s)||((s=="auto")&&(_1e8))){
-return {value:0,units:"px"};
-}
-var _1ea=s.match(/(\-?[\d.]+)([a-z%]*)/i);
-if(!_1ea){
-return dojo.html.getUnitValue.bad;
-}
-return {value:Number(_1ea[1]),units:_1ea[2].toLowerCase()};
-};
-dojo.html.getUnitValue.bad={value:NaN,units:""};
-dojo.html.getPixelValue=function(node,_1ec,_1ed){
-var _1ee=dojo.html.getUnitValue(node,_1ec,_1ed);
-if(isNaN(_1ee.value)){
-return 0;
-}
-if((_1ee.value)&&(_1ee.units!="px")){
-return NaN;
-}
-return _1ee.value;
-};
-dojo.html.setPositivePixelValue=function(node,_1f0,_1f1){
-if(isNaN(_1f1)){
-return false;
-}
-node.style[_1f0]=Math.max(0,_1f1)+"px";
-return true;
-};
-dojo.html.styleSheet=null;
-dojo.html.insertCssRule=function(_1f2,_1f3,_1f4){
-if(!dojo.html.styleSheet){
-if(document.createStyleSheet){
-dojo.html.styleSheet=document.createStyleSheet();
-}else{
-if(document.styleSheets[0]){
-dojo.html.styleSheet=document.styleSheets[0];
-}else{
-return null;
-}
-}
-}
-if(arguments.length<3){
-if(dojo.html.styleSheet.cssRules){
-_1f4=dojo.html.styleSheet.cssRules.length;
-}else{
-if(dojo.html.styleSheet.rules){
-_1f4=dojo.html.styleSheet.rules.length;
-}else{
-return null;
-}
-}
-}
-if(dojo.html.styleSheet.insertRule){
-var rule=_1f2+" { "+_1f3+" }";
-return dojo.html.styleSheet.insertRule(rule,_1f4);
-}else{
-if(dojo.html.styleSheet.addRule){
-return dojo.html.styleSheet.addRule(_1f2,_1f3,_1f4);
-}else{
-return null;
-}
-}
-};
-dojo.html.removeCssRule=function(_1f6){
-if(!dojo.html.styleSheet){
-dojo.debug("no stylesheet defined for removing rules");
-return false;
-}
-if(dojo.render.html.ie){
-if(!_1f6){
-_1f6=dojo.html.styleSheet.rules.length;
-dojo.html.styleSheet.removeRule(_1f6);
-}
-}else{
-if(document.styleSheets[0]){
-if(!_1f6){
-_1f6=dojo.html.styleSheet.cssRules.length;
-}
-dojo.html.styleSheet.deleteRule(_1f6);
-}
-}
-return true;
-};
-dojo.html._insertedCssFiles=[];
-dojo.html.insertCssFile=function(URI,doc,_1f9,_1fa){
-if(!URI){
-return;
-}
-if(!doc){
-doc=document;
-}
-var _1fb=dojo.hostenv.getText(URI,false,_1fa);
-if(_1fb===null){
-return;
-}
-_1fb=dojo.html.fixPathsInCssText(_1fb,URI);
-if(_1f9){
-var idx=-1,node,ent=dojo.html._insertedCssFiles;
-for(var i=0;i<ent.length;i++){
-if((ent[i].doc==doc)&&(ent[i].cssText==_1fb)){
-idx=i;
-node=ent[i].nodeRef;
-break;
-}
-}
-if(node){
-var _200=doc.getElementsByTagName("style");
-for(var i=0;i<_200.length;i++){
-if(_200[i]==node){
-return;
-}
-}
-dojo.html._insertedCssFiles.shift(idx,1);
-}
-}
-var _201=dojo.html.insertCssText(_1fb,doc);
-dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_1fb,"nodeRef":_201});
-if(_201&&djConfig.isDebug){
-_201.setAttribute("dbgHref",URI);
-}
-return _201;
-};
-dojo.html.insertCssText=function(_202,doc,URI){
-if(!_202){
-return;
-}
-if(!doc){
-doc=document;
-}
-if(URI){
-_202=dojo.html.fixPathsInCssText(_202,URI);
-}
-var _205=doc.createElement("style");
-_205.setAttribute("type","text/css");
-var head=doc.getElementsByTagName("head")[0];
-if(!head){
-dojo.debug("No head tag in document, aborting styles");
-return;
-}else{
-head.appendChild(_205);
-}
-if(_205.styleSheet){
-var _207=function(){
-try{
-_205.styleSheet.cssText=_202;
-}
-catch(e){
-dojo.debug(e);
-}
-};
-if(_205.styleSheet.disabled){
-setTimeout(_207,10);
-}else{
-_207();
-}
-}else{
-var _208=doc.createTextNode(_202);
-_205.appendChild(_208);
-}
-return _205;
-};
-dojo.html.fixPathsInCssText=function(_209,URI){
-if(!_209||!URI){
-return;
-}
-var _20b,str="",url="",_20e="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
-var _20f=new RegExp("url\\(\\s*("+_20e+")\\s*\\)");
-var _210=/(file|https?|ftps?):\/\//;
-regexTrim=new RegExp("^[\\s]*(['\"]?)("+_20e+")\\1[\\s]*?$");
-if(dojo.render.html.ie55||dojo.render.html.ie60){
-var _211=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_20e+")['\"]");
-while(_20b=_211.exec(_209)){
-url=_20b[2].replace(regexTrim,"$2");
-if(!_210.exec(url)){
-url=(new dojo.uri.Uri(URI,url).toString());
-}
-str+=_209.substring(0,_20b.index)+"AlphaImageLoader("+_20b[1]+"src='"+url+"'";
-_209=_209.substr(_20b.index+_20b[0].length);
-}
-_209=str+_209;
-str="";
-}
-while(_20b=_20f.exec(_209)){
-url=_20b[1].replace(regexTrim,"$2");
-if(!_210.exec(url)){
-url=(new dojo.uri.Uri(URI,url).toString());
-}
-str+=_209.substring(0,_20b.index)+"url("+url+")";
-_209=_209.substr(_20b.index+_20b[0].length);
-}
-return str+_209;
-};
-dojo.html.setActiveStyleSheet=function(_212){
-var i=0,a,els=dojo.doc().getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")){
-a.disabled=true;
-if(a.getAttribute("title")==_212){
-a.disabled=false;
-}
-}
-}
-};
-dojo.html.getActiveStyleSheet=function(){
-var i=0,a,els=dojo.doc().getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")&&!a.disabled){
-return a.getAttribute("title");
-}
-}
-return null;
-};
-dojo.html.getPreferredStyleSheet=function(){
-var i=0,a,els=dojo.doc().getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("rel").indexOf("alt")==-1&&a.getAttribute("title")){
-return a.getAttribute("title");
-}
-}
-return null;
-};
-dojo.html.applyBrowserClass=function(node){
-var drh=dojo.render.html;
-var _21e={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
-for(var p in _21e){
-if(_21e[p]){
-dojo.html.addClass(node,p);
-}
-}
-};
-dojo.provide("dojo.html.*");
-dojo.provide("dojo.html.display");
-dojo.html._toggle=function(node,_221,_222){
-node=dojo.byId(node);
-_222(node,!_221(node));
-return _221(node);
-};
-dojo.html.show=function(node){
-node=dojo.byId(node);
-if(dojo.html.getStyleProperty(node,"display")=="none"){
-dojo.html.setStyle(node,"display",(node.dojoDisplayCache||""));
-node.dojoDisplayCache=undefined;
-}
-};
-dojo.html.hide=function(node){
-node=dojo.byId(node);
-if(typeof node["dojoDisplayCache"]=="undefined"){
-var d=dojo.html.getStyleProperty(node,"display");
-if(d!="none"){
-node.dojoDisplayCache=d;
-}
-}
-dojo.html.setStyle(node,"display","none");
-};
-dojo.html.setShowing=function(node,_227){
-dojo.html[(_227?"show":"hide")](node);
-};
-dojo.html.isShowing=function(node){
-return (dojo.html.getStyleProperty(node,"display")!="none");
-};
-dojo.html.toggleShowing=function(node){
-return dojo.html._toggle(node,dojo.html.isShowing,dojo.html.setShowing);
-};
-dojo.html.displayMap={tr:"",td:"",th:"",img:"inline",span:"inline",input:"inline",button:"inline"};
-dojo.html.suggestDisplayByTagName=function(node){
-node=dojo.byId(node);
-if(node&&node.tagName){
-var tag=node.tagName.toLowerCase();
-return (tag in dojo.html.displayMap?dojo.html.displayMap[tag]:"block");
-}
-};
-dojo.html.setDisplay=function(node,_22d){
-dojo.html.setStyle(node,"display",((_22d instanceof String||typeof _22d=="string")?_22d:(_22d?dojo.html.suggestDisplayByTagName(node):"none")));
-};
-dojo.html.isDisplayed=function(node){
-return (dojo.html.getComputedStyle(node,"display")!="none");
-};
-dojo.html.toggleDisplay=function(node){
-return dojo.html._toggle(node,dojo.html.isDisplayed,dojo.html.setDisplay);
-};
-dojo.html.setVisibility=function(node,_231){
-dojo.html.setStyle(node,"visibility",((_231 instanceof String||typeof _231=="string")?_231:(_231?"visible":"hidden")));
-};
-dojo.html.isVisible=function(node){
-return (dojo.html.getComputedStyle(node,"visibility")!="hidden");
-};
-dojo.html.toggleVisibility=function(node){
-return dojo.html._toggle(node,dojo.html.isVisible,dojo.html.setVisibility);
-};
-dojo.html.setOpacity=function(node,_235,_236){
-node=dojo.byId(node);
-var h=dojo.render.html;
-if(!_236){
-if(_235>=1){
-if(h.ie){
-dojo.html.clearOpacity(node);
-return;
-}else{
-_235=0.999999;
-}
-}else{
-if(_235<0){
-_235=0;
-}
-}
-}
-if(h.ie){
-if(node.nodeName.toLowerCase()=="tr"){
-var tds=node.getElementsByTagName("td");
-for(var x=0;x<tds.length;x++){
-tds[x].style.filter="Alpha(Opacity="+_235*100+")";
-}
-}
-node.style.filter="Alpha(Opacity="+_235*100+")";
-}else{
-if(h.moz){
-node.style.opacity=_235;
-node.style.MozOpacity=_235;
-}else{
-if(h.safari){
-node.style.opacity=_235;
-node.style.KhtmlOpacity=_235;
-}else{
-node.style.opacity=_235;
-}
-}
-}
-};
-dojo.html.clearOpacity=function(node){
-node=dojo.byId(node);
-var ns=node.style;
-var h=dojo.render.html;
-if(h.ie){
-try{
-if(node.filters&&node.filters.alpha){
-ns.filter="";
-}
-}
-catch(e){
-}
-}else{
-if(h.moz){
-ns.opacity=1;
-ns.MozOpacity=1;
-}else{
-if(h.safari){
-ns.opacity=1;
-ns.KhtmlOpacity=1;
-}else{
-ns.opacity=1;
-}
-}
-}
-};
-dojo.html.getOpacity=function(node){
-node=dojo.byId(node);
-var h=dojo.render.html;
-if(h.ie){
-var opac=(node.filters&&node.filters.alpha&&typeof node.filters.alpha.opacity=="number"?node.filters.alpha.opacity:100)/100;
-}else{
-var opac=node.style.opacity||node.style.MozOpacity||node.style.KhtmlOpacity||1;
-}
-return opac>=0.999999?1:Number(opac);
-};
-dojo.provide("dojo.html.layout");
-dojo.html.sumAncestorProperties=function(node,prop){
-node=dojo.byId(node);
-if(!node){
-return 0;
-}
-var _242=0;
-while(node){
-if(dojo.html.getComputedStyle(node,"position")=="fixed"){
-return 0;
-}
-var val=node[prop];
-if(val){
-_242+=val-0;
-if(node==dojo.body()){
-break;
-}
-}
-node=node.parentNode;
-}
-return _242;
-};
-dojo.html.setStyleAttributes=function(node,_245){
-node=dojo.byId(node);
-var _246=_245.replace(/(;)?\s*$/,"").split(";");
-for(var i=0;i<_246.length;i++){
-var _248=_246[i].split(":");
-var name=_248[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
-var _24a=_248[1].replace(/\s*$/,"").replace(/^\s*/,"");
-switch(name){
-case "opacity":
-dojo.html.setOpacity(node,_24a);
-break;
-case "content-height":
-dojo.html.setContentBox(node,{height:_24a});
-break;
-case "content-width":
-dojo.html.setContentBox(node,{width:_24a});
-break;
-case "outer-height":
-dojo.html.setMarginBox(node,{height:_24a});
-break;
-case "outer-width":
-dojo.html.setMarginBox(node,{width:_24a});
-break;
-default:
-node.style[dojo.html.toCamelCase(name)]=_24a;
-}
-}
-};
-dojo.html.boxSizing={MARGIN_BOX:"margin-box",BORDER_BOX:"border-box",PADDING_BOX:"padding-box",CONTENT_BOX:"content-box"};
-dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_24c,_24d){
-node=dojo.byId(node,node.ownerDocument);
-var ret={x:0,y:0};
-var bs=dojo.html.boxSizing;
-if(!_24d){
-_24d=bs.CONTENT_BOX;
-}
-var _250=2;
-var _251;
-switch(_24d){
-case bs.MARGIN_BOX:
-_251=3;
-break;
-case bs.BORDER_BOX:
-_251=2;
-break;
-case bs.PADDING_BOX:
-default:
-_251=1;
-break;
-case bs.CONTENT_BOX:
-_251=0;
-break;
-}
-var h=dojo.render.html;
-var db=document["body"]||document["documentElement"];
-if(h.ie){
-with(node.getBoundingClientRect()){
-ret.x=left-2;
-ret.y=top-2;
-}
-}else{
-if(document.getBoxObjectFor){
-_250=1;
-try{
-var bo=document.getBoxObjectFor(node);
-ret.x=bo.x-dojo.html.sumAncestorProperties(node,"scrollLeft");
-ret.y=bo.y-dojo.html.sumAncestorProperties(node,"scrollTop");
-}
-catch(e){
-}
-}else{
-if(node["offsetParent"]){
-var _255;
-if((h.safari)&&(node.style.getPropertyValue("position")=="absolute")&&(node.parentNode==db)){
-_255=db;
-}else{
-_255=db.parentNode;
-}
-if(node.parentNode!=db){
-var nd=node;
-if(dojo.render.html.opera){
-nd=db;
-}
-ret.x-=dojo.html.sumAncestorProperties(nd,"scrollLeft");
-ret.y-=dojo.html.sumAncestorProperties(nd,"scrollTop");
-}
-var _257=node;
-do{
-var n=_257["offsetLeft"];
-if(!h.opera||n>0){
-ret.x+=isNaN(n)?0:n;
-}
-var m=_257["offsetTop"];
-ret.y+=isNaN(m)?0:m;
-_257=_257.offsetParent;
-}while((_257!=_255)&&(_257!=null));
-}else{
-if(node["x"]&&node["y"]){
-ret.x+=isNaN(node.x)?0:node.x;
-ret.y+=isNaN(node.y)?0:node.y;
-}
-}
-}
-}
-if(_24c){
-var _25a=dojo.html.getScroll();
-ret.y+=_25a.top;
-ret.x+=_25a.left;
-}
-var _25b=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
-if(_250>_251){
-for(var i=_251;i<_250;++i){
-ret.y+=_25b[i](node,"top");
-ret.x+=_25b[i](node,"left");
-}
-}else{
-if(_250<_251){
-for(var i=_251;i>_250;--i){
-ret.y-=_25b[i-1](node,"top");
-ret.x-=_25b[i-1](node,"left");
-}
-}
-}
-ret.top=ret.y;
-ret.left=ret.x;
-return ret;
-};
-dojo.html.isPositionAbsolute=function(node){
-return (dojo.html.getComputedStyle(node,"position")=="absolute");
-};
-dojo.html._sumPixelValues=function(node,_25f,_260){
-var _261=0;
-for(var x=0;x<_25f.length;x++){
-_261+=dojo.html.getPixelValue(node,_25f[x],_260);
-}
-return _261;
-};
-dojo.html.getMargin=function(node){
-return {width:dojo.html._sumPixelValues(node,["margin-left","margin-right"],(dojo.html.getComputedStyle(node,"position")=="absolute")),height:dojo.html._sumPixelValues(node,["margin-top","margin-bottom"],(dojo.html.getComputedStyle(node,"position")=="absolute"))};
-};
-dojo.html.getBorder=function(node){
-return {width:dojo.html.getBorderExtent(node,"left")+dojo.html.getBorderExtent(node,"right"),height:dojo.html.getBorderExtent(node,"top")+dojo.html.getBorderExtent(node,"bottom")};
-};
-dojo.html.getBorderExtent=function(node,side){
-return (dojo.html.getStyle(node,"border-"+side+"-style")=="none"?0:dojo.html.getPixelValue(node,"border-"+side+"-width"));
-};
-dojo.html.getMarginExtent=function(node,side){
-return dojo.html._sumPixelValues(node,["margin-"+side],dojo.html.isPositionAbsolute(node));
-};
-dojo.html.getPaddingExtent=function(node,side){
-return dojo.html._sumPixelValues(node,["padding-"+side],true);
-};
-dojo.html.getPadding=function(node){
-return {width:dojo.html._sumPixelValues(node,["padding-left","padding-right"],true),height:dojo.html._sumPixelValues(node,["padding-top","padding-bottom"],true)};
-};
-dojo.html.getPadBorder=function(node){
-var pad=dojo.html.getPadding(node);
-var _26e=dojo.html.getBorder(node);
-return {width:pad.width+_26e.width,height:pad.height+_26e.height};
-};
-dojo.html.getBoxSizing=function(node){
-var h=dojo.render.html;
-var bs=dojo.html.boxSizing;
-if(((h.ie)||(h.opera))&&node.nodeName!="IMG"){
-var cm=document["compatMode"];
-if((cm=="BackCompat")||(cm=="QuirksMode")){
-return bs.BORDER_BOX;
-}else{
-return bs.CONTENT_BOX;
-}
-}else{
-if(arguments.length==0){
-node=document.documentElement;
-}
-var _273=dojo.html.getStyle(node,"-moz-box-sizing");
-if(!_273){
-_273=dojo.html.getStyle(node,"box-sizing");
-}
-return (_273?_273:bs.CONTENT_BOX);
-}
-};
-dojo.html.isBorderBox=function(node){
-return (dojo.html.getBoxSizing(node)==dojo.html.boxSizing.BORDER_BOX);
-};
-dojo.html.getBorderBox=function(node){
-node=dojo.byId(node);
-return {width:node.offsetWidth,height:node.offsetHeight};
-};
-dojo.html.getPaddingBox=function(node){
-var box=dojo.html.getBorderBox(node);
-var _278=dojo.html.getBorder(node);
-return {width:box.width-_278.width,height:box.height-_278.height};
-};
-dojo.html.getContentBox=function(node){
-node=dojo.byId(node);
-var _27a=dojo.html.getPadBorder(node);
-return {width:node.offsetWidth-_27a.width,height:node.offsetHeight-_27a.height};
-};
-dojo.html.setContentBox=function(node,args){
-node=dojo.byId(node);
-var _27d=0;
-var _27e=0;
-var isbb=dojo.html.isBorderBox(node);
-var _280=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
-var ret={};
-if(typeof args.width!="undefined"){
-_27d=args.width+_280.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_27d);
-}
-if(typeof args.height!="undefined"){
-_27e=args.height+_280.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_27e);
-}
-return ret;
-};
-dojo.html.getMarginBox=function(node){
-var _283=dojo.html.getBorderBox(node);
-var _284=dojo.html.getMargin(node);
-return {width:_283.width+_284.width,height:_283.height+_284.height};
-};
-dojo.html.setMarginBox=function(node,args){
-node=dojo.byId(node);
-var _287=0;
-var _288=0;
-var isbb=dojo.html.isBorderBox(node);
-var _28a=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
-var _28b=dojo.html.getMargin(node);
-var ret={};
-if(typeof args.width!="undefined"){
-_287=args.width-_28a.width;
-_287-=_28b.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_287);
-}
-if(typeof args.height!="undefined"){
-_288=args.height-_28a.height;
-_288-=_28b.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_288);
-}
-return ret;
-};
-dojo.html.getElementBox=function(node,type){
-var bs=dojo.html.boxSizing;
-switch(type){
-case bs.MARGIN_BOX:
-return dojo.html.getMarginBox(node);
-case bs.BORDER_BOX:
-return dojo.html.getBorderBox(node);
-case bs.PADDING_BOX:
-return dojo.html.getPaddingBox(node);
-case bs.CONTENT_BOX:
-default:
-return dojo.html.getContentBox(node);
-}
-};
-dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_290,_291,_292){
-if(_290 instanceof Array||typeof _290=="array"){
-dojo.deprecated("dojo.html.toCoordinateArray","use dojo.html.toCoordinateObject({left: , top: , width: , height: }) instead","0.5");
-while(_290.length<4){
-_290.push(0);
-}
-while(_290.length>4){
-_290.pop();
-}
-var ret={left:_290[0],top:_290[1],width:_290[2],height:_290[3]};
-}else{
-if(!_290.nodeType&&!(_290 instanceof String||typeof _290=="string")&&("width" in _290||"height" in _290||"left" in _290||"x" in _290||"top" in _290||"y" in _290)){
-var ret={left:_290.left||_290.x||0,top:_290.top||_290.y||0,width:_290.width||0,height:_290.height||0};
-}else{
-var node=dojo.byId(_290);
-var pos=dojo.html.abs(node,_291,_292);
-var _296=dojo.html.getMarginBox(node);
-var ret={left:pos.left,top:pos.top,width:_296.width,height:_296.height};
-}
-}
-ret.x=ret.left;
-ret.y=ret.top;
-return ret;
-};
-dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_298){
-return dojo.html._callDeprecated("setMarginBoxWidth","setMarginBox",arguments,"width");
-};
-dojo.html.setMarginBoxHeight=dojo.html.setOuterHeight=function(){
-return dojo.html._callDeprecated("setMarginBoxHeight","setMarginBox",arguments,"height");
-};
-dojo.html.getMarginBoxWidth=dojo.html.getOuterWidth=function(){
-return dojo.html._callDeprecated("getMarginBoxWidth","getMarginBox",arguments,null,"width");
-};
-dojo.html.getMarginBoxHeight=dojo.html.getOuterHeight=function(){
-return dojo.html._callDeprecated("getMarginBoxHeight","getMarginBox",arguments,null,"height");
-};
-dojo.html.getTotalOffset=function(node,type,_29b){
-return dojo.html._callDeprecated("getTotalOffset","getAbsolutePosition",arguments,null,type);
-};
-dojo.html.getAbsoluteX=function(node,_29d){
-return dojo.html._callDeprecated("getAbsoluteX","getAbsolutePosition",arguments,null,"x");
-};
-dojo.html.getAbsoluteY=function(node,_29f){
-return dojo.html._callDeprecated("getAbsoluteY","getAbsolutePosition",arguments,null,"y");
-};
-dojo.html.totalOffsetLeft=function(node,_2a1){
-return dojo.html._callDeprecated("totalOffsetLeft","getAbsolutePosition",arguments,null,"left");
-};
-dojo.html.totalOffsetTop=function(node,_2a3){
-return dojo.html._callDeprecated("totalOffsetTop","getAbsolutePosition",arguments,null,"top");
-};
-dojo.html.getMarginWidth=function(node){
-return dojo.html._callDeprecated("getMarginWidth","getMargin",arguments,null,"width");
-};
-dojo.html.getMarginHeight=function(node){
-return dojo.html._callDeprecated("getMarginHeight","getMargin",arguments,null,"height");
-};
-dojo.html.getBorderWidth=function(node){
-return dojo.html._callDeprecated("getBorderWidth","getBorder",arguments,null,"width");
-};
-dojo.html.getBorderHeight=function(node){
-return dojo.html._callDeprecated("getBorderHeight","getBorder",arguments,null,"height");
-};
-dojo.html.getPaddingWidth=function(node){
-return dojo.html._callDeprecated("getPaddingWidth","getPadding",arguments,null,"width");
-};
-dojo.html.getPaddingHeight=function(node){
-return dojo.html._callDeprecated("getPaddingHeight","getPadding",arguments,null,"height");
-};
-dojo.html.getPadBorderWidth=function(node){
-return dojo.html._callDeprecated("getPadBorderWidth","getPadBorder",arguments,null,"width");
-};
-dojo.html.getPadBorderHeight=function(node){
-return dojo.html._callDeprecated("getPadBorderHeight","getPadBorder",arguments,null,"height");
-};
-dojo.html.getBorderBoxWidth=dojo.html.getInnerWidth=function(){
-return dojo.html._callDeprecated("getBorderBoxWidth","getBorderBox",arguments,null,"width");
-};
-dojo.html.getBorderBoxHeight=dojo.html.getInnerHeight=function(){
-return dojo.html._callDeprecated("getBorderBoxHeight","getBorderBox",arguments,null,"height");
-};
-dojo.html.getContentBoxWidth=dojo.html.getContentWidth=function(){
-return dojo.html._callDeprecated("getContentBoxWidth","getContentBox",arguments,null,"width");
-};
-dojo.html.getContentBoxHeight=dojo.html.getContentHeight=function(){
-return dojo.html._callDeprecated("getContentBoxHeight","getContentBox",arguments,null,"height");
-};
-dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_2ad){
-return dojo.html._callDeprecated("setContentBoxWidth","setContentBox",arguments,"width");
-};
-dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_2af){
-return dojo.html._callDeprecated("setContentBoxHeight","setContentBox",arguments,"height");
-};
-dojo.provide("dojo.html.util");
-dojo.html.getElementWindow=function(_2b0){
-return dojo.html.getDocumentWindow(_2b0.ownerDocument);
-};
-dojo.html.getDocumentWindow=function(doc){
-if(dojo.render.html.safari&&!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.render.html.ie&&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;
-};
-dojo.html.gravity=function(node,e){
-node=dojo.byId(node);
-var _2b8=dojo.html.getCursorPosition(e);
-with(dojo.html){
-var _2b9=getAbsolutePosition(node,true);
-var bb=getBorderBox(node);
-var _2bb=_2b9.x+(bb.width/2);
-var _2bc=_2b9.y+(bb.height/2);
-}
-with(dojo.html.gravity){
-return ((_2b8.x<_2bb?WEST:EAST)|(_2b8.y<_2bc?NORTH:SOUTH));
-}
-};
-dojo.html.gravity.NORTH=1;
-dojo.html.gravity.SOUTH=1<<1;
-dojo.html.gravity.EAST=1<<2;
-dojo.html.gravity.WEST=1<<3;
-dojo.html.overElement=function(_2bd,e){
-_2bd=dojo.byId(_2bd);
-var _2bf=dojo.html.getCursorPosition(e);
-var bb=dojo.html.getBorderBox(_2bd);
-var _2c1=dojo.html.getAbsolutePosition(_2bd,true,dojo.html.boxSizing.BORDER_BOX);
-var top=_2c1.y;
-var _2c3=top+bb.height;
-var left=_2c1.x;
-var _2c5=left+bb.width;
-return (_2bf.x>=left&&_2bf.x<=_2c5&&_2bf.y>=top&&_2bf.y<=_2c3);
-};
-dojo.html.renderedTextContent=function(node){
-node=dojo.byId(node);
-var _2c7="";
-if(node==null){
-return _2c7;
-}
-for(var i=0;i<node.childNodes.length;i++){
-switch(node.childNodes[i].nodeType){
-case 1:
-case 5:
-var _2c9="unknown";
-try{
-_2c9=dojo.html.getStyle(node.childNodes[i],"display");
-}
-catch(E){
-}
-switch(_2c9){
-case "block":
-case "list-item":
-case "run-in":
-case "table":
-case "table-row-group":
-case "table-header-group":
-case "table-footer-group":
-case "table-row":
-case "table-column-group":
-case "table-column":
-case "table-cell":
-case "table-caption":
-_2c7+="\n";
-_2c7+=dojo.html.renderedTextContent(node.childNodes[i]);
-_2c7+="\n";
-break;
-case "none":
-break;
-default:
-if(node.childNodes[i].tagName&&node.childNodes[i].tagName.toLowerCase()=="br"){
-_2c7+="\n";
-}else{
-_2c7+=dojo.html.renderedTextContent(node.childNodes[i]);
-}
-break;
-}
-break;
-case 3:
-case 2:
-case 4:
-var text=node.childNodes[i].nodeValue;
-var _2cb="unknown";
-try{
-_2cb=dojo.html.getStyle(node,"text-transform");
-}
-catch(E){
-}
-switch(_2cb){
-case "capitalize":
-var _2cc=text.split(" ");
-for(var i=0;i<_2cc.length;i++){
-_2cc[i]=_2cc[i].charAt(0).toUpperCase()+_2cc[i].substring(1);
-}
-text=_2cc.join(" ");
-break;
-case "uppercase":
-text=text.toUpperCase();
-break;
-case "lowercase":
-text=text.toLowerCase();
-break;
-default:
-break;
-}
-switch(_2cb){
-case "nowrap":
-break;
-case "pre-wrap":
-break;
-case "pre-line":
-break;
-case "pre":
-break;
-default:
-text=text.replace(/\s+/," ");
-if(/\s$/.test(_2c7)){
-text.replace(/^\s/,"");
-}
-break;
-}
-_2c7+=text;
-break;
-default:
-break;
-}
-}
-return _2c7;
-};
-dojo.html.createNodesFromText=function(txt,trim){
-if(trim){
-txt=txt.replace(/^\s+|\s+$/g,"");
-}
-var tn=dojo.doc().createElement("div");
-tn.style.visibility="hidden";
-dojo.body().appendChild(tn);
-var _2d0="none";
-if((/^<t[dh][\s\r\n>]/i).test(txt.replace(/^\s+/))){
-txt="<table><tbody><tr>"+txt+"</tr></tbody></table>";
-_2d0="cell";
-}else{
-if((/^<tr[\s\r\n>]/i).test(txt.replace(/^\s+/))){
-txt="<table><tbody>"+txt+"</tbody></table>";
-_2d0="row";
-}else{
-if((/^<(thead|tbody|tfoot)[\s\r\n>]/i).test(txt.replace(/^\s+/))){
-txt="<table>"+txt+"</table>";
-_2d0="section";
-}
-}
-}
-tn.innerHTML=txt;
-if(tn["normalize"]){
-tn.normalize();
-}
-var _2d1=null;
-switch(_2d0){
-case "cell":
-_2d1=tn.getElementsByTagName("tr")[0];
-break;
-case "row":
-_2d1=tn.getElementsByTagName("tbody")[0];
-break;
-case "section":
-_2d1=tn.getElementsByTagName("table")[0];
-break;
-default:
-_2d1=tn;
-break;
-}
-var _2d2=[];
-for(var x=0;x<_2d1.childNodes.length;x++){
-_2d2.push(_2d1.childNodes[x].cloneNode(true));
-}
-tn.style.display="none";
-dojo.html.destroyNode(tn);
-return _2d2;
-};
-dojo.html.placeOnScreen=function(node,_2d5,_2d6,_2d7,_2d8,_2d9,_2da){
-if(_2d5 instanceof Array||typeof _2d5=="array"){
-_2da=_2d9;
-_2d9=_2d8;
-_2d8=_2d7;
-_2d7=_2d6;
-_2d6=_2d5[1];
-_2d5=_2d5[0];
-}
-if(_2d9 instanceof String||typeof _2d9=="string"){
-_2d9=_2d9.split(",");
-}
-if(!isNaN(_2d7)){
-_2d7=[Number(_2d7),Number(_2d7)];
-}else{
-if(!(_2d7 instanceof Array||typeof _2d7=="array")){
-_2d7=[0,0];
-}
-}
-var _2db=dojo.html.getScroll().offset;
-var view=dojo.html.getViewport();
-node=dojo.byId(node);
-var _2dd=node.style.display;
-node.style.display="";
-var bb=dojo.html.getBorderBox(node);
-var w=bb.width;
-var h=bb.height;
-node.style.display=_2dd;
-if(!(_2d9 instanceof Array||typeof _2d9=="array")){
-_2d9=["TL"];
-}
-var _2e1,_2e2,_2e3=Infinity,_2e4;
-for(var _2e5=0;_2e5<_2d9.length;++_2e5){
-var _2e6=_2d9[_2e5];
-var _2e7=true;
-var tryX=_2d5-(_2e6.charAt(1)=="L"?0:w)+_2d7[0]*(_2e6.charAt(1)=="L"?1:-1);
-var tryY=_2d6-(_2e6.charAt(0)=="T"?0:h)+_2d7[1]*(_2e6.charAt(0)=="T"?1:-1);
-if(_2d8){
-tryX-=_2db.x;
-tryY-=_2db.y;
-}
-if(tryX<0){
-tryX=0;
-_2e7=false;
-}
-if(tryY<0){
-tryY=0;
-_2e7=false;
-}
-var x=tryX+w;
-if(x>view.width){
-x=view.width-w;
-_2e7=false;
-}else{
-x=tryX;
-}
-x=Math.max(_2d7[0],x)+_2db.x;
-var y=tryY+h;
-if(y>view.height){
-y=view.height-h;
-_2e7=false;
-}else{
-y=tryY;
-}
-y=Math.max(_2d7[1],y)+_2db.y;
-if(_2e7){
-_2e1=x;
-_2e2=y;
-_2e3=0;
-_2e4=_2e6;
-break;
-}else{
-var dist=Math.pow(x-tryX-_2db.x,2)+Math.pow(y-tryY-_2db.y,2);
-if(_2e3>dist){
-_2e3=dist;
-_2e1=x;
-_2e2=y;
-_2e4=_2e6;
-}
-}
-}
-if(!_2da){
-node.style.left=_2e1+"px";
-node.style.top=_2e2+"px";
-}
-return {left:_2e1,top:_2e2,x:_2e1,y:_2e2,dist:_2e3,corner:_2e4};
-};
-dojo.html.placeOnScreenPoint=function(node,_2ee,_2ef,_2f0,_2f1){
-dojo.deprecated("dojo.html.placeOnScreenPoint","use dojo.html.placeOnScreen() instead","0.5");
-return dojo.html.placeOnScreen(node,_2ee,_2ef,_2f0,_2f1,["TL","TR","BL","BR"]);
-};
-dojo.html.placeOnScreenAroundElement=function(node,_2f3,_2f4,_2f5,_2f6,_2f7){
-var best,_2f9=Infinity;
-_2f3=dojo.byId(_2f3);
-var _2fa=_2f3.style.display;
-_2f3.style.display="";
-var mb=dojo.html.getElementBox(_2f3,_2f5);
-var _2fc=mb.width;
-var _2fd=mb.height;
-var _2fe=dojo.html.getAbsolutePosition(_2f3,true,_2f5);
-_2f3.style.display=_2fa;
-for(var _2ff in _2f6){
-var pos,_301,_302;
-var _303=_2f6[_2ff];
-_301=_2fe.x+(_2ff.charAt(1)=="L"?0:_2fc);
-_302=_2fe.y+(_2ff.charAt(0)=="T"?0:_2fd);
-pos=dojo.html.placeOnScreen(node,_301,_302,_2f4,true,_303,true);
-if(pos.dist==0){
-best=pos;
-break;
-}else{
-if(_2f9>pos.dist){
-_2f9=pos.dist;
-best=pos;
-}
-}
-}
-if(!_2f7){
-node.style.left=best.left+"px";
-node.style.top=best.top+"px";
-}
-return best;
-};
-dojo.html.scrollIntoView=function(node){
-if(!node){
-return;
-}
-if(dojo.render.html.ie){
-if(dojo.html.getBorderBox(node.parentNode).height<=node.parentNode.scrollHeight){
-node.scrollIntoView(false);
-}
-}else{
-if(dojo.render.html.mozilla){
-node.scrollIntoView(false);
-}else{
-var _305=node.parentNode;
-var _306=_305.scrollTop+dojo.html.getBorderBox(_305).height;
-var _307=node.offsetTop+dojo.html.getMarginBox(node).height;
-if(_306<_307){
-_305.scrollTop+=(_307-_306);
-}else{
-if(_305.scrollTop>node.offsetTop){
-_305.scrollTop-=(_305.scrollTop-node.offsetTop);
-}
-}
-}
-}
-};
-dojo.provide("dojo.xml.Parse");
-dojo.xml.Parse=function(){
-var isIE=((dojo.render.html.capable)&&(dojo.render.html.ie));
-function getTagName(node){
-try{
-return node.tagName.toLowerCase();
-}
-catch(e){
-return "";
-}
-}
-function getDojoTagName(node){
-var _30b=getTagName(node);
-if(!_30b){
-return "";
-}
-if((dojo.widget)&&(dojo.widget.tags[_30b])){
-return _30b;
-}
-var p=_30b.indexOf(":");
-if(p>=0){
-return _30b;
-}
-if(_30b.substr(0,5)=="dojo:"){
-return _30b;
-}
-if(dojo.render.html.capable&&dojo.render.html.ie&&node.scopeName!="HTML"){
-return node.scopeName.toLowerCase()+":"+_30b;
-}
-if(_30b.substr(0,4)=="dojo"){
-return "dojo:"+_30b.substring(4);
-}
-var djt=node.getAttribute("dojoType")||node.getAttribute("dojotype");
-if(djt){
-if(djt.indexOf(":")<0){
-djt="dojo:"+djt;
-}
-return djt.toLowerCase();
-}
-djt=node.getAttributeNS&&node.getAttributeNS(dojo.dom.dojoml,"type");
-if(djt){
-return "dojo:"+djt.toLowerCase();
-}
-try{
-djt=node.getAttribute("dojo:type");
-}
-catch(e){
-}
-if(djt){
-return "dojo:"+djt.toLowerCase();
-}
-if((dj_global["djConfig"])&&(!djConfig["ignoreClassNames"])){
-var _30e=node.className||node.getAttribute("class");
-if((_30e)&&(_30e.indexOf)&&(_30e.indexOf("dojo-")!=-1)){
-var _30f=_30e.split(" ");
-for(var x=0,c=_30f.length;x<c;x++){
-if(_30f[x].slice(0,5)=="dojo-"){
-return "dojo:"+_30f[x].substr(5).toLowerCase();
-}
-}
-}
-}
-return "";
-}
-this.parseElement=function(node,_313,_314,_315){
-var _316=getTagName(node);
-if(isIE&&_316.indexOf("/")==0){
-return null;
-}
-try{
-var attr=node.getAttribute("parseWidgets");
-if(attr&&attr.toLowerCase()=="false"){
-return {};
-}
-}
-catch(e){
-}
-var _318=true;
-if(_314){
-var _319=getDojoTagName(node);
-_316=_319||_316;
-_318=Boolean(_319);
-}
-var _31a={};
-_31a[_316]=[];
-var pos=_316.indexOf(":");
-if(pos>0){
-var ns=_316.substring(0,pos);
-_31a["ns"]=ns;
-if((dojo.ns)&&(!dojo.ns.allow(ns))){
-_318=false;
-}
-}
-if(_318){
-var _31d=this.parseAttributes(node);
-for(var attr in _31d){
-if((!_31a[_316][attr])||(typeof _31a[_316][attr]!="array")){
-_31a[_316][attr]=[];
-}
-_31a[_316][attr].push(_31d[attr]);
-}
-_31a[_316].nodeRef=node;
-_31a.tagName=_316;
-_31a.index=_315||0;
-}
-var _31e=0;
-for(var i=0;i<node.childNodes.length;i++){
-var tcn=node.childNodes.item(i);
-switch(tcn.nodeType){
-case dojo.dom.ELEMENT_NODE:
-var ctn=getDojoTagName(tcn)||getTagName(tcn);
-if(!_31a[ctn]){
-_31a[ctn]=[];
-}
-_31a[ctn].push(this.parseElement(tcn,true,_314,_31e));
-if((tcn.childNodes.length==1)&&(tcn.childNodes.item(0).nodeType==dojo.dom.TEXT_NODE)){
-_31a[ctn][_31a[ctn].length-1].value=tcn.childNodes.item(0).nodeValue;
-}
-_31e++;
-break;
-case dojo.dom.TEXT_NODE:
-if(node.childNodes.length==1){
-_31a[_316].push({value:node.childNodes.item(0).nodeValue});
-}
-break;
-default:
-break;
-}
-}
-return _31a;
-};
-this.parseAttributes=function(node){
-var _323={};
-var atts=node.attributes;
-var _325,i=0;
-while((_325=atts[i++])){
-if(isIE){
-if(!_325){
-continue;
-}
-if((typeof _325=="object")&&(typeof _325.nodeValue=="undefined")||(_325.nodeValue==null)||(_325.nodeValue=="")){
-continue;
-}
-}
-var nn=_325.nodeName.split(":");
-nn=(nn.length==2)?nn[1]:_325.nodeName;
-_323[nn]={value:_325.nodeValue};
-}
-return _323;
-};
-};
-dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_328,_329){
-var fcn=(dojo.lang.isString(_329)?_328[_329]:_329)||function(){
-};
-return function(){
-return fcn.apply(_328,arguments);
-};
-};
-dojo.lang.anonCtr=0;
-dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_32b,_32c,_32d){
-var nso=(_32c||dojo.lang.anon);
-if((_32d)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
-for(var x in nso){
-try{
-if(nso[x]===_32b){
-return x;
-}
-}
-catch(e){
-}
-}
-}
-var ret="__"+dojo.lang.anonCtr++;
-while(typeof nso[ret]!="undefined"){
-ret="__"+dojo.lang.anonCtr++;
-}
-nso[ret]=_32b;
-return ret;
-};
-dojo.lang.forward=function(_331){
-return function(){
-return this[_331].apply(this,arguments);
-};
-};
-dojo.lang.curry=function(_332,func){
-var _334=[];
-_332=_332||dj_global;
-if(dojo.lang.isString(func)){
-func=_332[func];
-}
-for(var x=2;x<arguments.length;x++){
-_334.push(arguments[x]);
-}
-var _336=(func["__preJoinArity"]||func.length)-_334.length;
-function gather(_337,_338,_339){
-var _33a=_339;
-var _33b=_338.slice(0);
-for(var x=0;x<_337.length;x++){
-_33b.push(_337[x]);
-}
-_339=_339-_337.length;
-if(_339<=0){
-var res=func.apply(_332,_33b);
-_339=_33a;
-return res;
-}else{
-return function(){
-return gather(arguments,_33b,_339);
-};
-}
-}
-return gather([],_334,_336);
-};
-dojo.lang.curryArguments=function(_33e,func,args,_341){
-var _342=[];
-var x=_341||0;
-for(x=_341;x<args.length;x++){
-_342.push(args[x]);
-}
-return dojo.lang.curry.apply(dojo.lang,[_33e,func].concat(_342));
-};
-dojo.lang.tryThese=function(){
-for(var x=0;x<arguments.length;x++){
-try{
-if(typeof arguments[x]=="function"){
-var ret=(arguments[x]());
-if(ret){
-return ret;
-}
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-};
-dojo.lang.delayThese=function(farr,cb,_348,_349){
-if(!farr.length){
-if(typeof _349=="function"){
-_349();
-}
-return;
-}
-if((typeof _348=="undefined")&&(typeof cb=="number")){
-_348=cb;
-cb=function(){
-};
-}else{
-if(!cb){
-cb=function(){
-};
-if(!_348){
-_348=0;
-}
-}
-}
-setTimeout(function(){
-(farr.shift())();
-cb();
-dojo.lang.delayThese(farr,cb,_348,_349);
-},_348);
-};
-dojo.provide("dojo.lang.array");
-dojo.lang.mixin(dojo.lang,{has:function(obj,name){
-try{
-return typeof obj[name]!="undefined";
-}
-catch(e){
-return false;
-}
-},isEmpty:function(obj){
-if(dojo.lang.isObject(obj)){
-var tmp={};
-var _34e=0;
-for(var x in obj){
-if(obj[x]&&(!tmp[x])){
-_34e++;
-break;
-}
-}
-return _34e==0;
-}else{
-if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
-return obj.length==0;
-}
-}
-},map:function(arr,obj,_352){
-var _353=dojo.lang.isString(arr);
-if(_353){
-arr=arr.split("");
-}
-if(dojo.lang.isFunction(obj)&&(!_352)){
-_352=obj;
-obj=dj_global;
-}else{
-if(dojo.lang.isFunction(obj)&&_352){
-var _354=obj;
-obj=_352;
-_352=_354;
-}
-}
-if(Array.map){
-var _355=Array.map(arr,_352,obj);
-}else{
-var _355=[];
-for(var i=0;i<arr.length;++i){
-_355.push(_352.call(obj,arr[i]));
-}
-}
-if(_353){
-return _355.join("");
-}else{
-return _355;
-}
-},reduce:function(arr,_358,obj,_35a){
-var _35b=_358;
-if(arguments.length==1){
-dojo.debug("dojo.lang.reduce called with too few arguments!");
-return false;
-}else{
-if(arguments.length==2){
-_35a=_358;
-_35b=arr.shift();
-}else{
-if(arguments.lenght==3){
-if(dojo.lang.isFunction(obj)){
-_35a=obj;
-obj=null;
-}
-}else{
-if(dojo.lang.isFunction(obj)){
-var tmp=_35a;
-_35a=obj;
-obj=tmp;
-}
-}
-}
-}
-var ob=obj?obj:dj_global;
-dojo.lang.map(arr,function(val){
-_35b=_35a.call(ob,_35b,val);
-});
-return _35b;
-},forEach:function(_35f,_360,_361){
-if(dojo.lang.isString(_35f)){
-_35f=_35f.split("");
-}
-if(Array.forEach){
-Array.forEach(_35f,_360,_361);
-}else{
-if(!_361){
-_361=dj_global;
-}
-for(var i=0,l=_35f.length;i<l;i++){
-_360.call(_361,_35f[i],i,_35f);
-}
-}
-},_everyOrSome:function(_364,arr,_366,_367){
-if(dojo.lang.isString(arr)){
-arr=arr.split("");
-}
-if(Array.every){
-return Array[_364?"every":"some"](arr,_366,_367);
-}else{
-if(!_367){
-_367=dj_global;
-}
-for(var i=0,l=arr.length;i<l;i++){
-var _36a=_366.call(_367,arr[i],i,arr);
-if(_364&&!_36a){
-return false;
-}else{
-if((!_364)&&(_36a)){
-return true;
-}
-}
-}
-return Boolean(_364);
-}
-},every:function(arr,_36c,_36d){
-return this._everyOrSome(true,arr,_36c,_36d);
-},some:function(arr,_36f,_370){
-return this._everyOrSome(false,arr,_36f,_370);
-},filter:function(arr,_372,_373){
-var _374=dojo.lang.isString(arr);
-if(_374){
-arr=arr.split("");
-}
-var _375;
-if(Array.filter){
-_375=Array.filter(arr,_372,_373);
-}else{
-if(!_373){
-if(arguments.length>=3){
-dojo.raise("thisObject doesn't exist!");
-}
-_373=dj_global;
-}
-_375=[];
-for(var i=0;i<arr.length;i++){
-if(_372.call(_373,arr[i],i,arr)){
-_375.push(arr[i]);
-}
-}
-}
-if(_374){
-return _375.join("");
-}else{
-return _375;
-}
-},unnest:function(){
-var out=[];
-for(var i=0;i<arguments.length;i++){
-if(dojo.lang.isArrayLike(arguments[i])){
-var add=dojo.lang.unnest.apply(this,arguments[i]);
-out=out.concat(add);
-}else{
-out.push(arguments[i]);
-}
-}
-return out;
-},toArray:function(_37a,_37b){
-var _37c=[];
-for(var i=_37b||0;i<_37a.length;i++){
-_37c.push(_37a[i]);
-}
-return _37c;
-}});
-dojo.provide("dojo.lang.extras");
-dojo.lang.setTimeout=function(func,_37f){
-var _380=window,_381=2;
-if(!dojo.lang.isFunction(func)){
-_380=func;
-func=_37f;
-_37f=arguments[2];
-_381++;
-}
-if(dojo.lang.isString(func)){
-func=_380[func];
-}
-var args=[];
-for(var i=_381;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-return dojo.global().setTimeout(function(){
-func.apply(_380,args);
-},_37f);
-};
-dojo.lang.clearTimeout=function(_384){
-dojo.global().clearTimeout(_384);
-};
-dojo.lang.getNameInObj=function(ns,item){
-if(!ns){
-ns=dj_global;
-}
-for(var x in ns){
-if(ns[x]===item){
-return new String(x);
-}
-}
-return null;
-};
-dojo.lang.shallowCopy=function(obj,deep){
-var i,ret;
-if(obj===null){
-return null;
-}
-if(dojo.lang.isObject(obj)){
-ret=new obj.constructor();
-for(i in obj){
-if(dojo.lang.isUndefined(ret[i])){
-ret[i]=deep?dojo.lang.shallowCopy(obj[i],deep):obj[i];
-}
-}
-}else{
-if(dojo.lang.isArray(obj)){
-ret=[];
-for(i=0;i<obj.length;i++){
-ret[i]=deep?dojo.lang.shallowCopy(obj[i],deep):obj[i];
-}
-}else{
-ret=obj;
-}
-}
-return ret;
-};
-dojo.lang.firstValued=function(){
-for(var i=0;i<arguments.length;i++){
-if(typeof arguments[i]!="undefined"){
-return arguments[i];
-}
-}
-return undefined;
-};
-dojo.lang.getObjPathValue=function(_38d,_38e,_38f){
-with(dojo.parseObjPath(_38d,_38e,_38f)){
-return dojo.evalProp(prop,obj,_38f);
-}
-};
-dojo.lang.setObjPathValue=function(_390,_391,_392,_393){
-dojo.deprecated("dojo.lang.setObjPathValue","use dojo.parseObjPath and the '=' operator","0.6");
-if(arguments.length<4){
-_393=true;
-}
-with(dojo.parseObjPath(_390,_392,_393)){
-if(obj&&(_393||(prop in obj))){
-obj[prop]=_391;
-}
-}
-};
-dojo.provide("dojo.lang.declare");
-dojo.lang.declare=function(_394,_395,init,_397){
-if((dojo.lang.isFunction(_397))||((!_397)&&(!dojo.lang.isFunction(init)))){
-var temp=_397;
-_397=init;
-init=temp;
-}
-var _399=[];
-if(dojo.lang.isArray(_395)){
-_399=_395;
-_395=_399.shift();
-}
-if(!init){
-init=dojo.evalObjPath(_394,false);
-if((init)&&(!dojo.lang.isFunction(init))){
-init=null;
-}
-}
-var ctor=dojo.lang.declare._makeConstructor();
-var scp=(_395?_395.prototype:null);
-if(scp){
-scp.prototyping=true;
-ctor.prototype=new _395();
-scp.prototyping=false;
-}
-ctor.superclass=scp;
-ctor.mixins=_399;
-for(var i=0,l=_399.length;i<l;i++){
-dojo.lang.extend(ctor,_399[i].prototype);
-}
-ctor.prototype.initializer=null;
-ctor.prototype.declaredClass=_394;
-if(dojo.lang.isArray(_397)){
-dojo.lang.extend.apply(dojo.lang,[ctor].concat(_397));
-}else{
-dojo.lang.extend(ctor,(_397)||{});
-}
-dojo.lang.extend(ctor,dojo.lang.declare._common);
-ctor.prototype.constructor=ctor;
-ctor.prototype.initializer=(ctor.prototype.initializer)||(init)||(function(){
-});
-var _39e=dojo.parseObjPath(_394,null,true);
-_39e.obj[_39e.prop]=ctor;
-return ctor;
-};
-dojo.lang.declare._makeConstructor=function(){
-return function(){
-var self=this._getPropContext();
-var s=self.constructor.superclass;
-if((s)&&(s.constructor)){
-if(s.constructor==arguments.callee){
-this._inherited("constructor",arguments);
-}else{
-this._contextMethod(s,"constructor",arguments);
-}
-}
-var ms=(self.constructor.mixins)||([]);
-for(var i=0,m;(m=ms[i]);i++){
-(((m.prototype)&&(m.prototype.initializer))||(m)).apply(this,arguments);
-}
-if((!this.prototyping)&&(self.initializer)){
-self.initializer.apply(this,arguments);
-}
-};
-};
-dojo.lang.declare._common={_getPropContext:function(){
-return (this.___proto||this);
-},_contextMethod:function(_3a4,_3a5,args){
-var _3a7,_3a8=this.___proto;
-this.___proto=_3a4;
-try{
-_3a7=_3a4[_3a5].apply(this,(args||[]));
-}
-catch(e){
-throw e;
-}
-finally{
-this.___proto=_3a8;
-}
-return _3a7;
-},_inherited:function(prop,args){
-var p=this._getPropContext();
-do{
-if((!p.constructor)||(!p.constructor.superclass)){
-return;
-}
-p=p.constructor.superclass;
-}while(!(prop in p));
-return (dojo.lang.isFunction(p[prop])?this._contextMethod(p,prop,args):p[prop]);
-},inherited:function(prop,args){
-dojo.deprecated("'inherited' method is dangerous, do not up-call! 'inherited' is slated for removal in 0.5; name your super class (or use superclass property) instead.","0.5");
-this._inherited(prop,args);
-}};
-dojo.declare=dojo.lang.declare;
-dojo.provide("dojo.ns");
-dojo.ns={namespaces:{},failed:{},loading:{},loaded:{},register:function(name,_3af,_3b0,_3b1){
-if(!_3b1||!this.namespaces[name]){
-this.namespaces[name]=new dojo.ns.Ns(name,_3af,_3b0);
-}
-},allow:function(name){
-if(this.failed[name]){
-return false;
-}
-if((djConfig.excludeNamespace)&&(dojo.lang.inArray(djConfig.excludeNamespace,name))){
-return false;
-}
-return ((name==this.dojo)||(!djConfig.includeNamespace)||(dojo.lang.inArray(djConfig.includeNamespace,name)));
-},get:function(name){
-return this.namespaces[name];
-},require:function(name){
-var ns=this.namespaces[name];
-if((ns)&&(this.loaded[name])){
-return ns;
-}
-if(!this.allow(name)){
-return false;
-}
-if(this.loading[name]){
-dojo.debug("dojo.namespace.require: re-entrant request to load namespace \""+name+"\" must fail.");
-return false;
-}
-var req=dojo.require;
-this.loading[name]=true;
-try{
-if(name=="dojo"){
-req("dojo.namespaces.dojo");
-}else{
-if(!dojo.hostenv.moduleHasPrefix(name)){
-dojo.registerModulePath(name,"../"+name);
-}
-req([name,"manifest"].join("."),false,true);
-}
-if(!this.namespaces[name]){
-this.failed[name]=true;
-}
-}
-finally{
-this.loading[name]=false;
-}
-return this.namespaces[name];
-}};
-dojo.ns.Ns=function(name,_3b8,_3b9){
-this.name=name;
-this.module=_3b8;
-this.resolver=_3b9;
-this._loaded=[];
-this._failed=[];
-};
-dojo.ns.Ns.prototype.resolve=function(name,_3bb,_3bc){
-if(!this.resolver||djConfig["skipAutoRequire"]){
-return false;
-}
-var _3bd=this.resolver(name,_3bb);
-if((_3bd)&&(!this._loaded[_3bd])&&(!this._failed[_3bd])){
-var req=dojo.require;
-req(_3bd,false,true);
-if(dojo.hostenv.findModule(_3bd,false)){
-this._loaded[_3bd]=true;
-}else{
-if(!_3bc){
-dojo.raise("dojo.ns.Ns.resolve: module '"+_3bd+"' not found after loading via namespace '"+this.name+"'");
-}
-this._failed[_3bd]=true;
-}
-}
-return Boolean(this._loaded[_3bd]);
-};
-dojo.registerNamespace=function(name,_3c0,_3c1){
-dojo.ns.register.apply(dojo.ns,arguments);
-};
-dojo.registerNamespaceResolver=function(name,_3c3){
-var n=dojo.ns.namespaces[name];
-if(n){
-n.resolver=_3c3;
-}
-};
-dojo.registerNamespaceManifest=function(_3c5,path,name,_3c8,_3c9){
-dojo.registerModulePath(name,path);
-dojo.registerNamespace(name,_3c8,_3c9);
-};
-dojo.registerNamespace("dojo","dojo.widget");
-dojo.provide("dojo.event.common");
-dojo.event=new function(){
-this._canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-function interpolateArgs(args,_3cb){
-var dl=dojo.lang;
-var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false};
-switch(args.length){
-case 0:
-return;
-case 1:
-return;
-case 2:
-ao.srcFunc=args[0];
-ao.adviceFunc=args[1];
-break;
-case 3:
-if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isString(args[2]))){
-ao.adviceType="after";
-ao.srcObj=args[0];
-ao.srcFunc=args[1];
-ao.adviceFunc=args[2];
-}else{
-if((dl.isString(args[1]))&&(dl.isString(args[2]))){
-ao.srcFunc=args[1];
-ao.adviceFunc=args[2];
-}else{
-if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isFunction(args[2]))){
-ao.adviceType="after";
-ao.srcObj=args[0];
-ao.srcFunc=args[1];
-var _3ce=dl.nameAnonFunc(args[2],ao.adviceObj,_3cb);
-ao.adviceFunc=_3ce;
-}else{
-if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
-ao.adviceType="after";
-ao.srcObj=dj_global;
-var _3ce=dl.nameAnonFunc(args[0],ao.srcObj,_3cb);
-ao.srcFunc=_3ce;
-ao.adviceObj=args[1];
-ao.adviceFunc=args[2];
-}
-}
-}
-}
-break;
-case 4:
-if((dl.isObject(args[0]))&&(dl.isObject(args[2]))){
-ao.adviceType="after";
-ao.srcObj=args[0];
-ao.srcFunc=args[1];
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-if((dl.isString(args[0]))&&(dl.isString(args[1]))&&(dl.isObject(args[2]))){
-ao.adviceType=args[0];
-ao.srcObj=dj_global;
-ao.srcFunc=args[1];
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
-ao.adviceType=args[0];
-ao.srcObj=dj_global;
-var _3ce=dl.nameAnonFunc(args[1],dj_global,_3cb);
-ao.srcFunc=_3ce;
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-var _3ce=dl.nameAnonFunc(args[3],dj_global,_3cb);
-ao.adviceObj=dj_global;
-ao.adviceFunc=_3ce;
-}else{
-if(dl.isObject(args[1])){
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-ao.adviceObj=dj_global;
-ao.adviceFunc=args[3];
-}else{
-if(dl.isObject(args[2])){
-ao.srcObj=dj_global;
-ao.srcFunc=args[1];
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-ao.srcObj=ao.adviceObj=ao.aroundObj=dj_global;
-ao.srcFunc=args[1];
-ao.adviceFunc=args[2];
-ao.aroundFunc=args[3];
-}
-}
-}
-}
-}
-}
-break;
-case 6:
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-ao.adviceObj=args[3];
-ao.adviceFunc=args[4];
-ao.aroundFunc=args[5];
-ao.aroundObj=dj_global;
-break;
-default:
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-ao.adviceObj=args[3];
-ao.adviceFunc=args[4];
-ao.aroundObj=args[5];
-ao.aroundFunc=args[6];
-ao.once=args[7];
-ao.delay=args[8];
-ao.rate=args[9];
-ao.adviceMsg=args[10];
-break;
-}
-if(dl.isFunction(ao.aroundFunc)){
-var _3ce=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_3cb);
-ao.aroundFunc=_3ce;
-}
-if(dl.isFunction(ao.srcFunc)){
-ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc);
-}
-if(dl.isFunction(ao.adviceFunc)){
-ao.adviceFunc=dl.getNameInObj(ao.adviceObj,ao.adviceFunc);
-}
-if((ao.aroundObj)&&(dl.isFunction(ao.aroundFunc))){
-ao.aroundFunc=dl.getNameInObj(ao.aroundObj,ao.aroundFunc);
-}
-if(!ao.srcObj){
-dojo.raise("bad srcObj for srcFunc: "+ao.srcFunc);
-}
-if(!ao.adviceObj){
-dojo.raise("bad adviceObj for adviceFunc: "+ao.adviceFunc);
-}
-if(!ao.adviceFunc){
-dojo.debug("bad adviceFunc for srcFunc: "+ao.srcFunc);
-dojo.debugShallow(ao);
-}
-return ao;
-}
-this.connect=function(){
-if(arguments.length==1){
-var ao=arguments[0];
-}else{
-var ao=interpolateArgs(arguments,true);
-}
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.connect(ao);
-}
-ao.srcFunc="onkeypress";
-}
-if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){
-var _3d0={};
-for(var x in ao){
-_3d0[x]=ao[x];
-}
-var mjps=[];
-dojo.lang.forEach(ao.srcObj,function(src){
-if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
-src=dojo.byId(src);
-}
-_3d0.srcObj=src;
-mjps.push(dojo.event.connect.call(dojo.event,_3d0));
-});
-return mjps;
-}
-var mjp=dojo.event.MethodJoinPoint.getForMethod(ao.srcObj,ao.srcFunc);
-if(ao.adviceFunc){
-var mjp2=dojo.event.MethodJoinPoint.getForMethod(ao.adviceObj,ao.adviceFunc);
-}
-mjp.kwAddAdvice(ao);
-return mjp;
-};
-this.log=function(a1,a2){
-var _3d8;
-if((arguments.length==1)&&(typeof a1=="object")){
-_3d8=a1;
-}else{
-_3d8={srcObj:a1,srcFunc:a2};
-}
-_3d8.adviceFunc=function(){
-var _3d9=[];
-for(var x=0;x<arguments.length;x++){
-_3d9.push(arguments[x]);
-}
-dojo.debug("("+_3d8.srcObj+")."+_3d8.srcFunc,":",_3d9.join(", "));
-};
-this.kwConnect(_3d8);
-};
-this.connectBefore=function(){
-var args=["before"];
-for(var i=0;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-return this.connect.apply(this,args);
-};
-this.connectAround=function(){
-var args=["around"];
-for(var i=0;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-return this.connect.apply(this,args);
-};
-this.connectOnce=function(){
-var ao=interpolateArgs(arguments,true);
-ao.once=true;
-return this.connect(ao);
-};
-this._kwConnectImpl=function(_3e0,_3e1){
-var fn=(_3e1)?"disconnect":"connect";
-if(typeof _3e0["srcFunc"]=="function"){
-_3e0.srcObj=_3e0["srcObj"]||dj_global;
-var _3e3=dojo.lang.nameAnonFunc(_3e0.srcFunc,_3e0.srcObj,true);
-_3e0.srcFunc=_3e3;
-}
-if(typeof _3e0["adviceFunc"]=="function"){
-_3e0.adviceObj=_3e0["adviceObj"]||dj_global;
-var _3e3=dojo.lang.nameAnonFunc(_3e0.adviceFunc,_3e0.adviceObj,true);
-_3e0.adviceFunc=_3e3;
-}
-_3e0.srcObj=_3e0["srcObj"]||dj_global;
-_3e0.adviceObj=_3e0["adviceObj"]||_3e0["targetObj"]||dj_global;
-_3e0.adviceFunc=_3e0["adviceFunc"]||_3e0["targetFunc"];
-return dojo.event[fn](_3e0);
-};
-this.kwConnect=function(_3e4){
-return this._kwConnectImpl(_3e4,false);
-};
-this.disconnect=function(){
-if(arguments.length==1){
-var ao=arguments[0];
-}else{
-var ao=interpolateArgs(arguments,true);
-}
-if(!ao.adviceFunc){
-return;
-}
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.disconnect(ao);
-}
-ao.srcFunc="onkeypress";
-}
-if(!ao.srcObj[ao.srcFunc]){
-return null;
-}
-var mjp=dojo.event.MethodJoinPoint.getForMethod(ao.srcObj,ao.srcFunc,true);
-mjp.removeAdvice(ao.adviceObj,ao.adviceFunc,ao.adviceType,ao.once);
-return mjp;
-};
-this.kwDisconnect=function(_3e7){
-return this._kwConnectImpl(_3e7,true);
-};
-};
-dojo.event.MethodInvocation=function(_3e8,obj,args){
-this.jp_=_3e8;
-this.object=obj;
-this.args=[];
-for(var x=0;x<args.length;x++){
-this.args[x]=args[x];
-}
-this.around_index=-1;
-};
-dojo.event.MethodInvocation.prototype.proceed=function(){
-this.around_index++;
-if(this.around_index>=this.jp_.around.length){
-return this.jp_.object[this.jp_.methodname].apply(this.jp_.object,this.args);
-}else{
-var ti=this.jp_.around[this.around_index];
-var mobj=ti[0]||dj_global;
-var meth=ti[1];
-return mobj[meth].call(mobj,this);
-}
-};
-dojo.event.MethodJoinPoint=function(obj,_3f0){
-this.object=obj||dj_global;
-this.methodname=_3f0;
-this.methodfunc=this.object[_3f0];
-this.squelch=false;
-};
-dojo.event.MethodJoinPoint.getForMethod=function(obj,_3f2){
-if(!obj){
-obj=dj_global;
-}
-if(!obj[_3f2]){
-obj[_3f2]=function(){
-};
-if(!obj[_3f2]){
-dojo.raise("Cannot set do-nothing method on that object "+_3f2);
-}
-}else{
-if((!dojo.lang.isFunction(obj[_3f2]))&&(!dojo.lang.isAlien(obj[_3f2]))){
-return null;
-}
-}
-var _3f3=_3f2+"$joinpoint";
-var _3f4=_3f2+"$joinpoint$method";
-var _3f5=obj[_3f3];
-if(!_3f5){
-var _3f6=false;
-if(dojo.event["browser"]){
-if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){
-_3f6=true;
-dojo.event.browser.addClobberNodeAttrs(obj,[_3f3,_3f4,_3f2]);
-}
-}
-var _3f7=obj[_3f2].length;
-obj[_3f4]=obj[_3f2];
-_3f5=obj[_3f3]=new dojo.event.MethodJoinPoint(obj,_3f4);
-obj[_3f2]=function(){
-var args=[];
-if((_3f6)&&(!arguments.length)){
-var evt=null;
-try{
-if(obj.ownerDocument){
-evt=obj.ownerDocument.parentWindow.event;
-}else{
-if(obj.documentElement){
-evt=obj.documentElement.ownerDocument.parentWindow.event;
-}else{
-if(obj.event){
-evt=obj.event;
-}else{
-evt=window.event;
-}
-}
-}
-}
-catch(e){
-evt=window.event;
-}
-if(evt){
-args.push(dojo.event.browser.fixEvent(evt,this));
-}
-}else{
-for(var x=0;x<arguments.length;x++){
-if((x==0)&&(_3f6)&&(dojo.event.browser.isEvent(arguments[x]))){
-args.push(dojo.event.browser.fixEvent(arguments[x],this));
-}else{
-args.push(arguments[x]);
-}
-}
-}
-return _3f5.run.apply(_3f5,args);
-};
-obj[_3f2].__preJoinArity=_3f7;
-}
-return _3f5;
-};
-dojo.lang.extend(dojo.event.MethodJoinPoint,{unintercept:function(){
-this.object[this.methodname]=this.methodfunc;
-this.before=[];
-this.after=[];
-this.around=[];
-},disconnect:dojo.lang.forward("unintercept"),run:function(){
-var obj=this.object||dj_global;
-var args=arguments;
-var _3fd=[];
-for(var x=0;x<args.length;x++){
-_3fd[x]=args[x];
-}
-var _3ff=function(marr){
-if(!marr){
-dojo.debug("Null argument to unrollAdvice()");
-return;
-}
-var _401=marr[0]||dj_global;
-var _402=marr[1];
-if(!_401[_402]){
-dojo.raise("function \""+_402+"\" does not exist on \""+_401+"\"");
-}
-var _403=marr[2]||dj_global;
-var _404=marr[3];
-var msg=marr[6];
-var _406;
-var to={args:[],jp_:this,object:obj,proceed:function(){
-return _401[_402].apply(_401,to.args);
-}};
-to.args=_3fd;
-var _408=parseInt(marr[4]);
-var _409=((!isNaN(_408))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
-if(marr[5]){
-var rate=parseInt(marr[5]);
-var cur=new Date();
-var _40c=false;
-if((marr["last"])&&((cur-marr.last)<=rate)){
-if(dojo.event._canTimeout){
-if(marr["delayTimer"]){
-clearTimeout(marr.delayTimer);
-}
-var tod=parseInt(rate*2);
-var mcpy=dojo.lang.shallowCopy(marr);
-marr.delayTimer=setTimeout(function(){
-mcpy[5]=0;
-_3ff(mcpy);
-},tod);
-}
-return;
-}else{
-marr.last=cur;
-}
-}
-if(_404){
-_403[_404].call(_403,to);
-}else{
-if((_409)&&((dojo.render.html)||(dojo.render.svg))){
-dj_global["setTimeout"](function(){
-if(msg){
-_401[_402].call(_401,to);
-}else{
-_401[_402].apply(_401,args);
-}
-},_408);
-}else{
-if(msg){
-_401[_402].call(_401,to);
-}else{
-_401[_402].apply(_401,args);
-}
-}
-}
-};
-var _40f=function(){
-if(this.squelch){
-try{
-return _3ff.apply(this,arguments);
-}
-catch(e){
-dojo.debug(e);
-}
-}else{
-return _3ff.apply(this,arguments);
-}
-};
-if((this["before"])&&(this.before.length>0)){
-dojo.lang.forEach(this.before.concat(new Array()),_40f);
-}
-var _410;
-try{
-if((this["around"])&&(this.around.length>0)){
-var mi=new dojo.event.MethodInvocation(this,obj,args);
-_410=mi.proceed();
-}else{
-if(this.methodfunc){
-_410=this.object[this.methodname].apply(this.object,args);
-}
-}
-}
-catch(e){
-if(!this.squelch){
-dojo.debug(e,"when calling",this.methodname,"on",this.object,"with arguments",args);
-dojo.raise(e);
-}
-}
-if((this["after"])&&(this.after.length>0)){
-dojo.lang.forEach(this.after.concat(new Array()),_40f);
-}
-return (this.methodfunc)?_410:null;
-},getArr:function(kind){
-var type="after";
-if((typeof kind=="string")&&(kind.indexOf("before")!=-1)){
-type="before";
-}else{
-if(kind=="around"){
-type="around";
-}
-}
-if(!this[type]){
-this[type]=[];
-}
-return this[type];
-},kwAddAdvice:function(args){
-this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"]);
-},addAdvice:function(_415,_416,_417,_418,_419,_41a,once,_41c,rate,_41e){
-var arr=this.getArr(_419);
-if(!arr){
-dojo.raise("bad this: "+this);
-}
-var ao=[_415,_416,_417,_418,_41c,rate,_41e];
-if(once){
-if(this.hasAdvice(_415,_416,_419,arr)>=0){
-return;
-}
-}
-if(_41a=="first"){
-arr.unshift(ao);
-}else{
-arr.push(ao);
-}
-},hasAdvice:function(_421,_422,_423,arr){
-if(!arr){
-arr=this.getArr(_423);
-}
-var ind=-1;
-for(var x=0;x<arr.length;x++){
-var aao=(typeof _422=="object")?(new String(_422)).toString():_422;
-var a1o=(typeof arr[x][1]=="object")?(new String(arr[x][1])).toString():arr[x][1];
-if((arr[x][0]==_421)&&(a1o==aao)){
-ind=x;
-}
-}
-return ind;
-},removeAdvice:function(_429,_42a,_42b,once){
-var arr=this.getArr(_42b);
-var ind=this.hasAdvice(_429,_42a,_42b,arr);
-if(ind==-1){
-return false;
-}
-while(ind!=-1){
-arr.splice(ind,1);
-if(once){
-break;
-}
-ind=this.hasAdvice(_429,_42a,_42b,arr);
-}
-return true;
-}});
-dojo.provide("dojo.event.topic");
-dojo.event.topic=new function(){
-this.topics={};
-this.getTopic=function(_42f){
-if(!this.topics[_42f]){
-this.topics[_42f]=new this.TopicImpl(_42f);
-}
-return this.topics[_42f];
-};
-this.registerPublisher=function(_430,obj,_432){
-var _430=this.getTopic(_430);
-_430.registerPublisher(obj,_432);
-};
-this.subscribe=function(_433,obj,_435){
-var _433=this.getTopic(_433);
-_433.subscribe(obj,_435);
-};
-this.unsubscribe=function(_436,obj,_438){
-var _436=this.getTopic(_436);
-_436.unsubscribe(obj,_438);
-};
-this.destroy=function(_439){
-this.getTopic(_439).destroy();
-delete this.topics[_439];
-};
-this.publishApply=function(_43a,args){
-var _43a=this.getTopic(_43a);
-_43a.sendMessage.apply(_43a,args);
-};
-this.publish=function(_43c,_43d){
-var _43c=this.getTopic(_43c);
-var args=[];
-for(var x=1;x<arguments.length;x++){
-args.push(arguments[x]);
-}
-_43c.sendMessage.apply(_43c,args);
-};
-};
-dojo.event.topic.TopicImpl=function(_440){
-this.topicName=_440;
-this.subscribe=function(_441,_442){
-var tf=_442||_441;
-var to=(!_442)?dj_global:_441;
-return dojo.event.kwConnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
-};
-this.unsubscribe=function(_445,_446){
-var tf=(!_446)?_445:_446;
-var to=(!_446)?null:_445;
-return dojo.event.kwDisconnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
-};
-this._getJoinPoint=function(){
-return dojo.event.MethodJoinPoint.getForMethod(this,"sendMessage");
-};
-this.setSquelch=function(_449){
-this._getJoinPoint().squelch=_449;
-};
-this.destroy=function(){
-this._getJoinPoint().disconnect();
-};
-this.registerPublisher=function(_44a,_44b){
-dojo.event.connect(_44a,_44b,this,"sendMessage");
-};
-this.sendMessage=function(_44c){
-};
-};
-dojo.provide("dojo.event.browser");
-dojo._ie_clobber=new function(){
-this.clobberNodes=[];
-function nukeProp(node,prop){
-try{
-node[prop]=null;
-}
-catch(e){
-}
-try{
-delete node[prop];
-}
-catch(e){
-}
-try{
-node.removeAttribute(prop);
-}
-catch(e){
-}
-}
-this.clobber=function(_44f){
-var na;
-var tna;
-if(_44f){
-tna=_44f.all||_44f.getElementsByTagName("*");
-na=[_44f];
-for(var x=0;x<tna.length;x++){
-if(tna[x]["__doClobber__"]){
-na.push(tna[x]);
-}
-}
-}else{
-try{
-window.onload=null;
-}
-catch(e){
-}
-na=(this.clobberNodes.length)?this.clobberNodes:document.all;
-}
-tna=null;
-var _453={};
-for(var i=na.length-1;i>=0;i=i-1){
-var el=na[i];
-try{
-if(el&&el["__clobberAttrs__"]){
-for(var j=0;j<el.__clobberAttrs__.length;j++){
-nukeProp(el,el.__clobberAttrs__[j]);
-}
-nukeProp(el,"__clobberAttrs__");
-nukeProp(el,"__doClobber__");
-}
-}
-catch(e){
-}
-}
-na=null;
-};
-};
-if(dojo.render.html.ie){
-dojo.addOnUnload(function(){
-dojo._ie_clobber.clobber();
-try{
-if((dojo["widget"])&&(dojo.widget["manager"])){
-dojo.widget.manager.destroyAll();
-}
-}
-catch(e){
-}
-if(dojo.widget){
-for(var name in dojo.widget._templateCache){
-if(dojo.widget._templateCache[name].node){
-dojo.dom.destroyNode(dojo.widget._templateCache[name].node);
-dojo.widget._templateCache[name].node=null;
-delete dojo.widget._templateCache[name].node;
-}
-}
-}
-try{
-window.onload=null;
-}
-catch(e){
-}
-try{
-window.onunload=null;
-}
-catch(e){
-}
-dojo._ie_clobber.clobberNodes=[];
-});
-}
-dojo.event.browser=new function(){
-var _458=0;
-this.normalizedEventName=function(_459){
-switch(_459){
-case "CheckboxStateChange":
-case "DOMAttrModified":
-case "DOMMenuItemActive":
-case "DOMMenuItemInactive":
-case "DOMMouseScroll":
-case "DOMNodeInserted":
-case "DOMNodeRemoved":
-case "RadioStateChange":
-return _459;
-break;
-default:
-return _459.toLowerCase();
-break;
-}
-};
-this.clean=function(node){
-if(dojo.render.html.ie){
-dojo._ie_clobber.clobber(node);
-}
-};
-this.addClobberNode=function(node){
-if(!dojo.render.html.ie){
-return;
-}
-if(!node["__doClobber__"]){
-node.__doClobber__=true;
-dojo._ie_clobber.clobberNodes.push(node);
-node.__clobberAttrs__=[];
-}
-};
-this.addClobberNodeAttrs=function(node,_45d){
-if(!dojo.render.html.ie){
-return;
-}
-this.addClobberNode(node);
-for(var x=0;x<_45d.length;x++){
-node.__clobberAttrs__.push(_45d[x]);
-}
-};
-this.removeListener=function(node,_460,fp,_462){
-if(!_462){
-var _462=false;
-}
-_460=dojo.event.browser.normalizedEventName(_460);
-if((_460=="onkey")||(_460=="key")){
-if(dojo.render.html.ie){
-this.removeListener(node,"onkeydown",fp,_462);
-}
-_460="onkeypress";
-}
-if(_460.substr(0,2)=="on"){
-_460=_460.substr(2);
-}
-if(node.removeEventListener){
-node.removeEventListener(_460,fp,_462);
-}
-};
-this.addListener=function(node,_464,fp,_466,_467){
-if(!node){
-return;
-}
-if(!_466){
-var _466=false;
-}
-_464=dojo.event.browser.normalizedEventName(_464);
-if((_464=="onkey")||(_464=="key")){
-if(dojo.render.html.ie){
-this.addListener(node,"onkeydown",fp,_466,_467);
-}
-_464="onkeypress";
-}
-if(_464.substr(0,2)!="on"){
-_464="on"+_464;
-}
-if(!_467){
-var _468=function(evt){
-if(!evt){
-evt=window.event;
-}
-var ret=fp(dojo.event.browser.fixEvent(evt,this));
-if(_466){
-dojo.event.browser.stopEvent(evt);
-}
-return ret;
-};
-}else{
-_468=fp;
-}
-if(node.addEventListener){
-node.addEventListener(_464.substr(2),_468,_466);
-return _468;
-}else{
-if(typeof node[_464]=="function"){
-var _46b=node[_464];
-node[_464]=function(e){
-_46b(e);
-return _468(e);
-};
-}else{
-node[_464]=_468;
-}
-if(dojo.render.html.ie){
-this.addClobberNodeAttrs(node,[_464]);
-}
-return _468;
-}
-};
-this.isEvent=function(obj){
-return (typeof obj!="undefined")&&(obj)&&(typeof Event!="undefined")&&(obj.eventPhase);
-};
-this.currentEvent=null;
-this.callListener=function(_46e,_46f){
-if(typeof _46e!="function"){
-dojo.raise("listener not a function: "+_46e);
-}
-dojo.event.browser.currentEvent.currentTarget=_46f;
-return _46e.call(_46f,dojo.event.browser.currentEvent);
-};
-this._stopPropagation=function(){
-dojo.event.browser.currentEvent.cancelBubble=true;
-};
-this._preventDefault=function(){
-dojo.event.browser.currentEvent.returnValue=false;
-};
-this.keys={KEY_BACKSPACE:8,KEY_TAB:9,KEY_CLEAR:12,KEY_ENTER:13,KEY_SHIFT:16,KEY_CTRL:17,KEY_ALT:18,KEY_PAUSE:19,KEY_CAPS_LOCK:20,KEY_ESCAPE:27,KEY_SPACE:32,KEY_PAGE_UP:33,KEY_PAGE_DOWN:34,KEY_END:35,KEY_HOME:36,KEY_LEFT_ARROW:37,KEY_UP_ARROW:38,KEY_RIGHT_ARROW:39,KEY_DOWN_ARROW:40,KEY_INSERT:45,KEY_DELETE:46,KEY_HELP:47,KEY_LEFT_WINDOW:91,KEY_RIGHT_WINDOW:92,KEY_SELECT:93,KEY_NUMPAD_0:96,KEY_NUMPAD_1:97,KEY_NUMPAD_2:98,KEY_NUMPAD_3:99,KEY_NUMPAD_4:100,KEY_NUMPAD_5:101,KEY_NUMPAD_6:102,KEY_NUMPAD_7:103,KEY_NUMPAD_8:104,KEY_NUMPAD_9:105,KEY_NUMPAD_MULTIPLY:106,KEY_NUMPAD_PLUS:107,KEY_NUMPAD_ENTER:108,KEY_NUMPAD_MINUS:109,KEY_NUMPAD_PERIOD:110,KEY_NUMPAD_DIVIDE:111,KEY_F1:112,KEY_F2:113,KEY_F3:114,KEY_F4:115,KEY_F5:116,KEY_F6:117,KEY_F7:118,KEY_F8:119,KEY_F9:120,KEY_F10:121,KEY_F11:122,KEY_F12:123,KEY_F13:124,KEY_F14:125,KEY_F15:126,KEY_NUM_LOCK:144,KEY_SCROLL_LOCK:145};
-this.revKeys=[];
-for(var key in this.keys){
-this.revKeys[this.keys[key]]=key;
-}
-this.fixEvent=function(evt,_472){
-if(!evt){
-if(window["event"]){
-evt=window.event;
-}
-}
-if((evt["type"])&&(evt["type"].indexOf("key")==0)){
-evt.keys=this.revKeys;
-for(var key in this.keys){
-evt[key]=this.keys[key];
-}
-if(evt["type"]=="keydown"&&dojo.render.html.ie){
-switch(evt.keyCode){
-case evt.KEY_SHIFT:
-case evt.KEY_CTRL:
-case evt.KEY_ALT:
-case evt.KEY_CAPS_LOCK:
-case evt.KEY_LEFT_WINDOW:
-case evt.KEY_RIGHT_WINDOW:
-case evt.KEY_SELECT:
-case evt.KEY_NUM_LOCK:
-case evt.KEY_SCROLL_LOCK:
-case evt.KEY_NUMPAD_0:
-case evt.KEY_NUMPAD_1:
-case evt.KEY_NUMPAD_2:
-case evt.KEY_NUMPAD_3:
-case evt.KEY_NUMPAD_4:
-case evt.KEY_NUMPAD_5:
-case evt.KEY_NUMPAD_6:
-case evt.KEY_NUMPAD_7:
-case evt.KEY_NUMPAD_8:
-case evt.KEY_NUMPAD_9:
-case evt.KEY_NUMPAD_PERIOD:
-break;
-case evt.KEY_NUMPAD_MULTIPLY:
-case evt.KEY_NUMPAD_PLUS:
-case evt.KEY_NUMPAD_ENTER:
-case evt.KEY_NUMPAD_MINUS:
-case evt.KEY_NUMPAD_DIVIDE:
-break;
-case evt.KEY_PAUSE:
-case evt.KEY_TAB:
-case evt.KEY_BACKSPACE:
-case evt.KEY_ENTER:
-case evt.KEY_ESCAPE:
-case evt.KEY_PAGE_UP:
-case evt.KEY_PAGE_DOWN:
-case evt.KEY_END:
-case evt.KEY_HOME:
-case evt.KEY_LEFT_ARROW:
-case evt.KEY_UP_ARROW:
-case evt.KEY_RIGHT_ARROW:
-case evt.KEY_DOWN_ARROW:
-case evt.KEY_INSERT:
-case evt.KEY_DELETE:
-case evt.KEY_F1:
-case evt.KEY_F2:
-case evt.KEY_F3:
-case evt.KEY_F4:
-case evt.KEY_F5:
-case evt.KEY_F6:
-case evt.KEY_F7:
-case evt.KEY_F8:
-case evt.KEY_F9:
-case evt.KEY_F10:
-case evt.KEY_F11:
-case evt.KEY_F12:
-case evt.KEY_F12:
-case evt.KEY_F13:
-case evt.KEY_F14:
-case evt.KEY_F15:
-case evt.KEY_CLEAR:
-case evt.KEY_HELP:
-evt.key=evt.keyCode;
-break;
-default:
-if(evt.ctrlKey||evt.altKey){
-var _474=evt.keyCode;
-if(_474>=65&&_474<=90&&evt.shiftKey==false){
-_474+=32;
-}
-if(_474>=1&&_474<=26&&evt.ctrlKey){
-_474+=96;
-}
-evt.key=String.fromCharCode(_474);
-}
-}
-}else{
-if(evt["type"]=="keypress"){
-if(dojo.render.html.opera){
-if(evt.which==0){
-evt.key=evt.keyCode;
-}else{
-if(evt.which>0){
-switch(evt.which){
-case evt.KEY_SHIFT:
-case evt.KEY_CTRL:
-case evt.KEY_ALT:
-case evt.KEY_CAPS_LOCK:
-case evt.KEY_NUM_LOCK:
-case evt.KEY_SCROLL_LOCK:
-break;
-case evt.KEY_PAUSE:
-case evt.KEY_TAB:
-case evt.KEY_BACKSPACE:
-case evt.KEY_ENTER:
-case evt.KEY_ESCAPE:
-evt.key=evt.which;
-break;
-default:
-var _474=evt.which;
-if((evt.ctrlKey||evt.altKey||evt.metaKey)&&(evt.which>=65&&evt.which<=90&&evt.shiftKey==false)){
-_474+=32;
-}
-evt.key=String.fromCharCode(_474);
-}
-}
-}
-}else{
-if(dojo.render.html.ie){
-if(!evt.ctrlKey&&!evt.altKey&&evt.keyCode>=evt.KEY_SPACE){
-evt.key=String.fromCharCode(evt.keyCode);
-}
-}else{
-if(dojo.render.html.safari){
-switch(evt.keyCode){
-case 25:
-evt.key=evt.KEY_TAB;
-evt.shift=true;
-break;
-case 63232:
-evt.key=evt.KEY_UP_ARROW;
-break;
-case 63233:
-evt.key=evt.KEY_DOWN_ARROW;
-break;
-case 63234:
-evt.key=evt.KEY_LEFT_ARROW;
-break;
-case 63235:
-evt.key=evt.KEY_RIGHT_ARROW;
-break;
-case 63236:
-evt.key=evt.KEY_F1;
-break;
-case 63237:
-evt.key=evt.KEY_F2;
-break;
-case 63238:
-evt.key=evt.KEY_F3;
-break;
-case 63239:
-evt.key=evt.KEY_F4;
-break;
-case 63240:
-evt.key=evt.KEY_F5;
-break;
-case 63241:
-evt.key=evt.KEY_F6;
-break;
-case 63242:
-evt.key=evt.KEY_F7;
-break;
-case 63243:
-evt.key=evt.KEY_F8;
-break;
-case 63244:
-evt.key=evt.KEY_F9;
-break;
-case 63245:
-evt.key=evt.KEY_F10;
-break;
-case 63246:
-evt.key=evt.KEY_F11;
-break;
-case 63247:
-evt.key=evt.KEY_F12;
-break;
-case 63250:
-evt.key=evt.KEY_PAUSE;
-break;
-case 63272:
-evt.key=evt.KEY_DELETE;
-break;
-case 63273:
-evt.key=evt.KEY_HOME;
-break;
-case 63275:
-evt.key=evt.KEY_END;
-break;
-case 63276:
-evt.key=evt.KEY_PAGE_UP;
-break;
-case 63277:
-evt.key=evt.KEY_PAGE_DOWN;
-break;
-case 63302:
-evt.key=evt.KEY_INSERT;
-break;
-case 63248:
-case 63249:
-case 63289:
-break;
-default:
-evt.key=evt.charCode>=evt.KEY_SPACE?String.fromCharCode(evt.charCode):evt.keyCode;
-}
-}else{
-evt.key=evt.charCode>0?String.fromCharCode(evt.charCode):evt.keyCode;
-}
-}
-}
-}
-}
-}
-if(dojo.render.html.ie){
-if(!evt.target){
-evt.target=evt.srcElement;
-}
-if(!evt.currentTarget){
-evt.currentTarget=(_472?_472:evt.srcElement);
-}
-if(!evt.layerX){
-evt.layerX=evt.offsetX;
-}
-if(!evt.layerY){
-evt.layerY=evt.offsetY;
-}
-var doc=(evt.srcElement&&evt.srcElement.ownerDocument)?evt.srcElement.ownerDocument:document;
-var _476=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
-if(!evt.pageX){
-evt.pageX=evt.clientX+(_476.scrollLeft||0);
-}
-if(!evt.pageY){
-evt.pageY=evt.clientY+(_476.scrollTop||0);
-}
-if(evt.type=="mouseover"){
-evt.relatedTarget=evt.fromElement;
-}
-if(evt.type=="mouseout"){
-evt.relatedTarget=evt.toElement;
-}
-this.currentEvent=evt;
-evt.callListener=this.callListener;
-evt.stopPropagation=this._stopPropagation;
-evt.preventDefault=this._preventDefault;
-}
-return evt;
-};
-this.stopEvent=function(evt){
-if(window.event){
-evt.cancelBubble=true;
-evt.returnValue=false;
-}else{
-evt.preventDefault();
-evt.stopPropagation();
-}
-};
-};
-dojo.provide("dojo.event.*");
-dojo.provide("dojo.widget.Manager");
-dojo.widget.manager=new function(){
-this.widgets=[];
-this.widgetIds=[];
-this.topWidgets={};
-var _478={};
-var _479=[];
-this.getUniqueId=function(_47a){
-var _47b;
-do{
-_47b=_47a+"_"+(_478[_47a]!=undefined?++_478[_47a]:_478[_47a]=0);
-}while(this.getWidgetById(_47b));
-return _47b;
-};
-this.add=function(_47c){
-this.widgets.push(_47c);
-if(!_47c.extraArgs["id"]){
-_47c.extraArgs["id"]=_47c.extraArgs["ID"];
-}
-if(_47c.widgetId==""){
-if(_47c["id"]){
-_47c.widgetId=_47c["id"];
-}else{
-if(_47c.extraArgs["id"]){
-_47c.widgetId=_47c.extraArgs["id"];
-}else{
-_47c.widgetId=this.getUniqueId(_47c.ns+"_"+_47c.widgetType);
-}
-}
-}
-if(this.widgetIds[_47c.widgetId]){
-dojo.debug("widget ID collision on ID: "+_47c.widgetId);
-}
-this.widgetIds[_47c.widgetId]=_47c;
-};
-this.destroyAll=function(){
-for(var x=this.widgets.length-1;x>=0;x--){
-try{
-this.widgets[x].destroy(true);
-delete this.widgets[x];
-}
-catch(e){
-}
-}
-};
-this.remove=function(_47e){
-if(dojo.lang.isNumber(_47e)){
-var tw=this.widgets[_47e].widgetId;
-delete this.widgetIds[tw];
-this.widgets.splice(_47e,1);
-}else{
-this.removeById(_47e);
-}
-};
-this.removeById=function(id){
-if(!dojo.lang.isString(id)){
-id=id["widgetId"];
-if(!id){
-dojo.debug("invalid widget or id passed to removeById");
-return;
-}
-}
-for(var i=0;i<this.widgets.length;i++){
-if(this.widgets[i].widgetId==id){
-this.remove(i);
-break;
-}
-}
-};
-this.getWidgetById=function(id){
-if(dojo.lang.isString(id)){
-return this.widgetIds[id];
-}
-return id;
-};
-this.getWidgetsByType=function(type){
-var lt=type.toLowerCase();
-var _485=(type.indexOf(":")<0?function(x){
-return x.widgetType.toLowerCase();
-}:function(x){
-return x.getNamespacedType();
-});
-var ret=[];
-dojo.lang.forEach(this.widgets,function(x){
-if(_485(x)==lt){
-ret.push(x);
-}
-});
-return ret;
-};
-this.getWidgetsByFilter=function(_48a,_48b){
-var ret=[];
-dojo.lang.every(this.widgets,function(x){
-if(_48a(x)){
-ret.push(x);
-if(_48b){
-return false;
-}
-}
-return true;
-});
-return (_48b?ret[0]:ret);
-};
-this.getAllWidgets=function(){
-return this.widgets.concat();
-};
-this.getWidgetByNode=function(node){
-var w=this.getAllWidgets();
-node=dojo.byId(node);
-for(var i=0;i<w.length;i++){
-if(w[i].domNode==node){
-return w[i];
-}
-}
-return null;
-};
-this.byId=this.getWidgetById;
-this.byType=this.getWidgetsByType;
-this.byFilter=this.getWidgetsByFilter;
-this.byNode=this.getWidgetByNode;
-var _491={};
-var _492=["dojo.widget"];
-for(var i=0;i<_492.length;i++){
-_492[_492[i]]=true;
-}
-this.registerWidgetPackage=function(_494){
-if(!_492[_494]){
-_492[_494]=true;
-_492.push(_494);
-}
-};
-this.getWidgetPackageList=function(){
-return dojo.lang.map(_492,function(elt){
-return (elt!==true?elt:undefined);
-});
-};
-this.getImplementation=function(_496,_497,_498,ns){
-var impl=this.getImplementationName(_496,ns);
-if(impl){
-var ret=_497?new impl(_497):new impl();
-return ret;
-}
-};
-function buildPrefixCache(){
-for(var _49c in dojo.render){
-if(dojo.render[_49c]["capable"]===true){
-var _49d=dojo.render[_49c].prefixes;
-for(var i=0;i<_49d.length;i++){
-_479.push(_49d[i].toLowerCase());
-}
-}
-}
-}
-var _49f=function(_4a0,_4a1){
-if(!_4a1){
-return null;
-}
-for(var i=0,l=_479.length,_4a4;i<=l;i++){
-_4a4=(i<l?_4a1[_479[i]]:_4a1);
-if(!_4a4){
-continue;
-}
-for(var name in _4a4){
-if(name.toLowerCase()==_4a0){
-return _4a4[name];
-}
-}
-}
-return null;
-};
-var _4a6=function(_4a7,_4a8){
-var _4a9=dojo.evalObjPath(_4a8,false);
-return (_4a9?_49f(_4a7,_4a9):null);
-};
-this.getImplementationName=function(_4aa,ns){
-var _4ac=_4aa.toLowerCase();
-ns=ns||"dojo";
-var imps=_491[ns]||(_491[ns]={});
-var impl=imps[_4ac];
-if(impl){
-return impl;
-}
-if(!_479.length){
-buildPrefixCache();
-}
-var _4af=dojo.ns.get(ns);
-if(!_4af){
-dojo.ns.register(ns,ns+".widget");
-_4af=dojo.ns.get(ns);
-}
-if(_4af){
-_4af.resolve(_4aa);
-}
-impl=_4a6(_4ac,_4af.module);
-if(impl){
-return (imps[_4ac]=impl);
-}
-_4af=dojo.ns.require(ns);
-if((_4af)&&(_4af.resolver)){
-_4af.resolve(_4aa);
-impl=_4a6(_4ac,_4af.module);
-if(impl){
-return (imps[_4ac]=impl);
-}
-}
-dojo.deprecated("dojo.widget.Manager.getImplementationName","Could not locate widget implementation for \""+_4aa+"\" in \""+_4af.module+"\" registered to namespace \""+_4af.name+"\". "+"Developers must specify correct namespaces for all non-Dojo widgets","0.5");
-for(var i=0;i<_492.length;i++){
-impl=_4a6(_4ac,_492[i]);
-if(impl){
-return (imps[_4ac]=impl);
-}
-}
-throw new Error("Could not locate widget implementation for \""+_4aa+"\" in \""+_4af.module+"\" registered to namespace \""+_4af.name+"\"");
-};
-this.resizing=false;
-this.onWindowResized=function(){
-if(this.resizing){
-return;
-}
-try{
-this.resizing=true;
-for(var id in this.topWidgets){
-var _4b2=this.topWidgets[id];
-if(_4b2.checkSize){
-_4b2.checkSize();
-}
-}
-}
-catch(e){
-}
-finally{
-this.resizing=false;
-}
-};
-if(typeof window!="undefined"){
-dojo.addOnLoad(this,"onWindowResized");
-dojo.event.connect(window,"onresize",this,"onWindowResized");
-}
-};
-(function(){
-var dw=dojo.widget;
-var dwm=dw.manager;
-var h=dojo.lang.curry(dojo.lang,"hitch",dwm);
-var g=function(_4b7,_4b8){
-dw[(_4b8||_4b7)]=h(_4b7);
-};
-g("add","addWidget");
-g("destroyAll","destroyAllWidgets");
-g("remove","removeWidget");
-g("removeById","removeWidgetById");
-g("getWidgetById");
-g("getWidgetById","byId");
-g("getWidgetsByType");
-g("getWidgetsByFilter");
-g("getWidgetsByType","byType");
-g("getWidgetsByFilter","byFilter");
-g("getWidgetByNode","byNode");
-dw.all=function(n){
-var _4ba=dwm.getAllWidgets.apply(dwm,arguments);
-if(arguments.length>0){
-return _4ba[n];
-}
-return _4ba;
-};
-g("registerWidgetPackage");
-g("getImplementation","getWidgetImplementation");
-g("getImplementationName","getWidgetImplementationName");
-dw.widgets=dwm.widgets;
-dw.widgetIds=dwm.widgetIds;
-dw.root=dwm.root;
-})();
-dojo.provide("dojo.uri.*");
-dojo.provide("dojo.a11y");
-dojo.a11y={imgPath:dojo.uri.dojoUri("src/widget/templates/images"),doAccessibleCheck:true,accessible:null,checkAccessible:function(){
-if(this.accessible===null){
-this.accessible=false;
-if(this.doAccessibleCheck==true){
-this.accessible=this.testAccessible();
-}
-}
-return this.accessible;
-},testAccessible:function(){
-this.accessible=false;
-if(dojo.render.html.ie||dojo.render.html.mozilla){
-var div=document.createElement("div");
-div.style.backgroundImage="url(\""+this.imgPath+"/tab_close.gif\")";
-dojo.body().appendChild(div);
-var _4bc=null;
-if(window.getComputedStyle){
-var _4bd=getComputedStyle(div,"");
-_4bc=_4bd.getPropertyValue("background-image");
-}else{
-_4bc=div.currentStyle.backgroundImage;
-}
-var _4be=false;
-if(_4bc!=null&&(_4bc=="none"||_4bc=="url(invalid-url:)")){
-this.accessible=true;
-}
-dojo.body().removeChild(div);
-}
-return this.accessible;
-},setCheckAccessible:function(_4bf){
-this.doAccessibleCheck=_4bf;
-},setAccessibleMode:function(){
-if(this.accessible===null){
-if(this.checkAccessible()){
-dojo.render.html.prefixes.unshift("a11y");
-}
-}
-return this.accessible;
-}};
-dojo.provide("dojo.widget.Widget");
-dojo.declare("dojo.widget.Widget",null,function(){
-this.children=[];
-this.extraArgs={};
-},{parent:null,isTopLevel:false,disabled:false,isContainer:false,widgetId:"",widgetType:"Widget",ns:"dojo",getNamespacedType:function(){
-return (this.ns?this.ns+":"+this.widgetType:this.widgetType).toLowerCase();
-},toString:function(){
-return "[Widget "+this.getNamespacedType()+", "+(this.widgetId||"NO ID")+"]";
-},repr:function(){
-return this.toString();
-},enable:function(){
-this.disabled=false;
-},disable:function(){
-this.disabled=true;
-},onResized:function(){
-this.notifyChildrenOfResize();
-},notifyChildrenOfResize:function(){
-for(var i=0;i<this.children.length;i++){
-var _4c1=this.children[i];
-if(_4c1.onResized){
-_4c1.onResized();
-}
-}
-},create:function(args,_4c3,_4c4,ns){
-if(ns){
-this.ns=ns;
-}
-this.satisfyPropertySets(args,_4c3,_4c4);
-this.mixInProperties(args,_4c3,_4c4);
-this.postMixInProperties(args,_4c3,_4c4);
-dojo.widget.manager.add(this);
-this.buildRendering(args,_4c3,_4c4);
-this.initialize(args,_4c3,_4c4);
-this.postInitialize(args,_4c3,_4c4);
-this.postCreate(args,_4c3,_4c4);
-return this;
-},destroy:function(_4c6){
-if(this.parent){
-this.parent.removeChild(this);
-}
-this.destroyChildren();
-this.uninitialize();
-this.destroyRendering(_4c6);
-dojo.widget.manager.removeById(this.widgetId);
-},destroyChildren:function(){
-var _4c7;
-var i=0;
-while(this.children.length>i){
-_4c7=this.children[i];
-if(_4c7 instanceof dojo.widget.Widget){
-this.removeChild(_4c7);
-_4c7.destroy();
-continue;
-}
-i++;
-}
-},getChildrenOfType:function(type,_4ca){
-var ret=[];
-var _4cc=dojo.lang.isFunction(type);
-if(!_4cc){
-type=type.toLowerCase();
-}
-for(var x=0;x<this.children.length;x++){
-if(_4cc){
-if(this.children[x] instanceof type){
-ret.push(this.children[x]);
-}
-}else{
-if(this.children[x].widgetType.toLowerCase()==type){
-ret.push(this.children[x]);
-}
-}
-if(_4ca){
-ret=ret.concat(this.children[x].getChildrenOfType(type,_4ca));
-}
-}
-return ret;
-},getDescendants:function(){
-var _4ce=[];
-var _4cf=[this];
-var elem;
-while((elem=_4cf.pop())){
-_4ce.push(elem);
-if(elem.children){
-dojo.lang.forEach(elem.children,function(elem){
-_4cf.push(elem);
-});
-}
-}
-return _4ce;
-},isFirstChild:function(){
-return this===this.parent.children[0];
-},isLastChild:function(){
-return this===this.parent.children[this.parent.children.length-1];
-},satisfyPropertySets:function(args){
-return args;
-},mixInProperties:function(args,frag){
-if((args["fastMixIn"])||(frag["fastMixIn"])){
-for(var x in args){
-this[x]=args[x];
-}
-return;
-}
-var _4d6;
-var _4d7=dojo.widget.lcArgsCache[this.widgetType];
-if(_4d7==null){
-_4d7={};
-for(var y in this){
-_4d7[((new String(y)).toLowerCase())]=y;
-}
-dojo.widget.lcArgsCache[this.widgetType]=_4d7;
-}
-var _4d9={};
-for(var x in args){
-if(!this[x]){
-var y=_4d7[(new String(x)).toLowerCase()];
-if(y){
-args[y]=args[x];
-x=y;
-}
-}
-if(_4d9[x]){
-continue;
-}
-_4d9[x]=true;
-if((typeof this[x])!=(typeof _4d6)){
-if(typeof args[x]!="string"){
-this[x]=args[x];
-}else{
-if(dojo.lang.isString(this[x])){
-this[x]=args[x];
-}else{
-if(dojo.lang.isNumber(this[x])){
-this[x]=new Number(args[x]);
-}else{
-if(dojo.lang.isBoolean(this[x])){
-this[x]=(args[x].toLowerCase()=="false")?false:true;
-}else{
-if(dojo.lang.isFunction(this[x])){
-if(args[x].search(/[^\w\.]+/i)==-1){
-this[x]=dojo.evalObjPath(args[x],false);
-}else{
-var tn=dojo.lang.nameAnonFunc(new Function(args[x]),this);
-dojo.event.kwConnect({srcObj:this,srcFunc:x,adviceObj:this,adviceFunc:tn});
-}
-}else{
-if(dojo.lang.isArray(this[x])){
-this[x]=args[x].split(";");
-}else{
-if(this[x] instanceof Date){
-this[x]=new Date(Number(args[x]));
-}else{
-if(typeof this[x]=="object"){
-if(this[x] instanceof dojo.uri.Uri){
-this[x]=dojo.uri.dojoUri(args[x]);
-}else{
-var _4db=args[x].split(";");
-for(var y=0;y<_4db.length;y++){
-var si=_4db[y].indexOf(":");
-if((si!=-1)&&(_4db[y].length>si)){
-this[x][_4db[y].substr(0,si).replace(/^\s+|\s+$/g,"")]=_4db[y].substr(si+1);
-}
-}
-}
-}else{
-this[x]=args[x];
-}
-}
-}
-}
-}
-}
-}
-}
-}else{
-this.extraArgs[x.toLowerCase()]=args[x];
-}
-}
-},postMixInProperties:function(args,frag,_4df){
-},initialize:function(args,frag,_4e2){
-return false;
-},postInitialize:function(args,frag,_4e5){
-return false;
-},postCreate:function(args,frag,_4e8){
-return false;
-},uninitialize:function(){
-return false;
-},buildRendering:function(args,frag,_4eb){
-dojo.unimplemented("dojo.widget.Widget.buildRendering, on "+this.toString()+", ");
-return false;
-},destroyRendering:function(){
-dojo.unimplemented("dojo.widget.Widget.destroyRendering");
-return false;
-},addedTo:function(_4ec){
-},addChild:function(_4ed){
-dojo.unimplemented("dojo.widget.Widget.addChild");
-return false;
-},removeChild:function(_4ee){
-for(var x=0;x<this.children.length;x++){
-if(this.children[x]===_4ee){
-this.children.splice(x,1);
-_4ee.parent=null;
-break;
-}
-}
-return _4ee;
-},getPreviousSibling:function(){
-var idx=this.getParentIndex();
-if(idx<=0){
-return null;
-}
-return this.parent.children[idx-1];
-},getSiblings:function(){
-return this.parent.children;
-},getParentIndex:function(){
-return dojo.lang.indexOf(this.parent.children,this,true);
-},getNextSibling:function(){
-var idx=this.getParentIndex();
-if(idx==this.parent.children.length-1){
-return null;
-}
-if(idx<0){
-return null;
-}
-return this.parent.children[idx+1];
-}});
-dojo.widget.lcArgsCache={};
-dojo.widget.tags={};
-dojo.widget.tags.addParseTreeHandler=function(type){
-dojo.deprecated("addParseTreeHandler",". ParseTreeHandlers are now reserved for components. Any unfiltered DojoML tag without a ParseTreeHandler is assumed to be a widget","0.5");
-};
-dojo.widget.tags["dojo:propertyset"]=function(_4f3,_4f4,_4f5){
-var _4f6=_4f4.parseProperties(_4f3["dojo:propertyset"]);
-};
-dojo.widget.tags["dojo:connect"]=function(_4f7,_4f8,_4f9){
-var _4fa=_4f8.parseProperties(_4f7["dojo:connect"]);
-};
-dojo.widget.buildWidgetFromParseTree=function(type,frag,_4fd,_4fe,_4ff,_500){
-dojo.a11y.setAccessibleMode();
-var _501=type.split(":");
-_501=(_501.length==2)?_501[1]:type;
-var _502=_500||_4fd.parseProperties(frag[frag["ns"]+":"+_501]);
-var _503=dojo.widget.manager.getImplementation(_501,null,null,frag["ns"]);
-if(!_503){
-throw new Error("cannot find \""+type+"\" widget");
-}else{
-if(!_503.create){
-throw new Error("\""+type+"\" widget object has no \"create\" method and does not appear to implement *Widget");
-}
-}
-_502["dojoinsertionindex"]=_4ff;
-var ret=_503.create(_502,frag,_4fe,frag["ns"]);
-return ret;
-};
-dojo.widget.defineWidget=function(_505,_506,_507,init,_509){
-if(dojo.lang.isString(arguments[3])){
-dojo.widget._defineWidget(arguments[0],arguments[3],arguments[1],arguments[4],arguments[2]);
-}else{
-var args=[arguments[0]],p=3;
-if(dojo.lang.isString(arguments[1])){
-args.push(arguments[1],arguments[2]);
-}else{
-args.push("",arguments[1]);
-p=2;
-}
-if(dojo.lang.isFunction(arguments[p])){
-args.push(arguments[p],arguments[p+1]);
-}else{
-args.push(null,arguments[p]);
-}
-dojo.widget._defineWidget.apply(this,args);
-}
-};
-dojo.widget.defineWidget.renderers="html|svg|vml";
-dojo.widget._defineWidget=function(_50c,_50d,_50e,init,_510){
-var _511=_50c.split(".");
-var type=_511.pop();
-var regx="\\.("+(_50d?_50d+"|":"")+dojo.widget.defineWidget.renderers+")\\.";
-var r=_50c.search(new RegExp(regx));
-_511=(r<0?_511.join("."):_50c.substr(0,r));
-dojo.widget.manager.registerWidgetPackage(_511);
-var pos=_511.indexOf(".");
-var _516=(pos>-1)?_511.substring(0,pos):_511;
-_510=(_510)||{};
-_510.widgetType=type;
-if((!init)&&(_510["classConstructor"])){
-init=_510.classConstructor;
-delete _510.classConstructor;
-}
-dojo.declare(_50c,_50e,init,_510);
-};
-dojo.provide("dojo.widget.Parse");
-dojo.widget.Parse=function(_517){
-this.propertySetsList=[];
-this.fragment=_517;
-this.createComponents=function(frag,_519){
-var _51a=[];
-var _51b=false;
-try{
-if(frag&&frag.tagName&&(frag!=frag.nodeRef)){
-var _51c=dojo.widget.tags;
-var tna=String(frag.tagName).split(";");
-for(var x=0;x<tna.length;x++){
-var ltn=tna[x].replace(/^\s+|\s+$/g,"").toLowerCase();
-frag.tagName=ltn;
-var ret;
-if(_51c[ltn]){
-_51b=true;
-ret=_51c[ltn](frag,this,_519,frag.index);
-_51a.push(ret);
-}else{
-if(ltn.indexOf(":")==-1){
-ltn="dojo:"+ltn;
-}
-ret=dojo.widget.buildWidgetFromParseTree(ltn,frag,this,_519,frag.index);
-if(ret){
-_51b=true;
-_51a.push(ret);
-}
-}
-}
-}
-}
-catch(e){
-dojo.debug("dojo.widget.Parse: error:",e);
-}
-if(!_51b){
-_51a=_51a.concat(this.createSubComponents(frag,_519));
-}
-return _51a;
-};
-this.createSubComponents=function(_521,_522){
-var frag,_524=[];
-for(var item in _521){
-frag=_521[item];
-if(frag&&typeof frag=="object"&&(frag!=_521.nodeRef)&&(frag!=_521.tagName)&&(!dojo.dom.isNode(frag))){
-_524=_524.concat(this.createComponents(frag,_522));
-}
-}
-return _524;
-};
-this.parsePropertySets=function(_526){
-return [];
-};
-this.parseProperties=function(_527){
-var _528={};
-for(var item in _527){
-if((_527[item]==_527.tagName)||(_527[item]==_527.nodeRef)){
-}else{
-var frag=_527[item];
-if(frag.tagName&&dojo.widget.tags[frag.tagName.toLowerCase()]){
-}else{
-if(frag[0]&&frag[0].value!=""&&frag[0].value!=null){
-try{
-if(item.toLowerCase()=="dataprovider"){
-var _52b=this;
-this.getDataProvider(_52b,frag[0].value);
-_528.dataProvider=this.dataProvider;
-}
-_528[item]=frag[0].value;
-var _52c=this.parseProperties(frag);
-for(var _52d in _52c){
-_528[_52d]=_52c[_52d];
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-}
-switch(item.toLowerCase()){
-case "checked":
-case "disabled":
-if(typeof _528[item]!="boolean"){
-_528[item]=true;
-}
-break;
-}
-}
-}
-return _528;
-};
-this.getDataProvider=function(_52e,_52f){
-dojo.io.bind({url:_52f,load:function(type,_531){
-if(type=="load"){
-_52e.dataProvider=_531;
-}
-},mimetype:"text/javascript",sync:true});
-};
-this.getPropertySetById=function(_532){
-for(var x=0;x<this.propertySetsList.length;x++){
-if(_532==this.propertySetsList[x]["id"][0].value){
-return this.propertySetsList[x];
-}
-}
-return "";
-};
-this.getPropertySetsByType=function(_534){
-var _535=[];
-for(var x=0;x<this.propertySetsList.length;x++){
-var cpl=this.propertySetsList[x];
-var cpcc=cpl.componentClass||cpl.componentType||null;
-var _539=this.propertySetsList[x]["id"][0].value;
-if(cpcc&&(_539==cpcc[0].value)){
-_535.push(cpl);
-}
-}
-return _535;
-};
-this.getPropertySets=function(_53a){
-var ppl="dojo:propertyproviderlist";
-var _53c=[];
-var _53d=_53a.tagName;
-if(_53a[ppl]){
-var _53e=_53a[ppl].value.split(" ");
-for(var _53f in _53e){
-if((_53f.indexOf("..")==-1)&&(_53f.indexOf("://")==-1)){
-var _540=this.getPropertySetById(_53f);
-if(_540!=""){
-_53c.push(_540);
-}
-}else{
-}
-}
-}
-return this.getPropertySetsByType(_53d).concat(_53c);
-};
-this.createComponentFromScript=function(_541,_542,_543,ns){
-_543.fastMixIn=true;
-var ltn=(ns||"dojo")+":"+_542.toLowerCase();
-if(dojo.widget.tags[ltn]){
-return [dojo.widget.tags[ltn](_543,this,null,null,_543)];
-}
-return [dojo.widget.buildWidgetFromParseTree(ltn,_543,this,null,null,_543)];
-};
-};
-dojo.widget._parser_collection={"dojo":new dojo.widget.Parse()};
-dojo.widget.getParser=function(name){
-if(!name){
-name="dojo";
-}
-if(!this._parser_collection[name]){
-this._parser_collection[name]=new dojo.widget.Parse();
-}
-return this._parser_collection[name];
-};
-dojo.widget.createWidget=function(name,_548,_549,_54a){
-var _54b=false;
-var _54c=(typeof name=="string");
-if(_54c){
-var pos=name.indexOf(":");
-var ns=(pos>-1)?name.substring(0,pos):"dojo";
-if(pos>-1){
-name=name.substring(pos+1);
-}
-var _54f=name.toLowerCase();
-var _550=ns+":"+_54f;
-_54b=(dojo.byId(name)&&!dojo.widget.tags[_550]);
-}
-if((arguments.length==1)&&(_54b||!_54c)){
-var xp=new dojo.xml.Parse();
-var tn=_54b?dojo.byId(name):name;
-return dojo.widget.getParser().createComponents(xp.parseElement(tn,null,true))[0];
-}
-function fromScript(_553,name,_555,ns){
-_555[_550]={dojotype:[{value:_54f}],nodeRef:_553,fastMixIn:true};
-_555.ns=ns;
-return dojo.widget.getParser().createComponentFromScript(_553,name,_555,ns);
-}
-_548=_548||{};
-var _557=false;
-var tn=null;
-var h=dojo.render.html.capable;
-if(h){
-tn=document.createElement("span");
-}
-if(!_549){
-_557=true;
-_549=tn;
-if(h){
-dojo.body().appendChild(_549);
-}
-}else{
-if(_54a){
-dojo.dom.insertAtPosition(tn,_549,_54a);
-}else{
-tn=_549;
-}
-}
-var _559=fromScript(tn,name.toLowerCase(),_548,ns);
-if((!_559)||(!_559[0])||(typeof _559[0].widgetType=="undefined")){
-throw new Error("createWidget: Creation of \""+name+"\" widget failed.");
-}
-try{
-if(_557&&_559[0].domNode.parentNode){
-_559[0].domNode.parentNode.removeChild(_559[0].domNode);
-}
-}
-catch(e){
-dojo.debug(e);
-}
-return _559[0];
-};
-dojo.provide("dojo.widget.DomWidget");
-dojo.widget._cssFiles={};
-dojo.widget._cssStrings={};
-dojo.widget._templateCache={};
-dojo.widget.defaultStrings={dojoRoot:dojo.hostenv.getBaseScriptUri(),baseScriptUri:dojo.hostenv.getBaseScriptUri()};
-dojo.widget.fillFromTemplateCache=function(obj,_55b,_55c,_55d){
-var _55e=_55b||obj.templatePath;
-var _55f=dojo.widget._templateCache;
-if(!_55e&&!obj["widgetType"]){
-do{
-var _560="__dummyTemplate__"+dojo.widget._templateCache.dummyCount++;
-}while(_55f[_560]);
-obj.widgetType=_560;
-}
-var wt=_55e?_55e.toString():obj.widgetType;
-var ts=_55f[wt];
-if(!ts){
-_55f[wt]={"string":null,"node":null};
-if(_55d){
-ts={};
-}else{
-ts=_55f[wt];
-}
-}
-if((!obj.templateString)&&(!_55d)){
-obj.templateString=_55c||ts["string"];
-}
-if((!obj.templateNode)&&(!_55d)){
-obj.templateNode=ts["node"];
-}
-if((!obj.templateNode)&&(!obj.templateString)&&(_55e)){
-var _563=dojo.hostenv.getText(_55e);
-if(_563){
-_563=_563.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");
-var _564=_563.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-if(_564){
-_563=_564[1];
-}
-}else{
-_563="";
-}
-obj.templateString=_563;
-if(!_55d){
-_55f[wt]["string"]=_563;
-}
-}
-if((!ts["string"])&&(!_55d)){
-ts.string=obj.templateString;
-}
-};
-dojo.widget._templateCache.dummyCount=0;
-dojo.widget.attachProperties=["dojoAttachPoint","id"];
-dojo.widget.eventAttachProperty="dojoAttachEvent";
-dojo.widget.onBuildProperty="dojoOnBuild";
-dojo.widget.waiNames=["waiRole","waiState"];
-dojo.widget.wai={waiRole:{name:"waiRole","namespace":"http://www.w3.org/TR/xhtml2",alias:"x2",prefix:"wairole:"},waiState:{name:"waiState","namespace":"http://www.w3.org/2005/07/aaa",alias:"aaa",prefix:""},setAttr:function(node,ns,attr,_568){
-if(dojo.render.html.ie){
-node.setAttribute(this[ns].alias+":"+attr,this[ns].prefix+_568);
-}else{
-node.setAttributeNS(this[ns]["namespace"],attr,this[ns].prefix+_568);
-}
-},getAttr:function(node,ns,attr){
-if(dojo.render.html.ie){
-return node.getAttribute(this[ns].alias+":"+attr);
-}else{
-return node.getAttributeNS(this[ns]["namespace"],attr);
-}
-},removeAttr:function(node,ns,attr){
-var _56f=true;
-if(dojo.render.html.ie){
-_56f=node.removeAttribute(this[ns].alias+":"+attr);
-}else{
-node.removeAttributeNS(this[ns]["namespace"],attr);
-}
-return _56f;
-}};
-dojo.widget.attachTemplateNodes=function(_570,_571,_572){
-var _573=dojo.dom.ELEMENT_NODE;
-function trim(str){
-return str.replace(/^\s+|\s+$/g,"");
-}
-if(!_570){
-_570=_571.domNode;
-}
-if(_570.nodeType!=_573){
-return;
-}
-var _575=_570.all||_570.getElementsByTagName("*");
-var _576=_571;
-for(var x=-1;x<_575.length;x++){
-var _578=(x==-1)?_570:_575[x];
-var _579=[];
-if(!_571.widgetsInTemplate||!_578.getAttribute("dojoType")){
-for(var y=0;y<this.attachProperties.length;y++){
-var _57b=_578.getAttribute(this.attachProperties[y]);
-if(_57b){
-_579=_57b.split(";");
-for(var z=0;z<_579.length;z++){
-if(dojo.lang.isArray(_571[_579[z]])){
-_571[_579[z]].push(_578);
-}else{
-_571[_579[z]]=_578;
-}
-}
-break;
-}
-}
-var _57d=_578.getAttribute(this.eventAttachProperty);
-if(_57d){
-var evts=_57d.split(";");
-for(var y=0;y<evts.length;y++){
-if((!evts[y])||(!evts[y].length)){
-continue;
-}
-var _57f=null;
-var tevt=trim(evts[y]);
-if(evts[y].indexOf(":")>=0){
-var _581=tevt.split(":");
-tevt=trim(_581[0]);
-_57f=trim(_581[1]);
-}
-if(!_57f){
-_57f=tevt;
-}
-var tf=function(){
-var ntf=new String(_57f);
-return function(evt){
-if(_576[ntf]){
-_576[ntf](dojo.event.browser.fixEvent(evt,this));
-}
-};
-}();
-dojo.event.browser.addListener(_578,tevt,tf,false,true);
-}
-}
-for(var y=0;y<_572.length;y++){
-var _585=_578.getAttribute(_572[y]);
-if((_585)&&(_585.length)){
-var _57f=null;
-var _586=_572[y].substr(4);
-_57f=trim(_585);
-var _587=[_57f];
-if(_57f.indexOf(";")>=0){
-_587=dojo.lang.map(_57f.split(";"),trim);
-}
-for(var z=0;z<_587.length;z++){
-if(!_587[z].length){
-continue;
-}
-var tf=function(){
-var ntf=new String(_587[z]);
-return function(evt){
-if(_576[ntf]){
-_576[ntf](dojo.event.browser.fixEvent(evt,this));
-}
-};
-}();
-dojo.event.browser.addListener(_578,_586,tf,false,true);
-}
-}
-}
-}
-var _58a=_578.getAttribute(this.templateProperty);
-if(_58a){
-_571[_58a]=_578;
-}
-dojo.lang.forEach(dojo.widget.waiNames,function(name){
-var wai=dojo.widget.wai[name];
-var val=_578.getAttribute(wai.name);
-if(val){
-if(val.indexOf("-")==-1){
-dojo.widget.wai.setAttr(_578,wai.name,"role",val);
-}else{
-var _58e=val.split("-");
-dojo.widget.wai.setAttr(_578,wai.name,_58e[0],_58e[1]);
-}
-}
-},this);
-var _58f=_578.getAttribute(this.onBuildProperty);
-if(_58f){
-eval("var node = baseNode; var widget = targetObj; "+_58f);
-}
-}
-};
-dojo.widget.getDojoEventsFromStr=function(str){
-var re=/(dojoOn([a-z]+)(\s?))=/gi;
-var evts=str?str.match(re)||[]:[];
-var ret=[];
-var lem={};
-for(var x=0;x<evts.length;x++){
-if(evts[x].length<1){
-continue;
-}
-var cm=evts[x].replace(/\s/,"");
-cm=(cm.slice(0,cm.length-1));
-if(!lem[cm]){
-lem[cm]=true;
-ret.push(cm);
-}
-}
-return ret;
-};
-dojo.declare("dojo.widget.DomWidget",dojo.widget.Widget,function(){
-if((arguments.length>0)&&(typeof arguments[0]=="object")){
-this.create(arguments[0]);
-}
-},{templateNode:null,templateString:null,templateCssString:null,preventClobber:false,domNode:null,containerNode:null,widgetsInTemplate:false,addChild:function(_597,_598,pos,ref,_59b){
-if(!this.isContainer){
-dojo.debug("dojo.widget.DomWidget.addChild() attempted on non-container widget");
-return null;
-}else{
-if(_59b==undefined){
-_59b=this.children.length;
-}
-this.addWidgetAsDirectChild(_597,_598,pos,ref,_59b);
-this.registerChild(_597,_59b);
-}
-return _597;
-},addWidgetAsDirectChild:function(_59c,_59d,pos,ref,_5a0){
-if((!this.containerNode)&&(!_59d)){
-this.containerNode=this.domNode;
-}
-var cn=(_59d)?_59d:this.containerNode;
-if(!pos){
-pos="after";
-}
-if(!ref){
-if(!cn){
-cn=dojo.body();
-}
-ref=cn.lastChild;
-}
-if(!_5a0){
-_5a0=0;
-}
-_59c.domNode.setAttribute("dojoinsertionindex",_5a0);
-if(!ref){
-cn.appendChild(_59c.domNode);
-}else{
-if(pos=="insertAtIndex"){
-dojo.dom.insertAtIndex(_59c.domNode,ref.parentNode,_5a0);
-}else{
-if((pos=="after")&&(ref===cn.lastChild)){
-cn.appendChild(_59c.domNode);
-}else{
-dojo.dom.insertAtPosition(_59c.domNode,cn,pos);
-}
-}
-}
-},registerChild:function(_5a2,_5a3){
-_5a2.dojoInsertionIndex=_5a3;
-var idx=-1;
-for(var i=0;i<this.children.length;i++){
-if(this.children[i].dojoInsertionIndex<=_5a3){
-idx=i;
-}
-}
-this.children.splice(idx+1,0,_5a2);
-_5a2.parent=this;
-_5a2.addedTo(this,idx+1);
-delete dojo.widget.manager.topWidgets[_5a2.widgetId];
-},removeChild:function(_5a6){
-dojo.dom.removeNode(_5a6.domNode);
-return dojo.widget.DomWidget.superclass.removeChild.call(this,_5a6);
-},getFragNodeRef:function(frag){
-if(!frag){
-return null;
-}
-if(!frag[this.getNamespacedType()]){
-dojo.raise("Error: no frag for widget type "+this.getNamespacedType()+", id "+this.widgetId+" (maybe a widget has set it's type incorrectly)");
-}
-return frag[this.getNamespacedType()]["nodeRef"];
-},postInitialize:function(args,frag,_5aa){
-var _5ab=this.getFragNodeRef(frag);
-if(_5aa&&(_5aa.snarfChildDomOutput||!_5ab)){
-_5aa.addWidgetAsDirectChild(this,"","insertAtIndex","",args["dojoinsertionindex"],_5ab);
-}else{
-if(_5ab){
-if(this.domNode&&(this.domNode!==_5ab)){
-this._sourceNodeRef=dojo.dom.replaceNode(_5ab,this.domNode);
-}
-}
-}
-if(_5aa){
-_5aa.registerChild(this,args.dojoinsertionindex);
-}else{
-dojo.widget.manager.topWidgets[this.widgetId]=this;
-}
-if(this.widgetsInTemplate){
-var _5ac=new dojo.xml.Parse();
-var _5ad;
-var _5ae=this.domNode.getElementsByTagName("*");
-for(var i=0;i<_5ae.length;i++){
-if(_5ae[i].getAttribute("dojoAttachPoint")=="subContainerWidget"){
-_5ad=_5ae[i];
-}
-if(_5ae[i].getAttribute("dojoType")){
-_5ae[i].setAttribute("isSubWidget",true);
-}
-}
-if(this.isContainer&&!this.containerNode){
-if(_5ad){
-var src=this.getFragNodeRef(frag);
-if(src){
-dojo.dom.moveChildren(src,_5ad);
-frag["dojoDontFollow"]=true;
-}
-}else{
-dojo.debug("No subContainerWidget node can be found in template file for widget "+this);
-}
-}
-var _5b1=_5ac.parseElement(this.domNode,null,true);
-dojo.widget.getParser().createSubComponents(_5b1,this);
-var _5b2=[];
-var _5b3=[this];
-var w;
-while((w=_5b3.pop())){
-for(var i=0;i<w.children.length;i++){
-var _5b5=w.children[i];
-if(_5b5._processedSubWidgets||!_5b5.extraArgs["issubwidget"]){
-continue;
-}
-_5b2.push(_5b5);
-if(_5b5.isContainer){
-_5b3.push(_5b5);
-}
-}
-}
-for(var i=0;i<_5b2.length;i++){
-var _5b6=_5b2[i];
-if(_5b6._processedSubWidgets){
-dojo.debug("This should not happen: widget._processedSubWidgets is already true!");
-return;
-}
-_5b6._processedSubWidgets=true;
-if(_5b6.extraArgs["dojoattachevent"]){
-var evts=_5b6.extraArgs["dojoattachevent"].split(";");
-for(var j=0;j<evts.length;j++){
-var _5b9=null;
-var tevt=dojo.string.trim(evts[j]);
-if(tevt.indexOf(":")>=0){
-var _5bb=tevt.split(":");
-tevt=dojo.string.trim(_5bb[0]);
-_5b9=dojo.string.trim(_5bb[1]);
-}
-if(!_5b9){
-_5b9=tevt;
-}
-if(dojo.lang.isFunction(_5b6[tevt])){
-dojo.event.kwConnect({srcObj:_5b6,srcFunc:tevt,targetObj:this,targetFunc:_5b9});
-}else{
-alert(tevt+" is not a function in widget "+_5b6);
-}
-}
-}
-if(_5b6.extraArgs["dojoattachpoint"]){
-this[_5b6.extraArgs["dojoattachpoint"]]=_5b6;
-}
-}
-}
-if(this.isContainer&&!frag["dojoDontFollow"]){
-dojo.widget.getParser().createSubComponents(frag,this);
-}
-},buildRendering:function(args,frag){
-var ts=dojo.widget._templateCache[this.widgetType];
-if(args["templatecsspath"]){
-args["templateCssPath"]=args["templatecsspath"];
-}
-var _5bf=args["templateCssPath"]||this.templateCssPath;
-if(_5bf&&!dojo.widget._cssFiles[_5bf.toString()]){
-if((!this.templateCssString)&&(_5bf)){
-this.templateCssString=dojo.hostenv.getText(_5bf);
-this.templateCssPath=null;
-}
-dojo.widget._cssFiles[_5bf.toString()]=true;
-}
-if((this["templateCssString"])&&(!dojo.widget._cssStrings[this.templateCssString])){
-dojo.html.insertCssText(this.templateCssString,null,_5bf);
-dojo.widget._cssStrings[this.templateCssString]=true;
-}
-if((!this.preventClobber)&&((this.templatePath)||(this.templateNode)||((this["templateString"])&&(this.templateString.length))||((typeof ts!="undefined")&&((ts["string"])||(ts["node"]))))){
-this.buildFromTemplate(args,frag);
-}else{
-this.domNode=this.getFragNodeRef(frag);
-}
-this.fillInTemplate(args,frag);
-},buildFromTemplate:function(args,frag){
-var _5c2=false;
-if(args["templatepath"]){
-args["templatePath"]=args["templatepath"];
-}
-dojo.widget.fillFromTemplateCache(this,args["templatePath"],null,_5c2);
-var ts=dojo.widget._templateCache[this.templatePath?this.templatePath.toString():this.widgetType];
-if((ts)&&(!_5c2)){
-if(!this.templateString.length){
-this.templateString=ts["string"];
-}
-if(!this.templateNode){
-this.templateNode=ts["node"];
-}
-}
-var _5c4=false;
-var node=null;
-var tstr=this.templateString;
-if((!this.templateNode)&&(this.templateString)){
-_5c4=this.templateString.match(/\$\{([^\}]+)\}/g);
-if(_5c4){
-var hash=this.strings||{};
-for(var key in dojo.widget.defaultStrings){
-if(dojo.lang.isUndefined(hash[key])){
-hash[key]=dojo.widget.defaultStrings[key];
-}
-}
-for(var i=0;i<_5c4.length;i++){
-var key=_5c4[i];
-key=key.substring(2,key.length-1);
-var kval=(key.substring(0,5)=="this.")?dojo.lang.getObjPathValue(key.substring(5),this):hash[key];
-var _5cb;
-if((kval)||(dojo.lang.isString(kval))){
-_5cb=new String((dojo.lang.isFunction(kval))?kval.call(this,key,this.templateString):kval);
-while(_5cb.indexOf("\"")>-1){
-_5cb=_5cb.replace("\"","&quot;");
-}
-tstr=tstr.replace(_5c4[i],_5cb);
-}
-}
-}else{
-this.templateNode=this.createNodesFromText(this.templateString,true)[0];
-if(!_5c2){
-ts.node=this.templateNode;
-}
-}
-}
-if((!this.templateNode)&&(!_5c4)){
-dojo.debug("DomWidget.buildFromTemplate: could not create template");
-return false;
-}else{
-if(!_5c4){
-node=this.templateNode.cloneNode(true);
-if(!node){
-return false;
-}
-}else{
-node=this.createNodesFromText(tstr,true)[0];
-}
-}
-this.domNode=node;
-this.attachTemplateNodes();
-if(this.isContainer&&this.containerNode){
-var src=this.getFragNodeRef(frag);
-if(src){
-dojo.dom.moveChildren(src,this.containerNode);
-}
-}
-},attachTemplateNodes:function(_5cd,_5ce){
-if(!_5cd){
-_5cd=this.domNode;
-}
-if(!_5ce){
-_5ce=this;
-}
-return dojo.widget.attachTemplateNodes(_5cd,_5ce,dojo.widget.getDojoEventsFromStr(this.templateString));
-},fillInTemplate:function(){
-},destroyRendering:function(){
-try{
-dojo.dom.destroyNode(this.domNode);
-delete this.domNode;
-}
-catch(e){
-}
-if(this._sourceNodeRef){
-try{
-dojo.dom.destroyNode(this._sourceNodeRef);
-}
-catch(e){
-}
-}
-},createNodesFromText:function(){
-dojo.unimplemented("dojo.widget.DomWidget.createNodesFromText");
-}});
-dojo.provide("dojo.gfx.color");
-dojo.gfx.color.Color=function(r,g,b,a){
-if(dojo.lang.isArray(r)){
-this.r=r[0];
-this.g=r[1];
-this.b=r[2];
-this.a=r[3]||1;
-}else{
-if(dojo.lang.isString(r)){
-var rgb=dojo.gfx.color.extractRGB(r);
-this.r=rgb[0];
-this.g=rgb[1];
-this.b=rgb[2];
-this.a=g||1;
-}else{
-if(r instanceof dojo.gfx.color.Color){
-this.r=r.r;
-this.b=r.b;
-this.g=r.g;
-this.a=r.a;
-}else{
-this.r=r;
-this.g=g;
-this.b=b;
-this.a=a;
-}
-}
-}
-};
-dojo.gfx.color.Color.fromArray=function(arr){
-return new dojo.gfx.color.Color(arr[0],arr[1],arr[2],arr[3]);
-};
-dojo.extend(dojo.gfx.color.Color,{toRgb:function(_5d5){
-if(_5d5){
-return this.toRgba();
-}else{
-return [this.r,this.g,this.b];
-}
-},toRgba:function(){
-return [this.r,this.g,this.b,this.a];
-},toHex:function(){
-return dojo.gfx.color.rgb2hex(this.toRgb());
-},toCss:function(){
-return "rgb("+this.toRgb().join()+")";
-},toString:function(){
-return this.toHex();
-},blend:function(_5d6,_5d7){
-var rgb=null;
-if(dojo.lang.isArray(_5d6)){
-rgb=_5d6;
-}else{
-if(_5d6 instanceof dojo.gfx.color.Color){
-rgb=_5d6.toRgb();
-}else{
-rgb=new dojo.gfx.color.Color(_5d6).toRgb();
-}
-}
-return dojo.gfx.color.blend(this.toRgb(),rgb,_5d7);
-}});
-dojo.gfx.color.named={white:[255,255,255],black:[0,0,0],red:[255,0,0],green:[0,255,0],lime:[0,255,0],blue:[0,0,255],navy:[0,0,128],gray:[128,128,128],silver:[192,192,192]};
-dojo.gfx.color.blend=function(a,b,_5db){
-if(typeof a=="string"){
-return dojo.gfx.color.blendHex(a,b,_5db);
-}
-if(!_5db){
-_5db=0;
-}
-_5db=Math.min(Math.max(-1,_5db),1);
-_5db=((_5db+1)/2);
-var c=[];
-for(var x=0;x<3;x++){
-c[x]=parseInt(b[x]+((a[x]-b[x])*_5db));
-}
-return c;
-};
-dojo.gfx.color.blendHex=function(a,b,_5e0){
-return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_5e0));
-};
-dojo.gfx.color.extractRGB=function(_5e1){
-var hex="0123456789abcdef";
-_5e1=_5e1.toLowerCase();
-if(_5e1.indexOf("rgb")==0){
-var _5e3=_5e1.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-var ret=_5e3.splice(1,3);
-return ret;
-}else{
-var _5e5=dojo.gfx.color.hex2rgb(_5e1);
-if(_5e5){
-return _5e5;
-}else{
-return dojo.gfx.color.named[_5e1]||[255,255,255];
-}
-}
-};
-dojo.gfx.color.hex2rgb=function(hex){
-var _5e7="0123456789ABCDEF";
-var rgb=new Array(3);
-if(hex.indexOf("#")==0){
-hex=hex.substring(1);
-}
-hex=hex.toUpperCase();
-if(hex.replace(new RegExp("["+_5e7+"]","g"),"")!=""){
-return null;
-}
-if(hex.length==3){
-rgb[0]=hex.charAt(0)+hex.charAt(0);
-rgb[1]=hex.charAt(1)+hex.charAt(1);
-rgb[2]=hex.charAt(2)+hex.charAt(2);
-}else{
-rgb[0]=hex.substring(0,2);
-rgb[1]=hex.substring(2,4);
-rgb[2]=hex.substring(4);
-}
-for(var i=0;i<rgb.length;i++){
-rgb[i]=_5e7.indexOf(rgb[i].charAt(0))*16+_5e7.indexOf(rgb[i].charAt(1));
-}
-return rgb;
-};
-dojo.gfx.color.rgb2hex=function(r,g,b){
-if(dojo.lang.isArray(r)){
-g=r[1]||0;
-b=r[2]||0;
-r=r[0]||0;
-}
-var ret=dojo.lang.map([r,g,b],function(x){
-x=new Number(x);
-var s=x.toString(16);
-while(s.length<2){
-s="0"+s;
-}
-return s;
-});
-ret.unshift("#");
-return ret.join("");
-};
-dojo.provide("dojo.lfx.Animation");
-dojo.lfx.Line=function(_5f0,end){
-this.start=_5f0;
-this.end=end;
-if(dojo.lang.isArray(_5f0)){
-var diff=[];
-dojo.lang.forEach(this.start,function(s,i){
-diff[i]=this.end[i]-s;
-},this);
-this.getValue=function(n){
-var res=[];
-dojo.lang.forEach(this.start,function(s,i){
-res[i]=(diff[i]*n)+s;
-},this);
-return res;
-};
-}else{
-var diff=end-_5f0;
-this.getValue=function(n){
-return (diff*n)+this.start;
-};
-}
-};
-dojo.lfx.easeDefault=function(n){
-if(dojo.render.html.khtml){
-return (parseFloat("0.5")+((Math.sin((n+parseFloat("1.5"))*Math.PI))/2));
-}else{
-return (0.5+((Math.sin((n+1.5)*Math.PI))/2));
-}
-};
-dojo.lfx.easeIn=function(n){
-return Math.pow(n,3);
-};
-dojo.lfx.easeOut=function(n){
-return (1-Math.pow(1-n,3));
-};
-dojo.lfx.easeInOut=function(n){
-return ((3*Math.pow(n,2))-(2*Math.pow(n,3)));
-};
-dojo.lfx.IAnimation=function(){
-};
-dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:25,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,connect:function(evt,_5ff,_600){
-if(!_600){
-_600=_5ff;
-_5ff=this;
-}
-_600=dojo.lang.hitch(_5ff,_600);
-var _601=this[evt]||function(){
-};
-this[evt]=function(){
-var ret=_601.apply(this,arguments);
-_600.apply(this,arguments);
-return ret;
-};
-return this;
-},fire:function(evt,args){
-if(this[evt]){
-this[evt].apply(this,(args||[]));
-}
-return this;
-},repeat:function(_605){
-this.repeatCount=_605;
-return this;
-},_active:false,_paused:false});
-dojo.lfx.Animation=function(_606,_607,_608,_609,_60a,rate){
-dojo.lfx.IAnimation.call(this);
-if(dojo.lang.isNumber(_606)||(!_606&&_607.getValue)){
-rate=_60a;
-_60a=_609;
-_609=_608;
-_608=_607;
-_607=_606;
-_606=null;
-}else{
-if(_606.getValue||dojo.lang.isArray(_606)){
-rate=_609;
-_60a=_608;
-_609=_607;
-_608=_606;
-_607=null;
-_606=null;
-}
-}
-if(dojo.lang.isArray(_608)){
-this.curve=new dojo.lfx.Line(_608[0],_608[1]);
-}else{
-this.curve=_608;
-}
-if(_607!=null&&_607>0){
-this.duration=_607;
-}
-if(_60a){
-this.repeatCount=_60a;
-}
-if(rate){
-this.rate=rate;
-}
-if(_606){
-dojo.lang.forEach(["handler","beforeBegin","onBegin","onEnd","onPlay","onStop","onAnimate"],function(item){
-if(_606[item]){
-this.connect(item,_606[item]);
-}
-},this);
-}
-if(_609&&dojo.lang.isFunction(_609)){
-this.easing=_609;
-}
-};
-dojo.inherits(dojo.lfx.Animation,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_60d,_60e){
-if(_60e){
-clearTimeout(this._timer);
-this._active=false;
-this._paused=false;
-this._percent=0;
-}else{
-if(this._active&&!this._paused){
-return this;
-}
-}
-this.fire("handler",["beforeBegin"]);
-this.fire("beforeBegin");
-if(_60d>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_60e);
-}),_60d);
-return this;
-}
-this._startTime=new Date().valueOf();
-if(this._paused){
-this._startTime-=(this.duration*this._percent/100);
-}
-this._endTime=this._startTime+this.duration;
-this._active=true;
-this._paused=false;
-var step=this._percent/100;
-var _610=this.curve.getValue(step);
-if(this._percent==0){
-if(!this._startRepeatCount){
-this._startRepeatCount=this.repeatCount;
-}
-this.fire("handler",["begin",_610]);
-this.fire("onBegin",[_610]);
-}
-this.fire("handler",["play",_610]);
-this.fire("onPlay",[_610]);
-this._cycle();
-return this;
-},pause:function(){
-clearTimeout(this._timer);
-if(!this._active){
-return this;
-}
-this._paused=true;
-var _611=this.curve.getValue(this._percent/100);
-this.fire("handler",["pause",_611]);
-this.fire("onPause",[_611]);
-return this;
-},gotoPercent:function(pct,_613){
-clearTimeout(this._timer);
-this._active=true;
-this._paused=true;
-this._percent=pct;
-if(_613){
-this.play();
-}
-return this;
-},stop:function(_614){
-clearTimeout(this._timer);
-var step=this._percent/100;
-if(_614){
-step=1;
-}
-var _616=this.curve.getValue(step);
-this.fire("handler",["stop",_616]);
-this.fire("onStop",[_616]);
-this._active=false;
-this._paused=false;
-return this;
-},status:function(){
-if(this._active){
-return this._paused?"paused":"playing";
-}else{
-return "stopped";
-}
-return this;
-},_cycle:function(){
-clearTimeout(this._timer);
-if(this._active){
-var curr=new Date().valueOf();
-var step=(curr-this._startTime)/(this._endTime-this._startTime);
-if(step>=1){
-step=1;
-this._percent=100;
-}else{
-this._percent=step*100;
-}
-if((this.easing)&&(dojo.lang.isFunction(this.easing))){
-step=this.easing(step);
-}
-var _619=this.curve.getValue(step);
-this.fire("handler",["animate",_619]);
-this.fire("onAnimate",[_619]);
-if(step<1){
-this._timer=setTimeout(dojo.lang.hitch(this,"_cycle"),this.rate);
-}else{
-this._active=false;
-this.fire("handler",["end"]);
-this.fire("onEnd");
-if(this.repeatCount>0){
-this.repeatCount--;
-this.play(null,true);
-}else{
-if(this.repeatCount==-1){
-this.play(null,true);
-}else{
-if(this._startRepeatCount){
-this.repeatCount=this._startRepeatCount;
-this._startRepeatCount=0;
-}
-}
-}
-}
-}
-return this;
-}});
-dojo.lfx.Combine=function(_61a){
-dojo.lfx.IAnimation.call(this);
-this._anims=[];
-this._animsEnded=0;
-var _61b=arguments;
-if(_61b.length==1&&(dojo.lang.isArray(_61b[0])||dojo.lang.isArrayLike(_61b[0]))){
-_61b=_61b[0];
-}
-dojo.lang.forEach(_61b,function(anim){
-this._anims.push(anim);
-anim.connect("onEnd",dojo.lang.hitch(this,"_onAnimsEnded"));
-},this);
-};
-dojo.inherits(dojo.lfx.Combine,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_61d,_61e){
-if(!this._anims.length){
-return this;
-}
-this.fire("beforeBegin");
-if(_61d>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_61e);
-}),_61d);
-return this;
-}
-if(_61e||this._anims[0].percent==0){
-this.fire("onBegin");
-}
-this.fire("onPlay");
-this._animsCall("play",null,_61e);
-return this;
-},pause:function(){
-this.fire("onPause");
-this._animsCall("pause");
-return this;
-},stop:function(_61f){
-this.fire("onStop");
-this._animsCall("stop",_61f);
-return this;
-},_onAnimsEnded:function(){
-this._animsEnded++;
-if(this._animsEnded>=this._anims.length){
-this.fire("onEnd");
-}
-return this;
-},_animsCall:function(_620){
-var args=[];
-if(arguments.length>1){
-for(var i=1;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-}
-var _623=this;
-dojo.lang.forEach(this._anims,function(anim){
-anim[_620](args);
-},_623);
-return this;
-}});
-dojo.lfx.Chain=function(_625){
-dojo.lfx.IAnimation.call(this);
-this._anims=[];
-this._currAnim=-1;
-var _626=arguments;
-if(_626.length==1&&(dojo.lang.isArray(_626[0])||dojo.lang.isArrayLike(_626[0]))){
-_626=_626[0];
-}
-var _627=this;
-dojo.lang.forEach(_626,function(anim,i,_62a){
-this._anims.push(anim);
-if(i<_62a.length-1){
-anim.connect("onEnd",dojo.lang.hitch(this,"_playNext"));
-}else{
-anim.connect("onEnd",dojo.lang.hitch(this,function(){
-this.fire("onEnd");
-}));
-}
-},this);
-};
-dojo.inherits(dojo.lfx.Chain,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_62b,_62c){
-if(!this._anims.length){
-return this;
-}
-if(_62c||!this._anims[this._currAnim]){
-this._currAnim=0;
-}
-var _62d=this._anims[this._currAnim];
-this.fire("beforeBegin");
-if(_62b>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_62c);
-}),_62b);
-return this;
-}
-if(_62d){
-if(this._currAnim==0){
-this.fire("handler",["begin",this._currAnim]);
-this.fire("onBegin",[this._currAnim]);
-}
-this.fire("onPlay",[this._currAnim]);
-_62d.play(null,_62c);
-}
-return this;
-},pause:function(){
-if(this._anims[this._currAnim]){
-this._anims[this._currAnim].pause();
-this.fire("onPause",[this._currAnim]);
-}
-return this;
-},playPause:function(){
-if(this._anims.length==0){
-return this;
-}
-if(this._currAnim==-1){
-this._currAnim=0;
-}
-var _62e=this._anims[this._currAnim];
-if(_62e){
-if(!_62e._active||_62e._paused){
-this.play();
-}else{
-this.pause();
-}
-}
-return this;
-},stop:function(){
-var _62f=this._anims[this._currAnim];
-if(_62f){
-_62f.stop();
-this.fire("onStop",[this._currAnim]);
-}
-return _62f;
-},_playNext:function(){
-if(this._currAnim==-1||this._anims.length==0){
-return this;
-}
-this._currAnim++;
-if(this._anims[this._currAnim]){
-this._anims[this._currAnim].play(null,true);
-}
-return this;
-}});
-dojo.lfx.combine=function(_630){
-var _631=arguments;
-if(dojo.lang.isArray(arguments[0])){
-_631=arguments[0];
-}
-if(_631.length==1){
-return _631[0];
-}
-return new dojo.lfx.Combine(_631);
-};
-dojo.lfx.chain=function(_632){
-var _633=arguments;
-if(dojo.lang.isArray(arguments[0])){
-_633=arguments[0];
-}
-if(_633.length==1){
-return _633[0];
-}
-return new dojo.lfx.Chain(_633);
-};
-dojo.provide("dojo.html.color");
-dojo.html.getBackgroundColor=function(node){
-node=dojo.byId(node);
-var _635;
-do{
-_635=dojo.html.getStyle(node,"background-color");
-if(_635.toLowerCase()=="rgba(0, 0, 0, 0)"){
-_635="transparent";
-}
-if(node==document.getElementsByTagName("body")[0]){
-node=null;
-break;
-}
-node=node.parentNode;
-}while(node&&dojo.lang.inArray(["transparent",""],_635));
-if(_635=="transparent"){
-_635=[255,255,255,0];
-}else{
-_635=dojo.gfx.color.extractRGB(_635);
-}
-return _635;
-};
-dojo.provide("dojo.lfx.html");
-dojo.lfx.html._byId=function(_636){
-if(!_636){
-return [];
-}
-if(dojo.lang.isArrayLike(_636)){
-if(!_636.alreadyChecked){
-var n=[];
-dojo.lang.forEach(_636,function(node){
-n.push(dojo.byId(node));
-});
-n.alreadyChecked=true;
-return n;
-}else{
-return _636;
-}
-}else{
-var n=[];
-n.push(dojo.byId(_636));
-n.alreadyChecked=true;
-return n;
-}
-};
-dojo.lfx.html.propertyAnimation=function(_639,_63a,_63b,_63c,_63d){
-_639=dojo.lfx.html._byId(_639);
-var _63e={"propertyMap":_63a,"nodes":_639,"duration":_63b,"easing":_63c||dojo.lfx.easeDefault};
-var _63f=function(args){
-if(args.nodes.length==1){
-var pm=args.propertyMap;
-if(!dojo.lang.isArray(args.propertyMap)){
-var parr=[];
-for(var _643 in pm){
-pm[_643].property=_643;
-parr.push(pm[_643]);
-}
-pm=args.propertyMap=parr;
-}
-dojo.lang.forEach(pm,function(prop){
-if(dj_undef("start",prop)){
-if(prop.property!="opacity"){
-prop.start=parseInt(dojo.html.getComputedStyle(args.nodes[0],prop.property));
-}else{
-prop.start=dojo.html.getOpacity(args.nodes[0]);
-}
-}
-});
-}
-};
-var _645=function(_646){
-var _647=[];
-dojo.lang.forEach(_646,function(c){
-_647.push(Math.round(c));
-});
-return _647;
-};
-var _649=function(n,_64b){
-n=dojo.byId(n);
-if(!n||!n.style){
-return;
-}
-for(var s in _64b){
-try{
-if(s=="opacity"){
-dojo.html.setOpacity(n,_64b[s]);
-}else{
-n.style[s]=_64b[s];
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-};
-var _64d=function(_64e){
-this._properties=_64e;
-this.diffs=new Array(_64e.length);
-dojo.lang.forEach(_64e,function(prop,i){
-if(dojo.lang.isFunction(prop.start)){
-prop.start=prop.start(prop,i);
-}
-if(dojo.lang.isFunction(prop.end)){
-prop.end=prop.end(prop,i);
-}
-if(dojo.lang.isArray(prop.start)){
-this.diffs[i]=null;
-}else{
-if(prop.start instanceof dojo.gfx.color.Color){
-prop.startRgb=prop.start.toRgb();
-prop.endRgb=prop.end.toRgb();
-}else{
-this.diffs[i]=prop.end-prop.start;
-}
-}
-},this);
-this.getValue=function(n){
-var ret={};
-dojo.lang.forEach(this._properties,function(prop,i){
-var _655=null;
-if(dojo.lang.isArray(prop.start)){
-}else{
-if(prop.start instanceof dojo.gfx.color.Color){
-_655=(prop.units||"rgb")+"(";
-for(var j=0;j<prop.startRgb.length;j++){
-_655+=Math.round(((prop.endRgb[j]-prop.startRgb[j])*n)+prop.startRgb[j])+(j<prop.startRgb.length-1?",":"");
-}
-_655+=")";
-}else{
-_655=((this.diffs[i])*n)+prop.start+(prop.property!="opacity"?prop.units||"px":"");
-}
-}
-ret[dojo.html.toCamelCase(prop.property)]=_655;
-},this);
-return ret;
-};
-};
-var anim=new dojo.lfx.Animation({beforeBegin:function(){
-_63f(_63e);
-anim.curve=new _64d(_63e.propertyMap);
-},onAnimate:function(_658){
-dojo.lang.forEach(_63e.nodes,function(node){
-_649(node,_658);
-});
-}},_63e.duration,null,_63e.easing);
-if(_63d){
-for(var x in _63d){
-if(dojo.lang.isFunction(_63d[x])){
-anim.connect(x,anim,_63d[x]);
-}
-}
-}
-return anim;
-};
-dojo.lfx.html._makeFadeable=function(_65b){
-var _65c=function(node){
-if(dojo.render.html.ie){
-if((node.style.zoom.length==0)&&(dojo.html.getStyle(node,"zoom")=="normal")){
-node.style.zoom="1";
-}
-if((node.style.width.length==0)&&(dojo.html.getStyle(node,"width")=="auto")){
-node.style.width="auto";
-}
-}
-};
-if(dojo.lang.isArrayLike(_65b)){
-dojo.lang.forEach(_65b,_65c);
-}else{
-_65c(_65b);
-}
-};
-dojo.lfx.html.fade=function(_65e,_65f,_660,_661,_662){
-_65e=dojo.lfx.html._byId(_65e);
-var _663={property:"opacity"};
-if(!dj_undef("start",_65f)){
-_663.start=_65f.start;
-}else{
-_663.start=function(){
-return dojo.html.getOpacity(_65e[0]);
-};
-}
-if(!dj_undef("end",_65f)){
-_663.end=_65f.end;
-}else{
-dojo.raise("dojo.lfx.html.fade needs an end value");
-}
-var anim=dojo.lfx.propertyAnimation(_65e,[_663],_660,_661);
-anim.connect("beforeBegin",function(){
-dojo.lfx.html._makeFadeable(_65e);
-});
-if(_662){
-anim.connect("onEnd",function(){
-_662(_65e,anim);
-});
-}
-return anim;
-};
-dojo.lfx.html.fadeIn=function(_665,_666,_667,_668){
-return dojo.lfx.html.fade(_665,{end:1},_666,_667,_668);
-};
-dojo.lfx.html.fadeOut=function(_669,_66a,_66b,_66c){
-return dojo.lfx.html.fade(_669,{end:0},_66a,_66b,_66c);
-};
-dojo.lfx.html.fadeShow=function(_66d,_66e,_66f,_670){
-_66d=dojo.lfx.html._byId(_66d);
-dojo.lang.forEach(_66d,function(node){
-dojo.html.setOpacity(node,0);
-});
-var anim=dojo.lfx.html.fadeIn(_66d,_66e,_66f,_670);
-anim.connect("beforeBegin",function(){
-if(dojo.lang.isArrayLike(_66d)){
-dojo.lang.forEach(_66d,dojo.html.show);
-}else{
-dojo.html.show(_66d);
-}
-});
-return anim;
-};
-dojo.lfx.html.fadeHide=function(_673,_674,_675,_676){
-var anim=dojo.lfx.html.fadeOut(_673,_674,_675,function(){
-if(dojo.lang.isArrayLike(_673)){
-dojo.lang.forEach(_673,dojo.html.hide);
-}else{
-dojo.html.hide(_673);
-}
-if(_676){
-_676(_673,anim);
-}
-});
-return anim;
-};
-dojo.lfx.html.wipeIn=function(_678,_679,_67a,_67b){
-_678=dojo.lfx.html._byId(_678);
-var _67c=[];
-dojo.lang.forEach(_678,function(node){
-var _67e={};
-var _67f,_680,_681;
-with(node.style){
-_67f=top;
-_680=left;
-_681=position;
-top="-9999px";
-left="-9999px";
-position="absolute";
-display="";
-}
-var _682=dojo.html.getBorderBox(node).height;
-with(node.style){
-top=_67f;
-left=_680;
-position=_681;
-display="none";
-}
-var anim=dojo.lfx.propertyAnimation(node,{"height":{start:1,end:function(){
-return _682;
-}}},_679,_67a);
-anim.connect("beforeBegin",function(){
-_67e.overflow=node.style.overflow;
-_67e.height=node.style.height;
-with(node.style){
-overflow="hidden";
-_682="1px";
-}
-dojo.html.show(node);
-});
-anim.connect("onEnd",function(){
-with(node.style){
-overflow=_67e.overflow;
-_682=_67e.height;
-}
-if(_67b){
-_67b(node,anim);
-}
-});
-_67c.push(anim);
-});
-return dojo.lfx.combine(_67c);
-};
-dojo.lfx.html.wipeOut=function(_684,_685,_686,_687){
-_684=dojo.lfx.html._byId(_684);
-var _688=[];
-dojo.lang.forEach(_684,function(node){
-var _68a={};
-var anim=dojo.lfx.propertyAnimation(node,{"height":{start:function(){
-return dojo.html.getContentBox(node).height;
-},end:1}},_685,_686,{"beforeBegin":function(){
-_68a.overflow=node.style.overflow;
-_68a.height=node.style.height;
-with(node.style){
-overflow="hidden";
-}
-dojo.html.show(node);
-},"onEnd":function(){
-dojo.html.hide(node);
-with(node.style){
-overflow=_68a.overflow;
-height=_68a.height;
-}
-if(_687){
-_687(node,anim);
-}
-}});
-_688.push(anim);
-});
-return dojo.lfx.combine(_688);
-};
-dojo.lfx.html.slideTo=function(_68c,_68d,_68e,_68f,_690){
-_68c=dojo.lfx.html._byId(_68c);
-var _691=[];
-var _692=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_68d)){
-dojo.deprecated("dojo.lfx.html.slideTo(node, array)","use dojo.lfx.html.slideTo(node, {top: value, left: value});","0.5");
-_68d={top:_68d[0],left:_68d[1]};
-}
-dojo.lang.forEach(_68c,function(node){
-var top=null;
-var left=null;
-var init=(function(){
-var _697=node;
-return function(){
-var pos=_692(_697,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_692(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_692(node,"left"))||0);
-if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_697,true);
-dojo.html.setStyleAttributes(_697,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-top=ret.y;
-left=ret.x;
-}
-};
-})();
-init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:(_68d.top||0)},"left":{start:left,end:(_68d.left||0)}},_68e,_68f,{"beforeBegin":init});
-if(_690){
-anim.connect("onEnd",function(){
-_690(_68c,anim);
-});
-}
-_691.push(anim);
-});
-return dojo.lfx.combine(_691);
-};
-dojo.lfx.html.slideBy=function(_69b,_69c,_69d,_69e,_69f){
-_69b=dojo.lfx.html._byId(_69b);
-var _6a0=[];
-var _6a1=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_69c)){
-dojo.deprecated("dojo.lfx.html.slideBy(node, array)","use dojo.lfx.html.slideBy(node, {top: value, left: value});","0.5");
-_69c={top:_69c[0],left:_69c[1]};
-}
-dojo.lang.forEach(_69b,function(node){
-var top=null;
-var left=null;
-var init=(function(){
-var _6a6=node;
-return function(){
-var pos=_6a1(_6a6,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_6a1(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_6a1(node,"left"))||0);
-if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_6a6,true);
-dojo.html.setStyleAttributes(_6a6,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-top=ret.y;
-left=ret.x;
-}
-};
-})();
-init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:top+(_69c.top||0)},"left":{start:left,end:left+(_69c.left||0)}},_69d,_69e).connect("beforeBegin",init);
-if(_69f){
-anim.connect("onEnd",function(){
-_69f(_69b,anim);
-});
-}
-_6a0.push(anim);
-});
-return dojo.lfx.combine(_6a0);
-};
-dojo.lfx.html.explode=function(_6aa,_6ab,_6ac,_6ad,_6ae){
-var h=dojo.html;
-_6aa=dojo.byId(_6aa);
-_6ab=dojo.byId(_6ab);
-var _6b0=h.toCoordinateObject(_6aa,true);
-var _6b1=document.createElement("div");
-h.copyStyle(_6b1,_6ab);
-if(_6ab.explodeClassName){
-_6b1.className=_6ab.explodeClassName;
-}
-with(_6b1.style){
-position="absolute";
-display="none";
-var _6b2=h.getStyle(_6aa,"background-color");
-backgroundColor=_6b2?_6b2.toLowerCase():"transparent";
-backgroundColor=(backgroundColor=="transparent")?"rgb(221, 221, 221)":backgroundColor;
-}
-dojo.body().appendChild(_6b1);
-with(_6ab.style){
-visibility="hidden";
-display="block";
-}
-var _6b3=h.toCoordinateObject(_6ab,true);
-with(_6ab.style){
-display="none";
-visibility="visible";
-}
-var _6b4={opacity:{start:0.5,end:1}};
-dojo.lang.forEach(["height","width","top","left"],function(type){
-_6b4[type]={start:_6b0[type],end:_6b3[type]};
-});
-var anim=new dojo.lfx.propertyAnimation(_6b1,_6b4,_6ac,_6ad,{"beforeBegin":function(){
-h.setDisplay(_6b1,"block");
-},"onEnd":function(){
-h.setDisplay(_6ab,"block");
-_6b1.parentNode.removeChild(_6b1);
-}});
-if(_6ae){
-anim.connect("onEnd",function(){
-_6ae(_6ab,anim);
-});
-}
-return anim;
-};
-dojo.lfx.html.implode=function(_6b7,end,_6b9,_6ba,_6bb){
-var h=dojo.html;
-_6b7=dojo.byId(_6b7);
-end=dojo.byId(end);
-var _6bd=dojo.html.toCoordinateObject(_6b7,true);
-var _6be=dojo.html.toCoordinateObject(end,true);
-var _6bf=document.createElement("div");
-dojo.html.copyStyle(_6bf,_6b7);
-if(_6b7.explodeClassName){
-_6bf.className=_6b7.explodeClassName;
-}
-dojo.html.setOpacity(_6bf,0.3);
-with(_6bf.style){
-position="absolute";
-display="none";
-backgroundColor=h.getStyle(_6b7,"background-color").toLowerCase();
-}
-dojo.body().appendChild(_6bf);
-var _6c0={opacity:{start:1,end:0.5}};
-dojo.lang.forEach(["height","width","top","left"],function(type){
-_6c0[type]={start:_6bd[type],end:_6be[type]};
-});
-var anim=new dojo.lfx.propertyAnimation(_6bf,_6c0,_6b9,_6ba,{"beforeBegin":function(){
-dojo.html.hide(_6b7);
-dojo.html.show(_6bf);
-},"onEnd":function(){
-_6bf.parentNode.removeChild(_6bf);
-}});
-if(_6bb){
-anim.connect("onEnd",function(){
-_6bb(_6b7,anim);
-});
-}
-return anim;
-};
-dojo.lfx.html.highlight=function(_6c3,_6c4,_6c5,_6c6,_6c7){
-_6c3=dojo.lfx.html._byId(_6c3);
-var _6c8=[];
-dojo.lang.forEach(_6c3,function(node){
-var _6ca=dojo.html.getBackgroundColor(node);
-var bg=dojo.html.getStyle(node,"background-color").toLowerCase();
-var _6cc=dojo.html.getStyle(node,"background-image");
-var _6cd=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
-while(_6ca.length>3){
-_6ca.pop();
-}
-var rgb=new dojo.gfx.color.Color(_6c4);
-var _6cf=new dojo.gfx.color.Color(_6ca);
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:rgb,end:_6cf}},_6c5,_6c6,{"beforeBegin":function(){
-if(_6cc){
-node.style.backgroundImage="none";
-}
-node.style.backgroundColor="rgb("+rgb.toRgb().join(",")+")";
-},"onEnd":function(){
-if(_6cc){
-node.style.backgroundImage=_6cc;
-}
-if(_6cd){
-node.style.backgroundColor="transparent";
-}
-if(_6c7){
-_6c7(node,anim);
-}
-}});
-_6c8.push(anim);
-});
-return dojo.lfx.combine(_6c8);
-};
-dojo.lfx.html.unhighlight=function(_6d1,_6d2,_6d3,_6d4,_6d5){
-_6d1=dojo.lfx.html._byId(_6d1);
-var _6d6=[];
-dojo.lang.forEach(_6d1,function(node){
-var _6d8=new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
-var rgb=new dojo.gfx.color.Color(_6d2);
-var _6da=dojo.html.getStyle(node,"background-image");
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:_6d8,end:rgb}},_6d3,_6d4,{"beforeBegin":function(){
-if(_6da){
-node.style.backgroundImage="none";
-}
-node.style.backgroundColor="rgb("+_6d8.toRgb().join(",")+")";
-},"onEnd":function(){
-if(_6d5){
-_6d5(node,anim);
-}
-}});
-_6d6.push(anim);
-});
-return dojo.lfx.combine(_6d6);
-};
-dojo.lang.mixin(dojo.lfx,dojo.lfx.html);
-dojo.provide("dojo.lfx.*");
-dojo.provide("dojo.lfx.toggle");
-dojo.lfx.toggle.plain={show:function(node,_6dd,_6de,_6df){
-dojo.html.show(node);
-if(dojo.lang.isFunction(_6df)){
-_6df();
-}
-},hide:function(node,_6e1,_6e2,_6e3){
-dojo.html.hide(node);
-if(dojo.lang.isFunction(_6e3)){
-_6e3();
-}
-}};
-dojo.lfx.toggle.fade={show:function(node,_6e5,_6e6,_6e7){
-dojo.lfx.fadeShow(node,_6e5,_6e6,_6e7).play();
-},hide:function(node,_6e9,_6ea,_6eb){
-dojo.lfx.fadeHide(node,_6e9,_6ea,_6eb).play();
-}};
-dojo.lfx.toggle.wipe={show:function(node,_6ed,_6ee,_6ef){
-dojo.lfx.wipeIn(node,_6ed,_6ee,_6ef).play();
-},hide:function(node,_6f1,_6f2,_6f3){
-dojo.lfx.wipeOut(node,_6f1,_6f2,_6f3).play();
-}};
-dojo.lfx.toggle.explode={show:function(node,_6f5,_6f6,_6f7,_6f8){
-dojo.lfx.explode(_6f8||{x:0,y:0,width:0,height:0},node,_6f5,_6f6,_6f7).play();
-},hide:function(node,_6fa,_6fb,_6fc,_6fd){
-dojo.lfx.implode(node,_6fd||{x:0,y:0,width:0,height:0},_6fa,_6fb,_6fc).play();
-}};
-dojo.provide("dojo.widget.HtmlWidget");
-dojo.declare("dojo.widget.HtmlWidget",dojo.widget.DomWidget,{templateCssPath:null,templatePath:null,lang:"",toggle:"plain",toggleDuration:150,initialize:function(args,frag){
-},postMixInProperties:function(args,frag){
-if(this.lang===""){
-this.lang=null;
-}
-this.toggleObj=dojo.lfx.toggle[this.toggle.toLowerCase()]||dojo.lfx.toggle.plain;
-},createNodesFromText:function(txt,wrap){
-return dojo.html.createNodesFromText(txt,wrap);
-},destroyRendering:function(_704){
-try{
-if(this.bgIframe){
-this.bgIframe.remove();
-delete this.bgIframe;
-}
-if(!_704&&this.domNode){
-dojo.event.browser.clean(this.domNode);
-}
-dojo.widget.HtmlWidget.superclass.destroyRendering.call(this);
-}
-catch(e){
-}
-},isShowing:function(){
-return dojo.html.isShowing(this.domNode);
-},toggleShowing:function(){
-if(this.isShowing()){
-this.hide();
-}else{
-this.show();
-}
-},show:function(){
-if(this.isShowing()){
-return;
-}
-this.animationInProgress=true;
-this.toggleObj.show(this.domNode,this.toggleDuration,null,dojo.lang.hitch(this,this.onShow),this.explodeSrc);
-},onShow:function(){
-this.animationInProgress=false;
-this.checkSize();
-},hide:function(){
-if(!this.isShowing()){
-return;
-}
-this.animationInProgress=true;
-this.toggleObj.hide(this.domNode,this.toggleDuration,null,dojo.lang.hitch(this,this.onHide),this.explodeSrc);
-},onHide:function(){
-this.animationInProgress=false;
-},_isResized:function(w,h){
-if(!this.isShowing()){
-return false;
-}
-var wh=dojo.html.getMarginBox(this.domNode);
-var _708=w||wh.width;
-var _709=h||wh.height;
-if(this.width==_708&&this.height==_709){
-return false;
-}
-this.width=_708;
-this.height=_709;
-return true;
-},checkSize:function(){
-if(!this._isResized()){
-return;
-}
-this.onResized();
-},resizeTo:function(w,h){
-dojo.html.setMarginBox(this.domNode,{width:w,height:h});
-if(this.isShowing()){
-this.onResized();
-}
-},resizeSoon:function(){
-if(this.isShowing()){
-dojo.lang.setTimeout(this,this.onResized,0);
-}
-},onResized:function(){
-dojo.lang.forEach(this.children,function(_70c){
-if(_70c.checkSize){
-_70c.checkSize();
-}
-});
-}});
-dojo.provide("dojo.widget.*");
-dojo.provide("dojo.string.common");
-dojo.string.trim=function(str,wh){
-if(!str.replace){
-return str;
-}
-if(!str.length){
-return str;
-}
-var re=(wh>0)?(/^\s+/):(wh<0)?(/\s+$/):(/^\s+|\s+$/g);
-return str.replace(re,"");
-};
-dojo.string.trimStart=function(str){
-return dojo.string.trim(str,1);
-};
-dojo.string.trimEnd=function(str){
-return dojo.string.trim(str,-1);
-};
-dojo.string.repeat=function(str,_713,_714){
-var out="";
-for(var i=0;i<_713;i++){
-out+=str;
-if(_714&&i<_713-1){
-out+=_714;
-}
-}
-return out;
-};
-dojo.string.pad=function(str,len,c,dir){
-var out=String(str);
-if(!c){
-c="0";
-}
-if(!dir){
-dir=1;
-}
-while(out.length<len){
-if(dir>0){
-out=c+out;
-}else{
-out+=c;
-}
-}
-return out;
-};
-dojo.string.padLeft=function(str,len,c){
-return dojo.string.pad(str,len,c,1);
-};
-dojo.string.padRight=function(str,len,c){
-return dojo.string.pad(str,len,c,-1);
-};
-dojo.provide("dojo.string");
-dojo.provide("dojo.io.common");
-dojo.io.transports=[];
-dojo.io.hdlrFuncNames=["load","error","timeout"];
-dojo.io.Request=function(url,_723,_724,_725){
-if((arguments.length==1)&&(arguments[0].constructor==Object)){
-this.fromKwArgs(arguments[0]);
-}else{
-this.url=url;
-if(_723){
-this.mimetype=_723;
-}
-if(_724){
-this.transport=_724;
-}
-if(arguments.length>=4){
-this.changeUrl=_725;
-}
-}
-};
-dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_728,_729){
-},error:function(type,_72b,_72c,_72d){
-},timeout:function(type,_72f,_730,_731){
-},handle:function(type,data,_734,_735){
-},timeoutSeconds:0,abort:function(){
-},fromKwArgs:function(_736){
-if(_736["url"]){
-_736.url=_736.url.toString();
-}
-if(_736["formNode"]){
-_736.formNode=dojo.byId(_736.formNode);
-}
-if(!_736["method"]&&_736["formNode"]&&_736["formNode"].method){
-_736.method=_736["formNode"].method;
-}
-if(!_736["handle"]&&_736["handler"]){
-_736.handle=_736.handler;
-}
-if(!_736["load"]&&_736["loaded"]){
-_736.load=_736.loaded;
-}
-if(!_736["changeUrl"]&&_736["changeURL"]){
-_736.changeUrl=_736.changeURL;
-}
-_736.encoding=dojo.lang.firstValued(_736["encoding"],djConfig["bindEncoding"],"");
-_736.sendTransport=dojo.lang.firstValued(_736["sendTransport"],djConfig["ioSendTransport"],false);
-var _737=dojo.lang.isFunction;
-for(var x=0;x<dojo.io.hdlrFuncNames.length;x++){
-var fn=dojo.io.hdlrFuncNames[x];
-if(_736[fn]&&_737(_736[fn])){
-continue;
-}
-if(_736["handle"]&&_737(_736["handle"])){
-_736[fn]=_736.handle;
-}
-}
-dojo.lang.mixin(this,_736);
-}});
-dojo.io.Error=function(msg,type,num){
-this.message=msg;
-this.type=type||"unknown";
-this.number=num||0;
-};
-dojo.io.transports.addTransport=function(name){
-this.push(name);
-this[name]=dojo.io[name];
-};
-dojo.io.bind=function(_73e){
-if(!(_73e instanceof dojo.io.Request)){
-try{
-_73e=new dojo.io.Request(_73e);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _73f="";
-if(_73e["transport"]){
-_73f=_73e["transport"];
-if(!this[_73f]){
-dojo.io.sendBindError(_73e,"No dojo.io.bind() transport with name '"+_73e["transport"]+"'.");
-return _73e;
-}
-if(!this[_73f].canHandle(_73e)){
-dojo.io.sendBindError(_73e,"dojo.io.bind() transport with name '"+_73e["transport"]+"' cannot handle this type of request.");
-return _73e;
-}
-}else{
-for(var x=0;x<dojo.io.transports.length;x++){
-var tmp=dojo.io.transports[x];
-if((this[tmp])&&(this[tmp].canHandle(_73e))){
-_73f=tmp;
-break;
-}
-}
-if(_73f==""){
-dojo.io.sendBindError(_73e,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
-return _73e;
-}
-}
-this[_73f].bind(_73e);
-_73e.bindSuccess=true;
-return _73e;
-};
-dojo.io.sendBindError=function(_742,_743){
-if((typeof _742.error=="function"||typeof _742.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
-var _744=new dojo.io.Error(_743);
-setTimeout(function(){
-_742[(typeof _742.error=="function")?"error":"handle"]("error",_744,null,_742);
-},50);
-}else{
-dojo.raise(_743);
-}
-};
-dojo.io.queueBind=function(_745){
-if(!(_745 instanceof dojo.io.Request)){
-try{
-_745=new dojo.io.Request(_745);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _746=_745.load;
-_745.load=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_746.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-var _748=_745.error;
-_745.error=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_748.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-dojo.io._bindQueue.push(_745);
-dojo.io._dispatchNextQueueBind();
-return _745;
-};
-dojo.io._dispatchNextQueueBind=function(){
-if(!dojo.io._queueBindInFlight){
-dojo.io._queueBindInFlight=true;
-if(dojo.io._bindQueue.length>0){
-dojo.io.bind(dojo.io._bindQueue.shift());
-}else{
-dojo.io._queueBindInFlight=false;
-}
-}
-};
-dojo.io._bindQueue=[];
-dojo.io._queueBindInFlight=false;
-dojo.io.argsFromMap=function(map,_74b,last){
-var enc=/utf/i.test(_74b||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _74e=[];
-var _74f=new Object();
-for(var name in map){
-var _751=function(elt){
-var val=enc(name)+"="+enc(elt);
-_74e[(last==name)?"push":"unshift"](val);
-};
-if(!_74f[name]){
-var _754=map[name];
-if(dojo.lang.isArray(_754)){
-dojo.lang.forEach(_754,_751);
-}else{
-_751(_754);
-}
-}
-}
-return _74e.join("&");
-};
-dojo.io.setIFrameSrc=function(_755,src,_757){
-try{
-var r=dojo.render.html;
-if(!_757){
-if(r.safari){
-_755.location=src;
-}else{
-frames[_755.name].location=src;
-}
-}else{
-var idoc;
-if(r.ie){
-idoc=_755.contentWindow.document;
-}else{
-if(r.safari){
-idoc=_755.document;
-}else{
-idoc=_755.contentWindow;
-}
-}
-if(!idoc){
-_755.location=src;
-return;
-}else{
-idoc.location.replace(src);
-}
-}
-}
-catch(e){
-dojo.debug(e);
-dojo.debug("setIFrameSrc: "+e);
-}
-};
-dojo.provide("dojo.string.extras");
-dojo.string.substituteParams=function(_75a,hash){
-var map=(typeof hash=="object")?hash:dojo.lang.toArray(arguments,1);
-return _75a.replace(/\%\{(\w+)\}/g,function(_75d,key){
-if(typeof (map[key])!="undefined"&&map[key]!=null){
-return map[key];
-}
-dojo.raise("Substitution not found: "+key);
-});
-};
-dojo.string.capitalize=function(str){
-if(!dojo.lang.isString(str)){
-return "";
-}
-if(arguments.length==0){
-str=this;
-}
-var _760=str.split(" ");
-for(var i=0;i<_760.length;i++){
-_760[i]=_760[i].charAt(0).toUpperCase()+_760[i].substring(1);
-}
-return _760.join(" ");
-};
-dojo.string.isBlank=function(str){
-if(!dojo.lang.isString(str)){
-return true;
-}
-return (dojo.string.trim(str).length==0);
-};
-dojo.string.encodeAscii=function(str){
-if(!dojo.lang.isString(str)){
-return str;
-}
-var ret="";
-var _765=escape(str);
-var _766,re=/%u([0-9A-F]{4})/i;
-while((_766=_765.match(re))){
-var num=Number("0x"+_766[1]);
-var _769=escape("&#"+num+";");
-ret+=_765.substring(0,_766.index)+_769;
-_765=_765.substring(_766.index+_766[0].length);
-}
-ret+=_765.replace(/\+/g,"%2B");
-return ret;
-};
-dojo.string.escape=function(type,str){
-var args=dojo.lang.toArray(arguments,1);
-switch(type.toLowerCase()){
-case "xml":
-case "html":
-case "xhtml":
-return dojo.string.escapeXml.apply(this,args);
-case "sql":
-return dojo.string.escapeSql.apply(this,args);
-case "regexp":
-case "regex":
-return dojo.string.escapeRegExp.apply(this,args);
-case "javascript":
-case "jscript":
-case "js":
-return dojo.string.escapeJavaScript.apply(this,args);
-case "ascii":
-return dojo.string.encodeAscii.apply(this,args);
-default:
-return str;
-}
-};
-dojo.string.escapeXml=function(str,_76e){
-str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_76e){
-str=str.replace(/'/gm,"&#39;");
-}
-return str;
-};
-dojo.string.escapeSql=function(str){
-return str.replace(/'/gm,"''");
-};
-dojo.string.escapeRegExp=function(str){
-return str.replace(/\\/gm,"\\\\").replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm,"\\$1");
-};
-dojo.string.escapeJavaScript=function(str){
-return str.replace(/(["'\f\b\n\t\r])/gm,"\\$1");
-};
-dojo.string.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.string.summary=function(str,len){
-if(!len||str.length<=len){
-return str;
-}
-return str.substring(0,len).replace(/\.+$/,"")+"...";
-};
-dojo.string.endsWith=function(str,end,_777){
-if(_777){
-str=str.toLowerCase();
-end=end.toLowerCase();
-}
-if((str.length-end.length)<0){
-return false;
-}
-return str.lastIndexOf(end)==str.length-end.length;
-};
-dojo.string.endsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.endsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.startsWith=function(str,_77b,_77c){
-if(_77c){
-str=str.toLowerCase();
-_77b=_77b.toLowerCase();
-}
-return str.indexOf(_77b)==0;
-};
-dojo.string.startsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.startsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.has=function(str){
-for(var i=1;i<arguments.length;i++){
-if(str.indexOf(arguments[i])>-1){
-return true;
-}
-}
-return false;
-};
-dojo.string.normalizeNewlines=function(text,_782){
-if(_782=="\n"){
-text=text.replace(/\r\n/g,"\n");
-text=text.replace(/\r/g,"\n");
-}else{
-if(_782=="\r"){
-text=text.replace(/\r\n/g,"\r");
-text=text.replace(/\n/g,"\r");
-}else{
-text=text.replace(/([^\r])\n/g,"$1\r\n").replace(/\r([^\n])/g,"\r\n$1");
-}
-}
-return text;
-};
-dojo.string.splitEscaped=function(str,_784){
-var _785=[];
-for(var i=0,_787=0;i<str.length;i++){
-if(str.charAt(i)=="\\"){
-i++;
-continue;
-}
-if(str.charAt(i)==_784){
-_785.push(str.substring(_787,i));
-_787=i+1;
-}
-}
-_785.push(str.substr(_787));
-return _785;
-};
-dojo.provide("dojo.undo.browser");
-try{
-if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
-}
-}
-catch(e){
-}
-if(dojo.render.html.opera){
-dojo.debug("Opera is not supported with dojo.undo.browser, so back/forward detection will not work.");
-}
-dojo.undo.browser={initialHref:(!dj_undef("window"))?window.location.href:"",initialHash:(!dj_undef("window"))?window.location.hash:"",moveForward:false,historyStack:[],forwardStack:[],historyIframe:null,bookmarkAnchor:null,locationTimer:null,setInitialState:function(args){
-this.initialState=this._createState(this.initialHref,args,this.initialHash);
-},addToHistory:function(args){
-this.forwardStack=[];
-var hash=null;
-var url=null;
-if(!this.historyIframe){
-this.historyIframe=window.frames["djhistory"];
-}
-if(!this.bookmarkAnchor){
-this.bookmarkAnchor=document.createElement("a");
-dojo.body().appendChild(this.bookmarkAnchor);
-this.bookmarkAnchor.style.display="none";
-}
-if(args["changeUrl"]){
-hash="#"+((args["changeUrl"]!==true)?args["changeUrl"]:(new Date()).getTime());
-if(this.historyStack.length==0&&this.initialState.urlHash==hash){
-this.initialState=this._createState(url,args,hash);
-return;
-}else{
-if(this.historyStack.length>0&&this.historyStack[this.historyStack.length-1].urlHash==hash){
-this.historyStack[this.historyStack.length-1]=this._createState(url,args,hash);
-return;
-}
-}
-this.changingUrl=true;
-setTimeout("window.location.href = '"+hash+"'; dojo.undo.browser.changingUrl = false;",1);
-this.bookmarkAnchor.href=hash;
-if(dojo.render.html.ie){
-url=this._loadIframeHistory();
-var _78c=args["back"]||args["backButton"]||args["handle"];
-var tcb=function(_78e){
-if(window.location.hash!=""){
-setTimeout("window.location.href = '"+hash+"';",1);
-}
-_78c.apply(this,[_78e]);
-};
-if(args["back"]){
-args.back=tcb;
-}else{
-if(args["backButton"]){
-args.backButton=tcb;
-}else{
-if(args["handle"]){
-args.handle=tcb;
-}
-}
-}
-var _78f=args["forward"]||args["forwardButton"]||args["handle"];
-var tfw=function(_791){
-if(window.location.hash!=""){
-window.location.href=hash;
-}
-if(_78f){
-_78f.apply(this,[_791]);
-}
-};
-if(args["forward"]){
-args.forward=tfw;
-}else{
-if(args["forwardButton"]){
-args.forwardButton=tfw;
-}else{
-if(args["handle"]){
-args.handle=tfw;
-}
-}
-}
-}else{
-if(dojo.render.html.moz){
-if(!this.locationTimer){
-this.locationTimer=setInterval("dojo.undo.browser.checkLocation();",200);
-}
-}
-}
-}else{
-url=this._loadIframeHistory();
-}
-this.historyStack.push(this._createState(url,args,hash));
-},checkLocation:function(){
-if(!this.changingUrl){
-var hsl=this.historyStack.length;
-if((window.location.hash==this.initialHash||window.location.href==this.initialHref)&&(hsl==1)){
-this.handleBackButton();
-return;
-}
-if(this.forwardStack.length>0){
-if(this.forwardStack[this.forwardStack.length-1].urlHash==window.location.hash){
-this.handleForwardButton();
-return;
-}
-}
-if((hsl>=2)&&(this.historyStack[hsl-2])){
-if(this.historyStack[hsl-2].urlHash==window.location.hash){
-this.handleBackButton();
-return;
-}
-}
-}
-},iframeLoaded:function(evt,_794){
-if(!dojo.render.html.opera){
-var _795=this._getUrlQuery(_794.href);
-if(_795==null){
-if(this.historyStack.length==1){
-this.handleBackButton();
-}
-return;
-}
-if(this.moveForward){
-this.moveForward=false;
-return;
-}
-if(this.historyStack.length>=2&&_795==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
-this.handleBackButton();
-}else{
-if(this.forwardStack.length>0&&_795==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
-this.handleForwardButton();
-}
-}
-}
-},handleBackButton:function(){
-var _796=this.historyStack.pop();
-if(!_796){
-return;
-}
-var last=this.historyStack[this.historyStack.length-1];
-if(!last&&this.historyStack.length==0){
-last=this.initialState;
-}
-if(last){
-if(last.kwArgs["back"]){
-last.kwArgs["back"]();
-}else{
-if(last.kwArgs["backButton"]){
-last.kwArgs["backButton"]();
-}else{
-if(last.kwArgs["handle"]){
-last.kwArgs.handle("back");
-}
-}
-}
-}
-this.forwardStack.push(_796);
-},handleForwardButton:function(){
-var last=this.forwardStack.pop();
-if(!last){
-return;
-}
-if(last.kwArgs["forward"]){
-last.kwArgs.forward();
-}else{
-if(last.kwArgs["forwardButton"]){
-last.kwArgs.forwardButton();
-}else{
-if(last.kwArgs["handle"]){
-last.kwArgs.handle("forward");
-}
-}
-}
-this.historyStack.push(last);
-},_createState:function(url,args,hash){
-return {"url":url,"kwArgs":args,"urlHash":hash};
-},_getUrlQuery:function(url){
-var _79d=url.split("?");
-if(_79d.length<2){
-return null;
-}else{
-return _79d[1];
-}
-},_loadIframeHistory:function(){
-var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
-this.moveForward=true;
-dojo.io.setIFrameSrc(this.historyIframe,url,false);
-return url;
-}};
-dojo.provide("dojo.io.BrowserIO");
-if(!dj_undef("window")){
-dojo.io.checkChildrenForFile=function(node){
-var _7a0=false;
-var _7a1=node.getElementsByTagName("input");
-dojo.lang.forEach(_7a1,function(_7a2){
-if(_7a0){
-return;
-}
-if(_7a2.getAttribute("type")=="file"){
-_7a0=true;
-}
-});
-return _7a0;
-};
-dojo.io.formHasFile=function(_7a3){
-return dojo.io.checkChildrenForFile(_7a3);
-};
-dojo.io.updateNode=function(node,_7a5){
-node=dojo.byId(node);
-var args=_7a5;
-if(dojo.lang.isString(_7a5)){
-args={url:_7a5};
-}
-args.mimetype="text/html";
-args.load=function(t,d,e){
-while(node.firstChild){
-dojo.dom.destroyNode(node.firstChild);
-}
-node.innerHTML=d;
-};
-dojo.io.bind(args);
-};
-dojo.io.formFilter=function(node){
-var type=(node.type||"").toLowerCase();
-return !node.disabled&&node.name&&!dojo.lang.inArray(["file","submit","image","reset","button"],type);
-};
-dojo.io.encodeForm=function(_7ac,_7ad,_7ae){
-if((!_7ac)||(!_7ac.tagName)||(!_7ac.tagName.toLowerCase()=="form")){
-dojo.raise("Attempted to encode a non-form element.");
-}
-if(!_7ae){
-_7ae=dojo.io.formFilter;
-}
-var enc=/utf/i.test(_7ad||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _7b0=[];
-for(var i=0;i<_7ac.elements.length;i++){
-var elm=_7ac.elements[i];
-if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_7ae(elm)){
-continue;
-}
-var name=enc(elm.name);
-var type=elm.type.toLowerCase();
-if(type=="select-multiple"){
-for(var j=0;j<elm.options.length;j++){
-if(elm.options[j].selected){
-_7b0.push(name+"="+enc(elm.options[j].value));
-}
-}
-}else{
-if(dojo.lang.inArray(["radio","checkbox"],type)){
-if(elm.checked){
-_7b0.push(name+"="+enc(elm.value));
-}
-}else{
-_7b0.push(name+"="+enc(elm.value));
-}
-}
-}
-var _7b6=_7ac.getElementsByTagName("input");
-for(var i=0;i<_7b6.length;i++){
-var _7b7=_7b6[i];
-if(_7b7.type.toLowerCase()=="image"&&_7b7.form==_7ac&&_7ae(_7b7)){
-var name=enc(_7b7.name);
-_7b0.push(name+"="+enc(_7b7.value));
-_7b0.push(name+".x=0");
-_7b0.push(name+".y=0");
-}
-}
-return _7b0.join("&")+"&";
-};
-dojo.io.FormBind=function(args){
-this.bindArgs={};
-if(args&&args.formNode){
-this.init(args);
-}else{
-if(args){
-this.init({formNode:args});
-}
-}
-};
-dojo.lang.extend(dojo.io.FormBind,{form:null,bindArgs:null,clickedButton:null,init:function(args){
-var form=dojo.byId(args.formNode);
-if(!form||!form.tagName||form.tagName.toLowerCase()!="form"){
-throw new Error("FormBind: Couldn't apply, invalid form");
-}else{
-if(this.form==form){
-return;
-}else{
-if(this.form){
-throw new Error("FormBind: Already applied to a form");
-}
-}
-}
-dojo.lang.mixin(this.bindArgs,args);
-this.form=form;
-this.connect(form,"onsubmit","submit");
-for(var i=0;i<form.elements.length;i++){
-var node=form.elements[i];
-if(node&&node.type&&dojo.lang.inArray(["submit","button"],node.type.toLowerCase())){
-this.connect(node,"onclick","click");
-}
-}
-var _7bd=form.getElementsByTagName("input");
-for(var i=0;i<_7bd.length;i++){
-var _7be=_7bd[i];
-if(_7be.type.toLowerCase()=="image"&&_7be.form==form){
-this.connect(_7be,"onclick","click");
-}
-}
-},onSubmit:function(form){
-return true;
-},submit:function(e){
-e.preventDefault();
-if(this.onSubmit(this.form)){
-dojo.io.bind(dojo.lang.mixin(this.bindArgs,{formFilter:dojo.lang.hitch(this,"formFilter")}));
-}
-},click:function(e){
-var node=e.currentTarget;
-if(node.disabled){
-return;
-}
-this.clickedButton=node;
-},formFilter:function(node){
-var type=(node.type||"").toLowerCase();
-var _7c5=false;
-if(node.disabled||!node.name){
-_7c5=false;
-}else{
-if(dojo.lang.inArray(["submit","button","image"],type)){
-if(!this.clickedButton){
-this.clickedButton=node;
-}
-_7c5=node==this.clickedButton;
-}else{
-_7c5=!dojo.lang.inArray(["file","submit","reset","button"],type);
-}
-}
-return _7c5;
-},connect:function(_7c6,_7c7,_7c8){
-if(dojo.evalObjPath("dojo.event.connect")){
-dojo.event.connect(_7c6,_7c7,this,_7c8);
-}else{
-var fcn=dojo.lang.hitch(this,_7c8);
-_7c6[_7c7]=function(e){
-if(!e){
-e=window.event;
-}
-if(!e.currentTarget){
-e.currentTarget=e.srcElement;
-}
-if(!e.preventDefault){
-e.preventDefault=function(){
-window.event.returnValue=false;
-};
-}
-fcn(e);
-};
-}
-}});
-dojo.io.XMLHTTPTransport=new function(){
-var _7cb=this;
-var _7cc={};
-this.useCache=false;
-this.preventCache=false;
-function getCacheKey(url,_7ce,_7cf){
-return url+"|"+_7ce+"|"+_7cf.toLowerCase();
-}
-function addToCache(url,_7d1,_7d2,http){
-_7cc[getCacheKey(url,_7d1,_7d2)]=http;
-}
-function getFromCache(url,_7d5,_7d6){
-return _7cc[getCacheKey(url,_7d5,_7d6)];
-}
-this.clearCache=function(){
-_7cc={};
-};
-function doLoad(_7d7,http,url,_7da,_7db){
-if(((http.status>=200)&&(http.status<300))||(http.status==304)||(location.protocol=="file:"&&(http.status==0||http.status==undefined))||(location.protocol=="chrome:"&&(http.status==0||http.status==undefined))){
-var ret;
-if(_7d7.method.toLowerCase()=="head"){
-var _7dd=http.getAllResponseHeaders();
-ret={};
-ret.toString=function(){
-return _7dd;
-};
-var _7de=_7dd.split(/[\r\n]+/g);
-for(var i=0;i<_7de.length;i++){
-var pair=_7de[i].match(/^([^:]+)\s*:\s*(.+)$/i);
-if(pair){
-ret[pair[1]]=pair[2];
-}
-}
-}else{
-if(_7d7.mimetype=="text/javascript"){
-try{
-ret=dj_eval(http.responseText);
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(http.responseText);
-ret=null;
-}
-}else{
-if(_7d7.mimetype=="text/json"||_7d7.mimetype=="application/json"){
-try{
-ret=dj_eval("("+http.responseText+")");
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(http.responseText);
-ret=false;
-}
-}else{
-if((_7d7.mimetype=="application/xml")||(_7d7.mimetype=="text/xml")){
-ret=http.responseXML;
-if(!ret||typeof ret=="string"||!http.getResponseHeader("Content-Type")){
-ret=dojo.dom.createDocumentFromText(http.responseText);
-}
-}else{
-ret=http.responseText;
-}
-}
-}
-}
-if(_7db){
-addToCache(url,_7da,_7d7.method,http);
-}
-_7d7[(typeof _7d7.load=="function")?"load":"handle"]("load",ret,http,_7d7);
-}else{
-var _7e1=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-_7d7[(typeof _7d7.error=="function")?"error":"handle"]("error",_7e1,http,_7d7);
-}
-}
-function setHeaders(http,_7e3){
-if(_7e3["headers"]){
-for(var _7e4 in _7e3["headers"]){
-if(_7e4.toLowerCase()=="content-type"&&!_7e3["contentType"]){
-_7e3["contentType"]=_7e3["headers"][_7e4];
-}else{
-http.setRequestHeader(_7e4,_7e3["headers"][_7e4]);
-}
-}
-}
-}
-this.inFlight=[];
-this.inFlightTimer=null;
-this.startWatchingInFlight=function(){
-if(!this.inFlightTimer){
-this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
-}
-};
-this.watchInFlight=function(){
-var now=null;
-if(!dojo.hostenv._blockAsync&&!_7cb._blockAsync){
-for(var x=this.inFlight.length-1;x>=0;x--){
-try{
-var tif=this.inFlight[x];
-if(!tif||tif.http._aborted||!tif.http.readyState){
-this.inFlight.splice(x,1);
-continue;
-}
-if(4==tif.http.readyState){
-this.inFlight.splice(x,1);
-doLoad(tif.req,tif.http,tif.url,tif.query,tif.useCache);
-}else{
-if(tif.startTime){
-if(!now){
-now=(new Date()).getTime();
-}
-if(tif.startTime+(tif.req.timeoutSeconds*1000)<now){
-if(typeof tif.http.abort=="function"){
-tif.http.abort();
-}
-this.inFlight.splice(x,1);
-tif.req[(typeof tif.req.timeout=="function")?"timeout":"handle"]("timeout",null,tif.http,tif.req);
-}
-}
-}
-}
-catch(e){
-try{
-var _7e8=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
-tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_7e8,tif.http,tif.req);
-}
-catch(e2){
-dojo.debug("XMLHttpTransport error callback failed: "+e2);
-}
-}
-}
-}
-clearTimeout(this.inFlightTimer);
-if(this.inFlight.length==0){
-this.inFlightTimer=null;
-return;
-}
-this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
-};
-var _7e9=dojo.hostenv.getXmlhttpObject()?true:false;
-this.canHandle=function(_7ea){
-return _7e9&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_7ea["mimetype"].toLowerCase()||""))&&!(_7ea["formNode"]&&dojo.io.formHasFile(_7ea["formNode"]));
-};
-this.multipartBoundary="45309FFF-BD65-4d50-99C9-36986896A96F";
-this.bind=function(_7eb){
-if(!_7eb["url"]){
-if(!_7eb["formNode"]&&(_7eb["backButton"]||_7eb["back"]||_7eb["changeUrl"]||_7eb["watchForURL"])&&(!djConfig.preventBackButtonFix)){
-dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request","Use dojo.undo.browser.addToHistory() instead.","0.4");
-dojo.undo.browser.addToHistory(_7eb);
-return true;
-}
-}
-var url=_7eb.url;
-var _7ed="";
-if(_7eb["formNode"]){
-var ta=_7eb.formNode.getAttribute("action");
-if((ta)&&(!_7eb["url"])){
-url=ta;
-}
-var tp=_7eb.formNode.getAttribute("method");
-if((tp)&&(!_7eb["method"])){
-_7eb.method=tp;
-}
-_7ed+=dojo.io.encodeForm(_7eb.formNode,_7eb.encoding,_7eb["formFilter"]);
-}
-if(url.indexOf("#")>-1){
-dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url);
-url=url.split("#")[0];
-}
-if(_7eb["file"]){
-_7eb.method="post";
-}
-if(!_7eb["method"]){
-_7eb.method="get";
-}
-if(_7eb.method.toLowerCase()=="get"){
-_7eb.multipart=false;
-}else{
-if(_7eb["file"]){
-_7eb.multipart=true;
-}else{
-if(!_7eb["multipart"]){
-_7eb.multipart=false;
-}
-}
-}
-if(_7eb["backButton"]||_7eb["back"]||_7eb["changeUrl"]){
-dojo.undo.browser.addToHistory(_7eb);
-}
-var _7f0=_7eb["content"]||{};
-if(_7eb.sendTransport){
-_7f0["dojo.transport"]="xmlhttp";
-}
-do{
-if(_7eb.postContent){
-_7ed=_7eb.postContent;
-break;
-}
-if(_7f0){
-_7ed+=dojo.io.argsFromMap(_7f0,_7eb.encoding);
-}
-if(_7eb.method.toLowerCase()=="get"||!_7eb.multipart){
-break;
-}
-var t=[];
-if(_7ed.length){
-var q=_7ed.split("&");
-for(var i=0;i<q.length;++i){
-if(q[i].length){
-var p=q[i].split("=");
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+p[0]+"\"","",p[1]);
-}
-}
-}
-if(_7eb.file){
-if(dojo.lang.isArray(_7eb.file)){
-for(var i=0;i<_7eb.file.length;++i){
-var o=_7eb.file[i];
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}else{
-var o=_7eb.file;
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}
-if(t.length){
-t.push("--"+this.multipartBoundary+"--","");
-_7ed=t.join("\r\n");
-}
-}while(false);
-var _7f6=_7eb["sync"]?false:true;
-var _7f7=_7eb["preventCache"]||(this.preventCache==true&&_7eb["preventCache"]!=false);
-var _7f8=_7eb["useCache"]==true||(this.useCache==true&&_7eb["useCache"]!=false);
-if(!_7f7&&_7f8){
-var _7f9=getFromCache(url,_7ed,_7eb.method);
-if(_7f9){
-doLoad(_7eb,_7f9,url,_7ed,false);
-return;
-}
-}
-var http=dojo.hostenv.getXmlhttpObject(_7eb);
-var _7fb=false;
-if(_7f6){
-var _7fc=this.inFlight.push({"req":_7eb,"http":http,"url":url,"query":_7ed,"useCache":_7f8,"startTime":_7eb.timeoutSeconds?(new Date()).getTime():0});
-this.startWatchingInFlight();
-}else{
-_7cb._blockAsync=true;
-}
-if(_7eb.method.toLowerCase()=="post"){
-if(!_7eb.user){
-http.open("POST",url,_7f6);
-}else{
-http.open("POST",url,_7f6,_7eb.user,_7eb.password);
-}
-setHeaders(http,_7eb);
-http.setRequestHeader("Content-Type",_7eb.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_7eb.contentType||"application/x-www-form-urlencoded"));
-try{
-http.send(_7ed);
-}
-catch(e){
-if(typeof http.abort=="function"){
-http.abort();
-}
-doLoad(_7eb,{status:404},url,_7ed,_7f8);
-}
-}else{
-var _7fd=url;
-if(_7ed!=""){
-_7fd+=(_7fd.indexOf("?")>-1?"&":"?")+_7ed;
-}
-if(_7f7){
-_7fd+=(dojo.string.endsWithAny(_7fd,"?","&")?"":(_7fd.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
-}
-if(!_7eb.user){
-http.open(_7eb.method.toUpperCase(),_7fd,_7f6);
-}else{
-http.open(_7eb.method.toUpperCase(),_7fd,_7f6,_7eb.user,_7eb.password);
-}
-setHeaders(http,_7eb);
-try{
-http.send(null);
-}
-catch(e){
-if(typeof http.abort=="function"){
-http.abort();
-}
-doLoad(_7eb,{status:404},url,_7ed,_7f8);
-}
-}
-if(!_7f6){
-doLoad(_7eb,http,url,_7ed,_7f8);
-_7cb._blockAsync=false;
-}
-_7eb.abort=function(){
-try{
-http._aborted=true;
-}
-catch(e){
-}
-return http.abort();
-};
-return;
-};
-dojo.io.transports.addTransport("XMLHTTPTransport");
-};
-}
-dojo.provide("dojo.io.cookie");
-dojo.io.cookie.setCookie=function(name,_7ff,days,path,_802,_803){
-var _804=-1;
-if((typeof days=="number")&&(days>=0)){
-var d=new Date();
-d.setTime(d.getTime()+(days*24*60*60*1000));
-_804=d.toGMTString();
-}
-_7ff=escape(_7ff);
-document.cookie=name+"="+_7ff+";"+(_804!=-1?" expires="+_804+";":"")+(path?"path="+path:"")+(_802?"; domain="+_802:"")+(_803?"; secure":"");
-};
-dojo.io.cookie.set=dojo.io.cookie.setCookie;
-dojo.io.cookie.getCookie=function(name){
-var idx=document.cookie.lastIndexOf(name+"=");
-if(idx==-1){
-return null;
-}
-var _808=document.cookie.substring(idx+name.length+1);
-var end=_808.indexOf(";");
-if(end==-1){
-end=_808.length;
-}
-_808=_808.substring(0,end);
-_808=unescape(_808);
-return _808;
-};
-dojo.io.cookie.get=dojo.io.cookie.getCookie;
-dojo.io.cookie.deleteCookie=function(name){
-dojo.io.cookie.setCookie(name,"-",0);
-};
-dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_80f,_810,_811){
-if(arguments.length==5){
-_811=_80f;
-_80f=null;
-_810=null;
-}
-var _812=[],_813,_814="";
-if(!_811){
-_813=dojo.io.cookie.getObjectCookie(name);
-}
-if(days>=0){
-if(!_813){
-_813={};
-}
-for(var prop in obj){
-if(obj[prop]==null){
-delete _813[prop];
-}else{
-if((typeof obj[prop]=="string")||(typeof obj[prop]=="number")){
-_813[prop]=obj[prop];
-}
-}
-}
-prop=null;
-for(var prop in _813){
-_812.push(escape(prop)+"="+escape(_813[prop]));
-}
-_814=_812.join("&");
-}
-dojo.io.cookie.setCookie(name,_814,days,path,_80f,_810);
-};
-dojo.io.cookie.getObjectCookie=function(name){
-var _817=null,_818=dojo.io.cookie.getCookie(name);
-if(_818){
-_817={};
-var _819=_818.split("&");
-for(var i=0;i<_819.length;i++){
-var pair=_819[i].split("=");
-var _81c=pair[1];
-if(isNaN(_81c)){
-_81c=unescape(pair[1]);
-}
-_817[unescape(pair[0])]=_81c;
-}
-}
-return _817;
-};
-dojo.io.cookie.isSupported=function(){
-if(typeof navigator.cookieEnabled!="boolean"){
-dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__","CookiesAllowed",90,null);
-var _81d=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
-navigator.cookieEnabled=(_81d=="CookiesAllowed");
-if(navigator.cookieEnabled){
-this.deleteCookie("__TestingYourBrowserForCookieSupport__");
-}
-}
-return navigator.cookieEnabled;
-};
-if(!dojo.io.cookies){
-dojo.io.cookies=dojo.io.cookie;
-}
-dojo.provide("dojo.io.*");
-dojo.provide("dojo.html.selection");
-dojo.html.selectionType={NONE:0,TEXT:1,CONTROL:2};
-dojo.html.clearSelection=function(){
-var _81e=dojo.global();
-var _81f=dojo.doc();
-try{
-if(_81e["getSelection"]){
-if(dojo.render.html.safari){
-_81e.getSelection().collapse();
-}else{
-_81e.getSelection().removeAllRanges();
-}
-}else{
-if(_81f.selection){
-if(_81f.selection.empty){
-_81f.selection.empty();
-}else{
-if(_81f.selection.clear){
-_81f.selection.clear();
-}
-}
-}
-}
-return true;
-}
-catch(e){
-dojo.debug(e);
-return false;
-}
-};
-dojo.html.disableSelection=function(_820){
-_820=dojo.byId(_820)||dojo.body();
-var h=dojo.render.html;
-if(h.mozilla){
-_820.style.MozUserSelect="none";
-}else{
-if(h.safari){
-_820.style.KhtmlUserSelect="none";
-}else{
-if(h.ie){
-_820.unselectable="on";
-}else{
-return false;
-}
-}
-}
-return true;
-};
-dojo.html.enableSelection=function(_822){
-_822=dojo.byId(_822)||dojo.body();
-var h=dojo.render.html;
-if(h.mozilla){
-_822.style.MozUserSelect="";
-}else{
-if(h.safari){
-_822.style.KhtmlUserSelect="";
-}else{
-if(h.ie){
-_822.unselectable="off";
-}else{
-return false;
-}
-}
-}
-return true;
-};
-dojo.html.selectElement=function(_824){
-dojo.deprecated("dojo.html.selectElement","replaced by dojo.html.selection.selectElementChildren",0.5);
-};
-dojo.html.selectInputText=function(_825){
-var _826=dojo.global();
-var _827=dojo.doc();
-_825=dojo.byId(_825);
-if(_827["selection"]&&dojo.body()["createTextRange"]){
-var _828=_825.createTextRange();
-_828.moveStart("character",0);
-_828.moveEnd("character",_825.value.length);
-_828.select();
-}else{
-if(_826["getSelection"]){
-var _829=_826.getSelection();
-_825.setSelectionRange(0,_825.value.length);
-}
-}
-_825.focus();
-};
-dojo.html.isSelectionCollapsed=function(){
-dojo.deprecated("dojo.html.isSelectionCollapsed","replaced by dojo.html.selection.isCollapsed",0.5);
-return dojo.html.selection.isCollapsed();
-};
-dojo.lang.mixin(dojo.html.selection,{getType:function(){
-if(dojo.doc()["selection"]){
-return dojo.html.selectionType[dojo.doc().selection.type.toUpperCase()];
-}else{
-var _82a=dojo.html.selectionType.TEXT;
-var oSel;
-try{
-oSel=dojo.global().getSelection();
-}
-catch(e){
-}
-if(oSel&&oSel.rangeCount==1){
-var _82c=oSel.getRangeAt(0);
-if(_82c.startContainer==_82c.endContainer&&(_82c.endOffset-_82c.startOffset)==1&&_82c.startContainer.nodeType!=dojo.dom.TEXT_NODE){
-_82a=dojo.html.selectionType.CONTROL;
-}
-}
-return _82a;
-}
-},isCollapsed:function(){
-var _82d=dojo.global();
-var _82e=dojo.doc();
-if(_82e["selection"]){
-return _82e.selection.createRange().text=="";
-}else{
-if(_82d["getSelection"]){
-var _82f=_82d.getSelection();
-if(dojo.lang.isString(_82f)){
-return _82f=="";
-}else{
-return _82f.isCollapsed||_82f.toString()=="";
-}
-}
-}
-},getSelectedElement:function(){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-if(dojo.doc()["selection"]){
-var _830=dojo.doc().selection.createRange();
-if(_830&&_830.item){
-return dojo.doc().selection.createRange().item(0);
-}
-}else{
-var _831=dojo.global().getSelection();
-return _831.anchorNode.childNodes[_831.anchorOffset];
-}
-}
-},getParentElement:function(){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-var p=dojo.html.selection.getSelectedElement();
-if(p){
-return p.parentNode;
-}
-}else{
-if(dojo.doc()["selection"]){
-return dojo.doc().selection.createRange().parentElement();
-}else{
-var _833=dojo.global().getSelection();
-if(_833){
-var node=_833.anchorNode;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.parentNode;
-}
-return node;
-}
-}
-}
-},getSelectedText:function(){
-if(dojo.doc()["selection"]){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-return null;
-}
-return dojo.doc().selection.createRange().text;
-}else{
-var _835=dojo.global().getSelection();
-if(_835){
-return _835.toString();
-}
-}
-},getSelectedHtml:function(){
-if(dojo.doc()["selection"]){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-return null;
-}
-return dojo.doc().selection.createRange().htmlText;
-}else{
-var _836=dojo.global().getSelection();
-if(_836&&_836.rangeCount){
-var frag=_836.getRangeAt(0).cloneContents();
-var div=document.createElement("div");
-div.appendChild(frag);
-return div.innerHTML;
-}
-return null;
-}
-},hasAncestorElement:function(_839){
-return (dojo.html.selection.getAncestorElement.apply(this,arguments)!=null);
-},getAncestorElement:function(_83a){
-var node=dojo.html.selection.getSelectedElement()||dojo.html.selection.getParentElement();
-while(node){
-if(dojo.html.selection.isTag(node,arguments).length>0){
-return node;
-}
-node=node.parentNode;
-}
-return null;
-},isTag:function(node,tags){
-if(node&&node.tagName){
-for(var i=0;i<tags.length;i++){
-if(node.tagName.toLowerCase()==String(tags[i]).toLowerCase()){
-return String(tags[i]).toLowerCase();
-}
-}
-}
-return "";
-},selectElement:function(_83f){
-var _840=dojo.global();
-var _841=dojo.doc();
-_83f=dojo.byId(_83f);
-if(_841.selection&&dojo.body().createTextRange){
-try{
-var _842=dojo.body().createControlRange();
-_842.addElement(_83f);
-_842.select();
-}
-catch(e){
-dojo.html.selection.selectElementChildren(_83f);
-}
-}else{
-if(_840["getSelection"]){
-var _843=_840.getSelection();
-if(_843["removeAllRanges"]){
-var _842=_841.createRange();
-_842.selectNode(_83f);
-_843.removeAllRanges();
-_843.addRange(_842);
-}
-}
-}
-},selectElementChildren:function(_844){
-var _845=dojo.global();
-var _846=dojo.doc();
-_844=dojo.byId(_844);
-if(_846.selection&&dojo.body().createTextRange){
-var _847=dojo.body().createTextRange();
-_847.moveToElementText(_844);
-_847.select();
-}else{
-if(_845["getSelection"]){
-var _848=_845.getSelection();
-if(_848["setBaseAndExtent"]){
-_848.setBaseAndExtent(_844,0,_844,_844.innerText.length-1);
-}else{
-if(_848["selectAllChildren"]){
-_848.selectAllChildren(_844);
-}
-}
-}
-}
-},getBookmark:function(){
-var _849;
-var _84a=dojo.doc();
-if(_84a["selection"]){
-var _84b=_84a.selection.createRange();
-_849=_84b.getBookmark();
-}else{
-var _84c;
-try{
-_84c=dojo.global().getSelection();
-}
-catch(e){
-}
-if(_84c){
-var _84b=_84c.getRangeAt(0);
-_849=_84b.cloneRange();
-}else{
-dojo.debug("No idea how to store the current selection for this browser!");
-}
-}
-return _849;
-},moveToBookmark:function(_84d){
-var _84e=dojo.doc();
-if(_84e["selection"]){
-var _84f=_84e.selection.createRange();
-_84f.moveToBookmark(_84d);
-_84f.select();
-}else{
-var _850;
-try{
-_850=dojo.global().getSelection();
-}
-catch(e){
-}
-if(_850&&_850["removeAllRanges"]){
-_850.removeAllRanges();
-_850.addRange(_84d);
-}else{
-dojo.debug("No idea how to restore selection for this browser!");
-}
-}
-},collapse:function(_851){
-if(dojo.global()["getSelection"]){
-var _852=dojo.global().getSelection();
-if(_852.removeAllRanges){
-if(_851){
-_852.collapseToStart();
-}else{
-_852.collapseToEnd();
-}
-}else{
-dojo.global().getSelection().collapse(_851);
-}
-}else{
-if(dojo.doc().selection){
-var _853=dojo.doc().selection.createRange();
-_853.collapse(_851);
-_853.select();
-}
-}
-},remove:function(){
-if(dojo.doc().selection){
-var _854=dojo.doc().selection;
-if(_854.type.toUpperCase()!="NONE"){
-_854.clear();
-}
-return _854;
-}else{
-var _854=dojo.global().getSelection();
-for(var i=0;i<_854.rangeCount;i++){
-_854.getRangeAt(i).deleteContents();
-}
-return _854;
-}
-}});
-dojo.provide("dojo.Deferred");
-dojo.Deferred=function(_856){
-this.chain=[];
-this.id=this._nextId();
-this.fired=-1;
-this.paused=0;
-this.results=[null,null];
-this.canceller=_856;
-this.silentlyCancelled=false;
-};
-dojo.lang.extend(dojo.Deferred,{getFunctionFromArgs:function(){
-var a=arguments;
-if((a[0])&&(!a[1])){
-if(dojo.lang.isFunction(a[0])){
-return a[0];
-}else{
-if(dojo.lang.isString(a[0])){
-return dj_global[a[0]];
-}
-}
-}else{
-if((a[0])&&(a[1])){
-return dojo.lang.hitch(a[0],a[1]);
-}
-}
-return null;
-},makeCalled:function(){
-var _858=new dojo.Deferred();
-_858.callback();
-return _858;
-},repr:function(){
-var _859;
-if(this.fired==-1){
-_859="unfired";
-}else{
-if(this.fired==0){
-_859="success";
-}else{
-_859="error";
-}
-}
-return "Deferred("+this.id+", "+_859+")";
-},toString:dojo.lang.forward("repr"),_nextId:(function(){
-var n=1;
-return function(){
-return n++;
-};
-})(),cancel:function(){
-if(this.fired==-1){
-if(this.canceller){
-this.canceller(this);
-}else{
-this.silentlyCancelled=true;
-}
-if(this.fired==-1){
-this.errback(new Error(this.repr()));
-}
-}else{
-if((this.fired==0)&&(this.results[0] instanceof dojo.Deferred)){
-this.results[0].cancel();
-}
-}
-},_pause:function(){
-this.paused++;
-},_unpause:function(){
-this.paused--;
-if((this.paused==0)&&(this.fired>=0)){
-this._fire();
-}
-},_continue:function(res){
-this._resback(res);
-this._unpause();
-},_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){
-dojo.raise("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 _861=this.getFunctionFromArgs(cb,cbfn);
-if(arguments.length>2){
-_861=dojo.lang.curryArguments(null,_861,arguments,2);
-}
-return this.addCallbacks(_861,_861);
-},addCallback:function(cb,cbfn){
-var _864=this.getFunctionFromArgs(cb,cbfn);
-if(arguments.length>2){
-_864=dojo.lang.curryArguments(null,_864,arguments,2);
-}
-return this.addCallbacks(_864,null);
-},addErrback:function(cb,cbfn){
-var _867=this.getFunctionFromArgs(cb,cbfn);
-if(arguments.length>2){
-_867=dojo.lang.curryArguments(null,_867,arguments,2);
-}
-return this.addCallbacks(null,_867);
-return this.addCallbacks(null,cbfn);
-},addCallbacks:function(cb,eb){
-this.chain.push([cb,eb]);
-if(this.fired>=0){
-this._fire();
-}
-return this;
-},_fire:function(){
-var _86a=this.chain;
-var _86b=this.fired;
-var res=this.results[_86b];
-var self=this;
-var cb=null;
-while(_86a.length>0&&this.paused==0){
-var pair=_86a.shift();
-var f=pair[_86b];
-if(f==null){
-continue;
-}
-try{
-res=f(res);
-_86b=((res instanceof Error)?1:0);
-if(res instanceof dojo.Deferred){
-cb=function(res){
-self._continue(res);
-};
-this._pause();
-}
-}
-catch(err){
-_86b=1;
-res=err;
-}
-}
-this.fired=_86b;
-this.results[_86b]=res;
-if((cb)&&(this.paused)){
-res.addBoth(cb);
-}
-}});
-dojo.provide("dojo.widget.RichText");
-if(dojo.hostenv.post_load_){
-(function(){
-var _872=dojo.doc().createElement("textarea");
-_872.id="dojo.widget.RichText.savedContent";
-_872.style="display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;";
-dojo.body().appendChild(_872);
-})();
-}else{
-try{
-dojo.doc().write("<textarea id=\"dojo.widget.RichText.savedContent\" "+"style=\"display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;\"></textarea>");
-}
-catch(e){
-}
-}
-dojo.widget.defineWidget("dojo.widget.RichText",dojo.widget.HtmlWidget,function(){
-this.contentPreFilters=[];
-this.contentPostFilters=[];
-this.contentDomPreFilters=[];
-this.contentDomPostFilters=[];
-this.editingAreaStyleSheets=[];
-if(dojo.render.html.moz){
-this.contentPreFilters.push(this._fixContentForMoz);
-}
-this._keyHandlers={};
-if(dojo.Deferred){
-this.onLoadDeferred=new dojo.Deferred();
-}
-},{inheritWidth:false,focusOnLoad:false,saveName:"",styleSheets:"",_content:"",height:"",minHeight:"1em",isClosed:true,isLoaded:false,useActiveX:false,relativeImageUrls:false,_SEPARATOR:"@@**%%__RICHTEXTBOUNDRY__%%**@@",onLoadDeferred:null,fillInTemplate:function(){
-dojo.event.topic.publish("dojo.widget.RichText::init",this);
-this.open();
-dojo.event.connect(this,"onKeyPressed",this,"afterKeyPress");
-dojo.event.connect(this,"onKeyPress",this,"keyPress");
-dojo.event.connect(this,"onKeyDown",this,"keyDown");
-dojo.event.connect(this,"onKeyUp",this,"keyUp");
-this.setupDefaultShortcuts();
-},setupDefaultShortcuts:function(){
-var ctrl=this.KEY_CTRL;
-var exec=function(cmd,arg){
-return arguments.length==1?function(){
-this.execCommand(cmd);
-}:function(){
-this.execCommand(cmd,arg);
-};
-};
-this.addKeyHandler("b",ctrl,exec("bold"));
-this.addKeyHandler("i",ctrl,exec("italic"));
-this.addKeyHandler("u",ctrl,exec("underline"));
-this.addKeyHandler("a",ctrl,exec("selectall"));
-this.addKeyHandler("s",ctrl,function(){
-this.save(true);
-});
-this.addKeyHandler("1",ctrl,exec("formatblock","h1"));
-this.addKeyHandler("2",ctrl,exec("formatblock","h2"));
-this.addKeyHandler("3",ctrl,exec("formatblock","h3"));
-this.addKeyHandler("4",ctrl,exec("formatblock","h4"));
-this.addKeyHandler("\\",ctrl,exec("insertunorderedlist"));
-if(!dojo.render.html.ie){
-this.addKeyHandler("Z",ctrl,exec("redo"));
-}
-},events:["onBlur","onFocus","onKeyPress","onKeyDown","onKeyUp","onClick"],open:function(_877){
-if(this.onLoadDeferred.fired>=0){
-this.onLoadDeferred=new dojo.Deferred();
-}
-var h=dojo.render.html;
-if(!this.isClosed){
-this.close();
-}
-dojo.event.topic.publish("dojo.widget.RichText::open",this);
-this._content="";
-if((arguments.length==1)&&(_877["nodeName"])){
-this.domNode=_877;
-}
-if((this.domNode["nodeName"])&&(this.domNode.nodeName.toLowerCase()=="textarea")){
-this.textarea=this.domNode;
-var html=dojo.string.trim(this.textarea.value);
-this.domNode=dojo.doc().createElement("div");
-dojo.html.copyStyle(this.domNode,this.textarea);
-var _87a=dojo.lang.hitch(this,function(){
-with(this.textarea.style){
-display="block";
-position="absolute";
-left=top="-1000px";
-if(h.ie){
-this.__overflow=overflow;
-overflow="hidden";
-}
-}
-});
-if(h.ie){
-setTimeout(_87a,10);
-}else{
-_87a();
-}
-if(!h.safari){
-dojo.html.insertBefore(this.domNode,this.textarea);
-}
-if(this.textarea.form){
-dojo.event.connect("before",this.textarea.form,"onsubmit",dojo.lang.hitch(this,function(){
-this.textarea.value=this.getEditorContent();
-}));
-}
-var _87b=this;
-dojo.event.connect(this,"postCreate",function(){
-dojo.html.insertAfter(_87b.textarea,_87b.domNode);
-});
-}else{
-var html=this._preFilterContent(dojo.string.trim(this.domNode.innerHTML));
-}
-if(html==""){
-html="&nbsp;";
-}
-var _87c=dojo.html.getContentBox(this.domNode);
-this._oldHeight=_87c.height;
-this._oldWidth=_87c.width;
-this._firstChildContributingMargin=this._getContributingMargin(this.domNode,"top");
-this._lastChildContributingMargin=this._getContributingMargin(this.domNode,"bottom");
-this.savedContent=this.domNode.innerHTML;
-this.domNode.innerHTML="";
-this.editingArea=dojo.doc().createElement("div");
-this.domNode.appendChild(this.editingArea);
-if((this.domNode["nodeName"])&&(this.domNode.nodeName=="LI")){
-this.domNode.innerHTML=" <br>";
-}
-if(this.saveName!=""){
-var _87d=dojo.doc().getElementById("dojo.widget.RichText.savedContent");
-if(_87d.value!=""){
-var _87e=_87d.value.split(this._SEPARATOR);
-for(var i=0;i<_87e.length;i++){
-var data=_87e[i].split(":");
-if(data[0]==this.saveName){
-html=data[1];
-_87e.splice(i,1);
-break;
-}
-}
-}
-dojo.event.connect("before",window,"onunload",this,"_saveContent");
-}
-if(h.ie70&&this.useActiveX){
-dojo.debug("activeX in ie70 is not currently supported, useActiveX is ignored for now.");
-this.useActiveX=false;
-}
-if(this.useActiveX&&h.ie){
-var self=this;
-setTimeout(function(){
-self._drawObject(html);
-},0);
-}else{
-if(h.ie||this._safariIsLeopard()||h.opera){
-this.iframe=dojo.doc().createElement("iframe");
-this.iframe.src="javascript:void(0)";
-this.editorObject=this.iframe;
-with(this.iframe.style){
-border="0";
-width="100%";
-}
-this.iframe.frameBorder=0;
-this.editingArea.appendChild(this.iframe);
-this.window=this.iframe.contentWindow;
-this.document=this.window.document;
-this.document.open();
-this.document.write("<html><head><style>body{margin:0;padding:0;border:0;overflow:hidden;}</style></head><body><div></div></body></html>");
-this.document.close();
-this.editNode=this.document.body.firstChild;
-this.editNode.contentEditable=true;
-with(this.iframe.style){
-if(h.ie70){
-if(this.height){
-height=this.height;
-}
-if(this.minHeight){
-minHeight=this.minHeight;
-}
-}else{
-height=this.height?this.height:this.minHeight;
-}
-}
-var _882=["p","pre","address","h1","h2","h3","h4","h5","h6","ol","div","ul"];
-var _883="";
-for(var i in _882){
-if(_882[i].charAt(1)!="l"){
-_883+="<"+_882[i]+"><span>content</span></"+_882[i]+">";
-}else{
-_883+="<"+_882[i]+"><li>content</li></"+_882[i]+">";
-}
-}
-with(this.editNode.style){
-position="absolute";
-left="-2000px";
-top="-2000px";
-}
-this.editNode.innerHTML=_883;
-var node=this.editNode.firstChild;
-while(node){
-dojo.withGlobal(this.window,"selectElement",dojo.html.selection,[node.firstChild]);
-var _885=node.tagName.toLowerCase();
-this._local2NativeFormatNames[_885]=this.queryCommandValue("formatblock");
-this._native2LocalFormatNames[this._local2NativeFormatNames[_885]]=_885;
-node=node.nextSibling;
-}
-with(this.editNode.style){
-position="";
-left="";
-top="";
-}
-this.editNode.innerHTML=html;
-if(this.height){
-this.document.body.style.overflowY="scroll";
-}
-dojo.lang.forEach(this.events,function(e){
-dojo.event.connect(this.editNode,e.toLowerCase(),this,e);
-},this);
-this.onLoad();
-}else{
-this._drawIframe(html);
-this.editorObject=this.iframe;
-}
-}
-if(this.domNode.nodeName=="LI"){
-this.domNode.lastChild.style.marginTop="-1.2em";
-}
-dojo.html.addClass(this.domNode,"RichTextEditable");
-this.isClosed=false;
-},_hasCollapseableMargin:function(_887,side){
-if(dojo.html.getPixelValue(_887,"border-"+side+"-width",false)){
-return false;
-}else{
-if(dojo.html.getPixelValue(_887,"padding-"+side,false)){
-return false;
-}else{
-return true;
-}
-}
-},_getContributingMargin:function(_889,_88a){
-if(_88a=="top"){
-var _88b="previousSibling";
-var _88c="nextSibling";
-var _88d="firstChild";
-var _88e="margin-top";
-var _88f="margin-bottom";
-}else{
-var _88b="nextSibling";
-var _88c="previousSibling";
-var _88d="lastChild";
-var _88e="margin-bottom";
-var _88f="margin-top";
-}
-var _890=dojo.html.getPixelValue(_889,_88e,false);
-function isSignificantNode(_891){
-return !(_891.nodeType==3&&dojo.string.isBlank(_891.data))&&dojo.html.getStyle(_891,"display")!="none"&&!dojo.html.isPositionAbsolute(_891);
-}
-var _892=0;
-var _893=_889[_88d];
-while(_893){
-while((!isSignificantNode(_893))&&_893[_88c]){
-_893=_893[_88c];
-}
-_892=Math.max(_892,dojo.html.getPixelValue(_893,_88e,false));
-if(!this._hasCollapseableMargin(_893,_88a)){
-break;
-}
-_893=_893[_88d];
-}
-if(!this._hasCollapseableMargin(_889,_88a)){
-return parseInt(_892);
-}
-var _894=0;
-var _895=_889[_88b];
-while(_895){
-if(isSignificantNode(_895)){
-_894=dojo.html.getPixelValue(_895,_88f,false);
-break;
-}
-_895=_895[_88b];
-}
-if(!_895){
-_894=dojo.html.getPixelValue(_889.parentNode,_88e,false);
-}
-if(_892>_890){
-return parseInt(Math.max((_892-_890)-_894,0));
-}else{
-return 0;
-}
-},_drawIframe:function(html){
-var _897=Boolean(dojo.render.html.moz&&(typeof window.XML=="undefined"));
-if(!this.iframe){
-var _898=(new dojo.uri.Uri(dojo.doc().location)).host;
-this.iframe=dojo.doc().createElement("iframe");
-with(this.iframe){
-style.border="none";
-style.lineHeight="0";
-style.verticalAlign="bottom";
-scrolling=this.height?"auto":"no";
-}
-}
-this.iframe.src=dojo.uri.dojoUri("src/widget/templates/richtextframe.html")+((dojo.doc().domain!=_898)?("#"+dojo.doc().domain):"");
-this.iframe.width=this.inheritWidth?this._oldWidth:"100%";
-if(this.height){
-this.iframe.style.height=this.height;
-}else{
-var _899=this._oldHeight;
-if(this._hasCollapseableMargin(this.domNode,"top")){
-_899+=this._firstChildContributingMargin;
-}
-if(this._hasCollapseableMargin(this.domNode,"bottom")){
-_899+=this._lastChildContributingMargin;
-}
-this.iframe.height=_899;
-}
-var _89a=dojo.doc().createElement("div");
-_89a.innerHTML=html;
-this.editingArea.appendChild(_89a);
-if(this.relativeImageUrls){
-var imgs=_89a.getElementsByTagName("img");
-for(var i=0;i<imgs.length;i++){
-imgs[i].src=(new dojo.uri.Uri(dojo.global().location,imgs[i].src)).toString();
-}
-html=_89a.innerHTML;
-}
-var _89d=dojo.html.firstElement(_89a);
-var _89e=dojo.html.lastElement(_89a);
-if(_89d){
-_89d.style.marginTop=this._firstChildContributingMargin+"px";
-}
-if(_89e){
-_89e.style.marginBottom=this._lastChildContributingMargin+"px";
-}
-this.editingArea.appendChild(this.iframe);
-if(dojo.render.html.safari){
-this.iframe.src=this.iframe.src;
-}
-var _89f=false;
-var _8a0=dojo.lang.hitch(this,function(){
-if(!_89f){
-_89f=true;
-}else{
-return;
-}
-if(!this.editNode){
-if(this.iframe.contentWindow){
-this.window=this.iframe.contentWindow;
-this.document=this.iframe.contentWindow.document;
-}else{
-if(this.iframe.contentDocument){
-this.window=this.iframe.contentDocument.window;
-this.document=this.iframe.contentDocument;
-}
-}
-var _8a1=(function(_8a2){
-return function(_8a3){
-return dojo.html.getStyle(_8a2,_8a3);
-};
-})(this.domNode);
-var font=_8a1("font-weight")+" "+_8a1("font-size")+" "+_8a1("font-family");
-var _8a5="1.0";
-var _8a6=dojo.html.getUnitValue(this.domNode,"line-height");
-if(_8a6.value&&_8a6.units==""){
-_8a5=_8a6.value;
-}
-dojo.html.insertCssText("body,html{background:transparent;padding:0;margin:0;}"+"body{top:0;left:0;right:0;"+(((this.height)||(dojo.render.html.opera))?"":"position:fixed;")+"font:"+font+";"+"min-height:"+this.minHeight+";"+"line-height:"+_8a5+"}"+"p{margin: 1em 0 !important;}"+"body > *:first-child{padding-top:0 !important;margin-top:"+this._firstChildContributingMargin+"px !important;}"+"body > *:last-child{padding-bottom:0 !important;margin-bottom:"+this._lastChildContributingMargin+"px !important;}"+"li > ul:-moz-first-node, li > ol:-moz-first-node{padding-top:1.2em;}\n"+"li{min-height:1.2em;}"+"",this.document);
-dojo.html.removeNode(_89a);
-this.document.body.innerHTML=html;
-if(_897||dojo.render.html.safari){
-this.document.designMode="on";
-}
-this.onLoad();
-}else{
-dojo.html.removeNode(_89a);
-this.editNode.innerHTML=html;
-this.onDisplayChanged();
-}
-});
-if(this.editNode){
-_8a0();
-}else{
-if(dojo.render.html.moz){
-this.iframe.onload=function(){
-setTimeout(_8a0,250);
-};
-}else{
-this.iframe.onload=_8a0;
-}
-}
-},_applyEditingAreaStyleSheets:function(){
-var _8a7=[];
-if(this.styleSheets){
-_8a7=this.styleSheets.split(";");
-this.styleSheets="";
-}
-_8a7=_8a7.concat(this.editingAreaStyleSheets);
-this.editingAreaStyleSheets=[];
-if(_8a7.length>0){
-for(var i=0;i<_8a7.length;i++){
-var url=_8a7[i];
-if(url){
-this.addStyleSheet(dojo.uri.dojoUri(url));
-}
-}
-}
-},addStyleSheet:function(uri){
-var url=uri.toString();
-if(dojo.lang.find(this.editingAreaStyleSheets,url)>-1){
-dojo.debug("dojo.widget.RichText.addStyleSheet: Style sheet "+url+" is already applied to the editing area!");
-return;
-}
-if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){
-url=(new dojo.uri.Uri(dojo.global().location,url)).toString();
-}
-this.editingAreaStyleSheets.push(url);
-if(this.document.createStyleSheet){
-this.document.createStyleSheet(url);
-}else{
-var head=this.document.getElementsByTagName("head")[0];
-var _8ad=this.document.createElement("link");
-with(_8ad){
-rel="stylesheet";
-type="text/css";
-href=url;
-}
-head.appendChild(_8ad);
-}
-},removeStyleSheet:function(uri){
-var url=uri.toString();
-if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){
-url=(new dojo.uri.Uri(dojo.global().location,url)).toString();
-}
-var _8b0=dojo.lang.find(this.editingAreaStyleSheets,url);
-if(_8b0==-1){
-dojo.debug("dojo.widget.RichText.removeStyleSheet: Style sheet "+url+" is not applied to the editing area so it can not be removed!");
-return;
-}
-delete this.editingAreaStyleSheets[_8b0];
-var _8b1=this.document.getElementsByTagName("link");
-for(var i=0;i<_8b1.length;i++){
-if(_8b1[i].href==url){
-if(dojo.render.html.ie){
-_8b1[i].href="";
-}
-dojo.html.removeNode(_8b1[i]);
-break;
-}
-}
-},_drawObject:function(html){
-this.object=dojo.html.createExternalElement(dojo.doc(),"object");
-with(this.object){
-classid="clsid:2D360201-FFF5-11D1-8D03-00A0C959BC0A";
-width=this.inheritWidth?this._oldWidth:"100%";
-style.height=this.height?this.height:(this._oldHeight+"px");
-Scrollbars=this.height?true:false;
-Appearance=this._activeX.appearance.flat;
-}
-this.editorObject=this.object;
-this.editingArea.appendChild(this.object);
-this.object.attachEvent("DocumentComplete",dojo.lang.hitch(this,"onLoad"));
-dojo.lang.forEach(this.events,function(e){
-this.object.attachEvent(e.toLowerCase(),dojo.lang.hitch(this,e));
-},this);
-this.object.DocumentHTML="<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">"+"<html><title></title>"+"<style type=\"text/css\">"+"    body,html { padding: 0; margin: 0; }"+(this.height?"":"    body,  { overflow: hidden; }")+"</style>"+"<body><div>"+html+"<div></body></html>";
-this._cacheLocalBlockFormatNames();
-},_local2NativeFormatNames:{},_native2LocalFormatNames:{},_cacheLocalBlockFormatNames:function(){
-if(!this._native2LocalFormatNames["p"]){
-var obj=this.object;
-var _8b6=false;
-if(!obj){
-try{
-obj=dojo.html.createExternalElement(dojo.doc(),"object");
-obj.classid="clsid:2D360201-FFF5-11D1-8D03-00A0C959BC0A";
-dojo.body().appendChild(obj);
-obj.DocumentHTML="<html><head></head><body></body></html>";
-}
-catch(e){
-_8b6=true;
-}
-}
-try{
-var _8b7=new ActiveXObject("DEGetBlockFmtNamesParam.DEGetBlockFmtNamesParam");
-obj.ExecCommand(this._activeX.command["getblockformatnames"],0,_8b7);
-var _8b8=new VBArray(_8b7.Names);
-var _8b9=_8b8.toArray();
-var _8ba=["p","pre","address","h1","h2","h3","h4","h5","h6","ol","ul","","","","","div"];
-for(var i=0;i<_8ba.length;++i){
-if(_8ba[i].length>0){
-this._local2NativeFormatNames[_8b9[i]]=_8ba[i];
-this._native2LocalFormatNames[_8ba[i]]=_8b9[i];
-}
-}
-}
-catch(e){
-_8b6=true;
-}
-if(obj&&!this.object){
-dojo.body().removeChild(obj);
-}
-}
-return !_8b6;
-},_isResized:function(){
-return false;
-},onLoad:function(e){
-this.isLoaded=true;
-if(this.object){
-this.document=this.object.DOM;
-this.window=this.document.parentWindow;
-this.editNode=this.document.body.firstChild;
-this.editingArea.style.height=this.height?this.height:this.minHeight;
-if(!this.height){
-this.connect(this,"onDisplayChanged","_updateHeight");
-}
-this.window._frameElement=this.object;
-}else{
-if(this.iframe&&!dojo.render.html.ie){
-this.editNode=this.document.body;
-if(!this.height){
-this.connect(this,"onDisplayChanged","_updateHeight");
-}
-try{
-this.document.execCommand("useCSS",false,true);
-this.document.execCommand("styleWithCSS",false,false);
-}
-catch(e2){
-}
-if(dojo.render.html.safari){
-this.connect(this.editNode,"onblur","onBlur");
-this.connect(this.editNode,"onfocus","onFocus");
-this.connect(this.editNode,"onclick","onFocus");
-this.interval=setInterval(dojo.lang.hitch(this,"onDisplayChanged"),750);
-}else{
-if(dojo.render.html.mozilla||dojo.render.html.opera){
-var doc=this.document;
-var _8be=dojo.event.browser.addListener;
-var self=this;
-dojo.lang.forEach(this.events,function(e){
-var l=_8be(self.document,e.substr(2).toLowerCase(),dojo.lang.hitch(self,e));
-if(e=="onBlur"){
-var _8c2={unBlur:function(e){
-dojo.event.browser.removeListener(doc,"blur",l);
-}};
-dojo.event.connect("before",self,"close",_8c2,"unBlur");
-}
-});
-}
-}
-}else{
-if(dojo.render.html.ie){
-if(!this.height){
-this.connect(this,"onDisplayChanged","_updateHeight");
-}
-this.editNode.style.zoom=1;
-}
-}
-}
-this._applyEditingAreaStyleSheets();
-if(this.focusOnLoad){
-this.focus();
-}
-this.onDisplayChanged(e);
-if(this.onLoadDeferred){
-this.onLoadDeferred.callback(true);
-}
-},onKeyDown:function(e){
-if((!e)&&(this.object)){
-e=dojo.event.browser.fixEvent(this.window.event);
-}
-if((dojo.render.html.ie)&&(e.keyCode==e.KEY_TAB)){
-e.preventDefault();
-e.stopPropagation();
-this.execCommand((e.shiftKey?"outdent":"indent"));
-}else{
-if(dojo.render.html.ie){
-if((65<=e.keyCode)&&(e.keyCode<=90)){
-e.charCode=e.keyCode;
-this.onKeyPress(e);
-}
-}
-}
-},onKeyUp:function(e){
-return;
-},KEY_CTRL:1,onKeyPress:function(e){
-if((!e)&&(this.object)){
-e=dojo.event.browser.fixEvent(this.window.event);
-}
-var _8c7=e.ctrlKey?this.KEY_CTRL:0;
-if(this._keyHandlers[e.key]){
-var _8c8=this._keyHandlers[e.key],i=0,_8ca;
-while(_8ca=_8c8[i++]){
-if(_8c7==_8ca.modifiers){
-e.preventDefault();
-_8ca.handler.call(this);
-break;
-}
-}
-}
-dojo.lang.setTimeout(this,this.onKeyPressed,1,e);
-},addKeyHandler:function(key,_8cc,_8cd){
-if(!(this._keyHandlers[key] instanceof Array)){
-this._keyHandlers[key]=[];
-}
-this._keyHandlers[key].push({modifiers:_8cc||0,handler:_8cd});
-},onKeyPressed:function(e){
-this.onDisplayChanged();
-},onClick:function(e){
-this.onDisplayChanged(e);
-},onBlur:function(e){
-},_initialFocus:true,onFocus:function(e){
-if((dojo.render.html.mozilla)&&(this._initialFocus)){
-this._initialFocus=false;
-if(dojo.string.trim(this.editNode.innerHTML)=="&nbsp;"){
-this.placeCursorAtStart();
-}
-}
-},blur:function(){
-if(this.iframe){
-this.window.blur();
-}else{
-if(this.object){
-this.document.body.blur();
-}else{
-if(this.editNode){
-this.editNode.blur();
-}
-}
-}
-},focus:function(){
-if(this.iframe&&!dojo.render.html.ie){
-this.window.focus();
-}else{
-if(this.object){
-this.document.focus();
-}else{
-if(this.editNode&&this.editNode.focus){
-this.editNode.focus();
-}else{
-dojo.debug("Have no idea how to focus into the editor!");
-}
-}
-}
-},onDisplayChanged:function(e){
-},_activeX:{command:{bold:5000,italic:5023,underline:5048,justifycenter:5024,justifyleft:5025,justifyright:5026,cut:5003,copy:5002,paste:5032,"delete":5004,undo:5049,redo:5033,removeformat:5034,selectall:5035,unlink:5050,indent:5018,outdent:5031,insertorderedlist:5030,insertunorderedlist:5051,inserttable:5022,insertcell:5019,insertcol:5020,insertrow:5021,deletecells:5005,deletecols:5006,deleterows:5007,mergecells:5029,splitcell:5047,setblockformat:5043,getblockformat:5011,getblockformatnames:5012,setfontname:5044,getfontname:5013,setfontsize:5045,getfontsize:5014,setbackcolor:5042,getbackcolor:5010,setforecolor:5046,getforecolor:5015,findtext:5008,font:5009,hyperlink:5016,image:5017,lockelement:5027,makeabsolute:5028,sendbackward:5036,bringforward:5037,sendbelowtext:5038,bringabovetext:5039,sendtoback:5040,bringtofront:5041,properties:5052},ui:{"default":0,prompt:1,noprompt:2},status:{notsupported:0,disabled:1,enabled:3,latched:7,ninched:11},appearance:{flat:0,inset:1},state:{unchecked:0,checked:1,gray:2}},_normalizeCommand:function(cmd){
-var drh=dojo.render.html;
-var _8d5=cmd.toLowerCase();
-if(_8d5=="formatblock"){
-if(drh.safari){
-_8d5="heading";
-}
-}else{
-if(this.object){
-switch(_8d5){
-case "createlink":
-_8d5="hyperlink";
-break;
-case "insertimage":
-_8d5="image";
-break;
-}
-}else{
-if(_8d5=="hilitecolor"&&!drh.mozilla){
-_8d5="backcolor";
-}
-}
-}
-return _8d5;
-},_safariIsLeopard:function(){
-var _8d6=false;
-if(dojo.render.html.safari){
-var tmp=dojo.render.html.UA.split("AppleWebKit/")[1];
-var ver=parseFloat(tmp.split(" ")[0]);
-if(ver>=420){
-_8d6=true;
-}
-}
-return _8d6;
-},queryCommandAvailable:function(_8d9){
-var ie=1;
-var _8db=1<<1;
-var _8dc=1<<2;
-var _8dd=1<<3;
-var _8de=1<<4;
-var _8df=this._safariIsLeopard();
-function isSupportedBy(_8e0){
-return {ie:Boolean(_8e0&ie),mozilla:Boolean(_8e0&_8db),safari:Boolean(_8e0&_8dc),safari420:Boolean(_8e0&_8de),opera:Boolean(_8e0&_8dd)};
-}
-var _8e1=null;
-switch(_8d9.toLowerCase()){
-case "bold":
-case "italic":
-case "underline":
-case "subscript":
-case "superscript":
-case "fontname":
-case "fontsize":
-case "forecolor":
-case "hilitecolor":
-case "justifycenter":
-case "justifyfull":
-case "justifyleft":
-case "justifyright":
-case "delete":
-case "selectall":
-_8e1=isSupportedBy(_8db|ie|_8dc|_8dd);
-break;
-case "createlink":
-case "unlink":
-case "removeformat":
-case "inserthorizontalrule":
-case "insertimage":
-case "insertorderedlist":
-case "insertunorderedlist":
-case "indent":
-case "outdent":
-case "formatblock":
-case "inserthtml":
-case "undo":
-case "redo":
-case "strikethrough":
-_8e1=isSupportedBy(_8db|ie|_8dd|_8de);
-break;
-case "blockdirltr":
-case "blockdirrtl":
-case "dirltr":
-case "dirrtl":
-case "inlinedirltr":
-case "inlinedirrtl":
-_8e1=isSupportedBy(ie);
-break;
-case "cut":
-case "copy":
-case "paste":
-_8e1=isSupportedBy(ie|_8db|_8de);
-break;
-case "inserttable":
-_8e1=isSupportedBy(_8db|(this.object?ie:0));
-break;
-case "insertcell":
-case "insertcol":
-case "insertrow":
-case "deletecells":
-case "deletecols":
-case "deleterows":
-case "mergecells":
-case "splitcell":
-_8e1=isSupportedBy(this.object?ie:0);
-break;
-default:
-return false;
-}
-return (dojo.render.html.ie&&_8e1.ie)||(dojo.render.html.mozilla&&_8e1.mozilla)||(dojo.render.html.safari&&_8e1.safari)||(_8df&&_8e1.safari420)||(dojo.render.html.opera&&_8e1.opera);
-},execCommand:function(_8e2,_8e3){
-var _8e4;
-this.focus();
-_8e2=this._normalizeCommand(_8e2);
-if(_8e3!=undefined){
-if(_8e2=="heading"){
-throw new Error("unimplemented");
-}else{
-if(_8e2=="formatblock"){
-if(this.object){
-_8e3=this._native2LocalFormatNames[_8e3];
-}else{
-if(dojo.render.html.ie){
-_8e3="<"+_8e3+">";
-}
-}
-}
-}
-}
-if(this.object){
-switch(_8e2){
-case "hilitecolor":
-_8e2="setbackcolor";
-break;
-case "forecolor":
-case "backcolor":
-case "fontsize":
-case "fontname":
-_8e2="set"+_8e2;
-break;
-case "formatblock":
-_8e2="setblockformat";
-}
-if(_8e2=="strikethrough"){
-_8e2="inserthtml";
-var _8e5=this.document.selection.createRange();
-if(!_8e5.htmlText){
-return;
-}
-_8e3=_8e5.htmlText.strike();
-}else{
-if(_8e2=="inserthorizontalrule"){
-_8e2="inserthtml";
-_8e3="<hr>";
-}
-}
-if(_8e2=="inserthtml"){
-var _8e5=this.document.selection.createRange();
-if(this.document.selection.type.toUpperCase()=="CONTROL"){
-for(var i=0;i<_8e5.length;i++){
-_8e5.item(i).outerHTML=_8e3;
-}
-}else{
-_8e5.pasteHTML(_8e3);
-_8e5.select();
-}
-_8e4=true;
-}else{
-if(arguments.length==1){
-_8e4=this.object.ExecCommand(this._activeX.command[_8e2],this._activeX.ui.noprompt);
-}else{
-_8e4=this.object.ExecCommand(this._activeX.command[_8e2],this._activeX.ui.noprompt,_8e3);
-}
-}
-}else{
-if(_8e2=="inserthtml"){
-if(dojo.render.html.ie){
-var _8e7=this.document.selection.createRange();
-_8e7.pasteHTML(_8e3);
-_8e7.select();
-return true;
-}else{
-return this.document.execCommand(_8e2,false,_8e3);
-}
-}else{
-if((_8e2=="unlink")&&(this.queryCommandEnabled("unlink"))&&(dojo.render.html.mozilla)){
-var _8e8=this.window.getSelection();
-var _8e9=_8e8.getRangeAt(0);
-var _8ea=_8e9.startContainer;
-var _8eb=_8e9.startOffset;
-var _8ec=_8e9.endContainer;
-var _8ed=_8e9.endOffset;
-var a=dojo.withGlobal(this.window,"getAncestorElement",dojo.html.selection,["a"]);
-dojo.withGlobal(this.window,"selectElement",dojo.html.selection,[a]);
-_8e4=this.document.execCommand("unlink",false,null);
-var _8e9=this.document.createRange();
-_8e9.setStart(_8ea,_8eb);
-_8e9.setEnd(_8ec,_8ed);
-_8e8.removeAllRanges();
-_8e8.addRange(_8e9);
-return _8e4;
-}else{
-if((_8e2=="hilitecolor")&&(dojo.render.html.mozilla)){
-this.document.execCommand("useCSS",false,false);
-_8e4=this.document.execCommand(_8e2,false,_8e3);
-this.document.execCommand("useCSS",false,true);
-}else{
-if((dojo.render.html.ie)&&((_8e2=="backcolor")||(_8e2=="forecolor"))){
-_8e3=arguments.length>1?_8e3:null;
-_8e4=this.document.execCommand(_8e2,false,_8e3);
-}else{
-_8e3=arguments.length>1?_8e3:null;
-if(_8e3||_8e2!="createlink"){
-_8e4=this.document.execCommand(_8e2,false,_8e3);
-}
-}
-}
-}
-}
-}
-this.onDisplayChanged();
-return _8e4;
-},queryCommandEnabled:function(_8ef){
-_8ef=this._normalizeCommand(_8ef);
-if(this.object){
-switch(_8ef){
-case "hilitecolor":
-_8ef="setbackcolor";
-break;
-case "forecolor":
-case "backcolor":
-case "fontsize":
-case "fontname":
-_8ef="set"+_8ef;
-break;
-case "formatblock":
-_8ef="setblockformat";
-break;
-case "strikethrough":
-_8ef="bold";
-break;
-case "inserthorizontalrule":
-return true;
-}
-if(typeof this._activeX.command[_8ef]=="undefined"){
-return false;
-}
-var _8f0=this.object.QueryStatus(this._activeX.command[_8ef]);
-return ((_8f0!=this._activeX.status.notsupported)&&(_8f0!=this._activeX.status.disabled));
-}else{
-if(dojo.render.html.mozilla){
-if(_8ef=="unlink"){
-return dojo.withGlobal(this.window,"hasAncestorElement",dojo.html.selection,["a"]);
-}else{
-if(_8ef=="inserttable"){
-return true;
-}
-}
-}
-var elem=(dojo.render.html.ie)?this.document.selection.createRange():this.document;
-return elem.queryCommandEnabled(_8ef);
-}
-},queryCommandState:function(_8f2){
-_8f2=this._normalizeCommand(_8f2);
-if(this.object){
-if(_8f2=="forecolor"){
-_8f2="setforecolor";
-}else{
-if(_8f2=="backcolor"){
-_8f2="setbackcolor";
-}else{
-if(_8f2=="strikethrough"){
-return dojo.withGlobal(this.window,"hasAncestorElement",dojo.html.selection,["strike"]);
-}else{
-if(_8f2=="inserthorizontalrule"){
-return false;
-}
-}
-}
-}
-if(typeof this._activeX.command[_8f2]=="undefined"){
-return null;
-}
-var _8f3=this.object.QueryStatus(this._activeX.command[_8f2]);
-return ((_8f3==this._activeX.status.latched)||(_8f3==this._activeX.status.ninched));
-}else{
-return this.document.queryCommandState(_8f2);
-}
-},queryCommandValue:function(_8f4){
-_8f4=this._normalizeCommand(_8f4);
-if(this.object){
-switch(_8f4){
-case "forecolor":
-case "backcolor":
-case "fontsize":
-case "fontname":
-_8f4="get"+_8f4;
-return this.object.execCommand(this._activeX.command[_8f4],this._activeX.ui.noprompt);
-case "formatblock":
-var _8f5=this.object.execCommand(this._activeX.command["getblockformat"],this._activeX.ui.noprompt);
-if(_8f5){
-return this._local2NativeFormatNames[_8f5];
-}
-}
-}else{
-if(dojo.render.html.ie&&_8f4=="formatblock"){
-return this._local2NativeFormatNames[this.document.queryCommandValue(_8f4)]||this.document.queryCommandValue(_8f4);
-}
-return this.document.queryCommandValue(_8f4);
-}
-},placeCursorAtStart:function(){
-this.focus();
-if(dojo.render.html.moz&&this.editNode.firstChild&&this.editNode.firstChild.nodeType!=dojo.dom.TEXT_NODE){
-dojo.withGlobal(this.window,"selectElementChildren",dojo.html.selection,[this.editNode.firstChild]);
-}else{
-dojo.withGlobal(this.window,"selectElementChildren",dojo.html.selection,[this.editNode]);
-}
-dojo.withGlobal(this.window,"collapse",dojo.html.selection,[true]);
-},placeCursorAtEnd:function(){
-this.focus();
-if(dojo.render.html.moz&&this.editNode.lastChild&&this.editNode.lastChild.nodeType!=dojo.dom.TEXT_NODE){
-dojo.withGlobal(this.window,"selectElementChildren",dojo.html.selection,[this.editNode.lastChild]);
-}else{
-dojo.withGlobal(this.window,"selectElementChildren",dojo.html.selection,[this.editNode]);
-}
-dojo.withGlobal(this.window,"collapse",dojo.html.selection,[false]);
-},replaceEditorContent:function(html){
-html=this._preFilterContent(html);
-if(this.isClosed){
-this.domNode.innerHTML=html;
-}else{
-if(this.window&&this.window.getSelection&&!dojo.render.html.moz){
-this.editNode.innerHTML=html;
-}else{
-if((this.window&&this.window.getSelection)||(this.document&&this.document.selection)){
-this.execCommand("selectall");
-if(dojo.render.html.moz&&!html){
-html="&nbsp;";
-}
-this.execCommand("inserthtml",html);
-}
-}
-}
-},_preFilterContent:function(html){
-var ec=html;
-dojo.lang.forEach(this.contentPreFilters,function(ef){
-ec=ef(ec);
-});
-if(this.contentDomPreFilters.length>0){
-var dom=dojo.doc().createElement("div");
-dom.style.display="none";
-dojo.body().appendChild(dom);
-dom.innerHTML=ec;
-dojo.lang.forEach(this.contentDomPreFilters,function(ef){
-dom=ef(dom);
-});
-ec=dom.innerHTML;
-dojo.body().removeChild(dom);
-}
-return ec;
-},_postFilterContent:function(html){
-var ec=html;
-if(this.contentDomPostFilters.length>0){
-var dom=this.document.createElement("div");
-dom.innerHTML=ec;
-dojo.lang.forEach(this.contentDomPostFilters,function(ef){
-dom=ef(dom);
-});
-ec=dom.innerHTML;
-}
-dojo.lang.forEach(this.contentPostFilters,function(ef){
-ec=ef(ec);
-});
-return ec;
-},_lastHeight:0,_updateHeight:function(){
-if(!this.isLoaded){
-return;
-}
-if(this.height){
-return;
-}
-var _901=dojo.html.getBorderBox(this.editNode).height;
-if(!_901){
-_901=dojo.html.getBorderBox(this.document.body).height;
-}
-if(_901==0){
-dojo.debug("Can not figure out the height of the editing area!");
-return;
-}
-this._lastHeight=_901;
-this.editorObject.style.height=this._lastHeight+"px";
-this.window.scrollTo(0,0);
-},_saveContent:function(e){
-var _903=dojo.doc().getElementById("dojo.widget.RichText.savedContent");
-_903.value+=this._SEPARATOR+this.saveName+":"+this.getEditorContent();
-},getEditorContent:function(){
-var ec="";
-try{
-ec=(this._content.length>0)?this._content:this.editNode.innerHTML;
-if(dojo.string.trim(ec)=="&nbsp;"){
-ec="";
-}
-}
-catch(e){
-}
-if(dojo.render.html.ie&&!this.object){
-var re=new RegExp("(?:<p>&nbsp;</p>[\n\r]*)+$","i");
-ec=ec.replace(re,"");
-}
-ec=this._postFilterContent(ec);
-if(this.relativeImageUrls){
-var _906=dojo.global().location.protocol+"//"+dojo.global().location.host;
-var _907=dojo.global().location.pathname;
-if(_907.match(/\/$/)){
-}else{
-var _908=_907.split("/");
-if(_908.length){
-_908.pop();
-}
-_907=_908.join("/")+"/";
-}
-var _909=new RegExp("(<img[^>]* src=[\"'])("+_906+"("+_907+")?)","ig");
-ec=ec.replace(_909,"$1");
-}
-return ec;
-},close:function(save,_90b){
-if(this.isClosed){
-return false;
-}
-if(arguments.length==0){
-save=true;
-}
-this._content=this._postFilterContent(this.editNode.innerHTML);
-var _90c=(this.savedContent!=this._content);
-if(this.interval){
-clearInterval(this.interval);
-}
-if(dojo.render.html.ie&&!this.object){
-dojo.event.browser.clean(this.editNode);
-}
-if(this.iframe){
-delete this.iframe;
-}
-if(this.textarea){
-with(this.textarea.style){
-position="";
-left=top="";
-if(dojo.render.html.ie){
-overflow=this.__overflow;
-this.__overflow=null;
-}
-}
-if(save){
-this.textarea.value=this._content;
-}else{
-this.textarea.value=this.savedContent;
-}
-dojo.html.removeNode(this.domNode);
-this.domNode=this.textarea;
-}else{
-if(save){
-if(dojo.render.html.moz){
-var nc=dojo.doc().createElement("span");
-this.domNode.appendChild(nc);
-nc.innerHTML=this.editNode.innerHTML;
-}else{
-this.domNode.innerHTML=this._content;
-}
-}else{
-this.domNode.innerHTML=this.savedContent;
-}
-}
-dojo.html.removeClass(this.domNode,"RichTextEditable");
-this.isClosed=true;
-this.isLoaded=false;
-delete this.editNode;
-if(this.window._frameElement){
-this.window._frameElement=null;
-}
-this.window=null;
-this.document=null;
-this.object=null;
-this.editingArea=null;
-this.editorObject=null;
-return _90c;
-},destroyRendering:function(){
-},destroy:function(){
-this.destroyRendering();
-if(!this.isClosed){
-this.close(false);
-}
-dojo.widget.RichText.superclass.destroy.call(this);
-},connect:function(_90e,_90f,_910){
-dojo.event.connect(_90e,_90f,this,_910);
-},disconnect:function(_911,_912,_913){
-dojo.event.disconnect(_911,_912,this,_913);
-},disconnectAllWithRoot:function(_914){
-dojo.deprecated("disconnectAllWithRoot","is deprecated. No need to disconnect manually","0.5");
-},_fixContentForMoz:function(html){
-html=html.replace(/<strong([ \>])/gi,"<b$1");
-html=html.replace(/<\/strong>/gi,"</b>");
-html=html.replace(/<em([ \>])/gi,"<i$1");
-html=html.replace(/<\/em>/gi,"</i>");
-return html;
-}});
-dojo.provide("dojo.lang.type");
-dojo.lang.whatAmI=function(_916){
-dojo.deprecated("dojo.lang.whatAmI","use dojo.lang.getType instead","0.5");
-return dojo.lang.getType(_916);
-};
-dojo.lang.whatAmI.custom={};
-dojo.lang.getType=function(_917){
-try{
-if(dojo.lang.isArray(_917)){
-return "array";
-}
-if(dojo.lang.isFunction(_917)){
-return "function";
-}
-if(dojo.lang.isString(_917)){
-return "string";
-}
-if(dojo.lang.isNumber(_917)){
-return "number";
-}
-if(dojo.lang.isBoolean(_917)){
-return "boolean";
-}
-if(dojo.lang.isAlien(_917)){
-return "alien";
-}
-if(dojo.lang.isUndefined(_917)){
-return "undefined";
-}
-for(var name in dojo.lang.whatAmI.custom){
-if(dojo.lang.whatAmI.custom[name](_917)){
-return name;
-}
-}
-if(dojo.lang.isObject(_917)){
-return "object";
-}
-}
-catch(e){
-}
-return "unknown";
-};
-dojo.lang.isNumeric=function(_919){
-return (!isNaN(_919)&&isFinite(_919)&&(_919!=null)&&!dojo.lang.isBoolean(_919)&&!dojo.lang.isArray(_919)&&!/^\s*$/.test(_919));
-};
-dojo.lang.isBuiltIn=function(_91a){
-return (dojo.lang.isArray(_91a)||dojo.lang.isFunction(_91a)||dojo.lang.isString(_91a)||dojo.lang.isNumber(_91a)||dojo.lang.isBoolean(_91a)||(_91a==null)||(_91a instanceof Error)||(typeof _91a=="error"));
-};
-dojo.lang.isPureObject=function(_91b){
-return ((_91b!=null)&&dojo.lang.isObject(_91b)&&_91b.constructor==Object);
-};
-dojo.lang.isOfType=function(_91c,type,_91e){
-var _91f=false;
-if(_91e){
-_91f=_91e["optional"];
-}
-if(_91f&&((_91c===null)||dojo.lang.isUndefined(_91c))){
-return true;
-}
-if(dojo.lang.isArray(type)){
-var _920=type;
-for(var i in _920){
-var _922=_920[i];
-if(dojo.lang.isOfType(_91c,_922)){
-return true;
-}
-}
-return false;
-}else{
-if(dojo.lang.isString(type)){
-type=type.toLowerCase();
-}
-switch(type){
-case Array:
-case "array":
-return dojo.lang.isArray(_91c);
-case Function:
-case "function":
-return dojo.lang.isFunction(_91c);
-case String:
-case "string":
-return dojo.lang.isString(_91c);
-case Number:
-case "number":
-return dojo.lang.isNumber(_91c);
-case "numeric":
-return dojo.lang.isNumeric(_91c);
-case Boolean:
-case "boolean":
-return dojo.lang.isBoolean(_91c);
-case Object:
-case "object":
-return dojo.lang.isObject(_91c);
-case "pureobject":
-return dojo.lang.isPureObject(_91c);
-case "builtin":
-return dojo.lang.isBuiltIn(_91c);
-case "alien":
-return dojo.lang.isAlien(_91c);
-case "undefined":
-return dojo.lang.isUndefined(_91c);
-case null:
-case "null":
-return (_91c===null);
-case "optional":
-dojo.deprecated("dojo.lang.isOfType(value, [type, \"optional\"])","use dojo.lang.isOfType(value, type, {optional: true} ) instead","0.5");
-return ((_91c===null)||dojo.lang.isUndefined(_91c));
-default:
-if(dojo.lang.isFunction(type)){
-return (_91c instanceof type);
-}else{
-dojo.raise("dojo.lang.isOfType() was passed an invalid type");
-}
-}
-}
-dojo.raise("If we get here, it means a bug was introduced above.");
-};
-dojo.lang.getObject=function(str){
-var _924=str.split("."),i=0,obj=dj_global;
-do{
-obj=obj[_924[i++]];
-}while(i<_924.length&&obj);
-return (obj!=dj_global)?obj:null;
-};
-dojo.lang.doesObjectExist=function(str){
-var _928=str.split("."),i=0,obj=dj_global;
-do{
-obj=obj[_928[i++]];
-}while(i<_928.length&&obj);
-return (obj&&obj!=dj_global);
-};
-dojo.provide("dojo.lang.assert");
-dojo.lang.assert=function(_92b,_92c){
-if(!_92b){
-var _92d="An assert statement failed.\n"+"The method dojo.lang.assert() was called with a 'false' value.\n";
-if(_92c){
-_92d+="Here's the assert message:\n"+_92c+"\n";
-}
-throw new Error(_92d);
-}
-};
-dojo.lang.assertType=function(_92e,type,_930){
-if(dojo.lang.isString(_930)){
-dojo.deprecated("dojo.lang.assertType(value, type, \"message\")","use dojo.lang.assertType(value, type) instead","0.5");
-}
-if(!dojo.lang.isOfType(_92e,type,_930)){
-if(!dojo.lang.assertType._errorMessage){
-dojo.lang.assertType._errorMessage="Type mismatch: dojo.lang.assertType() failed.";
-}
-dojo.lang.assert(false,dojo.lang.assertType._errorMessage);
-}
-};
-dojo.lang.assertValidKeywords=function(_931,_932,_933){
-var key;
-if(!_933){
-if(!dojo.lang.assertValidKeywords._errorMessage){
-dojo.lang.assertValidKeywords._errorMessage="In dojo.lang.assertValidKeywords(), found invalid keyword:";
-}
-_933=dojo.lang.assertValidKeywords._errorMessage;
-}
-if(dojo.lang.isArray(_932)){
-for(key in _931){
-if(!dojo.lang.inArray(_932,key)){
-dojo.lang.assert(false,_933+" "+key);
-}
-}
-}else{
-for(key in _931){
-if(!(key in _932)){
-dojo.lang.assert(false,_933+" "+key);
-}
-}
-}
-};
-dojo.provide("dojo.AdapterRegistry");
-dojo.AdapterRegistry=function(_935){
-this.pairs=[];
-this.returnWrappers=_935||false;
-};
-dojo.lang.extend(dojo.AdapterRegistry,{register:function(name,_937,wrap,_939,_93a){
-var type=(_93a)?"unshift":"push";
-this.pairs[type]([name,_937,wrap,_939]);
-},match:function(){
-for(var i=0;i<this.pairs.length;i++){
-var pair=this.pairs[i];
-if(pair[1].apply(this,arguments)){
-if((pair[3])||(this.returnWrappers)){
-return pair[2];
-}else{
-return pair[2].apply(this,arguments);
-}
-}
-}
-throw new Error("No match found");
-},unregister:function(name){
-for(var i=0;i<this.pairs.length;i++){
-var pair=this.pairs[i];
-if(pair[0]==name){
-this.pairs.splice(i,1);
-return true;
-}
-}
-return false;
-}});
-dojo.provide("dojo.lang.repr");
-dojo.lang.reprRegistry=new dojo.AdapterRegistry();
-dojo.lang.registerRepr=function(name,_942,wrap,_944){
-dojo.lang.reprRegistry.register(name,_942,wrap,_944);
-};
-dojo.lang.repr=function(obj){
-if(typeof (obj)=="undefined"){
-return "undefined";
-}else{
-if(obj===null){
-return "null";
-}
-}
-try{
-if(typeof (obj["__repr__"])=="function"){
-return obj["__repr__"]();
-}else{
-if((typeof (obj["repr"])=="function")&&(obj.repr!=arguments.callee)){
-return obj["repr"]();
-}
-}
-return dojo.lang.reprRegistry.match(obj);
-}
-catch(e){
-if(typeof (obj.NAME)=="string"&&(obj.toString==Function.prototype.toString||obj.toString==Object.prototype.toString)){
-return obj.NAME;
-}
-}
-if(typeof (obj)=="function"){
-obj=(obj+"").replace(/^\s+/,"");
-var idx=obj.indexOf("{");
-if(idx!=-1){
-obj=obj.substr(0,idx)+"{...}";
-}
-}
-return obj+"";
-};
-dojo.lang.reprArrayLike=function(arr){
-try{
-var na=dojo.lang.map(arr,dojo.lang.repr);
-return "["+na.join(", ")+"]";
-}
-catch(e){
-}
-};
-(function(){
-var m=dojo.lang;
-m.registerRepr("arrayLike",m.isArrayLike,m.reprArrayLike);
-m.registerRepr("string",m.isString,m.reprString);
-m.registerRepr("numbers",m.isNumber,m.reprNumber);
-m.registerRepr("boolean",m.isBoolean,m.reprNumber);
-})();
-dojo.provide("dojo.lang.*");
-dojo.provide("dojo.html.iframe");
-dojo.html.iframeContentWindow=function(_94a){
-var win=dojo.html.getDocumentWindow(dojo.html.iframeContentDocument(_94a))||dojo.html.iframeContentDocument(_94a).__parent__||(_94a.name&&document.frames[_94a.name])||null;
-return win;
-};
-dojo.html.iframeContentDocument=function(_94c){
-var doc=_94c.contentDocument||((_94c.contentWindow)&&(_94c.contentWindow.document))||((_94c.name)&&(document.frames[_94c.name])&&(document.frames[_94c.name].document))||null;
-return doc;
-};
-dojo.html.BackgroundIframe=function(node){
-if(dojo.render.html.ie55||dojo.render.html.ie60){
-var html="<iframe src='javascript:false'"+" style='position: absolute; left: 0px; top: 0px; width: 100%; height: 100%;"+"z-index: -1; filter:Alpha(Opacity=\"0\");' "+">";
-this.iframe=dojo.doc().createElement(html);
-this.iframe.tabIndex=-1;
-if(node){
-node.appendChild(this.iframe);
-this.domNode=node;
-}else{
-dojo.body().appendChild(this.iframe);
-this.iframe.style.display="none";
-}
-}
-};
-dojo.lang.extend(dojo.html.BackgroundIframe,{iframe:null,onResized:function(){
-if(this.iframe&&this.domNode&&this.domNode.parentNode){
-var _950=dojo.html.getMarginBox(this.domNode);
-if(_950.width==0||_950.height==0){
-dojo.lang.setTimeout(this,this.onResized,100);
-return;
-}
-this.iframe.style.width=_950.width+"px";
-this.iframe.style.height=_950.height+"px";
-}
-},size:function(node){
-if(!this.iframe){
-return;
-}
-var _952=dojo.html.toCoordinateObject(node,true,dojo.html.boxSizing.BORDER_BOX);
-with(this.iframe.style){
-width=_952.width+"px";
-height=_952.height+"px";
-left=_952.left+"px";
-top=_952.top+"px";
-}
-},setZIndex:function(node){
-if(!this.iframe){
-return;
-}
-if(dojo.dom.isNode(node)){
-this.iframe.style.zIndex=dojo.html.getStyle(node,"z-index")-1;
-}else{
-if(!isNaN(node)){
-this.iframe.style.zIndex=node;
-}
-}
-},show:function(){
-if(this.iframe){
-this.iframe.style.display="block";
-}
-},hide:function(){
-if(this.iframe){
-this.iframe.style.display="none";
-}
-},remove:function(){
-if(this.iframe){
-dojo.html.removeNode(this.iframe,true);
-delete this.iframe;
-this.iframe=null;
-}
-}});
-dojo.provide("dojo.widget.PopupContainer");
-dojo.declare("dojo.widget.PopupContainerBase",null,function(){
-this.queueOnAnimationFinish=[];
-},{isContainer:true,templateString:"<div dojoAttachPoint=\"containerNode\" style=\"display:none;position:absolute;\" class=\"dojoPopupContainer\" ></div>",isShowingNow:false,currentSubpopup:null,beginZIndex:1000,parentPopup:null,parent:null,popupIndex:0,aroundBox:dojo.html.boxSizing.BORDER_BOX,openedForWindow:null,processKey:function(evt){
-return false;
-},applyPopupBasicStyle:function(){
-with(this.domNode.style){
-display="none";
-position="absolute";
-}
-},aboutToShow:function(){
-},open:function(x,y,_957,_958,_959,_95a){
-if(this.isShowingNow){
-return;
-}
-if(this.animationInProgress){
-this.queueOnAnimationFinish.push(this.open,arguments);
-return;
-}
-this.aboutToShow();
-var _95b=false,node,_95d;
-if(typeof x=="object"){
-node=x;
-_95d=_958;
-_958=_957;
-_957=y;
-_95b=true;
-}
-this.parent=_957;
-dojo.body().appendChild(this.domNode);
-_958=_958||_957["domNode"]||[];
-var _95e=null;
-this.isTopLevel=true;
-while(_957){
-if(_957!==this&&(_957.setOpenedSubpopup!=undefined&&_957.applyPopupBasicStyle!=undefined)){
-_95e=_957;
-this.isTopLevel=false;
-_95e.setOpenedSubpopup(this);
-break;
-}
-_957=_957.parent;
-}
-this.parentPopup=_95e;
-this.popupIndex=_95e?_95e.popupIndex+1:1;
-if(this.isTopLevel){
-var _95f=dojo.html.isNode(_958)?_958:null;
-dojo.widget.PopupManager.opened(this,_95f);
-}
-if(this.isTopLevel&&!dojo.withGlobal(this.openedForWindow||dojo.global(),dojo.html.selection.isCollapsed)){
-this._bookmark=dojo.withGlobal(this.openedForWindow||dojo.global(),dojo.html.selection.getBookmark);
-}else{
-this._bookmark=null;
-}
-if(_958 instanceof Array){
-_958={left:_958[0],top:_958[1],width:0,height:0};
-}
-with(this.domNode.style){
-display="";
-zIndex=this.beginZIndex+this.popupIndex;
-}
-if(_95b){
-this.move(node,_95a,_95d);
-}else{
-this.move(x,y,_95a,_959);
-}
-this.domNode.style.display="none";
-this.explodeSrc=_958;
-this.show();
-this.isShowingNow=true;
-},move:function(x,y,_962,_963){
-var _964=(typeof x=="object");
-if(_964){
-var _965=_962;
-var node=x;
-_962=y;
-if(!_965){
-_965={"BL":"TL","TL":"BL"};
-}
-dojo.html.placeOnScreenAroundElement(this.domNode,node,_962,this.aroundBox,_965);
-}else{
-if(!_963){
-_963="TL,TR,BL,BR";
-}
-dojo.html.placeOnScreen(this.domNode,x,y,_962,true,_963);
-}
-},close:function(_967){
-if(_967){
-this.domNode.style.display="none";
-}
-if(this.animationInProgress){
-this.queueOnAnimationFinish.push(this.close,[]);
-return;
-}
-this.closeSubpopup(_967);
-this.hide();
-if(this.bgIframe){
-this.bgIframe.hide();
-this.bgIframe.size({left:0,top:0,width:0,height:0});
-}
-if(this.isTopLevel){
-dojo.widget.PopupManager.closed(this);
-}
-this.isShowingNow=false;
-if(this.parent){
-setTimeout(dojo.lang.hitch(this,function(){
-try{
-if(this.parent["focus"]){
-this.parent.focus();
-}else{
-this.parent.domNode.focus();
-}
-}
-catch(e){
-dojo.debug("No idea how to focus to parent",e);
-}
-}),10);
-}
-if(this._bookmark&&dojo.withGlobal(this.openedForWindow||dojo.global(),dojo.html.selection.isCollapsed)){
-if(this.openedForWindow){
-this.openedForWindow.focus();
-}
-try{
-dojo.withGlobal(this.openedForWindow||dojo.global(),"moveToBookmark",dojo.html.selection,[this._bookmark]);
-}
-catch(e){
-}
-}
-this._bookmark=null;
-},closeAll:function(_968){
-if(this.parentPopup){
-this.parentPopup.closeAll(_968);
-}else{
-this.close(_968);
-}
-},setOpenedSubpopup:function(_969){
-this.currentSubpopup=_969;
-},closeSubpopup:function(_96a){
-if(this.currentSubpopup==null){
-return;
-}
-this.currentSubpopup.close(_96a);
-this.currentSubpopup=null;
-},onShow:function(){
-dojo.widget.PopupContainer.superclass.onShow.apply(this,arguments);
-this.openedSize={w:this.domNode.style.width,h:this.domNode.style.height};
-if(dojo.render.html.ie){
-if(!this.bgIframe){
-this.bgIframe=new dojo.html.BackgroundIframe();
-this.bgIframe.setZIndex(this.domNode);
-}
-this.bgIframe.size(this.domNode);
-this.bgIframe.show();
-}
-this.processQueue();
-},processQueue:function(){
-if(!this.queueOnAnimationFinish.length){
-return;
-}
-var func=this.queueOnAnimationFinish.shift();
-var args=this.queueOnAnimationFinish.shift();
-func.apply(this,args);
-},onHide:function(){
-dojo.widget.HtmlWidget.prototype.onHide.call(this);
-if(this.openedSize){
-with(this.domNode.style){
-width=this.openedSize.w;
-height=this.openedSize.h;
-}
-}
-this.processQueue();
-}});
-dojo.widget.defineWidget("dojo.widget.PopupContainer",[dojo.widget.HtmlWidget,dojo.widget.PopupContainerBase],{});
-dojo.widget.PopupManager=new function(){
-this.currentMenu=null;
-this.currentButton=null;
-this.currentFocusMenu=null;
-this.focusNode=null;
-this.registeredWindows=[];
-this.registerWin=function(win){
-if(!win.__PopupManagerRegistered){
-dojo.event.connect(win.document,"onmousedown",this,"onClick");
-dojo.event.connect(win,"onscroll",this,"onClick");
-dojo.event.connect(win.document,"onkey",this,"onKey");
-win.__PopupManagerRegistered=true;
-this.registeredWindows.push(win);
-}
-};
-this.registerAllWindows=function(_96e){
-if(!_96e){
-_96e=dojo.html.getDocumentWindow(window.top&&window.top.document||window.document);
-}
-this.registerWin(_96e);
-for(var i=0;i<_96e.frames.length;i++){
-try{
-var win=dojo.html.getDocumentWindow(_96e.frames[i].document);
-if(win){
-this.registerAllWindows(win);
-}
-}
-catch(e){
-}
-}
-};
-this.unRegisterWin=function(win){
-if(win.__PopupManagerRegistered){
-dojo.event.disconnect(win.document,"onmousedown",this,"onClick");
-dojo.event.disconnect(win,"onscroll",this,"onClick");
-dojo.event.disconnect(win.document,"onkey",this,"onKey");
-win.__PopupManagerRegistered=false;
-}
-};
-this.unRegisterAllWindows=function(){
-for(var i=0;i<this.registeredWindows.length;++i){
-this.unRegisterWin(this.registeredWindows[i]);
-}
-this.registeredWindows=[];
-};
-dojo.addOnLoad(this,"registerAllWindows");
-dojo.addOnUnload(this,"unRegisterAllWindows");
-this.closed=function(menu){
-if(this.currentMenu==menu){
-this.currentMenu=null;
-this.currentButton=null;
-this.currentFocusMenu=null;
-}
-};
-this.opened=function(menu,_975){
-if(menu==this.currentMenu){
-return;
-}
-if(this.currentMenu){
-this.currentMenu.close();
-}
-this.currentMenu=menu;
-this.currentFocusMenu=menu;
-this.currentButton=_975;
-};
-this.setFocusedMenu=function(menu){
-this.currentFocusMenu=menu;
-};
-this.onKey=function(e){
-if(!e.key){
-return;
-}
-if(!this.currentMenu||!this.currentMenu.isShowingNow){
-return;
-}
-var m=this.currentFocusMenu;
-while(m){
-if(m.processKey(e)){
-e.preventDefault();
-e.stopPropagation();
-break;
-}
-m=m.parentPopup;
-}
-},this.onClick=function(e){
-if(!this.currentMenu){
-return;
-}
-var _97a=dojo.html.getScroll().offset;
-var m=this.currentMenu;
-while(m){
-if(dojo.html.overElement(m.domNode,e)||dojo.html.isDescendantOf(e.target,m.domNode)){
-return;
-}
-m=m.currentSubpopup;
-}
-if(this.currentButton&&dojo.html.overElement(this.currentButton,e)){
-return;
-}
-this.currentMenu.close();
-};
-};
-dojo.provide("dojo.widget.ColorPalette");
-dojo.widget.defineWidget("dojo.widget.ColorPalette",dojo.widget.HtmlWidget,{palette:"7x10",_palettes:{"7x10":[["fff","fcc","fc9","ff9","ffc","9f9","9ff","cff","ccf","fcf"],["ccc","f66","f96","ff6","ff3","6f9","3ff","6ff","99f","f9f"],["c0c0c0","f00","f90","fc6","ff0","3f3","6cc","3cf","66c","c6c"],["999","c00","f60","fc3","fc0","3c0","0cc","36f","63f","c3c"],["666","900","c60","c93","990","090","399","33f","60c","939"],["333","600","930","963","660","060","366","009","339","636"],["000","300","630","633","330","030","033","006","309","303"]],"3x4":[["ffffff","00ff00","008000","0000ff"],["c0c0c0","ffff00","ff00ff","000080"],["808080","ff0000","800080","000000"]]},buildRendering:function(){
-this.domNode=document.createElement("table");
-dojo.html.disableSelection(this.domNode);
-dojo.event.connect(this.domNode,"onmousedown",function(e){
-e.preventDefault();
-});
-with(this.domNode){
-cellPadding="0";
-cellSpacing="1";
-border="1";
-style.backgroundColor="white";
-}
-var _97d=this._palettes[this.palette];
-for(var i=0;i<_97d.length;i++){
-var tr=this.domNode.insertRow(-1);
-for(var j=0;j<_97d[i].length;j++){
-if(_97d[i][j].length==3){
-_97d[i][j]=_97d[i][j].replace(/(.)(.)(.)/,"$1$1$2$2$3$3");
-}
-var td=tr.insertCell(-1);
-with(td.style){
-backgroundColor="#"+_97d[i][j];
-border="1px solid gray";
-width=height="15px";
-fontSize="1px";
-}
-td.color="#"+_97d[i][j];
-td.onmouseover=function(e){
-this.style.borderColor="white";
-};
-td.onmouseout=function(e){
-this.style.borderColor="gray";
-};
-dojo.event.connect(td,"onmousedown",this,"onClick");
-td.innerHTML="&nbsp;";
-}
-}
-},onClick:function(e){
-this.onColorSelect(e.currentTarget.color);
-e.currentTarget.style.borderColor="gray";
-},onColorSelect:function(_985){
-}});
-dojo.provide("dojo.widget.ContentPane");
-dojo.widget.defineWidget("dojo.widget.ContentPane",dojo.widget.HtmlWidget,function(){
-this._styleNodes=[];
-this._onLoadStack=[];
-this._onUnloadStack=[];
-this._callOnUnload=false;
-this._ioBindObj;
-this.scriptScope;
-this.bindArgs={};
-},{isContainer:true,adjustPaths:true,href:"",extractContent:true,parseContent:true,cacheContent:true,preload:false,refreshOnShow:false,handler:"",executeScripts:false,scriptSeparation:true,loadingMessage:"Loading...",isLoaded:false,postCreate:function(args,frag,_988){
-if(this.handler!==""){
-this.setHandler(this.handler);
-}
-if(this.isShowing()||this.preload){
-this.loadContents();
-}
-},show:function(){
-if(this.refreshOnShow){
-this.refresh();
-}else{
-this.loadContents();
-}
-dojo.widget.ContentPane.superclass.show.call(this);
-},refresh:function(){
-this.isLoaded=false;
-this.loadContents();
-},loadContents:function(){
-if(this.isLoaded){
-return;
-}
-if(dojo.lang.isFunction(this.handler)){
-this._runHandler();
-}else{
-if(this.href!=""){
-this._downloadExternalContent(this.href,this.cacheContent&&!this.refreshOnShow);
-}
-}
-},setUrl:function(url){
-this.href=url;
-this.isLoaded=false;
-if(this.preload||this.isShowing()){
-this.loadContents();
-}
-},abort:function(){
-var bind=this._ioBindObj;
-if(!bind||!bind.abort){
-return;
-}
-bind.abort();
-delete this._ioBindObj;
-},_downloadExternalContent:function(url,_98c){
-this.abort();
-this._handleDefaults(this.loadingMessage,"onDownloadStart");
-var self=this;
-this._ioBindObj=dojo.io.bind(this._cacheSetting({url:url,mimetype:"text/html",handler:function(type,data,xhr){
-delete self._ioBindObj;
-if(type=="load"){
-self.onDownloadEnd.call(self,url,data);
-}else{
-var e={responseText:xhr.responseText,status:xhr.status,statusText:xhr.statusText,responseHeaders:xhr.getAllResponseHeaders(),text:"Error loading '"+url+"' ("+xhr.status+" "+xhr.statusText+")"};
-self._handleDefaults.call(self,e,"onDownloadError");
-self.onLoad();
-}
-}},_98c));
-},_cacheSetting:function(_992,_993){
-for(var x in this.bindArgs){
-if(dojo.lang.isUndefined(_992[x])){
-_992[x]=this.bindArgs[x];
-}
-}
-if(dojo.lang.isUndefined(_992.useCache)){
-_992.useCache=_993;
-}
-if(dojo.lang.isUndefined(_992.preventCache)){
-_992.preventCache=!_993;
-}
-if(dojo.lang.isUndefined(_992.mimetype)){
-_992.mimetype="text/html";
-}
-return _992;
-},onLoad:function(e){
-this._runStack("_onLoadStack");
-this.isLoaded=true;
-},onUnLoad:function(e){
-dojo.deprecated(this.widgetType+".onUnLoad, use .onUnload (lowercased load)",0.5);
-},onUnload:function(e){
-this._runStack("_onUnloadStack");
-delete this.scriptScope;
-if(this.onUnLoad!==dojo.widget.ContentPane.prototype.onUnLoad){
-this.onUnLoad.apply(this,arguments);
-}
-},_runStack:function(_998){
-var st=this[_998];
-var err="";
-var _99b=this.scriptScope||window;
-for(var i=0;i<st.length;i++){
-try{
-st[i].call(_99b);
-}
-catch(e){
-err+="\n"+st[i]+" failed: "+e.description;
-}
-}
-this[_998]=[];
-if(err.length){
-var name=(_998=="_onLoadStack")?"addOnLoad":"addOnUnLoad";
-this._handleDefaults(name+" failure\n "+err,"onExecError","debug");
-}
-},addOnLoad:function(obj,func){
-this._pushOnStack(this._onLoadStack,obj,func);
-},addOnUnload:function(obj,func){
-this._pushOnStack(this._onUnloadStack,obj,func);
-},addOnUnLoad:function(){
-dojo.deprecated(this.widgetType+".addOnUnLoad, use addOnUnload instead. (lowercased Load)",0.5);
-this.addOnUnload.apply(this,arguments);
-},_pushOnStack:function(_9a2,obj,func){
-if(typeof func=="undefined"){
-_9a2.push(obj);
-}else{
-_9a2.push(function(){
-obj[func]();
-});
-}
-},destroy:function(){
-this.onUnload();
-dojo.widget.ContentPane.superclass.destroy.call(this);
-},onExecError:function(e){
-},onContentError:function(e){
-},onDownloadError:function(e){
-},onDownloadStart:function(e){
-},onDownloadEnd:function(url,data){
-data=this.splitAndFixPaths(data,url);
-this.setContent(data);
-},_handleDefaults:function(e,_9ac,_9ad){
-if(!_9ac){
-_9ac="onContentError";
-}
-if(dojo.lang.isString(e)){
-e={text:e};
-}
-if(!e.text){
-e.text=e.toString();
-}
-e.toString=function(){
-return this.text;
-};
-if(typeof e.returnValue!="boolean"){
-e.returnValue=true;
-}
-if(typeof e.preventDefault!="function"){
-e.preventDefault=function(){
-this.returnValue=false;
-};
-}
-this[_9ac](e);
-if(e.returnValue){
-switch(_9ad){
-case true:
-case "alert":
-alert(e.toString());
-break;
-case "debug":
-dojo.debug(e.toString());
-break;
-default:
-if(this._callOnUnload){
-this.onUnload();
-}
-this._callOnUnload=false;
-if(arguments.callee._loopStop){
-dojo.debug(e.toString());
-}else{
-arguments.callee._loopStop=true;
-this._setContent(e.toString());
-}
-}
-}
-arguments.callee._loopStop=false;
-},splitAndFixPaths:function(s,url){
-var _9b0=[],_9b1=[],tmp=[];
-var _9b3=[],_9b4=[],attr=[],_9b6=[];
-var str="",path="",fix="",_9ba="",tag="",_9bc="";
-if(!url){
-url="./";
-}
-if(s){
-var _9bd=/<title[^>]*>([\s\S]*?)<\/title>/i;
-while(_9b3=_9bd.exec(s)){
-_9b0.push(_9b3[1]);
-s=s.substring(0,_9b3.index)+s.substr(_9b3.index+_9b3[0].length);
-}
-if(this.adjustPaths){
-var _9be=/<[a-z][a-z0-9]*[^>]*\s(?:(?:src|href|style)=[^>])+[^>]*>/i;
-var _9bf=/\s(src|href|style)=(['"]?)([\w()\[\]\/.,\\'"-:;#=&?\s@]+?)\2/i;
-var _9c0=/^(?:[#]|(?:(?:https?|ftps?|file|javascript|mailto|news):))/;
-while(tag=_9be.exec(s)){
-str+=s.substring(0,tag.index);
-s=s.substring((tag.index+tag[0].length),s.length);
-tag=tag[0];
-_9ba="";
-while(attr=_9bf.exec(tag)){
-path="";
-_9bc=attr[3];
-switch(attr[1].toLowerCase()){
-case "src":
-case "href":
-if(_9c0.exec(_9bc)){
-path=_9bc;
-}else{
-path=(new dojo.uri.Uri(url,_9bc).toString());
-}
-break;
-case "style":
-path=dojo.html.fixPathsInCssText(_9bc,url);
-break;
-default:
-path=_9bc;
-}
-fix=" "+attr[1]+"="+attr[2]+path+attr[2];
-_9ba+=tag.substring(0,attr.index)+fix;
-tag=tag.substring((attr.index+attr[0].length),tag.length);
-}
-str+=_9ba+tag;
-}
-s=str+s;
-}
-_9bd=/(?:<(style)[^>]*>([\s\S]*?)<\/style>|<link ([^>]*rel=['"]?stylesheet['"]?[^>]*)>)/i;
-while(_9b3=_9bd.exec(s)){
-if(_9b3[1]&&_9b3[1].toLowerCase()=="style"){
-_9b6.push(dojo.html.fixPathsInCssText(_9b3[2],url));
-}else{
-if(attr=_9b3[3].match(/href=(['"]?)([^'">]*)\1/i)){
-_9b6.push({path:attr[2]});
-}
-}
-s=s.substring(0,_9b3.index)+s.substr(_9b3.index+_9b3[0].length);
-}
-var _9bd=/<script([^>]*)>([\s\S]*?)<\/script>/i;
-var _9c1=/src=(['"]?)([^"']*)\1/i;
-var _9c2=/.*(\bdojo\b\.js(?:\.uncompressed\.js)?)$/;
-var _9c3=/(?:var )?\bdjConfig\b(?:[\s]*=[\s]*\{[^}]+\}|\.[\w]*[\s]*=[\s]*[^;\n]*)?;?|dojo\.hostenv\.writeIncludes\(\s*\);?/g;
-var _9c4=/dojo\.(?:(?:require(?:After)?(?:If)?)|(?:widget\.(?:manager\.)?registerWidgetPackage)|(?:(?:hostenv\.)?setModulePrefix|registerModulePath)|defineNamespace)\((['"]).*?\1\)\s*;?/;
-while(_9b3=_9bd.exec(s)){
-if(this.executeScripts&&_9b3[1]){
-if(attr=_9c1.exec(_9b3[1])){
-if(_9c2.exec(attr[2])){
-dojo.debug("Security note! inhibit:"+attr[2]+" from  being loaded again.");
-}else{
-_9b1.push({path:attr[2]});
-}
-}
-}
-if(_9b3[2]){
-var sc=_9b3[2].replace(_9c3,"");
-if(!sc){
-continue;
-}
-while(tmp=_9c4.exec(sc)){
-_9b4.push(tmp[0]);
-sc=sc.substring(0,tmp.index)+sc.substr(tmp.index+tmp[0].length);
-}
-if(this.executeScripts){
-_9b1.push(sc);
-}
-}
-s=s.substr(0,_9b3.index)+s.substr(_9b3.index+_9b3[0].length);
-}
-if(this.extractContent){
-_9b3=s.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-if(_9b3){
-s=_9b3[1];
-}
-}
-if(this.executeScripts&&this.scriptSeparation){
-var _9bd=/(<[a-zA-Z][a-zA-Z0-9]*\s[^>]*?\S=)((['"])[^>]*scriptScope[^>]*>)/;
-var _9c6=/([\s'";:\(])scriptScope(.*)/;
-str="";
-while(tag=_9bd.exec(s)){
-tmp=((tag[3]=="'")?"\"":"'");
-fix="";
-str+=s.substring(0,tag.index)+tag[1];
-while(attr=_9c6.exec(tag[2])){
-tag[2]=tag[2].substring(0,attr.index)+attr[1]+"dojo.widget.byId("+tmp+this.widgetId+tmp+").scriptScope"+attr[2];
-}
-str+=tag[2];
-s=s.substr(tag.index+tag[0].length);
-}
-s=str+s;
-}
-}
-return {"xml":s,"styles":_9b6,"titles":_9b0,"requires":_9b4,"scripts":_9b1,"url":url};
-},_setContent:function(cont){
-this.destroyChildren();
-for(var i=0;i<this._styleNodes.length;i++){
-if(this._styleNodes[i]&&this._styleNodes[i].parentNode){
-this._styleNodes[i].parentNode.removeChild(this._styleNodes[i]);
-}
-}
-this._styleNodes=[];
-try{
-var node=this.containerNode||this.domNode;
-while(node.firstChild){
-dojo.html.destroyNode(node.firstChild);
-}
-if(typeof cont!="string"){
-node.appendChild(cont);
-}else{
-node.innerHTML=cont;
-}
-}
-catch(e){
-e.text="Couldn't load content:"+e.description;
-this._handleDefaults(e,"onContentError");
-}
-},setContent:function(data){
-this.abort();
-if(this._callOnUnload){
-this.onUnload();
-}
-this._callOnUnload=true;
-if(!data||dojo.html.isNode(data)){
-this._setContent(data);
-this.onResized();
-this.onLoad();
-}else{
-if(typeof data.xml!="string"){
-this.href="";
-data=this.splitAndFixPaths(data);
-}
-this._setContent(data.xml);
-for(var i=0;i<data.styles.length;i++){
-if(data.styles[i].path){
-this._styleNodes.push(dojo.html.insertCssFile(data.styles[i].path,dojo.doc(),false,true));
-}else{
-this._styleNodes.push(dojo.html.insertCssText(data.styles[i]));
-}
-}
-if(this.parseContent){
-for(var i=0;i<data.requires.length;i++){
-try{
-eval(data.requires[i]);
-}
-catch(e){
-e.text="ContentPane: error in package loading calls, "+(e.description||e);
-this._handleDefaults(e,"onContentError","debug");
-}
-}
-}
-var _9cc=this;
-function asyncParse(){
-if(_9cc.executeScripts){
-_9cc._executeScripts(data.scripts);
-}
-if(_9cc.parseContent){
-var node=_9cc.containerNode||_9cc.domNode;
-var _9ce=new dojo.xml.Parse();
-var frag=_9ce.parseElement(node,null,true);
-dojo.widget.getParser().createSubComponents(frag,_9cc);
-}
-_9cc.onResized();
-_9cc.onLoad();
-}
-if(dojo.hostenv.isXDomain&&data.requires.length){
-dojo.addOnLoad(asyncParse);
-}else{
-asyncParse();
-}
-}
-},setHandler:function(_9d0){
-var fcn=dojo.lang.isFunction(_9d0)?_9d0:window[_9d0];
-if(!dojo.lang.isFunction(fcn)){
-this._handleDefaults("Unable to set handler, '"+_9d0+"' not a function.","onExecError",true);
-return;
-}
-this.handler=function(){
-return fcn.apply(this,arguments);
-};
-},_runHandler:function(){
-var ret=true;
-if(dojo.lang.isFunction(this.handler)){
-this.handler(this,this.domNode);
-ret=false;
-}
-this.onLoad();
-return ret;
-},_executeScripts:function(_9d3){
-var self=this;
-var tmp="",code="";
-for(var i=0;i<_9d3.length;i++){
-if(_9d3[i].path){
-dojo.io.bind(this._cacheSetting({"url":_9d3[i].path,"load":function(type,_9d9){
-dojo.lang.hitch(self,tmp=";"+_9d9);
-},"error":function(type,_9db){
-_9db.text=type+" downloading remote script";
-self._handleDefaults.call(self,_9db,"onExecError","debug");
-},"mimetype":"text/plain","sync":true},this.cacheContent));
-code+=tmp;
-}else{
-code+=_9d3[i];
-}
-}
-try{
-if(this.scriptSeparation){
-delete this.scriptScope;
-this.scriptScope=new (new Function("_container_",code+"; return this;"))(self);
-}else{
-var djg=dojo.global();
-if(djg.execScript){
-djg.execScript(code);
-}else{
-var djd=dojo.doc();
-var sc=djd.createElement("script");
-sc.appendChild(djd.createTextNode(code));
-(this.containerNode||this.domNode).appendChild(sc);
-}
-}
-}
-catch(e){
-e.text="Error running scripts from content:\n"+e.description;
-this._handleDefaults(e,"onExecError","debug");
-}
-}});
-dojo.provide("dojo.widget.Editor2Toolbar");
-dojo.lang.declare("dojo.widget.HandlerManager",null,function(){
-this._registeredHandlers=[];
-},{registerHandler:function(obj,func){
-if(arguments.length==2){
-this._registeredHandlers.push(function(){
-return obj[func].apply(obj,arguments);
-});
-}else{
-this._registeredHandlers.push(obj);
-}
-},removeHandler:function(func){
-for(var i=0;i<this._registeredHandlers.length;i++){
-if(func===this._registeredHandlers[i]){
-delete this._registeredHandlers[i];
-return;
-}
-}
-dojo.debug("HandlerManager handler "+func+" is not registered, can not remove.");
-},destroy:function(){
-for(var i=0;i<this._registeredHandlers.length;i++){
-delete this._registeredHandlers[i];
-}
-}});
-dojo.widget.Editor2ToolbarItemManager=new dojo.widget.HandlerManager;
-dojo.lang.mixin(dojo.widget.Editor2ToolbarItemManager,{getToolbarItem:function(name){
-var item;
-name=name.toLowerCase();
-for(var i=0;i<this._registeredHandlers.length;i++){
-item=this._registeredHandlers[i](name);
-if(item){
-return item;
-}
-}
-switch(name){
-case "bold":
-case "copy":
-case "cut":
-case "delete":
-case "indent":
-case "inserthorizontalrule":
-case "insertorderedlist":
-case "insertunorderedlist":
-case "italic":
-case "justifycenter":
-case "justifyfull":
-case "justifyleft":
-case "justifyright":
-case "outdent":
-case "paste":
-case "redo":
-case "removeformat":
-case "selectall":
-case "strikethrough":
-case "subscript":
-case "superscript":
-case "underline":
-case "undo":
-case "unlink":
-case "createlink":
-case "insertimage":
-case "htmltoggle":
-item=new dojo.widget.Editor2ToolbarButton(name);
-break;
-case "forecolor":
-case "hilitecolor":
-item=new dojo.widget.Editor2ToolbarColorPaletteButton(name);
-break;
-case "plainformatblock":
-item=new dojo.widget.Editor2ToolbarFormatBlockPlainSelect("formatblock");
-break;
-case "formatblock":
-item=new dojo.widget.Editor2ToolbarFormatBlockSelect("formatblock");
-break;
-case "fontsize":
-item=new dojo.widget.Editor2ToolbarFontSizeSelect("fontsize");
-break;
-case "fontname":
-item=new dojo.widget.Editor2ToolbarFontNameSelect("fontname");
-break;
-case "inserttable":
-case "insertcell":
-case "insertcol":
-case "insertrow":
-case "deletecells":
-case "deletecols":
-case "deleterows":
-case "mergecells":
-case "splitcell":
-dojo.debug(name+" is implemented in dojo.widget.Editor2Plugin.TableOperation, please require it first.");
-break;
-case "inserthtml":
-case "blockdirltr":
-case "blockdirrtl":
-case "dirltr":
-case "dirrtl":
-case "inlinedirltr":
-case "inlinedirrtl":
-dojo.debug("Not yet implemented toolbar item: "+name);
-break;
-default:
-dojo.debug("dojo.widget.Editor2ToolbarItemManager.getToolbarItem: Unknown toolbar item: "+name);
-}
-return item;
-}});
-dojo.addOnUnload(dojo.widget.Editor2ToolbarItemManager,"destroy");
-dojo.declare("dojo.widget.Editor2ToolbarButton",null,function(name){
-this._name=name;
-},{create:function(node,_9e9,_9ea){
-this._domNode=node;
-var cmd=_9e9.parent.getCommand(this._name);
-if(cmd){
-this._domNode.title=cmd.getText();
-}
-this.disableSelection(this._domNode);
-this._parentToolbar=_9e9;
-dojo.event.connect(this._domNode,"onclick",this,"onClick");
-if(!_9ea){
-dojo.event.connect(this._domNode,"onmouseover",this,"onMouseOver");
-dojo.event.connect(this._domNode,"onmouseout",this,"onMouseOut");
-}
-},disableSelection:function(_9ec){
-dojo.html.disableSelection(_9ec);
-var _9ed=_9ec.all||_9ec.getElementsByTagName("*");
-for(var x=0;x<_9ed.length;x++){
-dojo.html.disableSelection(_9ed[x]);
-}
-},onMouseOver:function(){
-var _9ef=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_9ef){
-var _9f0=_9ef.getCommand(this._name);
-if(_9f0&&_9f0.getState()!=dojo.widget.Editor2Manager.commandState.Disabled){
-this.highlightToolbarItem();
-}
-}
-},onMouseOut:function(){
-this.unhighlightToolbarItem();
-},destroy:function(){
-this._domNode=null;
-this._parentToolbar=null;
-},onClick:function(e){
-if(this._domNode&&!this._domNode.disabled&&this._parentToolbar.checkAvailability()){
-e.preventDefault();
-e.stopPropagation();
-var _9f2=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_9f2){
-var _9f3=_9f2.getCommand(this._name);
-if(_9f3){
-_9f3.execute();
-}
-}
-}
-},refreshState:function(){
-var _9f4=dojo.widget.Editor2Manager.getCurrentInstance();
-var em=dojo.widget.Editor2Manager;
-if(_9f4){
-var _9f6=_9f4.getCommand(this._name);
-if(_9f6){
-var _9f7=_9f6.getState();
-if(_9f7!=this._lastState){
-switch(_9f7){
-case em.commandState.Latched:
-this.latchToolbarItem();
-break;
-case em.commandState.Enabled:
-this.enableToolbarItem();
-break;
-case em.commandState.Disabled:
-default:
-this.disableToolbarItem();
-}
-this._lastState=_9f7;
-}
-}
-}
-return em.commandState.Enabled;
-},latchToolbarItem:function(){
-this._domNode.disabled=false;
-this.removeToolbarItemStyle(this._domNode);
-dojo.html.addClass(this._domNode,this._parentToolbar.ToolbarLatchedItemStyle);
-},enableToolbarItem:function(){
-this._domNode.disabled=false;
-this.removeToolbarItemStyle(this._domNode);
-dojo.html.addClass(this._domNode,this._parentToolbar.ToolbarEnabledItemStyle);
-},disableToolbarItem:function(){
-this._domNode.disabled=true;
-this.removeToolbarItemStyle(this._domNode);
-dojo.html.addClass(this._domNode,this._parentToolbar.ToolbarDisabledItemStyle);
-},highlightToolbarItem:function(){
-dojo.html.addClass(this._domNode,this._parentToolbar.ToolbarHighlightedItemStyle);
-},unhighlightToolbarItem:function(){
-dojo.html.removeClass(this._domNode,this._parentToolbar.ToolbarHighlightedItemStyle);
-},removeToolbarItemStyle:function(){
-dojo.html.removeClass(this._domNode,this._parentToolbar.ToolbarEnabledItemStyle);
-dojo.html.removeClass(this._domNode,this._parentToolbar.ToolbarLatchedItemStyle);
-dojo.html.removeClass(this._domNode,this._parentToolbar.ToolbarDisabledItemStyle);
-this.unhighlightToolbarItem();
-}});
-dojo.declare("dojo.widget.Editor2ToolbarDropDownButton",dojo.widget.Editor2ToolbarButton,{onClick:function(){
-if(this._domNode&&!this._domNode.disabled&&this._parentToolbar.checkAvailability()){
-if(!this._dropdown){
-this._dropdown=dojo.widget.createWidget("PopupContainer",{});
-this._domNode.appendChild(this._dropdown.domNode);
-}
-if(this._dropdown.isShowingNow){
-this._dropdown.close();
-}else{
-this.onDropDownShown();
-this._dropdown.open(this._domNode,null,this._domNode);
-}
-}
-},destroy:function(){
-this.onDropDownDestroy();
-if(this._dropdown){
-this._dropdown.destroy();
-}
-dojo.widget.Editor2ToolbarDropDownButton.superclass.destroy.call(this);
-},onDropDownShown:function(){
-},onDropDownDestroy:function(){
-}});
-dojo.declare("dojo.widget.Editor2ToolbarColorPaletteButton",dojo.widget.Editor2ToolbarDropDownButton,{onDropDownShown:function(){
-if(!this._colorpalette){
-this._colorpalette=dojo.widget.createWidget("ColorPalette",{});
-this._dropdown.addChild(this._colorpalette);
-this.disableSelection(this._dropdown.domNode);
-this.disableSelection(this._colorpalette.domNode);
-dojo.event.connect(this._colorpalette,"onColorSelect",this,"setColor");
-dojo.event.connect(this._dropdown,"open",this,"latchToolbarItem");
-dojo.event.connect(this._dropdown,"close",this,"enableToolbarItem");
-}
-},setColor:function(_9f8){
-this._dropdown.close();
-var _9f9=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_9f9){
-var _9fa=_9f9.getCommand(this._name);
-if(_9fa){
-_9fa.execute(_9f8);
-}
-}
-}});
-dojo.declare("dojo.widget.Editor2ToolbarFormatBlockPlainSelect",dojo.widget.Editor2ToolbarButton,{create:function(node,_9fc){
-this._domNode=node;
-this._parentToolbar=_9fc;
-this._domNode=node;
-this.disableSelection(this._domNode);
-dojo.event.connect(this._domNode,"onchange",this,"onChange");
-},destroy:function(){
-this._domNode=null;
-},onChange:function(){
-if(this._parentToolbar.checkAvailability()){
-var sv=this._domNode.value.toLowerCase();
-var _9fe=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_9fe){
-var _9ff=_9fe.getCommand(this._name);
-if(_9ff){
-_9ff.execute(sv);
-}
-}
-}
-},refreshState:function(){
-if(this._domNode){
-dojo.widget.Editor2ToolbarFormatBlockPlainSelect.superclass.refreshState.call(this);
-var _a00=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_a00){
-var _a01=_a00.getCommand(this._name);
-if(_a01){
-var _a02=_a01.getValue();
-if(!_a02){
-_a02="";
-}
-dojo.lang.forEach(this._domNode.options,function(item){
-if(item.value.toLowerCase()==_a02.toLowerCase()){
-item.selected=true;
-}
-});
-}
-}
-}
-}});
-dojo.declare("dojo.widget.Editor2ToolbarComboItem",dojo.widget.Editor2ToolbarDropDownButton,{href:null,create:function(node,_a05){
-dojo.widget.Editor2ToolbarComboItem.superclass.create.apply(this,arguments);
-if(!this._contentPane){
-dojo.require("dojo.widget.ContentPane");
-this._contentPane=dojo.widget.createWidget("ContentPane",{preload:"true"});
-this._contentPane.addOnLoad(this,"setup");
-this._contentPane.setUrl(this.href);
-}
-},onMouseOver:function(e){
-if(this._lastState!=dojo.widget.Editor2Manager.commandState.Disabled){
-dojo.html.addClass(e.currentTarget,this._parentToolbar.ToolbarHighlightedSelectStyle);
-}
-},onMouseOut:function(e){
-dojo.html.removeClass(e.currentTarget,this._parentToolbar.ToolbarHighlightedSelectStyle);
-},onDropDownShown:function(){
-if(!this._dropdown.__addedContentPage){
-this._dropdown.addChild(this._contentPane);
-this._dropdown.__addedContentPage=true;
-}
-},setup:function(){
-},onChange:function(e){
-if(this._parentToolbar.checkAvailability()){
-var name=e.currentTarget.getAttribute("dropDownItemName");
-var _a0a=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_a0a){
-var _a0b=_a0a.getCommand(this._name);
-if(_a0b){
-_a0b.execute(name);
-}
-}
-}
-this._dropdown.close();
-},onMouseOverItem:function(e){
-dojo.html.addClass(e.currentTarget,this._parentToolbar.ToolbarHighlightedSelectItemStyle);
-},onMouseOutItem:function(e){
-dojo.html.removeClass(e.currentTarget,this._parentToolbar.ToolbarHighlightedSelectItemStyle);
-}});
-dojo.declare("dojo.widget.Editor2ToolbarFormatBlockSelect",dojo.widget.Editor2ToolbarComboItem,{href:dojo.uri.dojoUri("src/widget/templates/Editor2/EditorToolbar_FormatBlock.html"),setup:function(){
-dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.setup.call(this);
-var _a0e=this._contentPane.domNode.all||this._contentPane.domNode.getElementsByTagName("*");
-this._blockNames={};
-this._blockDisplayNames={};
-for(var x=0;x<_a0e.length;x++){
-var node=_a0e[x];
-dojo.html.disableSelection(node);
-var name=node.getAttribute("dropDownItemName");
-if(name){
-this._blockNames[name]=node;
-var _a12=node.getElementsByTagName(name);
-this._blockDisplayNames[name]=_a12[_a12.length-1].innerHTML;
-}
-}
-for(var name in this._blockNames){
-dojo.event.connect(this._blockNames[name],"onclick",this,"onChange");
-dojo.event.connect(this._blockNames[name],"onmouseover",this,"onMouseOverItem");
-dojo.event.connect(this._blockNames[name],"onmouseout",this,"onMouseOutItem");
-}
-},onDropDownDestroy:function(){
-if(this._blockNames){
-for(var name in this._blockNames){
-delete this._blockNames[name];
-delete this._blockDisplayNames[name];
-}
-}
-},refreshState:function(){
-dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.refreshState.call(this);
-if(this._lastState!=dojo.widget.Editor2Manager.commandState.Disabled){
-var _a14=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_a14){
-var _a15=_a14.getCommand(this._name);
-if(_a15){
-var _a16=_a15.getValue();
-if(_a16==this._lastSelectedFormat&&this._blockDisplayNames){
-return this._lastState;
-}
-this._lastSelectedFormat=_a16;
-var _a17=this._domNode.getElementsByTagName("label")[0];
-var _a18=false;
-if(this._blockDisplayNames){
-for(var name in this._blockDisplayNames){
-if(name==_a16){
-_a17.innerHTML=this._blockDisplayNames[name];
-_a18=true;
-break;
-}
-}
-if(!_a18){
-_a17.innerHTML="&nbsp;";
-}
-}
-}
-}
-}
-return this._lastState;
-}});
-dojo.declare("dojo.widget.Editor2ToolbarFontSizeSelect",dojo.widget.Editor2ToolbarComboItem,{href:dojo.uri.dojoUri("src/widget/templates/Editor2/EditorToolbar_FontSize.html"),setup:function(){
-dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.setup.call(this);
-var _a1a=this._contentPane.domNode.all||this._contentPane.domNode.getElementsByTagName("*");
-this._fontsizes={};
-this._fontSizeDisplayNames={};
-for(var x=0;x<_a1a.length;x++){
-var node=_a1a[x];
-dojo.html.disableSelection(node);
-var name=node.getAttribute("dropDownItemName");
-if(name){
-this._fontsizes[name]=node;
-this._fontSizeDisplayNames[name]=node.getElementsByTagName("font")[0].innerHTML;
-}
-}
-for(var name in this._fontsizes){
-dojo.event.connect(this._fontsizes[name],"onclick",this,"onChange");
-dojo.event.connect(this._fontsizes[name],"onmouseover",this,"onMouseOverItem");
-dojo.event.connect(this._fontsizes[name],"onmouseout",this,"onMouseOutItem");
-}
-},onDropDownDestroy:function(){
-if(this._fontsizes){
-for(var name in this._fontsizes){
-delete this._fontsizes[name];
-delete this._fontSizeDisplayNames[name];
-}
-}
-},refreshState:function(){
-dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.refreshState.call(this);
-if(this._lastState!=dojo.widget.Editor2Manager.commandState.Disabled){
-var _a1f=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_a1f){
-var _a20=_a1f.getCommand(this._name);
-if(_a20){
-var size=_a20.getValue();
-if(size==this._lastSelectedSize&&this._fontSizeDisplayNames){
-return this._lastState;
-}
-this._lastSelectedSize=size;
-var _a22=this._domNode.getElementsByTagName("label")[0];
-var _a23=false;
-if(this._fontSizeDisplayNames){
-for(var name in this._fontSizeDisplayNames){
-if(name==size){
-_a22.innerHTML=this._fontSizeDisplayNames[name];
-_a23=true;
-break;
-}
-}
-if(!_a23){
-_a22.innerHTML="&nbsp;";
-}
-}
-}
-}
-}
-return this._lastState;
-}});
-dojo.declare("dojo.widget.Editor2ToolbarFontNameSelect",dojo.widget.Editor2ToolbarFontSizeSelect,{href:dojo.uri.dojoUri("src/widget/templates/Editor2/EditorToolbar_FontName.html")});
-dojo.widget.defineWidget("dojo.widget.Editor2Toolbar",dojo.widget.HtmlWidget,function(){
-dojo.event.connect(this,"fillInTemplate",dojo.lang.hitch(this,function(){
-if(dojo.render.html.ie){
-this.domNode.style.zoom=1;
-}
-}));
-},{templatePath:dojo.uri.dojoUri("src/widget/templates/EditorToolbar.html"),templateCssPath:dojo.uri.dojoUri("src/widget/templates/EditorToolbar.css"),ToolbarLatchedItemStyle:"ToolbarButtonLatched",ToolbarEnabledItemStyle:"ToolbarButtonEnabled",ToolbarDisabledItemStyle:"ToolbarButtonDisabled",ToolbarHighlightedItemStyle:"ToolbarButtonHighlighted",ToolbarHighlightedSelectStyle:"ToolbarSelectHighlighted",ToolbarHighlightedSelectItemStyle:"ToolbarSelectHighlightedItem",postCreate:function(){
-var _a25=dojo.html.getElementsByClass("dojoEditorToolbarItem",this.domNode);
-this.items={};
-for(var x=0;x<_a25.length;x++){
-var node=_a25[x];
-var _a28=node.getAttribute("dojoETItemName");
-if(_a28){
-var item=dojo.widget.Editor2ToolbarItemManager.getToolbarItem(_a28);
-if(item){
-item.create(node,this);
-this.items[_a28.toLowerCase()]=item;
-}else{
-node.style.display="none";
-}
-}
-}
-},update:function(){
-for(var cmd in this.items){
-this.items[cmd].refreshState();
-}
-},shareGroup:"",checkAvailability:function(){
-if(!this.shareGroup){
-this.parent.focus();
-return true;
-}
-var _a2b=dojo.widget.Editor2Manager.getCurrentInstance();
-if(this.shareGroup==_a2b.toolbarGroup){
-return true;
-}
-return false;
-},destroy:function(){
-for(var it in this.items){
-this.items[it].destroy();
-delete this.items[it];
-}
-dojo.widget.Editor2Toolbar.superclass.destroy.call(this);
-}});
-dojo.provide("dojo.lfx.shadow");
-dojo.lfx.shadow=function(node){
-this.shadowPng=dojo.uri.dojoUri("src/html/images/shadow");
-this.shadowThickness=8;
-this.shadowOffset=15;
-this.init(node);
-};
-dojo.extend(dojo.lfx.shadow,{init:function(node){
-this.node=node;
-this.pieces={};
-var x1=-1*this.shadowThickness;
-var y0=this.shadowOffset;
-var y1=this.shadowOffset+this.shadowThickness;
-this._makePiece("tl","top",y0,"left",x1);
-this._makePiece("l","top",y1,"left",x1,"scale");
-this._makePiece("tr","top",y0,"left",0);
-this._makePiece("r","top",y1,"left",0,"scale");
-this._makePiece("bl","top",0,"left",x1);
-this._makePiece("b","top",0,"left",0,"crop");
-this._makePiece("br","top",0,"left",0);
-},_makePiece:function(name,_a33,_a34,_a35,_a36,_a37){
-var img;
-var url=this.shadowPng+name.toUpperCase()+".png";
-if(dojo.render.html.ie55||dojo.render.html.ie60){
-img=dojo.doc().createElement("div");
-img.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+url+"'"+(_a37?", sizingMethod='"+_a37+"'":"")+")";
-}else{
-img=dojo.doc().createElement("img");
-img.src=url;
-}
-img.style.position="absolute";
-img.style[_a33]=_a34+"px";
-img.style[_a35]=_a36+"px";
-img.style.width=this.shadowThickness+"px";
-img.style.height=this.shadowThickness+"px";
-this.pieces[name]=img;
-this.node.appendChild(img);
-},size:function(_a3a,_a3b){
-var _a3c=_a3b-(this.shadowOffset+this.shadowThickness+1);
-if(_a3c<0){
-_a3c=0;
-}
-if(_a3b<1){
-_a3b=1;
-}
-if(_a3a<1){
-_a3a=1;
-}
-with(this.pieces){
-l.style.height=_a3c+"px";
-r.style.height=_a3c+"px";
-b.style.width=(_a3a-1)+"px";
-bl.style.top=(_a3b-1)+"px";
-b.style.top=(_a3b-1)+"px";
-br.style.top=(_a3b-1)+"px";
-tr.style.left=(_a3a-1)+"px";
-r.style.left=(_a3a-1)+"px";
-br.style.left=(_a3a-1)+"px";
-}
-}});
-dojo.provide("dojo.widget.html.layout");
-dojo.widget.html.layout=function(_a3d,_a3e,_a3f){
-dojo.html.addClass(_a3d,"dojoLayoutContainer");
-_a3e=dojo.lang.filter(_a3e,function(_a40,idx){
-_a40.idx=idx;
-return dojo.lang.inArray(["top","bottom","left","right","client","flood"],_a40.layoutAlign);
-});
-if(_a3f&&_a3f!="none"){
-var rank=function(_a43){
-switch(_a43.layoutAlign){
-case "flood":
-return 1;
-case "left":
-case "right":
-return (_a3f=="left-right")?2:3;
-case "top":
-case "bottom":
-return (_a3f=="left-right")?3:2;
-default:
-return 4;
-}
-};
-_a3e.sort(function(a,b){
-return (rank(a)-rank(b))||(a.idx-b.idx);
-});
-}
-var f={top:dojo.html.getPixelValue(_a3d,"padding-top",true),left:dojo.html.getPixelValue(_a3d,"padding-left",true)};
-dojo.lang.mixin(f,dojo.html.getContentBox(_a3d));
-dojo.lang.forEach(_a3e,function(_a47){
-var elm=_a47.domNode;
-var pos=_a47.layoutAlign;
-with(elm.style){
-left=f.left+"px";
-top=f.top+"px";
-bottom="auto";
-right="auto";
-}
-dojo.html.addClass(elm,"dojoAlign"+dojo.string.capitalize(pos));
-if((pos=="top")||(pos=="bottom")){
-dojo.html.setMarginBox(elm,{width:f.width});
-var h=dojo.html.getMarginBox(elm).height;
-f.height-=h;
-if(pos=="top"){
-f.top+=h;
-}else{
-elm.style.top=f.top+f.height+"px";
-}
-if(_a47.onResized){
-_a47.onResized();
-}
-}else{
-if(pos=="left"||pos=="right"){
-var w=dojo.html.getMarginBox(elm).width;
-if(_a47.resizeTo){
-_a47.resizeTo(w,f.height);
-}else{
-dojo.html.setMarginBox(elm,{width:w,height:f.height});
-}
-f.width-=w;
-if(pos=="left"){
-f.left+=w;
-}else{
-elm.style.left=f.left+f.width+"px";
-}
-}else{
-if(pos=="flood"||pos=="client"){
-if(_a47.resizeTo){
-_a47.resizeTo(f.width,f.height);
-}else{
-dojo.html.setMarginBox(elm,{width:f.width,height:f.height});
-}
-}
-}
-}
-});
-};
-dojo.html.insertCssText(".dojoLayoutContainer{ position: relative; display: block; overflow: hidden; }\n"+"body .dojoAlignTop, body .dojoAlignBottom, body .dojoAlignLeft, body .dojoAlignRight { position: absolute; overflow: hidden; }\n"+"body .dojoAlignClient { position: absolute }\n"+".dojoAlignClient { overflow: auto; }\n");
-dojo.provide("dojo.dnd.DragAndDrop");
-dojo.declare("dojo.dnd.DragSource",null,{type:"",onDragEnd:function(evt){
-},onDragStart:function(evt){
-},onSelected:function(evt){
-},unregister:function(){
-dojo.dnd.dragManager.unregisterDragSource(this);
-},reregister:function(){
-dojo.dnd.dragManager.registerDragSource(this);
-}});
-dojo.declare("dojo.dnd.DragObject",null,{type:"",register:function(){
-var dm=dojo.dnd.dragManager;
-if(dm["registerDragObject"]){
-dm.registerDragObject(this);
-}
-},onDragStart:function(evt){
-},onDragMove:function(evt){
-},onDragOver:function(evt){
-},onDragOut:function(evt){
-},onDragEnd:function(evt){
-},onDragLeave:dojo.lang.forward("onDragOut"),onDragEnter:dojo.lang.forward("onDragOver"),ondragout:dojo.lang.forward("onDragOut"),ondragover:dojo.lang.forward("onDragOver")});
-dojo.declare("dojo.dnd.DropTarget",null,{acceptsType:function(type){
-if(!dojo.lang.inArray(this.acceptedTypes,"*")){
-if(!dojo.lang.inArray(this.acceptedTypes,type)){
-return false;
-}
-}
-return true;
-},accepts:function(_a56){
-if(!dojo.lang.inArray(this.acceptedTypes,"*")){
-for(var i=0;i<_a56.length;i++){
-if(!dojo.lang.inArray(this.acceptedTypes,_a56[i].type)){
-return false;
-}
-}
-}
-return true;
-},unregister:function(){
-dojo.dnd.dragManager.unregisterDropTarget(this);
-},onDragOver:function(evt){
-},onDragOut:function(evt){
-},onDragMove:function(evt){
-},onDropStart:function(evt){
-},onDrop:function(evt){
-},onDropEnd:function(){
-}},function(){
-this.acceptedTypes=[];
-});
-dojo.dnd.DragEvent=function(){
-this.dragSource=null;
-this.dragObject=null;
-this.target=null;
-this.eventStatus="success";
-};
-dojo.declare("dojo.dnd.DragManager",null,{selectedSources:[],dragObjects:[],dragSources:[],registerDragSource:function(_a5d){
-},dropTargets:[],registerDropTarget:function(_a5e){
-},lastDragTarget:null,currentDragTarget:null,onKeyDown:function(){
-},onMouseOut:function(){
-},onMouseMove:function(){
-},onMouseUp:function(){
-}});
-dojo.provide("dojo.dnd.HtmlDragManager");
-dojo.declare("dojo.dnd.HtmlDragManager",dojo.dnd.DragManager,{disabled:false,nestedTargets:false,mouseDownTimer:null,dsCounter:0,dsPrefix:"dojoDragSource",dropTargetDimensions:[],currentDropTarget:null,previousDropTarget:null,_dragTriggered:false,selectedSources:[],dragObjects:[],dragSources:[],currentX:null,currentY:null,lastX:null,lastY:null,mouseDownX:null,mouseDownY:null,threshold:7,dropAcceptable:false,cancelEvent:function(e){
-e.stopPropagation();
-e.preventDefault();
-},registerDragSource:function(ds){
-if(ds["domNode"]){
-var dp=this.dsPrefix;
-var _a62=dp+"Idx_"+(this.dsCounter++);
-ds.dragSourceId=_a62;
-this.dragSources[_a62]=ds;
-ds.domNode.setAttribute(dp,_a62);
-if(dojo.render.html.ie){
-dojo.event.browser.addListener(ds.domNode,"ondragstart",this.cancelEvent);
-}
-}
-},unregisterDragSource:function(ds){
-if(ds["domNode"]){
-var dp=this.dsPrefix;
-var _a65=ds.dragSourceId;
-delete ds.dragSourceId;
-delete this.dragSources[_a65];
-ds.domNode.setAttribute(dp,null);
-if(dojo.render.html.ie){
-dojo.event.browser.removeListener(ds.domNode,"ondragstart",this.cancelEvent);
-}
-}
-},registerDropTarget:function(dt){
-this.dropTargets.push(dt);
-},unregisterDropTarget:function(dt){
-var _a68=dojo.lang.find(this.dropTargets,dt,true);
-if(_a68>=0){
-this.dropTargets.splice(_a68,1);
-}
-},getDragSource:function(e){
-var tn=e.target;
-if(tn===dojo.body()){
-return;
-}
-var ta=dojo.html.getAttribute(tn,this.dsPrefix);
-while((!ta)&&(tn)){
-tn=tn.parentNode;
-if((!tn)||(tn===dojo.body())){
-return;
-}
-ta=dojo.html.getAttribute(tn,this.dsPrefix);
-}
-return this.dragSources[ta];
-},onKeyDown:function(e){
-},onMouseDown:function(e){
-if(this.disabled){
-return;
-}
-if(dojo.render.html.ie){
-if(e.button!=1){
-return;
-}
-}else{
-if(e.which!=1){
-return;
-}
-}
-var _a6e=e.target.nodeType==dojo.html.TEXT_NODE?e.target.parentNode:e.target;
-if(dojo.html.isTag(_a6e,"button","textarea","input","select","option")){
-return;
-}
-var ds=this.getDragSource(e);
-if(!ds){
-return;
-}
-if(!dojo.lang.inArray(this.selectedSources,ds)){
-this.selectedSources.push(ds);
-ds.onSelected();
-}
-this.mouseDownX=e.pageX;
-this.mouseDownY=e.pageY;
-e.preventDefault();
-dojo.event.connect(document,"onmousemove",this,"onMouseMove");
-},onMouseUp:function(e,_a71){
-if(this.selectedSources.length==0){
-return;
-}
-this.mouseDownX=null;
-this.mouseDownY=null;
-this._dragTriggered=false;
-e.dragSource=this.dragSource;
-if((!e.shiftKey)&&(!e.ctrlKey)){
-if(this.currentDropTarget){
-this.currentDropTarget.onDropStart();
-}
-dojo.lang.forEach(this.dragObjects,function(_a72){
-var ret=null;
-if(!_a72){
-return;
-}
-if(this.currentDropTarget){
-e.dragObject=_a72;
-var ce=this.currentDropTarget.domNode.childNodes;
-if(ce.length>0){
-e.dropTarget=ce[0];
-while(e.dropTarget==_a72.domNode){
-e.dropTarget=e.dropTarget.nextSibling;
-}
-}else{
-e.dropTarget=this.currentDropTarget.domNode;
-}
-if(this.dropAcceptable){
-ret=this.currentDropTarget.onDrop(e);
-}else{
-this.currentDropTarget.onDragOut(e);
-}
-}
-e.dragStatus=this.dropAcceptable&&ret?"dropSuccess":"dropFailure";
-dojo.lang.delayThese([function(){
-try{
-_a72.dragSource.onDragEnd(e);
-}
-catch(err){
-var _a75={};
-for(var i in e){
-if(i=="type"){
-_a75.type="mouseup";
-continue;
-}
-_a75[i]=e[i];
-}
-_a72.dragSource.onDragEnd(_a75);
-}
-},function(){
-_a72.onDragEnd(e);
-}]);
-},this);
-this.selectedSources=[];
-this.dragObjects=[];
-this.dragSource=null;
-if(this.currentDropTarget){
-this.currentDropTarget.onDropEnd();
-}
-}else{
-}
-dojo.event.disconnect(document,"onmousemove",this,"onMouseMove");
-this.currentDropTarget=null;
-},onScroll:function(){
-for(var i=0;i<this.dragObjects.length;i++){
-if(this.dragObjects[i].updateDragOffset){
-this.dragObjects[i].updateDragOffset();
-}
-}
-if(this.dragObjects.length){
-this.cacheTargetLocations();
-}
-},_dragStartDistance:function(x,y){
-if((!this.mouseDownX)||(!this.mouseDownX)){
-return;
-}
-var dx=Math.abs(x-this.mouseDownX);
-var dx2=dx*dx;
-var dy=Math.abs(y-this.mouseDownY);
-var dy2=dy*dy;
-return parseInt(Math.sqrt(dx2+dy2),10);
-},cacheTargetLocations:function(){
-dojo.profile.start("cacheTargetLocations");
-this.dropTargetDimensions=[];
-dojo.lang.forEach(this.dropTargets,function(_a7e){
-var tn=_a7e.domNode;
-if(!tn||!_a7e.accepts([this.dragSource])){
-return;
-}
-var abs=dojo.html.getAbsolutePosition(tn,true);
-var bb=dojo.html.getBorderBox(tn);
-this.dropTargetDimensions.push([[abs.x,abs.y],[abs.x+bb.width,abs.y+bb.height],_a7e]);
-},this);
-dojo.profile.end("cacheTargetLocations");
-},onMouseMove:function(e){
-if((dojo.render.html.ie)&&(e.button!=1)){
-this.currentDropTarget=null;
-this.onMouseUp(e,true);
-return;
-}
-if((this.selectedSources.length)&&(!this.dragObjects.length)){
-var dx;
-var dy;
-if(!this._dragTriggered){
-this._dragTriggered=(this._dragStartDistance(e.pageX,e.pageY)>this.threshold);
-if(!this._dragTriggered){
-return;
-}
-dx=e.pageX-this.mouseDownX;
-dy=e.pageY-this.mouseDownY;
-}
-this.dragSource=this.selectedSources[0];
-dojo.lang.forEach(this.selectedSources,function(_a85){
-if(!_a85){
-return;
-}
-var tdo=_a85.onDragStart(e);
-if(tdo){
-tdo.onDragStart(e);
-tdo.dragOffset.y+=dy;
-tdo.dragOffset.x+=dx;
-tdo.dragSource=_a85;
-this.dragObjects.push(tdo);
-}
-},this);
-this.previousDropTarget=null;
-this.cacheTargetLocations();
-}
-dojo.lang.forEach(this.dragObjects,function(_a87){
-if(_a87){
-_a87.onDragMove(e);
-}
-});
-if(this.currentDropTarget){
-var c=dojo.html.toCoordinateObject(this.currentDropTarget.domNode,true);
-var dtp=[[c.x,c.y],[c.x+c.width,c.y+c.height]];
-}
-if((!this.nestedTargets)&&(dtp)&&(this.isInsideBox(e,dtp))){
-if(this.dropAcceptable){
-this.currentDropTarget.onDragMove(e,this.dragObjects);
-}
-}else{
-var _a8a=this.findBestTarget(e);
-if(_a8a.target===null){
-if(this.currentDropTarget){
-this.currentDropTarget.onDragOut(e);
-this.previousDropTarget=this.currentDropTarget;
-this.currentDropTarget=null;
-}
-this.dropAcceptable=false;
-return;
-}
-if(this.currentDropTarget!==_a8a.target){
-if(this.currentDropTarget){
-this.previousDropTarget=this.currentDropTarget;
-this.currentDropTarget.onDragOut(e);
-}
-this.currentDropTarget=_a8a.target;
-e.dragObjects=this.dragObjects;
-this.dropAcceptable=this.currentDropTarget.onDragOver(e);
-}else{
-if(this.dropAcceptable){
-this.currentDropTarget.onDragMove(e,this.dragObjects);
-}
-}
-}
-},findBestTarget:function(e){
-var _a8c=this;
-var _a8d=new Object();
-_a8d.target=null;
-_a8d.points=null;
-dojo.lang.every(this.dropTargetDimensions,function(_a8e){
-if(!_a8c.isInsideBox(e,_a8e)){
-return true;
-}
-_a8d.target=_a8e[2];
-_a8d.points=_a8e;
-return Boolean(_a8c.nestedTargets);
-});
-return _a8d;
-},isInsideBox:function(e,_a90){
-if((e.pageX>_a90[0][0])&&(e.pageX<_a90[1][0])&&(e.pageY>_a90[0][1])&&(e.pageY<_a90[1][1])){
-return true;
-}
-return false;
-},onMouseOver:function(e){
-},onMouseOut:function(e){
-}});
-dojo.dnd.dragManager=new dojo.dnd.HtmlDragManager();
-(function(){
-var d=document;
-var dm=dojo.dnd.dragManager;
-dojo.event.connect(d,"onkeydown",dm,"onKeyDown");
-dojo.event.connect(d,"onmouseover",dm,"onMouseOver");
-dojo.event.connect(d,"onmouseout",dm,"onMouseOut");
-dojo.event.connect(d,"onmousedown",dm,"onMouseDown");
-dojo.event.connect(d,"onmouseup",dm,"onMouseUp");
-dojo.event.connect(window,"onscroll",dm,"onScroll");
-})();
-dojo.provide("dojo.dnd.HtmlDragAndDrop");
-dojo.declare("dojo.dnd.HtmlDragSource",dojo.dnd.DragSource,{dragClass:"",onDragStart:function(){
-var _a95=new dojo.dnd.HtmlDragObject(this.dragObject,this.type);
-if(this.dragClass){
-_a95.dragClass=this.dragClass;
-}
-if(this.constrainToContainer){
-_a95.constrainTo(this.constrainingContainer||this.domNode.parentNode);
-}
-return _a95;
-},setDragHandle:function(node){
-node=dojo.byId(node);
-dojo.dnd.dragManager.unregisterDragSource(this);
-this.domNode=node;
-dojo.dnd.dragManager.registerDragSource(this);
-},setDragTarget:function(node){
-this.dragObject=node;
-},constrainTo:function(_a98){
-this.constrainToContainer=true;
-if(_a98){
-this.constrainingContainer=_a98;
-}
-},onSelected:function(){
-for(var i=0;i<this.dragObjects.length;i++){
-dojo.dnd.dragManager.selectedSources.push(new dojo.dnd.HtmlDragSource(this.dragObjects[i]));
-}
-},addDragObjects:function(el){
-for(var i=0;i<arguments.length;i++){
-this.dragObjects.push(dojo.byId(arguments[i]));
-}
-}},function(node,type){
-node=dojo.byId(node);
-this.dragObjects=[];
-this.constrainToContainer=false;
-if(node){
-this.domNode=node;
-this.dragObject=node;
-this.type=(type)||(this.domNode.nodeName.toLowerCase());
-dojo.dnd.DragSource.prototype.reregister.call(this);
-}
-});
-dojo.declare("dojo.dnd.HtmlDragObject",dojo.dnd.DragObject,{dragClass:"",opacity:0.5,createIframe:true,disableX:false,disableY:false,createDragNode:function(){
-var node=this.domNode.cloneNode(true);
-if(this.dragClass){
-dojo.html.addClass(node,this.dragClass);
-}
-if(this.opacity<1){
-dojo.html.setOpacity(node,this.opacity);
-}
-var ltn=node.tagName.toLowerCase();
-var isTr=(ltn=="tr");
-if((isTr)||(ltn=="tbody")){
-var doc=this.domNode.ownerDocument;
-var _aa2=doc.createElement("table");
-if(isTr){
-var _aa3=doc.createElement("tbody");
-_aa2.appendChild(_aa3);
-_aa3.appendChild(node);
-}else{
-_aa2.appendChild(node);
-}
-var _aa4=((isTr)?this.domNode:this.domNode.firstChild);
-var _aa5=((isTr)?node:node.firstChild);
-var _aa6=tdp.childNodes;
-var _aa7=_aa5.childNodes;
-for(var i=0;i<_aa6.length;i++){
-if((_aa7[i])&&(_aa7[i].style)){
-_aa7[i].style.width=dojo.html.getContentBox(_aa6[i]).width+"px";
-}
-}
-node=_aa2;
-}
-if((dojo.render.html.ie55||dojo.render.html.ie60)&&this.createIframe){
-with(node.style){
-top="0px";
-left="0px";
-}
-var _aa9=document.createElement("div");
-_aa9.appendChild(node);
-this.bgIframe=new dojo.html.BackgroundIframe(_aa9);
-_aa9.appendChild(this.bgIframe.iframe);
-node=_aa9;
-}
-node.style.zIndex=999;
-return node;
-},onDragStart:function(e){
-dojo.html.clearSelection();
-this.scrollOffset=dojo.html.getScroll().offset;
-this.dragStartPosition=dojo.html.getAbsolutePosition(this.domNode,true);
-this.dragOffset={y:this.dragStartPosition.y-e.pageY,x:this.dragStartPosition.x-e.pageX};
-this.dragClone=this.createDragNode();
-this.containingBlockPosition=this.domNode.offsetParent?dojo.html.getAbsolutePosition(this.domNode.offsetParent,true):{x:0,y:0};
-if(this.constrainToContainer){
-this.constraints=this.getConstraints();
-}
-with(this.dragClone.style){
-position="absolute";
-top=this.dragOffset.y+e.pageY+"px";
-left=this.dragOffset.x+e.pageX+"px";
-}
-dojo.body().appendChild(this.dragClone);
-dojo.event.topic.publish("dragStart",{source:this});
-},getConstraints:function(){
-if(this.constrainingContainer.nodeName.toLowerCase()=="body"){
-var _aab=dojo.html.getViewport();
-var _aac=_aab.width;
-var _aad=_aab.height;
-var _aae=dojo.html.getScroll().offset;
-var x=_aae.x;
-var y=_aae.y;
-}else{
-var _ab1=dojo.html.getContentBox(this.constrainingContainer);
-_aac=_ab1.width;
-_aad=_ab1.height;
-x=this.containingBlockPosition.x+dojo.html.getPixelValue(this.constrainingContainer,"padding-left",true)+dojo.html.getBorderExtent(this.constrainingContainer,"left");
-y=this.containingBlockPosition.y+dojo.html.getPixelValue(this.constrainingContainer,"padding-top",true)+dojo.html.getBorderExtent(this.constrainingContainer,"top");
-}
-var mb=dojo.html.getMarginBox(this.domNode);
-return {minX:x,minY:y,maxX:x+_aac-mb.width,maxY:y+_aad-mb.height};
-},updateDragOffset:function(){
-var _ab3=dojo.html.getScroll().offset;
-if(_ab3.y!=this.scrollOffset.y){
-var diff=_ab3.y-this.scrollOffset.y;
-this.dragOffset.y+=diff;
-this.scrollOffset.y=_ab3.y;
-}
-if(_ab3.x!=this.scrollOffset.x){
-var diff=_ab3.x-this.scrollOffset.x;
-this.dragOffset.x+=diff;
-this.scrollOffset.x=_ab3.x;
-}
-},onDragMove:function(e){
-this.updateDragOffset();
-var x=this.dragOffset.x+e.pageX;
-var y=this.dragOffset.y+e.pageY;
-if(this.constrainToContainer){
-if(x<this.constraints.minX){
-x=this.constraints.minX;
-}
-if(y<this.constraints.minY){
-y=this.constraints.minY;
-}
-if(x>this.constraints.maxX){
-x=this.constraints.maxX;
-}
-if(y>this.constraints.maxY){
-y=this.constraints.maxY;
-}
-}
-this.setAbsolutePosition(x,y);
-dojo.event.topic.publish("dragMove",{source:this});
-},setAbsolutePosition:function(x,y){
-if(!this.disableY){
-this.dragClone.style.top=y+"px";
-}
-if(!this.disableX){
-this.dragClone.style.left=x+"px";
-}
-},onDragEnd:function(e){
-switch(e.dragStatus){
-case "dropSuccess":
-dojo.html.removeNode(this.dragClone);
-this.dragClone=null;
-break;
-case "dropFailure":
-var _abb=dojo.html.getAbsolutePosition(this.dragClone,true);
-var _abc={left:this.dragStartPosition.x+1,top:this.dragStartPosition.y+1};
-var anim=dojo.lfx.slideTo(this.dragClone,_abc,300);
-var _abe=this;
-dojo.event.connect(anim,"onEnd",function(e){
-dojo.html.removeNode(_abe.dragClone);
-_abe.dragClone=null;
-});
-anim.play();
-break;
-}
-dojo.event.topic.publish("dragEnd",{source:this});
-},constrainTo:function(_ac0){
-this.constrainToContainer=true;
-if(_ac0){
-this.constrainingContainer=_ac0;
-}else{
-this.constrainingContainer=this.domNode.parentNode;
-}
-}},function(node,type){
-this.domNode=dojo.byId(node);
-this.type=type;
-this.constrainToContainer=false;
-this.dragSource=null;
-dojo.dnd.DragObject.prototype.register.call(this);
-});
-dojo.declare("dojo.dnd.HtmlDropTarget",dojo.dnd.DropTarget,{vertical:false,onDragOver:function(e){
-if(!this.accepts(e.dragObjects)){
-return false;
-}
-this.childBoxes=[];
-for(var i=0,_ac5;i<this.domNode.childNodes.length;i++){
-_ac5=this.domNode.childNodes[i];
-if(_ac5.nodeType!=dojo.html.ELEMENT_NODE){
-continue;
-}
-var pos=dojo.html.getAbsolutePosition(_ac5,true);
-var _ac7=dojo.html.getBorderBox(_ac5);
-this.childBoxes.push({top:pos.y,bottom:pos.y+_ac7.height,left:pos.x,right:pos.x+_ac7.width,height:_ac7.height,width:_ac7.width,node:_ac5});
-}
-return true;
-},_getNodeUnderMouse:function(e){
-for(var i=0,_aca;i<this.childBoxes.length;i++){
-with(this.childBoxes[i]){
-if(e.pageX>=left&&e.pageX<=right&&e.pageY>=top&&e.pageY<=bottom){
-return i;
-}
-}
-}
-return -1;
-},createDropIndicator:function(){
-this.dropIndicator=document.createElement("div");
-with(this.dropIndicator.style){
-position="absolute";
-zIndex=999;
-if(this.vertical){
-borderLeftWidth="1px";
-borderLeftColor="black";
-borderLeftStyle="solid";
-height=dojo.html.getBorderBox(this.domNode).height+"px";
-top=dojo.html.getAbsolutePosition(this.domNode,true).y+"px";
-}else{
-borderTopWidth="1px";
-borderTopColor="black";
-borderTopStyle="solid";
-width=dojo.html.getBorderBox(this.domNode).width+"px";
-left=dojo.html.getAbsolutePosition(this.domNode,true).x+"px";
-}
-}
-},onDragMove:function(e,_acc){
-var i=this._getNodeUnderMouse(e);
-if(!this.dropIndicator){
-this.createDropIndicator();
-}
-var _ace=this.vertical?dojo.html.gravity.WEST:dojo.html.gravity.NORTH;
-var hide=false;
-if(i<0){
-if(this.childBoxes.length){
-var _ad0=(dojo.html.gravity(this.childBoxes[0].node,e)&_ace);
-if(_ad0){
-hide=true;
-}
-}else{
-var _ad0=true;
-}
-}else{
-var _ad1=this.childBoxes[i];
-var _ad0=(dojo.html.gravity(_ad1.node,e)&_ace);
-if(_ad1.node===_acc[0].dragSource.domNode){
-hide=true;
-}else{
-var _ad2=_ad0?(i>0?this.childBoxes[i-1]:_ad1):(i<this.childBoxes.length-1?this.childBoxes[i+1]:_ad1);
-if(_ad2.node===_acc[0].dragSource.domNode){
-hide=true;
-}
-}
-}
-if(hide){
-this.dropIndicator.style.display="none";
-return;
-}else{
-this.dropIndicator.style.display="";
-}
-this.placeIndicator(e,_acc,i,_ad0);
-if(!dojo.html.hasParent(this.dropIndicator)){
-dojo.body().appendChild(this.dropIndicator);
-}
-},placeIndicator:function(e,_ad4,_ad5,_ad6){
-var _ad7=this.vertical?"left":"top";
-var _ad8;
-if(_ad5<0){
-if(this.childBoxes.length){
-_ad8=_ad6?this.childBoxes[0]:this.childBoxes[this.childBoxes.length-1];
-}else{
-this.dropIndicator.style[_ad7]=dojo.html.getAbsolutePosition(this.domNode,true)[this.vertical?"x":"y"]+"px";
-}
-}else{
-_ad8=this.childBoxes[_ad5];
-}
-if(_ad8){
-this.dropIndicator.style[_ad7]=(_ad6?_ad8[_ad7]:_ad8[this.vertical?"right":"bottom"])+"px";
-if(this.vertical){
-this.dropIndicator.style.height=_ad8.height+"px";
-this.dropIndicator.style.top=_ad8.top+"px";
-}else{
-this.dropIndicator.style.width=_ad8.width+"px";
-this.dropIndicator.style.left=_ad8.left+"px";
-}
-}
-},onDragOut:function(e){
-if(this.dropIndicator){
-dojo.html.removeNode(this.dropIndicator);
-delete this.dropIndicator;
-}
-},onDrop:function(e){
-this.onDragOut(e);
-var i=this._getNodeUnderMouse(e);
-var _adc=this.vertical?dojo.html.gravity.WEST:dojo.html.gravity.NORTH;
-if(i<0){
-if(this.childBoxes.length){
-if(dojo.html.gravity(this.childBoxes[0].node,e)&_adc){
-return this.insert(e,this.childBoxes[0].node,"before");
-}else{
-return this.insert(e,this.childBoxes[this.childBoxes.length-1].node,"after");
-}
-}
-return this.insert(e,this.domNode,"append");
-}
-var _add=this.childBoxes[i];
-if(dojo.html.gravity(_add.node,e)&_adc){
-return this.insert(e,_add.node,"before");
-}else{
-return this.insert(e,_add.node,"after");
-}
-},insert:function(e,_adf,_ae0){
-var node=e.dragObject.domNode;
-if(_ae0=="before"){
-return dojo.html.insertBefore(node,_adf);
-}else{
-if(_ae0=="after"){
-return dojo.html.insertAfter(node,_adf);
-}else{
-if(_ae0=="append"){
-_adf.appendChild(node);
-return true;
-}
-}
-}
-return false;
-}},function(node,_ae3){
-if(arguments.length==0){
-return;
-}
-this.domNode=dojo.byId(node);
-dojo.dnd.DropTarget.call(this);
-if(_ae3&&dojo.lang.isString(_ae3)){
-_ae3=[_ae3];
-}
-this.acceptedTypes=_ae3||[];
-dojo.dnd.dragManager.registerDropTarget(this);
-});
-dojo.provide("dojo.dnd.*");
-dojo.provide("dojo.dnd.HtmlDragMove");
-dojo.declare("dojo.dnd.HtmlDragMoveSource",dojo.dnd.HtmlDragSource,{onDragStart:function(){
-var _ae4=new dojo.dnd.HtmlDragMoveObject(this.dragObject,this.type);
-if(this.constrainToContainer){
-_ae4.constrainTo(this.constrainingContainer);
-}
-return _ae4;
-},onSelected:function(){
-for(var i=0;i<this.dragObjects.length;i++){
-dojo.dnd.dragManager.selectedSources.push(new dojo.dnd.HtmlDragMoveSource(this.dragObjects[i]));
-}
-}});
-dojo.declare("dojo.dnd.HtmlDragMoveObject",dojo.dnd.HtmlDragObject,{onDragStart:function(e){
-dojo.html.clearSelection();
-this.dragClone=this.domNode;
-if(dojo.html.getComputedStyle(this.domNode,"position")!="absolute"){
-this.domNode.style.position="relative";
-}
-var left=parseInt(dojo.html.getComputedStyle(this.domNode,"left"));
-var top=parseInt(dojo.html.getComputedStyle(this.domNode,"top"));
-this.dragStartPosition={x:isNaN(left)?0:left,y:isNaN(top)?0:top};
-this.scrollOffset=dojo.html.getScroll().offset;
-this.dragOffset={y:this.dragStartPosition.y-e.pageY,x:this.dragStartPosition.x-e.pageX};
-this.containingBlockPosition={x:0,y:0};
-if(this.constrainToContainer){
-this.constraints=this.getConstraints();
-}
-dojo.event.connect(this.domNode,"onclick",this,"_squelchOnClick");
-},onDragEnd:function(e){
-},setAbsolutePosition:function(x,y){
-if(!this.disableY){
-this.domNode.style.top=y+"px";
-}
-if(!this.disableX){
-this.domNode.style.left=x+"px";
-}
-},_squelchOnClick:function(e){
-dojo.event.browser.stopEvent(e);
-dojo.event.disconnect(this.domNode,"onclick",this,"_squelchOnClick");
-}});
-dojo.provide("dojo.widget.Dialog");
-dojo.declare("dojo.widget.ModalDialogBase",null,{isContainer:true,focusElement:"",bgColor:"black",bgOpacity:0.4,followScroll:true,closeOnBackgroundClick:false,trapTabs:function(e){
-if(e.target==this.tabStartOuter){
-if(this._fromTrap){
-this.tabStart.focus();
-this._fromTrap=false;
-}else{
-this._fromTrap=true;
-this.tabEnd.focus();
-}
-}else{
-if(e.target==this.tabStart){
-if(this._fromTrap){
-this._fromTrap=false;
-}else{
-this._fromTrap=true;
-this.tabEnd.focus();
-}
-}else{
-if(e.target==this.tabEndOuter){
-if(this._fromTrap){
-this.tabEnd.focus();
-this._fromTrap=false;
-}else{
-this._fromTrap=true;
-this.tabStart.focus();
-}
-}else{
-if(e.target==this.tabEnd){
-if(this._fromTrap){
-this._fromTrap=false;
-}else{
-this._fromTrap=true;
-this.tabStart.focus();
-}
-}
-}
-}
-}
-},clearTrap:function(e){
-var _aef=this;
-setTimeout(function(){
-_aef._fromTrap=false;
-},100);
-},postCreate:function(){
-with(this.domNode.style){
-position="absolute";
-zIndex=999;
-display="none";
-overflow="visible";
-}
-var b=dojo.body();
-b.appendChild(this.domNode);
-this.bg=document.createElement("div");
-this.bg.className="dialogUnderlay";
-with(this.bg.style){
-position="absolute";
-left=top="0px";
-zIndex=998;
-display="none";
-}
-b.appendChild(this.bg);
-this.setBackgroundColor(this.bgColor);
-this.bgIframe=new dojo.html.BackgroundIframe();
-if(this.bgIframe.iframe){
-with(this.bgIframe.iframe.style){
-position="absolute";
-left=top="0px";
-zIndex=90;
-display="none";
-}
-}
-if(this.closeOnBackgroundClick){
-dojo.event.kwConnect({srcObj:this.bg,srcFunc:"onclick",adviceObj:this,adviceFunc:"onBackgroundClick",once:true});
-}
-},uninitialize:function(){
-this.bgIframe.remove();
-dojo.html.removeNode(this.bg,true);
-},setBackgroundColor:function(_af1){
-if(arguments.length>=3){
-_af1=new dojo.gfx.color.Color(arguments[0],arguments[1],arguments[2]);
-}else{
-_af1=new dojo.gfx.color.Color(_af1);
-}
-this.bg.style.backgroundColor=_af1.toString();
-return this.bgColor=_af1;
-},setBackgroundOpacity:function(op){
-if(arguments.length==0){
-op=this.bgOpacity;
-}
-dojo.html.setOpacity(this.bg,op);
-try{
-this.bgOpacity=dojo.html.getOpacity(this.bg);
-}
-catch(e){
-this.bgOpacity=op;
-}
-return this.bgOpacity;
-},_sizeBackground:function(){
-if(this.bgOpacity>0){
-var _af3=dojo.html.getViewport();
-var h=_af3.height;
-var w=_af3.width;
-with(this.bg.style){
-width=w+"px";
-height=h+"px";
-}
-var _af6=dojo.html.getScroll().offset;
-this.bg.style.top=_af6.y+"px";
-this.bg.style.left=_af6.x+"px";
-var _af3=dojo.html.getViewport();
-if(_af3.width!=w){
-this.bg.style.width=_af3.width+"px";
-}
-if(_af3.height!=h){
-this.bg.style.height=_af3.height+"px";
-}
-}
-this.bgIframe.size(this.bg);
-},_showBackground:function(){
-if(this.bgOpacity>0){
-this.bg.style.display="block";
-}
-if(this.bgIframe.iframe){
-this.bgIframe.iframe.style.display="block";
-}
-},placeModalDialog:function(){
-var _af7=dojo.html.getScroll().offset;
-var _af8=dojo.html.getViewport();
-var mb;
-if(this.isShowing()){
-mb=dojo.html.getMarginBox(this.domNode);
-}else{
-dojo.html.setVisibility(this.domNode,false);
-dojo.html.show(this.domNode);
-mb=dojo.html.getMarginBox(this.domNode);
-dojo.html.hide(this.domNode);
-dojo.html.setVisibility(this.domNode,true);
-}
-var x=_af7.x+(_af8.width-mb.width)/2;
-var y=_af7.y+(_af8.height-mb.height)/2;
-with(this.domNode.style){
-left=x+"px";
-top=y+"px";
-}
-},_onKey:function(evt){
-if(evt.key){
-var node=evt.target;
-while(node!=null){
-if(node==this.domNode){
-return;
-}
-node=node.parentNode;
-}
-if(evt.key!=evt.KEY_TAB){
-dojo.event.browser.stopEvent(evt);
-}else{
-if(!dojo.render.html.opera){
-try{
-this.tabStart.focus();
-}
-catch(e){
-}
-}
-}
-}
-},showModalDialog:function(){
-if(this.followScroll&&!this._scrollConnected){
-this._scrollConnected=true;
-dojo.event.connect(window,"onscroll",this,"_onScroll");
-}
-dojo.event.connect(document.documentElement,"onkey",this,"_onKey");
-this.placeModalDialog();
-this.setBackgroundOpacity();
-this._sizeBackground();
-this._showBackground();
-this._fromTrap=true;
-setTimeout(dojo.lang.hitch(this,function(){
-try{
-this.tabStart.focus();
-}
-catch(e){
-}
-}),50);
-},hideModalDialog:function(){
-if(this.focusElement){
-dojo.byId(this.focusElement).focus();
-dojo.byId(this.focusElement).blur();
-}
-this.bg.style.display="none";
-this.bg.style.width=this.bg.style.height="1px";
-if(this.bgIframe.iframe){
-this.bgIframe.iframe.style.display="none";
-}
-dojo.event.disconnect(document.documentElement,"onkey",this,"_onKey");
-if(this._scrollConnected){
-this._scrollConnected=false;
-dojo.event.disconnect(window,"onscroll",this,"_onScroll");
-}
-},_onScroll:function(){
-var _afe=dojo.html.getScroll().offset;
-this.bg.style.top=_afe.y+"px";
-this.bg.style.left=_afe.x+"px";
-this.placeModalDialog();
-},checkSize:function(){
-if(this.isShowing()){
-this._sizeBackground();
-this.placeModalDialog();
-this.onResized();
-}
-},onBackgroundClick:function(){
-if(this.lifetime-this.timeRemaining>=this.blockDuration){
-return;
-}
-this.hide();
-}});
-dojo.widget.defineWidget("dojo.widget.Dialog",[dojo.widget.ContentPane,dojo.widget.ModalDialogBase],{templatePath:dojo.uri.dojoUri("src/widget/templates/Dialog.html"),blockDuration:0,lifetime:0,closeNode:"",postMixInProperties:function(){
-dojo.widget.Dialog.superclass.postMixInProperties.apply(this,arguments);
-if(this.closeNode){
-this.setCloseControl(this.closeNode);
-}
-},postCreate:function(){
-dojo.widget.Dialog.superclass.postCreate.apply(this,arguments);
-dojo.widget.ModalDialogBase.prototype.postCreate.apply(this,arguments);
-},show:function(){
-if(this.lifetime){
-this.timeRemaining=this.lifetime;
-if(this.timerNode){
-this.timerNode.innerHTML=Math.ceil(this.timeRemaining/1000);
-}
-if(this.blockDuration&&this.closeNode){
-if(this.lifetime>this.blockDuration){
-this.closeNode.style.visibility="hidden";
-}else{
-this.closeNode.style.display="none";
-}
-}
-if(this.timer){
-clearInterval(this.timer);
-}
-this.timer=setInterval(dojo.lang.hitch(this,"_onTick"),100);
-}
-this.showModalDialog();
-dojo.widget.Dialog.superclass.show.call(this);
-},onLoad:function(){
-this.placeModalDialog();
-dojo.widget.Dialog.superclass.onLoad.call(this);
-},fillInTemplate:function(){
-},hide:function(){
-this.hideModalDialog();
-dojo.widget.Dialog.superclass.hide.call(this);
-if(this.timer){
-clearInterval(this.timer);
-}
-},setTimerNode:function(node){
-this.timerNode=node;
-},setCloseControl:function(node){
-this.closeNode=dojo.byId(node);
-dojo.event.connect(this.closeNode,"onclick",this,"hide");
-},setShowControl:function(node){
-node=dojo.byId(node);
-dojo.event.connect(node,"onclick",this,"show");
-},_onTick:function(){
-if(this.timer){
-this.timeRemaining-=100;
-if(this.lifetime-this.timeRemaining>=this.blockDuration){
-if(this.closeNode){
-this.closeNode.style.visibility="visible";
-}
-}
-if(!this.timeRemaining){
-clearInterval(this.timer);
-this.hide();
-}else{
-if(this.timerNode){
-this.timerNode.innerHTML=Math.ceil(this.timeRemaining/1000);
-}
-}
-}
-}});
-dojo.provide("dojo.widget.ResizeHandle");
-dojo.widget.defineWidget("dojo.widget.ResizeHandle",dojo.widget.HtmlWidget,{targetElmId:"",templateCssPath:dojo.uri.dojoUri("src/widget/templates/ResizeHandle.css"),templateString:"<div class=\"dojoHtmlResizeHandle\"><div></div></div>",postCreate:function(){
-dojo.event.connect(this.domNode,"onmousedown",this,"_beginSizing");
-},_beginSizing:function(e){
-if(this._isSizing){
-return false;
-}
-this.targetWidget=dojo.widget.byId(this.targetElmId);
-this.targetDomNode=this.targetWidget?this.targetWidget.domNode:dojo.byId(this.targetElmId);
-if(!this.targetDomNode){
-return;
-}
-this._isSizing=true;
-this.startPoint={"x":e.clientX,"y":e.clientY};
-var mb=dojo.html.getMarginBox(this.targetDomNode);
-this.startSize={"w":mb.width,"h":mb.height};
-dojo.event.kwConnect({srcObj:dojo.body(),srcFunc:"onmousemove",targetObj:this,targetFunc:"_changeSizing",rate:25});
-dojo.event.connect(dojo.body(),"onmouseup",this,"_endSizing");
-e.preventDefault();
-},_changeSizing:function(e){
-try{
-if(!e.clientX||!e.clientY){
-return;
-}
-}
-catch(e){
-return;
-}
-var dx=this.startPoint.x-e.clientX;
-var dy=this.startPoint.y-e.clientY;
-var newW=this.startSize.w-dx;
-var newH=this.startSize.h-dy;
-if(this.minSize){
-var mb=dojo.html.getMarginBox(this.targetDomNode);
-if(newW<this.minSize.w){
-newW=mb.width;
-}
-if(newH<this.minSize.h){
-newH=mb.height;
-}
-}
-if(this.targetWidget){
-this.targetWidget.resizeTo(newW,newH);
-}else{
-dojo.html.setMarginBox(this.targetDomNode,{width:newW,height:newH});
-}
-e.preventDefault();
-},_endSizing:function(e){
-dojo.event.disconnect(dojo.body(),"onmousemove",this,"_changeSizing");
-dojo.event.disconnect(dojo.body(),"onmouseup",this,"_endSizing");
-this._isSizing=false;
-}});
-dojo.provide("dojo.widget.FloatingPane");
-dojo.declare("dojo.widget.FloatingPaneBase",null,{title:"",iconSrc:"",hasShadow:false,constrainToContainer:false,taskBarId:"",resizable:true,titleBarDisplay:true,windowState:"normal",displayCloseAction:false,displayMinimizeAction:false,displayMaximizeAction:false,_max_taskBarConnectAttempts:5,_taskBarConnectAttempts:0,templatePath:dojo.uri.dojoUri("src/widget/templates/FloatingPane.html"),templateCssPath:dojo.uri.dojoUri("src/widget/templates/FloatingPane.css"),fillInFloatingPaneTemplate:function(args,frag){
-var _b0d=this.getFragNodeRef(frag);
-dojo.html.copyStyle(this.domNode,_b0d);
-dojo.body().appendChild(this.domNode);
-if(!this.isShowing()){
-this.windowState="minimized";
-}
-if(this.iconSrc==""){
-dojo.html.removeNode(this.titleBarIcon);
-}else{
-this.titleBarIcon.src=this.iconSrc.toString();
-}
-if(this.titleBarDisplay){
-this.titleBar.style.display="";
-dojo.html.disableSelection(this.titleBar);
-this.titleBarIcon.style.display=(this.iconSrc==""?"none":"");
-this.minimizeAction.style.display=(this.displayMinimizeAction?"":"none");
-this.maximizeAction.style.display=(this.displayMaximizeAction&&this.windowState!="maximized"?"":"none");
-this.restoreAction.style.display=(this.displayMaximizeAction&&this.windowState=="maximized"?"":"none");
-this.closeAction.style.display=(this.displayCloseAction?"":"none");
-this.drag=new dojo.dnd.HtmlDragMoveSource(this.domNode);
-if(this.constrainToContainer){
-this.drag.constrainTo();
-}
-this.drag.setDragHandle(this.titleBar);
-var self=this;
-dojo.event.topic.subscribe("dragMove",function(info){
-if(info.source.domNode==self.domNode){
-dojo.event.topic.publish("floatingPaneMove",{source:self});
-}
-});
-}
-if(this.resizable){
-this.resizeBar.style.display="";
-this.resizeHandle=dojo.widget.createWidget("ResizeHandle",{targetElmId:this.widgetId,id:this.widgetId+"_resize"});
-this.resizeBar.appendChild(this.resizeHandle.domNode);
-}
-if(this.hasShadow){
-this.shadow=new dojo.lfx.shadow(this.domNode);
-}
-this.bgIframe=new dojo.html.BackgroundIframe(this.domNode);
-if(this.taskBarId){
-this._taskBarSetup();
-}
-dojo.body().removeChild(this.domNode);
-},postCreate:function(){
-if(dojo.hostenv.post_load_){
-this._setInitialWindowState();
-}else{
-dojo.addOnLoad(this,"_setInitialWindowState");
-}
-},maximizeWindow:function(evt){
-var mb=dojo.html.getMarginBox(this.domNode);
-this.previous={width:mb.width||this.width,height:mb.height||this.height,left:this.domNode.style.left,top:this.domNode.style.top,bottom:this.domNode.style.bottom,right:this.domNode.style.right};
-if(this.domNode.parentNode.style.overflow.toLowerCase()!="hidden"){
-this.parentPrevious={overflow:this.domNode.parentNode.style.overflow};
-dojo.debug(this.domNode.parentNode.style.overflow);
-this.domNode.parentNode.style.overflow="hidden";
-}
-this.domNode.style.left=dojo.html.getPixelValue(this.domNode.parentNode,"padding-left",true)+"px";
-this.domNode.style.top=dojo.html.getPixelValue(this.domNode.parentNode,"padding-top",true)+"px";
-if((this.domNode.parentNode.nodeName.toLowerCase()=="body")){
-var _b12=dojo.html.getViewport();
-var _b13=dojo.html.getPadding(dojo.body());
-this.resizeTo(_b12.width-_b13.width,_b12.height-_b13.height);
-}else{
-var _b14=dojo.html.getContentBox(this.domNode.parentNode);
-this.resizeTo(_b14.width,_b14.height);
-}
-this.maximizeAction.style.display="none";
-this.restoreAction.style.display="";
-if(this.resizeHandle){
-this.resizeHandle.domNode.style.display="none";
-}
-this.drag.setDragHandle(null);
-this.windowState="maximized";
-},minimizeWindow:function(evt){
-this.hide();
-for(var attr in this.parentPrevious){
-this.domNode.parentNode.style[attr]=this.parentPrevious[attr];
-}
-this.lastWindowState=this.windowState;
-this.windowState="minimized";
-},restoreWindow:function(evt){
-if(this.windowState=="minimized"){
-this.show();
-if(this.lastWindowState=="maximized"){
-this.domNode.parentNode.style.overflow="hidden";
-this.windowState="maximized";
-}else{
-this.windowState="normal";
-}
-}else{
-if(this.windowState=="maximized"){
-for(var attr in this.previous){
-this.domNode.style[attr]=this.previous[attr];
-}
-for(var attr in this.parentPrevious){
-this.domNode.parentNode.style[attr]=this.parentPrevious[attr];
-}
-this.resizeTo(this.previous.width,this.previous.height);
-this.previous=null;
-this.parentPrevious=null;
-this.restoreAction.style.display="none";
-this.maximizeAction.style.display=this.displayMaximizeAction?"":"none";
-if(this.resizeHandle){
-this.resizeHandle.domNode.style.display="";
-}
-this.drag.setDragHandle(this.titleBar);
-this.windowState="normal";
-}else{
-}
-}
-},toggleDisplay:function(){
-if(this.windowState=="minimized"){
-this.restoreWindow();
-}else{
-this.minimizeWindow();
-}
-},closeWindow:function(evt){
-dojo.html.removeNode(this.domNode);
-this.destroy();
-},onMouseDown:function(evt){
-this.bringToTop();
-},bringToTop:function(){
-var _b1b=dojo.widget.manager.getWidgetsByType(this.widgetType);
-var _b1c=[];
-for(var x=0;x<_b1b.length;x++){
-if(this.widgetId!=_b1b[x].widgetId){
-_b1c.push(_b1b[x]);
-}
-}
-_b1c.sort(function(a,b){
-return a.domNode.style.zIndex-b.domNode.style.zIndex;
-});
-_b1c.push(this);
-var _b20=100;
-for(x=0;x<_b1c.length;x++){
-_b1c[x].domNode.style.zIndex=_b20+x*2;
-}
-},_setInitialWindowState:function(){
-if(this.isShowing()){
-this.width=-1;
-var mb=dojo.html.getMarginBox(this.domNode);
-this.resizeTo(mb.width,mb.height);
-}
-if(this.windowState=="maximized"){
-this.maximizeWindow();
-this.show();
-return;
-}
-if(this.windowState=="normal"){
-this.show();
-return;
-}
-if(this.windowState=="minimized"){
-this.hide();
-return;
-}
-this.windowState="minimized";
-},_taskBarSetup:function(){
-var _b22=dojo.widget.getWidgetById(this.taskBarId);
-if(!_b22){
-if(this._taskBarConnectAttempts<this._max_taskBarConnectAttempts){
-dojo.lang.setTimeout(this,this._taskBarSetup,50);
-this._taskBarConnectAttempts++;
-}else{
-dojo.debug("Unable to connect to the taskBar");
-}
-return;
-}
-_b22.addChild(this);
-},showFloatingPane:function(){
-this.bringToTop();
-},onFloatingPaneShow:function(){
-var mb=dojo.html.getMarginBox(this.domNode);
-this.resizeTo(mb.width,mb.height);
-},resizeTo:function(_b24,_b25){
-dojo.html.setMarginBox(this.domNode,{width:_b24,height:_b25});
-dojo.widget.html.layout(this.domNode,[{domNode:this.titleBar,layoutAlign:"top"},{domNode:this.resizeBar,layoutAlign:"bottom"},{domNode:this.containerNode,layoutAlign:"client"}]);
-dojo.widget.html.layout(this.containerNode,this.children,"top-bottom");
-this.bgIframe.onResized();
-if(this.shadow){
-this.shadow.size(_b24,_b25);
-}
-this.onResized();
-},checkSize:function(){
-},destroyFloatingPane:function(){
-if(this.resizeHandle){
-this.resizeHandle.destroy();
-this.resizeHandle=null;
-}
-}});
-dojo.widget.defineWidget("dojo.widget.FloatingPane",[dojo.widget.ContentPane,dojo.widget.FloatingPaneBase],{fillInTemplate:function(args,frag){
-this.fillInFloatingPaneTemplate(args,frag);
-dojo.widget.FloatingPane.superclass.fillInTemplate.call(this,args,frag);
-},postCreate:function(){
-dojo.widget.FloatingPaneBase.prototype.postCreate.apply(this,arguments);
-dojo.widget.FloatingPane.superclass.postCreate.apply(this,arguments);
-},show:function(){
-dojo.widget.FloatingPane.superclass.show.apply(this,arguments);
-this.showFloatingPane();
-},onShow:function(){
-dojo.widget.FloatingPane.superclass.onShow.call(this);
-this.onFloatingPaneShow();
-},destroy:function(){
-this.destroyFloatingPane();
-dojo.widget.FloatingPane.superclass.destroy.apply(this,arguments);
-}});
-dojo.widget.defineWidget("dojo.widget.ModalFloatingPane",[dojo.widget.FloatingPane,dojo.widget.ModalDialogBase],{windowState:"minimized",displayCloseAction:true,postCreate:function(){
-dojo.widget.ModalDialogBase.prototype.postCreate.call(this);
-dojo.widget.ModalFloatingPane.superclass.postCreate.call(this);
-},show:function(){
-this.showModalDialog();
-dojo.widget.ModalFloatingPane.superclass.show.apply(this,arguments);
-this.bg.style.zIndex=this.domNode.style.zIndex-1;
-},hide:function(){
-this.hideModalDialog();
-dojo.widget.ModalFloatingPane.superclass.hide.apply(this,arguments);
-},closeWindow:function(){
-this.hide();
-dojo.widget.ModalFloatingPane.superclass.closeWindow.apply(this,arguments);
-}});
-dojo.provide("dojo.widget.Editor2Plugin.AlwaysShowToolbar");
-dojo.event.topic.subscribe("dojo.widget.Editor2::onLoad",function(_b28){
-if(_b28.toolbarAlwaysVisible){
-var p=new dojo.widget.Editor2Plugin.AlwaysShowToolbar(_b28);
-}
-});
-dojo.declare("dojo.widget.Editor2Plugin.AlwaysShowToolbar",null,function(_b2a){
-this.editor=_b2a;
-this.editor.registerLoadedPlugin(this);
-this.setup();
-},{_scrollSetUp:false,_fixEnabled:false,_scrollThreshold:false,_handleScroll:true,setup:function(){
-var tdn=this.editor.toolbarWidget;
-if(!tdn.tbBgIframe){
-tdn.tbBgIframe=new dojo.html.BackgroundIframe(tdn.domNode);
-tdn.tbBgIframe.onResized();
-}
-this.scrollInterval=setInterval(dojo.lang.hitch(this,"globalOnScrollHandler"),100);
-dojo.event.connect("before",this.editor.toolbarWidget,"destroy",this,"destroy");
-},globalOnScrollHandler:function(){
-var isIE=dojo.render.html.ie;
-if(!this._handleScroll){
-return;
-}
-var dh=dojo.html;
-var tdn=this.editor.toolbarWidget.domNode;
-var db=dojo.body();
-if(!this._scrollSetUp){
-this._scrollSetUp=true;
-var _b30=dh.getMarginBox(this.editor.domNode).width;
-this._scrollThreshold=dh.abs(tdn,true).y;
-if((isIE)&&(db)&&(dh.getStyle(db,"background-image")=="none")){
-with(db.style){
-backgroundImage="url("+dojo.uri.dojoUri("src/widget/templates/images/blank.gif")+")";
-backgroundAttachment="fixed";
-}
-}
-}
-var _b31=(window["pageYOffset"])?window["pageYOffset"]:(document["documentElement"]||document["body"]).scrollTop;
-if(_b31>this._scrollThreshold){
-if(!this._fixEnabled){
-var _b32=dojo.html.getMarginBox(tdn);
-this.editor.editorObject.style.marginTop=_b32.height+"px";
-if(isIE){
-tdn.style.left=dojo.html.abs(tdn,dojo.html.boxSizing.MARGIN_BOX).x;
-if(tdn.previousSibling){
-this._IEOriginalPos=["after",tdn.previousSibling];
-}else{
-if(tdn.nextSibling){
-this._IEOriginalPos=["before",tdn.nextSibling];
-}else{
-this._IEOriginalPos=["",tdn.parentNode];
-}
-}
-dojo.body().appendChild(tdn);
-dojo.html.addClass(tdn,"IEFixedToolbar");
-}else{
-with(tdn.style){
-position="fixed";
-top="0px";
-}
-}
-tdn.style.width=_b32.width+"px";
-tdn.style.zIndex=1000;
-this._fixEnabled=true;
-}
-if(!dojo.render.html.safari){
-var _b33=(this.height)?parseInt(this.editor.height):this.editor._lastHeight;
-if(_b31>(this._scrollThreshold+_b33)){
-tdn.style.display="none";
-}else{
-tdn.style.display="";
-}
-}
-}else{
-if(this._fixEnabled){
-(this.editor.object||this.editor.iframe).style.marginTop=null;
-with(tdn.style){
-position="";
-top="";
-zIndex="";
-display="";
-}
-if(isIE){
-tdn.style.left="";
-dojo.html.removeClass(tdn,"IEFixedToolbar");
-if(this._IEOriginalPos){
-dojo.html.insertAtPosition(tdn,this._IEOriginalPos[1],this._IEOriginalPos[0]);
-this._IEOriginalPos=null;
-}else{
-dojo.html.insertBefore(tdn,this.editor.object||this.editor.iframe);
-}
-}
-tdn.style.width="";
-this._fixEnabled=false;
-}
-}
-},destroy:function(){
-this._IEOriginalPos=null;
-this._handleScroll=false;
-clearInterval(this.scrollInterval);
-this.editor.unregisterLoadedPlugin(this);
-if(dojo.render.html.ie){
-dojo.html.removeClass(this.editor.toolbarWidget.domNode,"IEFixedToolbar");
-}
-}});
-dojo.provide("dojo.widget.Editor2");
-dojo.widget.Editor2Manager=new dojo.widget.HandlerManager;
-dojo.lang.mixin(dojo.widget.Editor2Manager,{_currentInstance:null,commandState:{Disabled:0,Latched:1,Enabled:2},getCurrentInstance:function(){
-return this._currentInstance;
-},setCurrentInstance:function(inst){
-this._currentInstance=inst;
-},getCommand:function(_b35,name){
-var _b37;
-name=name.toLowerCase();
-for(var i=0;i<this._registeredHandlers.length;i++){
-_b37=this._registeredHandlers[i](_b35,name);
-if(_b37){
-return _b37;
-}
-}
-switch(name){
-case "htmltoggle":
-_b37=new dojo.widget.Editor2BrowserCommand(_b35,name);
-break;
-case "formatblock":
-_b37=new dojo.widget.Editor2FormatBlockCommand(_b35,name);
-break;
-case "anchor":
-_b37=new dojo.widget.Editor2Command(_b35,name);
-break;
-case "createlink":
-_b37=new dojo.widget.Editor2DialogCommand(_b35,name,{contentFile:"dojo.widget.Editor2Plugin.CreateLinkDialog",contentClass:"Editor2CreateLinkDialog",title:"Insert/Edit Link",width:"300px",height:"200px"});
-break;
-case "insertimage":
-_b37=new dojo.widget.Editor2DialogCommand(_b35,name,{contentFile:"dojo.widget.Editor2Plugin.InsertImageDialog",contentClass:"Editor2InsertImageDialog",title:"Insert/Edit Image",width:"400px",height:"270px"});
-break;
-default:
-var _b39=this.getCurrentInstance();
-if((_b39&&_b39.queryCommandAvailable(name))||(!_b39&&dojo.widget.Editor2.prototype.queryCommandAvailable(name))){
-_b37=new dojo.widget.Editor2BrowserCommand(_b35,name);
-}else{
-dojo.debug("dojo.widget.Editor2Manager.getCommand: Unknown command "+name);
-return;
-}
-}
-return _b37;
-},destroy:function(){
-this._currentInstance=null;
-dojo.widget.HandlerManager.prototype.destroy.call(this);
-}});
-dojo.addOnUnload(dojo.widget.Editor2Manager,"destroy");
-dojo.lang.declare("dojo.widget.Editor2Command",null,function(_b3a,name){
-this._editor=_b3a;
-this._updateTime=0;
-this._name=name;
-},{_text:"Unknown",execute:function(para){
-dojo.unimplemented("dojo.widget.Editor2Command.execute");
-},getText:function(){
-return this._text;
-},getState:function(){
-return dojo.widget.Editor2Manager.commandState.Enabled;
-},destroy:function(){
-}});
-dojo.widget.Editor2BrowserCommandNames={"bold":"Bold","copy":"Copy","cut":"Cut","Delete":"Delete","indent":"Indent","inserthorizontalrule":"Horizental Rule","insertorderedlist":"Numbered List","insertunorderedlist":"Bullet List","italic":"Italic","justifycenter":"Align Center","justifyfull":"Justify","justifyleft":"Align Left","justifyright":"Align Right","outdent":"Outdent","paste":"Paste","redo":"Redo","removeformat":"Remove Format","selectall":"Select All","strikethrough":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Underline","undo":"Undo","unlink":"Remove Link","createlink":"Create Link","insertimage":"Insert Image","htmltoggle":"HTML Source","forecolor":"Foreground Color","hilitecolor":"Background Color","plainformatblock":"Paragraph Style","formatblock":"Paragraph Style","fontsize":"Font Size","fontname":"Font Name"};
-dojo.lang.declare("dojo.widget.Editor2BrowserCommand",dojo.widget.Editor2Command,function(_b3d,name){
-var text=dojo.widget.Editor2BrowserCommandNames[name.toLowerCase()];
-if(text){
-this._text=text;
-}
-},{execute:function(para){
-this._editor.execCommand(this._name,para);
-},getState:function(){
-if(this._editor._lastStateTimestamp>this._updateTime||this._state==undefined){
-this._updateTime=this._editor._lastStateTimestamp;
-try{
-if(this._editor.queryCommandEnabled(this._name)){
-if(this._editor.queryCommandState(this._name)){
-this._state=dojo.widget.Editor2Manager.commandState.Latched;
-}else{
-this._state=dojo.widget.Editor2Manager.commandState.Enabled;
-}
-}else{
-this._state=dojo.widget.Editor2Manager.commandState.Disabled;
-}
-}
-catch(e){
-this._state=dojo.widget.Editor2Manager.commandState.Enabled;
-}
-}
-return this._state;
-},getValue:function(){
-try{
-return this._editor.queryCommandValue(this._name);
-}
-catch(e){
-}
-}});
-dojo.lang.declare("dojo.widget.Editor2FormatBlockCommand",dojo.widget.Editor2BrowserCommand,{});
-dojo.widget.defineWidget("dojo.widget.Editor2Dialog",[dojo.widget.HtmlWidget,dojo.widget.FloatingPaneBase,dojo.widget.ModalDialogBase],{templatePath:dojo.uri.dojoUri("src/widget/templates/Editor2/EditorDialog.html"),modal:true,width:"",height:"",windowState:"minimized",displayCloseAction:true,contentFile:"",contentClass:"",fillInTemplate:function(args,frag){
-this.fillInFloatingPaneTemplate(args,frag);
-dojo.widget.Editor2Dialog.superclass.fillInTemplate.call(this,args,frag);
-},postCreate:function(){
-if(this.contentFile){
-dojo.require(this.contentFile);
-}
-if(this.modal){
-dojo.widget.ModalDialogBase.prototype.postCreate.call(this);
-}else{
-with(this.domNode.style){
-zIndex=999;
-display="none";
-}
-}
-dojo.widget.FloatingPaneBase.prototype.postCreate.apply(this,arguments);
-dojo.widget.Editor2Dialog.superclass.postCreate.call(this);
-if(this.width&&this.height){
-with(this.domNode.style){
-width=this.width;
-height=this.height;
-}
-}
-},createContent:function(){
-if(!this.contentWidget&&this.contentClass){
-this.contentWidget=dojo.widget.createWidget(this.contentClass);
-this.addChild(this.contentWidget);
-}
-},show:function(){
-if(!this.contentWidget){
-dojo.widget.Editor2Dialog.superclass.show.apply(this,arguments);
-this.createContent();
-dojo.widget.Editor2Dialog.superclass.hide.call(this);
-}
-if(!this.contentWidget||!this.contentWidget.loadContent()){
-return;
-}
-this.showFloatingPane();
-dojo.widget.Editor2Dialog.superclass.show.apply(this,arguments);
-if(this.modal){
-this.showModalDialog();
-}
-if(this.modal){
-this.bg.style.zIndex=this.domNode.style.zIndex-1;
-}
-},onShow:function(){
-dojo.widget.Editor2Dialog.superclass.onShow.call(this);
-this.onFloatingPaneShow();
-},closeWindow:function(){
-this.hide();
-dojo.widget.Editor2Dialog.superclass.closeWindow.apply(this,arguments);
-},hide:function(){
-if(this.modal){
-this.hideModalDialog();
-}
-dojo.widget.Editor2Dialog.superclass.hide.call(this);
-},checkSize:function(){
-if(this.isShowing()){
-if(this.modal){
-this._sizeBackground();
-}
-this.placeModalDialog();
-this.onResized();
-}
-}});
-dojo.widget.defineWidget("dojo.widget.Editor2DialogContent",dojo.widget.HtmlWidget,{widgetsInTemplate:true,loadContent:function(){
-return true;
-},cancel:function(){
-this.parent.hide();
-}});
-dojo.lang.declare("dojo.widget.Editor2DialogCommand",dojo.widget.Editor2BrowserCommand,function(_b43,name,_b45){
-this.dialogParas=_b45;
-},{execute:function(){
-if(!this.dialog){
-if(!this.dialogParas.contentFile||!this.dialogParas.contentClass){
-alert("contentFile and contentClass should be set for dojo.widget.Editor2DialogCommand.dialogParas!");
-return;
-}
-this.dialog=dojo.widget.createWidget("Editor2Dialog",this.dialogParas);
-dojo.body().appendChild(this.dialog.domNode);
-dojo.event.connect(this,"destroy",this.dialog,"destroy");
-}
-this.dialog.show();
-},getText:function(){
-return this.dialogParas.title||dojo.widget.Editor2DialogCommand.superclass.getText.call(this);
-}});
-dojo.widget.Editor2ToolbarGroups={};
-dojo.widget.defineWidget("dojo.widget.Editor2",dojo.widget.RichText,function(){
-this._loadedCommands={};
-},{toolbarAlwaysVisible:false,toolbarWidget:null,scrollInterval:null,toolbarTemplatePath:dojo.uri.dojoUri("src/widget/templates/EditorToolbarOneline.html"),toolbarTemplateCssPath:null,toolbarPlaceHolder:"",_inSourceMode:false,_htmlEditNode:null,toolbarGroup:"",shareToolbar:false,contextMenuGroupSet:"",editorOnLoad:function(){
-dojo.event.topic.publish("dojo.widget.Editor2::preLoadingToolbar",this);
-if(this.toolbarAlwaysVisible){
-dojo.require("dojo.widget.Editor2Plugin.AlwaysShowToolbar");
-}
-if(this.toolbarWidget){
-this.toolbarWidget.show();
-dojo.html.insertBefore(this.toolbarWidget.domNode,this.domNode.firstChild);
-}else{
-if(this.shareToolbar){
-dojo.deprecated("Editor2:shareToolbar is deprecated in favor of toolbarGroup","0.5");
-this.toolbarGroup="defaultDojoToolbarGroup";
-}
-if(this.toolbarGroup){
-if(dojo.widget.Editor2ToolbarGroups[this.toolbarGroup]){
-this.toolbarWidget=dojo.widget.Editor2ToolbarGroups[this.toolbarGroup];
-}
-}
-if(!this.toolbarWidget){
-var _b46={shareGroup:this.toolbarGroup,parent:this};
-_b46.templatePath=this.toolbarTemplatePath;
-if(this.toolbarTemplateCssPath){
-_b46.templateCssPath=this.toolbarTemplateCssPath;
-}
-if(this.toolbarPlaceHolder){
-this.toolbarWidget=dojo.widget.createWidget("Editor2Toolbar",_b46,dojo.byId(this.toolbarPlaceHolder),"after");
-}else{
-this.toolbarWidget=dojo.widget.createWidget("Editor2Toolbar",_b46,this.domNode.firstChild,"before");
-}
-if(this.toolbarGroup){
-dojo.widget.Editor2ToolbarGroups[this.toolbarGroup]=this.toolbarWidget;
-}
-dojo.event.connect(this,"close",this.toolbarWidget,"hide");
-this.toolbarLoaded();
-}
-}
-dojo.event.topic.registerPublisher("Editor2.clobberFocus",this,"clobberFocus");
-dojo.event.topic.subscribe("Editor2.clobberFocus",this,"setBlur");
-dojo.event.topic.publish("dojo.widget.Editor2::onLoad",this);
-},toolbarLoaded:function(){
-},registerLoadedPlugin:function(obj){
-if(!this.loadedPlugins){
-this.loadedPlugins=[];
-}
-this.loadedPlugins.push(obj);
-},unregisterLoadedPlugin:function(obj){
-for(var i in this.loadedPlugins){
-if(this.loadedPlugins[i]===obj){
-delete this.loadedPlugins[i];
-return;
-}
-}
-dojo.debug("dojo.widget.Editor2.unregisterLoadedPlugin: unknow plugin object: "+obj);
-},execCommand:function(_b4a,_b4b){
-switch(_b4a.toLowerCase()){
-case "htmltoggle":
-this.toggleHtmlEditing();
-break;
-default:
-dojo.widget.Editor2.superclass.execCommand.apply(this,arguments);
-}
-},queryCommandEnabled:function(_b4c,_b4d){
-switch(_b4c.toLowerCase()){
-case "htmltoggle":
-return true;
-default:
-if(this._inSourceMode){
-return false;
-}
-return dojo.widget.Editor2.superclass.queryCommandEnabled.apply(this,arguments);
-}
-},queryCommandState:function(_b4e,_b4f){
-switch(_b4e.toLowerCase()){
-case "htmltoggle":
-return this._inSourceMode;
-default:
-return dojo.widget.Editor2.superclass.queryCommandState.apply(this,arguments);
-}
-},onClick:function(e){
-dojo.widget.Editor2.superclass.onClick.call(this,e);
-if(dojo.widget.PopupManager){
-if(!e){
-e=this.window.event;
-}
-dojo.widget.PopupManager.onClick(e);
-}
-},clobberFocus:function(){
-},toggleHtmlEditing:function(){
-if(this===dojo.widget.Editor2Manager.getCurrentInstance()){
-if(!this._inSourceMode){
-var html=this.getEditorContent();
-this._inSourceMode=true;
-if(!this._htmlEditNode){
-this._htmlEditNode=dojo.doc().createElement("textarea");
-dojo.html.insertAfter(this._htmlEditNode,this.editorObject);
-}
-this._htmlEditNode.style.display="";
-this._htmlEditNode.style.width="100%";
-this._htmlEditNode.style.height=dojo.html.getBorderBox(this.editNode).height+"px";
-this._htmlEditNode.value=html;
-with(this.editorObject.style){
-position="absolute";
-left="-2000px";
-top="-2000px";
-}
-}else{
-this._inSourceMode=false;
-this._htmlEditNode.blur();
-with(this.editorObject.style){
-position="";
-left="";
-top="";
-}
-var html=this._htmlEditNode.value;
-dojo.lang.setTimeout(this,"replaceEditorContent",1,html);
-this._htmlEditNode.style.display="none";
-this.focus();
-}
-this.onDisplayChanged(null,true);
-}
-},setFocus:function(){
-if(dojo.widget.Editor2Manager.getCurrentInstance()===this){
-return;
-}
-this.clobberFocus();
-dojo.widget.Editor2Manager.setCurrentInstance(this);
-},setBlur:function(){
-},saveSelection:function(){
-this._bookmark=null;
-this._bookmark=dojo.withGlobal(this.window,dojo.html.selection.getBookmark);
-},restoreSelection:function(){
-if(this._bookmark){
-this.focus();
-dojo.withGlobal(this.window,"moveToBookmark",dojo.html.selection,[this._bookmark]);
-this._bookmark=null;
-}else{
-dojo.debug("restoreSelection: no saved selection is found!");
-}
-},_updateToolbarLastRan:null,_updateToolbarTimer:null,_updateToolbarFrequency:500,updateToolbar:function(_b52){
-if((!this.isLoaded)||(!this.toolbarWidget)){
-return;
-}
-var diff=new Date()-this._updateToolbarLastRan;
-if((!_b52)&&(this._updateToolbarLastRan)&&((diff<this._updateToolbarFrequency))){
-clearTimeout(this._updateToolbarTimer);
-var _b54=this;
-this._updateToolbarTimer=setTimeout(function(){
-_b54.updateToolbar();
-},this._updateToolbarFrequency/2);
-return;
-}else{
-this._updateToolbarLastRan=new Date();
-}
-if(dojo.widget.Editor2Manager.getCurrentInstance()!==this){
-return;
-}
-this.toolbarWidget.update();
-},destroy:function(_b55){
-this._htmlEditNode=null;
-dojo.event.disconnect(this,"close",this.toolbarWidget,"hide");
-if(!_b55){
-this.toolbarWidget.destroy();
-}
-dojo.widget.Editor2.superclass.destroy.call(this);
-},_lastStateTimestamp:0,onDisplayChanged:function(e,_b57){
-this._lastStateTimestamp=(new Date()).getTime();
-dojo.widget.Editor2.superclass.onDisplayChanged.call(this,e);
-this.updateToolbar(_b57);
-},onLoad:function(){
-try{
-dojo.widget.Editor2.superclass.onLoad.call(this);
-}
-catch(e){
-dojo.debug(e);
-}
-this.editorOnLoad();
-},onFocus:function(){
-dojo.widget.Editor2.superclass.onFocus.call(this);
-this.setFocus();
-},getEditorContent:function(){
-if(this._inSourceMode){
-return this._htmlEditNode.value;
-}
-return dojo.widget.Editor2.superclass.getEditorContent.call(this);
-},replaceEditorContent:function(html){
-if(this._inSourceMode){
-this._htmlEditNode.value=html;
-return;
-}
-dojo.widget.Editor2.superclass.replaceEditorContent.apply(this,arguments);
-},getCommand:function(name){
-if(this._loadedCommands[name]){
-return this._loadedCommands[name];
-}
-var cmd=dojo.widget.Editor2Manager.getCommand(this,name);
-this._loadedCommands[name]=cmd;
-return cmd;
-},shortcuts:[["bold"],["italic"],["underline"],["selectall","a"],["insertunorderedlist","\\"]],setupDefaultShortcuts:function(){
-var exec=function(cmd){
-return function(){
-cmd.execute();
-};
-};
-var self=this;
-dojo.lang.forEach(this.shortcuts,function(item){
-var cmd=self.getCommand(item[0]);
-if(cmd){
-self.addKeyHandler(item[1]?item[1]:item[0].charAt(0),item[2]==undefined?self.KEY_CTRL:item[2],exec(cmd));
-}
-});
-}});
-dojo.provide("dojo.string.Builder");
-dojo.string.Builder=function(str){
-this.arrConcat=(dojo.render.html.capable&&dojo.render.html["ie"]);
-var a=[];
-var b="";
-var _b63=this.length=b.length;
-if(this.arrConcat){
-if(b.length>0){
-a.push(b);
-}
-b="";
-}
-this.toString=this.valueOf=function(){
-return (this.arrConcat)?a.join(""):b;
-};
-this.append=function(){
-for(var x=0;x<arguments.length;x++){
-var s=arguments[x];
-if(dojo.lang.isArrayLike(s)){
-this.append.apply(this,s);
-}else{
-if(this.arrConcat){
-a.push(s);
-}else{
-b+=s;
-}
-_b63+=s.length;
-this.length=_b63;
-}
-}
-return this;
-};
-this.clear=function(){
-a=[];
-b="";
-_b63=this.length=0;
-return this;
-};
-this.remove=function(f,l){
-var s="";
-if(this.arrConcat){
-b=a.join("");
-}
-a=[];
-if(f>0){
-s=b.substring(0,(f-1));
-}
-b=s+b.substring(f+l);
-_b63=this.length=b.length;
-if(this.arrConcat){
-a.push(b);
-b="";
-}
-return this;
-};
-this.replace=function(o,n){
-if(this.arrConcat){
-b=a.join("");
-}
-a=[];
-b=b.replace(o,n);
-_b63=this.length=b.length;
-if(this.arrConcat){
-a.push(b);
-b="";
-}
-return this;
-};
-this.insert=function(idx,s){
-if(this.arrConcat){
-b=a.join("");
-}
-a=[];
-if(idx==0){
-b=s+b;
-}else{
-var t=b.split("");
-t.splice(idx,0,s);
-b=t.join("");
-}
-_b63=this.length=b.length;
-if(this.arrConcat){
-a.push(b);
-b="";
-}
-return this;
-};
-this.append.apply(this,arguments);
-};
-dojo.provide("dojo.string.*");
-dojo.provide("dojo.flash");
-dojo.flash=function(){
-};
-dojo.flash={flash6_version:null,flash8_version:null,ready:false,_visible:true,_loadedListeners:new Array(),_installingListeners:new Array(),setSwf:function(_b6e){
-if(_b6e==null||dojo.lang.isUndefined(_b6e)){
-return;
-}
-if(_b6e.flash6!=null&&!dojo.lang.isUndefined(_b6e.flash6)){
-this.flash6_version=_b6e.flash6;
-}
-if(_b6e.flash8!=null&&!dojo.lang.isUndefined(_b6e.flash8)){
-this.flash8_version=_b6e.flash8;
-}
-if(!dojo.lang.isUndefined(_b6e.visible)){
-this._visible=_b6e.visible;
-}
-this._initialize();
-},useFlash6:function(){
-if(this.flash6_version==null){
-return false;
-}else{
-if(this.flash6_version!=null&&dojo.flash.info.commVersion==6){
-return true;
-}else{
-return false;
-}
-}
-},useFlash8:function(){
-if(this.flash8_version==null){
-return false;
-}else{
-if(this.flash8_version!=null&&dojo.flash.info.commVersion==8){
-return true;
-}else{
-return false;
-}
-}
-},addLoadedListener:function(_b6f){
-this._loadedListeners.push(_b6f);
-},addInstallingListener:function(_b70){
-this._installingListeners.push(_b70);
-},loaded:function(){
-dojo.flash.ready=true;
-if(dojo.flash._loadedListeners.length>0){
-for(var i=0;i<dojo.flash._loadedListeners.length;i++){
-dojo.flash._loadedListeners[i].call(null);
-}
-}
-},installing:function(){
-if(dojo.flash._installingListeners.length>0){
-for(var i=0;i<dojo.flash._installingListeners.length;i++){
-dojo.flash._installingListeners[i].call(null);
-}
-}
-},_initialize:function(){
-var _b73=new dojo.flash.Install();
-dojo.flash.installer=_b73;
-if(_b73.needed()==true){
-_b73.install();
-}else{
-dojo.flash.obj=new dojo.flash.Embed(this._visible);
-dojo.flash.obj.write(dojo.flash.info.commVersion);
-dojo.flash.comm=new dojo.flash.Communicator();
-}
-}};
-dojo.flash.Info=function(){
-if(dojo.render.html.ie){
-document.writeln("<script language=\"VBScript\" type=\"text/vbscript\">");
-document.writeln("Function VBGetSwfVer(i)");
-document.writeln("  on error resume next");
-document.writeln("  Dim swControl, swVersion");
-document.writeln("  swVersion = 0");
-document.writeln("  set swControl = CreateObject(\"ShockwaveFlash.ShockwaveFlash.\" + CStr(i))");
-document.writeln("  if (IsObject(swControl)) then");
-document.writeln("    swVersion = swControl.GetVariable(\"$version\")");
-document.writeln("  end if");
-document.writeln("  VBGetSwfVer = swVersion");
-document.writeln("End Function");
-document.writeln("</script>");
-}
-this._detectVersion();
-this._detectCommunicationVersion();
-};
-dojo.flash.Info.prototype={version:-1,versionMajor:-1,versionMinor:-1,versionRevision:-1,capable:false,commVersion:6,installing:false,isVersionOrAbove:function(_b74,_b75,_b76){
-_b76=parseFloat("."+_b76);
-if(this.versionMajor>=_b74&&this.versionMinor>=_b75&&this.versionRevision>=_b76){
-return true;
-}else{
-return false;
-}
-},_detectVersion:function(){
-var _b77;
-for(var _b78=25;_b78>0;_b78--){
-if(dojo.render.html.ie){
-_b77=VBGetSwfVer(_b78);
-}else{
-_b77=this._JSFlashInfo(_b78);
-}
-if(_b77==-1){
-this.capable=false;
-return;
-}else{
-if(_b77!=0){
-var _b79;
-if(dojo.render.html.ie){
-var _b7a=_b77.split(" ");
-var _b7b=_b7a[1];
-_b79=_b7b.split(",");
-}else{
-_b79=_b77.split(".");
-}
-this.versionMajor=_b79[0];
-this.versionMinor=_b79[1];
-this.versionRevision=_b79[2];
-var _b7c=this.versionMajor+"."+this.versionRevision;
-this.version=parseFloat(_b7c);
-this.capable=true;
-break;
-}
-}
-}
-},_JSFlashInfo:function(_b7d){
-if(navigator.plugins!=null&&navigator.plugins.length>0){
-if(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]){
-var _b7e=navigator.plugins["Shockwave Flash 2.0"]?" 2.0":"";
-var _b7f=navigator.plugins["Shockwave Flash"+_b7e].description;
-var _b80=_b7f.split(" ");
-var _b81=_b80[2].split(".");
-var _b82=_b81[0];
-var _b83=_b81[1];
-if(_b80[3]!=""){
-var _b84=_b80[3].split("r");
-}else{
-var _b84=_b80[4].split("r");
-}
-var _b85=_b84[1]>0?_b84[1]:0;
-var _b86=_b82+"."+_b83+"."+_b85;
-return _b86;
-}
-}
-return -1;
-},_detectCommunicationVersion:function(){
-if(this.capable==false){
-this.commVersion=null;
-return;
-}
-if(typeof djConfig["forceFlashComm"]!="undefined"&&typeof djConfig["forceFlashComm"]!=null){
-this.commVersion=djConfig["forceFlashComm"];
-return;
-}
-if(dojo.render.html.safari==true||dojo.render.html.opera==true){
-this.commVersion=8;
-}else{
-this.commVersion=6;
-}
-}};
-dojo.flash.Embed=function(_b87){
-this._visible=_b87;
-};
-dojo.flash.Embed.prototype={width:215,height:138,id:"flashObject",_visible:true,protocol:function(){
-switch(window.location.protocol){
-case "https:":
-return "https";
-break;
-default:
-return "http";
-break;
-}
-},write:function(_b88,_b89){
-if(dojo.lang.isUndefined(_b89)){
-_b89=false;
-}
-var _b8a=new dojo.string.Builder();
-_b8a.append("width: "+this.width+"px; ");
-_b8a.append("height: "+this.height+"px; ");
-if(this._visible==false){
-_b8a.append("position: absolute; ");
-_b8a.append("z-index: 10000; ");
-_b8a.append("top: -1000px; ");
-_b8a.append("left: -1000px; ");
-}
-_b8a=_b8a.toString();
-var _b8b;
-var _b8c;
-if(_b88==6){
-_b8c=dojo.flash.flash6_version;
-var _b8d=djConfig.baseRelativePath;
-_b8c=_b8c+"?baseRelativePath="+escape(_b8d);
-_b8b="<embed id=\""+this.id+"\" src=\""+_b8c+"\" "+"    quality=\"high\" bgcolor=\"#ffffff\" "+"    width=\""+this.width+"\" height=\""+this.height+"\" "+"    name=\""+this.id+"\" "+"    align=\"middle\" allowScriptAccess=\"sameDomain\" "+"    type=\"application/x-shockwave-flash\" swLiveConnect=\"true\" "+"    pluginspage=\""+this.protocol()+"://www.macromedia.com/go/getflashplayer\">";
-}else{
-_b8c=dojo.flash.flash8_version;
-var _b8e=_b8c;
-var _b8f=_b8c;
-var _b8d=djConfig.baseRelativePath;
-if(_b89){
-var _b90=escape(window.location);
-document.title=document.title.slice(0,47)+" - Flash Player Installation";
-var _b91=escape(document.title);
-_b8e+="?MMredirectURL="+_b90+"&MMplayerType=ActiveX"+"&MMdoctitle="+_b91+"&baseRelativePath="+escape(_b8d);
-_b8f+="?MMredirectURL="+_b90+"&MMplayerType=PlugIn"+"&baseRelativePath="+escape(_b8d);
-}
-if(_b8f.indexOf("?")==-1){
-_b8f+="?baseRelativePath="+escape(_b8d)+"' ";
-}
-_b8b="<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" "+"codebase=\""+this.protocol()+"://fpdownload.macromedia.com/pub/shockwave/cabs/flash/"+"swflash.cab#version=8,0,0,0\" "+"width=\""+this.width+"\" "+"height=\""+this.height+"\" "+"id=\""+this.id+"\" "+"align=\"middle\"> "+"<param name=\"allowScriptAccess\" value=\"sameDomain\" /> "+"<param name=\"movie\" value=\""+_b8e+"\" /> "+"<param name=\"quality\" value=\"high\" /> "+"<param name=\"bgcolor\" value=\"#ffffff\" /> "+"<embed src=\""+_b8f+"' "+"quality=\"high\" "+"bgcolor=\"#ffffff\" "+"width=\""+this.width+"\" "+"height=\""+this.height+"\" "+"id=\""+this.id+"\" "+"name=\""+this.id+"\" "+"swLiveConnect=\"true\" "+"align=\"middle\" "+"allowScriptAccess=\"sameDomain\" "+"type=\"application/x-shockwave-flash\" "+"pluginspage=\""+this.protocol()+"://www.macromedia.com/go/getflashplayer\" />"+"</object>";
-}
-_b8b="<div id=\""+this.id+"Container\" style=\""+_b8a+"\"> "+_b8b+"</div>";
-document.writeln(_b8b);
-},get:function(){
-return document.getElementById(this.id);
-},setVisible:function(_b92){
-var _b93=dojo.byId(this.id+"Container");
-if(_b92==true){
-_b93.style.visibility="visible";
-}else{
-_b93.style.position="absolute";
-_b93.style.x="-1000px";
-_b93.style.y="-1000px";
-_b93.style.visibility="hidden";
-}
-},center:function(){
-var _b94=this.width;
-var _b95=this.height;
-var _b96=dojo.html.getScroll().offset;
-var _b97=dojo.html.getViewport();
-var x=_b96.x+(_b97.width-_b94)/2;
-var y=_b96.y+(_b97.height-_b95)/2;
-var _b9a=dojo.byId(this.id+"Container");
-_b9a.style.top=y+"px";
-_b9a.style.left=x+"px";
-}};
-dojo.flash.Communicator=function(){
-if(dojo.flash.useFlash6()){
-this._writeFlash6();
-}else{
-if(dojo.flash.useFlash8()){
-this._writeFlash8();
-}
-}
-};
-dojo.flash.Communicator.prototype={_writeFlash6:function(){
-var id=dojo.flash.obj.id;
-document.writeln("<script language=\"JavaScript\">");
-document.writeln("  function "+id+"_DoFSCommand(command, args){ ");
-document.writeln("    dojo.flash.comm._handleFSCommand(command, args); ");
-document.writeln("}");
-document.writeln("</script>");
-if(dojo.render.html.ie){
-document.writeln("<SCRIPT LANGUAGE=VBScript> ");
-document.writeln("on error resume next ");
-document.writeln("Sub "+id+"_FSCommand(ByVal command, ByVal args)");
-document.writeln(" call "+id+"_DoFSCommand(command, args)");
-document.writeln("end sub");
-document.writeln("</SCRIPT> ");
-}
-},_writeFlash8:function(){
-},_handleFSCommand:function(_b9c,args){
-if(_b9c!=null&&!dojo.lang.isUndefined(_b9c)&&/^FSCommand:(.*)/.test(_b9c)==true){
-_b9c=_b9c.match(/^FSCommand:(.*)/)[1];
-}
-if(_b9c=="addCallback"){
-this._fscommandAddCallback(_b9c,args);
-}else{
-if(_b9c=="call"){
-this._fscommandCall(_b9c,args);
-}else{
-if(_b9c=="fscommandReady"){
-this._fscommandReady();
-}
-}
-}
-},_fscommandAddCallback:function(_b9e,args){
-var _ba0=args;
-var _ba1=function(){
-return dojo.flash.comm._call(_ba0,arguments);
-};
-dojo.flash.comm[_ba0]=_ba1;
-dojo.flash.obj.get().SetVariable("_succeeded",true);
-},_fscommandCall:function(_ba2,args){
-var _ba4=dojo.flash.obj.get();
-var _ba5=args;
-var _ba6=parseInt(_ba4.GetVariable("_numArgs"));
-var _ba7=new Array();
-for(var i=0;i<_ba6;i++){
-var _ba9=_ba4.GetVariable("_"+i);
-_ba7.push(_ba9);
-}
-var _baa;
-if(_ba5.indexOf(".")==-1){
-_baa=window[_ba5];
-}else{
-_baa=eval(_ba5);
-}
-var _bab=null;
-if(!dojo.lang.isUndefined(_baa)&&_baa!=null){
-_bab=_baa.apply(null,_ba7);
-}
-_ba4.SetVariable("_returnResult",_bab);
-},_fscommandReady:function(){
-var _bac=dojo.flash.obj.get();
-_bac.SetVariable("fscommandReady","true");
-},_call:function(_bad,args){
-var _baf=dojo.flash.obj.get();
-_baf.SetVariable("_functionName",_bad);
-_baf.SetVariable("_numArgs",args.length);
-for(var i=0;i<args.length;i++){
-var _bb1=args[i];
-_bb1=_bb1.replace(/\0/g,"\\0");
-_baf.SetVariable("_"+i,_bb1);
-}
-_baf.TCallLabel("/_flashRunner","execute");
-var _bb2=_baf.GetVariable("_returnResult");
-_bb2=_bb2.replace(/\\0/g,"\x00");
-return _bb2;
-},_addExternalInterfaceCallback:function(_bb3){
-var _bb4=function(){
-var _bb5=new Array(arguments.length);
-for(var i=0;i<arguments.length;i++){
-_bb5[i]=arguments[i];
-}
-return dojo.flash.comm._execFlash(_bb3,_bb5);
-};
-dojo.flash.comm[_bb3]=_bb4;
-},_encodeData:function(data){
-var _bb8=/\&([^;]*)\;/g;
-data=data.replace(_bb8,"&amp;$1;");
-data=data.replace(/</g,"&lt;");
-data=data.replace(/>/g,"&gt;");
-data=data.replace("\\","&custom_backslash;&custom_backslash;");
-data=data.replace(/\n/g,"\\n");
-data=data.replace(/\r/g,"\\r");
-data=data.replace(/\f/g,"\\f");
-data=data.replace(/\0/g,"\\0");
-data=data.replace(/\'/g,"\\'");
-data=data.replace(/\"/g,"\\\"");
-return data;
-},_decodeData:function(data){
-if(data==null||typeof data=="undefined"){
-return data;
-}
-data=data.replace(/\&custom_lt\;/g,"<");
-data=data.replace(/\&custom_gt\;/g,">");
-data=eval("\""+data+"\"");
-return data;
-},_chunkArgumentData:function(_bba,_bbb){
-var _bbc=dojo.flash.obj.get();
-var _bbd=Math.ceil(_bba.length/1024);
-for(var i=0;i<_bbd;i++){
-var _bbf=i*1024;
-var _bc0=i*1024+1024;
-if(i==(_bbd-1)){
-_bc0=i*1024+_bba.length;
-}
-var _bc1=_bba.substring(_bbf,_bc0);
-_bc1=this._encodeData(_bc1);
-_bbc.CallFunction("<invoke name=\"chunkArgumentData\" "+"returntype=\"javascript\">"+"<arguments>"+"<string>"+_bc1+"</string>"+"<number>"+_bbb+"</number>"+"</arguments>"+"</invoke>");
-}
-},_chunkReturnData:function(){
-var _bc2=dojo.flash.obj.get();
-var _bc3=_bc2.getReturnLength();
-var _bc4=new Array();
-for(var i=0;i<_bc3;i++){
-var _bc6=_bc2.CallFunction("<invoke name=\"chunkReturnData\" "+"returntype=\"javascript\">"+"<arguments>"+"<number>"+i+"</number>"+"</arguments>"+"</invoke>");
-if(_bc6=="\"\""||_bc6=="''"){
-_bc6="";
-}else{
-_bc6=_bc6.substring(1,_bc6.length-1);
-}
-_bc4.push(_bc6);
-}
-var _bc7=_bc4.join("");
-return _bc7;
-},_execFlash:function(_bc8,_bc9){
-var _bca=dojo.flash.obj.get();
-_bca.startExec();
-_bca.setNumberArguments(_bc9.length);
-for(var i=0;i<_bc9.length;i++){
-this._chunkArgumentData(_bc9[i],i);
-}
-_bca.exec(_bc8);
-var _bcc=this._chunkReturnData();
-_bcc=this._decodeData(_bcc);
-_bca.endExec();
-return _bcc;
-}};
-dojo.flash.Install=function(){
-};
-dojo.flash.Install.prototype={needed:function(){
-if(dojo.flash.info.capable==false){
-return true;
-}
-if(dojo.render.os.mac==true&&!dojo.flash.info.isVersionOrAbove(8,0,0)){
-return true;
-}
-if(!dojo.flash.info.isVersionOrAbove(6,0,0)){
-return true;
-}
-return false;
-},install:function(){
-dojo.flash.info.installing=true;
-dojo.flash.installing();
-if(dojo.flash.info.capable==false){
-var _bcd=new dojo.flash.Embed(false);
-_bcd.write(8);
-}else{
-if(dojo.flash.info.isVersionOrAbove(6,0,65)){
-var _bcd=new dojo.flash.Embed(false);
-_bcd.write(8,true);
-_bcd.setVisible(true);
-_bcd.center();
-}else{
-alert("This content requires a more recent version of the Macromedia "+" Flash Player.");
-window.location.href=+dojo.flash.Embed.protocol()+"://www.macromedia.com/go/getflashplayer";
-}
-}
-},_onInstallStatus:function(msg){
-if(msg=="Download.Complete"){
-dojo.flash._initialize();
-}else{
-if(msg=="Download.Cancelled"){
-alert("This content requires a more recent version of the Macromedia "+" Flash Player.");
-window.location.href=dojo.flash.Embed.protocol()+"://www.macromedia.com/go/getflashplayer";
-}else{
-if(msg=="Download.Failed"){
-alert("There was an error downloading the Flash Player update. "+"Please try again later, or visit macromedia.com to download "+"the latest version of the Flash plugin.");
-}
-}
-}
-}};
-dojo.flash.info=new dojo.flash.Info();
-dojo.provide("dojo.storage");
-dojo.storage=new function(){
-};
-dojo.declare("dojo.storage",null,{SUCCESS:"success",FAILED:"failed",PENDING:"pending",SIZE_NOT_AVAILABLE:"Size not available",SIZE_NO_LIMIT:"No size limit",namespace:"default",onHideSettingsUI:null,initialize:function(){
-dojo.unimplemented("dojo.storage.initialize");
-},isAvailable:function(){
-dojo.unimplemented("dojo.storage.isAvailable");
-},put:function(key,_bd0,_bd1){
-dojo.unimplemented("dojo.storage.put");
-},get:function(key){
-dojo.unimplemented("dojo.storage.get");
-},hasKey:function(key){
-return (this.get(key)!=null);
-},getKeys:function(){
-dojo.unimplemented("dojo.storage.getKeys");
-},clear:function(){
-dojo.unimplemented("dojo.storage.clear");
-},remove:function(key){
-dojo.unimplemented("dojo.storage.remove");
-},isPermanent:function(){
-dojo.unimplemented("dojo.storage.isPermanent");
-},getMaximumSize:function(){
-dojo.unimplemented("dojo.storage.getMaximumSize");
-},hasSettingsUI:function(){
-return false;
-},showSettingsUI:function(){
-dojo.unimplemented("dojo.storage.showSettingsUI");
-},hideSettingsUI:function(){
-dojo.unimplemented("dojo.storage.hideSettingsUI");
-},getType:function(){
-dojo.unimplemented("dojo.storage.getType");
-},isValidKey:function(_bd5){
-if((_bd5==null)||(typeof _bd5=="undefined")){
-return false;
-}
-return /^[0-9A-Za-z_]*$/.test(_bd5);
-}});
-dojo.storage.manager=new function(){
-this.currentProvider=null;
-this.available=false;
-this._initialized=false;
-this._providers=[];
-this.namespace="default";
-this.initialize=function(){
-this.autodetect();
-};
-this.register=function(name,_bd7){
-this._providers[this._providers.length]=_bd7;
-this._providers[name]=_bd7;
-};
-this.setProvider=function(_bd8){
-};
-this.autodetect=function(){
-if(this._initialized==true){
-return;
-}
-var _bd9=null;
-for(var i=0;i<this._providers.length;i++){
-_bd9=this._providers[i];
-if(dojo.lang.isUndefined(djConfig["forceStorageProvider"])==false&&_bd9.getType()==djConfig["forceStorageProvider"]){
-_bd9.isAvailable();
-break;
-}else{
-if(dojo.lang.isUndefined(djConfig["forceStorageProvider"])==true&&_bd9.isAvailable()){
-break;
-}
-}
-}
-if(_bd9==null){
-this._initialized=true;
-this.available=false;
-this.currentProvider=null;
-dojo.raise("No storage provider found for this platform");
-}
-this.currentProvider=_bd9;
-for(var i in _bd9){
-dojo.storage[i]=_bd9[i];
-}
-dojo.storage.manager=this;
-dojo.storage.initialize();
-this._initialized=true;
-this.available=true;
-};
-this.isAvailable=function(){
-return this.available;
-};
-this.isInitialized=function(){
-if(this.currentProvider.getType()=="dojo.storage.browser.FlashStorageProvider"&&dojo.flash.ready==false){
-return false;
-}else{
-return this._initialized;
-}
-};
-this.supportsProvider=function(_bdb){
-try{
-var _bdc=eval("new "+_bdb+"()");
-var _bdd=_bdc.isAvailable();
-if(_bdd==null||typeof _bdd=="undefined"){
-return false;
-}
-return _bdd;
-}
-catch(exception){
-return false;
-}
-};
-this.getProvider=function(){
-return this.currentProvider;
-};
-this.loaded=function(){
-};
-};
-dojo.provide("dojo.json");
-dojo.json={jsonRegistry:new dojo.AdapterRegistry(),register:function(name,_bdf,wrap,_be1){
-dojo.json.jsonRegistry.register(name,_bdf,wrap,_be1);
-},evalJson:function(json){
-try{
-return eval("("+json+")");
-}
-catch(e){
-dojo.debug(e);
-return json;
-}
-},serialize:function(o){
-var _be4=typeof (o);
-if(_be4=="undefined"){
-return "undefined";
-}else{
-if((_be4=="number")||(_be4=="boolean")){
-return o+"";
-}else{
-if(o===null){
-return "null";
-}
-}
-}
-if(_be4=="string"){
-return dojo.string.escapeString(o);
-}
-var me=arguments.callee;
-var _be6;
-if(typeof (o.__json__)=="function"){
-_be6=o.__json__();
-if(o!==_be6){
-return me(_be6);
-}
-}
-if(typeof (o.json)=="function"){
-_be6=o.json();
-if(o!==_be6){
-return me(_be6);
-}
-}
-if(_be4!="function"&&typeof (o.length)=="number"){
-var res=[];
-for(var i=0;i<o.length;i++){
-var val=me(o[i]);
-if(typeof (val)!="string"){
-val="undefined";
-}
-res.push(val);
-}
-return "["+res.join(",")+"]";
-}
-try{
-window.o=o;
-_be6=dojo.json.jsonRegistry.match(o);
-return me(_be6);
-}
-catch(e){
-}
-if(_be4=="function"){
-return null;
-}
-res=[];
-for(var k in o){
-var _beb;
-if(typeof (k)=="number"){
-_beb="\""+k+"\"";
-}else{
-if(typeof (k)=="string"){
-_beb=dojo.string.escapeString(k);
-}else{
-continue;
-}
-}
-val=me(o[k]);
-if(typeof (val)!="string"){
-continue;
-}
-res.push(_beb+":"+val);
-}
-return "{"+res.join(",")+"}";
-}};
-dojo.provide("dojo.storage.browser");
-dojo.storage.browser.WhatWGStorageProvider=function(){
-};
-dojo.inherits(dojo.storage.browser.WhatWGStorageProvider,dojo.storage);
-dojo.lang.extend(dojo.storage.browser.WhatWGStorageProvider,{namespace:"default",initialized:false,_domain:null,_available:null,_statusHandler:null,initialize:function(){
-if(djConfig["disableWhatWGStorage"]==true){
-return;
-}
-this._domain=location.hostname;
-this.initialized=true;
-dojo.storage.manager.loaded();
-},isAvailable:function(){
-try{
-var _bec=globalStorage[location.hostname];
-}
-catch(e){
-this._available=false;
-return this._available;
-}
-this._available=true;
-return this._available;
-},put:function(key,_bee,_bef){
-if(this.isValidKey(key)==false){
-dojo.raise("Invalid key given: "+key);
-}
-this._statusHandler=_bef;
-if(dojo.lang.isString(_bee)){
-_bee="string:"+_bee;
-}else{
-_bee=dojo.json.serialize(_bee);
-}
-window.addEventListener("storage",function(evt){
-_bef.call(null,dojo.storage.SUCCESS,key);
-},false);
-try{
-var _bf1=globalStorage[this._domain];
-_bf1.setItem(key,_bee);
-}
-catch(e){
-this._statusHandler.call(null,dojo.storage.FAILED,key,e.toString());
-}
-},get:function(key){
-if(this.isValidKey(key)==false){
-dojo.raise("Invalid key given: "+key);
-}
-var _bf3=globalStorage[this._domain];
-var _bf4=_bf3.getItem(key);
-if(_bf4==null){
-return null;
-}
-_bf4=_bf4.value;
-if(!dojo.lang.isUndefined(_bf4)&&_bf4!=null&&/^string:/.test(_bf4)){
-_bf4=_bf4.substring("string:".length);
-}else{
-_bf4=dojo.json.evalJson(_bf4);
-}
-return _bf4;
-},getKeys:function(){
-var _bf5=globalStorage[this._domain];
-var _bf6=new Array();
-for(i=0;i<_bf5.length;i++){
-_bf6[i]=_bf5.key(i);
-}
-return _bf6;
-},clear:function(){
-var _bf7=globalStorage[this._domain];
-var keys=new Array();
-for(var i=0;i<_bf7.length;i++){
-keys[keys.length]=_bf7.key(i);
-}
-for(var i=0;i<keys.length;i++){
-_bf7.removeItem(keys[i]);
-}
-},remove:function(key){
-var _bfb=globalStorage[this._domain];
-_bfb.removeItem(key);
-},isPermanent:function(){
-return true;
-},getMaximumSize:function(){
-return dojo.storage.SIZE_NO_LIMIT;
-},hasSettingsUI:function(){
-return false;
-},showSettingsUI:function(){
-dojo.raise(this.getType()+" does not support a storage settings user-interface");
-},hideSettingsUI:function(){
-dojo.raise(this.getType()+" does not support a storage settings user-interface");
-},getType:function(){
-return "dojo.storage.browser.WhatWGStorageProvider";
-}});
-dojo.storage.browser.FlashStorageProvider=function(){
-};
-dojo.inherits(dojo.storage.browser.FlashStorageProvider,dojo.storage);
-dojo.lang.extend(dojo.storage.browser.FlashStorageProvider,{namespace:"default",initialized:false,_available:null,_statusHandler:null,initialize:function(){
-if(djConfig["disableFlashStorage"]==true){
-return;
-}
-var _bfc=function(){
-dojo.storage._flashLoaded();
-};
-dojo.flash.addLoadedListener(_bfc);
-var _bfd=dojo.uri.dojoUri("Storage_version6.swf").toString();
-var _bfe=dojo.uri.dojoUri("Storage_version8.swf").toString();
-dojo.flash.setSwf({flash6:_bfd,flash8:_bfe,visible:false});
-},isAvailable:function(){
-if(djConfig["disableFlashStorage"]==true){
-this._available=false;
-}else{
-this._available=true;
-}
-return this._available;
-},put:function(key,_c00,_c01){
-if(this.isValidKey(key)==false){
-dojo.raise("Invalid key given: "+key);
-}
-this._statusHandler=_c01;
-if(dojo.lang.isString(_c00)){
-_c00="string:"+_c00;
-}else{
-_c00=dojo.json.serialize(_c00);
-}
-dojo.flash.comm.put(key,_c00,this.namespace);
-},get:function(key){
-if(this.isValidKey(key)==false){
-dojo.raise("Invalid key given: "+key);
-}
-var _c03=dojo.flash.comm.get(key,this.namespace);
-if(_c03==""){
-return null;
-}
-if(!dojo.lang.isUndefined(_c03)&&_c03!=null&&/^string:/.test(_c03)){
-_c03=_c03.substring("string:".length);
-}else{
-_c03=dojo.json.evalJson(_c03);
-}
-return _c03;
-},getKeys:function(){
-var _c04=dojo.flash.comm.getKeys(this.namespace);
-if(_c04==""){
-return [];
-}
-return _c04.split(",");
-},clear:function(){
-dojo.flash.comm.clear(this.namespace);
-},remove:function(key){
-dojo.unimplemented("dojo.storage.browser.FlashStorageProvider.remove");
-},isPermanent:function(){
-return true;
-},getMaximumSize:function(){
-return dojo.storage.SIZE_NO_LIMIT;
-},hasSettingsUI:function(){
-return true;
-},showSettingsUI:function(){
-dojo.flash.comm.showSettings();
-dojo.flash.obj.setVisible(true);
-dojo.flash.obj.center();
-},hideSettingsUI:function(){
-dojo.flash.obj.setVisible(false);
-if(dojo.storage.onHideSettingsUI!=null&&!dojo.lang.isUndefined(dojo.storage.onHideSettingsUI)){
-dojo.storage.onHideSettingsUI.call(null);
-}
-},getType:function(){
-return "dojo.storage.browser.FlashStorageProvider";
-},_flashLoaded:function(){
-this._initialized=true;
-dojo.storage.manager.loaded();
-},_onStatus:function(_c06,key){
-var ds=dojo.storage;
-var dfo=dojo.flash.obj;
-if(_c06==ds.PENDING){
-dfo.center();
-dfo.setVisible(true);
-}else{
-dfo.setVisible(false);
-}
-if((!dj_undef("_statusHandler",ds))&&(ds._statusHandler!=null)){
-ds._statusHandler.call(null,_c06,key);
-}
-}});
-dojo.storage.manager.register("dojo.storage.browser.WhatWGStorageProvider",new dojo.storage.browser.WhatWGStorageProvider());
-dojo.storage.manager.register("dojo.storage.browser.FlashStorageProvider",new dojo.storage.browser.FlashStorageProvider());
-dojo.storage.manager.initialize();
-dojo.provide("dojo.storage.*");
 
-
-__CPAN_EDITION__ moxie build.txt
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/lang/common.js,
-../src/dom.js,
-../src/html/common.js,
-../src/uri/Uri.js,
-../src/html/style.js,
-../src/html/__package__.js,
-../src/html/display.js,
-../src/html/layout.js,
-../src/html/util.js,
-../src/xml/Parse.js,
-../src/lang/func.js,
-../src/lang/array.js,
-../src/lang/extras.js,
-../src/lang/declare.js,
-../src/ns.js,
-../src/event/common.js,
-../src/event/topic.js,
-../src/event/browser.js,
-../src/event/__package__.js,
-../src/widget/Manager.js,
-../src/uri/__package__.js,
-../src/a11y.js,
-../src/widget/Widget.js,
-../src/widget/Parse.js,
-../src/widget/DomWidget.js,
-../src/gfx/color.js,
-../src/lfx/Animation.js,
-../src/html/color.js,
-../src/lfx/html.js,
-../src/lfx/__package__.js,
-../src/lfx/toggle.js,
-../src/widget/HtmlWidget.js,
-../src/widget/__package__.js,
-../src/string/common.js,
-../src/string.js,
-../src/io/common.js,
-../src/string/extras.js,
-../src/undo/browser.js,
-../src/io/BrowserIO.js,
-../src/io/cookie.js,
-../src/io/__package__.js,
-../src/html/selection.js,
-../src/Deferred.js,
-../src/widget/RichText.js,
-../src/lang/type.js,
-../src/lang/assert.js,
-../src/AdapterRegistry.js,
-../src/lang/repr.js,
-../src/lang/__package__.js,
-../src/html/iframe.js,
-../src/widget/PopupContainer.js,
-../src/widget/ColorPalette.js,
-../src/widget/ContentPane.js,
-../src/widget/Editor2Toolbar.js,
-../src/lfx/shadow.js,
-../src/widget/html/layout.js,
-../src/dnd/DragAndDrop.js,
-../src/dnd/HtmlDragManager.js,
-../src/dnd/HtmlDragAndDrop.js,
-../src/dnd/__package__.js,
-../src/dnd/HtmlDragMove.js,
-../src/widget/Dialog.js,
-../src/widget/ResizeHandle.js,
-../src/widget/FloatingPane.js,
-../src/widget/Editor2Plugin/AlwaysShowToolbar.js,
-../src/widget/Editor2.js,
-../src/string/Builder.js,
-../src/string/__package__.js,
-../src/flash.js,
-../src/storage.js,
-../src/json.js,
-../src/storage/browser.js,
-../src/storage/__package__.js
-
-		
 __CPAN_EDITION__ storage dojo.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -89481,7 +50950,7 @@
 return dj_currentContext;
 };
 dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
+dojo.version={major:0,minor:4,patch:2,flag:"",revision:Number("$Rev: 7616 $".match(/[0-9]+/)[0]),toString:function(){
 with(dojo.version){
 return major+"."+minor+"."+patch+flag+" ("+revision+")";
 }
@@ -89737,7 +51206,7 @@
 }
 };
 dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
+if(typeof setTimeout=="object"||(djConfig["useXDomain"]&&dojo.render.html.opera)){
 setTimeout("dojo.hostenv.loaded();",0);
 }else{
 dojo.hostenv.loaded();
@@ -89885,6 +51354,11 @@
 dojo.registerModulePath=function(_66,_67){
 return dojo.hostenv.setModulePrefix(_66,_67);
 };
+if(djConfig["modulePaths"]){
+for(var param in djConfig["modulePaths"]){
+dojo.registerModulePath(param,djConfig["modulePaths"][param]);
+}
+}
 dojo.setModulePrefix=function(_68,_69){
 dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
 return dojo.registerModulePath(_68,_69);
@@ -90295,7 +51769,7 @@
 }
 }
 if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
+if(dojo.render.html.opera||(dojo.render.html.moz&&(djConfig["enableMozDomContentLoaded"]===true))){
 document.addEventListener("DOMContentLoaded",dj_load_init,null);
 }
 window.addEventListener("load",dj_load_init,null);
@@ -90443,118 +51917,76 @@
 return _ec;
 };
 }
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _ee=false;
-var _ef=false;
-var _f0=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_ee=true;
-}else{
-if(typeof this["load"]=="function"){
-_ef=true;
-}else{
-if(window.widget){
-_f0=true;
-}
-}
-}
-var _f1=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-_f1.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_ee)&&(!_f0)){
-_f1.push("browser_debug.js");
-}
-var _f2=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_f2=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<_f1.length;x++){
-var _f4=_f2+"src/"+_f1[x];
-if(_ee||_ef){
-load(_f4);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_f4+"'></scr"+"ipt>");
-}
-catch(e){
-var _f5=document.createElement("script");
-_f5.src=_f4;
-document.getElementsByTagName("head")[0].appendChild(_f5);
-}
-}
-}
-})();
+dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&!djConfig["useXDomain"],"dojo.browser_debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&djConfig["useXDomain"],"dojo.browser_debug_xd");
 dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_f6,_f7){
-if(!dojo.lang.isFunction(_f7)){
-dojo.raise("dojo.inherits: superclass argument ["+_f7+"] must be a function (subclass: ["+_f6+"']");
+dojo.lang.inherits=function(_ee,_ef){
+if(!dojo.lang.isFunction(_ef)){
+dojo.raise("dojo.inherits: superclass argument ["+_ef+"] must be a function (subclass: ["+_ee+"']");
 }
-_f6.prototype=new _f7();
-_f6.prototype.constructor=_f6;
-_f6.superclass=_f7.prototype;
-_f6["super"]=_f7.prototype;
+_ee.prototype=new _ef();
+_ee.prototype.constructor=_ee;
+_ee.superclass=_ef.prototype;
+_ee["super"]=_ef.prototype;
 };
-dojo.lang._mixin=function(obj,_f9){
-var _fa={};
-for(var x in _f9){
-if((typeof _fa[x]=="undefined")||(_fa[x]!=_f9[x])){
-obj[x]=_f9[x];
+dojo.lang._mixin=function(obj,_f1){
+var _f2={};
+for(var x in _f1){
+if((typeof _f2[x]=="undefined")||(_f2[x]!=_f1[x])){
+obj[x]=_f1[x];
 }
 }
-if(dojo.render.html.ie&&(typeof (_f9["toString"])=="function")&&(_f9["toString"]!=obj["toString"])&&(_f9["toString"]!=_fa["toString"])){
-obj.toString=_f9.toString;
+if(dojo.render.html.ie&&(typeof (_f1["toString"])=="function")&&(_f1["toString"]!=obj["toString"])&&(_f1["toString"]!=_f2["toString"])){
+obj.toString=_f1.toString;
 }
 return obj;
 };
-dojo.lang.mixin=function(obj,_fd){
+dojo.lang.mixin=function(obj,_f5){
 for(var i=1,l=arguments.length;i<l;i++){
 dojo.lang._mixin(obj,arguments[i]);
 }
 return obj;
 };
-dojo.lang.extend=function(_100,_101){
+dojo.lang.extend=function(_f8,_f9){
 for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_100.prototype,arguments[i]);
+dojo.lang._mixin(_f8.prototype,arguments[i]);
 }
-return _100;
+return _f8;
 };
 dojo.inherits=dojo.lang.inherits;
 dojo.mixin=dojo.lang.mixin;
 dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_104,_105,_106,_107){
-if(!dojo.lang.isArrayLike(_104)&&dojo.lang.isArrayLike(_105)){
+dojo.lang.find=function(_fc,_fd,_fe,_ff){
+if(!dojo.lang.isArrayLike(_fc)&&dojo.lang.isArrayLike(_fd)){
 dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_104;
-_104=_105;
-_105=temp;
+var temp=_fc;
+_fc=_fd;
+_fd=temp;
 }
-var _109=dojo.lang.isString(_104);
-if(_109){
-_104=_104.split("");
+var _101=dojo.lang.isString(_fc);
+if(_101){
+_fc=_fc.split("");
 }
-if(_107){
+if(_ff){
 var step=-1;
-var i=_104.length-1;
+var i=_fc.length-1;
 var end=-1;
 }else{
 var step=1;
 var i=0;
-var end=_104.length;
+var end=_fc.length;
 }
-if(_106){
+if(_fe){
 while(i!=end){
-if(_104[i]===_105){
+if(_fc[i]===_fd){
 return i;
 }
 i+=step;
 }
 }else{
 while(i!=end){
-if(_104[i]==_105){
+if(_fc[i]==_fd){
 return i;
 }
 i+=step;
@@ -90563,12 +51995,12 @@
 return -1;
 };
 dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_10d,_10e,_10f){
-return dojo.lang.find(_10d,_10e,_10f,true);
+dojo.lang.findLast=function(_105,_106,_107){
+return dojo.lang.find(_105,_106,_107,true);
 };
 dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_110,_111){
-return dojo.lang.find(_110,_111)>-1;
+dojo.lang.inArray=function(_108,_109){
+return dojo.lang.find(_108,_109)>-1;
 };
 dojo.lang.isObject=function(it){
 if(typeof it=="undefined"){
@@ -90642,142 +52074,138 @@
 },isEmpty:function(obj){
 if(dojo.lang.isObject(obj)){
 var tmp={};
-var _120=0;
+var _118=0;
 for(var x in obj){
 if(obj[x]&&(!tmp[x])){
-_120++;
+_118++;
 break;
 }
 }
-return _120==0;
+return _118==0;
 }else{
 if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
 return obj.length==0;
 }
 }
-},map:function(arr,obj,_124){
-var _125=dojo.lang.isString(arr);
-if(_125){
+},map:function(arr,obj,_11c){
+var _11d=dojo.lang.isString(arr);
+if(_11d){
 arr=arr.split("");
 }
-if(dojo.lang.isFunction(obj)&&(!_124)){
-_124=obj;
+if(dojo.lang.isFunction(obj)&&(!_11c)){
+_11c=obj;
 obj=dj_global;
 }else{
-if(dojo.lang.isFunction(obj)&&_124){
-var _126=obj;
-obj=_124;
-_124=_126;
+if(dojo.lang.isFunction(obj)&&_11c){
+var _11e=obj;
+obj=_11c;
+_11c=_11e;
 }
 }
 if(Array.map){
-var _127=Array.map(arr,_124,obj);
+var _11f=Array.map(arr,_11c,obj);
 }else{
-var _127=[];
+var _11f=[];
 for(var i=0;i<arr.length;++i){
-_127.push(_124.call(obj,arr[i]));
+_11f.push(_11c.call(obj,arr[i]));
 }
 }
-if(_125){
-return _127.join("");
+if(_11d){
+return _11f.join("");
 }else{
-return _127;
+return _11f;
 }
-},reduce:function(arr,_12a,obj,_12c){
-var _12d=_12a;
-if(arguments.length==1){
-dojo.debug("dojo.lang.reduce called with too few arguments!");
-return false;
-}else{
+},reduce:function(arr,_122,obj,_124){
+var _125=_122;
 if(arguments.length==2){
-_12c=_12a;
-_12d=arr.shift();
+_124=_122;
+_125=arr[0];
+arr=arr.slice(1);
 }else{
-if(arguments.lenght==3){
+if(arguments.length==3){
 if(dojo.lang.isFunction(obj)){
-_12c=obj;
+_124=obj;
 obj=null;
 }
 }else{
 if(dojo.lang.isFunction(obj)){
-var tmp=_12c;
-_12c=obj;
+var tmp=_124;
+_124=obj;
 obj=tmp;
 }
 }
 }
-}
-var ob=obj?obj:dj_global;
+var ob=obj||dj_global;
 dojo.lang.map(arr,function(val){
-_12d=_12c.call(ob,_12d,val);
+_125=_124.call(ob,_125,val);
 });
-return _12d;
-},forEach:function(_131,_132,_133){
-if(dojo.lang.isString(_131)){
-_131=_131.split("");
+return _125;
+},forEach:function(_129,_12a,_12b){
+if(dojo.lang.isString(_129)){
+_129=_129.split("");
 }
 if(Array.forEach){
-Array.forEach(_131,_132,_133);
+Array.forEach(_129,_12a,_12b);
 }else{
-if(!_133){
-_133=dj_global;
+if(!_12b){
+_12b=dj_global;
 }
-for(var i=0,l=_131.length;i<l;i++){
-_132.call(_133,_131[i],i,_131);
+for(var i=0,l=_129.length;i<l;i++){
+_12a.call(_12b,_129[i],i,_129);
 }
 }
-},_everyOrSome:function(_136,arr,_138,_139){
+},_everyOrSome:function(_12e,arr,_130,_131){
 if(dojo.lang.isString(arr)){
 arr=arr.split("");
 }
 if(Array.every){
-return Array[_136?"every":"some"](arr,_138,_139);
+return Array[_12e?"every":"some"](arr,_130,_131);
 }else{
-if(!_139){
-_139=dj_global;
+if(!_131){
+_131=dj_global;
 }
 for(var i=0,l=arr.length;i<l;i++){
-var _13c=_138.call(_139,arr[i],i,arr);
-if(_136&&!_13c){
+var _134=_130.call(_131,arr[i],i,arr);
+if(_12e&&!_134){
 return false;
 }else{
-if((!_136)&&(_13c)){
+if((!_12e)&&(_134)){
 return true;
 }
 }
 }
-return Boolean(_136);
+return Boolean(_12e);
 }
-},every:function(arr,_13e,_13f){
-return this._everyOrSome(true,arr,_13e,_13f);
-},some:function(arr,_141,_142){
-return this._everyOrSome(false,arr,_141,_142);
-},filter:function(arr,_144,_145){
-var _146=dojo.lang.isString(arr);
-if(_146){
+},every:function(arr,_136,_137){
+return this._everyOrSome(true,arr,_136,_137);
+},some:function(arr,_139,_13a){
+return this._everyOrSome(false,arr,_139,_13a);
+},filter:function(arr,_13c,_13d){
+var _13e=dojo.lang.isString(arr);
+if(_13e){
 arr=arr.split("");
 }
-var _147;
+var _13f;
 if(Array.filter){
-_147=Array.filter(arr,_144,_145);
+_13f=Array.filter(arr,_13c,_13d);
 }else{
-if(!_145){
+if(!_13d){
 if(arguments.length>=3){
 dojo.raise("thisObject doesn't exist!");
 }
-_145=dj_global;
+_13d=dj_global;
 }
-_147=[];
+_13f=[];
 for(var i=0;i<arr.length;i++){
-if(_144.call(_145,arr[i],i,arr)){
-_147.push(arr[i]);
+if(_13c.call(_13d,arr[i],i,arr)){
+_13f.push(arr[i]);
 }
 }
 }
-if(_146){
-return _147.join("");
+if(_13e){
+return _13f.join("");
 }else{
-return _147;
+return _13f;
 }
 },unnest:function(){
 var out=[];
@@ -90790,35 +52218,35 @@
 }
 }
 return out;
-},toArray:function(_14c,_14d){
-var _14e=[];
-for(var i=_14d||0;i<_14c.length;i++){
-_14e.push(_14c[i]);
+},toArray:function(_144,_145){
+var _146=[];
+for(var i=_145||0;i<_144.length;i++){
+_146.push(_144[i]);
 }
-return _14e;
+return _146;
 }});
 dojo.provide("dojo.lang.extras");
-dojo.lang.setTimeout=function(func,_151){
-var _152=window,_153=2;
+dojo.lang.setTimeout=function(func,_149){
+var _14a=window,_14b=2;
 if(!dojo.lang.isFunction(func)){
-_152=func;
-func=_151;
-_151=arguments[2];
-_153++;
+_14a=func;
+func=_149;
+_149=arguments[2];
+_14b++;
 }
 if(dojo.lang.isString(func)){
-func=_152[func];
+func=_14a[func];
 }
 var args=[];
-for(var i=_153;i<arguments.length;i++){
+for(var i=_14b;i<arguments.length;i++){
 args.push(arguments[i]);
 }
 return dojo.global().setTimeout(function(){
-func.apply(_152,args);
-},_151);
+func.apply(_14a,args);
+},_149);
 };
-dojo.lang.clearTimeout=function(_156){
-dojo.global().clearTimeout(_156);
+dojo.lang.clearTimeout=function(_14e){
+dojo.global().clearTimeout(_14e);
 };
 dojo.lang.getNameInObj=function(ns,item){
 if(!ns){
@@ -90863,38 +52291,38 @@
 }
 return undefined;
 };
-dojo.lang.getObjPathValue=function(_15f,_160,_161){
-with(dojo.parseObjPath(_15f,_160,_161)){
-return dojo.evalProp(prop,obj,_161);
+dojo.lang.getObjPathValue=function(_157,_158,_159){
+with(dojo.parseObjPath(_157,_158,_159)){
+return dojo.evalProp(prop,obj,_159);
 }
 };
-dojo.lang.setObjPathValue=function(_162,_163,_164,_165){
+dojo.lang.setObjPathValue=function(_15a,_15b,_15c,_15d){
 dojo.deprecated("dojo.lang.setObjPathValue","use dojo.parseObjPath and the '=' operator","0.6");
 if(arguments.length<4){
-_165=true;
+_15d=true;
 }
-with(dojo.parseObjPath(_162,_164,_165)){
-if(obj&&(_165||(prop in obj))){
-obj[prop]=_163;
+with(dojo.parseObjPath(_15a,_15c,_15d)){
+if(obj&&(_15d||(prop in obj))){
+obj[prop]=_15b;
 }
 }
 };
 dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_166,_167){
-var fcn=(dojo.lang.isString(_167)?_166[_167]:_167)||function(){
+dojo.lang.hitch=function(_15e,_15f){
+var fcn=(dojo.lang.isString(_15f)?_15e[_15f]:_15f)||function(){
 };
 return function(){
-return fcn.apply(_166,arguments);
+return fcn.apply(_15e,arguments);
 };
 };
 dojo.lang.anonCtr=0;
 dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_169,_16a,_16b){
-var nso=(_16a||dojo.lang.anon);
-if((_16b)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
+dojo.lang.nameAnonFunc=function(_161,_162,_163){
+var nso=(_162||dojo.lang.anon);
+if((_163)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
 for(var x in nso){
 try{
-if(nso[x]===_169){
+if(nso[x]===_161){
 return x;
 }
 }
@@ -90906,50 +52334,50 @@
 while(typeof nso[ret]!="undefined"){
 ret="__"+dojo.lang.anonCtr++;
 }
-nso[ret]=_169;
+nso[ret]=_161;
 return ret;
 };
-dojo.lang.forward=function(_16f){
+dojo.lang.forward=function(_167){
 return function(){
-return this[_16f].apply(this,arguments);
+return this[_167].apply(this,arguments);
 };
 };
-dojo.lang.curry=function(_170,func){
-var _172=[];
-_170=_170||dj_global;
+dojo.lang.curry=function(_168,func){
+var _16a=[];
+_168=_168||dj_global;
 if(dojo.lang.isString(func)){
-func=_170[func];
+func=_168[func];
 }
 for(var x=2;x<arguments.length;x++){
-_172.push(arguments[x]);
+_16a.push(arguments[x]);
 }
-var _174=(func["__preJoinArity"]||func.length)-_172.length;
-function gather(_175,_176,_177){
-var _178=_177;
-var _179=_176.slice(0);
-for(var x=0;x<_175.length;x++){
-_179.push(_175[x]);
+var _16c=(func["__preJoinArity"]||func.length)-_16a.length;
+function gather(_16d,_16e,_16f){
+var _170=_16f;
+var _171=_16e.slice(0);
+for(var x=0;x<_16d.length;x++){
+_171.push(_16d[x]);
 }
-_177=_177-_175.length;
-if(_177<=0){
-var res=func.apply(_170,_179);
-_177=_178;
+_16f=_16f-_16d.length;
+if(_16f<=0){
+var res=func.apply(_168,_171);
+_16f=_170;
 return res;
 }else{
 return function(){
-return gather(arguments,_179,_177);
+return gather(arguments,_171,_16f);
 };
 }
 }
-return gather([],_172,_174);
+return gather([],_16a,_16c);
 };
-dojo.lang.curryArguments=function(_17c,func,args,_17f){
-var _180=[];
-var x=_17f||0;
-for(x=_17f;x<args.length;x++){
-_180.push(args[x]);
+dojo.lang.curryArguments=function(_174,func,args,_177){
+var _178=[];
+var x=_177||0;
+for(x=_177;x<args.length;x++){
+_178.push(args[x]);
 }
-return dojo.lang.curry.apply(dojo.lang,[_17c,func].concat(_180));
+return dojo.lang.curry.apply(dojo.lang,[_174,func].concat(_178));
 };
 dojo.lang.tryThese=function(){
 for(var x=0;x<arguments.length;x++){
@@ -90966,38 +52394,38 @@
 }
 }
 };
-dojo.lang.delayThese=function(farr,cb,_186,_187){
+dojo.lang.delayThese=function(farr,cb,_17e,_17f){
 if(!farr.length){
-if(typeof _187=="function"){
-_187();
+if(typeof _17f=="function"){
+_17f();
 }
 return;
 }
-if((typeof _186=="undefined")&&(typeof cb=="number")){
-_186=cb;
+if((typeof _17e=="undefined")&&(typeof cb=="number")){
+_17e=cb;
 cb=function(){
 };
 }else{
 if(!cb){
 cb=function(){
 };
-if(!_186){
-_186=0;
+if(!_17e){
+_17e=0;
 }
 }
 }
 setTimeout(function(){
 (farr.shift())();
 cb();
-dojo.lang.delayThese(farr,cb,_186,_187);
-},_186);
+dojo.lang.delayThese(farr,cb,_17e,_17f);
+},_17e);
 };
 dojo.provide("dojo.event.common");
 dojo.event=new function(){
 this._canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-function interpolateArgs(args,_189){
+function interpolateArgs(args,_181){
 var dl=dojo.lang;
-var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false};
+var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false,maxCalls:-1};
 switch(args.length){
 case 0:
 return;
@@ -91022,14 +52450,14 @@
 ao.adviceType="after";
 ao.srcObj=args[0];
 ao.srcFunc=args[1];
-var _18c=dl.nameAnonFunc(args[2],ao.adviceObj,_189);
-ao.adviceFunc=_18c;
+var _184=dl.nameAnonFunc(args[2],ao.adviceObj,_181);
+ao.adviceFunc=_184;
 }else{
 if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
 ao.adviceType="after";
 ao.srcObj=dj_global;
-var _18c=dl.nameAnonFunc(args[0],ao.srcObj,_189);
-ao.srcFunc=_18c;
+var _184=dl.nameAnonFunc(args[0],ao.srcObj,_181);
+ao.srcFunc=_184;
 ao.adviceObj=args[1];
 ao.adviceFunc=args[2];
 }
@@ -91055,17 +52483,17 @@
 if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
 ao.adviceType=args[0];
 ao.srcObj=dj_global;
-var _18c=dl.nameAnonFunc(args[1],dj_global,_189);
-ao.srcFunc=_18c;
+var _184=dl.nameAnonFunc(args[1],dj_global,_181);
+ao.srcFunc=_184;
 ao.adviceObj=args[2];
 ao.adviceFunc=args[3];
 }else{
 if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
 ao.srcObj=args[1];
 ao.srcFunc=args[2];
-var _18c=dl.nameAnonFunc(args[3],dj_global,_189);
+var _184=dl.nameAnonFunc(args[3],dj_global,_181);
 ao.adviceObj=dj_global;
-ao.adviceFunc=_18c;
+ao.adviceFunc=_184;
 }else{
 if(dl.isObject(args[1])){
 ao.srcObj=args[1];
@@ -91109,11 +52537,12 @@
 ao.delay=args[8];
 ao.rate=args[9];
 ao.adviceMsg=args[10];
+ao.maxCalls=(!isNaN(parseInt(args[11])))?args[11]:-1;
 break;
 }
 if(dl.isFunction(ao.aroundFunc)){
-var _18c=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_189);
-ao.aroundFunc=_18c;
+var _184=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_181);
+ao.aroundFunc=_184;
 }
 if(dl.isFunction(ao.srcFunc)){
 ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc);
@@ -91142,25 +52571,18 @@
 }else{
 var ao=interpolateArgs(arguments,true);
 }
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.connect(ao);
-}
-ao.srcFunc="onkeypress";
-}
 if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){
-var _18e={};
+var _186={};
 for(var x in ao){
-_18e[x]=ao[x];
+_186[x]=ao[x];
 }
 var mjps=[];
 dojo.lang.forEach(ao.srcObj,function(src){
 if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
 src=dojo.byId(src);
 }
-_18e.srcObj=src;
-mjps.push(dojo.event.connect.call(dojo.event,_18e));
+_186.srcObj=src;
+mjps.push(dojo.event.connect.call(dojo.event,_186));
 });
 return mjps;
 }
@@ -91172,20 +52594,20 @@
 return mjp;
 };
 this.log=function(a1,a2){
-var _196;
+var _18e;
 if((arguments.length==1)&&(typeof a1=="object")){
-_196=a1;
+_18e=a1;
 }else{
-_196={srcObj:a1,srcFunc:a2};
+_18e={srcObj:a1,srcFunc:a2};
 }
-_196.adviceFunc=function(){
-var _197=[];
+_18e.adviceFunc=function(){
+var _18f=[];
 for(var x=0;x<arguments.length;x++){
-_197.push(arguments[x]);
+_18f.push(arguments[x]);
 }
-dojo.debug("("+_196.srcObj+")."+_196.srcFunc,":",_197.join(", "));
+dojo.debug("("+_18e.srcObj+")."+_18e.srcFunc,":",_18f.join(", "));
 };
-this.kwConnect(_196);
+this.kwConnect(_18e);
 };
 this.connectBefore=function(){
 var args=["before"];
@@ -91206,25 +52628,30 @@
 ao.once=true;
 return this.connect(ao);
 };
-this._kwConnectImpl=function(_19e,_19f){
-var fn=(_19f)?"disconnect":"connect";
-if(typeof _19e["srcFunc"]=="function"){
-_19e.srcObj=_19e["srcObj"]||dj_global;
-var _1a1=dojo.lang.nameAnonFunc(_19e.srcFunc,_19e.srcObj,true);
-_19e.srcFunc=_1a1;
+this.connectRunOnce=function(){
+var ao=interpolateArgs(arguments,true);
+ao.maxCalls=1;
+return this.connect(ao);
+};
+this._kwConnectImpl=function(_197,_198){
+var fn=(_198)?"disconnect":"connect";
+if(typeof _197["srcFunc"]=="function"){
+_197.srcObj=_197["srcObj"]||dj_global;
+var _19a=dojo.lang.nameAnonFunc(_197.srcFunc,_197.srcObj,true);
+_197.srcFunc=_19a;
 }
-if(typeof _19e["adviceFunc"]=="function"){
-_19e.adviceObj=_19e["adviceObj"]||dj_global;
-var _1a1=dojo.lang.nameAnonFunc(_19e.adviceFunc,_19e.adviceObj,true);
-_19e.adviceFunc=_1a1;
+if(typeof _197["adviceFunc"]=="function"){
+_197.adviceObj=_197["adviceObj"]||dj_global;
+var _19a=dojo.lang.nameAnonFunc(_197.adviceFunc,_197.adviceObj,true);
+_197.adviceFunc=_19a;
 }
-_19e.srcObj=_19e["srcObj"]||dj_global;
-_19e.adviceObj=_19e["adviceObj"]||_19e["targetObj"]||dj_global;
-_19e.adviceFunc=_19e["adviceFunc"]||_19e["targetFunc"];
-return dojo.event[fn](_19e);
+_197.srcObj=_197["srcObj"]||dj_global;
+_197.adviceObj=_197["adviceObj"]||_197["targetObj"]||dj_global;
+_197.adviceFunc=_197["adviceFunc"]||_197["targetFunc"];
+return dojo.event[fn](_197);
 };
-this.kwConnect=function(_1a2){
-return this._kwConnectImpl(_1a2,false);
+this.kwConnect=function(_19b){
+return this._kwConnectImpl(_19b,false);
 };
 this.disconnect=function(){
 if(arguments.length==1){
@@ -91249,12 +52676,12 @@
 mjp.removeAdvice(ao.adviceObj,ao.adviceFunc,ao.adviceType,ao.once);
 return mjp;
 };
-this.kwDisconnect=function(_1a5){
-return this._kwConnectImpl(_1a5,true);
+this.kwDisconnect=function(_19e){
+return this._kwConnectImpl(_19e,true);
 };
 };
-dojo.event.MethodInvocation=function(_1a6,obj,args){
-this.jp_=_1a6;
+dojo.event.MethodInvocation=function(_19f,obj,args){
+this.jp_=_19f;
 this.object=obj;
 this.args=[];
 for(var x=0;x<args.length;x++){
@@ -91273,44 +52700,50 @@
 return mobj[meth].call(mobj,this);
 }
 };
-dojo.event.MethodJoinPoint=function(obj,_1ae){
+dojo.event.MethodJoinPoint=function(obj,_1a7){
 this.object=obj||dj_global;
-this.methodname=_1ae;
-this.methodfunc=this.object[_1ae];
+this.methodname=_1a7;
+this.methodfunc=this.object[_1a7];
 this.squelch=false;
 };
-dojo.event.MethodJoinPoint.getForMethod=function(obj,_1b0){
+dojo.event.MethodJoinPoint.getForMethod=function(obj,_1a9){
 if(!obj){
 obj=dj_global;
 }
-if(!obj[_1b0]){
-obj[_1b0]=function(){
+var ofn=obj[_1a9];
+if(!ofn){
+ofn=obj[_1a9]=function(){
 };
-if(!obj[_1b0]){
-dojo.raise("Cannot set do-nothing method on that object "+_1b0);
+if(!obj[_1a9]){
+dojo.raise("Cannot set do-nothing method on that object "+_1a9);
 }
 }else{
-if((!dojo.lang.isFunction(obj[_1b0]))&&(!dojo.lang.isAlien(obj[_1b0]))){
+if((typeof ofn!="function")&&(!dojo.lang.isFunction(ofn))&&(!dojo.lang.isAlien(ofn))){
 return null;
 }
 }
-var _1b1=_1b0+"$joinpoint";
-var _1b2=_1b0+"$joinpoint$method";
-var _1b3=obj[_1b1];
-if(!_1b3){
-var _1b4=false;
+var _1ab=_1a9+"$joinpoint";
+var _1ac=_1a9+"$joinpoint$method";
+var _1ad=obj[_1ab];
+if(!_1ad){
+var _1ae=false;
 if(dojo.event["browser"]){
 if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){
-_1b4=true;
-dojo.event.browser.addClobberNodeAttrs(obj,[_1b1,_1b2,_1b0]);
+_1ae=true;
+dojo.event.browser.addClobberNodeAttrs(obj,[_1ab,_1ac,_1a9]);
 }
 }
-var _1b5=obj[_1b0].length;
-obj[_1b2]=obj[_1b0];
-_1b3=obj[_1b1]=new dojo.event.MethodJoinPoint(obj,_1b2);
-obj[_1b0]=function(){
+var _1af=ofn.length;
+obj[_1ac]=ofn;
+_1ad=obj[_1ab]=new dojo.event.MethodJoinPoint(obj,_1ac);
+if(!_1ae){
+obj[_1a9]=function(){
+return _1ad.run.apply(_1ad,arguments);
+};
+}else{
+obj[_1a9]=function(){
 var args=[];
-if((_1b4)&&(!arguments.length)){
+if(!arguments.length){
 var evt=null;
 try{
 if(obj.ownerDocument){
@@ -91335,20 +52768,21 @@
 }
 }else{
 for(var x=0;x<arguments.length;x++){
-if((x==0)&&(_1b4)&&(dojo.event.browser.isEvent(arguments[x]))){
+if((x==0)&&(dojo.event.browser.isEvent(arguments[x]))){
 args.push(dojo.event.browser.fixEvent(arguments[x],this));
 }else{
 args.push(arguments[x]);
 }
 }
 }
-return _1b3.run.apply(_1b3,args);
+return _1ad.run.apply(_1ad,args);
 };
-obj[_1b0].__preJoinArity=_1b5;
 }
-return _1b3;
+obj[_1a9].__preJoinArity=_1af;
+}
+return _1ad;
 };
-dojo.lang.extend(dojo.event.MethodJoinPoint,{unintercept:function(){
+dojo.lang.extend(dojo.event.MethodJoinPoint,{squelch:false,unintercept:function(){
 this.object[this.methodname]=this.methodfunc;
 this.before=[];
 this.after=[];
@@ -91356,34 +52790,41 @@
 },disconnect:dojo.lang.forward("unintercept"),run:function(){
 var obj=this.object||dj_global;
 var args=arguments;
-var _1bb=[];
+var _1b5=[];
 for(var x=0;x<args.length;x++){
-_1bb[x]=args[x];
+_1b5[x]=args[x];
 }
-var _1bd=function(marr){
+var _1b7=function(marr){
 if(!marr){
 dojo.debug("Null argument to unrollAdvice()");
 return;
 }
-var _1bf=marr[0]||dj_global;
-var _1c0=marr[1];
-if(!_1bf[_1c0]){
-dojo.raise("function \""+_1c0+"\" does not exist on \""+_1bf+"\"");
+var _1b9=marr[0]||dj_global;
+var _1ba=marr[1];
+if(!_1b9[_1ba]){
+dojo.raise("function \""+_1ba+"\" does not exist on \""+_1b9+"\"");
 }
-var _1c1=marr[2]||dj_global;
-var _1c2=marr[3];
+var _1bb=marr[2]||dj_global;
+var _1bc=marr[3];
 var msg=marr[6];
-var _1c4;
+var _1be=marr[7];
+if(_1be>-1){
+if(_1be==0){
+return;
+}
+marr[7]--;
+}
+var _1bf;
 var to={args:[],jp_:this,object:obj,proceed:function(){
-return _1bf[_1c0].apply(_1bf,to.args);
+return _1b9[_1ba].apply(_1b9,to.args);
 }};
-to.args=_1bb;
-var _1c6=parseInt(marr[4]);
-var _1c7=((!isNaN(_1c6))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
+to.args=_1b5;
+var _1c1=parseInt(marr[4]);
+var _1c2=((!isNaN(_1c1))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
 if(marr[5]){
 var rate=parseInt(marr[5]);
 var cur=new Date();
-var _1ca=false;
+var _1c5=false;
 if((marr["last"])&&((cur-marr.last)<=rate)){
 if(dojo.event._canTimeout){
 if(marr["delayTimer"]){
@@ -91393,7 +52834,7 @@
 var mcpy=dojo.lang.shallowCopy(marr);
 marr.delayTimer=setTimeout(function(){
 mcpy[5]=0;
-_1bd(mcpy);
+_1b7(mcpy);
 },tod);
 }
 return;
@@ -91401,49 +52842,49 @@
 marr.last=cur;
 }
 }
-if(_1c2){
-_1c1[_1c2].call(_1c1,to);
+if(_1bc){
+_1bb[_1bc].call(_1bb,to);
 }else{
-if((_1c7)&&((dojo.render.html)||(dojo.render.svg))){
+if((_1c2)&&((dojo.render.html)||(dojo.render.svg))){
 dj_global["setTimeout"](function(){
 if(msg){
-_1bf[_1c0].call(_1bf,to);
+_1b9[_1ba].call(_1b9,to);
 }else{
-_1bf[_1c0].apply(_1bf,args);
+_1b9[_1ba].apply(_1b9,args);
 }
-},_1c6);
+},_1c1);
 }else{
 if(msg){
-_1bf[_1c0].call(_1bf,to);
+_1b9[_1ba].call(_1b9,to);
 }else{
-_1bf[_1c0].apply(_1bf,args);
+_1b9[_1ba].apply(_1b9,args);
 }
 }
 }
 };
-var _1cd=function(){
+var _1c8=function(){
 if(this.squelch){
 try{
-return _1bd.apply(this,arguments);
+return _1b7.apply(this,arguments);
 }
 catch(e){
 dojo.debug(e);
 }
 }else{
-return _1bd.apply(this,arguments);
+return _1b7.apply(this,arguments);
 }
 };
 if((this["before"])&&(this.before.length>0)){
-dojo.lang.forEach(this.before.concat(new Array()),_1cd);
+dojo.lang.forEach(this.before.concat(new Array()),_1c8);
 }
-var _1ce;
+var _1c9;
 try{
 if((this["around"])&&(this.around.length>0)){
 var mi=new dojo.event.MethodInvocation(this,obj,args);
-_1ce=mi.proceed();
+_1c9=mi.proceed();
 }else{
 if(this.methodfunc){
-_1ce=this.object[this.methodname].apply(this.object,args);
+_1c9=this.object[this.methodname].apply(this.object,args);
 }
 }
 }
@@ -91454,9 +52895,9 @@
 }
 }
 if((this["after"])&&(this.after.length>0)){
-dojo.lang.forEach(this.after.concat(new Array()),_1cd);
+dojo.lang.forEach(this.after.concat(new Array()),_1c8);
 }
-return (this.methodfunc)?_1ce:null;
+return (this.methodfunc)?_1c9:null;
 },getArr:function(kind){
 var type="after";
 if((typeof kind=="string")&&(kind.indexOf("before")!=-1)){
@@ -91471,39 +52912,39 @@
 }
 return this[type];
 },kwAddAdvice:function(args){
-this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"]);
-},addAdvice:function(_1d3,_1d4,_1d5,_1d6,_1d7,_1d8,once,_1da,rate,_1dc){
-var arr=this.getArr(_1d7);
+this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"],args["maxCalls"]);
+},addAdvice:function(_1ce,_1cf,_1d0,_1d1,_1d2,_1d3,once,_1d5,rate,_1d7,_1d8){
+var arr=this.getArr(_1d2);
 if(!arr){
 dojo.raise("bad this: "+this);
 }
-var ao=[_1d3,_1d4,_1d5,_1d6,_1da,rate,_1dc];
+var ao=[_1ce,_1cf,_1d0,_1d1,_1d5,rate,_1d7,_1d8];
 if(once){
-if(this.hasAdvice(_1d3,_1d4,_1d7,arr)>=0){
+if(this.hasAdvice(_1ce,_1cf,_1d2,arr)>=0){
 return;
 }
 }
-if(_1d8=="first"){
+if(_1d3=="first"){
 arr.unshift(ao);
 }else{
 arr.push(ao);
 }
-},hasAdvice:function(_1df,_1e0,_1e1,arr){
+},hasAdvice:function(_1db,_1dc,_1dd,arr){
 if(!arr){
-arr=this.getArr(_1e1);
+arr=this.getArr(_1dd);
 }
 var ind=-1;
 for(var x=0;x<arr.length;x++){
-var aao=(typeof _1e0=="object")?(new String(_1e0)).toString():_1e0;
+var aao=(typeof _1dc=="object")?(new String(_1dc)).toString():_1dc;
 var a1o=(typeof arr[x][1]=="object")?(new String(arr[x][1])).toString():arr[x][1];
-if((arr[x][0]==_1df)&&(a1o==aao)){
+if((arr[x][0]==_1db)&&(a1o==aao)){
 ind=x;
 }
 }
 return ind;
-},removeAdvice:function(_1e7,_1e8,_1e9,once){
-var arr=this.getArr(_1e9);
-var ind=this.hasAdvice(_1e7,_1e8,_1e9,arr);
+},removeAdvice:function(_1e3,_1e4,_1e5,once){
+var arr=this.getArr(_1e5);
+var ind=this.hasAdvice(_1e3,_1e4,_1e5,arr);
 if(ind==-1){
 return false;
 }
@@ -91512,73 +52953,73 @@
 if(once){
 break;
 }
-ind=this.hasAdvice(_1e7,_1e8,_1e9,arr);
+ind=this.hasAdvice(_1e3,_1e4,_1e5,arr);
 }
 return true;
 }});
 dojo.provide("dojo.event.topic");
 dojo.event.topic=new function(){
 this.topics={};
-this.getTopic=function(_1ed){
-if(!this.topics[_1ed]){
-this.topics[_1ed]=new this.TopicImpl(_1ed);
+this.getTopic=function(_1e9){
+if(!this.topics[_1e9]){
+this.topics[_1e9]=new this.TopicImpl(_1e9);
 }
-return this.topics[_1ed];
+return this.topics[_1e9];
 };
-this.registerPublisher=function(_1ee,obj,_1f0){
-var _1ee=this.getTopic(_1ee);
-_1ee.registerPublisher(obj,_1f0);
+this.registerPublisher=function(_1ea,obj,_1ec){
+var _1ea=this.getTopic(_1ea);
+_1ea.registerPublisher(obj,_1ec);
 };
-this.subscribe=function(_1f1,obj,_1f3){
-var _1f1=this.getTopic(_1f1);
-_1f1.subscribe(obj,_1f3);
+this.subscribe=function(_1ed,obj,_1ef){
+var _1ed=this.getTopic(_1ed);
+_1ed.subscribe(obj,_1ef);
 };
-this.unsubscribe=function(_1f4,obj,_1f6){
-var _1f4=this.getTopic(_1f4);
-_1f4.unsubscribe(obj,_1f6);
+this.unsubscribe=function(_1f0,obj,_1f2){
+var _1f0=this.getTopic(_1f0);
+_1f0.unsubscribe(obj,_1f2);
 };
-this.destroy=function(_1f7){
-this.getTopic(_1f7).destroy();
-delete this.topics[_1f7];
+this.destroy=function(_1f3){
+this.getTopic(_1f3).destroy();
+delete this.topics[_1f3];
 };
-this.publishApply=function(_1f8,args){
-var _1f8=this.getTopic(_1f8);
-_1f8.sendMessage.apply(_1f8,args);
+this.publishApply=function(_1f4,args){
+var _1f4=this.getTopic(_1f4);
+_1f4.sendMessage.apply(_1f4,args);
 };
-this.publish=function(_1fa,_1fb){
-var _1fa=this.getTopic(_1fa);
+this.publish=function(_1f6,_1f7){
+var _1f6=this.getTopic(_1f6);
 var args=[];
 for(var x=1;x<arguments.length;x++){
 args.push(arguments[x]);
 }
-_1fa.sendMessage.apply(_1fa,args);
+_1f6.sendMessage.apply(_1f6,args);
 };
 };
-dojo.event.topic.TopicImpl=function(_1fe){
-this.topicName=_1fe;
-this.subscribe=function(_1ff,_200){
-var tf=_200||_1ff;
-var to=(!_200)?dj_global:_1ff;
+dojo.event.topic.TopicImpl=function(_1fa){
+this.topicName=_1fa;
+this.subscribe=function(_1fb,_1fc){
+var tf=_1fc||_1fb;
+var to=(!_1fc)?dj_global:_1fb;
 return dojo.event.kwConnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
-this.unsubscribe=function(_203,_204){
-var tf=(!_204)?_203:_204;
-var to=(!_204)?null:_203;
+this.unsubscribe=function(_1ff,_200){
+var tf=(!_200)?_1ff:_200;
+var to=(!_200)?null:_1ff;
 return dojo.event.kwDisconnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
 this._getJoinPoint=function(){
 return dojo.event.MethodJoinPoint.getForMethod(this,"sendMessage");
 };
-this.setSquelch=function(_207){
-this._getJoinPoint().squelch=_207;
+this.setSquelch=function(_203){
+this._getJoinPoint().squelch=_203;
 };
 this.destroy=function(){
 this._getJoinPoint().disconnect();
 };
-this.registerPublisher=function(_208,_209){
-dojo.event.connect(_208,_209,this,"sendMessage");
+this.registerPublisher=function(_204,_205){
+dojo.event.connect(_204,_205,this,"sendMessage");
 };
-this.sendMessage=function(_20a){
+this.sendMessage=function(_206){
 };
 };
 dojo.provide("dojo.event.browser");
@@ -91601,12 +53042,12 @@
 catch(e){
 }
 }
-this.clobber=function(_20d){
+this.clobber=function(_209){
 var na;
 var tna;
-if(_20d){
-tna=_20d.all||_20d.getElementsByTagName("*");
-na=[_20d];
+if(_209){
+tna=_209.all||_209.getElementsByTagName("*");
+na=[_209];
 for(var x=0;x<tna.length;x++){
 if(tna[x]["__doClobber__"]){
 na.push(tna[x]);
@@ -91621,7 +53062,7 @@
 na=(this.clobberNodes.length)?this.clobberNodes:document.all;
 }
 tna=null;
-var _211={};
+var _20d={};
 for(var i=na.length-1;i>=0;i=i-1){
 var el=na[i];
 try{
@@ -91672,9 +53113,9 @@
 });
 }
 dojo.event.browser=new function(){
-var _216=0;
-this.normalizedEventName=function(_217){
-switch(_217){
+var _212=0;
+this.normalizedEventName=function(_213){
+switch(_213){
 case "CheckboxStateChange":
 case "DOMAttrModified":
 case "DOMMenuItemActive":
@@ -91683,10 +53124,11 @@
 case "DOMNodeInserted":
 case "DOMNodeRemoved":
 case "RadioStateChange":
-return _217;
+return _213;
 break;
 default:
-return _217.toLowerCase();
+var lcn=_213.toLowerCase();
+return (lcn.indexOf("on")==0)?lcn.substr(2):lcn;
 break;
 }
 };
@@ -91705,93 +53147,88 @@
 node.__clobberAttrs__=[];
 }
 };
-this.addClobberNodeAttrs=function(node,_21b){
+this.addClobberNodeAttrs=function(node,_218){
 if(!dojo.render.html.ie){
 return;
 }
 this.addClobberNode(node);
-for(var x=0;x<_21b.length;x++){
-node.__clobberAttrs__.push(_21b[x]);
+for(var x=0;x<_218.length;x++){
+node.__clobberAttrs__.push(_218[x]);
 }
 };
-this.removeListener=function(node,_21e,fp,_220){
-if(!_220){
-var _220=false;
+this.removeListener=function(node,_21b,fp,_21d){
+if(!_21d){
+var _21d=false;
 }
-_21e=dojo.event.browser.normalizedEventName(_21e);
-if((_21e=="onkey")||(_21e=="key")){
+_21b=dojo.event.browser.normalizedEventName(_21b);
+if(_21b=="key"){
 if(dojo.render.html.ie){
-this.removeListener(node,"onkeydown",fp,_220);
+this.removeListener(node,"onkeydown",fp,_21d);
 }
-_21e="onkeypress";
+_21b="keypress";
 }
-if(_21e.substr(0,2)=="on"){
-_21e=_21e.substr(2);
-}
 if(node.removeEventListener){
-node.removeEventListener(_21e,fp,_220);
+node.removeEventListener(_21b,fp,_21d);
 }
 };
-this.addListener=function(node,_222,fp,_224,_225){
+this.addListener=function(node,_21f,fp,_221,_222){
 if(!node){
 return;
 }
-if(!_224){
-var _224=false;
+if(!_221){
+var _221=false;
 }
-_222=dojo.event.browser.normalizedEventName(_222);
-if((_222=="onkey")||(_222=="key")){
+_21f=dojo.event.browser.normalizedEventName(_21f);
+if(_21f=="key"){
 if(dojo.render.html.ie){
-this.addListener(node,"onkeydown",fp,_224,_225);
+this.addListener(node,"onkeydown",fp,_221,_222);
 }
-_222="onkeypress";
+_21f="keypress";
 }
-if(_222.substr(0,2)!="on"){
-_222="on"+_222;
-}
-if(!_225){
-var _226=function(evt){
+if(!_222){
+var _223=function(evt){
 if(!evt){
 evt=window.event;
 }
 var ret=fp(dojo.event.browser.fixEvent(evt,this));
-if(_224){
+if(_221){
 dojo.event.browser.stopEvent(evt);
 }
 return ret;
 };
 }else{
-_226=fp;
+_223=fp;
 }
 if(node.addEventListener){
-node.addEventListener(_222.substr(2),_226,_224);
-return _226;
+node.addEventListener(_21f,_223,_221);
+return _223;
 }else{
-if(typeof node[_222]=="function"){
-var _229=node[_222];
-node[_222]=function(e){
-_229(e);
-return _226(e);
+_21f="on"+_21f;
+if(typeof node[_21f]=="function"){
+var _226=node[_21f];
+node[_21f]=function(e){
+_226(e);
+return _223(e);
 };
 }else{
-node[_222]=_226;
+node[_21f]=_223;
 }
 if(dojo.render.html.ie){
-this.addClobberNodeAttrs(node,[_222]);
+this.addClobberNodeAttrs(node,[_21f]);
 }
-return _226;
+return _223;
 }
 };
 this.isEvent=function(obj){
 return (typeof obj!="undefined")&&(obj)&&(typeof Event!="undefined")&&(obj.eventPhase);
 };
 this.currentEvent=null;
-this.callListener=function(_22c,_22d){
-if(typeof _22c!="function"){
-dojo.raise("listener not a function: "+_22c);
+this.callListener=function(_229,_22a){
+if(typeof _229!="function"){
+dojo.raise("listener not a function: "+_229);
 }
-dojo.event.browser.currentEvent.currentTarget=_22d;
-return _22c.call(_22d,dojo.event.browser.currentEvent);
+dojo.event.browser.currentEvent.currentTarget=_22a;
+return _229.call(_22a,dojo.event.browser.currentEvent);
 };
 this._stopPropagation=function(){
 dojo.event.browser.currentEvent.cancelBubble=true;
@@ -91804,7 +53241,7 @@
 for(var key in this.keys){
 this.revKeys[this.keys[key]]=key;
 }
-this.fixEvent=function(evt,_230){
+this.fixEvent=function(evt,_22d){
 if(!evt){
 if(window["event"]){
 evt=window.event;
@@ -91881,14 +53318,14 @@
 break;
 default:
 if(evt.ctrlKey||evt.altKey){
-var _232=evt.keyCode;
-if(_232>=65&&_232<=90&&evt.shiftKey==false){
-_232+=32;
+var _22f=evt.keyCode;
+if(_22f>=65&&_22f<=90&&evt.shiftKey==false){
+_22f+=32;
 }
-if(_232>=1&&_232<=26&&evt.ctrlKey){
-_232+=96;
+if(_22f>=1&&_22f<=26&&evt.ctrlKey){
+_22f+=96;
 }
-evt.key=String.fromCharCode(_232);
+evt.key=String.fromCharCode(_22f);
 }
 }
 }else{
@@ -91914,11 +53351,11 @@
 evt.key=evt.which;
 break;
 default:
-var _232=evt.which;
+var _22f=evt.which;
 if((evt.ctrlKey||evt.altKey||evt.metaKey)&&(evt.which>=65&&evt.which<=90&&evt.shiftKey==false)){
-_232+=32;
+_22f+=32;
 }
-evt.key=String.fromCharCode(_232);
+evt.key=String.fromCharCode(_22f);
 }
 }
 }
@@ -92023,7 +53460,7 @@
 evt.target=evt.srcElement;
 }
 if(!evt.currentTarget){
-evt.currentTarget=(_230?_230:evt.srcElement);
+evt.currentTarget=(_22d?_22d:evt.srcElement);
 }
 if(!evt.layerX){
 evt.layerX=evt.offsetX;
@@ -92032,12 +53469,12 @@
 evt.layerY=evt.offsetY;
 }
 var doc=(evt.srcElement&&evt.srcElement.ownerDocument)?evt.srcElement.ownerDocument:document;
-var _234=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
+var _231=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
 if(!evt.pageX){
-evt.pageX=evt.clientX+(_234.scrollLeft||0);
+evt.pageX=evt.clientX+(_231.scrollLeft||0);
 }
 if(!evt.pageY){
-evt.pageY=evt.clientY+(_234.scrollTop||0);
+evt.pageY=evt.clientY+(_231.scrollTop||0);
 }
 if(evt.type=="mouseover"){
 evt.relatedTarget=evt.fromElement;
@@ -92062,6 +53499,7 @@
 }
 };
 };
+dojo.kwCompoundRequire({common:["dojo.event.common","dojo.event.topic"],browser:["dojo.event.browser"],dashboard:["dojo.event.browser"]});
 dojo.provide("dojo.event.*");
 dojo.provide("dojo.string.common");
 dojo.string.trim=function(str,wh){
@@ -92080,12 +53518,12 @@
 dojo.string.trimEnd=function(str){
 return dojo.string.trim(str,-1);
 };
-dojo.string.repeat=function(str,_23c,_23d){
+dojo.string.repeat=function(str,_239,_23a){
 var out="";
-for(var i=0;i<_23c;i++){
+for(var i=0;i<_239;i++){
 out+=str;
-if(_23d&&i<_23c-1){
-out+=_23d;
+if(_23a&&i<_239-1){
+out+=_23a;
 }
 }
 return out;
@@ -92115,9 +53553,9 @@
 };
 dojo.provide("dojo.string");
 dojo.provide("dojo.string.extras");
-dojo.string.substituteParams=function(_24b,hash){
+dojo.string.substituteParams=function(_248,hash){
 var map=(typeof hash=="object")?hash:dojo.lang.toArray(arguments,1);
-return _24b.replace(/\%\{(\w+)\}/g,function(_24e,key){
+return _248.replace(/\%\{(\w+)\}/g,function(_24b,key){
 if(typeof (map[key])!="undefined"&&map[key]!=null){
 return map[key];
 }
@@ -92131,11 +53569,11 @@
 if(arguments.length==0){
 str=this;
 }
-var _251=str.split(" ");
-for(var i=0;i<_251.length;i++){
-_251[i]=_251[i].charAt(0).toUpperCase()+_251[i].substring(1);
+var _24e=str.split(" ");
+for(var i=0;i<_24e.length;i++){
+_24e[i]=_24e[i].charAt(0).toUpperCase()+_24e[i].substring(1);
 }
-return _251.join(" ");
+return _24e.join(" ");
 };
 dojo.string.isBlank=function(str){
 if(!dojo.lang.isString(str)){
@@ -92148,15 +53586,15 @@
 return str;
 }
 var ret="";
-var _256=escape(str);
-var _257,re=/%u([0-9A-F]{4})/i;
-while((_257=_256.match(re))){
-var num=Number("0x"+_257[1]);
-var _25a=escape("&#"+num+";");
-ret+=_256.substring(0,_257.index)+_25a;
-_256=_256.substring(_257.index+_257[0].length);
+var _253=escape(str);
+var _254,re=/%u([0-9A-F]{4})/i;
+while((_254=_253.match(re))){
+var num=Number("0x"+_254[1]);
+var _257=escape("&#"+num+";");
+ret+=_253.substring(0,_254.index)+_257;
+_253=_253.substring(_254.index+_254[0].length);
 }
-ret+=_256.replace(/\+/g,"%2B");
+ret+=_253.replace(/\+/g,"%2B");
 return ret;
 };
 dojo.string.escape=function(type,str){
@@ -92181,9 +53619,9 @@
 return str;
 }
 };
-dojo.string.escapeXml=function(str,_25f){
+dojo.string.escapeXml=function(str,_25c){
 str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_25f){
+if(!_25c){
 str=str.replace(/'/gm,"&#39;");
 }
 return str;
@@ -92206,8 +53644,8 @@
 }
 return str.substring(0,len).replace(/\.+$/,"")+"...";
 };
-dojo.string.endsWith=function(str,end,_268){
-if(_268){
+dojo.string.endsWith=function(str,end,_265){
+if(_265){
 str=str.toLowerCase();
 end=end.toLowerCase();
 }
@@ -92224,12 +53662,12 @@
 }
 return false;
 };
-dojo.string.startsWith=function(str,_26c,_26d){
-if(_26d){
+dojo.string.startsWith=function(str,_269,_26a){
+if(_26a){
 str=str.toLowerCase();
-_26c=_26c.toLowerCase();
+_269=_269.toLowerCase();
 }
-return str.indexOf(_26c)==0;
+return str.indexOf(_269)==0;
 };
 dojo.string.startsWithAny=function(str){
 for(var i=1;i<arguments.length;i++){
@@ -92247,12 +53685,12 @@
 }
 return false;
 };
-dojo.string.normalizeNewlines=function(text,_273){
-if(_273=="\n"){
+dojo.string.normalizeNewlines=function(text,_270){
+if(_270=="\n"){
 text=text.replace(/\r\n/g,"\n");
 text=text.replace(/\r/g,"\n");
 }else{
-if(_273=="\r"){
+if(_270=="\r"){
 text=text.replace(/\r\n/g,"\r");
 text=text.replace(/\n/g,"\r");
 }else{
@@ -92261,27 +53699,27 @@
 }
 return text;
 };
-dojo.string.splitEscaped=function(str,_275){
-var _276=[];
-for(var i=0,_278=0;i<str.length;i++){
+dojo.string.splitEscaped=function(str,_272){
+var _273=[];
+for(var i=0,_275=0;i<str.length;i++){
 if(str.charAt(i)=="\\"){
 i++;
 continue;
 }
-if(str.charAt(i)==_275){
-_276.push(str.substring(_278,i));
-_278=i+1;
+if(str.charAt(i)==_272){
+_273.push(str.substring(_275,i));
+_275=i+1;
 }
 }
-_276.push(str.substr(_278));
-return _276;
+_273.push(str.substr(_275));
+return _273;
 };
 dojo.provide("dojo.string.Builder");
 dojo.string.Builder=function(str){
 this.arrConcat=(dojo.render.html.capable&&dojo.render.html["ie"]);
 var a=[];
 var b="";
-var _27c=this.length=b.length;
+var _279=this.length=b.length;
 if(this.arrConcat){
 if(b.length>0){
 a.push(b);
@@ -92302,8 +53740,8 @@
 }else{
 b+=s;
 }
-_27c+=s.length;
-this.length=_27c;
+_279+=s.length;
+this.length=_279;
 }
 }
 return this;
@@ -92311,7 +53749,7 @@
 this.clear=function(){
 a=[];
 b="";
-_27c=this.length=0;
+_279=this.length=0;
 return this;
 };
 this.remove=function(f,l){
@@ -92324,7 +53762,7 @@
 s=b.substring(0,(f-1));
 }
 b=s+b.substring(f+l);
-_27c=this.length=b.length;
+_279=this.length=b.length;
 if(this.arrConcat){
 a.push(b);
 b="";
@@ -92337,7 +53775,7 @@
 }
 a=[];
 b=b.replace(o,n);
-_27c=this.length=b.length;
+_279=this.length=b.length;
 if(this.arrConcat){
 a.push(b);
 b="";
@@ -92356,7 +53794,7 @@
 t.splice(idx,0,s);
 b=t.join("");
 }
-_27c=this.length=b.length;
+_279=this.length=b.length;
 if(this.arrConcat){
 a.push(b);
 b="";
@@ -92365,21 +53803,27 @@
 };
 this.append.apply(this,arguments);
 };
+dojo.kwCompoundRequire({common:["dojo.string","dojo.string.common","dojo.string.extras","dojo.string.Builder"]});
 dojo.provide("dojo.string.*");
 dojo.provide("dojo.uri.Uri");
 dojo.uri=new function(){
 this.dojoUri=function(uri){
 return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(),uri);
 };
-this.moduleUri=function(_288,uri){
-var loc=dojo.hostenv.getModuleSymbols(_288).join("/");
+this.moduleUri=function(_285,uri){
+var loc=dojo.hostenv.getModuleSymbols(_285).join("/");
 if(!loc){
 return null;
 }
 if(loc.lastIndexOf("/")!=loc.length-1){
 loc+="/";
 }
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri()+loc,uri);
+var _288=loc.indexOf(":");
+var _289=loc.indexOf("/");
+if(loc.charAt(0)!="/"&&(_288==-1||_288>_289)){
+loc=dojo.hostenv.getBaseScriptUri()+loc;
+}
+return new dojo.uri.Uri(loc,uri);
 };
 this.Uri=function(){
 var uri=arguments[0];
@@ -92387,20 +53831,20 @@
 if(!arguments[i]){
 continue;
 }
-var _28d=new dojo.uri.Uri(arguments[i].toString());
-var _28e=new dojo.uri.Uri(uri.toString());
-if((_28d.path=="")&&(_28d.scheme==null)&&(_28d.authority==null)&&(_28d.query==null)){
-if(_28d.fragment!=null){
-_28e.fragment=_28d.fragment;
+var _28c=new dojo.uri.Uri(arguments[i].toString());
+var _28d=new dojo.uri.Uri(uri.toString());
+if((_28c.path=="")&&(_28c.scheme==null)&&(_28c.authority==null)&&(_28c.query==null)){
+if(_28c.fragment!=null){
+_28d.fragment=_28c.fragment;
 }
-_28d=_28e;
+_28c=_28d;
 }else{
-if(_28d.scheme==null){
-_28d.scheme=_28e.scheme;
-if(_28d.authority==null){
-_28d.authority=_28e.authority;
-if(_28d.path.charAt(0)!="/"){
-var path=_28e.path.substring(0,_28e.path.lastIndexOf("/")+1)+_28d.path;
+if(_28c.scheme==null){
+_28c.scheme=_28d.scheme;
+if(_28c.authority==null){
+_28c.authority=_28d.authority;
+if(_28c.path.charAt(0)!="/"){
+var path=_28d.path.substring(0,_28d.path.lastIndexOf("/")+1)+_28c.path;
 var segs=path.split("/");
 for(var j=0;j<segs.length;j++){
 if(segs[j]=="."){
@@ -92422,37 +53866,37 @@
 }
 }
 }
-_28d.path=segs.join("/");
+_28c.path=segs.join("/");
 }
 }
 }
 }
 uri="";
-if(_28d.scheme!=null){
-uri+=_28d.scheme+":";
+if(_28c.scheme!=null){
+uri+=_28c.scheme+":";
 }
-if(_28d.authority!=null){
-uri+="//"+_28d.authority;
+if(_28c.authority!=null){
+uri+="//"+_28c.authority;
 }
-uri+=_28d.path;
-if(_28d.query!=null){
-uri+="?"+_28d.query;
+uri+=_28c.path;
+if(_28c.query!=null){
+uri+="?"+_28c.query;
 }
-if(_28d.fragment!=null){
-uri+="#"+_28d.fragment;
+if(_28c.fragment!=null){
+uri+="#"+_28c.fragment;
 }
 }
 this.uri=uri.toString();
-var _292="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
-var r=this.uri.match(new RegExp(_292));
+var _291="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
+var r=this.uri.match(new RegExp(_291));
 this.scheme=r[2]||(r[1]?"":null);
 this.authority=r[4]||(r[3]?"":null);
 this.path=r[5];
 this.query=r[7]||(r[6]?"":null);
 this.fragment=r[9]||(r[8]?"":null);
 if(this.authority!=null){
-_292="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
-r=this.authority.match(new RegExp(_292));
+_291="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
+r=this.authority.match(new RegExp(_291));
 this.user=r[3]||null;
 this.password=r[4]||null;
 this.host=r[5];
@@ -92463,6 +53907,7 @@
 };
 };
 };
+dojo.kwCompoundRequire({common:[["dojo.uri.Uri",false,false]]});
 dojo.provide("dojo.uri.*");
 dojo.provide("dojo.dom");
 dojo.dom.ELEMENT_NODE=1;
@@ -92491,102 +53936,102 @@
 }
 };
 dojo.dom.getUniqueId=function(){
-var _295=dojo.doc();
+var _294=dojo.doc();
 do{
 var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_295.getElementById(id));
+}while(_294.getElementById(id));
 return id;
 };
 dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_297,_298){
-var node=_297.firstChild;
+dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_296,_297){
+var node=_296.firstChild;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.nextSibling;
 }
-if(_298&&node&&node.tagName&&node.tagName.toLowerCase()!=_298.toLowerCase()){
-node=dojo.dom.nextElement(node,_298);
+if(_297&&node&&node.tagName&&node.tagName.toLowerCase()!=_297.toLowerCase()){
+node=dojo.dom.nextElement(node,_297);
 }
 return node;
 };
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_29a,_29b){
-var node=_29a.lastChild;
+dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_299,_29a){
+var node=_299.lastChild;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.previousSibling;
 }
-if(_29b&&node&&node.tagName&&node.tagName.toLowerCase()!=_29b.toLowerCase()){
-node=dojo.dom.prevElement(node,_29b);
+if(_29a&&node&&node.tagName&&node.tagName.toLowerCase()!=_29a.toLowerCase()){
+node=dojo.dom.prevElement(node,_29a);
 }
 return node;
 };
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_29e){
+dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_29d){
 if(!node){
 return null;
 }
 do{
 node=node.nextSibling;
 }while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_29e&&_29e.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.nextElement(node,_29e);
+if(node&&_29d&&_29d.toLowerCase()!=node.tagName.toLowerCase()){
+return dojo.dom.nextElement(node,_29d);
 }
 return node;
 };
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_2a0){
+dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_29f){
 if(!node){
 return null;
 }
-if(_2a0){
-_2a0=_2a0.toLowerCase();
+if(_29f){
+_29f=_29f.toLowerCase();
 }
 do{
 node=node.previousSibling;
 }while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_2a0&&_2a0.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_2a0);
+if(node&&_29f&&_29f.toLowerCase()!=node.tagName.toLowerCase()){
+return dojo.dom.prevElement(node,_29f);
 }
 return node;
 };
-dojo.dom.moveChildren=function(_2a1,_2a2,trim){
-var _2a4=0;
+dojo.dom.moveChildren=function(_2a0,_2a1,trim){
+var _2a3=0;
 if(trim){
-while(_2a1.hasChildNodes()&&_2a1.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_2a1.removeChild(_2a1.firstChild);
+while(_2a0.hasChildNodes()&&_2a0.firstChild.nodeType==dojo.dom.TEXT_NODE){
+_2a0.removeChild(_2a0.firstChild);
 }
-while(_2a1.hasChildNodes()&&_2a1.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_2a1.removeChild(_2a1.lastChild);
+while(_2a0.hasChildNodes()&&_2a0.lastChild.nodeType==dojo.dom.TEXT_NODE){
+_2a0.removeChild(_2a0.lastChild);
 }
 }
-while(_2a1.hasChildNodes()){
-_2a2.appendChild(_2a1.firstChild);
-_2a4++;
+while(_2a0.hasChildNodes()){
+_2a1.appendChild(_2a0.firstChild);
+_2a3++;
 }
-return _2a4;
+return _2a3;
 };
-dojo.dom.copyChildren=function(_2a5,_2a6,trim){
-var _2a8=_2a5.cloneNode(true);
-return this.moveChildren(_2a8,_2a6,trim);
+dojo.dom.copyChildren=function(_2a4,_2a5,trim){
+var _2a7=_2a4.cloneNode(true);
+return this.moveChildren(_2a7,_2a5,trim);
 };
-dojo.dom.replaceChildren=function(node,_2aa){
-var _2ab=[];
+dojo.dom.replaceChildren=function(node,_2a9){
+var _2aa=[];
 if(dojo.render.html.ie){
 for(var i=0;i<node.childNodes.length;i++){
-_2ab.push(node.childNodes[i]);
+_2aa.push(node.childNodes[i]);
 }
 }
 dojo.dom.removeChildren(node);
-node.appendChild(_2aa);
-for(var i=0;i<_2ab.length;i++){
-dojo.dom.destroyNode(_2ab[i]);
+node.appendChild(_2a9);
+for(var i=0;i<_2aa.length;i++){
+dojo.dom.destroyNode(_2aa[i]);
 }
 };
 dojo.dom.removeChildren=function(node){
-var _2ae=node.childNodes.length;
+var _2ad=node.childNodes.length;
 while(node.hasChildNodes()){
 dojo.dom.removeNode(node.firstChild);
 }
-return _2ae;
+return _2ad;
 };
-dojo.dom.replaceNode=function(node,_2b0){
-return node.parentNode.replaceChild(_2b0,node);
+dojo.dom.replaceNode=function(node,_2af){
+return node.parentNode.replaceChild(_2af,node);
 };
 dojo.dom.destroyNode=function(node){
 if(node.parentNode){
@@ -92606,38 +54051,38 @@
 return node.parentNode.removeChild(node);
 }
 };
-dojo.dom.getAncestors=function(node,_2b4,_2b5){
-var _2b6=[];
-var _2b7=(_2b4&&(_2b4 instanceof Function||typeof _2b4=="function"));
+dojo.dom.getAncestors=function(node,_2b3,_2b4){
+var _2b5=[];
+var _2b6=(_2b3&&(_2b3 instanceof Function||typeof _2b3=="function"));
 while(node){
-if(!_2b7||_2b4(node)){
-_2b6.push(node);
+if(!_2b6||_2b3(node)){
+_2b5.push(node);
 }
-if(_2b5&&_2b6.length>0){
-return _2b6[0];
+if(_2b4&&_2b5.length>0){
+return _2b5[0];
 }
 node=node.parentNode;
 }
-if(_2b5){
+if(_2b4){
 return null;
 }
-return _2b6;
+return _2b5;
 };
-dojo.dom.getAncestorsByTag=function(node,tag,_2ba){
+dojo.dom.getAncestorsByTag=function(node,tag,_2b9){
 tag=tag.toLowerCase();
 return dojo.dom.getAncestors(node,function(el){
 return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_2ba);
+},_2b9);
 };
 dojo.dom.getFirstAncestorByTag=function(node,tag){
 return dojo.dom.getAncestorsByTag(node,tag,true);
 };
-dojo.dom.isDescendantOf=function(node,_2bf,_2c0){
-if(_2c0&&node){
+dojo.dom.isDescendantOf=function(node,_2be,_2bf){
+if(_2bf&&node){
 node=node.parentNode;
 }
 while(node){
-if(node==_2bf){
+if(node==_2be){
 return true;
 }
 node=node.parentNode;
@@ -92659,12 +54104,12 @@
 };
 dojo.dom.createDocument=function(){
 var doc=null;
-var _2c3=dojo.doc();
+var _2c2=dojo.doc();
 if(!dj_undef("ActiveXObject")){
-var _2c4=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_2c4.length;i++){
+var _2c3=["MSXML2","Microsoft","MSXML","MSXML3"];
+for(var i=0;i<_2c3.length;i++){
 try{
-doc=new ActiveXObject(_2c4[i]+".XMLDOM");
+doc=new ActiveXObject(_2c3[i]+".XMLDOM");
 }
 catch(e){
 }
@@ -92673,40 +54118,40 @@
 }
 }
 }else{
-if((_2c3.implementation)&&(_2c3.implementation.createDocument)){
-doc=_2c3.implementation.createDocument("","",null);
+if((_2c2.implementation)&&(_2c2.implementation.createDocument)){
+doc=_2c2.implementation.createDocument("","",null);
 }
 }
 return doc;
 };
-dojo.dom.createDocumentFromText=function(str,_2c7){
-if(!_2c7){
-_2c7="text/xml";
+dojo.dom.createDocumentFromText=function(str,_2c6){
+if(!_2c6){
+_2c6="text/xml";
 }
 if(!dj_undef("DOMParser")){
-var _2c8=new DOMParser();
-return _2c8.parseFromString(str,_2c7);
+var _2c7=new DOMParser();
+return _2c7.parseFromString(str,_2c6);
 }else{
 if(!dj_undef("ActiveXObject")){
-var _2c9=dojo.dom.createDocument();
-if(_2c9){
-_2c9.async=false;
-_2c9.loadXML(str);
-return _2c9;
+var _2c8=dojo.dom.createDocument();
+if(_2c8){
+_2c8.async=false;
+_2c8.loadXML(str);
+return _2c8;
 }else{
 dojo.debug("toXml didn't work?");
 }
 }else{
-var _2ca=dojo.doc();
-if(_2ca.createElement){
-var tmp=_2ca.createElement("xml");
+var _2c9=dojo.doc();
+if(_2c9.createElement){
+var tmp=_2c9.createElement("xml");
 tmp.innerHTML=str;
-if(_2ca.implementation&&_2ca.implementation.createDocument){
-var _2cc=_2ca.implementation.createDocument("foo","",null);
+if(_2c9.implementation&&_2c9.implementation.createDocument){
+var _2cb=_2c9.implementation.createDocument("foo","",null);
 for(var i=0;i<tmp.childNodes.length;i++){
-_2cc.importNode(tmp.childNodes.item(i),true);
+_2cb.importNode(tmp.childNodes.item(i),true);
 }
-return _2cc;
+return _2cb;
 }
 return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
 }
@@ -92714,39 +54159,39 @@
 }
 return null;
 };
-dojo.dom.prependChild=function(node,_2cf){
-if(_2cf.firstChild){
-_2cf.insertBefore(node,_2cf.firstChild);
+dojo.dom.prependChild=function(node,_2ce){
+if(_2ce.firstChild){
+_2ce.insertBefore(node,_2ce.firstChild);
 }else{
-_2cf.appendChild(node);
+_2ce.appendChild(node);
 }
 return true;
 };
-dojo.dom.insertBefore=function(node,ref,_2d2){
-if((_2d2!=true)&&(node===ref||node.nextSibling===ref)){
+dojo.dom.insertBefore=function(node,ref,_2d1){
+if((_2d1!=true)&&(node===ref||node.nextSibling===ref)){
 return false;
 }
-var _2d3=ref.parentNode;
-_2d3.insertBefore(node,ref);
+var _2d2=ref.parentNode;
+_2d2.insertBefore(node,ref);
 return true;
 };
-dojo.dom.insertAfter=function(node,ref,_2d6){
+dojo.dom.insertAfter=function(node,ref,_2d5){
 var pn=ref.parentNode;
 if(ref==pn.lastChild){
-if((_2d6!=true)&&(node===ref)){
+if((_2d5!=true)&&(node===ref)){
 return false;
 }
 pn.appendChild(node);
 }else{
-return this.insertBefore(node,ref.nextSibling,_2d6);
+return this.insertBefore(node,ref.nextSibling,_2d5);
 }
 return true;
 };
-dojo.dom.insertAtPosition=function(node,ref,_2da){
-if((!node)||(!ref)||(!_2da)){
+dojo.dom.insertAtPosition=function(node,ref,_2d9){
+if((!node)||(!ref)||(!_2d9)){
 return false;
 }
-switch(_2da.toLowerCase()){
+switch(_2d9.toLowerCase()){
 case "before":
 return dojo.dom.insertBefore(node,ref);
 case "after":
@@ -92764,46 +54209,46 @@
 return true;
 }
 };
-dojo.dom.insertAtIndex=function(node,_2dc,_2dd){
-var _2de=_2dc.childNodes;
-if(!_2de.length||_2de.length==_2dd){
-_2dc.appendChild(node);
+dojo.dom.insertAtIndex=function(node,_2db,_2dc){
+var _2dd=_2db.childNodes;
+if(!_2dd.length||_2dd.length==_2dc){
+_2db.appendChild(node);
 return true;
 }
-if(_2dd==0){
-return dojo.dom.prependChild(node,_2dc);
+if(_2dc==0){
+return dojo.dom.prependChild(node,_2db);
 }
-return dojo.dom.insertAfter(node,_2de[_2dd-1]);
+return dojo.dom.insertAfter(node,_2dd[_2dc-1]);
 };
 dojo.dom.textContent=function(node,text){
 if(arguments.length>1){
-var _2e1=dojo.doc();
-dojo.dom.replaceChildren(node,_2e1.createTextNode(text));
+var _2e0=dojo.doc();
+dojo.dom.replaceChildren(node,_2e0.createTextNode(text));
 return text;
 }else{
 if(node.textContent!=undefined){
 return node.textContent;
 }
-var _2e2="";
+var _2e1="";
 if(node==null){
-return _2e2;
+return _2e1;
 }
 for(var i=0;i<node.childNodes.length;i++){
 switch(node.childNodes[i].nodeType){
 case 1:
 case 5:
-_2e2+=dojo.dom.textContent(node.childNodes[i]);
+_2e1+=dojo.dom.textContent(node.childNodes[i]);
 break;
 case 3:
 case 2:
 case 4:
-_2e2+=node.childNodes[i].nodeValue;
+_2e1+=node.childNodes[i].nodeValue;
 break;
 default:
 break;
 }
 }
-return _2e2;
+return _2e1;
 }
 };
 dojo.dom.hasParent=function(node){
@@ -92819,17 +54264,17 @@
 }
 return "";
 };
-dojo.dom.setAttributeNS=function(elem,_2e8,_2e9,_2ea){
+dojo.dom.setAttributeNS=function(elem,_2e7,_2e8,_2e9){
 if(elem==null||((elem==undefined)&&(typeof elem=="undefined"))){
 dojo.raise("No element given to dojo.dom.setAttributeNS");
 }
 if(!((elem.setAttributeNS==undefined)&&(typeof elem.setAttributeNS=="undefined"))){
-elem.setAttributeNS(_2e8,_2e9,_2ea);
+elem.setAttributeNS(_2e7,_2e8,_2e9);
 }else{
-var _2eb=elem.ownerDocument;
-var _2ec=_2eb.createNode(2,_2e9,_2e8);
-_2ec.nodeValue=_2ea;
-elem.setAttributeNode(_2ec);
+var _2ea=elem.ownerDocument;
+var _2eb=_2ea.createNode(2,_2e8,_2e7);
+_2eb.nodeValue=_2e9;
+elem.setAttributeNode(_2eb);
 }
 };
 dojo.provide("dojo.html.common");
@@ -92849,24 +54294,24 @@
 return t;
 };
 dojo.html.getViewport=function(){
-var _2ef=dojo.global();
-var _2f0=dojo.doc();
+var _2ee=dojo.global();
+var _2ef=dojo.doc();
 var w=0;
 var h=0;
 if(dojo.render.html.mozilla){
-w=_2f0.documentElement.clientWidth;
-h=_2ef.innerHeight;
+w=_2ef.documentElement.clientWidth;
+h=_2ee.innerHeight;
 }else{
-if(!dojo.render.html.opera&&_2ef.innerWidth){
-w=_2ef.innerWidth;
-h=_2ef.innerHeight;
+if(!dojo.render.html.opera&&_2ee.innerWidth){
+w=_2ee.innerWidth;
+h=_2ee.innerHeight;
 }else{
-if(!dojo.render.html.opera&&dojo.exists(_2f0,"documentElement.clientWidth")){
-var w2=_2f0.documentElement.clientWidth;
+if(!dojo.render.html.opera&&dojo.exists(_2ef,"documentElement.clientWidth")){
+var w2=_2ef.documentElement.clientWidth;
 if(!w||w2&&w2<w){
 w=w2;
 }
-h=_2f0.documentElement.clientHeight;
+h=_2ef.documentElement.clientHeight;
 }else{
 if(dojo.body().clientWidth){
 w=dojo.body().clientWidth;
@@ -92878,23 +54323,23 @@
 return {width:w,height:h};
 };
 dojo.html.getScroll=function(){
-var _2f4=dojo.global();
-var _2f5=dojo.doc();
-var top=_2f4.pageYOffset||_2f5.documentElement.scrollTop||dojo.body().scrollTop||0;
-var left=_2f4.pageXOffset||_2f5.documentElement.scrollLeft||dojo.body().scrollLeft||0;
+var _2f3=dojo.global();
+var _2f4=dojo.doc();
+var top=_2f3.pageYOffset||_2f4.documentElement.scrollTop||dojo.body().scrollTop||0;
+var left=_2f3.pageXOffset||_2f4.documentElement.scrollLeft||dojo.body().scrollLeft||0;
 return {top:top,left:left,offset:{x:left,y:top}};
 };
 dojo.html.getParentByType=function(node,type){
-var _2fa=dojo.doc();
-var _2fb=dojo.byId(node);
+var _2f9=dojo.doc();
+var _2fa=dojo.byId(node);
 type=type.toLowerCase();
-while((_2fb)&&(_2fb.nodeName.toLowerCase()!=type)){
-if(_2fb==(_2fa["body"]||_2fa["documentElement"])){
+while((_2fa)&&(_2fa.nodeName.toLowerCase()!=type)){
+if(_2fa==(_2f9["body"]||_2f9["documentElement"])){
 return null;
 }
-_2fb=_2fb.parentNode;
+_2fa=_2fa.parentNode;
 }
-return _2fb;
+return _2fa;
 };
 dojo.html.getAttribute=function(node,attr){
 node=dojo.byId(node);
@@ -92927,17 +54372,17 @@
 };
 dojo.html.getCursorPosition=function(e){
 e=e||dojo.global().event;
-var _303={x:0,y:0};
+var _302={x:0,y:0};
 if(e.pageX||e.pageY){
-_303.x=e.pageX;
-_303.y=e.pageY;
+_302.x=e.pageX;
+_302.y=e.pageY;
 }else{
 var de=dojo.doc().documentElement;
 var db=dojo.body();
-_303.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
-_303.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
+_302.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
+_302.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
 }
-return _303;
+return _302;
 };
 dojo.html.isTag=function(node){
 node=dojo.byId(node);
@@ -92953,9 +54398,9 @@
 if(dojo.render.html.ie&&!dojo.render.html.ie70){
 if(window.location.href.substr(0,6).toLowerCase()!="https:"){
 (function(){
-var _308=dojo.doc().createElement("script");
-_308.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
-dojo.doc().getElementsByTagName("head")[0].appendChild(_308);
+var _307=dojo.doc().createElement("script");
+_307.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
+dojo.doc().getElementsByTagName("head")[0].appendChild(_307);
 })();
 }
 }else{
@@ -92963,20 +54408,20 @@
 return doc.createElement(tag);
 };
 }
-dojo.html._callDeprecated=function(_30b,_30c,args,_30e,_30f){
-dojo.deprecated("dojo.html."+_30b,"replaced by dojo.html."+_30c+"("+(_30e?"node, {"+_30e+": "+_30e+"}":"")+")"+(_30f?"."+_30f:""),"0.5");
-var _310=[];
-if(_30e){
-var _311={};
-_311[_30e]=args[1];
-_310.push(args[0]);
-_310.push(_311);
+dojo.html._callDeprecated=function(_30a,_30b,args,_30d,_30e){
+dojo.deprecated("dojo.html."+_30a,"replaced by dojo.html."+_30b+"("+(_30d?"node, {"+_30d+": "+_30d+"}":"")+")"+(_30e?"."+_30e:""),"0.5");
+var _30f=[];
+if(_30d){
+var _310={};
+_310[_30d]=args[1];
+_30f.push(args[0]);
+_30f.push(_310);
 }else{
-_310=args;
+_30f=args;
 }
-var ret=dojo.html[_30c].apply(dojo.html,args);
-if(_30f){
-return ret[_30f];
+var ret=dojo.html[_30b].apply(dojo.html,args);
+if(_30e){
+return ret[_30e];
 }else{
 return ret;
 }
@@ -93002,18 +54447,18 @@
 dojo.provide("dojo.flash");
 dojo.flash=function(){
 };
-dojo.flash={flash6_version:null,flash8_version:null,ready:false,_visible:true,_loadedListeners:new Array(),_installingListeners:new Array(),setSwf:function(_313){
-if(_313==null||dojo.lang.isUndefined(_313)){
+dojo.flash={flash6_version:null,flash8_version:null,ready:false,_visible:true,_loadedListeners:new Array(),_installingListeners:new Array(),setSwf:function(_312){
+if(_312==null||dojo.lang.isUndefined(_312)){
 return;
 }
-if(_313.flash6!=null&&!dojo.lang.isUndefined(_313.flash6)){
-this.flash6_version=_313.flash6;
+if(_312.flash6!=null&&!dojo.lang.isUndefined(_312.flash6)){
+this.flash6_version=_312.flash6;
 }
-if(_313.flash8!=null&&!dojo.lang.isUndefined(_313.flash8)){
-this.flash8_version=_313.flash8;
+if(_312.flash8!=null&&!dojo.lang.isUndefined(_312.flash8)){
+this.flash8_version=_312.flash8;
 }
-if(!dojo.lang.isUndefined(_313.visible)){
-this._visible=_313.visible;
+if(!dojo.lang.isUndefined(_312.visible)){
+this._visible=_312.visible;
 }
 this._initialize();
 },useFlash6:function(){
@@ -93036,10 +54481,10 @@
 return false;
 }
 }
-},addLoadedListener:function(_314){
-this._loadedListeners.push(_314);
-},addInstallingListener:function(_315){
-this._installingListeners.push(_315);
+},addLoadedListener:function(_313){
+this._loadedListeners.push(_313);
+},addInstallingListener:function(_314){
+this._installingListeners.push(_314);
 },loaded:function(){
 dojo.flash.ready=true;
 if(dojo.flash._loadedListeners.length>0){
@@ -93054,10 +54499,10 @@
 }
 }
 },_initialize:function(){
-var _318=new dojo.flash.Install();
-dojo.flash.installer=_318;
-if(_318.needed()==true){
-_318.install();
+var _317=new dojo.flash.Install();
+dojo.flash.installer=_317;
+if(_317.needed()==true){
+_317.install();
 }else{
 dojo.flash.obj=new dojo.flash.Embed(this._visible);
 dojo.flash.obj.write(dojo.flash.info.commVersion);
@@ -93082,61 +54527,61 @@
 this._detectVersion();
 this._detectCommunicationVersion();
 };
-dojo.flash.Info.prototype={version:-1,versionMajor:-1,versionMinor:-1,versionRevision:-1,capable:false,commVersion:6,installing:false,isVersionOrAbove:function(_319,_31a,_31b){
-_31b=parseFloat("."+_31b);
-if(this.versionMajor>=_319&&this.versionMinor>=_31a&&this.versionRevision>=_31b){
+dojo.flash.Info.prototype={version:-1,versionMajor:-1,versionMinor:-1,versionRevision:-1,capable:false,commVersion:6,installing:false,isVersionOrAbove:function(_318,_319,_31a){
+_31a=parseFloat("."+_31a);
+if(this.versionMajor>=_318&&this.versionMinor>=_319&&this.versionRevision>=_31a){
 return true;
 }else{
 return false;
 }
 },_detectVersion:function(){
-var _31c;
-for(var _31d=25;_31d>0;_31d--){
+var _31b;
+for(var _31c=25;_31c>0;_31c--){
 if(dojo.render.html.ie){
-_31c=VBGetSwfVer(_31d);
+_31b=VBGetSwfVer(_31c);
 }else{
-_31c=this._JSFlashInfo(_31d);
+_31b=this._JSFlashInfo(_31c);
 }
-if(_31c==-1){
+if(_31b==-1){
 this.capable=false;
 return;
 }else{
-if(_31c!=0){
-var _31e;
+if(_31b!=0){
+var _31d;
 if(dojo.render.html.ie){
-var _31f=_31c.split(" ");
-var _320=_31f[1];
-_31e=_320.split(",");
+var _31e=_31b.split(" ");
+var _31f=_31e[1];
+_31d=_31f.split(",");
 }else{
-_31e=_31c.split(".");
+_31d=_31b.split(".");
 }
-this.versionMajor=_31e[0];
-this.versionMinor=_31e[1];
-this.versionRevision=_31e[2];
-var _321=this.versionMajor+"."+this.versionRevision;
-this.version=parseFloat(_321);
+this.versionMajor=_31d[0];
+this.versionMinor=_31d[1];
+this.versionRevision=_31d[2];
+var _320=this.versionMajor+"."+this.versionRevision;
+this.version=parseFloat(_320);
 this.capable=true;
 break;
 }
 }
 }
-},_JSFlashInfo:function(_322){
+},_JSFlashInfo:function(_321){
 if(navigator.plugins!=null&&navigator.plugins.length>0){
 if(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]){
-var _323=navigator.plugins["Shockwave Flash 2.0"]?" 2.0":"";
-var _324=navigator.plugins["Shockwave Flash"+_323].description;
-var _325=_324.split(" ");
-var _326=_325[2].split(".");
-var _327=_326[0];
-var _328=_326[1];
-if(_325[3]!=""){
-var _329=_325[3].split("r");
+var _322=navigator.plugins["Shockwave Flash 2.0"]?" 2.0":"";
+var _323=navigator.plugins["Shockwave Flash"+_322].description;
+var _324=_323.split(" ");
+var _325=_324[2].split(".");
+var _326=_325[0];
+var _327=_325[1];
+if(_324[3]!=""){
+var _328=_324[3].split("r");
 }else{
-var _329=_325[4].split("r");
+var _328=_324[4].split("r");
 }
-var _32a=_329[1]>0?_329[1]:0;
-var _32b=_327+"."+_328+"."+_32a;
-return _32b;
+var _329=_328[1]>0?_328[1]:0;
+var _32a=_326+"."+_327+"."+_329;
+return _32a;
 }
 }
 return -1;
@@ -93155,8 +54600,8 @@
 this.commVersion=6;
 }
 }};
-dojo.flash.Embed=function(_32c){
-this._visible=_32c;
+dojo.flash.Embed=function(_32b){
+this._visible=_32b;
 };
 dojo.flash.Embed.prototype={width:215,height:138,id:"flashObject",_visible:true,protocol:function(){
 switch(window.location.protocol){
@@ -93167,68 +54612,68 @@
 return "http";
 break;
 }
-},write:function(_32d,_32e){
-if(dojo.lang.isUndefined(_32e)){
-_32e=false;
+},write:function(_32c,_32d){
+if(dojo.lang.isUndefined(_32d)){
+_32d=false;
 }
-var _32f=new dojo.string.Builder();
-_32f.append("width: "+this.width+"px; ");
-_32f.append("height: "+this.height+"px; ");
+var _32e=new dojo.string.Builder();
+_32e.append("width: "+this.width+"px; ");
+_32e.append("height: "+this.height+"px; ");
 if(this._visible==false){
-_32f.append("position: absolute; ");
-_32f.append("z-index: 10000; ");
-_32f.append("top: -1000px; ");
-_32f.append("left: -1000px; ");
+_32e.append("position: absolute; ");
+_32e.append("z-index: 10000; ");
+_32e.append("top: -1000px; ");
+_32e.append("left: -1000px; ");
 }
-_32f=_32f.toString();
+_32e=_32e.toString();
+var _32f;
 var _330;
-var _331;
-if(_32d==6){
-_331=dojo.flash.flash6_version;
-var _332=djConfig.baseRelativePath;
-_331=_331+"?baseRelativePath="+escape(_332);
-_330="<embed id=\""+this.id+"\" src=\""+_331+"\" "+"    quality=\"high\" bgcolor=\"#ffffff\" "+"    width=\""+this.width+"\" height=\""+this.height+"\" "+"    name=\""+this.id+"\" "+"    align=\"middle\" allowScriptAccess=\"sameDomain\" "+"    type=\"application/x-shockwave-flash\" swLiveConnect=\"true\" "+"    pluginspage=\""+this.protocol()+"://www.macromedia.com/go/getflashplayer\">";
+if(_32c==6){
+_330=dojo.flash.flash6_version;
+var _331=djConfig.baseRelativePath;
+_330=_330+"?baseRelativePath="+escape(_331);
+_32f="<embed id=\""+this.id+"\" src=\""+_330+"\" "+"    quality=\"high\" bgcolor=\"#ffffff\" "+"    width=\""+this.width+"\" height=\""+this.height+"\" "+"    name=\""+this.id+"\" "+"    align=\"middle\" allowScriptAccess=\"sameDomain\" "+"    type=\"application/x-shockwave-flash\" swLiveConnect=\"true\" "+"    pluginspage=\""+this.protocol()+"://www.macromedia.com/go/getflashplayer\">";
 }else{
-_331=dojo.flash.flash8_version;
-var _333=_331;
-var _334=_331;
-var _332=djConfig.baseRelativePath;
-if(_32e){
-var _335=escape(window.location);
+_330=dojo.flash.flash8_version;
+var _332=_330;
+var _333=_330;
+var _331=djConfig.baseRelativePath;
+if(_32d){
+var _334=escape(window.location);
 document.title=document.title.slice(0,47)+" - Flash Player Installation";
-var _336=escape(document.title);
-_333+="?MMredirectURL="+_335+"&MMplayerType=ActiveX"+"&MMdoctitle="+_336+"&baseRelativePath="+escape(_332);
-_334+="?MMredirectURL="+_335+"&MMplayerType=PlugIn"+"&baseRelativePath="+escape(_332);
+var _335=escape(document.title);
+_332+="?MMredirectURL="+_334+"&MMplayerType=ActiveX"+"&MMdoctitle="+_335+"&baseRelativePath="+escape(_331);
+_333+="?MMredirectURL="+_334+"&MMplayerType=PlugIn"+"&baseRelativePath="+escape(_331);
 }
-if(_334.indexOf("?")==-1){
-_334+="?baseRelativePath="+escape(_332)+"' ";
+if(_333.indexOf("?")==-1){
+_333+="?baseRelativePath="+escape(_331)+"' ";
 }
-_330="<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" "+"codebase=\""+this.protocol()+"://fpdownload.macromedia.com/pub/shockwave/cabs/flash/"+"swflash.cab#version=8,0,0,0\" "+"width=\""+this.width+"\" "+"height=\""+this.height+"\" "+"id=\""+this.id+"\" "+"align=\"middle\"> "+"<param name=\"allowScriptAccess\" value=\"sameDomain\" /> "+"<param name=\"movie\" value=\""+_333+"\" /> "+"<param name=\"quality\" value=\"high\" /> "+"<param name=\"bgcolor\" value=\"#ffffff\" /> "+"<embed src=\""+_334+"' "+"quality=\"high\" "+"bgcolor=\"#ffffff\" "+"width=\""+this.width+"\" "+"height=\""+this.height+"\" "+"id=\""+this.id+"\" "+"name=\""+this.id+"\" "+"swLiveConnect=\"true\" "+"align=\"middle\" "+"allowScriptAccess=\"sameDomain\" "+"type=\"application/x-shockwave-flash\" "+"pluginspage=\""+this.protocol()+"://www.macromedia.com/go/getflashplayer\" />"+"</object>";
+_32f="<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" "+"codebase=\""+this.protocol()+"://fpdownload.macromedia.com/pub/shockwave/cabs/flash/"+"swflash.cab#version=8,0,0,0\" "+"width=\""+this.width+"\" "+"height=\""+this.height+"\" "+"id=\""+this.id+"\" "+"align=\"middle\"> "+"<param name=\"allowScriptAccess\" value=\"sameDomain\" /> "+"<param name=\"movie\" value=\""+_332+"\" /> "+"<param name=\"quality\" value=\"high\" /> "+"<param name=\"bgcolor\" value=\"#ffffff\" /> "+"<embed src=\""+_333+"' "+"quality=\"high\" "+"bgcolor=\"#ffffff\" "+"width=\""+this.width+"\" "+"height=\""+this.height+"\" "+"id=\""+this.id+"\" "+"name=\""+this.id+"\" "+"swLiveConnect=\"true\" "+"align=\"middle\" "+"allowScriptAccess=\"sameDomain\" "+"type=\"application/x-shockwave-flash\" "+"pluginspage=\""+this.protocol()+"://www.macromedia.com/go/getflashplayer\" />"+"</object>";
 }
-_330="<div id=\""+this.id+"Container\" style=\""+_32f+"\"> "+_330+"</div>";
-document.writeln(_330);
+_32f="<div id=\""+this.id+"Container\" style=\""+_32e+"\"> "+_32f+"</div>";
+document.writeln(_32f);
 },get:function(){
 return document.getElementById(this.id);
-},setVisible:function(_337){
-var _338=dojo.byId(this.id+"Container");
-if(_337==true){
-_338.style.visibility="visible";
+},setVisible:function(_336){
+var _337=dojo.byId(this.id+"Container");
+if(_336==true){
+_337.style.visibility="visible";
 }else{
-_338.style.position="absolute";
-_338.style.x="-1000px";
-_338.style.y="-1000px";
-_338.style.visibility="hidden";
+_337.style.position="absolute";
+_337.style.x="-1000px";
+_337.style.y="-1000px";
+_337.style.visibility="hidden";
 }
 },center:function(){
-var _339=this.width;
-var _33a=this.height;
-var _33b=dojo.html.getScroll().offset;
-var _33c=dojo.html.getViewport();
-var x=_33b.x+(_33c.width-_339)/2;
-var y=_33b.y+(_33c.height-_33a)/2;
-var _33f=dojo.byId(this.id+"Container");
-_33f.style.top=y+"px";
-_33f.style.left=x+"px";
+var _338=this.width;
+var _339=this.height;
+var _33a=dojo.html.getScroll().offset;
+var _33b=dojo.html.getViewport();
+var x=_33a.x+(_33b.width-_338)/2;
+var y=_33a.y+(_33b.height-_339)/2;
+var _33e=dojo.byId(this.id+"Container");
+_33e.style.top=y+"px";
+_33e.style.left=x+"px";
 }};
 dojo.flash.Communicator=function(){
 if(dojo.flash.useFlash6()){
@@ -93255,76 +54700,76 @@
 document.writeln("</SCRIPT> ");
 }
 },_writeFlash8:function(){
-},_handleFSCommand:function(_341,args){
-if(_341!=null&&!dojo.lang.isUndefined(_341)&&/^FSCommand:(.*)/.test(_341)==true){
-_341=_341.match(/^FSCommand:(.*)/)[1];
+},_handleFSCommand:function(_340,args){
+if(_340!=null&&!dojo.lang.isUndefined(_340)&&/^FSCommand:(.*)/.test(_340)==true){
+_340=_340.match(/^FSCommand:(.*)/)[1];
 }
-if(_341=="addCallback"){
-this._fscommandAddCallback(_341,args);
+if(_340=="addCallback"){
+this._fscommandAddCallback(_340,args);
 }else{
-if(_341=="call"){
-this._fscommandCall(_341,args);
+if(_340=="call"){
+this._fscommandCall(_340,args);
 }else{
-if(_341=="fscommandReady"){
+if(_340=="fscommandReady"){
 this._fscommandReady();
 }
 }
 }
-},_fscommandAddCallback:function(_343,args){
-var _345=args;
-var _346=function(){
-return dojo.flash.comm._call(_345,arguments);
+},_fscommandAddCallback:function(_342,args){
+var _344=args;
+var _345=function(){
+return dojo.flash.comm._call(_344,arguments);
 };
-dojo.flash.comm[_345]=_346;
+dojo.flash.comm[_344]=_345;
 dojo.flash.obj.get().SetVariable("_succeeded",true);
-},_fscommandCall:function(_347,args){
-var _349=dojo.flash.obj.get();
-var _34a=args;
-var _34b=parseInt(_349.GetVariable("_numArgs"));
-var _34c=new Array();
-for(var i=0;i<_34b;i++){
-var _34e=_349.GetVariable("_"+i);
-_34c.push(_34e);
+},_fscommandCall:function(_346,args){
+var _348=dojo.flash.obj.get();
+var _349=args;
+var _34a=parseInt(_348.GetVariable("_numArgs"));
+var _34b=new Array();
+for(var i=0;i<_34a;i++){
+var _34d=_348.GetVariable("_"+i);
+_34b.push(_34d);
 }
-var _34f;
-if(_34a.indexOf(".")==-1){
-_34f=window[_34a];
+var _34e;
+if(_349.indexOf(".")==-1){
+_34e=window[_349];
 }else{
-_34f=eval(_34a);
+_34e=eval(_349);
 }
-var _350=null;
-if(!dojo.lang.isUndefined(_34f)&&_34f!=null){
-_350=_34f.apply(null,_34c);
+var _34f=null;
+if(!dojo.lang.isUndefined(_34e)&&_34e!=null){
+_34f=_34e.apply(null,_34b);
 }
-_349.SetVariable("_returnResult",_350);
+_348.SetVariable("_returnResult",_34f);
 },_fscommandReady:function(){
-var _351=dojo.flash.obj.get();
-_351.SetVariable("fscommandReady","true");
-},_call:function(_352,args){
-var _354=dojo.flash.obj.get();
-_354.SetVariable("_functionName",_352);
-_354.SetVariable("_numArgs",args.length);
+var _350=dojo.flash.obj.get();
+_350.SetVariable("fscommandReady","true");
+},_call:function(_351,args){
+var _353=dojo.flash.obj.get();
+_353.SetVariable("_functionName",_351);
+_353.SetVariable("_numArgs",args.length);
 for(var i=0;i<args.length;i++){
-var _356=args[i];
-_356=_356.replace(/\0/g,"\\0");
-_354.SetVariable("_"+i,_356);
+var _355=args[i];
+_355=_355.replace(/\0/g,"\\0");
+_353.SetVariable("_"+i,_355);
 }
-_354.TCallLabel("/_flashRunner","execute");
-var _357=_354.GetVariable("_returnResult");
-_357=_357.replace(/\\0/g,"\x00");
-return _357;
-},_addExternalInterfaceCallback:function(_358){
-var _359=function(){
-var _35a=new Array(arguments.length);
+_353.TCallLabel("/_flashRunner","execute");
+var _356=_353.GetVariable("_returnResult");
+_356=_356.replace(/\\0/g,"\x00");
+return _356;
+},_addExternalInterfaceCallback:function(_357){
+var _358=function(){
+var _359=new Array(arguments.length);
 for(var i=0;i<arguments.length;i++){
-_35a[i]=arguments[i];
+_359[i]=arguments[i];
 }
-return dojo.flash.comm._execFlash(_358,_35a);
+return dojo.flash.comm._execFlash(_357,_359);
 };
-dojo.flash.comm[_358]=_359;
+dojo.flash.comm[_357]=_358;
 },_encodeData:function(data){
-var _35d=/\&([^;]*)\;/g;
-data=data.replace(_35d,"&amp;$1;");
+var _35c=/\&([^;]*)\;/g;
+data=data.replace(_35c,"&amp;$1;");
 data=data.replace(/</g,"&lt;");
 data=data.replace(/>/g,"&gt;");
 data=data.replace("\\","&custom_backslash;&custom_backslash;");
@@ -93343,46 +54788,46 @@
 data=data.replace(/\&custom_gt\;/g,">");
 data=eval("\""+data+"\"");
 return data;
-},_chunkArgumentData:function(_35f,_360){
-var _361=dojo.flash.obj.get();
-var _362=Math.ceil(_35f.length/1024);
-for(var i=0;i<_362;i++){
-var _364=i*1024;
-var _365=i*1024+1024;
-if(i==(_362-1)){
-_365=i*1024+_35f.length;
+},_chunkArgumentData:function(_35e,_35f){
+var _360=dojo.flash.obj.get();
+var _361=Math.ceil(_35e.length/1024);
+for(var i=0;i<_361;i++){
+var _363=i*1024;
+var _364=i*1024+1024;
+if(i==(_361-1)){
+_364=i*1024+_35e.length;
 }
-var _366=_35f.substring(_364,_365);
-_366=this._encodeData(_366);
-_361.CallFunction("<invoke name=\"chunkArgumentData\" "+"returntype=\"javascript\">"+"<arguments>"+"<string>"+_366+"</string>"+"<number>"+_360+"</number>"+"</arguments>"+"</invoke>");
+var _365=_35e.substring(_363,_364);
+_365=this._encodeData(_365);
+_360.CallFunction("<invoke name=\"chunkArgumentData\" "+"returntype=\"javascript\">"+"<arguments>"+"<string>"+_365+"</string>"+"<number>"+_35f+"</number>"+"</arguments>"+"</invoke>");
 }
 },_chunkReturnData:function(){
-var _367=dojo.flash.obj.get();
-var _368=_367.getReturnLength();
-var _369=new Array();
-for(var i=0;i<_368;i++){
-var _36b=_367.CallFunction("<invoke name=\"chunkReturnData\" "+"returntype=\"javascript\">"+"<arguments>"+"<number>"+i+"</number>"+"</arguments>"+"</invoke>");
-if(_36b=="\"\""||_36b=="''"){
-_36b="";
+var _366=dojo.flash.obj.get();
+var _367=_366.getReturnLength();
+var _368=new Array();
+for(var i=0;i<_367;i++){
+var _36a=_366.CallFunction("<invoke name=\"chunkReturnData\" "+"returntype=\"javascript\">"+"<arguments>"+"<number>"+i+"</number>"+"</arguments>"+"</invoke>");
+if(_36a=="\"\""||_36a=="''"){
+_36a="";
 }else{
-_36b=_36b.substring(1,_36b.length-1);
+_36a=_36a.substring(1,_36a.length-1);
 }
-_369.push(_36b);
+_368.push(_36a);
 }
-var _36c=_369.join("");
-return _36c;
-},_execFlash:function(_36d,_36e){
-var _36f=dojo.flash.obj.get();
-_36f.startExec();
-_36f.setNumberArguments(_36e.length);
-for(var i=0;i<_36e.length;i++){
-this._chunkArgumentData(_36e[i],i);
+var _36b=_368.join("");
+return _36b;
+},_execFlash:function(_36c,_36d){
+var _36e=dojo.flash.obj.get();
+_36e.startExec();
+_36e.setNumberArguments(_36d.length);
+for(var i=0;i<_36d.length;i++){
+this._chunkArgumentData(_36d[i],i);
 }
-_36f.exec(_36d);
-var _371=this._chunkReturnData();
-_371=this._decodeData(_371);
-_36f.endExec();
-return _371;
+_36e.exec(_36c);
+var _370=this._chunkReturnData();
+_370=this._decodeData(_370);
+_36e.endExec();
+return _370;
 }};
 dojo.flash.Install=function(){
 };
@@ -93401,14 +54846,14 @@
 dojo.flash.info.installing=true;
 dojo.flash.installing();
 if(dojo.flash.info.capable==false){
-var _372=new dojo.flash.Embed(false);
-_372.write(8);
+var _371=new dojo.flash.Embed(false);
+_371.write(8);
 }else{
 if(dojo.flash.info.isVersionOrAbove(6,0,65)){
-var _372=new dojo.flash.Embed(false);
-_372.write(8,true);
-_372.setVisible(true);
-_372.center();
+var _371=new dojo.flash.Embed(false);
+_371.write(8,true);
+_371.setVisible(true);
+_371.center();
 }else{
 alert("This content requires a more recent version of the Macromedia "+" Flash Player.");
 window.location.href=+dojo.flash.Embed.protocol()+"://www.macromedia.com/go/getflashplayer";
@@ -93430,40 +54875,40 @@
 }};
 dojo.flash.info=new dojo.flash.Info();
 dojo.provide("dojo.lang.type");
-dojo.lang.whatAmI=function(_374){
+dojo.lang.whatAmI=function(_373){
 dojo.deprecated("dojo.lang.whatAmI","use dojo.lang.getType instead","0.5");
-return dojo.lang.getType(_374);
+return dojo.lang.getType(_373);
 };
 dojo.lang.whatAmI.custom={};
-dojo.lang.getType=function(_375){
+dojo.lang.getType=function(_374){
 try{
-if(dojo.lang.isArray(_375)){
+if(dojo.lang.isArray(_374)){
 return "array";
 }
-if(dojo.lang.isFunction(_375)){
+if(dojo.lang.isFunction(_374)){
 return "function";
 }
-if(dojo.lang.isString(_375)){
+if(dojo.lang.isString(_374)){
 return "string";
 }
-if(dojo.lang.isNumber(_375)){
+if(dojo.lang.isNumber(_374)){
 return "number";
 }
-if(dojo.lang.isBoolean(_375)){
+if(dojo.lang.isBoolean(_374)){
 return "boolean";
 }
-if(dojo.lang.isAlien(_375)){
+if(dojo.lang.isAlien(_374)){
 return "alien";
 }
-if(dojo.lang.isUndefined(_375)){
+if(dojo.lang.isUndefined(_374)){
 return "undefined";
 }
 for(var name in dojo.lang.whatAmI.custom){
-if(dojo.lang.whatAmI.custom[name](_375)){
+if(dojo.lang.whatAmI.custom[name](_374)){
 return name;
 }
 }
-if(dojo.lang.isObject(_375)){
+if(dojo.lang.isObject(_374)){
 return "object";
 }
 }
@@ -93471,28 +54916,28 @@
 }
 return "unknown";
 };
-dojo.lang.isNumeric=function(_377){
-return (!isNaN(_377)&&isFinite(_377)&&(_377!=null)&&!dojo.lang.isBoolean(_377)&&!dojo.lang.isArray(_377)&&!/^\s*$/.test(_377));
+dojo.lang.isNumeric=function(_376){
+return (!isNaN(_376)&&isFinite(_376)&&(_376!=null)&&!dojo.lang.isBoolean(_376)&&!dojo.lang.isArray(_376)&&!/^\s*$/.test(_376));
 };
-dojo.lang.isBuiltIn=function(_378){
-return (dojo.lang.isArray(_378)||dojo.lang.isFunction(_378)||dojo.lang.isString(_378)||dojo.lang.isNumber(_378)||dojo.lang.isBoolean(_378)||(_378==null)||(_378 instanceof Error)||(typeof _378=="error"));
+dojo.lang.isBuiltIn=function(_377){
+return (dojo.lang.isArray(_377)||dojo.lang.isFunction(_377)||dojo.lang.isString(_377)||dojo.lang.isNumber(_377)||dojo.lang.isBoolean(_377)||(_377==null)||(_377 instanceof Error)||(typeof _377=="error"));
 };
-dojo.lang.isPureObject=function(_379){
-return ((_379!=null)&&dojo.lang.isObject(_379)&&_379.constructor==Object);
+dojo.lang.isPureObject=function(_378){
+return ((_378!=null)&&dojo.lang.isObject(_378)&&_378.constructor==Object);
 };
-dojo.lang.isOfType=function(_37a,type,_37c){
-var _37d=false;
-if(_37c){
-_37d=_37c["optional"];
+dojo.lang.isOfType=function(_379,type,_37b){
+var _37c=false;
+if(_37b){
+_37c=_37b["optional"];
 }
-if(_37d&&((_37a===null)||dojo.lang.isUndefined(_37a))){
+if(_37c&&((_379===null)||dojo.lang.isUndefined(_379))){
 return true;
 }
 if(dojo.lang.isArray(type)){
-var _37e=type;
-for(var i in _37e){
-var _380=_37e[i];
-if(dojo.lang.isOfType(_37a,_380)){
+var _37d=type;
+for(var i in _37d){
+var _37f=_37d[i];
+if(dojo.lang.isOfType(_379,_37f)){
 return true;
 }
 }
@@ -93504,41 +54949,41 @@
 switch(type){
 case Array:
 case "array":
-return dojo.lang.isArray(_37a);
+return dojo.lang.isArray(_379);
 case Function:
 case "function":
-return dojo.lang.isFunction(_37a);
+return dojo.lang.isFunction(_379);
 case String:
 case "string":
-return dojo.lang.isString(_37a);
+return dojo.lang.isString(_379);
 case Number:
 case "number":
-return dojo.lang.isNumber(_37a);
+return dojo.lang.isNumber(_379);
 case "numeric":
-return dojo.lang.isNumeric(_37a);
+return dojo.lang.isNumeric(_379);
 case Boolean:
 case "boolean":
-return dojo.lang.isBoolean(_37a);
+return dojo.lang.isBoolean(_379);
 case Object:
 case "object":
-return dojo.lang.isObject(_37a);
+return dojo.lang.isObject(_379);
 case "pureobject":
-return dojo.lang.isPureObject(_37a);
+return dojo.lang.isPureObject(_379);
 case "builtin":
-return dojo.lang.isBuiltIn(_37a);
+return dojo.lang.isBuiltIn(_379);
 case "alien":
-return dojo.lang.isAlien(_37a);
+return dojo.lang.isAlien(_379);
 case "undefined":
-return dojo.lang.isUndefined(_37a);
+return dojo.lang.isUndefined(_379);
 case null:
 case "null":
-return (_37a===null);
+return (_379===null);
 case "optional":
 dojo.deprecated("dojo.lang.isOfType(value, [type, \"optional\"])","use dojo.lang.isOfType(value, type, {optional: true} ) instead","0.5");
-return ((_37a===null)||dojo.lang.isUndefined(_37a));
+return ((_379===null)||dojo.lang.isUndefined(_379));
 default:
 if(dojo.lang.isFunction(type)){
-return (_37a instanceof type);
+return (_379 instanceof type);
 }else{
 dojo.raise("dojo.lang.isOfType() was passed an invalid type");
 }
@@ -93547,70 +54992,70 @@
 dojo.raise("If we get here, it means a bug was introduced above.");
 };
 dojo.lang.getObject=function(str){
-var _382=str.split("."),i=0,obj=dj_global;
+var _381=str.split("."),i=0,obj=dj_global;
 do{
-obj=obj[_382[i++]];
-}while(i<_382.length&&obj);
+obj=obj[_381[i++]];
+}while(i<_381.length&&obj);
 return (obj!=dj_global)?obj:null;
 };
 dojo.lang.doesObjectExist=function(str){
-var _386=str.split("."),i=0,obj=dj_global;
+var _385=str.split("."),i=0,obj=dj_global;
 do{
-obj=obj[_386[i++]];
-}while(i<_386.length&&obj);
+obj=obj[_385[i++]];
+}while(i<_385.length&&obj);
 return (obj&&obj!=dj_global);
 };
 dojo.provide("dojo.lang.assert");
-dojo.lang.assert=function(_389,_38a){
-if(!_389){
-var _38b="An assert statement failed.\n"+"The method dojo.lang.assert() was called with a 'false' value.\n";
-if(_38a){
-_38b+="Here's the assert message:\n"+_38a+"\n";
+dojo.lang.assert=function(_388,_389){
+if(!_388){
+var _38a="An assert statement failed.\n"+"The method dojo.lang.assert() was called with a 'false' value.\n";
+if(_389){
+_38a+="Here's the assert message:\n"+_389+"\n";
 }
-throw new Error(_38b);
+throw new Error(_38a);
 }
 };
-dojo.lang.assertType=function(_38c,type,_38e){
-if(dojo.lang.isString(_38e)){
+dojo.lang.assertType=function(_38b,type,_38d){
+if(dojo.lang.isString(_38d)){
 dojo.deprecated("dojo.lang.assertType(value, type, \"message\")","use dojo.lang.assertType(value, type) instead","0.5");
 }
-if(!dojo.lang.isOfType(_38c,type,_38e)){
+if(!dojo.lang.isOfType(_38b,type,_38d)){
 if(!dojo.lang.assertType._errorMessage){
 dojo.lang.assertType._errorMessage="Type mismatch: dojo.lang.assertType() failed.";
 }
 dojo.lang.assert(false,dojo.lang.assertType._errorMessage);
 }
 };
-dojo.lang.assertValidKeywords=function(_38f,_390,_391){
+dojo.lang.assertValidKeywords=function(_38e,_38f,_390){
 var key;
-if(!_391){
+if(!_390){
 if(!dojo.lang.assertValidKeywords._errorMessage){
 dojo.lang.assertValidKeywords._errorMessage="In dojo.lang.assertValidKeywords(), found invalid keyword:";
 }
-_391=dojo.lang.assertValidKeywords._errorMessage;
+_390=dojo.lang.assertValidKeywords._errorMessage;
 }
-if(dojo.lang.isArray(_390)){
-for(key in _38f){
-if(!dojo.lang.inArray(_390,key)){
-dojo.lang.assert(false,_391+" "+key);
+if(dojo.lang.isArray(_38f)){
+for(key in _38e){
+if(!dojo.lang.inArray(_38f,key)){
+dojo.lang.assert(false,_390+" "+key);
 }
 }
 }else{
-for(key in _38f){
-if(!(key in _390)){
-dojo.lang.assert(false,_391+" "+key);
+for(key in _38e){
+if(!(key in _38f)){
+dojo.lang.assert(false,_390+" "+key);
 }
 }
 }
 };
 dojo.provide("dojo.AdapterRegistry");
-dojo.AdapterRegistry=function(_393){
+dojo.AdapterRegistry=function(_392){
 this.pairs=[];
-this.returnWrappers=_393||false;
+this.returnWrappers=_392||false;
 };
-dojo.lang.extend(dojo.AdapterRegistry,{register:function(name,_395,wrap,_397,_398){
-var type=(_398)?"unshift":"push";
-this.pairs[type]([name,_395,wrap,_397]);
+dojo.lang.extend(dojo.AdapterRegistry,{register:function(name,_394,wrap,_396,_397){
+var type=(_397)?"unshift":"push";
+this.pairs[type]([name,_394,wrap,_396]);
 },match:function(){
 for(var i=0;i<this.pairs.length;i++){
 var pair=this.pairs[i];
@@ -93635,8 +55080,8 @@
 }});
 dojo.provide("dojo.lang.repr");
 dojo.lang.reprRegistry=new dojo.AdapterRegistry();
-dojo.lang.registerRepr=function(name,_3a0,wrap,_3a2){
-dojo.lang.reprRegistry.register(name,_3a0,wrap,_3a2);
+dojo.lang.registerRepr=function(name,_39f,wrap,_3a1){
+dojo.lang.reprRegistry.register(name,_39f,wrap,_3a1);
 };
 dojo.lang.repr=function(obj){
 if(typeof (obj)=="undefined"){
@@ -93686,48 +55131,48 @@
 m.registerRepr("boolean",m.isBoolean,m.reprNumber);
 })();
 dojo.provide("dojo.lang.declare");
-dojo.lang.declare=function(_3a8,_3a9,init,_3ab){
-if((dojo.lang.isFunction(_3ab))||((!_3ab)&&(!dojo.lang.isFunction(init)))){
-var temp=_3ab;
-_3ab=init;
+dojo.lang.declare=function(_3a7,_3a8,init,_3aa){
+if((dojo.lang.isFunction(_3aa))||((!_3aa)&&(!dojo.lang.isFunction(init)))){
+var temp=_3aa;
+_3aa=init;
 init=temp;
 }
-var _3ad=[];
-if(dojo.lang.isArray(_3a9)){
-_3ad=_3a9;
-_3a9=_3ad.shift();
+var _3ac=[];
+if(dojo.lang.isArray(_3a8)){
+_3ac=_3a8;
+_3a8=_3ac.shift();
 }
 if(!init){
-init=dojo.evalObjPath(_3a8,false);
+init=dojo.evalObjPath(_3a7,false);
 if((init)&&(!dojo.lang.isFunction(init))){
 init=null;
 }
 }
 var ctor=dojo.lang.declare._makeConstructor();
-var scp=(_3a9?_3a9.prototype:null);
+var scp=(_3a8?_3a8.prototype:null);
 if(scp){
 scp.prototyping=true;
-ctor.prototype=new _3a9();
+ctor.prototype=new _3a8();
 scp.prototyping=false;
 }
 ctor.superclass=scp;
-ctor.mixins=_3ad;
-for(var i=0,l=_3ad.length;i<l;i++){
-dojo.lang.extend(ctor,_3ad[i].prototype);
+ctor.mixins=_3ac;
+for(var i=0,l=_3ac.length;i<l;i++){
+dojo.lang.extend(ctor,_3ac[i].prototype);
 }
 ctor.prototype.initializer=null;
-ctor.prototype.declaredClass=_3a8;
-if(dojo.lang.isArray(_3ab)){
-dojo.lang.extend.apply(dojo.lang,[ctor].concat(_3ab));
+ctor.prototype.declaredClass=_3a7;
+if(dojo.lang.isArray(_3aa)){
+dojo.lang.extend.apply(dojo.lang,[ctor].concat(_3aa));
 }else{
-dojo.lang.extend(ctor,(_3ab)||{});
+dojo.lang.extend(ctor,(_3aa)||{});
 }
 dojo.lang.extend(ctor,dojo.lang.declare._common);
 ctor.prototype.constructor=ctor;
 ctor.prototype.initializer=(ctor.prototype.initializer)||(init)||(function(){
 });
-var _3b2=dojo.parseObjPath(_3a8,null,true);
-_3b2.obj[_3b2.prop]=ctor;
+var _3b1=dojo.parseObjPath(_3a7,null,true);
+_3b1.obj[_3b1.prop]=ctor;
 return ctor;
 };
 dojo.lang.declare._makeConstructor=function(){
@@ -93752,19 +55197,19 @@
 };
 dojo.lang.declare._common={_getPropContext:function(){
 return (this.___proto||this);
-},_contextMethod:function(_3b8,_3b9,args){
-var _3bb,_3bc=this.___proto;
-this.___proto=_3b8;
+},_contextMethod:function(_3b7,_3b8,args){
+var _3ba,_3bb=this.___proto;
+this.___proto=_3b7;
 try{
-_3bb=_3b8[_3b9].apply(this,(args||[]));
+_3ba=_3b7[_3b8].apply(this,(args||[]));
 }
 catch(e){
 throw e;
 }
 finally{
-this.___proto=_3bc;
+this.___proto=_3bb;
 }
-return _3bb;
+return _3ba;
 },_inherited:function(prop,args){
 var p=this._getPropContext();
 do{
@@ -93779,6 +55224,7 @@
 this._inherited(prop,args);
 }};
 dojo.declare=dojo.lang.declare;
+dojo.kwCompoundRequire({common:["dojo.lang.common","dojo.lang.assert","dojo.lang.array","dojo.lang.type","dojo.lang.func","dojo.lang.extras","dojo.lang.repr","dojo.lang.declare"]});
 dojo.provide("dojo.lang.*");
 dojo.provide("dojo.storage");
 dojo.storage=new function(){
@@ -93787,7 +55233,7 @@
 dojo.unimplemented("dojo.storage.initialize");
 },isAvailable:function(){
 dojo.unimplemented("dojo.storage.isAvailable");
-},put:function(key,_3c3,_3c4){
+},put:function(key,_3c2,_3c3){
 dojo.unimplemented("dojo.storage.put");
 },get:function(key){
 dojo.unimplemented("dojo.storage.get");
@@ -93811,11 +55257,11 @@
 dojo.unimplemented("dojo.storage.hideSettingsUI");
 },getType:function(){
 dojo.unimplemented("dojo.storage.getType");
-},isValidKey:function(_3c8){
-if((_3c8==null)||(typeof _3c8=="undefined")){
+},isValidKey:function(_3c7){
+if((_3c7==null)||(typeof _3c7=="undefined")){
 return false;
 }
-return /^[0-9A-Za-z_]*$/.test(_3c8);
+return /^[0-9A-Za-z_]*$/.test(_3c7);
 }});
 dojo.storage.manager=new function(){
 this.currentProvider=null;
@@ -93826,37 +55272,37 @@
 this.initialize=function(){
 this.autodetect();
 };
-this.register=function(name,_3ca){
-this._providers[this._providers.length]=_3ca;
-this._providers[name]=_3ca;
+this.register=function(name,_3c9){
+this._providers[this._providers.length]=_3c9;
+this._providers[name]=_3c9;
 };
-this.setProvider=function(_3cb){
+this.setProvider=function(_3ca){
 };
 this.autodetect=function(){
 if(this._initialized==true){
 return;
 }
-var _3cc=null;
+var _3cb=null;
 for(var i=0;i<this._providers.length;i++){
-_3cc=this._providers[i];
-if(dojo.lang.isUndefined(djConfig["forceStorageProvider"])==false&&_3cc.getType()==djConfig["forceStorageProvider"]){
-_3cc.isAvailable();
+_3cb=this._providers[i];
+if(dojo.lang.isUndefined(djConfig["forceStorageProvider"])==false&&_3cb.getType()==djConfig["forceStorageProvider"]){
+_3cb.isAvailable();
 break;
 }else{
-if(dojo.lang.isUndefined(djConfig["forceStorageProvider"])==true&&_3cc.isAvailable()){
+if(dojo.lang.isUndefined(djConfig["forceStorageProvider"])==true&&_3cb.isAvailable()){
 break;
 }
 }
 }
-if(_3cc==null){
+if(_3cb==null){
 this._initialized=true;
 this.available=false;
 this.currentProvider=null;
 dojo.raise("No storage provider found for this platform");
 }
-this.currentProvider=_3cc;
-for(var i in _3cc){
-dojo.storage[i]=_3cc[i];
+this.currentProvider=_3cb;
+for(var i in _3cb){
+dojo.storage[i]=_3cb[i];
 }
 dojo.storage.manager=this;
 dojo.storage.initialize();
@@ -93873,14 +55319,14 @@
 return this._initialized;
 }
 };
-this.supportsProvider=function(_3ce){
+this.supportsProvider=function(_3cd){
 try{
-var _3cf=eval("new "+_3ce+"()");
-var _3d0=_3cf.isAvailable();
-if(_3d0==null||typeof _3d0=="undefined"){
+var _3ce=eval("new "+_3cd+"()");
+var _3cf=_3ce.isAvailable();
+if(_3cf==null||typeof _3cf=="undefined"){
 return false;
 }
-return _3d0;
+return _3cf;
 }
 catch(exception){
 return false;
@@ -93893,8 +55339,8 @@
 };
 };
 dojo.provide("dojo.json");
-dojo.json={jsonRegistry:new dojo.AdapterRegistry(),register:function(name,_3d2,wrap,_3d4){
-dojo.json.jsonRegistry.register(name,_3d2,wrap,_3d4);
+dojo.json={jsonRegistry:new dojo.AdapterRegistry(),register:function(name,_3d1,wrap,_3d3){
+dojo.json.jsonRegistry.register(name,_3d1,wrap,_3d3);
 },evalJson:function(json){
 try{
 return eval("("+json+")");
@@ -93904,11 +55350,11 @@
 return json;
 }
 },serialize:function(o){
-var _3d7=typeof (o);
-if(_3d7=="undefined"){
+var _3d6=typeof (o);
+if(_3d6=="undefined"){
 return "undefined";
 }else{
-if((_3d7=="number")||(_3d7=="boolean")){
+if((_3d6=="number")||(_3d6=="boolean")){
 return o+"";
 }else{
 if(o===null){
@@ -93916,24 +55362,24 @@
 }
 }
 }
-if(_3d7=="string"){
+if(_3d6=="string"){
 return dojo.string.escapeString(o);
 }
 var me=arguments.callee;
-var _3d9;
+var _3d8;
 if(typeof (o.__json__)=="function"){
-_3d9=o.__json__();
-if(o!==_3d9){
-return me(_3d9);
+_3d8=o.__json__();
+if(o!==_3d8){
+return me(_3d8);
 }
 }
 if(typeof (o.json)=="function"){
-_3d9=o.json();
-if(o!==_3d9){
-return me(_3d9);
+_3d8=o.json();
+if(o!==_3d8){
+return me(_3d8);
 }
 }
-if(_3d7!="function"&&typeof (o.length)=="number"){
+if(_3d6!="function"&&typeof (o.length)=="number"){
 var res=[];
 for(var i=0;i<o.length;i++){
 var val=me(o[i]);
@@ -93946,22 +55392,22 @@
 }
 try{
 window.o=o;
-_3d9=dojo.json.jsonRegistry.match(o);
-return me(_3d9);
+_3d8=dojo.json.jsonRegistry.match(o);
+return me(_3d8);
 }
 catch(e){
 }
-if(_3d7=="function"){
+if(_3d6=="function"){
 return null;
 }
 res=[];
 for(var k in o){
-var _3de;
+var _3dd;
 if(typeof (k)=="number"){
-_3de="\""+k+"\"";
+_3dd="\""+k+"\"";
 }else{
 if(typeof (k)=="string"){
-_3de=dojo.string.escapeString(k);
+_3dd=dojo.string.escapeString(k);
 }else{
 continue;
 }
@@ -93970,11 +55416,362 @@
 if(typeof (val)!="string"){
 continue;
 }
-res.push(_3de+":"+val);
+res.push(_3dd+":"+val);
 }
 return "{"+res.join(",")+"}";
 }};
 dojo.provide("dojo.storage.browser");
+dojo.storage.browser.FileStorageProvider=function(){
+};
+dojo.inherits(dojo.storage.browser.FileStorageProvider,dojo.storage);
+dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME="__dojoAllKeys";
+dojo.storage.browser.FileStorageProvider._APPLET_ID="__dojoFileJavaObj";
+dojo.lang.extend(dojo.storage.browser.FileStorageProvider,{namespace:"default",initialized:false,_available:null,_statusHandler:null,_keyIndex:new Array(),initialize:function(){
+if(djConfig["disableFileStorage"]==true){
+return;
+}
+this._loadKeyIndex();
+this.initialized=true;
+dojo.storage.manager.loaded();
+},isAvailable:function(){
+this._available=false;
+var _3de=window.location.protocol;
+if(_3de.indexOf("file")!=-1||_3de.indexOf("chrome")!=-1){
+this._available=this._isAvailableXPCOM();
+if(this._available==false){
+this._available=this._isAvailableActiveX();
+}
+}
+return this._available;
+},put:function(key,_3e0,_3e1){
+if(this.isValidKey(key)==false){
+dojo.raise("Invalid key given: "+key);
+}
+this._statusHandler=_3e1;
+try{
+this._save(key,_3e0);
+_3e1.call(null,dojo.storage.SUCCESS,key);
+}
+catch(e){
+this._statusHandler.call(null,dojo.storage.FAILED,key,e.toString());
+}
+},get:function(key){
+if(this.isValidKey(key)==false){
+dojo.raise("Invalid key given: "+key);
+}
+var _3e3=this._load(key);
+return _3e3;
+},getKeys:function(){
+return this._keyIndex;
+},hasKey:function(key){
+if(this.isValidKey(key)==false){
+dojo.raise("Invalid key given: "+key);
+}
+this._loadKeyIndex();
+var _3e5=false;
+for(var i=0;i<this._keyIndex.length;i++){
+if(this._keyIndex[i]==key){
+_3e5=true;
+}
+}
+return _3e5;
+},clear:function(){
+this._loadKeyIndex();
+var _3e7=new Array();
+for(var i=0;i<this._keyIndex.length;i++){
+_3e7[_3e7.length]=new String(this._keyIndex[i]);
+}
+for(var i=0;i<_3e7.length;i++){
+this.remove(_3e7[i]);
+}
+},remove:function(key){
+if(this.isValidKey(key)==false){
+dojo.raise("Invalid key given: "+key);
+}
+this._loadKeyIndex();
+for(var i=0;i<this._keyIndex.length;i++){
+if(this._keyIndex[i]==key){
+this._keyIndex.splice(i,1);
+break;
+}
+}
+this._save(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME,this._keyIndex,false);
+var _3eb=this._getPagePath()+key+".txt";
+if(this._isAvailableXPCOM()){
+this._removeXPCOM(_3eb);
+}else{
+if(this._isAvailableActiveX()){
+this._removeActiveX(_3eb);
+}
+}
+},isPermanent:function(){
+return true;
+},getMaximumSize:function(){
+return dojo.storage.SIZE_NO_LIMIT;
+},hasSettingsUI:function(){
+return false;
+},showSettingsUI:function(){
+dojo.raise(this.getType()+" does not support a storage settings user-interface");
+},hideSettingsUI:function(){
+dojo.raise(this.getType()+" does not support a storage settings user-interface");
+},getType:function(){
+return "dojo.storage.browser.FileStorageProvider";
+},_save:function(key,_3ed,_3ee){
+if(typeof _3ee=="undefined"){
+_3ee=true;
+}
+if(dojo.lang.isString(_3ed)==false){
+_3ed=dojo.json.serialize(_3ed);
+_3ed="/* JavaScript */\n"+_3ed+"\n\n";
+}
+var _3ef=this._getPagePath()+key+".txt";
+if(this._isAvailableXPCOM()){
+this._saveFileXPCOM(_3ef,_3ed);
+}else{
+if(this._isAvailableActiveX()){
+this._saveFileActiveX(_3ef,_3ed);
+}
+}
+if(_3ee){
+this._updateKeyIndex(key);
+}
+},_load:function(key){
+var _3f1=this._getPagePath()+key+".txt";
+var _3f2=null;
+if(this._isAvailableXPCOM()){
+_3f2=this._loadFileXPCOM(_3f1);
+}else{
+if(this._isAvailableActiveX()){
+_3f2=this._loadFileActiveX(_3f1);
+}else{
+if(this._isAvailableJava()){
+_3f2=this._loadFileJava(_3f1);
+}
+}
+}
+if(_3f2==null){
+return null;
+}
+if(!dojo.lang.isUndefined(_3f2)&&_3f2!=null&&/^\/\* JavaScript \*\//.test(_3f2)){
+_3f2=dojo.json.evalJson(_3f2);
+}
+return _3f2;
+},_updateKeyIndex:function(key){
+this._loadKeyIndex();
+var _3f4=false;
+for(var i=0;i<this._keyIndex.length;i++){
+if(this._keyIndex[i]==key){
+_3f4=true;
+break;
+}
+}
+if(_3f4==false){
+this._keyIndex[this._keyIndex.length]=key;
+}
+this._save(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME,this._keyIndex,false);
+},_loadKeyIndex:function(){
+var _3f6=this._load(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME);
+if(_3f6==null){
+this._keyIndex=new Array();
+}else{
+this._keyIndex=_3f6;
+}
+},_saveFileXPCOM:function(_3f7,_3f8){
+try{
+netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+var f=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+f.initWithPath(_3f7);
+var _3fa=Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
+_3fa.init(f,32|4|8,256+128,null);
+_3fa.write(_3f8,_3f8.length);
+_3fa.close();
+}
+catch(e){
+var msg=e.toString();
+if(e.name&&e.message){
+msg=e.name+": "+e.message;
+}
+dojo.raise("dojo.storage.browser.FileStorageProvider._saveFileXPCOM(): "+msg);
+}
+},_loadFileXPCOM:function(_3fc){
+try{
+netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+var f=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+f.initWithPath(_3fc);
+if(f.exists()==false){
+return null;
+}
+var inp=Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
+inp.init(f,1,4,null);
+var _3ff=Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
+_3ff.init(inp);
+var _400=_3ff.read(_3ff.available());
+return _400;
+}
+catch(e){
+var msg=e.toString();
+if(e.name&&e.message){
+msg=e.name+": "+e.message;
+}
+dojo.raise("dojo.storage.browser.FileStorageProvider._loadFileXPCOM(): "+msg);
+}
+return null;
+},_saveFileActiveX:function(_402,_403){
+try{
+var _404=new ActiveXObject("Scripting.FileSystemObject");
+var f=_404.OpenTextFile(_402,2,true);
+f.Write(_403);
+f.Close();
+}
+catch(e){
+var msg=e.toString();
+if(e.name&&e.message){
+msg=e.name+": "+e.message;
+}
+dojo.raise("dojo.storage.browser.FileStorageProvider._saveFileActiveX(): "+msg);
+}
+},_loadFileActiveX:function(_407){
+try{
+var _408=new ActiveXObject("Scripting.FileSystemObject");
+if(_408.FileExists(_407)==false){
+return null;
+}
+var f=_408.OpenTextFile(_407,1);
+var _40a=f.ReadAll();
+f.Close();
+return _40a;
+}
+catch(e){
+var msg=e.toString();
+if(e.name&&e.message){
+msg=e.name+": "+e.message;
+}
+dojo.raise("dojo.storage.browser.FileStorageProvider._loadFileActiveX(): "+msg);
+}
+},_saveFileJava:function(_40c,_40d){
+try{
+var _40e=dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID);
+_40e.save(_40c,_40d);
+}
+catch(e){
+var msg=e.toString();
+if(e.name&&e.message){
+msg=e.name+": "+e.message;
+}
+dojo.raise("dojo.storage.browser.FileStorageProvider._saveFileJava(): "+msg);
+}
+},_loadFileJava:function(_410){
+try{
+var _411=dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID);
+var _412=_411.load(_410);
+return _412;
+}
+catch(e){
+var msg=e.toString();
+if(e.name&&e.message){
+msg=e.name+": "+e.message;
+}
+dojo.raise("dojo.storage.browser.FileStorageProvider._loadFileJava(): "+msg);
+}
+},_isAvailableActiveX:function(){
+try{
+if(window.ActiveXObject){
+var _414=new window.ActiveXObject("Scripting.FileSystemObject");
+return true;
+}
+}
+catch(e){
+dojo.debug(e);
+}
+return false;
+},_isAvailableXPCOM:function(){
+try{
+if(window.Components){
+netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+return true;
+}
+}
+catch(e){
+dojo.debug(e);
+}
+return false;
+},_isAvailableJava:function(){
+try{
+if(dojo.render.html.safari==true||dojo.render.html.opera==true()){
+if(navigator.javaEnabled()==true){
+return true;
+}
+}
+}
+catch(e){
+dojo.debug(e);
+}
+return false;
+},_getPagePath:function(){
+var path=window.location.pathname;
+if(/\.html?$/i.test(path)){
+path=path.replace(/(?:\/|\\)?[^\.\/\\]*\.html?$/,"");
+}
+if(/^\/?[a-z]+\:/i.test(path)){
+path=path.replace(/^\/?/,"");
+path=path.replace(/\//g,"\\");
+}else{
+if(/^[\/\\]{2,3}[^\/]/.test(path)){
+path=path.replace(/^[\/\\]{2,3}/,"");
+path=path.replace(/\//g,"\\");
+path="\\\\"+path;
+}
+}
+if(/\/$/.test(path)==false&&/\\$/.test(path)==false){
+if(/\//.test(path)){
+path+="/";
+}else{
+path+="\\";
+}
+}
+path=unescape(path);
+return path;
+},_removeXPCOM:function(_416){
+try{
+netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+var f=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+f.initWithPath(_416);
+if(f.exists()==false||f.isDirectory()){
+return;
+}
+if(f.isFile()){
+f.remove(false);
+}
+}
+catch(e){
+dojo.raise("dojo.storage.browser.FileStorageProvider.remove(): "+e.toString());
+}
+},_removeActiveX:function(_418){
+try{
+var _419=new ActiveXObject("Scripting.FileSystemObject");
+_419.DeleteFile(_418);
+}
+catch(e){
+dojo.raise("dojo.storage.browser.FileStorageProvider.remove(): "+e.toString());
+}
+},_removeJava:function(_41a){
+try{
+var _41b=dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID);
+_41b.remove(_41a);
+}
+catch(e){
+var msg=e.toString();
+if(e.name&&e.message){
+msg=e.name+": "+e.message;
+}
+dojo.raise("dojo.storage.browser.FileStorageProvider._removeJava(): "+msg);
+}
+},_writeApplet:function(){
+var _41d=dojo.uri.moduleUri("dojo","../DojoFileStorageProvider.jar").toString();
+var tag="<applet "+"id='"+dojo.storage.browser.FileStorageProvider._APPLET_ID+"' "+"style='position: absolute; top: -500px; left: -500px; width: 1px; height: 1px;' "+"code='DojoFileStorageProvider.class' "+"archive='"+_41d+"' "+"width='1' "+"height='1' "+">"+"</applet>";
+document.writeln(tag);
+}});
 dojo.storage.browser.WhatWGStorageProvider=function(){
 };
 dojo.inherits(dojo.storage.browser.WhatWGStorageProvider,dojo.storage);
@@ -93987,7 +55784,7 @@
 dojo.storage.manager.loaded();
 },isAvailable:function(){
 try{
-var _3df=globalStorage[location.hostname];
+var _41f=globalStorage[location.hostname];
 }
 catch(e){
 this._available=false;
@@ -93995,22 +55792,22 @@
 }
 this._available=true;
 return this._available;
-},put:function(key,_3e1,_3e2){
+},put:function(key,_421,_422){
 if(this.isValidKey(key)==false){
 dojo.raise("Invalid key given: "+key);
 }
-this._statusHandler=_3e2;
-if(dojo.lang.isString(_3e1)){
-_3e1="string:"+_3e1;
+this._statusHandler=_422;
+if(dojo.lang.isString(_421)){
+_421="string:"+_421;
 }else{
-_3e1=dojo.json.serialize(_3e1);
+_421=dojo.json.serialize(_421);
 }
 window.addEventListener("storage",function(evt){
-_3e2.call(null,dojo.storage.SUCCESS,key);
+_422.call(null,dojo.storage.SUCCESS,key);
 },false);
 try{
-var _3e4=globalStorage[this._domain];
-_3e4.setItem(key,_3e1);
+var _424=globalStorage[this._domain];
+_424.setItem(key,_421);
 }
 catch(e){
 this._statusHandler.call(null,dojo.storage.FAILED,key,e.toString());
@@ -94019,37 +55816,37 @@
 if(this.isValidKey(key)==false){
 dojo.raise("Invalid key given: "+key);
 }
-var _3e6=globalStorage[this._domain];
-var _3e7=_3e6.getItem(key);
-if(_3e7==null){
+var _426=globalStorage[this._domain];
+var _427=_426.getItem(key);
+if(_427==null){
 return null;
 }
-_3e7=_3e7.value;
-if(!dojo.lang.isUndefined(_3e7)&&_3e7!=null&&/^string:/.test(_3e7)){
-_3e7=_3e7.substring("string:".length);
+_427=_427.value;
+if(!dojo.lang.isUndefined(_427)&&_427!=null&&/^string:/.test(_427)){
+_427=_427.substring("string:".length);
 }else{
-_3e7=dojo.json.evalJson(_3e7);
+_427=dojo.json.evalJson(_427);
 }
-return _3e7;
+return _427;
 },getKeys:function(){
-var _3e8=globalStorage[this._domain];
-var _3e9=new Array();
-for(i=0;i<_3e8.length;i++){
-_3e9[i]=_3e8.key(i);
+var _428=globalStorage[this._domain];
+var _429=new Array();
+for(i=0;i<_428.length;i++){
+_429[i]=_428.key(i);
 }
-return _3e9;
+return _429;
 },clear:function(){
-var _3ea=globalStorage[this._domain];
+var _42a=globalStorage[this._domain];
 var keys=new Array();
-for(var i=0;i<_3ea.length;i++){
-keys[keys.length]=_3ea.key(i);
+for(var i=0;i<_42a.length;i++){
+keys[keys.length]=_42a.key(i);
 }
 for(var i=0;i<keys.length;i++){
-_3ea.removeItem(keys[i]);
+_42a.removeItem(keys[i]);
 }
 },remove:function(key){
-var _3ee=globalStorage[this._domain];
-_3ee.removeItem(key);
+var _42e=globalStorage[this._domain];
+_42e.removeItem(key);
 },isPermanent:function(){
 return true;
 },getMaximumSize:function(){
@@ -94061,7 +55858,7 @@
 },hideSettingsUI:function(){
 dojo.raise(this.getType()+" does not support a storage settings user-interface");
 },getType:function(){
-return "dojo.storage.browser.WhatWGStorageProvider";
+return "dojo.storage.browser.WhatWGProvider";
 }});
 dojo.storage.browser.FlashStorageProvider=function(){
 };
@@ -94070,13 +55867,13 @@
 if(djConfig["disableFlashStorage"]==true){
 return;
 }
-var _3ef=function(){
+var _42f=function(){
 dojo.storage._flashLoaded();
 };
-dojo.flash.addLoadedListener(_3ef);
-var _3f0=dojo.uri.dojoUri("Storage_version6.swf").toString();
-var _3f1=dojo.uri.dojoUri("Storage_version8.swf").toString();
-dojo.flash.setSwf({flash6:_3f0,flash8:_3f1,visible:false});
+dojo.flash.addLoadedListener(_42f);
+var _430=dojo.uri.moduleUri("dojo","../Storage_version6.swf").toString();
+var _431=dojo.uri.moduleUri("dojo","../Storage_version8.swf").toString();
+dojo.flash.setSwf({flash6:_430,flash8:_431,visible:false});
 },isAvailable:function(){
 if(djConfig["disableFlashStorage"]==true){
 this._available=false;
@@ -94084,37 +55881,37 @@
 this._available=true;
 }
 return this._available;
-},put:function(key,_3f3,_3f4){
+},put:function(key,_433,_434){
 if(this.isValidKey(key)==false){
 dojo.raise("Invalid key given: "+key);
 }
-this._statusHandler=_3f4;
-if(dojo.lang.isString(_3f3)){
-_3f3="string:"+_3f3;
+this._statusHandler=_434;
+if(dojo.lang.isString(_433)){
+_433="string:"+_433;
 }else{
-_3f3=dojo.json.serialize(_3f3);
+_433=dojo.json.serialize(_433);
 }
-dojo.flash.comm.put(key,_3f3,this.namespace);
+dojo.flash.comm.put(key,_433,this.namespace);
 },get:function(key){
 if(this.isValidKey(key)==false){
 dojo.raise("Invalid key given: "+key);
 }
-var _3f6=dojo.flash.comm.get(key,this.namespace);
-if(_3f6==""){
+var _436=dojo.flash.comm.get(key,this.namespace);
+if(_436==""){
 return null;
 }
-if(!dojo.lang.isUndefined(_3f6)&&_3f6!=null&&/^string:/.test(_3f6)){
-_3f6=_3f6.substring("string:".length);
+if(!dojo.lang.isUndefined(_436)&&_436!=null&&/^string:/.test(_436)){
+_436=_436.substring("string:".length);
 }else{
-_3f6=dojo.json.evalJson(_3f6);
+_436=dojo.json.evalJson(_436);
 }
-return _3f6;
+return _436;
 },getKeys:function(){
-var _3f7=dojo.flash.comm.getKeys(this.namespace);
-if(_3f7==""){
+var _437=dojo.flash.comm.getKeys(this.namespace);
+if(_437==""){
 return [];
 }
-return _3f7.split(",");
+return _437.split(",");
 },clear:function(){
 dojo.flash.comm.clear(this.namespace);
 },remove:function(key){
@@ -94139,65 +55936,62 @@
 },_flashLoaded:function(){
 this._initialized=true;
 dojo.storage.manager.loaded();
-},_onStatus:function(_3f9,key){
+},_onStatus:function(_439,key){
 var ds=dojo.storage;
 var dfo=dojo.flash.obj;
-if(_3f9==ds.PENDING){
+if(_439==ds.PENDING){
 dfo.center();
 dfo.setVisible(true);
 }else{
 dfo.setVisible(false);
 }
 if((!dj_undef("_statusHandler",ds))&&(ds._statusHandler!=null)){
-ds._statusHandler.call(null,_3f9,key);
+ds._statusHandler.call(null,_439,key);
 }
 }});
+dojo.storage.manager.register("dojo.storage.browser.FileStorageProvider",new dojo.storage.browser.FileStorageProvider());
 dojo.storage.manager.register("dojo.storage.browser.WhatWGStorageProvider",new dojo.storage.browser.WhatWGStorageProvider());
 dojo.storage.manager.register("dojo.storage.browser.FlashStorageProvider",new dojo.storage.browser.FlashStorageProvider());
 dojo.storage.manager.initialize();
+dojo.kwCompoundRequire({common:["dojo.storage"],browser:["dojo.storage.browser"]});
 dojo.provide("dojo.storage.*");
 
 
 __CPAN_EDITION__ storage build.txt
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/lang/common.js,
-../src/lang/array.js,
-../src/lang/extras.js,
-../src/lang/func.js,
-../src/event/common.js,
-../src/event/topic.js,
-../src/event/browser.js,
-../src/event/__package__.js,
-../src/string/common.js,
-../src/string.js,
-../src/string/extras.js,
-../src/string/Builder.js,
-../src/string/__package__.js,
-../src/uri/Uri.js,
-../src/uri/__package__.js,
-../src/dom.js,
-../src/html/common.js,
-../src/flash.js,
-../src/lang/type.js,
-../src/lang/assert.js,
-../src/AdapterRegistry.js,
-../src/lang/repr.js,
-../src/lang/declare.js,
-../src/lang/__package__.js,
-../src/storage.js,
-../src/json.js,
-../src/storage/browser.js,
+Files baked into this build:
+dojoGuardStart.js
+../src/bootstrap1.js
+../src/loader.js
+dojoGuardEnd.js
+../src/hostenv_browser.js
+../src/lang/common.js
+../src/lang/array.js
+../src/lang/extras.js
+../src/lang/func.js
+../src/event/common.js
+../src/event/topic.js
+../src/event/browser.js
+../src/event/__package__.js
+../src/string/common.js
+../src/string.js
+../src/string/extras.js
+../src/string/Builder.js
+../src/string/__package__.js
+../src/uri/Uri.js
+../src/uri/__package__.js
+../src/dom.js
+../src/html/common.js
+../src/flash.js
+../src/lang/type.js
+../src/lang/assert.js
+../src/AdapterRegistry.js
+../src/lang/repr.js
+../src/lang/declare.js
+../src/lang/__package__.js
+../src/storage.js
+../src/json.js
+../src/storage/browser.js
 ../src/storage/__package__.js
-
-		
 __CPAN_EDITION__ widget dojo.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -94234,7 +56028,7 @@
 return dj_currentContext;
 };
 dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
+dojo.version={major:0,minor:4,patch:2,flag:"",revision:Number("$Rev: 7616 $".match(/[0-9]+/)[0]),toString:function(){
 with(dojo.version){
 return major+"."+minor+"."+patch+flag+" ("+revision+")";
 }
@@ -94490,7 +56284,7 @@
 }
 };
 dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
+if(typeof setTimeout=="object"||(djConfig["useXDomain"]&&dojo.render.html.opera)){
 setTimeout("dojo.hostenv.loaded();",0);
 }else{
 dojo.hostenv.loaded();
@@ -94638,6 +56432,11 @@
 dojo.registerModulePath=function(_66,_67){
 return dojo.hostenv.setModulePrefix(_66,_67);
 };
+if(djConfig["modulePaths"]){
+for(var param in djConfig["modulePaths"]){
+dojo.registerModulePath(param,djConfig["modulePaths"][param]);
+}
+}
 dojo.setModulePrefix=function(_68,_69){
 dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
 return dojo.registerModulePath(_68,_69);
@@ -95048,7 +56847,7 @@
 }
 }
 if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
+if(dojo.render.html.opera||(dojo.render.html.moz&&(djConfig["enableMozDomContentLoaded"]===true))){
 document.addEventListener("DOMContentLoaded",dj_load_init,null);
 }
 window.addEventListener("load",dj_load_init,null);
@@ -95196,51 +56995,9 @@
 return _ec;
 };
 }
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _ee=false;
-var _ef=false;
-var _f0=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_ee=true;
-}else{
-if(typeof this["load"]=="function"){
-_ef=true;
-}else{
-if(window.widget){
-_f0=true;
-}
-}
-}
-var _f1=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-_f1.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_ee)&&(!_f0)){
-_f1.push("browser_debug.js");
-}
-var _f2=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_f2=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<_f1.length;x++){
-var _f4=_f2+"src/"+_f1[x];
-if(_ee||_ef){
-load(_f4);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_f4+"'></scr"+"ipt>");
-}
-catch(e){
-var _f5=document.createElement("script");
-_f5.src=_f4;
-document.getElementsByTagName("head")[0].appendChild(_f5);
-}
-}
-}
-})();
+dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&!djConfig["useXDomain"],"dojo.browser_debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&djConfig["useXDomain"],"dojo.browser_debug_xd");
 dojo.provide("dojo.dom");
 dojo.dom.ELEMENT_NODE=1;
 dojo.dom.ATTRIBUTE_NODE=2;
@@ -95268,102 +57025,102 @@
 }
 };
 dojo.dom.getUniqueId=function(){
-var _f7=dojo.doc();
+var _ef=dojo.doc();
 do{
 var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_f7.getElementById(id));
+}while(_ef.getElementById(id));
 return id;
 };
 dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_f9,_fa){
-var _fb=_f9.firstChild;
-while(_fb&&_fb.nodeType!=dojo.dom.ELEMENT_NODE){
-_fb=_fb.nextSibling;
+dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_f1,_f2){
+var _f3=_f1.firstChild;
+while(_f3&&_f3.nodeType!=dojo.dom.ELEMENT_NODE){
+_f3=_f3.nextSibling;
 }
-if(_fa&&_fb&&_fb.tagName&&_fb.tagName.toLowerCase()!=_fa.toLowerCase()){
-_fb=dojo.dom.nextElement(_fb,_fa);
+if(_f2&&_f3&&_f3.tagName&&_f3.tagName.toLowerCase()!=_f2.toLowerCase()){
+_f3=dojo.dom.nextElement(_f3,_f2);
 }
-return _fb;
+return _f3;
 };
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_fc,_fd){
-var _fe=_fc.lastChild;
-while(_fe&&_fe.nodeType!=dojo.dom.ELEMENT_NODE){
-_fe=_fe.previousSibling;
+dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_f4,_f5){
+var _f6=_f4.lastChild;
+while(_f6&&_f6.nodeType!=dojo.dom.ELEMENT_NODE){
+_f6=_f6.previousSibling;
 }
-if(_fd&&_fe&&_fe.tagName&&_fe.tagName.toLowerCase()!=_fd.toLowerCase()){
-_fe=dojo.dom.prevElement(_fe,_fd);
+if(_f5&&_f6&&_f6.tagName&&_f6.tagName.toLowerCase()!=_f5.toLowerCase()){
+_f6=dojo.dom.prevElement(_f6,_f5);
 }
-return _fe;
+return _f6;
 };
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(_ff,_100){
-if(!_ff){
+dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(_f7,_f8){
+if(!_f7){
 return null;
 }
 do{
-_ff=_ff.nextSibling;
-}while(_ff&&_ff.nodeType!=dojo.dom.ELEMENT_NODE);
-if(_ff&&_100&&_100.toLowerCase()!=_ff.tagName.toLowerCase()){
-return dojo.dom.nextElement(_ff,_100);
+_f7=_f7.nextSibling;
+}while(_f7&&_f7.nodeType!=dojo.dom.ELEMENT_NODE);
+if(_f7&&_f8&&_f8.toLowerCase()!=_f7.tagName.toLowerCase()){
+return dojo.dom.nextElement(_f7,_f8);
 }
-return _ff;
+return _f7;
 };
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_102){
-if(!node){
+dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(_f9,_fa){
+if(!_f9){
 return null;
 }
-if(_102){
-_102=_102.toLowerCase();
+if(_fa){
+_fa=_fa.toLowerCase();
 }
 do{
-node=node.previousSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_102&&_102.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_102);
+_f9=_f9.previousSibling;
+}while(_f9&&_f9.nodeType!=dojo.dom.ELEMENT_NODE);
+if(_f9&&_fa&&_fa.toLowerCase()!=_f9.tagName.toLowerCase()){
+return dojo.dom.prevElement(_f9,_fa);
 }
-return node;
+return _f9;
 };
-dojo.dom.moveChildren=function(_103,_104,trim){
-var _106=0;
-if(trim){
-while(_103.hasChildNodes()&&_103.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_103.removeChild(_103.firstChild);
+dojo.dom.moveChildren=function(_fb,_fc,_fd){
+var _fe=0;
+if(_fd){
+while(_fb.hasChildNodes()&&_fb.firstChild.nodeType==dojo.dom.TEXT_NODE){
+_fb.removeChild(_fb.firstChild);
 }
-while(_103.hasChildNodes()&&_103.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_103.removeChild(_103.lastChild);
+while(_fb.hasChildNodes()&&_fb.lastChild.nodeType==dojo.dom.TEXT_NODE){
+_fb.removeChild(_fb.lastChild);
 }
 }
-while(_103.hasChildNodes()){
-_104.appendChild(_103.firstChild);
-_106++;
+while(_fb.hasChildNodes()){
+_fc.appendChild(_fb.firstChild);
+_fe++;
 }
-return _106;
+return _fe;
 };
-dojo.dom.copyChildren=function(_107,_108,trim){
-var _10a=_107.cloneNode(true);
-return this.moveChildren(_10a,_108,trim);
+dojo.dom.copyChildren=function(_ff,_100,trim){
+var _102=_ff.cloneNode(true);
+return this.moveChildren(_102,_100,trim);
 };
-dojo.dom.replaceChildren=function(node,_10c){
-var _10d=[];
+dojo.dom.replaceChildren=function(node,_104){
+var _105=[];
 if(dojo.render.html.ie){
 for(var i=0;i<node.childNodes.length;i++){
-_10d.push(node.childNodes[i]);
+_105.push(node.childNodes[i]);
 }
 }
 dojo.dom.removeChildren(node);
-node.appendChild(_10c);
-for(var i=0;i<_10d.length;i++){
-dojo.dom.destroyNode(_10d[i]);
+node.appendChild(_104);
+for(var i=0;i<_105.length;i++){
+dojo.dom.destroyNode(_105[i]);
 }
 };
 dojo.dom.removeChildren=function(node){
-var _110=node.childNodes.length;
+var _108=node.childNodes.length;
 while(node.hasChildNodes()){
 dojo.dom.removeNode(node.firstChild);
 }
-return _110;
+return _108;
 };
-dojo.dom.replaceNode=function(node,_112){
-return node.parentNode.replaceChild(_112,node);
+dojo.dom.replaceNode=function(node,_10a){
+return node.parentNode.replaceChild(_10a,node);
 };
 dojo.dom.destroyNode=function(node){
 if(node.parentNode){
@@ -95383,38 +57140,38 @@
 return node.parentNode.removeChild(node);
 }
 };
-dojo.dom.getAncestors=function(node,_116,_117){
-var _118=[];
-var _119=(_116&&(_116 instanceof Function||typeof _116=="function"));
+dojo.dom.getAncestors=function(node,_10e,_10f){
+var _110=[];
+var _111=(_10e&&(_10e instanceof Function||typeof _10e=="function"));
 while(node){
-if(!_119||_116(node)){
-_118.push(node);
+if(!_111||_10e(node)){
+_110.push(node);
 }
-if(_117&&_118.length>0){
-return _118[0];
+if(_10f&&_110.length>0){
+return _110[0];
 }
 node=node.parentNode;
 }
-if(_117){
+if(_10f){
 return null;
 }
-return _118;
+return _110;
 };
-dojo.dom.getAncestorsByTag=function(node,tag,_11c){
+dojo.dom.getAncestorsByTag=function(node,tag,_114){
 tag=tag.toLowerCase();
 return dojo.dom.getAncestors(node,function(el){
 return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_11c);
+},_114);
 };
 dojo.dom.getFirstAncestorByTag=function(node,tag){
 return dojo.dom.getAncestorsByTag(node,tag,true);
 };
-dojo.dom.isDescendantOf=function(node,_121,_122){
-if(_122&&node){
+dojo.dom.isDescendantOf=function(node,_119,_11a){
+if(_11a&&node){
 node=node.parentNode;
 }
 while(node){
-if(node==_121){
+if(node==_119){
 return true;
 }
 node=node.parentNode;
@@ -95436,12 +57193,12 @@
 };
 dojo.dom.createDocument=function(){
 var doc=null;
-var _125=dojo.doc();
+var _11d=dojo.doc();
 if(!dj_undef("ActiveXObject")){
-var _126=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_126.length;i++){
+var _11e=["MSXML2","Microsoft","MSXML","MSXML3"];
+for(var i=0;i<_11e.length;i++){
 try{
-doc=new ActiveXObject(_126[i]+".XMLDOM");
+doc=new ActiveXObject(_11e[i]+".XMLDOM");
 }
 catch(e){
 }
@@ -95450,40 +57207,40 @@
 }
 }
 }else{
-if((_125.implementation)&&(_125.implementation.createDocument)){
-doc=_125.implementation.createDocument("","",null);
+if((_11d.implementation)&&(_11d.implementation.createDocument)){
+doc=_11d.implementation.createDocument("","",null);
 }
 }
 return doc;
 };
-dojo.dom.createDocumentFromText=function(str,_129){
-if(!_129){
-_129="text/xml";
+dojo.dom.createDocumentFromText=function(str,_121){
+if(!_121){
+_121="text/xml";
 }
 if(!dj_undef("DOMParser")){
-var _12a=new DOMParser();
-return _12a.parseFromString(str,_129);
+var _122=new DOMParser();
+return _122.parseFromString(str,_121);
 }else{
 if(!dj_undef("ActiveXObject")){
-var _12b=dojo.dom.createDocument();
-if(_12b){
-_12b.async=false;
-_12b.loadXML(str);
-return _12b;
+var _123=dojo.dom.createDocument();
+if(_123){
+_123.async=false;
+_123.loadXML(str);
+return _123;
 }else{
 dojo.debug("toXml didn't work?");
 }
 }else{
-var _12c=dojo.doc();
-if(_12c.createElement){
-var tmp=_12c.createElement("xml");
+var _124=dojo.doc();
+if(_124.createElement){
+var tmp=_124.createElement("xml");
 tmp.innerHTML=str;
-if(_12c.implementation&&_12c.implementation.createDocument){
-var _12e=_12c.implementation.createDocument("foo","",null);
+if(_124.implementation&&_124.implementation.createDocument){
+var _126=_124.implementation.createDocument("foo","",null);
 for(var i=0;i<tmp.childNodes.length;i++){
-_12e.importNode(tmp.childNodes.item(i),true);
+_126.importNode(tmp.childNodes.item(i),true);
 }
-return _12e;
+return _126;
 }
 return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
 }
@@ -95491,39 +57248,39 @@
 }
 return null;
 };
-dojo.dom.prependChild=function(node,_131){
-if(_131.firstChild){
-_131.insertBefore(node,_131.firstChild);
+dojo.dom.prependChild=function(node,_129){
+if(_129.firstChild){
+_129.insertBefore(node,_129.firstChild);
 }else{
-_131.appendChild(node);
+_129.appendChild(node);
 }
 return true;
 };
-dojo.dom.insertBefore=function(node,ref,_134){
-if((_134!=true)&&(node===ref||node.nextSibling===ref)){
+dojo.dom.insertBefore=function(node,ref,_12c){
+if((_12c!=true)&&(node===ref||node.nextSibling===ref)){
 return false;
 }
-var _135=ref.parentNode;
-_135.insertBefore(node,ref);
+var _12d=ref.parentNode;
+_12d.insertBefore(node,ref);
 return true;
 };
-dojo.dom.insertAfter=function(node,ref,_138){
+dojo.dom.insertAfter=function(node,ref,_130){
 var pn=ref.parentNode;
 if(ref==pn.lastChild){
-if((_138!=true)&&(node===ref)){
+if((_130!=true)&&(node===ref)){
 return false;
 }
 pn.appendChild(node);
 }else{
-return this.insertBefore(node,ref.nextSibling,_138);
+return this.insertBefore(node,ref.nextSibling,_130);
 }
 return true;
 };
-dojo.dom.insertAtPosition=function(node,ref,_13c){
-if((!node)||(!ref)||(!_13c)){
+dojo.dom.insertAtPosition=function(node,ref,_134){
+if((!node)||(!ref)||(!_134)){
 return false;
 }
-switch(_13c.toLowerCase()){
+switch(_134.toLowerCase()){
 case "before":
 return dojo.dom.insertBefore(node,ref);
 case "after":
@@ -95541,46 +57298,46 @@
 return true;
 }
 };
-dojo.dom.insertAtIndex=function(node,_13e,_13f){
-var _140=_13e.childNodes;
-if(!_140.length||_140.length==_13f){
-_13e.appendChild(node);
+dojo.dom.insertAtIndex=function(node,_136,_137){
+var _138=_136.childNodes;
+if(!_138.length||_138.length==_137){
+_136.appendChild(node);
 return true;
 }
-if(_13f==0){
-return dojo.dom.prependChild(node,_13e);
+if(_137==0){
+return dojo.dom.prependChild(node,_136);
 }
-return dojo.dom.insertAfter(node,_140[_13f-1]);
+return dojo.dom.insertAfter(node,_138[_137-1]);
 };
 dojo.dom.textContent=function(node,text){
 if(arguments.length>1){
-var _143=dojo.doc();
-dojo.dom.replaceChildren(node,_143.createTextNode(text));
+var _13b=dojo.doc();
+dojo.dom.replaceChildren(node,_13b.createTextNode(text));
 return text;
 }else{
 if(node.textContent!=undefined){
 return node.textContent;
 }
-var _144="";
+var _13c="";
 if(node==null){
-return _144;
+return _13c;
 }
 for(var i=0;i<node.childNodes.length;i++){
 switch(node.childNodes[i].nodeType){
 case 1:
 case 5:
-_144+=dojo.dom.textContent(node.childNodes[i]);
+_13c+=dojo.dom.textContent(node.childNodes[i]);
 break;
 case 3:
 case 2:
 case 4:
-_144+=node.childNodes[i].nodeValue;
+_13c+=node.childNodes[i].nodeValue;
 break;
 default:
 break;
 }
 }
-return _144;
+return _13c;
 }
 };
 dojo.dom.hasParent=function(node){
@@ -95596,17 +57353,17 @@
 }
 return "";
 };
-dojo.dom.setAttributeNS=function(elem,_14a,_14b,_14c){
+dojo.dom.setAttributeNS=function(elem,_142,_143,_144){
 if(elem==null||((elem==undefined)&&(typeof elem=="undefined"))){
 dojo.raise("No element given to dojo.dom.setAttributeNS");
 }
 if(!((elem.setAttributeNS==undefined)&&(typeof elem.setAttributeNS=="undefined"))){
-elem.setAttributeNS(_14a,_14b,_14c);
+elem.setAttributeNS(_142,_143,_144);
 }else{
-var _14d=elem.ownerDocument;
-var _14e=_14d.createNode(2,_14b,_14a);
-_14e.nodeValue=_14c;
-elem.setAttributeNode(_14e);
+var _145=elem.ownerDocument;
+var _146=_145.createNode(2,_143,_142);
+_146.nodeValue=_144;
+elem.setAttributeNode(_146);
 }
 };
 dojo.provide("dojo.xml.Parse");
@@ -95621,25 +57378,25 @@
 }
 }
 function getDojoTagName(node){
-var _152=getTagName(node);
-if(!_152){
+var _14a=getTagName(node);
+if(!_14a){
 return "";
 }
-if((dojo.widget)&&(dojo.widget.tags[_152])){
-return _152;
+if((dojo.widget)&&(dojo.widget.tags[_14a])){
+return _14a;
 }
-var p=_152.indexOf(":");
+var p=_14a.indexOf(":");
 if(p>=0){
-return _152;
+return _14a;
 }
-if(_152.substr(0,5)=="dojo:"){
-return _152;
+if(_14a.substr(0,5)=="dojo:"){
+return _14a;
 }
 if(dojo.render.html.capable&&dojo.render.html.ie&&node.scopeName!="HTML"){
-return node.scopeName.toLowerCase()+":"+_152;
+return node.scopeName.toLowerCase()+":"+_14a;
 }
-if(_152.substr(0,4)=="dojo"){
-return "dojo:"+_152.substring(4);
+if(_14a.substr(0,4)=="dojo"){
+return "dojo:"+_14a.substring(4);
 }
 var djt=node.getAttribute("dojoType")||node.getAttribute("dojotype");
 if(djt){
@@ -95661,21 +57418,21 @@
 return "dojo:"+djt.toLowerCase();
 }
 if((dj_global["djConfig"])&&(!djConfig["ignoreClassNames"])){
-var _155=node.className||node.getAttribute("class");
-if((_155)&&(_155.indexOf)&&(_155.indexOf("dojo-")!=-1)){
-var _156=_155.split(" ");
-for(var x=0,c=_156.length;x<c;x++){
-if(_156[x].slice(0,5)=="dojo-"){
-return "dojo:"+_156[x].substr(5).toLowerCase();
+var _14d=node.className||node.getAttribute("class");
+if((_14d)&&(_14d.indexOf)&&(_14d.indexOf("dojo-")!=-1)){
+var _14e=_14d.split(" ");
+for(var x=0,c=_14e.length;x<c;x++){
+if(_14e[x].slice(0,5)=="dojo-"){
+return "dojo:"+_14e[x].substr(5).toLowerCase();
 }
 }
 }
 }
 return "";
 }
-this.parseElement=function(node,_15a,_15b,_15c){
-var _15d=getTagName(node);
-if(isIE&&_15d.indexOf("/")==0){
+this.parseElement=function(node,_152,_153,_154){
+var _155=getTagName(node);
+if(isIE&&_155.indexOf("/")==0){
 return null;
 }
 try{
@@ -95686,147 +57443,147 @@
 }
 catch(e){
 }
-var _15f=true;
-if(_15b){
-var _160=getDojoTagName(node);
-_15d=_160||_15d;
-_15f=Boolean(_160);
+var _157=true;
+if(_153){
+var _158=getDojoTagName(node);
+_155=_158||_155;
+_157=Boolean(_158);
 }
-var _161={};
-_161[_15d]=[];
-var pos=_15d.indexOf(":");
+var _159={};
+_159[_155]=[];
+var pos=_155.indexOf(":");
 if(pos>0){
-var ns=_15d.substring(0,pos);
-_161["ns"]=ns;
+var ns=_155.substring(0,pos);
+_159["ns"]=ns;
 if((dojo.ns)&&(!dojo.ns.allow(ns))){
-_15f=false;
+_157=false;
 }
 }
-if(_15f){
-var _164=this.parseAttributes(node);
-for(var attr in _164){
-if((!_161[_15d][attr])||(typeof _161[_15d][attr]!="array")){
-_161[_15d][attr]=[];
+if(_157){
+var _15c=this.parseAttributes(node);
+for(var attr in _15c){
+if((!_159[_155][attr])||(typeof _159[_155][attr]!="array")){
+_159[_155][attr]=[];
 }
-_161[_15d][attr].push(_164[attr]);
+_159[_155][attr].push(_15c[attr]);
 }
-_161[_15d].nodeRef=node;
-_161.tagName=_15d;
-_161.index=_15c||0;
+_159[_155].nodeRef=node;
+_159.tagName=_155;
+_159.index=_154||0;
 }
-var _165=0;
+var _15d=0;
 for(var i=0;i<node.childNodes.length;i++){
 var tcn=node.childNodes.item(i);
 switch(tcn.nodeType){
 case dojo.dom.ELEMENT_NODE:
 var ctn=getDojoTagName(tcn)||getTagName(tcn);
-if(!_161[ctn]){
-_161[ctn]=[];
+if(!_159[ctn]){
+_159[ctn]=[];
 }
-_161[ctn].push(this.parseElement(tcn,true,_15b,_165));
+_159[ctn].push(this.parseElement(tcn,true,_153,_15d));
 if((tcn.childNodes.length==1)&&(tcn.childNodes.item(0).nodeType==dojo.dom.TEXT_NODE)){
-_161[ctn][_161[ctn].length-1].value=tcn.childNodes.item(0).nodeValue;
+_159[ctn][_159[ctn].length-1].value=tcn.childNodes.item(0).nodeValue;
 }
-_165++;
+_15d++;
 break;
 case dojo.dom.TEXT_NODE:
 if(node.childNodes.length==1){
-_161[_15d].push({value:node.childNodes.item(0).nodeValue});
+_159[_155].push({value:node.childNodes.item(0).nodeValue});
 }
 break;
 default:
 break;
 }
 }
-return _161;
+return _159;
 };
 this.parseAttributes=function(node){
-var _16a={};
+var _162={};
 var atts=node.attributes;
-var _16c,i=0;
-while((_16c=atts[i++])){
+var _164,i=0;
+while((_164=atts[i++])){
 if(isIE){
-if(!_16c){
+if(!_164){
 continue;
 }
-if((typeof _16c=="object")&&(typeof _16c.nodeValue=="undefined")||(_16c.nodeValue==null)||(_16c.nodeValue=="")){
+if((typeof _164=="object")&&(typeof _164.nodeValue=="undefined")||(_164.nodeValue==null)||(_164.nodeValue=="")){
 continue;
 }
 }
-var nn=_16c.nodeName.split(":");
-nn=(nn.length==2)?nn[1]:_16c.nodeName;
-_16a[nn]={value:_16c.nodeValue};
+var nn=_164.nodeName.split(":");
+nn=(nn.length==2)?nn[1]:_164.nodeName;
+_162[nn]={value:_164.nodeValue};
 }
-return _16a;
+return _162;
 };
 };
 dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_16f,_170){
-if(!dojo.lang.isFunction(_170)){
-dojo.raise("dojo.inherits: superclass argument ["+_170+"] must be a function (subclass: ["+_16f+"']");
+dojo.lang.inherits=function(_167,_168){
+if(!dojo.lang.isFunction(_168)){
+dojo.raise("dojo.inherits: superclass argument ["+_168+"] must be a function (subclass: ["+_167+"']");
 }
-_16f.prototype=new _170();
-_16f.prototype.constructor=_16f;
-_16f.superclass=_170.prototype;
-_16f["super"]=_170.prototype;
+_167.prototype=new _168();
+_167.prototype.constructor=_167;
+_167.superclass=_168.prototype;
+_167["super"]=_168.prototype;
 };
-dojo.lang._mixin=function(obj,_172){
+dojo.lang._mixin=function(obj,_16a){
 var tobj={};
-for(var x in _172){
-if((typeof tobj[x]=="undefined")||(tobj[x]!=_172[x])){
-obj[x]=_172[x];
+for(var x in _16a){
+if((typeof tobj[x]=="undefined")||(tobj[x]!=_16a[x])){
+obj[x]=_16a[x];
 }
 }
-if(dojo.render.html.ie&&(typeof (_172["toString"])=="function")&&(_172["toString"]!=obj["toString"])&&(_172["toString"]!=tobj["toString"])){
-obj.toString=_172.toString;
+if(dojo.render.html.ie&&(typeof (_16a["toString"])=="function")&&(_16a["toString"]!=obj["toString"])&&(_16a["toString"]!=tobj["toString"])){
+obj.toString=_16a.toString;
 }
 return obj;
 };
-dojo.lang.mixin=function(obj,_176){
+dojo.lang.mixin=function(obj,_16e){
 for(var i=1,l=arguments.length;i<l;i++){
 dojo.lang._mixin(obj,arguments[i]);
 }
 return obj;
 };
-dojo.lang.extend=function(_179,_17a){
+dojo.lang.extend=function(_171,_172){
 for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_179.prototype,arguments[i]);
+dojo.lang._mixin(_171.prototype,arguments[i]);
 }
-return _179;
+return _171;
 };
 dojo.inherits=dojo.lang.inherits;
 dojo.mixin=dojo.lang.mixin;
 dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_17d,_17e,_17f,_180){
-if(!dojo.lang.isArrayLike(_17d)&&dojo.lang.isArrayLike(_17e)){
+dojo.lang.find=function(_175,_176,_177,_178){
+if(!dojo.lang.isArrayLike(_175)&&dojo.lang.isArrayLike(_176)){
 dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_17d;
-_17d=_17e;
-_17e=temp;
+var temp=_175;
+_175=_176;
+_176=temp;
 }
-var _182=dojo.lang.isString(_17d);
-if(_182){
-_17d=_17d.split("");
+var _17a=dojo.lang.isString(_175);
+if(_17a){
+_175=_175.split("");
 }
-if(_180){
+if(_178){
 var step=-1;
-var i=_17d.length-1;
+var i=_175.length-1;
 var end=-1;
 }else{
 var step=1;
 var i=0;
-var end=_17d.length;
+var end=_175.length;
 }
-if(_17f){
+if(_177){
 while(i!=end){
-if(_17d[i]===_17e){
+if(_175[i]===_176){
 return i;
 }
 i+=step;
 }
 }else{
 while(i!=end){
-if(_17d[i]==_17e){
+if(_175[i]==_176){
 return i;
 }
 i+=step;
@@ -95835,12 +57592,12 @@
 return -1;
 };
 dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_186,_187,_188){
-return dojo.lang.find(_186,_187,_188,true);
+dojo.lang.findLast=function(_17e,_17f,_180){
+return dojo.lang.find(_17e,_17f,_180,true);
 };
 dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_189,_18a){
-return dojo.lang.find(_189,_18a)>-1;
+dojo.lang.inArray=function(_181,_182){
+return dojo.lang.find(_181,_182)>-1;
 };
 dojo.lang.isObject=function(it){
 if(typeof it=="undefined"){
@@ -95904,21 +57661,21 @@
 return ((typeof (it)=="undefined")&&(it==undefined));
 };
 dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_195,_196){
-var fcn=(dojo.lang.isString(_196)?_195[_196]:_196)||function(){
+dojo.lang.hitch=function(_18d,_18e){
+var fcn=(dojo.lang.isString(_18e)?_18d[_18e]:_18e)||function(){
 };
 return function(){
-return fcn.apply(_195,arguments);
+return fcn.apply(_18d,arguments);
 };
 };
 dojo.lang.anonCtr=0;
 dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_198,_199,_19a){
-var nso=(_199||dojo.lang.anon);
-if((_19a)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
+dojo.lang.nameAnonFunc=function(_190,_191,_192){
+var nso=(_191||dojo.lang.anon);
+if((_192)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
 for(var x in nso){
 try{
-if(nso[x]===_198){
+if(nso[x]===_190){
 return x;
 }
 }
@@ -95930,50 +57687,50 @@
 while(typeof nso[ret]!="undefined"){
 ret="__"+dojo.lang.anonCtr++;
 }
-nso[ret]=_198;
+nso[ret]=_190;
 return ret;
 };
-dojo.lang.forward=function(_19e){
+dojo.lang.forward=function(_196){
 return function(){
-return this[_19e].apply(this,arguments);
+return this[_196].apply(this,arguments);
 };
 };
-dojo.lang.curry=function(_19f,func){
-var _1a1=[];
-_19f=_19f||dj_global;
+dojo.lang.curry=function(_197,func){
+var _199=[];
+_197=_197||dj_global;
 if(dojo.lang.isString(func)){
-func=_19f[func];
+func=_197[func];
 }
 for(var x=2;x<arguments.length;x++){
-_1a1.push(arguments[x]);
+_199.push(arguments[x]);
 }
-var _1a3=(func["__preJoinArity"]||func.length)-_1a1.length;
-function gather(_1a4,_1a5,_1a6){
-var _1a7=_1a6;
-var _1a8=_1a5.slice(0);
-for(var x=0;x<_1a4.length;x++){
-_1a8.push(_1a4[x]);
+var _19b=(func["__preJoinArity"]||func.length)-_199.length;
+function gather(_19c,_19d,_19e){
+var _19f=_19e;
+var _1a0=_19d.slice(0);
+for(var x=0;x<_19c.length;x++){
+_1a0.push(_19c[x]);
 }
-_1a6=_1a6-_1a4.length;
-if(_1a6<=0){
-var res=func.apply(_19f,_1a8);
-_1a6=_1a7;
+_19e=_19e-_19c.length;
+if(_19e<=0){
+var res=func.apply(_197,_1a0);
+_19e=_19f;
 return res;
 }else{
 return function(){
-return gather(arguments,_1a8,_1a6);
+return gather(arguments,_1a0,_19e);
 };
 }
 }
-return gather([],_1a1,_1a3);
+return gather([],_199,_19b);
 };
-dojo.lang.curryArguments=function(_1ab,func,args,_1ae){
-var _1af=[];
-var x=_1ae||0;
-for(x=_1ae;x<args.length;x++){
-_1af.push(args[x]);
+dojo.lang.curryArguments=function(_1a3,func,args,_1a6){
+var _1a7=[];
+var x=_1a6||0;
+for(x=_1a6;x<args.length;x++){
+_1a7.push(args[x]);
 }
-return dojo.lang.curry.apply(dojo.lang,[_1ab,func].concat(_1af));
+return dojo.lang.curry.apply(dojo.lang,[_1a3,func].concat(_1a7));
 };
 dojo.lang.tryThese=function(){
 for(var x=0;x<arguments.length;x++){
@@ -95990,31 +57747,31 @@
 }
 }
 };
-dojo.lang.delayThese=function(farr,cb,_1b5,_1b6){
+dojo.lang.delayThese=function(farr,cb,_1ad,_1ae){
 if(!farr.length){
-if(typeof _1b6=="function"){
-_1b6();
+if(typeof _1ae=="function"){
+_1ae();
 }
 return;
 }
-if((typeof _1b5=="undefined")&&(typeof cb=="number")){
-_1b5=cb;
+if((typeof _1ad=="undefined")&&(typeof cb=="number")){
+_1ad=cb;
 cb=function(){
 };
 }else{
 if(!cb){
 cb=function(){
 };
-if(!_1b5){
-_1b5=0;
+if(!_1ad){
+_1ad=0;
 }
 }
 }
 setTimeout(function(){
 (farr.shift())();
 cb();
-dojo.lang.delayThese(farr,cb,_1b5,_1b6);
-},_1b5);
+dojo.lang.delayThese(farr,cb,_1ad,_1ae);
+},_1ad);
 };
 dojo.provide("dojo.lang.array");
 dojo.lang.mixin(dojo.lang,{has:function(obj,name){
@@ -96027,142 +57784,138 @@
 },isEmpty:function(obj){
 if(dojo.lang.isObject(obj)){
 var tmp={};
-var _1bb=0;
+var _1b3=0;
 for(var x in obj){
 if(obj[x]&&(!tmp[x])){
-_1bb++;
+_1b3++;
 break;
 }
 }
-return _1bb==0;
+return _1b3==0;
 }else{
 if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
 return obj.length==0;
 }
 }
-},map:function(arr,obj,_1bf){
-var _1c0=dojo.lang.isString(arr);
-if(_1c0){
+},map:function(arr,obj,_1b7){
+var _1b8=dojo.lang.isString(arr);
+if(_1b8){
 arr=arr.split("");
 }
-if(dojo.lang.isFunction(obj)&&(!_1bf)){
-_1bf=obj;
+if(dojo.lang.isFunction(obj)&&(!_1b7)){
+_1b7=obj;
 obj=dj_global;
 }else{
-if(dojo.lang.isFunction(obj)&&_1bf){
-var _1c1=obj;
-obj=_1bf;
-_1bf=_1c1;
+if(dojo.lang.isFunction(obj)&&_1b7){
+var _1b9=obj;
+obj=_1b7;
+_1b7=_1b9;
 }
 }
 if(Array.map){
-var _1c2=Array.map(arr,_1bf,obj);
+var _1ba=Array.map(arr,_1b7,obj);
 }else{
-var _1c2=[];
+var _1ba=[];
 for(var i=0;i<arr.length;++i){
-_1c2.push(_1bf.call(obj,arr[i]));
+_1ba.push(_1b7.call(obj,arr[i]));
 }
 }
-if(_1c0){
-return _1c2.join("");
+if(_1b8){
+return _1ba.join("");
 }else{
-return _1c2;
+return _1ba;
 }
-},reduce:function(arr,_1c5,obj,_1c7){
-var _1c8=_1c5;
-if(arguments.length==1){
-dojo.debug("dojo.lang.reduce called with too few arguments!");
-return false;
-}else{
+},reduce:function(arr,_1bd,obj,_1bf){
+var _1c0=_1bd;
 if(arguments.length==2){
-_1c7=_1c5;
-_1c8=arr.shift();
+_1bf=_1bd;
+_1c0=arr[0];
+arr=arr.slice(1);
 }else{
-if(arguments.lenght==3){
+if(arguments.length==3){
 if(dojo.lang.isFunction(obj)){
-_1c7=obj;
+_1bf=obj;
 obj=null;
 }
 }else{
 if(dojo.lang.isFunction(obj)){
-var tmp=_1c7;
-_1c7=obj;
+var tmp=_1bf;
+_1bf=obj;
 obj=tmp;
 }
 }
 }
-}
-var ob=obj?obj:dj_global;
+var ob=obj||dj_global;
 dojo.lang.map(arr,function(val){
-_1c8=_1c7.call(ob,_1c8,val);
+_1c0=_1bf.call(ob,_1c0,val);
 });
-return _1c8;
-},forEach:function(_1cc,_1cd,_1ce){
-if(dojo.lang.isString(_1cc)){
-_1cc=_1cc.split("");
+return _1c0;
+},forEach:function(_1c4,_1c5,_1c6){
+if(dojo.lang.isString(_1c4)){
+_1c4=_1c4.split("");
 }
 if(Array.forEach){
-Array.forEach(_1cc,_1cd,_1ce);
+Array.forEach(_1c4,_1c5,_1c6);
 }else{
-if(!_1ce){
-_1ce=dj_global;
+if(!_1c6){
+_1c6=dj_global;
 }
-for(var i=0,l=_1cc.length;i<l;i++){
-_1cd.call(_1ce,_1cc[i],i,_1cc);
+for(var i=0,l=_1c4.length;i<l;i++){
+_1c5.call(_1c6,_1c4[i],i,_1c4);
 }
 }
-},_everyOrSome:function(_1d1,arr,_1d3,_1d4){
+},_everyOrSome:function(_1c9,arr,_1cb,_1cc){
 if(dojo.lang.isString(arr)){
 arr=arr.split("");
 }
 if(Array.every){
-return Array[_1d1?"every":"some"](arr,_1d3,_1d4);
+return Array[_1c9?"every":"some"](arr,_1cb,_1cc);
 }else{
-if(!_1d4){
-_1d4=dj_global;
+if(!_1cc){
+_1cc=dj_global;
 }
 for(var i=0,l=arr.length;i<l;i++){
-var _1d7=_1d3.call(_1d4,arr[i],i,arr);
-if(_1d1&&!_1d7){
+var _1cf=_1cb.call(_1cc,arr[i],i,arr);
+if(_1c9&&!_1cf){
 return false;
 }else{
-if((!_1d1)&&(_1d7)){
+if((!_1c9)&&(_1cf)){
 return true;
 }
 }
 }
-return Boolean(_1d1);
+return Boolean(_1c9);
 }
-},every:function(arr,_1d9,_1da){
-return this._everyOrSome(true,arr,_1d9,_1da);
-},some:function(arr,_1dc,_1dd){
-return this._everyOrSome(false,arr,_1dc,_1dd);
-},filter:function(arr,_1df,_1e0){
-var _1e1=dojo.lang.isString(arr);
-if(_1e1){
+},every:function(arr,_1d1,_1d2){
+return this._everyOrSome(true,arr,_1d1,_1d2);
+},some:function(arr,_1d4,_1d5){
+return this._everyOrSome(false,arr,_1d4,_1d5);
+},filter:function(arr,_1d7,_1d8){
+var _1d9=dojo.lang.isString(arr);
+if(_1d9){
 arr=arr.split("");
 }
-var _1e2;
+var _1da;
 if(Array.filter){
-_1e2=Array.filter(arr,_1df,_1e0);
+_1da=Array.filter(arr,_1d7,_1d8);
 }else{
-if(!_1e0){
+if(!_1d8){
 if(arguments.length>=3){
 dojo.raise("thisObject doesn't exist!");
 }
-_1e0=dj_global;
+_1d8=dj_global;
 }
-_1e2=[];
+_1da=[];
 for(var i=0;i<arr.length;i++){
-if(_1df.call(_1e0,arr[i],i,arr)){
-_1e2.push(arr[i]);
+if(_1d7.call(_1d8,arr[i],i,arr)){
+_1da.push(arr[i]);
 }
 }
 }
-if(_1e1){
-return _1e2.join("");
+if(_1d9){
+return _1da.join("");
 }else{
-return _1e2;
+return _1da;
 }
 },unnest:function(){
 var out=[];
@@ -96175,35 +57928,35 @@
 }
 }
 return out;
-},toArray:function(_1e7,_1e8){
-var _1e9=[];
-for(var i=_1e8||0;i<_1e7.length;i++){
-_1e9.push(_1e7[i]);
+},toArray:function(_1df,_1e0){
+var _1e1=[];
+for(var i=_1e0||0;i<_1df.length;i++){
+_1e1.push(_1df[i]);
 }
-return _1e9;
+return _1e1;
 }});
 dojo.provide("dojo.lang.extras");
-dojo.lang.setTimeout=function(func,_1ec){
-var _1ed=window,_1ee=2;
+dojo.lang.setTimeout=function(func,_1e4){
+var _1e5=window,_1e6=2;
 if(!dojo.lang.isFunction(func)){
-_1ed=func;
-func=_1ec;
-_1ec=arguments[2];
-_1ee++;
+_1e5=func;
+func=_1e4;
+_1e4=arguments[2];
+_1e6++;
 }
 if(dojo.lang.isString(func)){
-func=_1ed[func];
+func=_1e5[func];
 }
 var args=[];
-for(var i=_1ee;i<arguments.length;i++){
+for(var i=_1e6;i<arguments.length;i++){
 args.push(arguments[i]);
 }
 return dojo.global().setTimeout(function(){
-func.apply(_1ed,args);
-},_1ec);
+func.apply(_1e5,args);
+},_1e4);
 };
-dojo.lang.clearTimeout=function(_1f1){
-dojo.global().clearTimeout(_1f1);
+dojo.lang.clearTimeout=function(_1e9){
+dojo.global().clearTimeout(_1e9);
 };
 dojo.lang.getNameInObj=function(ns,item){
 if(!ns){
@@ -96248,65 +58001,65 @@
 }
 return undefined;
 };
-dojo.lang.getObjPathValue=function(_1fa,_1fb,_1fc){
-with(dojo.parseObjPath(_1fa,_1fb,_1fc)){
-return dojo.evalProp(prop,obj,_1fc);
+dojo.lang.getObjPathValue=function(_1f2,_1f3,_1f4){
+with(dojo.parseObjPath(_1f2,_1f3,_1f4)){
+return dojo.evalProp(prop,obj,_1f4);
 }
 };
-dojo.lang.setObjPathValue=function(_1fd,_1fe,_1ff,_200){
+dojo.lang.setObjPathValue=function(_1f5,_1f6,_1f7,_1f8){
 dojo.deprecated("dojo.lang.setObjPathValue","use dojo.parseObjPath and the '=' operator","0.6");
 if(arguments.length<4){
-_200=true;
+_1f8=true;
 }
-with(dojo.parseObjPath(_1fd,_1ff,_200)){
-if(obj&&(_200||(prop in obj))){
-obj[prop]=_1fe;
+with(dojo.parseObjPath(_1f5,_1f7,_1f8)){
+if(obj&&(_1f8||(prop in obj))){
+obj[prop]=_1f6;
 }
 }
 };
 dojo.provide("dojo.lang.declare");
-dojo.lang.declare=function(_201,_202,init,_204){
-if((dojo.lang.isFunction(_204))||((!_204)&&(!dojo.lang.isFunction(init)))){
-var temp=_204;
-_204=init;
+dojo.lang.declare=function(_1f9,_1fa,init,_1fc){
+if((dojo.lang.isFunction(_1fc))||((!_1fc)&&(!dojo.lang.isFunction(init)))){
+var temp=_1fc;
+_1fc=init;
 init=temp;
 }
-var _206=[];
-if(dojo.lang.isArray(_202)){
-_206=_202;
-_202=_206.shift();
+var _1fe=[];
+if(dojo.lang.isArray(_1fa)){
+_1fe=_1fa;
+_1fa=_1fe.shift();
 }
 if(!init){
-init=dojo.evalObjPath(_201,false);
+init=dojo.evalObjPath(_1f9,false);
 if((init)&&(!dojo.lang.isFunction(init))){
 init=null;
 }
 }
 var ctor=dojo.lang.declare._makeConstructor();
-var scp=(_202?_202.prototype:null);
+var scp=(_1fa?_1fa.prototype:null);
 if(scp){
 scp.prototyping=true;
-ctor.prototype=new _202();
+ctor.prototype=new _1fa();
 scp.prototyping=false;
 }
 ctor.superclass=scp;
-ctor.mixins=_206;
-for(var i=0,l=_206.length;i<l;i++){
-dojo.lang.extend(ctor,_206[i].prototype);
+ctor.mixins=_1fe;
+for(var i=0,l=_1fe.length;i<l;i++){
+dojo.lang.extend(ctor,_1fe[i].prototype);
 }
 ctor.prototype.initializer=null;
-ctor.prototype.declaredClass=_201;
-if(dojo.lang.isArray(_204)){
-dojo.lang.extend.apply(dojo.lang,[ctor].concat(_204));
+ctor.prototype.declaredClass=_1f9;
+if(dojo.lang.isArray(_1fc)){
+dojo.lang.extend.apply(dojo.lang,[ctor].concat(_1fc));
 }else{
-dojo.lang.extend(ctor,(_204)||{});
+dojo.lang.extend(ctor,(_1fc)||{});
 }
 dojo.lang.extend(ctor,dojo.lang.declare._common);
 ctor.prototype.constructor=ctor;
 ctor.prototype.initializer=(ctor.prototype.initializer)||(init)||(function(){
 });
-var _20b=dojo.parseObjPath(_201,null,true);
-_20b.obj[_20b.prop]=ctor;
+var _203=dojo.parseObjPath(_1f9,null,true);
+_203.obj[_203.prop]=ctor;
 return ctor;
 };
 dojo.lang.declare._makeConstructor=function(){
@@ -96331,19 +58084,19 @@
 };
 dojo.lang.declare._common={_getPropContext:function(){
 return (this.___proto||this);
-},_contextMethod:function(_211,_212,args){
-var _214,_215=this.___proto;
-this.___proto=_211;
+},_contextMethod:function(_209,_20a,args){
+var _20c,_20d=this.___proto;
+this.___proto=_209;
 try{
-_214=_211[_212].apply(this,(args||[]));
+_20c=_209[_20a].apply(this,(args||[]));
 }
 catch(e){
 throw e;
 }
 finally{
-this.___proto=_215;
+this.___proto=_20d;
 }
-return _214;
+return _20c;
 },_inherited:function(prop,args){
 var p=this._getPropContext();
 do{
@@ -96359,9 +58112,9 @@
 }};
 dojo.declare=dojo.lang.declare;
 dojo.provide("dojo.ns");
-dojo.ns={namespaces:{},failed:{},loading:{},loaded:{},register:function(name,_21c,_21d,_21e){
-if(!_21e||!this.namespaces[name]){
-this.namespaces[name]=new dojo.ns.Ns(name,_21c,_21d);
+dojo.ns={namespaces:{},failed:{},loading:{},loaded:{},register:function(name,_214,_215,_216){
+if(!_216||!this.namespaces[name]){
+this.namespaces[name]=new dojo.ns.Ns(name,_214,_215);
 }
 },allow:function(name){
 if(this.failed[name]){
@@ -96405,52 +58158,52 @@
 }
 return this.namespaces[name];
 }};
-dojo.ns.Ns=function(name,_225,_226){
+dojo.ns.Ns=function(name,_21d,_21e){
 this.name=name;
-this.module=_225;
-this.resolver=_226;
+this.module=_21d;
+this.resolver=_21e;
 this._loaded=[];
 this._failed=[];
 };
-dojo.ns.Ns.prototype.resolve=function(name,_228,_229){
+dojo.ns.Ns.prototype.resolve=function(name,_220,_221){
 if(!this.resolver||djConfig["skipAutoRequire"]){
 return false;
 }
-var _22a=this.resolver(name,_228);
-if((_22a)&&(!this._loaded[_22a])&&(!this._failed[_22a])){
+var _222=this.resolver(name,_220);
+if((_222)&&(!this._loaded[_222])&&(!this._failed[_222])){
 var req=dojo.require;
-req(_22a,false,true);
-if(dojo.hostenv.findModule(_22a,false)){
-this._loaded[_22a]=true;
+req(_222,false,true);
+if(dojo.hostenv.findModule(_222,false)){
+this._loaded[_222]=true;
 }else{
-if(!_229){
-dojo.raise("dojo.ns.Ns.resolve: module '"+_22a+"' not found after loading via namespace '"+this.name+"'");
+if(!_221){
+dojo.raise("dojo.ns.Ns.resolve: module '"+_222+"' not found after loading via namespace '"+this.name+"'");
 }
-this._failed[_22a]=true;
+this._failed[_222]=true;
 }
 }
-return Boolean(this._loaded[_22a]);
+return Boolean(this._loaded[_222]);
 };
-dojo.registerNamespace=function(name,_22d,_22e){
+dojo.registerNamespace=function(name,_225,_226){
 dojo.ns.register.apply(dojo.ns,arguments);
 };
-dojo.registerNamespaceResolver=function(name,_230){
+dojo.registerNamespaceResolver=function(name,_228){
 var n=dojo.ns.namespaces[name];
 if(n){
-n.resolver=_230;
+n.resolver=_228;
 }
 };
-dojo.registerNamespaceManifest=function(_232,path,name,_235,_236){
+dojo.registerNamespaceManifest=function(_22a,path,name,_22d,_22e){
 dojo.registerModulePath(name,path);
-dojo.registerNamespace(name,_235,_236);
+dojo.registerNamespace(name,_22d,_22e);
 };
 dojo.registerNamespace("dojo","dojo.widget");
 dojo.provide("dojo.event.common");
 dojo.event=new function(){
 this._canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-function interpolateArgs(args,_238){
+function interpolateArgs(args,_230){
 var dl=dojo.lang;
-var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false};
+var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false,maxCalls:-1};
 switch(args.length){
 case 0:
 return;
@@ -96475,14 +58228,14 @@
 ao.adviceType="after";
 ao.srcObj=args[0];
 ao.srcFunc=args[1];
-var _23b=dl.nameAnonFunc(args[2],ao.adviceObj,_238);
-ao.adviceFunc=_23b;
+var _233=dl.nameAnonFunc(args[2],ao.adviceObj,_230);
+ao.adviceFunc=_233;
 }else{
 if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
 ao.adviceType="after";
 ao.srcObj=dj_global;
-var _23b=dl.nameAnonFunc(args[0],ao.srcObj,_238);
-ao.srcFunc=_23b;
+var _233=dl.nameAnonFunc(args[0],ao.srcObj,_230);
+ao.srcFunc=_233;
 ao.adviceObj=args[1];
 ao.adviceFunc=args[2];
 }
@@ -96508,17 +58261,17 @@
 if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
 ao.adviceType=args[0];
 ao.srcObj=dj_global;
-var _23b=dl.nameAnonFunc(args[1],dj_global,_238);
-ao.srcFunc=_23b;
+var _233=dl.nameAnonFunc(args[1],dj_global,_230);
+ao.srcFunc=_233;
 ao.adviceObj=args[2];
 ao.adviceFunc=args[3];
 }else{
 if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
 ao.srcObj=args[1];
 ao.srcFunc=args[2];
-var _23b=dl.nameAnonFunc(args[3],dj_global,_238);
+var _233=dl.nameAnonFunc(args[3],dj_global,_230);
 ao.adviceObj=dj_global;
-ao.adviceFunc=_23b;
+ao.adviceFunc=_233;
 }else{
 if(dl.isObject(args[1])){
 ao.srcObj=args[1];
@@ -96562,11 +58315,12 @@
 ao.delay=args[8];
 ao.rate=args[9];
 ao.adviceMsg=args[10];
+ao.maxCalls=(!isNaN(parseInt(args[11])))?args[11]:-1;
 break;
 }
 if(dl.isFunction(ao.aroundFunc)){
-var _23b=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_238);
-ao.aroundFunc=_23b;
+var _233=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_230);
+ao.aroundFunc=_233;
 }
 if(dl.isFunction(ao.srcFunc)){
 ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc);
@@ -96595,25 +58349,18 @@
 }else{
 var ao=interpolateArgs(arguments,true);
 }
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.connect(ao);
-}
-ao.srcFunc="onkeypress";
-}
 if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){
-var _23d={};
+var _235={};
 for(var x in ao){
-_23d[x]=ao[x];
+_235[x]=ao[x];
 }
 var mjps=[];
 dojo.lang.forEach(ao.srcObj,function(src){
 if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
 src=dojo.byId(src);
 }
-_23d.srcObj=src;
-mjps.push(dojo.event.connect.call(dojo.event,_23d));
+_235.srcObj=src;
+mjps.push(dojo.event.connect.call(dojo.event,_235));
 });
 return mjps;
 }
@@ -96625,20 +58372,20 @@
 return mjp;
 };
 this.log=function(a1,a2){
-var _245;
+var _23d;
 if((arguments.length==1)&&(typeof a1=="object")){
-_245=a1;
+_23d=a1;
 }else{
-_245={srcObj:a1,srcFunc:a2};
+_23d={srcObj:a1,srcFunc:a2};
 }
-_245.adviceFunc=function(){
-var _246=[];
+_23d.adviceFunc=function(){
+var _23e=[];
 for(var x=0;x<arguments.length;x++){
-_246.push(arguments[x]);
+_23e.push(arguments[x]);
 }
-dojo.debug("("+_245.srcObj+")."+_245.srcFunc,":",_246.join(", "));
+dojo.debug("("+_23d.srcObj+")."+_23d.srcFunc,":",_23e.join(", "));
 };
-this.kwConnect(_245);
+this.kwConnect(_23d);
 };
 this.connectBefore=function(){
 var args=["before"];
@@ -96659,25 +58406,30 @@
 ao.once=true;
 return this.connect(ao);
 };
-this._kwConnectImpl=function(_24d,_24e){
-var fn=(_24e)?"disconnect":"connect";
-if(typeof _24d["srcFunc"]=="function"){
-_24d.srcObj=_24d["srcObj"]||dj_global;
-var _250=dojo.lang.nameAnonFunc(_24d.srcFunc,_24d.srcObj,true);
-_24d.srcFunc=_250;
+this.connectRunOnce=function(){
+var ao=interpolateArgs(arguments,true);
+ao.maxCalls=1;
+return this.connect(ao);
+};
+this._kwConnectImpl=function(_246,_247){
+var fn=(_247)?"disconnect":"connect";
+if(typeof _246["srcFunc"]=="function"){
+_246.srcObj=_246["srcObj"]||dj_global;
+var _249=dojo.lang.nameAnonFunc(_246.srcFunc,_246.srcObj,true);
+_246.srcFunc=_249;
 }
-if(typeof _24d["adviceFunc"]=="function"){
-_24d.adviceObj=_24d["adviceObj"]||dj_global;
-var _250=dojo.lang.nameAnonFunc(_24d.adviceFunc,_24d.adviceObj,true);
-_24d.adviceFunc=_250;
+if(typeof _246["adviceFunc"]=="function"){
+_246.adviceObj=_246["adviceObj"]||dj_global;
+var _249=dojo.lang.nameAnonFunc(_246.adviceFunc,_246.adviceObj,true);
+_246.adviceFunc=_249;
 }
-_24d.srcObj=_24d["srcObj"]||dj_global;
-_24d.adviceObj=_24d["adviceObj"]||_24d["targetObj"]||dj_global;
-_24d.adviceFunc=_24d["adviceFunc"]||_24d["targetFunc"];
-return dojo.event[fn](_24d);
+_246.srcObj=_246["srcObj"]||dj_global;
+_246.adviceObj=_246["adviceObj"]||_246["targetObj"]||dj_global;
+_246.adviceFunc=_246["adviceFunc"]||_246["targetFunc"];
+return dojo.event[fn](_246);
 };
-this.kwConnect=function(_251){
-return this._kwConnectImpl(_251,false);
+this.kwConnect=function(_24a){
+return this._kwConnectImpl(_24a,false);
 };
 this.disconnect=function(){
 if(arguments.length==1){
@@ -96702,12 +58454,12 @@
 mjp.removeAdvice(ao.adviceObj,ao.adviceFunc,ao.adviceType,ao.once);
 return mjp;
 };
-this.kwDisconnect=function(_254){
-return this._kwConnectImpl(_254,true);
+this.kwDisconnect=function(_24d){
+return this._kwConnectImpl(_24d,true);
 };
 };
-dojo.event.MethodInvocation=function(_255,obj,args){
-this.jp_=_255;
+dojo.event.MethodInvocation=function(_24e,obj,args){
+this.jp_=_24e;
 this.object=obj;
 this.args=[];
 for(var x=0;x<args.length;x++){
@@ -96726,44 +58478,50 @@
 return mobj[meth].call(mobj,this);
 }
 };
-dojo.event.MethodJoinPoint=function(obj,_25d){
+dojo.event.MethodJoinPoint=function(obj,_256){
 this.object=obj||dj_global;
-this.methodname=_25d;
-this.methodfunc=this.object[_25d];
+this.methodname=_256;
+this.methodfunc=this.object[_256];
 this.squelch=false;
 };
-dojo.event.MethodJoinPoint.getForMethod=function(obj,_25f){
+dojo.event.MethodJoinPoint.getForMethod=function(obj,_258){
 if(!obj){
 obj=dj_global;
 }
-if(!obj[_25f]){
-obj[_25f]=function(){
+var ofn=obj[_258];
+if(!ofn){
+ofn=obj[_258]=function(){
 };
-if(!obj[_25f]){
-dojo.raise("Cannot set do-nothing method on that object "+_25f);
+if(!obj[_258]){
+dojo.raise("Cannot set do-nothing method on that object "+_258);
 }
 }else{
-if((!dojo.lang.isFunction(obj[_25f]))&&(!dojo.lang.isAlien(obj[_25f]))){
+if((typeof ofn!="function")&&(!dojo.lang.isFunction(ofn))&&(!dojo.lang.isAlien(ofn))){
 return null;
 }
 }
-var _260=_25f+"$joinpoint";
-var _261=_25f+"$joinpoint$method";
-var _262=obj[_260];
-if(!_262){
-var _263=false;
+var _25a=_258+"$joinpoint";
+var _25b=_258+"$joinpoint$method";
+var _25c=obj[_25a];
+if(!_25c){
+var _25d=false;
 if(dojo.event["browser"]){
 if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){
-_263=true;
-dojo.event.browser.addClobberNodeAttrs(obj,[_260,_261,_25f]);
+_25d=true;
+dojo.event.browser.addClobberNodeAttrs(obj,[_25a,_25b,_258]);
 }
 }
-var _264=obj[_25f].length;
-obj[_261]=obj[_25f];
-_262=obj[_260]=new dojo.event.MethodJoinPoint(obj,_261);
-obj[_25f]=function(){
+var _25e=ofn.length;
+obj[_25b]=ofn;
+_25c=obj[_25a]=new dojo.event.MethodJoinPoint(obj,_25b);
+if(!_25d){
+obj[_258]=function(){
+return _25c.run.apply(_25c,arguments);
+};
+}else{
+obj[_258]=function(){
 var args=[];
-if((_263)&&(!arguments.length)){
+if(!arguments.length){
 var evt=null;
 try{
 if(obj.ownerDocument){
@@ -96788,20 +58546,21 @@
 }
 }else{
 for(var x=0;x<arguments.length;x++){
-if((x==0)&&(_263)&&(dojo.event.browser.isEvent(arguments[x]))){
+if((x==0)&&(dojo.event.browser.isEvent(arguments[x]))){
 args.push(dojo.event.browser.fixEvent(arguments[x],this));
 }else{
 args.push(arguments[x]);
 }
 }
 }
-return _262.run.apply(_262,args);
+return _25c.run.apply(_25c,args);
 };
-obj[_25f].__preJoinArity=_264;
 }
-return _262;
+obj[_258].__preJoinArity=_25e;
+}
+return _25c;
 };
-dojo.lang.extend(dojo.event.MethodJoinPoint,{unintercept:function(){
+dojo.lang.extend(dojo.event.MethodJoinPoint,{squelch:false,unintercept:function(){
 this.object[this.methodname]=this.methodfunc;
 this.before=[];
 this.after=[];
@@ -96809,34 +58568,41 @@
 },disconnect:dojo.lang.forward("unintercept"),run:function(){
 var obj=this.object||dj_global;
 var args=arguments;
-var _26a=[];
+var _264=[];
 for(var x=0;x<args.length;x++){
-_26a[x]=args[x];
+_264[x]=args[x];
 }
-var _26c=function(marr){
+var _266=function(marr){
 if(!marr){
 dojo.debug("Null argument to unrollAdvice()");
 return;
 }
-var _26e=marr[0]||dj_global;
-var _26f=marr[1];
-if(!_26e[_26f]){
-dojo.raise("function \""+_26f+"\" does not exist on \""+_26e+"\"");
+var _268=marr[0]||dj_global;
+var _269=marr[1];
+if(!_268[_269]){
+dojo.raise("function \""+_269+"\" does not exist on \""+_268+"\"");
 }
-var _270=marr[2]||dj_global;
-var _271=marr[3];
+var _26a=marr[2]||dj_global;
+var _26b=marr[3];
 var msg=marr[6];
-var _273;
+var _26d=marr[7];
+if(_26d>-1){
+if(_26d==0){
+return;
+}
+marr[7]--;
+}
+var _26e;
 var to={args:[],jp_:this,object:obj,proceed:function(){
-return _26e[_26f].apply(_26e,to.args);
+return _268[_269].apply(_268,to.args);
 }};
-to.args=_26a;
-var _275=parseInt(marr[4]);
-var _276=((!isNaN(_275))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
+to.args=_264;
+var _270=parseInt(marr[4]);
+var _271=((!isNaN(_270))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
 if(marr[5]){
 var rate=parseInt(marr[5]);
 var cur=new Date();
-var _279=false;
+var _274=false;
 if((marr["last"])&&((cur-marr.last)<=rate)){
 if(dojo.event._canTimeout){
 if(marr["delayTimer"]){
@@ -96846,7 +58612,7 @@
 var mcpy=dojo.lang.shallowCopy(marr);
 marr.delayTimer=setTimeout(function(){
 mcpy[5]=0;
-_26c(mcpy);
+_266(mcpy);
 },tod);
 }
 return;
@@ -96854,49 +58620,49 @@
 marr.last=cur;
 }
 }
-if(_271){
-_270[_271].call(_270,to);
+if(_26b){
+_26a[_26b].call(_26a,to);
 }else{
-if((_276)&&((dojo.render.html)||(dojo.render.svg))){
+if((_271)&&((dojo.render.html)||(dojo.render.svg))){
 dj_global["setTimeout"](function(){
 if(msg){
-_26e[_26f].call(_26e,to);
+_268[_269].call(_268,to);
 }else{
-_26e[_26f].apply(_26e,args);
+_268[_269].apply(_268,args);
 }
-},_275);
+},_270);
 }else{
 if(msg){
-_26e[_26f].call(_26e,to);
+_268[_269].call(_268,to);
 }else{
-_26e[_26f].apply(_26e,args);
+_268[_269].apply(_268,args);
 }
 }
 }
 };
-var _27c=function(){
+var _277=function(){
 if(this.squelch){
 try{
-return _26c.apply(this,arguments);
+return _266.apply(this,arguments);
 }
 catch(e){
 dojo.debug(e);
 }
 }else{
-return _26c.apply(this,arguments);
+return _266.apply(this,arguments);
 }
 };
 if((this["before"])&&(this.before.length>0)){
-dojo.lang.forEach(this.before.concat(new Array()),_27c);
+dojo.lang.forEach(this.before.concat(new Array()),_277);
 }
-var _27d;
+var _278;
 try{
 if((this["around"])&&(this.around.length>0)){
 var mi=new dojo.event.MethodInvocation(this,obj,args);
-_27d=mi.proceed();
+_278=mi.proceed();
 }else{
 if(this.methodfunc){
-_27d=this.object[this.methodname].apply(this.object,args);
+_278=this.object[this.methodname].apply(this.object,args);
 }
 }
 }
@@ -96907,9 +58673,9 @@
 }
 }
 if((this["after"])&&(this.after.length>0)){
-dojo.lang.forEach(this.after.concat(new Array()),_27c);
+dojo.lang.forEach(this.after.concat(new Array()),_277);
 }
-return (this.methodfunc)?_27d:null;
+return (this.methodfunc)?_278:null;
 },getArr:function(kind){
 var type="after";
 if((typeof kind=="string")&&(kind.indexOf("before")!=-1)){
@@ -96924,39 +58690,39 @@
 }
 return this[type];
 },kwAddAdvice:function(args){
-this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"]);
-},addAdvice:function(_282,_283,_284,_285,_286,_287,once,_289,rate,_28b){
-var arr=this.getArr(_286);
+this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"],args["maxCalls"]);
+},addAdvice:function(_27d,_27e,_27f,_280,_281,_282,once,_284,rate,_286,_287){
+var arr=this.getArr(_281);
 if(!arr){
 dojo.raise("bad this: "+this);
 }
-var ao=[_282,_283,_284,_285,_289,rate,_28b];
+var ao=[_27d,_27e,_27f,_280,_284,rate,_286,_287];
 if(once){
-if(this.hasAdvice(_282,_283,_286,arr)>=0){
+if(this.hasAdvice(_27d,_27e,_281,arr)>=0){
 return;
 }
 }
-if(_287=="first"){
+if(_282=="first"){
 arr.unshift(ao);
 }else{
 arr.push(ao);
 }
-},hasAdvice:function(_28e,_28f,_290,arr){
+},hasAdvice:function(_28a,_28b,_28c,arr){
 if(!arr){
-arr=this.getArr(_290);
+arr=this.getArr(_28c);
 }
 var ind=-1;
 for(var x=0;x<arr.length;x++){
-var aao=(typeof _28f=="object")?(new String(_28f)).toString():_28f;
+var aao=(typeof _28b=="object")?(new String(_28b)).toString():_28b;
 var a1o=(typeof arr[x][1]=="object")?(new String(arr[x][1])).toString():arr[x][1];
-if((arr[x][0]==_28e)&&(a1o==aao)){
+if((arr[x][0]==_28a)&&(a1o==aao)){
 ind=x;
 }
 }
 return ind;
-},removeAdvice:function(_296,_297,_298,once){
-var arr=this.getArr(_298);
-var ind=this.hasAdvice(_296,_297,_298,arr);
+},removeAdvice:function(_292,_293,_294,once){
+var arr=this.getArr(_294);
+var ind=this.hasAdvice(_292,_293,_294,arr);
 if(ind==-1){
 return false;
 }
@@ -96965,73 +58731,73 @@
 if(once){
 break;
 }
-ind=this.hasAdvice(_296,_297,_298,arr);
+ind=this.hasAdvice(_292,_293,_294,arr);
 }
 return true;
 }});
 dojo.provide("dojo.event.topic");
 dojo.event.topic=new function(){
 this.topics={};
-this.getTopic=function(_29c){
-if(!this.topics[_29c]){
-this.topics[_29c]=new this.TopicImpl(_29c);
+this.getTopic=function(_298){
+if(!this.topics[_298]){
+this.topics[_298]=new this.TopicImpl(_298);
 }
-return this.topics[_29c];
+return this.topics[_298];
 };
-this.registerPublisher=function(_29d,obj,_29f){
-var _29d=this.getTopic(_29d);
-_29d.registerPublisher(obj,_29f);
+this.registerPublisher=function(_299,obj,_29b){
+var _299=this.getTopic(_299);
+_299.registerPublisher(obj,_29b);
 };
-this.subscribe=function(_2a0,obj,_2a2){
-var _2a0=this.getTopic(_2a0);
-_2a0.subscribe(obj,_2a2);
+this.subscribe=function(_29c,obj,_29e){
+var _29c=this.getTopic(_29c);
+_29c.subscribe(obj,_29e);
 };
-this.unsubscribe=function(_2a3,obj,_2a5){
-var _2a3=this.getTopic(_2a3);
-_2a3.unsubscribe(obj,_2a5);
+this.unsubscribe=function(_29f,obj,_2a1){
+var _29f=this.getTopic(_29f);
+_29f.unsubscribe(obj,_2a1);
 };
-this.destroy=function(_2a6){
-this.getTopic(_2a6).destroy();
-delete this.topics[_2a6];
+this.destroy=function(_2a2){
+this.getTopic(_2a2).destroy();
+delete this.topics[_2a2];
 };
-this.publishApply=function(_2a7,args){
-var _2a7=this.getTopic(_2a7);
-_2a7.sendMessage.apply(_2a7,args);
+this.publishApply=function(_2a3,args){
+var _2a3=this.getTopic(_2a3);
+_2a3.sendMessage.apply(_2a3,args);
 };
-this.publish=function(_2a9,_2aa){
-var _2a9=this.getTopic(_2a9);
+this.publish=function(_2a5,_2a6){
+var _2a5=this.getTopic(_2a5);
 var args=[];
 for(var x=1;x<arguments.length;x++){
 args.push(arguments[x]);
 }
-_2a9.sendMessage.apply(_2a9,args);
+_2a5.sendMessage.apply(_2a5,args);
 };
 };
-dojo.event.topic.TopicImpl=function(_2ad){
-this.topicName=_2ad;
-this.subscribe=function(_2ae,_2af){
-var tf=_2af||_2ae;
-var to=(!_2af)?dj_global:_2ae;
+dojo.event.topic.TopicImpl=function(_2a9){
+this.topicName=_2a9;
+this.subscribe=function(_2aa,_2ab){
+var tf=_2ab||_2aa;
+var to=(!_2ab)?dj_global:_2aa;
 return dojo.event.kwConnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
-this.unsubscribe=function(_2b2,_2b3){
-var tf=(!_2b3)?_2b2:_2b3;
-var to=(!_2b3)?null:_2b2;
+this.unsubscribe=function(_2ae,_2af){
+var tf=(!_2af)?_2ae:_2af;
+var to=(!_2af)?null:_2ae;
 return dojo.event.kwDisconnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
 };
 this._getJoinPoint=function(){
 return dojo.event.MethodJoinPoint.getForMethod(this,"sendMessage");
 };
-this.setSquelch=function(_2b6){
-this._getJoinPoint().squelch=_2b6;
+this.setSquelch=function(_2b2){
+this._getJoinPoint().squelch=_2b2;
 };
 this.destroy=function(){
 this._getJoinPoint().disconnect();
 };
-this.registerPublisher=function(_2b7,_2b8){
-dojo.event.connect(_2b7,_2b8,this,"sendMessage");
+this.registerPublisher=function(_2b3,_2b4){
+dojo.event.connect(_2b3,_2b4,this,"sendMessage");
 };
-this.sendMessage=function(_2b9){
+this.sendMessage=function(_2b5){
 };
 };
 dojo.provide("dojo.event.browser");
@@ -97054,12 +58820,12 @@
 catch(e){
 }
 }
-this.clobber=function(_2bc){
+this.clobber=function(_2b8){
 var na;
 var tna;
-if(_2bc){
-tna=_2bc.all||_2bc.getElementsByTagName("*");
-na=[_2bc];
+if(_2b8){
+tna=_2b8.all||_2b8.getElementsByTagName("*");
+na=[_2b8];
 for(var x=0;x<tna.length;x++){
 if(tna[x]["__doClobber__"]){
 na.push(tna[x]);
@@ -97074,7 +58840,7 @@
 na=(this.clobberNodes.length)?this.clobberNodes:document.all;
 }
 tna=null;
-var _2c0={};
+var _2bc={};
 for(var i=na.length-1;i>=0;i=i-1){
 var el=na[i];
 try{
@@ -97125,9 +58891,9 @@
 });
 }
 dojo.event.browser=new function(){
-var _2c5=0;
-this.normalizedEventName=function(_2c6){
-switch(_2c6){
+var _2c1=0;
+this.normalizedEventName=function(_2c2){
+switch(_2c2){
 case "CheckboxStateChange":
 case "DOMAttrModified":
 case "DOMMenuItemActive":
@@ -97136,10 +58902,11 @@
 case "DOMNodeInserted":
 case "DOMNodeRemoved":
 case "RadioStateChange":
-return _2c6;
+return _2c2;
 break;
 default:
-return _2c6.toLowerCase();
+var lcn=_2c2.toLowerCase();
+return (lcn.indexOf("on")==0)?lcn.substr(2):lcn;
 break;
 }
 };
@@ -97158,93 +58925,88 @@
 node.__clobberAttrs__=[];
 }
 };
-this.addClobberNodeAttrs=function(node,_2ca){
+this.addClobberNodeAttrs=function(node,_2c7){
 if(!dojo.render.html.ie){
 return;
 }
 this.addClobberNode(node);
-for(var x=0;x<_2ca.length;x++){
-node.__clobberAttrs__.push(_2ca[x]);
+for(var x=0;x<_2c7.length;x++){
+node.__clobberAttrs__.push(_2c7[x]);
 }
 };
-this.removeListener=function(node,_2cd,fp,_2cf){
-if(!_2cf){
-var _2cf=false;
+this.removeListener=function(node,_2ca,fp,_2cc){
+if(!_2cc){
+var _2cc=false;
 }
-_2cd=dojo.event.browser.normalizedEventName(_2cd);
-if((_2cd=="onkey")||(_2cd=="key")){
+_2ca=dojo.event.browser.normalizedEventName(_2ca);
+if(_2ca=="key"){
 if(dojo.render.html.ie){
-this.removeListener(node,"onkeydown",fp,_2cf);
+this.removeListener(node,"onkeydown",fp,_2cc);
 }
-_2cd="onkeypress";
+_2ca="keypress";
 }
-if(_2cd.substr(0,2)=="on"){
-_2cd=_2cd.substr(2);
-}
 if(node.removeEventListener){
-node.removeEventListener(_2cd,fp,_2cf);
+node.removeEventListener(_2ca,fp,_2cc);
 }
 };
-this.addListener=function(node,_2d1,fp,_2d3,_2d4){
+this.addListener=function(node,_2ce,fp,_2d0,_2d1){
 if(!node){
 return;
 }
-if(!_2d3){
-var _2d3=false;
+if(!_2d0){
+var _2d0=false;
 }
-_2d1=dojo.event.browser.normalizedEventName(_2d1);
-if((_2d1=="onkey")||(_2d1=="key")){
+_2ce=dojo.event.browser.normalizedEventName(_2ce);
+if(_2ce=="key"){
 if(dojo.render.html.ie){
-this.addListener(node,"onkeydown",fp,_2d3,_2d4);
+this.addListener(node,"onkeydown",fp,_2d0,_2d1);
 }
-_2d1="onkeypress";
+_2ce="keypress";
 }
-if(_2d1.substr(0,2)!="on"){
-_2d1="on"+_2d1;
-}
-if(!_2d4){
-var _2d5=function(evt){
+if(!_2d1){
+var _2d2=function(evt){
 if(!evt){
 evt=window.event;
 }
 var ret=fp(dojo.event.browser.fixEvent(evt,this));
-if(_2d3){
+if(_2d0){
 dojo.event.browser.stopEvent(evt);
 }
 return ret;
 };
 }else{
-_2d5=fp;
+_2d2=fp;
 }
 if(node.addEventListener){
-node.addEventListener(_2d1.substr(2),_2d5,_2d3);
-return _2d5;
+node.addEventListener(_2ce,_2d2,_2d0);
+return _2d2;
 }else{
-if(typeof node[_2d1]=="function"){
-var _2d8=node[_2d1];
-node[_2d1]=function(e){
-_2d8(e);
-return _2d5(e);
+_2ce="on"+_2ce;
+if(typeof node[_2ce]=="function"){
+var _2d5=node[_2ce];
+node[_2ce]=function(e){
+_2d5(e);
+return _2d2(e);
 };
 }else{
-node[_2d1]=_2d5;
+node[_2ce]=_2d2;
 }
 if(dojo.render.html.ie){
-this.addClobberNodeAttrs(node,[_2d1]);
+this.addClobberNodeAttrs(node,[_2ce]);
 }
-return _2d5;
+return _2d2;
 }
 };
 this.isEvent=function(obj){
 return (typeof obj!="undefined")&&(obj)&&(typeof Event!="undefined")&&(obj.eventPhase);
 };
 this.currentEvent=null;
-this.callListener=function(_2db,_2dc){
-if(typeof _2db!="function"){
-dojo.raise("listener not a function: "+_2db);
+this.callListener=function(_2d8,_2d9){
+if(typeof _2d8!="function"){
+dojo.raise("listener not a function: "+_2d8);
 }
-dojo.event.browser.currentEvent.currentTarget=_2dc;
-return _2db.call(_2dc,dojo.event.browser.currentEvent);
+dojo.event.browser.currentEvent.currentTarget=_2d9;
+return _2d8.call(_2d9,dojo.event.browser.currentEvent);
 };
 this._stopPropagation=function(){
 dojo.event.browser.currentEvent.cancelBubble=true;
@@ -97257,7 +59019,7 @@
 for(var key in this.keys){
 this.revKeys[this.keys[key]]=key;
 }
-this.fixEvent=function(evt,_2df){
+this.fixEvent=function(evt,_2dc){
 if(!evt){
 if(window["event"]){
 evt=window.event;
@@ -97334,14 +59096,14 @@
 break;
 default:
 if(evt.ctrlKey||evt.altKey){
-var _2e1=evt.keyCode;
-if(_2e1>=65&&_2e1<=90&&evt.shiftKey==false){
-_2e1+=32;
+var _2de=evt.keyCode;
+if(_2de>=65&&_2de<=90&&evt.shiftKey==false){
+_2de+=32;
 }
-if(_2e1>=1&&_2e1<=26&&evt.ctrlKey){
-_2e1+=96;
+if(_2de>=1&&_2de<=26&&evt.ctrlKey){
+_2de+=96;
 }
-evt.key=String.fromCharCode(_2e1);
+evt.key=String.fromCharCode(_2de);
 }
 }
 }else{
@@ -97367,11 +59129,11 @@
 evt.key=evt.which;
 break;
 default:
-var _2e1=evt.which;
+var _2de=evt.which;
 if((evt.ctrlKey||evt.altKey||evt.metaKey)&&(evt.which>=65&&evt.which<=90&&evt.shiftKey==false)){
-_2e1+=32;
+_2de+=32;
 }
-evt.key=String.fromCharCode(_2e1);
+evt.key=String.fromCharCode(_2de);
 }
 }
 }
@@ -97476,7 +59238,7 @@
 evt.target=evt.srcElement;
 }
 if(!evt.currentTarget){
-evt.currentTarget=(_2df?_2df:evt.srcElement);
+evt.currentTarget=(_2dc?_2dc:evt.srcElement);
 }
 if(!evt.layerX){
 evt.layerX=evt.offsetX;
@@ -97485,12 +59247,12 @@
 evt.layerY=evt.offsetY;
 }
 var doc=(evt.srcElement&&evt.srcElement.ownerDocument)?evt.srcElement.ownerDocument:document;
-var _2e3=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
+var _2e0=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
 if(!evt.pageX){
-evt.pageX=evt.clientX+(_2e3.scrollLeft||0);
+evt.pageX=evt.clientX+(_2e0.scrollLeft||0);
 }
 if(!evt.pageY){
-evt.pageY=evt.clientY+(_2e3.scrollTop||0);
+evt.pageY=evt.clientY+(_2e0.scrollTop||0);
 }
 if(evt.type=="mouseover"){
 evt.relatedTarget=evt.fromElement;
@@ -97515,41 +59277,42 @@
 }
 };
 };
+dojo.kwCompoundRequire({common:["dojo.event.common","dojo.event.topic"],browser:["dojo.event.browser"],dashboard:["dojo.event.browser"]});
 dojo.provide("dojo.event.*");
 dojo.provide("dojo.widget.Manager");
 dojo.widget.manager=new function(){
 this.widgets=[];
 this.widgetIds=[];
 this.topWidgets={};
-var _2e5={};
-var _2e6=[];
-this.getUniqueId=function(_2e7){
-var _2e8;
+var _2e2={};
+var _2e3=[];
+this.getUniqueId=function(_2e4){
+var _2e5;
 do{
-_2e8=_2e7+"_"+(_2e5[_2e7]!=undefined?++_2e5[_2e7]:_2e5[_2e7]=0);
-}while(this.getWidgetById(_2e8));
-return _2e8;
+_2e5=_2e4+"_"+(_2e2[_2e4]!=undefined?++_2e2[_2e4]:_2e2[_2e4]=0);
+}while(this.getWidgetById(_2e5));
+return _2e5;
 };
-this.add=function(_2e9){
-this.widgets.push(_2e9);
-if(!_2e9.extraArgs["id"]){
-_2e9.extraArgs["id"]=_2e9.extraArgs["ID"];
+this.add=function(_2e6){
+this.widgets.push(_2e6);
+if(!_2e6.extraArgs["id"]){
+_2e6.extraArgs["id"]=_2e6.extraArgs["ID"];
 }
-if(_2e9.widgetId==""){
-if(_2e9["id"]){
-_2e9.widgetId=_2e9["id"];
+if(_2e6.widgetId==""){
+if(_2e6["id"]){
+_2e6.widgetId=_2e6["id"];
 }else{
-if(_2e9.extraArgs["id"]){
-_2e9.widgetId=_2e9.extraArgs["id"];
+if(_2e6.extraArgs["id"]){
+_2e6.widgetId=_2e6.extraArgs["id"];
 }else{
-_2e9.widgetId=this.getUniqueId(_2e9.ns+"_"+_2e9.widgetType);
+_2e6.widgetId=this.getUniqueId(_2e6.ns+"_"+_2e6.widgetType);
 }
 }
 }
-if(this.widgetIds[_2e9.widgetId]){
-dojo.debug("widget ID collision on ID: "+_2e9.widgetId);
+if(this.widgetIds[_2e6.widgetId]){
+dojo.debug("widget ID collision on ID: "+_2e6.widgetId);
 }
-this.widgetIds[_2e9.widgetId]=_2e9;
+this.widgetIds[_2e6.widgetId]=_2e6;
 };
 this.destroyAll=function(){
 for(var x=this.widgets.length-1;x>=0;x--){
@@ -97561,13 +59324,14 @@
 }
 }
 };
-this.remove=function(_2eb){
-if(dojo.lang.isNumber(_2eb)){
-var tw=this.widgets[_2eb].widgetId;
+this.remove=function(_2e8){
+if(dojo.lang.isNumber(_2e8)){
+var tw=this.widgets[_2e8].widgetId;
+delete this.topWidgets[tw];
 delete this.widgetIds[tw];
-this.widgets.splice(_2eb,1);
+this.widgets.splice(_2e8,1);
 }else{
-this.removeById(_2eb);
+this.removeById(_2e8);
 }
 };
 this.removeById=function(id){
@@ -97593,31 +59357,31 @@
 };
 this.getWidgetsByType=function(type){
 var lt=type.toLowerCase();
-var _2f2=(type.indexOf(":")<0?function(x){
+var _2ef=(type.indexOf(":")<0?function(x){
 return x.widgetType.toLowerCase();
 }:function(x){
 return x.getNamespacedType();
 });
 var ret=[];
 dojo.lang.forEach(this.widgets,function(x){
-if(_2f2(x)==lt){
+if(_2ef(x)==lt){
 ret.push(x);
 }
 });
 return ret;
 };
-this.getWidgetsByFilter=function(_2f7,_2f8){
+this.getWidgetsByFilter=function(_2f4,_2f5){
 var ret=[];
 dojo.lang.every(this.widgets,function(x){
-if(_2f7(x)){
+if(_2f4(x)){
 ret.push(x);
-if(_2f8){
+if(_2f5){
 return false;
 }
 }
 return true;
 });
-return (_2f8?ret[0]:ret);
+return (_2f5?ret[0]:ret);
 };
 this.getAllWidgets=function(){
 return this.widgets.concat();
@@ -97636,99 +59400,99 @@
 this.byType=this.getWidgetsByType;
 this.byFilter=this.getWidgetsByFilter;
 this.byNode=this.getWidgetByNode;
-var _2fe={};
-var _2ff=["dojo.widget"];
-for(var i=0;i<_2ff.length;i++){
-_2ff[_2ff[i]]=true;
+var _2fb={};
+var _2fc=["dojo.widget"];
+for(var i=0;i<_2fc.length;i++){
+_2fc[_2fc[i]]=true;
 }
-this.registerWidgetPackage=function(_301){
-if(!_2ff[_301]){
-_2ff[_301]=true;
-_2ff.push(_301);
+this.registerWidgetPackage=function(_2fe){
+if(!_2fc[_2fe]){
+_2fc[_2fe]=true;
+_2fc.push(_2fe);
 }
 };
 this.getWidgetPackageList=function(){
-return dojo.lang.map(_2ff,function(elt){
+return dojo.lang.map(_2fc,function(elt){
 return (elt!==true?elt:undefined);
 });
 };
-this.getImplementation=function(_303,_304,_305,ns){
-var impl=this.getImplementationName(_303,ns);
+this.getImplementation=function(_300,_301,_302,ns){
+var impl=this.getImplementationName(_300,ns);
 if(impl){
-var ret=_304?new impl(_304):new impl();
+var ret=_301?new impl(_301):new impl();
 return ret;
 }
 };
 function buildPrefixCache(){
-for(var _309 in dojo.render){
-if(dojo.render[_309]["capable"]===true){
-var _30a=dojo.render[_309].prefixes;
-for(var i=0;i<_30a.length;i++){
-_2e6.push(_30a[i].toLowerCase());
+for(var _306 in dojo.render){
+if(dojo.render[_306]["capable"]===true){
+var _307=dojo.render[_306].prefixes;
+for(var i=0;i<_307.length;i++){
+_2e3.push(_307[i].toLowerCase());
 }
 }
 }
 }
-var _30c=function(_30d,_30e){
-if(!_30e){
+var _309=function(_30a,_30b){
+if(!_30b){
 return null;
 }
-for(var i=0,l=_2e6.length,_311;i<=l;i++){
-_311=(i<l?_30e[_2e6[i]]:_30e);
-if(!_311){
+for(var i=0,l=_2e3.length,_30e;i<=l;i++){
+_30e=(i<l?_30b[_2e3[i]]:_30b);
+if(!_30e){
 continue;
 }
-for(var name in _311){
-if(name.toLowerCase()==_30d){
-return _311[name];
+for(var name in _30e){
+if(name.toLowerCase()==_30a){
+return _30e[name];
 }
 }
 }
 return null;
 };
-var _313=function(_314,_315){
-var _316=dojo.evalObjPath(_315,false);
-return (_316?_30c(_314,_316):null);
+var _310=function(_311,_312){
+var _313=dojo.evalObjPath(_312,false);
+return (_313?_309(_311,_313):null);
 };
-this.getImplementationName=function(_317,ns){
-var _319=_317.toLowerCase();
+this.getImplementationName=function(_314,ns){
+var _316=_314.toLowerCase();
 ns=ns||"dojo";
-var imps=_2fe[ns]||(_2fe[ns]={});
-var impl=imps[_319];
+var imps=_2fb[ns]||(_2fb[ns]={});
+var impl=imps[_316];
 if(impl){
 return impl;
 }
-if(!_2e6.length){
+if(!_2e3.length){
 buildPrefixCache();
 }
-var _31c=dojo.ns.get(ns);
-if(!_31c){
+var _319=dojo.ns.get(ns);
+if(!_319){
 dojo.ns.register(ns,ns+".widget");
-_31c=dojo.ns.get(ns);
+_319=dojo.ns.get(ns);
 }
-if(_31c){
-_31c.resolve(_317);
+if(_319){
+_319.resolve(_314);
 }
-impl=_313(_319,_31c.module);
+impl=_310(_316,_319.module);
 if(impl){
-return (imps[_319]=impl);
+return (imps[_316]=impl);
 }
-_31c=dojo.ns.require(ns);
-if((_31c)&&(_31c.resolver)){
-_31c.resolve(_317);
-impl=_313(_319,_31c.module);
+_319=dojo.ns.require(ns);
+if((_319)&&(_319.resolver)){
+_319.resolve(_314);
+impl=_310(_316,_319.module);
 if(impl){
-return (imps[_319]=impl);
+return (imps[_316]=impl);
 }
 }
-dojo.deprecated("dojo.widget.Manager.getImplementationName","Could not locate widget implementation for \""+_317+"\" in \""+_31c.module+"\" registered to namespace \""+_31c.name+"\". "+"Developers must specify correct namespaces for all non-Dojo widgets","0.5");
-for(var i=0;i<_2ff.length;i++){
-impl=_313(_319,_2ff[i]);
+dojo.deprecated("dojo.widget.Manager.getImplementationName","Could not locate widget implementation for \""+_314+"\" in \""+_319.module+"\" registered to namespace \""+_319.name+"\". "+"Developers must specify correct namespaces for all non-Dojo widgets","0.5");
+for(var i=0;i<_2fc.length;i++){
+impl=_310(_316,_2fc[i]);
 if(impl){
-return (imps[_319]=impl);
+return (imps[_316]=impl);
 }
 }
-throw new Error("Could not locate widget implementation for \""+_317+"\" in \""+_31c.module+"\" registered to namespace \""+_31c.name+"\"");
+throw new Error("Could not locate widget implementation for \""+_314+"\" in \""+_319.module+"\" registered to namespace \""+_319.name+"\"");
 };
 this.resizing=false;
 this.onWindowResized=function(){
@@ -97738,9 +59502,9 @@
 try{
 this.resizing=true;
 for(var id in this.topWidgets){
-var _31f=this.topWidgets[id];
-if(_31f.checkSize){
-_31f.checkSize();
+var _31c=this.topWidgets[id];
+if(_31c.checkSize){
+_31c.checkSize();
 }
 }
 }
@@ -97759,8 +59523,8 @@
 var dw=dojo.widget;
 var dwm=dw.manager;
 var h=dojo.lang.curry(dojo.lang,"hitch",dwm);
-var g=function(_324,_325){
-dw[(_325||_324)]=h(_324);
+var g=function(_321,_322){
+dw[(_322||_321)]=h(_321);
 };
 g("add","addWidget");
 g("destroyAll","destroyAllWidgets");
@@ -97774,11 +59538,11 @@
 g("getWidgetsByFilter","byFilter");
 g("getWidgetByNode","byNode");
 dw.all=function(n){
-var _327=dwm.getAllWidgets.apply(dwm,arguments);
+var _324=dwm.getAllWidgets.apply(dwm,arguments);
 if(arguments.length>0){
-return _327[n];
+return _324[n];
 }
-return _327;
+return _324;
 };
 g("registerWidgetPackage");
 g("getImplementation","getWidgetImplementation");
@@ -97792,15 +59556,20 @@
 this.dojoUri=function(uri){
 return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(),uri);
 };
-this.moduleUri=function(_329,uri){
-var loc=dojo.hostenv.getModuleSymbols(_329).join("/");
+this.moduleUri=function(_326,uri){
+var loc=dojo.hostenv.getModuleSymbols(_326).join("/");
 if(!loc){
 return null;
 }
 if(loc.lastIndexOf("/")!=loc.length-1){
 loc+="/";
 }
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri()+loc,uri);
+var _329=loc.indexOf(":");
+var _32a=loc.indexOf("/");
+if(loc.charAt(0)!="/"&&(_329==-1||_329>_32a)){
+loc=dojo.hostenv.getBaseScriptUri()+loc;
+}
+return new dojo.uri.Uri(loc,uri);
 };
 this.Uri=function(){
 var uri=arguments[0];
@@ -97808,20 +59577,20 @@
 if(!arguments[i]){
 continue;
 }
-var _32e=new dojo.uri.Uri(arguments[i].toString());
-var _32f=new dojo.uri.Uri(uri.toString());
-if((_32e.path=="")&&(_32e.scheme==null)&&(_32e.authority==null)&&(_32e.query==null)){
-if(_32e.fragment!=null){
-_32f.fragment=_32e.fragment;
+var _32d=new dojo.uri.Uri(arguments[i].toString());
+var _32e=new dojo.uri.Uri(uri.toString());
+if((_32d.path=="")&&(_32d.scheme==null)&&(_32d.authority==null)&&(_32d.query==null)){
+if(_32d.fragment!=null){
+_32e.fragment=_32d.fragment;
 }
-_32e=_32f;
+_32d=_32e;
 }else{
-if(_32e.scheme==null){
-_32e.scheme=_32f.scheme;
-if(_32e.authority==null){
-_32e.authority=_32f.authority;
-if(_32e.path.charAt(0)!="/"){
-var path=_32f.path.substring(0,_32f.path.lastIndexOf("/")+1)+_32e.path;
+if(_32d.scheme==null){
+_32d.scheme=_32e.scheme;
+if(_32d.authority==null){
+_32d.authority=_32e.authority;
+if(_32d.path.charAt(0)!="/"){
+var path=_32e.path.substring(0,_32e.path.lastIndexOf("/")+1)+_32d.path;
 var segs=path.split("/");
 for(var j=0;j<segs.length;j++){
 if(segs[j]=="."){
@@ -97843,37 +59612,37 @@
 }
 }
 }
-_32e.path=segs.join("/");
+_32d.path=segs.join("/");
 }
 }
 }
 }
 uri="";
-if(_32e.scheme!=null){
-uri+=_32e.scheme+":";
+if(_32d.scheme!=null){
+uri+=_32d.scheme+":";
 }
-if(_32e.authority!=null){
-uri+="//"+_32e.authority;
+if(_32d.authority!=null){
+uri+="//"+_32d.authority;
 }
-uri+=_32e.path;
-if(_32e.query!=null){
-uri+="?"+_32e.query;
+uri+=_32d.path;
+if(_32d.query!=null){
+uri+="?"+_32d.query;
 }
-if(_32e.fragment!=null){
-uri+="#"+_32e.fragment;
+if(_32d.fragment!=null){
+uri+="#"+_32d.fragment;
 }
 }
 this.uri=uri.toString();
-var _333="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
-var r=this.uri.match(new RegExp(_333));
+var _332="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
+var r=this.uri.match(new RegExp(_332));
 this.scheme=r[2]||(r[1]?"":null);
 this.authority=r[4]||(r[3]?"":null);
 this.path=r[5];
 this.query=r[7]||(r[6]?"":null);
 this.fragment=r[9]||(r[8]?"":null);
 if(this.authority!=null){
-_333="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
-r=this.authority.match(new RegExp(_333));
+_332="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
+r=this.authority.match(new RegExp(_332));
 this.user=r[3]||null;
 this.password=r[4]||null;
 this.host=r[5];
@@ -97884,6 +59653,7 @@
 };
 };
 };
+dojo.kwCompoundRequire({common:[["dojo.uri.Uri",false,false]]});
 dojo.provide("dojo.uri.*");
 dojo.provide("dojo.html.common");
 dojo.lang.mixin(dojo.html,dojo.dom);
@@ -97902,24 +59672,24 @@
 return t;
 };
 dojo.html.getViewport=function(){
-var _337=dojo.global();
-var _338=dojo.doc();
+var _336=dojo.global();
+var _337=dojo.doc();
 var w=0;
 var h=0;
 if(dojo.render.html.mozilla){
-w=_338.documentElement.clientWidth;
-h=_337.innerHeight;
+w=_337.documentElement.clientWidth;
+h=_336.innerHeight;
 }else{
-if(!dojo.render.html.opera&&_337.innerWidth){
-w=_337.innerWidth;
-h=_337.innerHeight;
+if(!dojo.render.html.opera&&_336.innerWidth){
+w=_336.innerWidth;
+h=_336.innerHeight;
 }else{
-if(!dojo.render.html.opera&&dojo.exists(_338,"documentElement.clientWidth")){
-var w2=_338.documentElement.clientWidth;
+if(!dojo.render.html.opera&&dojo.exists(_337,"documentElement.clientWidth")){
+var w2=_337.documentElement.clientWidth;
 if(!w||w2&&w2<w){
 w=w2;
 }
-h=_338.documentElement.clientHeight;
+h=_337.documentElement.clientHeight;
 }else{
 if(dojo.body().clientWidth){
 w=dojo.body().clientWidth;
@@ -97931,23 +59701,23 @@
 return {width:w,height:h};
 };
 dojo.html.getScroll=function(){
-var _33c=dojo.global();
-var _33d=dojo.doc();
-var top=_33c.pageYOffset||_33d.documentElement.scrollTop||dojo.body().scrollTop||0;
-var left=_33c.pageXOffset||_33d.documentElement.scrollLeft||dojo.body().scrollLeft||0;
+var _33b=dojo.global();
+var _33c=dojo.doc();
+var top=_33b.pageYOffset||_33c.documentElement.scrollTop||dojo.body().scrollTop||0;
+var left=_33b.pageXOffset||_33c.documentElement.scrollLeft||dojo.body().scrollLeft||0;
 return {top:top,left:left,offset:{x:left,y:top}};
 };
 dojo.html.getParentByType=function(node,type){
-var _342=dojo.doc();
-var _343=dojo.byId(node);
+var _341=dojo.doc();
+var _342=dojo.byId(node);
 type=type.toLowerCase();
-while((_343)&&(_343.nodeName.toLowerCase()!=type)){
-if(_343==(_342["body"]||_342["documentElement"])){
+while((_342)&&(_342.nodeName.toLowerCase()!=type)){
+if(_342==(_341["body"]||_341["documentElement"])){
 return null;
 }
-_343=_343.parentNode;
+_342=_342.parentNode;
 }
-return _343;
+return _342;
 };
 dojo.html.getAttribute=function(node,attr){
 node=dojo.byId(node);
@@ -97980,17 +59750,17 @@
 };
 dojo.html.getCursorPosition=function(e){
 e=e||dojo.global().event;
-var _34b={x:0,y:0};
+var _34a={x:0,y:0};
 if(e.pageX||e.pageY){
-_34b.x=e.pageX;
-_34b.y=e.pageY;
+_34a.x=e.pageX;
+_34a.y=e.pageY;
 }else{
 var de=dojo.doc().documentElement;
 var db=dojo.body();
-_34b.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
-_34b.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
+_34a.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
+_34a.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
 }
-return _34b;
+return _34a;
 };
 dojo.html.isTag=function(node){
 node=dojo.byId(node);
@@ -98006,9 +59776,9 @@
 if(dojo.render.html.ie&&!dojo.render.html.ie70){
 if(window.location.href.substr(0,6).toLowerCase()!="https:"){
 (function(){
-var _350=dojo.doc().createElement("script");
-_350.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
-dojo.doc().getElementsByTagName("head")[0].appendChild(_350);
+var _34f=dojo.doc().createElement("script");
+_34f.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
+dojo.doc().getElementsByTagName("head")[0].appendChild(_34f);
 })();
 }
 }else{
@@ -98016,20 +59786,20 @@
 return doc.createElement(tag);
 };
 }
-dojo.html._callDeprecated=function(_353,_354,args,_356,_357){
-dojo.deprecated("dojo.html."+_353,"replaced by dojo.html."+_354+"("+(_356?"node, {"+_356+": "+_356+"}":"")+")"+(_357?"."+_357:""),"0.5");
-var _358=[];
-if(_356){
-var _359={};
-_359[_356]=args[1];
-_358.push(args[0]);
-_358.push(_359);
+dojo.html._callDeprecated=function(_352,_353,args,_355,_356){
+dojo.deprecated("dojo.html."+_352,"replaced by dojo.html."+_353+"("+(_355?"node, {"+_355+": "+_355+"}":"")+")"+(_356?"."+_356:""),"0.5");
+var _357=[];
+if(_355){
+var _358={};
+_358[_355]=args[1];
+_357.push(args[0]);
+_357.push(_358);
 }else{
-_358=args;
+_357=args;
 }
-var ret=dojo.html[_354].apply(dojo.html,args);
-if(_357){
-return ret[_357];
+var ret=dojo.html[_353].apply(dojo.html,args);
+if(_356){
+return ret[_356];
 }else{
 return ret;
 }
@@ -98053,7 +59823,7 @@
 return dojo.html._callDeprecated("getScrollOffset","getScroll",arguments,null,"offset");
 };
 dojo.provide("dojo.a11y");
-dojo.a11y={imgPath:dojo.uri.dojoUri("src/widget/templates/images"),doAccessibleCheck:true,accessible:null,checkAccessible:function(){
+dojo.a11y={imgPath:dojo.uri.moduleUri("dojo.widget","templates/images"),doAccessibleCheck:true,accessible:null,checkAccessible:function(){
 if(this.accessible===null){
 this.accessible=false;
 if(this.doAccessibleCheck==true){
@@ -98067,22 +59837,22 @@
 var div=document.createElement("div");
 div.style.backgroundImage="url(\""+this.imgPath+"/tab_close.gif\")";
 dojo.body().appendChild(div);
-var _35c=null;
+var _35b=null;
 if(window.getComputedStyle){
-var _35d=getComputedStyle(div,"");
-_35c=_35d.getPropertyValue("background-image");
+var _35c=getComputedStyle(div,"");
+_35b=_35c.getPropertyValue("background-image");
 }else{
-_35c=div.currentStyle.backgroundImage;
+_35b=div.currentStyle.backgroundImage;
 }
-var _35e=false;
-if(_35c!=null&&(_35c=="none"||_35c=="url(invalid-url:)")){
+var _35d=false;
+if(_35b!=null&&(_35b=="none"||_35b=="url(invalid-url:)")){
 this.accessible=true;
 }
 dojo.body().removeChild(div);
 }
 return this.accessible;
-},setCheckAccessible:function(_35f){
-this.doAccessibleCheck=_35f;
+},setCheckAccessible:function(_35e){
+this.doAccessibleCheck=_35e;
 },setAccessibleMode:function(){
 if(this.accessible===null){
 if(this.checkAccessible()){
@@ -98109,52 +59879,52 @@
 this.notifyChildrenOfResize();
 },notifyChildrenOfResize:function(){
 for(var i=0;i<this.children.length;i++){
-var _361=this.children[i];
-if(_361.onResized){
-_361.onResized();
+var _360=this.children[i];
+if(_360.onResized){
+_360.onResized();
 }
 }
-},create:function(args,_363,_364,ns){
+},create:function(args,_362,_363,ns){
 if(ns){
 this.ns=ns;
 }
-this.satisfyPropertySets(args,_363,_364);
-this.mixInProperties(args,_363,_364);
-this.postMixInProperties(args,_363,_364);
+this.satisfyPropertySets(args,_362,_363);
+this.mixInProperties(args,_362,_363);
+this.postMixInProperties(args,_362,_363);
 dojo.widget.manager.add(this);
-this.buildRendering(args,_363,_364);
-this.initialize(args,_363,_364);
-this.postInitialize(args,_363,_364);
-this.postCreate(args,_363,_364);
+this.buildRendering(args,_362,_363);
+this.initialize(args,_362,_363);
+this.postInitialize(args,_362,_363);
+this.postCreate(args,_362,_363);
 return this;
-},destroy:function(_366){
+},destroy:function(_365){
 if(this.parent){
 this.parent.removeChild(this);
 }
 this.destroyChildren();
 this.uninitialize();
-this.destroyRendering(_366);
+this.destroyRendering(_365);
 dojo.widget.manager.removeById(this.widgetId);
 },destroyChildren:function(){
-var _367;
+var _366;
 var i=0;
 while(this.children.length>i){
-_367=this.children[i];
-if(_367 instanceof dojo.widget.Widget){
-this.removeChild(_367);
-_367.destroy();
+_366=this.children[i];
+if(_366 instanceof dojo.widget.Widget){
+this.removeChild(_366);
+_366.destroy();
 continue;
 }
 i++;
 }
-},getChildrenOfType:function(type,_36a){
+},getChildrenOfType:function(type,_369){
 var ret=[];
-var _36c=dojo.lang.isFunction(type);
-if(!_36c){
+var _36b=dojo.lang.isFunction(type);
+if(!_36b){
 type=type.toLowerCase();
 }
 for(var x=0;x<this.children.length;x++){
-if(_36c){
+if(_36b){
 if(this.children[x] instanceof type){
 ret.push(this.children[x]);
 }
@@ -98163,24 +59933,24 @@
 ret.push(this.children[x]);
 }
 }
-if(_36a){
-ret=ret.concat(this.children[x].getChildrenOfType(type,_36a));
+if(_369){
+ret=ret.concat(this.children[x].getChildrenOfType(type,_369));
 }
 }
 return ret;
 },getDescendants:function(){
-var _36e=[];
-var _36f=[this];
+var _36d=[];
+var _36e=[this];
 var elem;
-while((elem=_36f.pop())){
-_36e.push(elem);
+while((elem=_36e.pop())){
+_36d.push(elem);
 if(elem.children){
 dojo.lang.forEach(elem.children,function(elem){
-_36f.push(elem);
+_36e.push(elem);
 });
 }
 }
-return _36e;
+return _36d;
 },isFirstChild:function(){
 return this===this.parent.children[0];
 },isLastChild:function(){
@@ -98194,29 +59964,29 @@
 }
 return;
 }
-var _376;
-var _377=dojo.widget.lcArgsCache[this.widgetType];
-if(_377==null){
-_377={};
+var _375;
+var _376=dojo.widget.lcArgsCache[this.widgetType];
+if(_376==null){
+_376={};
 for(var y in this){
-_377[((new String(y)).toLowerCase())]=y;
+_376[((new String(y)).toLowerCase())]=y;
 }
-dojo.widget.lcArgsCache[this.widgetType]=_377;
+dojo.widget.lcArgsCache[this.widgetType]=_376;
 }
-var _379={};
+var _378={};
 for(var x in args){
 if(!this[x]){
-var y=_377[(new String(x)).toLowerCase()];
+var y=_376[(new String(x)).toLowerCase()];
 if(y){
 args[y]=args[x];
 x=y;
 }
 }
-if(_379[x]){
+if(_378[x]){
 continue;
 }
-_379[x]=true;
-if((typeof this[x])!=(typeof _376)){
+_378[x]=true;
+if((typeof this[x])!=(typeof _375)){
 if(typeof args[x]!="string"){
 this[x]=args[x];
 }else{
@@ -98247,11 +60017,11 @@
 if(this[x] instanceof dojo.uri.Uri){
 this[x]=dojo.uri.dojoUri(args[x]);
 }else{
-var _37b=args[x].split(";");
-for(var y=0;y<_37b.length;y++){
-var si=_37b[y].indexOf(":");
-if((si!=-1)&&(_37b[y].length>si)){
-this[x][_37b[y].substr(0,si).replace(/^\s+|\s+$/g,"")]=_37b[y].substr(si+1);
+var _37a=args[x].split(";");
+for(var y=0;y<_37a.length;y++){
+var si=_37a[y].indexOf(":");
+if((si!=-1)&&(_37a[y].length>si)){
+this[x][_37a[y].substr(0,si).replace(/^\s+|\s+$/g,"")]=_37a[y].substr(si+1);
 }
 }
 }
@@ -98269,34 +60039,34 @@
 this.extraArgs[x.toLowerCase()]=args[x];
 }
 }
-},postMixInProperties:function(args,frag,_37f){
-},initialize:function(args,frag,_382){
+},postMixInProperties:function(args,frag,_37e){
+},initialize:function(args,frag,_381){
 return false;
-},postInitialize:function(args,frag,_385){
+},postInitialize:function(args,frag,_384){
 return false;
-},postCreate:function(args,frag,_388){
+},postCreate:function(args,frag,_387){
 return false;
 },uninitialize:function(){
 return false;
-},buildRendering:function(args,frag,_38b){
+},buildRendering:function(args,frag,_38a){
 dojo.unimplemented("dojo.widget.Widget.buildRendering, on "+this.toString()+", ");
 return false;
 },destroyRendering:function(){
 dojo.unimplemented("dojo.widget.Widget.destroyRendering");
 return false;
-},addedTo:function(_38c){
-},addChild:function(_38d){
+},addedTo:function(_38b){
+},addChild:function(_38c){
 dojo.unimplemented("dojo.widget.Widget.addChild");
 return false;
-},removeChild:function(_38e){
+},removeChild:function(_38d){
 for(var x=0;x<this.children.length;x++){
-if(this.children[x]===_38e){
+if(this.children[x]===_38d){
 this.children.splice(x,1);
-_38e.parent=null;
+_38d.parent=null;
 break;
 }
 }
-return _38e;
+return _38d;
 },getPreviousSibling:function(){
 var idx=this.getParentIndex();
 if(idx<=0){
@@ -98322,30 +60092,30 @@
 dojo.widget.tags.addParseTreeHandler=function(type){
 dojo.deprecated("addParseTreeHandler",". ParseTreeHandlers are now reserved for components. Any unfiltered DojoML tag without a ParseTreeHandler is assumed to be a widget","0.5");
 };
-dojo.widget.tags["dojo:propertyset"]=function(_393,_394,_395){
-var _396=_394.parseProperties(_393["dojo:propertyset"]);
+dojo.widget.tags["dojo:propertyset"]=function(_392,_393,_394){
+var _395=_393.parseProperties(_392["dojo:propertyset"]);
 };
-dojo.widget.tags["dojo:connect"]=function(_397,_398,_399){
-var _39a=_398.parseProperties(_397["dojo:connect"]);
+dojo.widget.tags["dojo:connect"]=function(_396,_397,_398){
+var _399=_397.parseProperties(_396["dojo:connect"]);
 };
-dojo.widget.buildWidgetFromParseTree=function(type,frag,_39d,_39e,_39f,_3a0){
+dojo.widget.buildWidgetFromParseTree=function(type,frag,_39c,_39d,_39e,_39f){
 dojo.a11y.setAccessibleMode();
-var _3a1=type.split(":");
-_3a1=(_3a1.length==2)?_3a1[1]:type;
-var _3a2=_3a0||_39d.parseProperties(frag[frag["ns"]+":"+_3a1]);
-var _3a3=dojo.widget.manager.getImplementation(_3a1,null,null,frag["ns"]);
-if(!_3a3){
+var _3a0=type.split(":");
+_3a0=(_3a0.length==2)?_3a0[1]:type;
+var _3a1=_39f||_39c.parseProperties(frag[frag["ns"]+":"+_3a0]);
+var _3a2=dojo.widget.manager.getImplementation(_3a0,null,null,frag["ns"]);
+if(!_3a2){
 throw new Error("cannot find \""+type+"\" widget");
 }else{
-if(!_3a3.create){
+if(!_3a2.create){
 throw new Error("\""+type+"\" widget object has no \"create\" method and does not appear to implement *Widget");
 }
 }
-_3a2["dojoinsertionindex"]=_39f;
-var ret=_3a3.create(_3a2,frag,_39e,frag["ns"]);
+_3a1["dojoinsertionindex"]=_39e;
+var ret=_3a2.create(_3a1,frag,_39d,frag["ns"]);
 return ret;
 };
-dojo.widget.defineWidget=function(_3a5,_3a6,_3a7,init,_3a9){
+dojo.widget.defineWidget=function(_3a4,_3a5,_3a6,init,_3a8){
 if(dojo.lang.isString(arguments[3])){
 dojo.widget._defineWidget(arguments[0],arguments[3],arguments[1],arguments[4],arguments[2]);
 }else{
@@ -98365,50 +60135,50 @@
 }
 };
 dojo.widget.defineWidget.renderers="html|svg|vml";
-dojo.widget._defineWidget=function(_3ac,_3ad,_3ae,init,_3b0){
-var _3b1=_3ac.split(".");
-var type=_3b1.pop();
-var regx="\\.("+(_3ad?_3ad+"|":"")+dojo.widget.defineWidget.renderers+")\\.";
-var r=_3ac.search(new RegExp(regx));
-_3b1=(r<0?_3b1.join("."):_3ac.substr(0,r));
-dojo.widget.manager.registerWidgetPackage(_3b1);
-var pos=_3b1.indexOf(".");
-var _3b6=(pos>-1)?_3b1.substring(0,pos):_3b1;
-_3b0=(_3b0)||{};
-_3b0.widgetType=type;
-if((!init)&&(_3b0["classConstructor"])){
-init=_3b0.classConstructor;
-delete _3b0.classConstructor;
+dojo.widget._defineWidget=function(_3ab,_3ac,_3ad,init,_3af){
+var _3b0=_3ab.split(".");
+var type=_3b0.pop();
+var regx="\\.("+(_3ac?_3ac+"|":"")+dojo.widget.defineWidget.renderers+")\\.";
+var r=_3ab.search(new RegExp(regx));
+_3b0=(r<0?_3b0.join("."):_3ab.substr(0,r));
+dojo.widget.manager.registerWidgetPackage(_3b0);
+var pos=_3b0.indexOf(".");
+var _3b5=(pos>-1)?_3b0.substring(0,pos):_3b0;
+_3af=(_3af)||{};
+_3af.widgetType=type;
+if((!init)&&(_3af["classConstructor"])){
+init=_3af.classConstructor;
+delete _3af.classConstructor;
 }
-dojo.declare(_3ac,_3ae,init,_3b0);
+dojo.declare(_3ab,_3ad,init,_3af);
 };
 dojo.provide("dojo.widget.Parse");
-dojo.widget.Parse=function(_3b7){
+dojo.widget.Parse=function(_3b6){
 this.propertySetsList=[];
-this.fragment=_3b7;
-this.createComponents=function(frag,_3b9){
-var _3ba=[];
-var _3bb=false;
+this.fragment=_3b6;
+this.createComponents=function(frag,_3b8){
+var _3b9=[];
+var _3ba=false;
 try{
 if(frag&&frag.tagName&&(frag!=frag.nodeRef)){
-var _3bc=dojo.widget.tags;
+var _3bb=dojo.widget.tags;
 var tna=String(frag.tagName).split(";");
 for(var x=0;x<tna.length;x++){
 var ltn=tna[x].replace(/^\s+|\s+$/g,"").toLowerCase();
 frag.tagName=ltn;
 var ret;
-if(_3bc[ltn]){
-_3bb=true;
-ret=_3bc[ltn](frag,this,_3b9,frag.index);
-_3ba.push(ret);
+if(_3bb[ltn]){
+_3ba=true;
+ret=_3bb[ltn](frag,this,_3b8,frag.index);
+_3b9.push(ret);
 }else{
 if(ltn.indexOf(":")==-1){
 ltn="dojo:"+ltn;
 }
-ret=dojo.widget.buildWidgetFromParseTree(ltn,frag,this,_3b9,frag.index);
+ret=dojo.widget.buildWidgetFromParseTree(ltn,frag,this,_3b8,frag.index);
 if(ret){
-_3bb=true;
-_3ba.push(ret);
+_3ba=true;
+_3b9.push(ret);
 }
 }
 }
@@ -98417,43 +60187,43 @@
 catch(e){
 dojo.debug("dojo.widget.Parse: error:",e);
 }
-if(!_3bb){
-_3ba=_3ba.concat(this.createSubComponents(frag,_3b9));
+if(!_3ba){
+_3b9=_3b9.concat(this.createSubComponents(frag,_3b8));
 }
-return _3ba;
+return _3b9;
 };
-this.createSubComponents=function(_3c1,_3c2){
-var frag,_3c4=[];
-for(var item in _3c1){
-frag=_3c1[item];
-if(frag&&typeof frag=="object"&&(frag!=_3c1.nodeRef)&&(frag!=_3c1.tagName)&&(!dojo.dom.isNode(frag))){
-_3c4=_3c4.concat(this.createComponents(frag,_3c2));
+this.createSubComponents=function(_3c0,_3c1){
+var frag,_3c3=[];
+for(var item in _3c0){
+frag=_3c0[item];
+if(frag&&typeof frag=="object"&&(frag!=_3c0.nodeRef)&&(frag!=_3c0.tagName)&&(!dojo.dom.isNode(frag))){
+_3c3=_3c3.concat(this.createComponents(frag,_3c1));
 }
 }
-return _3c4;
+return _3c3;
 };
-this.parsePropertySets=function(_3c6){
+this.parsePropertySets=function(_3c5){
 return [];
 };
-this.parseProperties=function(_3c7){
-var _3c8={};
-for(var item in _3c7){
-if((_3c7[item]==_3c7.tagName)||(_3c7[item]==_3c7.nodeRef)){
+this.parseProperties=function(_3c6){
+var _3c7={};
+for(var item in _3c6){
+if((_3c6[item]==_3c6.tagName)||(_3c6[item]==_3c6.nodeRef)){
 }else{
-var frag=_3c7[item];
+var frag=_3c6[item];
 if(frag.tagName&&dojo.widget.tags[frag.tagName.toLowerCase()]){
 }else{
 if(frag[0]&&frag[0].value!=""&&frag[0].value!=null){
 try{
 if(item.toLowerCase()=="dataprovider"){
-var _3cb=this;
-this.getDataProvider(_3cb,frag[0].value);
-_3c8.dataProvider=this.dataProvider;
+var _3ca=this;
+this.getDataProvider(_3ca,frag[0].value);
+_3c7.dataProvider=this.dataProvider;
 }
-_3c8[item]=frag[0].value;
-var _3cc=this.parseProperties(frag);
-for(var _3cd in _3cc){
-_3c8[_3cd]=_3cc[_3cd];
+_3c7[item]=frag[0].value;
+var _3cb=this.parseProperties(frag);
+for(var _3cc in _3cb){
+_3c7[_3cc]=_3cb[_3cc];
 }
 }
 catch(e){
@@ -98464,67 +60234,67 @@
 switch(item.toLowerCase()){
 case "checked":
 case "disabled":
-if(typeof _3c8[item]!="boolean"){
-_3c8[item]=true;
+if(typeof _3c7[item]!="boolean"){
+_3c7[item]=true;
 }
 break;
 }
 }
 }
-return _3c8;
+return _3c7;
 };
-this.getDataProvider=function(_3ce,_3cf){
-dojo.io.bind({url:_3cf,load:function(type,_3d1){
+this.getDataProvider=function(_3cd,_3ce){
+dojo.io.bind({url:_3ce,load:function(type,_3d0){
 if(type=="load"){
-_3ce.dataProvider=_3d1;
+_3cd.dataProvider=_3d0;
 }
 },mimetype:"text/javascript",sync:true});
 };
-this.getPropertySetById=function(_3d2){
+this.getPropertySetById=function(_3d1){
 for(var x=0;x<this.propertySetsList.length;x++){
-if(_3d2==this.propertySetsList[x]["id"][0].value){
+if(_3d1==this.propertySetsList[x]["id"][0].value){
 return this.propertySetsList[x];
 }
 }
 return "";
 };
-this.getPropertySetsByType=function(_3d4){
-var _3d5=[];
+this.getPropertySetsByType=function(_3d3){
+var _3d4=[];
 for(var x=0;x<this.propertySetsList.length;x++){
 var cpl=this.propertySetsList[x];
 var cpcc=cpl.componentClass||cpl.componentType||null;
-var _3d9=this.propertySetsList[x]["id"][0].value;
-if(cpcc&&(_3d9==cpcc[0].value)){
-_3d5.push(cpl);
+var _3d8=this.propertySetsList[x]["id"][0].value;
+if(cpcc&&(_3d8==cpcc[0].value)){
+_3d4.push(cpl);
 }
 }
-return _3d5;
+return _3d4;
 };
-this.getPropertySets=function(_3da){
+this.getPropertySets=function(_3d9){
 var ppl="dojo:propertyproviderlist";
-var _3dc=[];
-var _3dd=_3da.tagName;
-if(_3da[ppl]){
-var _3de=_3da[ppl].value.split(" ");
-for(var _3df in _3de){
-if((_3df.indexOf("..")==-1)&&(_3df.indexOf("://")==-1)){
-var _3e0=this.getPropertySetById(_3df);
-if(_3e0!=""){
-_3dc.push(_3e0);
+var _3db=[];
+var _3dc=_3d9.tagName;
+if(_3d9[ppl]){
+var _3dd=_3d9[ppl].value.split(" ");
+for(var _3de in _3dd){
+if((_3de.indexOf("..")==-1)&&(_3de.indexOf("://")==-1)){
+var _3df=this.getPropertySetById(_3de);
+if(_3df!=""){
+_3db.push(_3df);
 }
 }else{
 }
 }
 }
-return this.getPropertySetsByType(_3dd).concat(_3dc);
+return this.getPropertySetsByType(_3dc).concat(_3db);
 };
-this.createComponentFromScript=function(_3e1,_3e2,_3e3,ns){
-_3e3.fastMixIn=true;
-var ltn=(ns||"dojo")+":"+_3e2.toLowerCase();
+this.createComponentFromScript=function(_3e0,_3e1,_3e2,ns){
+_3e2.fastMixIn=true;
+var ltn=(ns||"dojo")+":"+_3e1.toLowerCase();
 if(dojo.widget.tags[ltn]){
-return [dojo.widget.tags[ltn](_3e3,this,null,null,_3e3)];
+return [dojo.widget.tags[ltn](_3e2,this,null,null,_3e2)];
 }
-return [dojo.widget.buildWidgetFromParseTree(ltn,_3e3,this,null,null,_3e3)];
+return [dojo.widget.buildWidgetFromParseTree(ltn,_3e2,this,null,null,_3e2)];
 };
 };
 dojo.widget._parser_collection={"dojo":new dojo.widget.Parse()};
@@ -98537,62 +60307,62 @@
 }
 return this._parser_collection[name];
 };
-dojo.widget.createWidget=function(name,_3e8,_3e9,_3ea){
-var _3eb=false;
-var _3ec=(typeof name=="string");
-if(_3ec){
+dojo.widget.createWidget=function(name,_3e7,_3e8,_3e9){
+var _3ea=false;
+var _3eb=(typeof name=="string");
+if(_3eb){
 var pos=name.indexOf(":");
 var ns=(pos>-1)?name.substring(0,pos):"dojo";
 if(pos>-1){
 name=name.substring(pos+1);
 }
-var _3ef=name.toLowerCase();
-var _3f0=ns+":"+_3ef;
-_3eb=(dojo.byId(name)&&!dojo.widget.tags[_3f0]);
+var _3ee=name.toLowerCase();
+var _3ef=ns+":"+_3ee;
+_3ea=(dojo.byId(name)&&!dojo.widget.tags[_3ef]);
 }
-if((arguments.length==1)&&(_3eb||!_3ec)){
+if((arguments.length==1)&&(_3ea||!_3eb)){
 var xp=new dojo.xml.Parse();
-var tn=_3eb?dojo.byId(name):name;
+var tn=_3ea?dojo.byId(name):name;
 return dojo.widget.getParser().createComponents(xp.parseElement(tn,null,true))[0];
 }
-function fromScript(_3f3,name,_3f5,ns){
-_3f5[_3f0]={dojotype:[{value:_3ef}],nodeRef:_3f3,fastMixIn:true};
-_3f5.ns=ns;
-return dojo.widget.getParser().createComponentFromScript(_3f3,name,_3f5,ns);
+function fromScript(_3f2,name,_3f4,ns){
+_3f4[_3ef]={dojotype:[{value:_3ee}],nodeRef:_3f2,fastMixIn:true};
+_3f4.ns=ns;
+return dojo.widget.getParser().createComponentFromScript(_3f2,name,_3f4,ns);
 }
-_3e8=_3e8||{};
-var _3f7=false;
+_3e7=_3e7||{};
+var _3f6=false;
 var tn=null;
 var h=dojo.render.html.capable;
 if(h){
 tn=document.createElement("span");
 }
-if(!_3e9){
-_3f7=true;
-_3e9=tn;
+if(!_3e8){
+_3f6=true;
+_3e8=tn;
 if(h){
-dojo.body().appendChild(_3e9);
+dojo.body().appendChild(_3e8);
 }
 }else{
-if(_3ea){
-dojo.dom.insertAtPosition(tn,_3e9,_3ea);
+if(_3e9){
+dojo.dom.insertAtPosition(tn,_3e8,_3e9);
 }else{
-tn=_3e9;
+tn=_3e8;
 }
 }
-var _3f9=fromScript(tn,name.toLowerCase(),_3e8,ns);
-if((!_3f9)||(!_3f9[0])||(typeof _3f9[0].widgetType=="undefined")){
+var _3f8=fromScript(tn,name.toLowerCase(),_3e7,ns);
+if((!_3f8)||(!_3f8[0])||(typeof _3f8[0].widgetType=="undefined")){
 throw new Error("createWidget: Creation of \""+name+"\" widget failed.");
 }
 try{
-if(_3f7&&_3f9[0].domNode.parentNode){
-_3f9[0].domNode.parentNode.removeChild(_3f9[0].domNode);
+if(_3f6&&_3f8[0].domNode.parentNode){
+_3f8[0].domNode.parentNode.removeChild(_3f8[0].domNode);
 }
 }
 catch(e){
 dojo.debug(e);
 }
-return _3f9[0];
+return _3f8[0];
 };
 dojo.provide("dojo.html.style");
 dojo.html.getClass=function(node){
@@ -98614,29 +60384,29 @@
 var c=dojo.html.getClass(node);
 return (c=="")?[]:c.split(/\s+/g);
 };
-dojo.html.hasClass=function(node,_3ff){
-return (new RegExp("(^|\\s+)"+_3ff+"(\\s+|$)")).test(dojo.html.getClass(node));
+dojo.html.hasClass=function(node,_3fe){
+return (new RegExp("(^|\\s+)"+_3fe+"(\\s+|$)")).test(dojo.html.getClass(node));
 };
-dojo.html.prependClass=function(node,_401){
-_401+=" "+dojo.html.getClass(node);
-return dojo.html.setClass(node,_401);
+dojo.html.prependClass=function(node,_400){
+_400+=" "+dojo.html.getClass(node);
+return dojo.html.setClass(node,_400);
 };
-dojo.html.addClass=function(node,_403){
-if(dojo.html.hasClass(node,_403)){
+dojo.html.addClass=function(node,_402){
+if(dojo.html.hasClass(node,_402)){
 return false;
 }
-_403=(dojo.html.getClass(node)+" "+_403).replace(/^\s+|\s+$/g,"");
-return dojo.html.setClass(node,_403);
+_402=(dojo.html.getClass(node)+" "+_402).replace(/^\s+|\s+$/g,"");
+return dojo.html.setClass(node,_402);
 };
-dojo.html.setClass=function(node,_405){
+dojo.html.setClass=function(node,_404){
 node=dojo.byId(node);
-var cs=new String(_405);
+var cs=new String(_404);
 try{
 if(typeof node.className=="string"){
 node.className=cs;
 }else{
 if(node.setAttribute){
-node.setAttribute("class",_405);
+node.setAttribute("class",_404);
 node.className=cs;
 }else{
 return false;
@@ -98648,207 +60418,220 @@
 }
 return true;
 };
-dojo.html.removeClass=function(node,_408,_409){
+dojo.html.removeClass=function(node,_407,_408){
 try{
-if(!_409){
-var _40a=dojo.html.getClass(node).replace(new RegExp("(^|\\s+)"+_408+"(\\s+|$)"),"$1$2");
+if(!_408){
+var _409=dojo.html.getClass(node).replace(new RegExp("(^|\\s+)"+_407+"(\\s+|$)"),"$1$2");
 }else{
-var _40a=dojo.html.getClass(node).replace(_408,"");
+var _409=dojo.html.getClass(node).replace(_407,"");
 }
-dojo.html.setClass(node,_40a);
+dojo.html.setClass(node,_409);
 }
 catch(e){
 dojo.debug("dojo.html.removeClass() failed",e);
 }
 return true;
 };
-dojo.html.replaceClass=function(node,_40c,_40d){
-dojo.html.removeClass(node,_40d);
-dojo.html.addClass(node,_40c);
+dojo.html.replaceClass=function(node,_40b,_40c){
+dojo.html.removeClass(node,_40c);
+dojo.html.addClass(node,_40b);
 };
 dojo.html.classMatchType={ContainsAll:0,ContainsAny:1,IsOnly:2};
-dojo.html.getElementsByClass=function(_40e,_40f,_410,_411,_412){
-_412=false;
-var _413=dojo.doc();
-_40f=dojo.byId(_40f)||_413;
-var _414=_40e.split(/\s+/g);
-var _415=[];
-if(_411!=1&&_411!=2){
-_411=0;
+dojo.html.getElementsByClass=function(_40d,_40e,_40f,_410,_411){
+_411=false;
+var _412=dojo.doc();
+_40e=dojo.byId(_40e)||_412;
+var _413=_40d.split(/\s+/g);
+var _414=[];
+if(_410!=1&&_410!=2){
+_410=0;
 }
-var _416=new RegExp("(\\s|^)(("+_414.join(")|(")+"))(\\s|$)");
-var _417=_414.join(" ").length;
-var _418=[];
-if(!_412&&_413.evaluate){
-var _419=".//"+(_410||"*")+"[contains(";
-if(_411!=dojo.html.classMatchType.ContainsAny){
-_419+="concat(' ', at class,' '), ' "+_414.join(" ') and contains(concat(' ', at class,' '), ' ")+" ')";
-if(_411==2){
-_419+=" and string-length(@class)="+_417+"]";
+var _415=new RegExp("(\\s|^)(("+_413.join(")|(")+"))(\\s|$)");
+var _416=_413.join(" ").length;
+var _417=[];
+if(!_411&&_412.evaluate){
+var _418=".//"+(_40f||"*")+"[contains(";
+if(_410!=dojo.html.classMatchType.ContainsAny){
+_418+="concat(' ', at class,' '), ' "+_413.join(" ') and contains(concat(' ', at class,' '), ' ")+" ')";
+if(_410==2){
+_418+=" and string-length(@class)="+_416+"]";
 }else{
-_419+="]";
+_418+="]";
 }
 }else{
-_419+="concat(' ', at class,' '), ' "+_414.join(" ') or contains(concat(' ', at class,' '), ' ")+" ')]";
+_418+="concat(' ', at class,' '), ' "+_413.join(" ') or contains(concat(' ', at class,' '), ' ")+" ')]";
 }
-var _41a=_413.evaluate(_419,_40f,null,XPathResult.ANY_TYPE,null);
-var _41b=_41a.iterateNext();
-while(_41b){
+var _419=_412.evaluate(_418,_40e,null,XPathResult.ANY_TYPE,null);
+var _41a=_419.iterateNext();
+while(_41a){
 try{
-_418.push(_41b);
-_41b=_41a.iterateNext();
+_417.push(_41a);
+_41a=_419.iterateNext();
 }
 catch(e){
 break;
 }
 }
-return _418;
+return _417;
 }else{
-if(!_410){
-_410="*";
+if(!_40f){
+_40f="*";
 }
-_418=_40f.getElementsByTagName(_410);
+_417=_40e.getElementsByTagName(_40f);
 var node,i=0;
 outer:
-while(node=_418[i++]){
-var _41e=dojo.html.getClasses(node);
-if(_41e.length==0){
+while(node=_417[i++]){
+var _41d=dojo.html.getClasses(node);
+if(_41d.length==0){
 continue outer;
 }
-var _41f=0;
-for(var j=0;j<_41e.length;j++){
-if(_416.test(_41e[j])){
-if(_411==dojo.html.classMatchType.ContainsAny){
-_415.push(node);
+var _41e=0;
+for(var j=0;j<_41d.length;j++){
+if(_415.test(_41d[j])){
+if(_410==dojo.html.classMatchType.ContainsAny){
+_414.push(node);
 continue outer;
 }else{
-_41f++;
+_41e++;
 }
 }else{
-if(_411==dojo.html.classMatchType.IsOnly){
+if(_410==dojo.html.classMatchType.IsOnly){
 continue outer;
 }
 }
 }
-if(_41f==_414.length){
-if((_411==dojo.html.classMatchType.IsOnly)&&(_41f==_41e.length)){
-_415.push(node);
+if(_41e==_413.length){
+if((_410==dojo.html.classMatchType.IsOnly)&&(_41e==_41d.length)){
+_414.push(node);
 }else{
-if(_411==dojo.html.classMatchType.ContainsAll){
-_415.push(node);
+if(_410==dojo.html.classMatchType.ContainsAll){
+_414.push(node);
 }
 }
 }
 }
-return _415;
+return _414;
 }
 };
 dojo.html.getElementsByClassName=dojo.html.getElementsByClass;
-dojo.html.toCamelCase=function(_421){
-var arr=_421.split("-"),cc=arr[0];
+dojo.html.toCamelCase=function(_420){
+var arr=_420.split("-"),cc=arr[0];
 for(var i=1;i<arr.length;i++){
 cc+=arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
 }
 return cc;
 };
-dojo.html.toSelectorCase=function(_425){
-return _425.replace(/([A-Z])/g,"-$1").toLowerCase();
+dojo.html.toSelectorCase=function(_424){
+return _424.replace(/([A-Z])/g,"-$1").toLowerCase();
 };
-dojo.html.getComputedStyle=function(node,_427,_428){
+if(dojo.render.html.ie){
+dojo.html.getComputedStyle=function(node,_426,_427){
 node=dojo.byId(node);
-var _427=dojo.html.toSelectorCase(_427);
-var _429=dojo.html.toCamelCase(_427);
 if(!node||!node.style){
-return _428;
-}else{
-if(document.defaultView&&dojo.html.isDescendantOf(node,node.ownerDocument)){
-try{
-var cs=document.defaultView.getComputedStyle(node,"");
-if(cs){
-return cs.getPropertyValue(_427);
+return _427;
 }
-}
-catch(e){
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_427);
+return node.currentStyle[dojo.html.toCamelCase(_426)];
+};
+dojo.html.getComputedStyles=function(node){
+return node.currentStyle;
+};
 }else{
-return _428;
+dojo.html.getComputedStyle=function(node,_42a,_42b){
+node=dojo.byId(node);
+if(!node||!node.style){
+return _42b;
 }
-}
-}else{
-if(node.currentStyle){
-return node.currentStyle[_429];
-}
-}
-}
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_427);
-}else{
-return _428;
-}
+var s=document.defaultView.getComputedStyle(node,null);
+return (s&&s[dojo.html.toCamelCase(_42a)])||"";
 };
-dojo.html.getStyleProperty=function(node,_42c){
+dojo.html.getComputedStyles=function(node){
+return document.defaultView.getComputedStyle(node,null);
+};
+}
+dojo.html.getStyleProperty=function(node,_42f){
 node=dojo.byId(node);
-return (node&&node.style?node.style[dojo.html.toCamelCase(_42c)]:undefined);
+return (node&&node.style?node.style[dojo.html.toCamelCase(_42f)]:undefined);
 };
-dojo.html.getStyle=function(node,_42e){
-var _42f=dojo.html.getStyleProperty(node,_42e);
-return (_42f?_42f:dojo.html.getComputedStyle(node,_42e));
+dojo.html.getStyle=function(node,_431){
+var _432=dojo.html.getStyleProperty(node,_431);
+return (_432?_432:dojo.html.getComputedStyle(node,_431));
 };
-dojo.html.setStyle=function(node,_431,_432){
+dojo.html.setStyle=function(node,_434,_435){
 node=dojo.byId(node);
 if(node&&node.style){
-var _433=dojo.html.toCamelCase(_431);
-node.style[_433]=_432;
+var _436=dojo.html.toCamelCase(_434);
+node.style[_436]=_435;
 }
 };
-dojo.html.setStyleText=function(_434,text){
+dojo.html.setStyleText=function(_437,text){
 try{
-_434.style.cssText=text;
+_437.style.cssText=text;
 }
 catch(e){
-_434.setAttribute("style",text);
+_437.setAttribute("style",text);
 }
 };
-dojo.html.copyStyle=function(_436,_437){
-if(!_437.style.cssText){
-_436.setAttribute("style",_437.getAttribute("style"));
+dojo.html.copyStyle=function(_439,_43a){
+if(!_43a.style.cssText){
+_439.setAttribute("style",_43a.getAttribute("style"));
 }else{
-_436.style.cssText=_437.style.cssText;
+_439.style.cssText=_43a.style.cssText;
 }
-dojo.html.addClass(_436,dojo.html.getClass(_437));
+dojo.html.addClass(_439,dojo.html.getClass(_43a));
 };
-dojo.html.getUnitValue=function(node,_439,_43a){
-var s=dojo.html.getComputedStyle(node,_439);
-if((!s)||((s=="auto")&&(_43a))){
+dojo.html.getUnitValue=function(node,_43c,_43d){
+var s=dojo.html.getComputedStyle(node,_43c);
+if((!s)||((s=="auto")&&(_43d))){
 return {value:0,units:"px"};
 }
-var _43c=s.match(/(\-?[\d.]+)([a-z%]*)/i);
-if(!_43c){
+var _43f=s.match(/(\-?[\d.]+)([a-z%]*)/i);
+if(!_43f){
 return dojo.html.getUnitValue.bad;
 }
-return {value:Number(_43c[1]),units:_43c[2].toLowerCase()};
+return {value:Number(_43f[1]),units:_43f[2].toLowerCase()};
 };
 dojo.html.getUnitValue.bad={value:NaN,units:""};
-dojo.html.getPixelValue=function(node,_43e,_43f){
-var _440=dojo.html.getUnitValue(node,_43e,_43f);
-if(isNaN(_440.value)){
+if(dojo.render.html.ie){
+dojo.html.toPixelValue=function(_440,_441){
+if(!_441){
 return 0;
 }
-if((_440.value)&&(_440.units!="px")){
-return NaN;
+if(_441.slice(-2)=="px"){
+return parseFloat(_441);
 }
-return _440.value;
+var _442=0;
+with(_440){
+var _443=style.left;
+var _444=runtimeStyle.left;
+runtimeStyle.left=currentStyle.left;
+try{
+style.left=_441||0;
+_442=style.pixelLeft;
+style.left=_443;
+runtimeStyle.left=_444;
+}
+catch(e){
+}
+}
+return _442;
 };
-dojo.html.setPositivePixelValue=function(node,_442,_443){
-if(isNaN(_443)){
+}else{
+dojo.html.toPixelValue=function(_445,_446){
+return (_446&&(_446.slice(-2)=="px")?parseFloat(_446):0);
+};
+}
+dojo.html.getPixelValue=function(node,_448,_449){
+return dojo.html.toPixelValue(node,dojo.html.getComputedStyle(node,_448));
+};
+dojo.html.setPositivePixelValue=function(node,_44b,_44c){
+if(isNaN(_44c)){
 return false;
 }
-node.style[_442]=Math.max(0,_443)+"px";
+node.style[_44b]=Math.max(0,_44c)+"px";
 return true;
 };
 dojo.html.styleSheet=null;
-dojo.html.insertCssRule=function(_444,_445,_446){
+dojo.html.insertCssRule=function(_44d,_44e,_44f){
 if(!dojo.html.styleSheet){
 if(document.createStyleSheet){
 dojo.html.styleSheet=document.createStyleSheet();
@@ -98862,161 +60645,161 @@
 }
 if(arguments.length<3){
 if(dojo.html.styleSheet.cssRules){
-_446=dojo.html.styleSheet.cssRules.length;
+_44f=dojo.html.styleSheet.cssRules.length;
 }else{
 if(dojo.html.styleSheet.rules){
-_446=dojo.html.styleSheet.rules.length;
+_44f=dojo.html.styleSheet.rules.length;
 }else{
 return null;
 }
 }
 }
 if(dojo.html.styleSheet.insertRule){
-var rule=_444+" { "+_445+" }";
-return dojo.html.styleSheet.insertRule(rule,_446);
+var rule=_44d+" { "+_44e+" }";
+return dojo.html.styleSheet.insertRule(rule,_44f);
 }else{
 if(dojo.html.styleSheet.addRule){
-return dojo.html.styleSheet.addRule(_444,_445,_446);
+return dojo.html.styleSheet.addRule(_44d,_44e,_44f);
 }else{
 return null;
 }
 }
 };
-dojo.html.removeCssRule=function(_448){
+dojo.html.removeCssRule=function(_451){
 if(!dojo.html.styleSheet){
 dojo.debug("no stylesheet defined for removing rules");
 return false;
 }
 if(dojo.render.html.ie){
-if(!_448){
-_448=dojo.html.styleSheet.rules.length;
-dojo.html.styleSheet.removeRule(_448);
+if(!_451){
+_451=dojo.html.styleSheet.rules.length;
+dojo.html.styleSheet.removeRule(_451);
 }
 }else{
 if(document.styleSheets[0]){
-if(!_448){
-_448=dojo.html.styleSheet.cssRules.length;
+if(!_451){
+_451=dojo.html.styleSheet.cssRules.length;
 }
-dojo.html.styleSheet.deleteRule(_448);
+dojo.html.styleSheet.deleteRule(_451);
 }
 }
 return true;
 };
 dojo.html._insertedCssFiles=[];
-dojo.html.insertCssFile=function(URI,doc,_44b,_44c){
+dojo.html.insertCssFile=function(URI,doc,_454,_455){
 if(!URI){
 return;
 }
 if(!doc){
 doc=document;
 }
-var _44d=dojo.hostenv.getText(URI,false,_44c);
-if(_44d===null){
+var _456=dojo.hostenv.getText(URI,false,_455);
+if(_456===null){
 return;
 }
-_44d=dojo.html.fixPathsInCssText(_44d,URI);
-if(_44b){
+_456=dojo.html.fixPathsInCssText(_456,URI);
+if(_454){
 var idx=-1,node,ent=dojo.html._insertedCssFiles;
 for(var i=0;i<ent.length;i++){
-if((ent[i].doc==doc)&&(ent[i].cssText==_44d)){
+if((ent[i].doc==doc)&&(ent[i].cssText==_456)){
 idx=i;
 node=ent[i].nodeRef;
 break;
 }
 }
 if(node){
-var _452=doc.getElementsByTagName("style");
-for(var i=0;i<_452.length;i++){
-if(_452[i]==node){
+var _45b=doc.getElementsByTagName("style");
+for(var i=0;i<_45b.length;i++){
+if(_45b[i]==node){
 return;
 }
 }
 dojo.html._insertedCssFiles.shift(idx,1);
 }
 }
-var _453=dojo.html.insertCssText(_44d,doc);
-dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_44d,"nodeRef":_453});
-if(_453&&djConfig.isDebug){
-_453.setAttribute("dbgHref",URI);
+var _45c=dojo.html.insertCssText(_456,doc);
+dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_456,"nodeRef":_45c});
+if(_45c&&djConfig.isDebug){
+_45c.setAttribute("dbgHref",URI);
 }
-return _453;
+return _45c;
 };
-dojo.html.insertCssText=function(_454,doc,URI){
-if(!_454){
+dojo.html.insertCssText=function(_45d,doc,URI){
+if(!_45d){
 return;
 }
 if(!doc){
 doc=document;
 }
 if(URI){
-_454=dojo.html.fixPathsInCssText(_454,URI);
+_45d=dojo.html.fixPathsInCssText(_45d,URI);
 }
-var _457=doc.createElement("style");
-_457.setAttribute("type","text/css");
+var _460=doc.createElement("style");
+_460.setAttribute("type","text/css");
 var head=doc.getElementsByTagName("head")[0];
 if(!head){
 dojo.debug("No head tag in document, aborting styles");
 return;
 }else{
-head.appendChild(_457);
+head.appendChild(_460);
 }
-if(_457.styleSheet){
-var _459=function(){
+if(_460.styleSheet){
+var _462=function(){
 try{
-_457.styleSheet.cssText=_454;
+_460.styleSheet.cssText=_45d;
 }
 catch(e){
 dojo.debug(e);
 }
 };
-if(_457.styleSheet.disabled){
-setTimeout(_459,10);
+if(_460.styleSheet.disabled){
+setTimeout(_462,10);
 }else{
-_459();
+_462();
 }
 }else{
-var _45a=doc.createTextNode(_454);
-_457.appendChild(_45a);
+var _463=doc.createTextNode(_45d);
+_460.appendChild(_463);
 }
-return _457;
+return _460;
 };
-dojo.html.fixPathsInCssText=function(_45b,URI){
-if(!_45b||!URI){
+dojo.html.fixPathsInCssText=function(_464,URI){
+if(!_464||!URI){
 return;
 }
-var _45d,str="",url="",_460="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
-var _461=new RegExp("url\\(\\s*("+_460+")\\s*\\)");
-var _462=/(file|https?|ftps?):\/\//;
-regexTrim=new RegExp("^[\\s]*(['\"]?)("+_460+")\\1[\\s]*?$");
+var _466,str="",url="",_469="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
+var _46a=new RegExp("url\\(\\s*("+_469+")\\s*\\)");
+var _46b=/(file|https?|ftps?):\/\//;
+regexTrim=new RegExp("^[\\s]*(['\"]?)("+_469+")\\1[\\s]*?$");
 if(dojo.render.html.ie55||dojo.render.html.ie60){
-var _463=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_460+")['\"]");
-while(_45d=_463.exec(_45b)){
-url=_45d[2].replace(regexTrim,"$2");
-if(!_462.exec(url)){
+var _46c=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_469+")['\"]");
+while(_466=_46c.exec(_464)){
+url=_466[2].replace(regexTrim,"$2");
+if(!_46b.exec(url)){
 url=(new dojo.uri.Uri(URI,url).toString());
 }
-str+=_45b.substring(0,_45d.index)+"AlphaImageLoader("+_45d[1]+"src='"+url+"'";
-_45b=_45b.substr(_45d.index+_45d[0].length);
+str+=_464.substring(0,_466.index)+"AlphaImageLoader("+_466[1]+"src='"+url+"'";
+_464=_464.substr(_466.index+_466[0].length);
 }
-_45b=str+_45b;
+_464=str+_464;
 str="";
 }
-while(_45d=_461.exec(_45b)){
-url=_45d[1].replace(regexTrim,"$2");
-if(!_462.exec(url)){
+while(_466=_46a.exec(_464)){
+url=_466[1].replace(regexTrim,"$2");
+if(!_46b.exec(url)){
 url=(new dojo.uri.Uri(URI,url).toString());
 }
-str+=_45b.substring(0,_45d.index)+"url("+url+")";
-_45b=_45b.substr(_45d.index+_45d[0].length);
+str+=_464.substring(0,_466.index)+"url("+url+")";
+_464=_464.substr(_466.index+_466[0].length);
 }
-return str+_45b;
+return str+_464;
 };
-dojo.html.setActiveStyleSheet=function(_464){
+dojo.html.setActiveStyleSheet=function(_46d){
 var i=0,a,els=dojo.doc().getElementsByTagName("link");
 while(a=els[i++]){
 if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")){
 a.disabled=true;
-if(a.getAttribute("title")==_464){
+if(a.getAttribute("title")==_46d){
 a.disabled=false;
 }
 }
@@ -99042,9 +60825,9 @@
 };
 dojo.html.applyBrowserClass=function(node){
 var drh=dojo.render.html;
-var _470={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
-for(var p in _470){
-if(_470[p]){
+var _479={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
+for(var p in _479){
+if(_479[p]){
 dojo.html.addClass(node,p);
 }
 }
@@ -99053,62 +60836,68 @@
 dojo.widget._cssFiles={};
 dojo.widget._cssStrings={};
 dojo.widget._templateCache={};
-dojo.widget.defaultStrings={dojoRoot:dojo.hostenv.getBaseScriptUri(),baseScriptUri:dojo.hostenv.getBaseScriptUri()};
-dojo.widget.fillFromTemplateCache=function(obj,_473,_474,_475){
-var _476=_473||obj.templatePath;
-var _477=dojo.widget._templateCache;
-if(!_476&&!obj["widgetType"]){
+dojo.widget.defaultStrings={dojoRoot:dojo.hostenv.getBaseScriptUri(),dojoWidgetModuleUri:dojo.uri.moduleUri("dojo.widget"),baseScriptUri:dojo.hostenv.getBaseScriptUri()};
+dojo.widget.fillFromTemplateCache=function(obj,_47c,_47d,_47e){
+var _47f=_47c||obj.templatePath;
+var _480=dojo.widget._templateCache;
+if(!_47f&&!obj["widgetType"]){
 do{
-var _478="__dummyTemplate__"+dojo.widget._templateCache.dummyCount++;
-}while(_477[_478]);
-obj.widgetType=_478;
+var _481="__dummyTemplate__"+dojo.widget._templateCache.dummyCount++;
+}while(_480[_481]);
+obj.widgetType=_481;
 }
-var wt=_476?_476.toString():obj.widgetType;
-var ts=_477[wt];
+var wt=_47f?_47f.toString():obj.widgetType;
+var ts=_480[wt];
 if(!ts){
-_477[wt]={"string":null,"node":null};
-if(_475){
+_480[wt]={"string":null,"node":null};
+if(_47e){
 ts={};
 }else{
-ts=_477[wt];
+ts=_480[wt];
 }
 }
-if((!obj.templateString)&&(!_475)){
-obj.templateString=_474||ts["string"];
+if((!obj.templateString)&&(!_47e)){
+obj.templateString=_47d||ts["string"];
 }
-if((!obj.templateNode)&&(!_475)){
+if(obj.templateString){
+obj.templateString=this._sanitizeTemplateString(obj.templateString);
+}
+if((!obj.templateNode)&&(!_47e)){
 obj.templateNode=ts["node"];
 }
-if((!obj.templateNode)&&(!obj.templateString)&&(_476)){
-var _47b=dojo.hostenv.getText(_476);
-if(_47b){
-_47b=_47b.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");
-var _47c=_47b.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-if(_47c){
-_47b=_47c[1];
+if((!obj.templateNode)&&(!obj.templateString)&&(_47f)){
+var _484=this._sanitizeTemplateString(dojo.hostenv.getText(_47f));
+obj.templateString=_484;
+if(!_47e){
+_480[wt]["string"]=_484;
 }
-}else{
-_47b="";
 }
-obj.templateString=_47b;
-if(!_475){
-_477[wt]["string"]=_47b;
+if((!ts["string"])&&(!_47e)){
+ts.string=obj.templateString;
 }
+};
+dojo.widget._sanitizeTemplateString=function(_485){
+if(_485){
+_485=_485.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");
+var _486=_485.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+if(_486){
+_485=_486[1];
 }
-if((!ts["string"])&&(!_475)){
-ts.string=obj.templateString;
+}else{
+_485="";
 }
+return _485;
 };
 dojo.widget._templateCache.dummyCount=0;
 dojo.widget.attachProperties=["dojoAttachPoint","id"];
 dojo.widget.eventAttachProperty="dojoAttachEvent";
 dojo.widget.onBuildProperty="dojoOnBuild";
 dojo.widget.waiNames=["waiRole","waiState"];
-dojo.widget.wai={waiRole:{name:"waiRole","namespace":"http://www.w3.org/TR/xhtml2",alias:"x2",prefix:"wairole:"},waiState:{name:"waiState","namespace":"http://www.w3.org/2005/07/aaa",alias:"aaa",prefix:""},setAttr:function(node,ns,attr,_480){
+dojo.widget.wai={waiRole:{name:"waiRole","namespace":"http://www.w3.org/TR/xhtml2",alias:"x2",prefix:"wairole:"},waiState:{name:"waiState","namespace":"http://www.w3.org/2005/07/aaa",alias:"aaa",prefix:""},setAttr:function(node,ns,attr,_48a){
 if(dojo.render.html.ie){
-node.setAttribute(this[ns].alias+":"+attr,this[ns].prefix+_480);
+node.setAttribute(this[ns].alias+":"+attr,this[ns].prefix+_48a);
 }else{
-node.setAttributeNS(this[ns]["namespace"],attr,this[ns].prefix+_480);
+node.setAttributeNS(this[ns]["namespace"],attr,this[ns].prefix+_48a);
 }
 },getAttr:function(node,ns,attr){
 if(dojo.render.html.ie){
@@ -99117,119 +60906,119 @@
 return node.getAttributeNS(this[ns]["namespace"],attr);
 }
 },removeAttr:function(node,ns,attr){
-var _487=true;
+var _491=true;
 if(dojo.render.html.ie){
-_487=node.removeAttribute(this[ns].alias+":"+attr);
+_491=node.removeAttribute(this[ns].alias+":"+attr);
 }else{
 node.removeAttributeNS(this[ns]["namespace"],attr);
 }
-return _487;
+return _491;
 }};
-dojo.widget.attachTemplateNodes=function(_488,_489,_48a){
-var _48b=dojo.dom.ELEMENT_NODE;
+dojo.widget.attachTemplateNodes=function(_492,_493,_494){
+var _495=dojo.dom.ELEMENT_NODE;
 function trim(str){
 return str.replace(/^\s+|\s+$/g,"");
 }
-if(!_488){
-_488=_489.domNode;
+if(!_492){
+_492=_493.domNode;
 }
-if(_488.nodeType!=_48b){
+if(_492.nodeType!=_495){
 return;
 }
-var _48d=_488.all||_488.getElementsByTagName("*");
-var _48e=_489;
-for(var x=-1;x<_48d.length;x++){
-var _490=(x==-1)?_488:_48d[x];
-var _491=[];
-if(!_489.widgetsInTemplate||!_490.getAttribute("dojoType")){
+var _497=_492.all||_492.getElementsByTagName("*");
+var _498=_493;
+for(var x=-1;x<_497.length;x++){
+var _49a=(x==-1)?_492:_497[x];
+var _49b=[];
+if(!_493.widgetsInTemplate||!_49a.getAttribute("dojoType")){
 for(var y=0;y<this.attachProperties.length;y++){
-var _493=_490.getAttribute(this.attachProperties[y]);
-if(_493){
-_491=_493.split(";");
-for(var z=0;z<_491.length;z++){
-if(dojo.lang.isArray(_489[_491[z]])){
-_489[_491[z]].push(_490);
+var _49d=_49a.getAttribute(this.attachProperties[y]);
+if(_49d){
+_49b=_49d.split(";");
+for(var z=0;z<_49b.length;z++){
+if(dojo.lang.isArray(_493[_49b[z]])){
+_493[_49b[z]].push(_49a);
 }else{
-_489[_491[z]]=_490;
+_493[_49b[z]]=_49a;
 }
 }
 break;
 }
 }
-var _495=_490.getAttribute(this.eventAttachProperty);
-if(_495){
-var evts=_495.split(";");
+var _49f=_49a.getAttribute(this.eventAttachProperty);
+if(_49f){
+var evts=_49f.split(";");
 for(var y=0;y<evts.length;y++){
 if((!evts[y])||(!evts[y].length)){
 continue;
 }
-var _497=null;
+var _4a1=null;
 var tevt=trim(evts[y]);
 if(evts[y].indexOf(":")>=0){
-var _499=tevt.split(":");
-tevt=trim(_499[0]);
-_497=trim(_499[1]);
+var _4a3=tevt.split(":");
+tevt=trim(_4a3[0]);
+_4a1=trim(_4a3[1]);
 }
-if(!_497){
-_497=tevt;
+if(!_4a1){
+_4a1=tevt;
 }
 var tf=function(){
-var ntf=new String(_497);
+var ntf=new String(_4a1);
 return function(evt){
-if(_48e[ntf]){
-_48e[ntf](dojo.event.browser.fixEvent(evt,this));
+if(_498[ntf]){
+_498[ntf](dojo.event.browser.fixEvent(evt,this));
 }
 };
 }();
-dojo.event.browser.addListener(_490,tevt,tf,false,true);
+dojo.event.browser.addListener(_49a,tevt,tf,false,true);
 }
 }
-for(var y=0;y<_48a.length;y++){
-var _49d=_490.getAttribute(_48a[y]);
-if((_49d)&&(_49d.length)){
-var _497=null;
-var _49e=_48a[y].substr(4);
-_497=trim(_49d);
-var _49f=[_497];
-if(_497.indexOf(";")>=0){
-_49f=dojo.lang.map(_497.split(";"),trim);
+for(var y=0;y<_494.length;y++){
+var _4a7=_49a.getAttribute(_494[y]);
+if((_4a7)&&(_4a7.length)){
+var _4a1=null;
+var _4a8=_494[y].substr(4);
+_4a1=trim(_4a7);
+var _4a9=[_4a1];
+if(_4a1.indexOf(";")>=0){
+_4a9=dojo.lang.map(_4a1.split(";"),trim);
 }
-for(var z=0;z<_49f.length;z++){
-if(!_49f[z].length){
+for(var z=0;z<_4a9.length;z++){
+if(!_4a9[z].length){
 continue;
 }
 var tf=function(){
-var ntf=new String(_49f[z]);
+var ntf=new String(_4a9[z]);
 return function(evt){
-if(_48e[ntf]){
-_48e[ntf](dojo.event.browser.fixEvent(evt,this));
+if(_498[ntf]){
+_498[ntf](dojo.event.browser.fixEvent(evt,this));
 }
 };
 }();
-dojo.event.browser.addListener(_490,_49e,tf,false,true);
+dojo.event.browser.addListener(_49a,_4a8,tf,false,true);
 }
 }
 }
 }
-var _4a2=_490.getAttribute(this.templateProperty);
-if(_4a2){
-_489[_4a2]=_490;
+var _4ac=_49a.getAttribute(this.templateProperty);
+if(_4ac){
+_493[_4ac]=_49a;
 }
 dojo.lang.forEach(dojo.widget.waiNames,function(name){
 var wai=dojo.widget.wai[name];
-var val=_490.getAttribute(wai.name);
+var val=_49a.getAttribute(wai.name);
 if(val){
 if(val.indexOf("-")==-1){
-dojo.widget.wai.setAttr(_490,wai.name,"role",val);
+dojo.widget.wai.setAttr(_49a,wai.name,"role",val);
 }else{
-var _4a6=val.split("-");
-dojo.widget.wai.setAttr(_490,wai.name,_4a6[0],_4a6[1]);
+var _4b0=val.split("-");
+dojo.widget.wai.setAttr(_49a,wai.name,_4b0[0],_4b0[1]);
 }
 }
 },this);
-var _4a7=_490.getAttribute(this.onBuildProperty);
-if(_4a7){
-eval("var node = baseNode; var widget = targetObj; "+_4a7);
+var _4b1=_49a.getAttribute(this.onBuildProperty);
+if(_4b1){
+eval("var node = baseNode; var widget = targetObj; "+_4b1);
 }
 }
 };
@@ -99255,23 +61044,23 @@
 if((arguments.length>0)&&(typeof arguments[0]=="object")){
 this.create(arguments[0]);
 }
-},{templateNode:null,templateString:null,templateCssString:null,preventClobber:false,domNode:null,containerNode:null,widgetsInTemplate:false,addChild:function(_4af,_4b0,pos,ref,_4b3){
+},{templateNode:null,templateString:null,templateCssString:null,preventClobber:false,domNode:null,containerNode:null,widgetsInTemplate:false,addChild:function(_4b9,_4ba,pos,ref,_4bd){
 if(!this.isContainer){
 dojo.debug("dojo.widget.DomWidget.addChild() attempted on non-container widget");
 return null;
 }else{
-if(_4b3==undefined){
-_4b3=this.children.length;
+if(_4bd==undefined){
+_4bd=this.children.length;
 }
-this.addWidgetAsDirectChild(_4af,_4b0,pos,ref,_4b3);
-this.registerChild(_4af,_4b3);
+this.addWidgetAsDirectChild(_4b9,_4ba,pos,ref,_4bd);
+this.registerChild(_4b9,_4bd);
 }
-return _4af;
-},addWidgetAsDirectChild:function(_4b4,_4b5,pos,ref,_4b8){
-if((!this.containerNode)&&(!_4b5)){
+return _4b9;
+},addWidgetAsDirectChild:function(_4be,_4bf,pos,ref,_4c2){
+if((!this.containerNode)&&(!_4bf)){
 this.containerNode=this.domNode;
 }
-var cn=(_4b5)?_4b5:this.containerNode;
+var cn=(_4bf)?_4bf:this.containerNode;
 if(!pos){
 pos="after";
 }
@@ -99281,38 +61070,38 @@
 }
 ref=cn.lastChild;
 }
-if(!_4b8){
-_4b8=0;
+if(!_4c2){
+_4c2=0;
 }
-_4b4.domNode.setAttribute("dojoinsertionindex",_4b8);
+_4be.domNode.setAttribute("dojoinsertionindex",_4c2);
 if(!ref){
-cn.appendChild(_4b4.domNode);
+cn.appendChild(_4be.domNode);
 }else{
 if(pos=="insertAtIndex"){
-dojo.dom.insertAtIndex(_4b4.domNode,ref.parentNode,_4b8);
+dojo.dom.insertAtIndex(_4be.domNode,ref.parentNode,_4c2);
 }else{
 if((pos=="after")&&(ref===cn.lastChild)){
-cn.appendChild(_4b4.domNode);
+cn.appendChild(_4be.domNode);
 }else{
-dojo.dom.insertAtPosition(_4b4.domNode,cn,pos);
+dojo.dom.insertAtPosition(_4be.domNode,cn,pos);
 }
 }
 }
-},registerChild:function(_4ba,_4bb){
-_4ba.dojoInsertionIndex=_4bb;
+},registerChild:function(_4c4,_4c5){
+_4c4.dojoInsertionIndex=_4c5;
 var idx=-1;
 for(var i=0;i<this.children.length;i++){
-if(this.children[i].dojoInsertionIndex<=_4bb){
+if(this.children[i].dojoInsertionIndex<=_4c5){
 idx=i;
 }
 }
-this.children.splice(idx+1,0,_4ba);
-_4ba.parent=this;
-_4ba.addedTo(this,idx+1);
-delete dojo.widget.manager.topWidgets[_4ba.widgetId];
-},removeChild:function(_4be){
-dojo.dom.removeNode(_4be.domNode);
-return dojo.widget.DomWidget.superclass.removeChild.call(this,_4be);
+this.children.splice(idx+1,0,_4c4);
+_4c4.parent=this;
+_4c4.addedTo(this,idx+1);
+delete dojo.widget.manager.topWidgets[_4c4.widgetId];
+},removeChild:function(_4c8){
+dojo.dom.removeNode(_4c8.domNode);
+return dojo.widget.DomWidget.superclass.removeChild.call(this,_4c8);
 },getFragNodeRef:function(frag){
 if(!frag){
 return null;
@@ -99321,91 +61110,91 @@
 dojo.raise("Error: no frag for widget type "+this.getNamespacedType()+", id "+this.widgetId+" (maybe a widget has set it's type incorrectly)");
 }
 return frag[this.getNamespacedType()]["nodeRef"];
-},postInitialize:function(args,frag,_4c2){
-var _4c3=this.getFragNodeRef(frag);
-if(_4c2&&(_4c2.snarfChildDomOutput||!_4c3)){
-_4c2.addWidgetAsDirectChild(this,"","insertAtIndex","",args["dojoinsertionindex"],_4c3);
+},postInitialize:function(args,frag,_4cc){
+var _4cd=this.getFragNodeRef(frag);
+if(_4cc&&(_4cc.snarfChildDomOutput||!_4cd)){
+_4cc.addWidgetAsDirectChild(this,"","insertAtIndex","",args["dojoinsertionindex"],_4cd);
 }else{
-if(_4c3){
-if(this.domNode&&(this.domNode!==_4c3)){
-this._sourceNodeRef=dojo.dom.replaceNode(_4c3,this.domNode);
+if(_4cd){
+if(this.domNode&&(this.domNode!==_4cd)){
+this._sourceNodeRef=dojo.dom.replaceNode(_4cd,this.domNode);
 }
 }
 }
-if(_4c2){
-_4c2.registerChild(this,args.dojoinsertionindex);
+if(_4cc){
+_4cc.registerChild(this,args.dojoinsertionindex);
 }else{
 dojo.widget.manager.topWidgets[this.widgetId]=this;
 }
 if(this.widgetsInTemplate){
-var _4c4=new dojo.xml.Parse();
-var _4c5;
-var _4c6=this.domNode.getElementsByTagName("*");
-for(var i=0;i<_4c6.length;i++){
-if(_4c6[i].getAttribute("dojoAttachPoint")=="subContainerWidget"){
-_4c5=_4c6[i];
+var _4ce=new dojo.xml.Parse();
+var _4cf;
+var _4d0=this.domNode.getElementsByTagName("*");
+for(var i=0;i<_4d0.length;i++){
+if(_4d0[i].getAttribute("dojoAttachPoint")=="subContainerWidget"){
+_4cf=_4d0[i];
 }
-if(_4c6[i].getAttribute("dojoType")){
-_4c6[i].setAttribute("isSubWidget",true);
+if(_4d0[i].getAttribute("dojoType")){
+_4d0[i].setAttribute("isSubWidget",true);
 }
 }
 if(this.isContainer&&!this.containerNode){
-if(_4c5){
+if(_4cf){
 var src=this.getFragNodeRef(frag);
 if(src){
-dojo.dom.moveChildren(src,_4c5);
+dojo.dom.moveChildren(src,_4cf);
 frag["dojoDontFollow"]=true;
 }
 }else{
 dojo.debug("No subContainerWidget node can be found in template file for widget "+this);
 }
 }
-var _4c9=_4c4.parseElement(this.domNode,null,true);
-dojo.widget.getParser().createSubComponents(_4c9,this);
-var _4ca=[];
-var _4cb=[this];
+var _4d3=_4ce.parseElement(this.domNode,null,true);
+dojo.widget.getParser().createSubComponents(_4d3,this);
+var _4d4=[];
+var _4d5=[this];
 var w;
-while((w=_4cb.pop())){
+while((w=_4d5.pop())){
 for(var i=0;i<w.children.length;i++){
-var _4cd=w.children[i];
-if(_4cd._processedSubWidgets||!_4cd.extraArgs["issubwidget"]){
+var _4d7=w.children[i];
+if(_4d7._processedSubWidgets||!_4d7.extraArgs["issubwidget"]){
 continue;
 }
-_4ca.push(_4cd);
-if(_4cd.isContainer){
-_4cb.push(_4cd);
+_4d4.push(_4d7);
+if(_4d7.isContainer){
+_4d5.push(_4d7);
 }
 }
 }
-for(var i=0;i<_4ca.length;i++){
-var _4ce=_4ca[i];
-if(_4ce._processedSubWidgets){
+for(var i=0;i<_4d4.length;i++){
+var _4d8=_4d4[i];
+if(_4d8._processedSubWidgets){
 dojo.debug("This should not happen: widget._processedSubWidgets is already true!");
 return;
 }
-_4ce._processedSubWidgets=true;
-if(_4ce.extraArgs["dojoattachevent"]){
-var evts=_4ce.extraArgs["dojoattachevent"].split(";");
+_4d8._processedSubWidgets=true;
+if(_4d8.extraArgs["dojoattachevent"]){
+var evts=_4d8.extraArgs["dojoattachevent"].split(";");
 for(var j=0;j<evts.length;j++){
-var _4d1=null;
+var _4db=null;
 var tevt=dojo.string.trim(evts[j]);
 if(tevt.indexOf(":")>=0){
-var _4d3=tevt.split(":");
-tevt=dojo.string.trim(_4d3[0]);
-_4d1=dojo.string.trim(_4d3[1]);
+var _4dd=tevt.split(":");
+tevt=dojo.string.trim(_4dd[0]);
+_4db=dojo.string.trim(_4dd[1]);
 }
-if(!_4d1){
-_4d1=tevt;
+if(!_4db){
+_4db=tevt;
 }
-if(dojo.lang.isFunction(_4ce[tevt])){
-dojo.event.kwConnect({srcObj:_4ce,srcFunc:tevt,targetObj:this,targetFunc:_4d1});
+if(dojo.lang.isFunction(_4d8[tevt])){
+dojo.event.kwConnect({srcObj:_4d8,srcFunc:tevt,targetObj:this,targetFunc:_4db});
 }else{
-alert(tevt+" is not a function in widget "+_4ce);
+alert(tevt+" is not a function in widget "+_4d8);
 }
 }
 }
-if(_4ce.extraArgs["dojoattachpoint"]){
-this[_4ce.extraArgs["dojoattachpoint"]]=_4ce;
+if(_4d8.extraArgs["dojoattachpoint"]){
+this[_4d8.extraArgs["dojoattachpoint"]]=_4d8;
 }
 }
 }
@@ -99417,16 +61206,16 @@
 if(args["templatecsspath"]){
 args["templateCssPath"]=args["templatecsspath"];
 }
-var _4d7=args["templateCssPath"]||this.templateCssPath;
-if(_4d7&&!dojo.widget._cssFiles[_4d7.toString()]){
-if((!this.templateCssString)&&(_4d7)){
-this.templateCssString=dojo.hostenv.getText(_4d7);
+var _4e1=args["templateCssPath"]||this.templateCssPath;
+if(_4e1&&!dojo.widget._cssFiles[_4e1.toString()]){
+if((!this.templateCssString)&&(_4e1)){
+this.templateCssString=dojo.hostenv.getText(_4e1);
 this.templateCssPath=null;
 }
-dojo.widget._cssFiles[_4d7.toString()]=true;
+dojo.widget._cssFiles[_4e1.toString()]=true;
 }
 if((this["templateCssString"])&&(!dojo.widget._cssStrings[this.templateCssString])){
-dojo.html.insertCssText(this.templateCssString,null,_4d7);
+dojo.html.insertCssText(this.templateCssString,null,_4e1);
 dojo.widget._cssStrings[this.templateCssString]=true;
 }
 if((!this.preventClobber)&&((this.templatePath)||(this.templateNode)||((this["templateString"])&&(this.templateString.length))||((typeof ts!="undefined")&&((ts["string"])||(ts["node"]))))){
@@ -99436,13 +61225,13 @@
 }
 this.fillInTemplate(args,frag);
 },buildFromTemplate:function(args,frag){
-var _4da=false;
+var _4e4=false;
 if(args["templatepath"]){
 args["templatePath"]=args["templatepath"];
 }
-dojo.widget.fillFromTemplateCache(this,args["templatePath"],null,_4da);
+dojo.widget.fillFromTemplateCache(this,args["templatePath"],null,_4e4);
 var ts=dojo.widget._templateCache[this.templatePath?this.templatePath.toString():this.widgetType];
-if((ts)&&(!_4da)){
+if((ts)&&(!_4e4)){
 if(!this.templateString.length){
 this.templateString=ts["string"];
 }
@@ -99450,43 +61239,43 @@
 this.templateNode=ts["node"];
 }
 }
-var _4dc=false;
+var _4e6=false;
 var node=null;
 var tstr=this.templateString;
 if((!this.templateNode)&&(this.templateString)){
-_4dc=this.templateString.match(/\$\{([^\}]+)\}/g);
-if(_4dc){
+_4e6=this.templateString.match(/\$\{([^\}]+)\}/g);
+if(_4e6){
 var hash=this.strings||{};
 for(var key in dojo.widget.defaultStrings){
 if(dojo.lang.isUndefined(hash[key])){
 hash[key]=dojo.widget.defaultStrings[key];
 }
 }
-for(var i=0;i<_4dc.length;i++){
-var key=_4dc[i];
+for(var i=0;i<_4e6.length;i++){
+var key=_4e6[i];
 key=key.substring(2,key.length-1);
 var kval=(key.substring(0,5)=="this.")?dojo.lang.getObjPathValue(key.substring(5),this):hash[key];
-var _4e3;
+var _4ed;
 if((kval)||(dojo.lang.isString(kval))){
-_4e3=new String((dojo.lang.isFunction(kval))?kval.call(this,key,this.templateString):kval);
-while(_4e3.indexOf("\"")>-1){
-_4e3=_4e3.replace("\"","&quot;");
+_4ed=new String((dojo.lang.isFunction(kval))?kval.call(this,key,this.templateString):kval);
+while(_4ed.indexOf("\"")>-1){
+_4ed=_4ed.replace("\"","&quot;");
 }
-tstr=tstr.replace(_4dc[i],_4e3);
+tstr=tstr.replace(_4e6[i],_4ed);
 }
 }
 }else{
 this.templateNode=this.createNodesFromText(this.templateString,true)[0];
-if(!_4da){
+if(!_4e4){
 ts.node=this.templateNode;
 }
 }
 }
-if((!this.templateNode)&&(!_4dc)){
+if((!this.templateNode)&&(!_4e6)){
 dojo.debug("DomWidget.buildFromTemplate: could not create template");
 return false;
 }else{
-if(!_4dc){
+if(!_4e6){
 node=this.templateNode.cloneNode(true);
 if(!node){
 return false;
@@ -99503,14 +61292,14 @@
 dojo.dom.moveChildren(src,this.containerNode);
 }
 }
-},attachTemplateNodes:function(_4e5,_4e6){
-if(!_4e5){
-_4e5=this.domNode;
+},attachTemplateNodes:function(_4ef,_4f0){
+if(!_4ef){
+_4ef=this.domNode;
 }
-if(!_4e6){
-_4e6=this;
+if(!_4f0){
+_4f0=this;
 }
-return dojo.widget.attachTemplateNodes(_4e5,_4e6,dojo.widget.getDojoEventsFromStr(this.templateString));
+return dojo.widget.attachTemplateNodes(_4ef,_4f0,dojo.widget.getDojoEventsFromStr(this.templateString));
 },fillInTemplate:function(){
 },destroyRendering:function(){
 try{
@@ -99530,10 +61319,10 @@
 dojo.unimplemented("dojo.widget.DomWidget.createNodesFromText");
 }});
 dojo.provide("dojo.html.display");
-dojo.html._toggle=function(node,_4e8,_4e9){
+dojo.html._toggle=function(node,_4f2,_4f3){
 node=dojo.byId(node);
-_4e9(node,!_4e8(node));
-return _4e8(node);
+_4f3(node,!_4f2(node));
+return _4f2(node);
 };
 dojo.html.show=function(node){
 node=dojo.byId(node);
@@ -99552,8 +61341,8 @@
 }
 dojo.html.setStyle(node,"display","none");
 };
-dojo.html.setShowing=function(node,_4ee){
-dojo.html[(_4ee?"show":"hide")](node);
+dojo.html.setShowing=function(node,_4f8){
+dojo.html[(_4f8?"show":"hide")](node);
 };
 dojo.html.isShowing=function(node){
 return (dojo.html.getStyleProperty(node,"display")!="none");
@@ -99569,8 +61358,8 @@
 return (tag in dojo.html.displayMap?dojo.html.displayMap[tag]:"block");
 }
 };
-dojo.html.setDisplay=function(node,_4f4){
-dojo.html.setStyle(node,"display",((_4f4 instanceof String||typeof _4f4=="string")?_4f4:(_4f4?dojo.html.suggestDisplayByTagName(node):"none")));
+dojo.html.setDisplay=function(node,_4fe){
+dojo.html.setStyle(node,"display",((_4fe instanceof String||typeof _4fe=="string")?_4fe:(_4fe?dojo.html.suggestDisplayByTagName(node):"none")));
 };
 dojo.html.isDisplayed=function(node){
 return (dojo.html.getComputedStyle(node,"display")!="none");
@@ -99578,8 +61367,8 @@
 dojo.html.toggleDisplay=function(node){
 return dojo.html._toggle(node,dojo.html.isDisplayed,dojo.html.setDisplay);
 };
-dojo.html.setVisibility=function(node,_4f8){
-dojo.html.setStyle(node,"visibility",((_4f8 instanceof String||typeof _4f8=="string")?_4f8:(_4f8?"visible":"hidden")));
+dojo.html.setVisibility=function(node,_502){
+dojo.html.setStyle(node,"visibility",((_502 instanceof String||typeof _502=="string")?_502:(_502?"visible":"hidden")));
 };
 dojo.html.isVisible=function(node){
 return (dojo.html.getComputedStyle(node,"visibility")!="hidden");
@@ -99587,20 +61376,20 @@
 dojo.html.toggleVisibility=function(node){
 return dojo.html._toggle(node,dojo.html.isVisible,dojo.html.setVisibility);
 };
-dojo.html.setOpacity=function(node,_4fc,_4fd){
+dojo.html.setOpacity=function(node,_506,_507){
 node=dojo.byId(node);
 var h=dojo.render.html;
-if(!_4fd){
-if(_4fc>=1){
+if(!_507){
+if(_506>=1){
 if(h.ie){
 dojo.html.clearOpacity(node);
 return;
 }else{
-_4fc=0.999999;
+_506=0.999999;
 }
 }else{
-if(_4fc<0){
-_4fc=0;
+if(_506<0){
+_506=0;
 }
 }
 }
@@ -99608,20 +61397,20 @@
 if(node.nodeName.toLowerCase()=="tr"){
 var tds=node.getElementsByTagName("td");
 for(var x=0;x<tds.length;x++){
-tds[x].style.filter="Alpha(Opacity="+_4fc*100+")";
+tds[x].style.filter="Alpha(Opacity="+_506*100+")";
 }
 }
-node.style.filter="Alpha(Opacity="+_4fc*100+")";
+node.style.filter="Alpha(Opacity="+_506*100+")";
 }else{
 if(h.moz){
-node.style.opacity=_4fc;
-node.style.MozOpacity=_4fc;
+node.style.opacity=_506;
+node.style.MozOpacity=_506;
 }else{
 if(h.safari){
-node.style.opacity=_4fc;
-node.style.KhtmlOpacity=_4fc;
+node.style.opacity=_506;
+node.style.KhtmlOpacity=_506;
 }else{
-node.style.opacity=_4fc;
+node.style.opacity=_506;
 }
 }
 }
@@ -99668,73 +61457,73 @@
 if(!node){
 return 0;
 }
-var _509=0;
+var _513=0;
 while(node){
 if(dojo.html.getComputedStyle(node,"position")=="fixed"){
 return 0;
 }
 var val=node[prop];
 if(val){
-_509+=val-0;
+_513+=val-0;
 if(node==dojo.body()){
 break;
 }
 }
 node=node.parentNode;
 }
-return _509;
+return _513;
 };
-dojo.html.setStyleAttributes=function(node,_50c){
+dojo.html.setStyleAttributes=function(node,_516){
 node=dojo.byId(node);
-var _50d=_50c.replace(/(;)?\s*$/,"").split(";");
-for(var i=0;i<_50d.length;i++){
-var _50f=_50d[i].split(":");
-var name=_50f[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
-var _511=_50f[1].replace(/\s*$/,"").replace(/^\s*/,"");
+var _517=_516.replace(/(;)?\s*$/,"").split(";");
+for(var i=0;i<_517.length;i++){
+var _519=_517[i].split(":");
+var name=_519[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
+var _51b=_519[1].replace(/\s*$/,"").replace(/^\s*/,"");
 switch(name){
 case "opacity":
-dojo.html.setOpacity(node,_511);
+dojo.html.setOpacity(node,_51b);
 break;
 case "content-height":
-dojo.html.setContentBox(node,{height:_511});
+dojo.html.setContentBox(node,{height:_51b});
 break;
 case "content-width":
-dojo.html.setContentBox(node,{width:_511});
+dojo.html.setContentBox(node,{width:_51b});
 break;
 case "outer-height":
-dojo.html.setMarginBox(node,{height:_511});
+dojo.html.setMarginBox(node,{height:_51b});
 break;
 case "outer-width":
-dojo.html.setMarginBox(node,{width:_511});
+dojo.html.setMarginBox(node,{width:_51b});
 break;
 default:
-node.style[dojo.html.toCamelCase(name)]=_511;
+node.style[dojo.html.toCamelCase(name)]=_51b;
 }
 }
 };
 dojo.html.boxSizing={MARGIN_BOX:"margin-box",BORDER_BOX:"border-box",PADDING_BOX:"padding-box",CONTENT_BOX:"content-box"};
-dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_513,_514){
+dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_51d,_51e){
 node=dojo.byId(node,node.ownerDocument);
 var ret={x:0,y:0};
 var bs=dojo.html.boxSizing;
-if(!_514){
-_514=bs.CONTENT_BOX;
+if(!_51e){
+_51e=bs.CONTENT_BOX;
 }
-var _517=2;
-var _518;
-switch(_514){
+var _521=2;
+var _522;
+switch(_51e){
 case bs.MARGIN_BOX:
-_518=3;
+_522=3;
 break;
 case bs.BORDER_BOX:
-_518=2;
+_522=2;
 break;
 case bs.PADDING_BOX:
 default:
-_518=1;
+_522=1;
 break;
 case bs.CONTENT_BOX:
-_518=0;
+_522=0;
 break;
 }
 var h=dojo.render.html;
@@ -99746,7 +61535,7 @@
 }
 }else{
 if(document.getBoxObjectFor){
-_517=1;
+_521=1;
 try{
 var bo=document.getBoxObjectFor(node);
 ret.x=bo.x-dojo.html.sumAncestorProperties(node,"scrollLeft");
@@ -99756,11 +61545,11 @@
 }
 }else{
 if(node["offsetParent"]){
-var _51c;
+var _526;
 if((h.safari)&&(node.style.getPropertyValue("position")=="absolute")&&(node.parentNode==db)){
-_51c=db;
+_526=db;
 }else{
-_51c=db.parentNode;
+_526=db.parentNode;
 }
 if(node.parentNode!=db){
 var nd=node;
@@ -99770,16 +61559,16 @@
 ret.x-=dojo.html.sumAncestorProperties(nd,"scrollLeft");
 ret.y-=dojo.html.sumAncestorProperties(nd,"scrollTop");
 }
-var _51e=node;
+var _528=node;
 do{
-var n=_51e["offsetLeft"];
+var n=_528["offsetLeft"];
 if(!h.opera||n>0){
 ret.x+=isNaN(n)?0:n;
 }
-var m=_51e["offsetTop"];
+var m=_528["offsetTop"];
 ret.y+=isNaN(m)?0:m;
-_51e=_51e.offsetParent;
-}while((_51e!=_51c)&&(_51e!=null));
+_528=_528.offsetParent;
+}while((_528!=_526)&&(_528!=null));
 }else{
 if(node["x"]&&node["y"]){
 ret.x+=isNaN(node.x)?0:node.x;
@@ -99788,22 +61577,22 @@
 }
 }
 }
-if(_513){
-var _521=dojo.html.getScroll();
-ret.y+=_521.top;
-ret.x+=_521.left;
+if(_51d){
+var _52b=dojo.html.getScroll();
+ret.y+=_52b.top;
+ret.x+=_52b.left;
 }
-var _522=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
-if(_517>_518){
-for(var i=_518;i<_517;++i){
-ret.y+=_522[i](node,"top");
-ret.x+=_522[i](node,"left");
+var _52c=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
+if(_521>_522){
+for(var i=_522;i<_521;++i){
+ret.y+=_52c[i](node,"top");
+ret.x+=_52c[i](node,"left");
 }
 }else{
-if(_517<_518){
-for(var i=_518;i>_517;--i){
-ret.y-=_522[i-1](node,"top");
-ret.x-=_522[i-1](node,"left");
+if(_521<_522){
+for(var i=_522;i>_521;--i){
+ret.y-=_52c[i-1](node,"top");
+ret.x-=_52c[i-1](node,"left");
 }
 }
 }
@@ -99814,12 +61603,12 @@
 dojo.html.isPositionAbsolute=function(node){
 return (dojo.html.getComputedStyle(node,"position")=="absolute");
 };
-dojo.html._sumPixelValues=function(node,_526,_527){
-var _528=0;
-for(var x=0;x<_526.length;x++){
-_528+=dojo.html.getPixelValue(node,_526[x],_527);
+dojo.html._sumPixelValues=function(node,_530,_531){
+var _532=0;
+for(var x=0;x<_530.length;x++){
+_532+=dojo.html.getPixelValue(node,_530[x],_531);
 }
-return _528;
+return _532;
 };
 dojo.html.getMargin=function(node){
 return {width:dojo.html._sumPixelValues(node,["margin-left","margin-right"],(dojo.html.getComputedStyle(node,"position")=="absolute")),height:dojo.html._sumPixelValues(node,["margin-top","margin-bottom"],(dojo.html.getComputedStyle(node,"position")=="absolute"))};
@@ -99841,13 +61630,13 @@
 };
 dojo.html.getPadBorder=function(node){
 var pad=dojo.html.getPadding(node);
-var _535=dojo.html.getBorder(node);
-return {width:pad.width+_535.width,height:pad.height+_535.height};
+var _53f=dojo.html.getBorder(node);
+return {width:pad.width+_53f.width,height:pad.height+_53f.height};
 };
 dojo.html.getBoxSizing=function(node){
 var h=dojo.render.html;
 var bs=dojo.html.boxSizing;
-if(((h.ie)||(h.opera))&&node.nodeName!="IMG"){
+if(((h.ie)||(h.opera))&&node.nodeName.toLowerCase()!="img"){
 var cm=document["compatMode"];
 if((cm=="BackCompat")||(cm=="QuirksMode")){
 return bs.BORDER_BOX;
@@ -99858,12 +61647,15 @@
 if(arguments.length==0){
 node=document.documentElement;
 }
-var _53a=dojo.html.getStyle(node,"-moz-box-sizing");
-if(!_53a){
-_53a=dojo.html.getStyle(node,"box-sizing");
+var _544;
+if(!h.ie){
+_544=dojo.html.getStyle(node,"-moz-box-sizing");
+if(!_544){
+_544=dojo.html.getStyle(node,"box-sizing");
 }
-return (_53a?_53a:bs.CONTENT_BOX);
 }
+return (_544?_544:bs.CONTENT_BOX);
+}
 };
 dojo.html.isBorderBox=function(node){
 return (dojo.html.getBoxSizing(node)==dojo.html.boxSizing.BORDER_BOX);
@@ -99874,53 +61666,53 @@
 };
 dojo.html.getPaddingBox=function(node){
 var box=dojo.html.getBorderBox(node);
-var _53f=dojo.html.getBorder(node);
-return {width:box.width-_53f.width,height:box.height-_53f.height};
+var _549=dojo.html.getBorder(node);
+return {width:box.width-_549.width,height:box.height-_549.height};
 };
 dojo.html.getContentBox=function(node){
 node=dojo.byId(node);
-var _541=dojo.html.getPadBorder(node);
-return {width:node.offsetWidth-_541.width,height:node.offsetHeight-_541.height};
+var _54b=dojo.html.getPadBorder(node);
+return {width:node.offsetWidth-_54b.width,height:node.offsetHeight-_54b.height};
 };
 dojo.html.setContentBox=function(node,args){
 node=dojo.byId(node);
-var _544=0;
-var _545=0;
+var _54e=0;
+var _54f=0;
 var isbb=dojo.html.isBorderBox(node);
-var _547=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
+var _551=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
 var ret={};
 if(typeof args.width!="undefined"){
-_544=args.width+_547.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_544);
+_54e=args.width+_551.width;
+ret.width=dojo.html.setPositivePixelValue(node,"width",_54e);
 }
 if(typeof args.height!="undefined"){
-_545=args.height+_547.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_545);
+_54f=args.height+_551.height;
+ret.height=dojo.html.setPositivePixelValue(node,"height",_54f);
 }
 return ret;
 };
 dojo.html.getMarginBox=function(node){
-var _54a=dojo.html.getBorderBox(node);
-var _54b=dojo.html.getMargin(node);
-return {width:_54a.width+_54b.width,height:_54a.height+_54b.height};
+var _554=dojo.html.getBorderBox(node);
+var _555=dojo.html.getMargin(node);
+return {width:_554.width+_555.width,height:_554.height+_555.height};
 };
 dojo.html.setMarginBox=function(node,args){
 node=dojo.byId(node);
-var _54e=0;
-var _54f=0;
+var _558=0;
+var _559=0;
 var isbb=dojo.html.isBorderBox(node);
-var _551=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
-var _552=dojo.html.getMargin(node);
+var _55b=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
+var _55c=dojo.html.getMargin(node);
 var ret={};
 if(typeof args.width!="undefined"){
-_54e=args.width-_551.width;
-_54e-=_552.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_54e);
+_558=args.width-_55b.width;
+_558-=_55c.width;
+ret.width=dojo.html.setPositivePixelValue(node,"width",_558);
 }
 if(typeof args.height!="undefined"){
-_54f=args.height-_551.height;
-_54f-=_552.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_54f);
+_559=args.height-_55b.height;
+_559-=_55c.height;
+ret.height=dojo.html.setPositivePixelValue(node,"height",_559);
 }
 return ret;
 };
@@ -99938,31 +61730,31 @@
 return dojo.html.getContentBox(node);
 }
 };
-dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_557,_558,_559){
-if(_557 instanceof Array||typeof _557=="array"){
+dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_561,_562,_563){
+if(_561 instanceof Array||typeof _561=="array"){
 dojo.deprecated("dojo.html.toCoordinateArray","use dojo.html.toCoordinateObject({left: , top: , width: , height: }) instead","0.5");
-while(_557.length<4){
-_557.push(0);
+while(_561.length<4){
+_561.push(0);
 }
-while(_557.length>4){
-_557.pop();
+while(_561.length>4){
+_561.pop();
 }
-var ret={left:_557[0],top:_557[1],width:_557[2],height:_557[3]};
+var ret={left:_561[0],top:_561[1],width:_561[2],height:_561[3]};
 }else{
-if(!_557.nodeType&&!(_557 instanceof String||typeof _557=="string")&&("width" in _557||"height" in _557||"left" in _557||"x" in _557||"top" in _557||"y" in _557)){
-var ret={left:_557.left||_557.x||0,top:_557.top||_557.y||0,width:_557.width||0,height:_557.height||0};
+if(!_561.nodeType&&!(_561 instanceof String||typeof _561=="string")&&("width" in _561||"height" in _561||"left" in _561||"x" in _561||"top" in _561||"y" in _561)){
+var ret={left:_561.left||_561.x||0,top:_561.top||_561.y||0,width:_561.width||0,height:_561.height||0};
 }else{
-var node=dojo.byId(_557);
-var pos=dojo.html.abs(node,_558,_559);
-var _55d=dojo.html.getMarginBox(node);
-var ret={left:pos.left,top:pos.top,width:_55d.width,height:_55d.height};
+var node=dojo.byId(_561);
+var pos=dojo.html.abs(node,_562,_563);
+var _567=dojo.html.getMarginBox(node);
+var ret={left:pos.left,top:pos.top,width:_567.width,height:_567.height};
 }
 }
 ret.x=ret.left;
 ret.y=ret.top;
 return ret;
 };
-dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_55f){
+dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_569){
 return dojo.html._callDeprecated("setMarginBoxWidth","setMarginBox",arguments,"width");
 };
 dojo.html.setMarginBoxHeight=dojo.html.setOuterHeight=function(){
@@ -99974,19 +61766,19 @@
 dojo.html.getMarginBoxHeight=dojo.html.getOuterHeight=function(){
 return dojo.html._callDeprecated("getMarginBoxHeight","getMarginBox",arguments,null,"height");
 };
-dojo.html.getTotalOffset=function(node,type,_562){
+dojo.html.getTotalOffset=function(node,type,_56c){
 return dojo.html._callDeprecated("getTotalOffset","getAbsolutePosition",arguments,null,type);
 };
-dojo.html.getAbsoluteX=function(node,_564){
+dojo.html.getAbsoluteX=function(node,_56e){
 return dojo.html._callDeprecated("getAbsoluteX","getAbsolutePosition",arguments,null,"x");
 };
-dojo.html.getAbsoluteY=function(node,_566){
+dojo.html.getAbsoluteY=function(node,_570){
 return dojo.html._callDeprecated("getAbsoluteY","getAbsolutePosition",arguments,null,"y");
 };
-dojo.html.totalOffsetLeft=function(node,_568){
+dojo.html.totalOffsetLeft=function(node,_572){
 return dojo.html._callDeprecated("totalOffsetLeft","getAbsolutePosition",arguments,null,"left");
 };
-dojo.html.totalOffsetTop=function(node,_56a){
+dojo.html.totalOffsetTop=function(node,_574){
 return dojo.html._callDeprecated("totalOffsetTop","getAbsolutePosition",arguments,null,"top");
 };
 dojo.html.getMarginWidth=function(node){
@@ -100025,15 +61817,15 @@
 dojo.html.getContentBoxHeight=dojo.html.getContentHeight=function(){
 return dojo.html._callDeprecated("getContentBoxHeight","getContentBox",arguments,null,"height");
 };
-dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_574){
+dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_57e){
 return dojo.html._callDeprecated("setContentBoxWidth","setContentBox",arguments,"width");
 };
-dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_576){
+dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_580){
 return dojo.html._callDeprecated("setContentBoxHeight","setContentBox",arguments,"height");
 };
 dojo.provide("dojo.html.util");
-dojo.html.getElementWindow=function(_577){
-return dojo.html.getDocumentWindow(_577.ownerDocument);
+dojo.html.getElementWindow=function(_581){
+return dojo.html.getDocumentWindow(_581.ownerDocument);
 };
 dojo.html.getDocumentWindow=function(doc){
 if(dojo.render.html.safari&&!doc._parentWindow){
@@ -100055,49 +61847,49 @@
 };
 dojo.html.gravity=function(node,e){
 node=dojo.byId(node);
-var _57f=dojo.html.getCursorPosition(e);
+var _589=dojo.html.getCursorPosition(e);
 with(dojo.html){
-var _580=getAbsolutePosition(node,true);
+var _58a=getAbsolutePosition(node,true);
 var bb=getBorderBox(node);
-var _582=_580.x+(bb.width/2);
-var _583=_580.y+(bb.height/2);
+var _58c=_58a.x+(bb.width/2);
+var _58d=_58a.y+(bb.height/2);
 }
 with(dojo.html.gravity){
-return ((_57f.x<_582?WEST:EAST)|(_57f.y<_583?NORTH:SOUTH));
+return ((_589.x<_58c?WEST:EAST)|(_589.y<_58d?NORTH:SOUTH));
 }
 };
 dojo.html.gravity.NORTH=1;
 dojo.html.gravity.SOUTH=1<<1;
 dojo.html.gravity.EAST=1<<2;
 dojo.html.gravity.WEST=1<<3;
-dojo.html.overElement=function(_584,e){
-_584=dojo.byId(_584);
-var _586=dojo.html.getCursorPosition(e);
-var bb=dojo.html.getBorderBox(_584);
-var _588=dojo.html.getAbsolutePosition(_584,true,dojo.html.boxSizing.BORDER_BOX);
-var top=_588.y;
-var _58a=top+bb.height;
-var left=_588.x;
-var _58c=left+bb.width;
-return (_586.x>=left&&_586.x<=_58c&&_586.y>=top&&_586.y<=_58a);
+dojo.html.overElement=function(_58e,e){
+_58e=dojo.byId(_58e);
+var _590=dojo.html.getCursorPosition(e);
+var bb=dojo.html.getBorderBox(_58e);
+var _592=dojo.html.getAbsolutePosition(_58e,true,dojo.html.boxSizing.BORDER_BOX);
+var top=_592.y;
+var _594=top+bb.height;
+var left=_592.x;
+var _596=left+bb.width;
+return (_590.x>=left&&_590.x<=_596&&_590.y>=top&&_590.y<=_594);
 };
 dojo.html.renderedTextContent=function(node){
 node=dojo.byId(node);
-var _58e="";
+var _598="";
 if(node==null){
-return _58e;
+return _598;
 }
 for(var i=0;i<node.childNodes.length;i++){
 switch(node.childNodes[i].nodeType){
 case 1:
 case 5:
-var _590="unknown";
+var _59a="unknown";
 try{
-_590=dojo.html.getStyle(node.childNodes[i],"display");
+_59a=dojo.html.getStyle(node.childNodes[i],"display");
 }
 catch(E){
 }
-switch(_590){
+switch(_59a){
 case "block":
 case "list-item":
 case "run-in":
@@ -100110,17 +61902,17 @@
 case "table-column":
 case "table-cell":
 case "table-caption":
-_58e+="\n";
-_58e+=dojo.html.renderedTextContent(node.childNodes[i]);
-_58e+="\n";
+_598+="\n";
+_598+=dojo.html.renderedTextContent(node.childNodes[i]);
+_598+="\n";
 break;
 case "none":
 break;
 default:
 if(node.childNodes[i].tagName&&node.childNodes[i].tagName.toLowerCase()=="br"){
-_58e+="\n";
+_598+="\n";
 }else{
-_58e+=dojo.html.renderedTextContent(node.childNodes[i]);
+_598+=dojo.html.renderedTextContent(node.childNodes[i]);
 }
 break;
 }
@@ -100129,19 +61921,19 @@
 case 2:
 case 4:
 var text=node.childNodes[i].nodeValue;
-var _592="unknown";
+var _59c="unknown";
 try{
-_592=dojo.html.getStyle(node,"text-transform");
+_59c=dojo.html.getStyle(node,"text-transform");
 }
 catch(E){
 }
-switch(_592){
+switch(_59c){
 case "capitalize":
-var _593=text.split(" ");
-for(var i=0;i<_593.length;i++){
-_593[i]=_593[i].charAt(0).toUpperCase()+_593[i].substring(1);
+var _59d=text.split(" ");
+for(var i=0;i<_59d.length;i++){
+_59d[i]=_59d[i].charAt(0).toUpperCase()+_59d[i].substring(1);
 }
-text=_593.join(" ");
+text=_59d.join(" ");
 break;
 case "uppercase":
 text=text.toUpperCase();
@@ -100152,7 +61944,7 @@
 default:
 break;
 }
-switch(_592){
+switch(_59c){
 case "nowrap":
 break;
 case "pre-wrap":
@@ -100163,18 +61955,18 @@
 break;
 default:
 text=text.replace(/\s+/," ");
-if(/\s$/.test(_58e)){
+if(/\s$/.test(_598)){
 text.replace(/^\s/,"");
 }
 break;
 }
-_58e+=text;
+_598+=text;
 break;
 default:
 break;
 }
 }
-return _58e;
+return _598;
 };
 dojo.html.createNodesFromText=function(txt,trim){
 if(trim){
@@ -100183,18 +61975,18 @@
 var tn=dojo.doc().createElement("div");
 tn.style.visibility="hidden";
 dojo.body().appendChild(tn);
-var _597="none";
+var _5a1="none";
 if((/^<t[dh][\s\r\n>]/i).test(txt.replace(/^\s+/))){
 txt="<table><tbody><tr>"+txt+"</tr></tbody></table>";
-_597="cell";
+_5a1="cell";
 }else{
 if((/^<tr[\s\r\n>]/i).test(txt.replace(/^\s+/))){
 txt="<table><tbody>"+txt+"</tbody></table>";
-_597="row";
+_5a1="row";
 }else{
 if((/^<(thead|tbody|tfoot)[\s\r\n>]/i).test(txt.replace(/^\s+/))){
 txt="<table>"+txt+"</table>";
-_597="section";
+_5a1="section";
 }
 }
 }
@@ -100202,147 +61994,147 @@
 if(tn["normalize"]){
 tn.normalize();
 }
-var _598=null;
-switch(_597){
+var _5a2=null;
+switch(_5a1){
 case "cell":
-_598=tn.getElementsByTagName("tr")[0];
+_5a2=tn.getElementsByTagName("tr")[0];
 break;
 case "row":
-_598=tn.getElementsByTagName("tbody")[0];
+_5a2=tn.getElementsByTagName("tbody")[0];
 break;
 case "section":
-_598=tn.getElementsByTagName("table")[0];
+_5a2=tn.getElementsByTagName("table")[0];
 break;
 default:
-_598=tn;
+_5a2=tn;
 break;
 }
-var _599=[];
-for(var x=0;x<_598.childNodes.length;x++){
-_599.push(_598.childNodes[x].cloneNode(true));
+var _5a3=[];
+for(var x=0;x<_5a2.childNodes.length;x++){
+_5a3.push(_5a2.childNodes[x].cloneNode(true));
 }
 tn.style.display="none";
 dojo.html.destroyNode(tn);
-return _599;
+return _5a3;
 };
-dojo.html.placeOnScreen=function(node,_59c,_59d,_59e,_59f,_5a0,_5a1){
-if(_59c instanceof Array||typeof _59c=="array"){
-_5a1=_5a0;
-_5a0=_59f;
-_59f=_59e;
-_59e=_59d;
-_59d=_59c[1];
-_59c=_59c[0];
+dojo.html.placeOnScreen=function(node,_5a6,_5a7,_5a8,_5a9,_5aa,_5ab){
+if(_5a6 instanceof Array||typeof _5a6=="array"){
+_5ab=_5aa;
+_5aa=_5a9;
+_5a9=_5a8;
+_5a8=_5a7;
+_5a7=_5a6[1];
+_5a6=_5a6[0];
 }
-if(_5a0 instanceof String||typeof _5a0=="string"){
-_5a0=_5a0.split(",");
+if(_5aa instanceof String||typeof _5aa=="string"){
+_5aa=_5aa.split(",");
 }
-if(!isNaN(_59e)){
-_59e=[Number(_59e),Number(_59e)];
+if(!isNaN(_5a8)){
+_5a8=[Number(_5a8),Number(_5a8)];
 }else{
-if(!(_59e instanceof Array||typeof _59e=="array")){
-_59e=[0,0];
+if(!(_5a8 instanceof Array||typeof _5a8=="array")){
+_5a8=[0,0];
 }
 }
-var _5a2=dojo.html.getScroll().offset;
+var _5ac=dojo.html.getScroll().offset;
 var view=dojo.html.getViewport();
 node=dojo.byId(node);
-var _5a4=node.style.display;
+var _5ae=node.style.display;
 node.style.display="";
 var bb=dojo.html.getBorderBox(node);
 var w=bb.width;
 var h=bb.height;
-node.style.display=_5a4;
-if(!(_5a0 instanceof Array||typeof _5a0=="array")){
-_5a0=["TL"];
+node.style.display=_5ae;
+if(!(_5aa instanceof Array||typeof _5aa=="array")){
+_5aa=["TL"];
 }
-var _5a8,_5a9,_5aa=Infinity,_5ab;
-for(var _5ac=0;_5ac<_5a0.length;++_5ac){
-var _5ad=_5a0[_5ac];
-var _5ae=true;
-var tryX=_59c-(_5ad.charAt(1)=="L"?0:w)+_59e[0]*(_5ad.charAt(1)=="L"?1:-1);
-var tryY=_59d-(_5ad.charAt(0)=="T"?0:h)+_59e[1]*(_5ad.charAt(0)=="T"?1:-1);
-if(_59f){
-tryX-=_5a2.x;
-tryY-=_5a2.y;
+var _5b2,_5b3,_5b4=Infinity,_5b5;
+for(var _5b6=0;_5b6<_5aa.length;++_5b6){
+var _5b7=_5aa[_5b6];
+var _5b8=true;
+var tryX=_5a6-(_5b7.charAt(1)=="L"?0:w)+_5a8[0]*(_5b7.charAt(1)=="L"?1:-1);
+var tryY=_5a7-(_5b7.charAt(0)=="T"?0:h)+_5a8[1]*(_5b7.charAt(0)=="T"?1:-1);
+if(_5a9){
+tryX-=_5ac.x;
+tryY-=_5ac.y;
 }
 if(tryX<0){
 tryX=0;
-_5ae=false;
+_5b8=false;
 }
 if(tryY<0){
 tryY=0;
-_5ae=false;
+_5b8=false;
 }
 var x=tryX+w;
 if(x>view.width){
 x=view.width-w;
-_5ae=false;
+_5b8=false;
 }else{
 x=tryX;
 }
-x=Math.max(_59e[0],x)+_5a2.x;
+x=Math.max(_5a8[0],x)+_5ac.x;
 var y=tryY+h;
 if(y>view.height){
 y=view.height-h;
-_5ae=false;
+_5b8=false;
 }else{
 y=tryY;
 }
-y=Math.max(_59e[1],y)+_5a2.y;
-if(_5ae){
-_5a8=x;
-_5a9=y;
-_5aa=0;
-_5ab=_5ad;
+y=Math.max(_5a8[1],y)+_5ac.y;
+if(_5b8){
+_5b2=x;
+_5b3=y;
+_5b4=0;
+_5b5=_5b7;
 break;
 }else{
-var dist=Math.pow(x-tryX-_5a2.x,2)+Math.pow(y-tryY-_5a2.y,2);
-if(_5aa>dist){
-_5aa=dist;
-_5a8=x;
-_5a9=y;
-_5ab=_5ad;
+var dist=Math.pow(x-tryX-_5ac.x,2)+Math.pow(y-tryY-_5ac.y,2);
+if(_5b4>dist){
+_5b4=dist;
+_5b2=x;
+_5b3=y;
+_5b5=_5b7;
 }
 }
 }
-if(!_5a1){
-node.style.left=_5a8+"px";
-node.style.top=_5a9+"px";
+if(!_5ab){
+node.style.left=_5b2+"px";
+node.style.top=_5b3+"px";
 }
-return {left:_5a8,top:_5a9,x:_5a8,y:_5a9,dist:_5aa,corner:_5ab};
+return {left:_5b2,top:_5b3,x:_5b2,y:_5b3,dist:_5b4,corner:_5b5};
 };
-dojo.html.placeOnScreenPoint=function(node,_5b5,_5b6,_5b7,_5b8){
+dojo.html.placeOnScreenPoint=function(node,_5bf,_5c0,_5c1,_5c2){
 dojo.deprecated("dojo.html.placeOnScreenPoint","use dojo.html.placeOnScreen() instead","0.5");
-return dojo.html.placeOnScreen(node,_5b5,_5b6,_5b7,_5b8,["TL","TR","BL","BR"]);
+return dojo.html.placeOnScreen(node,_5bf,_5c0,_5c1,_5c2,["TL","TR","BL","BR"]);
 };
-dojo.html.placeOnScreenAroundElement=function(node,_5ba,_5bb,_5bc,_5bd,_5be){
-var best,_5c0=Infinity;
-_5ba=dojo.byId(_5ba);
-var _5c1=_5ba.style.display;
-_5ba.style.display="";
-var mb=dojo.html.getElementBox(_5ba,_5bc);
-var _5c3=mb.width;
-var _5c4=mb.height;
-var _5c5=dojo.html.getAbsolutePosition(_5ba,true,_5bc);
-_5ba.style.display=_5c1;
-for(var _5c6 in _5bd){
-var pos,_5c8,_5c9;
-var _5ca=_5bd[_5c6];
-_5c8=_5c5.x+(_5c6.charAt(1)=="L"?0:_5c3);
-_5c9=_5c5.y+(_5c6.charAt(0)=="T"?0:_5c4);
-pos=dojo.html.placeOnScreen(node,_5c8,_5c9,_5bb,true,_5ca,true);
+dojo.html.placeOnScreenAroundElement=function(node,_5c4,_5c5,_5c6,_5c7,_5c8){
+var best,_5ca=Infinity;
+_5c4=dojo.byId(_5c4);
+var _5cb=_5c4.style.display;
+_5c4.style.display="";
+var mb=dojo.html.getElementBox(_5c4,_5c6);
+var _5cd=mb.width;
+var _5ce=mb.height;
+var _5cf=dojo.html.getAbsolutePosition(_5c4,true,_5c6);
+_5c4.style.display=_5cb;
+for(var _5d0 in _5c7){
+var pos,_5d2,_5d3;
+var _5d4=_5c7[_5d0];
+_5d2=_5cf.x+(_5d0.charAt(1)=="L"?0:_5cd);
+_5d3=_5cf.y+(_5d0.charAt(0)=="T"?0:_5ce);
+pos=dojo.html.placeOnScreen(node,_5d2,_5d3,_5c5,true,_5d4,true);
 if(pos.dist==0){
 best=pos;
 break;
 }else{
-if(_5c0>pos.dist){
-_5c0=pos.dist;
+if(_5ca>pos.dist){
+_5ca=pos.dist;
 best=pos;
 }
 }
 }
-if(!_5be){
+if(!_5c8){
 node.style.left=best.left+"px";
 node.style.top=best.top+"px";
 }
@@ -100360,14 +62152,14 @@
 if(dojo.render.html.mozilla){
 node.scrollIntoView(false);
 }else{
-var _5cc=node.parentNode;
-var _5cd=_5cc.scrollTop+dojo.html.getBorderBox(_5cc).height;
-var _5ce=node.offsetTop+dojo.html.getMarginBox(node).height;
-if(_5cd<_5ce){
-_5cc.scrollTop+=(_5ce-_5cd);
+var _5d6=node.parentNode;
+var _5d7=_5d6.scrollTop+dojo.html.getBorderBox(_5d6).height;
+var _5d8=node.offsetTop+dojo.html.getMarginBox(node).height;
+if(_5d7<_5d8){
+_5d6.scrollTop+=(_5d8-_5d7);
 }else{
-if(_5cc.scrollTop>node.offsetTop){
-_5cc.scrollTop-=(_5cc.scrollTop-node.offsetTop);
+if(_5d6.scrollTop>node.offsetTop){
+_5d6.scrollTop-=(_5d6.scrollTop-node.offsetTop);
 }
 }
 }
@@ -100405,8 +62197,8 @@
 dojo.gfx.color.Color.fromArray=function(arr){
 return new dojo.gfx.color.Color(arr[0],arr[1],arr[2],arr[3]);
 };
-dojo.extend(dojo.gfx.color.Color,{toRgb:function(_5d5){
-if(_5d5){
+dojo.extend(dojo.gfx.color.Color,{toRgb:function(_5df){
+if(_5df){
 return this.toRgba();
 }else{
 return [this.r,this.g,this.b];
@@ -100419,62 +62211,62 @@
 return "rgb("+this.toRgb().join()+")";
 },toString:function(){
 return this.toHex();
-},blend:function(_5d6,_5d7){
+},blend:function(_5e0,_5e1){
 var rgb=null;
-if(dojo.lang.isArray(_5d6)){
-rgb=_5d6;
+if(dojo.lang.isArray(_5e0)){
+rgb=_5e0;
 }else{
-if(_5d6 instanceof dojo.gfx.color.Color){
-rgb=_5d6.toRgb();
+if(_5e0 instanceof dojo.gfx.color.Color){
+rgb=_5e0.toRgb();
 }else{
-rgb=new dojo.gfx.color.Color(_5d6).toRgb();
+rgb=new dojo.gfx.color.Color(_5e0).toRgb();
 }
 }
-return dojo.gfx.color.blend(this.toRgb(),rgb,_5d7);
+return dojo.gfx.color.blend(this.toRgb(),rgb,_5e1);
 }});
 dojo.gfx.color.named={white:[255,255,255],black:[0,0,0],red:[255,0,0],green:[0,255,0],lime:[0,255,0],blue:[0,0,255],navy:[0,0,128],gray:[128,128,128],silver:[192,192,192]};
-dojo.gfx.color.blend=function(a,b,_5db){
+dojo.gfx.color.blend=function(a,b,_5e5){
 if(typeof a=="string"){
-return dojo.gfx.color.blendHex(a,b,_5db);
+return dojo.gfx.color.blendHex(a,b,_5e5);
 }
-if(!_5db){
-_5db=0;
+if(!_5e5){
+_5e5=0;
 }
-_5db=Math.min(Math.max(-1,_5db),1);
-_5db=((_5db+1)/2);
+_5e5=Math.min(Math.max(-1,_5e5),1);
+_5e5=((_5e5+1)/2);
 var c=[];
 for(var x=0;x<3;x++){
-c[x]=parseInt(b[x]+((a[x]-b[x])*_5db));
+c[x]=parseInt(b[x]+((a[x]-b[x])*_5e5));
 }
 return c;
 };
-dojo.gfx.color.blendHex=function(a,b,_5e0){
-return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_5e0));
+dojo.gfx.color.blendHex=function(a,b,_5ea){
+return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_5ea));
 };
-dojo.gfx.color.extractRGB=function(_5e1){
+dojo.gfx.color.extractRGB=function(_5eb){
 var hex="0123456789abcdef";
-_5e1=_5e1.toLowerCase();
-if(_5e1.indexOf("rgb")==0){
-var _5e3=_5e1.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-var ret=_5e3.splice(1,3);
+_5eb=_5eb.toLowerCase();
+if(_5eb.indexOf("rgb")==0){
+var _5ed=_5eb.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
+var ret=_5ed.splice(1,3);
 return ret;
 }else{
-var _5e5=dojo.gfx.color.hex2rgb(_5e1);
-if(_5e5){
-return _5e5;
+var _5ef=dojo.gfx.color.hex2rgb(_5eb);
+if(_5ef){
+return _5ef;
 }else{
-return dojo.gfx.color.named[_5e1]||[255,255,255];
+return dojo.gfx.color.named[_5eb]||[255,255,255];
 }
 }
 };
 dojo.gfx.color.hex2rgb=function(hex){
-var _5e7="0123456789ABCDEF";
+var _5f1="0123456789ABCDEF";
 var rgb=new Array(3);
 if(hex.indexOf("#")==0){
 hex=hex.substring(1);
 }
 hex=hex.toUpperCase();
-if(hex.replace(new RegExp("["+_5e7+"]","g"),"")!=""){
+if(hex.replace(new RegExp("["+_5f1+"]","g"),"")!=""){
 return null;
 }
 if(hex.length==3){
@@ -100487,7 +62279,7 @@
 rgb[2]=hex.substring(4);
 }
 for(var i=0;i<rgb.length;i++){
-rgb[i]=_5e7.indexOf(rgb[i].charAt(0))*16+_5e7.indexOf(rgb[i].charAt(1));
+rgb[i]=_5f1.indexOf(rgb[i].charAt(0))*16+_5f1.indexOf(rgb[i].charAt(1));
 }
 return rgb;
 };
@@ -100509,10 +62301,10 @@
 return ret.join("");
 };
 dojo.provide("dojo.lfx.Animation");
-dojo.lfx.Line=function(_5f0,end){
-this.start=_5f0;
+dojo.lfx.Line=function(_5fa,end){
+this.start=_5fa;
 this.end=end;
-if(dojo.lang.isArray(_5f0)){
+if(dojo.lang.isArray(_5fa)){
 var diff=[];
 dojo.lang.forEach(this.start,function(s,i){
 diff[i]=this.end[i]-s;
@@ -100525,19 +62317,21 @@
 return res;
 };
 }else{
-var diff=end-_5f0;
+var diff=end-_5fa;
 this.getValue=function(n){
 return (diff*n)+this.start;
 };
 }
 };
+if((dojo.render.html.khtml)&&(!dojo.render.html.safari)){
 dojo.lfx.easeDefault=function(n){
-if(dojo.render.html.khtml){
 return (parseFloat("0.5")+((Math.sin((n+parseFloat("1.5"))*Math.PI))/2));
+};
 }else{
+dojo.lfx.easeDefault=function(n){
 return (0.5+((Math.sin((n+1.5)*Math.PI))/2));
-}
 };
+}
 dojo.lfx.easeIn=function(n){
 return Math.pow(n,3);
 };
@@ -100549,17 +62343,17 @@
 };
 dojo.lfx.IAnimation=function(){
 };
-dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:25,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,connect:function(evt,_5ff,_600){
-if(!_600){
-_600=_5ff;
-_5ff=this;
+dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:10,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,connect:function(evt,_60a,_60b){
+if(!_60b){
+_60b=_60a;
+_60a=this;
 }
-_600=dojo.lang.hitch(_5ff,_600);
-var _601=this[evt]||function(){
+_60b=dojo.lang.hitch(_60a,_60b);
+var _60c=this[evt]||function(){
 };
 this[evt]=function(){
-var ret=_601.apply(this,arguments);
-_600.apply(this,arguments);
+var ret=_60c.apply(this,arguments);
+_60b.apply(this,arguments);
 return ret;
 };
 return this;
@@ -100568,57 +62362,57 @@
 this[evt].apply(this,(args||[]));
 }
 return this;
-},repeat:function(_605){
-this.repeatCount=_605;
+},repeat:function(_610){
+this.repeatCount=_610;
 return this;
 },_active:false,_paused:false});
-dojo.lfx.Animation=function(_606,_607,_608,_609,_60a,rate){
+dojo.lfx.Animation=function(_611,_612,_613,_614,_615,rate){
 dojo.lfx.IAnimation.call(this);
-if(dojo.lang.isNumber(_606)||(!_606&&_607.getValue)){
-rate=_60a;
-_60a=_609;
-_609=_608;
-_608=_607;
-_607=_606;
-_606=null;
+if(dojo.lang.isNumber(_611)||(!_611&&_612.getValue)){
+rate=_615;
+_615=_614;
+_614=_613;
+_613=_612;
+_612=_611;
+_611=null;
 }else{
-if(_606.getValue||dojo.lang.isArray(_606)){
-rate=_609;
-_60a=_608;
-_609=_607;
-_608=_606;
-_607=null;
-_606=null;
+if(_611.getValue||dojo.lang.isArray(_611)){
+rate=_614;
+_615=_613;
+_614=_612;
+_613=_611;
+_612=null;
+_611=null;
 }
 }
-if(dojo.lang.isArray(_608)){
-this.curve=new dojo.lfx.Line(_608[0],_608[1]);
+if(dojo.lang.isArray(_613)){
+this.curve=new dojo.lfx.Line(_613[0],_613[1]);
 }else{
-this.curve=_608;
+this.curve=_613;
 }
-if(_607!=null&&_607>0){
-this.duration=_607;
+if(_612!=null&&_612>0){
+this.duration=_612;
 }
-if(_60a){
-this.repeatCount=_60a;
+if(_615){
+this.repeatCount=_615;
 }
 if(rate){
 this.rate=rate;
 }
-if(_606){
+if(_611){
 dojo.lang.forEach(["handler","beforeBegin","onBegin","onEnd","onPlay","onStop","onAnimate"],function(item){
-if(_606[item]){
-this.connect(item,_606[item]);
+if(_611[item]){
+this.connect(item,_611[item]);
 }
 },this);
 }
-if(_609&&dojo.lang.isFunction(_609)){
-this.easing=_609;
+if(_614&&dojo.lang.isFunction(_614)){
+this.easing=_614;
 }
 };
 dojo.inherits(dojo.lfx.Animation,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_60d,_60e){
-if(_60e){
+dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_618,_619){
+if(_619){
 clearTimeout(this._timer);
 this._active=false;
 this._paused=false;
@@ -100630,10 +62424,10 @@
 }
 this.fire("handler",["beforeBegin"]);
 this.fire("beforeBegin");
-if(_60d>0){
+if(_618>0){
 setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_60e);
-}),_60d);
+this.play(null,_619);
+}),_618);
 return this;
 }
 this._startTime=new Date().valueOf();
@@ -100644,16 +62438,16 @@
 this._active=true;
 this._paused=false;
 var step=this._percent/100;
-var _610=this.curve.getValue(step);
+var _61b=this.curve.getValue(step);
 if(this._percent==0){
 if(!this._startRepeatCount){
 this._startRepeatCount=this.repeatCount;
 }
-this.fire("handler",["begin",_610]);
-this.fire("onBegin",[_610]);
+this.fire("handler",["begin",_61b]);
+this.fire("onBegin",[_61b]);
 }
-this.fire("handler",["play",_610]);
-this.fire("onPlay",[_610]);
+this.fire("handler",["play",_61b]);
+this.fire("onPlay",[_61b]);
 this._cycle();
 return this;
 },pause:function(){
@@ -100662,28 +62456,28 @@
 return this;
 }
 this._paused=true;
-var _611=this.curve.getValue(this._percent/100);
-this.fire("handler",["pause",_611]);
-this.fire("onPause",[_611]);
+var _61c=this.curve.getValue(this._percent/100);
+this.fire("handler",["pause",_61c]);
+this.fire("onPause",[_61c]);
 return this;
-},gotoPercent:function(pct,_613){
+},gotoPercent:function(pct,_61e){
 clearTimeout(this._timer);
 this._active=true;
 this._paused=true;
 this._percent=pct;
-if(_613){
+if(_61e){
 this.play();
 }
 return this;
-},stop:function(_614){
+},stop:function(_61f){
 clearTimeout(this._timer);
 var step=this._percent/100;
-if(_614){
+if(_61f){
 step=1;
 }
-var _616=this.curve.getValue(step);
-this.fire("handler",["stop",_616]);
-this.fire("onStop",[_616]);
+var _621=this.curve.getValue(step);
+this.fire("handler",["stop",_621]);
+this.fire("onStop",[_621]);
 this._active=false;
 this._paused=false;
 return this;
@@ -100708,9 +62502,9 @@
 if((this.easing)&&(dojo.lang.isFunction(this.easing))){
 step=this.easing(step);
 }
-var _619=this.curve.getValue(step);
-this.fire("handler",["animate",_619]);
-this.fire("onAnimate",[_619]);
+var _624=this.curve.getValue(step);
+this.fire("handler",["animate",_624]);
+this.fire("onAnimate",[_624]);
 if(step<1){
 this._timer=setTimeout(dojo.lang.hitch(this,"_cycle"),this.rate);
 }else{
@@ -100734,44 +62528,44 @@
 }
 return this;
 }});
-dojo.lfx.Combine=function(_61a){
+dojo.lfx.Combine=function(_625){
 dojo.lfx.IAnimation.call(this);
 this._anims=[];
 this._animsEnded=0;
-var _61b=arguments;
-if(_61b.length==1&&(dojo.lang.isArray(_61b[0])||dojo.lang.isArrayLike(_61b[0]))){
-_61b=_61b[0];
+var _626=arguments;
+if(_626.length==1&&(dojo.lang.isArray(_626[0])||dojo.lang.isArrayLike(_626[0]))){
+_626=_626[0];
 }
-dojo.lang.forEach(_61b,function(anim){
+dojo.lang.forEach(_626,function(anim){
 this._anims.push(anim);
 anim.connect("onEnd",dojo.lang.hitch(this,"_onAnimsEnded"));
 },this);
 };
 dojo.inherits(dojo.lfx.Combine,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_61d,_61e){
+dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_628,_629){
 if(!this._anims.length){
 return this;
 }
 this.fire("beforeBegin");
-if(_61d>0){
+if(_628>0){
 setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_61e);
-}),_61d);
+this.play(null,_629);
+}),_628);
 return this;
 }
-if(_61e||this._anims[0].percent==0){
+if(_629||this._anims[0].percent==0){
 this.fire("onBegin");
 }
 this.fire("onPlay");
-this._animsCall("play",null,_61e);
+this._animsCall("play",null,_629);
 return this;
 },pause:function(){
 this.fire("onPause");
 this._animsCall("pause");
 return this;
-},stop:function(_61f){
+},stop:function(_62a){
 this.fire("onStop");
-this._animsCall("stop",_61f);
+this._animsCall("stop",_62a);
 return this;
 },_onAnimsEnded:function(){
 this._animsEnded++;
@@ -100779,31 +62573,31 @@
 this.fire("onEnd");
 }
 return this;
-},_animsCall:function(_620){
+},_animsCall:function(_62b){
 var args=[];
 if(arguments.length>1){
 for(var i=1;i<arguments.length;i++){
 args.push(arguments[i]);
 }
 }
-var _623=this;
+var _62e=this;
 dojo.lang.forEach(this._anims,function(anim){
-anim[_620](args);
-},_623);
+anim[_62b](args);
+},_62e);
 return this;
 }});
-dojo.lfx.Chain=function(_625){
+dojo.lfx.Chain=function(_630){
 dojo.lfx.IAnimation.call(this);
 this._anims=[];
 this._currAnim=-1;
-var _626=arguments;
-if(_626.length==1&&(dojo.lang.isArray(_626[0])||dojo.lang.isArrayLike(_626[0]))){
-_626=_626[0];
+var _631=arguments;
+if(_631.length==1&&(dojo.lang.isArray(_631[0])||dojo.lang.isArrayLike(_631[0]))){
+_631=_631[0];
 }
-var _627=this;
-dojo.lang.forEach(_626,function(anim,i,_62a){
+var _632=this;
+dojo.lang.forEach(_631,function(anim,i,_635){
 this._anims.push(anim);
-if(i<_62a.length-1){
+if(i<_635.length-1){
 anim.connect("onEnd",dojo.lang.hitch(this,"_playNext"));
 }else{
 anim.connect("onEnd",dojo.lang.hitch(this,function(){
@@ -100813,28 +62607,28 @@
 },this);
 };
 dojo.inherits(dojo.lfx.Chain,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_62b,_62c){
+dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_636,_637){
 if(!this._anims.length){
 return this;
 }
-if(_62c||!this._anims[this._currAnim]){
+if(_637||!this._anims[this._currAnim]){
 this._currAnim=0;
 }
-var _62d=this._anims[this._currAnim];
+var _638=this._anims[this._currAnim];
 this.fire("beforeBegin");
-if(_62b>0){
+if(_636>0){
 setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_62c);
-}),_62b);
+this.play(null,_637);
+}),_636);
 return this;
 }
-if(_62d){
+if(_638){
 if(this._currAnim==0){
 this.fire("handler",["begin",this._currAnim]);
 this.fire("onBegin",[this._currAnim]);
 }
 this.fire("onPlay",[this._currAnim]);
-_62d.play(null,_62c);
+_638.play(null,_637);
 }
 return this;
 },pause:function(){
@@ -100850,9 +62644,9 @@
 if(this._currAnim==-1){
 this._currAnim=0;
 }
-var _62e=this._anims[this._currAnim];
-if(_62e){
-if(!_62e._active||_62e._paused){
+var _639=this._anims[this._currAnim];
+if(_639){
+if(!_639._active||_639._paused){
 this.play();
 }else{
 this.pause();
@@ -100860,12 +62654,12 @@
 }
 return this;
 },stop:function(){
-var _62f=this._anims[this._currAnim];
-if(_62f){
-_62f.stop();
+var _63a=this._anims[this._currAnim];
+if(_63a){
+_63a.stop();
 this.fire("onStop",[this._currAnim]);
 }
-return _62f;
+return _63a;
 },_playNext:function(){
 if(this._currAnim==-1||this._anims.length==0){
 return this;
@@ -100876,82 +62670,82 @@
 }
 return this;
 }});
-dojo.lfx.combine=function(_630){
-var _631=arguments;
+dojo.lfx.combine=function(_63b){
+var _63c=arguments;
 if(dojo.lang.isArray(arguments[0])){
-_631=arguments[0];
+_63c=arguments[0];
 }
-if(_631.length==1){
-return _631[0];
+if(_63c.length==1){
+return _63c[0];
 }
-return new dojo.lfx.Combine(_631);
+return new dojo.lfx.Combine(_63c);
 };
-dojo.lfx.chain=function(_632){
-var _633=arguments;
+dojo.lfx.chain=function(_63d){
+var _63e=arguments;
 if(dojo.lang.isArray(arguments[0])){
-_633=arguments[0];
+_63e=arguments[0];
 }
-if(_633.length==1){
-return _633[0];
+if(_63e.length==1){
+return _63e[0];
 }
-return new dojo.lfx.Chain(_633);
+return new dojo.lfx.Chain(_63e);
 };
 dojo.provide("dojo.html.color");
 dojo.html.getBackgroundColor=function(node){
 node=dojo.byId(node);
-var _635;
+var _640;
 do{
-_635=dojo.html.getStyle(node,"background-color");
-if(_635.toLowerCase()=="rgba(0, 0, 0, 0)"){
-_635="transparent";
+_640=dojo.html.getStyle(node,"background-color");
+if(_640.toLowerCase()=="rgba(0, 0, 0, 0)"){
+_640="transparent";
 }
 if(node==document.getElementsByTagName("body")[0]){
 node=null;
 break;
 }
 node=node.parentNode;
-}while(node&&dojo.lang.inArray(["transparent",""],_635));
-if(_635=="transparent"){
-_635=[255,255,255,0];
+}while(node&&dojo.lang.inArray(["transparent",""],_640));
+if(_640=="transparent"){
+_640=[255,255,255,0];
 }else{
-_635=dojo.gfx.color.extractRGB(_635);
+_640=dojo.gfx.color.extractRGB(_640);
 }
-return _635;
+return _640;
 };
 dojo.provide("dojo.lfx.html");
-dojo.lfx.html._byId=function(_636){
-if(!_636){
+dojo.lfx.html._byId=function(_641){
+if(!_641){
 return [];
 }
-if(dojo.lang.isArrayLike(_636)){
-if(!_636.alreadyChecked){
+if(dojo.lang.isArrayLike(_641)){
+if(!_641.alreadyChecked){
 var n=[];
-dojo.lang.forEach(_636,function(node){
+dojo.lang.forEach(_641,function(node){
 n.push(dojo.byId(node));
 });
 n.alreadyChecked=true;
 return n;
 }else{
-return _636;
+return _641;
 }
 }else{
 var n=[];
-n.push(dojo.byId(_636));
+n.push(dojo.byId(_641));
 n.alreadyChecked=true;
 return n;
 }
 };
-dojo.lfx.html.propertyAnimation=function(_639,_63a,_63b,_63c,_63d){
-_639=dojo.lfx.html._byId(_639);
-var _63e={"propertyMap":_63a,"nodes":_639,"duration":_63b,"easing":_63c||dojo.lfx.easeDefault};
-var _63f=function(args){
+dojo.lfx.html.propertyAnimation=function(_644,_645,_646,_647,_648){
+_644=dojo.lfx.html._byId(_644);
+var _649={"propertyMap":_645,"nodes":_644,"duration":_646,"easing":_647||dojo.lfx.easeDefault};
+var _64a=function(args){
 if(args.nodes.length==1){
 var pm=args.propertyMap;
 if(!dojo.lang.isArray(args.propertyMap)){
 var parr=[];
-for(var _643 in pm){
-pm[_643].property=_643;
-parr.push(pm[_643]);
+for(var _64e in pm){
+pm[_64e].property=_64e;
+parr.push(pm[_64e]);
 }
 pm=args.propertyMap=parr;
 }
@@ -100966,24 +62760,24 @@
 });
 }
 };
-var _645=function(_646){
-var _647=[];
-dojo.lang.forEach(_646,function(c){
-_647.push(Math.round(c));
+var _650=function(_651){
+var _652=[];
+dojo.lang.forEach(_651,function(c){
+_652.push(Math.round(c));
 });
-return _647;
+return _652;
 };
-var _649=function(n,_64b){
+var _654=function(n,_656){
 n=dojo.byId(n);
 if(!n||!n.style){
 return;
 }
-for(var s in _64b){
+for(var s in _656){
 try{
 if(s=="opacity"){
-dojo.html.setOpacity(n,_64b[s]);
+dojo.html.setOpacity(n,_656[s]);
 }else{
-n.style[s]=_64b[s];
+n.style[s]=_656[s];
 }
 }
 catch(e){
@@ -100991,10 +62785,10 @@
 }
 }
 };
-var _64d=function(_64e){
-this._properties=_64e;
-this.diffs=new Array(_64e.length);
-dojo.lang.forEach(_64e,function(prop,i){
+var _658=function(_659){
+this._properties=_659;
+this.diffs=new Array(_659.length);
+dojo.lang.forEach(_659,function(prop,i){
 if(dojo.lang.isFunction(prop.start)){
 prop.start=prop.start(prop,i);
 }
@@ -101015,43 +62809,43 @@
 this.getValue=function(n){
 var ret={};
 dojo.lang.forEach(this._properties,function(prop,i){
-var _655=null;
+var _660=null;
 if(dojo.lang.isArray(prop.start)){
 }else{
 if(prop.start instanceof dojo.gfx.color.Color){
-_655=(prop.units||"rgb")+"(";
+_660=(prop.units||"rgb")+"(";
 for(var j=0;j<prop.startRgb.length;j++){
-_655+=Math.round(((prop.endRgb[j]-prop.startRgb[j])*n)+prop.startRgb[j])+(j<prop.startRgb.length-1?",":"");
+_660+=Math.round(((prop.endRgb[j]-prop.startRgb[j])*n)+prop.startRgb[j])+(j<prop.startRgb.length-1?",":"");
 }
-_655+=")";
+_660+=")";
 }else{
-_655=((this.diffs[i])*n)+prop.start+(prop.property!="opacity"?prop.units||"px":"");
+_660=((this.diffs[i])*n)+prop.start+(prop.property!="opacity"?prop.units||"px":"");
 }
 }
-ret[dojo.html.toCamelCase(prop.property)]=_655;
+ret[dojo.html.toCamelCase(prop.property)]=_660;
 },this);
 return ret;
 };
 };
 var anim=new dojo.lfx.Animation({beforeBegin:function(){
-_63f(_63e);
-anim.curve=new _64d(_63e.propertyMap);
-},onAnimate:function(_658){
-dojo.lang.forEach(_63e.nodes,function(node){
-_649(node,_658);
+_64a(_649);
+anim.curve=new _658(_649.propertyMap);
+},onAnimate:function(_663){
+dojo.lang.forEach(_649.nodes,function(node){
+_654(node,_663);
 });
-}},_63e.duration,null,_63e.easing);
-if(_63d){
-for(var x in _63d){
-if(dojo.lang.isFunction(_63d[x])){
-anim.connect(x,anim,_63d[x]);
+}},_649.duration,null,_649.easing);
+if(_648){
+for(var x in _648){
+if(dojo.lang.isFunction(_648[x])){
+anim.connect(x,anim,_648[x]);
 }
 }
 }
 return anim;
 };
-dojo.lfx.html._makeFadeable=function(_65b){
-var _65c=function(node){
+dojo.lfx.html._makeFadeable=function(_666){
+var _667=function(node){
 if(dojo.render.html.ie){
 if((node.style.zoom.length==0)&&(dojo.html.getStyle(node,"zoom")=="normal")){
 node.style.zoom="1";
@@ -101061,129 +62855,129 @@
 }
 }
 };
-if(dojo.lang.isArrayLike(_65b)){
-dojo.lang.forEach(_65b,_65c);
+if(dojo.lang.isArrayLike(_666)){
+dojo.lang.forEach(_666,_667);
 }else{
-_65c(_65b);
+_667(_666);
 }
 };
-dojo.lfx.html.fade=function(_65e,_65f,_660,_661,_662){
-_65e=dojo.lfx.html._byId(_65e);
-var _663={property:"opacity"};
-if(!dj_undef("start",_65f)){
-_663.start=_65f.start;
+dojo.lfx.html.fade=function(_669,_66a,_66b,_66c,_66d){
+_669=dojo.lfx.html._byId(_669);
+var _66e={property:"opacity"};
+if(!dj_undef("start",_66a)){
+_66e.start=_66a.start;
 }else{
-_663.start=function(){
-return dojo.html.getOpacity(_65e[0]);
+_66e.start=function(){
+return dojo.html.getOpacity(_669[0]);
 };
 }
-if(!dj_undef("end",_65f)){
-_663.end=_65f.end;
+if(!dj_undef("end",_66a)){
+_66e.end=_66a.end;
 }else{
 dojo.raise("dojo.lfx.html.fade needs an end value");
 }
-var anim=dojo.lfx.propertyAnimation(_65e,[_663],_660,_661);
+var anim=dojo.lfx.propertyAnimation(_669,[_66e],_66b,_66c);
 anim.connect("beforeBegin",function(){
-dojo.lfx.html._makeFadeable(_65e);
+dojo.lfx.html._makeFadeable(_669);
 });
-if(_662){
+if(_66d){
 anim.connect("onEnd",function(){
-_662(_65e,anim);
+_66d(_669,anim);
 });
 }
 return anim;
 };
-dojo.lfx.html.fadeIn=function(_665,_666,_667,_668){
-return dojo.lfx.html.fade(_665,{end:1},_666,_667,_668);
+dojo.lfx.html.fadeIn=function(_670,_671,_672,_673){
+return dojo.lfx.html.fade(_670,{end:1},_671,_672,_673);
 };
-dojo.lfx.html.fadeOut=function(_669,_66a,_66b,_66c){
-return dojo.lfx.html.fade(_669,{end:0},_66a,_66b,_66c);
+dojo.lfx.html.fadeOut=function(_674,_675,_676,_677){
+return dojo.lfx.html.fade(_674,{end:0},_675,_676,_677);
 };
-dojo.lfx.html.fadeShow=function(_66d,_66e,_66f,_670){
-_66d=dojo.lfx.html._byId(_66d);
-dojo.lang.forEach(_66d,function(node){
+dojo.lfx.html.fadeShow=function(_678,_679,_67a,_67b){
+_678=dojo.lfx.html._byId(_678);
+dojo.lang.forEach(_678,function(node){
 dojo.html.setOpacity(node,0);
 });
-var anim=dojo.lfx.html.fadeIn(_66d,_66e,_66f,_670);
+var anim=dojo.lfx.html.fadeIn(_678,_679,_67a,_67b);
 anim.connect("beforeBegin",function(){
-if(dojo.lang.isArrayLike(_66d)){
-dojo.lang.forEach(_66d,dojo.html.show);
+if(dojo.lang.isArrayLike(_678)){
+dojo.lang.forEach(_678,dojo.html.show);
 }else{
-dojo.html.show(_66d);
+dojo.html.show(_678);
 }
 });
 return anim;
 };
-dojo.lfx.html.fadeHide=function(_673,_674,_675,_676){
-var anim=dojo.lfx.html.fadeOut(_673,_674,_675,function(){
-if(dojo.lang.isArrayLike(_673)){
-dojo.lang.forEach(_673,dojo.html.hide);
+dojo.lfx.html.fadeHide=function(_67e,_67f,_680,_681){
+var anim=dojo.lfx.html.fadeOut(_67e,_67f,_680,function(){
+if(dojo.lang.isArrayLike(_67e)){
+dojo.lang.forEach(_67e,dojo.html.hide);
 }else{
-dojo.html.hide(_673);
+dojo.html.hide(_67e);
 }
-if(_676){
-_676(_673,anim);
+if(_681){
+_681(_67e,anim);
 }
 });
 return anim;
 };
-dojo.lfx.html.wipeIn=function(_678,_679,_67a,_67b){
-_678=dojo.lfx.html._byId(_678);
-var _67c=[];
-dojo.lang.forEach(_678,function(node){
-var _67e={};
-var _67f,_680,_681;
+dojo.lfx.html.wipeIn=function(_683,_684,_685,_686){
+_683=dojo.lfx.html._byId(_683);
+var _687=[];
+dojo.lang.forEach(_683,function(node){
+var _689={};
+var _68a,_68b,_68c;
 with(node.style){
-_67f=top;
-_680=left;
-_681=position;
+_68a=top;
+_68b=left;
+_68c=position;
 top="-9999px";
 left="-9999px";
 position="absolute";
 display="";
 }
-var _682=dojo.html.getBorderBox(node).height;
+var _68d=dojo.html.getBorderBox(node).height;
 with(node.style){
-top=_67f;
-left=_680;
-position=_681;
+top=_68a;
+left=_68b;
+position=_68c;
 display="none";
 }
 var anim=dojo.lfx.propertyAnimation(node,{"height":{start:1,end:function(){
-return _682;
-}}},_679,_67a);
+return _68d;
+}}},_684,_685);
 anim.connect("beforeBegin",function(){
-_67e.overflow=node.style.overflow;
-_67e.height=node.style.height;
+_689.overflow=node.style.overflow;
+_689.height=node.style.height;
 with(node.style){
 overflow="hidden";
-_682="1px";
+height="1px";
 }
 dojo.html.show(node);
 });
 anim.connect("onEnd",function(){
 with(node.style){
-overflow=_67e.overflow;
-_682=_67e.height;
+overflow=_689.overflow;
+height=_689.height;
 }
-if(_67b){
-_67b(node,anim);
+if(_686){
+_686(node,anim);
 }
 });
-_67c.push(anim);
+_687.push(anim);
 });
-return dojo.lfx.combine(_67c);
+return dojo.lfx.combine(_687);
 };
-dojo.lfx.html.wipeOut=function(_684,_685,_686,_687){
-_684=dojo.lfx.html._byId(_684);
-var _688=[];
-dojo.lang.forEach(_684,function(node){
-var _68a={};
+dojo.lfx.html.wipeOut=function(_68f,_690,_691,_692){
+_68f=dojo.lfx.html._byId(_68f);
+var _693=[];
+dojo.lang.forEach(_68f,function(node){
+var _695={};
 var anim=dojo.lfx.propertyAnimation(node,{"height":{start:function(){
 return dojo.html.getContentBox(node).height;
-},end:1}},_685,_686,{"beforeBegin":function(){
-_68a.overflow=node.style.overflow;
-_68a.height=node.style.height;
+},end:1}},_690,_691,{"beforeBegin":function(){
+_695.overflow=node.style.overflow;
+_695.height=node.style.height;
 with(node.style){
 overflow="hidden";
 }
@@ -101191,250 +62985,251 @@
 },"onEnd":function(){
 dojo.html.hide(node);
 with(node.style){
-overflow=_68a.overflow;
-height=_68a.height;
+overflow=_695.overflow;
+height=_695.height;
 }
-if(_687){
-_687(node,anim);
+if(_692){
+_692(node,anim);
 }
 }});
-_688.push(anim);
+_693.push(anim);
 });
-return dojo.lfx.combine(_688);
+return dojo.lfx.combine(_693);
 };
-dojo.lfx.html.slideTo=function(_68c,_68d,_68e,_68f,_690){
-_68c=dojo.lfx.html._byId(_68c);
-var _691=[];
-var _692=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_68d)){
+dojo.lfx.html.slideTo=function(_697,_698,_699,_69a,_69b){
+_697=dojo.lfx.html._byId(_697);
+var _69c=[];
+var _69d=dojo.html.getComputedStyle;
+if(dojo.lang.isArray(_698)){
 dojo.deprecated("dojo.lfx.html.slideTo(node, array)","use dojo.lfx.html.slideTo(node, {top: value, left: value});","0.5");
-_68d={top:_68d[0],left:_68d[1]};
+_698={top:_698[0],left:_698[1]};
 }
-dojo.lang.forEach(_68c,function(node){
+dojo.lang.forEach(_697,function(node){
 var top=null;
 var left=null;
 var init=(function(){
-var _697=node;
+var _6a2=node;
 return function(){
-var pos=_692(_697,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_692(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_692(node,"left"))||0);
+var pos=_69d(_6a2,"position");
+top=(pos=="absolute"?node.offsetTop:parseInt(_69d(node,"top"))||0);
+left=(pos=="absolute"?node.offsetLeft:parseInt(_69d(node,"left"))||0);
 if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_697,true);
-dojo.html.setStyleAttributes(_697,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
+var ret=dojo.html.abs(_6a2,true);
+dojo.html.setStyleAttributes(_6a2,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
 top=ret.y;
 left=ret.x;
 }
 };
 })();
 init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:(_68d.top||0)},"left":{start:left,end:(_68d.left||0)}},_68e,_68f,{"beforeBegin":init});
-if(_690){
+var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:(_698.top||0)},"left":{start:left,end:(_698.left||0)}},_699,_69a,{"beforeBegin":init});
+if(_69b){
 anim.connect("onEnd",function(){
-_690(_68c,anim);
+_69b(_697,anim);
 });
 }
-_691.push(anim);
+_69c.push(anim);
 });
-return dojo.lfx.combine(_691);
+return dojo.lfx.combine(_69c);
 };
-dojo.lfx.html.slideBy=function(_69b,_69c,_69d,_69e,_69f){
-_69b=dojo.lfx.html._byId(_69b);
-var _6a0=[];
-var _6a1=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_69c)){
+dojo.lfx.html.slideBy=function(_6a6,_6a7,_6a8,_6a9,_6aa){
+_6a6=dojo.lfx.html._byId(_6a6);
+var _6ab=[];
+var _6ac=dojo.html.getComputedStyle;
+if(dojo.lang.isArray(_6a7)){
 dojo.deprecated("dojo.lfx.html.slideBy(node, array)","use dojo.lfx.html.slideBy(node, {top: value, left: value});","0.5");
-_69c={top:_69c[0],left:_69c[1]};
+_6a7={top:_6a7[0],left:_6a7[1]};
 }
-dojo.lang.forEach(_69b,function(node){
+dojo.lang.forEach(_6a6,function(node){
 var top=null;
 var left=null;
 var init=(function(){
-var _6a6=node;
+var _6b1=node;
 return function(){
-var pos=_6a1(_6a6,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_6a1(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_6a1(node,"left"))||0);
+var pos=_6ac(_6b1,"position");
+top=(pos=="absolute"?node.offsetTop:parseInt(_6ac(node,"top"))||0);
+left=(pos=="absolute"?node.offsetLeft:parseInt(_6ac(node,"left"))||0);
 if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_6a6,true);
-dojo.html.setStyleAttributes(_6a6,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
+var ret=dojo.html.abs(_6b1,true);
+dojo.html.setStyleAttributes(_6b1,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
 top=ret.y;
 left=ret.x;
 }
 };
 })();
 init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:top+(_69c.top||0)},"left":{start:left,end:left+(_69c.left||0)}},_69d,_69e).connect("beforeBegin",init);
-if(_69f){
+var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:top+(_6a7.top||0)},"left":{start:left,end:left+(_6a7.left||0)}},_6a8,_6a9).connect("beforeBegin",init);
+if(_6aa){
 anim.connect("onEnd",function(){
-_69f(_69b,anim);
+_6aa(_6a6,anim);
 });
 }
-_6a0.push(anim);
+_6ab.push(anim);
 });
-return dojo.lfx.combine(_6a0);
+return dojo.lfx.combine(_6ab);
 };
-dojo.lfx.html.explode=function(_6aa,_6ab,_6ac,_6ad,_6ae){
+dojo.lfx.html.explode=function(_6b5,_6b6,_6b7,_6b8,_6b9){
 var h=dojo.html;
-_6aa=dojo.byId(_6aa);
-_6ab=dojo.byId(_6ab);
-var _6b0=h.toCoordinateObject(_6aa,true);
-var _6b1=document.createElement("div");
-h.copyStyle(_6b1,_6ab);
-if(_6ab.explodeClassName){
-_6b1.className=_6ab.explodeClassName;
+_6b5=dojo.byId(_6b5);
+_6b6=dojo.byId(_6b6);
+var _6bb=h.toCoordinateObject(_6b5,true);
+var _6bc=document.createElement("div");
+h.copyStyle(_6bc,_6b6);
+if(_6b6.explodeClassName){
+_6bc.className=_6b6.explodeClassName;
 }
-with(_6b1.style){
+with(_6bc.style){
 position="absolute";
 display="none";
-var _6b2=h.getStyle(_6aa,"background-color");
-backgroundColor=_6b2?_6b2.toLowerCase():"transparent";
+var _6bd=h.getStyle(_6b5,"background-color");
+backgroundColor=_6bd?_6bd.toLowerCase():"transparent";
 backgroundColor=(backgroundColor=="transparent")?"rgb(221, 221, 221)":backgroundColor;
 }
-dojo.body().appendChild(_6b1);
-with(_6ab.style){
+dojo.body().appendChild(_6bc);
+with(_6b6.style){
 visibility="hidden";
 display="block";
 }
-var _6b3=h.toCoordinateObject(_6ab,true);
-with(_6ab.style){
+var _6be=h.toCoordinateObject(_6b6,true);
+with(_6b6.style){
 display="none";
 visibility="visible";
 }
-var _6b4={opacity:{start:0.5,end:1}};
+var _6bf={opacity:{start:0.5,end:1}};
 dojo.lang.forEach(["height","width","top","left"],function(type){
-_6b4[type]={start:_6b0[type],end:_6b3[type]};
+_6bf[type]={start:_6bb[type],end:_6be[type]};
 });
-var anim=new dojo.lfx.propertyAnimation(_6b1,_6b4,_6ac,_6ad,{"beforeBegin":function(){
-h.setDisplay(_6b1,"block");
+var anim=new dojo.lfx.propertyAnimation(_6bc,_6bf,_6b7,_6b8,{"beforeBegin":function(){
+h.setDisplay(_6bc,"block");
 },"onEnd":function(){
-h.setDisplay(_6ab,"block");
-_6b1.parentNode.removeChild(_6b1);
+h.setDisplay(_6b6,"block");
+_6bc.parentNode.removeChild(_6bc);
 }});
-if(_6ae){
+if(_6b9){
 anim.connect("onEnd",function(){
-_6ae(_6ab,anim);
+_6b9(_6b6,anim);
 });
 }
 return anim;
 };
-dojo.lfx.html.implode=function(_6b7,end,_6b9,_6ba,_6bb){
+dojo.lfx.html.implode=function(_6c2,end,_6c4,_6c5,_6c6){
 var h=dojo.html;
-_6b7=dojo.byId(_6b7);
+_6c2=dojo.byId(_6c2);
 end=dojo.byId(end);
-var _6bd=dojo.html.toCoordinateObject(_6b7,true);
-var _6be=dojo.html.toCoordinateObject(end,true);
-var _6bf=document.createElement("div");
-dojo.html.copyStyle(_6bf,_6b7);
-if(_6b7.explodeClassName){
-_6bf.className=_6b7.explodeClassName;
+var _6c8=dojo.html.toCoordinateObject(_6c2,true);
+var _6c9=dojo.html.toCoordinateObject(end,true);
+var _6ca=document.createElement("div");
+dojo.html.copyStyle(_6ca,_6c2);
+if(_6c2.explodeClassName){
+_6ca.className=_6c2.explodeClassName;
 }
-dojo.html.setOpacity(_6bf,0.3);
-with(_6bf.style){
+dojo.html.setOpacity(_6ca,0.3);
+with(_6ca.style){
 position="absolute";
 display="none";
-backgroundColor=h.getStyle(_6b7,"background-color").toLowerCase();
+backgroundColor=h.getStyle(_6c2,"background-color").toLowerCase();
 }
-dojo.body().appendChild(_6bf);
-var _6c0={opacity:{start:1,end:0.5}};
+dojo.body().appendChild(_6ca);
+var _6cb={opacity:{start:1,end:0.5}};
 dojo.lang.forEach(["height","width","top","left"],function(type){
-_6c0[type]={start:_6bd[type],end:_6be[type]};
+_6cb[type]={start:_6c8[type],end:_6c9[type]};
 });
-var anim=new dojo.lfx.propertyAnimation(_6bf,_6c0,_6b9,_6ba,{"beforeBegin":function(){
-dojo.html.hide(_6b7);
-dojo.html.show(_6bf);
+var anim=new dojo.lfx.propertyAnimation(_6ca,_6cb,_6c4,_6c5,{"beforeBegin":function(){
+dojo.html.hide(_6c2);
+dojo.html.show(_6ca);
 },"onEnd":function(){
-_6bf.parentNode.removeChild(_6bf);
+_6ca.parentNode.removeChild(_6ca);
 }});
-if(_6bb){
+if(_6c6){
 anim.connect("onEnd",function(){
-_6bb(_6b7,anim);
+_6c6(_6c2,anim);
 });
 }
 return anim;
 };
-dojo.lfx.html.highlight=function(_6c3,_6c4,_6c5,_6c6,_6c7){
-_6c3=dojo.lfx.html._byId(_6c3);
-var _6c8=[];
-dojo.lang.forEach(_6c3,function(node){
-var _6ca=dojo.html.getBackgroundColor(node);
+dojo.lfx.html.highlight=function(_6ce,_6cf,_6d0,_6d1,_6d2){
+_6ce=dojo.lfx.html._byId(_6ce);
+var _6d3=[];
+dojo.lang.forEach(_6ce,function(node){
+var _6d5=dojo.html.getBackgroundColor(node);
 var bg=dojo.html.getStyle(node,"background-color").toLowerCase();
-var _6cc=dojo.html.getStyle(node,"background-image");
-var _6cd=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
-while(_6ca.length>3){
-_6ca.pop();
+var _6d7=dojo.html.getStyle(node,"background-image");
+var _6d8=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
+while(_6d5.length>3){
+_6d5.pop();
 }
-var rgb=new dojo.gfx.color.Color(_6c4);
-var _6cf=new dojo.gfx.color.Color(_6ca);
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:rgb,end:_6cf}},_6c5,_6c6,{"beforeBegin":function(){
-if(_6cc){
+var rgb=new dojo.gfx.color.Color(_6cf);
+var _6da=new dojo.gfx.color.Color(_6d5);
+var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:rgb,end:_6da}},_6d0,_6d1,{"beforeBegin":function(){
+if(_6d7){
 node.style.backgroundImage="none";
 }
 node.style.backgroundColor="rgb("+rgb.toRgb().join(",")+")";
 },"onEnd":function(){
-if(_6cc){
-node.style.backgroundImage=_6cc;
+if(_6d7){
+node.style.backgroundImage=_6d7;
 }
-if(_6cd){
+if(_6d8){
 node.style.backgroundColor="transparent";
 }
-if(_6c7){
-_6c7(node,anim);
+if(_6d2){
+_6d2(node,anim);
 }
 }});
-_6c8.push(anim);
+_6d3.push(anim);
 });
-return dojo.lfx.combine(_6c8);
+return dojo.lfx.combine(_6d3);
 };
-dojo.lfx.html.unhighlight=function(_6d1,_6d2,_6d3,_6d4,_6d5){
-_6d1=dojo.lfx.html._byId(_6d1);
-var _6d6=[];
-dojo.lang.forEach(_6d1,function(node){
-var _6d8=new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
-var rgb=new dojo.gfx.color.Color(_6d2);
-var _6da=dojo.html.getStyle(node,"background-image");
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:_6d8,end:rgb}},_6d3,_6d4,{"beforeBegin":function(){
-if(_6da){
+dojo.lfx.html.unhighlight=function(_6dc,_6dd,_6de,_6df,_6e0){
+_6dc=dojo.lfx.html._byId(_6dc);
+var _6e1=[];
+dojo.lang.forEach(_6dc,function(node){
+var _6e3=new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
+var rgb=new dojo.gfx.color.Color(_6dd);
+var _6e5=dojo.html.getStyle(node,"background-image");
+var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:_6e3,end:rgb}},_6de,_6df,{"beforeBegin":function(){
+if(_6e5){
 node.style.backgroundImage="none";
 }
-node.style.backgroundColor="rgb("+_6d8.toRgb().join(",")+")";
+node.style.backgroundColor="rgb("+_6e3.toRgb().join(",")+")";
 },"onEnd":function(){
-if(_6d5){
-_6d5(node,anim);
+if(_6e0){
+_6e0(node,anim);
 }
 }});
-_6d6.push(anim);
+_6e1.push(anim);
 });
-return dojo.lfx.combine(_6d6);
+return dojo.lfx.combine(_6e1);
 };
 dojo.lang.mixin(dojo.lfx,dojo.lfx.html);
+dojo.kwCompoundRequire({browser:["dojo.lfx.html"],dashboard:["dojo.lfx.html"]});
 dojo.provide("dojo.lfx.*");
 dojo.provide("dojo.lfx.toggle");
-dojo.lfx.toggle.plain={show:function(node,_6dd,_6de,_6df){
+dojo.lfx.toggle.plain={show:function(node,_6e8,_6e9,_6ea){
 dojo.html.show(node);
-if(dojo.lang.isFunction(_6df)){
-_6df();
+if(dojo.lang.isFunction(_6ea)){
+_6ea();
 }
-},hide:function(node,_6e1,_6e2,_6e3){
+},hide:function(node,_6ec,_6ed,_6ee){
 dojo.html.hide(node);
-if(dojo.lang.isFunction(_6e3)){
-_6e3();
+if(dojo.lang.isFunction(_6ee)){
+_6ee();
 }
 }};
-dojo.lfx.toggle.fade={show:function(node,_6e5,_6e6,_6e7){
-dojo.lfx.fadeShow(node,_6e5,_6e6,_6e7).play();
-},hide:function(node,_6e9,_6ea,_6eb){
-dojo.lfx.fadeHide(node,_6e9,_6ea,_6eb).play();
+dojo.lfx.toggle.fade={show:function(node,_6f0,_6f1,_6f2){
+dojo.lfx.fadeShow(node,_6f0,_6f1,_6f2).play();
+},hide:function(node,_6f4,_6f5,_6f6){
+dojo.lfx.fadeHide(node,_6f4,_6f5,_6f6).play();
 }};
-dojo.lfx.toggle.wipe={show:function(node,_6ed,_6ee,_6ef){
-dojo.lfx.wipeIn(node,_6ed,_6ee,_6ef).play();
-},hide:function(node,_6f1,_6f2,_6f3){
-dojo.lfx.wipeOut(node,_6f1,_6f2,_6f3).play();
+dojo.lfx.toggle.wipe={show:function(node,_6f8,_6f9,_6fa){
+dojo.lfx.wipeIn(node,_6f8,_6f9,_6fa).play();
+},hide:function(node,_6fc,_6fd,_6fe){
+dojo.lfx.wipeOut(node,_6fc,_6fd,_6fe).play();
 }};
-dojo.lfx.toggle.explode={show:function(node,_6f5,_6f6,_6f7,_6f8){
-dojo.lfx.explode(_6f8||{x:0,y:0,width:0,height:0},node,_6f5,_6f6,_6f7).play();
-},hide:function(node,_6fa,_6fb,_6fc,_6fd){
-dojo.lfx.implode(node,_6fd||{x:0,y:0,width:0,height:0},_6fa,_6fb,_6fc).play();
+dojo.lfx.toggle.explode={show:function(node,_700,_701,_702,_703){
+dojo.lfx.explode(_703||{x:0,y:0,width:0,height:0},node,_700,_701,_702).play();
+},hide:function(node,_705,_706,_707,_708){
+dojo.lfx.implode(node,_708||{x:0,y:0,width:0,height:0},_705,_706,_707).play();
 }};
 dojo.provide("dojo.widget.HtmlWidget");
 dojo.declare("dojo.widget.HtmlWidget",dojo.widget.DomWidget,{templateCssPath:null,templatePath:null,lang:"",toggle:"plain",toggleDuration:150,initialize:function(args,frag){
@@ -101445,13 +63240,13 @@
 this.toggleObj=dojo.lfx.toggle[this.toggle.toLowerCase()]||dojo.lfx.toggle.plain;
 },createNodesFromText:function(txt,wrap){
 return dojo.html.createNodesFromText(txt,wrap);
-},destroyRendering:function(_704){
+},destroyRendering:function(_70f){
 try{
 if(this.bgIframe){
 this.bgIframe.remove();
 delete this.bgIframe;
 }
-if(!_704&&this.domNode){
+if(!_70f&&this.domNode){
 dojo.event.browser.clean(this.domNode);
 }
 dojo.widget.HtmlWidget.superclass.destroyRendering.call(this);
@@ -101488,13 +63283,13 @@
 return false;
 }
 var wh=dojo.html.getMarginBox(this.domNode);
-var _708=w||wh.width;
-var _709=h||wh.height;
-if(this.width==_708&&this.height==_709){
+var _713=w||wh.width;
+var _714=h||wh.height;
+if(this.width==_713&&this.height==_714){
 return false;
 }
-this.width=_708;
-this.height=_709;
+this.width=_713;
+this.height=_714;
 return true;
 },checkSize:function(){
 if(!this._isResized()){
@@ -101511,12 +63306,13 @@
 dojo.lang.setTimeout(this,this.onResized,0);
 }
 },onResized:function(){
-dojo.lang.forEach(this.children,function(_70c){
-if(_70c.checkSize){
-_70c.checkSize();
+dojo.lang.forEach(this.children,function(_717){
+if(_717.checkSize){
+_717.checkSize();
 }
 });
 }});
+dojo.kwCompoundRequire({common:["dojo.xml.Parse","dojo.widget.Widget","dojo.widget.Parse","dojo.widget.Manager"],browser:["dojo.widget.DomWidget","dojo.widget.HtmlWidget"],dashboard:["dojo.widget.DomWidget","dojo.widget.HtmlWidget"],svg:["dojo.widget.SvgWidget"],rhino:["dojo.widget.SwtWidget"]});
 dojo.provide("dojo.widget.*");
 dojo.provide("dojo.string.common");
 dojo.string.trim=function(str,wh){
@@ -101535,12 +63331,12 @@
 dojo.string.trimEnd=function(str){
 return dojo.string.trim(str,-1);
 };
-dojo.string.repeat=function(str,_713,_714){
+dojo.string.repeat=function(str,_71e,_71f){
 var out="";
-for(var i=0;i<_713;i++){
+for(var i=0;i<_71e;i++){
 out+=str;
-if(_714&&i<_713-1){
-out+=_714;
+if(_71f&&i<_71e-1){
+out+=_71f;
 }
 }
 return out;
@@ -101572,59 +63368,59 @@
 dojo.provide("dojo.io.common");
 dojo.io.transports=[];
 dojo.io.hdlrFuncNames=["load","error","timeout"];
-dojo.io.Request=function(url,_723,_724,_725){
+dojo.io.Request=function(url,_72e,_72f,_730){
 if((arguments.length==1)&&(arguments[0].constructor==Object)){
 this.fromKwArgs(arguments[0]);
 }else{
 this.url=url;
-if(_723){
-this.mimetype=_723;
+if(_72e){
+this.mimetype=_72e;
 }
-if(_724){
-this.transport=_724;
+if(_72f){
+this.transport=_72f;
 }
 if(arguments.length>=4){
-this.changeUrl=_725;
+this.changeUrl=_730;
 }
 }
 };
-dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_728,_729){
-},error:function(type,_72b,_72c,_72d){
-},timeout:function(type,_72f,_730,_731){
-},handle:function(type,data,_734,_735){
+dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_733,_734){
+},error:function(type,_736,_737,_738){
+},timeout:function(type,_73a,_73b,_73c){
+},handle:function(type,data,_73f,_740){
 },timeoutSeconds:0,abort:function(){
-},fromKwArgs:function(_736){
-if(_736["url"]){
-_736.url=_736.url.toString();
+},fromKwArgs:function(_741){
+if(_741["url"]){
+_741.url=_741.url.toString();
 }
-if(_736["formNode"]){
-_736.formNode=dojo.byId(_736.formNode);
+if(_741["formNode"]){
+_741.formNode=dojo.byId(_741.formNode);
 }
-if(!_736["method"]&&_736["formNode"]&&_736["formNode"].method){
-_736.method=_736["formNode"].method;
+if(!_741["method"]&&_741["formNode"]&&_741["formNode"].method){
+_741.method=_741["formNode"].method;
 }
-if(!_736["handle"]&&_736["handler"]){
-_736.handle=_736.handler;
+if(!_741["handle"]&&_741["handler"]){
+_741.handle=_741.handler;
 }
-if(!_736["load"]&&_736["loaded"]){
-_736.load=_736.loaded;
+if(!_741["load"]&&_741["loaded"]){
+_741.load=_741.loaded;
 }
-if(!_736["changeUrl"]&&_736["changeURL"]){
-_736.changeUrl=_736.changeURL;
+if(!_741["changeUrl"]&&_741["changeURL"]){
+_741.changeUrl=_741.changeURL;
 }
-_736.encoding=dojo.lang.firstValued(_736["encoding"],djConfig["bindEncoding"],"");
-_736.sendTransport=dojo.lang.firstValued(_736["sendTransport"],djConfig["ioSendTransport"],false);
-var _737=dojo.lang.isFunction;
+_741.encoding=dojo.lang.firstValued(_741["encoding"],djConfig["bindEncoding"],"");
+_741.sendTransport=dojo.lang.firstValued(_741["sendTransport"],djConfig["ioSendTransport"],false);
+var _742=dojo.lang.isFunction;
 for(var x=0;x<dojo.io.hdlrFuncNames.length;x++){
 var fn=dojo.io.hdlrFuncNames[x];
-if(_736[fn]&&_737(_736[fn])){
+if(_741[fn]&&_742(_741[fn])){
 continue;
 }
-if(_736["handle"]&&_737(_736["handle"])){
-_736[fn]=_736.handle;
+if(_741["handle"]&&_742(_741["handle"])){
+_741[fn]=_741.handle;
 }
 }
-dojo.lang.mixin(this,_736);
+dojo.lang.mixin(this,_741);
 }});
 dojo.io.Error=function(msg,type,num){
 this.message=msg;
@@ -101635,79 +63431,79 @@
 this.push(name);
 this[name]=dojo.io[name];
 };
-dojo.io.bind=function(_73e){
-if(!(_73e instanceof dojo.io.Request)){
+dojo.io.bind=function(_749){
+if(!(_749 instanceof dojo.io.Request)){
 try{
-_73e=new dojo.io.Request(_73e);
+_749=new dojo.io.Request(_749);
 }
 catch(e){
 dojo.debug(e);
 }
 }
-var _73f="";
-if(_73e["transport"]){
-_73f=_73e["transport"];
-if(!this[_73f]){
-dojo.io.sendBindError(_73e,"No dojo.io.bind() transport with name '"+_73e["transport"]+"'.");
-return _73e;
+var _74a="";
+if(_749["transport"]){
+_74a=_749["transport"];
+if(!this[_74a]){
+dojo.io.sendBindError(_749,"No dojo.io.bind() transport with name '"+_749["transport"]+"'.");
+return _749;
 }
-if(!this[_73f].canHandle(_73e)){
-dojo.io.sendBindError(_73e,"dojo.io.bind() transport with name '"+_73e["transport"]+"' cannot handle this type of request.");
-return _73e;
+if(!this[_74a].canHandle(_749)){
+dojo.io.sendBindError(_749,"dojo.io.bind() transport with name '"+_749["transport"]+"' cannot handle this type of request.");
+return _749;
 }
 }else{
 for(var x=0;x<dojo.io.transports.length;x++){
 var tmp=dojo.io.transports[x];
-if((this[tmp])&&(this[tmp].canHandle(_73e))){
-_73f=tmp;
+if((this[tmp])&&(this[tmp].canHandle(_749))){
+_74a=tmp;
 break;
 }
 }
-if(_73f==""){
-dojo.io.sendBindError(_73e,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
-return _73e;
+if(_74a==""){
+dojo.io.sendBindError(_749,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
+return _749;
 }
 }
-this[_73f].bind(_73e);
-_73e.bindSuccess=true;
-return _73e;
+this[_74a].bind(_749);
+_749.bindSuccess=true;
+return _749;
 };
-dojo.io.sendBindError=function(_742,_743){
-if((typeof _742.error=="function"||typeof _742.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
-var _744=new dojo.io.Error(_743);
+dojo.io.sendBindError=function(_74d,_74e){
+if((typeof _74d.error=="function"||typeof _74d.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
+var _74f=new dojo.io.Error(_74e);
 setTimeout(function(){
-_742[(typeof _742.error=="function")?"error":"handle"]("error",_744,null,_742);
+_74d[(typeof _74d.error=="function")?"error":"handle"]("error",_74f,null,_74d);
 },50);
 }else{
-dojo.raise(_743);
+dojo.raise(_74e);
 }
 };
-dojo.io.queueBind=function(_745){
-if(!(_745 instanceof dojo.io.Request)){
+dojo.io.queueBind=function(_750){
+if(!(_750 instanceof dojo.io.Request)){
 try{
-_745=new dojo.io.Request(_745);
+_750=new dojo.io.Request(_750);
 }
 catch(e){
 dojo.debug(e);
 }
 }
-var _746=_745.load;
-_745.load=function(){
+var _751=_750.load;
+_750.load=function(){
 dojo.io._queueBindInFlight=false;
-var ret=_746.apply(this,arguments);
+var ret=_751.apply(this,arguments);
 dojo.io._dispatchNextQueueBind();
 return ret;
 };
-var _748=_745.error;
-_745.error=function(){
+var _753=_750.error;
+_750.error=function(){
 dojo.io._queueBindInFlight=false;
-var ret=_748.apply(this,arguments);
+var ret=_753.apply(this,arguments);
 dojo.io._dispatchNextQueueBind();
 return ret;
 };
-dojo.io._bindQueue.push(_745);
+dojo.io._bindQueue.push(_750);
 dojo.io._dispatchNextQueueBind();
-return _745;
+return _750;
 };
 dojo.io._dispatchNextQueueBind=function(){
 if(!dojo.io._queueBindInFlight){
@@ -101721,48 +63517,48 @@
 };
 dojo.io._bindQueue=[];
 dojo.io._queueBindInFlight=false;
-dojo.io.argsFromMap=function(map,_74b,last){
-var enc=/utf/i.test(_74b||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _74e=[];
-var _74f=new Object();
+dojo.io.argsFromMap=function(map,_756,last){
+var enc=/utf/i.test(_756||"")?encodeURIComponent:dojo.string.encodeAscii;
+var _759=[];
+var _75a=new Object();
 for(var name in map){
-var _751=function(elt){
+var _75c=function(elt){
 var val=enc(name)+"="+enc(elt);
-_74e[(last==name)?"push":"unshift"](val);
+_759[(last==name)?"push":"unshift"](val);
 };
-if(!_74f[name]){
-var _754=map[name];
-if(dojo.lang.isArray(_754)){
-dojo.lang.forEach(_754,_751);
+if(!_75a[name]){
+var _75f=map[name];
+if(dojo.lang.isArray(_75f)){
+dojo.lang.forEach(_75f,_75c);
 }else{
-_751(_754);
+_75c(_75f);
 }
 }
 }
-return _74e.join("&");
+return _759.join("&");
 };
-dojo.io.setIFrameSrc=function(_755,src,_757){
+dojo.io.setIFrameSrc=function(_760,src,_762){
 try{
 var r=dojo.render.html;
-if(!_757){
+if(!_762){
 if(r.safari){
-_755.location=src;
+_760.location=src;
 }else{
-frames[_755.name].location=src;
+frames[_760.name].location=src;
 }
 }else{
 var idoc;
 if(r.ie){
-idoc=_755.contentWindow.document;
+idoc=_760.contentWindow.document;
 }else{
 if(r.safari){
-idoc=_755.document;
+idoc=_760.document;
 }else{
-idoc=_755.contentWindow;
+idoc=_760.contentWindow;
 }
 }
 if(!idoc){
-_755.location=src;
+_760.location=src;
 return;
 }else{
 idoc.location.replace(src);
@@ -101775,9 +63571,9 @@
 }
 };
 dojo.provide("dojo.string.extras");
-dojo.string.substituteParams=function(_75a,hash){
+dojo.string.substituteParams=function(_765,hash){
 var map=(typeof hash=="object")?hash:dojo.lang.toArray(arguments,1);
-return _75a.replace(/\%\{(\w+)\}/g,function(_75d,key){
+return _765.replace(/\%\{(\w+)\}/g,function(_768,key){
 if(typeof (map[key])!="undefined"&&map[key]!=null){
 return map[key];
 }
@@ -101791,11 +63587,11 @@
 if(arguments.length==0){
 str=this;
 }
-var _760=str.split(" ");
-for(var i=0;i<_760.length;i++){
-_760[i]=_760[i].charAt(0).toUpperCase()+_760[i].substring(1);
+var _76b=str.split(" ");
+for(var i=0;i<_76b.length;i++){
+_76b[i]=_76b[i].charAt(0).toUpperCase()+_76b[i].substring(1);
 }
-return _760.join(" ");
+return _76b.join(" ");
 };
 dojo.string.isBlank=function(str){
 if(!dojo.lang.isString(str)){
@@ -101808,15 +63604,15 @@
 return str;
 }
 var ret="";
-var _765=escape(str);
-var _766,re=/%u([0-9A-F]{4})/i;
-while((_766=_765.match(re))){
-var num=Number("0x"+_766[1]);
-var _769=escape("&#"+num+";");
-ret+=_765.substring(0,_766.index)+_769;
-_765=_765.substring(_766.index+_766[0].length);
+var _770=escape(str);
+var _771,re=/%u([0-9A-F]{4})/i;
+while((_771=_770.match(re))){
+var num=Number("0x"+_771[1]);
+var _774=escape("&#"+num+";");
+ret+=_770.substring(0,_771.index)+_774;
+_770=_770.substring(_771.index+_771[0].length);
 }
-ret+=_765.replace(/\+/g,"%2B");
+ret+=_770.replace(/\+/g,"%2B");
 return ret;
 };
 dojo.string.escape=function(type,str){
@@ -101841,9 +63637,9 @@
 return str;
 }
 };
-dojo.string.escapeXml=function(str,_76e){
+dojo.string.escapeXml=function(str,_779){
 str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_76e){
+if(!_779){
 str=str.replace(/'/gm,"&#39;");
 }
 return str;
@@ -101866,8 +63662,8 @@
 }
 return str.substring(0,len).replace(/\.+$/,"")+"...";
 };
-dojo.string.endsWith=function(str,end,_777){
-if(_777){
+dojo.string.endsWith=function(str,end,_782){
+if(_782){
 str=str.toLowerCase();
 end=end.toLowerCase();
 }
@@ -101884,12 +63680,12 @@
 }
 return false;
 };
-dojo.string.startsWith=function(str,_77b,_77c){
-if(_77c){
+dojo.string.startsWith=function(str,_786,_787){
+if(_787){
 str=str.toLowerCase();
-_77b=_77b.toLowerCase();
+_786=_786.toLowerCase();
 }
-return str.indexOf(_77b)==0;
+return str.indexOf(_786)==0;
 };
 dojo.string.startsWithAny=function(str){
 for(var i=1;i<arguments.length;i++){
@@ -101907,12 +63703,12 @@
 }
 return false;
 };
-dojo.string.normalizeNewlines=function(text,_782){
-if(_782=="\n"){
+dojo.string.normalizeNewlines=function(text,_78d){
+if(_78d=="\n"){
 text=text.replace(/\r\n/g,"\n");
 text=text.replace(/\r/g,"\n");
 }else{
-if(_782=="\r"){
+if(_78d=="\r"){
 text=text.replace(/\r\n/g,"\r");
 text=text.replace(/\n/g,"\r");
 }else{
@@ -101921,25 +63717,25 @@
 }
 return text;
 };
-dojo.string.splitEscaped=function(str,_784){
-var _785=[];
-for(var i=0,_787=0;i<str.length;i++){
+dojo.string.splitEscaped=function(str,_78f){
+var _790=[];
+for(var i=0,_792=0;i<str.length;i++){
 if(str.charAt(i)=="\\"){
 i++;
 continue;
 }
-if(str.charAt(i)==_784){
-_785.push(str.substring(_787,i));
-_787=i+1;
+if(str.charAt(i)==_78f){
+_790.push(str.substring(_792,i));
+_792=i+1;
 }
 }
-_785.push(str.substr(_787));
-return _785;
+_790.push(str.substr(_792));
+return _790;
 };
 dojo.provide("dojo.undo.browser");
 try{
 if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
+document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
 }
 }
 catch(e){
@@ -101954,6 +63750,9 @@
 var hash=null;
 var url=null;
 if(!this.historyIframe){
+if(djConfig["useXDomain"]&&!djConfig["dojoIframeHistoryUrl"]){
+dojo.debug("dojo.undo.browser: When using cross-domain Dojo builds,"+" please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"+" to the path on your domain to iframe_history.html");
+}
 this.historyIframe=window.frames["djhistory"];
 }
 if(!this.bookmarkAnchor){
@@ -101977,12 +63776,12 @@
 this.bookmarkAnchor.href=hash;
 if(dojo.render.html.ie){
 url=this._loadIframeHistory();
-var _78c=args["back"]||args["backButton"]||args["handle"];
-var tcb=function(_78e){
+var _797=args["back"]||args["backButton"]||args["handle"];
+var tcb=function(_799){
 if(window.location.hash!=""){
 setTimeout("window.location.href = '"+hash+"';",1);
 }
-_78c.apply(this,[_78e]);
+_797.apply(this,[_799]);
 };
 if(args["back"]){
 args.back=tcb;
@@ -101995,13 +63794,13 @@
 }
 }
 }
-var _78f=args["forward"]||args["forwardButton"]||args["handle"];
-var tfw=function(_791){
+var _79a=args["forward"]||args["forwardButton"]||args["handle"];
+var tfw=function(_79c){
 if(window.location.hash!=""){
 window.location.href=hash;
 }
-if(_78f){
-_78f.apply(this,[_791]);
+if(_79a){
+_79a.apply(this,[_79c]);
 }
 };
 if(args["forward"]){
@@ -102046,10 +63845,10 @@
 }
 }
 }
-},iframeLoaded:function(evt,_794){
+},iframeLoaded:function(evt,_79f){
 if(!dojo.render.html.opera){
-var _795=this._getUrlQuery(_794.href);
-if(_795==null){
+var _7a0=this._getUrlQuery(_79f.href);
+if(_7a0==null){
 if(this.historyStack.length==1){
 this.handleBackButton();
 }
@@ -102059,17 +63858,17 @@
 this.moveForward=false;
 return;
 }
-if(this.historyStack.length>=2&&_795==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
+if(this.historyStack.length>=2&&_7a0==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
 this.handleBackButton();
 }else{
-if(this.forwardStack.length>0&&_795==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
+if(this.forwardStack.length>0&&_7a0==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
 this.handleForwardButton();
 }
 }
 }
 },handleBackButton:function(){
-var _796=this.historyStack.pop();
-if(!_796){
+var _7a1=this.historyStack.pop();
+if(!_7a1){
 return;
 }
 var last=this.historyStack[this.historyStack.length-1];
@@ -102089,7 +63888,7 @@
 }
 }
 }
-this.forwardStack.push(_796);
+this.forwardStack.push(_7a1);
 },handleForwardButton:function(){
 var last=this.forwardStack.pop();
 if(!last){
@@ -102110,14 +63909,14 @@
 },_createState:function(url,args,hash){
 return {"url":url,"kwArgs":args,"urlHash":hash};
 },_getUrlQuery:function(url){
-var _79d=url.split("?");
-if(_79d.length<2){
+var _7a8=url.split("?");
+if(_7a8.length<2){
 return null;
 }else{
-return _79d[1];
+return _7a8[1];
 }
 },_loadIframeHistory:function(){
-var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
+var url=(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"?"+(new Date()).getTime();
 this.moveForward=true;
 dojo.io.setIFrameSrc(this.historyIframe,url,false);
 return url;
@@ -102125,26 +63924,26 @@
 dojo.provide("dojo.io.BrowserIO");
 if(!dj_undef("window")){
 dojo.io.checkChildrenForFile=function(node){
-var _7a0=false;
-var _7a1=node.getElementsByTagName("input");
-dojo.lang.forEach(_7a1,function(_7a2){
-if(_7a0){
+var _7ab=false;
+var _7ac=node.getElementsByTagName("input");
+dojo.lang.forEach(_7ac,function(_7ad){
+if(_7ab){
 return;
 }
-if(_7a2.getAttribute("type")=="file"){
-_7a0=true;
+if(_7ad.getAttribute("type")=="file"){
+_7ab=true;
 }
 });
-return _7a0;
+return _7ab;
 };
-dojo.io.formHasFile=function(_7a3){
-return dojo.io.checkChildrenForFile(_7a3);
+dojo.io.formHasFile=function(_7ae){
+return dojo.io.checkChildrenForFile(_7ae);
 };
-dojo.io.updateNode=function(node,_7a5){
+dojo.io.updateNode=function(node,_7b0){
 node=dojo.byId(node);
-var args=_7a5;
-if(dojo.lang.isString(_7a5)){
-args={url:_7a5};
+var args=_7b0;
+if(dojo.lang.isString(_7b0)){
+args={url:_7b0};
 }
 args.mimetype="text/html";
 args.load=function(t,d,e){
@@ -102159,18 +63958,18 @@
 var type=(node.type||"").toLowerCase();
 return !node.disabled&&node.name&&!dojo.lang.inArray(["file","submit","image","reset","button"],type);
 };
-dojo.io.encodeForm=function(_7ac,_7ad,_7ae){
-if((!_7ac)||(!_7ac.tagName)||(!_7ac.tagName.toLowerCase()=="form")){
+dojo.io.encodeForm=function(_7b7,_7b8,_7b9){
+if((!_7b7)||(!_7b7.tagName)||(!_7b7.tagName.toLowerCase()=="form")){
 dojo.raise("Attempted to encode a non-form element.");
 }
-if(!_7ae){
-_7ae=dojo.io.formFilter;
+if(!_7b9){
+_7b9=dojo.io.formFilter;
 }
-var enc=/utf/i.test(_7ad||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _7b0=[];
-for(var i=0;i<_7ac.elements.length;i++){
-var elm=_7ac.elements[i];
-if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_7ae(elm)){
+var enc=/utf/i.test(_7b8||"")?encodeURIComponent:dojo.string.encodeAscii;
+var _7bb=[];
+for(var i=0;i<_7b7.elements.length;i++){
+var elm=_7b7.elements[i];
+if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_7b9(elm)){
 continue;
 }
 var name=enc(elm.name);
@@ -102178,30 +63977,30 @@
 if(type=="select-multiple"){
 for(var j=0;j<elm.options.length;j++){
 if(elm.options[j].selected){
-_7b0.push(name+"="+enc(elm.options[j].value));
+_7bb.push(name+"="+enc(elm.options[j].value));
 }
 }
 }else{
 if(dojo.lang.inArray(["radio","checkbox"],type)){
 if(elm.checked){
-_7b0.push(name+"="+enc(elm.value));
+_7bb.push(name+"="+enc(elm.value));
 }
 }else{
-_7b0.push(name+"="+enc(elm.value));
+_7bb.push(name+"="+enc(elm.value));
 }
 }
 }
-var _7b6=_7ac.getElementsByTagName("input");
-for(var i=0;i<_7b6.length;i++){
-var _7b7=_7b6[i];
-if(_7b7.type.toLowerCase()=="image"&&_7b7.form==_7ac&&_7ae(_7b7)){
-var name=enc(_7b7.name);
-_7b0.push(name+"="+enc(_7b7.value));
-_7b0.push(name+".x=0");
-_7b0.push(name+".y=0");
+var _7c1=_7b7.getElementsByTagName("input");
+for(var i=0;i<_7c1.length;i++){
+var _7c2=_7c1[i];
+if(_7c2.type.toLowerCase()=="image"&&_7c2.form==_7b7&&_7b9(_7c2)){
+var name=enc(_7c2.name);
+_7bb.push(name+"="+enc(_7c2.value));
+_7bb.push(name+".x=0");
+_7bb.push(name+".y=0");
 }
 }
-return _7b0.join("&")+"&";
+return _7bb.join("&")+"&";
 };
 dojo.io.FormBind=function(args){
 this.bindArgs={};
@@ -102235,11 +64034,11 @@
 this.connect(node,"onclick","click");
 }
 }
-var _7bd=form.getElementsByTagName("input");
-for(var i=0;i<_7bd.length;i++){
-var _7be=_7bd[i];
-if(_7be.type.toLowerCase()=="image"&&_7be.form==form){
-this.connect(_7be,"onclick","click");
+var _7c8=form.getElementsByTagName("input");
+for(var i=0;i<_7c8.length;i++){
+var _7c9=_7c8[i];
+if(_7c9.type.toLowerCase()=="image"&&_7c9.form==form){
+this.connect(_7c9,"onclick","click");
 }
 }
 },onSubmit:function(form){
@@ -102257,26 +64056,26 @@
 this.clickedButton=node;
 },formFilter:function(node){
 var type=(node.type||"").toLowerCase();
-var _7c5=false;
+var _7d0=false;
 if(node.disabled||!node.name){
-_7c5=false;
+_7d0=false;
 }else{
 if(dojo.lang.inArray(["submit","button","image"],type)){
 if(!this.clickedButton){
 this.clickedButton=node;
 }
-_7c5=node==this.clickedButton;
+_7d0=node==this.clickedButton;
 }else{
-_7c5=!dojo.lang.inArray(["file","submit","reset","button"],type);
+_7d0=!dojo.lang.inArray(["file","submit","reset","button"],type);
 }
 }
-return _7c5;
-},connect:function(_7c6,_7c7,_7c8){
+return _7d0;
+},connect:function(_7d1,_7d2,_7d3){
 if(dojo.evalObjPath("dojo.event.connect")){
-dojo.event.connect(_7c6,_7c7,this,_7c8);
+dojo.event.connect(_7d1,_7d2,this,_7d3);
 }else{
-var fcn=dojo.lang.hitch(this,_7c8);
-_7c6[_7c7]=function(e){
+var fcn=dojo.lang.hitch(this,_7d3);
+_7d1[_7d2]=function(e){
 if(!e){
 e=window.event;
 }
@@ -102293,40 +64092,40 @@
 }
 }});
 dojo.io.XMLHTTPTransport=new function(){
-var _7cb=this;
-var _7cc={};
+var _7d6=this;
+var _7d7={};
 this.useCache=false;
 this.preventCache=false;
-function getCacheKey(url,_7ce,_7cf){
-return url+"|"+_7ce+"|"+_7cf.toLowerCase();
+function getCacheKey(url,_7d9,_7da){
+return url+"|"+_7d9+"|"+_7da.toLowerCase();
 }
-function addToCache(url,_7d1,_7d2,http){
-_7cc[getCacheKey(url,_7d1,_7d2)]=http;
+function addToCache(url,_7dc,_7dd,http){
+_7d7[getCacheKey(url,_7dc,_7dd)]=http;
 }
-function getFromCache(url,_7d5,_7d6){
-return _7cc[getCacheKey(url,_7d5,_7d6)];
+function getFromCache(url,_7e0,_7e1){
+return _7d7[getCacheKey(url,_7e0,_7e1)];
 }
 this.clearCache=function(){
-_7cc={};
+_7d7={};
 };
-function doLoad(_7d7,http,url,_7da,_7db){
+function doLoad(_7e2,http,url,_7e5,_7e6){
 if(((http.status>=200)&&(http.status<300))||(http.status==304)||(location.protocol=="file:"&&(http.status==0||http.status==undefined))||(location.protocol=="chrome:"&&(http.status==0||http.status==undefined))){
 var ret;
-if(_7d7.method.toLowerCase()=="head"){
-var _7dd=http.getAllResponseHeaders();
+if(_7e2.method.toLowerCase()=="head"){
+var _7e8=http.getAllResponseHeaders();
 ret={};
 ret.toString=function(){
-return _7dd;
+return _7e8;
 };
-var _7de=_7dd.split(/[\r\n]+/g);
-for(var i=0;i<_7de.length;i++){
-var pair=_7de[i].match(/^([^:]+)\s*:\s*(.+)$/i);
+var _7e9=_7e8.split(/[\r\n]+/g);
+for(var i=0;i<_7e9.length;i++){
+var pair=_7e9[i].match(/^([^:]+)\s*:\s*(.+)$/i);
 if(pair){
 ret[pair[1]]=pair[2];
 }
 }
 }else{
-if(_7d7.mimetype=="text/javascript"){
+if(_7e2.mimetype=="text/javascript"){
 try{
 ret=dj_eval(http.responseText);
 }
@@ -102336,7 +64135,7 @@
 ret=null;
 }
 }else{
-if(_7d7.mimetype=="text/json"||_7d7.mimetype=="application/json"){
+if(_7e2.mimetype=="text/json"||_7e2.mimetype=="application/json"){
 try{
 ret=dj_eval("("+http.responseText+")");
 }
@@ -102346,7 +64145,7 @@
 ret=false;
 }
 }else{
-if((_7d7.mimetype=="application/xml")||(_7d7.mimetype=="text/xml")){
+if((_7e2.mimetype=="application/xml")||(_7e2.mimetype=="text/xml")){
 ret=http.responseXML;
 if(!ret||typeof ret=="string"||!http.getResponseHeader("Content-Type")){
 ret=dojo.dom.createDocumentFromText(http.responseText);
@@ -102357,22 +64156,22 @@
 }
 }
 }
-if(_7db){
-addToCache(url,_7da,_7d7.method,http);
+if(_7e6){
+addToCache(url,_7e5,_7e2.method,http);
 }
-_7d7[(typeof _7d7.load=="function")?"load":"handle"]("load",ret,http,_7d7);
+_7e2[(typeof _7e2.load=="function")?"load":"handle"]("load",ret,http,_7e2);
 }else{
-var _7e1=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-_7d7[(typeof _7d7.error=="function")?"error":"handle"]("error",_7e1,http,_7d7);
+var _7ec=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
+_7e2[(typeof _7e2.error=="function")?"error":"handle"]("error",_7ec,http,_7e2);
 }
 }
-function setHeaders(http,_7e3){
-if(_7e3["headers"]){
-for(var _7e4 in _7e3["headers"]){
-if(_7e4.toLowerCase()=="content-type"&&!_7e3["contentType"]){
-_7e3["contentType"]=_7e3["headers"][_7e4];
+function setHeaders(http,_7ee){
+if(_7ee["headers"]){
+for(var _7ef in _7ee["headers"]){
+if(_7ef.toLowerCase()=="content-type"&&!_7ee["contentType"]){
+_7ee["contentType"]=_7ee["headers"][_7ef];
 }else{
-http.setRequestHeader(_7e4,_7e3["headers"][_7e4]);
+http.setRequestHeader(_7ef,_7ee["headers"][_7ef]);
 }
 }
 }
@@ -102386,7 +64185,7 @@
 };
 this.watchInFlight=function(){
 var now=null;
-if(!dojo.hostenv._blockAsync&&!_7cb._blockAsync){
+if(!dojo.hostenv._blockAsync&&!_7d6._blockAsync){
 for(var x=this.inFlight.length-1;x>=0;x--){
 try{
 var tif=this.inFlight[x];
@@ -102414,8 +64213,8 @@
 }
 catch(e){
 try{
-var _7e8=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
-tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_7e8,tif.http,tif.req);
+var _7f3=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
+tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_7f3,tif.http,tif.req);
 }
 catch(e2){
 dojo.debug("XMLHttpTransport error callback failed: "+e2);
@@ -102430,74 +64229,74 @@
 }
 this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
 };
-var _7e9=dojo.hostenv.getXmlhttpObject()?true:false;
-this.canHandle=function(_7ea){
-return _7e9&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_7ea["mimetype"].toLowerCase()||""))&&!(_7ea["formNode"]&&dojo.io.formHasFile(_7ea["formNode"]));
+var _7f4=dojo.hostenv.getXmlhttpObject()?true:false;
+this.canHandle=function(_7f5){
+return _7f4&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_7f5["mimetype"].toLowerCase()||""))&&!(_7f5["formNode"]&&dojo.io.formHasFile(_7f5["formNode"]));
 };
 this.multipartBoundary="45309FFF-BD65-4d50-99C9-36986896A96F";
-this.bind=function(_7eb){
-if(!_7eb["url"]){
-if(!_7eb["formNode"]&&(_7eb["backButton"]||_7eb["back"]||_7eb["changeUrl"]||_7eb["watchForURL"])&&(!djConfig.preventBackButtonFix)){
+this.bind=function(_7f6){
+if(!_7f6["url"]){
+if(!_7f6["formNode"]&&(_7f6["backButton"]||_7f6["back"]||_7f6["changeUrl"]||_7f6["watchForURL"])&&(!djConfig.preventBackButtonFix)){
 dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request","Use dojo.undo.browser.addToHistory() instead.","0.4");
-dojo.undo.browser.addToHistory(_7eb);
+dojo.undo.browser.addToHistory(_7f6);
 return true;
 }
 }
-var url=_7eb.url;
-var _7ed="";
-if(_7eb["formNode"]){
-var ta=_7eb.formNode.getAttribute("action");
-if((ta)&&(!_7eb["url"])){
+var url=_7f6.url;
+var _7f8="";
+if(_7f6["formNode"]){
+var ta=_7f6.formNode.getAttribute("action");
+if((ta)&&(!_7f6["url"])){
 url=ta;
 }
-var tp=_7eb.formNode.getAttribute("method");
-if((tp)&&(!_7eb["method"])){
-_7eb.method=tp;
+var tp=_7f6.formNode.getAttribute("method");
+if((tp)&&(!_7f6["method"])){
+_7f6.method=tp;
 }
-_7ed+=dojo.io.encodeForm(_7eb.formNode,_7eb.encoding,_7eb["formFilter"]);
+_7f8+=dojo.io.encodeForm(_7f6.formNode,_7f6.encoding,_7f6["formFilter"]);
 }
 if(url.indexOf("#")>-1){
 dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url);
 url=url.split("#")[0];
 }
-if(_7eb["file"]){
-_7eb.method="post";
+if(_7f6["file"]){
+_7f6.method="post";
 }
-if(!_7eb["method"]){
-_7eb.method="get";
+if(!_7f6["method"]){
+_7f6.method="get";
 }
-if(_7eb.method.toLowerCase()=="get"){
-_7eb.multipart=false;
+if(_7f6.method.toLowerCase()=="get"){
+_7f6.multipart=false;
 }else{
-if(_7eb["file"]){
-_7eb.multipart=true;
+if(_7f6["file"]){
+_7f6.multipart=true;
 }else{
-if(!_7eb["multipart"]){
-_7eb.multipart=false;
+if(!_7f6["multipart"]){
+_7f6.multipart=false;
 }
 }
 }
-if(_7eb["backButton"]||_7eb["back"]||_7eb["changeUrl"]){
-dojo.undo.browser.addToHistory(_7eb);
+if(_7f6["backButton"]||_7f6["back"]||_7f6["changeUrl"]){
+dojo.undo.browser.addToHistory(_7f6);
 }
-var _7f0=_7eb["content"]||{};
-if(_7eb.sendTransport){
-_7f0["dojo.transport"]="xmlhttp";
+var _7fb=_7f6["content"]||{};
+if(_7f6.sendTransport){
+_7fb["dojo.transport"]="xmlhttp";
 }
 do{
-if(_7eb.postContent){
-_7ed=_7eb.postContent;
+if(_7f6.postContent){
+_7f8=_7f6.postContent;
 break;
 }
-if(_7f0){
-_7ed+=dojo.io.argsFromMap(_7f0,_7eb.encoding);
+if(_7fb){
+_7f8+=dojo.io.argsFromMap(_7fb,_7f6.encoding);
 }
-if(_7eb.method.toLowerCase()=="get"||!_7eb.multipart){
+if(_7f6.method.toLowerCase()=="get"||!_7f6.multipart){
 break;
 }
 var t=[];
-if(_7ed.length){
-var q=_7ed.split("&");
+if(_7f8.length){
+var q=_7f8.split("&");
 for(var i=0;i<q.length;++i){
 if(q[i].length){
 var p=q[i].split("=");
@@ -102505,71 +64304,71 @@
 }
 }
 }
-if(_7eb.file){
-if(dojo.lang.isArray(_7eb.file)){
-for(var i=0;i<_7eb.file.length;++i){
-var o=_7eb.file[i];
+if(_7f6.file){
+if(dojo.lang.isArray(_7f6.file)){
+for(var i=0;i<_7f6.file.length;++i){
+var o=_7f6.file[i];
 t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
 }
 }else{
-var o=_7eb.file;
+var o=_7f6.file;
 t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
 }
 }
 if(t.length){
 t.push("--"+this.multipartBoundary+"--","");
-_7ed=t.join("\r\n");
+_7f8=t.join("\r\n");
 }
 }while(false);
-var _7f6=_7eb["sync"]?false:true;
-var _7f7=_7eb["preventCache"]||(this.preventCache==true&&_7eb["preventCache"]!=false);
-var _7f8=_7eb["useCache"]==true||(this.useCache==true&&_7eb["useCache"]!=false);
-if(!_7f7&&_7f8){
-var _7f9=getFromCache(url,_7ed,_7eb.method);
-if(_7f9){
-doLoad(_7eb,_7f9,url,_7ed,false);
+var _801=_7f6["sync"]?false:true;
+var _802=_7f6["preventCache"]||(this.preventCache==true&&_7f6["preventCache"]!=false);
+var _803=_7f6["useCache"]==true||(this.useCache==true&&_7f6["useCache"]!=false);
+if(!_802&&_803){
+var _804=getFromCache(url,_7f8,_7f6.method);
+if(_804){
+doLoad(_7f6,_804,url,_7f8,false);
 return;
 }
 }
-var http=dojo.hostenv.getXmlhttpObject(_7eb);
-var _7fb=false;
-if(_7f6){
-var _7fc=this.inFlight.push({"req":_7eb,"http":http,"url":url,"query":_7ed,"useCache":_7f8,"startTime":_7eb.timeoutSeconds?(new Date()).getTime():0});
+var http=dojo.hostenv.getXmlhttpObject(_7f6);
+var _806=false;
+if(_801){
+var _807=this.inFlight.push({"req":_7f6,"http":http,"url":url,"query":_7f8,"useCache":_803,"startTime":_7f6.timeoutSeconds?(new Date()).getTime():0});
 this.startWatchingInFlight();
 }else{
-_7cb._blockAsync=true;
+_7d6._blockAsync=true;
 }
-if(_7eb.method.toLowerCase()=="post"){
-if(!_7eb.user){
-http.open("POST",url,_7f6);
+if(_7f6.method.toLowerCase()=="post"){
+if(!_7f6.user){
+http.open("POST",url,_801);
 }else{
-http.open("POST",url,_7f6,_7eb.user,_7eb.password);
+http.open("POST",url,_801,_7f6.user,_7f6.password);
 }
-setHeaders(http,_7eb);
-http.setRequestHeader("Content-Type",_7eb.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_7eb.contentType||"application/x-www-form-urlencoded"));
+setHeaders(http,_7f6);
+http.setRequestHeader("Content-Type",_7f6.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_7f6.contentType||"application/x-www-form-urlencoded"));
 try{
-http.send(_7ed);
+http.send(_7f8);
 }
 catch(e){
 if(typeof http.abort=="function"){
 http.abort();
 }
-doLoad(_7eb,{status:404},url,_7ed,_7f8);
+doLoad(_7f6,{status:404},url,_7f8,_803);
 }
 }else{
-var _7fd=url;
-if(_7ed!=""){
-_7fd+=(_7fd.indexOf("?")>-1?"&":"?")+_7ed;
+var _808=url;
+if(_7f8!=""){
+_808+=(_808.indexOf("?")>-1?"&":"?")+_7f8;
 }
-if(_7f7){
-_7fd+=(dojo.string.endsWithAny(_7fd,"?","&")?"":(_7fd.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
+if(_802){
+_808+=(dojo.string.endsWithAny(_808,"?","&")?"":(_808.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
 }
-if(!_7eb.user){
-http.open(_7eb.method.toUpperCase(),_7fd,_7f6);
+if(!_7f6.user){
+http.open(_7f6.method.toUpperCase(),_808,_801);
 }else{
-http.open(_7eb.method.toUpperCase(),_7fd,_7f6,_7eb.user,_7eb.password);
+http.open(_7f6.method.toUpperCase(),_808,_801,_7f6.user,_7f6.password);
 }
-setHeaders(http,_7eb);
+setHeaders(http,_7f6);
 try{
 http.send(null);
 }
@@ -102577,14 +64376,14 @@
 if(typeof http.abort=="function"){
 http.abort();
 }
-doLoad(_7eb,{status:404},url,_7ed,_7f8);
+doLoad(_7f6,{status:404},url,_7f8,_803);
 }
 }
-if(!_7f6){
-doLoad(_7eb,http,url,_7ed,_7f8);
-_7cb._blockAsync=false;
+if(!_801){
+doLoad(_7f6,http,url,_7f8,_803);
+_7d6._blockAsync=false;
 }
-_7eb.abort=function(){
+_7f6.abort=function(){
 try{
 http._aborted=true;
 }
@@ -102598,15 +64397,15 @@
 };
 }
 dojo.provide("dojo.io.cookie");
-dojo.io.cookie.setCookie=function(name,_7ff,days,path,_802,_803){
-var _804=-1;
+dojo.io.cookie.setCookie=function(name,_80a,days,path,_80d,_80e){
+var _80f=-1;
 if((typeof days=="number")&&(days>=0)){
 var d=new Date();
 d.setTime(d.getTime()+(days*24*60*60*1000));
-_804=d.toGMTString();
+_80f=d.toGMTString();
 }
-_7ff=escape(_7ff);
-document.cookie=name+"="+_7ff+";"+(_804!=-1?" expires="+_804+";":"")+(path?"path="+path:"")+(_802?"; domain="+_802:"")+(_803?"; secure":"");
+_80a=escape(_80a);
+document.cookie=name+"="+_80a+";"+(_80f!=-1?" expires="+_80f+";":"")+(path?"path="+path:"")+(_80d?"; domain="+_80d:"")+(_80e?"; secure":"");
 };
 dojo.io.cookie.set=dojo.io.cookie.setCookie;
 dojo.io.cookie.getCookie=function(name){
@@ -102614,71 +64413,71 @@
 if(idx==-1){
 return null;
 }
-var _808=document.cookie.substring(idx+name.length+1);
-var end=_808.indexOf(";");
+var _813=document.cookie.substring(idx+name.length+1);
+var end=_813.indexOf(";");
 if(end==-1){
-end=_808.length;
+end=_813.length;
 }
-_808=_808.substring(0,end);
-_808=unescape(_808);
-return _808;
+_813=_813.substring(0,end);
+_813=unescape(_813);
+return _813;
 };
 dojo.io.cookie.get=dojo.io.cookie.getCookie;
 dojo.io.cookie.deleteCookie=function(name){
 dojo.io.cookie.setCookie(name,"-",0);
 };
-dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_80f,_810,_811){
+dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_81a,_81b,_81c){
 if(arguments.length==5){
-_811=_80f;
-_80f=null;
-_810=null;
+_81c=_81a;
+_81a=null;
+_81b=null;
 }
-var _812=[],_813,_814="";
-if(!_811){
-_813=dojo.io.cookie.getObjectCookie(name);
+var _81d=[],_81e,_81f="";
+if(!_81c){
+_81e=dojo.io.cookie.getObjectCookie(name);
 }
 if(days>=0){
-if(!_813){
-_813={};
+if(!_81e){
+_81e={};
 }
 for(var prop in obj){
 if(obj[prop]==null){
-delete _813[prop];
+delete _81e[prop];
 }else{
 if((typeof obj[prop]=="string")||(typeof obj[prop]=="number")){
-_813[prop]=obj[prop];
+_81e[prop]=obj[prop];
 }
 }
 }
 prop=null;
-for(var prop in _813){
-_812.push(escape(prop)+"="+escape(_813[prop]));
+for(var prop in _81e){
+_81d.push(escape(prop)+"="+escape(_81e[prop]));
 }
-_814=_812.join("&");
+_81f=_81d.join("&");
 }
-dojo.io.cookie.setCookie(name,_814,days,path,_80f,_810);
+dojo.io.cookie.setCookie(name,_81f,days,path,_81a,_81b);
 };
 dojo.io.cookie.getObjectCookie=function(name){
-var _817=null,_818=dojo.io.cookie.getCookie(name);
-if(_818){
-_817={};
-var _819=_818.split("&");
-for(var i=0;i<_819.length;i++){
-var pair=_819[i].split("=");
-var _81c=pair[1];
-if(isNaN(_81c)){
-_81c=unescape(pair[1]);
+var _822=null,_823=dojo.io.cookie.getCookie(name);
+if(_823){
+_822={};
+var _824=_823.split("&");
+for(var i=0;i<_824.length;i++){
+var pair=_824[i].split("=");
+var _827=pair[1];
+if(isNaN(_827)){
+_827=unescape(pair[1]);
 }
-_817[unescape(pair[0])]=_81c;
+_822[unescape(pair[0])]=_827;
 }
 }
-return _817;
+return _822;
 };
 dojo.io.cookie.isSupported=function(){
 if(typeof navigator.cookieEnabled!="boolean"){
 dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__","CookiesAllowed",90,null);
-var _81d=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
-navigator.cookieEnabled=(_81d=="CookiesAllowed");
+var _828=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
+navigator.cookieEnabled=(_828=="CookiesAllowed");
 if(navigator.cookieEnabled){
 this.deleteCookie("__TestingYourBrowserForCookieSupport__");
 }
@@ -102688,61 +64487,57 @@
 if(!dojo.io.cookies){
 dojo.io.cookies=dojo.io.cookie;
 }
+dojo.kwCompoundRequire({common:["dojo.io.common"],rhino:["dojo.io.RhinoIO"],browser:["dojo.io.BrowserIO","dojo.io.cookie"],dashboard:["dojo.io.BrowserIO","dojo.io.cookie"]});
 dojo.provide("dojo.io.*");
 
 
 __CPAN_EDITION__ widget build.txt
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/dom.js,
-../src/xml/Parse.js,
-../src/lang/common.js,
-../src/lang/func.js,
-../src/lang/array.js,
-../src/lang/extras.js,
-../src/lang/declare.js,
-../src/ns.js,
-../src/event/common.js,
-../src/event/topic.js,
-../src/event/browser.js,
-../src/event/__package__.js,
-../src/widget/Manager.js,
-../src/uri/Uri.js,
-../src/uri/__package__.js,
-../src/html/common.js,
-../src/a11y.js,
-../src/widget/Widget.js,
-../src/widget/Parse.js,
-../src/html/style.js,
-../src/widget/DomWidget.js,
-../src/html/display.js,
-../src/html/layout.js,
-../src/html/util.js,
-../src/gfx/color.js,
-../src/lfx/Animation.js,
-../src/html/color.js,
-../src/lfx/html.js,
-../src/lfx/__package__.js,
-../src/lfx/toggle.js,
-../src/widget/HtmlWidget.js,
-../src/widget/__package__.js,
-../src/string/common.js,
-../src/string.js,
-../src/io/common.js,
-../src/string/extras.js,
-../src/undo/browser.js,
-../src/io/BrowserIO.js,
-../src/io/cookie.js,
+Files baked into this build:
+dojoGuardStart.js
+../src/bootstrap1.js
+../src/loader.js
+dojoGuardEnd.js
+../src/hostenv_browser.js
+../src/dom.js
+../src/xml/Parse.js
+../src/lang/common.js
+../src/lang/func.js
+../src/lang/array.js
+../src/lang/extras.js
+../src/lang/declare.js
+../src/ns.js
+../src/event/common.js
+../src/event/topic.js
+../src/event/browser.js
+../src/event/__package__.js
+../src/widget/Manager.js
+../src/uri/Uri.js
+../src/uri/__package__.js
+../src/html/common.js
+../src/a11y.js
+../src/widget/Widget.js
+../src/widget/Parse.js
+../src/html/style.js
+../src/widget/DomWidget.js
+../src/html/display.js
+../src/html/layout.js
+../src/html/util.js
+../src/gfx/color.js
+../src/lfx/Animation.js
+../src/html/color.js
+../src/lfx/html.js
+../src/lfx/__package__.js
+../src/lfx/toggle.js
+../src/widget/HtmlWidget.js
+../src/widget/__package__.js
+../src/string/common.js
+../src/string.js
+../src/io/common.js
+../src/string/extras.js
+../src/undo/browser.js
+../src/io/BrowserIO.js
+../src/io/cookie.js
 ../src/io/__package__.js
-
-		
 __CPAN_EDITION__ ajax dojo.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -102779,7 +64574,7 @@
 return dj_currentContext;
 };
 dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:1,flag:"xdomain",revision:Number("$Rev: 6824 $".match(/[0-9]+/)[0]),toString:function(){
+dojo.version={major:0,minor:4,patch:2,flag:"xdomain",revision:Number("$Rev: 7616 $".match(/[0-9]+/)[0]),toString:function(){
 with(dojo.version){
 return major+"."+minor+"."+patch+flag+" ("+revision+")";
 }
@@ -103035,7 +64830,7 @@
 }
 };
 dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
+if(typeof setTimeout=="object"||(djConfig["useXDomain"]&&dojo.render.html.opera)){
 setTimeout("dojo.hostenv.loaded();",0);
 }else{
 dojo.hostenv.loaded();
@@ -103183,6 +64978,11 @@
 dojo.registerModulePath=function(_66,_67){
 return dojo.hostenv.setModulePrefix(_66,_67);
 };
+if(djConfig["modulePaths"]){
+for(var param in djConfig["modulePaths"]){
+dojo.registerModulePath(param,djConfig["modulePaths"][param]);
+}
+}
 dojo.setModulePrefix=function(_68,_69){
 dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
 return dojo.registerModulePath(_68,_69);
@@ -103342,112 +65142,118 @@
 }
 })();
 dojo.hostenv.resetXd=function(){
-this.isXDomain=djConfig.forceXDomain||false;
+this.isXDomain=djConfig.useXDomain||false;
 this.xdTimer=0;
 this.xdInFlight={};
 this.xdOrderedReqs=[];
 this.xdDepMap={};
 this.xdContents=[];
+this.xdDefList=[];
 };
 dojo.hostenv.resetXd();
-dojo.hostenv.createXdPackage=function(_9f){
-var _a0=[];
-var _a1=/dojo.(require|requireIf|requireAll|provide|requireAfterIf|requireAfter|kwCompoundRequire|conditionalRequire|hostenv\.conditionalLoadModule|.hostenv\.loadModule|hostenv\.moduleLoaded)\(([\w\W]*?)\)/mg;
-var _a2;
-while((_a2=_a1.exec(_9f))!=null){
-_a0.push("\""+_a2[1]+"\", "+_a2[2]);
+dojo.hostenv.createXdPackage=function(_9f,_a0,_a1){
+var _a2=[];
+var _a3=/dojo.(require|requireIf|requireAll|provide|requireAfterIf|requireAfter|kwCompoundRequire|conditionalRequire|hostenv\.conditionalLoadModule|.hostenv\.loadModule|hostenv\.moduleLoaded)\(([\w\W]*?)\)/mg;
+var _a4;
+while((_a4=_a3.exec(_9f))!=null){
+_a2.push("\""+_a4[1]+"\", "+_a4[2]);
 }
-var _a3=[];
-_a3.push("dojo.hostenv.packageLoaded({\n");
-if(_a0.length>0){
-_a3.push("depends: [");
-for(var i=0;i<_a0.length;i++){
+var _a5=[];
+_a5.push("dojo.hostenv.packageLoaded({\n");
+if(_a2.length>0){
+_a5.push("depends: [");
+for(var i=0;i<_a2.length;i++){
 if(i>0){
-_a3.push(",\n");
+_a5.push(",\n");
 }
-_a3.push("["+_a0[i]+"]");
+_a5.push("["+_a2[i]+"]");
 }
-_a3.push("],");
+_a5.push("],");
 }
-_a3.push("\ndefinePackage: function(dojo){");
-_a3.push(_9f);
-_a3.push("\n}});");
-return _a3.join("");
+_a5.push("\ndefinePackage: function(dojo){");
+_a5.push(_9f);
+_a5.push("\n}, resourceName: '"+_a0+"', resourcePath: '"+_a1+"'});");
+return _a5.join("");
 };
-dojo.hostenv.loadPath=function(_a5,_a6,cb){
-var _a8=_a5.indexOf(":");
-var _a9=_a5.indexOf("/");
+dojo.hostenv.loadPath=function(_a7,_a8,cb){
+var _aa=_a7.indexOf(":");
+var _ab=_a7.indexOf("/");
 var uri;
-var _ab=false;
-if(_a8>0&&_a8<_a9){
-uri=_a5;
-this.isXDomain=_ab=true;
+var _ad=false;
+if(_aa>0&&_aa<_ab){
+uri=_a7;
+this.isXDomain=_ad=true;
 }else{
-uri=this.getBaseScriptUri()+_a5;
-_a8=uri.indexOf(":");
-_a9=uri.indexOf("/");
-if(_a8>0&&_a8<_a9&&(!location.host||uri.indexOf("http://"+location.host)!=0)){
-this.isXDomain=_ab=true;
+uri=this.getBaseScriptUri()+_a7;
+_aa=uri.indexOf(":");
+_ab=uri.indexOf("/");
+if(_aa>0&&_aa<_ab&&(!location.host||uri.indexOf("http://"+location.host)!=0)){
+this.isXDomain=_ad=true;
 }
 }
 if(djConfig.cacheBust&&dojo.render.html.capable){
 uri+="?"+String(djConfig.cacheBust).replace(/\W+/g,"");
 }
 try{
-return ((!_a6||this.isXDomain)?this.loadUri(uri,cb,_ab,_a6):this.loadUriAndCheck(uri,_a6,cb));
+return ((!_a8||this.isXDomain)?this.loadUri(uri,cb,_ad,_a8):this.loadUriAndCheck(uri,_a8,cb));
 }
 catch(e){
 dojo.debug(e);
 return false;
 }
 };
-dojo.hostenv.loadUri=function(uri,cb,_ae,_af){
+dojo.hostenv.loadUri=function(uri,cb,_b0,_b1){
 if(this.loadedUris[uri]){
 return 1;
 }
 if(this.isXDomain){
-this.xdOrderedReqs.push(_af);
 if(uri.indexOf("__package__")!=-1){
-_af+=".*";
+_b1+=".*";
 }
-this.xdInFlight[_af]=true;
+this.xdOrderedReqs.push(_b1);
+if(_b0){
+this.xdInFlight[_b1]=true;
 this.inFlightCount++;
+}
 if(!this.xdTimer){
 this.xdTimer=setInterval("dojo.hostenv.watchInFlightXDomain();",100);
 }
 this.xdStartTime=(new Date()).getTime();
 }
-if(_ae){
-var _b0=uri.lastIndexOf(".");
-if(_b0<=0){
-_b0=uri.length-1;
+if(_b0){
+var _b2=uri.lastIndexOf(".");
+if(_b2<=0){
+_b2=uri.length-1;
 }
-var _b1=uri.substring(0,_b0)+".xd";
-if(_b0!=uri.length-1){
-_b1+=uri.substring(_b0,uri.length);
+var _b3=uri.substring(0,_b2)+".xd";
+if(_b2!=uri.length-1){
+_b3+=uri.substring(_b2,uri.length);
 }
-var _b2=document.createElement("script");
-_b2.type="text/javascript";
-_b2.src=_b1;
+var _b4=document.createElement("script");
+_b4.type="text/javascript";
+_b4.src=_b3;
 if(!this.headElement){
 this.headElement=document.getElementsByTagName("head")[0];
+if(!this.headElement){
+this.headElement=document.getElementsByTagName("html")[0];
 }
-this.headElement.appendChild(_b2);
+}
+this.headElement.appendChild(_b4);
 }else{
-var _b3=this.getText(uri,null,true);
-if(_b3==null){
+var _b5=this.getText(uri,null,true);
+if(_b5==null){
 return 0;
 }
-if(this.isXDomain){
-var pkg=this.createXdPackage(_b3);
+if(this.isXDomain&&uri.indexOf("/nls/")==-1){
+var pkg=this.createXdPackage(_b5,_b1,uri);
 dj_eval(pkg);
 }else{
 if(cb){
-_b3="("+_b3+")";
+_b5="("+_b5+")";
 }
-var _b5=dj_eval(_b3);
+var _b7=dj_eval(_b5);
 if(cb){
-cb(_b5);
+cb(_b7);
 }
 }
 }
@@ -103455,226 +65261,256 @@
 return 1;
 };
 dojo.hostenv.packageLoaded=function(pkg){
-var _b7=pkg.depends;
-var _b8=null;
-var _b9=null;
-var _ba=[];
-if(_b7&&_b7.length>0){
+var _b9=pkg.depends;
+var _ba=null;
+var _bb=null;
+var _bc=[];
+if(_b9&&_b9.length>0){
 var dep=null;
-var _bc=0;
-var _bd=false;
-for(var i=0;i<_b7.length;i++){
-dep=_b7[i];
+var _be=0;
+var _bf=false;
+for(var i=0;i<_b9.length;i++){
+dep=_b9[i];
 if(dep[0]=="provide"||dep[0]=="hostenv.moduleLoaded"){
-_ba.push(dep[1]);
+_bc.push(dep[1]);
 }else{
-if(!_b8){
-_b8=[];
+if(!_ba){
+_ba=[];
 }
-if(!_b9){
-_b9=[];
+if(!_bb){
+_bb=[];
 }
-var _bf=this.unpackXdDependency(dep);
-if(_bf.requires){
-_b8=_b8.concat(_bf.requires);
+var _c1=this.unpackXdDependency(dep);
+if(_c1.requires){
+_ba=_ba.concat(_c1.requires);
 }
-if(_bf.requiresAfter){
-_b9=_b9.concat(_bf.requiresAfter);
+if(_c1.requiresAfter){
+_bb=_bb.concat(_c1.requiresAfter);
 }
 }
-var _c0=dep[0];
-var _c1=_c0.split(".");
-if(_c1.length==2){
-dojo[_c1[0]][_c1[1]].apply(dojo[_c1[0]],dep.slice(1));
+var _c2=dep[0];
+var _c3=_c2.split(".");
+if(_c3.length==2){
+dojo[_c3[0]][_c3[1]].apply(dojo[_c3[0]],dep.slice(1));
 }else{
-dojo[_c0].apply(dojo,dep.slice(1));
+dojo[_c2].apply(dojo,dep.slice(1));
 }
 }
-var _c2=this.xdContents.push({content:pkg.definePackage,isDefined:false})-1;
-for(var i=0;i<_ba.length;i++){
-this.xdDepMap[_ba[i]]={requires:_b8,requiresAfter:_b9,contentIndex:_c2};
+var _c4=this.xdContents.push({content:pkg.definePackage,resourceName:pkg["resourceName"],resourcePath:pkg["resourcePath"],isDefined:false})-1;
+for(var i=0;i<_bc.length;i++){
+this.xdDepMap[_bc[i]]={requires:_ba,requiresAfter:_bb,contentIndex:_c4};
 }
-for(var i=0;i<_ba.length;i++){
-this.xdInFlight[_ba[i]]=false;
+for(var i=0;i<_bc.length;i++){
+this.xdInFlight[_bc[i]]=false;
 }
 }
 };
-dojo.hostenv.xdLoadFlattenedBundle=function(_c3,_c4,_c5,_c6){
-_c5=_c5||"root";
-var _c7=dojo.hostenv.normalizeLocale(_c5).replace("-","_");
-var _c8=[_c3,"nls",_c4].join(".");
-var _c9=dojo.hostenv.startPackage(_c8);
-_c9[_c7]=_c6;
-var _ca=[_c3,_c7,_c4].join(".");
-var _cb=dojo.hostenv.xdBundleMap[_ca];
-if(_cb){
-for(var _cc in _cb){
-_c9[_cc]=_c6;
+dojo.hostenv.xdLoadFlattenedBundle=function(_c5,_c6,_c7,_c8){
+_c7=_c7||"root";
+var _c9=dojo.hostenv.normalizeLocale(_c7).replace("-","_");
+var _ca=[_c5,"nls",_c6].join(".");
+var _cb=dojo.hostenv.startPackage(_ca);
+_cb[_c9]=_c8;
+var _cc=[_c5,_c9,_c6].join(".");
+var _cd=dojo.hostenv.xdBundleMap[_cc];
+if(_cd){
+for(var _ce in _cd){
+_cb[_ce]=_c8;
 }
 }
 };
 dojo.hostenv.xdBundleMap={};
-dojo.xdRequireLocalization=function(_cd,_ce,_cf,_d0){
-var _d1=_d0.split(",");
-var _d2=dojo.hostenv.normalizeLocale(_cf);
-var _d3="";
-for(var i=0;i<_d1.length;i++){
-if(_d2.indexOf(_d1[i])==0){
-if(_d1[i].length>_d3.length){
-_d3=_d1[i];
+dojo.xdRequireLocalization=function(_cf,_d0,_d1,_d2){
+var _d3=_d2.split(",");
+var _d4=dojo.hostenv.normalizeLocale(_d1);
+var _d5="";
+for(var i=0;i<_d3.length;i++){
+if(_d4.indexOf(_d3[i])==0){
+if(_d3[i].length>_d5.length){
+_d5=_d3[i];
 }
 }
 }
-var _d5=_d3.replace("-","_");
-var _d6=dojo.evalObjPath([_cd,"nls",_ce].join("."));
-if(_d6&&_d6[_d5]){
-bundle[_d2.replace("-","_")]=_d6[_d5];
+var _d7=_d5.replace("-","_");
+var _d8=dojo.evalObjPath([_cf,"nls",_d0].join("."));
+if(_d8&&_d8[_d7]){
+bundle[_d4.replace("-","_")]=_d8[_d7];
 }else{
-var _d7=[_cd,(_d5||"root"),_ce].join(".");
-var _d8=dojo.hostenv.xdBundleMap[_d7];
-if(!_d8){
-_d8=dojo.hostenv.xdBundleMap[_d7]={};
+var _d9=[_cf,(_d7||"root"),_d0].join(".");
+var _da=dojo.hostenv.xdBundleMap[_d9];
+if(!_da){
+_da=dojo.hostenv.xdBundleMap[_d9]={};
 }
-_d8[_d2.replace("-","_")]=true;
-dojo.require(_cd+".nls"+(_d3?"."+_d3:"")+"."+_ce);
+_da[_d4.replace("-","_")]=true;
+dojo.require(_cf+".nls"+(_d5?"."+_d5:"")+"."+_d0);
 }
 };
 (function(){
-var _d9=djConfig.extraLocale;
-if(_d9){
-if(!_d9 instanceof Array){
-_d9=[_d9];
+var _db=djConfig.extraLocale;
+if(_db){
+if(!_db instanceof Array){
+_db=[_db];
 }
 dojo._xdReqLoc=dojo.xdRequireLocalization;
-dojo.xdRequireLocalization=function(m,b,_dc,_dd){
-dojo._xdReqLoc(m,b,_dc,_dd);
-if(_dc){
+dojo.xdRequireLocalization=function(m,b,_de,_df){
+dojo._xdReqLoc(m,b,_de,_df);
+if(_de){
 return;
 }
-for(var i=0;i<_d9.length;i++){
-dojo._xdReqLoc(m,b,_d9[i],_dd);
+for(var i=0;i<_db.length;i++){
+dojo._xdReqLoc(m,b,_db[i],_df);
 }
 };
 }
 })();
 dojo.hostenv.unpackXdDependency=function(dep){
-var _e0=null;
-var _e1=null;
+var _e2=null;
+var _e3=null;
 switch(dep[0]){
 case "requireIf":
 case "requireAfterIf":
 case "conditionalRequire":
 if((dep[1]===true)||(dep[1]=="common")||(dep[1]&&dojo.render[dep[1]].capable)){
-_e0=[{name:dep[2],content:null}];
+_e2=[{name:dep[2],content:null}];
 }
 break;
 case "requireAll":
 dep.shift();
-_e0=dep;
-dojo.hostenv.flattenRequireArray(_e0);
+_e2=dep;
+dojo.hostenv.flattenRequireArray(_e2);
 break;
 case "kwCompoundRequire":
 case "hostenv.conditionalLoadModule":
-var _e2=dep[1];
-var _e3=_e2["common"]||[];
-var _e0=(_e2[dojo.hostenv.name_])?_e3.concat(_e2[dojo.hostenv.name_]||[]):_e3.concat(_e2["default"]||[]);
-dojo.hostenv.flattenRequireArray(_e0);
+var _e4=dep[1];
+var _e5=_e4["common"]||[];
+var _e2=(_e4[dojo.hostenv.name_])?_e5.concat(_e4[dojo.hostenv.name_]||[]):_e5.concat(_e4["default"]||[]);
+dojo.hostenv.flattenRequireArray(_e2);
 break;
 case "require":
 case "requireAfter":
 case "hostenv.loadModule":
-_e0=[{name:dep[1],content:null}];
+_e2=[{name:dep[1],content:null}];
 break;
 }
-if(dep[0]=="requireAfterIf"){
-_e1=_e0;
-_e0=null;
+if(dep[0]=="requireAfterIf"||dep[0]=="requireIf"){
+_e3=_e2;
+_e2=null;
 }
-return {requires:_e0,requiresAfter:_e1};
+return {requires:_e2,requiresAfter:_e3};
 };
 dojo.hostenv.xdWalkReqs=function(){
-var _e4=null;
+var _e6=null;
 var req;
 for(var i=0;i<this.xdOrderedReqs.length;i++){
 req=this.xdOrderedReqs[i];
 if(this.xdDepMap[req]){
-_e4=[req];
-_e4[req]=true;
-this.xdEvalReqs(_e4);
+_e6=[req];
+_e6[req]=true;
+this.xdEvalReqs(_e6);
 }
 }
 };
-dojo.hostenv.xdTraceReqs=function(_e7,_e8){
-if(_e7&&_e7.length>0){
-var _e9;
-for(var i=0;i<_e7.length;i++){
-_e9=_e7[i].name;
-if(_e9&&!_e8[_e9]){
-_e8.push(_e9);
-_e8[_e9]=true;
-this.xdEvalReqs(_e8);
+dojo.hostenv.xdEvalReqs=function(_e9){
+while(_e9.length>0){
+var req=_e9[_e9.length-1];
+var pkg=this.xdDepMap[req];
+if(pkg){
+var _ec=pkg.requires;
+if(_ec&&_ec.length>0){
+var _ed;
+for(var i=0;i<_ec.length;i++){
+_ed=_ec[i].name;
+if(_ed&&!_e9[_ed]){
+_e9.push(_ed);
+_e9[_ed]=true;
+this.xdEvalReqs(_e9);
 }
 }
 }
-};
-dojo.hostenv.xdEvalReqs=function(_eb){
-if(_eb.length>0){
-var req=_eb[_eb.length-1];
-var pkg=this.xdDepMap[req];
-if(pkg){
-this.xdTraceReqs(pkg.requires,_eb);
-var _ee=this.xdContents[pkg.contentIndex];
-if(!_ee.isDefined){
-_ee.content(dojo);
-_ee.isDefined=true;
+var _ef=this.xdContents[pkg.contentIndex];
+if(!_ef.isDefined){
+var _f0=_ef.content;
+_f0["resourceName"]=_ef["resourceName"];
+_f0["resourcePath"]=_ef["resourcePath"];
+this.xdDefList.push(_f0);
+_ef.isDefined=true;
 }
 this.xdDepMap[req]=null;
-this.xdTraceReqs(pkg.requiresAfter,_eb);
+var _ec=pkg.requiresAfter;
+if(_ec&&_ec.length>0){
+var _ed;
+for(var i=0;i<_ec.length;i++){
+_ed=_ec[i].name;
+if(_ed&&!_e9[_ed]){
+_e9.push(_ed);
+_e9[_ed]=true;
+this.xdEvalReqs(_e9);
 }
-_eb.pop();
-this.xdEvalReqs(_eb);
 }
+}
+}
+_e9.pop();
+}
 };
 dojo.hostenv.clearXdInterval=function(){
 clearInterval(this.xdTimer);
 this.xdTimer=0;
 };
 dojo.hostenv.watchInFlightXDomain=function(){
-var _ef=(djConfig.xdWaitSeconds||30)*1000;
-if(this.xdStartTime+_ef<(new Date()).getTime()){
+var _f1=(djConfig.xdWaitSeconds||15)*1000;
+if(this.xdStartTime+_f1<(new Date()).getTime()){
 this.clearXdInterval();
-var _f0="";
-for(var _f1 in this.xdInFlight){
-if(this.xdInFlight[_f1]){
-_f0+=_f1+" ";
+var _f2="";
+for(var _f3 in this.xdInFlight){
+if(this.xdInFlight[_f3]){
+_f2+=_f3+" ";
 }
 }
-dojo.raise("Could not load cross-domain packages: "+_f0);
+dojo.raise("Could not load cross-domain packages: "+_f2);
 }
-for(var _f1 in this.xdInFlight){
-if(this.xdInFlight[_f1]){
+for(var _f3 in this.xdInFlight){
+if(this.xdInFlight[_f3]){
 return;
 }
 }
 this.clearXdInterval();
 this.xdWalkReqs();
+var _f4=this.xdDefList.length;
+for(var i=0;i<_f4;i++){
+var _f6=dojo.hostenv.xdDefList[i];
+if(djConfig["debugAtAllCosts"]&&_f6["resourceName"]){
+if(!this["xdDebugQueue"]){
+this.xdDebugQueue=[];
+}
+this.xdDebugQueue.push({resourceName:_f6.resourceName,resourcePath:_f6.resourcePath});
+}else{
+_f6(dojo);
+}
+}
 for(var i=0;i<this.xdContents.length;i++){
-var _f3=this.xdContents[i];
-if(_f3.content&&!_f3.isDefined){
-_f3.content(dojo);
+var _f7=this.xdContents[i];
+if(_f7.content&&!_f7.isDefined){
+_f7.content(dojo);
 }
 }
 this.resetXd();
+if(this["xdDebugQueue"]&&this.xdDebugQueue.length>0){
+this.xdDebugFileLoaded();
+}else{
+this.xdNotifyLoaded();
+}
+};
+dojo.hostenv.xdNotifyLoaded=function(){
 this.inFlightCount=0;
 this.callLoaded();
 };
-dojo.hostenv.flattenRequireArray=function(_f4){
-if(_f4){
-for(var i=0;i<_f4.length;i++){
-if(_f4[i] instanceof Array){
-_f4[i]={name:_f4[i][0],content:null};
+dojo.hostenv.flattenRequireArray=function(_f8){
+if(_f8){
+for(var i=0;i<_f8.length;i++){
+if(_f8[i] instanceof Array){
+_f8[i]={name:_f8[i][0],content:null};
 }else{
-_f4[i]={name:_f4[i],content:null};
+_f8[i]={name:_f8[i],content:null};
 }
 }
 }
@@ -103699,13 +65535,13 @@
 if(typeof window!="undefined"){
 (function(){
 if(djConfig.allowQueryConfig){
-var _f6=document.location.toString();
-var _f7=_f6.split("?",2);
-if(_f7.length>1){
-var _f8=_f7[1];
-var _f9=_f8.split("&");
-for(var x in _f9){
-var sp=_f9[x].split("=");
+var _fa=document.location.toString();
+var _fb=_fa.split("?",2);
+if(_fb.length>1){
+var _fc=_fb[1];
+var _fd=_fc.split("&");
+for(var x in _fd){
+var sp=_fd[x].split("=");
 if((sp[0].length>9)&&(sp[0].substr(0,9)=="djConfig.")){
 var opt=sp[0].substr(9);
 try{
@@ -103719,14 +65555,14 @@
 }
 }
 if(((djConfig["baseScriptUri"]=="")||(djConfig["baseRelativePath"]==""))&&(document&&document.getElementsByTagName)){
-var _fd=document.getElementsByTagName("script");
-var _fe=/(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i;
-for(var i=0;i<_fd.length;i++){
-var src=_fd[i].getAttribute("src");
+var _101=document.getElementsByTagName("script");
+var _102=/(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i;
+for(var i=0;i<_101.length;i++){
+var src=_101[i].getAttribute("src");
 if(!src){
 continue;
 }
-var m=src.match(_fe);
+var m=src.match(_102);
 if(m){
 var root=src.substring(0,m.index);
 if(src.indexOf("bootstrap1")>-1){
@@ -103761,10 +65597,10 @@
 drh.opera=dua.indexOf("Opera")>=0;
 drh.khtml=(dav.indexOf("Konqueror")>=0)||(dav.indexOf("Safari")>=0);
 drh.safari=dav.indexOf("Safari")>=0;
-var _10a=dua.indexOf("Gecko");
-drh.mozilla=drh.moz=(_10a>=0)&&(!drh.khtml);
+var _10e=dua.indexOf("Gecko");
+drh.mozilla=drh.moz=(_10e>=0)&&(!drh.khtml);
 if(drh.mozilla){
-drh.geckoVersion=dua.substring(_10a+6,_10a+14);
+drh.geckoVersion=dua.substring(_10e+6,_10e+14);
 }
 drh.ie=(document.all)&&(!drh.opera);
 drh.ie50=drh.ie&&dav.indexOf("MSIE 5.0")>=0;
@@ -103802,7 +65638,7 @@
 dojo.hostenv._XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];
 dojo.hostenv.getXmlhttpObject=function(){
 var http=null;
-var _111=null;
+var _115=null;
 try{
 http=new XMLHttpRequest();
 }
@@ -103810,27 +65646,27 @@
 }
 if(!http){
 for(var i=0;i<3;++i){
-var _113=dojo.hostenv._XMLHTTP_PROGIDS[i];
+var _117=dojo.hostenv._XMLHTTP_PROGIDS[i];
 try{
-http=new ActiveXObject(_113);
+http=new ActiveXObject(_117);
 }
 catch(e){
-_111=e;
+_115=e;
 }
 if(http){
-dojo.hostenv._XMLHTTP_PROGIDS=[_113];
+dojo.hostenv._XMLHTTP_PROGIDS=[_117];
 break;
 }
 }
 }
 if(!http){
-return dojo.raise("XMLHTTP not available",_111);
+return dojo.raise("XMLHTTP not available",_115);
 }
 return http;
 };
 dojo.hostenv._blockAsync=false;
-dojo.hostenv.getText=function(uri,_115,_116){
-if(!_115){
+dojo.hostenv.getText=function(uri,_119,_11a){
+if(!_119){
 this._blockAsync=true;
 }
 var http=this.getXmlhttpObject();
@@ -103838,31 +65674,31 @@
 var stat=http["status"];
 return Boolean((!stat)||((200<=stat)&&(300>stat))||(stat==304));
 }
-if(_115){
-var _11a=this,_11b=null,gbl=dojo.global();
+if(_119){
+var _11e=this,_11f=null,gbl=dojo.global();
 var xhr=dojo.evalObjPath("dojo.io.XMLHTTPTransport");
 http.onreadystatechange=function(){
-if(_11b){
-gbl.clearTimeout(_11b);
-_11b=null;
+if(_11f){
+gbl.clearTimeout(_11f);
+_11f=null;
 }
-if(_11a._blockAsync||(xhr&&xhr._blockAsync)){
-_11b=gbl.setTimeout(function(){
+if(_11e._blockAsync||(xhr&&xhr._blockAsync)){
+_11f=gbl.setTimeout(function(){
 http.onreadystatechange.apply(this);
 },10);
 }else{
 if(4==http.readyState){
 if(isDocumentOk(http)){
-_115(http.responseText);
+_119(http.responseText);
 }
 }
 }
 };
 }
-http.open("GET",uri,_115?true:false);
+http.open("GET",uri,_119?true:false);
 try{
 http.send(null);
-if(_115){
+if(_119){
 return null;
 }
 if(!isDocumentOk(http)){
@@ -103874,7 +65710,7 @@
 }
 catch(e){
 this._blockAsync=false;
-if((_116)&&(!_115)){
+if((_11a)&&(!_119)){
 return null;
 }else{
 throw e;
@@ -103891,13 +65727,13 @@
 dojo.hostenv._println_buffer.push(line);
 }else{
 try{
-var _120=document.getElementById(djConfig.debugContainerId?djConfig.debugContainerId:dojo.hostenv.defaultDebugContainerId);
-if(!_120){
-_120=dojo.body();
+var _124=document.getElementById(djConfig.debugContainerId?djConfig.debugContainerId:dojo.hostenv.defaultDebugContainerId);
+if(!_124){
+_124=dojo.body();
 }
 var div=document.createElement("div");
 div.appendChild(document.createTextNode(line));
-_120.appendChild(div);
+_124.appendChild(div);
 }
 catch(e){
 try{
@@ -103915,12 +65751,12 @@
 dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
 }
 });
-function dj_addNodeEvtHdlr(node,_123,fp){
-var _125=node["on"+_123]||function(){
+function dj_addNodeEvtHdlr(node,_127,fp){
+var _129=node["on"+_127]||function(){
 };
-node["on"+_123]=function(){
+node["on"+_127]=function(){
 fp.apply(node,arguments);
-_125.apply(node,arguments);
+_129.apply(node,arguments);
 };
 return true;
 }
@@ -103934,20 +65770,20 @@
 clearInterval(_timer);
 delete _timer;
 }
-var _128=function(){
+var _12c=function(){
 if(dojo.render.html.ie){
 dojo.hostenv.makeWidgets();
 }
 };
 if(dojo.hostenv.inFlightCount==0){
-_128();
+_12c();
 dojo.hostenv.modulesLoaded();
 }else{
-dojo.hostenv.modulesLoadedListeners.unshift(_128);
+dojo.hostenv.modulesLoadedListeners.unshift(_12c);
 }
 }
 if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&!djConfig.delayMozLoadingFix)){
+if(dojo.render.html.opera||(dojo.render.html.moz&&(djConfig["enableMozDomContentLoaded"]===true))){
 document.addEventListener("DOMContentLoaded",dj_load_init,null);
 }
 window.addEventListener("load",dj_load_init,null);
@@ -103990,19 +65826,19 @@
 }
 if((djConfig.parseWidgets)||(sids.length>0)){
 if(dojo.evalObjPath("dojo.widget.Parse")){
-var _12b=new dojo.xml.Parse();
+var _12f=new dojo.xml.Parse();
 if(sids.length>0){
 for(var x=0;x<sids.length;x++){
-var _12d=document.getElementById(sids[x]);
-if(!_12d){
+var _131=document.getElementById(sids[x]);
+if(!_131){
 continue;
 }
-var frag=_12b.parseElement(_12d,null,true);
+var frag=_12f.parseElement(_131,null,true);
 dojo.widget.getParser().createComponents(frag);
 }
 }else{
 if(djConfig.parseWidgets){
-var frag=_12b.parseElement(dojo.body(),null,true);
+var frag=_12f.parseElement(dojo.body(),null,true);
 dojo.widget.getParser().createComponents(frag);
 }
 }
@@ -104059,87 +65895,45 @@
 }
 return id;
 };
-dojo.setContext=function(_133,_134){
-dj_currentContext=_133;
-dj_currentDocument=_134;
+dojo.setContext=function(_137,_138){
+dj_currentContext=_137;
+dj_currentDocument=_138;
 };
-dojo._fireCallback=function(_135,_136,_137){
-if((_136)&&((typeof _135=="string")||(_135 instanceof String))){
-_135=_136[_135];
+dojo._fireCallback=function(_139,_13a,_13b){
+if((_13a)&&((typeof _139=="string")||(_139 instanceof String))){
+_139=_13a[_139];
 }
-return (_136?_135.apply(_136,_137||[]):_135());
+return (_13a?_139.apply(_13a,_13b||[]):_139());
 };
-dojo.withGlobal=function(_138,_139,_13a,_13b){
+dojo.withGlobal=function(_13c,_13d,_13e,_13f){
 var rval;
-var _13d=dj_currentContext;
-var _13e=dj_currentDocument;
+var _141=dj_currentContext;
+var _142=dj_currentDocument;
 try{
-dojo.setContext(_138,_138.document);
-rval=dojo._fireCallback(_139,_13a,_13b);
+dojo.setContext(_13c,_13c.document);
+rval=dojo._fireCallback(_13d,_13e,_13f);
 }
 finally{
-dojo.setContext(_13d,_13e);
+dojo.setContext(_141,_142);
 }
 return rval;
 };
-dojo.withDoc=function(_13f,_140,_141,_142){
+dojo.withDoc=function(_143,_144,_145,_146){
 var rval;
-var _144=dj_currentDocument;
+var _148=dj_currentDocument;
 try{
-dj_currentDocument=_13f;
-rval=dojo._fireCallback(_140,_141,_142);
+dj_currentDocument=_143;
+rval=dojo._fireCallback(_144,_145,_146);
 }
 finally{
-dj_currentDocument=_144;
+dj_currentDocument=_148;
 }
 return rval;
 };
 }
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _145=false;
-var _146=false;
-var _147=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_145=true;
-}else{
-if(typeof this["load"]=="function"){
-_146=true;
-}else{
-if(window.widget){
-_147=true;
-}
-}
-}
-var tmps=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-tmps.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_145)&&(!_147)){
-tmps.push("browser_debug.js");
-}
-var _149=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_149=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<tmps.length;x++){
-var _14b=_149+"src/"+tmps[x];
-if(_145||_146){
-load(_14b);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_14b+"'></scr"+"ipt>");
-}
-catch(e){
-var _14c=document.createElement("script");
-_14c.src=_14b;
-document.getElementsByTagName("head")[0].appendChild(_14c);
-}
-}
-}
-})();
+dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&!djConfig["useXDomain"],"dojo.browser_debug");
+dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&djConfig["useXDomain"],"dojo.browser_debug_xd");
 dojo.provide("dojo.string.common");
 dojo.string.trim=function(str,wh){
 if(!str.replace){
@@ -104157,12 +65951,12 @@
 dojo.string.trimEnd=function(str){
 return dojo.string.trim(str,-1);
 };
-dojo.string.repeat=function(str,_153,_154){
+dojo.string.repeat=function(str,_14f,_150){
 var out="";
-for(var i=0;i<_153;i++){
+for(var i=0;i<_14f;i++){
 out+=str;
-if(_154&&i<_153-1){
-out+=_154;
+if(_150&&i<_14f-1){
+out+=_150;
 }
 }
 return out;
@@ -104192,72 +65986,72 @@
 };
 dojo.provide("dojo.string");
 dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_162,_163){
-if(!dojo.lang.isFunction(_163)){
-dojo.raise("dojo.inherits: superclass argument ["+_163+"] must be a function (subclass: ["+_162+"']");
+dojo.lang.inherits=function(_15e,_15f){
+if(!dojo.lang.isFunction(_15f)){
+dojo.raise("dojo.inherits: superclass argument ["+_15f+"] must be a function (subclass: ["+_15e+"']");
 }
-_162.prototype=new _163();
-_162.prototype.constructor=_162;
-_162.superclass=_163.prototype;
-_162["super"]=_163.prototype;
+_15e.prototype=new _15f();
+_15e.prototype.constructor=_15e;
+_15e.superclass=_15f.prototype;
+_15e["super"]=_15f.prototype;
 };
-dojo.lang._mixin=function(obj,_165){
+dojo.lang._mixin=function(obj,_161){
 var tobj={};
-for(var x in _165){
-if((typeof tobj[x]=="undefined")||(tobj[x]!=_165[x])){
-obj[x]=_165[x];
+for(var x in _161){
+if((typeof tobj[x]=="undefined")||(tobj[x]!=_161[x])){
+obj[x]=_161[x];
 }
 }
-if(dojo.render.html.ie&&(typeof (_165["toString"])=="function")&&(_165["toString"]!=obj["toString"])&&(_165["toString"]!=tobj["toString"])){
-obj.toString=_165.toString;
+if(dojo.render.html.ie&&(typeof (_161["toString"])=="function")&&(_161["toString"]!=obj["toString"])&&(_161["toString"]!=tobj["toString"])){
+obj.toString=_161.toString;
 }
 return obj;
 };
-dojo.lang.mixin=function(obj,_169){
+dojo.lang.mixin=function(obj,_165){
 for(var i=1,l=arguments.length;i<l;i++){
 dojo.lang._mixin(obj,arguments[i]);
 }
 return obj;
 };
-dojo.lang.extend=function(_16c,_16d){
+dojo.lang.extend=function(_168,_169){
 for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_16c.prototype,arguments[i]);
+dojo.lang._mixin(_168.prototype,arguments[i]);
 }
-return _16c;
+return _168;
 };
 dojo.inherits=dojo.lang.inherits;
 dojo.mixin=dojo.lang.mixin;
 dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_170,_171,_172,_173){
-if(!dojo.lang.isArrayLike(_170)&&dojo.lang.isArrayLike(_171)){
+dojo.lang.find=function(_16c,_16d,_16e,_16f){
+if(!dojo.lang.isArrayLike(_16c)&&dojo.lang.isArrayLike(_16d)){
 dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_170;
-_170=_171;
-_171=temp;
+var temp=_16c;
+_16c=_16d;
+_16d=temp;
 }
-var _175=dojo.lang.isString(_170);
-if(_175){
-_170=_170.split("");
+var _171=dojo.lang.isString(_16c);
+if(_171){
+_16c=_16c.split("");
 }
-if(_173){
+if(_16f){
 var step=-1;
-var i=_170.length-1;
+var i=_16c.length-1;
 var end=-1;
 }else{
 var step=1;
 var i=0;
-var end=_170.length;
+var end=_16c.length;
 }
-if(_172){
+if(_16e){
 while(i!=end){
-if(_170[i]===_171){
+if(_16c[i]===_16d){
 return i;
 }
 i+=step;
 }
 }else{
 while(i!=end){
-if(_170[i]==_171){
+if(_16c[i]==_16d){
 return i;
 }
 i+=step;
@@ -104266,12 +66060,12 @@
 return -1;
 };
 dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_179,_17a,_17b){
-return dojo.lang.find(_179,_17a,_17b,true);
+dojo.lang.findLast=function(_175,_176,_177){
+return dojo.lang.find(_175,_176,_177,true);
 };
 dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_17c,_17d){
-return dojo.lang.find(_17c,_17d)>-1;
+dojo.lang.inArray=function(_178,_179){
+return dojo.lang.find(_178,_179)>-1;
 };
 dojo.lang.isObject=function(it){
 if(typeof it=="undefined"){
@@ -104335,27 +66129,27 @@
 return ((typeof (it)=="undefined")&&(it==undefined));
 };
 dojo.provide("dojo.lang.extras");
-dojo.lang.setTimeout=function(func,_189){
-var _18a=window,_18b=2;
+dojo.lang.setTimeout=function(func,_185){
+var _186=window,_187=2;
 if(!dojo.lang.isFunction(func)){
-_18a=func;
-func=_189;
-_189=arguments[2];
-_18b++;
+_186=func;
+func=_185;
+_185=arguments[2];
+_187++;
 }
 if(dojo.lang.isString(func)){
-func=_18a[func];
+func=_186[func];
 }
 var args=[];
-for(var i=_18b;i<arguments.length;i++){
+for(var i=_187;i<arguments.length;i++){
 args.push(arguments[i]);
 }
 return dojo.global().setTimeout(function(){
-func.apply(_18a,args);
-},_189);
+func.apply(_186,args);
+},_185);
 };
-dojo.lang.clearTimeout=function(_18e){
-dojo.global().clearTimeout(_18e);
+dojo.lang.clearTimeout=function(_18a){
+dojo.global().clearTimeout(_18a);
 };
 dojo.lang.getNameInObj=function(ns,item){
 if(!ns){
@@ -104400,78 +66194,78 @@
 }
 return undefined;
 };
-dojo.lang.getObjPathValue=function(_197,_198,_199){
-with(dojo.parseObjPath(_197,_198,_199)){
-return dojo.evalProp(prop,obj,_199);
+dojo.lang.getObjPathValue=function(_193,_194,_195){
+with(dojo.parseObjPath(_193,_194,_195)){
+return dojo.evalProp(prop,obj,_195);
 }
 };
-dojo.lang.setObjPathValue=function(_19a,_19b,_19c,_19d){
+dojo.lang.setObjPathValue=function(_196,_197,_198,_199){
 dojo.deprecated("dojo.lang.setObjPathValue","use dojo.parseObjPath and the '=' operator","0.6");
 if(arguments.length<4){
-_19d=true;
+_199=true;
 }
-with(dojo.parseObjPath(_19a,_19c,_19d)){
-if(obj&&(_19d||(prop in obj))){
-obj[prop]=_19b;
+with(dojo.parseObjPath(_196,_198,_199)){
+if(obj&&(_199||(prop in obj))){
+obj[prop]=_197;
 }
 }
 };
 dojo.provide("dojo.io.common");
 dojo.io.transports=[];
 dojo.io.hdlrFuncNames=["load","error","timeout"];
-dojo.io.Request=function(url,_19f,_1a0,_1a1){
+dojo.io.Request=function(url,_19b,_19c,_19d){
 if((arguments.length==1)&&(arguments[0].constructor==Object)){
 this.fromKwArgs(arguments[0]);
 }else{
 this.url=url;
-if(_19f){
-this.mimetype=_19f;
+if(_19b){
+this.mimetype=_19b;
 }
-if(_1a0){
-this.transport=_1a0;
+if(_19c){
+this.transport=_19c;
 }
 if(arguments.length>=4){
-this.changeUrl=_1a1;
+this.changeUrl=_19d;
 }
 }
 };
-dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_1a4,_1a5){
-},error:function(type,_1a7,_1a8,_1a9){
-},timeout:function(type,_1ab,_1ac,_1ad){
-},handle:function(type,data,_1b0,_1b1){
+dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(type,data,_1a0,_1a1){
+},error:function(type,_1a3,_1a4,_1a5){
+},timeout:function(type,_1a7,_1a8,_1a9){
+},handle:function(type,data,_1ac,_1ad){
 },timeoutSeconds:0,abort:function(){
-},fromKwArgs:function(_1b2){
-if(_1b2["url"]){
-_1b2.url=_1b2.url.toString();
+},fromKwArgs:function(_1ae){
+if(_1ae["url"]){
+_1ae.url=_1ae.url.toString();
 }
-if(_1b2["formNode"]){
-_1b2.formNode=dojo.byId(_1b2.formNode);
+if(_1ae["formNode"]){
+_1ae.formNode=dojo.byId(_1ae.formNode);
 }
-if(!_1b2["method"]&&_1b2["formNode"]&&_1b2["formNode"].method){
-_1b2.method=_1b2["formNode"].method;
+if(!_1ae["method"]&&_1ae["formNode"]&&_1ae["formNode"].method){
+_1ae.method=_1ae["formNode"].method;
 }
-if(!_1b2["handle"]&&_1b2["handler"]){
-_1b2.handle=_1b2.handler;
+if(!_1ae["handle"]&&_1ae["handler"]){
+_1ae.handle=_1ae.handler;
 }
-if(!_1b2["load"]&&_1b2["loaded"]){
-_1b2.load=_1b2.loaded;
+if(!_1ae["load"]&&_1ae["loaded"]){
+_1ae.load=_1ae.loaded;
 }
-if(!_1b2["changeUrl"]&&_1b2["changeURL"]){
-_1b2.changeUrl=_1b2.changeURL;
+if(!_1ae["changeUrl"]&&_1ae["changeURL"]){
+_1ae.changeUrl=_1ae.changeURL;
 }
-_1b2.encoding=dojo.lang.firstValued(_1b2["encoding"],djConfig["bindEncoding"],"");
-_1b2.sendTransport=dojo.lang.firstValued(_1b2["sendTransport"],djConfig["ioSendTransport"],false);
-var _1b3=dojo.lang.isFunction;
+_1ae.encoding=dojo.lang.firstValued(_1ae["encoding"],djConfig["bindEncoding"],"");
+_1ae.sendTransport=dojo.lang.firstValued(_1ae["sendTransport"],djConfig["ioSendTransport"],false);
+var _1af=dojo.lang.isFunction;
 for(var x=0;x<dojo.io.hdlrFuncNames.length;x++){
 var fn=dojo.io.hdlrFuncNames[x];
-if(_1b2[fn]&&_1b3(_1b2[fn])){
+if(_1ae[fn]&&_1af(_1ae[fn])){
 continue;
 }
-if(_1b2["handle"]&&_1b3(_1b2["handle"])){
-_1b2[fn]=_1b2.handle;
+if(_1ae["handle"]&&_1af(_1ae["handle"])){
+_1ae[fn]=_1ae.handle;
 }
 }
-dojo.lang.mixin(this,_1b2);
+dojo.lang.mixin(this,_1ae);
 }});
 dojo.io.Error=function(msg,type,num){
 this.message=msg;
@@ -104482,79 +66276,79 @@
 this.push(name);
 this[name]=dojo.io[name];
 };
-dojo.io.bind=function(_1ba){
-if(!(_1ba instanceof dojo.io.Request)){
+dojo.io.bind=function(_1b6){
+if(!(_1b6 instanceof dojo.io.Request)){
 try{
-_1ba=new dojo.io.Request(_1ba);
+_1b6=new dojo.io.Request(_1b6);
 }
 catch(e){
 dojo.debug(e);
 }
 }
-var _1bb="";
-if(_1ba["transport"]){
-_1bb=_1ba["transport"];
-if(!this[_1bb]){
-dojo.io.sendBindError(_1ba,"No dojo.io.bind() transport with name '"+_1ba["transport"]+"'.");
-return _1ba;
+var _1b7="";
+if(_1b6["transport"]){
+_1b7=_1b6["transport"];
+if(!this[_1b7]){
+dojo.io.sendBindError(_1b6,"No dojo.io.bind() transport with name '"+_1b6["transport"]+"'.");
+return _1b6;
 }
-if(!this[_1bb].canHandle(_1ba)){
-dojo.io.sendBindError(_1ba,"dojo.io.bind() transport with name '"+_1ba["transport"]+"' cannot handle this type of request.");
-return _1ba;
+if(!this[_1b7].canHandle(_1b6)){
+dojo.io.sendBindError(_1b6,"dojo.io.bind() transport with name '"+_1b6["transport"]+"' cannot handle this type of request.");
+return _1b6;
 }
 }else{
 for(var x=0;x<dojo.io.transports.length;x++){
 var tmp=dojo.io.transports[x];
-if((this[tmp])&&(this[tmp].canHandle(_1ba))){
-_1bb=tmp;
+if((this[tmp])&&(this[tmp].canHandle(_1b6))){
+_1b7=tmp;
 break;
 }
 }
-if(_1bb==""){
-dojo.io.sendBindError(_1ba,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
-return _1ba;
+if(_1b7==""){
+dojo.io.sendBindError(_1b6,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
+return _1b6;
 }
 }
-this[_1bb].bind(_1ba);
-_1ba.bindSuccess=true;
-return _1ba;
+this[_1b7].bind(_1b6);
+_1b6.bindSuccess=true;
+return _1b6;
 };
-dojo.io.sendBindError=function(_1be,_1bf){
-if((typeof _1be.error=="function"||typeof _1be.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
-var _1c0=new dojo.io.Error(_1bf);
+dojo.io.sendBindError=function(_1ba,_1bb){
+if((typeof _1ba.error=="function"||typeof _1ba.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
+var _1bc=new dojo.io.Error(_1bb);
 setTimeout(function(){
-_1be[(typeof _1be.error=="function")?"error":"handle"]("error",_1c0,null,_1be);
+_1ba[(typeof _1ba.error=="function")?"error":"handle"]("error",_1bc,null,_1ba);
 },50);
 }else{
-dojo.raise(_1bf);
+dojo.raise(_1bb);
 }
 };
-dojo.io.queueBind=function(_1c1){
-if(!(_1c1 instanceof dojo.io.Request)){
+dojo.io.queueBind=function(_1bd){
+if(!(_1bd instanceof dojo.io.Request)){
 try{
-_1c1=new dojo.io.Request(_1c1);
+_1bd=new dojo.io.Request(_1bd);
 }
 catch(e){
 dojo.debug(e);
 }
 }
-var _1c2=_1c1.load;
-_1c1.load=function(){
+var _1be=_1bd.load;
+_1bd.load=function(){
 dojo.io._queueBindInFlight=false;
-var ret=_1c2.apply(this,arguments);
+var ret=_1be.apply(this,arguments);
 dojo.io._dispatchNextQueueBind();
 return ret;
 };
-var _1c4=_1c1.error;
-_1c1.error=function(){
+var _1c0=_1bd.error;
+_1bd.error=function(){
 dojo.io._queueBindInFlight=false;
-var ret=_1c4.apply(this,arguments);
+var ret=_1c0.apply(this,arguments);
 dojo.io._dispatchNextQueueBind();
 return ret;
 };
-dojo.io._bindQueue.push(_1c1);
+dojo.io._bindQueue.push(_1bd);
 dojo.io._dispatchNextQueueBind();
-return _1c1;
+return _1bd;
 };
 dojo.io._dispatchNextQueueBind=function(){
 if(!dojo.io._queueBindInFlight){
@@ -104568,48 +66362,48 @@
 };
 dojo.io._bindQueue=[];
 dojo.io._queueBindInFlight=false;
-dojo.io.argsFromMap=function(map,_1c7,last){
-var enc=/utf/i.test(_1c7||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _1ca=[];
-var _1cb=new Object();
+dojo.io.argsFromMap=function(map,_1c3,last){
+var enc=/utf/i.test(_1c3||"")?encodeURIComponent:dojo.string.encodeAscii;
+var _1c6=[];
+var _1c7=new Object();
 for(var name in map){
-var _1cd=function(elt){
+var _1c9=function(elt){
 var val=enc(name)+"="+enc(elt);
-_1ca[(last==name)?"push":"unshift"](val);
+_1c6[(last==name)?"push":"unshift"](val);
 };
-if(!_1cb[name]){
-var _1d0=map[name];
-if(dojo.lang.isArray(_1d0)){
-dojo.lang.forEach(_1d0,_1cd);
+if(!_1c7[name]){
+var _1cc=map[name];
+if(dojo.lang.isArray(_1cc)){
+dojo.lang.forEach(_1cc,_1c9);
 }else{
-_1cd(_1d0);
+_1c9(_1cc);
 }
 }
 }
-return _1ca.join("&");
+return _1c6.join("&");
 };
-dojo.io.setIFrameSrc=function(_1d1,src,_1d3){
+dojo.io.setIFrameSrc=function(_1cd,src,_1cf){
 try{
 var r=dojo.render.html;
-if(!_1d3){
+if(!_1cf){
 if(r.safari){
-_1d1.location=src;
+_1cd.location=src;
 }else{
-frames[_1d1.name].location=src;
+frames[_1cd.name].location=src;
 }
 }else{
 var idoc;
 if(r.ie){
-idoc=_1d1.contentWindow.document;
+idoc=_1cd.contentWindow.document;
 }else{
 if(r.safari){
-idoc=_1d1.document;
+idoc=_1cd.document;
 }else{
-idoc=_1d1.contentWindow;
+idoc=_1cd.contentWindow;
 }
 }
 if(!idoc){
-_1d1.location=src;
+_1cd.location=src;
 return;
 }else{
 idoc.location.replace(src);
@@ -104632,142 +66426,138 @@
 },isEmpty:function(obj){
 if(dojo.lang.isObject(obj)){
 var tmp={};
-var _1da=0;
+var _1d6=0;
 for(var x in obj){
 if(obj[x]&&(!tmp[x])){
-_1da++;
+_1d6++;
 break;
 }
 }
-return _1da==0;
+return _1d6==0;
 }else{
 if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
 return obj.length==0;
 }
 }
-},map:function(arr,obj,_1de){
-var _1df=dojo.lang.isString(arr);
-if(_1df){
+},map:function(arr,obj,_1da){
+var _1db=dojo.lang.isString(arr);
+if(_1db){
 arr=arr.split("");
 }
-if(dojo.lang.isFunction(obj)&&(!_1de)){
-_1de=obj;
+if(dojo.lang.isFunction(obj)&&(!_1da)){
+_1da=obj;
 obj=dj_global;
 }else{
-if(dojo.lang.isFunction(obj)&&_1de){
-var _1e0=obj;
-obj=_1de;
-_1de=_1e0;
+if(dojo.lang.isFunction(obj)&&_1da){
+var _1dc=obj;
+obj=_1da;
+_1da=_1dc;
 }
 }
 if(Array.map){
-var _1e1=Array.map(arr,_1de,obj);
+var _1dd=Array.map(arr,_1da,obj);
 }else{
-var _1e1=[];
+var _1dd=[];
 for(var i=0;i<arr.length;++i){
-_1e1.push(_1de.call(obj,arr[i]));
+_1dd.push(_1da.call(obj,arr[i]));
 }
 }
-if(_1df){
-return _1e1.join("");
+if(_1db){
+return _1dd.join("");
 }else{
-return _1e1;
+return _1dd;
 }
-},reduce:function(arr,_1e4,obj,_1e6){
-var _1e7=_1e4;
-if(arguments.length==1){
-dojo.debug("dojo.lang.reduce called with too few arguments!");
-return false;
-}else{
+},reduce:function(arr,_1e0,obj,_1e2){
+var _1e3=_1e0;
 if(arguments.length==2){
-_1e6=_1e4;
-_1e7=arr.shift();
+_1e2=_1e0;
+_1e3=arr[0];
+arr=arr.slice(1);
 }else{
-if(arguments.lenght==3){
+if(arguments.length==3){
 if(dojo.lang.isFunction(obj)){
-_1e6=obj;
+_1e2=obj;
 obj=null;
 }
 }else{
 if(dojo.lang.isFunction(obj)){
-var tmp=_1e6;
-_1e6=obj;
+var tmp=_1e2;
+_1e2=obj;
 obj=tmp;
 }
 }
 }
-}
-var ob=obj?obj:dj_global;
+var ob=obj||dj_global;
 dojo.lang.map(arr,function(val){
-_1e7=_1e6.call(ob,_1e7,val);
+_1e3=_1e2.call(ob,_1e3,val);
 });
-return _1e7;
-},forEach:function(_1eb,_1ec,_1ed){
-if(dojo.lang.isString(_1eb)){
-_1eb=_1eb.split("");
+return _1e3;
+},forEach:function(_1e7,_1e8,_1e9){
+if(dojo.lang.isString(_1e7)){
+_1e7=_1e7.split("");
 }
 if(Array.forEach){
-Array.forEach(_1eb,_1ec,_1ed);
+Array.forEach(_1e7,_1e8,_1e9);
 }else{
-if(!_1ed){
-_1ed=dj_global;
+if(!_1e9){
+_1e9=dj_global;
 }
-for(var i=0,l=_1eb.length;i<l;i++){
-_1ec.call(_1ed,_1eb[i],i,_1eb);
+for(var i=0,l=_1e7.length;i<l;i++){
+_1e8.call(_1e9,_1e7[i],i,_1e7);
 }
 }
-},_everyOrSome:function(_1f0,arr,_1f2,_1f3){
+},_everyOrSome:function(_1ec,arr,_1ee,_1ef){
 if(dojo.lang.isString(arr)){
 arr=arr.split("");
 }
 if(Array.every){
-return Array[_1f0?"every":"some"](arr,_1f2,_1f3);
+return Array[_1ec?"every":"some"](arr,_1ee,_1ef);
 }else{
-if(!_1f3){
-_1f3=dj_global;
+if(!_1ef){
+_1ef=dj_global;
 }
 for(var i=0,l=arr.length;i<l;i++){
-var _1f6=_1f2.call(_1f3,arr[i],i,arr);
-if(_1f0&&!_1f6){
+var _1f2=_1ee.call(_1ef,arr[i],i,arr);
+if(_1ec&&!_1f2){
 return false;
 }else{
-if((!_1f0)&&(_1f6)){
+if((!_1ec)&&(_1f2)){
 return true;
 }
 }
 }
-return Boolean(_1f0);
+return Boolean(_1ec);
 }
-},every:function(arr,_1f8,_1f9){
-return this._everyOrSome(true,arr,_1f8,_1f9);
-},some:function(arr,_1fb,_1fc){
-return this._everyOrSome(false,arr,_1fb,_1fc);
-},filter:function(arr,_1fe,_1ff){
-var _200=dojo.lang.isString(arr);
-if(_200){
+},every:function(arr,_1f4,_1f5){
+return this._everyOrSome(true,arr,_1f4,_1f5);
+},some:function(arr,_1f7,_1f8){
+return this._everyOrSome(false,arr,_1f7,_1f8);
+},filter:function(arr,_1fa,_1fb){
+var _1fc=dojo.lang.isString(arr);
+if(_1fc){
 arr=arr.split("");
 }
-var _201;
+var _1fd;
 if(Array.filter){
-_201=Array.filter(arr,_1fe,_1ff);
+_1fd=Array.filter(arr,_1fa,_1fb);
 }else{
-if(!_1ff){
+if(!_1fb){
 if(arguments.length>=3){
 dojo.raise("thisObject doesn't exist!");
 }
-_1ff=dj_global;
+_1fb=dj_global;
 }
-_201=[];
+_1fd=[];
 for(var i=0;i<arr.length;i++){
-if(_1fe.call(_1ff,arr[i],i,arr)){
-_201.push(arr[i]);
+if(_1fa.call(_1fb,arr[i],i,arr)){
+_1fd.push(arr[i]);
 }
 }
 }
-if(_200){
-return _201.join("");
+if(_1fc){
+return _1fd.join("");
 }else{
-return _201;
+return _1fd;
 }
 },unnest:function(){
 var out=[];
@@ -104780,29 +66570,29 @@
 }
 }
 return out;
-},toArray:function(_206,_207){
-var _208=[];
-for(var i=_207||0;i<_206.length;i++){
-_208.push(_206[i]);
+},toArray:function(_202,_203){
+var _204=[];
+for(var i=_203||0;i<_202.length;i++){
+_204.push(_202[i]);
 }
-return _208;
+return _204;
 }});
 dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_20a,_20b){
-var fcn=(dojo.lang.isString(_20b)?_20a[_20b]:_20b)||function(){
+dojo.lang.hitch=function(_206,_207){
+var fcn=(dojo.lang.isString(_207)?_206[_207]:_207)||function(){
 };
 return function(){
-return fcn.apply(_20a,arguments);
+return fcn.apply(_206,arguments);
 };
 };
 dojo.lang.anonCtr=0;
 dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_20d,_20e,_20f){
-var nso=(_20e||dojo.lang.anon);
-if((_20f)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
+dojo.lang.nameAnonFunc=function(_209,_20a,_20b){
+var nso=(_20a||dojo.lang.anon);
+if((_20b)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
 for(var x in nso){
 try{
-if(nso[x]===_20d){
+if(nso[x]===_209){
 return x;
 }
 }
@@ -104814,50 +66604,50 @@
 while(typeof nso[ret]!="undefined"){
 ret="__"+dojo.lang.anonCtr++;
 }
-nso[ret]=_20d;
+nso[ret]=_209;
 return ret;
 };
-dojo.lang.forward=function(_213){
+dojo.lang.forward=function(_20f){
 return function(){
-return this[_213].apply(this,arguments);
+return this[_20f].apply(this,arguments);
 };
 };
-dojo.lang.curry=function(_214,func){
-var _216=[];
-_214=_214||dj_global;
+dojo.lang.curry=function(_210,func){
+var _212=[];
+_210=_210||dj_global;
 if(dojo.lang.isString(func)){
-func=_214[func];
+func=_210[func];
 }
 for(var x=2;x<arguments.length;x++){
-_216.push(arguments[x]);
+_212.push(arguments[x]);
 }
-var _218=(func["__preJoinArity"]||func.length)-_216.length;
-function gather(_219,_21a,_21b){
-var _21c=_21b;
-var _21d=_21a.slice(0);
-for(var x=0;x<_219.length;x++){
-_21d.push(_219[x]);
+var _214=(func["__preJoinArity"]||func.length)-_212.length;
+function gather(_215,_216,_217){
+var _218=_217;
+var _219=_216.slice(0);
+for(var x=0;x<_215.length;x++){
+_219.push(_215[x]);
 }
-_21b=_21b-_219.length;
-if(_21b<=0){
-var res=func.apply(_214,_21d);
-_21b=_21c;
+_217=_217-_215.length;
+if(_217<=0){
+var res=func.apply(_210,_219);
+_217=_218;
 return res;
 }else{
 return function(){
-return gather(arguments,_21d,_21b);
+return gather(arguments,_219,_217);
 };
 }
 }
-return gather([],_216,_218);
+return gather([],_212,_214);
 };
-dojo.lang.curryArguments=function(_220,func,args,_223){
-var _224=[];
-var x=_223||0;
-for(x=_223;x<args.length;x++){
-_224.push(args[x]);
+dojo.lang.curryArguments=function(_21c,func,args,_21f){
+var _220=[];
+var x=_21f||0;
+for(x=_21f;x<args.length;x++){
+_220.push(args[x]);
 }
-return dojo.lang.curry.apply(dojo.lang,[_220,func].concat(_224));
+return dojo.lang.curry.apply(dojo.lang,[_21c,func].concat(_220));
 };
 dojo.lang.tryThese=function(){
 for(var x=0;x<arguments.length;x++){
@@ -104874,36 +66664,36 @@
 }
 }
 };
-dojo.lang.delayThese=function(farr,cb,_22a,_22b){
+dojo.lang.delayThese=function(farr,cb,_226,_227){
 if(!farr.length){
-if(typeof _22b=="function"){
-_22b();
+if(typeof _227=="function"){
+_227();
 }
 return;
 }
-if((typeof _22a=="undefined")&&(typeof cb=="number")){
-_22a=cb;
+if((typeof _226=="undefined")&&(typeof cb=="number")){
+_226=cb;
 cb=function(){
 };
 }else{
 if(!cb){
 cb=function(){
 };
-if(!_22a){
-_22a=0;
+if(!_226){
+_226=0;
 }
 }
 }
 setTimeout(function(){
 (farr.shift())();
 cb();
-dojo.lang.delayThese(farr,cb,_22a,_22b);
-},_22a);
+dojo.lang.delayThese(farr,cb,_226,_227);
+},_226);
 };
 dojo.provide("dojo.string.extras");
-dojo.string.substituteParams=function(_22c,hash){
+dojo.string.substituteParams=function(_228,hash){
 var map=(typeof hash=="object")?hash:dojo.lang.toArray(arguments,1);
-return _22c.replace(/\%\{(\w+)\}/g,function(_22f,key){
+return _228.replace(/\%\{(\w+)\}/g,function(_22b,key){
 if(typeof (map[key])!="undefined"&&map[key]!=null){
 return map[key];
 }
@@ -104917,11 +66707,11 @@
 if(arguments.length==0){
 str=this;
 }
-var _232=str.split(" ");
-for(var i=0;i<_232.length;i++){
-_232[i]=_232[i].charAt(0).toUpperCase()+_232[i].substring(1);
+var _22e=str.split(" ");
+for(var i=0;i<_22e.length;i++){
+_22e[i]=_22e[i].charAt(0).toUpperCase()+_22e[i].substring(1);
 }
-return _232.join(" ");
+return _22e.join(" ");
 };
 dojo.string.isBlank=function(str){
 if(!dojo.lang.isString(str)){
@@ -104934,15 +66724,15 @@
 return str;
 }
 var ret="";
-var _237=escape(str);
-var _238,re=/%u([0-9A-F]{4})/i;
-while((_238=_237.match(re))){
-var num=Number("0x"+_238[1]);
-var _23b=escape("&#"+num+";");
-ret+=_237.substring(0,_238.index)+_23b;
-_237=_237.substring(_238.index+_238[0].length);
+var _233=escape(str);
+var _234,re=/%u([0-9A-F]{4})/i;
+while((_234=_233.match(re))){
+var num=Number("0x"+_234[1]);
+var _237=escape("&#"+num+";");
+ret+=_233.substring(0,_234.index)+_237;
+_233=_233.substring(_234.index+_234[0].length);
 }
-ret+=_237.replace(/\+/g,"%2B");
+ret+=_233.replace(/\+/g,"%2B");
 return ret;
 };
 dojo.string.escape=function(type,str){
@@ -104967,9 +66757,9 @@
 return str;
 }
 };
-dojo.string.escapeXml=function(str,_240){
+dojo.string.escapeXml=function(str,_23c){
 str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_240){
+if(!_23c){
 str=str.replace(/'/gm,"&#39;");
 }
 return str;
@@ -104992,8 +66782,8 @@
 }
 return str.substring(0,len).replace(/\.+$/,"")+"...";
 };
-dojo.string.endsWith=function(str,end,_249){
-if(_249){
+dojo.string.endsWith=function(str,end,_245){
+if(_245){
 str=str.toLowerCase();
 end=end.toLowerCase();
 }
@@ -105010,12 +66800,12 @@
 }
 return false;
 };
-dojo.string.startsWith=function(str,_24d,_24e){
-if(_24e){
+dojo.string.startsWith=function(str,_249,_24a){
+if(_24a){
 str=str.toLowerCase();
-_24d=_24d.toLowerCase();
+_249=_249.toLowerCase();
 }
-return str.indexOf(_24d)==0;
+return str.indexOf(_249)==0;
 };
 dojo.string.startsWithAny=function(str){
 for(var i=1;i<arguments.length;i++){
@@ -105033,12 +66823,12 @@
 }
 return false;
 };
-dojo.string.normalizeNewlines=function(text,_254){
-if(_254=="\n"){
+dojo.string.normalizeNewlines=function(text,_250){
+if(_250=="\n"){
 text=text.replace(/\r\n/g,"\n");
 text=text.replace(/\r/g,"\n");
 }else{
-if(_254=="\r"){
+if(_250=="\r"){
 text=text.replace(/\r\n/g,"\r");
 text=text.replace(/\n/g,"\r");
 }else{
@@ -105047,20 +66837,20 @@
 }
 return text;
 };
-dojo.string.splitEscaped=function(str,_256){
-var _257=[];
-for(var i=0,_259=0;i<str.length;i++){
+dojo.string.splitEscaped=function(str,_252){
+var _253=[];
+for(var i=0,_255=0;i<str.length;i++){
 if(str.charAt(i)=="\\"){
 i++;
 continue;
 }
-if(str.charAt(i)==_256){
-_257.push(str.substring(_259,i));
-_259=i+1;
+if(str.charAt(i)==_252){
+_253.push(str.substring(_255,i));
+_255=i+1;
 }
 }
-_257.push(str.substr(_259));
-return _257;
+_253.push(str.substr(_255));
+return _253;
 };
 dojo.provide("dojo.dom");
 dojo.dom.ELEMENT_NODE=1;
@@ -105089,102 +66879,102 @@
 }
 };
 dojo.dom.getUniqueId=function(){
-var _25b=dojo.doc();
+var _257=dojo.doc();
 do{
 var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_25b.getElementById(id));
+}while(_257.getElementById(id));
 return id;
 };
 dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_25d,_25e){
-var node=_25d.firstChild;
+dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_259,_25a){
+var node=_259.firstChild;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.nextSibling;
 }
-if(_25e&&node&&node.tagName&&node.tagName.toLowerCase()!=_25e.toLowerCase()){
-node=dojo.dom.nextElement(node,_25e);
+if(_25a&&node&&node.tagName&&node.tagName.toLowerCase()!=_25a.toLowerCase()){
+node=dojo.dom.nextElement(node,_25a);
 }
 return node;
 };
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_260,_261){
-var node=_260.lastChild;
+dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_25c,_25d){
+var node=_25c.lastChild;
 while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
 node=node.previousSibling;
 }
-if(_261&&node&&node.tagName&&node.tagName.toLowerCase()!=_261.toLowerCase()){
-node=dojo.dom.prevElement(node,_261);
+if(_25d&&node&&node.tagName&&node.tagName.toLowerCase()!=_25d.toLowerCase()){
+node=dojo.dom.prevElement(node,_25d);
 }
 return node;
 };
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_264){
+dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_260){
 if(!node){
 return null;
 }
 do{
 node=node.nextSibling;
 }while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_264&&_264.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.nextElement(node,_264);
+if(node&&_260&&_260.toLowerCase()!=node.tagName.toLowerCase()){
+return dojo.dom.nextElement(node,_260);
 }
 return node;
 };
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_266){
+dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_262){
 if(!node){
 return null;
 }
-if(_266){
-_266=_266.toLowerCase();
+if(_262){
+_262=_262.toLowerCase();
 }
 do{
 node=node.previousSibling;
 }while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_266&&_266.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_266);
+if(node&&_262&&_262.toLowerCase()!=node.tagName.toLowerCase()){
+return dojo.dom.prevElement(node,_262);
 }
 return node;
 };
-dojo.dom.moveChildren=function(_267,_268,trim){
-var _26a=0;
+dojo.dom.moveChildren=function(_263,_264,trim){
+var _266=0;
 if(trim){
-while(_267.hasChildNodes()&&_267.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_267.removeChild(_267.firstChild);
+while(_263.hasChildNodes()&&_263.firstChild.nodeType==dojo.dom.TEXT_NODE){
+_263.removeChild(_263.firstChild);
 }
-while(_267.hasChildNodes()&&_267.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_267.removeChild(_267.lastChild);
+while(_263.hasChildNodes()&&_263.lastChild.nodeType==dojo.dom.TEXT_NODE){
+_263.removeChild(_263.lastChild);
 }
 }
-while(_267.hasChildNodes()){
-_268.appendChild(_267.firstChild);
-_26a++;
+while(_263.hasChildNodes()){
+_264.appendChild(_263.firstChild);
+_266++;
 }
-return _26a;
+return _266;
 };
-dojo.dom.copyChildren=function(_26b,_26c,trim){
-var _26e=_26b.cloneNode(true);
-return this.moveChildren(_26e,_26c,trim);
+dojo.dom.copyChildren=function(_267,_268,trim){
+var _26a=_267.cloneNode(true);
+return this.moveChildren(_26a,_268,trim);
 };
-dojo.dom.replaceChildren=function(node,_270){
-var _271=[];
+dojo.dom.replaceChildren=function(node,_26c){
+var _26d=[];
 if(dojo.render.html.ie){
 for(var i=0;i<node.childNodes.length;i++){
-_271.push(node.childNodes[i]);
+_26d.push(node.childNodes[i]);
 }
 }
 dojo.dom.removeChildren(node);
-node.appendChild(_270);
-for(var i=0;i<_271.length;i++){
-dojo.dom.destroyNode(_271[i]);
+node.appendChild(_26c);
+for(var i=0;i<_26d.length;i++){
+dojo.dom.destroyNode(_26d[i]);
 }
 };
 dojo.dom.removeChildren=function(node){
-var _274=node.childNodes.length;
+var _270=node.childNodes.length;
 while(node.hasChildNodes()){
 dojo.dom.removeNode(node.firstChild);
 }
-return _274;
+return _270;
 };
-dojo.dom.replaceNode=function(node,_276){
-return node.parentNode.replaceChild(_276,node);
+dojo.dom.replaceNode=function(node,_272){
+return node.parentNode.replaceChild(_272,node);
 };
 dojo.dom.destroyNode=function(node){
 if(node.parentNode){
@@ -105204,38 +66994,38 @@
 return node.parentNode.removeChild(node);
 }
 };
-dojo.dom.getAncestors=function(node,_27a,_27b){
-var _27c=[];
-var _27d=(_27a&&(_27a instanceof Function||typeof _27a=="function"));
+dojo.dom.getAncestors=function(node,_276,_277){
+var _278=[];
+var _279=(_276&&(_276 instanceof Function||typeof _276=="function"));
 while(node){
-if(!_27d||_27a(node)){
-_27c.push(node);
+if(!_279||_276(node)){
+_278.push(node);
 }
-if(_27b&&_27c.length>0){
-return _27c[0];
+if(_277&&_278.length>0){
+return _278[0];
 }
 node=node.parentNode;
 }
-if(_27b){
+if(_277){
 return null;
 }
-return _27c;
+return _278;
 };
-dojo.dom.getAncestorsByTag=function(node,tag,_280){
+dojo.dom.getAncestorsByTag=function(node,tag,_27c){
 tag=tag.toLowerCase();
 return dojo.dom.getAncestors(node,function(el){
 return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_280);
+},_27c);
 };
 dojo.dom.getFirstAncestorByTag=function(node,tag){
 return dojo.dom.getAncestorsByTag(node,tag,true);
 };
-dojo.dom.isDescendantOf=function(node,_285,_286){
-if(_286&&node){
+dojo.dom.isDescendantOf=function(node,_281,_282){
+if(_282&&node){
 node=node.parentNode;
 }
 while(node){
-if(node==_285){
+if(node==_281){
 return true;
 }
 node=node.parentNode;
@@ -105257,12 +67047,12 @@
 };
 dojo.dom.createDocument=function(){
 var doc=null;
-var _289=dojo.doc();
+var _285=dojo.doc();
 if(!dj_undef("ActiveXObject")){
-var _28a=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_28a.length;i++){
+var _286=["MSXML2","Microsoft","MSXML","MSXML3"];
+for(var i=0;i<_286.length;i++){
 try{
-doc=new ActiveXObject(_28a[i]+".XMLDOM");
+doc=new ActiveXObject(_286[i]+".XMLDOM");
 }
 catch(e){
 }
@@ -105271,40 +67061,40 @@
 }
 }
 }else{
-if((_289.implementation)&&(_289.implementation.createDocument)){
-doc=_289.implementation.createDocument("","",null);
+if((_285.implementation)&&(_285.implementation.createDocument)){
+doc=_285.implementation.createDocument("","",null);
 }
 }
 return doc;
 };
-dojo.dom.createDocumentFromText=function(str,_28d){
-if(!_28d){
-_28d="text/xml";
+dojo.dom.createDocumentFromText=function(str,_289){
+if(!_289){
+_289="text/xml";
 }
 if(!dj_undef("DOMParser")){
-var _28e=new DOMParser();
-return _28e.parseFromString(str,_28d);
+var _28a=new DOMParser();
+return _28a.parseFromString(str,_289);
 }else{
 if(!dj_undef("ActiveXObject")){
-var _28f=dojo.dom.createDocument();
-if(_28f){
-_28f.async=false;
-_28f.loadXML(str);
-return _28f;
+var _28b=dojo.dom.createDocument();
+if(_28b){
+_28b.async=false;
+_28b.loadXML(str);
+return _28b;
 }else{
 dojo.debug("toXml didn't work?");
 }
 }else{
-var _290=dojo.doc();
-if(_290.createElement){
-var tmp=_290.createElement("xml");
+var _28c=dojo.doc();
+if(_28c.createElement){
+var tmp=_28c.createElement("xml");
 tmp.innerHTML=str;
-if(_290.implementation&&_290.implementation.createDocument){
-var _292=_290.implementation.createDocument("foo","",null);
+if(_28c.implementation&&_28c.implementation.createDocument){
+var _28e=_28c.implementation.createDocument("foo","",null);
 for(var i=0;i<tmp.childNodes.length;i++){
-_292.importNode(tmp.childNodes.item(i),true);
+_28e.importNode(tmp.childNodes.item(i),true);
 }
-return _292;
+return _28e;
 }
 return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
 }
@@ -105312,39 +67102,39 @@
 }
 return null;
 };
-dojo.dom.prependChild=function(node,_295){
-if(_295.firstChild){
-_295.insertBefore(node,_295.firstChild);
+dojo.dom.prependChild=function(node,_291){
+if(_291.firstChild){
+_291.insertBefore(node,_291.firstChild);
 }else{
-_295.appendChild(node);
+_291.appendChild(node);
 }
 return true;
 };
-dojo.dom.insertBefore=function(node,ref,_298){
-if((_298!=true)&&(node===ref||node.nextSibling===ref)){
+dojo.dom.insertBefore=function(node,ref,_294){
+if((_294!=true)&&(node===ref||node.nextSibling===ref)){
 return false;
 }
-var _299=ref.parentNode;
-_299.insertBefore(node,ref);
+var _295=ref.parentNode;
+_295.insertBefore(node,ref);
 return true;
 };
-dojo.dom.insertAfter=function(node,ref,_29c){
+dojo.dom.insertAfter=function(node,ref,_298){
 var pn=ref.parentNode;
 if(ref==pn.lastChild){
-if((_29c!=true)&&(node===ref)){
+if((_298!=true)&&(node===ref)){
 return false;
 }
 pn.appendChild(node);
 }else{
-return this.insertBefore(node,ref.nextSibling,_29c);
+return this.insertBefore(node,ref.nextSibling,_298);
 }
 return true;
 };
-dojo.dom.insertAtPosition=function(node,ref,_2a0){
-if((!node)||(!ref)||(!_2a0)){
+dojo.dom.insertAtPosition=function(node,ref,_29c){
+if((!node)||(!ref)||(!_29c)){
 return false;
 }
-switch(_2a0.toLowerCase()){
+switch(_29c.toLowerCase()){
 case "before":
 return dojo.dom.insertBefore(node,ref);
 case "after":
@@ -105362,46 +67152,46 @@
 return true;
 }
 };
-dojo.dom.insertAtIndex=function(node,_2a2,_2a3){
-var _2a4=_2a2.childNodes;
-if(!_2a4.length||_2a4.length==_2a3){
-_2a2.appendChild(node);
+dojo.dom.insertAtIndex=function(node,_29e,_29f){
+var _2a0=_29e.childNodes;
+if(!_2a0.length||_2a0.length==_29f){
+_29e.appendChild(node);
 return true;
 }
-if(_2a3==0){
-return dojo.dom.prependChild(node,_2a2);
+if(_29f==0){
+return dojo.dom.prependChild(node,_29e);
 }
-return dojo.dom.insertAfter(node,_2a4[_2a3-1]);
+return dojo.dom.insertAfter(node,_2a0[_29f-1]);
 };
 dojo.dom.textContent=function(node,text){
 if(arguments.length>1){
-var _2a7=dojo.doc();
-dojo.dom.replaceChildren(node,_2a7.createTextNode(text));
+var _2a3=dojo.doc();
+dojo.dom.replaceChildren(node,_2a3.createTextNode(text));
 return text;
 }else{
 if(node.textContent!=undefined){
 return node.textContent;
 }
-var _2a8="";
+var _2a4="";
 if(node==null){
-return _2a8;
+return _2a4;
 }
 for(var i=0;i<node.childNodes.length;i++){
 switch(node.childNodes[i].nodeType){
 case 1:
 case 5:
-_2a8+=dojo.dom.textContent(node.childNodes[i]);
+_2a4+=dojo.dom.textContent(node.childNodes[i]);
 break;
 case 3:
 case 2:
 case 4:
-_2a8+=node.childNodes[i].nodeValue;
+_2a4+=node.childNodes[i].nodeValue;
 break;
 default:
 break;
 }
 }
-return _2a8;
+return _2a4;
 }
 };
 dojo.dom.hasParent=function(node){
@@ -105417,23 +67207,23 @@
 }
 return "";
 };
-dojo.dom.setAttributeNS=function(elem,_2ae,_2af,_2b0){
+dojo.dom.setAttributeNS=function(elem,_2aa,_2ab,_2ac){
 if(elem==null||((elem==undefined)&&(typeof elem=="undefined"))){
 dojo.raise("No element given to dojo.dom.setAttributeNS");
 }
 if(!((elem.setAttributeNS==undefined)&&(typeof elem.setAttributeNS=="undefined"))){
-elem.setAttributeNS(_2ae,_2af,_2b0);
+elem.setAttributeNS(_2aa,_2ab,_2ac);
 }else{
-var _2b1=elem.ownerDocument;
-var _2b2=_2b1.createNode(2,_2af,_2ae);
-_2b2.nodeValue=_2b0;
-elem.setAttributeNode(_2b2);
+var _2ad=elem.ownerDocument;
+var _2ae=_2ad.createNode(2,_2ab,_2aa);
+_2ae.nodeValue=_2ac;
+elem.setAttributeNode(_2ae);
 }
 };
 dojo.provide("dojo.undo.browser");
 try{
 if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
+document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
 }
 }
 catch(e){
@@ -105448,6 +67238,9 @@
 var hash=null;
 var url=null;
 if(!this.historyIframe){
+if(djConfig["useXDomain"]&&!djConfig["dojoIframeHistoryUrl"]){
+dojo.debug("dojo.undo.browser: When using cross-domain Dojo builds,"+" please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"+" to the path on your domain to iframe_history.html");
+}
 this.historyIframe=window.frames["djhistory"];
 }
 if(!this.bookmarkAnchor){
@@ -105471,12 +67264,12 @@
 this.bookmarkAnchor.href=hash;
 if(dojo.render.html.ie){
 url=this._loadIframeHistory();
-var _2b7=args["back"]||args["backButton"]||args["handle"];
-var tcb=function(_2b9){
+var _2b3=args["back"]||args["backButton"]||args["handle"];
+var tcb=function(_2b5){
 if(window.location.hash!=""){
 setTimeout("window.location.href = '"+hash+"';",1);
 }
-_2b7.apply(this,[_2b9]);
+_2b3.apply(this,[_2b5]);
 };
 if(args["back"]){
 args.back=tcb;
@@ -105489,13 +67282,13 @@
 }
 }
 }
-var _2ba=args["forward"]||args["forwardButton"]||args["handle"];
-var tfw=function(_2bc){
+var _2b6=args["forward"]||args["forwardButton"]||args["handle"];
+var tfw=function(_2b8){
 if(window.location.hash!=""){
 window.location.href=hash;
 }
-if(_2ba){
-_2ba.apply(this,[_2bc]);
+if(_2b6){
+_2b6.apply(this,[_2b8]);
 }
 };
 if(args["forward"]){
@@ -105540,10 +67333,10 @@
 }
 }
 }
-},iframeLoaded:function(evt,_2bf){
+},iframeLoaded:function(evt,_2bb){
 if(!dojo.render.html.opera){
-var _2c0=this._getUrlQuery(_2bf.href);
-if(_2c0==null){
+var _2bc=this._getUrlQuery(_2bb.href);
+if(_2bc==null){
 if(this.historyStack.length==1){
 this.handleBackButton();
 }
@@ -105553,17 +67346,17 @@
 this.moveForward=false;
 return;
 }
-if(this.historyStack.length>=2&&_2c0==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
+if(this.historyStack.length>=2&&_2bc==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
 this.handleBackButton();
 }else{
-if(this.forwardStack.length>0&&_2c0==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
+if(this.forwardStack.length>0&&_2bc==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
 this.handleForwardButton();
 }
 }
 }
 },handleBackButton:function(){
-var _2c1=this.historyStack.pop();
-if(!_2c1){
+var _2bd=this.historyStack.pop();
+if(!_2bd){
 return;
 }
 var last=this.historyStack[this.historyStack.length-1];
@@ -105583,7 +67376,7 @@
 }
 }
 }
-this.forwardStack.push(_2c1);
+this.forwardStack.push(_2bd);
 },handleForwardButton:function(){
 var last=this.forwardStack.pop();
 if(!last){
@@ -105604,14 +67397,14 @@
 },_createState:function(url,args,hash){
 return {"url":url,"kwArgs":args,"urlHash":hash};
 },_getUrlQuery:function(url){
-var _2c8=url.split("?");
-if(_2c8.length<2){
+var _2c4=url.split("?");
+if(_2c4.length<2){
 return null;
 }else{
-return _2c8[1];
+return _2c4[1];
 }
 },_loadIframeHistory:function(){
-var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
+var url=(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"?"+(new Date()).getTime();
 this.moveForward=true;
 dojo.io.setIFrameSrc(this.historyIframe,url,false);
 return url;
@@ -105619,26 +67412,26 @@
 dojo.provide("dojo.io.BrowserIO");
 if(!dj_undef("window")){
 dojo.io.checkChildrenForFile=function(node){
-var _2cb=false;
-var _2cc=node.getElementsByTagName("input");
-dojo.lang.forEach(_2cc,function(_2cd){
-if(_2cb){
+var _2c7=false;
+var _2c8=node.getElementsByTagName("input");
+dojo.lang.forEach(_2c8,function(_2c9){
+if(_2c7){
 return;
 }
-if(_2cd.getAttribute("type")=="file"){
-_2cb=true;
+if(_2c9.getAttribute("type")=="file"){
+_2c7=true;
 }
 });
-return _2cb;
+return _2c7;
 };
-dojo.io.formHasFile=function(_2ce){
-return dojo.io.checkChildrenForFile(_2ce);
+dojo.io.formHasFile=function(_2ca){
+return dojo.io.checkChildrenForFile(_2ca);
 };
-dojo.io.updateNode=function(node,_2d0){
+dojo.io.updateNode=function(node,_2cc){
 node=dojo.byId(node);
-var args=_2d0;
-if(dojo.lang.isString(_2d0)){
-args={url:_2d0};
+var args=_2cc;
+if(dojo.lang.isString(_2cc)){
+args={url:_2cc};
 }
 args.mimetype="text/html";
 args.load=function(t,d,e){
@@ -105653,18 +67446,18 @@
 var type=(node.type||"").toLowerCase();
 return !node.disabled&&node.name&&!dojo.lang.inArray(["file","submit","image","reset","button"],type);
 };
-dojo.io.encodeForm=function(_2d7,_2d8,_2d9){
-if((!_2d7)||(!_2d7.tagName)||(!_2d7.tagName.toLowerCase()=="form")){
+dojo.io.encodeForm=function(_2d3,_2d4,_2d5){
+if((!_2d3)||(!_2d3.tagName)||(!_2d3.tagName.toLowerCase()=="form")){
 dojo.raise("Attempted to encode a non-form element.");
 }
-if(!_2d9){
-_2d9=dojo.io.formFilter;
+if(!_2d5){
+_2d5=dojo.io.formFilter;
 }
-var enc=/utf/i.test(_2d8||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _2db=[];
-for(var i=0;i<_2d7.elements.length;i++){
-var elm=_2d7.elements[i];
-if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_2d9(elm)){
+var enc=/utf/i.test(_2d4||"")?encodeURIComponent:dojo.string.encodeAscii;
+var _2d7=[];
+for(var i=0;i<_2d3.elements.length;i++){
+var elm=_2d3.elements[i];
+if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_2d5(elm)){
 continue;
 }
 var name=enc(elm.name);
@@ -105672,30 +67465,30 @@
 if(type=="select-multiple"){
 for(var j=0;j<elm.options.length;j++){
 if(elm.options[j].selected){
-_2db.push(name+"="+enc(elm.options[j].value));
+_2d7.push(name+"="+enc(elm.options[j].value));
 }
 }
 }else{
 if(dojo.lang.inArray(["radio","checkbox"],type)){
 if(elm.checked){
-_2db.push(name+"="+enc(elm.value));
+_2d7.push(name+"="+enc(elm.value));
 }
 }else{
-_2db.push(name+"="+enc(elm.value));
+_2d7.push(name+"="+enc(elm.value));
 }
 }
 }
-var _2e1=_2d7.getElementsByTagName("input");
-for(var i=0;i<_2e1.length;i++){
-var _2e2=_2e1[i];
-if(_2e2.type.toLowerCase()=="image"&&_2e2.form==_2d7&&_2d9(_2e2)){
-var name=enc(_2e2.name);
-_2db.push(name+"="+enc(_2e2.value));
-_2db.push(name+".x=0");
-_2db.push(name+".y=0");
+var _2dd=_2d3.getElementsByTagName("input");
+for(var i=0;i<_2dd.length;i++){
+var _2de=_2dd[i];
+if(_2de.type.toLowerCase()=="image"&&_2de.form==_2d3&&_2d5(_2de)){
+var name=enc(_2de.name);
+_2d7.push(name+"="+enc(_2de.value));
+_2d7.push(name+".x=0");
+_2d7.push(name+".y=0");
 }
 }
-return _2db.join("&")+"&";
+return _2d7.join("&")+"&";
 };
 dojo.io.FormBind=function(args){
 this.bindArgs={};
@@ -105729,11 +67522,11 @@
 this.connect(node,"onclick","click");
 }
 }
-var _2e8=form.getElementsByTagName("input");
-for(var i=0;i<_2e8.length;i++){
-var _2e9=_2e8[i];
-if(_2e9.type.toLowerCase()=="image"&&_2e9.form==form){
-this.connect(_2e9,"onclick","click");
+var _2e4=form.getElementsByTagName("input");
+for(var i=0;i<_2e4.length;i++){
+var _2e5=_2e4[i];
+if(_2e5.type.toLowerCase()=="image"&&_2e5.form==form){
+this.connect(_2e5,"onclick","click");
 }
 }
 },onSubmit:function(form){
@@ -105751,26 +67544,26 @@
 this.clickedButton=node;
 },formFilter:function(node){
 var type=(node.type||"").toLowerCase();
-var _2f0=false;
+var _2ec=false;
 if(node.disabled||!node.name){
-_2f0=false;
+_2ec=false;
 }else{
 if(dojo.lang.inArray(["submit","button","image"],type)){
 if(!this.clickedButton){
 this.clickedButton=node;
 }
-_2f0=node==this.clickedButton;
+_2ec=node==this.clickedButton;
 }else{
-_2f0=!dojo.lang.inArray(["file","submit","reset","button"],type);
+_2ec=!dojo.lang.inArray(["file","submit","reset","button"],type);
 }
 }
-return _2f0;
-},connect:function(_2f1,_2f2,_2f3){
+return _2ec;
+},connect:function(_2ed,_2ee,_2ef){
 if(dojo.evalObjPath("dojo.event.connect")){
-dojo.event.connect(_2f1,_2f2,this,_2f3);
+dojo.event.connect(_2ed,_2ee,this,_2ef);
 }else{
-var fcn=dojo.lang.hitch(this,_2f3);
-_2f1[_2f2]=function(e){
+var fcn=dojo.lang.hitch(this,_2ef);
+_2ed[_2ee]=function(e){
 if(!e){
 e=window.event;
 }
@@ -105787,40 +67580,40 @@
 }
 }});
 dojo.io.XMLHTTPTransport=new function(){
-var _2f6=this;
-var _2f7={};
+var _2f2=this;
+var _2f3={};
 this.useCache=false;
 this.preventCache=false;
-function getCacheKey(url,_2f9,_2fa){
-return url+"|"+_2f9+"|"+_2fa.toLowerCase();
+function getCacheKey(url,_2f5,_2f6){
+return url+"|"+_2f5+"|"+_2f6.toLowerCase();
 }
-function addToCache(url,_2fc,_2fd,http){
-_2f7[getCacheKey(url,_2fc,_2fd)]=http;
+function addToCache(url,_2f8,_2f9,http){
+_2f3[getCacheKey(url,_2f8,_2f9)]=http;
 }
-function getFromCache(url,_300,_301){
-return _2f7[getCacheKey(url,_300,_301)];
+function getFromCache(url,_2fc,_2fd){
+return _2f3[getCacheKey(url,_2fc,_2fd)];
 }
 this.clearCache=function(){
-_2f7={};
+_2f3={};
 };
-function doLoad(_302,http,url,_305,_306){
+function doLoad(_2fe,http,url,_301,_302){
 if(((http.status>=200)&&(http.status<300))||(http.status==304)||(location.protocol=="file:"&&(http.status==0||http.status==undefined))||(location.protocol=="chrome:"&&(http.status==0||http.status==undefined))){
 var ret;
-if(_302.method.toLowerCase()=="head"){
-var _308=http.getAllResponseHeaders();
+if(_2fe.method.toLowerCase()=="head"){
+var _304=http.getAllResponseHeaders();
 ret={};
 ret.toString=function(){
-return _308;
+return _304;
 };
-var _309=_308.split(/[\r\n]+/g);
-for(var i=0;i<_309.length;i++){
-var pair=_309[i].match(/^([^:]+)\s*:\s*(.+)$/i);
+var _305=_304.split(/[\r\n]+/g);
+for(var i=0;i<_305.length;i++){
+var pair=_305[i].match(/^([^:]+)\s*:\s*(.+)$/i);
 if(pair){
 ret[pair[1]]=pair[2];
 }
 }
 }else{
-if(_302.mimetype=="text/javascript"){
+if(_2fe.mimetype=="text/javascript"){
 try{
 ret=dj_eval(http.responseText);
 }
@@ -105830,7 +67623,7 @@
 ret=null;
 }
 }else{
-if(_302.mimetype=="text/json"||_302.mimetype=="application/json"){
+if(_2fe.mimetype=="text/json"||_2fe.mimetype=="application/json"){
 try{
 ret=dj_eval("("+http.responseText+")");
 }
@@ -105840,7 +67633,7 @@
 ret=false;
 }
 }else{
-if((_302.mimetype=="application/xml")||(_302.mimetype=="text/xml")){
+if((_2fe.mimetype=="application/xml")||(_2fe.mimetype=="text/xml")){
 ret=http.responseXML;
 if(!ret||typeof ret=="string"||!http.getResponseHeader("Content-Type")){
 ret=dojo.dom.createDocumentFromText(http.responseText);
@@ -105851,22 +67644,22 @@
 }
 }
 }
-if(_306){
-addToCache(url,_305,_302.method,http);
+if(_302){
+addToCache(url,_301,_2fe.method,http);
 }
-_302[(typeof _302.load=="function")?"load":"handle"]("load",ret,http,_302);
+_2fe[(typeof _2fe.load=="function")?"load":"handle"]("load",ret,http,_2fe);
 }else{
-var _30c=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-_302[(typeof _302.error=="function")?"error":"handle"]("error",_30c,http,_302);
+var _308=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
+_2fe[(typeof _2fe.error=="function")?"error":"handle"]("error",_308,http,_2fe);
 }
 }
-function setHeaders(http,_30e){
-if(_30e["headers"]){
-for(var _30f in _30e["headers"]){
-if(_30f.toLowerCase()=="content-type"&&!_30e["contentType"]){
-_30e["contentType"]=_30e["headers"][_30f];
+function setHeaders(http,_30a){
+if(_30a["headers"]){
+for(var _30b in _30a["headers"]){
+if(_30b.toLowerCase()=="content-type"&&!_30a["contentType"]){
+_30a["contentType"]=_30a["headers"][_30b];
 }else{
-http.setRequestHeader(_30f,_30e["headers"][_30f]);
+http.setRequestHeader(_30b,_30a["headers"][_30b]);
 }
 }
 }
@@ -105880,7 +67673,7 @@
 };
 this.watchInFlight=function(){
 var now=null;
-if(!dojo.hostenv._blockAsync&&!_2f6._blockAsync){
+if(!dojo.hostenv._blockAsync&&!_2f2._blockAsync){
 for(var x=this.inFlight.length-1;x>=0;x--){
 try{
 var tif=this.inFlight[x];
@@ -105908,8 +67701,8 @@
 }
 catch(e){
 try{
-var _313=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
-tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_313,tif.http,tif.req);
+var _30f=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
+tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_30f,tif.http,tif.req);
 }
 catch(e2){
 dojo.debug("XMLHttpTransport error callback failed: "+e2);
@@ -105924,74 +67717,74 @@
 }
 this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
 };
-var _314=dojo.hostenv.getXmlhttpObject()?true:false;
-this.canHandle=function(_315){
-return _314&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_315["mimetype"].toLowerCase()||""))&&!(_315["formNode"]&&dojo.io.formHasFile(_315["formNode"]));
+var _310=dojo.hostenv.getXmlhttpObject()?true:false;
+this.canHandle=function(_311){
+return _310&&dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript","text/json","application/json"],(_311["mimetype"].toLowerCase()||""))&&!(_311["formNode"]&&dojo.io.formHasFile(_311["formNode"]));
 };
 this.multipartBoundary="45309FFF-BD65-4d50-99C9-36986896A96F";
-this.bind=function(_316){
-if(!_316["url"]){
-if(!_316["formNode"]&&(_316["backButton"]||_316["back"]||_316["changeUrl"]||_316["watchForURL"])&&(!djConfig.preventBackButtonFix)){
+this.bind=function(_312){
+if(!_312["url"]){
+if(!_312["formNode"]&&(_312["backButton"]||_312["back"]||_312["changeUrl"]||_312["watchForURL"])&&(!djConfig.preventBackButtonFix)){
 dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request","Use dojo.undo.browser.addToHistory() instead.","0.4");
-dojo.undo.browser.addToHistory(_316);
+dojo.undo.browser.addToHistory(_312);
 return true;
 }
 }
-var url=_316.url;
-var _318="";
-if(_316["formNode"]){
-var ta=_316.formNode.getAttribute("action");
-if((ta)&&(!_316["url"])){
+var url=_312.url;
+var _314="";
+if(_312["formNode"]){
+var ta=_312.formNode.getAttribute("action");
+if((ta)&&(!_312["url"])){
 url=ta;
 }
-var tp=_316.formNode.getAttribute("method");
-if((tp)&&(!_316["method"])){
-_316.method=tp;
+var tp=_312.formNode.getAttribute("method");
+if((tp)&&(!_312["method"])){
+_312.method=tp;
 }
-_318+=dojo.io.encodeForm(_316.formNode,_316.encoding,_316["formFilter"]);
+_314+=dojo.io.encodeForm(_312.formNode,_312.encoding,_312["formFilter"]);
 }
 if(url.indexOf("#")>-1){
 dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url);
 url=url.split("#")[0];
 }
-if(_316["file"]){
-_316.method="post";
+if(_312["file"]){
+_312.method="post";
 }
-if(!_316["method"]){
-_316.method="get";
+if(!_312["method"]){
+_312.method="get";
 }
-if(_316.method.toLowerCase()=="get"){
-_316.multipart=false;
+if(_312.method.toLowerCase()=="get"){
+_312.multipart=false;
 }else{
-if(_316["file"]){
-_316.multipart=true;
+if(_312["file"]){
+_312.multipart=true;
 }else{
-if(!_316["multipart"]){
-_316.multipart=false;
+if(!_312["multipart"]){
+_312.multipart=false;
 }
 }
 }
-if(_316["backButton"]||_316["back"]||_316["changeUrl"]){
-dojo.undo.browser.addToHistory(_316);
+if(_312["backButton"]||_312["back"]||_312["changeUrl"]){
+dojo.undo.browser.addToHistory(_312);
 }
-var _31b=_316["content"]||{};
-if(_316.sendTransport){
-_31b["dojo.transport"]="xmlhttp";
+var _317=_312["content"]||{};
+if(_312.sendTransport){
+_317["dojo.transport"]="xmlhttp";
 }
 do{
-if(_316.postContent){
-_318=_316.postContent;
+if(_312.postContent){
+_314=_312.postContent;
 break;
 }
-if(_31b){
-_318+=dojo.io.argsFromMap(_31b,_316.encoding);
+if(_317){
+_314+=dojo.io.argsFromMap(_317,_312.encoding);
 }
-if(_316.method.toLowerCase()=="get"||!_316.multipart){
+if(_312.method.toLowerCase()=="get"||!_312.multipart){
 break;
 }
 var t=[];
-if(_318.length){
-var q=_318.split("&");
+if(_314.length){
+var q=_314.split("&");
 for(var i=0;i<q.length;++i){
 if(q[i].length){
 var p=q[i].split("=");
@@ -105999,71 +67792,71 @@
 }
 }
 }
-if(_316.file){
-if(dojo.lang.isArray(_316.file)){
-for(var i=0;i<_316.file.length;++i){
-var o=_316.file[i];
+if(_312.file){
+if(dojo.lang.isArray(_312.file)){
+for(var i=0;i<_312.file.length;++i){
+var o=_312.file[i];
 t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
 }
 }else{
-var o=_316.file;
+var o=_312.file;
 t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
 }
 }
 if(t.length){
 t.push("--"+this.multipartBoundary+"--","");
-_318=t.join("\r\n");
+_314=t.join("\r\n");
 }
 }while(false);
-var _321=_316["sync"]?false:true;
-var _322=_316["preventCache"]||(this.preventCache==true&&_316["preventCache"]!=false);
-var _323=_316["useCache"]==true||(this.useCache==true&&_316["useCache"]!=false);
-if(!_322&&_323){
-var _324=getFromCache(url,_318,_316.method);
-if(_324){
-doLoad(_316,_324,url,_318,false);
+var _31d=_312["sync"]?false:true;
+var _31e=_312["preventCache"]||(this.preventCache==true&&_312["preventCache"]!=false);
+var _31f=_312["useCache"]==true||(this.useCache==true&&_312["useCache"]!=false);
+if(!_31e&&_31f){
+var _320=getFromCache(url,_314,_312.method);
+if(_320){
+doLoad(_312,_320,url,_314,false);
 return;
 }
 }
-var http=dojo.hostenv.getXmlhttpObject(_316);
-var _326=false;
-if(_321){
-var _327=this.inFlight.push({"req":_316,"http":http,"url":url,"query":_318,"useCache":_323,"startTime":_316.timeoutSeconds?(new Date()).getTime():0});
+var http=dojo.hostenv.getXmlhttpObject(_312);
+var _322=false;
+if(_31d){
+var _323=this.inFlight.push({"req":_312,"http":http,"url":url,"query":_314,"useCache":_31f,"startTime":_312.timeoutSeconds?(new Date()).getTime():0});
 this.startWatchingInFlight();
 }else{
-_2f6._blockAsync=true;
+_2f2._blockAsync=true;
 }
-if(_316.method.toLowerCase()=="post"){
-if(!_316.user){
-http.open("POST",url,_321);
+if(_312.method.toLowerCase()=="post"){
+if(!_312.user){
+http.open("POST",url,_31d);
 }else{
-http.open("POST",url,_321,_316.user,_316.password);
+http.open("POST",url,_31d,_312.user,_312.password);
 }
-setHeaders(http,_316);
-http.setRequestHeader("Content-Type",_316.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_316.contentType||"application/x-www-form-urlencoded"));
+setHeaders(http,_312);
+http.setRequestHeader("Content-Type",_312.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_312.contentType||"application/x-www-form-urlencoded"));
 try{
-http.send(_318);
+http.send(_314);
 }
 catch(e){
 if(typeof http.abort=="function"){
 http.abort();
 }
-doLoad(_316,{status:404},url,_318,_323);
+doLoad(_312,{status:404},url,_314,_31f);
 }
 }else{
-var _328=url;
-if(_318!=""){
-_328+=(_328.indexOf("?")>-1?"&":"?")+_318;
+var _324=url;
+if(_314!=""){
+_324+=(_324.indexOf("?")>-1?"&":"?")+_314;
 }
-if(_322){
-_328+=(dojo.string.endsWithAny(_328,"?","&")?"":(_328.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
+if(_31e){
+_324+=(dojo.string.endsWithAny(_324,"?","&")?"":(_324.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
 }
-if(!_316.user){
-http.open(_316.method.toUpperCase(),_328,_321);
+if(!_312.user){
+http.open(_312.method.toUpperCase(),_324,_31d);
 }else{
-http.open(_316.method.toUpperCase(),_328,_321,_316.user,_316.password);
+http.open(_312.method.toUpperCase(),_324,_31d,_312.user,_312.password);
 }
-setHeaders(http,_316);
+setHeaders(http,_312);
 try{
 http.send(null);
 }
@@ -106071,14 +67864,14 @@
 if(typeof http.abort=="function"){
 http.abort();
 }
-doLoad(_316,{status:404},url,_318,_323);
+doLoad(_312,{status:404},url,_314,_31f);
 }
 }
-if(!_321){
-doLoad(_316,http,url,_318,_323);
-_2f6._blockAsync=false;
+if(!_31d){
+doLoad(_312,http,url,_314,_31f);
+_2f2._blockAsync=false;
 }
-_316.abort=function(){
+_312.abort=function(){
 try{
 http._aborted=true;
 }
@@ -106092,15 +67885,15 @@
 };
 }
 dojo.provide("dojo.io.cookie");
-dojo.io.cookie.setCookie=function(name,_32a,days,path,_32d,_32e){
-var _32f=-1;
+dojo.io.cookie.setCookie=function(name,_326,days,path,_329,_32a){
+var _32b=-1;
 if((typeof days=="number")&&(days>=0)){
 var d=new Date();
 d.setTime(d.getTime()+(days*24*60*60*1000));
-_32f=d.toGMTString();
+_32b=d.toGMTString();
 }
-_32a=escape(_32a);
-document.cookie=name+"="+_32a+";"+(_32f!=-1?" expires="+_32f+";":"")+(path?"path="+path:"")+(_32d?"; domain="+_32d:"")+(_32e?"; secure":"");
+_326=escape(_326);
+document.cookie=name+"="+_326+";"+(_32b!=-1?" expires="+_32b+";":"")+(path?"path="+path:"")+(_329?"; domain="+_329:"")+(_32a?"; secure":"");
 };
 dojo.io.cookie.set=dojo.io.cookie.setCookie;
 dojo.io.cookie.getCookie=function(name){
@@ -106108,71 +67901,71 @@
 if(idx==-1){
 return null;
 }
-var _333=document.cookie.substring(idx+name.length+1);
-var end=_333.indexOf(";");
+var _32f=document.cookie.substring(idx+name.length+1);
+var end=_32f.indexOf(";");
 if(end==-1){
-end=_333.length;
+end=_32f.length;
 }
-_333=_333.substring(0,end);
-_333=unescape(_333);
-return _333;
+_32f=_32f.substring(0,end);
+_32f=unescape(_32f);
+return _32f;
 };
 dojo.io.cookie.get=dojo.io.cookie.getCookie;
 dojo.io.cookie.deleteCookie=function(name){
 dojo.io.cookie.setCookie(name,"-",0);
 };
-dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_33a,_33b,_33c){
+dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_336,_337,_338){
 if(arguments.length==5){
-_33c=_33a;
-_33a=null;
-_33b=null;
+_338=_336;
+_336=null;
+_337=null;
 }
-var _33d=[],_33e,_33f="";
-if(!_33c){
-_33e=dojo.io.cookie.getObjectCookie(name);
+var _339=[],_33a,_33b="";
+if(!_338){
+_33a=dojo.io.cookie.getObjectCookie(name);
 }
 if(days>=0){
-if(!_33e){
-_33e={};
+if(!_33a){
+_33a={};
 }
 for(var prop in obj){
 if(obj[prop]==null){
-delete _33e[prop];
+delete _33a[prop];
 }else{
 if((typeof obj[prop]=="string")||(typeof obj[prop]=="number")){
-_33e[prop]=obj[prop];
+_33a[prop]=obj[prop];
 }
 }
 }
 prop=null;
-for(var prop in _33e){
-_33d.push(escape(prop)+"="+escape(_33e[prop]));
+for(var prop in _33a){
+_339.push(escape(prop)+"="+escape(_33a[prop]));
 }
-_33f=_33d.join("&");
+_33b=_339.join("&");
 }
-dojo.io.cookie.setCookie(name,_33f,days,path,_33a,_33b);
+dojo.io.cookie.setCookie(name,_33b,days,path,_336,_337);
 };
 dojo.io.cookie.getObjectCookie=function(name){
-var _342=null,_343=dojo.io.cookie.getCookie(name);
-if(_343){
-_342={};
-var _344=_343.split("&");
-for(var i=0;i<_344.length;i++){
-var pair=_344[i].split("=");
-var _347=pair[1];
-if(isNaN(_347)){
-_347=unescape(pair[1]);
+var _33e=null,_33f=dojo.io.cookie.getCookie(name);
+if(_33f){
+_33e={};
+var _340=_33f.split("&");
+for(var i=0;i<_340.length;i++){
+var pair=_340[i].split("=");
+var _343=pair[1];
+if(isNaN(_343)){
+_343=unescape(pair[1]);
 }
-_342[unescape(pair[0])]=_347;
+_33e[unescape(pair[0])]=_343;
 }
 }
-return _342;
+return _33e;
 };
 dojo.io.cookie.isSupported=function(){
 if(typeof navigator.cookieEnabled!="boolean"){
 dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__","CookiesAllowed",90,null);
-var _348=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
-navigator.cookieEnabled=(_348=="CookiesAllowed");
+var _344=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
+navigator.cookieEnabled=(_344=="CookiesAllowed");
 if(navigator.cookieEnabled){
 this.deleteCookie("__TestingYourBrowserForCookieSupport__");
 }
@@ -106182,13 +67975,14 @@
 if(!dojo.io.cookies){
 dojo.io.cookies=dojo.io.cookie;
 }
+dojo.kwCompoundRequire({common:["dojo.io.common"],rhino:["dojo.io.RhinoIO"],browser:["dojo.io.BrowserIO","dojo.io.cookie"],dashboard:["dojo.io.BrowserIO","dojo.io.cookie"]});
 dojo.provide("dojo.io.*");
 dojo.provide("dojo.event.common");
 dojo.event=new function(){
 this._canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-function interpolateArgs(args,_34a){
+function interpolateArgs(args,_346){
 var dl=dojo.lang;
-var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false};
+var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false,maxCalls:-1};
 switch(args.length){
 case 0:
 return;
@@ -106213,14 +68007,14 @@
 ao.adviceType="after";
 ao.srcObj=args[0];
 ao.srcFunc=args[1];
-var _34d=dl.nameAnonFunc(args[2],ao.adviceObj,_34a);
-ao.adviceFunc=_34d;
+var _349=dl.nameAnonFunc(args[2],ao.adviceObj,_346);
+ao.adviceFunc=_349;
 }else{
 if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
 ao.adviceType="after";
 ao.srcObj=dj_global;
-var _34d=dl.nameAnonFunc(args[0],ao.srcObj,_34a);
-ao.srcFunc=_34d;
+var _349=dl.nameAnonFunc(args[0],ao.srcObj,_346);
+ao.srcFunc=_349;
 ao.adviceObj=args[1];
 ao.adviceFunc=args[2];
 }
@@ -106246,17 +68040,17 @@
 if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
 ao.adviceType=args[0];
 ao.srcObj=dj_global;
-var _34d=dl.nameAnonFunc(args[1],dj_global,_34a);
-ao.srcFunc=_34d;
+var _349=dl.nameAnonFunc(args[1],dj_global,_346);
+ao.srcFunc=_349;
 ao.adviceObj=args[2];
 ao.adviceFunc=args[3];
 }else{
 if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
 ao.srcObj=args[1];
 ao.srcFunc=args[2];
-var _34d=dl.nameAnonFunc(args[3],dj_global,_34a);
+var _349=dl.nameAnonFunc(args[3],dj_global,_346);
 ao.adviceObj=dj_global;
-ao.adviceFunc=_34d;
+ao.adviceFunc=_349;
 }else{
 if(dl.isObject(args[1])){
 ao.srcObj=args[1];
@@ -106300,11 +68094,12 @@
 ao.delay=args[8];
 ao.rate=args[9];
 ao.adviceMsg=args[10];
+ao.maxCalls=(!isNaN(parseInt(args[11])))?args[11]:-1;
 break;
 }
 if(dl.isFunction(ao.aroundFunc)){
-var _34d=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_34a);
-ao.aroundFunc=_34d;
+var _349=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_346);
+ao.aroundFunc=_349;
 }
 if(dl.isFunction(ao.srcFunc)){
 ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc);
@@ -106333,25 +68128,18 @@
 }else{
 var ao=interpolateArgs(arguments,true);
 }
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.connect(ao);
-}
-ao.srcFunc="onkeypress";
-}
 if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){
-var _34f={};
+var _34b={};
 for(var x in ao){
-_34f[x]=ao[x];
+_34b[x]=ao[x];
 }
 var mjps=[];
 dojo.lang.forEach(ao.srcObj,function(src){
 if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
 src=dojo.byId(src);
 }
-_34f.srcObj=src;
-mjps.push(dojo.event.connect.call(dojo.event,_34f));
+_34b.srcObj=src;
+mjps.push(dojo.event.connect.call(dojo.event,_34b));
 });
 return mjps;
 }
@@ -106363,20 +68151,20 @@
 return mjp;
 };
 this.log=function(a1,a2){
-var _357;
+var _353;
 if((arguments.length==1)&&(typeof a1=="object")){
-_357=a1;
+_353=a1;
 }else{
-_357={srcObj:a1,srcFunc:a2};
+_353={srcObj:a1,srcFunc:a2};
 }
-_357.adviceFunc=function(){
-var _358=[];
+_353.adviceFunc=function(){
+var _354=[];
 for(var x=0;x<arguments.length;x++){
-_358.push(arguments[x]);
+_354.push(arguments[x]);
 }
-dojo.debug("("+_357.srcObj+")."+_357.srcFunc,":",_358.join(", "));
+dojo.debug("("+_353.srcObj+")."+_353.srcFunc,":",_354.join(", "));
 };
-this.kwConnect(_357);
+this.kwConnect(_353);
 };
 this.connectBefore=function(){
 var args=["before"];
@@ -106397,25 +68185,30 @@
 ao.once=true;
 return this.connect(ao);
 };
-this._kwConnectImpl=function(_35f,_360){
-var fn=(_360)?"disconnect":"connect";
-if(typeof _35f["srcFunc"]=="function"){
-_35f.srcObj=_35f["srcObj"]||dj_global;
-var _362=dojo.lang.nameAnonFunc(_35f.srcFunc,_35f.srcObj,true);
-_35f.srcFunc=_362;
+this.connectRunOnce=function(){
+var ao=interpolateArgs(arguments,true);
+ao.maxCalls=1;
+return this.connect(ao);
+};
+this._kwConnectImpl=function(_35c,_35d){
+var fn=(_35d)?"disconnect":"connect";
+if(typeof _35c["srcFunc"]=="function"){
+_35c.srcObj=_35c["srcObj"]||dj_global;
+var _35f=dojo.lang.nameAnonFunc(_35c.srcFunc,_35c.srcObj,true);
+_35c.srcFunc=_35f;
 }
-if(typeof _35f["adviceFunc"]=="function"){
-_35f.adviceObj=_35f["adviceObj"]||dj_global;
-var _362=dojo.lang.nameAnonFunc(_35f.adviceFunc,_35f.adviceObj,true);
-_35f.adviceFunc=_362;
+if(typeof _35c["adviceFunc"]=="function"){
+_35c.adviceObj=_35c["adviceObj"]||dj_global;
+var _35f=dojo.lang.nameAnonFunc(_35c.adviceFunc,_35c.adviceObj,true);
+_35c.adviceFunc=_35f;
 }
-_35f.srcObj=_35f["srcObj"]||dj_global;
-_35f.adviceObj=_35f["adviceObj"]||_35f["targetObj"]||dj_global;
-_35f.adviceFunc=_35f["adviceFunc"]||_35f["targetFunc"];
-return dojo.event[fn](_35f);
+_35c.srcObj=_35c["srcObj"]||dj_global;
+_35c.adviceObj=_35c["adviceObj"]||_35c["targetObj"]||dj_global;
+_35c.adviceFunc=_35c["adviceFunc"]||_35c["targetFunc"];
+return dojo.event[fn](_35c);
 };
-this.kwConnect=function(_363){
-return this._kwConnectImpl(_363,false);
+this.kwConnect=function(_360){
+return this._kwConnectImpl(_360,false);
 };
 this.disconnect=function(){
 if(arguments.length==1){
@@ -106440,12 +68233,12 @@
 mjp.removeAdvice(ao.adviceObj,ao.adviceFunc,ao.adviceType,ao.once);
 return mjp;
 };
-this.kwDisconnect=function(_366){
-return this._kwConnectImpl(_366,true);
+this.kwDisconnect=function(_363){
+return this._kwConnectImpl(_363,true);
 };
 };
-dojo.event.MethodInvocation=function(_367,obj,args){
-this.jp_=_367;
+dojo.event.MethodInvocation=function(_364,obj,args){
+this.jp_=_364;
 this.object=obj;
 this.args=[];
 for(var x=0;x<args.length;x++){
@@ -106464,44 +68257,50 @@
 return mobj[meth].call(mobj,this);
 }
 };
-dojo.event.MethodJoinPoint=function(obj,_36f){
+dojo.event.MethodJoinPoint=function(obj,_36c){
 this.object=obj||dj_global;
-this.methodname=_36f;
-this.methodfunc=this.object[_36f];
+this.methodname=_36c;
+this.methodfunc=this.object[_36c];
 this.squelch=false;
 };
-dojo.event.MethodJoinPoint.getForMethod=function(obj,_371){
+dojo.event.MethodJoinPoint.getForMethod=function(obj,_36e){
 if(!obj){
 obj=dj_global;
 }
-if(!obj[_371]){
-obj[_371]=function(){
+var ofn=obj[_36e];
+if(!ofn){
+ofn=obj[_36e]=function(){
 };
-if(!obj[_371]){
-dojo.raise("Cannot set do-nothing method on that object "+_371);
+if(!obj[_36e]){
+dojo.raise("Cannot set do-nothing method on that object "+_36e);
 }
 }else{
-if((!dojo.lang.isFunction(obj[_371]))&&(!dojo.lang.isAlien(obj[_371]))){
+if((typeof ofn!="function")&&(!dojo.lang.isFunction(ofn))&&(!dojo.lang.isAlien(ofn))){
 return null;
 }
 }
-var _372=_371+"$joinpoint";
-var _373=_371+"$joinpoint$method";
-var _374=obj[_372];
-if(!_374){
-var _375=false;
+var _370=_36e+"$joinpoint";
+var _371=_36e+"$joinpoint$method";
+var _372=obj[_370];
+if(!_372){
+var _373=false;
 if(dojo.event["browser"]){
 if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){
-_375=true;
-dojo.event.browser.addClobberNodeAttrs(obj,[_372,_373,_371]);
+_373=true;
+dojo.event.browser.addClobberNodeAttrs(obj,[_370,_371,_36e]);
 }
 }
-var _376=obj[_371].length;
-obj[_373]=obj[_371];
-_374=obj[_372]=new dojo.event.MethodJoinPoint(obj,_373);
-obj[_371]=function(){
+var _374=ofn.length;
+obj[_371]=ofn;
+_372=obj[_370]=new dojo.event.MethodJoinPoint(obj,_371);
+if(!_373){
+obj[_36e]=function(){
+return _372.run.apply(_372,arguments);
+};
+}else{
+obj[_36e]=function(){
 var args=[];
-if((_375)&&(!arguments.length)){
+if(!arguments.length){
 var evt=null;
 try{
 if(obj.ownerDocument){
@@ -106526,20 +68325,21 @@
 }
 }else{
 for(var x=0;x<arguments.length;x++){
-if((x==0)&&(_375)&&(dojo.event.browser.isEvent(arguments[x]))){
+if((x==0)&&(dojo.event.browser.isEvent(arguments[x]))){
 args.push(dojo.event.browser.fixEvent(arguments[x],this));
 }else{
 args.push(arguments[x]);
 }
 }
 }
-return _374.run.apply(_374,args);
+return _372.run.apply(_372,args);
 };
-obj[_371].__preJoinArity=_376;
 }
-return _374;
+obj[_36e].__preJoinArity=_374;
+}
+return _372;
 };
-dojo.lang.extend(dojo.event.MethodJoinPoint,{unintercept:function(){
+dojo.lang.extend(dojo.event.MethodJoinPoint,{squelch:false,unintercept:function(){
 this.object[this.methodname]=this.methodfunc;
 this.before=[];
 this.after=[];
@@ -106547,34 +68347,41 @@
 },disconnect:dojo.lang.forward("unintercept"),run:function(){
 var obj=this.object||dj_global;
 var args=arguments;
-var _37c=[];
+var _37a=[];
 for(var x=0;x<args.length;x++){
-_37c[x]=args[x];
+_37a[x]=args[x];
 }
-var _37e=function(marr){
+var _37c=function(marr){
 if(!marr){
 dojo.debug("Null argument to unrollAdvice()");
 return;
 }
-var _380=marr[0]||dj_global;
-var _381=marr[1];
-if(!_380[_381]){
-dojo.raise("function \""+_381+"\" does not exist on \""+_380+"\"");
+var _37e=marr[0]||dj_global;
+var _37f=marr[1];
+if(!_37e[_37f]){
+dojo.raise("function \""+_37f+"\" does not exist on \""+_37e+"\"");
 }
-var _382=marr[2]||dj_global;
-var _383=marr[3];
+var _380=marr[2]||dj_global;
+var _381=marr[3];
 var msg=marr[6];
-var _385;
+var _383=marr[7];
+if(_383>-1){
+if(_383==0){
+return;
+}
+marr[7]--;
+}
+var _384;
 var to={args:[],jp_:this,object:obj,proceed:function(){
-return _380[_381].apply(_380,to.args);
+return _37e[_37f].apply(_37e,to.args);
 }};
-to.args=_37c;
-var _387=parseInt(marr[4]);
-var _388=((!isNaN(_387))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
+to.args=_37a;
+var _386=parseInt(marr[4]);
+var _387=((!isNaN(_386))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
 if(marr[5]){
 var rate=parseInt(marr[5]);
 var cur=new Date();
-var _38b=false;
+var _38a=false;
 if((marr["last"])&&((cur-marr.last)<=rate)){
 if(dojo.event._canTimeout){
 if(marr["delayTimer"]){
@@ -106584,7 +68391,7 @@
 var mcpy=dojo.lang.shallowCopy(marr);
 marr.delayTimer=setTimeout(function(){
 mcpy[5]=0;
-_37e(mcpy);
+_37c(mcpy);
 },tod);
 }
 return;
@@ -106592,49 +68399,49 @@
 marr.last=cur;
 }
 }
-if(_383){
-_382[_383].call(_382,to);
+if(_381){
+_380[_381].call(_380,to);
 }else{
-if((_388)&&((dojo.render.html)||(dojo.render.svg))){
+if((_387)&&((dojo.render.html)||(dojo.render.svg))){
 dj_global["setTimeout"](function(){
 if(msg){
-_380[_381].call(_380,to);
+_37e[_37f].call(_37e,to);
 }else{
-_380[_381].apply(_380,args);
+_37e[_37f].apply(_37e,args);
 }
-},_387);
+},_386);
 }else{
 if(msg){
-_380[_381].call(_380,to);
+_37e[_37f].call(_37e,to);
 }else{
-_380[_381].apply(_380,args);
+_37e[_37f].apply(_37e,args);
 }
 }
 }
 };
-var _38e=function(){
+var _38d=function(){
 if(this.squelch){
 try{
-return _37e.apply(this,arguments);
+return _37c.apply(this,arguments);
 }
 catch(e){
 dojo.debug(e);
 }
 }else{
-return _37e.apply(this,arguments);
+return _37c.apply(this,arguments);
 }
 };
 if((this["before"])&&(this.before.length>0)){
-dojo.lang.forEach(this.before.concat(new Array()),_38e);
+dojo.lang.forEach(this.before.concat(new Array()),_38d);
 }
-var _38f;
+var _38e;
 try{
 if((this["around"])&&(this.around.length>0)){
 var mi=new dojo.event.MethodInvocation(this,obj,args);
-_38f=mi.proceed();
+_38e=mi.proceed();
 }else{
 if(this.methodfunc){
-_38f=this.object[this.methodname].apply(this.object,args);
+_38e=this.object[this.methodname].apply(this.object,args);
 }
 }
 }
@@ -106645,9 +68452,9 @@
 }
 }
 if((this["after"])&&(this.after.length>0)){
-dojo.lang.forEach(this.after.concat(new Array()),_38e);
+dojo.lang.forEach(this.after.concat(new Array()),_38d);
 }
-return (this.methodfunc)?_38f:null;
+return (this.methodfunc)?_38e:null;
 },getArr:function(kind){
 var type="after";
 if((typeof kind=="string")&&(kind.indexOf("before")!=-1)){
@@ -106662,19 +68469,19 @@
 }
 return this[type];
 },kwAddAdvice:function(args){
-this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"]);
-},addAdvice:function(_394,_395,_396,_397,_398,_399,once,_39b,rate,_39d){
-var arr=this.getArr(_398);
+this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"],args["maxCalls"]);
+},addAdvice:function(_393,_394,_395,_396,_397,_398,once,_39a,rate,_39c,_39d){
+var arr=this.getArr(_397);
 if(!arr){
 dojo.raise("bad this: "+this);
 }
-var ao=[_394,_395,_396,_397,_39b,rate,_39d];
+var ao=[_393,_394,_395,_396,_39a,rate,_39c,_39d];
 if(once){
-if(this.hasAdvice(_394,_395,_398,arr)>=0){
+if(this.hasAdvice(_393,_394,_397,arr)>=0){
 return;
 }
 }
-if(_399=="first"){
+if(_398=="first"){
 arr.unshift(ao);
 }else{
 arr.push(ao);
@@ -106877,7 +68684,8 @@
 return _3d8;
 break;
 default:
-return _3d8.toLowerCase();
+var lcn=_3d8.toLowerCase();
+return (lcn.indexOf("on")==0)?lcn.substr(2):lcn;
 break;
 }
 };
@@ -106896,93 +68704,88 @@
 node.__clobberAttrs__=[];
 }
 };
-this.addClobberNodeAttrs=function(node,_3dc){
+this.addClobberNodeAttrs=function(node,_3dd){
 if(!dojo.render.html.ie){
 return;
 }
 this.addClobberNode(node);
-for(var x=0;x<_3dc.length;x++){
-node.__clobberAttrs__.push(_3dc[x]);
+for(var x=0;x<_3dd.length;x++){
+node.__clobberAttrs__.push(_3dd[x]);
 }
 };
-this.removeListener=function(node,_3df,fp,_3e1){
-if(!_3e1){
-var _3e1=false;
+this.removeListener=function(node,_3e0,fp,_3e2){
+if(!_3e2){
+var _3e2=false;
 }
-_3df=dojo.event.browser.normalizedEventName(_3df);
-if((_3df=="onkey")||(_3df=="key")){
+_3e0=dojo.event.browser.normalizedEventName(_3e0);
+if(_3e0=="key"){
 if(dojo.render.html.ie){
-this.removeListener(node,"onkeydown",fp,_3e1);
+this.removeListener(node,"onkeydown",fp,_3e2);
 }
-_3df="onkeypress";
+_3e0="keypress";
 }
-if(_3df.substr(0,2)=="on"){
-_3df=_3df.substr(2);
-}
 if(node.removeEventListener){
-node.removeEventListener(_3df,fp,_3e1);
+node.removeEventListener(_3e0,fp,_3e2);
 }
 };
-this.addListener=function(node,_3e3,fp,_3e5,_3e6){
+this.addListener=function(node,_3e4,fp,_3e6,_3e7){
 if(!node){
 return;
 }
-if(!_3e5){
-var _3e5=false;
+if(!_3e6){
+var _3e6=false;
 }
-_3e3=dojo.event.browser.normalizedEventName(_3e3);
-if((_3e3=="onkey")||(_3e3=="key")){
+_3e4=dojo.event.browser.normalizedEventName(_3e4);
+if(_3e4=="key"){
 if(dojo.render.html.ie){
-this.addListener(node,"onkeydown",fp,_3e5,_3e6);
+this.addListener(node,"onkeydown",fp,_3e6,_3e7);
 }
-_3e3="onkeypress";
+_3e4="keypress";
 }
-if(_3e3.substr(0,2)!="on"){
-_3e3="on"+_3e3;
-}
-if(!_3e6){
-var _3e7=function(evt){
+if(!_3e7){
+var _3e8=function(evt){
 if(!evt){
 evt=window.event;
 }
 var ret=fp(dojo.event.browser.fixEvent(evt,this));
-if(_3e5){
+if(_3e6){
 dojo.event.browser.stopEvent(evt);
 }
 return ret;
 };
 }else{
-_3e7=fp;
+_3e8=fp;
 }
 if(node.addEventListener){
-node.addEventListener(_3e3.substr(2),_3e7,_3e5);
-return _3e7;
+node.addEventListener(_3e4,_3e8,_3e6);
+return _3e8;
 }else{
-if(typeof node[_3e3]=="function"){
-var _3ea=node[_3e3];
-node[_3e3]=function(e){
-_3ea(e);
-return _3e7(e);
+_3e4="on"+_3e4;
+if(typeof node[_3e4]=="function"){
+var _3eb=node[_3e4];
+node[_3e4]=function(e){
+_3eb(e);
+return _3e8(e);
 };
 }else{
-node[_3e3]=_3e7;
+node[_3e4]=_3e8;
 }
 if(dojo.render.html.ie){
-this.addClobberNodeAttrs(node,[_3e3]);
+this.addClobberNodeAttrs(node,[_3e4]);
 }
-return _3e7;
+return _3e8;
 }
 };
 this.isEvent=function(obj){
 return (typeof obj!="undefined")&&(obj)&&(typeof Event!="undefined")&&(obj.eventPhase);
 };
 this.currentEvent=null;
-this.callListener=function(_3ed,_3ee){
-if(typeof _3ed!="function"){
-dojo.raise("listener not a function: "+_3ed);
+this.callListener=function(_3ee,_3ef){
+if(typeof _3ee!="function"){
+dojo.raise("listener not a function: "+_3ee);
 }
-dojo.event.browser.currentEvent.currentTarget=_3ee;
-return _3ed.call(_3ee,dojo.event.browser.currentEvent);
+dojo.event.browser.currentEvent.currentTarget=_3ef;
+return _3ee.call(_3ef,dojo.event.browser.currentEvent);
 };
 this._stopPropagation=function(){
 dojo.event.browser.currentEvent.cancelBubble=true;
@@ -106995,7 +68798,7 @@
 for(var key in this.keys){
 this.revKeys[this.keys[key]]=key;
 }
-this.fixEvent=function(evt,_3f1){
+this.fixEvent=function(evt,_3f2){
 if(!evt){
 if(window["event"]){
 evt=window.event;
@@ -107072,14 +68875,14 @@
 break;
 default:
 if(evt.ctrlKey||evt.altKey){
-var _3f3=evt.keyCode;
-if(_3f3>=65&&_3f3<=90&&evt.shiftKey==false){
-_3f3+=32;
+var _3f4=evt.keyCode;
+if(_3f4>=65&&_3f4<=90&&evt.shiftKey==false){
+_3f4+=32;
 }
-if(_3f3>=1&&_3f3<=26&&evt.ctrlKey){
-_3f3+=96;
+if(_3f4>=1&&_3f4<=26&&evt.ctrlKey){
+_3f4+=96;
 }
-evt.key=String.fromCharCode(_3f3);
+evt.key=String.fromCharCode(_3f4);
 }
 }
 }else{
@@ -107105,11 +68908,11 @@
 evt.key=evt.which;
 break;
 default:
-var _3f3=evt.which;
+var _3f4=evt.which;
 if((evt.ctrlKey||evt.altKey||evt.metaKey)&&(evt.which>=65&&evt.which<=90&&evt.shiftKey==false)){
-_3f3+=32;
+_3f4+=32;
 }
-evt.key=String.fromCharCode(_3f3);
+evt.key=String.fromCharCode(_3f4);
 }
 }
 }
@@ -107214,7 +69017,7 @@
 evt.target=evt.srcElement;
 }
 if(!evt.currentTarget){
-evt.currentTarget=(_3f1?_3f1:evt.srcElement);
+evt.currentTarget=(_3f2?_3f2:evt.srcElement);
 }
 if(!evt.layerX){
 evt.layerX=evt.offsetX;
@@ -107223,12 +69026,12 @@
 evt.layerY=evt.offsetY;
 }
 var doc=(evt.srcElement&&evt.srcElement.ownerDocument)?evt.srcElement.ownerDocument:document;
-var _3f5=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
+var _3f6=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
 if(!evt.pageX){
-evt.pageX=evt.clientX+(_3f5.scrollLeft||0);
+evt.pageX=evt.clientX+(_3f6.scrollLeft||0);
 }
 if(!evt.pageY){
-evt.pageY=evt.clientY+(_3f5.scrollTop||0);
+evt.pageY=evt.clientY+(_3f6.scrollTop||0);
 }
 if(evt.type=="mouseover"){
 evt.relatedTarget=evt.fromElement;
@@ -107253,6 +69056,7 @@
 }
 };
 };
+dojo.kwCompoundRequire({common:["dojo.event.common","dojo.event.topic"],browser:["dojo.event.browser"],dashboard:["dojo.event.browser"]});
 dojo.provide("dojo.event.*");
 dojo.provide("dojo.gfx.color");
 dojo.gfx.color.Color=function(r,g,b,a){
@@ -107286,8 +69090,8 @@
 dojo.gfx.color.Color.fromArray=function(arr){
 return new dojo.gfx.color.Color(arr[0],arr[1],arr[2],arr[3]);
 };
-dojo.extend(dojo.gfx.color.Color,{toRgb:function(_3fd){
-if(_3fd){
+dojo.extend(dojo.gfx.color.Color,{toRgb:function(_3fe){
+if(_3fe){
 return this.toRgba();
 }else{
 return [this.r,this.g,this.b];
@@ -107300,62 +69104,62 @@
 return "rgb("+this.toRgb().join()+")";
 },toString:function(){
 return this.toHex();
-},blend:function(_3fe,_3ff){
+},blend:function(_3ff,_400){
 var rgb=null;
-if(dojo.lang.isArray(_3fe)){
-rgb=_3fe;
+if(dojo.lang.isArray(_3ff)){
+rgb=_3ff;
 }else{
-if(_3fe instanceof dojo.gfx.color.Color){
-rgb=_3fe.toRgb();
+if(_3ff instanceof dojo.gfx.color.Color){
+rgb=_3ff.toRgb();
 }else{
-rgb=new dojo.gfx.color.Color(_3fe).toRgb();
+rgb=new dojo.gfx.color.Color(_3ff).toRgb();
 }
 }
-return dojo.gfx.color.blend(this.toRgb(),rgb,_3ff);
+return dojo.gfx.color.blend(this.toRgb(),rgb,_400);
 }});
 dojo.gfx.color.named={white:[255,255,255],black:[0,0,0],red:[255,0,0],green:[0,255,0],lime:[0,255,0],blue:[0,0,255],navy:[0,0,128],gray:[128,128,128],silver:[192,192,192]};
-dojo.gfx.color.blend=function(a,b,_403){
+dojo.gfx.color.blend=function(a,b,_404){
 if(typeof a=="string"){
-return dojo.gfx.color.blendHex(a,b,_403);
+return dojo.gfx.color.blendHex(a,b,_404);
 }
-if(!_403){
-_403=0;
+if(!_404){
+_404=0;
 }
-_403=Math.min(Math.max(-1,_403),1);
-_403=((_403+1)/2);
+_404=Math.min(Math.max(-1,_404),1);
+_404=((_404+1)/2);
 var c=[];
 for(var x=0;x<3;x++){
-c[x]=parseInt(b[x]+((a[x]-b[x])*_403));
+c[x]=parseInt(b[x]+((a[x]-b[x])*_404));
 }
 return c;
 };
-dojo.gfx.color.blendHex=function(a,b,_408){
-return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_408));
+dojo.gfx.color.blendHex=function(a,b,_409){
+return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_409));
 };
-dojo.gfx.color.extractRGB=function(_409){
+dojo.gfx.color.extractRGB=function(_40a){
 var hex="0123456789abcdef";
-_409=_409.toLowerCase();
-if(_409.indexOf("rgb")==0){
-var _40b=_409.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-var ret=_40b.splice(1,3);
+_40a=_40a.toLowerCase();
+if(_40a.indexOf("rgb")==0){
+var _40c=_40a.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
+var ret=_40c.splice(1,3);
 return ret;
 }else{
-var _40d=dojo.gfx.color.hex2rgb(_409);
-if(_40d){
-return _40d;
+var _40e=dojo.gfx.color.hex2rgb(_40a);
+if(_40e){
+return _40e;
 }else{
-return dojo.gfx.color.named[_409]||[255,255,255];
+return dojo.gfx.color.named[_40a]||[255,255,255];
 }
 }
 };
 dojo.gfx.color.hex2rgb=function(hex){
-var _40f="0123456789ABCDEF";
+var _410="0123456789ABCDEF";
 var rgb=new Array(3);
 if(hex.indexOf("#")==0){
 hex=hex.substring(1);
 }
 hex=hex.toUpperCase();
-if(hex.replace(new RegExp("["+_40f+"]","g"),"")!=""){
+if(hex.replace(new RegExp("["+_410+"]","g"),"")!=""){
 return null;
 }
 if(hex.length==3){
@@ -107368,7 +69172,7 @@
 rgb[2]=hex.substring(4);
 }
 for(var i=0;i<rgb.length;i++){
-rgb[i]=_40f.indexOf(rgb[i].charAt(0))*16+_40f.indexOf(rgb[i].charAt(1));
+rgb[i]=_410.indexOf(rgb[i].charAt(0))*16+_410.indexOf(rgb[i].charAt(1));
 }
 return rgb;
 };
@@ -107390,10 +69194,10 @@
 return ret.join("");
 };
 dojo.provide("dojo.lfx.Animation");
-dojo.lfx.Line=function(_418,end){
-this.start=_418;
+dojo.lfx.Line=function(_419,end){
+this.start=_419;
 this.end=end;
-if(dojo.lang.isArray(_418)){
+if(dojo.lang.isArray(_419)){
 var diff=[];
 dojo.lang.forEach(this.start,function(s,i){
 diff[i]=this.end[i]-s;
@@ -107406,19 +69210,21 @@
 return res;
 };
 }else{
-var diff=end-_418;
+var diff=end-_419;
 this.getValue=function(n){
 return (diff*n)+this.start;
 };
 }
 };
+if((dojo.render.html.khtml)&&(!dojo.render.html.safari)){
 dojo.lfx.easeDefault=function(n){
-if(dojo.render.html.khtml){
 return (parseFloat("0.5")+((Math.sin((n+parseFloat("1.5"))*Math.PI))/2));
+};
 }else{
+dojo.lfx.easeDefault=function(n){
 return (0.5+((Math.sin((n+1.5)*Math.PI))/2));
-}
 };
+}
 dojo.lfx.easeIn=function(n){
 return Math.pow(n,3);
 };
@@ -107430,17 +69236,17 @@
 };
 dojo.lfx.IAnimation=function(){
 };
-dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:25,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,connect:function(evt,_427,_428){
-if(!_428){
-_428=_427;
-_427=this;
+dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:10,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,connect:function(evt,_429,_42a){
+if(!_42a){
+_42a=_429;
+_429=this;
 }
-_428=dojo.lang.hitch(_427,_428);
-var _429=this[evt]||function(){
+_42a=dojo.lang.hitch(_429,_42a);
+var _42b=this[evt]||function(){
 };
 this[evt]=function(){
-var ret=_429.apply(this,arguments);
-_428.apply(this,arguments);
+var ret=_42b.apply(this,arguments);
+_42a.apply(this,arguments);
 return ret;
 };
 return this;
@@ -107449,57 +69255,57 @@
 this[evt].apply(this,(args||[]));
 }
 return this;
-},repeat:function(_42d){
-this.repeatCount=_42d;
+},repeat:function(_42f){
+this.repeatCount=_42f;
 return this;
 },_active:false,_paused:false});
-dojo.lfx.Animation=function(_42e,_42f,_430,_431,_432,rate){
+dojo.lfx.Animation=function(_430,_431,_432,_433,_434,rate){
 dojo.lfx.IAnimation.call(this);
-if(dojo.lang.isNumber(_42e)||(!_42e&&_42f.getValue)){
-rate=_432;
+if(dojo.lang.isNumber(_430)||(!_430&&_431.getValue)){
+rate=_434;
+_434=_433;
+_433=_432;
 _432=_431;
 _431=_430;
-_430=_42f;
-_42f=_42e;
-_42e=null;
+_430=null;
 }else{
-if(_42e.getValue||dojo.lang.isArray(_42e)){
-rate=_431;
+if(_430.getValue||dojo.lang.isArray(_430)){
+rate=_433;
+_434=_432;
+_433=_431;
 _432=_430;
-_431=_42f;
-_430=_42e;
-_42f=null;
-_42e=null;
+_431=null;
+_430=null;
 }
 }
-if(dojo.lang.isArray(_430)){
-this.curve=new dojo.lfx.Line(_430[0],_430[1]);
+if(dojo.lang.isArray(_432)){
+this.curve=new dojo.lfx.Line(_432[0],_432[1]);
 }else{
-this.curve=_430;
+this.curve=_432;
 }
-if(_42f!=null&&_42f>0){
-this.duration=_42f;
+if(_431!=null&&_431>0){
+this.duration=_431;
 }
-if(_432){
-this.repeatCount=_432;
+if(_434){
+this.repeatCount=_434;
 }
 if(rate){
 this.rate=rate;
 }
-if(_42e){
+if(_430){
 dojo.lang.forEach(["handler","beforeBegin","onBegin","onEnd","onPlay","onStop","onAnimate"],function(item){
-if(_42e[item]){
-this.connect(item,_42e[item]);
+if(_430[item]){
+this.connect(item,_430[item]);
 }
 },this);
 }
-if(_431&&dojo.lang.isFunction(_431)){
-this.easing=_431;
+if(_433&&dojo.lang.isFunction(_433)){
+this.easing=_433;
 }
 };
 dojo.inherits(dojo.lfx.Animation,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_435,_436){
-if(_436){
+dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_437,_438){
+if(_438){
 clearTimeout(this._timer);
 this._active=false;
 this._paused=false;
@@ -107511,10 +69317,10 @@
 }
 this.fire("handler",["beforeBegin"]);
 this.fire("beforeBegin");
-if(_435>0){
+if(_437>0){
 setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_436);
-}),_435);
+this.play(null,_438);
+}),_437);
 return this;
 }
 this._startTime=new Date().valueOf();
@@ -107525,16 +69331,16 @@
 this._active=true;
 this._paused=false;
 var step=this._percent/100;
-var _438=this.curve.getValue(step);
+var _43a=this.curve.getValue(step);
 if(this._percent==0){
 if(!this._startRepeatCount){
 this._startRepeatCount=this.repeatCount;
 }
-this.fire("handler",["begin",_438]);
-this.fire("onBegin",[_438]);
+this.fire("handler",["begin",_43a]);
+this.fire("onBegin",[_43a]);
 }
-this.fire("handler",["play",_438]);
-this.fire("onPlay",[_438]);
+this.fire("handler",["play",_43a]);
+this.fire("onPlay",[_43a]);
 this._cycle();
 return this;
 },pause:function(){
@@ -107543,28 +69349,28 @@
 return this;
 }
 this._paused=true;
-var _439=this.curve.getValue(this._percent/100);
-this.fire("handler",["pause",_439]);
-this.fire("onPause",[_439]);
+var _43b=this.curve.getValue(this._percent/100);
+this.fire("handler",["pause",_43b]);
+this.fire("onPause",[_43b]);
 return this;
-},gotoPercent:function(pct,_43b){
+},gotoPercent:function(pct,_43d){
 clearTimeout(this._timer);
 this._active=true;
 this._paused=true;
 this._percent=pct;
-if(_43b){
+if(_43d){
 this.play();
 }
 return this;
-},stop:function(_43c){
+},stop:function(_43e){
 clearTimeout(this._timer);
 var step=this._percent/100;
-if(_43c){
+if(_43e){
 step=1;
 }
-var _43e=this.curve.getValue(step);
-this.fire("handler",["stop",_43e]);
-this.fire("onStop",[_43e]);
+var _440=this.curve.getValue(step);
+this.fire("handler",["stop",_440]);
+this.fire("onStop",[_440]);
 this._active=false;
 this._paused=false;
 return this;
@@ -107589,9 +69395,9 @@
 if((this.easing)&&(dojo.lang.isFunction(this.easing))){
 step=this.easing(step);
 }
-var _441=this.curve.getValue(step);
-this.fire("handler",["animate",_441]);
-this.fire("onAnimate",[_441]);
+var _443=this.curve.getValue(step);
+this.fire("handler",["animate",_443]);
+this.fire("onAnimate",[_443]);
 if(step<1){
 this._timer=setTimeout(dojo.lang.hitch(this,"_cycle"),this.rate);
 }else{
@@ -107615,44 +69421,44 @@
 }
 return this;
 }});
-dojo.lfx.Combine=function(_442){
+dojo.lfx.Combine=function(_444){
 dojo.lfx.IAnimation.call(this);
 this._anims=[];
 this._animsEnded=0;
-var _443=arguments;
-if(_443.length==1&&(dojo.lang.isArray(_443[0])||dojo.lang.isArrayLike(_443[0]))){
-_443=_443[0];
+var _445=arguments;
+if(_445.length==1&&(dojo.lang.isArray(_445[0])||dojo.lang.isArrayLike(_445[0]))){
+_445=_445[0];
 }
-dojo.lang.forEach(_443,function(anim){
+dojo.lang.forEach(_445,function(anim){
 this._anims.push(anim);
 anim.connect("onEnd",dojo.lang.hitch(this,"_onAnimsEnded"));
 },this);
 };
 dojo.inherits(dojo.lfx.Combine,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_445,_446){
+dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_447,_448){
 if(!this._anims.length){
 return this;
 }
 this.fire("beforeBegin");
-if(_445>0){
+if(_447>0){
 setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_446);
-}),_445);
+this.play(null,_448);
+}),_447);
 return this;
 }
-if(_446||this._anims[0].percent==0){
+if(_448||this._anims[0].percent==0){
 this.fire("onBegin");
 }
 this.fire("onPlay");
-this._animsCall("play",null,_446);
+this._animsCall("play",null,_448);
 return this;
 },pause:function(){
 this.fire("onPause");
 this._animsCall("pause");
 return this;
-},stop:function(_447){
+},stop:function(_449){
 this.fire("onStop");
-this._animsCall("stop",_447);
+this._animsCall("stop",_449);
 return this;
 },_onAnimsEnded:function(){
 this._animsEnded++;
@@ -107660,31 +69466,31 @@
 this.fire("onEnd");
 }
 return this;
-},_animsCall:function(_448){
+},_animsCall:function(_44a){
 var args=[];
 if(arguments.length>1){
 for(var i=1;i<arguments.length;i++){
 args.push(arguments[i]);
 }
 }
-var _44b=this;
+var _44d=this;
 dojo.lang.forEach(this._anims,function(anim){
-anim[_448](args);
-},_44b);
+anim[_44a](args);
+},_44d);
 return this;
 }});
-dojo.lfx.Chain=function(_44d){
+dojo.lfx.Chain=function(_44f){
 dojo.lfx.IAnimation.call(this);
 this._anims=[];
 this._currAnim=-1;
-var _44e=arguments;
-if(_44e.length==1&&(dojo.lang.isArray(_44e[0])||dojo.lang.isArrayLike(_44e[0]))){
-_44e=_44e[0];
+var _450=arguments;
+if(_450.length==1&&(dojo.lang.isArray(_450[0])||dojo.lang.isArrayLike(_450[0]))){
+_450=_450[0];
 }
-var _44f=this;
-dojo.lang.forEach(_44e,function(anim,i,_452){
+var _451=this;
+dojo.lang.forEach(_450,function(anim,i,_454){
 this._anims.push(anim);
-if(i<_452.length-1){
+if(i<_454.length-1){
 anim.connect("onEnd",dojo.lang.hitch(this,"_playNext"));
 }else{
 anim.connect("onEnd",dojo.lang.hitch(this,function(){
@@ -107694,28 +69500,28 @@
 },this);
 };
 dojo.inherits(dojo.lfx.Chain,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_453,_454){
+dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_455,_456){
 if(!this._anims.length){
 return this;
 }
-if(_454||!this._anims[this._currAnim]){
+if(_456||!this._anims[this._currAnim]){
 this._currAnim=0;
 }
-var _455=this._anims[this._currAnim];
+var _457=this._anims[this._currAnim];
 this.fire("beforeBegin");
-if(_453>0){
+if(_455>0){
 setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_454);
-}),_453);
+this.play(null,_456);
+}),_455);
 return this;
 }
-if(_455){
+if(_457){
 if(this._currAnim==0){
 this.fire("handler",["begin",this._currAnim]);
 this.fire("onBegin",[this._currAnim]);
 }
 this.fire("onPlay",[this._currAnim]);
-_455.play(null,_454);
+_457.play(null,_456);
 }
 return this;
 },pause:function(){
@@ -107731,9 +69537,9 @@
 if(this._currAnim==-1){
 this._currAnim=0;
 }
-var _456=this._anims[this._currAnim];
-if(_456){
-if(!_456._active||_456._paused){
+var _458=this._anims[this._currAnim];
+if(_458){
+if(!_458._active||_458._paused){
 this.play();
 }else{
 this.pause();
@@ -107741,12 +69547,12 @@
 }
 return this;
 },stop:function(){
-var _457=this._anims[this._currAnim];
-if(_457){
-_457.stop();
+var _459=this._anims[this._currAnim];
+if(_459){
+_459.stop();
 this.fire("onStop",[this._currAnim]);
 }
-return _457;
+return _459;
 },_playNext:function(){
 if(this._currAnim==-1||this._anims.length==0){
 return this;
@@ -107757,17 +69563,7 @@
 }
 return this;
 }});
-dojo.lfx.combine=function(_458){
-var _459=arguments;
-if(dojo.lang.isArray(arguments[0])){
-_459=arguments[0];
-}
-if(_459.length==1){
-return _459[0];
-}
-return new dojo.lfx.Combine(_459);
-};
-dojo.lfx.chain=function(_45a){
+dojo.lfx.combine=function(_45a){
 var _45b=arguments;
 if(dojo.lang.isArray(arguments[0])){
 _45b=arguments[0];
@@ -107775,8 +69571,18 @@
 if(_45b.length==1){
 return _45b[0];
 }
-return new dojo.lfx.Chain(_45b);
+return new dojo.lfx.Combine(_45b);
 };
+dojo.lfx.chain=function(_45c){
+var _45d=arguments;
+if(dojo.lang.isArray(arguments[0])){
+_45d=arguments[0];
+}
+if(_45d.length==1){
+return _45d[0];
+}
+return new dojo.lfx.Chain(_45d);
+};
 dojo.provide("dojo.html.common");
 dojo.lang.mixin(dojo.html,dojo.dom);
 dojo.html.body=function(){
@@ -107794,24 +69600,24 @@
 return t;
 };
 dojo.html.getViewport=function(){
-var _45e=dojo.global();
-var _45f=dojo.doc();
+var _460=dojo.global();
+var _461=dojo.doc();
 var w=0;
 var h=0;
 if(dojo.render.html.mozilla){
-w=_45f.documentElement.clientWidth;
-h=_45e.innerHeight;
+w=_461.documentElement.clientWidth;
+h=_460.innerHeight;
 }else{
-if(!dojo.render.html.opera&&_45e.innerWidth){
-w=_45e.innerWidth;
-h=_45e.innerHeight;
+if(!dojo.render.html.opera&&_460.innerWidth){
+w=_460.innerWidth;
+h=_460.innerHeight;
 }else{
-if(!dojo.render.html.opera&&dojo.exists(_45f,"documentElement.clientWidth")){
-var w2=_45f.documentElement.clientWidth;
+if(!dojo.render.html.opera&&dojo.exists(_461,"documentElement.clientWidth")){
+var w2=_461.documentElement.clientWidth;
 if(!w||w2&&w2<w){
 w=w2;
 }
-h=_45f.documentElement.clientHeight;
+h=_461.documentElement.clientHeight;
 }else{
 if(dojo.body().clientWidth){
 w=dojo.body().clientWidth;
@@ -107823,23 +69629,23 @@
 return {width:w,height:h};
 };
 dojo.html.getScroll=function(){
-var _463=dojo.global();
-var _464=dojo.doc();
-var top=_463.pageYOffset||_464.documentElement.scrollTop||dojo.body().scrollTop||0;
-var left=_463.pageXOffset||_464.documentElement.scrollLeft||dojo.body().scrollLeft||0;
+var _465=dojo.global();
+var _466=dojo.doc();
+var top=_465.pageYOffset||_466.documentElement.scrollTop||dojo.body().scrollTop||0;
+var left=_465.pageXOffset||_466.documentElement.scrollLeft||dojo.body().scrollLeft||0;
 return {top:top,left:left,offset:{x:left,y:top}};
 };
 dojo.html.getParentByType=function(node,type){
-var _469=dojo.doc();
-var _46a=dojo.byId(node);
+var _46b=dojo.doc();
+var _46c=dojo.byId(node);
 type=type.toLowerCase();
-while((_46a)&&(_46a.nodeName.toLowerCase()!=type)){
-if(_46a==(_469["body"]||_469["documentElement"])){
+while((_46c)&&(_46c.nodeName.toLowerCase()!=type)){
+if(_46c==(_46b["body"]||_46b["documentElement"])){
 return null;
 }
-_46a=_46a.parentNode;
+_46c=_46c.parentNode;
 }
-return _46a;
+return _46c;
 };
 dojo.html.getAttribute=function(node,attr){
 node=dojo.byId(node);
@@ -107872,17 +69678,17 @@
 };
 dojo.html.getCursorPosition=function(e){
 e=e||dojo.global().event;
-var _472={x:0,y:0};
+var _474={x:0,y:0};
 if(e.pageX||e.pageY){
-_472.x=e.pageX;
-_472.y=e.pageY;
+_474.x=e.pageX;
+_474.y=e.pageY;
 }else{
 var de=dojo.doc().documentElement;
 var db=dojo.body();
-_472.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
-_472.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
+_474.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
+_474.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
 }
-return _472;
+return _474;
 };
 dojo.html.isTag=function(node){
 node=dojo.byId(node);
@@ -107898,9 +69704,9 @@
 if(dojo.render.html.ie&&!dojo.render.html.ie70){
 if(window.location.href.substr(0,6).toLowerCase()!="https:"){
 (function(){
-var _477=dojo.doc().createElement("script");
-_477.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
-dojo.doc().getElementsByTagName("head")[0].appendChild(_477);
+var _479=dojo.doc().createElement("script");
+_479.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
+dojo.doc().getElementsByTagName("head")[0].appendChild(_479);
 })();
 }
 }else{
@@ -107908,20 +69714,20 @@
 return doc.createElement(tag);
 };
 }
-dojo.html._callDeprecated=function(_47a,_47b,args,_47d,_47e){
-dojo.deprecated("dojo.html."+_47a,"replaced by dojo.html."+_47b+"("+(_47d?"node, {"+_47d+": "+_47d+"}":"")+")"+(_47e?"."+_47e:""),"0.5");
-var _47f=[];
-if(_47d){
-var _480={};
-_480[_47d]=args[1];
-_47f.push(args[0]);
-_47f.push(_480);
+dojo.html._callDeprecated=function(_47c,_47d,args,_47f,_480){
+dojo.deprecated("dojo.html."+_47c,"replaced by dojo.html."+_47d+"("+(_47f?"node, {"+_47f+": "+_47f+"}":"")+")"+(_480?"."+_480:""),"0.5");
+var _481=[];
+if(_47f){
+var _482={};
+_482[_47f]=args[1];
+_481.push(args[0]);
+_481.push(_482);
 }else{
-_47f=args;
+_481=args;
 }
-var ret=dojo.html[_47b].apply(dojo.html,args);
-if(_47e){
-return ret[_47e];
+var ret=dojo.html[_47d].apply(dojo.html,args);
+if(_480){
+return ret[_480];
 }else{
 return ret;
 }
@@ -107949,15 +69755,20 @@
 this.dojoUri=function(uri){
 return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(),uri);
 };
-this.moduleUri=function(_483,uri){
-var loc=dojo.hostenv.getModuleSymbols(_483).join("/");
+this.moduleUri=function(_485,uri){
+var loc=dojo.hostenv.getModuleSymbols(_485).join("/");
 if(!loc){
 return null;
 }
 if(loc.lastIndexOf("/")!=loc.length-1){
 loc+="/";
 }
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri()+loc,uri);
+var _488=loc.indexOf(":");
+var _489=loc.indexOf("/");
+if(loc.charAt(0)!="/"&&(_488==-1||_488>_489)){
+loc=dojo.hostenv.getBaseScriptUri()+loc;
+}
+return new dojo.uri.Uri(loc,uri);
 };
 this.Uri=function(){
 var uri=arguments[0];
@@ -107965,20 +69776,20 @@
 if(!arguments[i]){
 continue;
 }
-var _488=new dojo.uri.Uri(arguments[i].toString());
-var _489=new dojo.uri.Uri(uri.toString());
-if((_488.path=="")&&(_488.scheme==null)&&(_488.authority==null)&&(_488.query==null)){
-if(_488.fragment!=null){
-_489.fragment=_488.fragment;
+var _48c=new dojo.uri.Uri(arguments[i].toString());
+var _48d=new dojo.uri.Uri(uri.toString());
+if((_48c.path=="")&&(_48c.scheme==null)&&(_48c.authority==null)&&(_48c.query==null)){
+if(_48c.fragment!=null){
+_48d.fragment=_48c.fragment;
 }
-_488=_489;
+_48c=_48d;
 }else{
-if(_488.scheme==null){
-_488.scheme=_489.scheme;
-if(_488.authority==null){
-_488.authority=_489.authority;
-if(_488.path.charAt(0)!="/"){
-var path=_489.path.substring(0,_489.path.lastIndexOf("/")+1)+_488.path;
+if(_48c.scheme==null){
+_48c.scheme=_48d.scheme;
+if(_48c.authority==null){
+_48c.authority=_48d.authority;
+if(_48c.path.charAt(0)!="/"){
+var path=_48d.path.substring(0,_48d.path.lastIndexOf("/")+1)+_48c.path;
 var segs=path.split("/");
 for(var j=0;j<segs.length;j++){
 if(segs[j]=="."){
@@ -108000,37 +69811,37 @@
 }
 }
 }
-_488.path=segs.join("/");
+_48c.path=segs.join("/");
 }
 }
 }
 }
 uri="";
-if(_488.scheme!=null){
-uri+=_488.scheme+":";
+if(_48c.scheme!=null){
+uri+=_48c.scheme+":";
 }
-if(_488.authority!=null){
-uri+="//"+_488.authority;
+if(_48c.authority!=null){
+uri+="//"+_48c.authority;
 }
-uri+=_488.path;
-if(_488.query!=null){
-uri+="?"+_488.query;
+uri+=_48c.path;
+if(_48c.query!=null){
+uri+="?"+_48c.query;
 }
-if(_488.fragment!=null){
-uri+="#"+_488.fragment;
+if(_48c.fragment!=null){
+uri+="#"+_48c.fragment;
 }
 }
 this.uri=uri.toString();
-var _48d="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
-var r=this.uri.match(new RegExp(_48d));
+var _491="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
+var r=this.uri.match(new RegExp(_491));
 this.scheme=r[2]||(r[1]?"":null);
 this.authority=r[4]||(r[3]?"":null);
 this.path=r[5];
 this.query=r[7]||(r[6]?"":null);
 this.fragment=r[9]||(r[8]?"":null);
 if(this.authority!=null){
-_48d="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
-r=this.authority.match(new RegExp(_48d));
+_491="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
+r=this.authority.match(new RegExp(_491));
 this.user=r[3]||null;
 this.password=r[4]||null;
 this.host=r[5];
@@ -108061,29 +69872,29 @@
 var c=dojo.html.getClass(node);
 return (c=="")?[]:c.split(/\s+/g);
 };
-dojo.html.hasClass=function(node,_494){
-return (new RegExp("(^|\\s+)"+_494+"(\\s+|$)")).test(dojo.html.getClass(node));
+dojo.html.hasClass=function(node,_498){
+return (new RegExp("(^|\\s+)"+_498+"(\\s+|$)")).test(dojo.html.getClass(node));
 };
-dojo.html.prependClass=function(node,_496){
-_496+=" "+dojo.html.getClass(node);
-return dojo.html.setClass(node,_496);
+dojo.html.prependClass=function(node,_49a){
+_49a+=" "+dojo.html.getClass(node);
+return dojo.html.setClass(node,_49a);
 };
-dojo.html.addClass=function(node,_498){
-if(dojo.html.hasClass(node,_498)){
+dojo.html.addClass=function(node,_49c){
+if(dojo.html.hasClass(node,_49c)){
 return false;
 }
-_498=(dojo.html.getClass(node)+" "+_498).replace(/^\s+|\s+$/g,"");
-return dojo.html.setClass(node,_498);
+_49c=(dojo.html.getClass(node)+" "+_49c).replace(/^\s+|\s+$/g,"");
+return dojo.html.setClass(node,_49c);
 };
-dojo.html.setClass=function(node,_49a){
+dojo.html.setClass=function(node,_49e){
 node=dojo.byId(node);
-var cs=new String(_49a);
+var cs=new String(_49e);
 try{
 if(typeof node.className=="string"){
 node.className=cs;
 }else{
 if(node.setAttribute){
-node.setAttribute("class",_49a);
+node.setAttribute("class",_49e);
 node.className=cs;
 }else{
 return false;
@@ -108095,207 +69906,220 @@
 }
 return true;
 };
-dojo.html.removeClass=function(node,_49d,_49e){
+dojo.html.removeClass=function(node,_4a1,_4a2){
 try{
-if(!_49e){
-var _49f=dojo.html.getClass(node).replace(new RegExp("(^|\\s+)"+_49d+"(\\s+|$)"),"$1$2");
+if(!_4a2){
+var _4a3=dojo.html.getClass(node).replace(new RegExp("(^|\\s+)"+_4a1+"(\\s+|$)"),"$1$2");
 }else{
-var _49f=dojo.html.getClass(node).replace(_49d,"");
+var _4a3=dojo.html.getClass(node).replace(_4a1,"");
 }
-dojo.html.setClass(node,_49f);
+dojo.html.setClass(node,_4a3);
 }
 catch(e){
 dojo.debug("dojo.html.removeClass() failed",e);
 }
 return true;
 };
-dojo.html.replaceClass=function(node,_4a1,_4a2){
-dojo.html.removeClass(node,_4a2);
-dojo.html.addClass(node,_4a1);
+dojo.html.replaceClass=function(node,_4a5,_4a6){
+dojo.html.removeClass(node,_4a6);
+dojo.html.addClass(node,_4a5);
 };
 dojo.html.classMatchType={ContainsAll:0,ContainsAny:1,IsOnly:2};
-dojo.html.getElementsByClass=function(_4a3,_4a4,_4a5,_4a6,_4a7){
-_4a7=false;
-var _4a8=dojo.doc();
-_4a4=dojo.byId(_4a4)||_4a8;
-var _4a9=_4a3.split(/\s+/g);
-var _4aa=[];
-if(_4a6!=1&&_4a6!=2){
-_4a6=0;
+dojo.html.getElementsByClass=function(_4a7,_4a8,_4a9,_4aa,_4ab){
+_4ab=false;
+var _4ac=dojo.doc();
+_4a8=dojo.byId(_4a8)||_4ac;
+var _4ad=_4a7.split(/\s+/g);
+var _4ae=[];
+if(_4aa!=1&&_4aa!=2){
+_4aa=0;
 }
-var _4ab=new RegExp("(\\s|^)(("+_4a9.join(")|(")+"))(\\s|$)");
-var _4ac=_4a9.join(" ").length;
-var _4ad=[];
-if(!_4a7&&_4a8.evaluate){
-var _4ae=".//"+(_4a5||"*")+"[contains(";
-if(_4a6!=dojo.html.classMatchType.ContainsAny){
-_4ae+="concat(' ', at class,' '), ' "+_4a9.join(" ') and contains(concat(' ', at class,' '), ' ")+" ')";
-if(_4a6==2){
-_4ae+=" and string-length(@class)="+_4ac+"]";
+var _4af=new RegExp("(\\s|^)(("+_4ad.join(")|(")+"))(\\s|$)");
+var _4b0=_4ad.join(" ").length;
+var _4b1=[];
+if(!_4ab&&_4ac.evaluate){
+var _4b2=".//"+(_4a9||"*")+"[contains(";
+if(_4aa!=dojo.html.classMatchType.ContainsAny){
+_4b2+="concat(' ', at class,' '), ' "+_4ad.join(" ') and contains(concat(' ', at class,' '), ' ")+" ')";
+if(_4aa==2){
+_4b2+=" and string-length(@class)="+_4b0+"]";
 }else{
-_4ae+="]";
+_4b2+="]";
 }
 }else{
-_4ae+="concat(' ', at class,' '), ' "+_4a9.join(" ') or contains(concat(' ', at class,' '), ' ")+" ')]";
+_4b2+="concat(' ', at class,' '), ' "+_4ad.join(" ') or contains(concat(' ', at class,' '), ' ")+" ')]";
 }
-var _4af=_4a8.evaluate(_4ae,_4a4,null,XPathResult.ANY_TYPE,null);
-var _4b0=_4af.iterateNext();
-while(_4b0){
+var _4b3=_4ac.evaluate(_4b2,_4a8,null,XPathResult.ANY_TYPE,null);
+var _4b4=_4b3.iterateNext();
+while(_4b4){
 try{
-_4ad.push(_4b0);
-_4b0=_4af.iterateNext();
+_4b1.push(_4b4);
+_4b4=_4b3.iterateNext();
 }
 catch(e){
 break;
 }
 }
-return _4ad;
+return _4b1;
 }else{
-if(!_4a5){
-_4a5="*";
+if(!_4a9){
+_4a9="*";
 }
-_4ad=_4a4.getElementsByTagName(_4a5);
+_4b1=_4a8.getElementsByTagName(_4a9);
 var node,i=0;
 outer:
-while(node=_4ad[i++]){
-var _4b3=dojo.html.getClasses(node);
-if(_4b3.length==0){
+while(node=_4b1[i++]){
+var _4b7=dojo.html.getClasses(node);
+if(_4b7.length==0){
 continue outer;
 }
-var _4b4=0;
-for(var j=0;j<_4b3.length;j++){
-if(_4ab.test(_4b3[j])){
-if(_4a6==dojo.html.classMatchType.ContainsAny){
-_4aa.push(node);
+var _4b8=0;
+for(var j=0;j<_4b7.length;j++){
+if(_4af.test(_4b7[j])){
+if(_4aa==dojo.html.classMatchType.ContainsAny){
+_4ae.push(node);
 continue outer;
 }else{
-_4b4++;
+_4b8++;
 }
 }else{
-if(_4a6==dojo.html.classMatchType.IsOnly){
+if(_4aa==dojo.html.classMatchType.IsOnly){
 continue outer;
 }
 }
 }
-if(_4b4==_4a9.length){
-if((_4a6==dojo.html.classMatchType.IsOnly)&&(_4b4==_4b3.length)){
-_4aa.push(node);
+if(_4b8==_4ad.length){
+if((_4aa==dojo.html.classMatchType.IsOnly)&&(_4b8==_4b7.length)){
+_4ae.push(node);
 }else{
-if(_4a6==dojo.html.classMatchType.ContainsAll){
-_4aa.push(node);
+if(_4aa==dojo.html.classMatchType.ContainsAll){
+_4ae.push(node);
 }
 }
 }
 }
-return _4aa;
+return _4ae;
 }
 };
 dojo.html.getElementsByClassName=dojo.html.getElementsByClass;
-dojo.html.toCamelCase=function(_4b6){
-var arr=_4b6.split("-"),cc=arr[0];
+dojo.html.toCamelCase=function(_4ba){
+var arr=_4ba.split("-"),cc=arr[0];
 for(var i=1;i<arr.length;i++){
 cc+=arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
 }
 return cc;
 };
-dojo.html.toSelectorCase=function(_4ba){
-return _4ba.replace(/([A-Z])/g,"-$1").toLowerCase();
+dojo.html.toSelectorCase=function(_4be){
+return _4be.replace(/([A-Z])/g,"-$1").toLowerCase();
 };
-dojo.html.getComputedStyle=function(node,_4bc,_4bd){
+if(dojo.render.html.ie){
+dojo.html.getComputedStyle=function(node,_4c0,_4c1){
 node=dojo.byId(node);
-var _4bc=dojo.html.toSelectorCase(_4bc);
-var _4be=dojo.html.toCamelCase(_4bc);
 if(!node||!node.style){
-return _4bd;
-}else{
-if(document.defaultView&&dojo.html.isDescendantOf(node,node.ownerDocument)){
-try{
-var cs=document.defaultView.getComputedStyle(node,"");
-if(cs){
-return cs.getPropertyValue(_4bc);
+return _4c1;
 }
-}
-catch(e){
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_4bc);
+return node.currentStyle[dojo.html.toCamelCase(_4c0)];
+};
+dojo.html.getComputedStyles=function(node){
+return node.currentStyle;
+};
 }else{
-return _4bd;
+dojo.html.getComputedStyle=function(node,_4c4,_4c5){
+node=dojo.byId(node);
+if(!node||!node.style){
+return _4c5;
 }
-}
-}else{
-if(node.currentStyle){
-return node.currentStyle[_4be];
-}
-}
-}
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_4bc);
-}else{
-return _4bd;
-}
+var s=document.defaultView.getComputedStyle(node,null);
+return (s&&s[dojo.html.toCamelCase(_4c4)])||"";
 };
-dojo.html.getStyleProperty=function(node,_4c1){
+dojo.html.getComputedStyles=function(node){
+return document.defaultView.getComputedStyle(node,null);
+};
+}
+dojo.html.getStyleProperty=function(node,_4c9){
 node=dojo.byId(node);
-return (node&&node.style?node.style[dojo.html.toCamelCase(_4c1)]:undefined);
+return (node&&node.style?node.style[dojo.html.toCamelCase(_4c9)]:undefined);
 };
-dojo.html.getStyle=function(node,_4c3){
-var _4c4=dojo.html.getStyleProperty(node,_4c3);
-return (_4c4?_4c4:dojo.html.getComputedStyle(node,_4c3));
+dojo.html.getStyle=function(node,_4cb){
+var _4cc=dojo.html.getStyleProperty(node,_4cb);
+return (_4cc?_4cc:dojo.html.getComputedStyle(node,_4cb));
 };
-dojo.html.setStyle=function(node,_4c6,_4c7){
+dojo.html.setStyle=function(node,_4ce,_4cf){
 node=dojo.byId(node);
 if(node&&node.style){
-var _4c8=dojo.html.toCamelCase(_4c6);
-node.style[_4c8]=_4c7;
+var _4d0=dojo.html.toCamelCase(_4ce);
+node.style[_4d0]=_4cf;
 }
 };
-dojo.html.setStyleText=function(_4c9,text){
+dojo.html.setStyleText=function(_4d1,text){
 try{
-_4c9.style.cssText=text;
+_4d1.style.cssText=text;
 }
 catch(e){
-_4c9.setAttribute("style",text);
+_4d1.setAttribute("style",text);
 }
 };
-dojo.html.copyStyle=function(_4cb,_4cc){
-if(!_4cc.style.cssText){
-_4cb.setAttribute("style",_4cc.getAttribute("style"));
+dojo.html.copyStyle=function(_4d3,_4d4){
+if(!_4d4.style.cssText){
+_4d3.setAttribute("style",_4d4.getAttribute("style"));
 }else{
-_4cb.style.cssText=_4cc.style.cssText;
+_4d3.style.cssText=_4d4.style.cssText;
 }
-dojo.html.addClass(_4cb,dojo.html.getClass(_4cc));
+dojo.html.addClass(_4d3,dojo.html.getClass(_4d4));
 };
-dojo.html.getUnitValue=function(node,_4ce,_4cf){
-var s=dojo.html.getComputedStyle(node,_4ce);
-if((!s)||((s=="auto")&&(_4cf))){
+dojo.html.getUnitValue=function(node,_4d6,_4d7){
+var s=dojo.html.getComputedStyle(node,_4d6);
+if((!s)||((s=="auto")&&(_4d7))){
 return {value:0,units:"px"};
 }
-var _4d1=s.match(/(\-?[\d.]+)([a-z%]*)/i);
-if(!_4d1){
+var _4d9=s.match(/(\-?[\d.]+)([a-z%]*)/i);
+if(!_4d9){
 return dojo.html.getUnitValue.bad;
 }
-return {value:Number(_4d1[1]),units:_4d1[2].toLowerCase()};
+return {value:Number(_4d9[1]),units:_4d9[2].toLowerCase()};
 };
 dojo.html.getUnitValue.bad={value:NaN,units:""};
-dojo.html.getPixelValue=function(node,_4d3,_4d4){
-var _4d5=dojo.html.getUnitValue(node,_4d3,_4d4);
-if(isNaN(_4d5.value)){
+if(dojo.render.html.ie){
+dojo.html.toPixelValue=function(_4da,_4db){
+if(!_4db){
 return 0;
 }
-if((_4d5.value)&&(_4d5.units!="px")){
-return NaN;
+if(_4db.slice(-2)=="px"){
+return parseFloat(_4db);
 }
-return _4d5.value;
+var _4dc=0;
+with(_4da){
+var _4dd=style.left;
+var _4de=runtimeStyle.left;
+runtimeStyle.left=currentStyle.left;
+try{
+style.left=_4db||0;
+_4dc=style.pixelLeft;
+style.left=_4dd;
+runtimeStyle.left=_4de;
+}
+catch(e){
+}
+}
+return _4dc;
 };
-dojo.html.setPositivePixelValue=function(node,_4d7,_4d8){
-if(isNaN(_4d8)){
+}else{
+dojo.html.toPixelValue=function(_4df,_4e0){
+return (_4e0&&(_4e0.slice(-2)=="px")?parseFloat(_4e0):0);
+};
+}
+dojo.html.getPixelValue=function(node,_4e2,_4e3){
+return dojo.html.toPixelValue(node,dojo.html.getComputedStyle(node,_4e2));
+};
+dojo.html.setPositivePixelValue=function(node,_4e5,_4e6){
+if(isNaN(_4e6)){
 return false;
 }
-node.style[_4d7]=Math.max(0,_4d8)+"px";
+node.style[_4e5]=Math.max(0,_4e6)+"px";
 return true;
 };
 dojo.html.styleSheet=null;
-dojo.html.insertCssRule=function(_4d9,_4da,_4db){
+dojo.html.insertCssRule=function(_4e7,_4e8,_4e9){
 if(!dojo.html.styleSheet){
 if(document.createStyleSheet){
 dojo.html.styleSheet=document.createStyleSheet();
@@ -108309,161 +70133,161 @@
 }
 if(arguments.length<3){
 if(dojo.html.styleSheet.cssRules){
-_4db=dojo.html.styleSheet.cssRules.length;
+_4e9=dojo.html.styleSheet.cssRules.length;
 }else{
 if(dojo.html.styleSheet.rules){
-_4db=dojo.html.styleSheet.rules.length;
+_4e9=dojo.html.styleSheet.rules.length;
 }else{
 return null;
 }
 }
 }
 if(dojo.html.styleSheet.insertRule){
-var rule=_4d9+" { "+_4da+" }";
-return dojo.html.styleSheet.insertRule(rule,_4db);
+var rule=_4e7+" { "+_4e8+" }";
+return dojo.html.styleSheet.insertRule(rule,_4e9);
 }else{
 if(dojo.html.styleSheet.addRule){
-return dojo.html.styleSheet.addRule(_4d9,_4da,_4db);
+return dojo.html.styleSheet.addRule(_4e7,_4e8,_4e9);
 }else{
 return null;
 }
 }
 };
-dojo.html.removeCssRule=function(_4dd){
+dojo.html.removeCssRule=function(_4eb){
 if(!dojo.html.styleSheet){
 dojo.debug("no stylesheet defined for removing rules");
 return false;
 }
 if(dojo.render.html.ie){
-if(!_4dd){
-_4dd=dojo.html.styleSheet.rules.length;
-dojo.html.styleSheet.removeRule(_4dd);
+if(!_4eb){
+_4eb=dojo.html.styleSheet.rules.length;
+dojo.html.styleSheet.removeRule(_4eb);
 }
 }else{
 if(document.styleSheets[0]){
-if(!_4dd){
-_4dd=dojo.html.styleSheet.cssRules.length;
+if(!_4eb){
+_4eb=dojo.html.styleSheet.cssRules.length;
 }
-dojo.html.styleSheet.deleteRule(_4dd);
+dojo.html.styleSheet.deleteRule(_4eb);
 }
 }
 return true;
 };
 dojo.html._insertedCssFiles=[];
-dojo.html.insertCssFile=function(URI,doc,_4e0,_4e1){
+dojo.html.insertCssFile=function(URI,doc,_4ee,_4ef){
 if(!URI){
 return;
 }
 if(!doc){
 doc=document;
 }
-var _4e2=dojo.hostenv.getText(URI,false,_4e1);
-if(_4e2===null){
+var _4f0=dojo.hostenv.getText(URI,false,_4ef);
+if(_4f0===null){
 return;
 }
-_4e2=dojo.html.fixPathsInCssText(_4e2,URI);
-if(_4e0){
+_4f0=dojo.html.fixPathsInCssText(_4f0,URI);
+if(_4ee){
 var idx=-1,node,ent=dojo.html._insertedCssFiles;
 for(var i=0;i<ent.length;i++){
-if((ent[i].doc==doc)&&(ent[i].cssText==_4e2)){
+if((ent[i].doc==doc)&&(ent[i].cssText==_4f0)){
 idx=i;
 node=ent[i].nodeRef;
 break;
 }
 }
 if(node){
-var _4e7=doc.getElementsByTagName("style");
-for(var i=0;i<_4e7.length;i++){
-if(_4e7[i]==node){
+var _4f5=doc.getElementsByTagName("style");
+for(var i=0;i<_4f5.length;i++){
+if(_4f5[i]==node){
 return;
 }
 }
 dojo.html._insertedCssFiles.shift(idx,1);
 }
 }
-var _4e8=dojo.html.insertCssText(_4e2,doc);
-dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_4e2,"nodeRef":_4e8});
-if(_4e8&&djConfig.isDebug){
-_4e8.setAttribute("dbgHref",URI);
+var _4f6=dojo.html.insertCssText(_4f0,doc);
+dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_4f0,"nodeRef":_4f6});
+if(_4f6&&djConfig.isDebug){
+_4f6.setAttribute("dbgHref",URI);
 }
-return _4e8;
+return _4f6;
 };
-dojo.html.insertCssText=function(_4e9,doc,URI){
-if(!_4e9){
+dojo.html.insertCssText=function(_4f7,doc,URI){
+if(!_4f7){
 return;
 }
 if(!doc){
 doc=document;
 }
 if(URI){
-_4e9=dojo.html.fixPathsInCssText(_4e9,URI);
+_4f7=dojo.html.fixPathsInCssText(_4f7,URI);
 }
-var _4ec=doc.createElement("style");
-_4ec.setAttribute("type","text/css");
+var _4fa=doc.createElement("style");
+_4fa.setAttribute("type","text/css");
 var head=doc.getElementsByTagName("head")[0];
 if(!head){
 dojo.debug("No head tag in document, aborting styles");
 return;
 }else{
-head.appendChild(_4ec);
+head.appendChild(_4fa);
 }
-if(_4ec.styleSheet){
-var _4ee=function(){
+if(_4fa.styleSheet){
+var _4fc=function(){
 try{
-_4ec.styleSheet.cssText=_4e9;
+_4fa.styleSheet.cssText=_4f7;
 }
 catch(e){
 dojo.debug(e);
 }
 };
-if(_4ec.styleSheet.disabled){
-setTimeout(_4ee,10);
+if(_4fa.styleSheet.disabled){
+setTimeout(_4fc,10);
 }else{
-_4ee();
+_4fc();
 }
 }else{
-var _4ef=doc.createTextNode(_4e9);
-_4ec.appendChild(_4ef);
+var _4fd=doc.createTextNode(_4f7);
+_4fa.appendChild(_4fd);
 }
-return _4ec;
+return _4fa;
 };
-dojo.html.fixPathsInCssText=function(_4f0,URI){
-if(!_4f0||!URI){
+dojo.html.fixPathsInCssText=function(_4fe,URI){
+if(!_4fe||!URI){
 return;
 }
-var _4f2,str="",url="",_4f5="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
-var _4f6=new RegExp("url\\(\\s*("+_4f5+")\\s*\\)");
-var _4f7=/(file|https?|ftps?):\/\//;
-regexTrim=new RegExp("^[\\s]*(['\"]?)("+_4f5+")\\1[\\s]*?$");
+var _500,str="",url="",_503="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
+var _504=new RegExp("url\\(\\s*("+_503+")\\s*\\)");
+var _505=/(file|https?|ftps?):\/\//;
+regexTrim=new RegExp("^[\\s]*(['\"]?)("+_503+")\\1[\\s]*?$");
 if(dojo.render.html.ie55||dojo.render.html.ie60){
-var _4f8=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_4f5+")['\"]");
-while(_4f2=_4f8.exec(_4f0)){
-url=_4f2[2].replace(regexTrim,"$2");
-if(!_4f7.exec(url)){
+var _506=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_503+")['\"]");
+while(_500=_506.exec(_4fe)){
+url=_500[2].replace(regexTrim,"$2");
+if(!_505.exec(url)){
 url=(new dojo.uri.Uri(URI,url).toString());
 }
-str+=_4f0.substring(0,_4f2.index)+"AlphaImageLoader("+_4f2[1]+"src='"+url+"'";
-_4f0=_4f0.substr(_4f2.index+_4f2[0].length);
+str+=_4fe.substring(0,_500.index)+"AlphaImageLoader("+_500[1]+"src='"+url+"'";
+_4fe=_4fe.substr(_500.index+_500[0].length);
 }
-_4f0=str+_4f0;
+_4fe=str+_4fe;
 str="";
 }
-while(_4f2=_4f6.exec(_4f0)){
-url=_4f2[1].replace(regexTrim,"$2");
-if(!_4f7.exec(url)){
+while(_500=_504.exec(_4fe)){
+url=_500[1].replace(regexTrim,"$2");
+if(!_505.exec(url)){
 url=(new dojo.uri.Uri(URI,url).toString());
 }
-str+=_4f0.substring(0,_4f2.index)+"url("+url+")";
-_4f0=_4f0.substr(_4f2.index+_4f2[0].length);
+str+=_4fe.substring(0,_500.index)+"url("+url+")";
+_4fe=_4fe.substr(_500.index+_500[0].length);
 }
-return str+_4f0;
+return str+_4fe;
 };
-dojo.html.setActiveStyleSheet=function(_4f9){
+dojo.html.setActiveStyleSheet=function(_507){
 var i=0,a,els=dojo.doc().getElementsByTagName("link");
 while(a=els[i++]){
 if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")){
 a.disabled=true;
-if(a.getAttribute("title")==_4f9){
+if(a.getAttribute("title")==_507){
 a.disabled=false;
 }
 }
@@ -108489,18 +70313,18 @@
 };
 dojo.html.applyBrowserClass=function(node){
 var drh=dojo.render.html;
-var _505={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
-for(var p in _505){
-if(_505[p]){
+var _513={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
+for(var p in _513){
+if(_513[p]){
 dojo.html.addClass(node,p);
 }
 }
 };
 dojo.provide("dojo.html.display");
-dojo.html._toggle=function(node,_508,_509){
+dojo.html._toggle=function(node,_516,_517){
 node=dojo.byId(node);
-_509(node,!_508(node));
-return _508(node);
+_517(node,!_516(node));
+return _516(node);
 };
 dojo.html.show=function(node){
 node=dojo.byId(node);
@@ -108519,8 +70343,8 @@
 }
 dojo.html.setStyle(node,"display","none");
 };
-dojo.html.setShowing=function(node,_50e){
-dojo.html[(_50e?"show":"hide")](node);
+dojo.html.setShowing=function(node,_51c){
+dojo.html[(_51c?"show":"hide")](node);
 };
 dojo.html.isShowing=function(node){
 return (dojo.html.getStyleProperty(node,"display")!="none");
@@ -108536,8 +70360,8 @@
 return (tag in dojo.html.displayMap?dojo.html.displayMap[tag]:"block");
 }
 };
-dojo.html.setDisplay=function(node,_514){
-dojo.html.setStyle(node,"display",((_514 instanceof String||typeof _514=="string")?_514:(_514?dojo.html.suggestDisplayByTagName(node):"none")));
+dojo.html.setDisplay=function(node,_522){
+dojo.html.setStyle(node,"display",((_522 instanceof String||typeof _522=="string")?_522:(_522?dojo.html.suggestDisplayByTagName(node):"none")));
 };
 dojo.html.isDisplayed=function(node){
 return (dojo.html.getComputedStyle(node,"display")!="none");
@@ -108545,8 +70369,8 @@
 dojo.html.toggleDisplay=function(node){
 return dojo.html._toggle(node,dojo.html.isDisplayed,dojo.html.setDisplay);
 };
-dojo.html.setVisibility=function(node,_518){
-dojo.html.setStyle(node,"visibility",((_518 instanceof String||typeof _518=="string")?_518:(_518?"visible":"hidden")));
+dojo.html.setVisibility=function(node,_526){
+dojo.html.setStyle(node,"visibility",((_526 instanceof String||typeof _526=="string")?_526:(_526?"visible":"hidden")));
 };
 dojo.html.isVisible=function(node){
 return (dojo.html.getComputedStyle(node,"visibility")!="hidden");
@@ -108554,20 +70378,20 @@
 dojo.html.toggleVisibility=function(node){
 return dojo.html._toggle(node,dojo.html.isVisible,dojo.html.setVisibility);
 };
-dojo.html.setOpacity=function(node,_51c,_51d){
+dojo.html.setOpacity=function(node,_52a,_52b){
 node=dojo.byId(node);
 var h=dojo.render.html;
-if(!_51d){
-if(_51c>=1){
+if(!_52b){
+if(_52a>=1){
 if(h.ie){
 dojo.html.clearOpacity(node);
 return;
 }else{
-_51c=0.999999;
+_52a=0.999999;
 }
 }else{
-if(_51c<0){
-_51c=0;
+if(_52a<0){
+_52a=0;
 }
 }
 }
@@ -108575,20 +70399,20 @@
 if(node.nodeName.toLowerCase()=="tr"){
 var tds=node.getElementsByTagName("td");
 for(var x=0;x<tds.length;x++){
-tds[x].style.filter="Alpha(Opacity="+_51c*100+")";
+tds[x].style.filter="Alpha(Opacity="+_52a*100+")";
 }
 }
-node.style.filter="Alpha(Opacity="+_51c*100+")";
+node.style.filter="Alpha(Opacity="+_52a*100+")";
 }else{
 if(h.moz){
-node.style.opacity=_51c;
-node.style.MozOpacity=_51c;
+node.style.opacity=_52a;
+node.style.MozOpacity=_52a;
 }else{
 if(h.safari){
-node.style.opacity=_51c;
-node.style.KhtmlOpacity=_51c;
+node.style.opacity=_52a;
+node.style.KhtmlOpacity=_52a;
 }else{
-node.style.opacity=_51c;
+node.style.opacity=_52a;
 }
 }
 }
@@ -108632,24 +70456,24 @@
 dojo.provide("dojo.html.color");
 dojo.html.getBackgroundColor=function(node){
 node=dojo.byId(node);
-var _528;
+var _536;
 do{
-_528=dojo.html.getStyle(node,"background-color");
-if(_528.toLowerCase()=="rgba(0, 0, 0, 0)"){
-_528="transparent";
+_536=dojo.html.getStyle(node,"background-color");
+if(_536.toLowerCase()=="rgba(0, 0, 0, 0)"){
+_536="transparent";
 }
 if(node==document.getElementsByTagName("body")[0]){
 node=null;
 break;
 }
 node=node.parentNode;
-}while(node&&dojo.lang.inArray(["transparent",""],_528));
-if(_528=="transparent"){
-_528=[255,255,255,0];
+}while(node&&dojo.lang.inArray(["transparent",""],_536));
+if(_536=="transparent"){
+_536=[255,255,255,0];
 }else{
-_528=dojo.gfx.color.extractRGB(_528);
+_536=dojo.gfx.color.extractRGB(_536);
 }
-return _528;
+return _536;
 };
 dojo.provide("dojo.html.layout");
 dojo.html.sumAncestorProperties=function(node,prop){
@@ -108657,73 +70481,73 @@
 if(!node){
 return 0;
 }
-var _52b=0;
+var _539=0;
 while(node){
 if(dojo.html.getComputedStyle(node,"position")=="fixed"){
 return 0;
 }
 var val=node[prop];
 if(val){
-_52b+=val-0;
+_539+=val-0;
 if(node==dojo.body()){
 break;
 }
 }
 node=node.parentNode;
 }
-return _52b;
+return _539;
 };
-dojo.html.setStyleAttributes=function(node,_52e){
+dojo.html.setStyleAttributes=function(node,_53c){
 node=dojo.byId(node);
-var _52f=_52e.replace(/(;)?\s*$/,"").split(";");
-for(var i=0;i<_52f.length;i++){
-var _531=_52f[i].split(":");
-var name=_531[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
-var _533=_531[1].replace(/\s*$/,"").replace(/^\s*/,"");
+var _53d=_53c.replace(/(;)?\s*$/,"").split(";");
+for(var i=0;i<_53d.length;i++){
+var _53f=_53d[i].split(":");
+var name=_53f[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
+var _541=_53f[1].replace(/\s*$/,"").replace(/^\s*/,"");
 switch(name){
 case "opacity":
-dojo.html.setOpacity(node,_533);
+dojo.html.setOpacity(node,_541);
 break;
 case "content-height":
-dojo.html.setContentBox(node,{height:_533});
+dojo.html.setContentBox(node,{height:_541});
 break;
 case "content-width":
-dojo.html.setContentBox(node,{width:_533});
+dojo.html.setContentBox(node,{width:_541});
 break;
 case "outer-height":
-dojo.html.setMarginBox(node,{height:_533});
+dojo.html.setMarginBox(node,{height:_541});
 break;
 case "outer-width":
-dojo.html.setMarginBox(node,{width:_533});
+dojo.html.setMarginBox(node,{width:_541});
 break;
 default:
-node.style[dojo.html.toCamelCase(name)]=_533;
+node.style[dojo.html.toCamelCase(name)]=_541;
 }
 }
 };
 dojo.html.boxSizing={MARGIN_BOX:"margin-box",BORDER_BOX:"border-box",PADDING_BOX:"padding-box",CONTENT_BOX:"content-box"};
-dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_535,_536){
+dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_543,_544){
 node=dojo.byId(node,node.ownerDocument);
 var ret={x:0,y:0};
 var bs=dojo.html.boxSizing;
-if(!_536){
-_536=bs.CONTENT_BOX;
+if(!_544){
+_544=bs.CONTENT_BOX;
 }
-var _539=2;
-var _53a;
-switch(_536){
+var _547=2;
+var _548;
+switch(_544){
 case bs.MARGIN_BOX:
-_53a=3;
+_548=3;
 break;
 case bs.BORDER_BOX:
-_53a=2;
+_548=2;
 break;
 case bs.PADDING_BOX:
 default:
-_53a=1;
+_548=1;
 break;
 case bs.CONTENT_BOX:
-_53a=0;
+_548=0;
 break;
 }
 var h=dojo.render.html;
@@ -108735,7 +70559,7 @@
 }
 }else{
 if(document.getBoxObjectFor){
-_539=1;
+_547=1;
 try{
 var bo=document.getBoxObjectFor(node);
 ret.x=bo.x-dojo.html.sumAncestorProperties(node,"scrollLeft");
@@ -108745,11 +70569,11 @@
 }
 }else{
 if(node["offsetParent"]){
-var _53e;
+var _54c;
 if((h.safari)&&(node.style.getPropertyValue("position")=="absolute")&&(node.parentNode==db)){
-_53e=db;
+_54c=db;
 }else{
-_53e=db.parentNode;
+_54c=db.parentNode;
 }
 if(node.parentNode!=db){
 var nd=node;
@@ -108759,16 +70583,16 @@
 ret.x-=dojo.html.sumAncestorProperties(nd,"scrollLeft");
 ret.y-=dojo.html.sumAncestorProperties(nd,"scrollTop");
 }
-var _540=node;
+var _54e=node;
 do{
-var n=_540["offsetLeft"];
+var n=_54e["offsetLeft"];
 if(!h.opera||n>0){
 ret.x+=isNaN(n)?0:n;
 }
-var m=_540["offsetTop"];
+var m=_54e["offsetTop"];
 ret.y+=isNaN(m)?0:m;
-_540=_540.offsetParent;
-}while((_540!=_53e)&&(_540!=null));
+_54e=_54e.offsetParent;
+}while((_54e!=_54c)&&(_54e!=null));
 }else{
 if(node["x"]&&node["y"]){
 ret.x+=isNaN(node.x)?0:node.x;
@@ -108777,22 +70601,22 @@
 }
 }
 }
-if(_535){
-var _543=dojo.html.getScroll();
-ret.y+=_543.top;
-ret.x+=_543.left;
+if(_543){
+var _551=dojo.html.getScroll();
+ret.y+=_551.top;
+ret.x+=_551.left;
 }
-var _544=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
-if(_539>_53a){
-for(var i=_53a;i<_539;++i){
-ret.y+=_544[i](node,"top");
-ret.x+=_544[i](node,"left");
+var _552=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
+if(_547>_548){
+for(var i=_548;i<_547;++i){
+ret.y+=_552[i](node,"top");
+ret.x+=_552[i](node,"left");
 }
 }else{
-if(_539<_53a){
-for(var i=_53a;i>_539;--i){
-ret.y-=_544[i-1](node,"top");
-ret.x-=_544[i-1](node,"left");
+if(_547<_548){
+for(var i=_548;i>_547;--i){
+ret.y-=_552[i-1](node,"top");
+ret.x-=_552[i-1](node,"left");
 }
 }
 }
@@ -108803,12 +70627,12 @@
 dojo.html.isPositionAbsolute=function(node){
 return (dojo.html.getComputedStyle(node,"position")=="absolute");
 };
-dojo.html._sumPixelValues=function(node,_548,_549){
-var _54a=0;
-for(var x=0;x<_548.length;x++){
-_54a+=dojo.html.getPixelValue(node,_548[x],_549);
+dojo.html._sumPixelValues=function(node,_556,_557){
+var _558=0;
+for(var x=0;x<_556.length;x++){
+_558+=dojo.html.getPixelValue(node,_556[x],_557);
 }
-return _54a;
+return _558;
 };
 dojo.html.getMargin=function(node){
 return {width:dojo.html._sumPixelValues(node,["margin-left","margin-right"],(dojo.html.getComputedStyle(node,"position")=="absolute")),height:dojo.html._sumPixelValues(node,["margin-top","margin-bottom"],(dojo.html.getComputedStyle(node,"position")=="absolute"))};
@@ -108830,13 +70654,13 @@
 };
 dojo.html.getPadBorder=function(node){
 var pad=dojo.html.getPadding(node);
-var _557=dojo.html.getBorder(node);
-return {width:pad.width+_557.width,height:pad.height+_557.height};
+var _565=dojo.html.getBorder(node);
+return {width:pad.width+_565.width,height:pad.height+_565.height};
 };
 dojo.html.getBoxSizing=function(node){
 var h=dojo.render.html;
 var bs=dojo.html.boxSizing;
-if(((h.ie)||(h.opera))&&node.nodeName!="IMG"){
+if(((h.ie)||(h.opera))&&node.nodeName.toLowerCase()!="img"){
 var cm=document["compatMode"];
 if((cm=="BackCompat")||(cm=="QuirksMode")){
 return bs.BORDER_BOX;
@@ -108847,12 +70671,15 @@
 if(arguments.length==0){
 node=document.documentElement;
 }
-var _55c=dojo.html.getStyle(node,"-moz-box-sizing");
-if(!_55c){
-_55c=dojo.html.getStyle(node,"box-sizing");
+var _56a;
+if(!h.ie){
+_56a=dojo.html.getStyle(node,"-moz-box-sizing");
+if(!_56a){
+_56a=dojo.html.getStyle(node,"box-sizing");
 }
-return (_55c?_55c:bs.CONTENT_BOX);
 }
+return (_56a?_56a:bs.CONTENT_BOX);
+}
 };
 dojo.html.isBorderBox=function(node){
 return (dojo.html.getBoxSizing(node)==dojo.html.boxSizing.BORDER_BOX);
@@ -108863,53 +70690,53 @@
 };
 dojo.html.getPaddingBox=function(node){
 var box=dojo.html.getBorderBox(node);
-var _561=dojo.html.getBorder(node);
-return {width:box.width-_561.width,height:box.height-_561.height};
+var _56f=dojo.html.getBorder(node);
+return {width:box.width-_56f.width,height:box.height-_56f.height};
 };
 dojo.html.getContentBox=function(node){
 node=dojo.byId(node);
-var _563=dojo.html.getPadBorder(node);
-return {width:node.offsetWidth-_563.width,height:node.offsetHeight-_563.height};
+var _571=dojo.html.getPadBorder(node);
+return {width:node.offsetWidth-_571.width,height:node.offsetHeight-_571.height};
 };
 dojo.html.setContentBox=function(node,args){
 node=dojo.byId(node);
-var _566=0;
-var _567=0;
+var _574=0;
+var _575=0;
 var isbb=dojo.html.isBorderBox(node);
-var _569=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
+var _577=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
 var ret={};
 if(typeof args.width!="undefined"){
-_566=args.width+_569.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_566);
+_574=args.width+_577.width;
+ret.width=dojo.html.setPositivePixelValue(node,"width",_574);
 }
 if(typeof args.height!="undefined"){
-_567=args.height+_569.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_567);
+_575=args.height+_577.height;
+ret.height=dojo.html.setPositivePixelValue(node,"height",_575);
 }
 return ret;
 };
 dojo.html.getMarginBox=function(node){
-var _56c=dojo.html.getBorderBox(node);
-var _56d=dojo.html.getMargin(node);
-return {width:_56c.width+_56d.width,height:_56c.height+_56d.height};
+var _57a=dojo.html.getBorderBox(node);
+var _57b=dojo.html.getMargin(node);
+return {width:_57a.width+_57b.width,height:_57a.height+_57b.height};
 };
 dojo.html.setMarginBox=function(node,args){
 node=dojo.byId(node);
-var _570=0;
-var _571=0;
+var _57e=0;
+var _57f=0;
 var isbb=dojo.html.isBorderBox(node);
-var _573=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
-var _574=dojo.html.getMargin(node);
+var _581=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
+var _582=dojo.html.getMargin(node);
 var ret={};
 if(typeof args.width!="undefined"){
-_570=args.width-_573.width;
-_570-=_574.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_570);
+_57e=args.width-_581.width;
+_57e-=_582.width;
+ret.width=dojo.html.setPositivePixelValue(node,"width",_57e);
 }
 if(typeof args.height!="undefined"){
-_571=args.height-_573.height;
-_571-=_574.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_571);
+_57f=args.height-_581.height;
+_57f-=_582.height;
+ret.height=dojo.html.setPositivePixelValue(node,"height",_57f);
 }
 return ret;
 };
@@ -108927,31 +70754,31 @@
 return dojo.html.getContentBox(node);
 }
 };
-dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_579,_57a,_57b){
-if(_579 instanceof Array||typeof _579=="array"){
+dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_587,_588,_589){
+if(_587 instanceof Array||typeof _587=="array"){
 dojo.deprecated("dojo.html.toCoordinateArray","use dojo.html.toCoordinateObject({left: , top: , width: , height: }) instead","0.5");
-while(_579.length<4){
-_579.push(0);
+while(_587.length<4){
+_587.push(0);
 }
-while(_579.length>4){
-_579.pop();
+while(_587.length>4){
+_587.pop();
 }
-var ret={left:_579[0],top:_579[1],width:_579[2],height:_579[3]};
+var ret={left:_587[0],top:_587[1],width:_587[2],height:_587[3]};
 }else{
-if(!_579.nodeType&&!(_579 instanceof String||typeof _579=="string")&&("width" in _579||"height" in _579||"left" in _579||"x" in _579||"top" in _579||"y" in _579)){
-var ret={left:_579.left||_579.x||0,top:_579.top||_579.y||0,width:_579.width||0,height:_579.height||0};
+if(!_587.nodeType&&!(_587 instanceof String||typeof _587=="string")&&("width" in _587||"height" in _587||"left" in _587||"x" in _587||"top" in _587||"y" in _587)){
+var ret={left:_587.left||_587.x||0,top:_587.top||_587.y||0,width:_587.width||0,height:_587.height||0};
 }else{
-var node=dojo.byId(_579);
-var pos=dojo.html.abs(node,_57a,_57b);
-var _57f=dojo.html.getMarginBox(node);
-var ret={left:pos.left,top:pos.top,width:_57f.width,height:_57f.height};
+var node=dojo.byId(_587);
+var pos=dojo.html.abs(node,_588,_589);
+var _58d=dojo.html.getMarginBox(node);
+var ret={left:pos.left,top:pos.top,width:_58d.width,height:_58d.height};
 }
 }
 ret.x=ret.left;
 ret.y=ret.top;
 return ret;
 };
-dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_581){
+dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_58f){
 return dojo.html._callDeprecated("setMarginBoxWidth","setMarginBox",arguments,"width");
 };
 dojo.html.setMarginBoxHeight=dojo.html.setOuterHeight=function(){
@@ -108963,19 +70790,19 @@
 dojo.html.getMarginBoxHeight=dojo.html.getOuterHeight=function(){
 return dojo.html._callDeprecated("getMarginBoxHeight","getMarginBox",arguments,null,"height");
 };
-dojo.html.getTotalOffset=function(node,type,_584){
+dojo.html.getTotalOffset=function(node,type,_592){
 return dojo.html._callDeprecated("getTotalOffset","getAbsolutePosition",arguments,null,type);
 };
-dojo.html.getAbsoluteX=function(node,_586){
+dojo.html.getAbsoluteX=function(node,_594){
 return dojo.html._callDeprecated("getAbsoluteX","getAbsolutePosition",arguments,null,"x");
 };
-dojo.html.getAbsoluteY=function(node,_588){
+dojo.html.getAbsoluteY=function(node,_596){
 return dojo.html._callDeprecated("getAbsoluteY","getAbsolutePosition",arguments,null,"y");
 };
-dojo.html.totalOffsetLeft=function(node,_58a){
+dojo.html.totalOffsetLeft=function(node,_598){
 return dojo.html._callDeprecated("totalOffsetLeft","getAbsolutePosition",arguments,null,"left");
 };
-dojo.html.totalOffsetTop=function(node,_58c){
+dojo.html.totalOffsetTop=function(node,_59a){
 return dojo.html._callDeprecated("totalOffsetTop","getAbsolutePosition",arguments,null,"top");
 };
 dojo.html.getMarginWidth=function(node){
@@ -109014,46 +70841,46 @@
 dojo.html.getContentBoxHeight=dojo.html.getContentHeight=function(){
 return dojo.html._callDeprecated("getContentBoxHeight","getContentBox",arguments,null,"height");
 };
-dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_596){
+dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_5a4){
 return dojo.html._callDeprecated("setContentBoxWidth","setContentBox",arguments,"width");
 };
-dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_598){
+dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_5a6){
 return dojo.html._callDeprecated("setContentBoxHeight","setContentBox",arguments,"height");
 };
 dojo.provide("dojo.lfx.html");
-dojo.lfx.html._byId=function(_599){
-if(!_599){
+dojo.lfx.html._byId=function(_5a7){
+if(!_5a7){
 return [];
 }
-if(dojo.lang.isArrayLike(_599)){
-if(!_599.alreadyChecked){
+if(dojo.lang.isArrayLike(_5a7)){
+if(!_5a7.alreadyChecked){
 var n=[];
-dojo.lang.forEach(_599,function(node){
+dojo.lang.forEach(_5a7,function(node){
 n.push(dojo.byId(node));
 });
 n.alreadyChecked=true;
 return n;
 }else{
-return _599;
+return _5a7;
 }
 }else{
 var n=[];
-n.push(dojo.byId(_599));
+n.push(dojo.byId(_5a7));
 n.alreadyChecked=true;
 return n;
 }
 };
-dojo.lfx.html.propertyAnimation=function(_59c,_59d,_59e,_59f,_5a0){
-_59c=dojo.lfx.html._byId(_59c);
-var _5a1={"propertyMap":_59d,"nodes":_59c,"duration":_59e,"easing":_59f||dojo.lfx.easeDefault};
-var _5a2=function(args){
+dojo.lfx.html.propertyAnimation=function(_5aa,_5ab,_5ac,_5ad,_5ae){
+_5aa=dojo.lfx.html._byId(_5aa);
+var _5af={"propertyMap":_5ab,"nodes":_5aa,"duration":_5ac,"easing":_5ad||dojo.lfx.easeDefault};
+var _5b0=function(args){
 if(args.nodes.length==1){
 var pm=args.propertyMap;
 if(!dojo.lang.isArray(args.propertyMap)){
 var parr=[];
-for(var _5a6 in pm){
-pm[_5a6].property=_5a6;
-parr.push(pm[_5a6]);
+for(var _5b4 in pm){
+pm[_5b4].property=_5b4;
+parr.push(pm[_5b4]);
 }
 pm=args.propertyMap=parr;
 }
@@ -109068,24 +70895,24 @@
 });
 }
 };
-var _5a8=function(_5a9){
-var _5aa=[];
-dojo.lang.forEach(_5a9,function(c){
-_5aa.push(Math.round(c));
+var _5b6=function(_5b7){
+var _5b8=[];
+dojo.lang.forEach(_5b7,function(c){
+_5b8.push(Math.round(c));
 });
-return _5aa;
+return _5b8;
 };
-var _5ac=function(n,_5ae){
+var _5ba=function(n,_5bc){
 n=dojo.byId(n);
 if(!n||!n.style){
 return;
 }
-for(var s in _5ae){
+for(var s in _5bc){
 try{
 if(s=="opacity"){
-dojo.html.setOpacity(n,_5ae[s]);
+dojo.html.setOpacity(n,_5bc[s]);
 }else{
-n.style[s]=_5ae[s];
+n.style[s]=_5bc[s];
 }
 }
 catch(e){
@@ -109093,10 +70920,10 @@
 }
 }
 };
-var _5b0=function(_5b1){
-this._properties=_5b1;
-this.diffs=new Array(_5b1.length);
-dojo.lang.forEach(_5b1,function(prop,i){
+var _5be=function(_5bf){
+this._properties=_5bf;
+this.diffs=new Array(_5bf.length);
+dojo.lang.forEach(_5bf,function(prop,i){
 if(dojo.lang.isFunction(prop.start)){
 prop.start=prop.start(prop,i);
 }
@@ -109117,43 +70944,43 @@
 this.getValue=function(n){
 var ret={};
 dojo.lang.forEach(this._properties,function(prop,i){
-var _5b8=null;
+var _5c6=null;
 if(dojo.lang.isArray(prop.start)){
 }else{
 if(prop.start instanceof dojo.gfx.color.Color){
-_5b8=(prop.units||"rgb")+"(";
+_5c6=(prop.units||"rgb")+"(";
 for(var j=0;j<prop.startRgb.length;j++){
-_5b8+=Math.round(((prop.endRgb[j]-prop.startRgb[j])*n)+prop.startRgb[j])+(j<prop.startRgb.length-1?",":"");
+_5c6+=Math.round(((prop.endRgb[j]-prop.startRgb[j])*n)+prop.startRgb[j])+(j<prop.startRgb.length-1?",":"");
 }
-_5b8+=")";
+_5c6+=")";
 }else{
-_5b8=((this.diffs[i])*n)+prop.start+(prop.property!="opacity"?prop.units||"px":"");
+_5c6=((this.diffs[i])*n)+prop.start+(prop.property!="opacity"?prop.units||"px":"");
 }
 }
-ret[dojo.html.toCamelCase(prop.property)]=_5b8;
+ret[dojo.html.toCamelCase(prop.property)]=_5c6;
 },this);
 return ret;
 };
 };
 var anim=new dojo.lfx.Animation({beforeBegin:function(){
-_5a2(_5a1);
-anim.curve=new _5b0(_5a1.propertyMap);
-},onAnimate:function(_5bb){
-dojo.lang.forEach(_5a1.nodes,function(node){
-_5ac(node,_5bb);
+_5b0(_5af);
+anim.curve=new _5be(_5af.propertyMap);
+},onAnimate:function(_5c9){
+dojo.lang.forEach(_5af.nodes,function(node){
+_5ba(node,_5c9);
 });
-}},_5a1.duration,null,_5a1.easing);
-if(_5a0){
-for(var x in _5a0){
-if(dojo.lang.isFunction(_5a0[x])){
-anim.connect(x,anim,_5a0[x]);
+}},_5af.duration,null,_5af.easing);
+if(_5ae){
+for(var x in _5ae){
+if(dojo.lang.isFunction(_5ae[x])){
+anim.connect(x,anim,_5ae[x]);
 }
 }
 }
 return anim;
 };
-dojo.lfx.html._makeFadeable=function(_5be){
-var _5bf=function(node){
+dojo.lfx.html._makeFadeable=function(_5cc){
+var _5cd=function(node){
 if(dojo.render.html.ie){
 if((node.style.zoom.length==0)&&(dojo.html.getStyle(node,"zoom")=="normal")){
 node.style.zoom="1";
@@ -109163,129 +70990,129 @@
 }
 }
 };
-if(dojo.lang.isArrayLike(_5be)){
-dojo.lang.forEach(_5be,_5bf);
+if(dojo.lang.isArrayLike(_5cc)){
+dojo.lang.forEach(_5cc,_5cd);
 }else{
-_5bf(_5be);
+_5cd(_5cc);
 }
 };
-dojo.lfx.html.fade=function(_5c1,_5c2,_5c3,_5c4,_5c5){
-_5c1=dojo.lfx.html._byId(_5c1);
-var _5c6={property:"opacity"};
-if(!dj_undef("start",_5c2)){
-_5c6.start=_5c2.start;
+dojo.lfx.html.fade=function(_5cf,_5d0,_5d1,_5d2,_5d3){
+_5cf=dojo.lfx.html._byId(_5cf);
+var _5d4={property:"opacity"};
+if(!dj_undef("start",_5d0)){
+_5d4.start=_5d0.start;
 }else{
-_5c6.start=function(){
-return dojo.html.getOpacity(_5c1[0]);
+_5d4.start=function(){
+return dojo.html.getOpacity(_5cf[0]);
 };
 }
-if(!dj_undef("end",_5c2)){
-_5c6.end=_5c2.end;
+if(!dj_undef("end",_5d0)){
+_5d4.end=_5d0.end;
 }else{
 dojo.raise("dojo.lfx.html.fade needs an end value");
 }
-var anim=dojo.lfx.propertyAnimation(_5c1,[_5c6],_5c3,_5c4);
+var anim=dojo.lfx.propertyAnimation(_5cf,[_5d4],_5d1,_5d2);
 anim.connect("beforeBegin",function(){
-dojo.lfx.html._makeFadeable(_5c1);
+dojo.lfx.html._makeFadeable(_5cf);
 });
-if(_5c5){
+if(_5d3){
 anim.connect("onEnd",function(){
-_5c5(_5c1,anim);
+_5d3(_5cf,anim);
 });
 }
 return anim;
 };
-dojo.lfx.html.fadeIn=function(_5c8,_5c9,_5ca,_5cb){
-return dojo.lfx.html.fade(_5c8,{end:1},_5c9,_5ca,_5cb);
+dojo.lfx.html.fadeIn=function(_5d6,_5d7,_5d8,_5d9){
+return dojo.lfx.html.fade(_5d6,{end:1},_5d7,_5d8,_5d9);
 };
-dojo.lfx.html.fadeOut=function(_5cc,_5cd,_5ce,_5cf){
-return dojo.lfx.html.fade(_5cc,{end:0},_5cd,_5ce,_5cf);
+dojo.lfx.html.fadeOut=function(_5da,_5db,_5dc,_5dd){
+return dojo.lfx.html.fade(_5da,{end:0},_5db,_5dc,_5dd);
 };
-dojo.lfx.html.fadeShow=function(_5d0,_5d1,_5d2,_5d3){
-_5d0=dojo.lfx.html._byId(_5d0);
-dojo.lang.forEach(_5d0,function(node){
+dojo.lfx.html.fadeShow=function(_5de,_5df,_5e0,_5e1){
+_5de=dojo.lfx.html._byId(_5de);
+dojo.lang.forEach(_5de,function(node){
 dojo.html.setOpacity(node,0);
 });
-var anim=dojo.lfx.html.fadeIn(_5d0,_5d1,_5d2,_5d3);
+var anim=dojo.lfx.html.fadeIn(_5de,_5df,_5e0,_5e1);
 anim.connect("beforeBegin",function(){
-if(dojo.lang.isArrayLike(_5d0)){
-dojo.lang.forEach(_5d0,dojo.html.show);
+if(dojo.lang.isArrayLike(_5de)){
+dojo.lang.forEach(_5de,dojo.html.show);
 }else{
-dojo.html.show(_5d0);
+dojo.html.show(_5de);
 }
 });
 return anim;
 };
-dojo.lfx.html.fadeHide=function(_5d6,_5d7,_5d8,_5d9){
-var anim=dojo.lfx.html.fadeOut(_5d6,_5d7,_5d8,function(){
-if(dojo.lang.isArrayLike(_5d6)){
-dojo.lang.forEach(_5d6,dojo.html.hide);
+dojo.lfx.html.fadeHide=function(_5e4,_5e5,_5e6,_5e7){
+var anim=dojo.lfx.html.fadeOut(_5e4,_5e5,_5e6,function(){
+if(dojo.lang.isArrayLike(_5e4)){
+dojo.lang.forEach(_5e4,dojo.html.hide);
 }else{
-dojo.html.hide(_5d6);
+dojo.html.hide(_5e4);
 }
-if(_5d9){
-_5d9(_5d6,anim);
+if(_5e7){
+_5e7(_5e4,anim);
 }
 });
 return anim;
 };
-dojo.lfx.html.wipeIn=function(_5db,_5dc,_5dd,_5de){
-_5db=dojo.lfx.html._byId(_5db);
-var _5df=[];
-dojo.lang.forEach(_5db,function(node){
-var _5e1={};
-var _5e2,_5e3,_5e4;
+dojo.lfx.html.wipeIn=function(_5e9,_5ea,_5eb,_5ec){
+_5e9=dojo.lfx.html._byId(_5e9);
+var _5ed=[];
+dojo.lang.forEach(_5e9,function(node){
+var _5ef={};
+var _5f0,_5f1,_5f2;
 with(node.style){
-_5e2=top;
-_5e3=left;
-_5e4=position;
+_5f0=top;
+_5f1=left;
+_5f2=position;
 top="-9999px";
 left="-9999px";
 position="absolute";
 display="";
 }
-var _5e5=dojo.html.getBorderBox(node).height;
+var _5f3=dojo.html.getBorderBox(node).height;
 with(node.style){
-top=_5e2;
-left=_5e3;
-position=_5e4;
+top=_5f0;
+left=_5f1;
+position=_5f2;
 display="none";
 }
 var anim=dojo.lfx.propertyAnimation(node,{"height":{start:1,end:function(){
-return _5e5;
-}}},_5dc,_5dd);
+return _5f3;
+}}},_5ea,_5eb);
 anim.connect("beforeBegin",function(){
-_5e1.overflow=node.style.overflow;
-_5e1.height=node.style.height;
+_5ef.overflow=node.style.overflow;
+_5ef.height=node.style.height;
 with(node.style){
 overflow="hidden";
-_5e5="1px";
+height="1px";
 }
 dojo.html.show(node);
 });
 anim.connect("onEnd",function(){
 with(node.style){
-overflow=_5e1.overflow;
-_5e5=_5e1.height;
+overflow=_5ef.overflow;
+height=_5ef.height;
 }
-if(_5de){
-_5de(node,anim);
+if(_5ec){
+_5ec(node,anim);
 }
 });
-_5df.push(anim);
+_5ed.push(anim);
 });
-return dojo.lfx.combine(_5df);
+return dojo.lfx.combine(_5ed);
 };
-dojo.lfx.html.wipeOut=function(_5e7,_5e8,_5e9,_5ea){
-_5e7=dojo.lfx.html._byId(_5e7);
-var _5eb=[];
-dojo.lang.forEach(_5e7,function(node){
-var _5ed={};
+dojo.lfx.html.wipeOut=function(_5f5,_5f6,_5f7,_5f8){
+_5f5=dojo.lfx.html._byId(_5f5);
+var _5f9=[];
+dojo.lang.forEach(_5f5,function(node){
+var _5fb={};
 var anim=dojo.lfx.propertyAnimation(node,{"height":{start:function(){
 return dojo.html.getContentBox(node).height;
-},end:1}},_5e8,_5e9,{"beforeBegin":function(){
-_5ed.overflow=node.style.overflow;
-_5ed.height=node.style.height;
+},end:1}},_5f6,_5f7,{"beforeBegin":function(){
+_5fb.overflow=node.style.overflow;
+_5fb.height=node.style.height;
 with(node.style){
 overflow="hidden";
 }
@@ -109293,263 +71120,259 @@
 },"onEnd":function(){
 dojo.html.hide(node);
 with(node.style){
-overflow=_5ed.overflow;
-height=_5ed.height;
+overflow=_5fb.overflow;
+height=_5fb.height;
 }
-if(_5ea){
-_5ea(node,anim);
+if(_5f8){
+_5f8(node,anim);
 }
 }});
-_5eb.push(anim);
+_5f9.push(anim);
 });
-return dojo.lfx.combine(_5eb);
+return dojo.lfx.combine(_5f9);
 };
-dojo.lfx.html.slideTo=function(_5ef,_5f0,_5f1,_5f2,_5f3){
-_5ef=dojo.lfx.html._byId(_5ef);
-var _5f4=[];
-var _5f5=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_5f0)){
+dojo.lfx.html.slideTo=function(_5fd,_5fe,_5ff,_600,_601){
+_5fd=dojo.lfx.html._byId(_5fd);
+var _602=[];
+var _603=dojo.html.getComputedStyle;
+if(dojo.lang.isArray(_5fe)){
 dojo.deprecated("dojo.lfx.html.slideTo(node, array)","use dojo.lfx.html.slideTo(node, {top: value, left: value});","0.5");
-_5f0={top:_5f0[0],left:_5f0[1]};
+_5fe={top:_5fe[0],left:_5fe[1]};
 }
-dojo.lang.forEach(_5ef,function(node){
+dojo.lang.forEach(_5fd,function(node){
 var top=null;
 var left=null;
 var init=(function(){
-var _5fa=node;
+var _608=node;
 return function(){
-var pos=_5f5(_5fa,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_5f5(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_5f5(node,"left"))||0);
+var pos=_603(_608,"position");
+top=(pos=="absolute"?node.offsetTop:parseInt(_603(node,"top"))||0);
+left=(pos=="absolute"?node.offsetLeft:parseInt(_603(node,"left"))||0);
 if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_5fa,true);
-dojo.html.setStyleAttributes(_5fa,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
+var ret=dojo.html.abs(_608,true);
+dojo.html.setStyleAttributes(_608,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
 top=ret.y;
 left=ret.x;
 }
 };
 })();
 init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:(_5f0.top||0)},"left":{start:left,end:(_5f0.left||0)}},_5f1,_5f2,{"beforeBegin":init});
-if(_5f3){
+var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:(_5fe.top||0)},"left":{start:left,end:(_5fe.left||0)}},_5ff,_600,{"beforeBegin":init});
+if(_601){
 anim.connect("onEnd",function(){
-_5f3(_5ef,anim);
+_601(_5fd,anim);
 });
 }
-_5f4.push(anim);
+_602.push(anim);
 });
-return dojo.lfx.combine(_5f4);
+return dojo.lfx.combine(_602);
 };
-dojo.lfx.html.slideBy=function(_5fe,_5ff,_600,_601,_602){
-_5fe=dojo.lfx.html._byId(_5fe);
-var _603=[];
-var _604=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_5ff)){
+dojo.lfx.html.slideBy=function(_60c,_60d,_60e,_60f,_610){
+_60c=dojo.lfx.html._byId(_60c);
+var _611=[];
+var _612=dojo.html.getComputedStyle;
+if(dojo.lang.isArray(_60d)){
 dojo.deprecated("dojo.lfx.html.slideBy(node, array)","use dojo.lfx.html.slideBy(node, {top: value, left: value});","0.5");
-_5ff={top:_5ff[0],left:_5ff[1]};
+_60d={top:_60d[0],left:_60d[1]};
 }
-dojo.lang.forEach(_5fe,function(node){
+dojo.lang.forEach(_60c,function(node){
 var top=null;
 var left=null;
 var init=(function(){
-var _609=node;
+var _617=node;
 return function(){
-var pos=_604(_609,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_604(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_604(node,"left"))||0);
+var pos=_612(_617,"position");
+top=(pos=="absolute"?node.offsetTop:parseInt(_612(node,"top"))||0);
+left=(pos=="absolute"?node.offsetLeft:parseInt(_612(node,"left"))||0);
 if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_609,true);
-dojo.html.setStyleAttributes(_609,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
+var ret=dojo.html.abs(_617,true);
+dojo.html.setStyleAttributes(_617,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
 top=ret.y;
 left=ret.x;
 }
 };
 })();
 init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:top+(_5ff.top||0)},"left":{start:left,end:left+(_5ff.left||0)}},_600,_601).connect("beforeBegin",init);
-if(_602){
+var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:top+(_60d.top||0)},"left":{start:left,end:left+(_60d.left||0)}},_60e,_60f).connect("beforeBegin",init);
+if(_610){
 anim.connect("onEnd",function(){
-_602(_5fe,anim);
+_610(_60c,anim);
 });
 }
-_603.push(anim);
+_611.push(anim);
 });
-return dojo.lfx.combine(_603);
+return dojo.lfx.combine(_611);
 };
-dojo.lfx.html.explode=function(_60d,_60e,_60f,_610,_611){
+dojo.lfx.html.explode=function(_61b,_61c,_61d,_61e,_61f){
 var h=dojo.html;
-_60d=dojo.byId(_60d);
-_60e=dojo.byId(_60e);
-var _613=h.toCoordinateObject(_60d,true);
-var _614=document.createElement("div");
-h.copyStyle(_614,_60e);
-if(_60e.explodeClassName){
-_614.className=_60e.explodeClassName;
+_61b=dojo.byId(_61b);
+_61c=dojo.byId(_61c);
+var _621=h.toCoordinateObject(_61b,true);
+var _622=document.createElement("div");
+h.copyStyle(_622,_61c);
+if(_61c.explodeClassName){
+_622.className=_61c.explodeClassName;
 }
-with(_614.style){
+with(_622.style){
 position="absolute";
 display="none";
-var _615=h.getStyle(_60d,"background-color");
-backgroundColor=_615?_615.toLowerCase():"transparent";
+var _623=h.getStyle(_61b,"background-color");
+backgroundColor=_623?_623.toLowerCase():"transparent";
 backgroundColor=(backgroundColor=="transparent")?"rgb(221, 221, 221)":backgroundColor;
 }
-dojo.body().appendChild(_614);
-with(_60e.style){
+dojo.body().appendChild(_622);
+with(_61c.style){
 visibility="hidden";
 display="block";
 }
-var _616=h.toCoordinateObject(_60e,true);
-with(_60e.style){
+var _624=h.toCoordinateObject(_61c,true);
+with(_61c.style){
 display="none";
 visibility="visible";
 }
-var _617={opacity:{start:0.5,end:1}};
+var _625={opacity:{start:0.5,end:1}};
 dojo.lang.forEach(["height","width","top","left"],function(type){
-_617[type]={start:_613[type],end:_616[type]};
+_625[type]={start:_621[type],end:_624[type]};
 });
-var anim=new dojo.lfx.propertyAnimation(_614,_617,_60f,_610,{"beforeBegin":function(){
-h.setDisplay(_614,"block");
+var anim=new dojo.lfx.propertyAnimation(_622,_625,_61d,_61e,{"beforeBegin":function(){
+h.setDisplay(_622,"block");
 },"onEnd":function(){
-h.setDisplay(_60e,"block");
-_614.parentNode.removeChild(_614);
+h.setDisplay(_61c,"block");
+_622.parentNode.removeChild(_622);
 }});
-if(_611){
+if(_61f){
 anim.connect("onEnd",function(){
-_611(_60e,anim);
+_61f(_61c,anim);
 });
 }
 return anim;
 };
-dojo.lfx.html.implode=function(_61a,end,_61c,_61d,_61e){
+dojo.lfx.html.implode=function(_628,end,_62a,_62b,_62c){
 var h=dojo.html;
-_61a=dojo.byId(_61a);
+_628=dojo.byId(_628);
 end=dojo.byId(end);
-var _620=dojo.html.toCoordinateObject(_61a,true);
-var _621=dojo.html.toCoordinateObject(end,true);
-var _622=document.createElement("div");
-dojo.html.copyStyle(_622,_61a);
-if(_61a.explodeClassName){
-_622.className=_61a.explodeClassName;
+var _62e=dojo.html.toCoordinateObject(_628,true);
+var _62f=dojo.html.toCoordinateObject(end,true);
+var _630=document.createElement("div");
+dojo.html.copyStyle(_630,_628);
+if(_628.explodeClassName){
+_630.className=_628.explodeClassName;
 }
-dojo.html.setOpacity(_622,0.3);
-with(_622.style){
+dojo.html.setOpacity(_630,0.3);
+with(_630.style){
 position="absolute";
 display="none";
-backgroundColor=h.getStyle(_61a,"background-color").toLowerCase();
+backgroundColor=h.getStyle(_628,"background-color").toLowerCase();
 }
-dojo.body().appendChild(_622);
-var _623={opacity:{start:1,end:0.5}};
+dojo.body().appendChild(_630);
+var _631={opacity:{start:1,end:0.5}};
 dojo.lang.forEach(["height","width","top","left"],function(type){
-_623[type]={start:_620[type],end:_621[type]};
+_631[type]={start:_62e[type],end:_62f[type]};
 });
-var anim=new dojo.lfx.propertyAnimation(_622,_623,_61c,_61d,{"beforeBegin":function(){
-dojo.html.hide(_61a);
-dojo.html.show(_622);
+var anim=new dojo.lfx.propertyAnimation(_630,_631,_62a,_62b,{"beforeBegin":function(){
+dojo.html.hide(_628);
+dojo.html.show(_630);
 },"onEnd":function(){
-_622.parentNode.removeChild(_622);
+_630.parentNode.removeChild(_630);
 }});
-if(_61e){
+if(_62c){
 anim.connect("onEnd",function(){
-_61e(_61a,anim);
+_62c(_628,anim);
 });
 }
 return anim;
 };
-dojo.lfx.html.highlight=function(_626,_627,_628,_629,_62a){
-_626=dojo.lfx.html._byId(_626);
-var _62b=[];
-dojo.lang.forEach(_626,function(node){
-var _62d=dojo.html.getBackgroundColor(node);
+dojo.lfx.html.highlight=function(_634,_635,_636,_637,_638){
+_634=dojo.lfx.html._byId(_634);
+var _639=[];
+dojo.lang.forEach(_634,function(node){
+var _63b=dojo.html.getBackgroundColor(node);
 var bg=dojo.html.getStyle(node,"background-color").toLowerCase();
-var _62f=dojo.html.getStyle(node,"background-image");
-var _630=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
-while(_62d.length>3){
-_62d.pop();
+var _63d=dojo.html.getStyle(node,"background-image");
+var _63e=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
+while(_63b.length>3){
+_63b.pop();
 }
-var rgb=new dojo.gfx.color.Color(_627);
-var _632=new dojo.gfx.color.Color(_62d);
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:rgb,end:_632}},_628,_629,{"beforeBegin":function(){
-if(_62f){
+var rgb=new dojo.gfx.color.Color(_635);
+var _640=new dojo.gfx.color.Color(_63b);
+var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:rgb,end:_640}},_636,_637,{"beforeBegin":function(){
+if(_63d){
 node.style.backgroundImage="none";
 }
 node.style.backgroundColor="rgb("+rgb.toRgb().join(",")+")";
 },"onEnd":function(){
-if(_62f){
-node.style.backgroundImage=_62f;
+if(_63d){
+node.style.backgroundImage=_63d;
 }
-if(_630){
+if(_63e){
 node.style.backgroundColor="transparent";
 }
-if(_62a){
-_62a(node,anim);
+if(_638){
+_638(node,anim);
 }
 }});
-_62b.push(anim);
+_639.push(anim);
 });
-return dojo.lfx.combine(_62b);
+return dojo.lfx.combine(_639);
 };
-dojo.lfx.html.unhighlight=function(_634,_635,_636,_637,_638){
-_634=dojo.lfx.html._byId(_634);
-var _639=[];
-dojo.lang.forEach(_634,function(node){
-var _63b=new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
-var rgb=new dojo.gfx.color.Color(_635);
-var _63d=dojo.html.getStyle(node,"background-image");
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:_63b,end:rgb}},_636,_637,{"beforeBegin":function(){
-if(_63d){
+dojo.lfx.html.unhighlight=function(_642,_643,_644,_645,_646){
+_642=dojo.lfx.html._byId(_642);
+var _647=[];
+dojo.lang.forEach(_642,function(node){
+var _649=new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
+var rgb=new dojo.gfx.color.Color(_643);
+var _64b=dojo.html.getStyle(node,"background-image");
+var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:_649,end:rgb}},_644,_645,{"beforeBegin":function(){
+if(_64b){
 node.style.backgroundImage="none";
 }
-node.style.backgroundColor="rgb("+_63b.toRgb().join(",")+")";
+node.style.backgroundColor="rgb("+_649.toRgb().join(",")+")";
 },"onEnd":function(){
-if(_638){
-_638(node,anim);
+if(_646){
+_646(node,anim);
 }
 }});
-_639.push(anim);
+_647.push(anim);
 });
-return dojo.lfx.combine(_639);
+return dojo.lfx.combine(_647);
 };
 dojo.lang.mixin(dojo.lfx,dojo.lfx.html);
+dojo.kwCompoundRequire({browser:["dojo.lfx.html"],dashboard:["dojo.lfx.html"]});
 dojo.provide("dojo.lfx.*");
 
 
 __CPAN_EDITION__ ajax build.txt
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-../src/loader_xd.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/string/common.js,
-../src/string.js,
-../src/lang/common.js,
-../src/lang/extras.js,
-../src/io/common.js,
-../src/lang/array.js,
-../src/lang/func.js,
-../src/string/extras.js,
-../src/dom.js,
-../src/undo/browser.js,
-../src/io/BrowserIO.js,
-../src/io/cookie.js,
-../src/io/__package__.js,
-../src/event/common.js,
-../src/event/topic.js,
-../src/event/browser.js,
-../src/event/__package__.js,
-../src/gfx/color.js,
-../src/lfx/Animation.js,
-../src/html/common.js,
-../src/uri/Uri.js,
-../src/html/style.js,
-../src/html/display.js,
-../src/html/color.js,
-../src/html/layout.js,
-../src/lfx/html.js,
+Files baked into this build:
+dojoGuardStart.js
+../src/bootstrap1.js
+../src/loader.js
+../src/loader_xd.js
+dojoGuardEnd.js
+../src/hostenv_browser.js
+../src/string/common.js
+../src/string.js
+../src/lang/common.js
+../src/lang/extras.js
+../src/io/common.js
+../src/lang/array.js
+../src/lang/func.js
+../src/string/extras.js
+../src/dom.js
+../src/undo/browser.js
+../src/io/BrowserIO.js
+../src/io/cookie.js
+../src/io/__package__.js
+../src/event/common.js
+../src/event/topic.js
+../src/event/browser.js
+../src/event/__package__.js
+../src/gfx/color.js
+../src/lfx/Animation.js
+../src/html/common.js
+../src/uri/Uri.js
+../src/html/style.js
+../src/html/display.js
+../src/html/color.js
+../src/html/layout.js
+../src/lfx/html.js
 ../src/lfx/__package__.js
-
-		

Modified: trunk/HTML-Dojo/lib/HTML/Dojo/src.pm
===================================================================
--- trunk/HTML-Dojo/lib/HTML/Dojo/src.pm	2007-03-27 22:18:40 UTC (rev 6218)
+++ trunk/HTML-Dojo/lib/HTML/Dojo/src.pm	2007-03-28 10:48:55 UTC (rev 6219)
@@ -14,84 +14,71 @@
 */
 
 dojo.require("dojo.Deferred");
-
 dojo.provide("dojo.DeferredList");
-
-
-dojo.DeferredList = function (list, /*bool?*/ fireOnOneCallback, /*bool?*/ fireOnOneErrback, /*bool?*/ consumeErrors, /*Function?*/ canceller) {
-    this.list = list;
-    this.resultList = new Array(this.list.length);
-
-    // Deferred init
-    this.chain = [];
-    this.id = this._nextId();
-    this.fired = -1;
-    this.paused = 0;
-    this.results = [null, null];
-    this.canceller = canceller;
-    this.silentlyCancelled = false;
-    
-    if (this.list.length === 0 && !fireOnOneCallback) {
-        this.callback(this.resultList);
-    }
-    
-    this.finishedCount = 0;
-    this.fireOnOneCallback = fireOnOneCallback;
-    this.fireOnOneErrback = fireOnOneErrback;
-    this.consumeErrors = consumeErrors;
-
-    var index = 0;
-    
-    var _this = this;
-    
-    dojo.lang.forEach(this.list, function(d) {
-        var _index = index;
-        //dojo.debug("add cb/errb index "+_index);
-        d.addCallback(function(r) { _this._cbDeferred(_index, true, r) });
-        d.addErrback(function(r) { _this._cbDeferred(_index, false, r) });
-        index++;
-    });
-                      
+dojo.DeferredList = function (list, fireOnOneCallback, fireOnOneErrback, consumeErrors, canceller) {
+	this.list = list;
+	this.resultList = new Array(this.list.length);
+	this.chain = [];
+	this.id = this._nextId();
+	this.fired = -1;
+	this.paused = 0;
+	this.results = [null, null];
+	this.canceller = canceller;
+	this.silentlyCancelled = false;
+	if (this.list.length === 0 && !fireOnOneCallback) {
+		this.callback(this.resultList);
+	}
+	this.finishedCount = 0;
+	this.fireOnOneCallback = fireOnOneCallback;
+	this.fireOnOneErrback = fireOnOneErrback;
+	this.consumeErrors = consumeErrors;
+	var index = 0;
+	var _this = this;
+	dojo.lang.forEach(this.list, function (d) {
+		var _index = index;
+		d.addCallback(function (r) {
+			_this._cbDeferred(_index, true, r);
+		});
+		d.addErrback(function (r) {
+			_this._cbDeferred(_index, false, r);
+		});
+		index++;
+	});
 };
-
-
 dojo.inherits(dojo.DeferredList, dojo.Deferred);
+dojo.lang.extend(dojo.DeferredList, {_cbDeferred:function (index, succeeded, result) {
+	this.resultList[index] = [succeeded, result];
+	this.finishedCount += 1;
+	if (this.fired !== 0) {
+		if (succeeded && this.fireOnOneCallback) {
+			this.callback([index, result]);
+		} else {
+			if (!succeeded && this.fireOnOneErrback) {
+				this.errback(result);
+			} else {
+				if (this.finishedCount == this.list.length) {
+					this.callback(this.resultList);
+				}
+			}
+		}
+	}
+	if (!succeeded && this.consumeErrors) {
+		result = null;
+	}
+	return result;
+}, gatherResults:function (deferredList) {
+	var d = new dojo.DeferredList(deferredList, false, true, false);
+	d.addCallback(function (results) {
+		var ret = [];
+		for (var i = 0; i < results.length; i++) {
+			ret.push(results[i][1]);
+		}
+		return ret;
+	});
+	return d;
+}});
 
-dojo.lang.extend(dojo.DeferredList, {
 
-    _cbDeferred: function (index, succeeded, result) {
-        //dojo.debug("Fire "+index+" succ "+succeeded+" res "+result);
-        this.resultList[index] = [succeeded, result];
-        this.finishedCount += 1;
-        if (this.fired !== 0) {
-            if (succeeded && this.fireOnOneCallback) {
-                this.callback([index, result]);
-            } else if (!succeeded && this.fireOnOneErrback) {
-                this.errback(result);
-            } else if (this.finishedCount == this.list.length) {
-                this.callback(this.resultList);
-            }
-        }
-        if (!succeeded && this.consumeErrors) {
-            result = null;
-        }
-        return result;
-    },
-    
-    gatherResults: function (deferredList) {
-        var d = new dojo.DeferredList(deferredList, false, true, false);
-        d.addCallback(function (results) {
-            var ret = [];
-            for (var i = 0; i < results.length; i++) {
-                ret.push(results[i][1]);
-            }
-            return ret;
-        });
-        return d;
-    }
-});
-
-
 __CPAN_FILE__ src/ns.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -103,139 +90,95 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.ns");
-
-dojo.ns = {
-	// summary: private object that implements widget namespace management
-	namespaces: {},
-	failed: {},
-	loading: {},
-	loaded: {},
-	register: function(/*String*/name, /*String*/module, /*Function?*/resolver, /*Boolean?*/noOverride){
-		// summary: creates and registers a dojo.ns.Ns object
-		if(!noOverride || !this.namespaces[name]){
-			this.namespaces[name] = new dojo.ns.Ns(name, module, resolver);
-		}
-	},
-	allow: function(/*String*/name){
-		// summary: Returns false if 'name' is filtered by configuration or has failed to load, true otherwise
-		if(this.failed[name]){return false;} // Boolean
-		if((djConfig.excludeNamespace)&&(dojo.lang.inArray(djConfig.excludeNamespace, name))){return false;} // Boolean
-		// If the namespace is "dojo", or the user has not specified allowed namespaces return true.
-		// Otherwise, if the user has specifically allowed this namespace, return true, otherwise false.
-		return((name==this.dojo)||(!djConfig.includeNamespace)||(dojo.lang.inArray(djConfig.includeNamespace, name))); // Boolean
-	},
-	get: function(/*String*/name){
-		// summary
-		//  Return Ns object registered to 'name', if any
-		return this.namespaces[name]; // Ns
-	},
-	require: function(/*String*/name){
-		// summary
-  	//  Try to ensure that 'name' is registered, loading a namespace manifest if necessary
-		var ns = this.namespaces[name];
-		if((ns)&&(this.loaded[name])){return ns;} // Ns
-		if(!this.allow(name)){return false;} // Boolean
- 		if(this.loading[name]){
-			// FIXME: do we really ever have re-entrancy situation? this would appear to be really bad
-			// original code did not throw an exception, although that seems the only course
-			// adding debug output here to track if this occurs.
-			dojo.debug('dojo.namespace.require: re-entrant request to load namespace "' + name + '" must fail.'); 
-			return false; // Boolean
-		}
-		// workaround so we don't break the build system
-		var req = dojo.require;
-		this.loading[name] = true;
-		try {
-			//dojo namespace file is always in the Dojo namespaces folder, not any custom folder
-			if(name=="dojo"){
-				req("dojo.namespaces.dojo");
-			}else{
-				// if no registered module prefix, use ../<name> by convention
-				if(!dojo.hostenv.moduleHasPrefix(name)){
-					dojo.registerModulePath(name, "../" + name);
-				}
-				req([name, 'manifest'].join('.'), false, true);
-			}
-			if(!this.namespaces[name]){
-				this.failed[name] = true; //only look for a namespace once
-			}
-		}finally{
-			this.loading[name]=false;
-		}
-		return this.namespaces[name]; // Ns
-	}
-}
-
-dojo.ns.Ns = function(/*String*/name, /*String*/module, /*Function?*/resolver){
-	// summary: this object simply encapsulates namespace data
-	this.name = name;
-	this.module = module;
-	this.resolver = resolver;
-	this._loaded = [ ];
-	this._failed = [ ];
-}
-
-dojo.ns.Ns.prototype.resolve = function(/*String*/name, /*String*/domain, /*Boolean?*/omitModuleCheck){
-	//summary: map component with 'name' and 'domain' to a module via namespace resolver, if specified
-	if(!this.resolver || djConfig["skipAutoRequire"]){return false;} // Boolean
-	var fullName = this.resolver(name, domain);
-	//only load a widget once. This is a quicker check than dojo.require does
-	if((fullName)&&(!this._loaded[fullName])&&(!this._failed[fullName])){
-		//workaround so we don't break the build system
-		var req = dojo.require;
-		req(fullName, false, true); //omit the module check, we'll do it ourselves.
-		if(dojo.hostenv.findModule(fullName, false)){
-			this._loaded[fullName] = true;
-		}else{
-			if(!omitModuleCheck){dojo.raise("dojo.ns.Ns.resolve: module '" + fullName + "' not found after loading via namespace '" + this.name + "'");} 
-			this._failed[fullName] = true;
-		}
-	}
-	return Boolean(this._loaded[fullName]); // Boolean
-}
-
-dojo.registerNamespace = function(/*String*/name, /*String*/module, /*Function?*/resolver){
-	// summary: maps a module name to a namespace for widgets, and optionally maps widget names to modules for auto-loading
-	// description: An unregistered namespace is mapped to an eponymous module.
-	//	For example, namespace acme is mapped to module acme, and widgets are
-	//	assumed to belong to acme.widget. If you want to use a different widget
-	//	module, use dojo.registerNamespace.
-	dojo.ns.register.apply(dojo.ns, arguments);
-}
-
-dojo.registerNamespaceResolver = function(/*String*/name, /*Function*/resolver){
-	// summary: a resolver function maps widget names to modules, so the
-	//	widget manager can auto-load needed widget implementations
-	//
-	// description: The resolver provides information to allow Dojo
-	//	to load widget modules on demand. When a widget is created,
-	//	a namespace resolver can tell Dojo what module to require
-	//	to ensure that the widget implementation code is loaded.
-	//
-	// name: will always be lower-case.
-	//
-	// example:
-	//  dojo.registerNamespaceResolver("acme",
-	//    function(name){ 
-	//      return "acme.widget."+dojo.string.capitalize(name);
-	//    }
-	//  );
-	var n = dojo.ns.namespaces[name];
-	if(n){
-		n.resolver = resolver;
-	}
-}
-
-dojo.registerNamespaceManifest = function(/*String*/module, /*String*/path, /*String*/name, /*String*/widgetModule, /*Function?*/resolver){
-	// summary: convenience function to register a module path, a namespace, and optionally a resolver all at once.
-	dojo.registerModulePath(name, path);
-	dojo.registerNamespace(name, widgetModule, resolver);
-}
-
-// NOTE: rather put this in dojo.widget.Widget, but that fubars debugAtAllCosts
-dojo.registerNamespace("dojo", "dojo.widget");
+dojo.provide("dojo.ns");
+dojo.ns = {namespaces:{}, failed:{}, loading:{}, loaded:{}, register:function (name, module, resolver, noOverride) {
+	if (!noOverride || !this.namespaces[name]) {
+		this.namespaces[name] = new dojo.ns.Ns(name, module, resolver);
+	}
+}, allow:function (name) {
+	if (this.failed[name]) {
+		return false;
+	}
+	if ((djConfig.excludeNamespace) && (dojo.lang.inArray(djConfig.excludeNamespace, name))) {
+		return false;
+	}
+	return ((name == this.dojo) || (!djConfig.includeNamespace) || (dojo.lang.inArray(djConfig.includeNamespace, name)));
+}, get:function (name) {
+	return this.namespaces[name];
+}, require:function (name) {
+	var ns = this.namespaces[name];
+	if ((ns) && (this.loaded[name])) {
+		return ns;
+	}
+	if (!this.allow(name)) {
+		return false;
+	}
+	if (this.loading[name]) {
+		dojo.debug("dojo.namespace.require: re-entrant request to load namespace \"" + name + "\" must fail.");
+		return false;
+	}
+	var req = dojo.require;
+	this.loading[name] = true;
+	try {
+		if (name == "dojo") {
+			req("dojo.namespaces.dojo");
+		} else {
+			if (!dojo.hostenv.moduleHasPrefix(name)) {
+				dojo.registerModulePath(name, "../" + name);
+			}
+			req([name, "manifest"].join("."), false, true);
+		}
+		if (!this.namespaces[name]) {
+			this.failed[name] = true;
+		}
+	}
+	finally {
+		this.loading[name] = false;
+	}
+	return this.namespaces[name];
+}};
+dojo.ns.Ns = function (name, module, resolver) {
+	this.name = name;
+	this.module = module;
+	this.resolver = resolver;
+	this._loaded = [];
+	this._failed = [];
+};
+dojo.ns.Ns.prototype.resolve = function (name, domain, omitModuleCheck) {
+	if (!this.resolver || djConfig["skipAutoRequire"]) {
+		return false;
+	}
+	var fullName = this.resolver(name, domain);
+	if ((fullName) && (!this._loaded[fullName]) && (!this._failed[fullName])) {
+		var req = dojo.require;
+		req(fullName, false, true);
+		if (dojo.hostenv.findModule(fullName, false)) {
+			this._loaded[fullName] = true;
+		} else {
+			if (!omitModuleCheck) {
+				dojo.raise("dojo.ns.Ns.resolve: module '" + fullName + "' not found after loading via namespace '" + this.name + "'");
+			}
+			this._failed[fullName] = true;
+		}
+	}
+	return Boolean(this._loaded[fullName]);
+};
+dojo.registerNamespace = function (name, module, resolver) {
+	dojo.ns.register.apply(dojo.ns, arguments);
+};
+dojo.registerNamespaceResolver = function (name, resolver) {
+	var n = dojo.ns.namespaces[name];
+	if (n) {
+		n.resolver = resolver;
+	}
+};
+dojo.registerNamespaceManifest = function (module, path, name, widgetModule, resolver) {
+	dojo.registerModulePath(name, path);
+	dojo.registerNamespace(name, widgetModule, resolver);
+};
+dojo.registerNamespace("dojo", "dojo.widget");
 
+
 __CPAN_FILE__ src/date.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -248,9 +191,9 @@
 */
 
 dojo.provide("dojo.date");
-
 dojo.deprecated("dojo.date", "use one of the modules in dojo.date.* instead", "0.5");
 
+
 __CPAN_FILE__ src/Deferred.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -264,98 +207,7 @@
 
 dojo.provide("dojo.Deferred");
 dojo.require("dojo.lang.func");
-
-dojo.Deferred = function(/*Function?*/ canceller){
-	/*
-	NOTE: this namespace and documentation are imported wholesale 
-		from MochiKit
-
-	Encapsulates a sequence of callbacks in response to a value that
-	may not yet be available.  This is modeled after the Deferred class
-	from Twisted <http://twistedmatrix.com>.
-
-	Why do we want this?  JavaScript has no threads, and even if it did,
-	threads are hard.  Deferreds are a way of abstracting non-blocking
-	events, such as the final response to an XMLHttpRequest.
-
-	The sequence of callbacks is internally represented as a list
-	of 2-tuples containing the callback/errback pair.  For example,
-	the following call sequence::
-
-		var d = new Deferred();
-		d.addCallback(myCallback);
-		d.addErrback(myErrback);
-		d.addBoth(myBoth);
-		d.addCallbacks(myCallback, myErrback);
-
-	is translated into a Deferred with the following internal
-	representation::
-
-		[
-			[myCallback, null],
-			[null, myErrback],
-			[myBoth, myBoth],
-			[myCallback, myErrback]
-		]
-
-	The Deferred also keeps track of its current status (fired).
-	Its status may be one of three things:
-
-		-1: no value yet (initial condition)
-		0: success
-		1: error
-
-	A Deferred will be in the error state if one of the following
-	three conditions are met:
-
-		1. The result given to callback or errback is "instanceof" Error
-		2. The previous callback or errback raised an exception while
-		   executing
-		3. The previous callback or errback returned a value "instanceof"
-			Error
-
-	Otherwise, the Deferred will be in the success state.  The state of
-	the Deferred determines the next element in the callback sequence to
-	run.
-
-	When a callback or errback occurs with the example deferred chain,
-	something equivalent to the following will happen (imagine that
-	exceptions are caught and returned)::
-
-		// d.callback(result) or d.errback(result)
-		if(!(result instanceof Error)){
-			result = myCallback(result);
-		}
-		if(result instanceof Error){
-			result = myErrback(result);
-		}
-		result = myBoth(result);
-		if(result instanceof Error){
-			result = myErrback(result);
-		}else{
-			result = myCallback(result);
-		}
-
-	The result is then stored away in case another step is added to the
-	callback sequence.	Since the Deferred already has a value available,
-	any new callbacks added will be called immediately.
-
-	There are two other "advanced" details about this implementation that
-	are useful:
-
-	Callbacks are allowed to return Deferred instances themselves, so you
-	can build complicated sequences of events with ease.
-
-	The creator of the Deferred may specify a canceller.  The canceller
-	is a function that will be called if Deferred.cancel is called before
-	the Deferred fires.	 You can use this to implement clean aborting of
-	an XMLHttpRequest, etc.	 Note that cancel will fire the deferred with
-	a CancelledError (unless your canceller returns another kind of
-	error), so the errbacks should be prepared to handle that error for
-	cancellable Deferreds.
-
-	*/
-	
+dojo.Deferred = function (canceller) {
 	this.chain = [];
 	this.id = this._nextId();
 	this.fired = -1;
@@ -364,208 +216,149 @@
 	this.canceller = canceller;
 	this.silentlyCancelled = false;
 };
-
-dojo.lang.extend(dojo.Deferred, {
-	getFunctionFromArgs: function(){
-		var a = arguments;
-		if((a[0])&&(!a[1])){
-			if(dojo.lang.isFunction(a[0])){
-				return a[0];
-			}else if(dojo.lang.isString(a[0])){
+dojo.lang.extend(dojo.Deferred, {getFunctionFromArgs:function () {
+	var a = arguments;
+	if ((a[0]) && (!a[1])) {
+		if (dojo.lang.isFunction(a[0])) {
+			return a[0];
+		} else {
+			if (dojo.lang.isString(a[0])) {
 				return dj_global[a[0]];
 			}
-		}else if((a[0])&&(a[1])){
+		}
+	} else {
+		if ((a[0]) && (a[1])) {
 			return dojo.lang.hitch(a[0], a[1]);
 		}
-		return null;
-	},
-
-	makeCalled: function() {
-		var deferred = new dojo.Deferred();
-		deferred.callback();
-		return deferred;
-	},
-
-	repr: function(){
-		var state;
-		if(this.fired == -1){
-			state = 'unfired';
-		}else if(this.fired == 0){
-			state = 'success';
+	}
+	return null;
+}, makeCalled:function () {
+	var deferred = new dojo.Deferred();
+	deferred.callback();
+	return deferred;
+}, repr:function () {
+	var state;
+	if (this.fired == -1) {
+		state = "unfired";
+	} else {
+		if (this.fired == 0) {
+			state = "success";
 		} else {
-			state = 'error';
+			state = "error";
 		}
-		return 'Deferred(' + this.id + ', ' + state + ')';
-	},
-
-	toString: dojo.lang.forward("repr"),
-
-	_nextId: (function(){
-		var n = 1;
-		return function(){ return n++; };
-	})(),
-
-	cancel: function(){
-		// summary:	Cancels a Deferred that has not yet received a value, or is
-		//		waiting on another Deferred as its value.
-		// description:
-		//		If a canceller is defined, the canceller is called. If the
-		//		canceller did not return an error, or there was no canceller,
-		//		then the errback chain is started with CancelledError.
-		if(this.fired == -1){
-			if (this.canceller){
-				this.canceller(this);
-			}else{
-				this.silentlyCancelled = true;
-			}
-			if(this.fired == -1){
-				this.errback(new Error(this.repr()));
-			}
-		}else if(	(this.fired == 0)&&
-					(this.results[0] instanceof dojo.Deferred)){
+	}
+	return "Deferred(" + this.id + ", " + state + ")";
+}, toString:dojo.lang.forward("repr"), _nextId:(function () {
+	var n = 1;
+	return function () {
+		return n++;
+	};
+})(), cancel:function () {
+	if (this.fired == -1) {
+		if (this.canceller) {
+			this.canceller(this);
+		} else {
+			this.silentlyCancelled = true;
+		}
+		if (this.fired == -1) {
+			this.errback(new Error(this.repr()));
+		}
+	} else {
+		if ((this.fired == 0) && (this.results[0] instanceof dojo.Deferred)) {
 			this.results[0].cancel();
 		}
-	},
-			
-
-	_pause: function(){
-		// summary: Used internally to signal that it's waiting on another Deferred
-		this.paused++;
-	},
-
-	_unpause: function(){
-		// summary: Used internally to signal that it's no longer waiting on
-		// another Deferred.
-		this.paused--;
-		if ((this.paused == 0) && (this.fired >= 0)) {
-			this._fire();
+	}
+}, _pause:function () {
+	this.paused++;
+}, _unpause:function () {
+	this.paused--;
+	if ((this.paused == 0) && (this.fired >= 0)) {
+		this._fire();
+	}
+}, _continue:function (res) {
+	this._resback(res);
+	this._unpause();
+}, _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) {
+			dojo.raise("already called!");
 		}
-	},
-
-	_continue: function(res){
-		// summary: Used internally when a dependent deferred fires.
-		this._resback(res);
-		this._unpause();
-	},
-
-	_resback: function(res){
-		// The primitive that means either callback or errback
-		this.fired = ((res instanceof Error) ? 1 : 0);
-		this.results[this.fired] = res;
+		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 = this.getFunctionFromArgs(cb, cbfn);
+	if (arguments.length > 2) {
+		enclosed = dojo.lang.curryArguments(null, enclosed, arguments, 2);
+	}
+	return this.addCallbacks(enclosed, enclosed);
+}, addCallback:function (cb, cbfn) {
+	var enclosed = this.getFunctionFromArgs(cb, cbfn);
+	if (arguments.length > 2) {
+		enclosed = dojo.lang.curryArguments(null, enclosed, arguments, 2);
+	}
+	return this.addCallbacks(enclosed, null);
+}, addErrback:function (cb, cbfn) {
+	var enclosed = this.getFunctionFromArgs(cb, cbfn);
+	if (arguments.length > 2) {
+		enclosed = dojo.lang.curryArguments(null, enclosed, arguments, 2);
+	}
+	return this.addCallbacks(null, enclosed);
+	return this.addCallbacks(null, cbfn);
+}, addCallbacks:function (cb, eb) {
+	this.chain.push([cb, eb]);
+	if (this.fired >= 0) {
 		this._fire();
-	},
-
-	_check: function(){
-		if(this.fired != -1){
-			if(!this.silentlyCancelled){
-				dojo.raise("already called!");
-			}
-			this.silentlyCancelled = false;
-			return;
+	}
+	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 pair = chain.shift();
+		var f = pair[fired];
+		if (f == null) {
+			continue;
 		}
-	},
-
-	callback: function(res){
-		// summary:	Begin the callback sequence with a non-error value.
-		
-		/*
-		callback or errback should only be called once on a given
-		Deferred.
-		*/
-		this._check();
-		this._resback(res);
-	},
-
-	errback: function(res){
-		// summary: Begin the callback sequence with an error result.
-		this._check();
-		if(!(res instanceof Error)){
-			res = new Error(res);
-		}
-		this._resback(res);
-	},
-
-	addBoth: function(cb, cbfn){
-		/* summary
-		Add the same function as both a callback and an errback as the
-		next element on the callback sequence.	This is useful for code
-		that you want to guarantee to run, e.g. a finalizer.
-		*/
-		var enclosed = this.getFunctionFromArgs(cb, cbfn);
-		if(arguments.length > 2){
-			enclosed = dojo.lang.curryArguments(null, enclosed, arguments, 2);
-		}
-		return this.addCallbacks(enclosed, enclosed);
-	},
-
-	addCallback: function(cb, cbfn){
-		// summary: Add a single callback to the end of the callback sequence.
-		var enclosed = this.getFunctionFromArgs(cb, cbfn);
-		if(arguments.length > 2){
-			enclosed = dojo.lang.curryArguments(null, enclosed, arguments, 2);
-		}
-		return this.addCallbacks(enclosed, null);
-	},
-
-	addErrback: function(cb, cbfn){
-		// summary: Add a single callback to the end of the callback sequence.
-		var enclosed = this.getFunctionFromArgs(cb, cbfn);
-		if(arguments.length > 2){
-			enclosed = dojo.lang.curryArguments(null, enclosed, arguments, 2);
-		}
-		return this.addCallbacks(null, enclosed);
-		return this.addCallbacks(null, cbfn);
-	},
-
-	addCallbacks: function (cb, eb) {
-		// summary: Add separate callback and errback to the end of the callback
-		// sequence.
-		this.chain.push([cb, eb])
-		if (this.fired >= 0) {
-			this._fire();
-		}
-		return this;
-	},
-
-	_fire: function(){
-		// summary: Used internally to exhaust the callback sequence when a result
-		// is available.
-		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) {
-			// Array
-			var pair = chain.shift();
-			var f = pair[fired];
-			if (f == null) {
-				continue;
+		try {
+			res = f(res);
+			fired = ((res instanceof Error) ? 1 : 0);
+			if (res instanceof dojo.Deferred) {
+				cb = function (res) {
+					self._continue(res);
+				};
+				this._pause();
 			}
-			try {
-				res = f(res);
-				fired = ((res instanceof Error) ? 1 : 0);
-				if(res instanceof dojo.Deferred) {
-					cb = function(res){
-						self._continue(res);
-					}
-					this._pause();
-				}
-			}catch(err){
-				fired = 1;
-				res = err;
-			}
 		}
-		this.fired = fired;
-		this.results[fired] = res;
-		if((cb)&&(this.paused)){
-			// this is for "tail recursion" in case the dependent
-			// deferred is already fired
-			res.addBoth(cb);
+		catch (err) {
+			fired = 1;
+			res = err;
 		}
 	}
-});
+	this.fired = fired;
+	this.results[fired] = res;
+	if ((cb) && (this.paused)) {
+		res.addBoth(cb);
+	}
+}});
 
+
 __CPAN_FILE__ src/animation.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -579,9 +372,9 @@
 
 dojo.provide("dojo.animation");
 dojo.require("dojo.animation.Animation");
-
 dojo.deprecated("dojo.animation is slated for removal in 0.5; use dojo.lfx instead.", "0.5");
 
+
 __CPAN_FILE__ src/behavior.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -595,161 +388,66 @@
 
 dojo.provide("dojo.behavior");
 dojo.require("dojo.event.*");
-
 dojo.require("dojo.experimental");
 dojo.experimental("dojo.behavior");
-
-dojo.behavior = new function(){
-	function arrIn(obj, name){
-		if(!obj[name]){ obj[name] = []; }
+dojo.behavior = new function () {
+	function arrIn(obj, name) {
+		if (!obj[name]) {
+			obj[name] = [];
+		}
 		return obj[name];
 	}
-
-	function forIn(obj, scope, func){
+	function forIn(obj, scope, func) {
 		var tmpObj = {};
-		for(var x in obj){
-			if(typeof tmpObj[x] == "undefined"){
-				if(!func){
+		for (var x in obj) {
+			if (typeof tmpObj[x] == "undefined") {
+				if (!func) {
 					scope(obj[x], x);
-				}else{
+				} else {
 					func.call(scope, obj[x], x);
 				}
 			}
 		}
 	}
-
-	// FIXME: need a better test so we don't exclude nightly Safari's!
 	this.behaviors = {};
-	this.add = function(behaviorObj){
-		/*	behavior objects are specified in the following format:
-		 *
-		 *	{ 
-		 *	 	"#id": {
-		 *			"found": function(element){
-		 *				// ...
-		 *			},
-		 *
-		 *			"onblah": {targetObj: foo, targetFunc: "bar"},
-		 *
-		 *			"onblarg": "/foo/bar/baz/blarg",
-		 *
-		 *			"onevent": function(evt){
-		 *			},
-		 *
-		 *			"onotherevent: function(evt){
-		 *				// ...
-		 *			}
-		 *		},
-		 *
-		 *		"#id2": {
-		 *			// ...
-		 *		},
-		 *
-		 *		"#id3": function(element){
-		 *			// ...
-		 *		},
-		 *
-		 *		// publish the match on a topic
-		 *		"#id4": "/found/topic/name",
-		 *
-		 *		// match all direct descendants
-		 *		"#id4 > *": function(element){
-		 *			// ...
-		 *		},
-		 *
-		 *		// match the first child node that's an element
-		 *		"#id4 > @firstElement": { ... },
-		 *
-		 *		// match the last child node that's an element
-		 *		"#id4 > @lastElement":  { ... },
-		 *
-		 *		// all elements of type tagname
-		 *		"tagname": {
-		 *			// ...
-		 *		},
-		 *
-		 *		// maps to roughly:
-		 *		//	dojo.lang.forEach(body.getElementsByTagName("tagname1"), function(node){
-		 *		//		dojo.lang.forEach(node.getElementsByTagName("tagname2"), function(node2){
-		 *		//			dojo.lang.forEach(node2.getElementsByTagName("tagname3", function(node3){
-		 *		//				// apply rules
-		 *		//			});
-		 *		//		});
-		 *		//	});
-		 *		"tagname1 tagname2 tagname3": {
-		 *			// ...
-		 *		},
-		 *
-		 *		".classname": {
-		 *			// ...
-		 *		},
-		 *
-		 *		"tagname.classname": {
-		 *			// ...
-		 *		},
-		 *	}
-		 *
-		 *	The "found" method is a generalized handler that's called as soon
-		 *	as the node matches the selector. Rules for values that follow also
-		 *	apply to the "found" key.
-		 *	
-		 *	The "on*" handlers are attached with dojo.event.connect(). If the
-		 *	value is not a function but is rather an object, it's assumed to be
-		 *	the "other half" of a dojo.event.kwConnect() argument object. It
-		 *	may contain any/all properties of such a connection modifier save
-		 *	for the sourceObj and sourceFunc properties which are filled in by
-		 *	the system automatically. If a string is instead encountered, the
-		 *	node publishes the specified event on the topic contained in the
-		 *	string value.
-		 *
-		 *	If the value corresponding to the ID key is a function and not a
-		 *	list, it's treated as though it was the value of "found".
-		 *
-		 */
-
+	this.add = function (behaviorObj) {
 		var tmpObj = {};
-		forIn(behaviorObj, this, function(behavior, name){
+		forIn(behaviorObj, this, function (behavior, name) {
 			var tBehavior = arrIn(this.behaviors, name);
-			if((dojo.lang.isString(behavior))||(dojo.lang.isFunction(behavior))){
-				behavior = { found: behavior };
+			if ((dojo.lang.isString(behavior)) || (dojo.lang.isFunction(behavior))) {
+				behavior = {found:behavior};
 			}
-			forIn(behavior, function(rule, ruleName){
+			forIn(behavior, function (rule, ruleName) {
 				arrIn(tBehavior, ruleName).push(rule);
 			});
 		});
-	}
-
-	this.apply = function(){
+	};
+	this.apply = function () {
 		dojo.profile.start("dojo.behavior.apply");
 		var r = dojo.render.html;
-		// note, we apply one way for fast queries and one way for slow
-		// iteration. So be it.
 		var safariGoodEnough = (!r.safari);
-		if(r.safari){
-			// Anything over release #420 should work the fast way
+		if (r.safari) {
 			var uas = r.UA.split("AppleWebKit/")[1];
-			if(parseInt(uas.match(/[0-9.]{3,}/)) >= 420){
+			if (parseInt(uas.match(/[0-9.]{3,}/)) >= 420) {
 				safariGoodEnough = true;
 			}
 		}
-		if((dj_undef("behaviorFastParse", djConfig) ? (safariGoodEnough) : djConfig["behaviorFastParse"])){
+		if ((dj_undef("behaviorFastParse", djConfig) ? (safariGoodEnough) : djConfig["behaviorFastParse"])) {
 			this.applyFast();
-		}else{
+		} else {
 			this.applySlow();
 		}
 		dojo.profile.end("dojo.behavior.apply");
-	}
-
+	};
 	this.matchCache = {};
-
-	this.elementsById = function(id, handleRemoved){
+	this.elementsById = function (id, handleRemoved) {
 		var removed = [];
 		var added = [];
 		arrIn(this.matchCache, id);
-		if(handleRemoved){
+		if (handleRemoved) {
 			var nodes = this.matchCache[id];
-			for(var x=0; x<nodes.length; x++){
-				if(nodes[x].id != ""){
+			for (var x = 0; x < nodes.length; x++) {
+				if (nodes[x].id != "") {
 					removed.push(nodes[x]);
 					nodes.splice(x, 1);
 					x--;
@@ -757,69 +455,64 @@
 			}
 		}
 		var tElem = dojo.byId(id);
-		while(tElem){
-			if(!tElem["idcached"]){
+		while (tElem) {
+			if (!tElem["idcached"]) {
 				added.push(tElem);
 			}
 			tElem.id = "";
 			tElem = dojo.byId(id);
 		}
 		this.matchCache[id] = this.matchCache[id].concat(added);
-		dojo.lang.forEach(this.matchCache[id], function(node){
+		dojo.lang.forEach(this.matchCache[id], function (node) {
 			node.id = id;
 			node.idcached = true;
 		});
-		return { "removed": removed, "added": added, "match": this.matchCache[id] };
-	}
-
-	this.applyToNode = function(node, action, ruleSetName){
-		if(typeof action == "string"){
+		return {"removed":removed, "added":added, "match":this.matchCache[id]};
+	};
+	this.applyToNode = function (node, action, ruleSetName) {
+		if (typeof action == "string") {
 			dojo.event.topic.registerPublisher(action, node, ruleSetName);
-		}else if(typeof action == "function"){
-			if(ruleSetName == "found"){
-				action(node);
-			}else{
-				dojo.event.connect(node, ruleSetName, action);
+		} else {
+			if (typeof action == "function") {
+				if (ruleSetName == "found") {
+					action(node);
+				} else {
+					dojo.event.connect(node, ruleSetName, action);
+				}
+			} else {
+				action.srcObj = node;
+				action.srcFunc = ruleSetName;
+				dojo.event.kwConnect(action);
 			}
-		}else{
-			action.srcObj = node;
-			action.srcFunc = ruleSetName;
-			dojo.event.kwConnect(action);
 		}
-	}
-
-	this.applyFast = function(){
+	};
+	this.applyFast = function () {
 		dojo.profile.start("dojo.behavior.applyFast");
-		// fast DOM queries...wheeee!
-		forIn(this.behaviors, function(tBehavior, id){
+		forIn(this.behaviors, function (tBehavior, id) {
 			var elems = dojo.behavior.elementsById(id);
-			dojo.lang.forEach(elems.added, 
-				function(elem){
-					forIn(tBehavior, function(ruleSet, ruleSetName){
-						if(dojo.lang.isArray(ruleSet)){
-							dojo.lang.forEach(ruleSet, function(action){
-								dojo.behavior.applyToNode(elem, action, ruleSetName);
-							});
-						}
-					});
-				}
-			);
+			dojo.lang.forEach(elems.added, function (elem) {
+				forIn(tBehavior, function (ruleSet, ruleSetName) {
+					if (dojo.lang.isArray(ruleSet)) {
+						dojo.lang.forEach(ruleSet, function (action) {
+							dojo.behavior.applyToNode(elem, action, ruleSetName);
+						});
+					}
+				});
+			});
 		});
 		dojo.profile.end("dojo.behavior.applyFast");
-	}
-	
-	this.applySlow = function(){
-		// iterate. Ugg.
+	};
+	this.applySlow = function () {
 		dojo.profile.start("dojo.behavior.applySlow");
 		var all = document.getElementsByTagName("*");
 		var allLen = all.length;
-		for(var x=0; x<allLen; x++){
+		for (var x = 0; x < allLen; x++) {
 			var elem = all[x];
-			if((elem.id)&&(!elem["behaviorAdded"])&&(this.behaviors[elem.id])){
+			if ((elem.id) && (!elem["behaviorAdded"]) && (this.behaviors[elem.id])) {
 				elem["behaviorAdded"] = true;
-				forIn(this.behaviors[elem.id], function(ruleSet, ruleSetName){
-					if(dojo.lang.isArray(ruleSet)){
-						dojo.lang.forEach(ruleSet, function(action){
+				forIn(this.behaviors[elem.id], function (ruleSet, ruleSetName) {
+					if (dojo.lang.isArray(ruleSet)) {
+						dojo.lang.forEach(ruleSet, function (action) {
 							dojo.behavior.applyToNode(elem, action, ruleSetName);
 						});
 					}
@@ -827,11 +520,11 @@
 			}
 		}
 		dojo.profile.end("dojo.behavior.applySlow");
-	}
-}
-
+	};
+};
 dojo.addOnLoad(dojo.behavior, "apply");
 
+
 __CPAN_FILE__ src/hostenv_adobesvg.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -843,315 +536,244 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-/*
- * Adobe SVG Viewer host environment
- */
-if(typeof window == 'undefined'){
+if (typeof window == "undefined") {
 	dojo.raise("attempt to use adobe svg hostenv when no window object");
 }
-
-with(dojo.render){
+with (dojo.render) {
 	name = navigator.appName;
 	ver = parseFloat(navigator.appVersion, 10);
-	switch(navigator.platform){
-		case "MacOS":
-			os.osx =  true;
-			break;
-		case "Linux":
-			os.linux =  true;
-			break;
-		case "Windows":
-			os.win =  true;
-			break;
-		default:
-			os.linux = true;
-			break;
-	};
+	switch (navigator.platform) {
+	  case "MacOS":
+		os.osx = true;
+		break;
+	  case "Linux":
+		os.linux = true;
+		break;
+	  case "Windows":
+		os.win = true;
+		break;
+	  default:
+		os.linux = true;
+		break;
+	}
 	svg.capable = true;
 	svg.support.builtin = true;
 	svg.adobe = true;
-};
-
-// browserEval("alert(window.location);");
-
-dojo.hostenv.println = function(s){
-	try{
-    // FIXME: this may not work with adobe's viewer, as we may first need a 
-		// reference to the svgDocument
-		// FIXME: need a way to determine where to position the text for this
-    var ti = document.createElement("text");
-    ti.setAttribute("x","50");
-		var yPos = 25 + 15*document.getElementsByTagName("text").length;
-    ti.setAttribute("y",yPos);
+}
+dojo.hostenv.println = function (s) {
+	try {
+		var ti = document.createElement("text");
+		ti.setAttribute("x", "50");
+		var yPos = 25 + 15 * document.getElementsByTagName("text").length;
+		ti.setAttribute("y", yPos);
 		var tn = document.createTextNode(s);
 		ti.appendChild(tn);
 		document.documentElement.appendChild(ti);
-	}catch(e){
-
 	}
-}
-
-dojo.debug = function() {
-	if (!djConfig.isDebug) { return; }
+	catch (e) {
+	}
+};
+dojo.debug = function () {
+	if (!djConfig.isDebug) {
+		return;
+	}
 	var args = arguments;
-	if(typeof dojo.hostenv.println != 'function'){
+	if (typeof dojo.hostenv.println != "function") {
 		dojo.raise("attempt to call dojo.debug when there is no dojo.hostenv println implementation (yet?)");
 	}
 	var isJUM = dj_global["jum"];
-	var s = isJUM ? "": "DEBUG: ";
-	for(var i=0;i<args.length;++i){ s += args[i]; }
-	if(isJUM){ // this seems to be the only way to get JUM to "play nice"
+	var s = isJUM ? "" : "DEBUG: ";
+	for (var i = 0; i < args.length; ++i) {
+		s += args[i];
+	}
+	if (isJUM) {
 		jum.debug(s);
-	}else{
+	} else {
 		dojo.hostenv.println(s);
 	}
-}
-
+};
 dojo.hostenv.startPackage("dojo.hostenv");
-
-dojo.hostenv.name_ = 'adobesvg';
-
+dojo.hostenv.name_ = "adobesvg";
 dojo.hostenv.anonCtr = 0;
 dojo.hostenv.anon = {};
-
-dojo.hostenv.nameAnonFunc = function(anonFuncPtr, namespaceObj){
-	var ret = "_"+this.anonCtr++;
+dojo.hostenv.nameAnonFunc = function (anonFuncPtr, namespaceObj) {
+	var ret = "_" + this.anonCtr++;
 	var nso = (namespaceObj || this.anon);
-	while(typeof nso[ret] != "undefined"){
-		ret = "_"+this.anonCtr++;
+	while (typeof nso[ret] != "undefined") {
+		ret = "_" + this.anonCtr++;
 	}
 	nso[ret] = anonFuncPtr;
 	return ret;
-}
-
+};
 dojo.hostenv.modulesLoadedFired = false;
 dojo.hostenv.modulesLoadedListeners = [];
 dojo.hostenv.getTextStack = [];
 dojo.hostenv.loadUriStack = [];
 dojo.hostenv.loadedUris = [];
-
-
-dojo.hostenv.modulesLoaded = function(){
-	if(this.modulesLoadedFired){ return; }
-	if((this.loadUriStack.length==0)&&(this.getTextStack.length==0)){
-		if(this.inFlightCount > 0){ 
+dojo.hostenv.modulesLoaded = function () {
+	if (this.modulesLoadedFired) {
+		return;
+	}
+	if ((this.loadUriStack.length == 0) && (this.getTextStack.length == 0)) {
+		if (this.inFlightCount > 0) {
 			dojo.debug("couldn't initialize, there are files still in flight");
 			return;
 		}
 		this.modulesLoadedFired = true;
 		var mll = this.modulesLoadedListeners;
-		for(var x=0; x<mll.length; x++){
+		for (var x = 0; x < mll.length; x++) {
 			mll[x]();
 		}
 	}
-}
-
-dojo.hostenv.getNewAnonFunc = function(){
-	var ret = "_"+this.anonCtr++;
-	while(typeof this.anon[ret] != "undefined"){
-		ret = "_"+this.anonCtr++;
+};
+dojo.hostenv.getNewAnonFunc = function () {
+	var ret = "_" + this.anonCtr++;
+	while (typeof this.anon[ret] != "undefined") {
+		ret = "_" + this.anonCtr++;
 	}
-	// this.anon[ret] = function(){};
-	eval("dojo.nostenv.anon."+ret+" = function(){};");
+	eval("dojo.nostenv.anon." + ret + " = function(){};");
 	return [ret, this.anon[ret]];
-}
-
-dojo.hostenv.displayStack = function(){
+};
+dojo.hostenv.displayStack = function () {
 	var oa = [];
 	var stack = this.loadUriStack;
-	for(var x=0; x<stack.length; x++){
+	for (var x = 0; x < stack.length; x++) {
 		oa.unshift([stack[x][0], (typeof stack[x][2])]);
 	}
-	dojo.debug("<pre>"+oa.join("\n")+"</pre>");
-}
-
-dojo.hostenv.unwindUriStack = function(){
+	dojo.debug("<pre>" + oa.join("\n") + "</pre>");
+};
+dojo.hostenv.unwindUriStack = function () {
 	var stack = this.loadUriStack;
-	for(var x in dojo.hostenv.loadedUris){
-		for(var y=stack.length-1; y>=0; y--){
-			if(stack[y][0]==x){
+	for (var x in dojo.hostenv.loadedUris) {
+		for (var y = stack.length - 1; y >= 0; y--) {
+			if (stack[y][0] == x) {
 				stack.splice(y, 1);
 			}
 		}
 	}
 	var next = stack.pop();
-	if((!next)&&(stack.length==0)){ 
+	if ((!next) && (stack.length == 0)) {
 		return;
 	}
-	for(var x=0; x<stack.length; x++){
-		if((stack[x][0]==next[0])&&(stack[x][2])){
-			next[2] == stack[x][2]
+	for (var x = 0; x < stack.length; x++) {
+		if ((stack[x][0] == next[0]) && (stack[x][2])) {
+			next[2] == stack[x][2];
 		}
 	}
 	var last = next;
-	while(dojo.hostenv.loadedUris[next[0]]){
+	while (dojo.hostenv.loadedUris[next[0]]) {
 		last = next;
 		next = stack.pop();
 	}
-	while(typeof next[2] == "string"){ // unwind as far as we can
-		try{
-			// dojo.debug("<pre><![CDATA["+next[2]+"]]></pre>");
+	while (typeof next[2] == "string") {
+		try {
 			dj_eval(next[2]);
 			next[1](true);
-		}catch(e){
-			dojo.debug("we got an error when loading "+next[0]);
-			dojo.debug("error: "+e);
-			// for(var x in e){ alert(x+" "+e[x]); }
 		}
+		catch (e) {
+			dojo.debug("we got an error when loading " + next[0]);
+			dojo.debug("error: " + e);
+		}
 		dojo.hostenv.loadedUris[next[0]] = true;
 		dojo.hostenv.loadedUris.push(next[0]);
 		last = next;
 		next = stack.pop();
-		if((!next)&&(stack.length==0)){ break; }
-		while(dojo.hostenv.loadedUris[next[0]]){
+		if ((!next) && (stack.length == 0)) {
+			break;
+		}
+		while (dojo.hostenv.loadedUris[next[0]]) {
 			last = next;
 			next = stack.pop();
 		}
 	}
-	if(next){
+	if (next) {
 		stack.push(next);
-		dojo.debug("### CHOKED ON: "+next[0]);
+		dojo.debug("### CHOKED ON: " + next[0]);
 	}
-}
-
-/**
- * Reads the contents of the URI, and evaluates the contents.
- * Returns true if it succeeded. Returns false if the URI reading failed. Throws if the evaluation throws.
- * The result of the eval is not available to the caller.
- */
-dojo.hostenv.loadUri = function(uri, cb){
-	if(dojo.hostenv.loadedUris[uri]){
+};
+dojo.hostenv.loadUri = function (uri, cb) {
+	if (dojo.hostenv.loadedUris[uri]) {
 		return;
 	}
 	var stack = this.loadUriStack;
 	stack.push([uri, cb, null]);
-	var tcb = function(contents){
-		// gratuitous hack for Adobe SVG 3
-		if(contents.content){
+	var tcb = function (contents) {
+		if (contents.content) {
 			contents = contents.content;
 		}
-
-		// stack management
 		var next = stack.pop();
-		if((!next)&&(stack.length==0)){ 
+		if ((!next) && (stack.length == 0)) {
 			dojo.hostenv.modulesLoaded();
 			return;
 		}
-		if(typeof contents == "string"){
+		if (typeof contents == "string") {
 			stack.push(next);
-			for(var x=0; x<stack.length; x++){
-				if(stack[x][0]==uri){
+			for (var x = 0; x < stack.length; x++) {
+				if (stack[x][0] == uri) {
 					stack[x][2] = contents;
 				}
 			}
 			next = stack.pop();
 		}
-		if(dojo.hostenv.loadedUris[next[0]]){ 
-			// dojo.debug("WE ALREADY HAD: "+next[0]);
+		if (dojo.hostenv.loadedUris[next[0]]) {
 			dojo.hostenv.unwindUriStack();
 			return;
 		}
-		// push back onto stack
 		stack.push(next);
-		if(next[0]!=uri){
-			//  and then unwind as far as we can
-			if(typeof next[2] == "string"){
+		if (next[0] != uri) {
+			if (typeof next[2] == "string") {
 				dojo.hostenv.unwindUriStack();
 			}
-
-		}else{
-			if(!contents){ 
+		} else {
+			if (!contents) {
 				next[1](false);
-			}else{
+			} else {
 				var deps = dojo.hostenv.getDepsForEval(next[2]);
-				if(deps.length>0){
+				if (deps.length > 0) {
 					eval(deps.join(";"));
-				}else{
+				} else {
 					dojo.hostenv.unwindUriStack();
 				}
 			}
 		}
-	}
+	};
 	this.getText(uri, tcb, true);
-}
-
-/**
-* loadModule("A.B") first checks to see if symbol A.B is defined. 
-* If it is, it is simply returned (nothing to do).
-* If it is not defined, it will look for "A/B.js" in the script root directory, followed
-* by "A.js".
-* It throws if it cannot find a file to load, or if the symbol A.B is not defined after loading.
-* It returns the object A.B.
-*
-* This does nothing about importing symbols into the current package.
-* It is presumed that the caller will take care of that. For example, to import
-* all symbols:
-*
-*    with (dojo.hostenv.loadModule("A.B")) {
-*       ...
-*    }
-*
-* And to import just the leaf symbol:
-*
-*    var B = dojo.hostenv.loadModule("A.B");
-*    ...
-*
-* dj_load is an alias for dojo.hostenv.loadModule
-*/
-dojo.hostenv.loadModule = function(modulename, exact_only, omit_module_check){
-	// alert("dojo.hostenv.loadModule('"+modulename+"');");
+};
+dojo.hostenv.loadModule = function (modulename, exact_only, omit_module_check) {
 	var module = this.findModule(modulename, 0);
-	if(module){
+	if (module) {
 		return module;
 	}
-
-	// dojo.debug("dojo.hostenv.loadModule('"+modulename+"');");
-
-	// protect against infinite recursion from mutual dependencies
-	if (typeof this.loading_modules_[modulename] !== 'undefined'){
-		// NOTE: this should never throw an exception!! "recursive" includes
-		// are normal in the course of app and module building, so blow out of
-		// it gracefully, but log it in debug mode
-
-		// dojo.raise("recursive attempt to load module '" + modulename + "'");
+	if (typeof this.loading_modules_[modulename] !== "undefined") {
 		dojo.debug("recursive attempt to load module '" + modulename + "'");
-	}else{
+	} else {
 		this.addedToLoadingCount.push(modulename);
 	}
 	this.loading_modules_[modulename] = 1;
-
-
-	// convert periods to slashes
-	var relpath = modulename.replace(/\./g, '/') + '.js';
-
+	var relpath = modulename.replace(/\./g, "/") + ".js";
 	var syms = modulename.split(".");
 	var nsyms = modulename.split(".");
-	if(syms[0]=="dojo"){ // FIXME: need a smarter way to do this!
-		syms[0] = "src"; 
+	if (syms[0] == "dojo") {
+		syms[0] = "src";
 	}
 	var last = syms.pop();
 	syms.push(last);
-	// figure out if we're looking for a full package, if so, we want to do
-	// things slightly diffrently
 	var _this = this;
 	var pfn = this.pkgFileName;
-	if(last=="*"){
-		modulename = (nsyms.slice(0, -1)).join('.');
-
+	if (last == "*") {
+		modulename = (nsyms.slice(0, -1)).join(".");
 		var module = this.findModule(modulename, 0);
-		// dojo.debug("found: "+modulename+"="+module);
-		if(module){
+		if (module) {
 			_this.removedFromLoadingCount.push(modulename);
 			return module;
 		}
-
-		var nextTry = function(lastStatus){
-			if(lastStatus){ 
-				module = _this.findModule(modulename, false); // pass in false so we can give better error
-				if((!module)&&(syms[syms.length-1]!=pfn)){
-					dojo.raise("Module symbol '" + modulename + "' is not defined after loading '" + relpath + "'"); 
+		var nextTry = function (lastStatus) {
+			if (lastStatus) {
+				module = _this.findModule(modulename, false);
+				if ((!module) && (syms[syms.length - 1] != pfn)) {
+					dojo.raise("Module symbol '" + modulename + "' is not defined after loading '" + relpath + "'");
 				}
-				if(module){
+				if (module) {
 					_this.removedFromLoadingCount.push(modulename);
 					dojo.hostenv.modulesLoaded();
 					return;
@@ -1159,190 +781,129 @@
 			}
 			syms.pop();
 			syms.push(pfn);
-			// dojo.debug("syms: "+syms);
-			relpath = syms.join("/") + '.js';
-			if(relpath.charAt(0)=="/"){
+			relpath = syms.join("/") + ".js";
+			if (relpath.charAt(0) == "/") {
 				relpath = relpath.slice(1);
 			}
-			// dojo.debug("relpath: "+relpath);
 			_this.loadPath(relpath, ((!omit_module_check) ? modulename : null), nextTry);
-		}
-
+		};
 		nextTry();
-	}else{
-		relpath = syms.join("/") + '.js';
-		modulename = nsyms.join('.');
-
-		var nextTry = function(lastStatus){
-			// dojo.debug("lastStatus: "+lastStatus);
-			if(lastStatus){ 
-				// dojo.debug("inital relpath: "+relpath);
-				module = _this.findModule(modulename, false); // pass in false so we can give better error
-				// if(!module){
-				if((!module)&&(syms[syms.length-1]!=pfn)){
-					dojo.raise("Module symbol '" + modulename + "' is not defined after loading '" + relpath + "'"); 
+	} else {
+		relpath = syms.join("/") + ".js";
+		modulename = nsyms.join(".");
+		var nextTry = function (lastStatus) {
+			if (lastStatus) {
+				module = _this.findModule(modulename, false);
+				if ((!module) && (syms[syms.length - 1] != pfn)) {
+					dojo.raise("Module symbol '" + modulename + "' is not defined after loading '" + relpath + "'");
 				}
-				if(module){
+				if (module) {
 					_this.removedFromLoadingCount.push(modulename);
 					dojo.hostenv.modulesLoaded();
 					return;
 				}
 			}
-			var setPKG = (syms[syms.length-1]==pfn) ? false : true;
+			var setPKG = (syms[syms.length - 1] == pfn) ? false : true;
 			syms.pop();
-			if(setPKG){
+			if (setPKG) {
 				syms.push(pfn);
 			}
-			relpath = syms.join("/") + '.js';
-			if(relpath.charAt(0)=="/"){
+			relpath = syms.join("/") + ".js";
+			if (relpath.charAt(0) == "/") {
 				relpath = relpath.slice(1);
 			}
-			// dojo.debug("relpath: "+relpath);
 			_this.loadPath(relpath, ((!omit_module_check) ? modulename : null), nextTry);
-		}
-
+		};
 		this.loadPath(relpath, ((!omit_module_check) ? modulename : null), nextTry);
 	}
 	return;
-}
-
-/**
- * Read the contents of the specified uri and return those contents.
- *
- * FIXME: Make sure this is consistent with other implementations of getText
- * @param uri A relative or absolute uri. If absolute, it still must be in the same "domain" as we are.
- * @param async_cb If not specified, returns false as synchronous is not
- * supported. If specified, load asynchronously, and use async_cb as the handler which receives the result of the request.
- * @param fail_ok Default false. If fail_ok and !async_cb and loading fails, return null instead of throwing.
- */ 
+};
 dojo.hostenv.async_cb = null;
-
-dojo.hostenv.unWindGetTextStack = function(){
-	if(dojo.hostenv.inFlightCount>0){
+dojo.hostenv.unWindGetTextStack = function () {
+	if (dojo.hostenv.inFlightCount > 0) {
 		setTimeout("dojo.hostenv.unWindGetTextStack()", 100);
 		return;
 	}
-	// we serialize because this environment is too messed up
-	// to know how to do anything else
 	dojo.hostenv.inFlightCount++;
 	var next = dojo.hostenv.getTextStack.pop();
-	if((!next)&&(dojo.hostenv.getTextStack.length==0)){ 
+	if ((!next) && (dojo.hostenv.getTextStack.length == 0)) {
 		dojo.hostenv.inFlightCount--;
-		dojo.hostenv.async_cb = function(){};
+		dojo.hostenv.async_cb = function () {
+		};
 		return;
 	}
 	dojo.hostenv.async_cb = next[1];
-	// http = window.getURL(uri, dojo.hostenv.anon[cbn]);
-	window.getURL(next[0], function(result){ 
+	window.getURL(next[0], function (result) {
 		dojo.hostenv.inFlightCount--;
 		dojo.hostenv.async_cb(result.content);
 		dojo.hostenv.unWindGetTextStack();
 	});
-}
-
-dojo.hostenv.getText = function(uri, async_cb, fail_ok){
-	// dojo.debug("Calling getText()");
-	try{
-		if(async_cb){
+};
+dojo.hostenv.getText = function (uri, async_cb, fail_ok) {
+	try {
+		if (async_cb) {
 			dojo.hostenv.getTextStack.push([uri, async_cb, fail_ok]);
 			dojo.hostenv.unWindGetTextStack();
-		}else{
+		} else {
 			return dojo.raise("No synchronous XMLHTTP implementation available, for uri " + uri);
 		}
-	}catch(e){
+	}
+	catch (e) {
 		return dojo.raise("No XMLHTTP implementation available, for uri " + uri);
 	}
-}
-
-
-/**
- * Makes an async post to the specified uri.
- *
- * FIXME: Not sure that we need this, but adding for completeness.
- * More details about the implementation of this are available at 
- * http://wiki.svg.org/index.php/PostUrl
- * @param uri A relative or absolute uri. If absolute, it still must be in the same "domain" as we are.
- * @param async_cb If not specified, returns false as synchronous is not
- * supported. If specified, load asynchronously, and use async_cb as the progress handler which takes the xmlhttp object as its argument. If async_cb, this function returns null.
- * @param text Data to post
- * @param fail_ok Default false. If fail_ok and !async_cb and loading fails, return null instead of throwing.
- * @param mime_type optional MIME type of the posted data (such as "text/plain")
- * @param encoding optional encoding for data. null, 'gzip' and 'deflate' are possible values. If browser does not support binary post this parameter is ignored.
- */ 
-dojo.hostenv.postText = function(uri, async_cb, text, fail_ok, mime_type, encoding){
+};
+dojo.hostenv.postText = function (uri, async_cb, text, fail_ok, mime_type, encoding) {
 	var http = null;
-	
-	var async_callback = function(httpResponse){
+	var async_callback = function (httpResponse) {
 		if (!httpResponse.success) {
 			dojo.raise("Request for uri '" + uri + "' resulted in " + httpResponse.status);
 		}
-		
-		if(!httpResponse.content) {
-			if (!fail_ok) dojo.raise("Request for uri '" + uri + "' resulted in no content");
+		if (!httpResponse.content) {
+			if (!fail_ok) {
+				dojo.raise("Request for uri '" + uri + "' resulted in no content");
+			}
 			return null;
 		}
-		// FIXME: wtf, I'm losing a reference to async_cb
 		async_cb(httpResponse.content);
-	}
-	
+	};
 	try {
-		if(async_cb) {
+		if (async_cb) {
 			http = window.postURL(uri, text, async_callback, mimeType, encoding);
 		} else {
-		return dojo.raise("No synchronous XMLHTTP post implementation available, for uri " + uri);
+			return dojo.raise("No synchronous XMLHTTP post implementation available, for uri " + uri);
 		}
-	} catch(e) {
+	}
+	catch (e) {
 		return dojo.raise("No XMLHTTP post implementation available, for uri " + uri);
 	}
-}
-
-/*
- * It turns out that if we check *right now*, as this script file is being loaded,
- * then the last script element in the window DOM is ourselves.
- * That is because any subsequent script elements haven't shown up in the document
- * object yet.
- */
+};
 function dj_last_script_src() {
-	var scripts = window.document.getElementsByTagName('script');
-	if(scripts.length < 1){ 
-		dojo.raise("No script elements in window.document, so can't figure out my script src"); 
+	var scripts = window.document.getElementsByTagName("script");
+	if (scripts.length < 1) {
+		dojo.raise("No script elements in window.document, so can't figure out my script src");
 	}
-	var li = scripts.length-1;
+	var li = scripts.length - 1;
 	var xlinkNS = "http://www.w3.org/1999/xlink";
 	var src = null;
 	var script = null;
-	while(!src){
+	while (!src) {
 		script = scripts.item(li);
-		src = script.getAttributeNS(xlinkNS,"href");
+		src = script.getAttributeNS(xlinkNS, "href");
 		li--;
-		if(li<0){ break; }
-		// break;
+		if (li < 0) {
+			break;
+		}
 	}
-	if(!src){
+	if (!src) {
 		dojo.raise("Last script element (out of " + scripts.length + ") has no src");
 	}
 	return src;
 }
-
-if(!dojo.hostenv["library_script_uri_"]){
+if (!dojo.hostenv["library_script_uri_"]) {
 	dojo.hostenv.library_script_uri_ = dj_last_script_src();
 }
+dojo.requireIf((djConfig["isDebug"] || djConfig["debugAtAllCosts"]), "dojo.debug");
 
-// dojo.hostenv.loadUri = function(uri){
-	/* FIXME: adding a script element doesn't seem to be synchronous, and so
-	 * checking for namespace or object existance after loadUri using this
-	 * method will error out. Need to figure out some other way of handling
-	 * this!
-	 */
-	/*
-	var se = document.createElement("script");
-	se.src = uri;
-	var head = document.getElementsByTagName("head")[0];
-	head.appendChild(se);
-	// document.write("<script type='text/javascript' src='"+uri+"' />");
-	return 1;
-}
-*/
 
 __CPAN_FILE__ src/debug.js
 /*
@@ -1355,29 +916,26 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.debug = function(/*...*/){
-	// summary:
-	//		Produce a line of debug output. Does nothing unless
-	//		djConfig.isDebug is true. Accepts any nubmer of args, joined with
-	//		' ' to produce a single line of debugging output.  Caller should not
-	//		supply a trailing "\n".
-	if (!djConfig.isDebug) { return; }
+dojo.provide("dojo.debug");
+dojo.debug = function () {
+	if (!djConfig.isDebug) {
+		return;
+	}
 	var args = arguments;
-	if(dj_undef("println", dojo.hostenv)){
+	if (dj_undef("println", dojo.hostenv)) {
 		dojo.raise("dojo.debug not available (yet?)");
 	}
 	var isJUM = dj_global["jum"] && !dj_global["jum"].isBrowser;
-	var s = [(isJUM ? "": "DEBUG: ")];
-	for(var i=0;i<args.length;++i){
-		if(!false && args[i] && args[i] instanceof Error){
-			var msg = "[" + args[i].name + ": " + dojo.errorToString(args[i]) +
-				(args[i].fileName ? ", file: " + args[i].fileName : "") +
-				(args[i].lineNumber ? ", line: " + args[i].lineNumber : "") + "]";
+	var s = [(isJUM ? "" : "DEBUG: ")];
+	for (var i = 0; i < args.length; ++i) {
+		if (!false && args[i] && args[i] instanceof Error) {
+			var msg = "[" + args[i].name + ": " + dojo.errorToString(args[i]) + (args[i].fileName ? ", file: " + args[i].fileName : "") + (args[i].lineNumber ? ", line: " + args[i].lineNumber : "") + "]";
 		} else {
 			try {
 				var msg = String(args[i]);
-			} catch(e) {
-				if(dojo.render.html.ie) {
+			}
+			catch (e) {
+				if (dojo.render.html.ie) {
 					var msg = "[ActiveXObject]";
 				} else {
 					var msg = "[unknown]";
@@ -1386,57 +944,52 @@
 		}
 		s.push(msg);
 	}
-	
 	dojo.hostenv.println(s.join(" "));
-}
-
-/**
- * this is really hacky for now - just 
- * display the properties of the object
-**/
-
-dojo.debugShallow = function(/*Object*/obj){
-	// summary:
-	//		outputs a "name: value" style listing of all enumerable properties
-	//		in obj. Does nothing if djConfig.isDebug == false.
-	// obj: the object to be enumerated
-	if (!djConfig.isDebug) { return; }
-	dojo.debug('------------------------------------------------------------');
-	dojo.debug('Object: '+obj);
+};
+dojo.debugShallow = function (obj) {
+	if (!djConfig.isDebug) {
+		return;
+	}
+	dojo.debug("------------------------------------------------------------");
+	dojo.debug("Object: " + obj);
 	var props = [];
-	for(var prop in obj){
+	for (var prop in obj) {
 		try {
-			props.push(prop + ': ' + obj[prop]);
-		} catch(E) {
-			props.push(prop + ': ERROR - ' + E.message);
+			props.push(prop + ": " + obj[prop]);
 		}
+		catch (E) {
+			props.push(prop + ": ERROR - " + E.message);
+		}
 	}
 	props.sort();
-	for(var i = 0; i < props.length; i++) {
+	for (var i = 0; i < props.length; i++) {
 		dojo.debug(props[i]);
 	}
-	dojo.debug('------------------------------------------------------------');
-}
-
-dojo.debugDeep = function(/*Object*/obj){
-	// summary:
-	//		provides an "object explorer" view of the passed obj in a popup
-	//		window.
-	// obj: the object to be examined
-	if (!djConfig.isDebug) { return; }
-	if (!dojo.uri || !dojo.uri.dojoUri){ return dojo.debug("You'll need to load dojo.uri.* for deep debugging - sorry!"); }
-	if (!window.open){ return dojo.debug('Deep debugging is only supported in host environments with window.open'); }
+	dojo.debug("------------------------------------------------------------");
+};
+dojo.debugDeep = function (obj) {
+	if (!djConfig.isDebug) {
+		return;
+	}
+	if (!dojo.uri || !dojo.uri.dojoUri) {
+		return dojo.debug("You'll need to load dojo.uri.* for deep debugging - sorry!");
+	}
+	if (!window.open) {
+		return dojo.debug("Deep debugging is only supported in host environments with window.open");
+	}
 	var idx = dojo.debugDeep.debugVars.length;
 	dojo.debugDeep.debugVars.push(obj);
-	// dojo.undo.browser back and forward breaks relpaths
-	var url = new dojo.uri.Uri(location, dojo.uri.dojoUri("src/debug/deep.html?var="+idx)).toString();
-	var win = window.open(url, '_blank', 'width=600, height=400, resizable=yes, scrollbars=yes, status=yes');
-	try{
+	var url = (djConfig["dojoDebugDeepHtmlUrl"] || new dojo.uri.Uri(location, dojo.uri.moduleUri("dojo.debug", "deep.html")).toString()) + "?var=" + idx;
+	var win = window.open(url, "_blank", "width=600, height=400, resizable=yes, scrollbars=yes, status=yes");
+	try {
 		win.debugVar = obj;
-	}catch(e){}
-}
+	}
+	catch (e) {
+	}
+};
 dojo.debugDeep.debugVars = [];
 
+
 __CPAN_FILE__ src/hostenv_spidermonkey.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -1448,137 +1001,45 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-/*
- * SpiderMonkey host environment
- */
-
-dojo.hostenv.name_ = 'spidermonkey';
-
+dojo.hostenv.name_ = "spidermonkey";
 dojo.hostenv.println = print;
-dojo.hostenv.exit = function(exitcode){ 
-	quit(exitcode); 
-}
-
-// version() returns 0, sigh. and build() returns nothing but just prints.
-dojo.hostenv.getVersion = function(){ return version(); }
-
-// make jsc shut up (so we can use jsc for sanity checking) 
-/*@cc_on
- at if (@_jscript_version >= 7)
-var line2pc; var print; var load; var quit;
- at end
-@*/
-
-if(typeof line2pc == 'undefined'){
+dojo.hostenv.exit = function (exitcode) {
+	quit(exitcode);
+};
+dojo.hostenv.getVersion = function () {
+	return version();
+};
+if (typeof line2pc == "undefined") {
 	dojo.raise("attempt to use SpiderMonkey host environment when no 'line2pc' global");
 }
-
-/*
- * This is a hack that determines the current script file by parsing a generated
- * stack trace (relying on the non-standard "stack" member variable of the
- * SpiderMonkey Error object).
- * If param depth is passed in, it'll return the script file which is that far down
- * the stack, but that does require that you know how deep your stack is when you are
- * calling.
- */
-function dj_spidermonkey_current_file(depth){
-    var s = '';
-    try{
+function dj_spidermonkey_current_file(depth) {
+	var s = "";
+	try {
 		throw Error("whatever");
-	}catch(e){
+	}
+	catch (e) {
 		s = e.stack;
 	}
-    // lines are like: bu_getCurrentScriptURI_spidermonkey("ScriptLoader.js")@burst/Runtime.js:101
-    var matches = s.match(/[^@]*\.js/gi);
-    if(!matches){ 
+	var matches = s.match(/[^@]*\.js/gi);
+	if (!matches) {
 		dojo.raise("could not parse stack string: '" + s + "'");
 	}
-    var fname = (typeof depth != 'undefined' && depth) ? matches[depth + 1] : matches[matches.length - 1];
-    if(!fname){ 
+	var fname = (typeof depth != "undefined" && depth) ? matches[depth + 1] : matches[matches.length - 1];
+	if (!fname) {
 		dojo.raise("could not find file name in stack string '" + s + "'");
 	}
-    //print("SpiderMonkeyRuntime got fname '" + fname + "' from stack string '" + s + "'");
-    return fname;
+	return fname;
 }
-
-// call this now because later we may not be on the top of the stack
-if(!dojo.hostenv.library_script_uri_){ 
-	dojo.hostenv.library_script_uri_ = dj_spidermonkey_current_file(0); 
+if (!dojo.hostenv.library_script_uri_) {
+	dojo.hostenv.library_script_uri_ = dj_spidermonkey_current_file(0);
 }
-
-dojo.hostenv.loadUri = function(uri){
-	// spidermonkey load() evaluates the contents into the global scope (which
-	// is what we want).
-	// TODO: sigh, load() does not return a useful value. 
-	// Perhaps it is returning the value of the last thing evaluated?
+dojo.hostenv.loadUri = function (uri) {
 	var ok = load(uri);
-	// dojo.debug("spidermonkey load(", uri, ") returned ", ok);
 	return 1;
-}
+};
+dojo.requireIf((djConfig["isDebug"] || djConfig["debugAtAllCosts"]), "dojo.debug");
 
 
-
-__CPAN_FILE__ src/bootstrap2.js
-/*
-	Copyright (c) 2004-2006, 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/community/licensing.shtml
-*/
-
-//Semicolon is for when this file is integrated with a custom build on one line
-//with some other file's contents. Sometimes that makes things not get defined
-//properly, particularly with the using the closure below to do all the work.
-;(function(){
-	//Don't do this work if dojo.js has already done it.
-	if(typeof dj_usingBootstrap != "undefined"){
-		return;
-	}
-
-	var isRhino = false;
-	var isSpidermonkey = false;
-	var isDashboard = false;
-	if((typeof this["load"] == "function")&&((typeof this["Packages"] == "function")||(typeof this["Packages"] == "object"))){
-		isRhino = true;
-	}else if(typeof this["load"] == "function"){
-		isSpidermonkey  = true;
-	}else if(window.widget){
-		isDashboard = true;
-	}
-
-	var tmps = [];
-	if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-		tmps.push("debug.js");
-	}
-
-	if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!isRhino)&&(!isDashboard)){
-		tmps.push("browser_debug.js");
-	}
-
-	var loaderRoot = djConfig["baseScriptUri"];
-	if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-		loaderRoot = djConfig["baseLoaderUri"];
-	}
-
-	for(var x=0; x < tmps.length; x++){
-		var spath = loaderRoot+"src/"+tmps[x];
-		if(isRhino||isSpidermonkey){
-			load(spath);
-		} else {
-			try {
-				document.write("<scr"+"ipt type='text/javascript' src='"+spath+"'></scr"+"ipt>");
-			} catch (e) {
-				var script = document.createElement("script");
-				script.src = spath;
-				document.getElementsByTagName("head")[0].appendChild(script);
-			}
-		}
-	}
-})();
-
 __CPAN_FILE__ src/loader.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -1590,765 +1051,443 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-/*
- * loader.js - A bootstrap module.  Runs before the hostenv_*.js file. Contains all of the package loading methods.
- */
-
-//A semi-colon is at the start of the line because after doing a build, this function definition
-//get compressed onto the same line as the last line in bootstrap1.js. That list line is just a
-//curly bracket, and the browser complains about that syntax. The semicolon fixes it. Putting it
-//here instead of at the end of bootstrap1.js, since it is more of an issue for this file, (using
-//the closure), and bootstrap1.js could change in the future.
-;(function(){
-	//Additional properties for dojo.hostenv
-	var _addHostEnv = {
-		pkgFileName: "__package__",
-	
-		// for recursion protection
-		loading_modules_: {},
-		loaded_modules_: {},
-		addedToLoadingCount: [],
-		removedFromLoadingCount: [],
-	
-		inFlightCount: 0,
-	
-		// FIXME: it should be possible to pull module prefixes in from djConfig
-		modulePrefixes_: {
-			dojo: {name: "dojo", value: "src"}
-		},
-
-		setModulePrefix: function(/*String*/module, /*String*/prefix){
-			// summary: establishes module/prefix pair
-			this.modulePrefixes_[module] = {name: module, value: prefix};
-		},
-
-		moduleHasPrefix: function(/*String*/module){
-			// summary: checks to see if module has been established
-			var mp = this.modulePrefixes_;
-			return Boolean(mp[module] && mp[module].value); // Boolean
-		},
-
-		getModulePrefix: function(/*String*/module){
-			// summary: gets the prefix associated with module
-			if(this.moduleHasPrefix(module)){
-				return this.modulePrefixes_[module].value; // String
-			}
-			return module; // String
-		},
-
-		getTextStack: [],
-		loadUriStack: [],
-		loadedUris: [],
-	
-		//WARNING: This variable is referenced by packages outside of bootstrap: FloatingPane.js and undo/browser.js
-		post_load_: false,
-		
-		//Egad! Lots of test files push on this directly instead of using dojo.addOnLoad.
-		modulesLoadedListeners: [],
-		unloadListeners: [],
-		loadNotifying: false
-	};
-	
-	//Add all of these properties to dojo.hostenv
-	for(var param in _addHostEnv){
+(function () {
+	var _addHostEnv = {pkgFileName:"__package__", loading_modules_:{}, loaded_modules_:{}, addedToLoadingCount:[], removedFromLoadingCount:[], inFlightCount:0, modulePrefixes_:{dojo:{name:"dojo", value:"src"}}, setModulePrefix:function (module, prefix) {
+		this.modulePrefixes_[module] = {name:module, value:prefix};
+	}, moduleHasPrefix:function (module) {
+		var mp = this.modulePrefixes_;
+		return Boolean(mp[module] && mp[module].value);
+	}, getModulePrefix:function (module) {
+		if (this.moduleHasPrefix(module)) {
+			return this.modulePrefixes_[module].value;
+		}
+		return module;
+	}, getTextStack:[], loadUriStack:[], loadedUris:[], post_load_:false, modulesLoadedListeners:[], unloadListeners:[], loadNotifying:false};
+	for (var param in _addHostEnv) {
 		dojo.hostenv[param] = _addHostEnv[param];
 	}
 })();
-
-dojo.hostenv.loadPath = function(/*String*/relpath, /*String?*/module, /*Function?*/cb){
-// summary:
-//	Load a Javascript module given a relative path
-//
-// description:
-//	Loads and interprets the script located at relpath, which is relative to the
-//	script root directory.  If the script is found but its interpretation causes
-//	a runtime exception, that exception is not caught by us, so the caller will
-//	see it.  We return a true value if and only if the script is found.
-//
-//	For now, we do not have an implementation of a true search path.  We
-//	consider only the single base script uri, as returned by getBaseScriptUri().
-//
-// relpath: A relative path to a script (no leading '/', and typically
-// 	ending in '.js').
-// module: A module whose existance to check for after loading a path.
-//	Can be used to determine success or failure of the load.
-// cb: a callback function to pass the result of evaluating the script
-
+dojo.hostenv.loadPath = function (relpath, module, cb) {
 	var uri;
-	if(relpath.charAt(0) == '/' || relpath.match(/^\w+:/)){
-		// dojo.raise("relpath '" + relpath + "'; must be relative");
+	if (relpath.charAt(0) == "/" || relpath.match(/^\w+:/)) {
 		uri = relpath;
-	}else{
+	} else {
 		uri = this.getBaseScriptUri() + relpath;
 	}
-	if(djConfig.cacheBust && dojo.render.html.capable){
-		uri += "?" + String(djConfig.cacheBust).replace(/\W+/g,"");
+	if (djConfig.cacheBust && dojo.render.html.capable) {
+		uri += "?" + String(djConfig.cacheBust).replace(/\W+/g, "");
 	}
-	try{
-		return !module ? this.loadUri(uri, cb) : this.loadUriAndCheck(uri, module, cb); // Boolean
-	}catch(e){
+	try {
+		return !module ? this.loadUri(uri, cb) : this.loadUriAndCheck(uri, module, cb);
+	}
+	catch (e) {
 		dojo.debug(e);
-		return false; // Boolean
+		return false;
 	}
-}
-
-dojo.hostenv.loadUri = function(/*String (URL)*/uri, /*Function?*/cb){
-// summary:
-//	Loads JavaScript from a URI
-//
-// description:
-//	Reads the contents of the URI, and evaluates the contents.  This is used to load modules as well
-//	as resource bundles.  Returns true if it succeeded. Returns false if the URI reading failed.
-//	Throws if the evaluation throws.
-//
-// uri: a uri which points at the script to be loaded
-// cb: a callback function to process the result of evaluating the script as an expression, typically
-//	used by the resource bundle loader to load JSON-style resources
-
-	if(this.loadedUris[uri]){
-		return true; // Boolean
+};
+dojo.hostenv.loadUri = function (uri, cb) {
+	if (this.loadedUris[uri]) {
+		return true;
 	}
 	var contents = this.getText(uri, null, true);
-	if(!contents){ return false; } // Boolean
+	if (!contents) {
+		return false;
+	}
 	this.loadedUris[uri] = true;
-	if(cb){ contents = '('+contents+')'; }
+	if (cb) {
+		contents = "(" + contents + ")";
+	}
 	var value = dj_eval(contents);
-	if(cb){ cb(value); }
-	return true; // Boolean
-}
-
-// FIXME: probably need to add logging to this method
-dojo.hostenv.loadUriAndCheck = function(/*String (URL)*/uri, /*String*/moduleName, /*Function?*/cb){
-	// summary: calls loadUri then findModule and returns true if both succeed
+	if (cb) {
+		cb(value);
+	}
+	return true;
+};
+dojo.hostenv.loadUriAndCheck = function (uri, moduleName, cb) {
 	var ok = true;
-	try{
+	try {
 		ok = this.loadUri(uri, cb);
-	}catch(e){
+	}
+	catch (e) {
 		dojo.debug("failed loading ", uri, " with error: ", e);
 	}
-	return Boolean(ok && this.findModule(moduleName, false)); // Boolean
-}
-
-dojo.loaded = function(){ }
-dojo.unloaded = function(){ }
-
-dojo.hostenv.loaded = function(){
+	return Boolean(ok && this.findModule(moduleName, false));
+};
+dojo.loaded = function () {
+};
+dojo.unloaded = function () {
+};
+dojo.hostenv.loaded = function () {
 	this.loadNotifying = true;
 	this.post_load_ = true;
 	var mll = this.modulesLoadedListeners;
-	for(var x=0; x<mll.length; x++){
+	for (var x = 0; x < mll.length; x++) {
 		mll[x]();
 	}
-
-	//Clear listeners so new ones can be added
-	//For other xdomain package loads after the initial load.
 	this.modulesLoadedListeners = [];
 	this.loadNotifying = false;
-
 	dojo.loaded();
-}
-
-dojo.hostenv.unloaded = function(){
+};
+dojo.hostenv.unloaded = function () {
 	var mll = this.unloadListeners;
-	while(mll.length){
+	while (mll.length) {
 		(mll.pop())();
 	}
 	dojo.unloaded();
-}
-
-dojo.addOnLoad = function(/*Object?*/obj, /*String|Function*/functionName) {
-// summary:
-//	Registers a function to be triggered after the DOM has finished loading 
-//	and widgets declared in markup have been instantiated.  Images and CSS files
-//	may or may not have finished downloading when the specified function is called.
-//	(Note that widgets' CSS and HTML code is guaranteed to be downloaded before said
-//	widgets are instantiated.)
-//
-// usage:
-//	dojo.addOnLoad(functionPointer)
-//	dojo.addOnLoad(object, "functionName")
-
+};
+dojo.addOnLoad = function (obj, functionName) {
 	var dh = dojo.hostenv;
-	if(arguments.length == 1) {
+	if (arguments.length == 1) {
 		dh.modulesLoadedListeners.push(obj);
-	} else if(arguments.length > 1) {
-		dh.modulesLoadedListeners.push(function() {
-			obj[functionName]();
-		});
+	} else {
+		if (arguments.length > 1) {
+			dh.modulesLoadedListeners.push(function () {
+				obj[functionName]();
+			});
+		}
 	}
-
-	//Added for xdomain loading. dojo.addOnLoad is used to
-	//indicate callbacks after doing some dojo.require() statements.
-	//In the xdomain case, if all the requires are loaded (after initial
-	//page load), then immediately call any listeners.
-	if(dh.post_load_ && dh.inFlightCount == 0 && !dh.loadNotifying){
+	if (dh.post_load_ && dh.inFlightCount == 0 && !dh.loadNotifying) {
 		dh.callLoaded();
 	}
-}
-
-dojo.addOnUnload = function(/*Object?*/obj, /*String|Function?*/functionName){
-// summary: registers a function to be triggered when the page unloads
-//
-// usage:
-//	dojo.addOnLoad(functionPointer)
-//	dojo.addOnLoad(object, "functionName")
+};
+dojo.addOnUnload = function (obj, functionName) {
 	var dh = dojo.hostenv;
-	if(arguments.length == 1){
+	if (arguments.length == 1) {
 		dh.unloadListeners.push(obj);
-	} else if(arguments.length > 1) {
-		dh.unloadListeners.push(function() {
-			obj[functionName]();
-		});
+	} else {
+		if (arguments.length > 1) {
+			dh.unloadListeners.push(function () {
+				obj[functionName]();
+			});
+		}
 	}
-}
-
-dojo.hostenv.modulesLoaded = function(){
-	if(this.post_load_){ return; }
-	if(this.loadUriStack.length==0 && this.getTextStack.length==0){
-		if(this.inFlightCount > 0){ 
+};
+dojo.hostenv.modulesLoaded = function () {
+	if (this.post_load_) {
+		return;
+	}
+	if (this.loadUriStack.length == 0 && this.getTextStack.length == 0) {
+		if (this.inFlightCount > 0) {
 			dojo.debug("files still in flight!");
 			return;
 		}
 		dojo.hostenv.callLoaded();
 	}
-}
-
-dojo.hostenv.callLoaded = function(){
-	if(typeof setTimeout == "object"){
+};
+dojo.hostenv.callLoaded = function () {
+	if (typeof setTimeout == "object" || (djConfig["useXDomain"] && dojo.render.html.opera)) {
 		setTimeout("dojo.hostenv.loaded();", 0);
-	}else{
+	} else {
 		dojo.hostenv.loaded();
 	}
-}
-
-dojo.hostenv.getModuleSymbols = function(/*String*/modulename){
-// summary:
-//	Converts a module name in dotted JS notation to an array representing the path in the source tree
+};
+dojo.hostenv.getModuleSymbols = function (modulename) {
 	var syms = modulename.split(".");
-	for(var i = syms.length; i>0; i--){
+	for (var i = syms.length; i > 0; i--) {
 		var parentModule = syms.slice(0, i).join(".");
-		if((i==1) && !this.moduleHasPrefix(parentModule)){		
-			// Support default module directory (sibling of dojo) for top-level modules 
+		if ((i == 1) && !this.moduleHasPrefix(parentModule)) {
 			syms[0] = "../" + syms[0];
-		}else{
+		} else {
 			var parentModulePath = this.getModulePrefix(parentModule);
-			if(parentModulePath != parentModule){
+			if (parentModulePath != parentModule) {
 				syms.splice(0, i, parentModulePath);
 				break;
 			}
 		}
 	}
-	return syms; // Array
-}
-
+	return syms;
+};
 dojo.hostenv._global_omit_module_check = false;
-dojo.hostenv.loadModule = function(/*String*/moduleName, /*Boolean?*/exactOnly, /*Boolean?*/omitModuleCheck){
-// summary:
-//	loads a Javascript module from the appropriate URI
-//
-// description:
-//	loadModule("A.B") first checks to see if symbol A.B is defined. 
-//	If it is, it is simply returned (nothing to do).
-//	
-//	If it is not defined, it will look for "A/B.js" in the script root directory,
-//	followed by "A.js".
-//	
-//	It throws if it cannot find a file to load, or if the symbol A.B is not
-//	defined after loading.
-//	
-//	It returns the object A.B.
-//	
-//	This does nothing about importing symbols into the current package.
-//	It is presumed that the caller will take care of that. For example, to import
-//	all symbols:
-//	
-//	   with (dojo.hostenv.loadModule("A.B")) {
-//	      ...
-//	   }
-//	
-//	And to import just the leaf symbol:
-//	
-//	   var B = dojo.hostenv.loadModule("A.B");
-//	   ...
-//	
-//	dj_load is an alias for dojo.hostenv.loadModule
-
-	if(!moduleName){ return; }
+dojo.hostenv.loadModule = function (moduleName, exactOnly, omitModuleCheck) {
+	if (!moduleName) {
+		return;
+	}
 	omitModuleCheck = this._global_omit_module_check || omitModuleCheck;
 	var module = this.findModule(moduleName, false);
-	if(module){
+	if (module) {
 		return module;
 	}
-
-	// protect against infinite recursion from mutual dependencies
-	if(dj_undef(moduleName, this.loading_modules_)){
+	if (dj_undef(moduleName, this.loading_modules_)) {
 		this.addedToLoadingCount.push(moduleName);
 	}
 	this.loading_modules_[moduleName] = 1;
-
-	// convert periods to slashes
-	var relpath = moduleName.replace(/\./g, '/') + '.js';
-
+	var relpath = moduleName.replace(/\./g, "/") + ".js";
 	var nsyms = moduleName.split(".");
-	
-	// this line allowed loading of a module manifest as if it were a namespace
-	// it's an interesting idea, but shouldn't be combined with 'namespaces' proper
-	// and leads to unwanted dependencies
-	// the effect can be achieved in other (albeit less-flexible) ways now, so I am
-	// removing this pending further design work
-	// perhaps we can explicitly define this idea of a 'module manifest', and subclass
-	// 'namespace manifest' from that
-	//dojo.getNamespace(nsyms[0]);
-
 	var syms = this.getModuleSymbols(moduleName);
-	var startedRelative = ((syms[0].charAt(0) != '/') && !syms[0].match(/^\w+:/));
+	var startedRelative = ((syms[0].charAt(0) != "/") && !syms[0].match(/^\w+:/));
 	var last = syms[syms.length - 1];
 	var ok;
-	// figure out if we're looking for a full package, if so, we want to do
-	// things slightly diffrently
-	if(last=="*"){
-		moduleName = nsyms.slice(0, -1).join('.');
-		while(syms.length){
+	if (last == "*") {
+		moduleName = nsyms.slice(0, -1).join(".");
+		while (syms.length) {
 			syms.pop();
 			syms.push(this.pkgFileName);
-			relpath = syms.join("/") + '.js';
-			if(startedRelative && relpath.charAt(0)=="/"){
+			relpath = syms.join("/") + ".js";
+			if (startedRelative && relpath.charAt(0) == "/") {
 				relpath = relpath.slice(1);
 			}
 			ok = this.loadPath(relpath, !omitModuleCheck ? moduleName : null);
-			if(ok){ break; }
+			if (ok) {
+				break;
+			}
 			syms.pop();
 		}
-	}else{
-		relpath = syms.join("/") + '.js';
-		moduleName = nsyms.join('.');
+	} else {
+		relpath = syms.join("/") + ".js";
+		moduleName = nsyms.join(".");
 		var modArg = !omitModuleCheck ? moduleName : null;
 		ok = this.loadPath(relpath, modArg);
-		if(!ok && !exactOnly){
+		if (!ok && !exactOnly) {
 			syms.pop();
-			while(syms.length){
-				relpath = syms.join('/') + '.js';
+			while (syms.length) {
+				relpath = syms.join("/") + ".js";
 				ok = this.loadPath(relpath, modArg);
-				if(ok){ break; }
+				if (ok) {
+					break;
+				}
 				syms.pop();
-				relpath = syms.join('/') + '/'+this.pkgFileName+'.js';
-				if(startedRelative && relpath.charAt(0)=="/"){
+				relpath = syms.join("/") + "/" + this.pkgFileName + ".js";
+				if (startedRelative && relpath.charAt(0) == "/") {
 					relpath = relpath.slice(1);
 				}
 				ok = this.loadPath(relpath, modArg);
-				if(ok){ break; }
+				if (ok) {
+					break;
+				}
 			}
 		}
-
-		if(!ok && !omitModuleCheck){
+		if (!ok && !omitModuleCheck) {
 			dojo.raise("Could not load '" + moduleName + "'; last tried '" + relpath + "'");
 		}
 	}
-
-	// check that the symbol was defined
-	//Don't bother if we're doing xdomain (asynchronous) loading.
-	if(!omitModuleCheck && !this["isXDomain"]){
-		// pass in false so we can give better error
+	if (!omitModuleCheck && !this["isXDomain"]) {
 		module = this.findModule(moduleName, false);
-		if(!module){
-			dojo.raise("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); 
+		if (!module) {
+			dojo.raise("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'");
 		}
 	}
-
 	return module;
-}
-
-dojo.hostenv.startPackage = function(/*String*/packageName){
-// summary:
-//	Creates a JavaScript package
-//
-// description:
-//	startPackage("A.B") follows the path, and at each level creates a new empty
-//	object or uses what already exists. It returns the result.
-//
-// packageName: the package to be created as a String in dot notation
-
-	//Make sure we have a string.
+};
+dojo.hostenv.startPackage = function (packageName) {
 	var fullPkgName = String(packageName);
 	var strippedPkgName = fullPkgName;
-
 	var syms = packageName.split(/\./);
-	if(syms[syms.length-1]=="*"){
+	if (syms[syms.length - 1] == "*") {
 		syms.pop();
 		strippedPkgName = syms.join(".");
 	}
 	var evaledPkg = dojo.evalObjPath(strippedPkgName, true);
 	this.loaded_modules_[fullPkgName] = evaledPkg;
 	this.loaded_modules_[strippedPkgName] = evaledPkg;
-	
-	return evaledPkg; // Object
-}
-
-dojo.hostenv.findModule = function(/*String*/moduleName, /*Boolean?*/mustExist){
-// summary:
-//	Returns the Object representing the module, if it exists, otherwise null.
-//
-// moduleName A fully qualified module including package name, like 'A.B'.
-// mustExist Optional, default false. throw instead of returning null
-//	if the module does not currently exist.
-
+	return evaledPkg;
+};
+dojo.hostenv.findModule = function (moduleName, mustExist) {
 	var lmn = String(moduleName);
-
-	if(this.loaded_modules_[lmn]){
-		return this.loaded_modules_[lmn]; // Object
+	if (this.loaded_modules_[lmn]) {
+		return this.loaded_modules_[lmn];
 	}
-
-	if(mustExist){
+	if (mustExist) {
 		dojo.raise("no loaded module named '" + moduleName + "'");
 	}
-	return null; // null
-}
-
-//Start of old bootstrap2:
-
-dojo.kwCompoundRequire = function(/*Object containing Arrays*/modMap){
-// description:
-//	This method taks a "map" of arrays which one can use to optionally load dojo
-//	modules. The map is indexed by the possible dojo.hostenv.name_ values, with
-//	two additional values: "default" and "common". The items in the "default"
-//	array will be loaded if none of the other items have been choosen based on
-//	the hostenv.name_ item. The items in the "common" array will _always_ be
-//	loaded, regardless of which list is chosen.  Here's how it's normally
-//	called:
-//	
-//	dojo.kwCompoundRequire({
-//		browser: [
-//			["foo.bar.baz", true, true], // an example that passes multiple args to loadModule()
-//			"foo.sample.*",
-//			"foo.test,
-//		],
-//		default: [ "foo.sample.*" ],
-//		common: [ "really.important.module.*" ]
-//	});
-
-	var common = modMap["common"]||[];
-	var result = modMap[dojo.hostenv.name_] ? common.concat(modMap[dojo.hostenv.name_]||[]) : common.concat(modMap["default"]||[]);
-
-	for(var x=0; x<result.length; x++){
+	return null;
+};
+dojo.kwCompoundRequire = function (modMap) {
+	var common = modMap["common"] || [];
+	var result = modMap[dojo.hostenv.name_] ? common.concat(modMap[dojo.hostenv.name_] || []) : common.concat(modMap["default"] || []);
+	for (var x = 0; x < result.length; x++) {
 		var curr = result[x];
-		if(curr.constructor == Array){
+		if (curr.constructor == Array) {
 			dojo.hostenv.loadModule.apply(dojo.hostenv, curr);
-		}else{
+		} else {
 			dojo.hostenv.loadModule(curr);
 		}
 	}
-}
-
-dojo.require = function(/*String*/ resourceName){
-	// summary
-	//	Ensure that the given resource (ie, javascript
-	//	source file) has been loaded.
-	// description
-	//	dojo.require() is similar to C's #include command or java's "import" command.
-	//	You call dojo.require() to pull in the resources (ie, javascript source files)
-	//	that define the functions you are using. 
-	//
-	//	Note that in the case of a build, many resources have already been included
-	//	into dojo.js (ie, many of the javascript source files have been compressed and
-	//	concatened into dojo.js), so many dojo.require() calls will simply return
-	//	without downloading anything.
+};
+dojo.require = function (resourceName) {
 	dojo.hostenv.loadModule.apply(dojo.hostenv, arguments);
-}
-
-dojo.requireIf = function(/*Boolean*/ condition, /*String*/ resourceName){
-	// summary
-	//	If the condition is true then call dojo.require() for the specified resource
+};
+dojo.requireIf = function (condition, resourceName) {
 	var arg0 = arguments[0];
-	if((arg0 === true)||(arg0=="common")||(arg0 && dojo.render[arg0].capable)){
+	if ((arg0 === true) || (arg0 == "common") || (arg0 && dojo.render[arg0].capable)) {
 		var args = [];
-		for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); }
+		for (var i = 1; i < arguments.length; i++) {
+			args.push(arguments[i]);
+		}
 		dojo.require.apply(dojo, args);
 	}
-}
-
+};
 dojo.requireAfterIf = dojo.requireIf;
-
-dojo.provide = function(/*String*/ resourceName){
-	// summary
-	//	Each javascript source file must have (exactly) one dojo.provide()
-	//	call at the top of the file, corresponding to the file name.
-	//	For example, dojo/src/foo.js must have dojo.provide("dojo.foo"); at the top of the file.
-	//
-	// description
-	//	Each javascript source file is called a resource.  When a resource
-	//	is loaded by the browser, dojo.provide() registers that it has
-	//	been loaded.
-	//	
-	//	For backwards compatibility reasons, in addition to registering the resource,
-	//	dojo.provide() also ensures that the javascript object for the module exists.  For
-	//	example, dojo.provide("dojo.html.common"), in addition to registering that common.js
-	//	is a resource for the dojo.html module, will ensure that the dojo.html javascript object
-	//	exists, so that calls like dojo.html.foo = function(){ ... } don't fail.
-	//
-	//	In the case of a build (or in the future, a rollup), where multiple javascript source
-	//	files are combined into one bigger file (similar to a .lib or .jar file), that file
-	//	will contain multiple dojo.provide() calls, to note that it includes
-	//	multiple resources.
+dojo.provide = function (resourceName) {
 	return dojo.hostenv.startPackage.apply(dojo.hostenv, arguments);
-}
-
-dojo.registerModulePath = function(/*String*/module, /*String*/prefix){
-	// summary: maps a module name to a path
-	// description: An unregistered module is given the default path of ../<module>,
-	//	relative to Dojo root. For example, module acme is mapped to ../acme.
-	//	If you want to use a different module name, use dojo.registerModulePath. 
+};
+dojo.registerModulePath = function (module, prefix) {
 	return dojo.hostenv.setModulePrefix(module, prefix);
+};
+if (djConfig["modulePaths"]) {
+	for (var param in djConfig["modulePaths"]) {
+		dojo.registerModulePath(param, djConfig["modulePaths"][param]);
+	}
 }
-
-dojo.setModulePrefix = function(/*String*/module, /*String*/prefix){
-	// summary: maps a module name to a path
-	dojo.deprecated('dojo.setModulePrefix("' + module + '", "' + prefix + '")', "replaced by dojo.registerModulePath", "0.5");
+dojo.setModulePrefix = function (module, prefix) {
+	dojo.deprecated("dojo.setModulePrefix(\"" + module + "\", \"" + prefix + "\")", "replaced by dojo.registerModulePath", "0.5");
 	return dojo.registerModulePath(module, prefix);
-}
-
-dojo.exists = function(/*Object*/obj, /*String*/name){
-	// summary: determine if an object supports a given method
-	// description: useful for longer api chains where you have to test each object in the chain
+};
+dojo.exists = function (obj, name) {
 	var p = name.split(".");
-	for(var i = 0; i < p.length; i++){
-		if(!obj[p[i]]){ return false; } // Boolean
+	for (var i = 0; i < p.length; i++) {
+		if (!obj[p[i]]) {
+			return false;
+		}
 		obj = obj[p[i]];
 	}
-	return true; // Boolean
-}
-
-// Localization routines
-
-dojo.hostenv.normalizeLocale = function(/*String?*/locale){
-//	summary:
-//		Returns canonical form of locale, as used by Dojo.  All variants are case-insensitive and are separated by '-'
-//		as specified in RFC 3066. If no locale is specified, the user agent's default is returned.
-
+	return true;
+};
+dojo.hostenv.normalizeLocale = function (locale) {
 	var result = locale ? locale.toLowerCase() : dojo.locale;
-	if(result == "root"){
+	if (result == "root") {
 		result = "ROOT";
 	}
-	return result;// String
+	return result;
 };
-
-dojo.hostenv.searchLocalePath = function(/*String*/locale, /*Boolean*/down, /*Function*/searchFunc){
-//	summary:
-//		A helper method to assist in searching for locale-based resources.  Will iterate through
-//		the variants of a particular locale, either up or down, executing a callback function.
-//		For example, "en-us" and true will try "en-us" followed by "en" and finally "ROOT".
-
+dojo.hostenv.searchLocalePath = function (locale, down, searchFunc) {
 	locale = dojo.hostenv.normalizeLocale(locale);
-
-	var elements = locale.split('-');
+	var elements = locale.split("-");
 	var searchlist = [];
-	for(var i = elements.length; i > 0; i--){
-		searchlist.push(elements.slice(0, i).join('-'));
+	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--){
+	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; }
+		if (stop) {
+			break;
+		}
 	}
-}
-
-//These two functions are placed outside of preloadLocalizations
-//So that the xd loading can use/override them.
-dojo.hostenv.localesGenerated /***BUILD:localesGenerated***/; // value will be inserted here at build time, if necessary
-
-dojo.hostenv.registerNlsPrefix = function(){
-// summary:
-//	Register module "nls" to point where Dojo can find pre-built localization files
-	dojo.registerModulePath("nls","nls");	
-}
-
-dojo.hostenv.preloadLocalizations = function(){
-// summary:
-//	Load built, flattened resource bundles, if available for all locales used in the page.
-//	Execute only once.  Note that this is a no-op unless there is a build.
-
-	if(dojo.hostenv.localesGenerated){
+};
+dojo.hostenv.localesGenerated;
+dojo.hostenv.registerNlsPrefix = function () {
+	dojo.registerModulePath("nls", "nls");
+};
+dojo.hostenv.preloadLocalizations = function () {
+	if (dojo.hostenv.localesGenerated) {
 		dojo.hostenv.registerNlsPrefix();
-
-		function preload(locale){
+		function preload(locale) {
 			locale = dojo.hostenv.normalizeLocale(locale);
-			dojo.hostenv.searchLocalePath(locale, true, function(loc){
-				for(var i=0; i<dojo.hostenv.localesGenerated.length;i++){
-					if(dojo.hostenv.localesGenerated[i] == loc){
-						dojo["require"]("nls.dojo_"+loc);
-						return true; // Boolean
+			dojo.hostenv.searchLocalePath(locale, true, function (loc) {
+				for (var i = 0; i < dojo.hostenv.localesGenerated.length; i++) {
+					if (dojo.hostenv.localesGenerated[i] == loc) {
+						dojo["require"]("nls.dojo_" + loc);
+						return true;
 					}
 				}
-				return false; // Boolean
+				return false;
 			});
 		}
 		preload();
-		var extra = djConfig.extraLocale||[];
-		for(var i=0; i<extra.length; i++){
+		var extra = djConfig.extraLocale || [];
+		for (var i = 0; i < extra.length; i++) {
 			preload(extra[i]);
 		}
 	}
-	dojo.hostenv.preloadLocalizations = function(){};
-}
-
-dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){
-// summary:
-//	Declares translated resources and loads them if necessary, in the same style as dojo.require.
-//	Contents of the resource bundle are typically strings, but may be any name/value pair,
-//	represented in JSON format.  See also dojo.i18n.getLocalization.
-//
-// moduleName: name of the package containing the "nls" directory in which the bundle is found
-// bundleName: bundle name, i.e. the filename without the '.js' suffix
-// locale: the locale to load (optional)  By default, the browser's user locale as defined by dojo.locale
-// availableFlatLocales: A comma-separated list of the available, flattened locales for this bundle.
-// This argument should only be set by the build process.
-//
-// description:
-//	Load translated resource bundles provided underneath the "nls" directory within a package.
-//	Translated resources may be located in different packages throughout the source tree.  For example,
-//	a particular widget may define one or more resource bundles, structured in a program as follows,
-//	where moduleName is mycode.mywidget and bundleNames available include bundleone and bundletwo:
-//	...
-//	mycode/
-//	 mywidget/
-//	  nls/
-//	   bundleone.js (the fallback translation, English in this example)
-//	   bundletwo.js (also a fallback translation)
-//	   de/
-//	    bundleone.js
-//	    bundletwo.js
-//	   de-at/
-//	    bundleone.js
-//	   en/
-//	    (empty; use the fallback translation)
-//	   en-us/
-//	    bundleone.js
-//	   en-gb/
-//	    bundleone.js
-//	   es/
-//	    bundleone.js
-//	    bundletwo.js
-//	  ...etc
-//	...
-//	Each directory is named for a locale as specified by RFC 3066, (http://www.ietf.org/rfc/rfc3066.txt),
-//	normalized in lowercase.  Note that the two bundles in the example do not define all the same variants.
-//	For a given locale, bundles will be loaded for that locale and all more general locales above it, including
-//	a fallback at the root directory.  For example, a declaration for the "de-at" locale will first
-//	load nls/de-at/bundleone.js, then nls/de/bundleone.js and finally nls/bundleone.js.  The data will
-//	be flattened into a single Object so that lookups will follow this cascading pattern.  An optional build
-//	step can preload the bundles to avoid data redundancy and the multiple network hits normally required to
-//	load these resources.
-
+	dojo.hostenv.preloadLocalizations = function () {
+	};
+};
+dojo.requireLocalization = function (moduleName, bundleName, locale, availableFlatLocales) {
 	dojo.hostenv.preloadLocalizations();
 	var targetLocale = dojo.hostenv.normalizeLocale(locale);
- 	var bundlePackage = [moduleName, "nls", bundleName].join(".");
-//NOTE: When loading these resources, the packaging does not match what is on disk.  This is an
-// implementation detail, as this is just a private data structure to hold the loaded resources.
-// e.g. tests/hello/nls/en-us/salutations.js is loaded as the object tests.hello.nls.salutations.en_us={...}
-// The structure on disk is intended to be most convenient for developers and translators, but in memory
-// it is more logical and efficient to store in a different order.  Locales cannot use dashes, since the
-// resulting path will not evaluate as valid JS, so we translate them to underscores.
-	
-	//Find the best-match locale to load if we have available flat locales.
+	var bundlePackage = [moduleName, "nls", bundleName].join(".");
 	var bestLocale = "";
-	if(availableFlatLocales){
+	if (availableFlatLocales) {
 		var flatLocales = availableFlatLocales.split(",");
-		for(var i = 0; i < flatLocales.length; i++){
-			//Locale must match from start of string.
-			if(targetLocale.indexOf(flatLocales[i]) == 0){
-				if(flatLocales[i].length > bestLocale.length){
+		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){
+		if (!bestLocale) {
 			bestLocale = "ROOT";
-		}		
+		}
 	}
-
-	//See if the desired locale is already loaded.
 	var tempLocale = availableFlatLocales ? bestLocale : targetLocale;
 	var bundle = dojo.hostenv.findModule(bundlePackage);
 	var localizedBundle = null;
-	if(bundle){
-		if(djConfig.localizationComplete && bundle._built){return;}
-		var jsLoc = tempLocale.replace('-', '_');
-		var translationPackage = bundlePackage+"."+jsLoc;
+	if (bundle) {
+		if (djConfig.localizationComplete && bundle._built) {
+			return;
+		}
+		var jsLoc = tempLocale.replace("-", "_");
+		var translationPackage = bundlePackage + "." + jsLoc;
 		localizedBundle = dojo.hostenv.findModule(translationPackage);
 	}
-
-	if(!localizedBundle){
+	if (!localizedBundle) {
 		bundle = dojo.hostenv.startPackage(bundlePackage);
 		var syms = dojo.hostenv.getModuleSymbols(moduleName);
 		var modpath = syms.concat("nls").join("/");
 		var parent;
-
-		dojo.hostenv.searchLocalePath(tempLocale, availableFlatLocales, function(loc){
-			var jsLoc = loc.replace('-', '_');
+		dojo.hostenv.searchLocalePath(tempLocale, availableFlatLocales, function (loc) {
+			var jsLoc = loc.replace("-", "_");
 			var translationPackage = bundlePackage + "." + jsLoc;
 			var loaded = false;
-			if(!dojo.hostenv.findModule(translationPackage)){
-				// Mark loaded whether it's found or not, so that further load attempts will not be made
+			if (!dojo.hostenv.findModule(translationPackage)) {
 				dojo.hostenv.startPackage(translationPackage);
 				var module = [modpath];
-				if(loc != "ROOT"){module.push(loc);}
+				if (loc != "ROOT") {
+					module.push(loc);
+				}
 				module.push(bundleName);
-				var filespec = module.join("/") + '.js';
-				loaded = dojo.hostenv.loadPath(filespec, null, function(hash){
-					// Use singleton with prototype to point to parent bundle, then mix-in result from loadPath
-					var clazz = function(){};
+				var filespec = module.join("/") + ".js";
+				loaded = dojo.hostenv.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]; }
+					for (var j in hash) {
+						bundle[jsLoc][j] = hash[j];
+					}
 				});
-			}else{
+			} else {
 				loaded = true;
 			}
-			if(loaded && bundle[jsLoc]){
+			if (loaded && bundle[jsLoc]) {
 				parent = bundle[jsLoc];
-			}else{
+			} else {
 				bundle[jsLoc] = parent;
 			}
-			
-			if(availableFlatLocales){
-				//Stop the locale path searching if we know the availableFlatLocales, since
-				//the first call to this function will load the only bundle that is needed.
+			if (availableFlatLocales) {
 				return true;
 			}
 		});
 	}
-
-	//Save the best locale bundle as the target locale bundle when we know the
-	//the available bundles.
-	if(availableFlatLocales && targetLocale != bestLocale){
-		bundle[targetLocale.replace('-', '_')] = bundle[bestLocale.replace('-', '_')];
+	if (availableFlatLocales && targetLocale != bestLocale) {
+		bundle[targetLocale.replace("-", "_")] = bundle[bestLocale.replace("-", "_")];
 	}
 };
-
-(function(){
-	// If other locales are used, dojo.requireLocalization should load them as well, by default.
-	// Override dojo.requireLocalization to do load the default bundle, then iterate through the
-	// extraLocale list and load those translations as well, unless a particular locale was requested.
-
+(function () {
 	var extra = djConfig.extraLocale;
-	if(extra){
-		if(!extra instanceof Array){
+	if (extra) {
+		if (!extra instanceof Array) {
 			extra = [extra];
 		}
-
 		var req = dojo.requireLocalization;
-		dojo.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.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);
+			}
 		};
 	}
 })();
 
+
 __CPAN_FILE__ src/storage.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -2361,390 +1500,121 @@
 */
 
 dojo.provide("dojo.storage");
-
 dojo.require("dojo.lang.*");
 dojo.require("dojo.event.*");
-
-
-dojo.storage = new function(){
-	// summary: A singleton for working with Dojo Storage.
-	// description:
-	//	dojo.storage exposes the current available storage
-	//	provider on this platform. It gives you methods such
-	//	as dojo.storage.put(), dojo.storage.get(), etc.
-	//  
-	//  	For more details on Dojo Storage, see the primary
-	//	documentation page at
-	//	http://manual.dojotoolkit.org/storage.html
-	//
-	//	Note for storage provider developers who are creating
-	//	subclasses-
-	//	This is the base class for all storage providers
-	//	Specific kinds of Storage Providers should subclass this
-	//	and implement these methods. You should avoid initialization
-	//	storage provider subclass's constructor; instead, perform 
-	//	initialization in your initialize() method. 	
-}
-
-dojo.declare("dojo.storage", null, {
-	// SUCCESS: String
-	//	Flag that indicates a put() call to a 
-	//	storage provider was succesful.
-	SUCCESS: "success",
-	
-	// FAILED: String
-	//	Flag that indicates a put() call to 
-	//	a storage provider failed.
-	FAILED: "failed",
-	
-	// PENDING: String
-	//	Flag that indicates a put() call to a 
-	//	storage provider is pending user approval.
-	PENDING: "pending",
-	
-	// SIZE_NOT_AVAILABLE: String
-	//	Returned by getMaximumSize() if this storage provider can not determine
-	//	the maximum amount of data it can support. 
-	SIZE_NOT_AVAILABLE: "Size not available",
-	
-	// SIZE_NO_LIMIT: String
-	//	Returned by getMaximumSize() if this storage provider has no theoretical
-	//	limit on the amount of data it can store. 
-	SIZE_NO_LIMIT: "No size limit",
-
-	// namespace: String
-	//	The namespace for all storage operations. This is useful if several
-	//	applications want access to the storage system from the same domain but
-		//want different storage silos. 
-	namespace: "default",
-	
-	// onHideSettingsUI: Function
-	//	If a function is assigned to this property, then when the settings
-	//	provider's UI is closed this function is called. Useful, for example,
-	//	if the user has just cleared out all storage for this provider using
-	//	the settings UI, and you want to update your UI.
-	onHideSettingsUI: null,
-
-	initialize: function(){
-		// summary: 
-		//		Allows this storage provider to initialize itself. This is
-		//		called after the page has finished loading, so you can not do
-		//		document.writes(). Storage Provider subclasses should initialize
-		//		themselves inside of here rather than in their function
-		//		constructor.
-		dojo.unimplemented("dojo.storage.initialize");
-	},
-	
-	isAvailable: function(){ /*Boolean*/
-		// summary: 
-		//		Returns whether this storage provider is available on this
-		//		platform. 
-		dojo.unimplemented("dojo.storage.isAvailable");
-	},
-
-	put: function(	/*string*/ key,
-					/*object*/ value, 
-					/*function*/ resultsHandler){
-		// summary:
-		//		Puts a key and value into this storage system.
-		// description:
-		//		Example-
-		//			var resultsHandler = function(status, key, message){
-		//			  alert("status="+status+", key="+key+", message="+message);
-		//			};
-		//			dojo.storage.put("test", "hello world", resultsHandler);
-		// key:
-		//		A string key to use when retrieving this value in the future.
-		// value:
-		//		A value to store; this can be any JavaScript type.
-		// resultsHandler:
-		//		A callback function that will receive three arguments. The
-		//		first argument is one of three values: dojo.storage.SUCCESS,
-		//		dojo.storage.FAILED, or dojo.storage.PENDING; these values
-		//		determine how the put request went. In some storage systems
-		//		users can deny a storage request, resulting in a
-		//		dojo.storage.FAILED, while in other storage systems a storage
-		//		request must wait for user approval, resulting in a
-		//		dojo.storage.PENDING status until the request is either
-		//		approved or denied, resulting in another call back with
-		//		dojo.storage.SUCCESS. 
-		//		The second argument in the call back is the key name that was being stored.
-		//		The third argument in the call back is an optional message that
-		//		details possible error messages that might have occurred during
-		//		the storage process.
-		
-		dojo.unimplemented("dojo.storage.put");
-	},
-
-	get: function(/*string*/ key){ /*Object*/
-		// summary:
-		//		Gets the value with the given key. Returns null if this key is
-		//		not in the storage system.
-		// key:
-		//		A string key to get the value of.
-		// return: Returns any JavaScript object type; null if the key is not present
-		dojo.unimplemented("dojo.storage.get");
-	},
-
-	hasKey: function(/*string*/ key){ /*Boolean*/
-		// summary: Determines whether the storage has the given key. 
-		return (this.get(key) != null);
-	},
-
-	getKeys: function(){ /*Array*/
-		// summary: Enumerates all of the available keys in this storage system.
-		// return: Array of available keys
-		dojo.unimplemented("dojo.storage.getKeys");
-	},
-	
-	clear: function(){
-		// summary: 
-		//		Completely clears this storage system of all of it's values and
-		//		keys. 
-		dojo.unimplemented("dojo.storage.clear");
-	},
-  
-	remove: function(key){
-		// summary: Removes the given key from this storage system.
-		dojo.unimplemented("dojo.storage.remove");
-	},
-
-	isPermanent: function(){ /*Boolean*/
-		// summary:
-		//		Returns whether this storage provider's values are persisted
-		//		when this platform is shutdown. 
-		dojo.unimplemented("dojo.storage.isPermanent");
-	},
-
-	getMaximumSize: function(){ /* mixed */
-		// summary: The maximum storage allowed by this provider
-		// returns: 
-		//	Returns the maximum storage size 
-	    //	supported by this provider, in 
-	    //	thousands of bytes (i.e., if it 
-	    //	returns 60 then this means that 60K 
-	    //	of storage is supported).
-	    //
-	    //	If this provider can not determine 
-	    //	it's maximum size, then 
-	    //	dojo.storage.SIZE_NOT_AVAILABLE is 
-	    //	returned; if there is no theoretical
-	    //	limit on the amount of storage 
-	    //	this provider can return, then
-	    //	dojo.storage.SIZE_NO_LIMIT is 
-	    //	returned
-		dojo.unimplemented("dojo.storage.getMaximumSize");
-	},
-
-	hasSettingsUI: function(){ /*Boolean*/
-		// summary: Determines whether this provider has a settings UI.
+dojo.storage = new function () {
+};
+dojo.declare("dojo.storage", null, {SUCCESS:"success", FAILED:"failed", PENDING:"pending", SIZE_NOT_AVAILABLE:"Size not available", SIZE_NO_LIMIT:"No size limit", namespace:"default", onHideSettingsUI:null, initialize:function () {
+	dojo.unimplemented("dojo.storage.initialize");
+}, isAvailable:function () {
+	dojo.unimplemented("dojo.storage.isAvailable");
+}, put:function (key, value, resultsHandler) {
+	dojo.unimplemented("dojo.storage.put");
+}, get:function (key) {
+	dojo.unimplemented("dojo.storage.get");
+}, hasKey:function (key) {
+	return (this.get(key) != null);
+}, getKeys:function () {
+	dojo.unimplemented("dojo.storage.getKeys");
+}, clear:function () {
+	dojo.unimplemented("dojo.storage.clear");
+}, remove:function (key) {
+	dojo.unimplemented("dojo.storage.remove");
+}, isPermanent:function () {
+	dojo.unimplemented("dojo.storage.isPermanent");
+}, getMaximumSize:function () {
+	dojo.unimplemented("dojo.storage.getMaximumSize");
+}, hasSettingsUI:function () {
+	return false;
+}, showSettingsUI:function () {
+	dojo.unimplemented("dojo.storage.showSettingsUI");
+}, hideSettingsUI:function () {
+	dojo.unimplemented("dojo.storage.hideSettingsUI");
+}, getType:function () {
+	dojo.unimplemented("dojo.storage.getType");
+}, isValidKey:function (keyName) {
+	if ((keyName == null) || (typeof keyName == "undefined")) {
 		return false;
-	},
-
-	showSettingsUI: function(){
-		// summary: If this provider has a settings UI, determined
-		// by calling hasSettingsUI(), it is shown. 
-		dojo.unimplemented("dojo.storage.showSettingsUI");
-	},
-
-	hideSettingsUI: function(){
-		// summary: If this provider has a settings UI, hides it.
-		dojo.unimplemented("dojo.storage.hideSettingsUI");
-	},
-	
-	getType: function(){ /*String*/
-		// summary:
-		//		The provider name as a string, such as
-		//		"dojo.storage.FlashStorageProvider". 
-		dojo.unimplemented("dojo.storage.getType");
-	},
-	
-	isValidKey: function(/*string*/ keyName){ /*Boolean*/
-		// summary:
-		//		Subclasses can call this to ensure that the key given is valid
-		//		in a consistent way across different storage providers. We use
-		//		the lowest common denominator for key values allowed: only
-		//		letters, numbers, and underscores are allowed. No spaces. 
-		if((keyName == null)||(typeof keyName == "undefined")){
-			return false;
-		}
-			
-		return /^[0-9A-Za-z_]*$/.test(keyName);
 	}
-});
-
-
-
-
-dojo.storage.manager = new function(){
-	// summary: A singleton class in charge of the Dojo Storage system
-	// description:
-	//		Initializes the storage systems and figures out the best available 
-	//		storage options on this platform.	
-	
-	// currentProvider: Object
-	//	The storage provider that was automagically chosen to do storage
-	//	on this platform, such as dojo.storage.browser.FlashStorageProvider.
+	return /^[0-9A-Za-z_]*$/.test(keyName);
+}});
+dojo.storage.manager = new function () {
 	this.currentProvider = null;
-	
-	// available: Boolean
-	//	Whether storage of some kind is available
 	this.available = false;
-	
 	this._initialized = false;
 	this._providers = [];
-	
-	// namespace: String
-	//	An optional namespace value that can be used by a single application
-	//	to partition storage into seperate units - not well supported yet.
 	this.namespace = "default";
-	
-	this.initialize = function(){
-		// summary: 
-		//		Initializes the storage system and autodetects the best storage
-		//		provider we can provide on this platform
+	this.initialize = function () {
 		this.autodetect();
 	};
-	
-	this.register = function(/*string*/ name, /*Object*/ instance) {
-		// summary:
-		//		Registers the existence of a new storage provider; used by
-		//		subclasses to inform the manager of their existence. The
-		//		storage manager will select storage providers based on 
-		//		their ordering, so the order in which you call this method
-		//		matters. 
-		// name:
-		//		The full class name of this provider, such as
-		//		"dojo.storage.browser.FlashStorageProvider".
-		// instance:
-		//		An instance of this provider, which we will use to call
-		//		isAvailable() on. 
+	this.register = function (name, instance) {
 		this._providers[this._providers.length] = instance;
 		this._providers[name] = instance;
 	};
-	
-	this.setProvider = function(storageClass){
-		// summary:
-		//		Instructs the storageManager to use the given storage class for
-		//		all storage requests.
-		// description:
-		//		Example-
-		//			dojo.storage.setProvider(
-		//				dojo.storage.browser.IEStorageProvider)
-	
+	this.setProvider = function (storageClass) {
 	};
-	
-	this.autodetect = function(){
-		// summary:
-		//		Autodetects the best possible persistent storage provider
-		//		available on this platform. 
-		if(this._initialized == true){ // already finished
+	this.autodetect = function () {
+		if (this._initialized == true) {
 			return;
 		}
-			
-		// go through each provider, seeing if it can be used
 		var providerToUse = null;
-		for(var i = 0; i < this._providers.length; i++){
+		for (var i = 0; i < this._providers.length; i++) {
 			providerToUse = this._providers[i];
-			// a flag to force the storage manager to use a particular 
-			// storage provider type, such as 
-			// djConfig = {forceStorageProvider: "dojo.storage.browser.WhatWGStorageProvider"};
-			if(dojo.lang.isUndefined(djConfig["forceStorageProvider"]) == false
-				&& providerToUse.getType() == djConfig["forceStorageProvider"]){
-				// still call isAvailable for this provider, since this helps some
-				// providers internally figure out if they are available
+			if (dojo.lang.isUndefined(djConfig["forceStorageProvider"]) == false && providerToUse.getType() == djConfig["forceStorageProvider"]) {
 				providerToUse.isAvailable();
 				break;
-			}else if(dojo.lang.isUndefined(djConfig["forceStorageProvider"]) == true
-						&& providerToUse.isAvailable()){
-				break;
+			} else {
+				if (dojo.lang.isUndefined(djConfig["forceStorageProvider"]) == true && providerToUse.isAvailable()) {
+					break;
+				}
 			}
-		}	
-		
-		if(providerToUse == null){ // no provider available
+		}
+		if (providerToUse == null) {
 			this._initialized = true;
 			this.available = false;
 			this.currentProvider = null;
 			dojo.raise("No storage provider found for this platform");
 		}
-			
-		// create this provider and copy over it's properties
 		this.currentProvider = providerToUse;
-	  	for(var i in providerToUse){
-	  		dojo.storage[i] = providerToUse[i];
+		for (var i in providerToUse) {
+			dojo.storage[i] = providerToUse[i];
 		}
 		dojo.storage.manager = this;
-		
-		// have the provider initialize itself
 		dojo.storage.initialize();
-		
 		this._initialized = true;
 		this.available = true;
 	};
-	
-	this.isAvailable = function(){ /*Boolean*/
-		// summary: Returns whether any storage options are available.
+	this.isAvailable = function () {
 		return this.available;
 	};
-	
-	this.isInitialized = function(){ /*Boolean*/
-	 	// summary:
-		//		Returns whether the storage system is initialized and ready to
-		//		be used. 
-
-		// FIXME: This should REALLY not be in here, but it fixes a tricky
-		// Flash timing bug
-		if(this.currentProvider.getType() == "dojo.storage.browser.FlashStorageProvider"
-			&& dojo.flash.ready == false){
+	this.isInitialized = function () {
+		if (this.currentProvider.getType() == "dojo.storage.browser.FlashStorageProvider" && dojo.flash.ready == false) {
 			return false;
-		}else{
+		} else {
 			return this._initialized;
 		}
 	};
-
-	this.supportsProvider = function(/*string*/ storageClass){ /* Boolean */
-		// summary: Determines if this platform supports the given storage provider.
-		// description:
-		//		Example-
-		//			dojo.storage.manager.supportsProvider(
-		//				"dojo.storage.browser.InternetExplorerStorageProvider");
-
-		// construct this class dynamically
-		try{
-			// dynamically call the given providers class level isAvailable()
-			// method
+	this.supportsProvider = function (storageClass) {
+		try {
 			var provider = eval("new " + storageClass + "()");
 			var results = provider.isAvailable();
-			if(results == null || typeof results == "undefined")
+			if (results == null || typeof results == "undefined") {
 				return false;
+			}
 			return results;
-		}catch (exception){
+		}
+		catch (exception) {
 			return false;
 		}
 	};
-
-	this.getProvider = function(){ /* Object */
-		// summary: Gets the current provider
+	this.getProvider = function () {
 		return this.currentProvider;
 	};
-	
-	this.loaded = function(){
-		// summary:
-		//		The storage provider should call this method when it is loaded
-		//		and ready to be used. Clients who will use the provider will
-		//		connect to this method to know when they can use the storage
-		//		system.
-		// description:
-		//		Example-
-		//			if(dojo.storage.manager.isInitialized() == false){ 
-		//				dojo.event.connect(dojo.storage.manager, "loaded", TestStorage, 
-	    //				TestStorage.initialize);
-		//			}else{
-		//				dojo.event.connect(dojo, "loaded", TestStorage, TestStorage.initialize);
-		//			}
+	this.loaded = function () {
 	};
 };
 
+
 __CPAN_FILE__ src/style.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -2758,12 +1628,11 @@
 
 dojo.provide("dojo.style");
 dojo.require("dojo.lang.common");
-dojo.kwCompoundRequire({
-	browser: ["dojo.html.style"]
-});
+dojo.kwCompoundRequire({browser:["dojo.html.style"]});
 dojo.deprecated("dojo.style", "replaced by dojo.html.style", "0.5");
 dojo.lang.mixin(dojo.style, dojo.html);
 
+
 __CPAN_FILE__ src/data.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -2776,11 +1645,47 @@
 */
 
 dojo.provide("dojo.data");
+dojo.data = {};
 
-// currently a stub for dojo.data
 
-dojo.data = {};
+__CPAN_FILE__ src/browser_debug_xd.js
+/*
+	Copyright (c) 2004-2006, 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/community/licensing.shtml
+*/
+
+dojo.provide("dojo.browser_debug_xd");
+dojo.nonDebugProvide = dojo.provide;
+dojo.provide = function (resourceName) {
+	var dbgQueue = dojo.hostenv["xdDebugQueue"];
+	if (dbgQueue && dbgQueue.length > 0 && resourceName == dbgQueue["currentResourceName"]) {
+		window.setTimeout("dojo.hostenv.xdDebugFileLoaded('" + resourceName + "')", 1);
+	}
+	dojo.nonDebugProvide.apply(dojo, arguments);
+};
+dojo.hostenv.xdDebugFileLoaded = function (resourceName) {
+	var dbgQueue = this.xdDebugQueue;
+	if (resourceName && resourceName == dbgQueue.currentResourceName) {
+		dbgQueue.shift();
+	}
+	if (dbgQueue.length == 0) {
+		dbgQueue.currentResourceName = null;
+		this.xdNotifyLoaded();
+	} else {
+		dbgQueue.currentResourceName = dbgQueue[0].resourceName;
+		var element = document.createElement("script");
+		element.type = "text/javascript";
+		element.src = dbgQueue[0].resourcePath;
+		document.getElementsByTagName("head")[0].appendChild(element);
+	}
+};
+
+
 __CPAN_FILE__ src/svg.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -2795,314 +1700,251 @@
 dojo.provide("dojo.svg");
 dojo.require("dojo.lang.common");
 dojo.require("dojo.dom");
-
 dojo.mixin(dojo.svg, dojo.dom);
-
-dojo.svg.graphics=dojo.svg.g=new function(/* DOMDocument */ d){
-	//	summary
-	//	Singleton to encapsulate SVG rendering functions.
-	this.suspend=function(){
-		//	summary
-		//	Suspend the rendering engine
-		try { d.documentElement.suspendRedraw(0); } catch(e){ }
+dojo.svg.graphics = dojo.svg.g = new function (d) {
+	this.suspend = function () {
+		try {
+			d.documentElement.suspendRedraw(0);
+		}
+		catch (e) {
+		}
 	};
-	this.resume=function(){
-		//	summary
-		//	Resume the rendering engine
-		try { d.documentElement.unsuspendRedraw(0); } catch(e){ }
+	this.resume = function () {
+		try {
+			d.documentElement.unsuspendRedraw(0);
+		}
+		catch (e) {
+		}
 	};
-	this.force=function(){
-		//	summary
-		//	Force the render engine to redraw
-		try { d.documentElement.forceRedraw(); } catch(e){ }
+	this.force = function () {
+		try {
+			d.documentElement.forceRedraw();
+		}
+		catch (e) {
+		}
 	};
 }(document);
-
-dojo.svg.animations=dojo.svg.anim=new function(/* DOMDocument */ d){
-	//	summary
-	//	Singleton to encapsulate SVG animation functionality.
-	this.arePaused=function(){
-		//	summary
-		//	check to see if all animations are paused
+dojo.svg.animations = dojo.svg.anim = new function (d) {
+	this.arePaused = function () {
 		try {
-			return d.documentElement.animationsPaused();	//	bool
-		} catch(e){
-			return false;	//	bool
+			return d.documentElement.animationsPaused();
 		}
-	} ;
-	this.pause=function(){
-		//	summary
-		//	pause all animations
-		try { d.documentElement.pauseAnimations(); } catch(e){ }
+		catch (e) {
+			return false;
+		}
 	};
-	this.resume=function(){
-		//	summary
-		//	resume all animations
-		try { d.documentElement.unpauseAnimations(); } catch(e){ }
+	this.pause = function () {
+		try {
+			d.documentElement.pauseAnimations();
+		}
+		catch (e) {
+		}
 	};
+	this.resume = function () {
+		try {
+			d.documentElement.unpauseAnimations();
+		}
+		catch (e) {
+		}
+	};
 }(document);
-
-//	fixme: these functions should be mixed in from dojo.style, but dojo.style is HTML-centric and needs to change.
-dojo.svg.toCamelCase=function(/* string */ selector){
-	//	summary
-	//	converts a CSS-style selector to a camelCased one
-	var arr=selector.split('-'), cc=arr[0];
-	for(var i=1; i < arr.length; i++) {
+dojo.svg.toCamelCase = function (selector) {
+	var arr = selector.split("-"), cc = arr[0];
+	for (var i = 1; i < arr.length; i++) {
 		cc += arr[i].charAt(0).toUpperCase() + arr[i].substring(1);
 	}
-	return cc;	// string
+	return cc;
 };
-dojo.svg.toSelectorCase=function(/* string */ selector) {
-	//	summary
-	//	converts a camelCased selector to a CSS style one
-	return selector.replace(/([A-Z])/g, "-$1" ).toLowerCase();	//	string
+dojo.svg.toSelectorCase = function (selector) {
+	return selector.replace(/([A-Z])/g, "-$1").toLowerCase();
 };
-dojo.svg.getStyle=function(/* SVGElement */ node, /* string */ cssSelector){
-	//	summary
-	//	get the computed style of selector for node.
-	return document.defaultView.getComputedStyle(node, cssSelector);	//	object
+dojo.svg.getStyle = function (node, cssSelector) {
+	return document.defaultView.getComputedStyle(node, cssSelector);
 };
-dojo.svg.getNumericStyle=function(/* SVGElement */ node, /* string */ cssSelector){
-	//	summary
-	//	return the numeric version of the computed style of selector on node.
+dojo.svg.getNumericStyle = function (node, cssSelector) {
 	return parseFloat(dojo.svg.getStyle(node, cssSelector));
 };
-
-//	fixme: there are different ways of doing the following, need to take into account
-dojo.svg.getOpacity=function(/* SVGElement */node){
-	//	summary
-	//	Return the opacity of the passed element
-	return Math.min(1.0, dojo.svg.getNumericStyle(node, "fill-opacity"));	//	float
+dojo.svg.getOpacity = function (node) {
+	return Math.min(1, dojo.svg.getNumericStyle(node, "fill-opacity"));
 };
-dojo.svg.setOpacity=function(/* SVGElement */ node, /* float */ opacity){
-	//	summary
-	//	set the opacity of node using attributes.
+dojo.svg.setOpacity = function (node, opacity) {
 	node.setAttributeNS(this.xmlns.svg, "fill-opacity", opacity);
 	node.setAttributeNS(this.xmlns.svg, "stroke-opacity", opacity);
 };
-dojo.svg.clearOpacity=function(/* SVGElement */ node){
-	//	summary
-	//	Set any attributes setting opacity to opaque (1.0)
+dojo.svg.clearOpacity = function (node) {
 	node.setAttributeNS(this.xmlns.svg, "fill-opacity", "1.0");
 	node.setAttributeNS(this.xmlns.svg, "stroke-opacity", "1.0");
 };
-
-/**
- *	Coordinates and dimensions.
- */
-
-// TODO ////////////////////////////////////////////////////////// TODO
-dojo.svg.getCoords=function(/* SVGElement */ node){
-	//	summary
-	//	Returns the x/y coordinates of the passed node, if available.
+dojo.svg.getCoords = function (node) {
 	if (node.getBBox) {
-		var box=node.getBBox();
-		return { x: box.x, y: box.y };	//	object
+		var box = node.getBBox();
+		return {x:box.x, y:box.y};
 	}
-	return null;	//	object
+	return null;
 };
-dojo.svg.setCoords=function(/* SVGElement */node, /* object */coords){
-	//	summary
-	//	Set the x/y coordinates of the passed node
-	var p=dojo.svg.getCoords();
-	if (!p) return;
-	var dx=p.x - coords.x;
-	var dy=p.y - coords.y;
+dojo.svg.setCoords = function (node, coords) {
+	var p = dojo.svg.getCoords();
+	if (!p) {
+		return;
+	}
+	var dx = p.x - coords.x;
+	var dy = p.y - coords.y;
 	dojo.svg.translate(node, dx, dy);
 };
-dojo.svg.getDimensions=function(/* SVGElement */node){
-	//	summary
-	//	Get the height and width of the passed node.
-	if (node.getBBox){
-		var box=node.getBBox();
-		return { width: box.width, height : box.height };	//	object
+dojo.svg.getDimensions = function (node) {
+	if (node.getBBox) {
+		var box = node.getBBox();
+		return {width:box.width, height:box.height};
 	}
-	return null;	//	object
+	return null;
 };
-dojo.svg.setDimensions=function(/* SVGElement */node, /* object */dim){
-	//	summary
-	//	Set the dimensions of the passed element if possible.
-	//	will only support shape-based and container elements; path-based elements are ignored.
-	if (node.width){
-		node.width.baseVal.value=dim.width;
-		node.height.baseVal.value=dim.height;
+dojo.svg.setDimensions = function (node, dim) {
+	if (node.width) {
+		node.width.baseVal.value = dim.width;
+		node.height.baseVal.value = dim.height;
+	} else {
+		if (node.r) {
+			node.r.baseVal.value = Math.min(dim.width, dim.height) / 2;
+		} else {
+			if (node.rx) {
+				node.rx.baseVal.value = dim.width / 2;
+				node.ry.baseVal.value = dim.height / 2;
+			}
+		}
 	}
-	else if (node.r){
-		node.r.baseVal.value=Math.min(dim.width, dim.height)/2;
-	}
-	else if (node.rx){
-		node.rx.baseVal.value=dim.width/2;
-		node.ry.baseVal.value=dim.height/2;
-	}
 };
-
-/**
- *	Transformations.
- */
-dojo.svg.translate=function(/* SVGElement */node, /* int */dx, /* int */dy){
-	//	summary
-	//	Translates the passed node by dx and dy
-	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform){
-		var t=node.ownerSVGElement.createSVGTransform();
+dojo.svg.translate = function (node, dx, dy) {
+	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
+		var t = node.ownerSVGElement.createSVGTransform();
 		t.setTranslate(dx, dy);
 		node.transform.baseVal.appendItem(t);
 	}
 };
-dojo.svg.scale=function(/* SVGElement */node, /* float */scaleX, /* float? */scaleY){
-	//	summary
-	//	Scales the passed element by factor scaleX and scaleY.  If scaleY not passed, scaleX is used.
-	if (!scaleY) var scaleY=scaleX;
-	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform){
-		var t=node.ownerSVGElement.createSVGTransform();
+dojo.svg.scale = function (node, scaleX, scaleY) {
+	if (!scaleY) {
+		var scaleY = scaleX;
+	}
+	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
+		var t = node.ownerSVGElement.createSVGTransform();
 		t.setScale(scaleX, scaleY);
 		node.transform.baseVal.appendItem(t);
 	}
 };
-dojo.svg.rotate=function(/* SVGElement */node, /* float */ang, /* int? */cx, /* int? */cy){
-	//	summary
-	//	rotate the passed node by ang, with optional cx/cy as the rotation point.
-	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform){
-		var t=node.ownerSVGElement.createSVGTransform();
-		if (cx == null) t.setMatrix(t.matrix.rotate(ang));
-		else t.setRotate(ang, cx, cy);
+dojo.svg.rotate = function (node, ang, cx, cy) {
+	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
+		var t = node.ownerSVGElement.createSVGTransform();
+		if (cx == null) {
+			t.setMatrix(t.matrix.rotate(ang));
+		} else {
+			t.setRotate(ang, cx, cy);
+		}
 		node.transform.baseVal.appendItem(t);
 	}
 };
-dojo.svg.skew=function(/* SVGElement */node, /* float */ang, /* string? */axis){
-	//	summary
-	//	skew the passed node by ang over axis.
-	var dir=axis || "x";
-	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform){
-		var t=node.ownerSVGElement.createSVGTransform();
-		if (dir != "x") t.setSkewY(ang);
-		else t.setSkewX(ang);
+dojo.svg.skew = function (node, ang, axis) {
+	var dir = axis || "x";
+	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
+		var t = node.ownerSVGElement.createSVGTransform();
+		if (dir != "x") {
+			t.setSkewY(ang);
+		} else {
+			t.setSkewX(ang);
+		}
 		node.transform.baseVal.appendItem(t);
 	}
 };
-dojo.svg.flip=function(/* SVGElement */node, /* string? */axis){
-	//	summary
-	//	flip the passed element over axis
-	var dir=axis || "x";
-	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform){
-		var t=node.ownerSVGElement.createSVGTransform();
+dojo.svg.flip = function (node, axis) {
+	var dir = axis || "x";
+	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
+		var t = node.ownerSVGElement.createSVGTransform();
 		t.setMatrix((dir != "x") ? t.matrix.flipY() : t.matrix.flipX());
 		node.transform.baseVal.appendItem(t);
 	}
 };
-dojo.svg.invert=function(/* SVGElement */node){
-	//	summary
-	//	transform the passed node by the inverse of the current matrix
-	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform){
-		var t=node.ownerSVGElement.createSVGTransform();
+dojo.svg.invert = function (node) {
+	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
+		var t = node.ownerSVGElement.createSVGTransform();
 		t.setMatrix(t.matrix.inverse());
 		node.transform.baseVal.appendItem(t);
 	}
 };
-dojo.svg.applyMatrix=function(
-	/* SVGElement */node, 
-	/* int || SVGMatrix */a, 
-	/* int? */b, 
-	/* int? */c, 
-	/* int? */d, 
-	/* int? */e, 
-	/* int? */f
-){
-	//	summary
-	//	apply the passed matrix to node.  If params b - f are passed, a matrix will be created.
-	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform){
+dojo.svg.applyMatrix = function (node, a, b, c, d, e, f) {
+	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
 		var m;
-		if (b){
-			var m=node.ownerSVGElement.createSVGMatrix();
-			m.a=a;
-			m.b=b;
-			m.c=c;
-			m.d=d;
-			m.e=e;
-			m.f=f;
-		} else m=a;
-		var t=node.ownerSVGElement.createSVGTransform();
+		if (b) {
+			var m = node.ownerSVGElement.createSVGMatrix();
+			m.a = a;
+			m.b = b;
+			m.c = c;
+			m.d = d;
+			m.e = e;
+			m.f = f;
+		} else {
+			m = a;
+		}
+		var t = node.ownerSVGElement.createSVGTransform();
 		t.setMatrix(m);
 		node.transform.baseVal.appendItem(t);
 	}
 };
-
-/**
- *	Grouping and z-index operations.
- */
-dojo.svg.group=function(/* Nodelist || array */nodes){
-	//	summary
-	//	expect an array of nodes, attaches the group to the parent of the first node.
-	var p=nodes.item(0).parentNode;
-	var g=document.createElementNS(this.xmlns.svg, "g");
-	for (var i=0; i < nodes.length; i++) g.appendChild(nodes.item(i));
+dojo.svg.group = function (nodes) {
+	var p = nodes.item(0).parentNode;
+	var g = document.createElementNS(this.xmlns.svg, "g");
+	for (var i = 0; i < nodes.length; i++) {
+		g.appendChild(nodes.item(i));
+	}
 	p.appendChild(g);
 	return g;
 };
-dojo.svg.ungroup=function(/* SVGGElement */g){
-	//	summary
-	//	puts the children of the group on the same level as group was.
-	var p=g.parentNode;
-	while (g.childNodes.length > 0) p.appendChild(g.childNodes.item(0));
+dojo.svg.ungroup = function (g) {
+	var p = g.parentNode;
+	while (g.childNodes.length > 0) {
+		p.appendChild(g.childNodes.item(0));
+	}
 	p.removeChild(g);
 };
-//	if the node is part of a group, return the group, else return null.
-dojo.svg.getGroup=function(/* SVGElement */node){
-	//	summary
-	//	if the node is part of a group, return the group, else return null.
-	var a=this.getAncestors(node);
-	for (var i=0; i < a.length; i++){
-		if (a[i].nodeType == this.ELEMENT_NODE && a[i].nodeName.toLowerCase() == "g")
+dojo.svg.getGroup = function (node) {
+	var a = this.getAncestors(node);
+	for (var i = 0; i < a.length; i++) {
+		if (a[i].nodeType == this.ELEMENT_NODE && a[i].nodeName.toLowerCase() == "g") {
 			return a[i];
+		}
 	}
 	return null;
 };
-dojo.svg.bringToFront=function(/* SVGElement */node){
-	//	summary
-	//	move the passed node the to top of the group (i.e. last child)
-	var n=this.getGroup(node) || node;
+dojo.svg.bringToFront = function (node) {
+	var n = this.getGroup(node) || node;
 	n.ownerSVGElement.appendChild(n);
 };
-dojo.svg.sendToBack=function(/* SVGElement */node){
-	//	summary
-	//	move the passed node to the bottom of the group (i.e. first child)
-	var n=this.getGroup(node) || node;
+dojo.svg.sendToBack = function (node) {
+	var n = this.getGroup(node) || node;
 	n.ownerSVGElement.insertBefore(n, n.ownerSVGElement.firstChild);
 };
-
-//	TODO: possibly push node up a level in the DOM if it's at the beginning or end of the childNodes list.
-dojo.svg.bringForward=function(/* SVGElement */node){
-	//	summary
-	//	move the passed node up one in the child node chain
-	var n=this.getGroup(node) || node;
-	if (this.getLastChildElement(n.parentNode) != n){
+dojo.svg.bringForward = function (node) {
+	var n = this.getGroup(node) || node;
+	if (this.getLastChildElement(n.parentNode) != n) {
 		this.insertAfter(n, this.getNextSiblingElement(n), true);
 	}
 };
-dojo.svg.sendBackward=function(/* SVGElement */node){
-	//	summary
-	//	move the passed node down one in the child node chain
-	var n=this.getGroup(node) || node;
-	if (this.getFirstChildElement(n.parentNode) != n){
+dojo.svg.sendBackward = function (node) {
+	var n = this.getGroup(node) || node;
+	if (this.getFirstChildElement(n.parentNode) != n) {
 		this.insertBefore(n, this.getPreviousSiblingElement(n), true);
 	}
 };
-// END TODO ////////////////////////////////////////////////////// TODO
-
-dojo.svg.createNodesFromText=function(/* string */ txt, /* bool? */ wrap){
-	//	summary
-	//	Create a list of nodes from text
-	var docFrag=(new DOMParser()).parseFromString(txt, "text/xml").normalize();
-	if(wrap){ 
-		return [docFrag.firstChild.cloneNode(true)];	//	array
+dojo.svg.createNodesFromText = function (txt, wrap) {
+	var docFrag = (new DOMParser()).parseFromString(txt, "text/xml").normalize();
+	if (wrap) {
+		return [docFrag.firstChild.cloneNode(true)];
 	}
-	var nodes=[];
-	for(var x=0; x<docFrag.childNodes.length; x++){
+	var nodes = [];
+	for (var x = 0; x < docFrag.childNodes.length; x++) {
 		nodes.push(docFrag.childNodes.item(x).cloneNode(true));
 	}
-	return nodes;	// array
-}
-// vim:ts=4:noet:tw=0:
+	return nodes;
+};
 
+
 __CPAN_FILE__ src/validate.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -3117,6 +1959,7 @@
 dojo.provide("dojo.validate");
 dojo.require("dojo.validate.common");
 
+
 __CPAN_FILE__ src/crypto.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -3129,27 +1972,10 @@
 */
 
 dojo.provide("dojo.crypto");
+dojo.crypto.cipherModes = {ECB:0, CBC:1, PCBC:2, CFB:3, OFB:4, CTR:5};
+dojo.crypto.outputTypes = {Base64:0, Hex:1, String:2, Raw:3};
 
-dojo.crypto.cipherModes={ 
-	//	summary
-	//	Enumeration for various cipher modes.
-	ECB:0, 
-	CBC:1, 
-	PCBC:2, 
-	CFB:3, 
-	OFB:4, 
-	CTR:5 
-};
 
-dojo.crypto.outputTypes={ 
-	//	summary
-	//	Enumeration for input and output encodings.
-	Base64:0,
-	Hex:1,
-	String:2,
-	Raw:3 
-};
-
 __CPAN_FILE__ src/docs.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -3822,6 +2648,7 @@
 dojo.event.topic.registerPublisher("/docs/function/results", dojo.docs, "_printFunctionResults");
 dojo.event.topic.registerPublisher("/docs/function/detail", dojo.docs, "_printFunctionDetail");
 dojo.event.topic.registerPublisher("/docs/package/detail", dojo.docs, "_printPkgResult");
+
 __CPAN_FILE__ src/regexp.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -3834,487 +2661,321 @@
 */
 
 dojo.provide("dojo.regexp");
-dojo.evalObjPath("dojo.regexp.us", true);	// this file also defines stuff in the dojo.regexp.us module (TODO: move to separate file?)
-
-// *** Regular Expression Generators ***
-
-dojo.regexp.tld = function(/*Object?*/flags){
-	// summary: Builds a RE that matches a top-level domain
-	//
-	// flags:
-	//    flags.allowCC  Include 2 letter country code domains.  Default is true.
-	//    flags.allowGeneric  Include the generic domains.  Default is true.
-	//    flags.allowInfra  Include infrastructure domains.  Default is true.
-
-	// assign default values to missing paramters
+dojo.evalObjPath("dojo.regexp.us", true);
+dojo.regexp.tld = function (flags) {
 	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.allowCC != "boolean"){ flags.allowCC = true; }
-	if(typeof flags.allowInfra != "boolean"){ flags.allowInfra = true; }
-	if(typeof flags.allowGeneric != "boolean"){ flags.allowGeneric = true; }
-
-	// Infrastructure top-level domain - only one at present
+	if (typeof flags.allowCC != "boolean") {
+		flags.allowCC = true;
+	}
+	if (typeof flags.allowInfra != "boolean") {
+		flags.allowInfra = true;
+	}
+	if (typeof flags.allowGeneric != "boolean") {
+		flags.allowGeneric = true;
+	}
 	var infraRE = "arpa";
-
-	// Generic top-level domains RE.
-	var genericRE = 
-		"aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|xxx|jobs|mobi|post";
-	
-	// Country Code top-level domains RE
-	var ccRE = 
-		"ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|" +
-		"bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|" +
-		"ec|ee|eg|er|eu|es|et|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|"
-		+
-		"gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kr|kw|ky|kz|" +
-		"la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|" +
-		"my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|" +
-		"re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sk|sl|sm|sn|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|" +
-		"tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw";
-
-	// Build top-level domain RE
+	var genericRE = "aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|xxx|jobs|mobi|post";
+	var ccRE = "ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|" + "bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|" + "ec|ee|eg|er|eu|es|et|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|" + "gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kr|kw|ky|kz|" + "la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|" + "my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|" + "re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sk|sl|sm|sn|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|" + "tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw";
 	var a = [];
-	if(flags.allowInfra){ a.push(infraRE); }
-	if(flags.allowGeneric){ a.push(genericRE); }
-	if(flags.allowCC){ a.push(ccRE); }
-
+	if (flags.allowInfra) {
+		a.push(infraRE);
+	}
+	if (flags.allowGeneric) {
+		a.push(genericRE);
+	}
+	if (flags.allowCC) {
+		a.push(ccRE);
+	}
 	var tldRE = "";
 	if (a.length > 0) {
 		tldRE = "(" + a.join("|") + ")";
 	}
-
-	return tldRE; // String
-}
-
-dojo.regexp.ipAddress = function(/*Object?*/flags){
-	// summary: Builds a RE that matches an IP Address
-	//
-	// description:
-	//  Supports 5 formats for IPv4: dotted decimal, dotted hex, dotted octal, decimal and hexadecimal.
-	//  Supports 2 formats for Ipv6.
-	//
-	// flags  An object.  All flags are boolean with default = true.
-	//    flags.allowDottedDecimal  Example, 207.142.131.235.  No zero padding.
-	//    flags.allowDottedHex  Example, 0x18.0x11.0x9b.0x28.  Case insensitive.  Zero padding allowed.
-	//    flags.allowDottedOctal  Example, 0030.0021.0233.0050.  Zero padding allowed.
-	//    flags.allowDecimal  Example, 3482223595.  A decimal number between 0-4294967295.
-	//    flags.allowHex  Example, 0xCF8E83EB.  Hexadecimal number between 0x0-0xFFFFFFFF.
-	//      Case insensitive.  Zero padding allowed.
-	//    flags.allowIPv6   IPv6 address written as eight groups of four hexadecimal digits.
-	//    flags.allowHybrid   IPv6 address written as six groups of four hexadecimal digits
-	//      followed by the usual 4 dotted decimal digit notation of IPv4. x:x:x:x:x:x:d.d.d.d
-
-	// assign default values to missing paramters
+	return tldRE;
+};
+dojo.regexp.ipAddress = function (flags) {
 	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.allowDottedDecimal != "boolean"){ flags.allowDottedDecimal = true; }
-	if(typeof flags.allowDottedHex != "boolean"){ flags.allowDottedHex = true; }
-	if(typeof flags.allowDottedOctal != "boolean"){ flags.allowDottedOctal = true; }
-	if(typeof flags.allowDecimal != "boolean"){ flags.allowDecimal = true; }
-	if(typeof flags.allowHex != "boolean"){ flags.allowHex = true; }
-	if(typeof flags.allowIPv6 != "boolean"){ flags.allowIPv6 = true; }
-	if(typeof flags.allowHybrid != "boolean"){ flags.allowHybrid = true; }
-
-	// decimal-dotted IP address RE.
-	var dottedDecimalRE = 
-		// Each number is between 0-255.  Zero padding is not allowed.
-		"((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])";
-
-	// dotted hex IP address RE.  Each number is between 0x0-0xff.  Zero padding is allowed, e.g. 0x00.
+	if (typeof flags.allowDottedDecimal != "boolean") {
+		flags.allowDottedDecimal = true;
+	}
+	if (typeof flags.allowDottedHex != "boolean") {
+		flags.allowDottedHex = true;
+	}
+	if (typeof flags.allowDottedOctal != "boolean") {
+		flags.allowDottedOctal = true;
+	}
+	if (typeof flags.allowDecimal != "boolean") {
+		flags.allowDecimal = true;
+	}
+	if (typeof flags.allowHex != "boolean") {
+		flags.allowHex = true;
+	}
+	if (typeof flags.allowIPv6 != "boolean") {
+		flags.allowIPv6 = true;
+	}
+	if (typeof flags.allowHybrid != "boolean") {
+		flags.allowHybrid = true;
+	}
+	var dottedDecimalRE = "((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])";
 	var dottedHexRE = "(0[xX]0*[\\da-fA-F]?[\\da-fA-F]\\.){3}0[xX]0*[\\da-fA-F]?[\\da-fA-F]";
-
-	// dotted octal IP address RE.  Each number is between 0000-0377.  
-	// Zero padding is allowed, but each number must have at least 4 characters.
 	var dottedOctalRE = "(0+[0-3][0-7][0-7]\\.){3}0+[0-3][0-7][0-7]";
-
-	// decimal IP address RE.  A decimal number between 0-4294967295.  
-	var decimalRE =  "(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|" +
-		"4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])";
-
-	// hexadecimal IP address RE. 
-	// A hexadecimal number between 0x0-0xFFFFFFFF. Case insensitive.  Zero padding is allowed.
+	var decimalRE = "(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|" + "4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])";
 	var hexRE = "0[xX]0*[\\da-fA-F]{1,8}";
-
-	// IPv6 address RE. 
-	// The format is written as eight groups of four hexadecimal digits, x:x:x:x:x:x:x:x,
-	// where x is between 0000-ffff. Zero padding is optional. Case insensitive. 
 	var ipv6RE = "([\\da-fA-F]{1,4}\\:){7}[\\da-fA-F]{1,4}";
-
-	// IPv6/IPv4 Hybrid address RE. 
-	// The format is written as six groups of four hexadecimal digits, 
-	// followed by the 4 dotted decimal IPv4 format. x:x:x:x:x:x:d.d.d.d
-	var hybridRE = "([\\da-fA-F]{1,4}\\:){6}" + 
-		"((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])";
-
-	// Build IP Address RE
+	var hybridRE = "([\\da-fA-F]{1,4}\\:){6}" + "((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])";
 	var a = [];
-	if(flags.allowDottedDecimal){ a.push(dottedDecimalRE); }
-	if(flags.allowDottedHex){ a.push(dottedHexRE); }
-	if(flags.allowDottedOctal){ a.push(dottedOctalRE); }
-	if(flags.allowDecimal){ a.push(decimalRE); }
-	if(flags.allowHex){ a.push(hexRE); }
-	if(flags.allowIPv6){ a.push(ipv6RE); }
-	if(flags.allowHybrid){ a.push(hybridRE); }
-
+	if (flags.allowDottedDecimal) {
+		a.push(dottedDecimalRE);
+	}
+	if (flags.allowDottedHex) {
+		a.push(dottedHexRE);
+	}
+	if (flags.allowDottedOctal) {
+		a.push(dottedOctalRE);
+	}
+	if (flags.allowDecimal) {
+		a.push(decimalRE);
+	}
+	if (flags.allowHex) {
+		a.push(hexRE);
+	}
+	if (flags.allowIPv6) {
+		a.push(ipv6RE);
+	}
+	if (flags.allowHybrid) {
+		a.push(hybridRE);
+	}
 	var ipAddressRE = "";
-	if(a.length > 0){
+	if (a.length > 0) {
 		ipAddressRE = "(" + a.join("|") + ")";
 	}
-
-	return ipAddressRE; // String
-}
-
-dojo.regexp.host = function(/*Object?*/flags){
-	// summary: Builds a RE that matches a host
-	// description: A host is a domain name or an IP address, possibly followed by a port number.
-	// flags: An object.
-	//    flags.allowIP  Allow an IP address for hostname.  Default is true.
-	//    flags.allowLocal  Allow the host to be "localhost".  Default is false.
-	//    flags.allowPort  Allow a port number to be present.  Default is true.
-	//    flags in regexp.ipAddress can be applied.
-	//    flags in regexp.tld can be applied.
-
-	// assign default values to missing paramters
+	return ipAddressRE;
+};
+dojo.regexp.host = function (flags) {
 	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.allowIP != "boolean"){ flags.allowIP = true; }
-	if(typeof flags.allowLocal != "boolean"){ flags.allowLocal = false; }
-	if(typeof flags.allowPort != "boolean"){ flags.allowPort = true; }
-
-	// Domain names can not end with a dash.
+	if (typeof flags.allowIP != "boolean") {
+		flags.allowIP = true;
+	}
+	if (typeof flags.allowLocal != "boolean") {
+		flags.allowLocal = false;
+	}
+	if (typeof flags.allowPort != "boolean") {
+		flags.allowPort = true;
+	}
 	var domainNameRE = "([0-9a-zA-Z]([-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?\\.)+" + dojo.regexp.tld(flags);
-
-	// port number RE
-	var portRE = ( flags.allowPort ) ? "(\\:" + dojo.regexp.integer({signed: false}) + ")?" : "";
-
-	// build host RE
+	var portRE = (flags.allowPort) ? "(\\:" + dojo.regexp.integer({signed:false}) + ")?" : "";
 	var hostNameRE = domainNameRE;
-	if(flags.allowIP){ hostNameRE += "|" +  dojo.regexp.ipAddress(flags); }
-	if(flags.allowLocal){ hostNameRE += "|localhost"; }
-
-	return "(" + hostNameRE + ")" + portRE; // String
-}
-
-dojo.regexp.url = function(/*Object?*/flags){
-	// summary: Builds a regular expression that matches a URL
-	//
-	// flags: An object
-	//    flags.scheme  Can be true, false, or [true, false]. 
-	//      This means: required, not allowed, or match either one.
-	//    flags in regexp.host can be applied.
-	//    flags in regexp.ipAddress can be applied.
-	//    flags in regexp.tld can be applied.
-
-	// assign default values to missing paramters
+	if (flags.allowIP) {
+		hostNameRE += "|" + dojo.regexp.ipAddress(flags);
+	}
+	if (flags.allowLocal) {
+		hostNameRE += "|localhost";
+	}
+	return "(" + hostNameRE + ")" + portRE;
+};
+dojo.regexp.url = function (flags) {
 	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.scheme == "undefined"){ flags.scheme = [true, false]; }
-
-	// Scheme RE
-	var protocolRE = dojo.regexp.buildGroupRE(flags.scheme,
-		function(q){ if(q){ return "(https?|ftps?)\\://"; } return ""; }
-	);
-
-	// Path and query and anchor RE
+	if (typeof flags.scheme == "undefined") {
+		flags.scheme = [true, false];
+	}
+	var protocolRE = dojo.regexp.buildGroupRE(flags.scheme, function (q) {
+		if (q) {
+			return "(https?|ftps?)\\://";
+		}
+		return "";
+	});
 	var pathRE = "(/([^?#\\s/]+/)*)?([^?#\\s/]+(\\?[^?#\\s/]*)?(#[A-Za-z][\\w.:-]*)?)?";
-
 	return protocolRE + dojo.regexp.host(flags) + pathRE;
-}
-
-
-dojo.regexp.emailAddress = function(/*Object?*/flags){
-	// summary: Builds a regular expression that matches an email address
-	//
-	//flags: An object
-	//    flags.allowCruft  Allow address like <mailto:foo at yahoo.com>.  Default is false.
-	//    flags in regexp.host can be applied.
-	//    flags in regexp.ipAddress can be applied.
-	//    flags in regexp.tld can be applied.
-
-	// assign default values to missing paramters
+};
+dojo.regexp.emailAddress = function (flags) {
 	flags = (typeof flags == "object") ? flags : {};
-	if (typeof flags.allowCruft != "boolean") { flags.allowCruft = false; }
-	flags.allowPort = false; // invalid in email addresses
-
-	// user name RE - apostrophes are valid if there's not 2 in a row
+	if (typeof flags.allowCruft != "boolean") {
+		flags.allowCruft = false;
+	}
+	flags.allowPort = false;
 	var usernameRE = "([\\da-z]+[-._+&'])*[\\da-z]+";
-
-	// build emailAddress RE
 	var emailAddressRE = usernameRE + "@" + dojo.regexp.host(flags);
-
-	// Allow email addresses with cruft
-	if ( flags.allowCruft ) {
+	if (flags.allowCruft) {
 		emailAddressRE = "<?(mailto\\:)?" + emailAddressRE + ">?";
 	}
-
-	return emailAddressRE; // String
-}
-
-dojo.regexp.emailAddressList = function(/*Object?*/flags){
-	// summary: Builds a regular expression that matches a list of email addresses.
-	//
-	// flags: An object.
-	//    flags.listSeparator  The character used to separate email addresses.  Default is ";", ",", "\n" or " ".
-	//    flags in regexp.emailAddress can be applied.
-	//    flags in regexp.host can be applied.
-	//    flags in regexp.ipAddress can be applied.
-	//    flags in regexp.tld can be applied.
-
-	// assign default values to missing paramters
+	return emailAddressRE;
+};
+dojo.regexp.emailAddressList = function (flags) {
 	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.listSeparator != "string"){ flags.listSeparator = "\\s;,"; }
-
-	// build a RE for an Email Address List
+	if (typeof flags.listSeparator != "string") {
+		flags.listSeparator = "\\s;,";
+	}
 	var emailAddressRE = dojo.regexp.emailAddress(flags);
-	var emailAddressListRE = "(" + emailAddressRE + "\\s*[" + flags.listSeparator + "]\\s*)*" + 
-		emailAddressRE + "\\s*[" + flags.listSeparator + "]?\\s*";
-
-	return emailAddressListRE; // String
-}
-
-dojo.regexp.integer = function(/*Object?*/flags){
-	// summary: Builds a regular expression that matches an integer
-	//
-	// flags: An object
-	//    flags.signed  The leading plus-or-minus sign.  Can be true, false, or [true, false].
-	//      Default is [true, false], (i.e. will match if it is signed or unsigned).
-	//    flags.separator  The character used as the thousands separator.  Default is no separator.
-	//      For more than one symbol use an array, e.g. [",", ""], makes ',' optional.
-	//	flags.groupSize group size between separators
-	//	flags.groupSize2 second grouping (for India)
-
-	// assign default values to missing paramters
+	var emailAddressListRE = "(" + emailAddressRE + "\\s*[" + flags.listSeparator + "]\\s*)*" + emailAddressRE + "\\s*[" + flags.listSeparator + "]?\\s*";
+	return emailAddressListRE;
+};
+dojo.regexp.integer = function (flags) {
 	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.signed == "undefined"){ flags.signed = [true, false]; }
-	if(typeof flags.separator == "undefined"){
+	if (typeof flags.signed == "undefined") {
+		flags.signed = [true, false];
+	}
+	if (typeof flags.separator == "undefined") {
 		flags.separator = "";
-	} else if(typeof flags.groupSize == "undefined"){
-		flags.groupSize = 3;
+	} else {
+		if (typeof flags.groupSize == "undefined") {
+			flags.groupSize = 3;
+		}
 	}
-	// build sign RE
-	var signRE = dojo.regexp.buildGroupRE(flags.signed,
-		function(q) { return q ? "[-+]" : ""; }
-	);
-
-	// number RE
-	var numberRE = dojo.regexp.buildGroupRE(flags.separator,
-		function(sep){ 
-			if(sep == ""){ 
-				return "(0|[1-9]\\d*)";
-			}
-			var grp = flags.groupSize, grp2 = flags.groupSize2;
-			if(typeof grp2 != "undefined"){
-				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 + "})*)";
+	var signRE = dojo.regexp.buildGroupRE(flags.signed, function (q) {
+		return q ? "[-+]" : "";
+	});
+	var numberRE = dojo.regexp.buildGroupRE(flags.separator, function (sep) {
+		if (sep == "") {
+			return "(0|[1-9]\\d*)";
 		}
-	);
-
-	// integer RE
-	return signRE + numberRE; // String
-}
-
-dojo.regexp.realNumber = function(/*Object?*/flags){
-	// summary: Builds a regular expression to match a real number in exponential notation
-	//
-	// flags:An object
-	//    flags.places  The integer number of decimal places.
-	//      If not given, the decimal part is optional and the number of places is unlimited.
-	//    flags.decimal  A string for the character used as the decimal point.  Default is ".".
-	//    flags.fractional  Whether decimal places are allowed.
-	//      Can be true, false, or [true, false].  Default is [true, false]
-	//    flags.exponent  Express in exponential notation.  Can be true, false, or [true, false].
-	//      Default is [true, false], (i.e. will match if the exponential part is present are not).
-	//    flags.eSigned  The leading plus-or-minus sign on the exponent.  Can be true, false, 
-	//      or [true, false].  Default is [true, false], (i.e. will match if it is signed or unsigned).
-	//    flags in regexp.integer can be applied.
-
-	// assign default values to missing paramters
+		var grp = flags.groupSize, grp2 = flags.groupSize2;
+		if (typeof grp2 != "undefined") {
+			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 + "})*)";
+	});
+	return signRE + numberRE;
+};
+dojo.regexp.realNumber = function (flags) {
 	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.places != "number"){ flags.places = Infinity; }
-	if(typeof flags.decimal != "string"){ flags.decimal = "."; }
-	if(typeof flags.fractional == "undefined"){ flags.fractional = [true, false]; }
-	if(typeof flags.exponent == "undefined"){ flags.exponent = [true, false]; }
-	if(typeof flags.eSigned == "undefined"){ flags.eSigned = [true, false]; }
-
-	// integer RE
+	if (typeof flags.places != "number") {
+		flags.places = Infinity;
+	}
+	if (typeof flags.decimal != "string") {
+		flags.decimal = ".";
+	}
+	if (typeof flags.fractional == "undefined") {
+		flags.fractional = [true, false];
+	}
+	if (typeof flags.exponent == "undefined") {
+		flags.exponent = [true, false];
+	}
+	if (typeof flags.eSigned == "undefined") {
+		flags.eSigned = [true, false];
+	}
 	var integerRE = dojo.regexp.integer(flags);
-
-	// decimal RE
-	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 = re + "\\d{" + flags.places + "}"; 
-				}
+	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 = re + "\\d{" + flags.places + "}";
 			}
-
-			return re;
 		}
-	);
-
-	// exponent RE
-	var exponentRE = dojo.regexp.buildGroupRE(flags.exponent,
-		function(q){ 
-			if(q){ return "([eE]" + dojo.regexp.integer({ signed: flags.eSigned}) + ")"; }
-			return ""; 
+		return re;
+	});
+	var exponentRE = dojo.regexp.buildGroupRE(flags.exponent, function (q) {
+		if (q) {
+			return "([eE]" + dojo.regexp.integer({signed:flags.eSigned}) + ")";
 		}
-	);
-
-	// real number RE
-	return integerRE + decimalRE + exponentRE; // String
-}
-
-dojo.regexp.currency = function(/*Object?*/flags){
-	// summary: Builds a regular expression to match a monetary value
-	//
-	// flags: An object
-	//    flags.symbol  A currency symbol such as Yen "�", Pound "�", or the Euro sign "�".  
-	//      Default is "$".  For more than one symbol use an array, e.g. ["$", ""], makes $ optional.
-	//    flags.placement  The symbol can come "before" the number or "after" the number.  Default is "before".
-	//    flags.signPlacement  The sign can come "before" the number or "after" the sign,
-	//      "around" to put parentheses around negative values, or "end" for the final char.  Default is "before".
-	//    flags.cents  deprecated, in favor of flags.fractional
-	//    flags in regexp.realNumber can be applied except exponent, eSigned.
-
-	// assign default values to missing paramters
+		return "";
+	});
+	return integerRE + decimalRE + exponentRE;
+};
+dojo.regexp.currency = function (flags) {
 	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.signed == "undefined"){ flags.signed = [true, false]; }
-	if(typeof flags.symbol == "undefined"){ flags.symbol = "$"; }
-	if(typeof flags.placement != "string"){ flags.placement = "before"; }
-	if(typeof flags.signPlacement != "string"){ flags.signPlacement = "before"; }
-	if(typeof flags.separator == "undefined"){ flags.separator = ","; }
-	if(typeof flags.fractional == "undefined" && typeof flags.cents != "undefined"){
+	if (typeof flags.signed == "undefined") {
+		flags.signed = [true, false];
+	}
+	if (typeof flags.symbol == "undefined") {
+		flags.symbol = "$";
+	}
+	if (typeof flags.placement != "string") {
+		flags.placement = "before";
+	}
+	if (typeof flags.signPlacement != "string") {
+		flags.signPlacement = "before";
+	}
+	if (typeof flags.separator == "undefined") {
+		flags.separator = ",";
+	}
+	if (typeof flags.fractional == "undefined" && typeof flags.cents != "undefined") {
 		dojo.deprecated("dojo.regexp.currency: flags.cents", "use flags.fractional instead", "0.5");
 		flags.fractional = flags.cents;
 	}
-	if(typeof flags.decimal != "string"){ flags.decimal = "."; }
-
-	// build sign RE
-	var signRE = dojo.regexp.buildGroupRE(flags.signed,
-		function(q){ if (q){ return "[-+]"; } return ""; }
-	);
-
-	// build symbol RE
-	var symbolRE = dojo.regexp.buildGroupRE(flags.symbol,
-		function(symbol){ 
-			// escape all special characters
-			return "\\s?" + symbol.replace( /([.$?*!=:|\\\/^])/g, "\\$1") + "\\s?";
+	if (typeof flags.decimal != "string") {
+		flags.decimal = ".";
+	}
+	var signRE = dojo.regexp.buildGroupRE(flags.signed, function (q) {
+		if (q) {
+			return "[-+]";
 		}
-	);
-
-	switch (flags.signPlacement){
-		case "before":
-			symbolRE = signRE + symbolRE;
-			break;
-		case "after":
-			symbolRE = symbolRE + signRE;
-			break;
+		return "";
+	});
+	var symbolRE = dojo.regexp.buildGroupRE(flags.symbol, function (symbol) {
+		return "\\s?" + symbol.replace(/([.$?*!=:|\\\/^])/g, "\\$1") + "\\s?";
+	});
+	switch (flags.signPlacement) {
+	  case "before":
+		symbolRE = signRE + symbolRE;
+		break;
+	  case "after":
+		symbolRE = symbolRE + signRE;
+		break;
 	}
-
-	// number RE
-	var flagsCopy = flags; //TODO: copy by value?
-	flagsCopy.signed = false; flagsCopy.exponent = false;
+	var flagsCopy = flags;
+	flagsCopy.signed = false;
+	flagsCopy.exponent = false;
 	var numberRE = dojo.regexp.realNumber(flagsCopy);
-
-	// build currency RE
 	var currencyRE;
-	switch (flags.placement){
-		case "before":
-			currencyRE = symbolRE + numberRE;
-			break;
-		case "after":
-			currencyRE = numberRE + symbolRE;
-			break;
+	switch (flags.placement) {
+	  case "before":
+		currencyRE = symbolRE + numberRE;
+		break;
+	  case "after":
+		currencyRE = numberRE + symbolRE;
+		break;
 	}
-
-	switch (flags.signPlacement){
-		case "around":
-			currencyRE = "(" + currencyRE + "|" + "\\(" + currencyRE + "\\)" + ")";
-			break;
-		case "begin":
-			currencyRE = signRE + currencyRE;
-			break;
-		case "end":
-			currencyRE = currencyRE + signRE;
-			break;
+	switch (flags.signPlacement) {
+	  case "around":
+		currencyRE = "(" + currencyRE + "|" + "\\(" + currencyRE + "\\)" + ")";
+		break;
+	  case "begin":
+		currencyRE = signRE + currencyRE;
+		break;
+	  case "end":
+		currencyRE = currencyRE + signRE;
+		break;
 	}
-	return currencyRE; // String
-}
-
-
-dojo.regexp.us.state = function(/*Object?*/flags){
-	// summary: A regular expression to match US state and territory abbreviations
-	//
-	// flags  An object.
-	//    flags.allowTerritories  Allow Guam, Puerto Rico, etc.  Default is true.
-	//    flags.allowMilitary  Allow military 'states', e.g. Armed Forces Europe (AE).  Default is true.
-
-	// assign default values to missing paramters
+	return currencyRE;
+};
+dojo.regexp.us.state = function (flags) {
 	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.allowTerritories != "boolean"){ flags.allowTerritories = true; }
-	if(typeof flags.allowMilitary != "boolean"){ flags.allowMilitary = true; }
-
-	// state RE
-	var statesRE = 
-		"AL|AK|AZ|AR|CA|CO|CT|DE|DC|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|" + 
-		"NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY";
-
-	// territories RE
+	if (typeof flags.allowTerritories != "boolean") {
+		flags.allowTerritories = true;
+	}
+	if (typeof flags.allowMilitary != "boolean") {
+		flags.allowMilitary = true;
+	}
+	var statesRE = "AL|AK|AZ|AR|CA|CO|CT|DE|DC|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|" + "NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY";
 	var territoriesRE = "AS|FM|GU|MH|MP|PW|PR|VI";
-
-	// military states RE
 	var militaryRE = "AA|AE|AP";
-
-	// Build states and territories RE
-	if(flags.allowTerritories){ statesRE += "|" + territoriesRE; }
-	if(flags.allowMilitary){ statesRE += "|" + militaryRE; }
-
-	return "(" + statesRE + ")"; // String
-}
-
-dojo.regexp.time = function(/*Object?*/flags){
-	// summary: Builds a regular expression to match any International format for time
-	// description: The RE can match one format or one of multiple formats.
-	//
-	//  Format
-	//  h        12 hour, no zero padding.
-	//  hh       12 hour, has leading zero.
-	//  H        24 hour, no zero padding.
-	//  HH       24 hour, has leading zero.
-	//  m        minutes, no zero padding.
-	//  mm       minutes, has leading zero.
-	//  s        seconds, no zero padding.
-	//  ss       seconds, has leading zero.
-	//  t        am or pm, case insensitive.
-	//  All other characters must appear literally in the expression.
-	//
-	//  Example
-	//    "h:m:s t"  ->   2:5:33 PM
-	//    "HH:mm:ss" ->  14:05:33
-	//
-	// flags: An object
-	//    flags.format  A string or an array of strings.  Default is "h:mm:ss t".
-	//    flags.amSymbol  The symbol used for AM.  Default is "AM".
-	//    flags.pmSymbol  The symbol used for PM.  Default is "PM".
-
+	if (flags.allowTerritories) {
+		statesRE += "|" + territoriesRE;
+	}
+	if (flags.allowMilitary) {
+		statesRE += "|" + militaryRE;
+	}
+	return "(" + statesRE + ")";
+};
+dojo.regexp.time = function (flags) {
 	dojo.deprecated("dojo.regexp.time", "Use dojo.date.parse instead", "0.5");
-
-	// assign default values to missing paramters
 	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.format == "undefined"){ flags.format = "h:mm:ss t"; }
-	if(typeof flags.amSymbol != "string"){ flags.amSymbol = "AM"; }
-	if(typeof flags.pmSymbol != "string"){ flags.pmSymbol = "PM"; }
-
-	// Converts a time format to a RE
-	var timeRE = function(format){
-		// escape all special characters
-		format = format.replace( /([.$?*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
-		var amRE = flags.amSymbol.replace( /([.$?*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
-		var pmRE = flags.pmSymbol.replace( /([.$?*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
-
-		// replace tokens with Regular Expressions
+	if (typeof flags.format == "undefined") {
+		flags.format = "h:mm:ss t";
+	}
+	if (typeof flags.amSymbol != "string") {
+		flags.amSymbol = "AM";
+	}
+	if (typeof flags.pmSymbol != "string") {
+		flags.pmSymbol = "PM";
+	}
+	var timeRE = function (format) {
+		format = format.replace(/([.$?*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
+		var amRE = flags.amSymbol.replace(/([.$?*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
+		var pmRE = flags.pmSymbol.replace(/([.$?*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
 		format = format.replace("hh", "(0[1-9]|1[0-2])");
 		format = format.replace("h", "([1-9]|1[0-2])");
 		format = format.replace("HH", "([01][0-9]|2[0-3])");
@@ -4323,83 +2984,35 @@
 		format = format.replace("m", "([1-5][0-9]|[0-9])");
 		format = format.replace("ss", "([0-5][0-9])");
 		format = format.replace("s", "([1-5][0-9]|[0-9])");
-		format = format.replace("t", "\\s?(" + amRE + "|" + pmRE + ")\\s?" );
-
-		return format; // String
+		format = format.replace("t", "\\s?(" + amRE + "|" + pmRE + ")\\s?");
+		return format;
 	};
-
-	// build RE for multiple time formats
-	return dojo.regexp.buildGroupRE(flags.format, timeRE); // String
-}
-
-dojo.regexp.numberFormat = function(/*Object?*/flags){
-	// summary: Builds a regular expression to match any sort of number based format
-	// description:
-	//  Use this method for phone numbers, social security numbers, zip-codes, etc.
-	//  The RE can match one format or one of multiple formats.
-	//
-	//  Format
-	//    #        Stands for a digit, 0-9.
-	//    ?        Stands for an optional digit, 0-9 or nothing.
-	//    All other characters must appear literally in the expression.
-	//
-	//  Example   
-	//    "(###) ###-####"       ->   (510) 542-9742
-	//    "(###) ###-#### x#???" ->   (510) 542-9742 x153
-	//    "###-##-####"          ->   506-82-1089       i.e. social security number
-	//    "#####-####"           ->   98225-1649        i.e. zip code
-	//
-	// flags:  An object
-	//    flags.format  A string or an Array of strings for multiple formats.
-
-	// assign default values to missing paramters
+	return dojo.regexp.buildGroupRE(flags.format, timeRE);
+};
+dojo.regexp.numberFormat = function (flags) {
 	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.format == "undefined"){ flags.format = "###-###-####"; }
-
-	// Converts a number format to RE.
-	var digitRE = function(format){
-		// escape all special characters, except '?'
-		format = format.replace( /([.$*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
-
-		// Now replace '?' with Regular Expression
+	if (typeof flags.format == "undefined") {
+		flags.format = "###-###-####";
+	}
+	var digitRE = function (format) {
+		format = format.replace(/([.$*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
 		format = format.replace(/\?/g, "\\d?");
-
-		// replace # with Regular Expression
 		format = format.replace(/#/g, "\\d");
-
-		return format; // String
+		return format;
 	};
-
-	// build RE for multiple number formats
-	return dojo.regexp.buildGroupRE(flags.format, digitRE); //String
-}
-
-
-dojo.regexp.buildGroupRE = function(/*value or Array of values*/a, /*Function(x) returns a regular expression as a String*/re){
-	// summary: Builds a regular expression that groups subexpressions
-	// description: A utility function used by some of the RE generators.
-	//  The subexpressions are constructed by the function, re, in the second parameter.
-	//  re builds one subexpression for each elem in the array a, in the first parameter.
-	//  Returns a string for a regular expression that groups all the subexpressions.
-	//
-	// a:  A single value or an array of values.
-	// re:  A function.  Takes one parameter and converts it to a regular expression. 
-
-	// case 1: a is a single value.
-	if(!(a instanceof Array)){
-		return re(a); // String
+	return dojo.regexp.buildGroupRE(flags.format, digitRE);
+};
+dojo.regexp.buildGroupRE = function (a, re) {
+	if (!(a instanceof Array)) {
+		return re(a);
 	}
-
-	// case 2: a is an array
 	var b = [];
-	for (var i = 0; i < a.length; i++){
-		// convert each elem to a RE
+	for (var i = 0; i < a.length; i++) {
 		b.push(re(a[i]));
 	}
+	return "(" + b.join("|") + ")";
+};
 
-	 // join the REs as alternatives in a RE group.
-	return "(" + b.join("|") + ")"; // String
-}
 
 __CPAN_FILE__ src/hostenv_rhino.js
 /*
@@ -4412,208 +3025,120 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-/*
-* Rhino host environment
-*/
-// make jsc shut up (so we can use jsc for sanity checking) 
-/*@cc_on
- at if (@_jscript_version >= 7)
-var loadClass; var print; var load; var quit; var version; var Packages; var java;
- at end
-@*/
-
-dojo.hostenv.println=function(line){
-	if(arguments.length > 0){
+dojo.hostenv.println = function (line) {
+	if (arguments.length > 0) {
 		print(arguments[0]);
-		for(var i=1; i<arguments.length; i++){
-			var valid=false;
-			for (var p in arguments[i]){valid=true;break;}
-			if(valid){
+		for (var i = 1; i < arguments.length; i++) {
+			var valid = false;
+			for (var p in arguments[i]) {
+				valid = true;
+				break;
+			}
+			if (valid) {
 				dojo.debugShallow(arguments[i]);
 			}
 		}
 	} else {
 		print(line);
 	}
-}
-
-dojo.locale = dojo.locale || java.util.Locale.getDefault().toString().replace('_','-').toLowerCase();
-dojo.render.name = dojo.hostenv.name_ = 'rhino';
-dojo.hostenv.getVersion = function() {return version();};
-
+};
+dojo.locale = dojo.locale || java.util.Locale.getDefault().toString().replace("_", "-").toLowerCase();
+dojo.render.name = dojo.hostenv.name_ = "rhino";
+dojo.hostenv.getVersion = function () {
+	return version();
+};
 if (dj_undef("byId")) {
-	dojo.byId = function(id, doc){
-		if(id && (typeof id == "string" || id instanceof String)){
-			if(!doc){ doc = document; }
+	dojo.byId = function (id, doc) {
+		if (id && (typeof id == "string" || id instanceof String)) {
+			if (!doc) {
+				doc = document;
+			}
 			return doc.getElementById(id);
 		}
-		return id; // assume it's a node
-	}
+		return id;
+	};
 }
-
-// see comments in spidermonkey loadUri
-dojo.hostenv.loadUri = function(uri, cb){
-	try{
+dojo.hostenv.loadUri = function (uri, cb) {
+	try {
 		var local = (new java.io.File(uri)).exists();
-		if(!local){
-			try{
-				// try it as a file first, URL second
+		if (!local) {
+			try {
 				var stream = (new java.net.URL(uri)).openStream();
-				// close the stream so we don't leak resources
 				stream.close();
-			}catch(e){
-				// no debug output; this failure just means the uri was not found.
+			}
+			catch (e) {
 				return false;
 			}
 		}
-//FIXME: Use Rhino 1.6 native readFile/readUrl if available?
-		if(cb){
+		if (cb) {
 			var contents = (local ? readText : readUri)(uri, "UTF-8");
-			cb(eval('('+contents+')'));
-		}else{
+			cb(eval("(" + contents + ")"));
+		} else {
 			load(uri);
 		}
 		return true;
-	}catch(e){
+	}
+	catch (e) {
 		dojo.debug("rhino load('" + uri + "') failed. Exception: " + e);
 		return false;
 	}
-}
-
-dojo.hostenv.exit = function(exitcode){ 
+};
+dojo.hostenv.exit = function (exitcode) {
 	quit(exitcode);
-}
-
-// Hack to determine current script...
-//
-// These initial attempts failed:
-//   1. get an EcmaError and look at e.getSourceName(): try {eval ("static in return")} catch(e) { ...
-//   Won't work because NativeGlobal.java only does a put of "name" and "message", not a wrapped reflecting object.
-//   Even if the EcmaError object had the sourceName set.
-//  
-//   2. var e = Packages.org.mozilla.javascript.Context.getCurrentContext().reportError('');
-//   Won't work because it goes directly to the errorReporter, not the return value.
-//   We want context.interpreterSourceFile and context.interpreterLine, which are used in static Context.getSourcePositionFromStack
-//   (set by Interpreter.java at interpretation time, if in interpreter mode).
-//
-//   3. var e = Packages.org.mozilla.javascript.Context.getCurrentContext().reportRuntimeError('');
-//   This returns an object, but e.message still does not have source info.
-//   In compiler mode, perhaps not set; in interpreter mode, perhaps not used by errorReporter?
-//
-// What we found works is to do basically the same hack as is done in getSourcePositionFromStack,
-// making a new java.lang.Exception() and then calling printStackTrace on a string stream.
-// We have to parse the string for the .js files (different from the java files).
-// This only works however in compiled mode (-opt 0 or higher).
-// In interpreter mode, entire stack is java.
-// When compiled, printStackTrace is like:
-// java.lang.Exception
-//	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-//	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
-//	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
-//	at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
-//	at org.mozilla.javascript.NativeJavaClass.constructSpecific(NativeJavaClass.java:228)
-//	at org.mozilla.javascript.NativeJavaClass.construct(NativeJavaClass.java:185)
-//	at org.mozilla.javascript.ScriptRuntime.newObject(ScriptRuntime.java:1269)
-//	at org.mozilla.javascript.gen.c2.call(/Users/mda/Sites/burstproject/testrhino.js:27)
-//    ...
-//	at org.mozilla.javascript.tools.shell.Main.main(Main.java:76)
-//
-// Note may get different answers based on:
-//    Context.setOptimizationLevel(-1)
-//    Context.setGeneratingDebug(true)
-//    Context.setGeneratingSource(true) 
-//
-// Some somewhat helpful posts:
-//    http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&safe=off&selm=9v9n0g%246gr1%40ripley.netscape.com
-//    http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&safe=off&selm=3BAA2DC4.6010702%40atg.com
-//
-// Note that Rhino1.5R5 added source name information in some exceptions.
-// But this seems not to help in command-line Rhino, because Context.java has an error reporter
-// so no EvaluationException is thrown.
-
-// do it by using java java.lang.Exception
+};
 function dj_rhino_current_script_via_java(depth) {
-    var optLevel = Packages.org.mozilla.javascript.Context.getCurrentContext().getOptimizationLevel();  
-   // if (optLevel == -1){ dojo.unimplemented("getCurrentScriptURI (determine current script path for rhino when interpreter mode)", ''); }
-    var caw = new java.io.CharArrayWriter();
-    var pw = new java.io.PrintWriter(caw);
-    var exc = new java.lang.Exception();
-    var s = caw.toString();
-    // we have to exclude the ones with or without line numbers because they put double entries in:
-    //   at org.mozilla.javascript.gen.c3._c4(/Users/mda/Sites/burstproject/burst/Runtime.js:56)
-    //   at org.mozilla.javascript.gen.c3.call(/Users/mda/Sites/burstproject/burst/Runtime.js)
-    var matches = s.match(/[^\(]*\.js\)/gi);
-    if(!matches){
+	var optLevel = Packages.org.mozilla.javascript.Context.getCurrentContext().getOptimizationLevel();
+	var caw = new java.io.CharArrayWriter();
+	var pw = new java.io.PrintWriter(caw);
+	var exc = new java.lang.Exception();
+	var s = caw.toString();
+	var matches = s.match(/[^\(]*\.js\)/gi);
+	if (!matches) {
 		throw Error("cannot parse printStackTrace output: " + s);
 	}
-
-    // matches[0] is entire string, matches[1] is this function, matches[2] is caller, ...
-    var fname = ((typeof depth != 'undefined')&&(depth)) ? matches[depth + 1] : matches[matches.length - 1];
-    var fname = matches[3];
-	if(!fname){ fname = matches[1]; }
-    // print("got fname '" + fname + "' from stack string '" + s + "'");
-    if (!fname){ throw Error("could not find js file in printStackTrace output: " + s); }
-    //print("Rhino getCurrentScriptURI returning '" + fname + "' from: " + s); 
-    return fname;
+	var fname = ((typeof depth != "undefined") && (depth)) ? matches[depth + 1] : matches[matches.length - 1];
+	var fname = matches[3];
+	if (!fname) {
+		fname = matches[1];
+	}
+	if (!fname) {
+		throw Error("could not find js file in printStackTrace output: " + s);
+	}
+	return fname;
 }
-
-// UNUSED: leverage new support in native exception for getSourceName
-/*
-function dj_rhino_current_script_via_eval_exception() {
-    var exc;
-    // 'ReferenceError: "undefinedsymbol" is not defined.'
-    try {eval ("undefinedsymbol()") } catch(e) {exc = e;}
-    // 'Error: whatever'
-    // try{throw Error("whatever");} catch(e) {exc = e;}
-    // 'SyntaxError: identifier is a reserved word'
-    // try {eval ("static in return")} catch(e) { exc = e; }
-   // print("got exception: '" + exc + "' type=" + (typeof exc));
-    // print("exc.stack=" + (typeof exc.stack));
-    var sn = exc.rhinoException.getSourceName();
-    print("SourceName=" + sn);
-    return sn;
-}*/
-
-// reading a file from disk in Java is a humiliating experience by any measure.
-// Lets avoid that and just get the freaking text
-function readText(path, encoding){
+function readText(path, encoding) {
 	encoding = encoding || "utf-8";
-	// NOTE: we intentionally avoid handling exceptions, since the caller will
-	// want to know
 	var jf = new java.io.File(path);
 	var is = new java.io.FileInputStream(jf);
 	return dj_readInputStream(is, encoding);
 }
-
-function readUri(uri, encoding){
+function readUri(uri, encoding) {
 	var conn = (new java.net.URL(uri)).openConnection();
 	encoding = encoding || conn.getContentEncoding() || "utf-8";
 	var is = conn.getInputStream();
 	return dj_readInputStream(is, encoding);
 }
-
-function dj_readInputStream(is, encoding){
+function dj_readInputStream(is, encoding) {
 	var input = new java.io.BufferedReader(new java.io.InputStreamReader(is, encoding));
 	try {
 		var sb = new java.lang.StringBuffer();
 		var line = "";
-		while((line = input.readLine()) !== null){
+		while ((line = input.readLine()) !== null) {
 			sb.append(line);
 			sb.append(java.lang.System.getProperty("line.separator"));
 		}
 		return sb.toString();
-	} finally {
+	}
+	finally {
 		input.close();
 	}
 }
-
-// call this now because later we may not be on the top of the stack
-if(!djConfig.libraryScriptUri.length){
-	try{
+if (!djConfig.libraryScriptUri.length) {
+	try {
 		djConfig.libraryScriptUri = dj_rhino_current_script_via_java(1);
-	}catch(e){
-		// otherwise just fake it
-		if(djConfig["isDebug"]){
+	}
+	catch (e) {
+		if (djConfig["isDebug"]) {
 			print("\n");
 			print("we have no idea where Dojo is located.");
 			print("Please try loading rhino in a non-interpreted mode or set a");
@@ -4626,40 +3151,32 @@
 		djConfig.libraryScriptUri = "./";
 	}
 }
-
-dojo.doc = function(){
-	// summary:
-	//		return the document object associated with the dojo.global()
+dojo.doc = function () {
 	return document;
-}
-
-dojo.body = function(){
-	return document.body;	
-}
-
-function setTimeout(func, delay){
-	// summary: provides timed callbacks using Java threads
-
-	var def={
-		sleepTime:delay,
-		hasSlept:false,
-		
-		run:function(){
-			if (!this.hasSlept){
-				this.hasSlept=true;
-				java.lang.Thread.currentThread().sleep(this.sleepTime);
-			}
-			try {
-				func();
-			} catch(e){dojo.debug("Error running setTimeout thread:" + e);}
+};
+dojo.body = function () {
+	return document.body;
+};
+function setTimeout(func, delay) {
+	var def = {sleepTime:delay, hasSlept:false, run:function () {
+		if (!this.hasSlept) {
+			this.hasSlept = true;
+			java.lang.Thread.currentThread().sleep(this.sleepTime);
 		}
-	};
-	
-	var runnable=new java.lang.Runnable(def);
-	var thread=new java.lang.Thread(runnable);
+		try {
+			func();
+		}
+		catch (e) {
+			dojo.debug("Error running setTimeout thread:" + e);
+		}
+	}};
+	var runnable = new java.lang.Runnable(def);
+	var thread = new java.lang.Thread(runnable);
 	thread.start();
 }
+dojo.requireIf((djConfig["isDebug"] || djConfig["debugAtAllCosts"]), "dojo.debug");
 
+
 __CPAN_FILE__ src/lang.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -4673,356 +3190,169 @@
 
 dojo.provide("dojo.lang");
 dojo.require("dojo.lang.common");
-
 dojo.deprecated("dojo.lang", "replaced by dojo.lang.common", "0.5");
 
+
 __CPAN_FILE__ src/bootstrap1.js
-/**
-* @file bootstrap1.js
-*
-* summary: First file that is loaded that 'bootstraps' the entire dojo library suite.
-* note:  Must run before hostenv_*.js file.
-*
-* @author  Copyright 2004 Mark D. Anderson (mda at discerning.com)
-* TODOC: should the copyright be changed to Dojo Foundation?
-* @license Licensed under the Academic Free License 2.1 http://www.opensource.org/licenses/afl-2.1.php
-*
-* $Id: bootstrap1.js 6824 2006-12-06 09:34:32Z alex $
-*/
+/*
+	Copyright (c) 2004-2006, The Dojo Foundation
+	All Rights Reserved.
 
-// TODOC: HOW TO DOC THE BELOW?
-// @global: djConfig
-// summary:
-//		Application code can set the global 'djConfig' prior to loading
-//		the library to override certain global settings for how dojo works.
-// description:  The variables that can be set are as follows:
-//			- isDebug: false
-//			- allowQueryConfig: false
-//			- baseScriptUri: ""
-//			- baseRelativePath: ""
-//			- libraryScriptUri: ""
-//			- iePreventClobber: false
-//			- ieClobberMinimal: true
-//			- locale: undefined
-//			- extraLocale: undefined
-//			- preventBackButtonFix: true
-//			- searchIds: []
-//			- parseWidgets: true
-// TODOC: HOW TO DOC THESE VARIABLES?
-// TODOC: IS THIS A COMPLETE LIST?
-// note:
-//		'djConfig' does not exist under 'dojo.*' so that it can be set before the
-//		'dojo' variable exists.
-// note:
-//		Setting any of these variables *after* the library has loaded does nothing at all.
-// TODOC: is this still true?  Release notes for 0.3 indicated they could be set after load.
-//
+	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/community/licensing.shtml
+*/
 
-//TODOC:  HOW TO DOC THIS?
-// @global: dj_global
-// summary:
-//		an alias for the top-level global object in the host environment
-//		(e.g., the window object in a browser).
-// description:
-//		Refer to 'dj_global' rather than referring to window to ensure your
-//		code runs correctly in contexts other than web browsers (eg: Rhino on a server).
 var dj_global = this;
-
-//TODOC:  HOW TO DOC THIS?
-// @global: dj_currentContext
-// summary:
-//		Private global context object. Where 'dj_global' always refers to the boot-time
-//    global context, 'dj_currentContext' can be modified for temporary context shifting.
-//    dojo.global() returns dj_currentContext.
-// description:
-//		Refer to dojo.global() rather than referring to dj_global to ensure your
-//		code runs correctly in managed contexts.
 var dj_currentContext = this;
-
-
-// ****************************************************************
-// global public utils
-// TODOC: DO WE WANT TO NOTE THAT THESE ARE GLOBAL PUBLIC UTILS?
-// ****************************************************************
-
-function dj_undef(/*String*/ name, /*Object?*/ object){
-	//summary: Returns true if 'name' is defined on 'object' (or globally if 'object' is null).
-	//description: Note that 'defined' and 'exists' are not the same concept.
-	return (typeof (object || dj_currentContext)[name] == "undefined");	// Boolean
+function dj_undef(name, object) {
+	return (typeof (object || dj_currentContext)[name] == "undefined");
 }
-
-// make sure djConfig is defined
-if(dj_undef("djConfig", this)){
+if (dj_undef("djConfig", this)) {
 	var djConfig = {};
 }
-
-//TODOC:  HOW TO DOC THIS?
-// dojo is the root variable of (almost all) our public symbols -- make sure it is defined.
-if(dj_undef("dojo", this)){
+if (dj_undef("dojo", this)) {
 	var dojo = {};
 }
-
-dojo.global = function(){
-	// summary:
-	//		return the current global context object
-	//		(e.g., the window object in a browser).
-	// description:
-	//		Refer to 'dojo.global()' rather than referring to window to ensure your
-	//		code runs correctly in contexts other than web browsers (eg: Rhino on a server).
+dojo.global = function () {
 	return dj_currentContext;
-}
-
-// Override locale setting, if specified
-dojo.locale  = djConfig.locale;
-
-//TODOC:  HOW TO DOC THIS?
-dojo.version = {
-	// summary: version number of this instance of dojo.
-	major: 0, minor: 4, patch: 1, flag: "",
-	revision: Number("$Rev: 6824 $".match(/[0-9]+/)[0]),
-	toString: function(){
-		with(dojo.version){
-			return major + "." + minor + "." + patch + flag + " (" + revision + ")";	// String
-		}
+};
+dojo.locale = djConfig.locale;
+dojo.version = {major:0, minor:4, patch:2, flag:"", revision:Number("$Rev: 7616 $".match(/[0-9]+/)[0]), toString:function () {
+	with (dojo.version) {
+		return major + "." + minor + "." + patch + flag + " (" + revision + ")";
 	}
-}
-
-dojo.evalProp = function(/*String*/ name, /*Object*/ object, /*Boolean?*/ create){
-	// summary: Returns 'object[name]'.  If not defined and 'create' is true, will return a new Object.
-	// description:
-	//		Returns null if 'object[name]' is not defined and 'create' is not true.
-	// 		Note: 'defined' and 'exists' are not the same concept.
-	if((!object)||(!name)) return undefined; // undefined
-	if(!dj_undef(name, object)) return object[name]; // mixed
-	return (create ? (object[name]={}) : undefined);	// mixed
-}
-
-dojo.parseObjPath = function(/*String*/ path, /*Object?*/ context, /*Boolean?*/ create){
-	// summary: Parse string path to an object, and return corresponding object reference and property name.
-	// description:
-	//		Returns an object with two properties, 'obj' and 'prop'.
-	//		'obj[prop]' is the reference indicated by 'path'.
-	// path: Path to an object, in the form "A.B.C".
-	// context: Object to use as root of path.  Defaults to 'dojo.global()'.
-	// create: If true, Objects will be created at any point along the 'path' that is undefined.
+}};
+dojo.evalProp = function (name, object, create) {
+	if ((!object) || (!name)) {
+		return undefined;
+	}
+	if (!dj_undef(name, object)) {
+		return object[name];
+	}
+	return (create ? (object[name] = {}) : undefined);
+};
+dojo.parseObjPath = function (path, context, create) {
 	var object = (context || dojo.global());
-	var names = path.split('.');
+	var names = path.split(".");
 	var prop = names.pop();
-	for (var i=0,l=names.length;i<l && object;i++){
+	for (var i = 0, l = names.length; i < l && object; i++) {
 		object = dojo.evalProp(names[i], object, create);
 	}
-	return {obj: object, prop: prop};	// Object: {obj: Object, prop: String}
-}
-
-dojo.evalObjPath = function(/*String*/ path, /*Boolean?*/ create){
-	// summary: Return the value of object at 'path' in the global scope, without using 'eval()'.
-	// path: Path to an object, in the form "A.B.C".
-	// create: If true, Objects will be created at any point along the 'path' that is undefined.
-	if(typeof path != "string"){
+	return {obj:object, prop:prop};
+};
+dojo.evalObjPath = function (path, create) {
+	if (typeof path != "string") {
 		return dojo.global();
 	}
-	// fast path for no periods
-	if(path.indexOf('.') == -1){
-		return dojo.evalProp(path, dojo.global(), create);		// mixed
+	if (path.indexOf(".") == -1) {
+		return dojo.evalProp(path, dojo.global(), create);
 	}
-
-	//MOW: old 'with' syntax was confusing and would throw an error if parseObjPath returned null.
 	var ref = dojo.parseObjPath(path, dojo.global(), create);
-	if(ref){
-		return dojo.evalProp(ref.prop, ref.obj, create);	// mixed
+	if (ref) {
+		return dojo.evalProp(ref.prop, ref.obj, create);
 	}
 	return null;
-}
-
-dojo.errorToString = function(/*Error*/ exception){
-	// summary: Return an exception's 'message', 'description' or text.
-
-	// TODO: overriding Error.prototype.toString won't accomplish this?
- 	// 		... since natively generated Error objects do not always reflect such things?
-	if(!dj_undef("message", exception)){
-		return exception.message;		// String
-	}else if(!dj_undef("description", exception)){
-		return exception.description;	// String
-	}else{
-		return exception;				// Error
+};
+dojo.errorToString = function (exception) {
+	if (!dj_undef("message", exception)) {
+		return exception.message;
+	} else {
+		if (!dj_undef("description", exception)) {
+			return exception.description;
+		} else {
+			return exception;
+		}
 	}
-}
-
-dojo.raise = function(/*String*/ message, /*Error?*/ exception){
-	// summary: Common point for raising exceptions in Dojo to enable logging.
-	//	Throws an error message with text of 'exception' if provided, or
-	//	rethrows exception object.
-
-	if(exception){
-		message = message + ": "+dojo.errorToString(exception);
-	}else{
+};
+dojo.raise = function (message, exception) {
+	if (exception) {
+		message = message + ": " + dojo.errorToString(exception);
+	} else {
 		message = dojo.errorToString(message);
 	}
-
-	// print the message to the user if hostenv.println is defined
-	try { if(djConfig.isDebug){ dojo.hostenv.println("FATAL exception raised: "+message); } } catch (e) {}
-
+	try {
+		if (djConfig.isDebug) {
+			dojo.hostenv.println("FATAL exception raised: " + message);
+		}
+	}
+	catch (e) {
+	}
 	throw exception || Error(message);
+};
+dojo.debug = function () {
+};
+dojo.debugShallow = function (obj) {
+};
+dojo.profile = {start:function () {
+}, end:function () {
+}, stop:function () {
+}, dump:function () {
+}};
+function dj_eval(scriptFragment) {
+	return dj_global.eval ? dj_global.eval(scriptFragment) : eval(scriptFragment);
 }
-
-//Stub functions so things don't break.
-//TODOC:  HOW TO DOC THESE?
-dojo.debug = function(){};
-dojo.debugShallow = function(obj){};
-dojo.profile = { start: function(){}, end: function(){}, stop: function(){}, dump: function(){} };
-
-function dj_eval(/*String*/ scriptFragment){
-	// summary: Perform an evaluation in the global scope.  Use this rather than calling 'eval()' directly.
-	// description: Placed in a separate function to minimize size of trapped evaluation context.
-	// note:
-	//	 - JSC eval() takes an optional second argument which can be 'unsafe'.
-	//	 - Mozilla/SpiderMonkey eval() takes an optional second argument which is the
-	//  	 scope object for new symbols.
-	return dj_global.eval ? dj_global.eval(scriptFragment) : eval(scriptFragment); 	// mixed
-}
-
-dojo.unimplemented = function(/*String*/ funcname, /*String?*/ extra){
-	// summary: Throw an exception because some function is not implemented.
-	// extra: Text to append to the exception message.
+dojo.unimplemented = function (funcname, extra) {
 	var message = "'" + funcname + "' not implemented";
-	if (extra != null) { message += " " + extra; }
+	if (extra != null) {
+		message += " " + extra;
+	}
 	dojo.raise(message);
-}
-
-dojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/ removal){
-	// summary: Log a debug message to indicate that a behavior has been deprecated.
-	// extra: Text to append to the message.
-	// removal: Text to indicate when in the future the behavior will be removed.
+};
+dojo.deprecated = function (behaviour, extra, removal) {
 	var message = "DEPRECATED: " + behaviour;
-	if(extra){ message += " " + extra; }
-	if(removal){ message += " -- will be removed in version: " + removal; }
+	if (extra) {
+		message += " " + extra;
+	}
+	if (removal) {
+		message += " -- will be removed in version: " + removal;
+	}
 	dojo.debug(message);
-}
-
-dojo.render = (function(){
-	//TODOC: HOW TO DOC THIS?
-	// summary: Details rendering support, OS and browser of the current environment.
-	// TODOC: is this something many folks will interact with?  If so, we should doc the structure created...
-	function vscaffold(prefs, names){
-		var tmp = {
-			capable: false,
-			support: {
-				builtin: false,
-				plugin: false
-			},
-			prefixes: prefs
-		};
-		for(var i=0; i<names.length; i++){
+};
+dojo.render = (function () {
+	function vscaffold(prefs, names) {
+		var tmp = {capable:false, support:{builtin:false, plugin:false}, prefixes:prefs};
+		for (var i = 0; i < names.length; i++) {
 			tmp[names[i]] = false;
 		}
 		return tmp;
 	}
-
-	return {
-		name: "",
-		ver: dojo.version,
-		os: { win: false, linux: false, osx: false },
-		html: vscaffold(["html"], ["ie", "opera", "khtml", "safari", "moz"]),
-		svg: vscaffold(["svg"], ["corel", "adobe", "batik"]),
-		vml: vscaffold(["vml"], ["ie"]),
-		swf: vscaffold(["Swf", "Flash", "Mm"], ["mm"]),
-		swt: vscaffold(["Swt"], ["ibm"])
-	};
+	return {name:"", ver:dojo.version, os:{win:false, linux:false, osx:false}, html:vscaffold(["html"], ["ie", "opera", "khtml", "safari", "moz"]), svg:vscaffold(["svg"], ["corel", "adobe", "batik"]), vml:vscaffold(["vml"], ["ie"]), swf:vscaffold(["Swf", "Flash", "Mm"], ["mm"]), swt:vscaffold(["Swt"], ["ibm"])};
 })();
-
-// ****************************************************************
-// dojo.hostenv methods that must be defined in hostenv_*.js
-// ****************************************************************
-
-/**
- * The interface definining the interaction with the EcmaScript host environment.
-*/
-
-/*
- * None of these methods should ever be called directly by library users.
- * Instead public methods such as loadModule should be called instead.
- */
-dojo.hostenv = (function(){
-	// TODOC:  HOW TO DOC THIS?
-	// summary: Provides encapsulation of behavior that changes across different 'host environments'
-	//			(different browsers, server via Rhino, etc).
-	// description: None of these methods should ever be called directly by library users.
-	//				Use public methods such as 'loadModule' instead.
-
-	// default configuration options
-	var config = {
-		isDebug: false,
-		allowQueryConfig: false,
-		baseScriptUri: "",
-		baseRelativePath: "",
-		libraryScriptUri: "",
-		iePreventClobber: false,
-		ieClobberMinimal: true,
-		preventBackButtonFix: true,
-		delayMozLoadingFix: false,
-		searchIds: [],
-		parseWidgets: true
-	};
-
-	if (typeof djConfig == "undefined") { djConfig = config; }
-	else {
+dojo.hostenv = (function () {
+	var config = {isDebug:false, allowQueryConfig:false, baseScriptUri:"", baseRelativePath:"", libraryScriptUri:"", iePreventClobber:false, ieClobberMinimal:true, preventBackButtonFix:true, delayMozLoadingFix:false, searchIds:[], parseWidgets:true};
+	if (typeof djConfig == "undefined") {
+		djConfig = config;
+	} else {
 		for (var option in config) {
 			if (typeof djConfig[option] == "undefined") {
 				djConfig[option] = config[option];
 			}
 		}
 	}
-
-	return {
-		name_: '(unset)',
-		version_: '(unset)',
-
-
-		getName: function(){
-			// sumary: Return the name of the host environment.
-			return this.name_; 	// String
-		},
-
-
-		getVersion: function(){
-			// summary: Return the version of the hostenv.
-			return this.version_; // String
-		},
-
-		getText: function(/*String*/ uri){
-			// summary:	Read the plain/text contents at the specified 'uri'.
-			// description:
-			//			If 'getText()' is not implemented, then it is necessary to override
-			//			'loadUri()' with an implementation that doesn't rely on it.
-
-			dojo.unimplemented('getText', "uri=" + uri);
-		}
-	};
+	return {name_:"(unset)", version_:"(unset)", getName:function () {
+		return this.name_;
+	}, getVersion:function () {
+		return this.version_;
+	}, getText:function (uri) {
+		dojo.unimplemented("getText", "uri=" + uri);
+	}};
 })();
-
-
-dojo.hostenv.getBaseScriptUri = function(){
-	// summary: Return the base script uri that other scripts are found relative to.
-	// TODOC: HUH?  This comment means nothing to me.  What other scripts? Is this the path to other dojo libraries?
-	//		MAYBE:  Return the base uri to scripts in the dojo library.	 ???
-	// return: Empty string or a path ending in '/'.
-	if(djConfig.baseScriptUri.length){
+dojo.hostenv.getBaseScriptUri = function () {
+	if (djConfig.baseScriptUri.length) {
 		return djConfig.baseScriptUri;
 	}
-
-	// MOW: Why not:
-	//			uri = djConfig.libraryScriptUri || djConfig.baseRelativePath
-	//		??? Why 'new String(...)'
-	var uri = new String(djConfig.libraryScriptUri||djConfig.baseRelativePath);
-	if (!uri) { dojo.raise("Nothing returned by getLibraryScriptUri(): " + uri); }
-
-	// MOW: uri seems to not be actually used.  Seems to be hard-coding to djConfig.baseRelativePath... ???
-	var lastslash = uri.lastIndexOf('/');		// MOW ???
+	var uri = new String(djConfig.libraryScriptUri || djConfig.baseRelativePath);
+	if (!uri) {
+		dojo.raise("Nothing returned by getLibraryScriptUri(): " + uri);
+	}
+	var lastslash = uri.lastIndexOf("/");
 	djConfig.baseScriptUri = djConfig.baseRelativePath;
-	return djConfig.baseScriptUri;	// String
-}
+	return djConfig.baseScriptUri;
+};
 
+
 __CPAN_FILE__ src/html.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -5035,10 +3365,10 @@
 */
 
 dojo.provide("dojo.html");
-
 dojo.require("dojo.html.*");
 dojo.deprecated("dojo.html", "replaced by dojo.html.*", "0.5");
 
+
 __CPAN_FILE__ src/hostenv_jsc.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -5117,6 +3447,8 @@
 	return System.Environment.GetCommandLineArgs()[0];
 }
 
+dojo.requireIf((djConfig["isDebug"] || djConfig["debugAtAllCosts"]), "dojo.debug");
+
 __CPAN_FILE__ src/browser_debug.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -5128,129 +3460,90 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
+dojo.provide("dojo.browser_debug");
 dojo.hostenv.loadedUris.push("../src/bootstrap1.js");
 dojo.hostenv.loadedUris.push("../src/loader.js");
 dojo.hostenv.loadedUris.push("../src/hostenv_browser.js");
-dojo.hostenv.loadedUris.push("../src/bootstrap2.js");
 dojo.hostenv._loadedUrisListStart = dojo.hostenv.loadedUris.length;
-
-function removeComments(contents){
+function removeComments(contents) {
 	contents = new String((!contents) ? "" : contents);
-	// clobber all comments
-	// FIXME broken if // or /* inside quotes or regexp
-	contents = contents.replace( /^(.*?)\/\/(.*)$/mg , "$1");
-	contents = contents.replace( /(\n)/mg , "__DOJONEWLINE");
-	contents = contents.replace( /\/\*(.*?)\*\//g , "");
-	return contents.replace( /__DOJONEWLINE/mg , "\n");
+	contents = contents.replace(/^(.*?)\/\/(.*)$/mg, "$1");
+	contents = contents.replace(/(\n)/mg, "__DOJONEWLINE");
+	contents = contents.replace(/\/\*(.*?)\*\//g, "");
+	return contents.replace(/__DOJONEWLINE/mg, "\n");
 }
-
-dojo.hostenv.getRequiresAndProvides = function(contents){
-	// FIXME: should probably memoize this!
-	if(!contents){ return []; }
-	
-
-	// check to see if we need to load anything else first. Ugg.
+dojo.hostenv.getRequiresAndProvides = function (contents) {
+	if (!contents) {
+		return [];
+	}
 	var deps = [];
 	var tmp;
 	RegExp.lastIndex = 0;
 	var testExp = /dojo.(hostenv.loadModule|hostenv.require|require|requireIf|kwCompoundRequire|hostenv.conditionalLoadModule|hostenv.startPackage|provide)\([\w\W]*?\)/mg;
-	while((tmp = testExp.exec(contents)) != null){
+	while ((tmp = testExp.exec(contents)) != null) {
 		deps.push(tmp[0]);
 	}
 	return deps;
-}
-
-dojo.hostenv.getDelayRequiresAndProvides = function(contents){
-	// FIXME: should probably memoize this!
-	if(!contents){ return []; }
-
-	// check to see if we need to load anything else first. Ugg.
+};
+dojo.hostenv.getDelayRequiresAndProvides = function (contents) {
+	if (!contents) {
+		return [];
+	}
 	var deps = [];
 	var tmp;
 	RegExp.lastIndex = 0;
 	var testExp = /dojo.(requireAfterIf)\([\w\W]*?\)/mg;
-	while((tmp = testExp.exec(contents)) != null){
+	while ((tmp = testExp.exec(contents)) != null) {
 		deps.push(tmp[0]);
 	}
 	return deps;
-}
-
-/*
-dojo.getNonExistantDescendants = function(objpath){
-	var ret = [];
-	// fast path for no periods
-	if(typeof objpath != "string"){ return dj_global; }
-	if(objpath.indexOf('.') == -1){
-		if(dj_undef(objpath, dj_global)){
-			ret.push[objpath];
-		}
-		return ret;
-	}
-
-	var syms = objpath.split(/\./);
-	var obj = dj_global;
-	for(var i=0;i<syms.length;++i){
-		if(dj_undef(syms[i], obj)){
-			for(var j=i; j<syms.length; j++){
-				ret.push(syms.slice(0, j+1).join("."));
-			}
-			break;
-		}
-	}
-	return ret;
-}
-*/
-
-dojo.clobberLastObject = function(objpath){
-	if(objpath.indexOf('.') == -1){
-		if(!dj_undef(objpath, dj_global)){
+};
+dojo.clobberLastObject = function (objpath) {
+	if (objpath.indexOf(".") == -1) {
+		if (!dj_undef(objpath, dj_global)) {
 			delete dj_global[objpath];
 		}
 		return true;
 	}
-
 	var syms = objpath.split(/\./);
 	var base = dojo.evalObjPath(syms.slice(0, -1).join("."), false);
-	var child = syms[syms.length-1];
-	if(!dj_undef(child, base)){
-		// alert(objpath);
+	var child = syms[syms.length - 1];
+	if (!dj_undef(child, base)) {
 		delete base[child];
 		return true;
 	}
 	return false;
-}
-
+};
 var removals = [];
-
-function zip(arr){
+function zip(arr) {
 	var ret = [];
 	var seen = {};
-	for(var x=0; x<arr.length; x++){
-		if(!seen[arr[x]]){
+	for (var x = 0; x < arr.length; x++) {
+		if (!seen[arr[x]]) {
 			ret.push(arr[x]);
 			seen[arr[x]] = true;
 		}
 	}
 	return ret;
 }
-
-// over-write dj_eval to prevent actual loading of subsequent files
 var old_dj_eval = dj_eval;
-dj_eval = function(){ return true; }
+dj_eval = function () {
+	return true;
+};
 dojo.hostenv.oldLoadUri = dojo.hostenv.loadUri;
-dojo.hostenv.loadUri = function(uri, cb /*optional*/){
-	if(dojo.hostenv.loadedUris[uri]){
-		return true; // fixes endless recursion opera trac 471
+dojo.hostenv.loadUri = function (uri, cb) {
+	if (dojo.hostenv.loadedUris[uri]) {
+		return true;
 	}
-	try{
+	try {
 		var text = this.getText(uri, null, true);
-		if(!text) { return false; }
-		if(cb){
-			// No way to load i18n bundles but to eval them, and they usually
-			// don't have script needing to be debugged anyway
-			var expr = old_dj_eval('('+text+')');
+		if (!text) {
+			return false;
+		}
+		if (cb) {
+			var expr = old_dj_eval("(" + text + ")");
 			cb(expr);
-		}else {
+		} else {
 			var requires = dojo.hostenv.getRequiresAndProvides(text);
 			eval(requires.join(";"));
 			dojo.hostenv.loadedUris.push(uri);
@@ -5258,43 +3551,39 @@
 			var delayRequires = dojo.hostenv.getDelayRequiresAndProvides(text);
 			eval(delayRequires.join(";"));
 		}
-	}catch(e){ 
+	}
+	catch (e) {
 		alert(e);
 	}
 	return true;
-}
-
+};
 dojo.hostenv._writtenIncludes = {};
-dojo.hostenv.writeIncludes = function(willCallAgain){
-	for(var x=removals.length-1; x>=0; x--){
+dojo.hostenv.writeIncludes = function (willCallAgain) {
+	for (var x = removals.length - 1; x >= 0; x--) {
 		dojo.clobberLastObject(removals[x]);
 	}
 	var depList = [];
 	var seen = dojo.hostenv._writtenIncludes;
-	for(var x=0; x<dojo.hostenv.loadedUris.length; x++){
+	for (var x = 0; x < dojo.hostenv.loadedUris.length; x++) {
 		var curi = dojo.hostenv.loadedUris[x];
-		// dojo.debug(curi);
-		if(!seen[curi]){
+		if (!seen[curi]) {
 			seen[curi] = true;
 			depList.push(curi);
 		}
 	}
-
 	dojo.hostenv._global_omit_module_check = true;
-	
-	for(var x= dojo.hostenv._loadedUrisListStart; x<depList.length; x++){
-		document.write("<script type='text/javascript' src='"+depList[x]+"'></script>");
+	for (var x = dojo.hostenv._loadedUrisListStart; x < depList.length; x++) {
+		document.write("<script type='text/javascript' src='" + depList[x] + "'></script>");
 	}
 	document.write("<script type='text/javascript'>dojo.hostenv._global_omit_module_check = false;</script>");
 	dojo.hostenv._loadedUrisListStart = 0;
 	if (!willCallAgain) {
-		// turn off debugAtAllCosts, so that dojo.require() calls inside of ContentPane hrefs
-		// work correctly
 		dj_eval = old_dj_eval;
 		dojo.hostenv.loadUri = dojo.hostenv.oldLoadUri;
 	}
-}
+};
 
+
 __CPAN_FILE__ src/json.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -5310,149 +3599,89 @@
 dojo.require("dojo.lang.func");
 dojo.require("dojo.string.extras");
 dojo.require("dojo.AdapterRegistry");
-
-dojo.json = {
-	// jsonRegistry: AdapterRegistry a registry of type-based serializers
-	jsonRegistry: new dojo.AdapterRegistry(),
-
-	register: function(	/*String*/		name, 
-						/*function*/	check, 
-						/*function*/	wrap, 
-						/*optional, boolean*/ override){
-		// summary:
-		//		Register a JSON serialization function. JSON serialization
-		//		functions should take one argument and return an object
-		//		suitable for JSON serialization:
-		//			- string
-		//			- number
-		//			- boolean
-		//			- undefined
-		//			- object
-		//				- null
-		//				- Array-like (length property that is a number)
-		//				- Objects with a "json" method will have this method called
-		//				- Any other object will be used as {key:value, ...} pairs
-		//			
-		//		If override is given, it is used as the highest priority JSON
-		//		serialization, otherwise it will be used as the lowest.
-		// name:
-		//		a descriptive type for this serializer
-		// check:
-		//		a unary function that will be passed an object to determine
-		//		whether or not wrap will be used to serialize the object
-		// wrap:
-		//		the serialization function
-		// override:
-		//		optional, determines if the this serialization function will be
-		//		given priority in the test order
-
-		dojo.json.jsonRegistry.register(name, check, wrap, override);
-	},
-
-	evalJson: function(/*String*/ json){
-		// summary:
-		// 		evaluates the passed string-form of a JSON object
-		// json: 
-		//		a string literal of a JSON item, for instance:
-		//			'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'
-		// return:
-		//		the result of the evaluation
-
-		// FIXME: should this accept mozilla's optional second arg?
-		try {
-			return eval("(" + json + ")");
-		}catch(e){
-			dojo.debug(e);
-			return json;
-		}
-	},
-
-	serialize: function(/*Object*/ o){
-		// summary:
-		//		Create a JSON serialization of an object, note that this
-		//		doesn't check for infinite recursion, so don't do that!
-		// o:
-		//		an object to be serialized. Objects may define their own
-		//		serialization via a special "__json__" or "json" function
-		//		property. If a specialized serializer has been defined, it will
-		//		be used as a fallback.
-		// return:
-		//		a String representing the serialized version of the passed
-		//		object
-
-		var objtype = typeof(o);
-		if(objtype == "undefined"){
-			return "undefined";
-		}else if((objtype == "number")||(objtype == "boolean")){
+dojo.json = {jsonRegistry:new dojo.AdapterRegistry(), register:function (name, check, wrap, override) {
+	dojo.json.jsonRegistry.register(name, check, wrap, override);
+}, evalJson:function (json) {
+	try {
+		return eval("(" + json + ")");
+	}
+	catch (e) {
+		dojo.debug(e);
+		return json;
+	}
+}, serialize:function (o) {
+	var objtype = typeof (o);
+	if (objtype == "undefined") {
+		return "undefined";
+	} else {
+		if ((objtype == "number") || (objtype == "boolean")) {
 			return o + "";
-		}else if(o === null){
-			return "null";
-		}
-		if (objtype == "string") { return dojo.string.escapeString(o); }
-		// recurse
-		var me = arguments.callee;
-		// short-circuit for objects that support "json" serialization
-		// if they return "self" then just pass-through...
-		var newObj;
-		if(typeof(o.__json__) == "function"){
-			newObj = o.__json__();
-			if(o !== newObj){
-				return me(newObj);
+		} else {
+			if (o === null) {
+				return "null";
 			}
 		}
-		if(typeof(o.json) == "function"){
-			newObj = o.json();
-			if (o !== newObj) {
-				return me(newObj);
-			}
+	}
+	if (objtype == "string") {
+		return dojo.string.escapeString(o);
+	}
+	var me = arguments.callee;
+	var newObj;
+	if (typeof (o.__json__) == "function") {
+		newObj = o.__json__();
+		if (o !== newObj) {
+			return me(newObj);
 		}
-		// array
-		if(objtype != "function" && typeof(o.length) == "number"){
-			var res = [];
-			for(var i = 0; i < o.length; i++){
-				var val = me(o[i]);
-				if(typeof(val) != "string"){
-					val = "undefined";
-				}
-				res.push(val);
-			}
-			return "[" + res.join(",") + "]";
-		}
-		// look in the registry
-		try {
-			window.o = o;
-			newObj = dojo.json.jsonRegistry.match(o);
+	}
+	if (typeof (o.json) == "function") {
+		newObj = o.json();
+		if (o !== newObj) {
 			return me(newObj);
-		}catch(e){
-			// dojo.debug(e);
 		}
-		// it's a function with no adapter, bad
-		if(objtype == "function"){
-			return null;
+	}
+	if (objtype != "function" && typeof (o.length) == "number") {
+		var res = [];
+		for (var i = 0; i < o.length; i++) {
+			var val = me(o[i]);
+			if (typeof (val) != "string") {
+				val = "undefined";
+			}
+			res.push(val);
 		}
-		// generic object code path
-		res = [];
-		for (var k in o){
-			var useKey;
-			if (typeof(k) == "number"){
-				useKey = '"' + k + '"';
-			}else if (typeof(k) == "string"){
+		return "[" + res.join(",") + "]";
+	}
+	try {
+		window.o = o;
+		newObj = dojo.json.jsonRegistry.match(o);
+		return me(newObj);
+	}
+	catch (e) {
+	}
+	if (objtype == "function") {
+		return null;
+	}
+	res = [];
+	for (var k in o) {
+		var useKey;
+		if (typeof (k) == "number") {
+			useKey = "\"" + k + "\"";
+		} else {
+			if (typeof (k) == "string") {
 				useKey = dojo.string.escapeString(k);
-			}else{
-				// skip non-string or number keys
+			} else {
 				continue;
 			}
-			val = me(o[k]);
-			if(typeof(val) != "string"){
-				// skip non-serializable values
-				continue;
-			}
-			res.push(useKey + ":" + val);
 		}
-		return "{" + res.join(",") + "}";
+		val = me(o[k]);
+		if (typeof (val) != "string") {
+			continue;
+		}
+		res.push(useKey + ":" + val);
 	}
-};
+	return "{" + res.join(",") + "}";
+}};
 
+
 __CPAN_FILE__ src/string.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -5467,6 +3696,7 @@
 dojo.provide("dojo.string");
 dojo.require("dojo.string.common");
 
+
 __CPAN_FILE__ src/io.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -5479,10 +3709,10 @@
 */
 
 dojo.provide("dojo.io");
-
 dojo.require("dojo.io.*");
 dojo.deprecated("dojo.io", "replaced by dojo.io.*", "0.5");
 
+
 __CPAN_FILE__ src/experimental.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -5495,26 +3725,16 @@
 */
 
 dojo.provide("dojo.experimental");
-
-dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
-	// summary: Marks code as experimental.
-	// description: 
-	//    This can be used to mark a function, file, or module as experimental.
-	//    Experimental code is not ready to be used, and the APIs are subject
-	//    to change without notice.  Experimental code may be completed deleted
-	//    without going through the normal deprecation process.
-	// moduleName: The name of a module, or the name of a module file or a specific function
-	// extra: some additional message for the user
-	
-	// examples:
-	//    dojo.experimental("dojo.data.Result");
-	//    dojo.experimental("dojo.weather.toKelvin()", "PENDING approval from NOAA");
+dojo.experimental = function (moduleName, extra) {
 	var message = "EXPERIMENTAL: " + moduleName;
 	message += " -- Not yet ready for use.  APIs subject to change without notice.";
-	if(extra){ message += " " + extra; }
+	if (extra) {
+		message += " " + extra;
+	}
 	dojo.debug(message);
-}
+};
 
+
 __CPAN_FILE__ src/hostenv_dashboard.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -5527,30 +3747,28 @@
 */
 
 dojo.render.name = dojo.hostenv.name_ = "dashboard";
-
-dojo.hostenv.println = function(/*String*/ message){
-	// summary: Prints a message to the OS X console
-	return alert(message); // null
-}
-
-dojo.hostenv.getXmlhttpObject = function(/*Object*/ kwArgs){
-	// summary: Returns the appropriate transfer object for the call type
-	if(widget.system && kwArgs){
-		if((kwArgs.contentType && kwArgs.contentType.indexOf("text/") != 0) || (kwArgs.headers && kwArgs.headers["content-type"] && kwArgs.headers["content-type"].indexOf("text/") != 0)){
+dojo.hostenv.println = function (message) {
+	return alert(message);
+};
+dojo.hostenv.getXmlhttpObject = function (kwArgs) {
+	if (widget.system && kwArgs) {
+		if ((kwArgs.contentType && kwArgs.contentType.indexOf("text/") != 0) || (kwArgs.headers && kwArgs.headers["content-type"] && kwArgs.headers["content-type"].indexOf("text/") != 0)) {
 			var curl = new dojo.hostenv.CurlRequest;
 			curl._save = true;
 			return curl;
-		}else if(kwArgs.method && kwArgs.method.toUpperCase() == "HEAD"){
-			return new dojo.hostenv.CurlRequest;
-		}else if(kwArgs.headers && kwArgs.header.referer){
-			return new dojo.hostenv.CurlRequest; 
+		} else {
+			if (kwArgs.method && kwArgs.method.toUpperCase() == "HEAD") {
+				return new dojo.hostenv.CurlRequest;
+			} else {
+				if (kwArgs.headers && kwArgs.header.referer) {
+					return new dojo.hostenv.CurlRequest;
+				}
+			}
 		}
 	}
-	return new XMLHttpRequest; // XMLHttpRequest
-}
-
-dojo.hostenv.CurlRequest = function(){
-	// summary: Emulates the XMLHttpRequest Object
+	return new XMLHttpRequest;
+};
+dojo.hostenv.CurlRequest = function () {
 	this.onreadystatechange = null;
 	this.readyState = 0;
 	this.responseText = "";
@@ -5568,99 +3786,84 @@
 	this._fileName = "";
 	this._username = "";
 	this._password = "";
-}
-
-dojo.hostenv.CurlRequest.prototype.open = function(/*String*/ method, /*URL*/ url, /*Boolean?*/ async, /*String?*/ username, /*String?*/ password){
+};
+dojo.hostenv.CurlRequest.prototype.open = function (method, url, async, username, password) {
 	this._method = method;
 	this._url = url;
-	if(async){
+	if (async) {
 		this._async = async;
 	}
-	if(username){
+	if (username) {
 		this._username = username;
 	}
-	if(password){
+	if (password) {
 		this._password = password;
 	}
-}
-
-dojo.hostenv.CurlRequest.prototype.setRequestHeader = function(/*String*/ label, /*String*/ value){
-	switch(label){
-		case "Referer":
-			this._referrer = value;
-			break;
-		case "content-type":
-			break;
-		default:
-			this._headers.push(label + "=" + value);
-			break;
+};
+dojo.hostenv.CurlRequest.prototype.setRequestHeader = function (label, value) {
+	switch (label) {
+	  case "Referer":
+		this._referrer = value;
+		break;
+	  case "content-type":
+		break;
+	  default:
+		this._headers.push(label + "=" + value);
+		break;
 	}
-}
-
-dojo.hostenv.CurlRequest.prototype.getAllResponseHeaders = function(){
-	return this._responseHeader; // String
-}
-
-dojo.hostenv.CurlRequest.prototype.getResponseHeader = function(/*String*/ headerLabel){
-	return this._responseHeaders[headerLabel]; // String
-}
-
-// -sS = Show only errors in errorString
-// -i = Display headers with return
-// -e = Referrer URI
-// -H = Headers
-// -d = data to be sent (forces POST)
-// -G = forces GET
-// -o = Writes to file (in the cache directory)
-// -I = Only load headers
-// -u = user:password
-dojo.hostenv.CurlRequest.prototype.send = function(/*String*/ content){
+};
+dojo.hostenv.CurlRequest.prototype.getAllResponseHeaders = function () {
+	return this._responseHeader;
+};
+dojo.hostenv.CurlRequest.prototype.getResponseHeader = function (headerLabel) {
+	return this._responseHeaders[headerLabel];
+};
+dojo.hostenv.CurlRequest.prototype.send = function (content) {
 	this.readyState = 1;
-	if(this.onreadystatechange){
+	if (this.onreadystatechange) {
 		this.onreadystatechange.call(this);
 	}
-	var query = {sS: ""};
-	if(this._referrer){
+	var query = {sS:""};
+	if (this._referrer) {
 		query.e = this._referrer;
 	}
-	if(this._headers.length){
+	if (this._headers.length) {
 		query.H = this._headers.join("&");
 	}
-	if(this._username){
-		if(this._password){
+	if (this._username) {
+		if (this._password) {
 			query.u = this._username + ":" + this._password;
-		}else{
+		} else {
 			query.u = this._username;
 		}
 	}
-	if(content){
+	if (content) {
 		query.d = this.content;
-		if(this._method != "POST"){
+		if (this._method != "POST") {
 			query.G = "";
 		}
 	}
-	if(this._method == "HEAD"){
+	if (this._method == "HEAD") {
 		query.I = "";
-	}else{
-		if(this._save){
-			query.I = ""; // Get the headers in the initial query
-		}else{
+	} else {
+		if (this._save) {
+			query.I = "";
+		} else {
 			query.i = "";
 		}
 	}
-
 	var system = widget.system(dojo.hostenv.CurlRequest._formatCall(query, this._url), null);
 	this.readyState = 2;
-	if(this.onreadystatechange){
+	if (this.onreadystatechange) {
 		this.onreadystatechange.call(this);
 	}
-	if(system.errorString){
+	if (system.errorString) {
 		this.responseText = system.errorString;
 		this.status = 0;
-	}else{
-		if(this._save){
+	} else {
+		if (this._save) {
 			this._responseHeader = system.outputString;
-		}else{
+		} else {
 			var split = system.outputString.replace(/\r/g, "").split("\n\n", 2);
 			this._responseHeader = split[0];
 			this.responseText = split[1];
@@ -5668,52 +3871,50 @@
 		split = this._responseHeader.split("\n");
 		this.statusText = split.shift();
 		this.status = this.statusText.split(" ")[1];
-		for(var i = 0, header; header = split[i]; i++){
+		for (var i = 0, header; header = split[i]; i++) {
 			var header_split = header.split(": ", 2);
 			this._responseHeaders[header_split[0]] = header_split[1];
 		}
-		if(this._save){
+		if (this._save) {
 			widget.system("/bin/mkdir cache", null);
-			// First, make a file name
 			this._fileName = this._url.split("/").pop().replace(/\W/g, "");
-			// Then, get its extension
-			this._fileName += "." + this._responseHeaders["Content-Type"].replace(/[\r\n]/g, "").split("/").pop()
+			this._fileName += "." + this._responseHeaders["Content-Type"].replace(/[\r\n]/g, "").split("/").pop();
 			delete query.I;
-			query.o = "cache/" + this._fileName; // Tell it where to be saved.
+			query.o = "cache/" + this._fileName;
 			system = widget.system(dojo.hostenv.CurlRequest._formatCall(query, this._url), null);
-			if(!system.errorString){
+			if (!system.errorString) {
 				this.responseText = "cache/" + this._fileName;
 			}
-		}else if(this._method == "HEAD"){
-			this.responseText = this._responseHeader;
+		} else {
+			if (this._method == "HEAD") {
+				this.responseText = this._responseHeader;
+			}
 		}
 	}
-
 	this.readyState = 4;
-	if(this.onreadystatechange){
+	if (this.onreadystatechange) {
 		this.onreadystatechange.call(this);
 	}
-}
-
-dojo.hostenv.CurlRequest._formatCall = function(query, url){
+};
+dojo.hostenv.CurlRequest._formatCall = function (query, url) {
 	var call = ["/usr/bin/curl"];
-	for(var key in query){
-		if(query[key] != ""){
-			call.push("-" + key + " '" + query[key].replace(/'/g, "\'") + "'");
-		}else{
+	for (var key in query) {
+		if (query[key] != "") {
+			call.push("-" + key + " '" + query[key].replace(/'/g, "'") + "'");
+		} else {
 			call.push("-" + key);
 		}
 	}
-	call.push("'" + url.replace(/'/g, "\'") + "'");
+	call.push("'" + url.replace(/'/g, "'") + "'");
 	return call.join(" ");
-}
-
-dojo.hostenv.exit = function(){
-	if(widget.system){
+};
+dojo.hostenv.exit = function () {
+	if (widget.system) {
 		widget.system("/bin/rm -rf cache/*", null);
 	}
-}
+};
 
+
 __CPAN_FILE__ src/loader_xd.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -5725,545 +3926,398 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-//Cross-domain package loader.
-
-//FIXME: How will xd loading work with debugAtAllCosts? Any bad interactions?
-//FIXME: widgets won't work fully (HTML/CSS) and also because of the requireIf() thing.
-
-dojo.hostenv.resetXd = function(){
-	//summary: Internal xd loader function. Resets the xd state.
-
-	//This flag indicates where or not we have crossed into xdomain territory. Once any package says
-	//it is cross domain, then the rest of the packages have to be treated as xdomain because we need
-	//to evaluate packages in order. If there is a xdomain package followed by a xhr package, we can't load
-	//the xhr package until the one before it finishes loading. The text of the xhr package will be converted
-	//to match the format for a xd package and put in the xd load queue.
-	//You can force all packages to be treated as xd by setting the djConfig.forceXDomain.
-	this.isXDomain = djConfig.forceXDomain || false;
-
+dojo.hostenv.resetXd = function () {
+	this.isXDomain = djConfig.useXDomain || false;
 	this.xdTimer = 0;
 	this.xdInFlight = {};
 	this.xdOrderedReqs = [];
 	this.xdDepMap = {};
 	this.xdContents = [];
-}
-
-//Call reset immediately to set the state.
+	this.xdDefList = [];
+};
 dojo.hostenv.resetXd();
-
-dojo.hostenv.createXdPackage = function(/*String*/contents){
-	//summary: Internal xd loader function. Creates an xd module source given an
-	//non-xd module contents.
-
-	//Find dependencies.
+dojo.hostenv.createXdPackage = function (contents, resourceName, resourcePath) {
 	var deps = [];
-    var depRegExp = /dojo.(require|requireIf|requireAll|provide|requireAfterIf|requireAfter|kwCompoundRequire|conditionalRequire|hostenv\.conditionalLoadModule|.hostenv\.loadModule|hostenv\.moduleLoaded)\(([\w\W]*?)\)/mg;
-    var match;
-	while((match = depRegExp.exec(contents)) != null){
+	var depRegExp = /dojo.(require|requireIf|requireAll|provide|requireAfterIf|requireAfter|kwCompoundRequire|conditionalRequire|hostenv\.conditionalLoadModule|.hostenv\.loadModule|hostenv\.moduleLoaded)\(([\w\W]*?)\)/mg;
+	var match;
+	while ((match = depRegExp.exec(contents)) != null) {
 		deps.push("\"" + match[1] + "\", " + match[2]);
 	}
-
-	//Create package object and the call to packageLoaded.
 	var output = [];
 	output.push("dojo.hostenv.packageLoaded({\n");
-
-	//Add dependencies
-	if(deps.length > 0){
+	if (deps.length > 0) {
 		output.push("depends: [");
-		for(var i = 0; i < deps.length; i++){
-			if(i > 0){
+		for (var i = 0; i < deps.length; i++) {
+			if (i > 0) {
 				output.push(",\n");
 			}
 			output.push("[" + deps[i] + "]");
 		}
 		output.push("],");
 	}
-
-	//Add the contents of the file inside a function.
-	//Pass in dojo as an argument to the function to help with
-	//allowing multiple versions of dojo in a page.
 	output.push("\ndefinePackage: function(dojo){");
 	output.push(contents);
-	output.push("\n}});");
-	
-	return output.join(""); //String
-}
-
-dojo.hostenv.loadPath = function(/*String*/relpath, /*String?*/module, /*Function?*/cb){
-	//summary: Internal xd loader function. Overrides loadPath() from loader.js.
-	//xd loading requires slightly different behavior from loadPath().
-
-
-	//Only do getBaseScriptUri if path does not start with a URL with a protocol.
-	//If there is a colon before the first / then, we have a URL with a protocol.
+	output.push("\n}, resourceName: '" + resourceName + "', resourcePath: '" + resourcePath + "'});");
+	return output.join("");
+};
+dojo.hostenv.loadPath = function (relpath, module, cb) {
 	var colonIndex = relpath.indexOf(":");
 	var slashIndex = relpath.indexOf("/");
 	var uri;
 	var currentIsXDomain = false;
-	if(colonIndex > 0 && colonIndex < slashIndex){
+	if (colonIndex > 0 && colonIndex < slashIndex) {
 		uri = relpath;
 		this.isXDomain = currentIsXDomain = true;
-	}else{
+	} else {
 		uri = this.getBaseScriptUri() + relpath;
-
-		//Is ithe base script URI-based URL a cross domain URL?
 		colonIndex = uri.indexOf(":");
 		slashIndex = uri.indexOf("/");
-		if(colonIndex > 0 && colonIndex < slashIndex && (!location.host || uri.indexOf("http://" + location.host) != 0)){
+		if (colonIndex > 0 && colonIndex < slashIndex && (!location.host || uri.indexOf("http://" + location.host) != 0)) {
 			this.isXDomain = currentIsXDomain = true;
 		}
 	}
-
-	if(djConfig.cacheBust && dojo.render.html.capable) { uri += "?" + String(djConfig.cacheBust).replace(/\W+/g,""); }
-	try{
-		return ((!module || this.isXDomain) ? this.loadUri(uri, cb, currentIsXDomain, module) : this.loadUriAndCheck(uri, module, cb)); //boolean
-	}catch(e){
+	if (djConfig.cacheBust && dojo.render.html.capable) {
+		uri += "?" + String(djConfig.cacheBust).replace(/\W+/g, "");
+	}
+	try {
+		return ((!module || this.isXDomain) ? this.loadUri(uri, cb, currentIsXDomain, module) : this.loadUriAndCheck(uri, module, cb));
+	}
+	catch (e) {
 		dojo.debug(e);
-		return false; //boolean
+		return false;
 	}
-}
-
-dojo.hostenv.loadUri = function(/*String*/uri, /*Function?*/cb, /*boolean*/currentIsXDomain, /*String?*/module){
-	//summary: Internal xd loader function. Overrides loadUri() from loader.js.
-	//		xd loading requires slightly different behavior from loadPath().
-	//description: Wanted to override getText(), but it is used by
-	//		the widget code in too many, synchronous ways right now.
-	if(this.loadedUris[uri]){
-		return 1; //boolean
+};
+dojo.hostenv.loadUri = function (uri, cb, currentIsXDomain, module) {
+	if (this.loadedUris[uri]) {
+		return 1;
 	}
-
-	//Add the module (package) to the list of modules.
-	if(this.isXDomain){
-		//Curious: is this array going to get whacked with multiple access since scripts
-		//load asynchronously and may be accessing the array at the same time?
-		//JS is single-threaded supposedly, so it should be ok. And we don't need
-		//a precise ordering.
-		this.xdOrderedReqs.push(module);
-
-		//Add to waiting packages.
-		//If this is a __package__.js file, then this must be
-		//a package.* request (since xdomain can only work with the first
-		//path in a package search list. However, .* module names are not
-		//passed to this function, so do an adjustment here.
-		if(uri.indexOf("__package__") != -1){
+	if (this.isXDomain) {
+		if (uri.indexOf("__package__") != -1) {
 			module += ".*";
 		}
-
-		this.xdInFlight[module] = true;
-
-		//Increment inFlightCount
-		//This will stop the modulesLoaded from firing all the way.
-		this.inFlightCount++;
-				
-		//Start timer
-		if(!this.xdTimer){
+		this.xdOrderedReqs.push(module);
+		if (currentIsXDomain) {
+			this.xdInFlight[module] = true;
+			this.inFlightCount++;
+		}
+		if (!this.xdTimer) {
 			this.xdTimer = setInterval("dojo.hostenv.watchInFlightXDomain();", 100);
 		}
 		this.xdStartTime = (new Date()).getTime();
 	}
-
-	if (currentIsXDomain){
-		//Fix name to be a .xd.fileextension name.
-		var lastIndex = uri.lastIndexOf('.');
-		if(lastIndex <= 0){
+	if (currentIsXDomain) {
+		var lastIndex = uri.lastIndexOf(".");
+		if (lastIndex <= 0) {
 			lastIndex = uri.length - 1;
 		}
-
 		var xdUri = uri.substring(0, lastIndex) + ".xd";
-		if(lastIndex != uri.length - 1){
+		if (lastIndex != uri.length - 1) {
 			xdUri += uri.substring(lastIndex, uri.length);
 		}
-
-		//Add to script src
 		var element = document.createElement("script");
 		element.type = "text/javascript";
 		element.src = xdUri;
-		if(!this.headElement){
+		if (!this.headElement) {
 			this.headElement = document.getElementsByTagName("head")[0];
+			if (!this.headElement) {
+				this.headElement = document.getElementsByTagName("html")[0];
+			}
 		}
 		this.headElement.appendChild(element);
-	}else{
+	} else {
 		var contents = this.getText(uri, null, true);
-		if(contents == null){ return 0; /*boolean*/}
-		
-		if(this.isXDomain){
-			var pkg = this.createXdPackage(contents);
+		if (contents == null) {
+			return 0;
+		}
+		if (this.isXDomain && uri.indexOf("/nls/") == -1) {
+			var pkg = this.createXdPackage(contents, module, uri);
 			dj_eval(pkg);
-		}else{
-			if(cb){ contents = '('+contents+')'; }
+		} else {
+			if (cb) {
+				contents = "(" + contents + ")";
+			}
 			var value = dj_eval(contents);
-			if(cb){
+			if (cb) {
 				cb(value);
 			}
 		}
 	}
-
-	//These steps are done in the non-xd loader version of this function.
-	//Maintain these steps to fit in with the existing system.
 	this.loadedUris[uri] = true;
-	return 1; //boolean
-}
-
-dojo.hostenv.packageLoaded = function(/*Object*/pkg){
-	//summary: Internal xd loader function. Called by an xd module when
-	//it has been loaded via a script tag.
+	return 1;
+};
+dojo.hostenv.packageLoaded = function (pkg) {
 	var deps = pkg.depends;
 	var requireList = null;
 	var requireAfterList = null;
 	var provideList = [];
-	if(deps && deps.length > 0){
+	if (deps && deps.length > 0) {
 		var dep = null;
 		var insertHint = 0;
 		var attachedPackage = false;
-		for(var i = 0; i < deps.length; i++){
+		for (var i = 0; i < deps.length; i++) {
 			dep = deps[i];
-
-			//Look for specific dependency indicators.
-			if (dep[0] == "provide" || dep[0] == "hostenv.moduleLoaded"){
+			if (dep[0] == "provide" || dep[0] == "hostenv.moduleLoaded") {
 				provideList.push(dep[1]);
-			}else{
-				if(!requireList){
+			} else {
+				if (!requireList) {
 					requireList = [];
 				}
-				if(!requireAfterList){
+				if (!requireAfterList) {
 					requireAfterList = [];
 				}
-
 				var unpackedDeps = this.unpackXdDependency(dep);
-				if(unpackedDeps.requires){
+				if (unpackedDeps.requires) {
 					requireList = requireList.concat(unpackedDeps.requires);
 				}
-				if(unpackedDeps.requiresAfter){
+				if (unpackedDeps.requiresAfter) {
 					requireAfterList = requireAfterList.concat(unpackedDeps.requiresAfter);
 				}
 			}
-
-			//Call the dependency indicator to allow for the normal dojo setup.
-			//Only allow for one dot reference, for the hostenv.* type calls.
 			var depType = dep[0];
 			var objPath = depType.split(".");
-			if(objPath.length == 2){
+			if (objPath.length == 2) {
 				dojo[objPath[0]][objPath[1]].apply(dojo[objPath[0]], dep.slice(1));
-			}else{
+			} else {
 				dojo[depType].apply(dojo, dep.slice(1));
 			}
 		}
-
-		//Save off the package contents for definition later.
-		var contentIndex = this.xdContents.push({content: pkg.definePackage, isDefined: false}) - 1;
-
-		//Add provide/requires to dependency map.
-		for(var i = 0; i < provideList.length; i++){
-			this.xdDepMap[provideList[i]] = { requires: requireList, requiresAfter: requireAfterList, contentIndex: contentIndex };
+		var contentIndex = this.xdContents.push({content:pkg.definePackage, resourceName:pkg["resourceName"], resourcePath:pkg["resourcePath"], isDefined:false}) - 1;
+		for (var i = 0; i < provideList.length; i++) {
+			this.xdDepMap[provideList[i]] = {requires:requireList, requiresAfter:requireAfterList, contentIndex:contentIndex};
 		}
-
-		//Now update the inflight status for any provided packages in this loaded package.
-		//Do this at the very end (in a *separate* for loop) to avoid shutting down the 
-		//inflight timer check too soon.
-		for(var i = 0; i < provideList.length; i++){
+		for (var i = 0; i < provideList.length; i++) {
 			this.xdInFlight[provideList[i]] = false;
 		}
 	}
-}
-
-dojo.hostenv.xdLoadFlattenedBundle = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*Object*/bundleData){
-	//summary: Internal xd loader function. Used when loading
-	//a flattened localized bundle via a script tag.
+};
+dojo.hostenv.xdLoadFlattenedBundle = function (moduleName, bundleName, locale, bundleData) {
 	locale = locale || "root";
-	var jsLoc = dojo.hostenv.normalizeLocale(locale).replace('-', '_');
- 	var bundlePackage = [moduleName, "nls", bundleName].join(".");
+	var jsLoc = dojo.hostenv.normalizeLocale(locale).replace("-", "_");
+	var bundlePackage = [moduleName, "nls", bundleName].join(".");
 	var bundle = dojo.hostenv.startPackage(bundlePackage);
 	bundle[jsLoc] = bundleData;
-	
-	//Assign the bundle for the original locale(s) we wanted.
 	var mapName = [moduleName, jsLoc, bundleName].join(".");
 	var bundleMap = dojo.hostenv.xdBundleMap[mapName];
-	if(bundleMap){
-		for(var param in bundleMap){
+	if (bundleMap) {
+		for (var param in bundleMap) {
 			bundle[param] = bundleData;
 		}
 	}
 };
-
-
 dojo.hostenv.xdBundleMap = {};
-
-dojo.xdRequireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String*/availableFlatLocales){
-	//summary: Internal xd loader function. The xd version of dojo.requireLocalization.
+dojo.xdRequireLocalization = function (moduleName, bundleName, locale, availableFlatLocales) {
 	var locales = availableFlatLocales.split(",");
-	
-	//Find the best-match locale to load.
 	var jsLoc = dojo.hostenv.normalizeLocale(locale);
-
 	var bestLocale = "";
-	for(var i = 0; i < locales.length; i++){
-		//Locale must match from start of string.
-		if(jsLoc.indexOf(locales[i]) == 0){
-			if(locales[i].length > bestLocale.length){
+	for (var i = 0; i < locales.length; i++) {
+		if (jsLoc.indexOf(locales[i]) == 0) {
+			if (locales[i].length > bestLocale.length) {
 				bestLocale = locales[i];
 			}
 		}
 	}
-
-	var fixedBestLocale = bestLocale.replace('-', '_');
-	//See if the bundle we are going to use is already loaded.
- 	var bundlePackage = dojo.evalObjPath([moduleName, "nls", bundleName].join("."));
-	if(bundlePackage && bundlePackage[fixedBestLocale]){
-		bundle[jsLoc.replace('-', '_')] = bundlePackage[fixedBestLocale];
-	}else{
-		//Need to remember what locale we wanted and which one we actually use.
-		//Then when we load the one we are actually using, use that bundle for the one
-		//we originally wanted.
-		var mapName = [moduleName, (fixedBestLocale||"root"), bundleName].join(".");
+	var fixedBestLocale = bestLocale.replace("-", "_");
+	var bundlePackage = dojo.evalObjPath([moduleName, "nls", bundleName].join("."));
+	if (bundlePackage && bundlePackage[fixedBestLocale]) {
+		bundle[jsLoc.replace("-", "_")] = bundlePackage[fixedBestLocale];
+	} else {
+		var mapName = [moduleName, (fixedBestLocale || "root"), bundleName].join(".");
 		var bundleMap = dojo.hostenv.xdBundleMap[mapName];
-		if(!bundleMap){
+		if (!bundleMap) {
 			bundleMap = dojo.hostenv.xdBundleMap[mapName] = {};
 		}
-		bundleMap[jsLoc.replace('-', '_')] = true;
-		
-		//Do just a normal dojo.require so the package tracking stuff works as usual.
+		bundleMap[jsLoc.replace("-", "_")] = true;
 		dojo.require(moduleName + ".nls" + (bestLocale ? "." + bestLocale : "") + "." + bundleName);
 	}
-}
-
-;(function(){
-	// Simulate the extra locale work that dojo.requireLocalization does.
-
+};
+(function () {
 	var extra = djConfig.extraLocale;
-	if(extra){
-		if(!extra instanceof Array){
+	if (extra) {
+		if (!extra instanceof Array) {
 			extra = [extra];
 		}
-
 		dojo._xdReqLoc = dojo.xdRequireLocalization;
-		dojo.xdRequireLocalization = function(m, b, locale, fLocales){
-			dojo._xdReqLoc(m,b,locale, fLocales);
-			if(locale){return;}
-			for(var i=0; i<extra.length; i++){
-				dojo._xdReqLoc(m,b,extra[i], fLocales);
+		dojo.xdRequireLocalization = function (m, b, locale, fLocales) {
+			dojo._xdReqLoc(m, b, locale, fLocales);
+			if (locale) {
+				return;
 			}
+			for (var i = 0; i < extra.length; i++) {
+				dojo._xdReqLoc(m, b, extra[i], fLocales);
+			}
 		};
 	}
 })();
-
-
-//This is a bit brittle: it has to know about the dojo methods that deal with dependencies
-//It would be ideal to intercept the actual methods and do something fancy at that point,
-//but I have concern about knowing which provide to match to the dependency in that case,
-//since scripts can load whenever they want, and trigger new calls to dojo.hostenv.packageLoaded().
-dojo.hostenv.unpackXdDependency = function(dep){
-	//summary: Internal xd loader function. Determines what to do with a dependency
-	//that was listed in an xd version of a module contents.
-
-	//Extract the dependency(ies).
+dojo.hostenv.unpackXdDependency = function (dep) {
 	var newDeps = null;
 	var newAfterDeps = null;
-	switch(dep[0]){
-		case "requireIf":
-		case "requireAfterIf":
-		case "conditionalRequire":
-			//First arg (dep[1]) is the test. Depedency is dep[2].
-			if((dep[1] === true)||(dep[1]=="common")||(dep[1] && dojo.render[dep[1]].capable)){
-				newDeps = [{name: dep[2], content: null}];
-			}
-			break;
-		case "requireAll":
-			//the arguments are an array, each element a call to require.
-			//Get rid of first item, which is "requireAll".
-			dep.shift();
-			newDeps = dep;
-			dojo.hostenv.flattenRequireArray(newDeps);
-			break;
-		case "kwCompoundRequire":
-		case "hostenv.conditionalLoadModule":
-			var modMap = dep[1];
-			var common = modMap["common"]||[];
-			var newDeps = (modMap[dojo.hostenv.name_]) ? common.concat(modMap[dojo.hostenv.name_]||[]) : common.concat(modMap["default"]||[]);	
-			dojo.hostenv.flattenRequireArray(newDeps);
-			break;
-		case "require":
-		case "requireAfter":
-		case "hostenv.loadModule":
-			//Just worry about dep[1]
-			newDeps = [{name: dep[1], content: null}];
-			break;
+	switch (dep[0]) {
+	  case "requireIf":
+	  case "requireAfterIf":
+	  case "conditionalRequire":
+		if ((dep[1] === true) || (dep[1] == "common") || (dep[1] && dojo.render[dep[1]].capable)) {
+			newDeps = [{name:dep[2], content:null}];
+		}
+		break;
+	  case "requireAll":
+		dep.shift();
+		newDeps = dep;
+		dojo.hostenv.flattenRequireArray(newDeps);
+		break;
+	  case "kwCompoundRequire":
+	  case "hostenv.conditionalLoadModule":
+		var modMap = dep[1];
+		var common = modMap["common"] || [];
+		var newDeps = (modMap[dojo.hostenv.name_]) ? common.concat(modMap[dojo.hostenv.name_] || []) : common.concat(modMap["default"] || []);
+		dojo.hostenv.flattenRequireArray(newDeps);
+		break;
+	  case "require":
+	  case "requireAfter":
+	  case "hostenv.loadModule":
+		newDeps = [{name:dep[1], content:null}];
+		break;
 	}
-
-	//The requireAfterIf or requireAfter needs to be evaluated after the current package is evaluated.
-	if(dep[0] == "requireAfterIf"){
+	if (dep[0] == "requireAfterIf" || dep[0] == "requireIf") {
 		newAfterDeps = newDeps;
 		newDeps = null;
 	}
-	return {requires: newDeps, requiresAfter: newAfterDeps}; //Object
-}
-
-dojo.hostenv.xdWalkReqs = function(){
-	//summary: Internal xd loader function. 
-	//Walks the requires and evaluates package contents in
-	//the right order.
+	return {requires:newDeps, requiresAfter:newAfterDeps};
+};
+dojo.hostenv.xdWalkReqs = function () {
 	var reqChain = null;
 	var req;
-	for(var i = 0; i < this.xdOrderedReqs.length; i++){
+	for (var i = 0; i < this.xdOrderedReqs.length; i++) {
 		req = this.xdOrderedReqs[i];
-		if(this.xdDepMap[req]){
+		if (this.xdDepMap[req]) {
 			reqChain = [req];
-			reqChain[req] = true; //Allow for fast lookup of the req in the array
+			reqChain[req] = true;
 			this.xdEvalReqs(reqChain);
 		}
 	}
-}
-
-dojo.hostenv.xdTraceReqs = function(/*Object*/reqs, /*Array*/reqChain){
-	//summary: Internal xd loader function. 
-	//Trace the requires to chain the correct order of required modules.
-	if(reqs && reqs.length > 0){
-		var nextReq;
-		for(var i = 0; i < reqs.length; i++){
-			nextReq = reqs[i].name;
-			if(nextReq && !reqChain[nextReq]){
-				//New req depedency. Follow it down.
-				reqChain.push(nextReq);
-				reqChain[nextReq] = true;
-				this.xdEvalReqs(reqChain);
-			}
-		}
-	}
-}
-
-dojo.hostenv.xdEvalReqs = function(/*Array*/reqChain){
-	//summary: Internal xd loader function. 
-	//Does a depth first, breadth second search and eval of required modules.
-	if(reqChain.length > 0){
+};
+dojo.hostenv.xdEvalReqs = function (reqChain) {
+	while (reqChain.length > 0) {
 		var req = reqChain[reqChain.length - 1];
 		var pkg = this.xdDepMap[req];
-		if(pkg){
-			//Trace down any requires for this package.
-			this.xdTraceReqs(pkg.requires, reqChain);
-
-			//Evaluate the package.
+		if (pkg) {
+			var reqs = pkg.requires;
+			if (reqs && reqs.length > 0) {
+				var nextReq;
+				for (var i = 0; i < reqs.length; i++) {
+					nextReq = reqs[i].name;
+					if (nextReq && !reqChain[nextReq]) {
+						reqChain.push(nextReq);
+						reqChain[nextReq] = true;
+						this.xdEvalReqs(reqChain);
+					}
+				}
+			}
 			var contents = this.xdContents[pkg.contentIndex];
-			if(!contents.isDefined){
-				//Evaluate the package to bring it into being.
-				//Pass dojo in so that later, to support multiple versions of dojo
-				//in a page, we can pass which version of dojo to use.
-				contents.content(dojo);
+			if (!contents.isDefined) {
+				var content = contents.content;
+				content["resourceName"] = contents["resourceName"];
+				content["resourcePath"] = contents["resourcePath"];
+				this.xdDefList.push(content);
 				contents.isDefined = true;
 			}
 			this.xdDepMap[req] = null;
-
-			//Trace down any requireAfters for this package..
-			this.xdTraceReqs(pkg.requiresAfter, reqChain);
+			var reqs = pkg.requiresAfter;
+			if (reqs && reqs.length > 0) {
+				var nextReq;
+				for (var i = 0; i < reqs.length; i++) {
+					nextReq = reqs[i].name;
+					if (nextReq && !reqChain[nextReq]) {
+						reqChain.push(nextReq);
+						reqChain[nextReq] = true;
+						this.xdEvalReqs(reqChain);
+					}
+				}
+			}
 		}
-
-		//Done with that require. Remove it and go to the next one.
 		reqChain.pop();
-		this.xdEvalReqs(reqChain);
 	}
-}
-
-dojo.hostenv.clearXdInterval = function(){
-	//summary: Internal xd loader function.
-	//Clears the interval timer used to check on the
-	//status of in-flight xd module resource requests.
+};
+dojo.hostenv.clearXdInterval = function () {
 	clearInterval(this.xdTimer);
 	this.xdTimer = 0;
-}
-
-dojo.hostenv.watchInFlightXDomain = function(){
-	//summary: Internal xd loader function.
-	//Monitors in-flight requests for xd module resources.
-
-	//Make sure we haven't waited timed out.
-	var waitInterval = (djConfig.xdWaitSeconds || 30) * 1000;
-
-	if(this.xdStartTime + waitInterval < (new Date()).getTime()){
+};
+dojo.hostenv.watchInFlightXDomain = function () {
+	var waitInterval = (djConfig.xdWaitSeconds || 15) * 1000;
+	if (this.xdStartTime + waitInterval < (new Date()).getTime()) {
 		this.clearXdInterval();
 		var noLoads = "";
-		for(var param in this.xdInFlight){
-			if(this.xdInFlight[param]){
+		for (var param in this.xdInFlight) {
+			if (this.xdInFlight[param]) {
 				noLoads += param + " ";
 			}
 		}
 		dojo.raise("Could not load cross-domain packages: " + noLoads);
 	}
-
-	//If any are true, then still waiting.
-	//Come back later.	
-	for(var param in this.xdInFlight){
-		if(this.xdInFlight[param]){
+	for (var param in this.xdInFlight) {
+		if (this.xdInFlight[param]) {
 			return;
 		}
 	}
-
-	//All done loading. Clean up and notify that we are loaded.
 	this.clearXdInterval();
-
 	this.xdWalkReqs();
-
-	//Evaluate any packages that were not evaled before.
-	//This normally shouldn't happen with proper dojo.provide and dojo.require
-	//usage, but providing it just in case. Note that these may not be executed
-	//in the original order that the developer intended.
-	//Pass dojo in so that later, to support multiple versions of dojo
-	//in a page, we can pass which version of dojo to use.
-	for(var i = 0; i < this.xdContents.length; i++){
+	var defLength = this.xdDefList.length;
+	for (var i = 0; i < defLength; i++) {
+		var content = dojo.hostenv.xdDefList[i];
+		if (djConfig["debugAtAllCosts"] && content["resourceName"]) {
+			if (!this["xdDebugQueue"]) {
+				this.xdDebugQueue = [];
+			}
+			this.xdDebugQueue.push({resourceName:content.resourceName, resourcePath:content.resourcePath});
+		} else {
+			content(dojo);
+		}
+	}
+	for (var i = 0; i < this.xdContents.length; i++) {
 		var current = this.xdContents[i];
-		if(current.content && !current.isDefined){
+		if (current.content && !current.isDefined) {
 			current.content(dojo);
 		}
 	}
-
-	//Clean up for the next round of xd loading.
 	this.resetXd();
-
-	//Clear inflight count so we will finally do finish work.
-	this.inFlightCount = 0; 
+	if (this["xdDebugQueue"] && this.xdDebugQueue.length > 0) {
+		this.xdDebugFileLoaded();
+	} else {
+		this.xdNotifyLoaded();
+	}
+};
+dojo.hostenv.xdNotifyLoaded = function () {
+	this.inFlightCount = 0;
 	this.callLoaded();
-}
-
-dojo.hostenv.flattenRequireArray = function(/*Array*/target){
-	//summary: Internal xd loader function.
-	//Flattens an array of arrays into a one-level deep array.
-
-	//Each result could be an array of 3 elements  (the 3 arguments to dojo.require).
-	//We only need the first one.
-	if(target){
-		for(var i = 0; i < target.length; i++){
-			if(target[i] instanceof Array){
-				target[i] = {name: target[i][0], content: null};
-			}else{
-				target[i] = {name: target[i], content: null};
+};
+dojo.hostenv.flattenRequireArray = function (target) {
+	if (target) {
+		for (var i = 0; i < target.length; i++) {
+			if (target[i] instanceof Array) {
+				target[i] = {name:target[i][0], content:null};
+			} else {
+				target[i] = {name:target[i], content:null};
 			}
 		}
 	}
-}
-
-
+};
 dojo.hostenv.xdHasCalledPreload = false;
 dojo.hostenv.xdRealCallLoaded = dojo.hostenv.callLoaded;
-dojo.hostenv.callLoaded = function(){
-	//summary: Internal xd loader function. Overrides callLoaded() from loader.js
-	//description: The method is overridden because xd loading needs to preload 
-	//any flattened i18n bundles before dojo starts executing code, 
-	//since xd loading cannot do it synchronously, as the i18n code normally expects.
-
-	//If getModulePrefix for dojo returns anything other than "src", that means
-	//there is a path registered for dojo, with implies that dojo was xdomain loaded.
-	if(this.xdHasCalledPreload || dojo.hostenv.getModulePrefix("dojo") == "src" || !this.localesGenerated){
+dojo.hostenv.callLoaded = function () {
+	if (this.xdHasCalledPreload || dojo.hostenv.getModulePrefix("dojo") == "src" || !this.localesGenerated) {
 		this.xdRealCallLoaded();
 		this.xdHasCalledPreload = true;
-	}else{
-		if(this.localesGenerated){
-			this.registerNlsPrefix = function(){
-				//Need to set the nls prefix to be the xd location.
-				dojo.registerModulePath("nls", dojo.hostenv.getModulePrefix("dojo") + "/../nls");	
+	} else {
+		if (this.localesGenerated) {
+			this.registerNlsPrefix = function () {
+				dojo.registerModulePath("nls", dojo.hostenv.getModulePrefix("dojo") + "/../nls");
 			};
 			this.preloadLocalizations();
 		}
 		this.xdHasCalledPreload = true;
 	}
-}
+};
 
+
 __CPAN_FILE__ src/dom.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -6276,556 +4330,375 @@
 */
 
 dojo.provide("dojo.dom");
-
-dojo.dom.ELEMENT_NODE                  = 1;
-dojo.dom.ATTRIBUTE_NODE                = 2;
-dojo.dom.TEXT_NODE                     = 3;
-dojo.dom.CDATA_SECTION_NODE            = 4;
-dojo.dom.ENTITY_REFERENCE_NODE         = 5;
-dojo.dom.ENTITY_NODE                   = 6;
-dojo.dom.PROCESSING_INSTRUCTION_NODE   = 7;
-dojo.dom.COMMENT_NODE                  = 8;
-dojo.dom.DOCUMENT_NODE                 = 9;
-dojo.dom.DOCUMENT_TYPE_NODE            = 10;
-dojo.dom.DOCUMENT_FRAGMENT_NODE        = 11;
-dojo.dom.NOTATION_NODE                 = 12;
-	
+dojo.dom.ELEMENT_NODE = 1;
+dojo.dom.ATTRIBUTE_NODE = 2;
+dojo.dom.TEXT_NODE = 3;
+dojo.dom.CDATA_SECTION_NODE = 4;
+dojo.dom.ENTITY_REFERENCE_NODE = 5;
+dojo.dom.ENTITY_NODE = 6;
+dojo.dom.PROCESSING_INSTRUCTION_NODE = 7;
+dojo.dom.COMMENT_NODE = 8;
+dojo.dom.DOCUMENT_NODE = 9;
+dojo.dom.DOCUMENT_TYPE_NODE = 10;
+dojo.dom.DOCUMENT_FRAGMENT_NODE = 11;
+dojo.dom.NOTATION_NODE = 12;
 dojo.dom.dojoml = "http://www.dojotoolkit.org/2004/dojoml";
-
-/**
- *	comprehensive list of XML namespaces
-**/
-dojo.dom.xmlns = {
-	//	summary
-	//	aliases for various common XML namespaces
-	svg : "http://www.w3.org/2000/svg",
-	smil : "http://www.w3.org/2001/SMIL20/",
-	mml : "http://www.w3.org/1998/Math/MathML",
-	cml : "http://www.xml-cml.org",
-	xlink : "http://www.w3.org/1999/xlink",
-	xhtml : "http://www.w3.org/1999/xhtml",
-	xul : "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
-	xbl : "http://www.mozilla.org/xbl",
-	fo : "http://www.w3.org/1999/XSL/Format",
-	xsl : "http://www.w3.org/1999/XSL/Transform",
-	xslt : "http://www.w3.org/1999/XSL/Transform",
-	xi : "http://www.w3.org/2001/XInclude",
-	xforms : "http://www.w3.org/2002/01/xforms",
-	saxon : "http://icl.com/saxon",
-	xalan : "http://xml.apache.org/xslt",
-	xsd : "http://www.w3.org/2001/XMLSchema",
-	dt: "http://www.w3.org/2001/XMLSchema-datatypes",
-	xsi : "http://www.w3.org/2001/XMLSchema-instance",
-	rdf : "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
-	rdfs : "http://www.w3.org/2000/01/rdf-schema#",
-	dc : "http://purl.org/dc/elements/1.1/",
-	dcq: "http://purl.org/dc/qualifiers/1.0",
-	"soap-env" : "http://schemas.xmlsoap.org/soap/envelope/",
-	wsdl : "http://schemas.xmlsoap.org/wsdl/",
-	AdobeExtensions : "http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-};
-
-dojo.dom.isNode = function(/* object */wh){
-	//	summary:
-	//		checks to see if wh is actually a node.
-	if(typeof Element == "function") {
+dojo.dom.xmlns = {svg:"http://www.w3.org/2000/svg", smil:"http://www.w3.org/2001/SMIL20/", mml:"http://www.w3.org/1998/Math/MathML", cml:"http://www.xml-cml.org", xlink:"http://www.w3.org/1999/xlink", xhtml:"http://www.w3.org/1999/xhtml", xul:"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", xbl:"http://www.mozilla.org/xbl", fo:"http://www.w3.org/1999/XSL/Format", xsl:"http://www.w3.org/1999/XSL/Transform", xslt:"http://www.w3.org/1999/XSL/Transform", xi:"http://www.w3.org/2001/XInclude", xforms:"http://www.w3.org/2002/01/xforms", saxon:"http://icl.com/saxon", xalan:"http://xml.apache.org/xslt", xsd:"http://www.w3.org/2001/XMLSchema", dt:"http://www.w3.org/2001/XMLSchema-datatypes", xsi:"http://www.w3.org/2001/XMLSchema-instance", rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#", rdfs:"http://www.w3.org/2000/01/rdf-schema#", dc:"http://purl.org/dc/elements/1.1/", dcq:"http://purl.org/dc/qualifiers/1.0", "soap-env":"http://schemas.xmlsoap.org/soap/envelope/", wsdl:"http://schemas.xmlsoap.org/wsdl/", AdobeExtensions:"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"};
+dojo.dom.isNode = function (wh) {
+	if (typeof Element == "function") {
 		try {
-			return wh instanceof Element;	//	boolean
-		} catch(e) {}
+			return wh instanceof Element;
+		}
+		catch (e) {
+		}
 	} else {
-		// best-guess
-		return wh && !isNaN(wh.nodeType);	//	boolean
+		return wh && !isNaN(wh.nodeType);
 	}
-}
-
-dojo.dom.getUniqueId = function(){
-	//	summary:
-	//		returns a unique string for use with any DOM element
+};
+dojo.dom.getUniqueId = function () {
 	var _document = dojo.doc();
 	do {
 		var id = "dj_unique_" + (++arguments.callee._idIncrement);
-	}while(_document.getElementById(id));
-	return id;	//	string
-}
+	} while (_document.getElementById(id));
+	return id;
+};
 dojo.dom.getUniqueId._idIncrement = 0;
-
-dojo.dom.firstElement = dojo.dom.getFirstChildElement = function(/* Element */parentNode, /* string? */tagName){
-	//	summary:
-	//		returns the first child element matching tagName
+dojo.dom.firstElement = dojo.dom.getFirstChildElement = function (parentNode, tagName) {
 	var node = parentNode.firstChild;
-	while(node && node.nodeType != dojo.dom.ELEMENT_NODE){
+	while (node && node.nodeType != dojo.dom.ELEMENT_NODE) {
 		node = node.nextSibling;
 	}
-	if(tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {
+	if (tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {
 		node = dojo.dom.nextElement(node, tagName);
 	}
-	return node;	//	Element
-}
-
-dojo.dom.lastElement = dojo.dom.getLastChildElement = function(/* Element */parentNode, /* string? */tagName){
-	//	summary:
-	//		returns the last child element matching tagName
+	return node;
+};
+dojo.dom.lastElement = dojo.dom.getLastChildElement = function (parentNode, tagName) {
 	var node = parentNode.lastChild;
-	while(node && node.nodeType != dojo.dom.ELEMENT_NODE) {
+	while (node && node.nodeType != dojo.dom.ELEMENT_NODE) {
 		node = node.previousSibling;
 	}
-	if(tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {
+	if (tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {
 		node = dojo.dom.prevElement(node, tagName);
 	}
-	return node;	//	Element
-}
-
-dojo.dom.nextElement = dojo.dom.getNextSiblingElement = function(/* Node */node, /* string? */tagName){
-	//	summary:
-	//		returns the next sibling element matching tagName
-	if(!node) { return null; }
+	return node;
+};
+dojo.dom.nextElement = dojo.dom.getNextSiblingElement = function (node, tagName) {
+	if (!node) {
+		return null;
+	}
 	do {
 		node = node.nextSibling;
-	} while(node && node.nodeType != dojo.dom.ELEMENT_NODE);
-
-	if(node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {
+	} while (node && node.nodeType != dojo.dom.ELEMENT_NODE);
+	if (node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {
 		return dojo.dom.nextElement(node, tagName);
 	}
-	return node;	//	Element
-}
-
-dojo.dom.prevElement = dojo.dom.getPreviousSiblingElement = function(/* Node */node, /* string? */tagName){
-	//	summary:
-	//		returns the previous sibling element matching tagName
-	if(!node) { return null; }
-	if(tagName) { tagName = tagName.toLowerCase(); }
+	return node;
+};
+dojo.dom.prevElement = dojo.dom.getPreviousSiblingElement = function (node, tagName) {
+	if (!node) {
+		return null;
+	}
+	if (tagName) {
+		tagName = tagName.toLowerCase();
+	}
 	do {
 		node = node.previousSibling;
-	} while(node && node.nodeType != dojo.dom.ELEMENT_NODE);
-
-	if(node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {
+	} while (node && node.nodeType != dojo.dom.ELEMENT_NODE);
+	if (node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {
 		return dojo.dom.prevElement(node, tagName);
 	}
-	return node;	//	Element
-}
-
-// TODO: hmph
-/*this.forEachChildTag = function(node, unaryFunc) {
-	var child = this.getFirstChildTag(node);
-	while(child) {
-		if(unaryFunc(child) == "break") { break; }
-		child = this.getNextSiblingTag(child);
-	}
-}*/
-
-dojo.dom.moveChildren = function(/*Element*/srcNode, /*Element*/destNode, /*boolean?*/trim){
-	//	summary:
-	//		Moves children from srcNode to destNode and returns the count of
-	//		children moved; will trim off text nodes if trim == true
+	return node;
+};
+dojo.dom.moveChildren = function (srcNode, destNode, trim) {
 	var count = 0;
-	if(trim) {
-		while(srcNode.hasChildNodes() &&
-			srcNode.firstChild.nodeType == dojo.dom.TEXT_NODE) {
+	if (trim) {
+		while (srcNode.hasChildNodes() && srcNode.firstChild.nodeType == dojo.dom.TEXT_NODE) {
 			srcNode.removeChild(srcNode.firstChild);
 		}
-		while(srcNode.hasChildNodes() &&
-			srcNode.lastChild.nodeType == dojo.dom.TEXT_NODE) {
+		while (srcNode.hasChildNodes() && srcNode.lastChild.nodeType == dojo.dom.TEXT_NODE) {
 			srcNode.removeChild(srcNode.lastChild);
 		}
 	}
-	while(srcNode.hasChildNodes()){
+	while (srcNode.hasChildNodes()) {
 		destNode.appendChild(srcNode.firstChild);
 		count++;
 	}
-	return count;	//	number
-}
-
-dojo.dom.copyChildren = function(/*Element*/srcNode, /*Element*/destNode, /*boolean?*/trim){
-	//	summary:
-	//		Copies children from srcNde to destNode and returns the count of
-	//		children copied; will trim off text nodes if trim == true
+	return count;
+};
+dojo.dom.copyChildren = function (srcNode, destNode, trim) {
 	var clonedNode = srcNode.cloneNode(true);
-	return this.moveChildren(clonedNode, destNode, trim);	//	number
-}
-
-dojo.dom.replaceChildren = function(/*Element*/node, /*Node*/newChild){
-	//	summary:
-	//		Removes all children of node and appends newChild. All the existing
-	//		children will be destroyed.
-	// FIXME: what if newChild is an array-like object?
+	return this.moveChildren(clonedNode, destNode, trim);
+};
+dojo.dom.replaceChildren = function (node, newChild) {
 	var nodes = [];
-	if(dojo.render.html.ie){
-		for(var i=0;i<node.childNodes.length;i++){
+	if (dojo.render.html.ie) {
+		for (var i = 0; i < node.childNodes.length; i++) {
 			nodes.push(node.childNodes[i]);
 		}
 	}
 	dojo.dom.removeChildren(node);
 	node.appendChild(newChild);
-	for(var i=0;i<nodes.length;i++){
+	for (var i = 0; i < nodes.length; i++) {
 		dojo.dom.destroyNode(nodes[i]);
 	}
-}
-
-dojo.dom.removeChildren = function(/*Element*/node){
-	//	summary:
-	//		removes all children from node and returns the count of children removed.
-	//		The children nodes are not destroyed. Be sure to call destroyNode on them
-	//		after they are not used anymore.
+};
+dojo.dom.removeChildren = function (node) {
 	var count = node.childNodes.length;
-	while(node.hasChildNodes()){ dojo.dom.removeNode(node.firstChild); }
-	return count; // int
-}
-
-dojo.dom.replaceNode = function(/*Element*/node, /*Element*/newNode){
-	//	summary:
-	//		replaces node with newNode and returns a reference to the removed node.
-	//		To prevent IE memory leak, call destroyNode on the returned node when
-	//		it is no longer needed.
-	return node.parentNode.replaceChild(newNode, node); // Node
-}
-
-dojo.dom.destroyNode = function(/*Node*/node){
-	// summary:
-	//		destroy a node (it can not be used any more). For IE, this is the
-	//		right function to call to prevent memory leaks. While for other
-	//		browsers, this is identical to dojo.dom.removeNode
-	if(node.parentNode){
+	while (node.hasChildNodes()) {
+		dojo.dom.removeNode(node.firstChild);
+	}
+	return count;
+};
+dojo.dom.replaceNode = function (node, newNode) {
+	return node.parentNode.replaceChild(newNode, node);
+};
+dojo.dom.destroyNode = function (node) {
+	if (node.parentNode) {
 		node = dojo.dom.removeNode(node);
 	}
-	if(node.nodeType != 3){ // ingore TEXT_NODE
-		if(dojo.evalObjPath("dojo.event.browser.clean", false)){
+	if (node.nodeType != 3) {
+		if (dojo.evalObjPath("dojo.event.browser.clean", false)) {
 			dojo.event.browser.clean(node);
 		}
-		if(dojo.render.html.ie){
-			node.outerHTML=''; //prevent ugly IE mem leak associated with Node.removeChild (ticket #1727)
+		if (dojo.render.html.ie) {
+			node.outerHTML = "";
 		}
 	}
-}
-
-dojo.dom.removeNode = function(/*Node*/node){
-	// summary:
-	//		if node has a parent, removes node from parent and returns a
-	//		reference to the removed child.
-	//		To prevent IE memory leak, call destroyNode on the returned node when
-	//		it is no longer needed.
-	//	node:
-	//		the node to remove from its parent.
-
-	if(node && node.parentNode){
-		// return a ref to the removed child
-		return node.parentNode.removeChild(node); //Node
+};
+dojo.dom.removeNode = function (node) {
+	if (node && node.parentNode) {
+		return node.parentNode.removeChild(node);
 	}
-}
-
-dojo.dom.getAncestors = function(/*Node*/node, /*function?*/filterFunction, /*boolean?*/returnFirstHit){
-	//	summary:
-	//		returns all ancestors matching optional filterFunction; will return
-	//		only the first if returnFirstHit
+};
+dojo.dom.getAncestors = function (node, filterFunction, returnFirstHit) {
 	var ancestors = [];
 	var isFunction = (filterFunction && (filterFunction instanceof Function || typeof filterFunction == "function"));
-	while(node){
-		if(!isFunction || filterFunction(node)){
+	while (node) {
+		if (!isFunction || filterFunction(node)) {
 			ancestors.push(node);
 		}
-		if(returnFirstHit && ancestors.length > 0){ 
-			return ancestors[0]; 	//	Node
+		if (returnFirstHit && ancestors.length > 0) {
+			return ancestors[0];
 		}
-		
 		node = node.parentNode;
 	}
-	if(returnFirstHit){ return null; }
-	return ancestors;	//	array
-}
-
-dojo.dom.getAncestorsByTag = function(/*Node*/node, /*String*/tag, /*boolean?*/returnFirstHit){
-	//	summary:
-	//		returns all ancestors matching tag (as tagName), will only return
-	//		first one if returnFirstHit
+	if (returnFirstHit) {
+		return null;
+	}
+	return ancestors;
+};
+dojo.dom.getAncestorsByTag = function (node, tag, returnFirstHit) {
 	tag = tag.toLowerCase();
-	return dojo.dom.getAncestors(node, function(el){
-		return ((el.tagName)&&(el.tagName.toLowerCase() == tag));
-	}, returnFirstHit);	//	Node || array
-}
-
-dojo.dom.getFirstAncestorByTag = function(/*Node*/node, /*string*/tag){
-	//	summary:
-	//		Returns first ancestor of node with tag tagName
-	return dojo.dom.getAncestorsByTag(node, tag, true);	//	Node
-}
-
-dojo.dom.isDescendantOf = function(/* Node */node, /* Node */ancestor, /* boolean? */guaranteeDescendant){
-	//	summary
-	//	Returns boolean if node is a descendant of ancestor
-	// guaranteeDescendant allows us to be a "true" isDescendantOf function
-	if(guaranteeDescendant && node) { node = node.parentNode; }
-	while(node) {
-		if(node == ancestor){ 
-			return true; 	//	boolean
+	return dojo.dom.getAncestors(node, function (el) {
+		return ((el.tagName) && (el.tagName.toLowerCase() == tag));
+	}, returnFirstHit);
+};
+dojo.dom.getFirstAncestorByTag = function (node, tag) {
+	return dojo.dom.getAncestorsByTag(node, tag, true);
+};
+dojo.dom.isDescendantOf = function (node, ancestor, guaranteeDescendant) {
+	if (guaranteeDescendant && node) {
+		node = node.parentNode;
+	}
+	while (node) {
+		if (node == ancestor) {
+			return true;
 		}
 		node = node.parentNode;
 	}
-	return false;	//	boolean
-}
-
-dojo.dom.innerXML = function(/*Node*/node){
-	//	summary:
-	//		Implementation of MS's innerXML function.
-	if(node.innerXML){
-		return node.innerXML;	//	string
-	}else if (node.xml){
-		return node.xml;		//	string
-	}else if(typeof XMLSerializer != "undefined"){
-		return (new XMLSerializer()).serializeToString(node);	//	string
+	return false;
+};
+dojo.dom.innerXML = function (node) {
+	if (node.innerXML) {
+		return node.innerXML;
+	} else {
+		if (node.xml) {
+			return node.xml;
+		} else {
+			if (typeof XMLSerializer != "undefined") {
+				return (new XMLSerializer()).serializeToString(node);
+			}
+		}
 	}
-}
-
-dojo.dom.createDocument = function(){
-	//	summary:
-	//		cross-browser implementation of creating an XML document object.
+};
+dojo.dom.createDocument = function () {
 	var doc = null;
 	var _document = dojo.doc();
-
-	if(!dj_undef("ActiveXObject")){
-		var prefixes = [ "MSXML2", "Microsoft", "MSXML", "MSXML3" ];
-		for(var i = 0; i<prefixes.length; i++){
-			try{
-				doc = new ActiveXObject(prefixes[i]+".XMLDOM");
-			}catch(e){ /* squelch */ };
-
-			if(doc){ break; }
+	if (!dj_undef("ActiveXObject")) {
+		var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
+		for (var i = 0; i < prefixes.length; i++) {
+			try {
+				doc = new ActiveXObject(prefixes[i] + ".XMLDOM");
+			}
+			catch (e) {
+			}
+			if (doc) {
+				break;
+			}
 		}
-	}else if((_document.implementation)&&
-		(_document.implementation.createDocument)){
-		doc = _document.implementation.createDocument("", "", null);
+	} else {
+		if ((_document.implementation) && (_document.implementation.createDocument)) {
+			doc = _document.implementation.createDocument("", "", null);
+		}
 	}
-	
-	return doc;	//	DOMDocument
-}
-
-dojo.dom.createDocumentFromText = function(/*string*/str, /*string?*/mimetype){
-	//	summary:
-	//		attempts to create a Document object based on optional mime-type,
-	//		using str as the contents of the document
-	if(!mimetype){ mimetype = "text/xml"; }
-	if(!dj_undef("DOMParser")){
+	return doc;
+};
+dojo.dom.createDocumentFromText = function (str, mimetype) {
+	if (!mimetype) {
+		mimetype = "text/xml";
+	}
+	if (!dj_undef("DOMParser")) {
 		var parser = new DOMParser();
-		return parser.parseFromString(str, mimetype);	//	DOMDocument
-	}else if(!dj_undef("ActiveXObject")){
-		var domDoc = dojo.dom.createDocument();
-		if(domDoc){
-			domDoc.async = false;
-			domDoc.loadXML(str);
-			return domDoc;	//	DOMDocument
-		}else{
-			dojo.debug("toXml didn't work?");
-		}
-	/*
-	}else if((dojo.render.html.capable)&&(dojo.render.html.safari)){
-		// FIXME: this doesn't appear to work!
-		// from: http://web-graphics.com/mtarchive/001606.php
-		// var xml = '<?xml version="1.0"?>'+str;
-		var mtype = "text/xml";
-		var xml = '<?xml version="1.0"?>'+str;
-		var url = "data:"+mtype+";charset=utf-8,"+encodeURIComponent(xml);
-		var req = new XMLHttpRequest();
-		req.open("GET", url, false);
-		req.overrideMimeType(mtype);
-		req.send(null);
-		return req.responseXML;
-	*/
-	}else{
-		var _document = dojo.doc();
-		if(_document.createElement){
-			// FIXME: this may change all tags to uppercase!
-			var tmp = _document.createElement("xml");
-			tmp.innerHTML = str;
-			if(_document.implementation && _document.implementation.createDocument){
-				var xmlDoc = _document.implementation.createDocument("foo", "", null);
-				for(var i = 0; i < tmp.childNodes.length; i++) {
-					xmlDoc.importNode(tmp.childNodes.item(i), true);
+		return parser.parseFromString(str, mimetype);
+	} else {
+		if (!dj_undef("ActiveXObject")) {
+			var domDoc = dojo.dom.createDocument();
+			if (domDoc) {
+				domDoc.async = false;
+				domDoc.loadXML(str);
+				return domDoc;
+			} else {
+				dojo.debug("toXml didn't work?");
+			}
+		} else {
+			var _document = dojo.doc();
+			if (_document.createElement) {
+				var tmp = _document.createElement("xml");
+				tmp.innerHTML = str;
+				if (_document.implementation && _document.implementation.createDocument) {
+					var xmlDoc = _document.implementation.createDocument("foo", "", null);
+					for (var i = 0; i < tmp.childNodes.length; i++) {
+						xmlDoc.importNode(tmp.childNodes.item(i), true);
+					}
+					return xmlDoc;
 				}
-				return xmlDoc;	//	DOMDocument
+				return ((tmp.document) && (tmp.document.firstChild ? tmp.document.firstChild : tmp));
 			}
-			// FIXME: probably not a good idea to have to return an HTML fragment
-			// FIXME: the tmp.doc.firstChild is as tested from IE, so it may not
-			// work that way across the board
-			return ((tmp.document)&&
-				(tmp.document.firstChild ?  tmp.document.firstChild : tmp));	//	DOMDocument
 		}
 	}
 	return null;
-}
-
-dojo.dom.prependChild = function(/*Element*/node, /*Element*/parent){
-	//	summary:
-	//		prepends node to parent's children nodes
-	if(parent.firstChild) {
+};
+dojo.dom.prependChild = function (node, parent) {
+	if (parent.firstChild) {
 		parent.insertBefore(node, parent.firstChild);
 	} else {
 		parent.appendChild(node);
 	}
-	return true;	//	boolean
-}
-
-dojo.dom.insertBefore = function(/*Node*/node, /*Node*/ref, /*boolean?*/force){
-	//	summary:
-	//		Try to insert node before ref
-	if(	(force != true)&&
-		(node === ref || node.nextSibling === ref)){ return false; }
+	return true;
+};
+dojo.dom.insertBefore = function (node, ref, force) {
+	if ((force != true) && (node === ref || node.nextSibling === ref)) {
+		return false;
+	}
 	var parent = ref.parentNode;
 	parent.insertBefore(node, ref);
-	return true;	//	boolean
-}
-
-dojo.dom.insertAfter = function(/*Node*/node, /*Node*/ref, /*boolean?*/force){
-	//	summary:
-	//		Try to insert node after ref
+	return true;
+};
+dojo.dom.insertAfter = function (node, ref, force) {
 	var pn = ref.parentNode;
-	if(ref == pn.lastChild){
-		if((force != true)&&(node === ref)){
-			return false;	//	boolean
+	if (ref == pn.lastChild) {
+		if ((force != true) && (node === ref)) {
+			return false;
 		}
 		pn.appendChild(node);
-	}else{
-		return this.insertBefore(node, ref.nextSibling, force);	//	boolean
+	} else {
+		return this.insertBefore(node, ref.nextSibling, force);
 	}
-	return true;	//	boolean
-}
-
-dojo.dom.insertAtPosition = function(/*Node*/node, /*Node*/ref, /*string*/position){
-	//	summary:
-	//		attempt to insert node in relation to ref based on position
-	if((!node)||(!ref)||(!position)){ 
-		return false;	//	boolean 
+	return true;
+};
+dojo.dom.insertAtPosition = function (node, ref, position) {
+	if ((!node) || (!ref) || (!position)) {
+		return false;
 	}
-	switch(position.toLowerCase()){
-		case "before":
-			return dojo.dom.insertBefore(node, ref);	//	boolean
-		case "after":
-			return dojo.dom.insertAfter(node, ref);		//	boolean
-		case "first":
-			if(ref.firstChild){
-				return dojo.dom.insertBefore(node, ref.firstChild);	//	boolean
-			}else{
-				ref.appendChild(node);
-				return true;	//	boolean
-			}
-			break;
-		default: // aka: last
+	switch (position.toLowerCase()) {
+	  case "before":
+		return dojo.dom.insertBefore(node, ref);
+	  case "after":
+		return dojo.dom.insertAfter(node, ref);
+	  case "first":
+		if (ref.firstChild) {
+			return dojo.dom.insertBefore(node, ref.firstChild);
+		} else {
 			ref.appendChild(node);
-			return true;	//	boolean
+			return true;
+		}
+		break;
+	  default:
+		ref.appendChild(node);
+		return true;
 	}
-}
-
-dojo.dom.insertAtIndex = function(/*Node*/node, /*Element*/containingNode, /*number*/insertionIndex){
-	//	summary:
-	//		insert node into child nodes nodelist of containingNode at
-	//		insertionIndex. insertionIndex should be between 0 and 
-	//		the number of the childNodes in containingNode. insertionIndex
-	//		specifys after how many childNodes in containingNode the node
-	//		shall be inserted. If 0 is given, node will be appended to 
-	//		containingNode.
+};
+dojo.dom.insertAtIndex = function (node, containingNode, insertionIndex) {
 	var siblingNodes = containingNode.childNodes;
-
-	// if there aren't any kids yet, just add it to the beginning
-
-	if (!siblingNodes.length || siblingNodes.length == insertionIndex){
+	if (!siblingNodes.length || siblingNodes.length == insertionIndex) {
 		containingNode.appendChild(node);
-		return true;	//	boolean
+		return true;
 	}
-
-	if(insertionIndex == 0){
-		return dojo.dom.prependChild(node, containingNode);	//	boolean
+	if (insertionIndex == 0) {
+		return dojo.dom.prependChild(node, containingNode);
 	}
-	// otherwise we need to walk the childNodes
-	// and find our spot
-
-	return dojo.dom.insertAfter(node, siblingNodes[insertionIndex-1]);	//	boolean
-}
-	
-dojo.dom.textContent = function(/*Node*/node, /*string*/text){
-	//	summary:
-	//		implementation of the DOM Level 3 attribute; scan node for text
-	if (arguments.length>1) {
+	return dojo.dom.insertAfter(node, siblingNodes[insertionIndex - 1]);
+};
+dojo.dom.textContent = function (node, text) {
+	if (arguments.length > 1) {
 		var _document = dojo.doc();
 		dojo.dom.replaceChildren(node, _document.createTextNode(text));
-		return text;	//	string
+		return text;
 	} else {
-		if(node.textContent != undefined){ //FF 1.5
-			return node.textContent;	//	string
+		if (node.textContent != undefined) {
+			return node.textContent;
 		}
 		var _result = "";
-		if (node == null) { return _result; }
+		if (node == null) {
+			return _result;
+		}
 		for (var i = 0; i < node.childNodes.length; i++) {
 			switch (node.childNodes[i].nodeType) {
-				case 1: // ELEMENT_NODE
-				case 5: // ENTITY_REFERENCE_NODE
-					_result += dojo.dom.textContent(node.childNodes[i]);
-					break;
-				case 3: // TEXT_NODE
-				case 2: // ATTRIBUTE_NODE
-				case 4: // CDATA_SECTION_NODE
-					_result += node.childNodes[i].nodeValue;
-					break;
-				default:
-					break;
+			  case 1:
+			  case 5:
+				_result += dojo.dom.textContent(node.childNodes[i]);
+				break;
+			  case 3:
+			  case 2:
+			  case 4:
+				_result += node.childNodes[i].nodeValue;
+				break;
+			  default:
+				break;
 			}
 		}
-		return _result;	//	string
+		return _result;
 	}
-}
-
-dojo.dom.hasParent = function(/*Node*/node){
-	//	summary:
-	//		returns whether or not node is a child of another node.
-	return Boolean(node && node.parentNode && dojo.dom.isNode(node.parentNode));	//	boolean
-}
-
-/**
- * Examples:
- *
- * myFooNode = <foo />
- * isTag(myFooNode, "foo"); // returns "foo"
- * isTag(myFooNode, "bar"); // returns ""
- * isTag(myFooNode, "FOO"); // returns ""
- * isTag(myFooNode, "hey", "foo", "bar"); // returns "foo"
-**/
-dojo.dom.isTag = function(/* Node */node /* ... */){
-	//	summary:
-	//		determines if node has any of the provided tag names and returns
-	//		the tag name that matches, empty string otherwise.
-	if(node && node.tagName) {
-		for(var i=1; i<arguments.length; i++){
-			if(node.tagName==String(arguments[i])){
-				return String(arguments[i]);	//	string
+};
+dojo.dom.hasParent = function (node) {
+	return Boolean(node && node.parentNode && dojo.dom.isNode(node.parentNode));
+};
+dojo.dom.isTag = function (node) {
+	if (node && node.tagName) {
+		for (var i = 1; i < arguments.length; i++) {
+			if (node.tagName == String(arguments[i])) {
+				return String(arguments[i]);
 			}
 		}
 	}
-	return "";	//	string
-}
-
-dojo.dom.setAttributeNS = function(	/*Element*/elem, /*string*/namespaceURI, 
-									/*string*/attrName, /*string*/attrValue){
-	//	summary:
-	//		implementation of DOM2 setAttributeNS that works cross browser.
-	if(elem == null || ((elem == undefined)&&(typeof elem == "undefined"))){
+	return "";
+};
+dojo.dom.setAttributeNS = function (elem, namespaceURI, attrName, attrValue) {
+	if (elem == null || ((elem == undefined) && (typeof elem == "undefined"))) {
 		dojo.raise("No element given to dojo.dom.setAttributeNS");
 	}
-	
-	if(!((elem.setAttributeNS == undefined)&&(typeof elem.setAttributeNS == "undefined"))){ // w3c
+	if (!((elem.setAttributeNS == undefined) && (typeof elem.setAttributeNS == "undefined"))) {
 		elem.setAttributeNS(namespaceURI, attrName, attrValue);
-	}else{ // IE
-		// get a root XML document
+	} else {
 		var ownerDoc = elem.ownerDocument;
-		var attribute = ownerDoc.createNode(
-			2, // node type
-			attrName,
-			namespaceURI
-		);
-		
-		// set value
+		var attribute = ownerDoc.createNode(2, attrName, namespaceURI);
 		attribute.nodeValue = attrValue;
-		
-		// attach to element
 		elem.setAttributeNode(attribute);
 	}
-}
+};
 
+
 __CPAN_FILE__ src/hostenv_wsh.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -6837,42 +4710,29 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-/*
- * WSH
- */
-
-dojo.hostenv.name_ = 'wsh';
-
-// make jsc shut up (so can sanity check)
-/*@cc_on
- at if (@_jscript_version >= 7)
-var WScript;
- at end
-@*/
-
-// make sure we are in right environment
-if(typeof WScript == 'undefined'){
+dojo.hostenv.name_ = "wsh";
+if (typeof WScript == "undefined") {
 	dojo.raise("attempt to use WSH host environment when no WScript global");
 }
-
 dojo.hostenv.println = WScript.Echo;
-
-dojo.hostenv.getCurrentScriptUri = function(){
+dojo.hostenv.getCurrentScriptUri = function () {
 	return WScript.ScriptFullName();
-}
-
-dojo.hostenv.getText = function(fpath){
+};
+dojo.hostenv.getText = function (fpath) {
 	var fso = new ActiveXObject("Scripting.FileSystemObject");
-	var istream = fso.OpenTextFile(fpath, 1); // iomode==1 means read only
-	if(!istream){
+	var istream = fso.OpenTextFile(fpath, 1);
+	if (!istream) {
 		return null;
 	}
 	var contents = istream.ReadAll();
 	istream.Close();
 	return contents;
-}
+};
+dojo.hostenv.exit = function (exitcode) {
+	WScript.Quit(exitcode);
+};
+dojo.requireIf((djConfig["isDebug"] || djConfig["debugAtAllCosts"]), "dojo.debug");
 
-dojo.hostenv.exit = function(exitcode){ WScript.Quit(exitcode); }
 
 __CPAN_FILE__ src/AdapterRegistry.js
 /*
@@ -6887,83 +4747,37 @@
 
 dojo.provide("dojo.AdapterRegistry");
 dojo.require("dojo.lang.func");
-
-dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){
-	// summary:
-	//		A registry to make contextual calling/searching easier.
-	// description:
-	//		Objects of this class keep list of arrays in the form [name, check,
-	//		wrap, directReturn] that are used to determine what the contextual
-	//		result of a set of checked arguments is. All check/wrap functions
-	//		in this registry should be of the same arity.
+dojo.AdapterRegistry = function (returnWrappers) {
 	this.pairs = [];
 	this.returnWrappers = returnWrappers || false;
-}
-
-dojo.lang.extend(dojo.AdapterRegistry, {
-	register: function(name, check, /*Function*/ wrap, directReturn, override){
-		// summary: 
-		//		register a check function to determine if the wrap function or
-		//		object gets selected
-		// name: String
-		//		a way to identify this matcher.
-		// check: Function
-		//		a function that arguments are passed to from the adapter's
-		//		match() function.  The check function should return true if the
-		//		given arguments are appropriate for the wrap function.
-		// directReturn: Boolean?
-		//		If directReturn is true, the value passed in for wrap will be
-		//		returned instead of being called. Alternately, the
-		//		AdapterRegistry can be set globally to "return not call" using
-		//		the returnWrappers property. Either way, this behavior allows
-		//		the registry to act as a "search" function instead of a
-		//		function interception library.
-		// override: Boolean?
-		//		If override is given and true, the check function will be given
-		//		highest priority. Otherwise, it will be the lowest priority
-		//		adapter.
-
-		var type = (override) ? "unshift" : "push";
-		this.pairs[type]([name, check, wrap, directReturn]);
-	},
-
-	match: function(/* ... */){
-    // summary:
-		//		Find an adapter for the given arguments. If no suitable adapter
-		//		is found, throws an exception. match() accepts any number of
-		//		arguments, all of which are passed to all matching functions
-		//		from the registered pairs.
-		for(var i = 0; i < this.pairs.length; i++){
-			var pair = this.pairs[i];
-			if(pair[1].apply(this, arguments)){
-				if((pair[3])||(this.returnWrappers)){
-					return pair[2];
-				}else{
-					return pair[2].apply(this, arguments);
-				}
+};
+dojo.lang.extend(dojo.AdapterRegistry, {register:function (name, check, wrap, directReturn, override) {
+	var type = (override) ? "unshift" : "push";
+	this.pairs[type]([name, check, wrap, directReturn]);
+}, match:function () {
+	for (var i = 0; i < this.pairs.length; i++) {
+		var pair = this.pairs[i];
+		if (pair[1].apply(this, arguments)) {
+			if ((pair[3]) || (this.returnWrappers)) {
+				return pair[2];
+			} else {
+				return pair[2].apply(this, arguments);
 			}
 		}
-		throw new Error("No match found");
-		// dojo.raise("No match found");
-	},
-
-	unregister: function(name){
-		// summary: Remove a named adapter from the registry
-
-		// FIXME: this is kind of a dumb way to handle this. On a large
-		// registry this will be slow-ish and we can use the name as a lookup
-		// should we choose to trade memory for speed.
-		for(var i = 0; i < this.pairs.length; i++){
-			var pair = this.pairs[i];
-			if(pair[0] == name){
-				this.pairs.splice(i, 1);
-				return true;
-			}
+	}
+	throw new Error("No match found");
+}, unregister:function (name) {
+	for (var i = 0; i < this.pairs.length; i++) {
+		var pair = this.pairs[i];
+		if (pair[0] == name) {
+			this.pairs.splice(i, 1);
+			return true;
 		}
-		return false;
 	}
-});
+	return false;
+}});
 
+
 __CPAN_FILE__ src/hostenv_svg.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -6975,186 +4789,194 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-//	hostenv_svg
-if(typeof window == 'undefined'){
+if (typeof window == "undefined") {
 	dojo.raise("attempt to use adobe svg hostenv when no window object");
 }
-dojo.debug = function(){ 
-	if (!djConfig.isDebug) { return; }
+dojo.debug = function () {
+	if (!djConfig.isDebug) {
+		return;
+	}
 	var args = arguments;
 	var isJUM = dj_global["jum"];
-	var s = isJUM ? "": "DEBUG: ";
-	for (var i = 0; i < args.length; ++i){ s += args[i]; }
-	if (isJUM){ // this seems to be the only way to get JUM to "play nice"
+	var s = isJUM ? "" : "DEBUG: ";
+	for (var i = 0; i < args.length; ++i) {
+		s += args[i];
+	}
+	if (isJUM) {
 		jum.debug(s);
-	} else{ 
+	} else {
 		dojo.hostenv.println(s);
 	}
 };
-
-//	set up dojo.render.
 dojo.render.name = navigator.appName;
 dojo.render.ver = parseFloat(navigator.appVersion, 10);
-switch(navigator.platform){
-	case "MacOS":
-		dojo.render.os.osx =  true;
-		break;
-	case "Linux":
-		dojo.render.os.linux =  true;
-		break;
-	case "Windows":
-		dojo.render.os.win =  true;
-		break;
-	default:
-		dojo.render.os.linux = true;
-		break;
-};
+switch (navigator.platform) {
+  case "MacOS":
+	dojo.render.os.osx = true;
+	break;
+  case "Linux":
+	dojo.render.os.linux = true;
+	break;
+  case "Windows":
+	dojo.render.os.win = true;
+	break;
+  default:
+	dojo.render.os.linux = true;
+	break;
+}
 dojo.render.svg.capable = true;
 dojo.render.svg.support.builtin = true;
-//	FIXME the following two is a big-ass hack for now.
 dojo.render.svg.moz = ((navigator.userAgent.indexOf("Gecko") >= 0) && (!((navigator.appVersion.indexOf("Konqueror") >= 0) || (navigator.appVersion.indexOf("Safari") >= 0))));
 dojo.render.svg.adobe = (window.parseXML != null);
-
-//	agent-specific implementations.
-
-//	from old hostenv_adobesvg.
 dojo.hostenv.startPackage("dojo.hostenv");
-dojo.hostenv.println = function(s){ 
+dojo.hostenv.println = function (s) {
 	try {
 		var ti = document.createElement("text");
-		ti.setAttribute("x","50");
+		ti.setAttribute("x", "50");
 		ti.setAttribute("y", (25 + 15 * document.getElementsByTagName("text").length));
 		ti.appendChild(document.createTextNode(s));
 		document.documentElement.appendChild(ti);
-	} catch(e){ }
+	}
+	catch (e) {
+	}
 };
 dojo.hostenv.name_ = "svg";
-
-//	expected/defined by bootstrap1.js
-dojo.hostenv.setModulePrefix = function(module, prefix){ };
-dojo.hostenv.getModulePrefix = function(module){ };
+dojo.hostenv.setModulePrefix = function (module, prefix) {
+};
+dojo.hostenv.getModulePrefix = function (module) {
+};
 dojo.hostenv.getTextStack = [];
 dojo.hostenv.loadUriStack = [];
 dojo.hostenv.loadedUris = [];
 dojo.hostenv.modules_ = {};
 dojo.hostenv.modulesLoadedFired = false;
 dojo.hostenv.modulesLoadedListeners = [];
-dojo.hostenv.getText = function(uri, cb, data){ 
-	if (!cb) var cb = function(result){ window.alert(result); };
+dojo.hostenv.getText = function (uri, cb, data) {
+	if (!cb) {
+		var cb = function (result) {
+			window.alert(result);
+		};
+	}
 	if (!data) {
 		window.getUrl(uri, cb);
 	} else {
 		window.postUrl(uri, data, cb);
 	}
 };
-dojo.hostenv.getLibaryScriptUri = function(){ };
-
-dojo.hostenv.loadUri = function(uri){ };
-dojo.hostenv.loadUriAndCheck = function(uri, module){ };
-
-//	aliased in loader.js, don't ignore
-//	we are going to kill loadModule for the first round of SVG stuff, and include stuff manually.
-dojo.hostenv.loadModule = function(moduleName){
-	//	just like startPackage, but this time we're just checking to make sure it exists already.
+dojo.hostenv.getLibaryScriptUri = function () {
+};
+dojo.hostenv.loadUri = function (uri) {
+};
+dojo.hostenv.loadUriAndCheck = function (uri, module) {
+};
+dojo.hostenv.loadModule = function (moduleName) {
 	var a = moduleName.split(".");
 	var currentObj = window;
 	var s = [];
-	for (var i = 0; i < a.length; i++){
-		if (a[i] == "*") continue;
+	for (var i = 0; i < a.length; i++) {
+		if (a[i] == "*") {
+			continue;
+		}
 		s.push(a[i]);
-		if (!currentObj[a[i]]){
+		if (!currentObj[a[i]]) {
 			dojo.raise("dojo.require('" + moduleName + "'): module does not exist.");
-		} else currentObj = currentObj[a[i]];
+		} else {
+			currentObj = currentObj[a[i]];
+		}
 	}
-	return; 
+	return;
 };
-dojo.hostenv.startPackage = function(moduleName){
+dojo.hostenv.startPackage = function (moduleName) {
 	var a = moduleName.split(".");
 	var currentObj = window;
 	var s = [];
-	for (var i = 0; i < a.length; i++){
-		if (a[i] == "*") continue;
+	for (var i = 0; i < a.length; i++) {
+		if (a[i] == "*") {
+			continue;
+		}
 		s.push(a[i]);
-		if (!currentObj[a[i]]) currentObj[a[i]] = {};
+		if (!currentObj[a[i]]) {
+			currentObj[a[i]] = {};
+		}
 		currentObj = currentObj[a[i]];
 	}
-	return; 
+	return;
 };
-
-//	wrapper objects for ASVG
-if (window.parseXML){
-	window.XMLSerialzer = function(){
-		//	based on WebFX RichTextControl getXHTML() function.
+if (window.parseXML) {
+	window.XMLSerialzer = function () {
 		function nodeToString(n, a) {
-			function fixText(s) { return String(s).replace(/\&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;"); }
-			function fixAttribute(s) { return fixText(s).replace(/\"/g, "&quot;"); }
+			function fixText(s) {
+				return String(s).replace(/\&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;");
+			}
+			function fixAttribute(s) {
+				return fixText(s).replace(/\"/g, "&quot;");
+			}
 			switch (n.nodeType) {
-				case 1:	{	//	ELEMENT
-					var name = n.nodeName;
-					a.push("<" + name);
-					for (var i = 0; i < n.attributes.length; i++) {
-						if (n.attributes.item(i).specified) {
-							a.push(" " + n.attributes.item(i).nodeName.toLowerCase() + "=\"" + fixAttribute(n.attributes.item(i).nodeValue) + "\"");
-						}
+			  case 1:
+				var name = n.nodeName;
+				a.push("<" + name);
+				for (var i = 0; i < n.attributes.length; i++) {
+					if (n.attributes.item(i).specified) {
+						a.push(" " + n.attributes.item(i).nodeName.toLowerCase() + "=\"" + fixAttribute(n.attributes.item(i).nodeValue) + "\"");
 					}
-					if (n.canHaveChildren || n.hasChildNodes()) {
-						a.push(">");
-						for (var i = 0; i < n.childNodes.length; i++) nodeToString(n.childNodes.item(i), a);
-						a.push("</" + name + ">\n");
-					} else a.push(" />\n");
-					break;
 				}
-				case 3: {	//	TEXT
-					a.push(fixText(n.nodeValue));
-					break;
+				if (n.canHaveChildren || n.hasChildNodes()) {
+					a.push(">");
+					for (var i = 0; i < n.childNodes.length; i++) {
+						nodeToString(n.childNodes.item(i), a);
+					}
+					a.push("</" + name + ">\n");
+				} else {
+					a.push(" />\n");
 				}
-				case 4: {	//	CDATA
-					a.push("<![CDA" + "TA[\n" + n.nodeValue + "\n]" + "]>");
-					break;
+				break;
+			  case 3:
+				a.push(fixText(n.nodeValue));
+				break;
+			  case 4:
+				a.push("<![CDA" + "TA[\n" + n.nodeValue + "\n]" + "]>");
+				break;
+			  case 7:
+				a.push(n.nodeValue);
+				if (/(^<\?xml)|(^<\!DOCTYPE)/.test(n.nodeValue)) {
+					a.push("\n");
 				}
-				case 7:{	//	PROCESSING INSTRUCTION
-					a.push(n.nodeValue);
-					if (/(^<\?xml)|(^<\!DOCTYPE)/.test(n.nodeValue)) a.push("\n");
-					break;
+				break;
+			  case 8:
+				a.push("<!-- " + n.nodeValue + " -->\n");
+				break;
+			  case 9:
+			  case 11:
+				for (var i = 0; i < n.childNodes.length; i++) {
+					nodeToString(n.childNodes.item(i), a);
 				}
-				case 8:{	//	COMMENT
-					a.push("<!-- " + n.nodeValue + " -->\n");
-					break;
-				}
-				case 9:		//	DOCUMENT
-				case 11:{	//	DOCUMENT FRAGMENT
-					for (var i = 0; i < n.childNodes.length; i++) nodeToString(n.childNodes.item(i), a);
-					break;
-				}
-				default:{
-					a.push("<!--\nNot Supported:\n\n" + "nodeType: " + n.nodeType + "\nnodeName: " + n.nodeName + "\n-->");
-				}
+				break;
+			  default:
+				a.push("<!--\nNot Supported:\n\n" + "nodeType: " + n.nodeType + "\nnodeName: " + n.nodeName + "\n-->");
 			}
 		}
-		this.serializeToString = function(node){
+		this.serializeToString = function (node) {
 			var a = [];
 			nodeToString(node, a);
 			return a.join("");
 		};
 	};
-
-	window.DOMParser = function(){
-		//	mimetype is basically ignored
-		this.parseFromString = function(s){
+	window.DOMParser = function () {
+		this.parseFromString = function (s) {
 			return parseXML(s, window.document);
-		}
+		};
 	};
-
-	window.XMLHttpRequest = function(){
-		//	we ignore the setting and getting of content-type.
+	window.XMLHttpRequest = function () {
 		var uri = null;
 		var method = "POST";
-		var isAsync = true;	
-		var cb = function(d){
+		var isAsync = true;
+		var cb = function (d) {
 			this.responseText = d.content;
 			try {
 				this.responseXML = parseXML(this.responseText, window.document);
-			} catch(e){}
+			}
+			catch (e) {
+			}
 			this.status = "200";
 			this.statusText = "OK";
 			if (!d.success) {
@@ -7164,31 +4986,45 @@
 			this.onload();
 			this.onreadystatechange();
 		};
-		this.onload = function(){};
+		this.onload = function () {
+		};
 		this.readyState = 4;
-		this.onreadystatechange = function(){};
+		this.onreadystatechange = function () {
+		};
 		this.status = 0;
 		this.statusText = "";
 		this.responseBody = null;
 		this.responseStream = null;
 		this.responseXML = null;
 		this.responseText = null;
-		this.abort = function(){ return; };
-		this.getAllResponseHeaders = function(){ return []; };
-		this.getResponseHeader = function(n){ return null; };
-		this.setRequestHeader = function(nm, val){ };
-		this.open = function(meth, url, async){ 
+		this.abort = function () {
+			return;
+		};
+		this.getAllResponseHeaders = function () {
+			return [];
+		};
+		this.getResponseHeader = function (n) {
+			return null;
+		};
+		this.setRequestHeader = function (nm, val) {
+		};
+		this.open = function (meth, url, async) {
 			method = meth;
 			uri = url;
 		};
-		this.send = function(data){
+		this.send = function (data) {
 			var d = data || null;
-			if (method == "GET") getURL(uri, cb);
-			else postURL(uri, data, cb);
+			if (method == "GET") {
+				getURL(uri, cb);
+			} else {
+				postURL(uri, data, cb);
+			}
 		};
 	};
 }
+dojo.requireIf((djConfig["isDebug"] || djConfig["debugAtAllCosts"]), "dojo.debug");
 
+
 __CPAN_FILE__ src/math.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -7201,50 +5037,38 @@
 */
 
 dojo.provide("dojo.math");
-
-dojo.math.degToRad = function(/* float */x) {
-	//	summary
-	//	Converts degrees to radians.
-	return (x*Math.PI) / 180; 	//	float
-}
-dojo.math.radToDeg = function(/* float */x) { 
-	//	summary
-	//	Converts radians to degrees.
-	return (x*180) / Math.PI; 	//	float
-}
-
-dojo.math.factorial = function(/* integer */n){
-	//	summary
-	//	Returns n!
-	if(n<1){ return 0; }
+dojo.math.degToRad = function (x) {
+	return (x * Math.PI) / 180;
+};
+dojo.math.radToDeg = function (x) {
+	return (x * 180) / Math.PI;
+};
+dojo.math.factorial = function (n) {
+	if (n < 1) {
+		return 0;
+	}
 	var retVal = 1;
-	for(var i=1;i<=n;i++){ retVal *= i; }
-	return retVal;	//	integer
-}
-
-dojo.math.permutations = function(/* integer */n, /* integer */k) {
-	//	summary
-	//	The number of ways of obtaining an ordered subset of k elements from a set of n elements
-	if(n==0 || k==0) return 1;
-	return (dojo.math.factorial(n) / dojo.math.factorial(n-k));	//	float
-}
-
-dojo.math.combinations = function (/* integer */n, /* integer */r) {
-	//	summary
-	//	The number of ways of picking n unordered outcomes from r possibilities
-	if(n==0 || r==0) return 1;
-	return (dojo.math.factorial(n) / (dojo.math.factorial(n-r) * dojo.math.factorial(r)));	//	float
-}
-
-dojo.math.bernstein = function(/* float */t, /* float */n, /* float */i) {
-	//	summary
-	//	Calculates a weighted average based on the Bernstein theorem.
-	return (dojo.math.combinations(n,i) * Math.pow(t,i) * Math.pow(1-t,n-i));	//	float
-}
-
-dojo.math.gaussianRandom = function(){
-	//	summary
-	//	Returns random numbers with a Gaussian distribution, with the mean set at 0 and the variance set at 1.
+	for (var i = 1; i <= n; i++) {
+		retVal *= i;
+	}
+	return retVal;
+};
+dojo.math.permutations = function (n, k) {
+	if (n == 0 || k == 0) {
+		return 1;
+	}
+	return (dojo.math.factorial(n) / dojo.math.factorial(n - k));
+};
+dojo.math.combinations = function (n, r) {
+	if (n == 0 || r == 0) {
+		return 1;
+	}
+	return (dojo.math.factorial(n) / (dojo.math.factorial(n - r) * dojo.math.factorial(r)));
+};
+dojo.math.bernstein = function (t, n, i) {
+	return (dojo.math.combinations(n, i) * Math.pow(t, i) * Math.pow(1 - t, n - i));
+};
+dojo.math.gaussianRandom = function () {
 	var k = 2;
 	do {
 		var i = 2 * Math.random() - 1;
@@ -7252,72 +5076,63 @@
 		k = i * i + j * j;
 	} while (k >= 1);
 	k = Math.sqrt((-2 * Math.log(k)) / k);
-	return i * k;	//	float
-}
-
-dojo.math.mean = function() {
-	//	summary
-	//	Calculates the mean of an Array of numbers.
+	return i * k;
+};
+dojo.math.mean = function () {
 	var array = dojo.lang.isArray(arguments[0]) ? arguments[0] : arguments;
 	var mean = 0;
-	for (var i = 0; i < array.length; i++) { mean += array[i]; }
-	return mean / array.length;	//	float
-}
-
-dojo.math.round = function(/* float */number, /* integer */places) {
-	//	summary
-	//	Extends Math.round by adding a second argument specifying the number of decimal places to round to.
-	// TODO: add support for significant figures
-	if (!places) { var shift = 1; }
-	else { var shift = Math.pow(10, places); }
-	return Math.round(number * shift) / shift;	//	float
-}
-
-dojo.math.sd = dojo.math.standardDeviation = function(/* array */){
-	//	summary
-	//	Calculates the standard deviation of an Array of numbers
+	for (var i = 0; i < array.length; i++) {
+		mean += array[i];
+	}
+	return mean / array.length;
+};
+dojo.math.round = function (number, places) {
+	if (!places) {
+		var shift = 1;
+	} else {
+		var shift = Math.pow(10, places);
+	}
+	return Math.round(number * shift) / shift;
+};
+dojo.math.sd = dojo.math.standardDeviation = function () {
 	var array = dojo.lang.isArray(arguments[0]) ? arguments[0] : arguments;
-	return Math.sqrt(dojo.math.variance(array));	//	float
-}
-
-dojo.math.variance = function(/* array */) {
-	//	summary
-	//	Calculates the variance of an Array of numbers
+	return Math.sqrt(dojo.math.variance(array));
+};
+dojo.math.variance = function () {
 	var array = dojo.lang.isArray(arguments[0]) ? arguments[0] : arguments;
 	var mean = 0, squares = 0;
 	for (var i = 0; i < array.length; i++) {
 		mean += array[i];
 		squares += Math.pow(array[i], 2);
 	}
-	return (squares / array.length) - Math.pow(mean / array.length, 2);	//	float
-}
+	return (squares / array.length) - Math.pow(mean / array.length, 2);
+};
+dojo.math.range = function (a, b, step) {
+	if (arguments.length < 2) {
+		b = a;
+		a = 0;
+	}
+	if (arguments.length < 3) {
+		step = 1;
+	}
+	var range = [];
+	if (step > 0) {
+		for (var i = a; i < b; i += step) {
+			range.push(i);
+		}
+	} else {
+		if (step < 0) {
+			for (var i = a; i > b; i += step) {
+				range.push(i);
+			}
+		} else {
+			throw new Error("dojo.math.range: step must be non-zero");
+		}
+	}
+	return range;
+};
 
-dojo.math.range = function(/* integer */a, /* integer */b, /* integer */step) {
-	//	summary
-	//	implementation of Python's range()
-    if(arguments.length < 2) {
-        b = a;
-        a = 0;
-    }
-    if(arguments.length < 3) {
-        step = 1;
-    }
 
-    var range = [];
-    if(step > 0) {
-        for(var i = a; i < b; i += step) {
-            range.push(i);
-        }
-    } else if(step < 0) {
-        for(var i = a; i > b; i += step) {
-            range.push(i);
-        }
-    } else {
-        throw new Error("dojo.math.range: step must be non-zero");
-    }
-    return range;	//	array
-}
-
 __CPAN_FILE__ src/a11y.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -7330,98 +5145,47 @@
 */
 
 dojo.provide("dojo.a11y");
-
 dojo.require("dojo.uri.*");
 dojo.require("dojo.html.common");
-
-dojo.a11y = {
-	// imgPath: String path to the test image for determining if images are displayed or not
-	// doAccessibleCheck: Boolean if true will perform check for need to create accessible widgets
-	// accessible: Boolean uninitialized when null (accessible check has not been performed)
-	//   if true generate accessible widgets
-	imgPath:dojo.uri.dojoUri("src/widget/templates/images"),
-	doAccessibleCheck: true,
-	accessible: null,		
-
-	checkAccessible: function(){ 
-	// summary: 
-	//		perform check for accessibility if accessibility checking is turned
-	//		on and the accessibility test has not been performed yet
-		if(this.accessible === null){ 
-			this.accessible = false; //default
-			if(this.doAccessibleCheck == true){ 
-				this.accessible = this.testAccessible();
-			}
+dojo.a11y = {imgPath:dojo.uri.moduleUri("dojo.widget", "templates/images"), doAccessibleCheck:true, accessible:null, checkAccessible:function () {
+	if (this.accessible === null) {
+		this.accessible = false;
+		if (this.doAccessibleCheck == true) {
+			this.accessible = this.testAccessible();
 		}
-		return this.accessible; /* Boolean */
-	},
-	
-	testAccessible: function(){
-	// summary: 
-	//		Always perform the accessibility check to determine if high 
-	//		contrast mode is on or display of images are turned off. Currently only checks 
-	//		in IE and Mozilla. 
-		this.accessible = false; //default
-		if (dojo.render.html.ie || dojo.render.html.mozilla){
-			var div = document.createElement("div");
-			//div.style.color="rgb(153,204,204)";
-			div.style.backgroundImage = "url(\"" + this.imgPath + "/tab_close.gif\")";
-			// must add to hierarchy before can view currentStyle below
-			dojo.body().appendChild(div);
-			// in FF and IE the value for the current background style of the added div
-			// will be "none" in high contrast mode
-			// in FF the return value will be url(invalid-url:) when running over http 
-			var bkImg = null;
-			if (window.getComputedStyle  ) {
-				var cStyle = getComputedStyle(div, ""); 
-				bkImg = cStyle.getPropertyValue("background-image");
-			}else{
-				bkImg = div.currentStyle.backgroundImage;
-			}
-			var bUseImgElem = false;
-			if (bkImg != null && (bkImg == "none" || bkImg == "url(invalid-url:)" )) {
-				this.accessible = true;
-			}
-			/*
-			if(this.accessible == false && document.images){
-				// test if images are off in IE
-				var testImg = new Image();
-				if(testImg.fileSize) {
-					testImg.src = this.imgPath + "/tab_close.gif";
-					if(testImg.fileSize < 0){ 
-						this.accessible = true;
-					}
-				}	
-			}*/
-			dojo.body().removeChild(div);
+	}
+	return this.accessible;
+}, testAccessible:function () {
+	this.accessible = false;
+	if (dojo.render.html.ie || dojo.render.html.mozilla) {
+		var div = document.createElement("div");
+		div.style.backgroundImage = "url(\"" + this.imgPath + "/tab_close.gif\")";
+		dojo.body().appendChild(div);
+		var bkImg = null;
+		if (window.getComputedStyle) {
+			var cStyle = getComputedStyle(div, "");
+			bkImg = cStyle.getPropertyValue("background-image");
+		} else {
+			bkImg = div.currentStyle.backgroundImage;
 		}
-		return this.accessible; /* Boolean */
-	},
-	
-	setCheckAccessible: function(/* Boolean */ bTest){ 
-	// summary: 
-	//		Set whether or not to check for accessibility mode.  Default value
-	//		of module is true - perform check for accessibility modes. 
-	//		bTest: Boolean - true to check; false to turn off checking
-		this.doAccessibleCheck = bTest;
-	},
-
-	setAccessibleMode: function(){
-	// summary:
-	//		perform the accessibility check and sets the correct mode to load 
-	//		a11y widgets. Only runs if test for accessiiblity has not been performed yet. 
-	//		Call testAccessible() to force the test.
-		if (this.accessible === null){
-			if (this.checkAccessible()){
-				dojo.render.html.prefixes.unshift("a11y");
-			}
+		var bUseImgElem = false;
+		if (bkImg != null && (bkImg == "none" || bkImg == "url(invalid-url:)")) {
+			this.accessible = true;
 		}
-		return this.accessible; /* Boolean */
+		dojo.body().removeChild(div);
 	}
-};
+	return this.accessible;
+}, setCheckAccessible:function (bTest) {
+	this.doAccessibleCheck = bTest;
+}, setAccessibleMode:function () {
+	if (this.accessible === null) {
+		if (this.checkAccessible()) {
+			dojo.render.html.prefixes.unshift("a11y");
+		}
+	}
+	return this.accessible;
+}};
 
-//dojo.hostenv.modulesLoadedListeners.unshift(function() { dojo.a11y.setAccessibleMode(); });
-//dojo.event.connect("before", dojo.hostenv, "makeWidgets", dojo.a11y, "setAccessibleMode");
 
 __CPAN_FILE__ src/event.js
 /*
@@ -7435,10 +5199,10 @@
 */
 
 dojo.provide("dojo.event");
-
 dojo.require("dojo.event.*");
 dojo.deprecated("dojo.event", "replaced by dojo.event.*", "0.5");
 
+
 __CPAN_FILE__ src/hostenv_browser.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -7450,55 +5214,55 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-if(typeof window != 'undefined'){
-
-	// attempt to figure out the path to dojo if it isn't set in the config
-	(function(){
-		// before we get any further with the config options, try to pick them out
-		// of the URL. Most of this code is from NW
-		if(djConfig.allowQueryConfig){
-			var baseUrl = document.location.toString(); // FIXME: use location.query instead?
+if (typeof window != "undefined") {
+	(function () {
+		if (djConfig.allowQueryConfig) {
+			var baseUrl = document.location.toString();
 			var params = baseUrl.split("?", 2);
-			if(params.length > 1){
+			if (params.length > 1) {
 				var paramStr = params[1];
 				var pairs = paramStr.split("&");
-				for(var x in pairs){
+				for (var x in pairs) {
 					var sp = pairs[x].split("=");
-					// FIXME: is this eval dangerous?
-					if((sp[0].length > 9)&&(sp[0].substr(0, 9) == "djConfig.")){
+					if ((sp[0].length > 9) && (sp[0].substr(0, 9) == "djConfig.")) {
 						var opt = sp[0].substr(9);
-						try{
-							djConfig[opt]=eval(sp[1]);
-						}catch(e){
-							djConfig[opt]=sp[1];
+						try {
+							djConfig[opt] = eval(sp[1]);
 						}
+						catch (e) {
+							djConfig[opt] = sp[1];
+						}
 					}
 				}
 			}
 		}
-
-		if(
-			((djConfig["baseScriptUri"] == "")||(djConfig["baseRelativePath"] == "")) && 
-			(document && document.getElementsByTagName)
-		){
+		if (((djConfig["baseScriptUri"] == "") || (djConfig["baseRelativePath"] == "")) && (document && document.getElementsByTagName)) {
 			var scripts = document.getElementsByTagName("script");
 			var rePkg = /(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i;
-			for(var i = 0; i < scripts.length; i++) {
+			for (var i = 0; i < scripts.length; i++) {
 				var src = scripts[i].getAttribute("src");
-				if(!src) { continue; }
+				if (!src) {
+					continue;
+				}
 				var m = src.match(rePkg);
-				if(m) {
+				if (m) {
 					var root = src.substring(0, m.index);
-					if(src.indexOf("bootstrap1") > -1) { root += "../"; }
-					if(!this["djConfig"]) { djConfig = {}; }
-					if(djConfig["baseScriptUri"] == "") { djConfig["baseScriptUri"] = root; }
-					if(djConfig["baseRelativePath"] == "") { djConfig["baseRelativePath"] = root; }
+					if (src.indexOf("bootstrap1") > -1) {
+						root += "../";
+					}
+					if (!this["djConfig"]) {
+						djConfig = {};
+					}
+					if (djConfig["baseScriptUri"] == "") {
+						djConfig["baseScriptUri"] = root;
+					}
+					if (djConfig["baseRelativePath"] == "") {
+						djConfig["baseRelativePath"] = root;
+					}
 					break;
 				}
 			}
 		}
-
-		// fill in the rendering support information in dojo.render.*
 		var dr = dojo.render;
 		var drh = dojo.render.html;
 		var drs = dojo.render.svg;
@@ -7508,476 +5272,351 @@
 		var f = false;
 		drh.capable = t;
 		drh.support.builtin = t;
-
 		dr.ver = parseFloat(drh.AV);
 		dr.os.mac = dav.indexOf("Macintosh") >= 0;
 		dr.os.win = dav.indexOf("Windows") >= 0;
-		// could also be Solaris or something, but it's the same browser
 		dr.os.linux = dav.indexOf("X11") >= 0;
-
 		drh.opera = dua.indexOf("Opera") >= 0;
-		drh.khtml = (dav.indexOf("Konqueror") >= 0)||(dav.indexOf("Safari") >= 0);
+		drh.khtml = (dav.indexOf("Konqueror") >= 0) || (dav.indexOf("Safari") >= 0);
 		drh.safari = dav.indexOf("Safari") >= 0;
 		var geckoPos = dua.indexOf("Gecko");
-		drh.mozilla = drh.moz = (geckoPos >= 0)&&(!drh.khtml);
+		drh.mozilla = drh.moz = (geckoPos >= 0) && (!drh.khtml);
 		if (drh.mozilla) {
-			// gecko version is YYYYMMDD
 			drh.geckoVersion = dua.substring(geckoPos + 6, geckoPos + 14);
 		}
-		drh.ie = (document.all)&&(!drh.opera);
-		drh.ie50 = drh.ie && dav.indexOf("MSIE 5.0")>=0;
-		drh.ie55 = drh.ie && dav.indexOf("MSIE 5.5")>=0;
-		drh.ie60 = drh.ie && dav.indexOf("MSIE 6.0")>=0;
-		drh.ie70 = drh.ie && dav.indexOf("MSIE 7.0")>=0;
-
+		drh.ie = (document.all) && (!drh.opera);
+		drh.ie50 = drh.ie && dav.indexOf("MSIE 5.0") >= 0;
+		drh.ie55 = drh.ie && dav.indexOf("MSIE 5.5") >= 0;
+		drh.ie60 = drh.ie && dav.indexOf("MSIE 6.0") >= 0;
+		drh.ie70 = drh.ie && dav.indexOf("MSIE 7.0") >= 0;
 		var cm = document["compatMode"];
-		drh.quirks = (cm == "BackCompat")||(cm == "QuirksMode")||drh.ie55||drh.ie50;
-
-		// TODO: is the HTML LANG attribute relevant?
+		drh.quirks = (cm == "BackCompat") || (cm == "QuirksMode") || drh.ie55 || drh.ie50;
 		dojo.locale = dojo.locale || (drh.ie ? navigator.userLanguage : navigator.language).toLowerCase();
-
-		dr.vml.capable=drh.ie;
+		dr.vml.capable = drh.ie;
 		drs.capable = f;
 		drs.support.plugin = f;
 		drs.support.builtin = f;
 		var tdoc = window["document"];
 		var tdi = tdoc["implementation"];
-
-		if((tdi)&&(tdi["hasFeature"])&&(tdi.hasFeature("org.w3c.dom.svg", "1.0"))){
+		if ((tdi) && (tdi["hasFeature"]) && (tdi.hasFeature("org.w3c.dom.svg", "1.0"))) {
 			drs.capable = t;
 			drs.support.builtin = t;
 			drs.support.plugin = f;
 		}
-		// webkits after 420 support SVG natively. The test string is "AppleWebKit/420+"
-		if(drh.safari){
+		if (drh.safari) {
 			var tmp = dua.split("AppleWebKit/")[1];
 			var ver = parseFloat(tmp.split(" ")[0]);
-			if(ver >= 420){
+			if (ver >= 420) {
 				drs.capable = t;
 				drs.support.builtin = t;
 				drs.support.plugin = f;
 			}
-		}else{
+		} else {
 		}
 	})();
-
 	dojo.hostenv.startPackage("dojo.hostenv");
-
-	dojo.render.name = dojo.hostenv.name_ = 'browser';
+	dojo.render.name = dojo.hostenv.name_ = "browser";
 	dojo.hostenv.searchIds = [];
-
-	// These are in order of decreasing likelihood; this will change in time.
-	dojo.hostenv._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
-
-	dojo.hostenv.getXmlhttpObject = function(){
-		// summary: does the work of portably generating a new XMLHTTPRequest object.
+	dojo.hostenv._XMLHTTP_PROGIDS = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP", "Msxml2.XMLHTTP.4.0"];
+	dojo.hostenv.getXmlhttpObject = function () {
 		var http = null;
 		var last_e = null;
-		try{ http = new XMLHttpRequest(); }catch(e){}
-		if(!http){
-			for(var i=0; i<3; ++i){
+		try {
+			http = new XMLHttpRequest();
+		}
+		catch (e) {
+		}
+		if (!http) {
+			for (var i = 0; i < 3; ++i) {
 				var progid = dojo.hostenv._XMLHTTP_PROGIDS[i];
-				try{
+				try {
 					http = new ActiveXObject(progid);
-				}catch(e){
+				}
+				catch (e) {
 					last_e = e;
 				}
-
-				if(http){
-					dojo.hostenv._XMLHTTP_PROGIDS = [progid];  // so faster next time
+				if (http) {
+					dojo.hostenv._XMLHTTP_PROGIDS = [progid];
 					break;
 				}
 			}
-
-			/*if(http && !http.toString) {
-				http.toString = function() { "[object XMLHttpRequest]"; }
-			}*/
 		}
-
-		if(!http){
+		if (!http) {
 			return dojo.raise("XMLHTTP not available", last_e);
 		}
-
-		return http; // XMLHTTPRequest instance
-	}
-
+		return http;
+	};
 	dojo.hostenv._blockAsync = false;
-	dojo.hostenv.getText = function(uri, async_cb, fail_ok){
-		// summary: Read the contents of the specified uri and return those contents.
-		// uri:
-		//		A relative or absolute uri. If absolute, it still must be in
-		//		the same "domain" as we are.
-		// async_cb:
-		//		If not specified, load synchronously. If specified, load
-		//		asynchronously, and use async_cb as the progress handler which
-		//		takes the xmlhttp object as its argument. If async_cb, this
-		//		function returns null.
-		// fail_ok:
-		//		Default false. If fail_ok and !async_cb and loading fails,
-		//		return null instead of throwing.
-
-		// need to block async callbacks from snatching this thread as the result
-		// of an async callback might call another sync XHR, this hangs khtml forever
-		// hostenv._blockAsync must also be checked in BrowserIO's watchInFlight()
-		// NOTE: must be declared before scope switches ie. this.getXmlhttpObject()
-		if(!async_cb){ this._blockAsync = true; }
-
+	dojo.hostenv.getText = function (uri, async_cb, fail_ok) {
+		if (!async_cb) {
+			this._blockAsync = true;
+		}
 		var http = this.getXmlhttpObject();
-
-		function isDocumentOk(http){
+		function isDocumentOk(http) {
 			var stat = http["status"];
-			// allow a 304 use cache, needed in konq (is this compliant with the http spec?)
-			return Boolean((!stat)||((200 <= stat)&&(300 > stat))||(stat==304));
+			return Boolean((!stat) || ((200 <= stat) && (300 > stat)) || (stat == 304));
 		}
-
-		if(async_cb){
+		if (async_cb) {
 			var _this = this, timer = null, gbl = dojo.global();
 			var xhr = dojo.evalObjPath("dojo.io.XMLHTTPTransport");
-			http.onreadystatechange = function(){
-				if(timer){ gbl.clearTimeout(timer); timer = null; }
-				if(_this._blockAsync || (xhr && xhr._blockAsync)){
-					timer = gbl.setTimeout(function () { http.onreadystatechange.apply(this); }, 10);
-				}else{
-					if(4==http.readyState){
-						if(isDocumentOk(http)){
-							// dojo.debug("LOADED URI: "+uri);
+			http.onreadystatechange = function () {
+				if (timer) {
+					gbl.clearTimeout(timer);
+					timer = null;
+				}
+				if (_this._blockAsync || (xhr && xhr._blockAsync)) {
+					timer = gbl.setTimeout(function () {
+						http.onreadystatechange.apply(this);
+					}, 10);
+				} else {
+					if (4 == http.readyState) {
+						if (isDocumentOk(http)) {
 							async_cb(http.responseText);
 						}
 					}
 				}
-			}
+			};
 		}
-
-		http.open('GET', uri, async_cb ? true : false);
-		try{
+		http.open("GET", uri, async_cb ? true : false);
+		try {
 			http.send(null);
-			if(async_cb){
+			if (async_cb) {
 				return null;
 			}
-			if(!isDocumentOk(http)){
-				var err = Error("Unable to load "+uri+" status:"+ http.status);
+			if (!isDocumentOk(http)) {
+				var err = Error("Unable to load " + uri + " status:" + http.status);
 				err.status = http.status;
 				err.responseText = http.responseText;
 				throw err;
 			}
-		}catch(e){
+		}
+		catch (e) {
 			this._blockAsync = false;
-			if((fail_ok)&&(!async_cb)){
+			if ((fail_ok) && (!async_cb)) {
 				return null;
-			}else{
+			} else {
 				throw e;
 			}
 		}
-
 		this._blockAsync = false;
-		return http.responseText; // String
-	}
-
-	dojo.hostenv.defaultDebugContainerId = 'dojoDebug';
+		return http.responseText;
+	};
+	dojo.hostenv.defaultDebugContainerId = "dojoDebug";
 	dojo.hostenv._println_buffer = [];
 	dojo.hostenv._println_safe = false;
-	dojo.hostenv.println = function(/*String*/line){
-		// summary:
-		//		prints the provided line to whatever logging container is
-		//		available. If the page isn't loaded yet, the line may be added
-		//		to a buffer for printing later.
-		if(!dojo.hostenv._println_safe){
+	dojo.hostenv.println = function (line) {
+		if (!dojo.hostenv._println_safe) {
 			dojo.hostenv._println_buffer.push(line);
-		}else{
+		} else {
 			try {
-				var console = document.getElementById(djConfig.debugContainerId ?
-					djConfig.debugContainerId : dojo.hostenv.defaultDebugContainerId);
-				if(!console) { console = dojo.body(); }
-
+				var console = document.getElementById(djConfig.debugContainerId ? djConfig.debugContainerId : dojo.hostenv.defaultDebugContainerId);
+				if (!console) {
+					console = dojo.body();
+				}
 				var div = document.createElement("div");
 				div.appendChild(document.createTextNode(line));
 				console.appendChild(div);
-			} catch (e) {
-				try{
-					// safari needs the output wrapped in an element for some reason
+			}
+			catch (e) {
+				try {
 					document.write("<div>" + line + "</div>");
-				}catch(e2){
+				}
+				catch (e2) {
 					window.status = line;
 				}
 			}
 		}
-	}
-
-	dojo.addOnLoad(function(){
+	};
+	dojo.addOnLoad(function () {
 		dojo.hostenv._println_safe = true;
-		while(dojo.hostenv._println_buffer.length > 0){
+		while (dojo.hostenv._println_buffer.length > 0) {
 			dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
 		}
 	});
-
-	function dj_addNodeEvtHdlr(/*DomNode*/node, /*String*/evtName, /*Function*/fp){
-		// summary:
-		//		non-destructively adds the specified function to the node's
-		//		evtName handler.
-		// node: the DomNode to add the handler to
-		// evtName: should be in the form "click" for "onclick" handlers
-		var oldHandler = node["on"+evtName] || function(){};
-		node["on"+evtName] = function(){
+	function dj_addNodeEvtHdlr(node, evtName, fp) {
+		var oldHandler = node["on" + evtName] || function () {
+		};
+		node["on" + evtName] = function () {
 			fp.apply(node, arguments);
 			oldHandler.apply(node, arguments);
-		}
+		};
 		return true;
 	}
-
-	//	BEGIN DOMContentLoaded, from Dean Edwards (http://dean.edwards.name/weblog/2006/06/again/)
-	function dj_load_init(e){
-		// allow multiple calls, only first one will take effect
-		// A bug in khtml calls events callbacks for document for event which isnt supported
-		// for example a created contextmenu event calls DOMContentLoaded, workaround
+	function dj_load_init(e) {
 		var type = (e && e.type) ? e.type.toLowerCase() : "load";
-		if(arguments.callee.initialized || (type!="domcontentloaded" && type!="load")){ return; }
+		if (arguments.callee.initialized || (type != "domcontentloaded" && type != "load")) {
+			return;
+		}
 		arguments.callee.initialized = true;
-		if(typeof(_timer) != 'undefined'){
+		if (typeof (_timer) != "undefined") {
 			clearInterval(_timer);
 			delete _timer;
 		}
-
-		var initFunc = function(){
-			//perform initialization
-			if(dojo.render.html.ie){
+		var initFunc = function () {
+			if (dojo.render.html.ie) {
 				dojo.hostenv.makeWidgets();
 			}
 		};
-
-		if(dojo.hostenv.inFlightCount == 0){
+		if (dojo.hostenv.inFlightCount == 0) {
 			initFunc();
 			dojo.hostenv.modulesLoaded();
-		}else{
-			//This else case should be xdomain loading.
-			//Make sure this is the first thing in the load listener array.
-			//Part of the dojo.addOnLoad guarantee is that when the listeners are notified,
-			//It means the DOM (or page) has loaded and that widgets have been parsed.
+		} else {
 			dojo.hostenv.modulesLoadedListeners.unshift(initFunc);
 		}
 	}
-
-	//	START DOMContentLoaded
-	// Mozilla and Opera 9 expose the event we could use
-	if(document.addEventListener){
-		if(dojo.render.html.opera || (dojo.render.html.moz && !djConfig.delayMozLoadingFix)){
+	if (document.addEventListener) {
+		if (dojo.render.html.opera || (dojo.render.html.moz && (djConfig["enableMozDomContentLoaded"] === true))) {
 			document.addEventListener("DOMContentLoaded", dj_load_init, null);
 		}
-
-		//	mainly for Opera 8.5, won't be fired if DOMContentLoaded fired already.
-		//  also used for Mozilla because of trac #1640
 		window.addEventListener("load", dj_load_init, null);
 	}
-
-	// 	for Internet Explorer. readyState will not be achieved on init call, but dojo doesn't need it
-	//	however, we'll include it because we don't know if there are other functions added that might.
-	//	Note that this has changed because the build process strips all comments--including conditional
-	//		ones.
-	if(dojo.render.html.ie && dojo.render.os.win){
-		document.attachEvent("onreadystatechange", function(e){
-			if(document.readyState == "complete"){
+	if (dojo.render.html.ie && dojo.render.os.win) {
+		document.attachEvent("onreadystatechange", function (e) {
+			if (document.readyState == "complete") {
 				dj_load_init();
 			}
 		});
 	}
-
-	if (/(WebKit|khtml)/i.test(navigator.userAgent)) { // sniff
-		var _timer = setInterval(function() {
+	if (/(WebKit|khtml)/i.test(navigator.userAgent)) {
+		var _timer = setInterval(function () {
 			if (/loaded|complete/.test(document.readyState)) {
-				dj_load_init(); // call the onload handler
+				dj_load_init();
 			}
 		}, 10);
 	}
-	//	END DOMContentLoaded
-
-	// IE WebControl hosted in an application can fire "beforeunload" and "unload"
-	// events when control visibility changes, causing Dojo to unload too soon. The
-	// following code fixes the problem
-	// Reference: http://support.microsoft.com/default.aspx?scid=kb;en-us;199155
-	if(dojo.render.html.ie){
-		dj_addNodeEvtHdlr(window, "beforeunload", function(){
+	if (dojo.render.html.ie) {
+		dj_addNodeEvtHdlr(window, "beforeunload", function () {
 			dojo.hostenv._unloading = true;
-			window.setTimeout(function() {
+			window.setTimeout(function () {
 				dojo.hostenv._unloading = false;
 			}, 0);
 		});
 	}
-
-	dj_addNodeEvtHdlr(window, "unload", function(){
+	dj_addNodeEvtHdlr(window, "unload", function () {
 		dojo.hostenv.unloaded();
-		if((!dojo.render.html.ie)||(dojo.render.html.ie && dojo.hostenv._unloading)){
+		if ((!dojo.render.html.ie) || (dojo.render.html.ie && dojo.hostenv._unloading)) {
 			dojo.hostenv.unloaded();
 		}
 	});
-
-	dojo.hostenv.makeWidgets = function(){
-		// you can put searchIds in djConfig and dojo.hostenv at the moment
-		// we should probably eventually move to one or the other
+	dojo.hostenv.makeWidgets = function () {
 		var sids = [];
-		if(djConfig.searchIds && djConfig.searchIds.length > 0) {
+		if (djConfig.searchIds && djConfig.searchIds.length > 0) {
 			sids = sids.concat(djConfig.searchIds);
 		}
-		if(dojo.hostenv.searchIds && dojo.hostenv.searchIds.length > 0) {
+		if (dojo.hostenv.searchIds && dojo.hostenv.searchIds.length > 0) {
 			sids = sids.concat(dojo.hostenv.searchIds);
 		}
-
-		if((djConfig.parseWidgets)||(sids.length > 0)){
-			if(dojo.evalObjPath("dojo.widget.Parse")){
-				// we must do this on a delay to avoid:
-				//	http://www.shaftek.org/blog/archives/000212.html
-				// (IE bug)
-					var parser = new dojo.xml.Parse();
-					if(sids.length > 0){
-						for(var x=0; x<sids.length; x++){
-							var tmpNode = document.getElementById(sids[x]);
-							if(!tmpNode){ continue; }
-							var frag = parser.parseElement(tmpNode, null, true);
-							dojo.widget.getParser().createComponents(frag);
+		if ((djConfig.parseWidgets) || (sids.length > 0)) {
+			if (dojo.evalObjPath("dojo.widget.Parse")) {
+				var parser = new dojo.xml.Parse();
+				if (sids.length > 0) {
+					for (var x = 0; x < sids.length; x++) {
+						var tmpNode = document.getElementById(sids[x]);
+						if (!tmpNode) {
+							continue;
 						}
-					}else if(djConfig.parseWidgets){
-						var frag  = parser.parseElement(dojo.body(), null, true);
+						var frag = parser.parseElement(tmpNode, null, true);
 						dojo.widget.getParser().createComponents(frag);
 					}
+				} else {
+					if (djConfig.parseWidgets) {
+						var frag = parser.parseElement(dojo.body(), null, true);
+						dojo.widget.getParser().createComponents(frag);
+					}
+				}
 			}
 		}
-	}
-
-	dojo.addOnLoad(function(){
-		if(!dojo.render.html.ie) {
+	};
+	dojo.addOnLoad(function () {
+		if (!dojo.render.html.ie) {
 			dojo.hostenv.makeWidgets();
 		}
 	});
-
-	try{
-		if(dojo.render.html.ie){
-			document.namespaces.add("v","urn:schemas-microsoft-com:vml");
+	try {
+		if (dojo.render.html.ie) {
+			document.namespaces.add("v", "urn:schemas-microsoft-com:vml");
 			document.createStyleSheet().addRule("v\\:*", "behavior:url(#default#VML)");
 		}
-	}catch(e){ }
-
-	// stub, over-ridden by debugging code. This will at least keep us from
-	// breaking when it's not included
-	dojo.hostenv.writeIncludes = function(){}
-
-	//TODOC:  HOW TO DOC THIS?
-	// @global: dj_currentDocument
-	// summary:
-	//		Current document object. 'dj_currentDocument' can be modified for temporary context shifting.
-	// description:
-	//    dojo.doc() returns dojo.currentDocument.
-	//		Refer to dojo.doc() rather than referring to 'window.document' to ensure your
-	//		code runs correctly in managed contexts.
-	if(!dj_undef("document", this)){
+	}
+	catch (e) {
+	}
+	dojo.hostenv.writeIncludes = function () {
+	};
+	if (!dj_undef("document", this)) {
 		dj_currentDocument = this.document;
 	}
-
-	dojo.doc = function(){
-		// summary:
-		//		return the document object associated with the dojo.global()
+	dojo.doc = function () {
 		return dj_currentDocument;
-	}
-
-	dojo.body = function(){
-		// summary:
-		//		return the body object associated with dojo.doc()
-		// Note: document.body is not defined for a strict xhtml document
+	};
+	dojo.body = function () {
 		return dojo.doc().body || dojo.doc().getElementsByTagName("body")[0];
-	}
-
-	dojo.byId = function(/*String*/id, /*DocumentElement*/doc){
-		// summary:
-		// 		similar to other library's "$" function, takes a string
-		// 		representing a DOM id or a DomNode and returns the
-		// 		corresponding DomNode. If a Node is passed, this function is a
-		// 		no-op. Returns a single DOM node or null, working around
-		// 		several browser-specific bugs to do so.
-		// id: DOM id or DOM Node
-		// doc:
-		//		optional, defaults to the current value of dj_currentDocument.
-		//		Can be used to retreive node references from other documents.
-		if((id)&&((typeof id == "string")||(id instanceof String))){
-			if(!doc){ doc = dj_currentDocument; }
+	};
+	dojo.byId = function (id, doc) {
+		if ((id) && ((typeof id == "string") || (id instanceof String))) {
+			if (!doc) {
+				doc = dj_currentDocument;
+			}
 			var ele = doc.getElementById(id);
-			// workaround bug in IE and Opera 8.2 where getElementById returns wrong element
-			if(ele && (ele.id != id) && doc.all){
+			if (ele && (ele.id != id) && doc.all) {
 				ele = null;
-				// get all matching elements with this id
 				eles = doc.all[id];
-				if(eles){
-					// if more than 1, choose first with the correct id
-					if(eles.length){
-						for(var i=0; i<eles.length; i++){
-							if(eles[i].id == id){
+				if (eles) {
+					if (eles.length) {
+						for (var i = 0; i < eles.length; i++) {
+							if (eles[i].id == id) {
 								ele = eles[i];
 								break;
 							}
 						}
-					// return 1 and only element
-					}else{
+					} else {
 						ele = eles;
 					}
 				}
 			}
-			return ele; // DomNode
+			return ele;
 		}
-		return id; // DomNode
-	}
-
-	dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocument){
-		// summary:
-		//		changes the behavior of many core Dojo functions that deal with
-		//		namespace and DOM lookup, changing them to work in a new global
-		//		context. The varibles dj_currentContext and dj_currentDocument
-		//		are modified as a result of calling this function.
+		return id;
+	};
+	dojo.setContext = function (globalObject, globalDocument) {
 		dj_currentContext = globalObject;
 		dj_currentDocument = globalDocument;
 	};
-
-	dojo._fireCallback = function(callback, context, cbArguments){
-		if((context)&&((typeof callback == "string")||(callback instanceof String))){
-			callback=context[callback];
+	dojo._fireCallback = function (callback, context, cbArguments) {
+		if ((context) && ((typeof callback == "string") || (callback instanceof String))) {
+			callback = context[callback];
 		}
-		return (context ? callback.apply(context, cbArguments || [ ]) : callback());
-	}
-
-	dojo.withGlobal = function(/*Object*/globalObject, /*Function*/callback, /*Object?*/thisObject, /*Array?*/cbArguments){
-		// summary:
-		//		Call callback with globalObject as dojo.global() and globalObject.document
-		//		as dojo.doc(). If provided, globalObject will be executed in the context of
-		//		object thisObject
-		// description:
-		//		When callback() returns or throws an error, the dojo.global() and dojo.doc() will
-		//		be restored to its previous state.
+		return (context ? callback.apply(context, cbArguments || []) : callback());
+	};
+	dojo.withGlobal = function (globalObject, callback, thisObject, cbArguments) {
 		var rval;
 		var oldGlob = dj_currentContext;
 		var oldDoc = dj_currentDocument;
-		try{
+		try {
 			dojo.setContext(globalObject, globalObject.document);
 			rval = dojo._fireCallback(callback, thisObject, cbArguments);
-		}finally{
+		}
+		finally {
 			dojo.setContext(oldGlob, oldDoc);
 		}
 		return rval;
-	}
-
-	dojo.withDoc = function (/*Object*/documentObject, /*Function*/callback, /*Object?*/thisObject, /*Array?*/cbArguments) {
-		// summary:
-		//		Call callback with documentObject as dojo.doc(). If provided, callback will be executed
-		//		in the context of object thisObject
-		// description:
-		//		When callback() returns or throws an error, the dojo.doc() will
-		//		be restored to its previous state.
+	};
+	dojo.withDoc = function (documentObject, callback, thisObject, cbArguments) {
 		var rval;
 		var oldDoc = dj_currentDocument;
-		try{
+		try {
 			dj_currentDocument = documentObject;
 			rval = dojo._fireCallback(callback, thisObject, cbArguments);
-		}finally{
+		}
+		finally {
 			dj_currentDocument = oldDoc;
 		}
 		return rval;
-	}
+	};
+}
+dojo.requireIf((djConfig["isDebug"] || djConfig["debugAtAllCosts"]), "dojo.debug");
+dojo.requireIf(djConfig["debugAtAllCosts"] && !window.widget && !djConfig["useXDomain"], "dojo.browser_debug");
+dojo.requireIf(djConfig["debugAtAllCosts"] && !window.widget && djConfig["useXDomain"], "dojo.browser_debug_xd");
 
-} //if (typeof window != 'undefined')
 
 __CPAN_FILE__ src/iCalendar.js
 /*
@@ -7993,6 +5632,7 @@
 dojo.require("dojo.cal.iCalendar");
 dojo.deprecated("dojo.icalendar", "use dojo.cal.iCalendar isntead", "0.5");
 
+
 __CPAN_FILE__ src/profile.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -8005,142 +5645,98 @@
 */
 
 dojo.provide("dojo.profile");
-
-// summary:
-//		provides a manual profiling utility that can be used to gather relative
-//		timing data.
-
-
-// FIXME: need to tie into the event system or provide a closure-based way to
-// watch timings of functions without manually instrumenting them.
-// FIXME: need to make the dump() function work in command line environments
-
-dojo.profile = {
-	_profiles: {},
-	_pns: [],
-
-	start:function(/*String*/ name){
-		// summary:
-		//		start an iteration for the profiling target with the specified
-		//		name. If a previously started iteration has not yet been ended
-		//		for this name, it's automatically closed out and a new
-		//		iteration begun.
-		// name:
-		//		a unique name to identify the thing being profiled
-		if(!this._profiles[name]){
-			this._profiles[name] = {iters: 0, total: 0};
-			this._pns[this._pns.length] = name;
-		}else{
-			if(this._profiles[name]["start"]){
-				this.end(name);
-			}
+dojo.profile = {_profiles:{}, _pns:[], start:function (name) {
+	if (!this._profiles[name]) {
+		this._profiles[name] = {iters:0, total:0};
+		this._pns[this._pns.length] = name;
+	} else {
+		if (this._profiles[name]["start"]) {
+			this.end(name);
 		}
-		this._profiles[name].end = null;
-		this._profiles[name].start = new Date();
-	},
-
-	end:function(/*String*/ name){
-		// summary:
-		//		closes a timing loop for the named profiling target
-		// name:
-		//		a unique name to identify the thing being profiled. The name
-		//		passed to end() should be the same as that passed to start()
-		var ed = new Date();
-		if((this._profiles[name])&&(this._profiles[name]["start"])){
-			with(this._profiles[name]){
-				end = ed;
-				total += (end - start);
-				start = null;
-				iters++;
-			}
-		}else{
-			// oops! bad call to end(), what should we do here?
-			return true;
+	}
+	this._profiles[name].end = null;
+	this._profiles[name].start = new Date();
+}, end:function (name) {
+	var ed = new Date();
+	if ((this._profiles[name]) && (this._profiles[name]["start"])) {
+		with (this._profiles[name]) {
+			end = ed;
+			total += (end - start);
+			start = null;
+			iters++;
 		}
-	},
-
-	dump:function(/*boolean*/ appendToDoc){
-		// summary:
-		//		output profiling data to an HTML table, optionally adding it to
-		//		the bottom of the document. If profiling data has already been
-		//		generated and appended to the document, it's replaced with the
-		//		new data.
-		// appendToDoc:
-		//		optional. Defautls to "false". Should profiling information be
-		//		added to the document?
-		var tbl = document.createElement("table");
-		with(tbl.style){
-			border = "1px solid black";
-			borderCollapse = "collapse";
+	} else {
+		return true;
+	}
+}, dump:function (appendToDoc) {
+	var tbl = document.createElement("table");
+	with (tbl.style) {
+		border = "1px solid black";
+		borderCollapse = "collapse";
+	}
+	var hdr = tbl.createTHead();
+	var hdrtr = hdr.insertRow(0);
+	var cols = ["Identifier", "Calls", "Total", "Avg"];
+	for (var x = 0; x < cols.length; x++) {
+		var ntd = hdrtr.insertCell(x);
+		with (ntd.style) {
+			backgroundColor = "#225d94";
+			color = "white";
+			borderBottom = "1px solid black";
+			borderRight = "1px solid black";
+			fontFamily = "tahoma";
+			fontWeight = "bolder";
+			paddingLeft = paddingRight = "5px";
 		}
-		var hdr = tbl.createTHead();
-		var hdrtr = hdr.insertRow(0);
-		// document.createElement("tr");
-		var cols = ["Identifier","Calls","Total","Avg"];
-		for(var x=0; x<cols.length; x++){
-			var ntd = hdrtr.insertCell(x);
-			with(ntd.style){
-				backgroundColor = "#225d94";
-				color = "white";
-				borderBottom = "1px solid black";
-				borderRight = "1px solid black";
-				fontFamily = "tahoma";
-				fontWeight = "bolder";
-				paddingLeft = paddingRight = "5px";
-			}
-			ntd.appendChild(document.createTextNode(cols[x]));
-		}
-
-		for(var x=0; x < this._pns.length; x++){
-			var prf = this._profiles[this._pns[x]];
-			this.end(this._pns[x]);
-			if(prf.iters>0){
-				var bdytr = tbl.insertRow(true);
-				var vals = [this._pns[x], prf.iters, prf.total, parseInt(prf.total/prf.iters)];
-				for(var y=0; y<vals.length; y++){
-					var cc = bdytr.insertCell(y);
-					cc.appendChild(document.createTextNode(vals[y]));
-					with(cc.style){
-						borderBottom = "1px solid gray";
-						paddingLeft = paddingRight = "5px";
-						if(x%2){
-							backgroundColor = "#e1f1ff";
-						}
-						if(y>0){
-							textAlign = "right";
-							borderRight = "1px solid gray";
-						}else{
-							borderRight = "1px solid black";
-						}
+		ntd.appendChild(document.createTextNode(cols[x]));
+	}
+	for (var x = 0; x < this._pns.length; x++) {
+		var prf = this._profiles[this._pns[x]];
+		this.end(this._pns[x]);
+		if (prf.iters > 0) {
+			var bdytr = tbl.insertRow(true);
+			var vals = [this._pns[x], prf.iters, prf.total, parseInt(prf.total / prf.iters)];
+			for (var y = 0; y < vals.length; y++) {
+				var cc = bdytr.insertCell(y);
+				cc.appendChild(document.createTextNode(vals[y]));
+				with (cc.style) {
+					borderBottom = "1px solid gray";
+					paddingLeft = paddingRight = "5px";
+					if (x % 2) {
+						backgroundColor = "#e1f1ff";
 					}
+					if (y > 0) {
+						textAlign = "right";
+						borderRight = "1px solid gray";
+					} else {
+						borderRight = "1px solid black";
+					}
 				}
 			}
 		}
-
-		if(appendToDoc){
-			var ne = document.createElement("div");
-			ne.id = "profileOutputTable";
-			with(ne.style){
-				fontFamily = "Courier New, monospace";
-				fontSize = "12px";
-				lineHeight = "16px";
-				borderTop = "1px solid black";
-				padding = "10px";
-			}
-			if(document.getElementById("profileOutputTable")){
-				dojo.body().replaceChild(ne, document.getElementById("profileOutputTable"));
-			}else{
-				dojo.body().appendChild(ne);
-			}
-			ne.appendChild(tbl);
+	}
+	if (appendToDoc) {
+		var ne = document.createElement("div");
+		ne.id = "profileOutputTable";
+		with (ne.style) {
+			fontFamily = "Courier New, monospace";
+			fontSize = "12px";
+			lineHeight = "16px";
+			borderTop = "1px solid black";
+			padding = "10px";
 		}
-
-		return tbl; // DOMNode
+		if (document.getElementById("profileOutputTable")) {
+			dojo.body().replaceChild(ne, document.getElementById("profileOutputTable"));
+		} else {
+			dojo.body().appendChild(ne);
+		}
+		ne.appendChild(tbl);
 	}
-}
-
+	return tbl;
+}};
 dojo.profile.stop = dojo.profile.end;
 
+
 __CPAN_FILE__ src/flash.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -8153,1252 +5749,439 @@
 */
 
 dojo.provide("dojo.flash");
-
 dojo.require("dojo.string.*");
 dojo.require("dojo.uri.*");
 dojo.require("dojo.html.common");
-
-dojo.flash = function(){
-	// summary:
-	//	The goal of dojo.flash is to make it easy to extend Flash's capabilities
-	//	into an AJAX/DHTML environment.
-	// description:  
-	//	The goal of dojo.flash is to make it easy to extend Flash's capabilities
-	//	into an AJAX/DHTML environment. Robust, performant, reliable 
-	//	JavaScript/Flash communication is harder than most realize when they
-	//	delve into the topic, especially if you want it
-	//	to work on Internet Explorer, Firefox, and Safari, and to be able to
-	//	push around hundreds of K of information quickly. Dojo.flash makes it
-	//	possible to support these platforms; you have to jump through a few
-	//	hoops to get its capabilites, but if you are a library writer 
-	//	who wants to bring Flash's storage or streaming sockets ability into
-	//	DHTML, for example, then dojo.flash is perfect for you.
-	//  
-	//	Dojo.flash provides an easy object for interacting with the Flash plugin. 
-	//	This object provides methods to determine the current version of the Flash
-	//	plugin (dojo.flash.info); execute Flash instance methods 
-	//	independent of the Flash version
-	//	being used (dojo.flash.comm); write out the necessary markup to 
-	//	dynamically insert a Flash object into the page (dojo.flash.Embed; and 
-	//	do dynamic installation and upgrading of the current Flash plugin in 
-	//	use (dojo.flash.Install).
-	//		
-	//	To use dojo.flash, you must first wait until Flash is finished loading 
-	//	and initializing before you attempt communication or interaction. 
-	//	To know when Flash is finished use dojo.event.connect:
-	//		
-	//	dojo.event.connect(dojo.flash, "loaded", myInstance, "myCallback");
-	//		
-	//	Then, while the page is still loading provide the file name
-	//	and the major version of Flash that will be used for Flash/JavaScript
-	//	communication (see "Flash Communication" below for information on the 
-	//	different kinds of Flash/JavaScript communication supported and how they 
-	//	depend on the version of Flash installed):
-	//		
-	//	dojo.flash.setSwf({flash6: "src/storage/storage_flash6.swf",
-	//										 flash8: "src/storage/storage_flash8.swf"});
-	//		
-	//	This will cause dojo.flash to pick the best way of communicating
-	//	between Flash and JavaScript based on the platform.
-	//		
-	//	If no SWF files are specified, then Flash is not initialized.
-	//		
-	//	Your Flash must use DojoExternalInterface to expose Flash methods and
-	//	to call JavaScript; see "Flash Communication" below for details.
-	//		
-	//	setSwf can take an optional 'visible' attribute to control whether
-	//	the Flash object is visible or not on the page; the default is visible:
-	//		
-	//	dojo.flash.setSwf({flash6: "src/storage/storage_flash6.swf",
-	//										 flash8: "src/storage/storage_flash8.swf",
-	//										 visible: false});
-	//		
-	//	Once finished, you can query Flash version information:
-	//		
-	//	dojo.flash.info.version
-	//		
-	//	Or can communicate with Flash methods that were exposed:
-	//		
-	//	var results = dojo.flash.comm.sayHello("Some Message");
-	//		
-	//	Only string values are currently supported for both arguments and
-	//	for return results. Everything will be cast to a string on both
-	//	the JavaScript and Flash sides.
-	//		
-	//	-------------------
-	//	Flash Communication
-	//	-------------------
-	//		
-	//	dojo.flash allows Flash/JavaScript communication in 
-	//	a way that can pass large amounts of data back and forth reliably and
-	//	very fast. The dojo.flash
-	//	framework encapsulates the specific way in which this communication occurs,
-	//	presenting a common interface to JavaScript irrespective of the underlying
-	//	Flash version.
-	//		
-	//	There are currently three major ways to do Flash/JavaScript communication
-	//	in the Flash community:
-	//		
-	//	1) Flash 6+ - Uses Flash methods, such as SetVariable and TCallLabel,
-	//	and the fscommand handler to do communication. Strengths: Very fast,
-	//	mature, and can send extremely large amounts of data; can do
-	//	synchronous method calls. Problems: Does not work on Safari; works on 
-	//	Firefox/Mac OS X only if Flash 8 plugin is installed; cryptic to work with.
-	//		
-	//	2) Flash 8+ - Uses ExternalInterface, which provides a way for Flash
-	//	methods to register themselves for callbacks from JavaScript, and a way
-	//	for Flash to call JavaScript. Strengths: Works on Safari; elegant to
-	//	work with; can do synchronous method calls. Problems: Extremely buggy 
-	//	(fails if there are new lines in the data, for example); performance
-	//	degrades drastically in O(n^2) time as data grows; locks up the browser while
-	//	it is communicating; does not work in Internet Explorer if Flash
-	//	object is dynamically added to page with document.writeln, DOM methods,
-	//	or innerHTML.
-	//		
-	//	3) Flash 6+ - Uses two seperate Flash applets, one that we 
-	//	create over and over, passing input data into it using the PARAM tag, 
-	//	which then uses a Flash LocalConnection to pass the data to the main Flash
-	//	applet; communication back to Flash is accomplished using a getURL
-	//	call with a javascript protocol handler, such as "javascript:myMethod()".
-	//	Strengths: the most cross browser, cross platform pre-Flash 8 method
-	//	of Flash communication known; works on Safari. Problems: Timing issues;
-	//	clunky and complicated; slow; can only send very small amounts of
-	//	data (several K); all method calls are asynchronous.
-	//		
-	//	dojo.flash.comm uses only the first two methods. This framework
-	//	was created primarily for dojo.storage, which needs to pass very large
-	//	amounts of data synchronously and reliably across the Flash/JavaScript
-	//	boundary. We use the first method, the Flash 6 method, on all platforms
-	//	that support it, while using the Flash 8 ExternalInterface method
-	//	only on Safari with some special code to help correct ExternalInterface's
-	//	bugs.
-	//		
-	//	Since dojo.flash needs to have two versions of the Flash
-	//	file it wants to generate, a Flash 6 and a Flash 8 version to gain
-	//	true cross-browser compatibility, several tools are provided to ease
-	//	development on the Flash side.
-	//		
-	//	In your Flash file, if you want to expose Flash methods that can be
-	//	called, use the DojoExternalInterface class to register methods. This
-	//	class is an exact API clone of the standard ExternalInterface class, but
-	//	can work in Flash 6+ browsers. Under the covers it uses the best
-	//	mechanism to do communication:
-	//		
-	//	class HelloWorld{
-	//		function HelloWorld(){
-	//			// Initialize the DojoExternalInterface class
-	//			DojoExternalInterface.initialize();
-	//			
-	//			// Expose your methods
-	//			DojoExternalInterface.addCallback("sayHello", this, this.sayHello);
-	//				
-	//			// Tell JavaScript that you are ready to have method calls
-	//			DojoExternalInterface.loaded();
-	//				
-	//			// Call some JavaScript
-	//			var resultsReady = function(results){
-	//				trace("Received the following results from JavaScript: " + results);
-	//			}
-	//			DojoExternalInterface.call("someJavaScriptMethod", resultsReady, 
-	//																	 someParameter);
-	//		}
-	//			
-	//		function sayHello(){ ... }
-	//			
-	//		static main(){ ... }
-	//	}
-	//		
-	//	DojoExternalInterface adds two new functions to the ExternalInterface
-	//	API: initialize() and loaded(). initialize() must be called before
-	//	any addCallback() or call() methods are run, and loaded() must be
-	//	called after you are finished adding your callbacks. Calling loaded()
-	//	will fire the dojo.flash.loaded() event, so that JavaScript can know that
-	//	Flash has finished loading and adding its callbacks, and can begin to
-	//	interact with the Flash file.
-	//		
-	//	To generate your SWF files, use the ant task
-	//	"buildFlash". You must have the open source Motion Twin ActionScript 
-	//	compiler (mtasc) installed and in your path to use the "buildFlash"
-	//	ant task; download and install mtasc from http://www.mtasc.org/.
-	//		
-	//		
-	//		
-	//	buildFlash usage:
-	//		
-	//	ant buildFlash -Ddojo.flash.file=../tests/flash/HelloWorld.as
-	//		
-	//	where "dojo.flash.file" is the relative path to your Flash 
-	//	ActionScript file.
-	//		
-	//	This will generate two SWF files, one ending in _flash6.swf and the other
-	//	ending in _flash8.swf in the same directory as your ActionScript method:
-	//		
-	//	HelloWorld_flash6.swf
-	//	HelloWorld_flash8.swf
-	//		
-	//	Initialize dojo.flash with the filename and Flash communication version to
-	//	use during page load; see the documentation for dojo.flash for details:
-	//		
-	//	dojo.flash.setSwf({flash6: "tests/flash/HelloWorld_flash6.swf",
-	//					 flash8: "tests/flash/HelloWorld_flash8.swf"});
-	//		
-	//	Now, your Flash methods can be called from JavaScript as if they are native
-	//	Flash methods, mirrored exactly on the JavaScript side:
-	//		
-	//	dojo.flash.comm.sayHello();
-	//		
-	//	Only Strings are supported being passed back and forth currently.
-	//		
-	//	JavaScript to Flash communication is synchronous; i.e., results are returned
-	//	directly from the method call:
-	//		
-	//	var results = dojo.flash.comm.sayHello();
-	//		
-	//	Flash to JavaScript communication is asynchronous due to limitations in
-	//	the underlying technologies; you must use a results callback to handle
-	//	results returned by JavaScript in your Flash AS files:
-	//		
-	//	var resultsReady = function(results){
-	//		trace("Received the following results from JavaScript: " + results);
-	//	}
-	//	DojoExternalInterface.call("someJavaScriptMethod", resultsReady);
-	//		
-	//		
-	//		
-	//	-------------------
-	//	Notes
-	//	-------------------
-	//		
-	//	If you have both Flash 6 and Flash 8 versions of your file:
-	//		
-	//	dojo.flash.setSwf({flash6: "tests/flash/HelloWorld_flash6.swf",
-	//					 flash8: "tests/flash/HelloWorld_flash8.swf"});
-	//											 
-	//	but want to force the browser to use a certain version of Flash for
-	//	all platforms (for testing, for example), use the djConfig
-	//	variable 'forceFlashComm' with the version number to force:
-	//		
-	//	var djConfig = { forceFlashComm: 6 };
-	//		
-	//	Two values are currently supported, 6 and 8, for the two styles of
-	//	communication described above. Just because you force dojo.flash
-	//	to use a particular communication style is no guarantee that it will
-	//	work; for example, Flash 8 communication doesn't work in Internet
-	//	Explorer due to bugs in Flash, and Flash 6 communication does not work
-	//	in Safari. It is best to let dojo.flash determine the best communication
-	//	mechanism, and to use the value above only for debugging the dojo.flash
-	//	framework itself.
-	//		
-	//	Also note that dojo.flash can currently only work with one Flash object
-	//	on the page; it and the API do not yet support multiple Flash objects on
-	//	the same page.
-	//		
-	//	We use some special tricks to get decent, linear performance
-	//	out of Flash 8's ExternalInterface on Safari; see the blog
-	//	post 
-	//	http://codinginparadise.org/weblog/2006/02/how-to-speed-up-flash-8s.html
-	//	for details.
-	//		
-	//	Your code can detect whether the Flash player is installing or having
-	//	its version revved in two ways. First, if dojo.flash detects that
-	//	Flash installation needs to occur, it sets dojo.flash.info.installing
-	//	to true. Second, you can detect if installation is necessary with the
-	//	following callback:
-	//		
-	//	dojo.event.connect(dojo.flash, "installing", myInstance, "myCallback");
-	//		
-	//	You can use this callback to delay further actions that might need Flash;
-	//	when installation is finished the full page will be refreshed and the
-	//	user will be placed back on your page with Flash installed.
-	//		
-	//	Two utility methods exist if you want to add loading and installing
-	//	listeners without creating dependencies on dojo.event; these are
-	//	'addLoadingListener' and 'addInstallingListener'.
-	//		
-	//	-------------------
-	//	Todo/Known Issues
-	//	-------------------
-	//
-	//	There are several tasks I was not able to do, or did not need to fix
-	//	to get dojo.storage out:		
-	//		
-	//	* When using Flash 8 communication, Flash method calls to JavaScript
-	//	are not working properly; serialization might also be broken for certain
-	//	invalid characters when it is Flash invoking JavaScript methods.
-	//	The Flash side needs to have more sophisticated serialization/
-	//	deserialization mechanisms like JavaScript currently has. The
-	//	test_flash2.html unit tests should also be updated to have much more
-	//	sophisticated Flash to JavaScript unit tests, including large
-	//	amounts of data.
-	//		
-	//	* On Internet Explorer, after doing a basic install, the page is
-	//	not refreshed or does not detect that Flash is now available. The way
-	//	to fix this is to create a custom small Flash file that is pointed to
-	//	during installation; when it is finished loading, it does a callback
-	//	that says that Flash installation is complete on IE, and we can proceed
-	//	to initialize the dojo.flash subsystem.
-	//		
-	//	Author- Brad Neuberg, bkn3 at columbia.edu
-}
-
-dojo.flash = {
-	flash6_version: null,
-	flash8_version: null,
-	ready: false,
-	_visible: true,
-	_loadedListeners: new Array(),
-	_installingListeners: new Array(),
-	
-	setSwf: function(/* Object */ fileInfo){
-		// summary: Sets the SWF files and versions we are using.
-		// fileInfo: Object
-		//	An object that contains two attributes, 'flash6' and 'flash8',
-		//	each of which contains the path to our Flash 6 and Flash 8 versions
-		//	of the file we want to script.
-		//
-		//	Example-
-		//		var swfloc6 = dojo.uri.dojoUri("Storage_version6.swf").toString();
-		//		var swfloc8 = dojo.uri.dojoUri("Storage_version8.swf").toString();
-		//		dojo.flash.setSwf({flash6: swfloc6, flash8: swfloc8, visible: false}); 	
-		
-		if(fileInfo == null || dojo.lang.isUndefined(fileInfo)){
-			return;
-		}
-		
-		if(fileInfo.flash6 != null && !dojo.lang.isUndefined(fileInfo.flash6)){
-			this.flash6_version = fileInfo.flash6;
-		}
-		
-		if(fileInfo.flash8 != null && !dojo.lang.isUndefined(fileInfo.flash8)){
-			this.flash8_version = fileInfo.flash8;
-		}
-		
-		if(!dojo.lang.isUndefined(fileInfo.visible)){
-			this._visible = fileInfo.visible;
-		}
-		
-		// initialize ourselves		
-		this._initialize();
-	},
-	
-	useFlash6: function(){ /* Boolean */
-		// summary: Returns whether we are using Flash 6 for communication on this platform.
-		
-		if(this.flash6_version == null){
-			return false;
-		}else if (this.flash6_version != null && dojo.flash.info.commVersion == 6){
-			// if we have a flash 6 version of this SWF, and this browser supports 
-			// communicating using Flash 6 features...
+dojo.flash = function () {
+};
+dojo.flash = {flash6_version:null, flash8_version:null, ready:false, _visible:true, _loadedListeners:new Array(), _installingListeners:new Array(), setSwf:function (fileInfo) {
+	if (fileInfo == null || dojo.lang.isUndefined(fileInfo)) {
+		return;
+	}
+	if (fileInfo.flash6 != null && !dojo.lang.isUndefined(fileInfo.flash6)) {
+		this.flash6_version = fileInfo.flash6;
+	}
+	if (fileInfo.flash8 != null && !dojo.lang.isUndefined(fileInfo.flash8)) {
+		this.flash8_version = fileInfo.flash8;
+	}
+	if (!dojo.lang.isUndefined(fileInfo.visible)) {
+		this._visible = fileInfo.visible;
+	}
+	this._initialize();
+}, useFlash6:function () {
+	if (this.flash6_version == null) {
+		return false;
+	} else {
+		if (this.flash6_version != null && dojo.flash.info.commVersion == 6) {
 			return true;
-		}else{
+		} else {
 			return false;
 		}
-	},
-	
-	useFlash8: function(){ /* Boolean */
-		// summary: Returns whether we are using Flash 8 for communication on this platform.
-		
-		if(this.flash8_version == null){
-			return false;
-		}else if (this.flash8_version != null && dojo.flash.info.commVersion == 8){
-			// if we have a flash 8 version of this SWF, and this browser supports
-			// communicating using Flash 8 features...
+	}
+}, useFlash8:function () {
+	if (this.flash8_version == null) {
+		return false;
+	} else {
+		if (this.flash8_version != null && dojo.flash.info.commVersion == 8) {
 			return true;
-		}else{
+		} else {
 			return false;
 		}
-	},
-	
-	addLoadedListener: function(/* Function */ listener){
-		// summary:
-		//	Adds a listener to know when Flash is finished loading. 
-		//	Useful if you don't want a dependency on dojo.event.
-		// listener: Function
-		//	A function that will be called when Flash is done loading.
-		
-		this._loadedListeners.push(listener);
-	},
-
-	addInstallingListener: function(/* Function */ listener){
-		// summary:
-		//	Adds a listener to know if Flash is being installed. 
-		//	Useful if you don't want a dependency on dojo.event.
-		// listener: Function
-		//	A function that will be called if Flash is being
-		//	installed
-		
-		this._installingListeners.push(listener);
-	},	
-	
-	loaded: function(){
-		// summary: Called back when the Flash subsystem is finished loading.
-		// description:
-		//	A callback when the Flash subsystem is finished loading and can be
-		//	worked with. To be notified when Flash is finished loading, connect
-		//	your callback to this method using the following:
-		//	
-		//	dojo.event.connect(dojo.flash, "loaded", myInstance, "myCallback");
-		
-		//dojo.debug("dojo.flash.loaded");
-		dojo.flash.ready = true;
-		if(dojo.flash._loadedListeners.length > 0){
-			for(var i = 0;i < dojo.flash._loadedListeners.length; i++){
-				dojo.flash._loadedListeners[i].call(null);
-			}
+	}
+}, addLoadedListener:function (listener) {
+	this._loadedListeners.push(listener);
+}, addInstallingListener:function (listener) {
+	this._installingListeners.push(listener);
+}, loaded:function () {
+	dojo.flash.ready = true;
+	if (dojo.flash._loadedListeners.length > 0) {
+		for (var i = 0; i < dojo.flash._loadedListeners.length; i++) {
+			dojo.flash._loadedListeners[i].call(null);
 		}
-	},
-	
-	installing: function(){
-		// summary: Called if Flash is being installed.
-		// description:
-		//	A callback to know if Flash is currently being installed or
-		//	having its version revved. To be notified if Flash is installing, connect
-		//	your callback to this method using the following:
-		//	
-		//	dojo.event.connect(dojo.flash, "installing", myInstance, "myCallback");
-		 
-		//dojo.debug("installing");
-		if(dojo.flash._installingListeners.length > 0){
-			for(var i = 0; i < dojo.flash._installingListeners.length; i++){
-				dojo.flash._installingListeners[i].call(null);
-			}
+	}
+}, installing:function () {
+	if (dojo.flash._installingListeners.length > 0) {
+		for (var i = 0; i < dojo.flash._installingListeners.length; i++) {
+			dojo.flash._installingListeners[i].call(null);
 		}
-	},
-	
-	// Initializes dojo.flash.
-	_initialize: function(){
-		//dojo.debug("dojo.flash._initialize");
-		// see if we need to rev or install Flash on this platform
-		var installer = new dojo.flash.Install();
-		dojo.flash.installer = installer;
-
-		if(installer.needed() == true){		
-			installer.install();
-		}else{
-			//dojo.debug("Writing object out");
-			// write the flash object into the page
-			dojo.flash.obj = new dojo.flash.Embed(this._visible);
-			dojo.flash.obj.write(dojo.flash.info.commVersion);
-			
-			// initialize the way we do Flash/JavaScript communication
-			dojo.flash.comm = new dojo.flash.Communicator();
-		}
 	}
-};
-
-
-dojo.flash.Info = function(){
-	// summary: A class that helps us determine whether Flash is available.
-	// description:
-	//	A class that helps us determine whether Flash is available,
-	//	it's major and minor versions, and what Flash version features should
-	//	be used for Flash/JavaScript communication. Parts of this code
-	//	are adapted from the automatic Flash plugin detection code autogenerated 
-	//	by the Macromedia Flash 8 authoring environment. 
-	//	
-	//	An instance of this class can be accessed on dojo.flash.info after
-	//	the page is finished loading.
-	//	
-	//	This constructor must be called before the page is finished loading.	
-	
-	// Visual basic helper required to detect Flash Player ActiveX control 
-	// version information on Internet Explorer
-	if(dojo.render.html.ie){
-		document.writeln('<script language="VBScript" type="text/vbscript"\>');
-		document.writeln('Function VBGetSwfVer(i)');
-		document.writeln('  on error resume next');
-		document.writeln('  Dim swControl, swVersion');
-		document.writeln('  swVersion = 0');
-		document.writeln('  set swControl = CreateObject("ShockwaveFlash.ShockwaveFlash." + CStr(i))');
-		document.writeln('  if (IsObject(swControl)) then');
-		document.writeln('    swVersion = swControl.GetVariable("$version")');
-		document.writeln('  end if');
-		document.writeln('  VBGetSwfVer = swVersion');
-		document.writeln('End Function');
-		document.writeln('</script\>');
+}, _initialize:function () {
+	var installer = new dojo.flash.Install();
+	dojo.flash.installer = installer;
+	if (installer.needed() == true) {
+		installer.install();
+	} else {
+		dojo.flash.obj = new dojo.flash.Embed(this._visible);
+		dojo.flash.obj.write(dojo.flash.info.commVersion);
+		dojo.flash.comm = new dojo.flash.Communicator();
 	}
-	
+}};
+dojo.flash.Info = function () {
+	if (dojo.render.html.ie) {
+		document.writeln("<script language=\"VBScript\" type=\"text/vbscript\">");
+		document.writeln("Function VBGetSwfVer(i)");
+		document.writeln("  on error resume next");
+		document.writeln("  Dim swControl, swVersion");
+		document.writeln("  swVersion = 0");
+		document.writeln("  set swControl = CreateObject(\"ShockwaveFlash.ShockwaveFlash.\" + CStr(i))");
+		document.writeln("  if (IsObject(swControl)) then");
+		document.writeln("	swVersion = swControl.GetVariable(\"$version\")");
+		document.writeln("  end if");
+		document.writeln("  VBGetSwfVer = swVersion");
+		document.writeln("End Function");
+		document.writeln("</script>");
+	}
 	this._detectVersion();
 	this._detectCommunicationVersion();
-}
-
-dojo.flash.Info.prototype = {
-	// version: String
-	//		The full version string, such as "8r22".
-	version: -1,
-	
-	// versionMajor, versionMinor, versionRevision: String
-	//		The major, minor, and revisions of the plugin. For example, if the
-	//		plugin is 8r22, then the major version is 8, the minor version is 0,
-	//		and the revision is 22. 
-	versionMajor: -1,
-	versionMinor: -1,
-	versionRevision: -1,
-	
-	// capable: Boolean
-	//		Whether this platform has Flash already installed.
-	capable: false,
-	
-	// commVersion: int
-	//		The major version number for how our Flash and JavaScript communicate.
-	//		This can currently be the following values:
-	//		6 - We use a combination of the Flash plugin methods, such as SetVariable
-	//		and TCallLabel, along with fscommands, to do communication.
-	//		8 - We use the ExternalInterface API. 
-	//		-1 - For some reason neither method is supported, and no communication
-	//		is possible. 
-	commVersion: 6,
-	
-	// installing: Boolean
-	//	Set if we are in the middle of a Flash installation session.
-	installing: false,
-	
-	isVersionOrAbove: function(
-							/* int */ reqMajorVer, 
-							/* int */ reqMinorVer, 
-							/* int */ reqVer){ /* Boolean */
-		// summary: 
-		//	Asserts that this environment has the given major, minor, and revision
-		//	numbers for the Flash player.
-		// description:
-		//	Asserts that this environment has the given major, minor, and revision
-		//	numbers for the Flash player. 
-		//	
-		//	Example- To test for Flash Player 7r14:
-		//	
-		//	dojo.flash.info.isVersionOrAbove(7, 0, 14)
-		// returns:
-		//	Returns true if the player is equal
-		//	or above the given version, false otherwise.
-		
-		// make the revision a decimal (i.e. transform revision 14 into
-		// 0.14
-		reqVer = parseFloat("." + reqVer);
-		
-		if(this.versionMajor >= reqMajorVer && this.versionMinor >= reqMinorVer
-			 && this.versionRevision >= reqVer){
-			return true;
-		}else{
-			return false;
+};
+dojo.flash.Info.prototype = {version:-1, versionMajor:-1, versionMinor:-1, versionRevision:-1, capable:false, commVersion:6, installing:false, isVersionOrAbove:function (reqMajorVer, reqMinorVer, reqVer) {
+	reqVer = parseFloat("." + reqVer);
+	if (this.versionMajor >= reqMajorVer && this.versionMinor >= reqMinorVer && this.versionRevision >= reqVer) {
+		return true;
+	} else {
+		return false;
+	}
+}, _detectVersion:function () {
+	var versionStr;
+	for (var testVersion = 25; testVersion > 0; testVersion--) {
+		if (dojo.render.html.ie) {
+			versionStr = VBGetSwfVer(testVersion);
+		} else {
+			versionStr = this._JSFlashInfo(testVersion);
 		}
-	},
-	
-	_detectVersion: function(){
-		var versionStr;
-		
-		// loop backwards through the versions until we find the newest version	
-		for(var testVersion = 25; testVersion > 0; testVersion--){
-			if(dojo.render.html.ie){
-				versionStr = VBGetSwfVer(testVersion);
-			}else{
-				versionStr = this._JSFlashInfo(testVersion);		
-			}
-				
-			if(versionStr == -1 ){
-				this.capable = false; 
-				return;
-			}else if(versionStr != 0){
+		if (versionStr == -1) {
+			this.capable = false;
+			return;
+		} else {
+			if (versionStr != 0) {
 				var versionArray;
-				if(dojo.render.html.ie){
+				if (dojo.render.html.ie) {
 					var tempArray = versionStr.split(" ");
 					var tempString = tempArray[1];
 					versionArray = tempString.split(",");
-				}else{
+				} else {
 					versionArray = versionStr.split(".");
 				}
-					
 				this.versionMajor = versionArray[0];
 				this.versionMinor = versionArray[1];
 				this.versionRevision = versionArray[2];
-				
-				// 7.0r24 == 7.24
 				var versionString = this.versionMajor + "." + this.versionRevision;
 				this.version = parseFloat(versionString);
-				
 				this.capable = true;
-				
 				break;
 			}
 		}
-	},
-	 
-	// JavaScript helper required to detect Flash Player PlugIn version 
-	// information. Internet Explorer uses a corresponding Visual Basic
-	// version to interact with the Flash ActiveX control. 
-	_JSFlashInfo: function(testVersion){
-		// NS/Opera version >= 3 check for Flash plugin in plugin array
-		if(navigator.plugins != null && navigator.plugins.length > 0){
-			if(navigator.plugins["Shockwave Flash 2.0"] || 
-				 navigator.plugins["Shockwave Flash"]){
-				var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
-				var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
-				var descArray = flashDescription.split(" ");
-				var tempArrayMajor = descArray[2].split(".");
-				var versionMajor = tempArrayMajor[0];
-				var versionMinor = tempArrayMajor[1];
-				if(descArray[3] != ""){
-					var tempArrayMinor = descArray[3].split("r");
-				}else{
-					var tempArrayMinor = descArray[4].split("r");
-				}
-				var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
-				var version = versionMajor + "." + versionMinor + "." 
-											+ versionRevision;
-											
-				return version;
+	}
+}, _JSFlashInfo:function (testVersion) {
+	if (navigator.plugins != null && navigator.plugins.length > 0) {
+		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
+			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
+			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
+			var descArray = flashDescription.split(" ");
+			var tempArrayMajor = descArray[2].split(".");
+			var versionMajor = tempArrayMajor[0];
+			var versionMinor = tempArrayMajor[1];
+			if (descArray[3] != "") {
+				var tempArrayMinor = descArray[3].split("r");
+			} else {
+				var tempArrayMinor = descArray[4].split("r");
 			}
+			var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
+			var version = versionMajor + "." + versionMinor + "." + versionRevision;
+			return version;
 		}
-		
-		return -1;
-	},
-	
-	// Detects the mechanisms that should be used for Flash/JavaScript 
-	// communication, setting 'commVersion' to either 6 or 8. If the value is
-	// 6, we use Flash Plugin 6+ features, such as GetVariable, TCallLabel,
-	// and fscommand, to do Flash/JavaScript communication; if the value is
-	// 8, we use the ExternalInterface API for communication. 
-	_detectCommunicationVersion: function(){
-		if(this.capable == false){
-			this.commVersion = null;
-			return;
-		}
-		
-		// detect if the user has over-ridden the default flash version
-		if (typeof djConfig["forceFlashComm"] != "undefined" &&
-				typeof djConfig["forceFlashComm"] != null){
-			this.commVersion = djConfig["forceFlashComm"];
-			return;
-		}
-		
-		// we prefer Flash 6 features over Flash 8, because they are much faster
-		// and much less buggy
-		
-		// at this point, we don't have a flash file to detect features on,
-		// so we need to instead look at the browser environment we are in
-		if(dojo.render.html.safari == true || dojo.render.html.opera == true){
-			this.commVersion = 8;
-		}else{
-			this.commVersion = 6;
-		}
 	}
-};
-
-dojo.flash.Embed = function(visible){
-	// summary: A class that is used to write out the Flash object into the page.
-	
+	return -1;
+}, _detectCommunicationVersion:function () {
+	if (this.capable == false) {
+		this.commVersion = null;
+		return;
+	}
+	if (typeof djConfig["forceFlashComm"] != "undefined" && typeof djConfig["forceFlashComm"] != null) {
+		this.commVersion = djConfig["forceFlashComm"];
+		return;
+	}
+	if (dojo.render.html.safari == true || dojo.render.html.opera == true) {
+		this.commVersion = 8;
+	} else {
+		this.commVersion = 6;
+	}
+}};
+dojo.flash.Embed = function (visible) {
 	this._visible = visible;
-}
-
-dojo.flash.Embed.prototype = {
-	// width: int
-	//	The width of this Flash applet. The default is the minimal width
-	//	necessary to show the Flash settings dialog. Current value is 
-	//  215 pixels.
-	width: 215,
-	
-	// height: int 
-	//	The height of this Flash applet. The default is the minimal height
-	//	necessary to show the Flash settings dialog. Current value is
-	// 138 pixels.
-	height: 138,
-	
-	// id: String
-	// 	The id of the Flash object. Current value is 'flashObject'.
-	id: "flashObject",
-	
-	// Controls whether this is a visible Flash applet or not.
-	_visible: true,
-
-	protocol: function(){
-		switch(window.location.protocol){
-			case "https:":
-				return "https";
-				break;
-			default:
-				return "http";
-				break;
+};
+dojo.flash.Embed.prototype = {width:215, height:138, id:"flashObject", _visible:true, protocol:function () {
+	switch (window.location.protocol) {
+	  case "https:":
+		return "https";
+		break;
+	  default:
+		return "http";
+		break;
+	}
+}, write:function (flashVer, doExpressInstall) {
+	if (dojo.lang.isUndefined(doExpressInstall)) {
+		doExpressInstall = false;
+	}
+	var containerStyle = new dojo.string.Builder();
+	containerStyle.append("width: " + this.width + "px; ");
+	containerStyle.append("height: " + this.height + "px; ");
+	if (this._visible == false) {
+		containerStyle.append("position: absolute; ");
+		containerStyle.append("z-index: 10000; ");
+		containerStyle.append("top: -1000px; ");
+		containerStyle.append("left: -1000px; ");
+	}
+	containerStyle = containerStyle.toString();
+	var objectHTML;
+	var swfloc;
+	if (flashVer == 6) {
+		swfloc = dojo.flash.flash6_version;
+		var dojoPath = djConfig.baseRelativePath;
+		swfloc = swfloc + "?baseRelativePath=" + escape(dojoPath);
+		objectHTML = "<embed id=\"" + this.id + "\" src=\"" + swfloc + "\" " + "	quality=\"high\" bgcolor=\"#ffffff\" " + "	width=\"" + this.width + "\" height=\"" + this.height + "\" " + "	name=\"" + this.id + "\" " + "	align=\"middle\" allowScriptAccess=\"sameDomain\" " + "	type=\"application/x-shockwave-flash\" swLiveConnect=\"true\" " + "	pluginspage=\"" + this.protocol() + "://www.macromedia.com/go/getflashplayer\">";
+	} else {
+		swfloc = dojo.flash.flash8_version;
+		var swflocObject = swfloc;
+		var swflocEmbed = swfloc;
+		var dojoPath = djConfig.baseRelativePath;
+		if (doExpressInstall) {
+			var redirectURL = escape(window.location);
+			document.title = document.title.slice(0, 47) + " - Flash Player Installation";
+			var docTitle = escape(document.title);
+			swflocObject += "?MMredirectURL=" + redirectURL + "&MMplayerType=ActiveX" + "&MMdoctitle=" + docTitle + "&baseRelativePath=" + escape(dojoPath);
+			swflocEmbed += "?MMredirectURL=" + redirectURL + "&MMplayerType=PlugIn" + "&baseRelativePath=" + escape(dojoPath);
 		}
-	},
-	
-	write: function(/* String */ flashVer, /* Boolean? */ doExpressInstall){
-		// summary: Writes the Flash into the page.
-		// description:
-		//	This must be called before the page
-		//	is finished loading. 
-		// flashVer: String
-		//	The Flash version to write.
-		// doExpressInstall: Boolean
-		//	Whether to write out Express Install
-		//	information. Optional value; defaults to false.
-		
-		//dojo.debug("write");
-		if(dojo.lang.isUndefined(doExpressInstall)){
-			doExpressInstall = false;
+		if (swflocEmbed.indexOf("?") == -1) {
+			swflocEmbed += "?baseRelativePath=" + escape(dojoPath) + "' ";
 		}
-		
-		// determine our container div's styling
-		var containerStyle = new dojo.string.Builder();
-		containerStyle.append("width: " + this.width + "px; ");
-		containerStyle.append("height: " + this.height + "px; ");
-		if(this._visible == false){
-			containerStyle.append("position: absolute; ");
-			containerStyle.append("z-index: 10000; ");
-			containerStyle.append("top: -1000px; ");
-			containerStyle.append("left: -1000px; ");
+		objectHTML = "<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" " + "codebase=\"" + this.protocol() + "://fpdownload.macromedia.com/pub/shockwave/cabs/flash/" + "swflash.cab#version=8,0,0,0\" " + "width=\"" + this.width + "\" " + "height=\"" + this.height + "\" " + "id=\"" + this.id + "\" " + "align=\"middle\"> " + "<param name=\"allowScriptAccess\" value=\"sameDomain\" /> " + "<param name=\"movie\" value=\"" + swflocObject + "\" /> " + "<param name=\"quality\" value=\"high\" /> " + "<param name=\"bgcolor\" value=\"#ffffff\" /> " + "<embed src=\"" + swflocEmbed + "' " + "quality=\"high\" " + "bgcolor=\"#ffffff\" " + "width=\"" + this.width + "\" " + "height=\"" + this.height + "\" " + "id=\"" + this.id + "\" " + "name=\"" + this.id + "\" " + "swLiveConnect=\"true\" " + "align=\"middle\" " + "allowScriptAccess=\"sameDomain\" " + "type=\"application/x-shockwave-flash\" " + "pluginspage=\"" + this.protocol() + "://www.macromedia.com/go/getflashplayer\" />" + "</object>";
+	}
+	objectHTML = "<div id=\"" + this.id + "Container\" style=\"" + containerStyle + "\"> " + objectHTML + "</div>";
+	document.writeln(objectHTML);
+}, get:function () {
+	return document.getElementById(this.id);
+}, setVisible:function (visible) {
+	var container = dojo.byId(this.id + "Container");
+	if (visible == true) {
+		container.style.visibility = "visible";
+	} else {
+		container.style.position = "absolute";
+		container.style.x = "-1000px";
+		container.style.y = "-1000px";
+		container.style.visibility = "hidden";
+	}
+}, center:function () {
+	var elementWidth = this.width;
+	var elementHeight = this.height;
+	var scroll_offset = dojo.html.getScroll().offset;
+	var viewport_size = dojo.html.getViewport();
+	var x = scroll_offset.x + (viewport_size.width - elementWidth) / 2;
+	var y = scroll_offset.y + (viewport_size.height - elementHeight) / 2;
+	var container = dojo.byId(this.id + "Container");
+	container.style.top = y + "px";
+	container.style.left = x + "px";
+}};
+dojo.flash.Communicator = function () {
+	if (dojo.flash.useFlash6()) {
+		this._writeFlash6();
+	} else {
+		if (dojo.flash.useFlash8()) {
+			this._writeFlash8();
 		}
-		containerStyle = containerStyle.toString();
-
-		// figure out the SWF file to get and how to write out the correct HTML
-		// for this Flash version
-		var objectHTML;
-		var swfloc;
-		// Flash 6
-		if(flashVer == 6){
-			swfloc = dojo.flash.flash6_version;
-			var dojoPath = djConfig.baseRelativePath;
-			swfloc = swfloc + "?baseRelativePath=" + escape(dojoPath);
-			objectHTML = 
-						  '<embed id="' + this.id + '" src="' + swfloc + '" '
-						+ '    quality="high" bgcolor="#ffffff" '
-						+ '    width="' + this.width + '" height="' + this.height + '" '
-						+ '    name="' + this.id + '" '
-						+ '    align="middle" allowScriptAccess="sameDomain" '
-						+ '    type="application/x-shockwave-flash" swLiveConnect="true" '
-						+ '    pluginspage="'
-						+ this.protocol()
-						+ '://www.macromedia.com/go/getflashplayer">';
-		}else{ // Flash 8
-			swfloc = dojo.flash.flash8_version;
-			var swflocObject = swfloc;
-			var swflocEmbed = swfloc;
-			var dojoPath = djConfig.baseRelativePath;
-			if(doExpressInstall){
-				// the location to redirect to after installing
-				var redirectURL = escape(window.location);
-				document.title = document.title.slice(0, 47) + " - Flash Player Installation";
-				var docTitle = escape(document.title);
-				swflocObject += "?MMredirectURL=" + redirectURL
-				                + "&MMplayerType=ActiveX"
-				                + "&MMdoctitle=" + docTitle
-								+ "&baseRelativePath=" + escape(dojoPath);
-				swflocEmbed += "?MMredirectURL=" + redirectURL 
-								+ "&MMplayerType=PlugIn"
-								+ "&baseRelativePath=" + escape(dojoPath);
-			}
-
-			if(swflocEmbed.indexOf("?") == -1){
-				swflocEmbed +=  "?baseRelativePath="+escape(dojoPath)+"' ";
-			}
-			
-			objectHTML =
-				'<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '
-				  + 'codebase="'
-					+ this.protocol()
-					+ '://fpdownload.macromedia.com/pub/shockwave/cabs/flash/'
-					+ 'swflash.cab#version=8,0,0,0" '
-				  + 'width="' + this.width + '" '
-				  + 'height="' + this.height + '" '
-				  + 'id="' + this.id + '" '
-				  + 'align="middle"> '
-				  + '<param name="allowScriptAccess" value="sameDomain" /> '
-				  + '<param name="movie" value="' + swflocObject + '" /> '
-				  + '<param name="quality" value="high" /> '
-				  + '<param name="bgcolor" value="#ffffff" /> '
-				  + '<embed src="' + swflocEmbed + "' "
-				  + 'quality="high" '
-				  + 'bgcolor="#ffffff" '
-				  + 'width="' + this.width + '" '
-				  + 'height="' + this.height + '" '
-				  + 'id="' + this.id + '" '
-				  + 'name="' + this.id + '" '
-				  + 'swLiveConnect="true" '
-				  + 'align="middle" '
-				  + 'allowScriptAccess="sameDomain" '
-				  + 'type="application/x-shockwave-flash" '
-				  + 'pluginspage="'
-					+ this.protocol()
-					+'://www.macromedia.com/go/getflashplayer" />'
-				+ '</object>';
-		}
-
-		// now write everything out
-		objectHTML = '<div id="' + this.id + 'Container" style="' + containerStyle + '"> '
-						+ objectHTML
-					 + '</div>';
-		document.writeln(objectHTML);
-	},  
-	
-	get: function(){ /* Object */
-		// summary: Gets the Flash object DOM node.
-		
-		//return (dojo.render.html.ie) ? window[this.id] : document[this.id];
-		
-		// more robust way to get Flash object; version above can break
-		// communication on IE sometimes
-		return document.getElementById(this.id);
-	},
-	
-	setVisible: function(/* Boolean */ visible){
-		// summary: Sets the visibility of this Flash object.
-		
-		var container = dojo.byId(this.id + "Container");
-		if(visible == true){
-			container.style.visibility = "visible";
-		}else{
-			container.style.position = "absolute";
-			container.style.x = "-1000px";
-			container.style.y = "-1000px";
-			container.style.visibility = "hidden";
-		}
-	},
-	
-	center: function(){
-		// summary: Centers the flash applet on the page.
-		
-		var elementWidth = this.width;
-		var elementHeight = this.height;
-
-		var scroll_offset = dojo.html.getScroll().offset;
-		var viewport_size = dojo.html.getViewport();
-
-		// compute the centered position    
-		var x = scroll_offset.x + (viewport_size.width - elementWidth) / 2;
-		var y = scroll_offset.y + (viewport_size.height - elementHeight) / 2; 
-
-		// set the centered position
-		var container = dojo.byId(this.id + "Container");
-		container.style.top = y + "px";
-		container.style.left = x + "px";
 	}
 };
-
-
-dojo.flash.Communicator = function(){
-	// summary:
-	//	A class that is used to communicate between Flash and JavaScript in 
-	//	a way that can pass large amounts of data back and forth reliably,
-	//	very fast, and with synchronous method calls.
-	// description: 
-	//	A class that is used to communicate between Flash and JavaScript in 
-	//	a way that can pass large amounts of data back and forth reliably,
-	//	very fast, and with synchronous method calls. This class encapsulates the 
-	//	specific way in which this communication occurs,
-	//	presenting a common interface to JavaScript irrespective of the underlying
-	//	Flash version.
-
-	if(dojo.flash.useFlash6()){
-		this._writeFlash6();
-	}else if (dojo.flash.useFlash8()){
-		this._writeFlash8();
+dojo.flash.Communicator.prototype = {_writeFlash6:function () {
+	var id = dojo.flash.obj.id;
+	document.writeln("<script language=\"JavaScript\">");
+	document.writeln("  function " + id + "_DoFSCommand(command, args){ ");
+	document.writeln("	dojo.flash.comm._handleFSCommand(command, args); ");
+	document.writeln("}");
+	document.writeln("</script>");
+	if (dojo.render.html.ie) {
+		document.writeln("<SCRIPT LANGUAGE=VBScript> ");
+		document.writeln("on error resume next ");
+		document.writeln("Sub " + id + "_FSCommand(ByVal command, ByVal args)");
+		document.writeln(" call " + id + "_DoFSCommand(command, args)");
+		document.writeln("end sub");
+		document.writeln("</SCRIPT> ");
 	}
-}
-
-dojo.flash.Communicator.prototype = {
-	_writeFlash6: function(){
-		var id = dojo.flash.obj.id;
-		
-		// global function needed for Flash 6 callback;
-		// we write it out as a script tag because the VBScript hook for IE
-		// callbacks does not work properly if this function is evalled() from
-		// within the Dojo system
-		document.writeln('<script language="JavaScript">');
-		document.writeln('  function ' + id + '_DoFSCommand(command, args){ ');
-		document.writeln('    dojo.flash.comm._handleFSCommand(command, args); ');
-		document.writeln('}');
-		document.writeln('</script>');
-		
-		// hook for Internet Explorer to receive FSCommands from Flash
-		if(dojo.render.html.ie){
-			document.writeln('<SCRIPT LANGUAGE=VBScript\> ');
-			document.writeln('on error resume next ');
-			document.writeln('Sub ' + id + '_FSCommand(ByVal command, ByVal args)');
-			document.writeln(' call ' + id + '_DoFSCommand(command, args)');
-			document.writeln('end sub');
-			document.writeln('</SCRIPT\> ');
-		}
-	},
-	
-	_writeFlash8: function(){
-		// nothing needs to be written out for Flash 8 communication; 
-		// happens automatically
-	},
-	
-	//Flash 6 communication.
-	
-	// Handles fscommand's from Flash to JavaScript. Flash 6 communication.
-	_handleFSCommand: function(command, args){
-		//dojo.debug("fscommand, command="+command+", args="+args);
-		// Flash 8 on Mac/Firefox precedes all commands with the string "FSCommand:";
-		// strip it off if it is present
-		if(command != null && !dojo.lang.isUndefined(command)
-			&& /^FSCommand:(.*)/.test(command) == true){
-			command = command.match(/^FSCommand:(.*)/)[1];
-		}
-		 
-		if(command == "addCallback"){ // add Flash method for JavaScript callback
-			this._fscommandAddCallback(command, args);
-		}else if(command == "call"){ // Flash to JavaScript method call
+}, _writeFlash8:function () {
+}, _handleFSCommand:function (command, args) {
+	if (command != null && !dojo.lang.isUndefined(command) && /^FSCommand:(.*)/.test(command) == true) {
+		command = command.match(/^FSCommand:(.*)/)[1];
+	}
+	if (command == "addCallback") {
+		this._fscommandAddCallback(command, args);
+	} else {
+		if (command == "call") {
 			this._fscommandCall(command, args);
-		}else if(command == "fscommandReady"){ // see if fscommands are ready
-			this._fscommandReady();
+		} else {
+			if (command == "fscommandReady") {
+				this._fscommandReady();
+			}
 		}
-	},
-	
-	// Handles registering a callable Flash function. Flash 6 communication.
-	_fscommandAddCallback: function(command, args){
-		var functionName = args;
-			
-		// do a trick, where we link this function name to our wrapper
-		// function, _call, that does the actual JavaScript to Flash call
-		var callFunc = function(){
-			return dojo.flash.comm._call(functionName, arguments);
-		};			
-		dojo.flash.comm[functionName] = callFunc;
-		
-		// indicate that the call was successful
-		dojo.flash.obj.get().SetVariable("_succeeded", true);
-	},
-	
-	// Handles Flash calling a JavaScript function. Flash 6 communication.
-	_fscommandCall: function(command, args){
-		var plugin = dojo.flash.obj.get();
-		var functionName = args;
-		
-		// get the number of arguments to this method call and build them up
-		var numArgs = parseInt(plugin.GetVariable("_numArgs"));
-		var flashArgs = new Array();
-		for(var i = 0; i < numArgs; i++){
-			var currentArg = plugin.GetVariable("_" + i);
-			flashArgs.push(currentArg);
+	}
+}, _fscommandAddCallback:function (command, args) {
+	var functionName = args;
+	var callFunc = function () {
+		return dojo.flash.comm._call(functionName, arguments);
+	};
+	dojo.flash.comm[functionName] = callFunc;
+	dojo.flash.obj.get().SetVariable("_succeeded", true);
+}, _fscommandCall:function (command, args) {
+	var plugin = dojo.flash.obj.get();
+	var functionName = args;
+	var numArgs = parseInt(plugin.GetVariable("_numArgs"));
+	var flashArgs = new Array();
+	for (var i = 0; i < numArgs; i++) {
+		var currentArg = plugin.GetVariable("_" + i);
+		flashArgs.push(currentArg);
+	}
+	var runMe;
+	if (functionName.indexOf(".") == -1) {
+		runMe = window[functionName];
+	} else {
+		runMe = eval(functionName);
+	}
+	var results = null;
+	if (!dojo.lang.isUndefined(runMe) && runMe != null) {
+		results = runMe.apply(null, flashArgs);
+	}
+	plugin.SetVariable("_returnResult", results);
+}, _fscommandReady:function () {
+	var plugin = dojo.flash.obj.get();
+	plugin.SetVariable("fscommandReady", "true");
+}, _call:function (functionName, args) {
+	var plugin = dojo.flash.obj.get();
+	plugin.SetVariable("_functionName", functionName);
+	plugin.SetVariable("_numArgs", args.length);
+	for (var i = 0; i < args.length; i++) {
+		var value = args[i];
+		value = value.replace(/\0/g, "\\0");
+		plugin.SetVariable("_" + i, value);
+	}
+	plugin.TCallLabel("/_flashRunner", "execute");
+	var results = plugin.GetVariable("_returnResult");
+	results = results.replace(/\\0/g, "\x00");
+	return results;
+}, _addExternalInterfaceCallback:function (methodName) {
+	var wrapperCall = function () {
+		var methodArgs = new Array(arguments.length);
+		for (var i = 0; i < arguments.length; i++) {
+			methodArgs[i] = arguments[i];
 		}
-		
-		// get the function instance; we technically support more capabilities
-		// than ExternalInterface, which can only call global functions; if
-		// the method name has a dot in it, such as "dojo.flash.loaded", we
-		// eval it so that the method gets run against an instance
-		var runMe;
-		if(functionName.indexOf(".") == -1){ // global function
-			runMe = window[functionName];
-		}else{
-			// instance function
-			runMe = eval(functionName);
-		}
-		
-		// make the call and get the results
-		var results = null;
-		if(!dojo.lang.isUndefined(runMe) && runMe != null){
-			results = runMe.apply(null, flashArgs);
-		}
-		
-		// return the results to flash
-		plugin.SetVariable("_returnResult", results);
-	},
-	
-	// Reports that fscommands are ready to run if executed from Flash.
-	_fscommandReady: function(){
-		var plugin = dojo.flash.obj.get();
-		plugin.SetVariable("fscommandReady", "true");
-	},
-	
-	// The actual function that will execute a JavaScript to Flash call; used
-	// by the Flash 6 communication method. 
-	_call: function(functionName, args){
-		// we do JavaScript to Flash method calls by setting a Flash variable
-		// "_functionName" with the function name; "_numArgs" with the number
-		// of arguments; and "_0", "_1", etc for each numbered argument. Flash
-		// reads these, executes the function call, and returns the result
-		// in "_returnResult"
-		var plugin = dojo.flash.obj.get();
-		plugin.SetVariable("_functionName", functionName);
-		plugin.SetVariable("_numArgs", args.length);
-		for(var i = 0; i < args.length; i++){
-			// unlike Flash 8's ExternalInterface, Flash 6 has no problem with
-			// any special characters _except_ for the null character \0; double
-			// encode this so the Flash side never sees it, but we can get it 
-			// back if the value comes back to JavaScript
-			var value = args[i];
-			value = value.replace(/\0/g, "\\0");
-			
-			plugin.SetVariable("_" + i, value);
-		}
-		
-		// now tell Flash to execute this method using the Flash Runner
-		plugin.TCallLabel("/_flashRunner", "execute");
-		
-		// get the results
-		var results = plugin.GetVariable("_returnResult");
-		
-		// we double encoded all null characters as //0 because Flash breaks
-		// if they are present; turn the //0 back into /0
-		results = results.replace(/\\0/g, "\0");
-		
-		return results;
-	},
-	
-	// Flash 8 communication.
-	
-	// Registers the existence of a Flash method that we can call with
-	// JavaScript, using Flash 8's ExternalInterface. 
-	_addExternalInterfaceCallback: function(methodName){
-		var wrapperCall = function(){
-			// some browsers don't like us changing values in the 'arguments' array, so
-			// make a fresh copy of it
-			var methodArgs = new Array(arguments.length);
-			for(var i = 0; i < arguments.length; i++){
-				methodArgs[i] = arguments[i];
-			}
-			return dojo.flash.comm._execFlash(methodName, methodArgs);
-		};
-		
-		dojo.flash.comm[methodName] = wrapperCall;
-	},
-	
-	// Encodes our data to get around ExternalInterface bugs.
-	// Flash 8 communication.
-	_encodeData: function(data){
-		// double encode all entity values, or they will be mis-decoded
-		// by Flash when returned
-		var entityRE = /\&([^;]*)\;/g;
-		data = data.replace(entityRE, "&amp;$1;");
-		
-		// entity encode XML-ish characters, or Flash's broken XML serializer
-		// breaks
-		data = data.replace(/</g, "&lt;");
-		data = data.replace(/>/g, "&gt;");
-		
-		// transforming \ into \\ doesn't work; just use a custom encoding
-		data = data.replace("\\", "&custom_backslash;&custom_backslash;");
-		
-		data = data.replace(/\n/g, "\\n");
-		data = data.replace(/\r/g, "\\r");
-		data = data.replace(/\f/g, "\\f");
-		data = data.replace(/\0/g, "\\0"); // null character
-		data = data.replace(/\'/g, "\\\'");
-		data = data.replace(/\"/g, '\\\"');
-		
+		return dojo.flash.comm._execFlash(methodName, methodArgs);
+	};
+	dojo.flash.comm[methodName] = wrapperCall;
+}, _encodeData:function (data) {
+	var entityRE = /\&([^;]*)\;/g;
+	data = data.replace(entityRE, "&amp;$1;");
+	data = data.replace(/</g, "&lt;");
+	data = data.replace(/>/g, "&gt;");
+	data = data.replace("\\", "&custom_backslash;&custom_backslash;");
+	data = data.replace(/\n/g, "\\n");
+	data = data.replace(/\r/g, "\\r");
+	data = data.replace(/\f/g, "\\f");
+	data = data.replace(/\0/g, "\\0");
+	data = data.replace(/\'/g, "\\'");
+	data = data.replace(/\"/g, "\\\"");
+	return data;
+}, _decodeData:function (data) {
+	if (data == null || typeof data == "undefined") {
 		return data;
-	},
-	
-	// Decodes our data to get around ExternalInterface bugs.
-	// Flash 8 communication.
-	_decodeData: function(data){
-		if(data == null || typeof data == "undefined"){
-			return data;
+	}
+	data = data.replace(/\&custom_lt\;/g, "<");
+	data = data.replace(/\&custom_gt\;/g, ">");
+	data = eval("\"" + data + "\"");
+	return data;
+}, _chunkArgumentData:function (value, argIndex) {
+	var plugin = dojo.flash.obj.get();
+	var numSegments = Math.ceil(value.length / 1024);
+	for (var i = 0; i < numSegments; i++) {
+		var startCut = i * 1024;
+		var endCut = i * 1024 + 1024;
+		if (i == (numSegments - 1)) {
+			endCut = i * 1024 + value.length;
 		}
-		
-		// certain XMLish characters break Flash's wire serialization for
-		// ExternalInterface; these are encoded on the 
-		// DojoExternalInterface side into a custom encoding, rather than
-		// the standard entity encoding, because otherwise we won't be able to
-		// differentiate between our own encoding and any entity characters
-		// that are being used in the string itself
-		data = data.replace(/\&custom_lt\;/g, "<");
-		data = data.replace(/\&custom_gt\;/g, ">");
-		
-		// Unfortunately, Flash returns us our String with special characters
-		// like newlines broken into seperate characters. So if \n represents
-		// a new line, Flash returns it as "\" and "n". This means the character
-		// is _not_ a newline. This forces us to eval() the string to cause
-		// escaped characters to turn into their real special character values.
-		data = eval('"' + data + '"');
-		
-		return data;
-	},
-	
-	// Sends our method arguments over to Flash in chunks in order to
-	// have ExternalInterface's performance not be O(n^2).
-	// Flash 8 communication.
-	_chunkArgumentData: function(value, argIndex){
-		var plugin = dojo.flash.obj.get();
-		
-		// cut up the string into pieces, and push over each piece one
-		// at a time
-		var numSegments = Math.ceil(value.length / 1024);
-		for(var i = 0; i < numSegments; i++){
-			var startCut = i * 1024;
-			var endCut = i * 1024 + 1024;
-			if(i == (numSegments - 1)){
-				endCut = i * 1024 + value.length;
-			}
-			
-			var piece = value.substring(startCut, endCut);
-			
-			// encode each piece seperately, rather than the entire
-			// argument data, because ocassionally a special 
-			// character, such as an entity like &foobar;, will fall between
-			// piece boundaries, and we _don't_ want to encode that value if
-			// it falls between boundaries, or else we will end up with incorrect
-			// data when we patch the pieces back together on the other side
-			piece = this._encodeData(piece);
-			
-			// directly use the underlying CallFunction method used by
-			// ExternalInterface, which is vastly faster for large strings
-			// and lets us bypass some Flash serialization bugs
-			plugin.CallFunction('<invoke name="chunkArgumentData" '
-														+ 'returntype="javascript">'
-														+ '<arguments>'
-														+ '<string>' + piece + '</string>'
-														+ '<number>' + argIndex + '</number>'
-														+ '</arguments>'
-														+ '</invoke>');
-		}
-	},
-	
-	// Gets our method return data in chunks for better performance.
-	// Flash 8 communication.
-	_chunkReturnData: function(){
-		var plugin = dojo.flash.obj.get();
-		
-		var numSegments = plugin.getReturnLength();
-		var resultsArray = new Array();
-		for(var i = 0; i < numSegments; i++){
-			// directly use the underlying CallFunction method used by
-			// ExternalInterface, which is vastly faster for large strings
-			var piece = 
-					plugin.CallFunction('<invoke name="chunkReturnData" '
-															+ 'returntype="javascript">'
-															+ '<arguments>'
-															+ '<number>' + i + '</number>'
-															+ '</arguments>'
-															+ '</invoke>');
-															
-			// remove any leading or trailing JavaScript delimiters, which surround
-			// our String when it comes back from Flash since we bypass Flash's
-			// deserialization routines by directly calling CallFunction on the
-			// plugin
-			if(piece == '""' || piece == "''"){
-				piece = "";
-			}else{
-				piece = piece.substring(1, piece.length-1);
-			}
-		
-			resultsArray.push(piece);
-		}
-		var results = resultsArray.join("");
-		
-		return results;
-	},
-	
-	// Executes a Flash method; called from the JavaScript wrapper proxy we
-	// create on dojo.flash.comm.
-	// Flash 8 communication.
-	_execFlash: function(methodName, methodArgs){
-		var plugin = dojo.flash.obj.get();
-				
-		// begin Flash method execution
-		plugin.startExec();
-		
-		// set the number of arguments
-		plugin.setNumberArguments(methodArgs.length);
-		
-		// chunk and send over each argument
-		for(var i = 0; i < methodArgs.length; i++){
-			this._chunkArgumentData(methodArgs[i], i);
-		}
-		
-		// execute the method
-		plugin.exec(methodName);
-														
-		// get the return result
-		var results = this._chunkReturnData();
-		
-		// decode the results
-		results = this._decodeData(results);
-		
-		// reset everything
-		plugin.endExec();
-		
-		return results;
+		var piece = value.substring(startCut, endCut);
+		piece = this._encodeData(piece);
+		plugin.CallFunction("<invoke name=\"chunkArgumentData\" " + "returntype=\"javascript\">" + "<arguments>" + "<string>" + piece + "</string>" + "<number>" + argIndex + "</number>" + "</arguments>" + "</invoke>");
 	}
-}
-
-dojo.flash.Install = function(){
-	// summary: Helps install Flash plugin if needed.
-	// description:
-	//	Figures out the best way to automatically install the Flash plugin
-	//	for this browser and platform. Also determines if installation or
-	//	revving of the current plugin is needed on this platform.
-}
-
-dojo.flash.Install.prototype = {
-	needed: function(){ /* Boolean */
-		// summary:
-		//	Determines if installation or revving of the current plugin is 
-		//	needed. 
-	
-		// do we even have flash?
-		if(dojo.flash.info.capable == false){
-			return true;
+}, _chunkReturnData:function () {
+	var plugin = dojo.flash.obj.get();
+	var numSegments = plugin.getReturnLength();
+	var resultsArray = new Array();
+	for (var i = 0; i < numSegments; i++) {
+		var piece = plugin.CallFunction("<invoke name=\"chunkReturnData\" " + "returntype=\"javascript\">" + "<arguments>" + "<number>" + i + "</number>" + "</arguments>" + "</invoke>");
+		if (piece == "\"\"" || piece == "''") {
+			piece = "";
+		} else {
+			piece = piece.substring(1, piece.length - 1);
 		}
-
-		// are we on the Mac? Safari needs Flash version 8 to do Flash 8
-		// communication, while Firefox/Mac needs Flash 8 to fix bugs it has
-		// with Flash 6 communication
-		if(dojo.render.os.mac == true && !dojo.flash.info.isVersionOrAbove(8, 0, 0)){
-			return true;
-		}
-
-		// other platforms need at least Flash 6 or above
-		if(!dojo.flash.info.isVersionOrAbove(6, 0, 0)){
-			return true;
-		}
-
-		// otherwise we don't need installation
-		return false;
-	},
-
-	install: function(){
-		// summary: Performs installation or revving of the Flash plugin.
-		
-		//dojo.debug("install");
-		// indicate that we are installing
-		dojo.flash.info.installing = true;
-		dojo.flash.installing();
-		
-		if(dojo.flash.info.capable == false){ // we have no Flash at all
-			//dojo.debug("Completely new install");
-			// write out a simple Flash object to force the browser to prompt
-			// the user to install things
+		resultsArray.push(piece);
+	}
+	var results = resultsArray.join("");
+	return results;
+}, _execFlash:function (methodName, methodArgs) {
+	var plugin = dojo.flash.obj.get();
+	plugin.startExec();
+	plugin.setNumberArguments(methodArgs.length);
+	for (var i = 0; i < methodArgs.length; i++) {
+		this._chunkArgumentData(methodArgs[i], i);
+	}
+	plugin.exec(methodName);
+	var results = this._chunkReturnData();
+	results = this._decodeData(results);
+	plugin.endExec();
+	return results;
+}};
+dojo.flash.Install = function () {
+};
+dojo.flash.Install.prototype = {needed:function () {
+	if (dojo.flash.info.capable == false) {
+		return true;
+	}
+	if (dojo.render.os.mac == true && !dojo.flash.info.isVersionOrAbove(8, 0, 0)) {
+		return true;
+	}
+	if (!dojo.flash.info.isVersionOrAbove(6, 0, 0)) {
+		return true;
+	}
+	return false;
+}, install:function () {
+	dojo.flash.info.installing = true;
+	dojo.flash.installing();
+	if (dojo.flash.info.capable == false) {
+		var installObj = new dojo.flash.Embed(false);
+		installObj.write(8);
+	} else {
+		if (dojo.flash.info.isVersionOrAbove(6, 0, 65)) {
 			var installObj = new dojo.flash.Embed(false);
-			installObj.write(8); // write out HTML for Flash 8 version+
-		}else if(dojo.flash.info.isVersionOrAbove(6, 0, 65)){ // Express Install
-			//dojo.debug("Express install");
-			var installObj = new dojo.flash.Embed(false);
-			installObj.write(8, true); // write out HTML for Flash 8 version+
+			installObj.write(8, true);
 			installObj.setVisible(true);
 			installObj.center();
-		}else{ // older Flash install than version 6r65
-			alert("This content requires a more recent version of the Macromedia "
-						+" Flash Player.");
-			window.location.href = + dojo.flash.Embed.protocol() +
-						"://www.macromedia.com/go/getflashplayer";
+		} else {
+			alert("This content requires a more recent version of the Macromedia " + " Flash Player.");
+			window.location.href = +dojo.flash.Embed.protocol() + "://www.macromedia.com/go/getflashplayer";
 		}
-	},
-	
-	// Called when the Express Install is either finished, failed, or was
-	// rejected by the user.
-	_onInstallStatus: function(msg){
-		if (msg == "Download.Complete"){
-			// Installation is complete.
-			dojo.flash._initialize();
-		}else if(msg == "Download.Cancelled"){
-			alert("This content requires a more recent version of the Macromedia "
-						+" Flash Player.");
-			window.location.href = dojo.flash.Embed.protocol() +
-						"://www.macromedia.com/go/getflashplayer";
-		}else if (msg == "Download.Failed"){
-			// The end user failed to download the installer due to a network failure
-			alert("There was an error downloading the Flash Player update. "
-						+ "Please try again later, or visit macromedia.com to download "
-						+ "the latest version of the Flash plugin.");
-		}	
 	}
-}
-
-// find out if Flash is installed
+}, _onInstallStatus:function (msg) {
+	if (msg == "Download.Complete") {
+		dojo.flash._initialize();
+	} else {
+		if (msg == "Download.Cancelled") {
+			alert("This content requires a more recent version of the Macromedia " + " Flash Player.");
+			window.location.href = dojo.flash.Embed.protocol() + "://www.macromedia.com/go/getflashplayer";
+		} else {
+			if (msg == "Download.Failed") {
+				alert("There was an error downloading the Flash Player update. " + "Please try again later, or visit macromedia.com to download " + "the latest version of the Flash plugin.");
+			}
+		}
+	}
+}};
 dojo.flash.info = new dojo.flash.Info();
 
-// vim:ts=4:noet:tw=0:
 
 __CPAN_DIR__ src/rpc
 __CPAN_FILE__ src/rpc/Deferred.js
@@ -9414,11 +6197,11 @@
 
 dojo.provide("dojo.rpc.Deferred");
 dojo.require("dojo.Deferred");
-
 dojo.deprecated("dojo.rpc.Deferred", "replaced by dojo.Deferred", "0.6");
 dojo.rpc.Deferred = dojo.Deferred;
 dojo.rpc.Deferred.prototype = dojo.Deferred.prototype;
 
+
 __CPAN_FILE__ src/rpc/YahooService.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -9436,50 +6219,30 @@
 dojo.require("dojo.json");
 dojo.require("dojo.uri.*");
 dojo.require("dojo.io.ScriptSrcIO");
-
-dojo.rpc.YahooService = function(appId){
+dojo.rpc.YahooService = function (appId) {
 	this.appId = appId;
-	if(!appId){
+	if (!appId) {
 		this.appId = "dojotoolkit";
-		dojo.debug(	"please initialize the YahooService class with your own",
-					"application ID. Using the default may cause problems during",
-					"deployment of your application");
+		dojo.debug("please initialize the YahooService class with your own", "application ID. Using the default may cause problems during", "deployment of your application");
 	}
-	this.connect(dojo.uri.dojoUri("src/rpc/yahoo.smd"));
+	if (djConfig["useXDomain"] && !djConfig["yahooServiceSmdUrl"]) {
+		dojo.debug("dojo.rpc.YahooService: When using cross-domain Dojo builds," + " please save yahoo.smd to your domain and set djConfig.yahooServiceSmdUrl" + " to the path on your domain to yahoo.smd");
+	}
+	this.connect(djConfig["yahooServiceSmdUrl"] || dojo.uri.moduleUri("dojo.rpc", "yahoo.smd"));
 	this.strictArgChecks = false;
-}
-
+};
 dojo.inherits(dojo.rpc.YahooService, dojo.rpc.JsonService);
-
-dojo.lang.extend(dojo.rpc.YahooService, {
-	strictArgChecks: false,
-
-	bind: function(method, parameters, deferredRequestHandler, url){
-		//summary
-		//Yahoo RPC bind method. Takes remote method, parameters, deferred,
-		//and a url and sends of a ScriptSrcIO request to connect to Yahoo
-		//services crossplatform
-		var params = parameters;
-		if(	(dojo.lang.isArrayLike(parameters))&&
-			(parameters.length == 1)){
-			params = parameters[0];
-		}
-		params.output = "json";
-		params.appid= this.appId;
-		dojo.io.bind({
-			url: url||this.serviceUrl,
-			transport: "ScriptSrcTransport",
-			// FIXME: need to get content interpolation fixed
-			content: params,
-			jsonParamName: "callback",
-			mimetype: "text/json",
-			load: this.resultCallback(deferredRequestHandler),
-			error: this.errorCallback(deferredRequestHandler),
-			preventCache: true
-		});
+dojo.lang.extend(dojo.rpc.YahooService, {strictArgChecks:false, bind:function (method, parameters, deferredRequestHandler, url) {
+	var params = parameters;
+	if ((dojo.lang.isArrayLike(parameters)) && (parameters.length == 1)) {
+		params = parameters[0];
 	}
-});
+	params.output = "json";
+	params.appid = this.appId;
+	dojo.io.bind({url:url || this.serviceUrl, transport:"ScriptSrcTransport", content:params, jsonParamName:"callback", mimetype:"text/json", load:this.resultCallback(deferredRequestHandler), error:this.errorCallback(deferredRequestHandler), preventCache:true});
+}});
 
+
 __CPAN_FILE__ src/rpc/yahoo.smd
 {
 	"SMDVersion":".1",
@@ -9787,114 +6550,64 @@
 dojo.require("dojo.json");
 dojo.require("dojo.lang.func");
 dojo.require("dojo.Deferred");
-
-dojo.rpc.RpcService = function(url){
-	// summary
-	// constructor for rpc base class
-	if(url){
+dojo.rpc.RpcService = function (url) {
+	if (url) {
 		this.connect(url);
 	}
-}
-
-dojo.lang.extend(dojo.rpc.RpcService, {
-
-	strictArgChecks: true,
-	serviceUrl: "",
-
-	parseResults: function(obj){
-		// summary
-		// parse the results coming back from an rpc request.  
-   		// this base implementation, just returns the full object
-		// subclasses should parse and only return the actual results
-		return obj;
-	},
-
-	errorCallback: function(/* dojo.Deferred */ deferredRequestHandler){
-		// summary
-		// create callback that calls the Deferres errback method
-		return function(type, e){
-			deferredRequestHandler.errback(new Error(e.message));
+};
+dojo.lang.extend(dojo.rpc.RpcService, {strictArgChecks:true, serviceUrl:"", parseResults:function (obj) {
+	return obj;
+}, errorCallback:function (deferredRequestHandler) {
+	return function (type, e) {
+		deferredRequestHandler.errback(new Error(e.message));
+	};
+}, resultCallback:function (deferredRequestHandler) {
+	var tf = dojo.lang.hitch(this, function (type, obj, e) {
+		if (obj["error"] != null) {
+			var err = new Error(obj.error);
+			err.id = obj.id;
+			deferredRequestHandler.errback(err);
+		} else {
+			var results = this.parseResults(obj);
+			deferredRequestHandler.callback(results);
 		}
-	},
-
-	resultCallback: function(/* dojo.Deferred */ deferredRequestHandler){
-		// summary
-		// create callback that calls the Deferred's callback method
-		var tf = dojo.lang.hitch(this, 
-			function(type, obj, e){
-				if (obj["error"]!=null) {
-					var err = new Error(obj.error);
-					err.id = obj.id;
-					deferredRequestHandler.errback(err);
+	});
+	return tf;
+}, generateMethod:function (method, parameters, url) {
+	return dojo.lang.hitch(this, function () {
+		var deferredRequestHandler = new dojo.Deferred();
+		if ((this.strictArgChecks) && (parameters != null) && (arguments.length != parameters.length)) {
+			dojo.raise("Invalid number of parameters for remote method.");
+		} else {
+			this.bind(method, arguments, deferredRequestHandler, url);
+		}
+		return deferredRequestHandler;
+	});
+}, processSmd:function (object) {
+	dojo.debug("RpcService: Processing returned SMD.");
+	if (object.methods) {
+		dojo.lang.forEach(object.methods, function (m) {
+			if (m && m["name"]) {
+				dojo.debug("RpcService: Creating Method: this.", m.name, "()");
+				this[m.name] = this.generateMethod(m.name, m.parameters, m["url"] || m["serviceUrl"] || m["serviceURL"]);
+				if (dojo.lang.isFunction(this[m.name])) {
+					dojo.debug("RpcService: Successfully created", m.name, "()");
 				} else {
-					var results = this.parseResults(obj);
-					deferredRequestHandler.callback(results); 
+					dojo.debug("RpcService: Failed to create", m.name, "()");
 				}
 			}
-		);
-		return tf;
-	},
-
-
-	generateMethod: function(/*string*/ method, /*array*/ parameters, /*string*/ url){
-		// summary
-		// generate the local bind methods for the remote object
-		return dojo.lang.hitch(this, function(){
-			var deferredRequestHandler = new dojo.Deferred();
-
-			// if params weren't specified, then we can assume it's varargs
-			if( (this.strictArgChecks) &&
-				(parameters != null) &&
-				(arguments.length != parameters.length)
-			){
-				// put error stuff here, no enough params
-				dojo.raise("Invalid number of parameters for remote method.");
-			} else {
-				this.bind(method, arguments, deferredRequestHandler, url);
-			}
-
-			return deferredRequestHandler;
-		});
-	},
-
-	processSmd: function(/*json*/ object){
-		// summary
-		// callback method for reciept of a smd object.  Parse the smd and
-		// generate functions based on the description
-		dojo.debug("RpcService: Processing returned SMD.");
-		if(object.methods){
-			dojo.lang.forEach(object.methods, function(m){
-				if(m && m["name"]){
-					dojo.debug("RpcService: Creating Method: this.", m.name, "()");
-					this[m.name] = this.generateMethod(	m.name,
-														m.parameters, 
-														m["url"]||m["serviceUrl"]||m["serviceURL"]);
-					if(dojo.lang.isFunction(this[m.name])){
-						dojo.debug("RpcService: Successfully created", m.name, "()");
-					}else{
-						dojo.debug("RpcService: Failed to create", m.name, "()");
-					}
-				}
-			}, this);
-		}
-
-		this.serviceUrl = object.serviceUrl||object.serviceURL;
-		dojo.debug("RpcService: Dojo RpcService is ready for use.");
-	},
-
-	connect: function(/*String*/ smdUrl){
-		// summary
-		// connect to a remote url and retrieve a smd object
-		dojo.debug("RpcService: Attempting to load SMD document from:", smdUrl);
-		dojo.io.bind({
-			url: smdUrl,
-			mimetype: "text/json",
-			load: dojo.lang.hitch(this, function(type, object, e){ return this.processSmd(object); }),
-			sync: true
-		});		
+		}, this);
 	}
-});
+	this.serviceUrl = object.serviceUrl || object.serviceURL;
+	dojo.debug("RpcService: Dojo RpcService is ready for use.");
+}, connect:function (smdUrl) {
+	dojo.debug("RpcService: Attempting to load SMD document from:", smdUrl);
+	dojo.io.bind({url:smdUrl, mimetype:"text/json", load:dojo.lang.hitch(this, function (type, object, e) {
+		return this.processSmd(object);
+	}), sync:true});
+}});
 
+
 __CPAN_FILE__ src/rpc/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -9906,11 +6619,10 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: [["dojo.rpc.JsonService", false, false]]
-});
+dojo.kwCompoundRequire({common:[["dojo.rpc.JsonService", false, false]]});
 dojo.provide("dojo.rpc.*");
 
+
 __CPAN_FILE__ src/rpc/JotService.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -9923,39 +6635,21 @@
 */
 
 dojo.provide("dojo.rpc.JotService");
-dojo.require("dojo.rpc.RpcService"); dojo.require("dojo.rpc.JsonService"); dojo.require("dojo.json"); dojo.rpc.JotService = function(){
+dojo.require("dojo.rpc.RpcService");
+dojo.require("dojo.rpc.JsonService");
+dojo.require("dojo.json");
+dojo.rpc.JotService = function () {
 	this.serviceUrl = "/_/jsonrpc";
-}
-
+};
 dojo.inherits(dojo.rpc.JotService, dojo.rpc.JsonService);
+dojo.lang.extend(dojo.rpc.JotService, {bind:function (method, parameters, deferredRequestHandler, url) {
+	dojo.io.bind({url:url || this.serviceUrl, content:{json:this.createRequest(method, parameters)}, method:"POST", mimetype:"text/json", load:this.resultCallback(deferredRequestHandler), error:this.errorCallback(deferredRequestHandler), preventCache:true});
+}, createRequest:function (method, params) {
+	var req = {"params":params, "method":method, "id":this.lastSubmissionId++};
+	return dojo.json.serialize(req);
+}});
 
-dojo.lang.extend(dojo.rpc.JotService, {
-	bind: function(method, parameters, deferredRequestHandler, url){
-		//summary
-		//Jot bind method. Takes remote method, parameters, deferred,
-		//and a url, calls createRequest to make a Jot RPC envelope and
-		//passes that off with bind.  
-		dojo.io.bind({
-			url: url||this.serviceUrl,
-			content: {
-				json: this.createRequest(method, parameters)
-			},
-			method: "POST",
-			mimetype: "text/json",
-			load: this.resultCallback(deferredRequestHandler),
-			error: this.errorCallback(deferredRequestHandler),
-			preventCache: true
-		});
-	},
 
-	createRequest: function(method, params){
-		//summary
-		//create the json portion of the Jot request
-		var req = { "params": params, "method": method, "id": this.lastSubmissionId++ };
-		return dojo.json.serialize(req);
-	}
-});
-
 __CPAN_FILE__ src/rpc/JsonService.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -9972,111 +6666,61 @@
 dojo.require("dojo.io.*");
 dojo.require("dojo.json");
 dojo.require("dojo.lang.common");
-
-dojo.rpc.JsonService = function(args){
-	// passing just the URL isn't terribly useful. It's expected that at
-	// various times folks will want to specify:
-	//	- just the serviceUrl (for use w/ remoteCall())
-	//	- the text of the SMD to evaluate
-	// 	- a raw SMD object
-	//	- the SMD URL
-	if(args){
-		if(dojo.lang.isString(args)){
-			// we assume it's an SMD file to be processed, since this was the
-			// earlier function signature
-
-			// FIXME: also accept dojo.uri.Uri objects?
+dojo.rpc.JsonService = function (args) {
+	if (args) {
+		if (dojo.lang.isString(args)) {
 			this.connect(args);
-		}else{
-			// otherwise we assume it's an arguments object with the following
-			// (optional) properties:
-			//	- serviceUrl
-			//	- strictArgChecks
-			//	- smdUrl
-			//	- smdStr
-			//	- smdObj
-			if(args["smdUrl"]){
+		} else {
+			if (args["smdUrl"]) {
 				this.connect(args.smdUrl);
 			}
-			if(args["smdStr"]){
-				this.processSmd(dj_eval("("+args.smdStr+")"));
+			if (args["smdStr"]) {
+				this.processSmd(dj_eval("(" + args.smdStr + ")"));
 			}
-			if(args["smdObj"]){
+			if (args["smdObj"]) {
 				this.processSmd(args.smdObj);
 			}
-			if(args["serviceUrl"]){
+			if (args["serviceUrl"]) {
 				this.serviceUrl = args.serviceUrl;
 			}
-			if(typeof args["strictArgChecks"] != "undefined"){
+			if (typeof args["strictArgChecks"] != "undefined") {
 				this.strictArgChecks = args.strictArgChecks;
 			}
 		}
 	}
-}
-
+};
 dojo.inherits(dojo.rpc.JsonService, dojo.rpc.RpcService);
-
-dojo.extend(dojo.rpc.JsonService, {
-
-	bustCache: false,
-	
-	contentType: "application/json-rpc",
-
-	lastSubmissionId: 0,
-
-	callRemote: function(method, params){
-		//summary
-		// call an arbitrary remote method without requiring it
-		// to be predefined with SMD
-		var deferred = new dojo.Deferred();
-		this.bind(method, params, deferred);
-		return deferred;
-	},
-
-	bind: function(method, parameters, deferredRequestHandler, url){
-		//summary
-		//JSON-RPC bind method. Takes remote method, parameters, deferred,
-		//and a url, calls createRequest to make a JSON-RPC envelope and
-		//passes that off with bind.
-
-		dojo.io.bind({
-			url: url||this.serviceUrl,
-			postContent: this.createRequest(method, parameters),
-			method: "POST",
-			contentType: this.contentType,
-			mimetype: "text/json",
-			load: this.resultCallback(deferredRequestHandler),
-			error: this.errorCallback(deferredRequestHandler),
-			preventCache:this.bustCache 
-		});
-	},
-
-	createRequest: function(method, params){
-		//summary
-		//create a JSON-RPC envelope for the request
-		var req = { "params": params, "method": method, "id": ++this.lastSubmissionId };
-		var data = dojo.json.serialize(req);
-		dojo.debug("JsonService: JSON-RPC Request: " + data);
-		return data;
-	},
-
-	parseResults: function(obj){
-		//summary
-		//parse the result envelope and pass the results back to 
-		// to the callback function
-		if(!obj){ return; }
-		if (obj["Result"]!=null){ 
-			return obj["Result"]; 
-		}else if(obj["result"]!=null){ 
-			return obj["result"]; 
-		}else if(obj["ResultSet"]){
-			return obj["ResultSet"];
-		}else{
-			return obj;
+dojo.extend(dojo.rpc.JsonService, {bustCache:false, contentType:"application/json-rpc", lastSubmissionId:0, callRemote:function (method, params) {
+	var deferred = new dojo.Deferred();
+	this.bind(method, params, deferred);
+	return deferred;
+}, bind:function (method, parameters, deferredRequestHandler, url) {
+	dojo.io.bind({url:url || this.serviceUrl, postContent:this.createRequest(method, parameters), method:"POST", contentType:this.contentType, mimetype:"text/json", load:this.resultCallback(deferredRequestHandler), error:this.errorCallback(deferredRequestHandler), preventCache:this.bustCache});
+}, createRequest:function (method, params) {
+	var req = {"params":params, "method":method, "id":++this.lastSubmissionId};
+	var data = dojo.json.serialize(req);
+	dojo.debug("JsonService: JSON-RPC Request: " + data);
+	return data;
+}, parseResults:function (obj) {
+	if (!obj) {
+		return;
+	}
+	if (obj["Result"] != null) {
+		return obj["Result"];
+	} else {
+		if (obj["result"] != null) {
+			return obj["result"];
+		} else {
+			if (obj["ResultSet"]) {
+				return obj["ResultSet"];
+			} else {
+				return obj;
+			}
 		}
 	}
-});
+}});
 
+
 __CPAN_DIR__ src/validate
 __CPAN_FILE__ src/validate/common.js
 /*
@@ -10090,245 +6734,90 @@
 */
 
 dojo.provide("dojo.validate.common");
-
 dojo.require("dojo.regexp");
-
-
-dojo.validate.isText = function(/*String*/value, /*Object?*/flags){
-// summary:
-//	Checks if a string has non whitespace characters. 
-//	Parameters allow you to constrain the length.
-//
-// value: A string
-// flags: {length: Number, minlength: Number, maxlength: Number}
-//    flags.length  If set, checks if there are exactly flags.length number of characters.
-//    flags.minlength  If set, checks if there are at least flags.minlength number of characters.
-//    flags.maxlength  If set, checks if there are at most flags.maxlength number of characters.
-
+dojo.validate.isText = function (value, flags) {
 	flags = (typeof flags == "object") ? flags : {};
-
-	// test for text
-	if(/^\s*$/.test(value)){ return false; } // Boolean
-
-	// length tests
-	if(typeof flags.length == "number" && flags.length != value.length){ return false; } // Boolean
-	if(typeof flags.minlength == "number" && flags.minlength > value.length){ return false; } // Boolean
-	if(typeof flags.maxlength == "number" && flags.maxlength < value.length){ return false; } // Boolean
-
-	return true; // Boolean
-}
-
-dojo.validate.isInteger = function(/*String*/value, /*Object?*/flags){
-// summary:
-//	Validates whether a string is in an integer format
-//
-// value  A string
-// flags  {signed: Boolean|[true,false], separator: String}
-//    flags.signed  The leading plus-or-minus sign.  Can be true, false, or [true, false].
-//      Default is [true, false], (i.e. sign is optional).
-//    flags.separator  The character used as the thousands separator.  Default is no separator.
-//      For more than one symbol use an array, e.g. [",", ""], makes ',' optional.
-
+	if (/^\s*$/.test(value)) {
+		return false;
+	}
+	if (typeof flags.length == "number" && flags.length != value.length) {
+		return false;
+	}
+	if (typeof flags.minlength == "number" && flags.minlength > value.length) {
+		return false;
+	}
+	if (typeof flags.maxlength == "number" && flags.maxlength < value.length) {
+		return false;
+	}
+	return true;
+};
+dojo.validate.isInteger = function (value, flags) {
 	var re = new RegExp("^" + dojo.regexp.integer(flags) + "$");
-	return re.test(value); // Boolean
-}
-
-dojo.validate.isRealNumber = function(/*String*/value, /*Object?*/flags){
-// summary:
-//	Validates whether a string is a real valued number. 
-//	Format is the usual exponential notation.
-//
-// value: A string
-// flags: {places: Number, decimal: String, exponent: Boolean|[true,false], eSigned: Boolean|[true,false], ...}
-//    flags.places  The integer number of decimal places.
-//      If not given, the decimal part is optional and the number of places is unlimited.
-//    flags.decimal  The character used for the decimal point.  Default is ".".
-//    flags.exponent  Express in exponential notation.  Can be true, false, or [true, false].
-//      Default is [true, false], (i.e. the exponential part is optional).
-//    flags.eSigned  The leading plus-or-minus sign on the exponent.  Can be true, false, 
-//      or [true, false].  Default is [true, false], (i.e. sign is optional).
-//    flags in regexp.integer can be applied.
-
+	return re.test(value);
+};
+dojo.validate.isRealNumber = function (value, flags) {
 	var re = new RegExp("^" + dojo.regexp.realNumber(flags) + "$");
-	return re.test(value); // Boolean
-}
-
-dojo.validate.isCurrency = function(/*String*/value, /*Object?*/flags){
-// summary:
-//	Validates whether a string denotes a monetary value. 
-// value: A string
-// flags: {signed:Boolean|[true,false], symbol:String, placement:String, separator:String,
-//	fractional:Boolean|[true,false], decimal:String}
-//    flags.signed  The leading plus-or-minus sign.  Can be true, false, or [true, false].
-//      Default is [true, false], (i.e. sign is optional).
-//    flags.symbol  A currency symbol such as Yen "�", Pound "�", or the Euro sign "�".  
-//      Default is "$".  For more than one symbol use an array, e.g. ["$", ""], makes $ optional.
-//    flags.placement  The symbol can come "before" the number or "after".  Default is "before".
-//    flags.separator  The character used as the thousands separator. The default is ",".
-//    flags.fractional  The appropriate number of decimal places for fractional currency (e.g. cents)
-//      Can be true, false, or [true, false].  Default is [true, false], (i.e. cents are optional).
-//    flags.decimal  The character used for the decimal point.  Default is ".".
-
+	return re.test(value);
+};
+dojo.validate.isCurrency = function (value, flags) {
 	var re = new RegExp("^" + dojo.regexp.currency(flags) + "$");
-	return re.test(value); // Boolean
-}
-
-dojo.validate.isInRange = function(/*String*/value, /*Object?*/flags){
-//summary:
-//	Validates whether a string denoting an integer, 
-//	real number, or monetary value is between a max and min. 
-//
-// value: A string
-// flags: {max:Number, min:Number, decimal:String}
-//    flags.max  A number, which the value must be less than or equal to for the validation to be true.
-//    flags.min  A number, which the value must be greater than or equal to for the validation to be true.
-//    flags.decimal  The character used for the decimal point.  Default is ".".
-
-	//stripping the separator allows NaN to perform as expected, if no separator, we assume ','
-	//once i18n support is ready for this, instead of assuming, we default to i18n's recommended value
-	value = value.replace(dojo.lang.has(flags,'separator')?flags.separator:',', '', 'g').
-		replace(dojo.lang.has(flags,'symbol')?flags.symbol:'$', '');
-	if(isNaN(value)){
-		return false; // Boolean
+	return re.test(value);
+};
+dojo.validate._isInRangeCache = {};
+dojo.validate.isInRange = function (value, flags) {
+	value = value.replace(dojo.lang.has(flags, "separator") ? flags.separator : ",", "", "g").replace(dojo.lang.has(flags, "symbol") ? flags.symbol : "$", "");
+	if (isNaN(value)) {
+		return false;
 	}
-	// assign default values to missing paramters
 	flags = (typeof flags == "object") ? flags : {};
 	var max = (typeof flags.max == "number") ? flags.max : Infinity;
 	var min = (typeof flags.min == "number") ? flags.min : -Infinity;
 	var dec = (typeof flags.decimal == "string") ? flags.decimal : ".";
-	
-	// splice out anything not part of a number
+	var cache = dojo.validate._isInRangeCache;
+	var cacheIdx = value + "max" + max + "min" + min + "dec" + dec;
+	if (typeof cache[cacheIdx] != "undefined") {
+		return cache[cacheIdx];
+	}
 	var pattern = "[^" + dec + "\\deE+-]";
 	value = value.replace(RegExp(pattern, "g"), "");
-
-	// trim ends of things like e, E, or the decimal character
 	value = value.replace(/^([+-]?)(\D*)/, "$1");
 	value = value.replace(/(\D*)$/, "");
-
-	// replace decimal with ".". The minus sign '-' could be the decimal!
 	pattern = "(\\d)[" + dec + "](\\d)";
 	value = value.replace(RegExp(pattern, "g"), "$1.$2");
-
 	value = Number(value);
-	if ( value < min || value > max ) { return false; } // Boolean
-
-	return true; // Boolean
-}
-
-dojo.validate.isNumberFormat = function(/*String*/value, /*Object?*/flags){
-// summary:
-//	Validates any sort of number based format
-//
-// description:
-//	Use it for phone numbers, social security numbers, zip-codes, etc.
-//	The value can be validated against one format or one of multiple formats.
-//
-//  Format
-//    #        Stands for a digit, 0-9.
-//    ?        Stands for an optional digit, 0-9 or nothing.
-//    All other characters must appear literally in the expression.
-//
-//  Example   
-//    "(###) ###-####"       ->   (510) 542-9742
-//    "(###) ###-#### x#???" ->   (510) 542-9742 x153
-//    "###-##-####"          ->   506-82-1089       i.e. social security number
-//    "#####-####"           ->   98225-1649        i.e. zip code
-//
-// value: A string
-// flags: {format:String}
-//    flags.format  A string or an Array of strings for multiple formats.
-
+	if (value < min || value > max) {
+		cache[cacheIdx] = false;
+		return false;
+	}
+	cache[cacheIdx] = true;
+	return true;
+};
+dojo.validate.isNumberFormat = function (value, flags) {
 	var re = new RegExp("^" + dojo.regexp.numberFormat(flags) + "$", "i");
-	return re.test(value); // Boolean
-}
-
-dojo.validate.isValidLuhn = function(/*String*/value){
-//summary: Compares value against the Luhn algorithm to verify its integrity
+	return re.test(value);
+};
+dojo.validate.isValidLuhn = function (value) {
 	var sum, parity, curDigit;
-	if(typeof value!='string'){
+	if (typeof value != "string") {
 		value = String(value);
 	}
-	value = value.replace(/[- ]/g,''); //ignore dashes and whitespaces
-	parity = value.length%2;
-	sum=0;
-	for(var i=0;i<value.length;i++){
+	value = value.replace(/[- ]/g, "");
+	parity = value.length % 2;
+	sum = 0;
+	for (var i = 0; i < value.length; i++) {
 		curDigit = parseInt(value.charAt(i));
-		if(i%2==parity){
-			curDigit*=2;
+		if (i % 2 == parity) {
+			curDigit *= 2;
 		}
-		if(curDigit>9){
-			curDigit-=9;
+		if (curDigit > 9) {
+			curDigit -= 9;
 		}
-		sum+=curDigit;
+		sum += curDigit;
 	}
-	return !(sum%10); //Boolean
-}
+	return !(sum % 10);
+};
 
-/**
-	Procedural API Description
 
-		The main aim is to make input validation expressible in a simple format.
-		You define profiles which declare the required and optional fields and any constraints they might have.
-		The results are provided as an object that makes it easy to handle missing and invalid input.
-
-	Usage
-
-		var results = dojo.validate.check(form, profile);
-
-	Profile Object
-
-		var profile = {
-			// filters change the field value and are applied before validation.
-			trim: ["tx1", "tx2"],
-			uppercase: ["tx9"],
-			lowercase: ["tx5", "tx6", "tx7"],
-			ucfirst: ["tx10"],
-			digit: ["tx11"],
-
-			// required input fields that are blank will be reported missing.
-			// required radio button groups and drop-down lists with no selection will be reported missing.
-			// checkbox groups and selectboxes can be required to have more than one value selected.
-			// List required fields by name and use this notation to require more than one value: {checkboxgroup: 2}, {selectboxname: 3}.
-			required: ["tx7", "tx8", "pw1", "ta1", "rb1", "rb2", "cb3", "s1", {"doubledip":2}, {"tripledip":3}],
-
-			// dependant/conditional fields are required if the target field is present and not blank.
-			// At present only textbox, password, and textarea fields are supported.
-			dependencies:	{
-				cc_exp: "cc_no",	
-				cc_type: "cc_no",	
-			},
-
-			// Fields can be validated using any boolean valued function.  
-			// Use arrays to specify parameters in addition to the field value.
-			constraints: {
-				field_name1: myValidationFunction,
-				field_name2: dojo.validate.isInteger,
-				field_name3: [myValidationFunction, additional parameters],
-				field_name4: [dojo.validate.isValidDate, "YYYY.MM.DD"],
-				field_name5: [dojo.validate.isEmailAddress, false, true],
-			},
-
-			// Confirm is a sort of conditional validation.
-			// It associates each field in its property list with another field whose value should be equal.
-			// If the values are not equal, the field in the property list is reported as Invalid. Unless the target field is blank.
-			confirm: {
-				email_confirm: "email",	
-				pw2: "pw1",	
-			}
-		};
-
-	Results Object
-
-		isSuccessful(): Returns true if there were no invalid or missing fields, else it returns false.
-		hasMissing():  Returns true if the results contain any missing fields.
-		getMissing():  Returns a list of required fields that have values missing.
-		isMissing(field):  Returns true if the field is required and the value is missing.
-		hasInvalid():  Returns true if the results contain fields with invalid data.
-		getInvalid():  Returns a list of fields that have invalid values.
-		isInvalid(field):  Returns true if the field has an invalid value.
-
-*/
-
 __CPAN_FILE__ src/validate/us.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -10342,79 +6831,27 @@
 
 dojo.provide("dojo.validate.us");
 dojo.require("dojo.validate.common");
-
-dojo.validate.us.isCurrency = function(/*String*/value, /*Object?*/flags){
-	// summary: Validates U.S. currency
-	// value: the representation to check
-	// flags: flags in validate.isCurrency can be applied.
-	return dojo.validate.isCurrency(value, flags); // Boolean
-}
-
-
-dojo.validate.us.isState = function(/*String*/value, /*Object?*/flags){
-	// summary: Validates US state and territory abbreviations.
-	//
-	// value: A two character string
-	// flags: An object
-	//    flags.allowTerritories  Allow Guam, Puerto Rico, etc.  Default is true.
-	//    flags.allowMilitary  Allow military 'states', e.g. Armed Forces Europe (AE).  Default is true.
-
+dojo.validate.us.isCurrency = function (value, flags) {
+	return dojo.validate.isCurrency(value, flags);
+};
+dojo.validate.us.isState = function (value, flags) {
 	var re = new RegExp("^" + dojo.regexp.us.state(flags) + "$", "i");
-	return re.test(value); // Boolean
-}
+	return re.test(value);
+};
+dojo.validate.us.isPhoneNumber = function (value) {
+	var flags = {format:["###-###-####", "(###) ###-####", "(###) ### ####", "###.###.####", "###/###-####", "### ### ####", "###-###-#### x#???", "(###) ###-#### x#???", "(###) ### #### x#???", "###.###.#### x#???", "###/###-#### x#???", "### ### #### x#???", "##########"]};
+	return dojo.validate.isNumberFormat(value, flags);
+};
+dojo.validate.us.isSocialSecurityNumber = function (value) {
+	var flags = {format:["###-##-####", "### ## ####", "#########"]};
+	return dojo.validate.isNumberFormat(value, flags);
+};
+dojo.validate.us.isZipCode = function (value) {
+	var flags = {format:["#####-####", "##### ####", "#########", "#####"]};
+	return dojo.validate.isNumberFormat(value, flags);
+};
 
-dojo.validate.us.isPhoneNumber = function(/*String*/value){
-	// summary: Validates 10 US digit phone number for several common formats
-	// value: The telephone number string
 
-	var flags = {
-		format: [
-			"###-###-####",
-			"(###) ###-####",
-			"(###) ### ####",
-			"###.###.####",
-			"###/###-####",
-			"### ### ####",
-			"###-###-#### x#???",
-			"(###) ###-#### x#???",
-			"(###) ### #### x#???",
-			"###.###.#### x#???",
-			"###/###-#### x#???",
-			"### ### #### x#???",
-			"##########"
-		]
-	};
-
-	return dojo.validate.isNumberFormat(value, flags); // Boolean
-}
-
-dojo.validate.us.isSocialSecurityNumber = function(/*String*/value){
-// summary: Validates social security number
-	var flags = {
-		format: [
-			"###-##-####",
-			"### ## ####",
-			"#########"
-		]
-	};
-
-	return dojo.validate.isNumberFormat(value, flags); // Boolean
-}
-
-dojo.validate.us.isZipCode = function(/*String*/value){
-// summary: Validates U.S. zip-code
-	var flags = {
-		format: [
-			"#####-####",
-			"##### ####",
-			"#########",
-			"#####"
-		]
-	};
-
-	return dojo.validate.isNumberFormat(value, flags); // Boolean
-}
-
 __CPAN_FILE__ src/validate/de.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -10428,21 +6865,12 @@
 
 dojo.provide("dojo.validate.de");
 dojo.require("dojo.validate.common");
+dojo.validate.isGermanCurrency = function (value) {
+	var flags = {symbol:"\u20ac", placement:"after", signPlacement:"begin", decimal:",", separator:"."};
+	return dojo.validate.isCurrency(value, flags);
+};
 
-dojo.validate.isGermanCurrency = function(/*String*/value) {
-	//summary: checks to see if 'value' is a valid representation of German currency (Euros)
-	var flags = {
-		symbol: "\u20AC",
-		placement: "after",
-		signPlacement: "begin", //TODO: this is really locale-dependent.  Will get fixed in v0.5 currency rewrite. 
-		decimal: ",",
-		separator: "."
-	};
-	return dojo.validate.isCurrency(value, flags); // Boolean
-}
 
-
-
 __CPAN_FILE__ src/validate/jp.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -10456,18 +6884,12 @@
 
 dojo.provide("dojo.validate.jp");
 dojo.require("dojo.validate.common");
+dojo.validate.isJapaneseCurrency = function (value) {
+	var flags = {symbol:"\xa5", fractional:false};
+	return dojo.validate.isCurrency(value, flags);
+};
 
-dojo.validate.isJapaneseCurrency = function(/*String*/value) {
-	//summary: checks to see if 'value' is a valid representation of Japanese currency
-	var flags = {
-		symbol: "\u00a5",
-		fractional: false
-	};
-	return dojo.validate.isCurrency(value, flags); // Boolean
-}
 
-
-
 __CPAN_FILE__ src/validate/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -10480,17 +6902,10 @@
 */
 
 dojo.require("dojo.validate");
-dojo.kwCompoundRequire({
-	common:		["dojo.validate.check", 
-						"dojo.validate.datetime", 
-						"dojo.validate.de", 
-						"dojo.validate.jp", 
-						"dojo.validate.us", 
-						"dojo.validate.web" 
-	]
-});
+dojo.kwCompoundRequire({common:["dojo.validate.check", "dojo.validate.datetime", "dojo.validate.de", "dojo.validate.jp", "dojo.validate.us", "dojo.validate.web"]});
 dojo.provide("dojo.validate.*");
 
+
 __CPAN_FILE__ src/validate/datetime.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -10504,167 +6919,85 @@
 
 dojo.provide("dojo.validate.datetime");
 dojo.require("dojo.validate.common");
-
-/**
-  Validates a time value in any International format.
-  The value can be validated against one format or one of multiple formats.
-
-  Format
-  h        12 hour, no zero padding.
-  hh       12 hour, has leading zero.
-  H        24 hour, no zero padding.
-  HH       24 hour, has leading zero.
-  m        minutes, no zero padding.
-  mm       minutes, has leading zero.
-  s        seconds, no zero padding.
-  ss       seconds, has leading zero.
-  All other characters must appear literally in the expression.
-
-  Example
-    "h:m:s t"  ->   2:5:33 PM
-    "HH:mm:ss" ->  14:05:33
-
-  @param value  A string.
-  @param flags  An object.
-    flags.format  A string or an array of strings.  Default is "h:mm:ss t".
-    flags.amSymbol  The symbol used for AM.  Default is "AM".
-    flags.pmSymbol  The symbol used for PM.  Default is "PM".
-  @return  true or false
-*/
-dojo.validate.isValidTime = function(value, flags) {
+dojo.validate.isValidTime = function (value, flags) {
 	dojo.deprecated("dojo.validate.datetime", "use dojo.date.parse instead", "0.5");
 	var re = new RegExp("^" + dojo.regexp.time(flags) + "$", "i");
 	return re.test(value);
-}
-
-/**
-  Validates 12-hour time format.
-  Zero-padding is not allowed for hours, required for minutes and seconds.
-  Seconds are optional.
-
-  @param value  A string.
-  @return  true or false
-*/
-dojo.validate.is12HourTime = function(value) {
+};
+dojo.validate.is12HourTime = function (value) {
 	dojo.deprecated("dojo.validate.datetime", "use dojo.date.parse instead", "0.5");
-	return dojo.validate.isValidTime(value, {format: ["h:mm:ss t", "h:mm t"]});
-}
-
-/**
-  Validates 24-hour military time format.
-  Zero-padding is required for hours, minutes, and seconds.
-  Seconds are optional.
-
-  @param value  A string.
-  @return  true or false
-*/
-dojo.validate.is24HourTime = function(value) {
+	return dojo.validate.isValidTime(value, {format:["h:mm:ss t", "h:mm t"]});
+};
+dojo.validate.is24HourTime = function (value) {
 	dojo.deprecated("dojo.validate.datetime", "use dojo.date.parse instead", "0.5");
-	return dojo.validate.isValidTime(value, {format: ["HH:mm:ss", "HH:mm"]} );
-}
-
-/**
-  Returns true if the date conforms to the format given and is a valid date. Otherwise returns false.
-
-  @param dateValue  A string for the date.
-  @param format  A string, default is  "MM/DD/YYYY".
-  @return  true or false
-
-  Accepts any type of format, including ISO8601.
-  All characters in the format string are treated literally except the following tokens:
-
-  YYYY - matches a 4 digit year
-  M - matches a non zero-padded month
-  MM - matches a zero-padded month
-  D -  matches a non zero-padded date
-  DD -  matches a zero-padded date
-  DDD -  matches an ordinal date, 001-365, and 366 on leapyear
-  ww - matches week of year, 01-53
-  d - matches day of week, 1-7
-
-  Examples: These are all today's date.
-
-  Date          Format
-  2005-W42-3    YYYY-Www-d
-  2005-292      YYYY-DDD
-  20051019      YYYYMMDD
-  10/19/2005    M/D/YYYY
-  19.10.2005    D.M.YYYY
-*/
-dojo.validate.isValidDate = function(dateValue, format) {
+	return dojo.validate.isValidTime(value, {format:["HH:mm:ss", "HH:mm"]});
+};
+dojo.validate.isValidDate = function (dateValue, format) {
 	dojo.deprecated("dojo.validate.datetime", "use dojo.date.parse instead", "0.5");
-	// Default is the American format
-	if (typeof format == "object" && typeof format.format == "string"){ format = format.format; }
-	if (typeof format != "string") { format = "MM/DD/YYYY"; }
-
-	// Create a literal regular expression based on format
+	if (typeof format == "object" && typeof format.format == "string") {
+		format = format.format;
+	}
+	if (typeof format != "string") {
+		format = "MM/DD/YYYY";
+	}
 	var reLiteral = format.replace(/([$^.*+?=!:|\/\\\(\)\[\]\{\}])/g, "\\$1");
-
-	// Convert all the tokens to RE elements
-	reLiteral = reLiteral.replace( "YYYY", "([0-9]{4})" );
-	reLiteral = reLiteral.replace( "MM", "(0[1-9]|10|11|12)" );
-	reLiteral = reLiteral.replace( "M", "([1-9]|10|11|12)" );
-	reLiteral = reLiteral.replace( "DDD", "(00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6])" );
-	reLiteral = reLiteral.replace( "DD", "(0[1-9]|[12][0-9]|30|31)" );
-	reLiteral = reLiteral.replace( "D", "([1-9]|[12][0-9]|30|31)" );
-	reLiteral = reLiteral.replace( "ww", "(0[1-9]|[1-4][0-9]|5[0-3])" );
-	reLiteral = reLiteral.replace( "d", "([1-7])" );
-
-	// Anchor pattern to begining and end of string
+	reLiteral = reLiteral.replace("YYYY", "([0-9]{4})");
+	reLiteral = reLiteral.replace("MM", "(0[1-9]|10|11|12)");
+	reLiteral = reLiteral.replace("M", "([1-9]|10|11|12)");
+	reLiteral = reLiteral.replace("DDD", "(00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6])");
+	reLiteral = reLiteral.replace("DD", "(0[1-9]|[12][0-9]|30|31)");
+	reLiteral = reLiteral.replace("D", "([1-9]|[12][0-9]|30|31)");
+	reLiteral = reLiteral.replace("ww", "(0[1-9]|[1-4][0-9]|5[0-3])");
+	reLiteral = reLiteral.replace("d", "([1-7])");
 	reLiteral = "^" + reLiteral + "$";
-
-	// Dynamic RE that parses the original format given
 	var re = new RegExp(reLiteral);
-	
-	// Test if date is in a valid format
-	if (!re.test(dateValue))  return false;
-
-	// Parse date to get elements and check if date is valid
-	// Assume valid values for date elements not given.
+	if (!re.test(dateValue)) {
+		return false;
+	}
 	var year = 0, month = 1, date = 1, dayofyear = 1, week = 1, day = 1;
-
-	// Capture tokens
-	var tokens = format.match( /(YYYY|MM|M|DDD|DD|D|ww|d)/g );
-
-	// Capture date values
+	var tokens = format.match(/(YYYY|MM|M|DDD|DD|D|ww|d)/g);
 	var values = re.exec(dateValue);
-
-	// Match up tokens with date values
 	for (var i = 0; i < tokens.length; i++) {
 		switch (tokens[i]) {
-		case "YYYY":
-			year = Number(values[i+1]); break;
-		case "M":
-		case "MM":
-			month = Number(values[i+1]); break;
-		case "D":
-		case "DD":
-			date = Number(values[i+1]); break;
-		case "DDD":
-			dayofyear = Number(values[i+1]); break;
-		case "ww":
-			week = Number(values[i+1]); break;
-		case "d":
-			day = Number(values[i+1]); break;
+		  case "YYYY":
+			year = Number(values[i + 1]);
+			break;
+		  case "M":
+		  case "MM":
+			month = Number(values[i + 1]);
+			break;
+		  case "D":
+		  case "DD":
+			date = Number(values[i + 1]);
+			break;
+		  case "DDD":
+			dayofyear = Number(values[i + 1]);
+			break;
+		  case "ww":
+			week = Number(values[i + 1]);
+			break;
+		  case "d":
+			day = Number(values[i + 1]);
+			break;
 		}
 	}
-
-	// Leap years are divisible by 4, but not by 100, unless by 400
 	var leapyear = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
-
-	// 31st of a month with 30 days
-	if (date == 31 && (month == 4 || month == 6 || month == 9 || month == 11)) return false; 
-
-	// February 30th or 31st
-	if (date >= 30 && month == 2) return false; 
-
-	// February 29th outside a leap year
-	if (date == 29 && month == 2 && !leapyear) return false; 
-	if (dayofyear == 366 && !leapyear)  return false;
-
+	if (date == 31 && (month == 4 || month == 6 || month == 9 || month == 11)) {
+		return false;
+	}
+	if (date >= 30 && month == 2) {
+		return false;
+	}
+	if (date == 29 && month == 2 && !leapyear) {
+		return false;
+	}
+	if (dayofyear == 366 && !leapyear) {
+		return false;
+	}
 	return true;
-}
+};
 
+
 __CPAN_FILE__ src/validate/web.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -10678,90 +7011,36 @@
 
 dojo.provide("dojo.validate.web");
 dojo.require("dojo.validate.common");
-
-dojo.validate.isIpAddress = function(/*String*/value, /*Object?*/flags) {
-	// summary: Validates an IP address
-	//
-	// description:
-	//  Supports 5 formats for IPv4: dotted decimal, dotted hex, dotted octal, decimal and hexadecimal.
-	//  Supports 2 formats for Ipv6.
-	//
-	// value  A string.
-	// flags  An object.  All flags are boolean with default = true.
-	//    flags.allowDottedDecimal  Example, 207.142.131.235.  No zero padding.
-	//    flags.allowDottedHex  Example, 0x18.0x11.0x9b.0x28.  Case insensitive.  Zero padding allowed.
-	//    flags.allowDottedOctal  Example, 0030.0021.0233.0050.  Zero padding allowed.
-	//    flags.allowDecimal  Example, 3482223595.  A decimal number between 0-4294967295.
-	//    flags.allowHex  Example, 0xCF8E83EB.  Hexadecimal number between 0x0-0xFFFFFFFF.
-	//      Case insensitive.  Zero padding allowed.
-	//    flags.allowIPv6   IPv6 address written as eight groups of four hexadecimal digits.
-	//    flags.allowHybrid   IPv6 address written as six groups of four hexadecimal digits
-	//      followed by the usual 4 dotted decimal digit notation of IPv4. x:x:x:x:x:x:d.d.d.d
-
+dojo.validate.isIpAddress = function (value, flags) {
 	var re = new RegExp("^" + dojo.regexp.ipAddress(flags) + "$", "i");
-	return re.test(value); // Boolean
-}
-
-
-dojo.validate.isUrl = function(/*String*/value, /*Object?*/flags) {
-	// summary: Checks if a string could be a valid URL
-	// value: A string
-	// flags: An object
-	//    flags.scheme  Can be true, false, or [true, false]. 
-	//      This means: required, not allowed, or either.
-	//    flags in regexp.host can be applied.
-	//    flags in regexp.ipAddress can be applied.
-	//    flags in regexp.tld can be applied.
-
+	return re.test(value);
+};
+dojo.validate.isUrl = function (value, flags) {
 	var re = new RegExp("^" + dojo.regexp.url(flags) + "$", "i");
-	return re.test(value); // Boolean
-}
-
-dojo.validate.isEmailAddress = function(/*String*/value, /*Object?*/flags) {
-	// summary: Checks if a string could be a valid email address
-	//
-	// value: A string
-	// flags: An object
-	//    flags.allowCruft  Allow address like <mailto:foo at yahoo.com>.  Default is false.
-	//    flags in regexp.host can be applied.
-	//    flags in regexp.ipAddress can be applied.
-	//    flags in regexp.tld can be applied.
-
+	return re.test(value);
+};
+dojo.validate.isEmailAddress = function (value, flags) {
 	var re = new RegExp("^" + dojo.regexp.emailAddress(flags) + "$", "i");
-	return re.test(value); // Boolean
-}
-
-dojo.validate.isEmailAddressList = function(/*String*/value, /*Object?*/flags) {
-	// summary: Checks if a string could be a valid email address list.
-	//
-	// value  A string.
-	// flags  An object.
-	//    flags.listSeparator  The character used to separate email addresses.  Default is ";", ",", "\n" or " ".
-	//    flags in regexp.emailAddress can be applied.
-	//    flags in regexp.host can be applied.
-	//    flags in regexp.ipAddress can be applied.
-	//    flags in regexp.tld can be applied.
-
+	return re.test(value);
+};
+dojo.validate.isEmailAddressList = function (value, flags) {
 	var re = new RegExp("^" + dojo.regexp.emailAddressList(flags) + "$", "i");
-	return re.test(value); // Boolean
-}
-
-dojo.validate.getEmailAddressList = function(/*String*/value, /*Object?*/flags) {
-	// summary: Check if value is an email address list. If an empty list
-	//  is returned, the value didn't pass the test or it was empty.
-	//
-	// value: A string
-	// flags: An object (same as dojo.validate.isEmailAddressList)
-
-	if(!flags) { flags = {}; }
-	if(!flags.listSeparator) { flags.listSeparator = "\\s;,"; }
-
-	if ( dojo.validate.isEmailAddressList(value, flags) ) {
-		return value.split(new RegExp("\\s*[" + flags.listSeparator + "]\\s*")); // Array
+	return re.test(value);
+};
+dojo.validate.getEmailAddressList = function (value, flags) {
+	if (!flags) {
+		flags = {};
 	}
-	return []; // Array
-}
+	if (!flags.listSeparator) {
+		flags.listSeparator = "\\s;,";
+	}
+	if (dojo.validate.isEmailAddressList(value, flags)) {
+		return value.split(new RegExp("\\s*[" + flags.listSeparator + "]\\s*"));
+	}
+	return [];
+};
 
+
 __CPAN_FILE__ src/validate/creditCard.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -10773,98 +7052,59 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide('dojo.validate.creditCard');
-
+dojo.provide("dojo.validate.creditCard");
 dojo.require("dojo.lang.common");
 dojo.require("dojo.validate.common");
-
-/*
-	Validates Credit Cards using account number rules in conjunction with the Luhn algorigthm
-	
- */
-
-dojo.validate.isValidCreditCard = function(/*String|Int*/value, /*String*/ccType){
-	//Summary:
-	//  checks if type matches the # scheme, and if Luhn checksum is accurate (unless its an Enroute card, the checkSum is skipped)
-	
-	//Value: Boolean
-	if(value&&ccType&&((ccType.toLowerCase()=='er'||dojo.validate.isValidLuhn(value))&&(dojo.validate.isValidCreditCardNumber(value,ccType.toLowerCase())))){
-			return true; //Boolean
+dojo.validate.isValidCreditCard = function (value, ccType) {
+	if (value && ccType && ((ccType.toLowerCase() == "er" || dojo.validate.isValidLuhn(value)) && (dojo.validate.isValidCreditCardNumber(value, ccType.toLowerCase())))) {
+		return true;
 	}
-	return false; //Boolean
-}
-dojo.validate.isValidCreditCardNumber = function(/*String|Int*/value,/*String?*/ccType) {
-	//Summary:
-	//  checks if the # matches the pattern for that card or any card types if none is specified
-	//  value == CC #, white spaces and dashes are ignored
-	//  ccType is of the values in cardinfo -- if Omitted it it returns a | delimited string of matching card types, or false if no matches found
-	
-	//Value: Boolean
-	
-	if(typeof value!='string'){
+	return false;
+};
+dojo.validate.isValidCreditCardNumber = function (value, ccType) {
+	if (typeof value != "string") {
 		value = String(value);
 	}
-	value = value.replace(/[- ]/g,''); //ignore dashes and whitespaces
-	/* 	FIXME: not sure on all the abbreviations for credit cards,below is what each stands for atleast to my knowledge
-		mc: Mastercard
-		ec: Eurocard
-		vi: Visa
-		ax: American Express
-		dc: Diners Club
-		bl: Carte Blanch
-		di: Discover
-		jcb: JCB
-		er: Enroute
-	 */
-	var results=[];
-	var cardinfo = {
-		'mc':'5[1-5][0-9]{14}','ec':'5[1-5][0-9]{14}','vi':'4([0-9]{12}|[0-9]{15})',
-		'ax':'3[47][0-9]{13}', 'dc':'3(0[0-5][0-9]{11}|[68][0-9]{12})',
-		'bl':'3(0[0-5][0-9]{11}|[68][0-9]{12})','di':'6011[0-9]{12}',
-		'jcb':'(3[0-9]{15}|(2131|1800)[0-9]{11})','er':'2(014|149)[0-9]{11}'
-	};
-	if(ccType&&dojo.lang.has(cardinfo,ccType.toLowerCase())){
-		return Boolean(value.match(cardinfo[ccType.toLowerCase()])); // boolean
-	}else{
-		for(var p in cardinfo){
-			if(value.match('^'+cardinfo[p]+'$')!=null){
+	value = value.replace(/[- ]/g, "");
+	var results = [];
+	var cardinfo = {"mc":"5[1-5][0-9]{14}", "ec":"5[1-5][0-9]{14}", "vi":"4([0-9]{12}|[0-9]{15})", "ax":"3[47][0-9]{13}", "dc":"3(0[0-5][0-9]{11}|[68][0-9]{12})", "bl":"3(0[0-5][0-9]{11}|[68][0-9]{12})", "di":"6011[0-9]{12}", "jcb":"(3[0-9]{15}|(2131|1800)[0-9]{11})", "er":"2(014|149)[0-9]{11}"};
+	if (ccType && dojo.lang.has(cardinfo, ccType.toLowerCase())) {
+		return Boolean(value.match(cardinfo[ccType.toLowerCase()]));
+	} else {
+		for (var p in cardinfo) {
+			if (value.match("^" + cardinfo[p] + "$") != null) {
 				results.push(p);
 			}
 		}
-		return (results.length)?results.join('|'):false; // string | boolean
-	}	
-}
-
-dojo.validate.isValidCvv = function(/*String|Int*/value, /*String*/ccType) {
-	//Summary:
-	//  returns true if the security code (CCV) matches the correct format for supplied ccType
-	
-	//Value: Boolean
-	
-	if(typeof value!='string'){
-		value=String(value);
+		return (results.length) ? results.join("|") : false;
 	}
+};
+dojo.validate.isValidCvv = function (value, ccType) {
+	if (typeof value != "string") {
+		value = String(value);
+	}
 	var format;
-	switch (ccType.toLowerCase()){
-		case 'mc':
-		case 'ec':
-		case 'vi':
-		case 'di':
-			format = '###';
-			break;
-		case 'ax':
-			format = '####';
-			break;
-		default:
-			return false; //Boolean
+	switch (ccType.toLowerCase()) {
+	  case "mc":
+	  case "ec":
+	  case "vi":
+	  case "di":
+		format = "###";
+		break;
+	  case "ax":
+		format = "####";
+		break;
+	  default:
+		return false;
 	}
 	var flags = {format:format};
-	//FIXME? Why does isNumberFormat take an object for flags when its only parameter is either a string or an array inside the object?
-	if ((value.length == format.length)&&(dojo.validate.isNumberFormat(value, flags))){
-		return true; //Boolean
+	if ((value.length == format.length) && (dojo.validate.isNumberFormat(value, flags))) {
+		return true;
 	}
-	return false; //Boolean
-}
+	return false;
+};
+
+
 __CPAN_FILE__ src/validate/check.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -10879,261 +7119,226 @@
 dojo.provide("dojo.validate.check");
 dojo.require("dojo.validate.common");
 dojo.require("dojo.lang.common");
-
-dojo.validate.check = function(/*HTMLFormElement*/form, /*Object*/profile){
-	// summary: validates user input of an HTML form based on input profile
-	//
-	// description:
-	//	returns an object that contains several methods summarizing the results of the validation
-	//
-	// form: form to be validated
-	// profile: specifies how the form fields are to be validated
-	// {trim:Array, uppercase:Array, lowercase:Array, ucfirst:Array, digit:Array,
-	//	required:Array, dependencies:Object, constraints:Object, confirm:Object}
-
-	// Essentially private properties of results object
+dojo.validate.check = function (form, profile) {
 	var missing = [];
 	var invalid = [];
-
-	// results object summarizes the validation
-	var results = {
-		isSuccessful: function() {return ( !this.hasInvalid() && !this.hasMissing() );},
-		hasMissing: function() {return ( missing.length > 0 );},
-		getMissing: function() {return missing;},
-		isMissing: function(elemname) {
-			for(var i = 0; i < missing.length; i++){
-				if(elemname == missing[i]){ return true; }
+	var results = {isSuccessful:function () {
+		return (!this.hasInvalid() && !this.hasMissing());
+	}, hasMissing:function () {
+		return (missing.length > 0);
+	}, getMissing:function () {
+		return missing;
+	}, isMissing:function (elemname) {
+		for (var i = 0; i < missing.length; i++) {
+			if (elemname == missing[i]) {
+				return true;
 			}
-			return false;
-		},
-		hasInvalid: function() {return ( invalid.length > 0 );},
-		getInvalid: function() {return invalid;},
-		isInvalid: function(elemname){
-			for(var i = 0; i < invalid.length; i++){
-				if(elemname == invalid[i]){ return true; }
+		}
+		return false;
+	}, hasInvalid:function () {
+		return (invalid.length > 0);
+	}, getInvalid:function () {
+		return invalid;
+	}, isInvalid:function (elemname) {
+		for (var i = 0; i < invalid.length; i++) {
+			if (elemname == invalid[i]) {
+				return true;
 			}
-			return false;
 		}
-	};
-
-	// Filters are applied before fields are validated.
-	// Trim removes white space at the front and end of the fields.
-	if(profile.trim instanceof Array){
-		for(var i = 0; i < profile.trim.length; i++){
+		return false;
+	}};
+	if (profile.trim instanceof Array) {
+		for (var i = 0; i < profile.trim.length; i++) {
 			var elem = form[profile.trim[i]];
-			if(dj_undef("type", elem) || elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; }
+			if (dj_undef("type", elem) || elem.type != "text" && elem.type != "textarea" && elem.type != "password") {
+				continue;
+			}
 			elem.value = elem.value.replace(/(^\s*|\s*$)/g, "");
 		}
 	}
-	// Convert to uppercase
-	if(profile.uppercase instanceof Array){
-		for(var i = 0; i < profile.uppercase.length; i++){
+	if (profile.uppercase instanceof Array) {
+		for (var i = 0; i < profile.uppercase.length; i++) {
 			var elem = form[profile.uppercase[i]];
-			if(dj_undef("type", elem) || elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; }
+			if (dj_undef("type", elem) || elem.type != "text" && elem.type != "textarea" && elem.type != "password") {
+				continue;
+			}
 			elem.value = elem.value.toUpperCase();
 		}
 	}
-	// Convert to lowercase
-	if(profile.lowercase instanceof Array){
-		for (var i = 0; i < profile.lowercase.length; i++){
+	if (profile.lowercase instanceof Array) {
+		for (var i = 0; i < profile.lowercase.length; i++) {
 			var elem = form[profile.lowercase[i]];
-			if(dj_undef("type", elem) || elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; }
+			if (dj_undef("type", elem) || elem.type != "text" && elem.type != "textarea" && elem.type != "password") {
+				continue;
+			}
 			elem.value = elem.value.toLowerCase();
 		}
 	}
-	// Uppercase first letter
-	if(profile.ucfirst instanceof Array){
-		for(var i = 0; i < profile.ucfirst.length; i++){
+	if (profile.ucfirst instanceof Array) {
+		for (var i = 0; i < profile.ucfirst.length; i++) {
 			var elem = form[profile.ucfirst[i]];
-			if(dj_undef("type", elem) || elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; }
-			elem.value = elem.value.replace(/\b\w+\b/g, function(word) { return word.substring(0,1).toUpperCase() + word.substring(1).toLowerCase(); });
+			if (dj_undef("type", elem) || elem.type != "text" && elem.type != "textarea" && elem.type != "password") {
+				continue;
+			}
+			elem.value = elem.value.replace(/\b\w+\b/g, function (word) {
+				return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();
+			});
 		}
 	}
-	// Remove non digits characters from the input.
-	if(profile.digit instanceof Array){
-		for(var i = 0; i < profile.digit.length; i++){
+	if (profile.digit instanceof Array) {
+		for (var i = 0; i < profile.digit.length; i++) {
 			var elem = form[profile.digit[i]];
-			if(dj_undef("type", elem) || elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; }
+			if (dj_undef("type", elem) || elem.type != "text" && elem.type != "textarea" && elem.type != "password") {
+				continue;
+			}
 			elem.value = elem.value.replace(/\D/g, "");
 		}
 	}
-
-	// See if required input fields have values missing.
-	if(profile.required instanceof Array){
-		for(var i = 0; i < profile.required.length; i++){ 
-			if(!dojo.lang.isString(profile.required[i])){ continue; }
+	if (profile.required instanceof Array) {
+		for (var i = 0; i < profile.required.length; i++) {
+			if (!dojo.lang.isString(profile.required[i])) {
+				continue;
+			}
 			var elem = form[profile.required[i]];
-			// Are textbox, textarea, or password fields blank.
-			if(!dj_undef("type", elem) && (elem.type == "text" || elem.type == "textarea" || elem.type == "password") && /^\s*$/.test(elem.value)){	
+			if (!dj_undef("type", elem) && (elem.type == "text" || elem.type == "textarea" || elem.type == "password") && /^\s*$/.test(elem.value)) {
 				missing[missing.length] = elem.name;
-			}
-			// Does drop-down box have option selected.
-			else if(!dj_undef("type", elem) && (elem.type == "select-one" || elem.type == "select-multiple") 
-						&& (elem.selectedIndex == -1 
-						|| /^\s*$/.test(elem.options[elem.selectedIndex].value))){
-				missing[missing.length] = elem.name;
-			}
-			// Does radio button group (or check box group) have option checked.
-			else if(elem instanceof Array){
-				var checked = false;
-				for(var j = 0; j < elem.length; j++){
-					if (elem[j].checked) { checked = true; }
+			} else {
+				if (!dj_undef("type", elem) && (elem.type == "select-one" || elem.type == "select-multiple") && (elem.selectedIndex == -1 || /^\s*$/.test(elem.options[elem.selectedIndex].value))) {
+					missing[missing.length] = elem.name;
+				} else {
+					if (elem instanceof Array) {
+						var checked = false;
+						for (var j = 0; j < elem.length; j++) {
+							if (elem[j].checked) {
+								checked = true;
+							}
+						}
+						if (!checked) {
+							missing[missing.length] = elem[0].name;
+						}
+					}
 				}
-				if(!checked){	
-					missing[missing.length] = elem[0].name;
-				}
 			}
 		}
 	}
-
-	// See if checkbox groups and select boxes have x number of required values.
-	if(profile.required instanceof Array){
-		for (var i = 0; i < profile.required.length; i++){ 
-			if(!dojo.lang.isObject(profile.required[i])){ continue; }
+	if (profile.required instanceof Array) {
+		for (var i = 0; i < profile.required.length; i++) {
+			if (!dojo.lang.isObject(profile.required[i])) {
+				continue;
+			}
 			var elem, numRequired;
-			for(var name in profile.required[i]){ 
-				elem = form[name]; 
+			for (var name in profile.required[i]) {
+				elem = form[name];
 				numRequired = profile.required[i][name];
 			}
-			// case 1: elem is a check box group
-			if(elem instanceof Array){
+			if (elem instanceof Array) {
 				var checked = 0;
-				for(var j = 0; j < elem.length; j++){
-					if(elem[j].checked){ checked++; }
+				for (var j = 0; j < elem.length; j++) {
+					if (elem[j].checked) {
+						checked++;
+					}
 				}
-				if(checked < numRequired){	
+				if (checked < numRequired) {
 					missing[missing.length] = elem[0].name;
 				}
-			}
-			// case 2: elem is a select box
-			else if(!dj_undef("type", elem) && elem.type == "select-multiple" ){
-				var selected = 0;
-				for(var j = 0; j < elem.options.length; j++){
-					if (elem.options[j].selected && !/^\s*$/.test(elem.options[j].value)) { selected++; }
+			} else {
+				if (!dj_undef("type", elem) && elem.type == "select-multiple") {
+					var selected = 0;
+					for (var j = 0; j < elem.options.length; j++) {
+						if (elem.options[j].selected && !/^\s*$/.test(elem.options[j].value)) {
+							selected++;
+						}
+					}
+					if (selected < numRequired) {
+						missing[missing.length] = elem.name;
+					}
 				}
-				if(selected < numRequired){	
-					missing[missing.length] = elem.name;
-				}
 			}
 		}
 	}
-
-	// Dependent fields are required when the target field is present (not blank).
-	// Todo: Support dependent and target fields that are radio button groups, or select drop-down lists.
-	// Todo: Make the dependency based on a specific value of the target field.
-	// Todo: allow dependent fields to have several required values, like {checkboxgroup: 3}.
-	if(dojo.lang.isObject(profile.dependencies) || dojo.lang.isObject(profile.dependancies)){
-		if(profile["dependancies"]){
-			dojo.deprecated("dojo.validate.check", "profile 'dependancies' is deprecated, please use "
-							+ "'dependencies'", "0.5");
-			profile.dependencies=profile.dependancies;
+	if (dojo.lang.isObject(profile.dependencies) || dojo.lang.isObject(profile.dependancies)) {
+		if (profile["dependancies"]) {
+			dojo.deprecated("dojo.validate.check", "profile 'dependancies' is deprecated, please use " + "'dependencies'", "0.5");
+			profile.dependencies = profile.dependancies;
 		}
-		// properties of dependencies object are the names of dependent fields to be checked
-		for(name in profile.dependencies){
-			var elem = form[name];	// the dependent element
-			if(dj_undef("type", elem)){continue;}
-			if(elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; } // limited support
-			if(/\S+/.test(elem.value)){ continue; }	// has a value already
-			if(results.isMissing(elem.name)){ continue; }	// already listed as missing
+		for (name in profile.dependencies) {
+			var elem = form[name];
+			if (dj_undef("type", elem)) {
+				continue;
+			}
+			if (elem.type != "text" && elem.type != "textarea" && elem.type != "password") {
+				continue;
+			}
+			if (/\S+/.test(elem.value)) {
+				continue;
+			}
+			if (results.isMissing(elem.name)) {
+				continue;
+			}
 			var target = form[profile.dependencies[name]];
-			if(target.type != "text" && target.type != "textarea" && target.type != "password"){ continue; }	// limited support
-			if(/^\s*$/.test(target.value)){ continue; }	// skip if blank
-			missing[missing.length] = elem.name;	// ok the dependent field is missing
+			if (target.type != "text" && target.type != "textarea" && target.type != "password") {
+				continue;
+			}
+			if (/^\s*$/.test(target.value)) {
+				continue;
+			}
+			missing[missing.length] = elem.name;
 		}
 	}
-
-	// Find invalid input fields.
-	if(dojo.lang.isObject(profile.constraints)){
-		// constraint properties are the names of fields to bevalidated
-		for(name in profile.constraints){
+	if (dojo.lang.isObject(profile.constraints)) {
+		for (name in profile.constraints) {
 			var elem = form[name];
-			if(!elem) {continue;}
-			
-			// skip if blank - its optional unless required, in which case it
-			// is already listed as missing.
-			if(!dj_undef("tagName",elem) 
-				&& (elem.tagName.toLowerCase().indexOf("input") >= 0
-					|| elem.tagName.toLowerCase().indexOf("textarea") >= 0) 
-				&& /^\s*$/.test(elem.value)){ 
-				continue; 
+			if (!elem) {
+				continue;
 			}
-			
+			if (!dj_undef("tagName", elem) && (elem.tagName.toLowerCase().indexOf("input") >= 0 || elem.tagName.toLowerCase().indexOf("textarea") >= 0) && /^\s*$/.test(elem.value)) {
+				continue;
+			}
 			var isValid = true;
-			// case 1: constraint value is validation function
-			if(dojo.lang.isFunction(profile.constraints[name])){
+			if (dojo.lang.isFunction(profile.constraints[name])) {
 				isValid = profile.constraints[name](elem.value);
-			}else if(dojo.lang.isArray(profile.constraints[name])){
-				
-				// handle nested arrays for multiple constraints
-				if(dojo.lang.isArray(profile.constraints[name][0])){
-					for (var i=0; i<profile.constraints[name].length; i++){
-						isValid = dojo.validate.evaluateConstraint(profile, profile.constraints[name][i], name, elem);
-						if(!isValid){ break; }
+			} else {
+				if (dojo.lang.isArray(profile.constraints[name])) {
+					if (dojo.lang.isArray(profile.constraints[name][0])) {
+						for (var i = 0; i < profile.constraints[name].length; i++) {
+							isValid = dojo.validate.evaluateConstraint(profile, profile.constraints[name][i], name, elem);
+							if (!isValid) {
+								break;
+							}
+						}
+					} else {
+						isValid = dojo.validate.evaluateConstraint(profile, profile.constraints[name], name, elem);
 					}
-				}else{
-					// case 2: constraint value is array, first elem is function,
-					// tail is parameters
-					isValid = dojo.validate.evaluateConstraint(profile, profile.constraints[name], name, elem);
 				}
 			}
-			
-			if(!isValid){	
+			if (!isValid) {
 				invalid[invalid.length] = elem.name;
 			}
 		}
 	}
-
-	// Find unequal confirm fields and report them as Invalid.
-	if(dojo.lang.isObject(profile.confirm)){
-		for(name in profile.confirm){
-			var elem = form[name];	// the confirm element
+	if (dojo.lang.isObject(profile.confirm)) {
+		for (name in profile.confirm) {
+			var elem = form[name];
 			var target = form[profile.confirm[name]];
-			if (dj_undef("type", elem) || dj_undef("type", target) || (elem.type != "text" && elem.type != "textarea" && elem.type != "password") 
-				||(target.type != elem.type)
-				||(target.value == elem.value)	// it's valid
-				||(results.isInvalid(elem.name))// already listed as invalid
-				||(/^\s*$/.test(target.value)))	// skip if blank - only confirm if target has a value
-			{
-				continue; 
+			if (dj_undef("type", elem) || dj_undef("type", target) || (elem.type != "text" && elem.type != "textarea" && elem.type != "password") || (target.type != elem.type) || (target.value == elem.value) || (results.isInvalid(elem.name)) || (/^\s*$/.test(target.value))) {
+				continue;
 			}
 			invalid[invalid.length] = elem.name;
 		}
 	}
-
-	return results; // Object
+	return results;
 };
-
-//TODO: evaluateConstraint doesn't use profile or fieldName args?
-dojo.validate.evaluateConstraint=function(profile, /*Array*/constraint, fieldName, elem){
-	// summary:
-	//	Evaluates dojo.validate.check() constraints that are specified as array
-	//	arguments
-	//
-	// description: The arrays are expected to be in the format of:
-	//      constraints:{
-	//              fieldName: [functionToCall, param1, param2, etc.],
-	//              fieldName: [[functionToCallFirst, param1],[functionToCallSecond,param2]]
-	//      }
-	// 
-	//  This function evaluates a single array function in the format of:
-	//      [functionName, argument1, argument2, etc]
-	// 
-	//  The function will be parsed out and evaluated against the incoming parameters.
-	//
-	// profile: The dojo.validate.check() profile that this evaluation is against.
-	// constraint: The single [] array of function and arguments for the function.
-	// fieldName: The form dom name of the field being validated.
-	// elem: The form element field.
-	
- 	var isValidSomething = constraint[0];
+dojo.validate.evaluateConstraint = function (profile, constraint, fieldName, elem) {
+	var isValidSomething = constraint[0];
 	var params = constraint.slice(1);
 	params.unshift(elem.value);
-	if(typeof isValidSomething != "undefined"){
+	if (typeof isValidSomething != "undefined") {
 		return isValidSomething.apply(null, params);
 	}
-	return false; // Boolean
-}
+	return false;
+};
 
+
 __CPAN_DIR__ src/animation
 __CPAN_FILE__ src/animation/Timer.js
 /*
@@ -11148,11 +7353,10 @@
 
 dojo.provide("dojo.animation.Timer");
 dojo.require("dojo.lang.timing.Timer");
-
 dojo.deprecated("dojo.animation.Timer is now dojo.lang.timing.Timer", "0.5");
-
 dojo.animation.Timer = dojo.lang.timing.Timer;
 
+
 __CPAN_FILE__ src/animation/Animation.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -11166,240 +7370,173 @@
 
 dojo.provide("dojo.animation.Animation");
 dojo.require("dojo.animation.AnimationEvent");
-
 dojo.require("dojo.lang.func");
 dojo.require("dojo.math");
 dojo.require("dojo.math.curves");
-
 dojo.deprecated("dojo.animation.Animation is slated for removal in 0.5; use dojo.lfx.* instead.", "0.5");
-
-/*
-Animation package based off of Dan Pupius' work on Animations:
-http://pupius.co.uk/js/Toolkit.Drawing.js
-*/
-
-dojo.animation.Animation = function(/*dojo.math.curves.* */ curve, /*int*/ duration, /*Decimal?*/ accel, /*int?*/ repeatCount, /*int?*/ rate) {
-	// summary: Animation object iterates a set of numbers over a curve for a given amount of time, calling 'onAnimate' at each step.
-	// curve: Curve to animate over.
-	// duration: Duration of the animation, in milliseconds.
-	// accel: Either an integer or curve representing amount of acceleration. (?)  Default is linear acceleration.
-	// repeatCount: Number of times to repeat the animation.  Default is 0.
-	// rate: Time between animation steps, in milliseconds.  Default is 25.
-	// description: Calls the following events: "onBegin", "onAnimate", "onEnd", "onPlay", "onPause", "onStop"
-	// 				If the animation implements a "handler" function, that will be called before each event is called.
-
-	if(dojo.lang.isArray(curve)) {
-		// curve: Array
-		// id: i
+dojo.animation.Animation = function (curve, duration, accel, repeatCount, rate) {
+	if (dojo.lang.isArray(curve)) {
 		curve = new dojo.math.curves.Line(curve[0], curve[1]);
 	}
 	this.curve = curve;
 	this.duration = duration;
 	this.repeatCount = repeatCount || 0;
 	this.rate = rate || 25;
-	if(accel) {
-		// accel: Decimal
-		// id: j
-		if(dojo.lang.isFunction(accel.getValue)) {
-			// accel: dojo.math.curves.CatmullRom
-			// id: k
+	if (accel) {
+		if (dojo.lang.isFunction(accel.getValue)) {
 			this.accel = accel;
 		} else {
-			var i = 0.35*accel+0.5;	// 0.15 <= i <= 0.85
+			var i = 0.35 * accel + 0.5;
 			this.accel = new dojo.math.curves.CatmullRom([[0], [i], [1]], 0.45);
 		}
 	}
-}
-
-dojo.lang.extend(dojo.animation.Animation, {
-	// public properties
-	curve: null,
-	duration: 0,
-	repeatCount: 0,
-	accel: null,
-
-	// events
-	onBegin: null,
-	onAnimate: null,
-	onEnd: null,
-	onPlay: null,
-	onPause: null,
-	onStop: null,
-	handler: null,
-
-	// "private" properties
-	_animSequence: null,
-	_startTime: null,
-	_endTime: null,
-	_lastFrame: null,
-	_timer: null,
-	_percent: 0,
-	_active: false,
-	_paused: false,
-	_startRepeatCount: 0,
-
-	// public methods
-	play: function(/*Boolean?*/ gotoStart) {
-		// summary:  Play the animation.
-		// goToStart: If true, will restart the animation from the beginning.  
-		//				Otherwise, starts from current play counter.
-		// description: Sends an "onPlay" event to any observers.
-		//				Also sends an "onBegin" event if starting from the beginning.
-		if( gotoStart ) {
-			clearTimeout(this._timer);
-			this._active = false;
-			this._paused = false;
-			this._percent = 0;
-		} else if( this._active && !this._paused ) {
+};
+dojo.lang.extend(dojo.animation.Animation, {curve:null, duration:0, repeatCount:0, accel:null, onBegin:null, onAnimate:null, onEnd:null, onPlay:null, onPause:null, onStop:null, handler:null, _animSequence:null, _startTime:null, _endTime:null, _lastFrame:null, _timer:null, _percent:0, _active:false, _paused:false, _startRepeatCount:0, play:function (gotoStart) {
+	if (gotoStart) {
+		clearTimeout(this._timer);
+		this._active = false;
+		this._paused = false;
+		this._percent = 0;
+	} else {
+		if (this._active && !this._paused) {
 			return;
 		}
-
-		this._startTime = new Date().valueOf();
-		if( this._paused ) {
-			this._startTime -= (this.duration * this._percent / 100);
+	}
+	this._startTime = new Date().valueOf();
+	if (this._paused) {
+		this._startTime -= (this.duration * this._percent / 100);
+	}
+	this._endTime = this._startTime + this.duration;
+	this._lastFrame = this._startTime;
+	var e = new dojo.animation.AnimationEvent(this, null, this.curve.getValue(this._percent), this._startTime, this._startTime, this._endTime, this.duration, this._percent, 0);
+	this._active = true;
+	this._paused = false;
+	if (this._percent == 0) {
+		if (!this._startRepeatCount) {
+			this._startRepeatCount = this.repeatCount;
 		}
-		this._endTime = this._startTime + this.duration;
-		this._lastFrame = this._startTime;
-
-		var e = new dojo.animation.AnimationEvent(this, null, this.curve.getValue(this._percent),
-			this._startTime, this._startTime, this._endTime, this.duration, this._percent, 0);
-
-		this._active = true;
-		this._paused = false;
-
-		if( this._percent == 0 ) {
-			if(!this._startRepeatCount) {
-				this._startRepeatCount = this.repeatCount;
-			}
-			e.type = "begin";
-			if(typeof this.handler == "function") { this.handler(e); }
-			if(typeof this.onBegin == "function") { this.onBegin(e); }
+		e.type = "begin";
+		if (typeof this.handler == "function") {
+			this.handler(e);
 		}
-
-		e.type = "play";
-		if(typeof this.handler == "function") { this.handler(e); }
-		if(typeof this.onPlay == "function") { this.onPlay(e); }
-
-		if(this._animSequence) { this._animSequence._setCurrent(this); }
-
-		this._cycle();
-	},
-
-	pause: function() {
-		// summary: Temporarily stop the animation, leaving the play counter at the current location.
-		// 			Resume later with sequence.play()
-		// description: Sends an "onPause" AnimationEvent to any observers.
-		clearTimeout(this._timer);
-		if( !this._active ) { return; }
-		this._paused = true;
-		var e = new dojo.animation.AnimationEvent(this, "pause", this.curve.getValue(this._percent),
-			this._startTime, new Date().valueOf(), this._endTime, this.duration, this._percent, 0);
-		if(typeof this.handler == "function") { this.handler(e); }
-		if(typeof this.onPause == "function") { this.onPause(e); }
-	},
-
-	playPause: function() {
-		// summary: Toggle between play and paused states.
-		if( !this._active || this._paused ) {
-			this.play();
-		} else {
-			this.pause();
+		if (typeof this.onBegin == "function") {
+			this.onBegin(e);
 		}
-	},
-
-	gotoPercent: function(/*int*/ pct, /*Boolean*/ andPlay) {
-		// summary: Set the play counter at a certain point in the animation.
-		// pct: Point to set the play counter to, expressed as a percentage (0 to 100).
-		// andPlay: If true, will start the animation at the counter automatically.
-		clearTimeout(this._timer);
-		this._active = true;
-		this._paused = true;
-		this._percent = pct;
-		if( andPlay ) { this.play(); }
-	},
-
-	stop: function(/*Boolean?*/ gotoEnd) {
-		// summary: Stop the animation.
-		// gotoEnd: If true, will advance play counter to the end before sending the event.
-		// description: Sends an "onStop" AnimationEvent to any observers.
-		clearTimeout(this._timer);
-		var step = this._percent / 100;
-		if( gotoEnd ) {
+	}
+	e.type = "play";
+	if (typeof this.handler == "function") {
+		this.handler(e);
+	}
+	if (typeof this.onPlay == "function") {
+		this.onPlay(e);
+	}
+	if (this._animSequence) {
+		this._animSequence._setCurrent(this);
+	}
+	this._cycle();
+}, pause:function () {
+	clearTimeout(this._timer);
+	if (!this._active) {
+		return;
+	}
+	this._paused = true;
+	var e = new dojo.animation.AnimationEvent(this, "pause", this.curve.getValue(this._percent), this._startTime, new Date().valueOf(), this._endTime, this.duration, this._percent, 0);
+	if (typeof this.handler == "function") {
+		this.handler(e);
+	}
+	if (typeof this.onPause == "function") {
+		this.onPause(e);
+	}
+}, playPause:function () {
+	if (!this._active || this._paused) {
+		this.play();
+	} else {
+		this.pause();
+	}
+}, gotoPercent:function (pct, andPlay) {
+	clearTimeout(this._timer);
+	this._active = true;
+	this._paused = true;
+	this._percent = pct;
+	if (andPlay) {
+		this.play();
+	}
+}, stop:function (gotoEnd) {
+	clearTimeout(this._timer);
+	var step = this._percent / 100;
+	if (gotoEnd) {
+		step = 1;
+	}
+	var e = new dojo.animation.AnimationEvent(this, "stop", this.curve.getValue(step), this._startTime, new Date().valueOf(), this._endTime, this.duration, this._percent);
+	if (typeof this.handler == "function") {
+		this.handler(e);
+	}
+	if (typeof this.onStop == "function") {
+		this.onStop(e);
+	}
+	this._active = false;
+	this._paused = false;
+}, status:function () {
+	if (this._active) {
+		return this._paused ? "paused" : "playing";
+	} else {
+		return "stopped";
+	}
+}, _cycle:function () {
+	clearTimeout(this._timer);
+	if (this._active) {
+		var curr = new Date().valueOf();
+		var step = (curr - this._startTime) / (this._endTime - this._startTime);
+		var fps = 1000 / (curr - this._lastFrame);
+		this._lastFrame = curr;
+		if (step >= 1) {
 			step = 1;
-		}
-		var e = new dojo.animation.AnimationEvent(this, "stop", this.curve.getValue(step),
-			this._startTime, new Date().valueOf(), this._endTime, this.duration, this._percent);
-		if(typeof this.handler == "function") { this.handler(e); }
-		if(typeof this.onStop == "function") { this.onStop(e); }
-		this._active = false;
-		this._paused = false;
-	},
-
-	status: function() {
-		// summary: Return the status of the animation.
-		// description: Returns one of "playing", "paused" or "stopped".
-		if( this._active ) {
-			return this._paused ? "paused" : "playing";	/* String */
+			this._percent = 100;
 		} else {
-			return "stopped";	/* String */
+			this._percent = step * 100;
 		}
-	},
-
-	// "private" methods
-	_cycle: function() {
-		// summary: Perform once 'cycle' or step of the animation.
-		clearTimeout(this._timer);
-		if( this._active ) {
-			var curr = new Date().valueOf();
-			var step = (curr - this._startTime) / (this._endTime - this._startTime);
-			var fps = 1000 / (curr - this._lastFrame);
-			this._lastFrame = curr;
-
-			if( step >= 1 ) {
-				step = 1;
-				this._percent = 100;
-			} else {
-				this._percent = step * 100;
+		if (this.accel && this.accel.getValue) {
+			step = this.accel.getValue(step);
+		}
+		var e = new dojo.animation.AnimationEvent(this, "animate", this.curve.getValue(step), this._startTime, curr, this._endTime, this.duration, this._percent, Math.round(fps));
+		if (typeof this.handler == "function") {
+			this.handler(e);
+		}
+		if (typeof this.onAnimate == "function") {
+			this.onAnimate(e);
+		}
+		if (step < 1) {
+			this._timer = setTimeout(dojo.lang.hitch(this, "_cycle"), this.rate);
+		} else {
+			e.type = "end";
+			this._active = false;
+			if (typeof this.handler == "function") {
+				this.handler(e);
 			}
-			
-			// Perform accelleration
-			if(this.accel && this.accel.getValue) {
-				step = this.accel.getValue(step);
+			if (typeof this.onEnd == "function") {
+				this.onEnd(e);
 			}
-
-			var e = new dojo.animation.AnimationEvent(this, "animate", this.curve.getValue(step),
-				this._startTime, curr, this._endTime, this.duration, this._percent, Math.round(fps));
-
-			if(typeof this.handler == "function") { this.handler(e); }
-			if(typeof this.onAnimate == "function") { this.onAnimate(e); }
-
-			if( step < 1 ) {
-				this._timer = setTimeout(dojo.lang.hitch(this, "_cycle"), this.rate);
+			if (this.repeatCount > 0) {
+				this.repeatCount--;
+				this.play(true);
 			} else {
-				e.type = "end";
-				this._active = false;
-				if(typeof this.handler == "function") { this.handler(e); }
-				if(typeof this.onEnd == "function") { this.onEnd(e); }
-
-				if( this.repeatCount > 0 ) {
-					this.repeatCount--;
+				if (this.repeatCount == -1) {
 					this.play(true);
-				} else if( this.repeatCount == -1 ) {
-					this.play(true);
 				} else {
-					if(this._startRepeatCount) {
+					if (this._startRepeatCount) {
 						this.repeatCount = this._startRepeatCount;
 						this._startRepeatCount = 0;
 					}
-					if( this._animSequence ) {
+					if (this._animSequence) {
 						this._animSequence._playNext();
 					}
 				}
 			}
 		}
 	}
-});
+}});
 
+
 __CPAN_FILE__ src/animation/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -11411,17 +7548,11 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: [
-		"dojo.animation.AnimationEvent",
-		"dojo.animation.Animation",
-		"dojo.animation.AnimationSequence"
-	]
-});
+dojo.kwCompoundRequire({common:["dojo.animation.AnimationEvent", "dojo.animation.Animation", "dojo.animation.AnimationSequence"]});
 dojo.provide("dojo.animation.*");
-
 dojo.deprecated("dojo.Animation.* is slated for removal in 0.5; use dojo.lfx.* instead.", "0.5");
 
+
 __CPAN_FILE__ src/animation/AnimationSequence.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -11436,156 +7567,120 @@
 dojo.provide("dojo.animation.AnimationSequence");
 dojo.require("dojo.animation.AnimationEvent");
 dojo.require("dojo.animation.Animation");
-
 dojo.deprecated("dojo.animation.AnimationSequence is slated for removal in 0.5; use dojo.lfx.* instead.", "0.5");
-
-dojo.animation.AnimationSequence = function(/*int?*/ repeatCount){
-	// summary: Sequence of Animations, played one after the other.
-	// repeatCount: Number of times to repeat the entire sequence.  Default is 0 (play once only).
-	// description: Calls the following events: "onBegin", "onEnd", "onNext"
-	// 				If the animation implements a "handler" function, that will be called before each event is called.
+dojo.animation.AnimationSequence = function (repeatCount) {
 	this._anims = [];
 	this.repeatCount = repeatCount || 0;
-}
-
-dojo.lang.extend(dojo.animation.AnimationSequence, {
-	repeatCount: 0,
-
-	_anims: [],
-	_currAnim: -1,
-
-	onBegin: null,
-	onEnd: null,
-	onNext: null,
-	handler: null,
-
-	add: function() {
-		// summary: Add one or more Animations to the sequence.
-		// description:  args: Animations (dojo.animation.Animation) to add to the sequence.
-		for(var i = 0; i < arguments.length; i++) {
-			this._anims.push(arguments[i]);
-			arguments[i]._animSequence = this;
-		}
-	},
-
-	remove: function(/*dojo.animation.Animation*/ anim) {
-		// summary: Remove one particular animation from the sequence.
-		//	amim: Animation to remove.
-		for(var i = 0; i < this._anims.length; i++) {
-			if( this._anims[i] == anim ) {
-				this._anims[i]._animSequence = null;
-				this._anims.splice(i, 1);
-				break;
-			}
-		}
-	},
-
-	removeAll: function() {
-		// summary: Remove all animations from the sequence.
-		for(var i = 0; i < this._anims.length; i++) {
+};
+dojo.lang.extend(dojo.animation.AnimationSequence, {repeatCount:0, _anims:[], _currAnim:-1, onBegin:null, onEnd:null, onNext:null, handler:null, add:function () {
+	for (var i = 0; i < arguments.length; i++) {
+		this._anims.push(arguments[i]);
+		arguments[i]._animSequence = this;
+	}
+}, remove:function (anim) {
+	for (var i = 0; i < this._anims.length; i++) {
+		if (this._anims[i] == anim) {
 			this._anims[i]._animSequence = null;
+			this._anims.splice(i, 1);
+			break;
 		}
-		this._anims = [];
-		this._currAnim = -1;
-	},
-
-	clear: function() {
-		// summary: Remove all animations from the sequence.
-		this.removeAll();
-	},
-
-	play: function(/*Boolean?*/ gotoStart) {
-		// summary: Play the animation sequence.
-		// gotoStart: If true, will start at the beginning of the first sequence.
-		//				Otherwise, starts at the current play counter of the current animation.
-		// description: Sends an "onBegin" event to any observers.
-		if( this._anims.length == 0 ) { return; }
-		if( gotoStart || !this._anims[this._currAnim] ) {
-			this._currAnim = 0;
-		}
-		if( this._anims[this._currAnim] ) {
-			if( this._currAnim == 0 ) {
-				var e = {type: "begin", animation: this._anims[this._currAnim]};
-				if(typeof this.handler == "function") { this.handler(e); }
-				if(typeof this.onBegin == "function") { this.onBegin(e); }
+	}
+}, removeAll:function () {
+	for (var i = 0; i < this._anims.length; i++) {
+		this._anims[i]._animSequence = null;
+	}
+	this._anims = [];
+	this._currAnim = -1;
+}, clear:function () {
+	this.removeAll();
+}, play:function (gotoStart) {
+	if (this._anims.length == 0) {
+		return;
+	}
+	if (gotoStart || !this._anims[this._currAnim]) {
+		this._currAnim = 0;
+	}
+	if (this._anims[this._currAnim]) {
+		if (this._currAnim == 0) {
+			var e = {type:"begin", animation:this._anims[this._currAnim]};
+			if (typeof this.handler == "function") {
+				this.handler(e);
 			}
-			this._anims[this._currAnim].play(gotoStart);
+			if (typeof this.onBegin == "function") {
+				this.onBegin(e);
+			}
 		}
-	},
-
-	pause: function() {
-		// summary: temporarily stop the current animation.  Resume later with sequence.play()
-		if( this._anims[this._currAnim] ) {
-			this._anims[this._currAnim].pause();
+		this._anims[this._currAnim].play(gotoStart);
+	}
+}, pause:function () {
+	if (this._anims[this._currAnim]) {
+		this._anims[this._currAnim].pause();
+	}
+}, playPause:function () {
+	if (this._anims.length == 0) {
+		return;
+	}
+	if (this._currAnim == -1) {
+		this._currAnim = 0;
+	}
+	if (this._anims[this._currAnim]) {
+		this._anims[this._currAnim].playPause();
+	}
+}, stop:function () {
+	if (this._anims[this._currAnim]) {
+		this._anims[this._currAnim].stop();
+	}
+}, status:function () {
+	if (this._anims[this._currAnim]) {
+		return this._anims[this._currAnim].status();
+	} else {
+		return "stopped";
+	}
+}, _setCurrent:function (anim) {
+	for (var i = 0; i < this._anims.length; i++) {
+		if (this._anims[i] == anim) {
+			this._currAnim = i;
+			break;
 		}
-	},
-
-	playPause: function() {
-		// summary: Toggle between play and paused states.
-		if( this._anims.length == 0 ) { return; }
-		if( this._currAnim == -1 ) { this._currAnim = 0; }
-		if( this._anims[this._currAnim] ) {
-			this._anims[this._currAnim].playPause();
+	}
+}, _playNext:function () {
+	if (this._currAnim == -1 || this._anims.length == 0) {
+		return;
+	}
+	this._currAnim++;
+	if (this._anims[this._currAnim]) {
+		var e = {type:"next", animation:this._anims[this._currAnim]};
+		if (typeof this.handler == "function") {
+			this.handler(e);
 		}
-	},
-
-	stop: function() {
-		// summary: Stop the current animation.
-		if( this._anims[this._currAnim] ) {
-			this._anims[this._currAnim].stop();
+		if (typeof this.onNext == "function") {
+			this.onNext(e);
 		}
-	},
-
-	status: function() {
-		// summary: Return the status of the current animation.
-		// description: Returns one of "playing", "paused" or "stopped".
-		if( this._anims[this._currAnim] ) {
-			return this._anims[this._currAnim].status();
-		} else {
-			return "stopped";
+		this._anims[this._currAnim].play(true);
+	} else {
+		var e = {type:"end", animation:this._anims[this._anims.length - 1]};
+		if (typeof this.handler == "function") {
+			this.handler(e);
 		}
-	},
-
-	_setCurrent: function(/*dojo.animation.Animation*/ anim) {
-		// summary: Set the current animation.
-		// anim: Animation to make current, must have already been added to the sequence.
-		for(var i = 0; i < this._anims.length; i++) {
-			if( this._anims[i] == anim ) {
-				this._currAnim = i;
-				break;
-			}
+		if (typeof this.onEnd == "function") {
+			this.onEnd(e);
 		}
-	},
-
-	_playNext: function() {
-		// summary: Play the next animation in the sequence.
-		// description:  Sends an "onNext" event to any observers.
-		//				 Also sends "onEnd" if the last animation is finished.
-		if( this._currAnim == -1 || this._anims.length == 0 ) { return; }
-		this._currAnim++;
-		if( this._anims[this._currAnim] ) {
-			var e = {type: "next", animation: this._anims[this._currAnim]};
-			if(typeof this.handler == "function") { this.handler(e); }
-			if(typeof this.onNext == "function") { this.onNext(e); }
+		if (this.repeatCount > 0) {
+			this._currAnim = 0;
+			this.repeatCount--;
 			this._anims[this._currAnim].play(true);
 		} else {
-			var e = {type: "end", animation: this._anims[this._anims.length-1]};
-			if(typeof this.handler == "function") { this.handler(e); }
-			if(typeof this.onEnd == "function") { this.onEnd(e); }
-			if(this.repeatCount > 0) {
+			if (this.repeatCount == -1) {
 				this._currAnim = 0;
-				this.repeatCount--;
 				this._anims[this._currAnim].play(true);
-			} else if(this.repeatCount == -1) {
-				this._currAnim = 0;
-				this._anims[this._currAnim].play(true);
 			} else {
 				this._currAnim = -1;
 			}
 		}
 	}
-});
+}});
 
+
 __CPAN_FILE__ src/animation/AnimationEvent.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -11599,59 +7694,30 @@
 
 dojo.provide("dojo.animation.AnimationEvent");
 dojo.require("dojo.lang.common");
-
 dojo.deprecated("dojo.animation.AnimationEvent is slated for removal in 0.5; use dojo.lfx.* instead.", "0.5");
-
-dojo.animation.AnimationEvent = function(
-				/*dojo.animation.Animation*/ animation, 
-				/*String*/type, 
-				/*int[] */ coords, 
-				/*int*/ startTime, 
-				/*int*/ currentTime, 
-				/*int*/ endTime, 
-				/*int*/ duration, 
-				/*int*/ percent, 
-				/*int?*/ fps) {
-	// summary: Event sent at various points during an Animation.
-	// animation: Animation throwing the event.
-	// type: One of: "animate", "begin", "end", "play", "pause" or "stop".
-	// coords: Current coordinates of the animation.
-	// startTime: Time the animation was started, as milliseconds.
-	// currentTime: Time the event was thrown, as milliseconds.
-	// endTime: Time the animation is expected to complete, as milliseconds.
-	// duration: Duration of the animation, in milliseconds.
-	// percent: Percent of the animation that has completed, between 0 and 100.
-	// fps: Frames currently shown per second.  (Only sent for "animate" event).
-	// description: The AnimationEvent has public properties of the same name as
-	//				 all constructor arguments, plus "x", "y" and "z".
-	
-	this.type = type; // "animate", "begin", "end", "play", "pause", "stop"
+dojo.animation.AnimationEvent = function (animation, type, coords, startTime, currentTime, endTime, duration, percent, fps) {
+	this.type = type;
 	this.animation = animation;
-
 	this.coords = coords;
 	this.x = coords[0];
 	this.y = coords[1];
 	this.z = coords[2];
-
 	this.startTime = startTime;
 	this.currentTime = currentTime;
 	this.endTime = endTime;
-
 	this.duration = duration;
 	this.percent = percent;
 	this.fps = fps;
 };
-dojo.extend(dojo.animation.AnimationEvent, {
-	coordsAsInts: function() {
-		// summary: Coerce the coordinates into integers.
-		var cints = new Array(this.coords.length);
-		for(var i = 0; i < this.coords.length; i++) {
-			cints[i] = Math.round(this.coords[i]);
-		}
-		return cints;
+dojo.extend(dojo.animation.AnimationEvent, {coordsAsInts:function () {
+	var cints = new Array(this.coords.length);
+	for (var i = 0; i < this.coords.length; i++) {
+		cints[i] = Math.round(this.coords[i]);
 	}
-});
+	return cints;
+}});
 
+
 __CPAN_DIR__ src/debug
 __CPAN_FILE__ src/debug/arrow_show.gif
 GIF89a	 	 Ä !/=)5*6$.",%4DZgt(8H&6F8HXAP_'3TaofrDSb*;Lht€q|ˆ,8!/<p|‡#1@#.(4ÿÿÿ                     !ù   ,    	 	  " †QbYFYB†£bŒòjrTR`"À5¨“á%°¼0—W ;
@@ -11670,57 +7736,50 @@
 
 dojo.provide("dojo.debug.Firebug");
 dojo.deprecated("dojo.debug.Firebug is slated for removal in 0.5; use dojo.debug.console instead.", "0.5");
-
-// summary
-// Firebug Console logger.
-// This package redirects the normal dojo debugging output to the firebug console.  It does
-// so by sending the entire object to the console, rather than just overriding dojo.hostenv.println
-// so that firebugs object inspector can be taken advantage of.
-
 if (dojo.render.html.moz) {
 	if (console && console.log) {
-		var consoleLog = function() {
-			if (!djConfig.isDebug) { return ; }
-
+		var consoleLog = function () {
+			if (!djConfig.isDebug) {
+				return;
+			}
 			var args = dojo.lang.toArray(arguments);
-			args.splice(0,0, "DEBUG: ");
+			args.splice(0, 0, "DEBUG: ");
 			console.log.apply(console, args);
-		}
-
+		};
 		dojo.debug = consoleLog;
-
-		dojo.debugDeep=consoleLog;
-
-		dojo.debugShallow=function(obj) {
-			if (!djConfig.isDebug) { return; }
-
+		dojo.debugDeep = consoleLog;
+		dojo.debugShallow = function (obj) {
+			if (!djConfig.isDebug) {
+				return;
+			}
 			if (dojo.lang.isArray(obj)) {
-				console.log('Array: ', obj);
-				for (var i=0; x<obj.length; i++) {
-					console.log('    ', '['+i+']', obj[i]);
+				console.log("Array: ", obj);
+				for (var i = 0; x < obj.length; i++) {
+					console.log("	", "[" + i + "]", obj[i]);
 				}
 			} else {
-				console.log('Object: ', obj);
+				console.log("Object: ", obj);
 				var propNames = [];
 				for (var prop in obj) {
 					propNames.push(prop);
 				}
 				propNames.sort();
-				dojo.lang.forEach(propNames, function(prop) {
+				dojo.lang.forEach(propNames, function (prop) {
 					try {
-						console.log('    ', prop, obj[prop]);
-					} catch(e) {
-						console.log('    ', prop, 'ERROR', e.message, e);
+						console.log("	", prop, obj[prop]);
 					}
+					catch (e) {
+						console.log("	", prop, "ERROR", e.message, e);
+					}
 				});
 			}
-		}
-
+		};
 	} else {
 		dojo.debug("dojo.debug.Firebug requires Firebug > 0.4");
 	}
 }
 
+
 __CPAN_FILE__ src/debug/arrow_hide.gif
 GIF89a	 	 Ä )6'7H):K!/=)5%4C$/,9DSb%0)&5EO]kJXg;K[)9J )8HX .;$3Bdp|]jwÿÿÿ                           !ù   ,    	 	    %Žd9VU1Ž°LVƒDO1c0IDRˆÉ¢‡! ;
 __CPAN_FILE__ src/debug/console.js
@@ -11736,107 +7795,87 @@
 
 dojo.provide("dojo.debug.console");
 dojo.require("dojo.logging.ConsoleLogger");
-
-// summary:
-// 	Console logger, for use with FireFox Firebug, Safari and Opera's consoles.
-// description:
-//  This package redirects the normal dojo debugging output to the console log in modern browsers.
-//  When using Firebug, it does this  by sending the entire object to the console, 
-//	rather than just overriding dojo.hostenv.println, so that Firebug's interactive 
-//	object inspector is available.
-// see: http://www.joehewitt.com/software/firebug/docs.php
-
 if (window.console) {
 	if (console.info != null) {
-		// using a later version of Firebug -- lots of fun stuff!
-		
-		dojo.hostenv.println = function() {
-			// summary: Write all of the arguments to the Firebug console
-			// description: Uses console.info() so that the (i) icon prints next to the debug line
-			//	rather than munging the arguments by adding "DEBUG:" in front of them.
-			//	This allows us to use Firebug's string handling to do interesting things
-			if (!djConfig.isDebug)	{	 return;	}
+		dojo.hostenv.println = function () {
+			if (!djConfig.isDebug) {
+				return;
+			}
 			console.info.apply(console, arguments);
-		}
-		dojo.debug=dojo.hostenv.println;
+		};
+		dojo.debug = dojo.hostenv.println;
 		dojo.debugDeep = dojo.debug;
-
-		dojo.debugShallow = function(/*Object*/ obj, /*Boolean?*/showMethods, /*Boolean?*/sort) {
-			// summary:  Write first-level properties of obj to the console.
-			//	obj:			Object or Array to debug
-			//	showMethods:	Pass false to skip outputing methods of object, any other value will output them.
-			//	sort:			Pass false to skip sorting properties, any other value will sort.
-			if (!djConfig.isDebug) { return; }
-
+		dojo.debugShallow = function (obj, showMethods, sort) {
+			if (!djConfig.isDebug) {
+				return;
+			}
 			showMethods = (showMethods != false);
 			sort = (sort != false);
-
-			// handle null or something without a constructor (in which case we don't know the type)
 			if (obj == null || obj.constructor == null) {
 				return dojo.debug(obj);
 			}
-	
-			// figure out type via a standard constructor (Object, String, Date, etc)
 			var type = obj.declaredClass;
 			if (type == null) {
 				type = obj.constructor.toString().match(/function\s*(.*)\(/);
-				if (type) {	type = type[1]	};
+				if (type) {
+					type = type[1];
+				}
 			}
-			// if we got a viable type, use Firebug's interactive property dump feature
 			if (type) {
 				if (type == "String" || type == "Number") {
-					return dojo.debug(type+": ", obj);
+					return dojo.debug(type + ": ", obj);
 				}
 				if (showMethods && !sort) {
 					var sortedObj = obj;
 				} else {
 					var propNames = [];
 					if (showMethods) {
-						for (var prop in obj) {	
+						for (var prop in obj) {
 							propNames.push(prop);
 						}
 					} else {
-						for (var prop in obj) {	
-							if (typeof obj[prop] != "function") { propNames.push(prop);	}
-							else dojo.debug(prop);
-						}					
+						for (var prop in obj) {
+							if (typeof obj[prop] != "function") {
+								propNames.push(prop);
+							} else {
+								dojo.debug(prop);
+							}
+						}
 					}
-					if (sort) propNames.sort();
+					if (sort) {
+						propNames.sort();
+					}
 					var sortedObj = {};
-					dojo.lang.forEach(propNames, function(prop) {
+					dojo.lang.forEach(propNames, function (prop) {
 						sortedObj[prop] = obj[prop];
 					});
 				}
-
-				return dojo.debug(type+": %o\n%2.o",obj,sortedObj);
+				return dojo.debug(type + ": %o\n%2.o", obj, sortedObj);
 			}
-		
-			// otherwise just output the constructor + object, 
-			//	which is nice for a DOM element, etc
 			return dojo.debug(obj.constructor + ": ", obj);
+		};
+	} else {
+		if (console.log != null) {
+			dojo.hostenv.println = function () {
+				if (!djConfig.isDebug) {
+					return;
+				}
+				var args = dojo.lang.toArray(arguments);
+				console.log("DEBUG: " + args.join(" "));
+			};
+			dojo.debug = dojo.hostenv.println;
+		} else {
+			dojo.debug("dojo.debug.console requires Firebug > 0.4");
 		}
-		
-	} else if (console.log != null) {
-		// using Safari or an old version of Firebug
-		dojo.hostenv.println=function() {
-			if (!djConfig.isDebug) { return ; }
-			// make sure we're only writing a single string to Safari's console
-			var args = dojo.lang.toArray(arguments);
-			console.log("DEBUG: " + args.join(" "));
+	}
+} else {
+	if (dojo.render.html.opera) {
+		if (opera && opera.postError) {
+			dojo.hostenv.println = opera.postError;
+		} else {
+			dojo.debug("dojo.debug.Opera requires Opera > 8.0");
 		}
-		dojo.debug=dojo.hostenv.println;
-	} else {
-		// not supported
-		dojo.debug("dojo.debug.console requires Firebug > 0.4");
 	}
-} else if (dojo.render.html.opera) {
-	// using Opera 8.0 or later
-	if (opera && opera.postError) {
-		dojo.hostenv.println=opera.postError;
-		// summary:  hook debugging up to Opera's postError routine
-	} else {
-		dojo.debug("dojo.debug.Opera requires Opera > 8.0");
-	}
 }
 
 
@@ -12220,464 +8259,306 @@
 dojo.require("dojo.lang.func");
 dojo.require("dojo.lang.common");
 dojo.require("dojo.math");
-
-dojo.declare("dojo.selection.Selection", null,
-	{
-		initializer: function(items, isCollection){
-			this.items = [];
-			this.selection = [];
-			this._pivotItems = [];
-			this.clearItems();
-
-			if(items) {
-				if(isCollection) {
-					this.setItemsCollection(items);
+dojo.declare("dojo.selection.Selection", null, {initializer:function (items, isCollection) {
+	this.items = [];
+	this.selection = [];
+	this._pivotItems = [];
+	this.clearItems();
+	if (items) {
+		if (isCollection) {
+			this.setItemsCollection(items);
+		} else {
+			this.setItems(items);
+		}
+	}
+}, items:null, selection:null, lastSelected:null, allowImplicit:true, length:0, isGrowable:true, _pivotItems:null, _pivotItem:null, onSelect:function (item) {
+}, onDeselect:function (item) {
+}, onSelectChange:function (item, selected) {
+}, _find:function (item, inSelection) {
+	if (inSelection) {
+		return dojo.lang.find(this.selection, item);
+	} else {
+		return dojo.lang.find(this.items, item);
+	}
+}, isSelectable:function (item) {
+	return true;
+}, setItems:function () {
+	this.clearItems();
+	this.addItems.call(this, arguments);
+}, setItemsCollection:function (collection) {
+	this.items = collection;
+}, addItems:function () {
+	var args = dojo.lang.unnest(arguments);
+	for (var i = 0; i < args.length; i++) {
+		this.items.push(args[i]);
+	}
+}, addItemsAt:function (item, before) {
+	if (this.items.length == 0) {
+		return this.addItems(dojo.lang.toArray(arguments, 2));
+	}
+	if (!this.isItem(item)) {
+		item = this.items[item];
+	}
+	if (!item) {
+		throw new Error("addItemsAt: item doesn't exist");
+	}
+	var idx = this._find(item);
+	if (idx > 0 && before) {
+		idx--;
+	}
+	for (var i = 2; i < arguments.length; i++) {
+		if (!this.isItem(arguments[i])) {
+			this.items.splice(idx++, 0, arguments[i]);
+		}
+	}
+}, removeItem:function (item) {
+	var idx = this._find(item);
+	if (idx > -1) {
+		this.items.splice(idx, 1);
+	}
+	idx = this._find(item, true);
+	if (idx > -1) {
+		this.selection.splice(idx, 1);
+	}
+}, clearItems:function () {
+	this.items = [];
+	this.deselectAll();
+}, isItem:function (item) {
+	return this._find(item) > -1;
+}, isSelected:function (item) {
+	return this._find(item, true) > -1;
+}, selectFilter:function (item, selection, add, grow) {
+	return true;
+}, update:function (item, add, grow, noToggle) {
+	if (!this.isItem(item)) {
+		return false;
+	}
+	if (this.isGrowable && grow) {
+		if ((!this.isSelected(item)) && this.selectFilter(item, this.selection, false, true)) {
+			this.grow(item);
+			this.lastSelected = item;
+		}
+	} else {
+		if (add) {
+			if (this.selectFilter(item, this.selection, true, false)) {
+				if (noToggle) {
+					if (this.select(item)) {
+						this.lastSelected = item;
+					}
 				} else {
-					this.setItems(items);
+					if (this.toggleSelected(item)) {
+						this.lastSelected = item;
+					}
 				}
 			}
-		},
-
-		// Array: items to select from, order matters for growable selections
-		items: null,
-
-		// Array: items selected, aren't stored in order (see sorted())
-		selection: null, 
-		lastSelected: null, // last item selected
-
-		// Boolean: if true, grow selection will start from 0th item when nothing is selected
-		allowImplicit: true, 
-
-		// Integer: number of *selected* items
-		length: 0, 
-
-		// Boolean:
-		//		if true, the selection is treated as an in-order and can grow
-		//		by ranges, not just by single item
-		isGrowable: true,
-
-		_pivotItems: null, // stack of pivot items
-		_pivotItem: null, // item we grow selections from, top of stack
-
-		// event handlers
-		onSelect: function(item){
-			// summary: slot to be connect()'d to
-		},
-		onDeselect: function(item){
-			// summary: slot to be connect()'d to
-		},
-		onSelectChange: function(item, selected){
-			// summary: slot to be connect()'d to
-		},
-
-		_find: function(item, inSelection) {
-			if(inSelection) {
-				return dojo.lang.find(this.selection, item);
-			} else {
-				return dojo.lang.find(this.items, item);
-			}
-		},
-
-		isSelectable: function(/*Object*/item){
-			// summary:
-			//		user-customizable and should be over-ridden, will filter
-			//		items through this
-			return true; // boolean
-		},
-
-		setItems: function(/* ... */){
-			// summary:
-			//		adds all passed arguments to the items array, removing any
-			//		previously selected items.
-			this.clearItems();
-			this.addItems.call(this, arguments);
-		},
-
- 
-		setItemsCollection: function(/*Object*/collection){
-			// summary:
-			//		like setItems, but use in case you have an active
-			//		collection array-like object (i.e. getElementsByTagName
-			//		collection) that manages its own order and item list
-			this.items = collection;
-		},
-
-		addItems: function(/* ... */){
-			// summary:
-			//		adds all passed arguments to the items array
-			var args = dojo.lang.unnest(arguments);
-			for(var i = 0; i < args.length; i++){
-				this.items.push(args[i]);
-			}
-		},
-
-		addItemsAt: function(/*Object*/item, /*Object*/before /* ... */){
-			// summary:
-			//		add items to the array after the the passed "before" item.
-			if(this.items.length == 0){ // work for empy case
-				return this.addItems(dojo.lang.toArray(arguments, 2));
-			}
-
-			if(!this.isItem(item)){
-				item = this.items[item];
-			}
-			if(!item){ throw new Error("addItemsAt: item doesn't exist"); }
-			var idx = this._find(item);
-			if(idx > 0 && before){ idx--; }
-			for(var i = 2; i < arguments.length; i++){
-				if(!this.isItem(arguments[i])){
-					this.items.splice(idx++, 0, arguments[i]);
-				}
-			}
-		},
-
-		removeItem: function(/*Object*/item){
-			// summary: remove item
-			var idx = this._find(item);
-			if(idx > -1) {
-				this.items.splice(idx, 1);
-			}
-			// remove from selection
-			// FIXME: do we call deselect? I don't think so because this isn't how
-			// you usually want to deselect an item. For example, if you deleted an
-			// item, you don't really want to deselect it -- you want it gone. -DS
-			idx = this._find(item, true);
-			if(idx > -1) {
-				this.selection.splice(idx, 1);
-			}
-		},
-
-		clearItems: function(){
-			// summary: remove and uselect all items
-			this.items = [];
+		} else {
 			this.deselectAll();
-		},
-
-		isItem: function(/*Object*/item){
-			// summary: do we already "know" about the passed item?
-			return this._find(item) > -1; // boolean
-		},
-
-		isSelected: function(/*Object*/item){
-			// summary:
-			//		do we know about the item and is it selected by this
-			//		selection?
-			return this._find(item, true) > -1; // boolean
-		},
-
-		/**
-		 * allows you to filter item in or out of the selection
-		 * depending on the current selection and action to be taken
-		**/
-		selectFilter: function(item, selection, add, grow) {
-			return true;
-		},
-
-		update: function(/*Object*/item, /*Boolean*/add, /*Boolean*/grow, noToggle) {
-			// summary: manages selections, most selecting should be done here
-			// item: item which may be added/grown to/only selected/deselected
-			// add: behaves like ctrl in windows selection world
-			// grow: behaves like shift
-			// noToggle: if true, don't toggle selection on item
-			if(!this.isItem(item)){ return false; } // boolean
-
-			if(this.isGrowable && grow){
-				if( (!this.isSelected(item)) && 
-					this.selectFilter(item, this.selection, false, true) ){
-					this.grow(item);
+			this.select(item);
+		}
+	}
+	this.length = this.selection.length;
+	return true;
+}, grow:function (toItem, fromItem) {
+	if (!this.isGrowable) {
+		return;
+	}
+	if (arguments.length == 1) {
+		fromItem = this._pivotItem;
+		if (!fromItem && this.allowImplicit) {
+			fromItem = this.items[0];
+		}
+	}
+	if (!toItem || !fromItem) {
+		return false;
+	}
+	var fromIdx = this._find(fromItem);
+	var toDeselect = {};
+	var lastIdx = -1;
+	if (this.lastSelected) {
+		lastIdx = this._find(this.lastSelected);
+		var step = fromIdx < lastIdx ? -1 : 1;
+		var range = dojo.math.range(lastIdx, fromIdx, step);
+		for (var i = 0; i < range.length; i++) {
+			toDeselect[range[i]] = true;
+		}
+	}
+	var toIdx = this._find(toItem);
+	var step = fromIdx < toIdx ? -1 : 1;
+	var shrink = lastIdx >= 0 && step == 1 ? lastIdx < toIdx : lastIdx > toIdx;
+	var range = dojo.math.range(toIdx, fromIdx, step);
+	if (range.length) {
+		for (var i = range.length - 1; i >= 0; i--) {
+			var item = this.items[range[i]];
+			if (this.selectFilter(item, this.selection, false, true)) {
+				if (this.select(item, true) || shrink) {
 					this.lastSelected = item;
 				}
-			}else if(add){
-				if(this.selectFilter(item, this.selection, true, false)){
-					if(noToggle){
-						if(this.select(item)){
-							this.lastSelected = item;
-						}
-					}else if(this.toggleSelected(item)){
-						this.lastSelected = item;
-					}
+				if (range[i] in toDeselect) {
+					delete toDeselect[range[i]];
 				}
-			}else{
-				this.deselectAll();
-				this.select(item);
 			}
-
-			this.length = this.selection.length;
-			return true; // Boolean
-		},
-
-		grow: function(/*Object*/toItem, /*Object*/fromItem){
-			// summary:
-			//		Grow a selection. Any items in (fromItem, lastSelected]
-			//		that aren't part of (fromItem, toItem] will be deselected
-			// toItem: which item to grow selection to
-			// fromItem: which item to start the growth from (it won't be selected)
-			if(!this.isGrowable){ return; }
-
-			if(arguments.length == 1){
-				fromItem = this._pivotItem;
-				if(!fromItem && this.allowImplicit){
-					fromItem = this.items[0];
-				}
-			}
-			if(!toItem || !fromItem){ return false; }
-
-			var fromIdx = this._find(fromItem);
-
-			// get items to deselect (fromItem, lastSelected]
-			var toDeselect = {};
-			var lastIdx = -1;
-			if(this.lastSelected){
-				lastIdx = this._find(this.lastSelected);
-				var step = fromIdx < lastIdx ? -1 : 1;
-				var range = dojo.math.range(lastIdx, fromIdx, step);
-				for(var i = 0; i < range.length; i++){
-					toDeselect[range[i]] = true;
-				}
-			}
-
-			// add selection (fromItem, toItem]
-			var toIdx = this._find(toItem);
-			var step = fromIdx < toIdx ? -1 : 1;
-			var shrink = lastIdx >= 0 && step == 1 ? lastIdx < toIdx : lastIdx > toIdx;
-			var range = dojo.math.range(toIdx, fromIdx, step);
-			if(range.length){
-				for(var i = range.length-1; i >= 0; i--){
-					var item = this.items[range[i]];
-					if(this.selectFilter(item, this.selection, false, true)){
-						if(this.select(item, true) || shrink){
-							this.lastSelected = item;
-						}
-						if(range[i] in toDeselect){
-							delete toDeselect[range[i]];
-						}
-					}
-				}
-			}else{
-				this.lastSelected = fromItem;
-			}
-
-			// now deselect...
-			for(var i in toDeselect){
-				if(this.items[i] == this.lastSelected){
-					//dojo.debug("oops!");
-				}
-				this.deselect(this.items[i]);
-			}
-
-			// make sure everything is all kosher after selections+deselections
-			this._updatePivot();
-		},
-
-		growUp: function(){
-			// summary: Grow selection upwards one item from lastSelected
-			if(!this.isGrowable){ return; }
-
-			var idx = this._find(this.lastSelected) - 1;
-			while(idx >= 0){
-				if(this.selectFilter(this.items[idx], this.selection, false, true)){
-					this.grow(this.items[idx]);
-					break;
-				}
-				idx--;
-			}
-		},
-
-		growDown: function(){
-			// summary: Grow selection downwards one item from lastSelected
-			if(!this.isGrowable){ return; }
-
-			var idx = this._find(this.lastSelected);
-			if(idx < 0 && this.allowImplicit){
-				this.select(this.items[0]);
-				idx = 0;
-			}
-			idx++;
-			while(idx > 0 && idx < this.items.length){
-				if(this.selectFilter(this.items[idx], this.selection, false, true)){
-					this.grow(this.items[idx]);
-					break;
-				}
-				idx++;
-			}
-		},
-
-		toggleSelected: function(/*Object*/item, /*Boolean*/noPivot){
-			// summary:
-			//		like it says on the tin. If noPivot is true, no selection
-			//		pivot is added (or removed) from the selection. Returns 1
-			//		if the item is selected, -1 if it is deselected, and 0 if
-			//		the item is not under management.
-			if(this.isItem(item)){
-				if(this.select(item, noPivot)){ return 1; }
-				if(this.deselect(item)){ return -1; }
-			}
-			return 0;
-		},
-
-		select: function(/*Object*/item, /*Boolean*/noPivot){
-			// summary:
-			//		like it says on the tin. If noPivot is true, no selection
-			//		pivot is added  from the selection.
-			if(this.isItem(item) && !this.isSelected(item)
-				&& this.isSelectable(item)){
-				this.selection.push(item);
-				this.lastSelected = item;
-				this.onSelect(item);
-				this.onSelectChange(item, true);
-				if(!noPivot){
-					this._addPivot(item);
-				}
-				this.length = this.selection.length;
-				return true;
-			}
-			return false;
-		},
-
-		deselect: function(item){
-			// summary: deselects the item if it's selected.
-			var idx = this._find(item, true);
-			if(idx > -1){
-				this.selection.splice(idx, 1);
-				this.onDeselect(item);
-				this.onSelectChange(item, false);
-				if(item == this.lastSelected){
-					this.lastSelected = null;
-				}
-				this._removePivot(item);
-				this.length = this.selection.length;
-				return true;
-			}
-			return false;
-		},
-
-		selectAll: function(){
-			// summary: selects all known items
-			for(var i = 0; i < this.items.length; i++){
-				this.select(this.items[i]);
-			}
-		},
-
-		deselectAll: function(){
-			// summary: deselects all currently selected items
-			while(this.selection && this.selection.length){
-				this.deselect(this.selection[0]);
-			}
-		},
-
-		selectNext: function(){
-			// summary:
-			//		clobbers the existing selection (if any) and selects the
-			//		next item "below" the previous "bottom" selection. Returns
-			//		whether or not selection was successful.
-			var idx = this._find(this.lastSelected);
-			while(idx > -1 && ++idx < this.items.length){
-				if(this.isSelectable(this.items[idx])){
-					this.deselectAll();
-					this.select(this.items[idx]);
-					return true;
-				}
-			}
-			return false;
-		},
-
-		selectPrevious: function(){
-			// summary:
-			//		clobbers the existing selection (if any) and selects the
-			//		item "above" the previous "top" selection. Returns whether
-			//		or not selection was successful.
-			var idx = this._find(this.lastSelected);
-			while(idx-- > 0){
-				if(this.isSelectable(this.items[idx])){
-					this.deselectAll();
-					this.select(this.items[idx]);
-					return true;
-				}
-			}
-			return false;
-		},
-
-		selectFirst: function(){
-			// summary:
-			//		select first selectable item. Returns whether or not an
-			//		item was selected.
+		}
+	} else {
+		this.lastSelected = fromItem;
+	}
+	for (var i in toDeselect) {
+		if (this.items[i] == this.lastSelected) {
+		}
+		this.deselect(this.items[i]);
+	}
+	this._updatePivot();
+}, growUp:function () {
+	if (!this.isGrowable) {
+		return;
+	}
+	var idx = this._find(this.lastSelected) - 1;
+	while (idx >= 0) {
+		if (this.selectFilter(this.items[idx], this.selection, false, true)) {
+			this.grow(this.items[idx]);
+			break;
+		}
+		idx--;
+	}
+}, growDown:function () {
+	if (!this.isGrowable) {
+		return;
+	}
+	var idx = this._find(this.lastSelected);
+	if (idx < 0 && this.allowImplicit) {
+		this.select(this.items[0]);
+		idx = 0;
+	}
+	idx++;
+	while (idx > 0 && idx < this.items.length) {
+		if (this.selectFilter(this.items[idx], this.selection, false, true)) {
+			this.grow(this.items[idx]);
+			break;
+		}
+		idx++;
+	}
+}, toggleSelected:function (item, noPivot) {
+	if (this.isItem(item)) {
+		if (this.select(item, noPivot)) {
+			return 1;
+		}
+		if (this.deselect(item)) {
+			return -1;
+		}
+	}
+	return 0;
+}, select:function (item, noPivot) {
+	if (this.isItem(item) && !this.isSelected(item) && this.isSelectable(item)) {
+		this.selection.push(item);
+		this.lastSelected = item;
+		this.onSelect(item);
+		this.onSelectChange(item, true);
+		if (!noPivot) {
+			this._addPivot(item);
+		}
+		this.length = this.selection.length;
+		return true;
+	}
+	return false;
+}, deselect:function (item) {
+	var idx = this._find(item, true);
+	if (idx > -1) {
+		this.selection.splice(idx, 1);
+		this.onDeselect(item);
+		this.onSelectChange(item, false);
+		if (item == this.lastSelected) {
+			this.lastSelected = null;
+		}
+		this._removePivot(item);
+		this.length = this.selection.length;
+		return true;
+	}
+	return false;
+}, selectAll:function () {
+	for (var i = 0; i < this.items.length; i++) {
+		this.select(this.items[i]);
+	}
+}, deselectAll:function () {
+	while (this.selection && this.selection.length) {
+		this.deselect(this.selection[0]);
+	}
+}, selectNext:function () {
+	var idx = this._find(this.lastSelected);
+	while (idx > -1 && ++idx < this.items.length) {
+		if (this.isSelectable(this.items[idx])) {
 			this.deselectAll();
-			var idx = 0;
-			while(this.items[idx] && !this.select(this.items[idx])){
-				idx++;
-			}
-			return this.items[idx] ? true : false;
-		},
-
-		selectLast: function(){
-			// summary: select last selectable item
+			this.select(this.items[idx]);
+			return true;
+		}
+	}
+	return false;
+}, selectPrevious:function () {
+	var idx = this._find(this.lastSelected);
+	while (idx-- > 0) {
+		if (this.isSelectable(this.items[idx])) {
 			this.deselectAll();
-			var idx = this.items.length-1;
-			while(this.items[idx] && !this.select(this.items[idx])) {
-				idx--;
+			this.select(this.items[idx]);
+			return true;
+		}
+	}
+	return false;
+}, selectFirst:function () {
+	this.deselectAll();
+	var idx = 0;
+	while (this.items[idx] && !this.select(this.items[idx])) {
+		idx++;
+	}
+	return this.items[idx] ? true : false;
+}, selectLast:function () {
+	this.deselectAll();
+	var idx = this.items.length - 1;
+	while (this.items[idx] && !this.select(this.items[idx])) {
+		idx--;
+	}
+	return this.items[idx] ? true : false;
+}, _addPivot:function (item, andClear) {
+	this._pivotItem = item;
+	if (andClear) {
+		this._pivotItems = [item];
+	} else {
+		this._pivotItems.push(item);
+	}
+}, _removePivot:function (item) {
+	var i = dojo.lang.find(this._pivotItems, item);
+	if (i > -1) {
+		this._pivotItems.splice(i, 1);
+		this._pivotItem = this._pivotItems[this._pivotItems.length - 1];
+	}
+	this._updatePivot();
+}, _updatePivot:function () {
+	if (this._pivotItems.length == 0) {
+		if (this.lastSelected) {
+			this._addPivot(this.lastSelected);
+		}
+	}
+}, sorted:function () {
+	return dojo.lang.toArray(this.selection).sort(dojo.lang.hitch(this, function (a, b) {
+		var A = this._find(a), B = this._find(b);
+		if (A > B) {
+			return 1;
+		} else {
+			if (A < B) {
+				return -1;
+			} else {
+				return 0;
 			}
-			return this.items[idx] ? true : false;
-		},
-
-		_addPivot: function(item, andClear){
-			this._pivotItem = item;
-			if(andClear){
-				this._pivotItems = [item];
-			}else{
-				this._pivotItems.push(item);
-			}
-		},
-
-		_removePivot: function(item){
-			var i = dojo.lang.find(this._pivotItems, item);
-			if(i > -1){
-				this._pivotItems.splice(i, 1);
-				this._pivotItem = this._pivotItems[this._pivotItems.length-1];
-			}
-
-			this._updatePivot();
-		},
-
-		_updatePivot: function(){
-			if(this._pivotItems.length == 0){
-				if(this.lastSelected){
-					this._addPivot(this.lastSelected);
-				}
-			}
-		},
-
-		sorted: function(){
-			// summary: returns an array of items in sort order
-			return dojo.lang.toArray(this.selection).sort(
-				dojo.lang.hitch(this, function(a, b){
-					var A = this._find(a), B = this._find(b);
-					if(A > B){
-						return 1;
-					}else if(A < B){
-						return -1;
-					}else{
-						return 0;
-					}
-				})
-			);
-		},
-
-		updateSelected: function(){
-			// summary: 
-			//		remove any items from the selection that are no longer in
-			//		this.items
-			for(var i = 0; i < this.selection.length; i++) {
-				if(this._find(this.selection[i]) < 0) {
-					var removed = this.selection.splice(i, 1);
-
-					this._removePivot(removed[0]);
-				}
-			}
-			this.length = this.selection.length;
 		}
+	}));
+}, updateSelected:function () {
+	for (var i = 0; i < this.selection.length; i++) {
+		if (this._find(this.selection[i]) < 0) {
+			var removed = this.selection.splice(i, 1);
+			this._removePivot(removed[0]);
+		}
 	}
-);
+	this.length = this.selection.length;
+}});
 
+
 __CPAN_DIR__ src/string
 __CPAN_FILE__ src/string/common.js
 /*
@@ -12691,74 +8572,57 @@
 */
 
 dojo.provide("dojo.string.common");
-
-dojo.string.trim = function(/* string */str, /* integer? */wh){
-	//	summary
-	//	Trim whitespace from str.  If wh > 0, trim from start, if wh < 0, trim from end, else both
-	if(!str.replace){ return str; }
-	if(!str.length){ return str; }
+dojo.string.trim = function (str, wh) {
+	if (!str.replace) {
+		return str;
+	}
+	if (!str.length) {
+		return str;
+	}
 	var re = (wh > 0) ? (/^\s+/) : (wh < 0) ? (/\s+$/) : (/^\s+|\s+$/g);
-	return str.replace(re, "");	//	string
-}
-
-dojo.string.trimStart = function(/* string */str) {
-	//	summary
-	//	Trim whitespace at the beginning of 'str'
-	return dojo.string.trim(str, 1);	//	string
-}
-
-dojo.string.trimEnd = function(/* string */str) {
-	//	summary
-	//	Trim whitespace at the end of 'str'
+	return str.replace(re, "");
+};
+dojo.string.trimStart = function (str) {
+	return dojo.string.trim(str, 1);
+};
+dojo.string.trimEnd = function (str) {
 	return dojo.string.trim(str, -1);
-}
-
-dojo.string.repeat = function(/* string */str, /* integer */count, /* string? */separator) {
-	//	summary
-	//	Return 'str' repeated 'count' times, optionally placing 'separator' between each rep
+};
+dojo.string.repeat = function (str, count, separator) {
 	var out = "";
-	for(var i = 0; i < count; i++) {
+	for (var i = 0; i < count; i++) {
 		out += str;
-		if(separator && i < count - 1) {
+		if (separator && i < count - 1) {
 			out += separator;
 		}
 	}
-	return out;	//	string
-}
-
-dojo.string.pad = function(/* string */str, /* integer */len/*=2*/, /* string */ c/*='0'*/, /* integer */dir/*=1*/) {
-	//	summary
-	//	Pad 'str' to guarantee that it is at least 'len' length with the character 'c' at either the 
-	//	start (dir=1) or end (dir=-1) of the string
+	return out;
+};
+dojo.string.pad = function (str, len, c, dir) {
 	var out = String(str);
-	if(!c) {
-		c = '0';
+	if (!c) {
+		c = "0";
 	}
-	if(!dir) {
+	if (!dir) {
 		dir = 1;
 	}
-	while(out.length < len) {
-		if(dir > 0) {
+	while (out.length < len) {
+		if (dir > 0) {
 			out = c + out;
 		} else {
 			out += c;
 		}
 	}
-	return out;	//	string
-}
+	return out;
+};
+dojo.string.padLeft = function (str, len, c) {
+	return dojo.string.pad(str, len, c, 1);
+};
+dojo.string.padRight = function (str, len, c) {
+	return dojo.string.pad(str, len, c, -1);
+};
 
-dojo.string.padLeft = function(/* string */str, /* integer */len, /* string */c) {
-	//	summary
-	//	same as dojo.string.pad(str, len, c, 1)
-	return dojo.string.pad(str, len, c, 1);	//	string
-}
 
-dojo.string.padRight = function(/* string */str, /* integer */len, /* string */c) {
-	//	summary
-	//	same as dojo.string.pad(str, len, c, -1)
-	return dojo.string.pad(str, len, c, -1);	//	string
-}
-
 __CPAN_FILE__ src/string/Builder.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -12773,122 +8637,96 @@
 dojo.provide("dojo.string.Builder");
 dojo.require("dojo.string");
 dojo.require("dojo.lang.common");
-
-// NOTE: testing shows that direct "+=" concatenation is *much* faster on
-// Spidermoneky and Rhino, while arr.push()/arr.join() style concatenation is
-// significantly quicker on IE (Jscript/wsh/etc.).
-
-dojo.string.Builder = function(/* string? */str){
-	//	summary
+dojo.string.Builder = function (str) {
 	this.arrConcat = (dojo.render.html.capable && dojo.render.html["ie"]);
-
 	var a = [];
 	var b = "";
 	var length = this.length = b.length;
-
-	if(this.arrConcat){
-		if(b.length > 0){
+	if (this.arrConcat) {
+		if (b.length > 0) {
 			a.push(b);
 		}
 		b = "";
 	}
-
-	this.toString = this.valueOf = function(){ 
-		//	summary
-		//	Concatenate internal buffer and return as a string
-		return (this.arrConcat) ? a.join("") : b;	//	string
+	this.toString = this.valueOf = function () {
+		return (this.arrConcat) ? a.join("") : b;
 	};
-
-	this.append = function(){
-		//	summary
-		//	Append all arguments to the end of the internal buffer
-		for(var x=0; x<arguments.length; x++){
+	this.append = function () {
+		for (var x = 0; x < arguments.length; x++) {
 			var s = arguments[x];
-			if(dojo.lang.isArrayLike(s)){
+			if (dojo.lang.isArrayLike(s)) {
 				this.append.apply(this, s);
 			} else {
-				if(this.arrConcat){
+				if (this.arrConcat) {
 					a.push(s);
-				}else{
-					b+=s;
+				} else {
+					b += s;
 				}
 				length += s.length;
 				this.length = length;
 			}
 		}
-		return this;	//	dojo.string.Builder
+		return this;
 	};
-
-	this.clear = function(){
-		//	summary
-		//	Clear the internal buffer.
+	this.clear = function () {
 		a = [];
 		b = "";
 		length = this.length = 0;
-		return this;	//	dojo.string.Builder
+		return this;
 	};
-
-	this.remove = function(/* integer */f, /* integer */l){
-		//	summary
-		//	Remove a section of string from the internal buffer.
-		var s = ""; 
-		if(this.arrConcat){
-			b = a.join(""); 
+	this.remove = function (f, l) {
+		var s = "";
+		if (this.arrConcat) {
+			b = a.join("");
 		}
-		a=[];
-		if(f>0){
-			s = b.substring(0, (f-1));
+		a = [];
+		if (f > 0) {
+			s = b.substring(0, (f - 1));
 		}
-		b = s + b.substring(f + l); 
-		length = this.length = b.length; 
-		if(this.arrConcat){
+		b = s + b.substring(f + l);
+		length = this.length = b.length;
+		if (this.arrConcat) {
 			a.push(b);
-			b="";
+			b = "";
 		}
-		return this;	//	dojo.string.Builder
+		return this;
 	};
-
-	this.replace = function(/* string */o, /* string */n){
-		//	summary
-		//	replace phrase *o* with phrase *n*.
-		if(this.arrConcat){
-			b = a.join(""); 
+	this.replace = function (o, n) {
+		if (this.arrConcat) {
+			b = a.join("");
 		}
-		a = []; 
-		b = b.replace(o,n); 
-		length = this.length = b.length; 
-		if(this.arrConcat){
+		a = [];
+		b = b.replace(o, n);
+		length = this.length = b.length;
+		if (this.arrConcat) {
 			a.push(b);
-			b="";
+			b = "";
 		}
-		return this;	//	dojo.string.Builder
+		return this;
 	};
-
-	this.insert = function(/* integer */idx, /* string */s){
-		//	summary
-		//	Insert string s at index idx.
-		if(this.arrConcat){
-			b = a.join(""); 
+	this.insert = function (idx, s) {
+		if (this.arrConcat) {
+			b = a.join("");
 		}
-		a=[];
-		if(idx == 0){
+		a = [];
+		if (idx == 0) {
 			b = s + b;
-		}else{
+		} else {
 			var t = b.split("");
-			t.splice(idx,0,s);
-			b = t.join("")
+			t.splice(idx, 0, s);
+			b = t.join("");
 		}
-		length = this.length = b.length; 
-		if(this.arrConcat){
-			a.push(b); 
-			b="";
+		length = this.length = b.length;
+		if (this.arrConcat) {
+			a.push(b);
+			b = "";
 		}
-		return this;	//	dojo.string.Builder
+		return this;
 	};
-
 	this.append.apply(this, arguments);
 };
 
+
 __CPAN_FILE__ src/string/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -12900,16 +8738,10 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: [
-		"dojo.string",
-		"dojo.string.common",
-		"dojo.string.extras",
-		"dojo.string.Builder"
-	]
-});
+dojo.kwCompoundRequire({common:["dojo.string", "dojo.string.common", "dojo.string.extras", "dojo.string.Builder"]});
 dojo.provide("dojo.string.*");
 
+
 __CPAN_FILE__ src/string/extras.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -12922,257 +8754,172 @@
 */
 
 dojo.provide("dojo.string.extras");
-
 dojo.require("dojo.string.common");
 dojo.require("dojo.lang.common");
 dojo.require("dojo.lang.array");
-
-//TODO: should we use ${} substitution syntax instead, like widgets do?
-dojo.string.substituteParams = function(/*string*/template, /* object - optional or ... */hash){
-// summary:
-//	Performs parameterized substitutions on a string. Throws an exception if any parameter is unmatched.
-//
-// description:
-//	For example,
-//		dojo.string.substituteParams("File '%{0}' is not found in directory '%{1}'.","foo.html","/temp");
-//	returns
-//		"File 'foo.html' is not found in directory '/temp'."
-//
-// template: the original string template with %{values} to be replaced
-// hash: name/value pairs (type object) to provide substitutions.  Alternatively, substitutions may be
-//	included as arguments 1..n to this function, corresponding to template parameters 0..n-1
-
-	var map = (typeof hash == 'object') ? hash : dojo.lang.toArray(arguments, 1);
-
-	return template.replace(/\%\{(\w+)\}/g, function(match, key){
-		if(typeof(map[key]) != "undefined" && map[key] != null){
+dojo.string.substituteParams = function (template, hash) {
+	var map = (typeof hash == "object") ? hash : dojo.lang.toArray(arguments, 1);
+	return template.replace(/\%\{(\w+)\}/g, function (match, key) {
+		if (typeof (map[key]) != "undefined" && map[key] != null) {
 			return map[key];
 		}
 		dojo.raise("Substitution not found: " + key);
-	}); // string
+	});
 };
-
-dojo.string.capitalize = function(/*string*/str){
-// summary:
-//	Uppercases the first letter of each word
-
-	if(!dojo.lang.isString(str)){ return ""; }
-	if(arguments.length == 0){ str = this; }
-
-	var words = str.split(' ');
-	for(var i=0; i<words.length; i++){
+dojo.string.capitalize = function (str) {
+	if (!dojo.lang.isString(str)) {
+		return "";
+	}
+	if (arguments.length == 0) {
+		str = this;
+	}
+	var words = str.split(" ");
+	for (var i = 0; i < words.length; i++) {
 		words[i] = words[i].charAt(0).toUpperCase() + words[i].substring(1);
 	}
-	return words.join(" "); // string
-}
-
-dojo.string.isBlank = function(/*string*/str){
-// summary:
-//	Return true if the entire string is whitespace characters
-
-	if(!dojo.lang.isString(str)){ return true; }
-	return (dojo.string.trim(str).length == 0); // boolean
-}
-
-//FIXME: not sure exactly what encodeAscii is trying to do, or if it's working right
-dojo.string.encodeAscii = function(/*string*/str){
-	if(!dojo.lang.isString(str)){ return str; } // unknown
+	return words.join(" ");
+};
+dojo.string.isBlank = function (str) {
+	if (!dojo.lang.isString(str)) {
+		return true;
+	}
+	return (dojo.string.trim(str).length == 0);
+};
+dojo.string.encodeAscii = function (str) {
+	if (!dojo.lang.isString(str)) {
+		return str;
+	}
 	var ret = "";
 	var value = escape(str);
 	var match, re = /%u([0-9A-F]{4})/i;
-	while((match = value.match(re))){
-		var num = Number("0x"+match[1]);
+	while ((match = value.match(re))) {
+		var num = Number("0x" + match[1]);
 		var newVal = escape("&#" + num + ";");
 		ret += value.substring(0, match.index) + newVal;
-		value = value.substring(match.index+match[0].length);
+		value = value.substring(match.index + match[0].length);
 	}
 	ret += value.replace(/\+/g, "%2B");
-	return ret; // string
-}
-
-dojo.string.escape = function(/*string*/type, /*string*/str){
-// summary:
-//	Adds escape sequences for special characters according to the convention of 'type'
-//
-// type: one of xml|html|xhtml|sql|regexp|regex|javascript|jscript|js|ascii
-// str: the string to be escaped
-
+	return ret;
+};
+dojo.string.escape = function (type, str) {
 	var args = dojo.lang.toArray(arguments, 1);
-	switch(type.toLowerCase()){
-		case "xml":
-		case "html":
-		case "xhtml":
-			return dojo.string.escapeXml.apply(this, args); // string
-		case "sql":
-			return dojo.string.escapeSql.apply(this, args); // string
-		case "regexp":
-		case "regex":
-			return dojo.string.escapeRegExp.apply(this, args); // string
-		case "javascript":
-		case "jscript":
-		case "js":
-			return dojo.string.escapeJavaScript.apply(this, args); // string
-		case "ascii":
-			// so it's encode, but it seems useful
-			return dojo.string.encodeAscii.apply(this, args); // string
-		default:
-			return str; // string
+	switch (type.toLowerCase()) {
+	  case "xml":
+	  case "html":
+	  case "xhtml":
+		return dojo.string.escapeXml.apply(this, args);
+	  case "sql":
+		return dojo.string.escapeSql.apply(this, args);
+	  case "regexp":
+	  case "regex":
+		return dojo.string.escapeRegExp.apply(this, args);
+	  case "javascript":
+	  case "jscript":
+	  case "js":
+		return dojo.string.escapeJavaScript.apply(this, args);
+	  case "ascii":
+		return dojo.string.encodeAscii.apply(this, args);
+	  default:
+		return str;
 	}
-}
-
-dojo.string.escapeXml = function(/*string*/str, /*boolean*/noSingleQuotes){
-//summary:
-//	Adds escape sequences for special characters in XML: &<>"'
-//  Optionally skips escapes for single quotes
-
-	str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;")
-		.replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
-	if(!noSingleQuotes){ str = str.replace(/'/gm, "&#39;"); }
-	return str; // string
-}
-
-dojo.string.escapeSql = function(/*string*/str){
-//summary:
-//	Adds escape sequences for single quotes in SQL expressions
-
-	return str.replace(/'/gm, "''"); //string
-}
-
-dojo.string.escapeRegExp = function(/*string*/str){
-//summary:
-//	Adds escape sequences for special characters in regular expressions
-
-	return str.replace(/\\/gm, "\\\\").replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm, "\\$1"); // string
-}
-
-//FIXME: should this one also escape backslash?
-dojo.string.escapeJavaScript = function(/*string*/str){
-//summary:
-//	Adds escape sequences for single and double quotes as well
-//	as non-visible characters in JavaScript string literal expressions
-
-	return str.replace(/(["'\f\b\n\t\r])/gm, "\\$1"); // string
-}
-
-//FIXME: looks a lot like escapeJavaScript, just adds quotes? deprecate one?
-dojo.string.escapeString = function(/*string*/str){
-//summary:
-//	Adds escape sequences for non-visual characters, double quote and backslash
-//	and surrounds with double quotes to form a valid string literal.
-	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"); // string
-}
-
-// TODO: make an HTML version
-dojo.string.summary = function(/*string*/str, /*number*/len){
-// summary:
-//	Truncates 'str' after 'len' characters and appends periods as necessary so that it ends with "..."
-
-	if(!len || str.length <= len){
-		return str; // string
+};
+dojo.string.escapeXml = function (str, noSingleQuotes) {
+	str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
+	if (!noSingleQuotes) {
+		str = str.replace(/'/gm, "&#39;");
 	}
-
-	return str.substring(0, len).replace(/\.+$/, "") + "..."; // string
-}
-
-dojo.string.endsWith = function(/*string*/str, /*string*/end, /*boolean*/ignoreCase){
-// summary:
-//	Returns true if 'str' ends with 'end'
-
-	if(ignoreCase){
+	return str;
+};
+dojo.string.escapeSql = function (str) {
+	return str.replace(/'/gm, "''");
+};
+dojo.string.escapeRegExp = function (str) {
+	return str.replace(/\\/gm, "\\\\").replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm, "\\$1");
+};
+dojo.string.escapeJavaScript = function (str) {
+	return str.replace(/(["'\f\b\n\t\r])/gm, "\\$1");
+};
+dojo.string.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.string.summary = function (str, len) {
+	if (!len || str.length <= len) {
+		return str;
+	}
+	return str.substring(0, len).replace(/\.+$/, "") + "...";
+};
+dojo.string.endsWith = function (str, end, ignoreCase) {
+	if (ignoreCase) {
 		str = str.toLowerCase();
 		end = end.toLowerCase();
 	}
-	if((str.length - end.length) < 0){
-		return false; // boolean
+	if ((str.length - end.length) < 0) {
+		return false;
 	}
-	return str.lastIndexOf(end) == str.length - end.length; // boolean
-}
-
-dojo.string.endsWithAny = function(/*string*/str /* , ... */){
-// summary:
-//	Returns true if 'str' ends with any of the arguments[2 -> n]
-
-	for(var i = 1; i < arguments.length; i++) {
-		if(dojo.string.endsWith(str, arguments[i])) {
-			return true; // boolean
+	return str.lastIndexOf(end) == str.length - end.length;
+};
+dojo.string.endsWithAny = function (str) {
+	for (var i = 1; i < arguments.length; i++) {
+		if (dojo.string.endsWith(str, arguments[i])) {
+			return true;
 		}
 	}
-	return false; // boolean
-}
-
-dojo.string.startsWith = function(/*string*/str, /*string*/start, /*boolean*/ignoreCase){
-// summary:
-//	Returns true if 'str' starts with 'start'
-
-	if(ignoreCase) {
+	return false;
+};
+dojo.string.startsWith = function (str, start, ignoreCase) {
+	if (ignoreCase) {
 		str = str.toLowerCase();
 		start = start.toLowerCase();
 	}
-	return str.indexOf(start) == 0; // boolean
-}
-
-dojo.string.startsWithAny = function(/*string*/str /* , ... */){
-// summary:
-//	Returns true if 'str' starts with any of the arguments[2 -> n]
-
-	for(var i = 1; i < arguments.length; i++) {
-		if(dojo.string.startsWith(str, arguments[i])) {
-			return true; // boolean
+	return str.indexOf(start) == 0;
+};
+dojo.string.startsWithAny = function (str) {
+	for (var i = 1; i < arguments.length; i++) {
+		if (dojo.string.startsWith(str, arguments[i])) {
+			return true;
 		}
 	}
-	return false; // boolean
-}
-
-dojo.string.has = function(/*string*/str /* , ... */) {
-// summary:
-//	Returns true if 'str' contains any of the arguments 2 -> n
-
-	for(var i = 1; i < arguments.length; i++) {
-		if(str.indexOf(arguments[i]) > -1){
-			return true; // boolean
+	return false;
+};
+dojo.string.has = function (str) {
+	for (var i = 1; i < arguments.length; i++) {
+		if (str.indexOf(arguments[i]) > -1) {
+			return true;
 		}
 	}
-	return false; // boolean
-}
-
-dojo.string.normalizeNewlines = function(/*string*/text, /*string? (\n or \r)*/newlineChar){
-// summary:
-//	Changes occurences of CR and LF in text to CRLF, or if newlineChar is provided as '\n' or '\r',
-//	substitutes newlineChar for occurrences of CR/LF and CRLF
-
-	if (newlineChar == "\n"){
+	return false;
+};
+dojo.string.normalizeNewlines = function (text, newlineChar) {
+	if (newlineChar == "\n") {
 		text = text.replace(/\r\n/g, "\n");
 		text = text.replace(/\r/g, "\n");
-	} else if (newlineChar == "\r"){
-		text = text.replace(/\r\n/g, "\r");
-		text = text.replace(/\n/g, "\r");
-	}else{
-		text = text.replace(/([^\r])\n/g, "$1\r\n").replace(/\r([^\n])/g, "\r\n$1");
+	} else {
+		if (newlineChar == "\r") {
+			text = text.replace(/\r\n/g, "\r");
+			text = text.replace(/\n/g, "\r");
+		} else {
+			text = text.replace(/([^\r])\n/g, "$1\r\n").replace(/\r([^\n])/g, "\r\n$1");
+		}
 	}
-	return text; // string
-}
-
-dojo.string.splitEscaped = function(/*string*/str, /*string of length=1*/charac){
-// summary:
-//	Splits 'str' into an array separated by 'charac', but skips characters escaped with a backslash
-
+	return text;
+};
+dojo.string.splitEscaped = function (str, charac) {
 	var components = [];
-	for (var i = 0, prevcomma = 0; i < str.length; i++){
-		if (str.charAt(i) == '\\'){ i++; continue; }
-		if (str.charAt(i) == charac){
+	for (var i = 0, prevcomma = 0; i < str.length; i++) {
+		if (str.charAt(i) == "\\") {
+			i++;
+			continue;
+		}
+		if (str.charAt(i) == charac) {
 			components.push(str.substring(prevcomma, i));
 			prevcomma = i + 1;
 		}
 	}
 	components.push(str.substr(prevcomma));
-	return components; // array
-}
+	return components;
+};
 
+
 __CPAN_DIR__ src/html
 __CPAN_FILE__ src/html/util.js
 /*
@@ -13187,93 +8934,45 @@
 
 dojo.provide("dojo.html.util");
 dojo.require("dojo.html.layout");
-
-dojo.html.getElementWindow = function(/* HTMLElement */element){
-	//	summary
-	// 	Get the window object where the element is placed in.
-	return dojo.html.getDocumentWindow( element.ownerDocument );	//	Window
-}
-
-dojo.html.getDocumentWindow = function(doc){
-	//	summary
-	// 	Get window object associated with document doc
-
-	// With Safari, there is not wa to retrieve the window from the document, so we must fix it.
-	if(dojo.render.html.safari && !doc._parentWindow){
-		/*
-			This is a Safari specific function that fix the reference to the parent
-			window from the document object.
-		*/
-
-		var fix=function(win){
-			win.document._parentWindow=win;
-			for(var i=0; i<win.frames.length; i++){
+dojo.html.getElementWindow = function (element) {
+	return dojo.html.getDocumentWindow(element.ownerDocument);
+};
+dojo.html.getDocumentWindow = function (doc) {
+	if (dojo.render.html.safari && !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);
 	}
-
-	//In some IE versions (at least 6.0), document.parentWindow does not return a
-	//reference to the real window object (maybe a copy), so we must fix it as well
-	//We use IE specific execScript to attach the real window reference to
-	//document._parentWindow for later use
-	if(dojo.render.html.ie && window !== document.parentWindow && !doc._parentWindow){
-		/*
-		In IE 6, only the variable "window" can be used to connect events (others
-		may be only copies).
-		*/
+	if (dojo.render.html.ie && window !== document.parentWindow && !doc._parentWindow) {
 		doc.parentWindow.execScript("document._parentWindow = window;", "Javascript");
-		//to prevent memory leak, unset it after use
-		//another possibility is to add an onUnload handler which seems overkill to me (liucougar)
 		var win = doc._parentWindow;
 		doc._parentWindow = null;
-		return win;	//	Window
+		return win;
 	}
-
-	return doc._parentWindow || doc.parentWindow || doc.defaultView;	//	Window
-}
-
-dojo.html.gravity = function(/* HTMLElement */node, /* DOMEvent */e){
-	//	summary
-	//	Calculates the mouse's direction of gravity relative to the centre
-	//	of the given node.
-	//	<p>
-	//	If you wanted to insert a node into a DOM tree based on the mouse
-	//	position you might use the following code:
-	//	<pre>
-	//	if (gravity(node, e) & gravity.NORTH) { [insert before]; }
-	//	else { [insert after]; }
-	//	</pre>
-	//
-	//	@param node The node
-	//	@param e		The event containing the mouse coordinates
-	//	@return		 The directions, NORTH or SOUTH and EAST or WEST. These
-	//						 are properties of the function.
+	return doc._parentWindow || doc.parentWindow || doc.defaultView;
+};
+dojo.html.gravity = function (node, e) {
 	node = dojo.byId(node);
 	var mouse = dojo.html.getCursorPosition(e);
-
 	with (dojo.html) {
 		var absolute = getAbsolutePosition(node, true);
 		var bb = getBorderBox(node);
 		var nodecenterx = absolute.x + (bb.width / 2);
 		var nodecentery = absolute.y + (bb.height / 2);
 	}
-
 	with (dojo.html.gravity) {
-		return ((mouse.x < nodecenterx ? WEST : EAST) | (mouse.y < nodecentery ? NORTH : SOUTH));	//	integer
+		return ((mouse.x < nodecenterx ? WEST : EAST) | (mouse.y < nodecentery ? NORTH : SOUTH));
 	}
-}
-
+};
 dojo.html.gravity.NORTH = 1;
 dojo.html.gravity.SOUTH = 1 << 1;
 dojo.html.gravity.EAST = 1 << 2;
 dojo.html.gravity.WEST = 1 << 3;
-
-dojo.html.overElement = function(/* HTMLElement */element, /* DOMEvent */e){
-	//	summary
-	//	Returns whether the mouse is over the passed element.
-	//	Element must be display:block (ie, not a <span>)
+dojo.html.overElement = function (element, e) {
 	element = dojo.byId(element);
 	var mouse = dojo.html.getCursorPosition(e);
 	var bb = dojo.html.getBorderBox(element);
@@ -13282,196 +8981,154 @@
 	var bottom = top + bb.height;
 	var left = absolute.x;
 	var right = left + bb.width;
-
-	return (mouse.x >= left
-		&& mouse.x <= right
-		&& mouse.y >= top
-		&& mouse.y <= bottom
-	);	//	boolean
-}
-
-dojo.html.renderedTextContent = function(/* HTMLElement */node){
-	//	summary
-	//	Attempts to return the text as it would be rendered, with the line breaks
-	//	sorted out nicely. Unfinished.
+	return (mouse.x >= left && mouse.x <= right && mouse.y >= top && mouse.y <= bottom);
+};
+dojo.html.renderedTextContent = function (node) {
 	node = dojo.byId(node);
 	var result = "";
-	if (node == null) { return result; }
+	if (node == null) {
+		return result;
+	}
 	for (var i = 0; i < node.childNodes.length; i++) {
 		switch (node.childNodes[i].nodeType) {
-			case 1: // ELEMENT_NODE
-			case 5: // ENTITY_REFERENCE_NODE
-				var display = "unknown";
-				try {
-					display = dojo.html.getStyle(node.childNodes[i], "display");
-				} catch(E) {}
-				switch (display) {
-					case "block": case "list-item": case "run-in":
-					case "table": case "table-row-group": case "table-header-group":
-					case "table-footer-group": case "table-row": case "table-column-group":
-					case "table-column": case "table-cell": case "table-caption":
-						// TODO: this shouldn't insert double spaces on aligning blocks
-						result += "\n";
-						result += dojo.html.renderedTextContent(node.childNodes[i]);
-						result += "\n";
-						break;
-
-					case "none": break;
-
-					default:
-						if(node.childNodes[i].tagName && node.childNodes[i].tagName.toLowerCase() == "br") {
-							result += "\n";
-						} else {
-							result += dojo.html.renderedTextContent(node.childNodes[i]);
-						}
-						break;
+		  case 1:
+		  case 5:
+			var display = "unknown";
+			try {
+				display = dojo.html.getStyle(node.childNodes[i], "display");
+			}
+			catch (E) {
+			}
+			switch (display) {
+			  case "block":
+			  case "list-item":
+			  case "run-in":
+			  case "table":
+			  case "table-row-group":
+			  case "table-header-group":
+			  case "table-footer-group":
+			  case "table-row":
+			  case "table-column-group":
+			  case "table-column":
+			  case "table-cell":
+			  case "table-caption":
+				result += "\n";
+				result += dojo.html.renderedTextContent(node.childNodes[i]);
+				result += "\n";
+				break;
+			  case "none":
+				break;
+			  default:
+				if (node.childNodes[i].tagName && node.childNodes[i].tagName.toLowerCase() == "br") {
+					result += "\n";
+				} else {
+					result += dojo.html.renderedTextContent(node.childNodes[i]);
 				}
 				break;
-			case 3: // TEXT_NODE
-			case 2: // ATTRIBUTE_NODE
-			case 4: // CDATA_SECTION_NODE
-				var text = node.childNodes[i].nodeValue;
-				var textTransform = "unknown";
-				try {
-					textTransform = dojo.html.getStyle(node, "text-transform");
-				} catch(E) {}
-				switch (textTransform){
-					case "capitalize":
-						var words = text.split(' ');
-						for(var i=0; i<words.length; i++){
-							words[i] = words[i].charAt(0).toUpperCase() + words[i].substring(1);
-						}
-						text = words.join(" ");
-						break;
-					case "uppercase": text = text.toUpperCase(); break;
-					case "lowercase": text = text.toLowerCase(); break;
-					default: break; // leave as is
+			}
+			break;
+		  case 3:
+		  case 2:
+		  case 4:
+			var text = node.childNodes[i].nodeValue;
+			var textTransform = "unknown";
+			try {
+				textTransform = dojo.html.getStyle(node, "text-transform");
+			}
+			catch (E) {
+			}
+			switch (textTransform) {
+			  case "capitalize":
+				var words = text.split(" ");
+				for (var i = 0; i < words.length; i++) {
+					words[i] = words[i].charAt(0).toUpperCase() + words[i].substring(1);
 				}
-				// TODO: implement
-				switch (textTransform){
-					case "nowrap": break;
-					case "pre-wrap": break;
-					case "pre-line": break;
-					case "pre": break; // leave as is
-					default:
-						// remove whitespace and collapse first space
-						text = text.replace(/\s+/, " ");
-						if (/\s$/.test(result)) { text.replace(/^\s/, ""); }
-						break;
-				}
-				result += text;
+				text = words.join(" ");
 				break;
-			default:
+			  case "uppercase":
+				text = text.toUpperCase();
 				break;
+			  case "lowercase":
+				text = text.toLowerCase();
+				break;
+			  default:
+				break;
+			}
+			switch (textTransform) {
+			  case "nowrap":
+				break;
+			  case "pre-wrap":
+				break;
+			  case "pre-line":
+				break;
+			  case "pre":
+				break;
+			  default:
+				text = text.replace(/\s+/, " ");
+				if (/\s$/.test(result)) {
+					text.replace(/^\s/, "");
+				}
+				break;
+			}
+			result += text;
+			break;
+		  default:
+			break;
 		}
 	}
-	return result;	//	string
-}
-
-dojo.html.createNodesFromText = function(/* string */txt, /* boolean? */trim){
-	//	summary
-	//	Attempts to create a set of nodes based on the structure of the passed text.
-	if(trim) { txt = txt.replace(/^\s+|\s+$/g, ""); }
-
+	return result;
+};
+dojo.html.createNodesFromText = function (txt, trim) {
+	if (trim) {
+		txt = txt.replace(/^\s+|\s+$/g, "");
+	}
 	var tn = dojo.doc().createElement("div");
-	// tn.style.display = "none";
-	tn.style.visibility= "hidden";
+	tn.style.visibility = "hidden";
 	dojo.body().appendChild(tn);
 	var tableType = "none";
-	if((/^<t[dh][\s\r\n>]/i).test(txt.replace(/^\s+/))) {
+	if ((/^<t[dh][\s\r\n>]/i).test(txt.replace(/^\s+/))) {
 		txt = "<table><tbody><tr>" + txt + "</tr></tbody></table>";
 		tableType = "cell";
-	} else if((/^<tr[\s\r\n>]/i).test(txt.replace(/^\s+/))) {
-		txt = "<table><tbody>" + txt + "</tbody></table>";
-		tableType = "row";
-	} else if((/^<(thead|tbody|tfoot)[\s\r\n>]/i).test(txt.replace(/^\s+/))) {
-		txt = "<table>" + txt + "</table>";
-		tableType = "section";
+	} else {
+		if ((/^<tr[\s\r\n>]/i).test(txt.replace(/^\s+/))) {
+			txt = "<table><tbody>" + txt + "</tbody></table>";
+			tableType = "row";
+		} else {
+			if ((/^<(thead|tbody|tfoot)[\s\r\n>]/i).test(txt.replace(/^\s+/))) {
+				txt = "<table>" + txt + "</table>";
+				tableType = "section";
+			}
+		}
 	}
 	tn.innerHTML = txt;
-	if(tn["normalize"]){
+	if (tn["normalize"]) {
 		tn.normalize();
 	}
-
 	var parent = null;
-	switch(tableType) {
-		case "cell":
-			parent = tn.getElementsByTagName("tr")[0];
-			break;
-		case "row":
-			parent = tn.getElementsByTagName("tbody")[0];
-			break;
-		case "section":
-			parent = tn.getElementsByTagName("table")[0];
-			break;
-		default:
-			parent = tn;
-			break;
+	switch (tableType) {
+	  case "cell":
+		parent = tn.getElementsByTagName("tr")[0];
+		break;
+	  case "row":
+		parent = tn.getElementsByTagName("tbody")[0];
+		break;
+	  case "section":
+		parent = tn.getElementsByTagName("table")[0];
+		break;
+	  default:
+		parent = tn;
+		break;
 	}
-
-	/* this doesn't make much sense, I'm assuming it just meant trim() so wrap was replaced with trim
-	if(wrap){
-		var ret = [];
-		// start hack
-		var fc = tn.firstChild;
-		ret[0] = ((fc.nodeValue == " ")||(fc.nodeValue == "\t")) ? fc.nextSibling : fc;
-		// end hack
-		// tn.style.display = "none";
-		dojo.body().removeChild(tn);
-		return ret;
-	}
-	*/
 	var nodes = [];
-	for(var x=0; x<parent.childNodes.length; x++){
+	for (var x = 0; x < parent.childNodes.length; x++) {
 		nodes.push(parent.childNodes[x].cloneNode(true));
 	}
-	tn.style.display = "none"; // FIXME: why do we do this?
+	tn.style.display = "none";
 	dojo.html.destroyNode(tn);
-	return nodes;	//	array
-}
-
-dojo.html.placeOnScreen = function(
-	/* HTMLElement */node,
-	/* integer */desiredX,
-	/* integer */desiredY,
-	/* integer */padding,
-	/* boolean? */hasScroll,
-	/* string? */corners,
-	/* boolean? */tryOnly
-){
-	//	summary
-	//	Keeps 'node' in the visible area of the screen while trying to
-	//	place closest to desiredX, desiredY. The input coordinates are
-	//	expected to be the desired screen position, not accounting for
-	//	scrolling. If you already accounted for scrolling, set 'hasScroll'
-	//	to true. Set padding to either a number or array for [paddingX, paddingY]
-	//	to put some buffer around the element you want to position.
-	//	Set which corner(s) you want to bind to, such as
-	//
-	//	placeOnScreen(node, desiredX, desiredY, padding, hasScroll, "TR")
-	//	placeOnScreen(node, [desiredX, desiredY], padding, hasScroll, ["TR", "BL"])
-	//
-	//	The desiredX/desiredY will be treated as the topleft(TL)/topright(TR) or
-	//	BottomLeft(BL)/BottomRight(BR) corner of the node. Each corner is tested
-	//	and if a perfect match is found, it will be used. Otherwise, it goes through
-	//	all of the specified corners, and choose the most appropriate one.
-	//	By default, corner = ['TL'].
-	//	If tryOnly is set to true, the node will not be moved to the place.
-	//
-	//	NOTE: node is assumed to be absolutely or relatively positioned.
-	//
-	//	Alternate call sig:
-	//	 placeOnScreen(node, [x, y], padding, hasScroll)
-	//
-	//	Examples:
-	//	 placeOnScreen(node, 100, 200)
-	//	 placeOnScreen("myId", [800, 623], 5)
-	//	 placeOnScreen(node, 234, 3284, [2, 5], true)
-
-	// TODO: make this function have variable call sigs
-	//	kes(node, ptArray, cornerArray, padding, hasScroll)
-	//	kes(node, ptX, ptY, cornerA, cornerB, cornerC, paddingArray, hasScroll)
-	if(desiredX instanceof Array || typeof desiredX == "array") {
+	return nodes;
+};
+dojo.html.placeOnScreen = function (node, desiredX, desiredY, padding, hasScroll, corners, tryOnly) {
+	if (desiredX instanceof Array || typeof desiredX == "array") {
 		tryOnly = corners;
 		corners = hasScroll;
 		hasScroll = padding;
@@ -13479,82 +9136,71 @@
 		desiredY = desiredX[1];
 		desiredX = desiredX[0];
 	}
-
-	if(corners instanceof String || typeof corners == "string"){
+	if (corners instanceof String || typeof corners == "string") {
 		corners = corners.split(",");
 	}
-
-	if(!isNaN(padding)) {
+	if (!isNaN(padding)) {
 		padding = [Number(padding), Number(padding)];
-	} else if(!(padding instanceof Array || typeof padding == "array")) {
-		padding = [0, 0];
+	} else {
+		if (!(padding instanceof Array || typeof padding == "array")) {
+			padding = [0, 0];
+		}
 	}
-
 	var scroll = dojo.html.getScroll().offset;
 	var view = dojo.html.getViewport();
-
 	node = dojo.byId(node);
 	var oldDisplay = node.style.display;
-	node.style.display="";
+	node.style.display = "";
 	var bb = dojo.html.getBorderBox(node);
 	var w = bb.width;
 	var h = bb.height;
-	node.style.display=oldDisplay;
-
-	if(!(corners instanceof Array || typeof corners == "array")){
-		corners = ['TL'];
+	node.style.display = oldDisplay;
+	if (!(corners instanceof Array || typeof corners == "array")) {
+		corners = ["TL"];
 	}
-
 	var bestx, besty, bestDistance = Infinity, bestCorner;
-
-	for(var cidex=0; cidex<corners.length; ++cidex){
+	for (var cidex = 0; cidex < corners.length; ++cidex) {
 		var corner = corners[cidex];
 		var match = true;
-		var tryX = desiredX - (corner.charAt(1)=='L' ? 0 : w) + padding[0]*(corner.charAt(1)=='L' ? 1 : -1);
-		var tryY = desiredY - (corner.charAt(0)=='T' ? 0 : h) + padding[1]*(corner.charAt(0)=='T' ? 1 : -1);
-		if(hasScroll) {
+		var tryX = desiredX - (corner.charAt(1) == "L" ? 0 : w) + padding[0] * (corner.charAt(1) == "L" ? 1 : -1);
+		var tryY = desiredY - (corner.charAt(0) == "T" ? 0 : h) + padding[1] * (corner.charAt(0) == "T" ? 1 : -1);
+		if (hasScroll) {
 			tryX -= scroll.x;
 			tryY -= scroll.y;
 		}
-
-		if(tryX < 0){
+		if (tryX < 0) {
 			tryX = 0;
 			match = false;
 		}
-
-		if(tryY < 0){
+		if (tryY < 0) {
 			tryY = 0;
 			match = false;
 		}
-
 		var x = tryX + w;
-		if(x > view.width) {
+		if (x > view.width) {
 			x = view.width - w;
 			match = false;
 		} else {
 			x = tryX;
 		}
 		x = Math.max(padding[0], x) + scroll.x;
-
 		var y = tryY + h;
-		if(y > view.height) {
+		if (y > view.height) {
 			y = view.height - h;
 			match = false;
 		} else {
 			y = tryY;
 		}
 		y = Math.max(padding[1], y) + scroll.y;
-
-		if(match){ //perfect match, return now
+		if (match) {
 			bestx = x;
 			besty = y;
 			bestDistance = 0;
 			bestCorner = corner;
 			break;
-		}else{
-			//not perfect, find out whether it is better than the saved one
-			var dist = Math.pow(x-tryX-scroll.x,2)+Math.pow(y-tryY-scroll.y,2);
-			if(bestDistance > dist){
+		} else {
+			var dist = Math.pow(x - tryX - scroll.x, 2) + Math.pow(y - tryY - scroll.y, 2);
+			if (bestDistance > dist) {
 				bestDistance = dist;
 				bestx = x;
 				besty = y;
@@ -13562,105 +9208,75 @@
 			}
 		}
 	}
-
-	if(!tryOnly){
+	if (!tryOnly) {
 		node.style.left = bestx + "px";
 		node.style.top = besty + "px";
 	}
-
-	return { left: bestx, top: besty, x: bestx, y: besty, dist: bestDistance, corner:  bestCorner};	//	object
-}
-
-dojo.html.placeOnScreenPoint = function(node, desiredX, desiredY, padding, hasScroll) {
+	return {left:bestx, top:besty, x:bestx, y:besty, dist:bestDistance, corner:bestCorner};
+};
+dojo.html.placeOnScreenPoint = function (node, desiredX, desiredY, padding, hasScroll) {
 	dojo.deprecated("dojo.html.placeOnScreenPoint", "use dojo.html.placeOnScreen() instead", "0.5");
-	return dojo.html.placeOnScreen(node, desiredX, desiredY, padding, hasScroll, ['TL', 'TR', 'BL', 'BR']);
-}
-
-dojo.html.placeOnScreenAroundElement = function(
-	/* HTMLElement */node,
-	/* HTMLElement */aroundNode,
-	/* integer */padding,
-	/* string? */aroundType,
-	/* string? */aroundCorners,
-	/* boolean? */tryOnly
-){
-	//	summary
-	//	Like placeOnScreen, except it accepts aroundNode instead of x,y
-	//	and attempts to place node around it. aroundType (see
-	//	dojo.html.boxSizing in html/layout.js) determines which box of the
-	//	aroundNode should be used to calculate the outer box.
-	//	aroundCorners specify Which corner of aroundNode should be
-	//	used to place the node => which corner(s) of node to use (see the
-	//	corners parameter in dojo.html.placeOnScreen)
-	//	aroundCorners: {'TL': 'BL', 'BL': 'TL'}
-
-	var best, bestDistance=Infinity;
+	return dojo.html.placeOnScreen(node, desiredX, desiredY, padding, hasScroll, ["TL", "TR", "BL", "BR"]);
+};
+dojo.html.placeOnScreenAroundElement = function (node, aroundNode, padding, aroundType, aroundCorners, tryOnly) {
+	var best, bestDistance = Infinity;
 	aroundNode = dojo.byId(aroundNode);
 	var oldDisplay = aroundNode.style.display;
-	aroundNode.style.display="";
+	aroundNode.style.display = "";
 	var mb = dojo.html.getElementBox(aroundNode, aroundType);
 	var aroundNodeW = mb.width;
 	var aroundNodeH = mb.height;
 	var aroundNodePos = dojo.html.getAbsolutePosition(aroundNode, true, aroundType);
-	aroundNode.style.display=oldDisplay;
-
-	for(var nodeCorner in aroundCorners){
+	aroundNode.style.display = oldDisplay;
+	for (var nodeCorner in aroundCorners) {
 		var pos, desiredX, desiredY;
 		var corners = aroundCorners[nodeCorner];
-
-		desiredX = aroundNodePos.x + (nodeCorner.charAt(1)=='L' ? 0 : aroundNodeW);
-		desiredY = aroundNodePos.y + (nodeCorner.charAt(0)=='T' ? 0 : aroundNodeH);
-
+		desiredX = aroundNodePos.x + (nodeCorner.charAt(1) == "L" ? 0 : aroundNodeW);
+		desiredY = aroundNodePos.y + (nodeCorner.charAt(0) == "T" ? 0 : aroundNodeH);
 		pos = dojo.html.placeOnScreen(node, desiredX, desiredY, padding, true, corners, true);
-		if(pos.dist == 0){
+		if (pos.dist == 0) {
 			best = pos;
 			break;
-		}else{
-			//not perfect, find out whether it is better than the saved one
-			if(bestDistance > pos.dist){
+		} else {
+			if (bestDistance > pos.dist) {
 				bestDistance = pos.dist;
 				best = pos;
 			}
 		}
 	}
-
-	if(!tryOnly){
+	if (!tryOnly) {
 		node.style.left = best.left + "px";
 		node.style.top = best.top + "px";
 	}
-	return best;	//	object
-}
-
-dojo.html.scrollIntoView = function(/* HTMLElement */node){
-	//	summary
-	//	Scroll the passed node into view, if it is not.
-	if(!node){ return; }
-
-	// don't rely on that node.scrollIntoView works just because the function is there
-	// it doesnt work in Konqueror or Opera even though the function is there and probably
-	// not safari either
-	// dont like browser sniffs implementations but sometimes you have to use it
-	if(dojo.render.html.ie){
-		//only call scrollIntoView if there is a scrollbar for this menu,
-		//otherwise, scrollIntoView will scroll the window scrollbar
-		if(dojo.html.getBorderBox(node.parentNode).height <= node.parentNode.scrollHeight){
+	return best;
+};
+dojo.html.scrollIntoView = function (node) {
+	if (!node) {
+		return;
+	}
+	if (dojo.render.html.ie) {
+		if (dojo.html.getBorderBox(node.parentNode).height <= node.parentNode.scrollHeight) {
 			node.scrollIntoView(false);
 		}
-	}else if(dojo.render.html.mozilla){
-		// IE, mozilla
-		node.scrollIntoView(false);
-	}else{
-		var parent = node.parentNode;
-		var parentBottom = parent.scrollTop + dojo.html.getBorderBox(parent).height;
-		var nodeBottom = node.offsetTop + dojo.html.getMarginBox(node).height;
-		if(parentBottom < nodeBottom){
-			parent.scrollTop += (nodeBottom - parentBottom);
-		}else if(parent.scrollTop > node.offsetTop){
-			parent.scrollTop -= (parent.scrollTop - node.offsetTop);
+	} else {
+		if (dojo.render.html.mozilla) {
+			node.scrollIntoView(false);
+		} else {
+			var parent = node.parentNode;
+			var parentBottom = parent.scrollTop + dojo.html.getBorderBox(parent).height;
+			var nodeBottom = node.offsetTop + dojo.html.getMarginBox(node).height;
+			if (parentBottom < nodeBottom) {
+				parent.scrollTop += (nodeBottom - parentBottom);
+			} else {
+				if (parent.scrollTop > node.offsetTop) {
+					parent.scrollTop -= (parent.scrollTop - node.offsetTop);
+				}
+			}
 		}
 	}
-}
+};
 
+
 __CPAN_FILE__ src/html/display.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -13674,191 +9290,140 @@
 
 dojo.provide("dojo.html.display");
 dojo.require("dojo.html.style");
-
-dojo.html._toggle = function(node, tester, setter){
+dojo.html._toggle = function (node, tester, setter) {
 	node = dojo.byId(node);
 	setter(node, !tester(node));
 	return tester(node);
-}
-
-dojo.html.show = function(/* HTMLElement */node){
-	//	summary
-	//	Show the passed element by reverting display property set by dojo.html.hide
+};
+dojo.html.show = function (node) {
 	node = dojo.byId(node);
-	if(dojo.html.getStyleProperty(node, 'display')=='none'){
-		dojo.html.setStyle(node, 'display', (node.dojoDisplayCache||''));
-		node.dojoDisplayCache = undefined;	// cannot use delete on a node in IE6
+	if (dojo.html.getStyleProperty(node, "display") == "none") {
+		dojo.html.setStyle(node, "display", (node.dojoDisplayCache || ""));
+		node.dojoDisplayCache = undefined;
 	}
-}
-
-dojo.html.hide = function(/* HTMLElement */node){
-	//	summary
-	//	Hide the passed element by setting display:none
+};
+dojo.html.hide = function (node) {
 	node = dojo.byId(node);
-	if(typeof node["dojoDisplayCache"] == "undefined"){ // it could == '', so we cannot say !node.dojoDisplayCount
-		var d = dojo.html.getStyleProperty(node, 'display')
-		if(d!='none'){
+	if (typeof node["dojoDisplayCache"] == "undefined") {
+		var d = dojo.html.getStyleProperty(node, "display");
+		if (d != "none") {
 			node.dojoDisplayCache = d;
 		}
 	}
-	dojo.html.setStyle(node, 'display', 'none');
-}
-
-dojo.html.setShowing = function(/* HTMLElement */node, /* boolean? */showing){
-	//	summary
-	// Calls show() if showing is true, hide() otherwise
-	dojo.html[(showing ? 'show' : 'hide')](node);
-}
-
-dojo.html.isShowing = function(/* HTMLElement */node){
-	//	summary
-	//	Returns whether the element is displayed or not.
-	// FIXME: returns true if node is bad, isHidden would be easier to make correct
-	return (dojo.html.getStyleProperty(node, 'display') != 'none');	//	boolean
-}
-
-dojo.html.toggleShowing = function(/* HTMLElement */node){
-	//	summary
-	// Call setShowing() on node with the complement of isShowing(), then return the new value of isShowing()
-	return dojo.html._toggle(node, dojo.html.isShowing, dojo.html.setShowing);	//	boolean
-}
-
-// Simple mapping of tag names to display values
-// FIXME: simplistic 
-dojo.html.displayMap = { tr: '', td: '', th: '', img: 'inline', span: 'inline', input: 'inline', button: 'inline' };
-
-dojo.html.suggestDisplayByTagName = function(/* HTMLElement */node){
-	//	summary
-	// Suggest a value for the display property that will show 'node' based on it's tag
+	dojo.html.setStyle(node, "display", "none");
+};
+dojo.html.setShowing = function (node, showing) {
+	dojo.html[(showing ? "show" : "hide")](node);
+};
+dojo.html.isShowing = function (node) {
+	return (dojo.html.getStyleProperty(node, "display") != "none");
+};
+dojo.html.toggleShowing = function (node) {
+	return dojo.html._toggle(node, dojo.html.isShowing, dojo.html.setShowing);
+};
+dojo.html.displayMap = {tr:"", td:"", th:"", img:"inline", span:"inline", input:"inline", button:"inline"};
+dojo.html.suggestDisplayByTagName = function (node) {
 	node = dojo.byId(node);
-	if(node && node.tagName){
+	if (node && node.tagName) {
 		var tag = node.tagName.toLowerCase();
-		return (tag in dojo.html.displayMap ? dojo.html.displayMap[tag] : 'block');	//	string
+		return (tag in dojo.html.displayMap ? dojo.html.displayMap[tag] : "block");
 	}
-}
-
-dojo.html.setDisplay = function(/* HTMLElement */node, /* string */display){
-	//	summary
-	// 	Sets the value of style.display to value of 'display' parameter if it is a string.
-	// 	Otherwise, if 'display' is false, set style.display to 'none'.
-	// 	Finally, set 'display' to a suggested display value based on the node's tag
-	dojo.html.setStyle(node, 'display', ((display instanceof String || typeof display == "string") ? display : (display ? dojo.html.suggestDisplayByTagName(node) : 'none')));
-}
-
-dojo.html.isDisplayed = function(/* HTMLElement */node){
-	//	summary
-	// 	Is true if the the computed display style for node is not 'none'
-	// 	FIXME: returns true if node is bad, isNotDisplayed would be easier to make correct
-	return (dojo.html.getComputedStyle(node, 'display') != 'none');	//	boolean
-}
-
-dojo.html.toggleDisplay = function(/* HTMLElement */node){
-	//	summary
-	// 	Call setDisplay() on node with the complement of isDisplayed(), then
-	// 	return the new value of isDisplayed()
-	return dojo.html._toggle(node, dojo.html.isDisplayed, dojo.html.setDisplay);	//	boolean
-}
-
-dojo.html.setVisibility = function(/* HTMLElement */node, /* string */visibility){
-	//	summary
-	// 	Sets the value of style.visibility to value of 'visibility' parameter if it is a string.
-	// 	Otherwise, if 'visibility' is false, set style.visibility to 'hidden'. Finally, set style.visibility to 'visible'.
-	dojo.html.setStyle(node, 'visibility', ((visibility instanceof String || typeof visibility == "string") ? visibility : (visibility ? 'visible' : 'hidden')));
-}
-
-dojo.html.isVisible = function(/* HTMLElement */node){
-	//	summary
-	// 	Returns true if the the computed visibility style for node is not 'hidden'
-	// 	FIXME: returns true if node is bad, isInvisible would be easier to make correct
-	return (dojo.html.getComputedStyle(node, 'visibility') != 'hidden');	//	boolean
-}
-
-dojo.html.toggleVisibility = function(node){
-	//	summary
-	// Call setVisibility() on node with the complement of isVisible(), then return the new value of isVisible()
-	return dojo.html._toggle(node, dojo.html.isVisible, dojo.html.setVisibility);	//	boolean
-}
-
-dojo.html.setOpacity = function(/* HTMLElement */node, /* float */opacity, /* boolean? */dontFixOpacity){
-	//	summary
-	//	Sets the opacity of node in a cross-browser way.
-	//	float between 0.0 (transparent) and 1.0 (opaque)
+};
+dojo.html.setDisplay = function (node, display) {
+	dojo.html.setStyle(node, "display", ((display instanceof String || typeof display == "string") ? display : (display ? dojo.html.suggestDisplayByTagName(node) : "none")));
+};
+dojo.html.isDisplayed = function (node) {
+	return (dojo.html.getComputedStyle(node, "display") != "none");
+};
+dojo.html.toggleDisplay = function (node) {
+	return dojo.html._toggle(node, dojo.html.isDisplayed, dojo.html.setDisplay);
+};
+dojo.html.setVisibility = function (node, visibility) {
+	dojo.html.setStyle(node, "visibility", ((visibility instanceof String || typeof visibility == "string") ? visibility : (visibility ? "visible" : "hidden")));
+};
+dojo.html.isVisible = function (node) {
+	return (dojo.html.getComputedStyle(node, "visibility") != "hidden");
+};
+dojo.html.toggleVisibility = function (node) {
+	return dojo.html._toggle(node, dojo.html.isVisible, dojo.html.setVisibility);
+};
+dojo.html.setOpacity = function (node, opacity, dontFixOpacity) {
 	node = dojo.byId(node);
 	var h = dojo.render.html;
-	if(!dontFixOpacity){
-		if( opacity >= 1.0){
-			if(h.ie){
+	if (!dontFixOpacity) {
+		if (opacity >= 1) {
+			if (h.ie) {
 				dojo.html.clearOpacity(node);
 				return;
-			}else{
+			} else {
 				opacity = 0.999999;
 			}
-		}else if( opacity < 0.0){ opacity = 0; }
+		} else {
+			if (opacity < 0) {
+				opacity = 0;
+			}
+		}
 	}
-	if(h.ie){
-		if(node.nodeName.toLowerCase() == "tr"){
-			// FIXME: is this too naive? will we get more than we want?
+	if (h.ie) {
+		if (node.nodeName.toLowerCase() == "tr") {
 			var tds = node.getElementsByTagName("td");
-			for(var x=0; x<tds.length; x++){
-				tds[x].style.filter = "Alpha(Opacity="+opacity*100+")";
+			for (var x = 0; x < tds.length; x++) {
+				tds[x].style.filter = "Alpha(Opacity=" + opacity * 100 + ")";
 			}
 		}
-		node.style.filter = "Alpha(Opacity="+opacity*100+")";
-	}else if(h.moz){
-		node.style.opacity = opacity; // ffox 1.0 directly supports "opacity"
-		node.style.MozOpacity = opacity;
-	}else if(h.safari){
-		node.style.opacity = opacity; // 1.3 directly supports "opacity"
-		node.style.KhtmlOpacity = opacity;
-	}else{
-		node.style.opacity = opacity;
+		node.style.filter = "Alpha(Opacity=" + opacity * 100 + ")";
+	} else {
+		if (h.moz) {
+			node.style.opacity = opacity;
+			node.style.MozOpacity = opacity;
+		} else {
+			if (h.safari) {
+				node.style.opacity = opacity;
+				node.style.KhtmlOpacity = opacity;
+			} else {
+				node.style.opacity = opacity;
+			}
+		}
 	}
-}
-
-dojo.html.clearOpacity = function(/* HTMLElement */node){
-	//	summary
-	//	Clears any opacity setting on the passed element.
+};
+dojo.html.clearOpacity = function (node) {
 	node = dojo.byId(node);
 	var ns = node.style;
 	var h = dojo.render.html;
-	if(h.ie){
+	if (h.ie) {
 		try {
-			if( node.filters && node.filters.alpha ){
-				ns.filter = ""; // FIXME: may get rid of other filter effects
+			if (node.filters && node.filters.alpha) {
+				ns.filter = "";
 			}
-		} catch(e) {
-			/*
-			 * IE7 gives error if node.filters not set;
-			 * don't know why or how to workaround (other than this)
-			 */
 		}
-	}else if(h.moz){
-		ns.opacity = 1;
-		ns.MozOpacity = 1;
-	}else if(h.safari){
-		ns.opacity = 1;
-		ns.KhtmlOpacity = 1;
-	}else{
-		ns.opacity = 1;
+		catch (e) {
+		}
+	} else {
+		if (h.moz) {
+			ns.opacity = 1;
+			ns.MozOpacity = 1;
+		} else {
+			if (h.safari) {
+				ns.opacity = 1;
+				ns.KhtmlOpacity = 1;
+			} else {
+				ns.opacity = 1;
+			}
+		}
 	}
-}
-
-dojo.html.getOpacity = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the opacity of the passed element
+};
+dojo.html.getOpacity = function (node) {
 	node = dojo.byId(node);
 	var h = dojo.render.html;
-	if(h.ie){
-		var opac = (node.filters && node.filters.alpha &&
-			typeof node.filters.alpha.opacity == "number"
-			? node.filters.alpha.opacity : 100) / 100;
-	}else{
-		var opac = node.style.opacity || node.style.MozOpacity ||
-			node.style.KhtmlOpacity || 1;
+	if (h.ie) {
+		var opac = (node.filters && node.filters.alpha && typeof node.filters.alpha.opacity == "number" ? node.filters.alpha.opacity : 100) / 100;
+	} else {
+		var opac = node.style.opacity || node.style.MozOpacity || node.style.KhtmlOpacity || 1;
 	}
-	return opac >= 0.999999 ? 1.0 : Number(opac);	//	float
-}
+	return opac >= 0.999999 ? 1 : Number(opac);
+};
 
+
 __CPAN_FILE__ src/html/common.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -13873,224 +9438,174 @@
 dojo.provide("dojo.html.common");
 dojo.require("dojo.lang.common");
 dojo.require("dojo.dom");
-
 dojo.lang.mixin(dojo.html, dojo.dom);
-
-dojo.html.body = function(){
+dojo.html.body = function () {
 	dojo.deprecated("dojo.html.body() moved to dojo.body()", "0.5");
 	return dojo.body();
-}
-
-// FIXME: we are going to assume that we can throw any and every rendering
-// engine into the IE 5.x box model. In Mozilla, we do this w/ CSS.
-// Need to investigate for KHTML and Opera
-
-dojo.html.getEventTarget = function(/* DOMEvent */evt){
-	//	summary
-	//	Returns the target of an event
-	if(!evt) { evt = dojo.global().event || {} };
+};
+dojo.html.getEventTarget = function (evt) {
+	if (!evt) {
+		evt = dojo.global().event || {};
+	}
 	var t = (evt.srcElement ? evt.srcElement : (evt.target ? evt.target : null));
-	while((t)&&(t.nodeType!=1)){ t = t.parentNode; }
-	return t;	//	HTMLElement
-}
-
-dojo.html.getViewport = function(){
-	//	summary
-	//	Returns the dimensions of the viewable area of a browser window
+	while ((t) && (t.nodeType != 1)) {
+		t = t.parentNode;
+	}
+	return t;
+};
+dojo.html.getViewport = function () {
 	var _window = dojo.global();
 	var _document = dojo.doc();
 	var w = 0;
 	var h = 0;
-
-	if(dojo.render.html.mozilla){
-		// mozilla
+	if (dojo.render.html.mozilla) {
 		w = _document.documentElement.clientWidth;
 		h = _window.innerHeight;
-	}else if(!dojo.render.html.opera && _window.innerWidth){
-		//in opera9, dojo.body().clientWidth should be used, instead
-		//of window.innerWidth/document.documentElement.clientWidth
-		//so we have to check whether it is opera
-		w = _window.innerWidth;
-		h = _window.innerHeight;
-	} else if (!dojo.render.html.opera && dojo.exists(_document, "documentElement.clientWidth")){
-		// IE6 Strict
-		var w2 = _document.documentElement.clientWidth;
-		// this lets us account for scrollbars
-		if(!w || w2 && w2 < w) {
-			w = w2;
+	} else {
+		if (!dojo.render.html.opera && _window.innerWidth) {
+			w = _window.innerWidth;
+			h = _window.innerHeight;
+		} else {
+			if (!dojo.render.html.opera && dojo.exists(_document, "documentElement.clientWidth")) {
+				var w2 = _document.documentElement.clientWidth;
+				if (!w || w2 && w2 < w) {
+					w = w2;
+				}
+				h = _document.documentElement.clientHeight;
+			} else {
+				if (dojo.body().clientWidth) {
+					w = dojo.body().clientWidth;
+					h = dojo.body().clientHeight;
+				}
+			}
 		}
-		h = _document.documentElement.clientHeight;
-	} else if (dojo.body().clientWidth){
-		// IE, Opera
-		w = dojo.body().clientWidth;
-		h = dojo.body().clientHeight;
 	}
-	return { width: w, height: h };	//	object
-}
-
-dojo.html.getScroll = function(){
-	//	summary
-	//	Returns the scroll position of the document
+	return {width:w, height:h};
+};
+dojo.html.getScroll = function () {
 	var _window = dojo.global();
 	var _document = dojo.doc();
 	var top = _window.pageYOffset || _document.documentElement.scrollTop || dojo.body().scrollTop || 0;
 	var left = _window.pageXOffset || _document.documentElement.scrollLeft || dojo.body().scrollLeft || 0;
-	return { 
-		top: top, 
-		left: left, 
-		offset:{ x: left, y: top }	//	note the change, NOT an Array with added properties. 
-	};	//	object
-}
-
-dojo.html.getParentByType = function(/* HTMLElement */node, /* string */type) {
-	//	summary
-	//	Returns the first ancestor of node with tagName type.
+	return {top:top, left:left, offset:{x:left, y:top}};
+};
+dojo.html.getParentByType = function (node, type) {
 	var _document = dojo.doc();
 	var parent = dojo.byId(node);
 	type = type.toLowerCase();
-	while((parent)&&(parent.nodeName.toLowerCase()!=type)){
-		if(parent==(_document["body"]||_document["documentElement"])){
+	while ((parent) && (parent.nodeName.toLowerCase() != type)) {
+		if (parent == (_document["body"] || _document["documentElement"])) {
 			return null;
 		}
 		parent = parent.parentNode;
 	}
-	return parent;	//	HTMLElement
-}
-
-dojo.html.getAttribute = function(/* HTMLElement */node, /* string */attr){
-	//	summary
-	//	Returns the value of attribute attr from node.
+	return parent;
+};
+dojo.html.getAttribute = function (node, attr) {
 	node = dojo.byId(node);
-	// FIXME: need to add support for attr-specific accessors
-	if((!node)||(!node.getAttribute)){
-		// if(attr !== 'nwType'){
-		//	alert("getAttr of '" + attr + "' with bad node"); 
-		// }
+	if ((!node) || (!node.getAttribute)) {
 		return null;
 	}
-	var ta = typeof attr == 'string' ? attr : new String(attr);
-
-	// first try the approach most likely to succeed
+	var ta = typeof attr == "string" ? attr : new String(attr);
 	var v = node.getAttribute(ta.toUpperCase());
-	if((v)&&(typeof v == 'string')&&(v!="")){ 
-		return v;	//	string 
+	if ((v) && (typeof v == "string") && (v != "")) {
+		return v;
 	}
-
-	// try returning the attributes value, if we couldn't get it as a string
-	if(v && v.value){ 
-		return v.value;	//	string 
+	if (v && v.value) {
+		return v.value;
 	}
-
-	// this should work on Opera 7, but it's a little on the crashy side
-	if((node.getAttributeNode)&&(node.getAttributeNode(ta))){
-		return (node.getAttributeNode(ta)).value;	//	string
-	}else if(node.getAttribute(ta)){
-		return node.getAttribute(ta);	//	string
-	}else if(node.getAttribute(ta.toLowerCase())){
-		return node.getAttribute(ta.toLowerCase());	//	string
+	if ((node.getAttributeNode) && (node.getAttributeNode(ta))) {
+		return (node.getAttributeNode(ta)).value;
+	} else {
+		if (node.getAttribute(ta)) {
+			return node.getAttribute(ta);
+		} else {
+			if (node.getAttribute(ta.toLowerCase())) {
+				return node.getAttribute(ta.toLowerCase());
+			}
+		}
 	}
-	return null;	//	string
-}
-	
-dojo.html.hasAttribute = function(/* HTMLElement */node, /* string */attr){
-	//	summary
-	//	Determines whether or not the specified node carries a value for the attribute in question.
-	return dojo.html.getAttribute(dojo.byId(node), attr) ? true : false;	//	boolean
-}
-	
-dojo.html.getCursorPosition = function(/* DOMEvent */e){
-	//	summary
-	//	Returns the mouse position relative to the document (not the viewport).
-	//	For example, if you have a document that is 10000px tall,
-	//	but your browser window is only 100px tall,
-	//	if you scroll to the bottom of the document and call this function it
-	//	will return {x: 0, y: 10000}
-	//	NOTE: for events delivered via dojo.event.connect() and/or dojoAttachEvent (for widgets),
-	//	you can just access evt.pageX and evt.pageY, rather than calling this function.
+	return null;
+};
+dojo.html.hasAttribute = function (node, attr) {
+	return dojo.html.getAttribute(dojo.byId(node), attr) ? true : false;
+};
+dojo.html.getCursorPosition = function (e) {
 	e = e || dojo.global().event;
 	var cursor = {x:0, y:0};
-	if(e.pageX || e.pageY){
+	if (e.pageX || e.pageY) {
 		cursor.x = e.pageX;
 		cursor.y = e.pageY;
-	}else{
+	} else {
 		var de = dojo.doc().documentElement;
 		var db = dojo.body();
-		cursor.x = e.clientX + ((de||db)["scrollLeft"]) - ((de||db)["clientLeft"]);
-		cursor.y = e.clientY + ((de||db)["scrollTop"]) - ((de||db)["clientTop"]);
+		cursor.x = e.clientX + ((de || db)["scrollLeft"]) - ((de || db)["clientLeft"]);
+		cursor.y = e.clientY + ((de || db)["scrollTop"]) - ((de || db)["clientTop"]);
 	}
-	return cursor;	//	object
-}
-
-dojo.html.isTag = function(/* HTMLElement */node) {
-	//	summary
-	//	Like dojo.dom.isTag, except case-insensitive
+	return cursor;
+};
+dojo.html.isTag = function (node) {
 	node = dojo.byId(node);
-	if(node && node.tagName) {
-		for (var i=1; i<arguments.length; i++){
-			if (node.tagName.toLowerCase()==String(arguments[i]).toLowerCase()){
-				return String(arguments[i]).toLowerCase();	//	string
+	if (node && node.tagName) {
+		for (var i = 1; i < arguments.length; i++) {
+			if (node.tagName.toLowerCase() == String(arguments[i]).toLowerCase()) {
+				return String(arguments[i]).toLowerCase();
 			}
 		}
 	}
-	return "";	//	string
-}
-
-//define dojo.html.createExternalElement for IE to workaround the annoying activation "feature" in new IE
-//details: http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/overview/activating_activex.asp
-if(dojo.render.html.ie && !dojo.render.html.ie70){
-	//only define createExternalElement for IE in none https to avoid "mixed content" warning dialog
-	if(window.location.href.substr(0,6).toLowerCase() != "https:"){
-		(function(){
-			// FIXME: this seems not to work correctly on IE 7!!
-
-			//The trick is to define a function in a script.src property:
-			// <script src="javascript:'function createExternalElement(){...}'"></script>,
-			//which will be treated as an external javascript file in IE
-			var xscript = dojo.doc().createElement('script');
+	return "";
+};
+if (dojo.render.html.ie && !dojo.render.html.ie70) {
+	if (window.location.href.substr(0, 6).toLowerCase() != "https:") {
+		(function () {
+			var xscript = dojo.doc().createElement("script");
 			xscript.src = "javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
 			dojo.doc().getElementsByTagName("head")[0].appendChild(xscript);
 		})();
 	}
-}else{
-	//for other browsers, simply use document.createElement
-	//is enough
-	dojo.html.createExternalElement = function(/* HTMLDocument */doc, /* string */tag){
-		//	summary
-		//	Creates an element in the HTML document, here for ActiveX activation workaround.
-		return doc.createElement(tag);	//	HTMLElement
-	}
+} else {
+	dojo.html.createExternalElement = function (doc, tag) {
+		return doc.createElement(tag);
+	};
 }
-
-dojo.html._callDeprecated = function(inFunc, replFunc, args, argName, retValue){
-	dojo.deprecated("dojo.html." + inFunc,
-					"replaced by dojo.html." + replFunc + "(" + (argName ? "node, {"+ argName + ": " + argName + "}" : "" ) + ")" + (retValue ? "." + retValue : ""), "0.5");
+dojo.html._callDeprecated = function (inFunc, replFunc, args, argName, retValue) {
+	dojo.deprecated("dojo.html." + inFunc, "replaced by dojo.html." + replFunc + "(" + (argName ? "node, {" + argName + ": " + argName + "}" : "") + ")" + (retValue ? "." + retValue : ""), "0.5");
 	var newArgs = [];
-	if(argName){ var argsIn = {}; argsIn[argName] = args[1]; newArgs.push(args[0]); newArgs.push(argsIn); }
-	else { newArgs = args }
+	if (argName) {
+		var argsIn = {};
+		argsIn[argName] = args[1];
+		newArgs.push(args[0]);
+		newArgs.push(argsIn);
+	} else {
+		newArgs = args;
+	}
 	var ret = dojo.html[replFunc].apply(dojo.html, args);
-	if(retValue){ return ret[retValue]; }
-	else { return ret; }
-}
-
-dojo.html.getViewportWidth = function(){
+	if (retValue) {
+		return ret[retValue];
+	} else {
+		return ret;
+	}
+};
+dojo.html.getViewportWidth = function () {
 	return dojo.html._callDeprecated("getViewportWidth", "getViewport", arguments, null, "width");
-}
-dojo.html.getViewportHeight = function(){
+};
+dojo.html.getViewportHeight = function () {
 	return dojo.html._callDeprecated("getViewportHeight", "getViewport", arguments, null, "height");
-}
-dojo.html.getViewportSize = function(){
+};
+dojo.html.getViewportSize = function () {
 	return dojo.html._callDeprecated("getViewportSize", "getViewport", arguments);
-}
-dojo.html.getScrollTop = function(){
+};
+dojo.html.getScrollTop = function () {
 	return dojo.html._callDeprecated("getScrollTop", "getScroll", arguments, null, "top");
-}
-dojo.html.getScrollLeft = function(){
+};
+dojo.html.getScrollLeft = function () {
 	return dojo.html._callDeprecated("getScrollLeft", "getScroll", arguments, null, "left");
-}
-dojo.html.getScrollOffset = function(){
+};
+dojo.html.getScrollOffset = function () {
 	return dojo.html._callDeprecated("getScrollOffset", "getScroll", arguments, null, "offset");
-}
+};
 
+
 __CPAN_FILE__ src/html/style.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -14105,494 +9620,417 @@
 dojo.provide("dojo.html.style");
 dojo.require("dojo.html.common");
 dojo.require("dojo.uri.Uri");
-
-dojo.html.getClass = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the string value of the list of CSS classes currently assigned directly 
-	//	to the node in question. Returns an empty string if no class attribute is found;
+dojo.html.getClass = function (node) {
 	node = dojo.byId(node);
-	if(!node){ return ""; }
+	if (!node) {
+		return "";
+	}
 	var cs = "";
-	if(node.className){
+	if (node.className) {
 		cs = node.className;
-	}else if(dojo.html.hasAttribute(node, "class")){
-		cs = dojo.html.getAttribute(node, "class");
+	} else {
+		if (dojo.html.hasAttribute(node, "class")) {
+			cs = dojo.html.getAttribute(node, "class");
+		}
 	}
-	return cs.replace(/^\s+|\s+$/g, "");	//	string
-}
-
-dojo.html.getClasses = function(/* HTMLElement */node) {
-	//	summary
-	//	Returns an array of CSS classes currently assigned directly to the node in question. 
-	//	Returns an empty array if no classes are found;
+	return cs.replace(/^\s+|\s+$/g, "");
+};
+dojo.html.getClasses = function (node) {
 	var c = dojo.html.getClass(node);
-	return (c == "") ? [] : c.split(/\s+/g);	//	array
-}
-
-dojo.html.hasClass = function(/* HTMLElement */node, /* string */classname){
-	//	summary
-	//	Returns whether or not the specified classname is a portion of the
-	//	class list currently applied to the node. Does not cover cascaded
-	//	styles, only classes directly applied to the node.
-	return (new RegExp('(^|\\s+)'+classname+'(\\s+|$)')).test(dojo.html.getClass(node))	//	boolean
-}
-
-dojo.html.prependClass = function(/* HTMLElement */node, /* string */classStr){
-	//	summary
-	//	Adds the specified class to the beginning of the class list on the
-	//	passed node. This gives the specified class the highest precidence
-	//	when style cascading is calculated for the node. Returns true or
-	//	false; indicating success or failure of the operation, respectively.
+	return (c == "") ? [] : c.split(/\s+/g);
+};
+dojo.html.hasClass = function (node, classname) {
+	return (new RegExp("(^|\\s+)" + classname + "(\\s+|$)")).test(dojo.html.getClass(node));
+};
+dojo.html.prependClass = function (node, classStr) {
 	classStr += " " + dojo.html.getClass(node);
-	return dojo.html.setClass(node, classStr);	//	boolean
-}
-
-dojo.html.addClass = function(/* HTMLElement */node, /* string */classStr){
-	//	summary
-	//	Adds the specified class to the end of the class list on the
-	//	passed &node;. Returns &true; or &false; indicating success or failure.
+	return dojo.html.setClass(node, classStr);
+};
+dojo.html.addClass = function (node, classStr) {
 	if (dojo.html.hasClass(node, classStr)) {
-	  return false;
+		return false;
 	}
-	classStr = (dojo.html.getClass(node) + " " + classStr).replace(/^\s+|\s+$/g,"");
-	return dojo.html.setClass(node, classStr);	//	boolean
-}
-
-dojo.html.setClass = function(/* HTMLElement */node, /* string */classStr){
-	//	summary
-	//	Clobbers the existing list of classes for the node, replacing it with
-	//	the list given in the 2nd argument. Returns true or false
-	//	indicating success or failure.
+	classStr = (dojo.html.getClass(node) + " " + classStr).replace(/^\s+|\s+$/g, "");
+	return dojo.html.setClass(node, classStr);
+};
+dojo.html.setClass = function (node, classStr) {
 	node = dojo.byId(node);
 	var cs = new String(classStr);
-	try{
-		if(typeof node.className == "string"){
+	try {
+		if (typeof node.className == "string") {
 			node.className = cs;
-		}else if(node.setAttribute){
-			node.setAttribute("class", classStr);
-			node.className = cs;
-		}else{
-			return false;
+		} else {
+			if (node.setAttribute) {
+				node.setAttribute("class", classStr);
+				node.className = cs;
+			} else {
+				return false;
+			}
 		}
-	}catch(e){
+	}
+	catch (e) {
 		dojo.debug("dojo.html.setClass() failed", e);
 	}
 	return true;
-}
-
-dojo.html.removeClass = function(/* HTMLElement */node, /* string */classStr, /* boolean? */allowPartialMatches){
-	//	summary
-	//	Removes the className from the node;. Returns true or false indicating success or failure.
-	try{
+};
+dojo.html.removeClass = function (node, classStr, allowPartialMatches) {
+	try {
 		if (!allowPartialMatches) {
-			var newcs = dojo.html.getClass(node).replace(new RegExp('(^|\\s+)'+classStr+'(\\s+|$)'), "$1$2");
+			var newcs = dojo.html.getClass(node).replace(new RegExp("(^|\\s+)" + classStr + "(\\s+|$)"), "$1$2");
 		} else {
-			var newcs = dojo.html.getClass(node).replace(classStr,'');
+			var newcs = dojo.html.getClass(node).replace(classStr, "");
 		}
 		dojo.html.setClass(node, newcs);
-	}catch(e){
+	}
+	catch (e) {
 		dojo.debug("dojo.html.removeClass() failed", e);
 	}
-	return true;	//	boolean
-}
-
-dojo.html.replaceClass = function(/* HTMLElement */node, /* string */newClass, /* string */oldClass) {
-	//	summary
-	//	Replaces 'oldClass' and adds 'newClass' to node
+	return true;
+};
+dojo.html.replaceClass = function (node, newClass, oldClass) {
 	dojo.html.removeClass(node, oldClass);
 	dojo.html.addClass(node, newClass);
-}
-
-// Enum type for getElementsByClass classMatchType arg:
-dojo.html.classMatchType = {
-	ContainsAll : 0, // all of the classes are part of the node's class (default)
-	ContainsAny : 1, // any of the classes are part of the node's class
-	IsOnly : 2 // only all of the classes are part of the node's class
-}
-
-
-dojo.html.getElementsByClass = function(
-	/* string */classStr, 
-	/* HTMLElement? */parent, 
-	/* string? */nodeType, 
-	/* integer? */classMatchType, 
-	/* boolean? */useNonXpath
-){
-	//	summary
-	//	Returns an array of nodes for the given classStr, children of a
-	//	parent, and optionally of a certain nodeType
-	// FIXME: temporarily set to false because of several dojo tickets related
-	// to the xpath version not working consistently in firefox.
+};
+dojo.html.classMatchType = {ContainsAll:0, ContainsAny:1, IsOnly:2};
+dojo.html.getElementsByClass = function (classStr, parent, nodeType, classMatchType, useNonXpath) {
 	useNonXpath = false;
 	var _document = dojo.doc();
 	parent = dojo.byId(parent) || _document;
 	var classes = classStr.split(/\s+/g);
 	var nodes = [];
-	if( classMatchType != 1 && classMatchType != 2 ) classMatchType = 0; // make it enum
+	if (classMatchType != 1 && classMatchType != 2) {
+		classMatchType = 0;
+	}
 	var reClass = new RegExp("(\\s|^)((" + classes.join(")|(") + "))(\\s|$)");
 	var srtLength = classes.join(" ").length;
 	var candidateNodes = [];
-	
-	if(!useNonXpath && _document.evaluate) { // supports dom 3 xpath
+	if (!useNonXpath && _document.evaluate) {
 		var xpath = ".//" + (nodeType || "*") + "[contains(";
-		if(classMatchType != dojo.html.classMatchType.ContainsAny){
-			xpath += "concat(' ', at class,' '), ' " +
-			classes.join(" ') and contains(concat(' ', at class,' '), ' ") +
-			" ')";
+		if (classMatchType != dojo.html.classMatchType.ContainsAny) {
+			xpath += "concat(' ', at class,' '), ' " + classes.join(" ') and contains(concat(' ', at class,' '), ' ") + " ')";
 			if (classMatchType == 2) {
-				xpath += " and string-length(@class)="+srtLength+"]";
-			}else{
+				xpath += " and string-length(@class)=" + srtLength + "]";
+			} else {
 				xpath += "]";
 			}
-		}else{
-			xpath += "concat(' ', at class,' '), ' " +
-			classes.join(" ') or contains(concat(' ', at class,' '), ' ") +
-			" ')]";
+		} else {
+			xpath += "concat(' ', at class,' '), ' " + classes.join(" ') or contains(concat(' ', at class,' '), ' ") + " ')]";
 		}
 		var xpathResult = _document.evaluate(xpath, parent, null, XPathResult.ANY_TYPE, null);
 		var result = xpathResult.iterateNext();
-		while(result){
-			try{
+		while (result) {
+			try {
 				candidateNodes.push(result);
 				result = xpathResult.iterateNext();
-			}catch(e){ break; }
+			}
+			catch (e) {
+				break;
+			}
 		}
-		return candidateNodes;	//	NodeList
-	}else{
-		if(!nodeType){
+		return candidateNodes;
+	} else {
+		if (!nodeType) {
 			nodeType = "*";
 		}
 		candidateNodes = parent.getElementsByTagName(nodeType);
-
 		var node, i = 0;
-		outer:
-		while(node = candidateNodes[i++]){
+	outer:
+		while (node = candidateNodes[i++]) {
 			var nodeClasses = dojo.html.getClasses(node);
-			if(nodeClasses.length == 0){ continue outer; }
+			if (nodeClasses.length == 0) {
+				continue outer;
+			}
 			var matches = 0;
-	
-			for(var j = 0; j < nodeClasses.length; j++){
-				if(reClass.test(nodeClasses[j])){
-					if(classMatchType == dojo.html.classMatchType.ContainsAny){
+			for (var j = 0; j < nodeClasses.length; j++) {
+				if (reClass.test(nodeClasses[j])) {
+					if (classMatchType == dojo.html.classMatchType.ContainsAny) {
 						nodes.push(node);
 						continue outer;
-					}else{
+					} else {
 						matches++;
 					}
-				}else{
-					if(classMatchType == dojo.html.classMatchType.IsOnly){
+				} else {
+					if (classMatchType == dojo.html.classMatchType.IsOnly) {
 						continue outer;
 					}
 				}
 			}
-	
-			if(matches == classes.length){
-				if(	(classMatchType == dojo.html.classMatchType.IsOnly)&&
-					(matches == nodeClasses.length)){
+			if (matches == classes.length) {
+				if ((classMatchType == dojo.html.classMatchType.IsOnly) && (matches == nodeClasses.length)) {
 					nodes.push(node);
-				}else if(classMatchType == dojo.html.classMatchType.ContainsAll){
-					nodes.push(node);
+				} else {
+					if (classMatchType == dojo.html.classMatchType.ContainsAll) {
+						nodes.push(node);
+					}
 				}
 			}
 		}
-		return nodes;	//	NodeList
+		return nodes;
 	}
-}
+};
 dojo.html.getElementsByClassName = dojo.html.getElementsByClass;
-
-dojo.html.toCamelCase = function(/* string */selector){
-	//	summary
-	//	Translates a CSS selector string to a camel-cased one.
-	var arr = selector.split('-'), cc = arr[0];
-	for(var i = 1; i < arr.length; i++) {
+dojo.html.toCamelCase = function (selector) {
+	var arr = selector.split("-"), cc = arr[0];
+	for (var i = 1; i < arr.length; i++) {
 		cc += arr[i].charAt(0).toUpperCase() + arr[i].substring(1);
 	}
-	return cc;	//	string
-}
-
-dojo.html.toSelectorCase = function(/* string */selector){
-	//	summary
-	//	Translates a camel cased string to a selector cased one.
-	return selector.replace(/([A-Z])/g, "-$1" ).toLowerCase();	//	string
-}
-
-dojo.html.getComputedStyle = function(/* HTMLElement */node, /* string */cssSelector, /* integer? */inValue){
-	//	summary
-	//	Returns the computed style of cssSelector on node.
-	node = dojo.byId(node);
-	// cssSelector may actually be in camel case, so force selector version
-	var cssSelector = dojo.html.toSelectorCase(cssSelector);
-	var property = dojo.html.toCamelCase(cssSelector);
-	if(!node || !node.style){
-		return inValue;			
-	} else if (document.defaultView && dojo.html.isDescendantOf(node, node.ownerDocument)){ // W3, gecko, KHTML
-		try{
-			// mozilla segfaults when margin-* and node is removed from doc
-			// FIXME: need to figure out a if there is quicker workaround
-			var cs = document.defaultView.getComputedStyle(node, "");
-			if(cs){
-				return cs.getPropertyValue(cssSelector);	//	integer
-			} 
-		}catch(e){ // reports are that Safari can throw an exception above
-			if(node.style.getPropertyValue){ // W3
-				return node.style.getPropertyValue(cssSelector);	//	integer
-			} else {
-				return inValue;	//	integer
-			}
+	return cc;
+};
+dojo.html.toSelectorCase = function (selector) {
+	return selector.replace(/([A-Z])/g, "-$1").toLowerCase();
+};
+if (dojo.render.html.ie) {
+	dojo.html.getComputedStyle = function (node, property, value) {
+		node = dojo.byId(node);
+		if (!node || !node.style) {
+			return value;
 		}
-	} else if(node.currentStyle){ // IE
-		return node.currentStyle[property];	//	integer
-	}
-	
-	if(node.style.getPropertyValue){ // W3
-		return node.style.getPropertyValue(cssSelector);	//	integer
-	}else{
-		return inValue;	//	integer
-	}
+		return node.currentStyle[dojo.html.toCamelCase(property)];
+	};
+	dojo.html.getComputedStyles = function (node) {
+		return node.currentStyle;
+	};
+} else {
+	dojo.html.getComputedStyle = function (node, property, value) {
+		node = dojo.byId(node);
+		if (!node || !node.style) {
+			return value;
+		}
+		var s = document.defaultView.getComputedStyle(node, null);
+		return (s && s[dojo.html.toCamelCase(property)]) || "";
+	};
+	dojo.html.getComputedStyles = function (node) {
+		return document.defaultView.getComputedStyle(node, null);
+	};
 }
-
-dojo.html.getStyleProperty = function(/* HTMLElement */node, /* string */cssSelector){
-	//	summary
-	//	Returns the value of the passed style
+dojo.html.getStyleProperty = function (node, cssSelector) {
 	node = dojo.byId(node);
-	return (node && node.style ? node.style[dojo.html.toCamelCase(cssSelector)] : undefined);	//	string
-}
-
-dojo.html.getStyle = function(/* HTMLElement */node, /* string */cssSelector){
-	//	summary
-	//	Returns the computed value of the passed style
+	return (node && node.style ? node.style[dojo.html.toCamelCase(cssSelector)] : undefined);
+};
+dojo.html.getStyle = function (node, cssSelector) {
 	var value = dojo.html.getStyleProperty(node, cssSelector);
-	return (value ? value : dojo.html.getComputedStyle(node, cssSelector));	//	string || integer
-}
-
-dojo.html.setStyle = function(/* HTMLElement */node, /* string */cssSelector, /* string */value){
-	//	summary
-	//	Set the value of passed style on node
+	return (value ? value : dojo.html.getComputedStyle(node, cssSelector));
+};
+dojo.html.setStyle = function (node, cssSelector, value) {
 	node = dojo.byId(node);
-	if(node && node.style){
+	if (node && node.style) {
 		var camelCased = dojo.html.toCamelCase(cssSelector);
 		node.style[camelCased] = value;
 	}
-}
-
-dojo.html.setStyleText = function (/* HTMLElement */target, /* string */text) {
-	//	summary
-	//	Try to set the entire cssText property of the passed target; equiv of setting style attribute.
+};
+dojo.html.setStyleText = function (target, text) {
 	try {
-	 	target.style.cssText = text;
-	} catch (e) {
+		target.style.cssText = text;
+	}
+	catch (e) {
 		target.setAttribute("style", text);
 	}
-}
-
-dojo.html.copyStyle = function(/* HTMLElement */target, /* HTMLElement */source){
-	//	summary
-	// work around for opera which doesn't have cssText, and for IE which fails on setAttribute 
-	if(!source.style.cssText){ 
-		target.setAttribute("style", source.getAttribute("style")); 
-	}else{
-		target.style.cssText = source.style.cssText; 
+};
+dojo.html.copyStyle = function (target, source) {
+	if (!source.style.cssText) {
+		target.setAttribute("style", source.getAttribute("style"));
+	} else {
+		target.style.cssText = source.style.cssText;
 	}
 	dojo.html.addClass(target, dojo.html.getClass(source));
-}
-
-dojo.html.getUnitValue = function(/* HTMLElement */node, /* string */cssSelector, /* boolean? */autoIsZero){
-	//	summary
-	//	Get the value of passed selector, with the specific units used
+};
+dojo.html.getUnitValue = function (node, cssSelector, autoIsZero) {
 	var s = dojo.html.getComputedStyle(node, cssSelector);
-	if((!s)||((s == 'auto')&&(autoIsZero))){ 
-		return { value: 0, units: 'px' };	//	object 
+	if ((!s) || ((s == "auto") && (autoIsZero))) {
+		return {value:0, units:"px"};
 	}
-	// FIXME: is regex inefficient vs. parseInt or some manual test? 
 	var match = s.match(/(\-?[\d.]+)([a-z%]*)/i);
-	if (!match){return dojo.html.getUnitValue.bad;}
-	return { value: Number(match[1]), units: match[2].toLowerCase() };	//	object
-}
-dojo.html.getUnitValue.bad = { value: NaN, units: '' };
-
-dojo.html.getPixelValue = function(/* HTMLElement */node, /* string */cssSelector, /* boolean? */autoIsZero){
-	//	summary
-	//	Get the value of passed selector in pixels.
-	var result = dojo.html.getUnitValue(node, cssSelector, autoIsZero);
-	// FIXME: there is serious debate as to whether or not this is the right solution
-	if(isNaN(result.value)){ 
-		return 0; //	integer 
-	}	
-	// FIXME: code exists for converting other units to px (see Dean Edward's IE7) 
-	// but there are cross-browser complexities
-	if((result.value)&&(result.units != 'px')){ 
-		return NaN;	//	integer 
+	if (!match) {
+		return dojo.html.getUnitValue.bad;
 	}
-	return result.value;	//	integer
+	return {value:Number(match[1]), units:match[2].toLowerCase()};
+};
+dojo.html.getUnitValue.bad = {value:NaN, units:""};
+if (dojo.render.html.ie) {
+	dojo.html.toPixelValue = function (element, styleValue) {
+		if (!styleValue) {
+			return 0;
+		}
+		if (styleValue.slice(-2) == "px") {
+			return parseFloat(styleValue);
+		}
+		var pixelValue = 0;
+		with (element) {
+			var sLeft = style.left;
+			var rsLeft = runtimeStyle.left;
+			runtimeStyle.left = currentStyle.left;
+			try {
+				style.left = styleValue || 0;
+				pixelValue = style.pixelLeft;
+				style.left = sLeft;
+				runtimeStyle.left = rsLeft;
+			}
+			catch (e) {
+			}
+		}
+		return pixelValue;
+	};
+} else {
+	dojo.html.toPixelValue = function (element, styleValue) {
+		return (styleValue && (styleValue.slice(-2) == "px") ? parseFloat(styleValue) : 0);
+	};
 }
-
-dojo.html.setPositivePixelValue = function(/* HTMLElement */node, /* string */selector, /* integer */value){
-	//	summary
-	//	Attempt to set the value of selector on node as a positive pixel value.
-	if(isNaN(value)){return false;}
-	node.style[selector] = Math.max(0, value) + 'px'; 
-	return true;	//	boolean
-}
-
+dojo.html.getPixelValue = function (node, styleProperty, autoIsZero) {
+	return dojo.html.toPixelValue(node, dojo.html.getComputedStyle(node, styleProperty));
+};
+dojo.html.setPositivePixelValue = function (node, selector, value) {
+	if (isNaN(value)) {
+		return false;
+	}
+	node.style[selector] = Math.max(0, value) + "px";
+	return true;
+};
 dojo.html.styleSheet = null;
-
-// FIXME: this is a really basic stub for adding and removing cssRules, but
-// it assumes that you know the index of the cssRule that you want to add 
-// or remove, making it less than useful.  So we need something that can 
-// search for the selector that you you want to remove.
-dojo.html.insertCssRule = function(/* string */selector, /* string */declaration, /* integer? */index) {
-	//	summary
-	//	Attempt to insert declaration as selector on the internal stylesheet; if index try to set it there.
+dojo.html.insertCssRule = function (selector, declaration, index) {
 	if (!dojo.html.styleSheet) {
-		if (document.createStyleSheet) { // IE
+		if (document.createStyleSheet) {
 			dojo.html.styleSheet = document.createStyleSheet();
-		} else if (document.styleSheets[0]) { // rest
-			// FIXME: should create a new style sheet here
-			// fall back on an exsiting style sheet
-			dojo.html.styleSheet = document.styleSheets[0];
-		} else { 
-			return null;	//	integer 
-		} // fail
+		} else {
+			if (document.styleSheets[0]) {
+				dojo.html.styleSheet = document.styleSheets[0];
+			} else {
+				return null;
+			}
+		}
 	}
-
-	if (arguments.length < 3) { // index may == 0
-		if (dojo.html.styleSheet.cssRules) { // W3
+	if (arguments.length < 3) {
+		if (dojo.html.styleSheet.cssRules) {
 			index = dojo.html.styleSheet.cssRules.length;
-		} else if (dojo.html.styleSheet.rules) { // IE
-			index = dojo.html.styleSheet.rules.length;
-		} else { 
-			return null;	//	integer 
-		} // fail
+		} else {
+			if (dojo.html.styleSheet.rules) {
+				index = dojo.html.styleSheet.rules.length;
+			} else {
+				return null;
+			}
+		}
 	}
-
-	if (dojo.html.styleSheet.insertRule) { // W3
+	if (dojo.html.styleSheet.insertRule) {
 		var rule = selector + " { " + declaration + " }";
-		return dojo.html.styleSheet.insertRule(rule, index);	//	integer
-	} else if (dojo.html.styleSheet.addRule) { // IE
-		return dojo.html.styleSheet.addRule(selector, declaration, index);	//	integer
-	} else { 
-		return null; // integer
-	} // fail
-}
-
-dojo.html.removeCssRule = function(/* integer? */index){
-	//	summary
-	//	Attempt to remove the rule at index.
-	if(!dojo.html.styleSheet){
+		return dojo.html.styleSheet.insertRule(rule, index);
+	} else {
+		if (dojo.html.styleSheet.addRule) {
+			return dojo.html.styleSheet.addRule(selector, declaration, index);
+		} else {
+			return null;
+		}
+	}
+};
+dojo.html.removeCssRule = function (index) {
+	if (!dojo.html.styleSheet) {
 		dojo.debug("no stylesheet defined for removing rules");
 		return false;
 	}
-	if(dojo.render.html.ie){
-		if(!index){
+	if (dojo.render.html.ie) {
+		if (!index) {
 			index = dojo.html.styleSheet.rules.length;
 			dojo.html.styleSheet.removeRule(index);
 		}
-	}else if(document.styleSheets[0]){
-		if(!index){
-			index = dojo.html.styleSheet.cssRules.length;
+	} else {
+		if (document.styleSheets[0]) {
+			if (!index) {
+				index = dojo.html.styleSheet.cssRules.length;
+			}
+			dojo.html.styleSheet.deleteRule(index);
 		}
-		dojo.html.styleSheet.deleteRule(index);
 	}
-	return true;	//	boolean
-}
-
-dojo.html._insertedCssFiles = []; // cache container needed because IE reformats cssText when added to DOM
-dojo.html.insertCssFile = function(/* string */URI, /* HTMLDocument? */doc, /* boolean? */checkDuplicates, /* boolean */fail_ok){
-	//	summary
-	// calls css by XmlHTTP and inserts it into DOM as <style [widgetType="widgetType"]> *downloaded cssText*</style>
-	if(!URI){ return; }
-	if(!doc){ doc = document; }
+	return true;
+};
+dojo.html._insertedCssFiles = [];
+dojo.html.insertCssFile = function (URI, doc, checkDuplicates, fail_ok) {
+	if (!URI) {
+		return;
+	}
+	if (!doc) {
+		doc = document;
+	}
 	var cssStr = dojo.hostenv.getText(URI, false, fail_ok);
-	if(cssStr===null){ return; }
+	if (cssStr === null) {
+		return;
+	}
 	cssStr = dojo.html.fixPathsInCssText(cssStr, URI);
-
-	if(checkDuplicates){
+	if (checkDuplicates) {
 		var idx = -1, node, ent = dojo.html._insertedCssFiles;
-		for(var i = 0; i < ent.length; i++){
-			if((ent[i].doc == doc) && (ent[i].cssText == cssStr)){
-				idx = i; node = ent[i].nodeRef;
+		for (var i = 0; i < ent.length; i++) {
+			if ((ent[i].doc == doc) && (ent[i].cssText == cssStr)) {
+				idx = i;
+				node = ent[i].nodeRef;
 				break;
 			}
 		}
-		// make sure we havent deleted our node
-		if(node){
+		if (node) {
 			var styles = doc.getElementsByTagName("style");
-			for(var i = 0; i < styles.length; i++){
-				if(styles[i] == node){
+			for (var i = 0; i < styles.length; i++) {
+				if (styles[i] == node) {
 					return;
 				}
 			}
-			// delete this entry
 			dojo.html._insertedCssFiles.shift(idx, 1);
 		}
 	}
-
 	var style = dojo.html.insertCssText(cssStr, doc);
-	dojo.html._insertedCssFiles.push({'doc': doc, 'cssText': cssStr, 'nodeRef': style});
-
-	// insert custom attribute ex dbgHref="../foo.css" usefull when debugging in DOM inspectors, no?
-	if(style && djConfig.isDebug){
+	dojo.html._insertedCssFiles.push({"doc":doc, "cssText":cssStr, "nodeRef":style});
+	if (style && djConfig.isDebug) {
 		style.setAttribute("dbgHref", URI);
 	}
-	return style;	//	HTMLStyleElement
-}
-
-dojo.html.insertCssText = function(/* string */cssStr, /* HTMLDocument? */doc, /* string? */URI){
-	//	summary
-	//	Attempt to insert CSS rules into the document through inserting a style element
-	// DomNode Style  = insertCssText(String ".dojoMenu {color: green;}"[, DomDoc document, dojo.uri.Uri Url ])
-	if(!cssStr){ 
-		return; //	HTMLStyleElement
+	return style;
+};
+dojo.html.insertCssText = function (cssStr, doc, URI) {
+	if (!cssStr) {
+		return;
 	}
-	if(!doc){ doc = document; }
-	if(URI){// fix paths in cssStr
+	if (!doc) {
+		doc = document;
+	}
+	if (URI) {
 		cssStr = dojo.html.fixPathsInCssText(cssStr, URI);
 	}
 	var style = doc.createElement("style");
 	style.setAttribute("type", "text/css");
-	// IE is b0rken enough to require that we add the element to the doc
-	// before changing it's properties
 	var head = doc.getElementsByTagName("head")[0];
-	if(!head){ // must have a head tag 
+	if (!head) {
 		dojo.debug("No head tag in document, aborting styles");
-		return;	//	HTMLStyleElement
-	}else{
+		return;
+	} else {
 		head.appendChild(style);
 	}
-	if(style.styleSheet){// IE
-		var setFunc = function(){ 
-			try{
+	if (style.styleSheet) {
+		var setFunc = function () {
+			try {
 				style.styleSheet.cssText = cssStr;
-			}catch(e){ dojo.debug(e); }
+			}
+			catch (e) {
+				dojo.debug(e);
+			}
 		};
-		if(style.styleSheet.disabled){
+		if (style.styleSheet.disabled) {
 			setTimeout(setFunc, 10);
-		}else{
+		} else {
 			setFunc();
 		}
-	}else{ // w3c
+	} else {
 		var cssText = doc.createTextNode(cssStr);
 		style.appendChild(cssText);
 	}
-	return style;	//	HTMLStyleElement
-}
-
-dojo.html.fixPathsInCssText = function(/* string */cssStr, /* string */URI){
-	//	summary
-	// usage: cssText comes from dojoroot/src/widget/templates/Foobar.css
-	// 	it has .dojoFoo { background-image: url(images/bar.png);} then uri should point to dojoroot/src/widget/templates/
-	if(!cssStr || !URI){ return; }
+	return style;
+};
+dojo.html.fixPathsInCssText = function (cssStr, URI) {
+	if (!cssStr || !URI) {
+		return;
+	}
 	var match, str = "", url = "", urlChrs = "[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
-	var regex = new RegExp('url\\(\\s*('+urlChrs+')\\s*\\)');
+	var regex = new RegExp("url\\(\\s*(" + urlChrs + ")\\s*\\)");
 	var regexProtocol = /(file|https?|ftps?):\/\//;
-	regexTrim = new RegExp("^[\\s]*(['\"]?)("+urlChrs+")\\1[\\s]*?$");
-	if(dojo.render.html.ie55 || dojo.render.html.ie60){
-		var regexIe = new RegExp("AlphaImageLoader\\((.*)src\=['\"]("+urlChrs+")['\"]");
-		// TODO: need to decide how to handle relative paths and AlphaImageLoader see #1441
-		// current implementation breaks on build with intern_strings
-		while(match = regexIe.exec(cssStr)){
+	regexTrim = new RegExp("^[\\s]*(['\"]?)(" + urlChrs + ")\\1[\\s]*?$");
+	if (dojo.render.html.ie55 || dojo.render.html.ie60) {
+		var regexIe = new RegExp("AlphaImageLoader\\((.*)src=['\"](" + urlChrs + ")['\"]");
+		while (match = regexIe.exec(cssStr)) {
 			url = match[2].replace(regexTrim, "$2");
-			if(!regexProtocol.exec(url)){
+			if (!regexProtocol.exec(url)) {
 				url = (new dojo.uri.Uri(URI, url).toString());
 			}
 			str += cssStr.substring(0, match.index) + "AlphaImageLoader(" + match[1] + "src='" + url + "'";
@@ -14601,85 +10039,56 @@
 		cssStr = str + cssStr;
 		str = "";
 	}
-
-	while(match = regex.exec(cssStr)){
+	while (match = regex.exec(cssStr)) {
 		url = match[1].replace(regexTrim, "$2");
-		if(!regexProtocol.exec(url)){
+		if (!regexProtocol.exec(url)) {
 			url = (new dojo.uri.Uri(URI, url).toString());
 		}
 		str += cssStr.substring(0, match.index) + "url(" + url + ")";
 		cssStr = cssStr.substr(match.index + match[0].length);
 	}
-	return str + cssStr;	//	string
-}
-
-dojo.html.setActiveStyleSheet = function(/* string */title){
-	//	summary
-	//	Activate style sheet with specified title.
+	return str + cssStr;
+};
+dojo.html.setActiveStyleSheet = function (title) {
 	var i = 0, a, els = dojo.doc().getElementsByTagName("link");
 	while (a = els[i++]) {
-		if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")){
+		if (a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
 			a.disabled = true;
-			if (a.getAttribute("title") == title) { a.disabled = false; }
+			if (a.getAttribute("title") == title) {
+				a.disabled = false;
+			}
 		}
 	}
-}
-
-dojo.html.getActiveStyleSheet = function(){
-	//	summary
-	//	return the title of the currently active stylesheet
+};
+dojo.html.getActiveStyleSheet = function () {
 	var i = 0, a, els = dojo.doc().getElementsByTagName("link");
 	while (a = els[i++]) {
-		if (a.getAttribute("rel").indexOf("style") != -1 
-			&& a.getAttribute("title") 
-			&& !a.disabled
-		){
-			return a.getAttribute("title");	//	string 
+		if (a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) {
+			return a.getAttribute("title");
 		}
 	}
-	return null;	//	string
-}
-
-dojo.html.getPreferredStyleSheet = function(){
-	//	summary
-	//	Return the preferred stylesheet title (i.e. link without alt attribute)
+	return null;
+};
+dojo.html.getPreferredStyleSheet = function () {
 	var i = 0, a, els = dojo.doc().getElementsByTagName("link");
 	while (a = els[i++]) {
-		if(a.getAttribute("rel").indexOf("style") != -1
-			&& a.getAttribute("rel").indexOf("alt") == -1
-			&& a.getAttribute("title")
-		){ 
-			return a.getAttribute("title"); 	//	string
+		if (a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("rel").indexOf("alt") == -1 && a.getAttribute("title")) {
+			return a.getAttribute("title");
 		}
 	}
-	return null;	//	string
-}
-
-dojo.html.applyBrowserClass = function(/* HTMLElement */node){
-	//	summary
-	//	Applies pre-set class names based on browser & version to the passed node.
-	//	Modified version of Morris' CSS hack.
-	var drh=dojo.render.html;
-	var classes = {
-		dj_ie: drh.ie,
-		dj_ie55: drh.ie55,
-		dj_ie6: drh.ie60,
-		dj_ie7: drh.ie70,
-		dj_iequirks: drh.ie && drh.quirks,
-		dj_opera: drh.opera,
-		dj_opera8: drh.opera && (Math.floor(dojo.render.version)==8),
-		dj_opera9: drh.opera && (Math.floor(dojo.render.version)==9),
-		dj_khtml: drh.khtml,
-		dj_safari: drh.safari,
-		dj_gecko: drh.mozilla
-	}; // no dojo unsupported browsers
-	for(var p in classes){
-		if(classes[p]){
+	return null;
+};
+dojo.html.applyBrowserClass = function (node) {
+	var drh = dojo.render.html;
+	var classes = {dj_ie:drh.ie, dj_ie55:drh.ie55, dj_ie6:drh.ie60, dj_ie7:drh.ie70, dj_iequirks:drh.ie && drh.quirks, dj_opera:drh.opera, dj_opera8:drh.opera && (Math.floor(dojo.render.version) == 8), dj_opera9:drh.opera && (Math.floor(dojo.render.version) == 9), dj_khtml:drh.khtml, dj_safari:drh.safari, dj_gecko:drh.mozilla};
+	for (var p in classes) {
+		if (classes[p]) {
 			dojo.html.addClass(node, p);
 		}
 	}
 };
 
+
 __CPAN_FILE__ src/html/color.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -14693,30 +10102,31 @@
 
 dojo.require("dojo.html.style");
 dojo.provide("dojo.html.color");
-
 dojo.require("dojo.gfx.color");
 dojo.require("dojo.lang.common");
-
-dojo.html.getBackgroundColor = function(/* HTMLElement */node){
-	//	summary
-	//	returns the background color of the passed node as a 32-bit color (RGBA)
+dojo.html.getBackgroundColor = function (node) {
 	node = dojo.byId(node);
 	var color;
-	do{
+	do {
 		color = dojo.html.getStyle(node, "background-color");
-		// Safari doesn't say "transparent"
-		if(color.toLowerCase() == "rgba(0, 0, 0, 0)") { color = "transparent"; }
-		if(node == document.getElementsByTagName("body")[0]) { node = null; break; }
+		if (color.toLowerCase() == "rgba(0, 0, 0, 0)") {
+			color = "transparent";
+		}
+		if (node == document.getElementsByTagName("body")[0]) {
+			node = null;
+			break;
+		}
 		node = node.parentNode;
-	}while(node && dojo.lang.inArray(["transparent", ""], color));
-	if(color == "transparent"){
+	} while (node && dojo.lang.inArray(["transparent", ""], color));
+	if (color == "transparent") {
 		color = [255, 255, 255, 0];
-	}else{
+	} else {
 		color = dojo.gfx.color.extractRGB(color);
 	}
-	return color;	//	array
-}
+	return color;
+};
 
+
 __CPAN_FILE__ src/html/layout.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -14729,483 +10139,382 @@
 */
 
 dojo.provide("dojo.html.layout");
-
 dojo.require("dojo.html.common");
 dojo.require("dojo.html.style");
 dojo.require("dojo.html.display");
-
-dojo.html.sumAncestorProperties = function(/* HTMLElement */node, /* string */prop){
-	//	summary
-	//	Returns the sum of the passed property on all ancestors of node.
+dojo.html.sumAncestorProperties = function (node, prop) {
 	node = dojo.byId(node);
-	if(!node){ return 0; } // FIXME: throw an error?
-	
+	if (!node) {
+		return 0;
+	}
 	var retVal = 0;
-	while(node){
-		if(dojo.html.getComputedStyle(node, 'position') == 'fixed'){
+	while (node) {
+		if (dojo.html.getComputedStyle(node, "position") == "fixed") {
 			return 0;
 		}
 		var val = node[prop];
-		if(val){
+		if (val) {
 			retVal += val - 0;
-			if(node==dojo.body()){ break; }// opera and khtml #body & #html has the same values, we only need one value
+			if (node == dojo.body()) {
+				break;
+			}
 		}
 		node = node.parentNode;
 	}
-	return retVal;	//	integer
-}
-
-dojo.html.setStyleAttributes = function(/* HTMLElement */node, /* string */attributes) { 
-	//	summary
-	//	allows a dev to pass a string similar to what you'd pass in style="", and apply it to a node.
+	return retVal;
+};
+dojo.html.setStyleAttributes = function (node, attributes) {
 	node = dojo.byId(node);
-	var splittedAttribs=attributes.replace(/(;)?\s*$/, "").split(";"); 
-	for(var i=0; i<splittedAttribs.length; i++){ 
-		var nameValue=splittedAttribs[i].split(":"); 
-		var name=nameValue[0].replace(/\s*$/, "").replace(/^\s*/, "").toLowerCase();
-		var value=nameValue[1].replace(/\s*$/, "").replace(/^\s*/, "");
-		switch(name){
-			case "opacity":
-				dojo.html.setOpacity(node, value); 
-				break; 
-			case "content-height":
-				dojo.html.setContentBox(node, {height: value}); 
-				break; 
-			case "content-width":
-				dojo.html.setContentBox(node, {width: value}); 
-				break; 
-			case "outer-height":
-				dojo.html.setMarginBox(node, {height: value}); 
-				break; 
-			case "outer-width":
-				dojo.html.setMarginBox(node, {width: value}); 
-				break; 
-			default:
-				node.style[dojo.html.toCamelCase(name)]=value; 
+	var splittedAttribs = attributes.replace(/(;)?\s*$/, "").split(";");
+	for (var i = 0; i < splittedAttribs.length; i++) {
+		var nameValue = splittedAttribs[i].split(":");
+		var name = nameValue[0].replace(/\s*$/, "").replace(/^\s*/, "").toLowerCase();
+		var value = nameValue[1].replace(/\s*$/, "").replace(/^\s*/, "");
+		switch (name) {
+		  case "opacity":
+			dojo.html.setOpacity(node, value);
+			break;
+		  case "content-height":
+			dojo.html.setContentBox(node, {height:value});
+			break;
+		  case "content-width":
+			dojo.html.setContentBox(node, {width:value});
+			break;
+		  case "outer-height":
+			dojo.html.setMarginBox(node, {height:value});
+			break;
+		  case "outer-width":
+			dojo.html.setMarginBox(node, {width:value});
+			break;
+		  default:
+			node.style[dojo.html.toCamelCase(name)] = value;
 		}
-	} 
-}
-
-dojo.html.boxSizing = {
-	MARGIN_BOX: "margin-box",
-	BORDER_BOX: "border-box",
-	PADDING_BOX: "padding-box",
-	CONTENT_BOX: "content-box"
+	}
 };
-
-dojo.html.getAbsolutePosition = dojo.html.abs = function(/* HTMLElement */node, /* boolean? */includeScroll, /* string? */boxType){
-	//	summary
-	//	Gets the absolute position of the passed element based on the document itself.
+dojo.html.boxSizing = {MARGIN_BOX:"margin-box", BORDER_BOX:"border-box", PADDING_BOX:"padding-box", CONTENT_BOX:"content-box"};
+dojo.html.getAbsolutePosition = dojo.html.abs = function (node, includeScroll, boxType) {
 	node = dojo.byId(node, node.ownerDocument);
-	var ret = {
-		x: 0,
-		y: 0
-	};
-
+	var ret = {x:0, y:0};
 	var bs = dojo.html.boxSizing;
-	if(!boxType) { boxType = bs.CONTENT_BOX; }
-	var nativeBoxType = 2; //BORDER box
+	if (!boxType) {
+		boxType = bs.CONTENT_BOX;
+	}
+	var nativeBoxType = 2;
 	var targetBoxType;
-	switch(boxType){
-		case bs.MARGIN_BOX:
-			targetBoxType = 3;
-			break;
-		case bs.BORDER_BOX:
-			targetBoxType = 2;
-			break;
-		case bs.PADDING_BOX:
-		default:
-			targetBoxType = 1;
-			break;
-		case bs.CONTENT_BOX:
-			targetBoxType = 0;
-			break;
+	switch (boxType) {
+	  case bs.MARGIN_BOX:
+		targetBoxType = 3;
+		break;
+	  case bs.BORDER_BOX:
+		targetBoxType = 2;
+		break;
+	  case bs.PADDING_BOX:
+	  default:
+		targetBoxType = 1;
+		break;
+	  case bs.CONTENT_BOX:
+		targetBoxType = 0;
+		break;
 	}
-
 	var h = dojo.render.html;
-	var db = document["body"]||document["documentElement"];
-
-	if(h.ie){
-		with(node.getBoundingClientRect()){
-			ret.x = left-2;
-			ret.y = top-2;
+	var db = document["body"] || document["documentElement"];
+	if (h.ie) {
+		with (node.getBoundingClientRect()) {
+			ret.x = left - 2;
+			ret.y = top - 2;
 		}
-	}else if(document.getBoxObjectFor){
-		// mozilla
-		nativeBoxType = 1; //getBoxObjectFor return padding box coordinate
-		try{
-			var bo = document.getBoxObjectFor(node);
-			ret.x = bo.x - dojo.html.sumAncestorProperties(node, "scrollLeft");
-			ret.y = bo.y - dojo.html.sumAncestorProperties(node, "scrollTop");
-		}catch(e){
-			// squelch
-		}
-	}else{
-		if(node["offsetParent"]){
-			var endNode;
-			// in Safari, if the node is an absolutely positioned child of
-			// the body and the body has a margin the offset of the child
-			// and the body contain the body's margins, so we need to end
-			// at the body
-			if(	(h.safari)&&
-				(node.style.getPropertyValue("position") == "absolute")&&
-				(node.parentNode == db)){
-				endNode = db;
-			}else{
-				endNode = db.parentNode;
+	} else {
+		if (document.getBoxObjectFor) {
+			nativeBoxType = 1;
+			try {
+				var bo = document.getBoxObjectFor(node);
+				ret.x = bo.x - dojo.html.sumAncestorProperties(node, "scrollLeft");
+				ret.y = bo.y - dojo.html.sumAncestorProperties(node, "scrollTop");
 			}
-
-			//TODO: set correct nativeBoxType for safari/konqueror
-
-			if(node.parentNode != db){
-				var nd = node;
-				if(dojo.render.html.opera){ nd = db; }
-				ret.x -= dojo.html.sumAncestorProperties(nd, "scrollLeft");
-				ret.y -= dojo.html.sumAncestorProperties(nd, "scrollTop");
+			catch (e) {
 			}
-			var curnode = node;
-			do{
-				var n = curnode["offsetLeft"];
-				//FIXME: ugly hack to workaround the submenu in 
-				//popupmenu2 does not shown up correctly in opera. 
-				//Someone have a better workaround?
-				if(!h.opera || n>0){
-					ret.x += isNaN(n) ? 0 : n;
+		} else {
+			if (node["offsetParent"]) {
+				var endNode;
+				if ((h.safari) && (node.style.getPropertyValue("position") == "absolute") && (node.parentNode == db)) {
+					endNode = db;
+				} else {
+					endNode = db.parentNode;
 				}
-				var m = curnode["offsetTop"];
-				ret.y += isNaN(m) ? 0 : m;
-				curnode = curnode.offsetParent;
-			}while((curnode != endNode)&&(curnode != null));
-		}else if(node["x"]&&node["y"]){
-			ret.x += isNaN(node.x) ? 0 : node.x;
-			ret.y += isNaN(node.y) ? 0 : node.y;
+				if (node.parentNode != db) {
+					var nd = node;
+					if (dojo.render.html.opera) {
+						nd = db;
+					}
+					ret.x -= dojo.html.sumAncestorProperties(nd, "scrollLeft");
+					ret.y -= dojo.html.sumAncestorProperties(nd, "scrollTop");
+				}
+				var curnode = node;
+				do {
+					var n = curnode["offsetLeft"];
+					if (!h.opera || n > 0) {
+						ret.x += isNaN(n) ? 0 : n;
+					}
+					var m = curnode["offsetTop"];
+					ret.y += isNaN(m) ? 0 : m;
+					curnode = curnode.offsetParent;
+				} while ((curnode != endNode) && (curnode != null));
+			} else {
+				if (node["x"] && node["y"]) {
+					ret.x += isNaN(node.x) ? 0 : node.x;
+					ret.y += isNaN(node.y) ? 0 : node.y;
+				}
+			}
 		}
 	}
-
-	// account for document scrolling!
-	if(includeScroll){
+	if (includeScroll) {
 		var scroll = dojo.html.getScroll();
 		ret.y += scroll.top;
 		ret.x += scroll.left;
 	}
-
-	var extentFuncArray=[dojo.html.getPaddingExtent, dojo.html.getBorderExtent, dojo.html.getMarginExtent];
-	if(nativeBoxType > targetBoxType){
-		for(var i=targetBoxType;i<nativeBoxType;++i){
-			ret.y += extentFuncArray[i](node, 'top');
-			ret.x += extentFuncArray[i](node, 'left');
+	var extentFuncArray = [dojo.html.getPaddingExtent, dojo.html.getBorderExtent, dojo.html.getMarginExtent];
+	if (nativeBoxType > targetBoxType) {
+		for (var i = targetBoxType; i < nativeBoxType; ++i) {
+			ret.y += extentFuncArray[i](node, "top");
+			ret.x += extentFuncArray[i](node, "left");
 		}
-	}else if(nativeBoxType < targetBoxType){
-		for(var i=targetBoxType;i>nativeBoxType;--i){
-			ret.y -= extentFuncArray[i-1](node, 'top');
-			ret.x -= extentFuncArray[i-1](node, 'left');
+	} else {
+		if (nativeBoxType < targetBoxType) {
+			for (var i = targetBoxType; i > nativeBoxType; --i) {
+				ret.y -= extentFuncArray[i - 1](node, "top");
+				ret.x -= extentFuncArray[i - 1](node, "left");
+			}
 		}
 	}
 	ret.top = ret.y;
 	ret.left = ret.x;
-	return ret;	//	object
-}
-
-dojo.html.isPositionAbsolute = function(/* HTMLElement */node){
-	//	summary
-	//	Returns true if the element is absolutely positioned.
-	return (dojo.html.getComputedStyle(node, 'position') == 'absolute');	//	boolean
-}
-
-dojo.html._sumPixelValues = function(/* HTMLElement */node, selectors, autoIsZero){
+	return ret;
+};
+dojo.html.isPositionAbsolute = function (node) {
+	return (dojo.html.getComputedStyle(node, "position") == "absolute");
+};
+dojo.html._sumPixelValues = function (node, selectors, autoIsZero) {
 	var total = 0;
-	for(var x=0; x<selectors.length; x++){
+	for (var x = 0; x < selectors.length; x++) {
 		total += dojo.html.getPixelValue(node, selectors[x], autoIsZero);
 	}
 	return total;
-}
-
-dojo.html.getMargin = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the width and height of the passed node's margin
-	return {
-		width: dojo.html._sumPixelValues(node, ["margin-left", "margin-right"], (dojo.html.getComputedStyle(node, 'position') == 'absolute')),
-		height: dojo.html._sumPixelValues(node, ["margin-top", "margin-bottom"], (dojo.html.getComputedStyle(node, 'position') == 'absolute'))
-	};	//	object
-}
-
-dojo.html.getBorder = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the width and height of the passed node's border
-	return {
-		width: dojo.html.getBorderExtent(node, 'left') + dojo.html.getBorderExtent(node, 'right'),
-		height: dojo.html.getBorderExtent(node, 'top') + dojo.html.getBorderExtent(node, 'bottom')
-	};	//	object
-}
-
-dojo.html.getBorderExtent = function(/* HTMLElement */node, /* string */side){
-	//	summary
-	//	returns the width of the requested border
-	return (dojo.html.getStyle(node, 'border-' + side + '-style') == 'none' ? 0 : dojo.html.getPixelValue(node, 'border-' + side + '-width'));	// integer
-}
-
-dojo.html.getMarginExtent = function(/* HTMLElement */node, /* string */side){
-	//	summary
-	//	returns the width of the requested margin
-	return dojo.html._sumPixelValues(node, ["margin-" + side], dojo.html.isPositionAbsolute(node));	//	integer
-}
-
-dojo.html.getPaddingExtent = function(/* HTMLElement */node, /* string */side){
-	//	summary
-	//	Returns the width of the requested padding 
-	return dojo.html._sumPixelValues(node, ["padding-" + side], true);	//	integer
-}
-
-dojo.html.getPadding = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the width and height of the passed node's padding
-	return {
-		width: dojo.html._sumPixelValues(node, ["padding-left", "padding-right"], true),
-		height: dojo.html._sumPixelValues(node, ["padding-top", "padding-bottom"], true)
-	};	//	object
-}
-
-dojo.html.getPadBorder = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the width and height of the passed node's padding and border
+};
+dojo.html.getMargin = function (node) {
+	return {width:dojo.html._sumPixelValues(node, ["margin-left", "margin-right"], (dojo.html.getComputedStyle(node, "position") == "absolute")), height:dojo.html._sumPixelValues(node, ["margin-top", "margin-bottom"], (dojo.html.getComputedStyle(node, "position") == "absolute"))};
+};
+dojo.html.getBorder = function (node) {
+	return {width:dojo.html.getBorderExtent(node, "left") + dojo.html.getBorderExtent(node, "right"), height:dojo.html.getBorderExtent(node, "top") + dojo.html.getBorderExtent(node, "bottom")};
+};
+dojo.html.getBorderExtent = function (node, side) {
+	return (dojo.html.getStyle(node, "border-" + side + "-style") == "none" ? 0 : dojo.html.getPixelValue(node, "border-" + side + "-width"));
+};
+dojo.html.getMarginExtent = function (node, side) {
+	return dojo.html._sumPixelValues(node, ["margin-" + side], dojo.html.isPositionAbsolute(node));
+};
+dojo.html.getPaddingExtent = function (node, side) {
+	return dojo.html._sumPixelValues(node, ["padding-" + side], true);
+};
+dojo.html.getPadding = function (node) {
+	return {width:dojo.html._sumPixelValues(node, ["padding-left", "padding-right"], true), height:dojo.html._sumPixelValues(node, ["padding-top", "padding-bottom"], true)};
+};
+dojo.html.getPadBorder = function (node) {
 	var pad = dojo.html.getPadding(node);
 	var border = dojo.html.getBorder(node);
-	return { width: pad.width + border.width, height: pad.height + border.height };	//	object
-}
-
-dojo.html.getBoxSizing = function(/* HTMLElement */node){
-	//	summary
-	//	Returns which box model the passed element is working with
+	return {width:pad.width + border.width, height:pad.height + border.height};
+};
+dojo.html.getBoxSizing = function (node) {
 	var h = dojo.render.html;
 	var bs = dojo.html.boxSizing;
-	if(((h.ie)||(h.opera)) && node.nodeName!="IMG"){ 
+	if (((h.ie) || (h.opera)) && node.nodeName.toLowerCase() != "img") {
 		var cm = document["compatMode"];
-		if((cm == "BackCompat")||(cm == "QuirksMode")){
-			return bs.BORDER_BOX; 	//	string
-		}else{
-			return bs.CONTENT_BOX; 	//	string
+		if ((cm == "BackCompat") || (cm == "QuirksMode")) {
+			return bs.BORDER_BOX;
+		} else {
+			return bs.CONTENT_BOX;
 		}
-	}else{
-		if(arguments.length == 0){ node = document.documentElement; }
-		var sizing = dojo.html.getStyle(node, "-moz-box-sizing");
-		if(!sizing){ sizing = dojo.html.getStyle(node, "box-sizing"); }
-		return (sizing ? sizing : bs.CONTENT_BOX);	//	string
+	} else {
+		if (arguments.length == 0) {
+			node = document.documentElement;
+		}
+		var sizing;
+		if (!h.ie) {
+			sizing = dojo.html.getStyle(node, "-moz-box-sizing");
+			if (!sizing) {
+				sizing = dojo.html.getStyle(node, "box-sizing");
+			}
+		}
+		return (sizing ? sizing : bs.CONTENT_BOX);
 	}
-}
-
-dojo.html.isBorderBox = function(/* HTMLElement */node){
-	//	summary
-	//	returns whether the passed element is using border box sizing or not.
-	return (dojo.html.getBoxSizing(node) == dojo.html.boxSizing.BORDER_BOX);	//	boolean
-}
-
-dojo.html.getBorderBox = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the dimensions of the passed element based on border-box sizing.
+};
+dojo.html.isBorderBox = function (node) {
+	return (dojo.html.getBoxSizing(node) == dojo.html.boxSizing.BORDER_BOX);
+};
+dojo.html.getBorderBox = function (node) {
 	node = dojo.byId(node);
-	return { width: node.offsetWidth, height: node.offsetHeight };	//	object
-}
-
-dojo.html.getPaddingBox = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the dimensions of the padding box (see http://www.w3.org/TR/CSS21/box.html)
+	return {width:node.offsetWidth, height:node.offsetHeight};
+};
+dojo.html.getPaddingBox = function (node) {
 	var box = dojo.html.getBorderBox(node);
 	var border = dojo.html.getBorder(node);
-	return {
-		width: box.width - border.width,
-		height:box.height - border.height
-	};	//	object
-}
-
-dojo.html.getContentBox = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the dimensions of the content box (see http://www.w3.org/TR/CSS21/box.html)
+	return {width:box.width - border.width, height:box.height - border.height};
+};
+dojo.html.getContentBox = function (node) {
 	node = dojo.byId(node);
 	var padborder = dojo.html.getPadBorder(node);
-	return {
-		width: node.offsetWidth - padborder.width,
-		height: node.offsetHeight - padborder.height
-	};	//	object
-}
-
-dojo.html.setContentBox = function(/* HTMLElement */node, /* object */args){
-	//	summary
-	//	Sets the dimensions of the passed node according to content sizing.
+	return {width:node.offsetWidth - padborder.width, height:node.offsetHeight - padborder.height};
+};
+dojo.html.setContentBox = function (node, args) {
 	node = dojo.byId(node);
-	var width = 0; var height = 0;
+	var width = 0;
+	var height = 0;
 	var isbb = dojo.html.isBorderBox(node);
-	var padborder = (isbb ? dojo.html.getPadBorder(node) : { width: 0, height: 0});
+	var padborder = (isbb ? dojo.html.getPadBorder(node) : {width:0, height:0});
 	var ret = {};
-	if(typeof args.width != "undefined"){
+	if (typeof args.width != "undefined") {
 		width = args.width + padborder.width;
 		ret.width = dojo.html.setPositivePixelValue(node, "width", width);
 	}
-	if(typeof args.height != "undefined"){
+	if (typeof args.height != "undefined") {
 		height = args.height + padborder.height;
 		ret.height = dojo.html.setPositivePixelValue(node, "height", height);
 	}
-	return ret;	//	object
-}
-
-dojo.html.getMarginBox = function(/* HTMLElement */node){
-	//	summary
-	//	returns the dimensions of the passed node including any margins.
+	return ret;
+};
+dojo.html.getMarginBox = function (node) {
 	var borderbox = dojo.html.getBorderBox(node);
 	var margin = dojo.html.getMargin(node);
-	return { width: borderbox.width + margin.width, height: borderbox.height + margin.height };	//	object
-}
-
-dojo.html.setMarginBox = function(/* HTMLElement */node, /* object */args){
-	//	summary
-	//	Sets the dimensions of the passed node using margin box calcs.
+	return {width:borderbox.width + margin.width, height:borderbox.height + margin.height};
+};
+dojo.html.setMarginBox = function (node, args) {
 	node = dojo.byId(node);
-	var width = 0; var height = 0;
+	var width = 0;
+	var height = 0;
 	var isbb = dojo.html.isBorderBox(node);
-	var padborder = (!isbb ? dojo.html.getPadBorder(node) : { width: 0, height: 0 });
+	var padborder = (!isbb ? dojo.html.getPadBorder(node) : {width:0, height:0});
 	var margin = dojo.html.getMargin(node);
 	var ret = {};
-	if(typeof args.width != "undefined"){
+	if (typeof args.width != "undefined") {
 		width = args.width - padborder.width;
 		width -= margin.width;
 		ret.width = dojo.html.setPositivePixelValue(node, "width", width);
 	}
-	if(typeof args.height != "undefined"){
+	if (typeof args.height != "undefined") {
 		height = args.height - padborder.height;
 		height -= margin.height;
 		ret.height = dojo.html.setPositivePixelValue(node, "height", height);
 	}
-	return ret;	//	object
-}
-
-dojo.html.getElementBox = function(/* HTMLElement */node, /* string */type){
-	//	summary
-	//	return dimesions of a node based on the passed box model type.
+	return ret;
+};
+dojo.html.getElementBox = function (node, type) {
 	var bs = dojo.html.boxSizing;
-	switch(type){
-		case bs.MARGIN_BOX:
-			return dojo.html.getMarginBox(node);	//	object
-		case bs.BORDER_BOX:
-			return dojo.html.getBorderBox(node);	//	object
-		case bs.PADDING_BOX:
-			return dojo.html.getPaddingBox(node);	//	object
-		case bs.CONTENT_BOX:
-		default:
-			return dojo.html.getContentBox(node);	//	object
+	switch (type) {
+	  case bs.MARGIN_BOX:
+		return dojo.html.getMarginBox(node);
+	  case bs.BORDER_BOX:
+		return dojo.html.getBorderBox(node);
+	  case bs.PADDING_BOX:
+		return dojo.html.getPaddingBox(node);
+	  case bs.CONTENT_BOX:
+	  default:
+		return dojo.html.getContentBox(node);
 	}
-}
-// in: coordinate array [x,y,w,h] or dom node
-// return: coordinate object
-dojo.html.toCoordinateObject = dojo.html.toCoordinateArray = function(/* array */coords, /* boolean? */includeScroll, /* string? */boxtype) {
-	//	summary
-	//	Converts an array of coordinates into an object of named arguments.
-	if(coords instanceof Array || typeof coords == "array"){
+};
+dojo.html.toCoordinateObject = dojo.html.toCoordinateArray = function (coords, includeScroll, boxtype) {
+	if (coords instanceof Array || typeof coords == "array") {
 		dojo.deprecated("dojo.html.toCoordinateArray", "use dojo.html.toCoordinateObject({left: , top: , width: , height: }) instead", "0.5");
-		// coords is already an array (of format [x,y,w,h]), just return it
-		while ( coords.length < 4 ) { coords.push(0); }
-		while ( coords.length > 4 ) { coords.pop(); }
-		var ret = {
-			left: coords[0],
-			top: coords[1],
-			width: coords[2],
-			height: coords[3]
-		};
-	}else if(!coords.nodeType && !(coords instanceof String || typeof coords == "string") &&
-			 ('width' in coords || 'height' in coords || 'left' in coords ||
-			  'x' in coords || 'top' in coords || 'y' in coords)){
-		// coords is a coordinate object or at least part of one
-		var ret = {
-			left: coords.left||coords.x||0,
-			top: coords.top||coords.y||0,
-			width: coords.width||0,
-			height: coords.height||0
-		};
-	}else{
-		// coords is an dom object (or dom object id); return it's coordinates
-		var node = dojo.byId(coords);
-		var pos = dojo.html.abs(node, includeScroll, boxtype);
-		var marginbox = dojo.html.getMarginBox(node);
-		var ret = {
-			left: pos.left,
-			top: pos.top,
-			width: marginbox.width,
-			height: marginbox.height
-		};
+		while (coords.length < 4) {
+			coords.push(0);
+		}
+		while (coords.length > 4) {
+			coords.pop();
+		}
+		var ret = {left:coords[0], top:coords[1], width:coords[2], height:coords[3]};
+	} else {
+		if (!coords.nodeType && !(coords instanceof String || typeof coords == "string") && ("width" in coords || "height" in coords || "left" in coords || "x" in coords || "top" in coords || "y" in coords)) {
+			var ret = {left:coords.left || coords.x || 0, top:coords.top || coords.y || 0, width:coords.width || 0, height:coords.height || 0};
+		} else {
+			var node = dojo.byId(coords);
+			var pos = dojo.html.abs(node, includeScroll, boxtype);
+			var marginbox = dojo.html.getMarginBox(node);
+			var ret = {left:pos.left, top:pos.top, width:marginbox.width, height:marginbox.height};
+		}
 	}
 	ret.x = ret.left;
 	ret.y = ret.top;
-	return ret;	//	object
-}
-
-dojo.html.setMarginBoxWidth = dojo.html.setOuterWidth = function(node, width){
+	return ret;
+};
+dojo.html.setMarginBoxWidth = dojo.html.setOuterWidth = function (node, width) {
 	return dojo.html._callDeprecated("setMarginBoxWidth", "setMarginBox", arguments, "width");
-}
-dojo.html.setMarginBoxHeight = dojo.html.setOuterHeight = function(){
+};
+dojo.html.setMarginBoxHeight = dojo.html.setOuterHeight = function () {
 	return dojo.html._callDeprecated("setMarginBoxHeight", "setMarginBox", arguments, "height");
-}
-dojo.html.getMarginBoxWidth = dojo.html.getOuterWidth = function(){
+};
+dojo.html.getMarginBoxWidth = dojo.html.getOuterWidth = function () {
 	return dojo.html._callDeprecated("getMarginBoxWidth", "getMarginBox", arguments, null, "width");
-}
-dojo.html.getMarginBoxHeight = dojo.html.getOuterHeight = function(){
+};
+dojo.html.getMarginBoxHeight = dojo.html.getOuterHeight = function () {
 	return dojo.html._callDeprecated("getMarginBoxHeight", "getMarginBox", arguments, null, "height");
-}
-dojo.html.getTotalOffset = function(node, type, includeScroll){
+};
+dojo.html.getTotalOffset = function (node, type, includeScroll) {
 	return dojo.html._callDeprecated("getTotalOffset", "getAbsolutePosition", arguments, null, type);
-}
-dojo.html.getAbsoluteX = function(node, includeScroll){
+};
+dojo.html.getAbsoluteX = function (node, includeScroll) {
 	return dojo.html._callDeprecated("getAbsoluteX", "getAbsolutePosition", arguments, null, "x");
-}
-dojo.html.getAbsoluteY = function(node, includeScroll){
+};
+dojo.html.getAbsoluteY = function (node, includeScroll) {
 	return dojo.html._callDeprecated("getAbsoluteY", "getAbsolutePosition", arguments, null, "y");
-}
-dojo.html.totalOffsetLeft = function(node, includeScroll){
+};
+dojo.html.totalOffsetLeft = function (node, includeScroll) {
 	return dojo.html._callDeprecated("totalOffsetLeft", "getAbsolutePosition", arguments, null, "left");
-}
-dojo.html.totalOffsetTop = function(node, includeScroll){
+};
+dojo.html.totalOffsetTop = function (node, includeScroll) {
 	return dojo.html._callDeprecated("totalOffsetTop", "getAbsolutePosition", arguments, null, "top");
-}
-dojo.html.getMarginWidth = function(node){
+};
+dojo.html.getMarginWidth = function (node) {
 	return dojo.html._callDeprecated("getMarginWidth", "getMargin", arguments, null, "width");
-}
-dojo.html.getMarginHeight = function(node){
+};
+dojo.html.getMarginHeight = function (node) {
 	return dojo.html._callDeprecated("getMarginHeight", "getMargin", arguments, null, "height");
-}
-dojo.html.getBorderWidth = function(node){
+};
+dojo.html.getBorderWidth = function (node) {
 	return dojo.html._callDeprecated("getBorderWidth", "getBorder", arguments, null, "width");
-}
-dojo.html.getBorderHeight = function(node){
+};
+dojo.html.getBorderHeight = function (node) {
 	return dojo.html._callDeprecated("getBorderHeight", "getBorder", arguments, null, "height");
-}
-dojo.html.getPaddingWidth = function(node){
+};
+dojo.html.getPaddingWidth = function (node) {
 	return dojo.html._callDeprecated("getPaddingWidth", "getPadding", arguments, null, "width");
-}
-dojo.html.getPaddingHeight = function(node){
+};
+dojo.html.getPaddingHeight = function (node) {
 	return dojo.html._callDeprecated("getPaddingHeight", "getPadding", arguments, null, "height");
-}
-dojo.html.getPadBorderWidth = function(node){
+};
+dojo.html.getPadBorderWidth = function (node) {
 	return dojo.html._callDeprecated("getPadBorderWidth", "getPadBorder", arguments, null, "width");
-}
-dojo.html.getPadBorderHeight = function(node){
+};
+dojo.html.getPadBorderHeight = function (node) {
 	return dojo.html._callDeprecated("getPadBorderHeight", "getPadBorder", arguments, null, "height");
-}
-dojo.html.getBorderBoxWidth = dojo.html.getInnerWidth = function(){
+};
+dojo.html.getBorderBoxWidth = dojo.html.getInnerWidth = function () {
 	return dojo.html._callDeprecated("getBorderBoxWidth", "getBorderBox", arguments, null, "width");
-}
-dojo.html.getBorderBoxHeight = dojo.html.getInnerHeight = function(){
+};
+dojo.html.getBorderBoxHeight = dojo.html.getInnerHeight = function () {
 	return dojo.html._callDeprecated("getBorderBoxHeight", "getBorderBox", arguments, null, "height");
-}
-dojo.html.getContentBoxWidth = dojo.html.getContentWidth = function(){
+};
+dojo.html.getContentBoxWidth = dojo.html.getContentWidth = function () {
 	return dojo.html._callDeprecated("getContentBoxWidth", "getContentBox", arguments, null, "width");
-}
-dojo.html.getContentBoxHeight = dojo.html.getContentHeight = function(){
+};
+dojo.html.getContentBoxHeight = dojo.html.getContentHeight = function () {
 	return dojo.html._callDeprecated("getContentBoxHeight", "getContentBox", arguments, null, "height");
-}
-dojo.html.setContentBoxWidth = dojo.html.setContentWidth = function(node, width){
+};
+dojo.html.setContentBoxWidth = dojo.html.setContentWidth = function (node, width) {
 	return dojo.html._callDeprecated("setContentBoxWidth", "setContentBox", arguments, "width");
-}
-dojo.html.setContentBoxHeight = dojo.html.setContentHeight = function(node, height){
+};
+dojo.html.setContentBoxHeight = dojo.html.setContentHeight = function (node, height) {
 	return dojo.html._callDeprecated("setContentBoxHeight", "setContentBox", arguments, "height");
-}
+};
 
+
 __CPAN_FILE__ src/html/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -15217,12 +10526,10 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: [ "dojo.html.common",
-			  "dojo.html.style" ]
-});
+dojo.kwCompoundRequire({common:["dojo.html.common", "dojo.html.style"]});
 dojo.provide("dojo.html.*");
 
+
 __CPAN_FILE__ src/html/metrics.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -15234,263 +10541,210 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.html.metrics");
-dojo.require("dojo.html.layout");
-
-/*	dojo.html.metrics
- *	Methods to help determine font metrics, including things like
- *	how much of a string will fit inside a certain width, what size
- *	something might be if you were to place it in a certain node, etc.
- *
- *	Based partially on a submitted patch by Morris Johns, and work
- *	done with 13th Parallel and f( m ) (the 13th columns and the
- *	unreleased f( m ) layout manager.
- */
-
-//	derived from Morris John's scrollbar measurer.
-dojo.html.getScrollbar=function(){
-	//	summary
-	//	returns the width of a scrollbar.
-	
-	//	set up the test nodes.
-	var scroll = document.createElement("div");
-	scroll.style.width="100px";
-	scroll.style.height="100px";
-	scroll.style.overflow="scroll";
-	scroll.style.position="absolute";
-	scroll.style.top="-300px";
-	scroll.style.left="0px"
-	
-	var test = document.createElement("div");
-	test.style.width="400px";
-	test.style.height="400px";
-	scroll.appendChild(test);
-	dojo.body().appendChild(scroll);
-
-	var width=scroll.offsetWidth - scroll.clientWidth;
-
-	dojo.body().removeChild(scroll);
-	scroll.removeChild(test);
-	scroll=test=null;
-
-	//	we return an object because we may add additional info in the future.
-	return { width: width };	//	object
-};
-
-//	derived from Morris John's emResized measurer
-dojo.html.getFontMeasurements = function(){
-	//	summary
-	//	Returns an object that has pixel equivilents of standard font size values.
-	var heights = {
-		'1em':0, '1ex':0, '100%':0, '12pt':0, '16px':0, 'xx-small':0, 'x-small':0,
-		'small':0, 'medium':0, 'large':0, 'x-large':0, 'xx-large':0
-	};
-
-	if(dojo.render.html.ie){
-		//	we do a font-size fix if and only if one isn't applied already.
-		//	NOTE: If someone set the fontSize on the HTML Element, this will kill it.
-		document.documentElement.style.fontSize="100%";
-	}
-
-	//	set up the measuring node.
-	var div=document.createElement("div");
-	div.style.position="absolute";
-	div.style.left="-100px";
-	div.style.top="0";
-	div.style.width="30px";
-	div.style.height="1000em";
-	div.style.border="0";
-	div.style.margin="0";
-	div.style.padding="0";
-	div.style.outline="0";
-	div.style.lineHeight="1";
-	div.style.overflow="hidden";
-	dojo.body().appendChild(div);
-
-	//	do the measurements.
-	for(var p in heights){
-		div.style.fontSize = p;
-		heights[p] = Math.round(div.offsetHeight * 12/16) * 16/12 / 1000;
-	}
-	
-	dojo.body().removeChild(div);
-	div = null;
-	return heights; 	//	object
-};
-
-dojo.html._fontMeasurements = null;
-
-dojo.html.getCachedFontMeasurements = function(recalculate){
-	if(recalculate || !dojo.html._fontMeasurements){
-		dojo.html._fontMeasurements = dojo.html.getFontMeasurements();
-	}
-	return dojo.html._fontMeasurements;
-};
-
-dojo.html.measureFragment = function(/* HTMLElement */node, /* string */html, /* string? */boxType){
-	//	summary
-	//	get the dimensions of passed node if it were populated with passed html.
-	var clone = node.cloneNode(true);
-	clone.innerHTML = html;
-	node.parentNode.appendChild(clone);
-	var ret = dojo.html.getElementBox(clone, boxType);
-	node.parentNode.removeChild(clone);
-	clone=null;
-	return ret; // object
-};
-
-//	the following are derived from the 13th Parallel Column script, as
-//		reinterpreted by trt.  http://www.13thparallel.org/archive/column-script
-//	Original by Dan Pupius and Michael van Ouwerkerk.
-dojo.html.getFittedFragment = function(/* HTMLElement */node, /* string */html){
-	//	summary
-	//	Given html, return the fragment that will fit on one line of passed node.
-	function cl(node){
-		var element = document.createElement(node.tagName);
-		element.id = node.id + "-clone";
-		element.className = node.className;
-		for (var j = 0; j < node.attributes.length; j++) {
-			if (node.attributes[j].specified) {
-				if (node.attributes[j].nodeName.toLowerCase() != "style" 
-					&& node.attributes[j].nodeName.toLowerCase() != "edited" 
-					&& node.attributes[j].nodeName.toLowerCase() != "contenteditable"
-					&& node.attributes[j].nodeName.toLowerCase() != "id"
-					&& node.attributes[j].nodeName.toLowerCase() != "class"
-				){
-					element.setAttribute(node.attributes[j].nodeName.toLowerCase(), node.attributes[j].nodeValue);
-				}
-			}
-		}
-		return element;
-	}
-	var height = dojo.html.getFontMeasurements()["16px"];
-	var n=cl(node);
-	n.style.width=dojo.html.getBorderBox(node).width+"px";
-	n.style.height=(height+4)+"px";
-	node.parentNode.appendChild(n);
-	var rem = dojo.html.fitToElement(n, html);
-	var ret = n.innerHTML;
-	n.parentNode.removeChild(n);
-	return ret;
-};
-
-dojo.html.fitToElement = function(/* HTMLElement */node, /* string */html){
-	//	summary
-	//	will fit as much html as possible into node, and return the unused
-	//	portion, with tag corrections.
-	function cl(node){
-		var element = document.createElement(node.tagName);
-		element.id = node.id + "-clone";
-		element.className = node.className;
-		for (var j = 0; j < node.attributes.length; j++) {
-			if (node.attributes[j].specified) {
-				if (node.attributes[j].nodeName.toLowerCase() != "style" 
-					&& node.attributes[j].nodeName.toLowerCase() != "edited" 
-					&& node.attributes[j].nodeName.toLowerCase() != "contenteditable"
-					&& node.attributes[j].nodeName.toLowerCase() != "id"
-					&& node.attributes[j].nodeName.toLowerCase() != "class"
-				){
-					element.setAttribute(node.attributes[j].nodeName.toLowerCase(), node.attributes[j].nodeValue);
-				}
-			}
-		}
-		return element;
-	}
-
-	var clone = cl(node);
-	node.parentNode.appendChild(clone);
-	var t=dojo.html.getBorderBox(node);
-	clone.style.width = t.width+"px";
-
-	var singletons = ["br","img", "hr", "input", "!--"];
-	var chop = ["<BR>","<br>","<br/>","<br />","<p></p>","<P></P>"];
-	var openTags = [];
-
-	var str = html;
-	var i = 0;
-	var limit = str.length;
-	var add = 0;
-	var doLoop = true;
-	clone.innerHTML = str;
-	while (doLoop) {
-		add = Math.round((limit - i) / 2);
-		if (add <= 1) doLoop = false;
-		i += add;
-		clone.innerHTML = str.substr(0, i);
-		if (clone.offsetHeight > t.height) {
-			limit = i;
-			i -= add;
-		}
-	}
-	if (str.substr(0, i) != str) {
-		var lastSpace = str.substr(0, i).lastIndexOf(" ");
-		var lastNewLine = str.substr(0, i).lastIndexOf("\n");
-		var lastGreater = str.substr(0, i).lastIndexOf(">");
-		var lastLess = str.substr(0, i).lastIndexOf("<");
-		if (lastLess <= lastGreater && lastNewLine == i - 1) i = i;
-		else if (lastSpace != -1 && lastSpace > lastGreater && lastGreater > lastLess) i = lastSpace + 1;
-		else if (lastLess > lastGreater) i = lastLess;
-		else if (lastGreater != -1) i = lastGreater + 1;
-	}
-
-	str = str.substr(0, i);
-	var ret = html.substr(str.length);	//	get the rest of the passed text.
-
-	var doPush = true;
-	var tags = str.split("<");
-	tags.shift();
-	for (var j = 0; j < tags.length; j++) {
-		tags[j] = tags[j].split(">")[0];
-		if (tags[j].charAt(tags[j].length - 1) == "/"){ continue; }
-		if (tags[j].charAt(0) != "/") {
-			for (var k = 0; k < singletons.length; k++) {
-				if (tags[j].split(" ")[0].toLowerCase() == singletons[k]){
-					doPush = false;
-				}
-			}
-			if (doPush){
-				openTags.push(tags[j]);
-			}
-			doPush = true;
-		} else {
-			openTags.pop();
-		}
-	}
-
-	//	close any open tags and prepend them to ret as well.
-	for(var j=0; j<chop.length; j++){
-		if(ret.charAt(0) == "\n"){ ret = ret.substr(1); }
-		while(ret.indexOf(chop[j]) == 0){
-			ret = ret.substr(chop[j].length);
-		}
-	}
-
-	for(var j=openTags.length-1; j>=0; j--){
-		if(str.lastIndexOf(openTags[j]) == (str.length-openTags[j].length-1)){
-			str = str.substring(0, str.lastIndexOf(openTags[j]));
-		} else {
-			str += "</"+openTags[j]+">";
-		}
-		if(ret.length > 0){
-			ret = "<"+openTags[j]+">"+ret;
-		}
-	}
-	
-	for(var j=0; j<chop.length; j++){
-		if(ret.charAt(0) == "\n"){ ret = ret.substr(1); }
-		while(ret.indexOf(chop[j]) == 0){
-			ret = ret.substr(chop[j].length);
-		}
-	}
-	//	push it into the node and pull the temp one.
-	node.innerHTML = str;
-	clone.parentNode.removeChild(clone);
-	clone = null;
-	
-	//	return the remainder.
-	return ret;	//	string
-};
+dojo.provide("dojo.html.metrics");
+dojo.require("dojo.html.layout");
+dojo.html.getScrollbar = function () {
+	var scroll = document.createElement("div");
+	scroll.style.width = "100px";
+	scroll.style.height = "100px";
+	scroll.style.overflow = "scroll";
+	scroll.style.position = "absolute";
+	scroll.style.top = "-300px";
+	scroll.style.left = "0px";
+	var test = document.createElement("div");
+	test.style.width = "400px";
+	test.style.height = "400px";
+	scroll.appendChild(test);
+	dojo.body().appendChild(scroll);
+	var width = scroll.offsetWidth - scroll.clientWidth;
+	dojo.body().removeChild(scroll);
+	scroll.removeChild(test);
+	scroll = test = null;
+	return {width:width};
+};
+dojo.html.getFontMeasurements = function () {
+	var heights = {"1em":0, "1ex":0, "100%":0, "12pt":0, "16px":0, "xx-small":0, "x-small":0, "small":0, "medium":0, "large":0, "x-large":0, "xx-large":0};
+	if (dojo.render.html.ie) {
+		document.documentElement.style.fontSize = "100%";
+	}
+	var div = document.createElement("div");
+	div.style.position = "absolute";
+	div.style.left = "-100px";
+	div.style.top = "0";
+	div.style.width = "30px";
+	div.style.height = "1000em";
+	div.style.border = "0";
+	div.style.margin = "0";
+	div.style.padding = "0";
+	div.style.outline = "0";
+	div.style.lineHeight = "1";
+	div.style.overflow = "hidden";
+	dojo.body().appendChild(div);
+	for (var p in heights) {
+		div.style.fontSize = p;
+		heights[p] = Math.round(div.offsetHeight * 12 / 16) * 16 / 12 / 1000;
+	}
+	dojo.body().removeChild(div);
+	div = null;
+	return heights;
+};
+dojo.html._fontMeasurements = null;
+dojo.html.getCachedFontMeasurements = function (recalculate) {
+	if (recalculate || !dojo.html._fontMeasurements) {
+		dojo.html._fontMeasurements = dojo.html.getFontMeasurements();
+	}
+	return dojo.html._fontMeasurements;
+};
+dojo.html.measureFragment = function (node, html, boxType) {
+	var clone = node.cloneNode(true);
+	clone.innerHTML = html;
+	node.parentNode.appendChild(clone);
+	var ret = dojo.html.getElementBox(clone, boxType);
+	node.parentNode.removeChild(clone);
+	clone = null;
+	return ret;
+};
+dojo.html.getFittedFragment = function (node, html) {
+	function cl(node) {
+		var element = document.createElement(node.tagName);
+		element.id = node.id + "-clone";
+		element.className = node.className;
+		for (var j = 0; j < node.attributes.length; j++) {
+			if (node.attributes[j].specified) {
+				if (node.attributes[j].nodeName.toLowerCase() != "style" && node.attributes[j].nodeName.toLowerCase() != "edited" && node.attributes[j].nodeName.toLowerCase() != "contenteditable" && node.attributes[j].nodeName.toLowerCase() != "id" && node.attributes[j].nodeName.toLowerCase() != "class") {
+					element.setAttribute(node.attributes[j].nodeName.toLowerCase(), node.attributes[j].nodeValue);
+				}
+			}
+		}
+		return element;
+	}
+	var height = dojo.html.getFontMeasurements()["16px"];
+	var n = cl(node);
+	n.style.width = dojo.html.getBorderBox(node).width + "px";
+	n.style.height = (height + 4) + "px";
+	node.parentNode.appendChild(n);
+	var rem = dojo.html.fitToElement(n, html);
+	var ret = n.innerHTML;
+	n.parentNode.removeChild(n);
+	return ret;
+};
+dojo.html.fitToElement = function (node, html) {
+	function cl(node) {
+		var element = document.createElement(node.tagName);
+		element.id = node.id + "-clone";
+		element.className = node.className;
+		for (var j = 0; j < node.attributes.length; j++) {
+			if (node.attributes[j].specified) {
+				if (node.attributes[j].nodeName.toLowerCase() != "style" && node.attributes[j].nodeName.toLowerCase() != "edited" && node.attributes[j].nodeName.toLowerCase() != "contenteditable" && node.attributes[j].nodeName.toLowerCase() != "id" && node.attributes[j].nodeName.toLowerCase() != "class") {
+					element.setAttribute(node.attributes[j].nodeName.toLowerCase(), node.attributes[j].nodeValue);
+				}
+			}
+		}
+		return element;
+	}
+	var clone = cl(node);
+	node.parentNode.appendChild(clone);
+	var t = dojo.html.getBorderBox(node);
+	clone.style.width = t.width + "px";
+	var singletons = ["br", "img", "hr", "input", "!--"];
+	var chop = ["<BR>", "<br>", "<br/>", "<br />", "<p></p>", "<P></P>"];
+	var openTags = [];
+	var str = html;
+	var i = 0;
+	var limit = str.length;
+	var add = 0;
+	var doLoop = true;
+	clone.innerHTML = str;
+	while (doLoop) {
+		add = Math.round((limit - i) / 2);
+		if (add <= 1) {
+			doLoop = false;
+		}
+		i += add;
+		clone.innerHTML = str.substr(0, i);
+		if (clone.offsetHeight > t.height) {
+			limit = i;
+			i -= add;
+		}
+	}
+	if (str.substr(0, i) != str) {
+		var lastSpace = str.substr(0, i).lastIndexOf(" ");
+		var lastNewLine = str.substr(0, i).lastIndexOf("\n");
+		var lastGreater = str.substr(0, i).lastIndexOf(">");
+		var lastLess = str.substr(0, i).lastIndexOf("<");
+		if (lastLess <= lastGreater && lastNewLine == i - 1) {
+			i = i;
+		} else {
+			if (lastSpace != -1 && lastSpace > lastGreater && lastGreater > lastLess) {
+				i = lastSpace + 1;
+			} else {
+				if (lastLess > lastGreater) {
+					i = lastLess;
+				} else {
+					if (lastGreater != -1) {
+						i = lastGreater + 1;
+					}
+				}
+			}
+		}
+	}
+	str = str.substr(0, i);
+	var ret = html.substr(str.length);
+	var doPush = true;
+	var tags = str.split("<");
+	tags.shift();
+	for (var j = 0; j < tags.length; j++) {
+		tags[j] = tags[j].split(">")[0];
+		if (tags[j].charAt(tags[j].length - 1) == "/") {
+			continue;
+		}
+		if (tags[j].charAt(0) != "/") {
+			for (var k = 0; k < singletons.length; k++) {
+				if (tags[j].split(" ")[0].toLowerCase() == singletons[k]) {
+					doPush = false;
+				}
+			}
+			if (doPush) {
+				openTags.push(tags[j]);
+			}
+			doPush = true;
+		} else {
+			openTags.pop();
+		}
+	}
+	for (var j = 0; j < chop.length; j++) {
+		if (ret.charAt(0) == "\n") {
+			ret = ret.substr(1);
+		}
+		while (ret.indexOf(chop[j]) == 0) {
+			ret = ret.substr(chop[j].length);
+		}
+	}
+	for (var j = openTags.length - 1; j >= 0; j--) {
+		if (str.lastIndexOf(openTags[j]) == (str.length - openTags[j].length - 1)) {
+			str = str.substring(0, str.lastIndexOf(openTags[j]));
+		} else {
+			str += "</" + openTags[j] + ">";
+		}
+		if (ret.length > 0) {
+			ret = "<" + openTags[j] + ">" + ret;
+		}
+	}
+	for (var j = 0; j < chop.length; j++) {
+		if (ret.charAt(0) == "\n") {
+			ret = ret.substr(1);
+		}
+		while (ret.indexOf(chop[j]) == 0) {
+			ret = ret.substr(chop[j].length);
+		}
+	}
+	node.innerHTML = str;
+	clone.parentNode.removeChild(clone);
+	clone = null;
+	return ret;
+};
 
+
 __CPAN_FILE__ src/html/selection.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -15504,371 +10758,332 @@
 
 dojo.require("dojo.html.common");
 dojo.provide("dojo.html.selection");
-
 dojo.require("dojo.dom");
 dojo.require("dojo.lang.common");
-
-/**
- * type of selection
-**/
-dojo.html.selectionType = {
-	NONE : 0, //selection is empty
-	TEXT : 1, //selection contains text (may also contains CONTROL objects)
-	CONTROL : 2 //only one element is selected (such as img, table etc)
-};
-
-dojo.html.clearSelection = function(){
-	// summary: deselect the current selection to make it empty
+dojo.html.selectionType = {NONE:0, TEXT:1, CONTROL:2};
+dojo.html.clearSelection = function () {
 	var _window = dojo.global();
 	var _document = dojo.doc();
-	try{
-		if(_window["getSelection"]){ 
-			if(dojo.render.html.safari){
-				// pulled from WebCore/ecma/kjs_window.cpp, line 2536
+	try {
+		if (_window["getSelection"]) {
+			if (dojo.render.html.safari) {
 				_window.getSelection().collapse();
-			}else{
+			} else {
 				_window.getSelection().removeAllRanges();
 			}
-		}else if(_document.selection){
-			if(_document.selection.empty){
-				_document.selection.empty();
-			}else if(_document.selection.clear){
-				_document.selection.clear();
+		} else {
+			if (_document.selection) {
+				if (_document.selection.empty) {
+					_document.selection.empty();
+				} else {
+					if (_document.selection.clear) {
+						_document.selection.clear();
+					}
+				}
 			}
 		}
 		return true;
-	}catch(e){
+	}
+	catch (e) {
 		dojo.debug(e);
 		return false;
 	}
-}
-
-dojo.html.disableSelection = function(/*DomNode*/element){
-	// summary: disable selection on a node
-	element = dojo.byId(element)||dojo.body();
+};
+dojo.html.disableSelection = function (element) {
+	element = dojo.byId(element) || dojo.body();
 	var h = dojo.render.html;
-	
-	if(h.mozilla){
+	if (h.mozilla) {
 		element.style.MozUserSelect = "none";
-	}else if(h.safari){
-		element.style.KhtmlUserSelect = "none"; 
-	}else if(h.ie){
-		element.unselectable = "on";
-	}else{
-		return false;
+	} else {
+		if (h.safari) {
+			element.style.KhtmlUserSelect = "none";
+		} else {
+			if (h.ie) {
+				element.unselectable = "on";
+			} else {
+				return false;
+			}
+		}
 	}
 	return true;
-}
-
-dojo.html.enableSelection = function(/*DomNode*/element){
-	// summary: enable selection on a node
-	element = dojo.byId(element)||dojo.body();
-	
+};
+dojo.html.enableSelection = function (element) {
+	element = dojo.byId(element) || dojo.body();
 	var h = dojo.render.html;
-	if(h.mozilla){ 
-		element.style.MozUserSelect = ""; 
-	}else if(h.safari){
-		element.style.KhtmlUserSelect = "";
-	}else if(h.ie){
-		element.unselectable = "off";
-	}else{
-		return false;
+	if (h.mozilla) {
+		element.style.MozUserSelect = "";
+	} else {
+		if (h.safari) {
+			element.style.KhtmlUserSelect = "";
+		} else {
+			if (h.ie) {
+				element.unselectable = "off";
+			} else {
+				return false;
+			}
+		}
 	}
 	return true;
-}
-
-dojo.html.selectElement = function(/*DomNode*/element){
+};
+dojo.html.selectElement = function (element) {
 	dojo.deprecated("dojo.html.selectElement", "replaced by dojo.html.selection.selectElementChildren", 0.5);
-}
-
-dojo.html.selectInputText = function(/*DomNode*/element){
-	// summary: select all the text in an input element
+};
+dojo.html.selectInputText = function (element) {
 	var _window = dojo.global();
 	var _document = dojo.doc();
 	element = dojo.byId(element);
-	if(_document["selection"] && dojo.body()["createTextRange"]){ // IE
+	if (_document["selection"] && dojo.body()["createTextRange"]) {
 		var range = element.createTextRange();
 		range.moveStart("character", 0);
 		range.moveEnd("character", element.value.length);
 		range.select();
-	}else if(_window["getSelection"]){
-		var selection = _window.getSelection();
-		// FIXME: does this work on Safari?
-		element.setSelectionRange(0, element.value.length);
+	} else {
+		if (_window["getSelection"]) {
+			var selection = _window.getSelection();
+			element.setSelectionRange(0, element.value.length);
+		}
 	}
 	element.focus();
-}
-
-
-dojo.html.isSelectionCollapsed = function(){
+};
+dojo.html.isSelectionCollapsed = function () {
 	dojo.deprecated("dojo.html.isSelectionCollapsed", "replaced by dojo.html.selection.isCollapsed", 0.5);
 	return dojo.html.selection.isCollapsed();
-}
-
-dojo.lang.mixin(dojo.html.selection, {
-	getType: function() {
-		// summary: Get the selection type (like document.select.type in IE).
-		if(dojo.doc()["selection"]){ //IE
-			return dojo.html.selectionType[dojo.doc().selection.type.toUpperCase()];
-		}else{
-			var stype = dojo.html.selectionType.TEXT;
-	
-			// Check if the actual selection is a CONTROL (IMG, TABLE, HR, etc...).
-			var oSel;
-			try {oSel = dojo.global().getSelection();}
-			catch (e) {}
-			
-			if(oSel && oSel.rangeCount==1){
-				var oRange = oSel.getRangeAt(0);
-				if (oRange.startContainer == oRange.endContainer && (oRange.endOffset - oRange.startOffset) == 1
-					&& oRange.startContainer.nodeType != dojo.dom.TEXT_NODE) {
-					stype = dojo.html.selectionType.CONTROL;
-				}
+};
+dojo.lang.mixin(dojo.html.selection, {getType:function () {
+	if (dojo.doc()["selection"]) {
+		return dojo.html.selectionType[dojo.doc().selection.type.toUpperCase()];
+	} else {
+		var stype = dojo.html.selectionType.TEXT;
+		var oSel;
+		try {
+			oSel = dojo.global().getSelection();
+		}
+		catch (e) {
+		}
+		if (oSel && oSel.rangeCount == 1) {
+			var oRange = oSel.getRangeAt(0);
+			if (oRange.startContainer == oRange.endContainer && (oRange.endOffset - oRange.startOffset) == 1 && oRange.startContainer.nodeType != dojo.dom.TEXT_NODE) {
+				stype = dojo.html.selectionType.CONTROL;
 			}
-			return stype;
 		}
-	},
-	isCollapsed: function() {
-		// summary: return whether the current selection is empty
-		var _window = dojo.global();
-		var _document = dojo.doc();
-		if(_document["selection"]){ // IE
-			return _document.selection.createRange().text == "";
-		}else if(_window["getSelection"]){
+		return stype;
+	}
+}, isCollapsed:function () {
+	var _window = dojo.global();
+	var _document = dojo.doc();
+	if (_document["selection"]) {
+		return _document.selection.createRange().text == "";
+	} else {
+		if (_window["getSelection"]) {
 			var selection = _window.getSelection();
-			if(dojo.lang.isString(selection)){ // Safari
+			if (dojo.lang.isString(selection)) {
 				return selection == "";
-			}else{ // Mozilla/W3
+			} else {
 				return selection.isCollapsed || selection.toString() == "";
 			}
 		}
-	},
-	getSelectedElement: function() {
-		// summary: 
-		//		Retrieves the selected element (if any), just in the case that a single
-		//		element (object like and image or a table) is selected.
-		if ( dojo.html.selection.getType() == dojo.html.selectionType.CONTROL ){
-			if(dojo.doc()["selection"]){ //IE
-				var range = dojo.doc().selection.createRange();
-		
-				if ( range && range.item ){
-					return dojo.doc().selection.createRange().item(0);
-				}
-			}else{
-				var selection = dojo.global().getSelection();
-				return selection.anchorNode.childNodes[ selection.anchorOffset ];
+	}
+}, getSelectedElement:function () {
+	if (dojo.html.selection.getType() == dojo.html.selectionType.CONTROL) {
+		if (dojo.doc()["selection"]) {
+			var range = dojo.doc().selection.createRange();
+			if (range && range.item) {
+				return dojo.doc().selection.createRange().item(0);
 			}
+		} else {
+			var selection = dojo.global().getSelection();
+			return selection.anchorNode.childNodes[selection.anchorOffset];
 		}
-	},
-	getParentElement: function() {
-		// summary: 
-		//		Get the parent element of the current selection
-		if(dojo.html.selection.getType() == dojo.html.selectionType.CONTROL){
-			var p = dojo.html.selection.getSelectedElement();
-			if(p){ return p.parentNode; }
-		}else{
-			if(dojo.doc()["selection"]){ //IE
-				return dojo.doc().selection.createRange().parentElement();
-			}else{
-				var selection = dojo.global().getSelection();
-				if(selection){
-					var node = selection.anchorNode;
-		
-					while ( node && node.nodeType != dojo.dom.ELEMENT_NODE ){
-						node = node.parentNode;
-					}
-		
-					return node;
-				}
-			}
+	}
+}, getParentElement:function () {
+	if (dojo.html.selection.getType() == dojo.html.selectionType.CONTROL) {
+		var p = dojo.html.selection.getSelectedElement();
+		if (p) {
+			return p.parentNode;
 		}
-	},
-	getSelectedText: function(){
-		// summary:
-		//		Return the text (no html tags) included in the current selection or null if no text is selected
-		if(dojo.doc()["selection"]){ //IE
-			if(dojo.html.selection.getType() == dojo.html.selectionType.CONTROL){
-				return null;
-			}
-			return dojo.doc().selection.createRange().text;
-		}else{
+	} else {
+		if (dojo.doc()["selection"]) {
+			return dojo.doc().selection.createRange().parentElement();
+		} else {
 			var selection = dojo.global().getSelection();
-			if(selection){
-				return selection.toString();
+			if (selection) {
+				var node = selection.anchorNode;
+				while (node && node.nodeType != dojo.dom.ELEMENT_NODE) {
+					node = node.parentNode;
+				}
+				return node;
 			}
 		}
-	},
-	getSelectedHtml: function(){
-		// summary:
-		//		Return the html of the current selection or null if unavailable
-		if(dojo.doc()["selection"]){ //IE
-			if(dojo.html.selection.getType() == dojo.html.selectionType.CONTROL){
-				return null;
-			}
-			return dojo.doc().selection.createRange().htmlText;
-		}else{
-			var selection = dojo.global().getSelection();
-			if(selection && selection.rangeCount){
-				var frag = selection.getRangeAt(0).cloneContents();
-				var div = document.createElement("div");
-				div.appendChild(frag);
-				return div.innerHTML;
-			}
+	}
+}, getSelectedText:function () {
+	if (dojo.doc()["selection"]) {
+		if (dojo.html.selection.getType() == dojo.html.selectionType.CONTROL) {
 			return null;
 		}
-	},
-	hasAncestorElement: function(/*String*/tagName /* ... */){
-		// summary: 
-		// 		Check whether current selection has a  parent element which is of type tagName (or one of the other specified tagName)
-		return (dojo.html.selection.getAncestorElement.apply(this, arguments) != null);
-	},
-	getAncestorElement: function(/*String*/tagName /* ... */){
-		// summary:
-		//		Return the parent element of the current selection which is of type tagName (or one of the other specified tagName)
-		var node = dojo.html.selection.getSelectedElement() || dojo.html.selection.getParentElement();
-		while(node /*&& node.tagName.toLowerCase() != 'body'*/){
-			if(dojo.html.selection.isTag(node, arguments).length>0){
-				return node;
-			}
-			node = node.parentNode;
+		return dojo.doc().selection.createRange().text;
+	} else {
+		var selection = dojo.global().getSelection();
+		if (selection) {
+			return selection.toString();
 		}
+	}
+}, getSelectedHtml:function () {
+	if (dojo.doc()["selection"]) {
+		if (dojo.html.selection.getType() == dojo.html.selectionType.CONTROL) {
+			return null;
+		}
+		return dojo.doc().selection.createRange().htmlText;
+	} else {
+		var selection = dojo.global().getSelection();
+		if (selection && selection.rangeCount) {
+			var frag = selection.getRangeAt(0).cloneContents();
+			var div = document.createElement("div");
+			div.appendChild(frag);
+			return div.innerHTML;
+		}
 		return null;
-	},
-	//modified from dojo.html.isTag to take an array as second parameter
-	isTag: function(/*DomNode*/node, /*Array*/tags) {
-		if(node && node.tagName) {
-			for (var i=0; i<tags.length; i++){
-				if (node.tagName.toLowerCase()==String(tags[i]).toLowerCase()){
-					return String(tags[i]).toLowerCase();
-				}
-			}
+	}
+}, hasAncestorElement:function (tagName) {
+	return (dojo.html.selection.getAncestorElement.apply(this, arguments) != null);
+}, getAncestorElement:function (tagName) {
+	var node = dojo.html.selection.getSelectedElement() || dojo.html.selection.getParentElement();
+	while (node) {
+		if (dojo.html.selection.isTag(node, arguments).length > 0) {
+			return node;
 		}
-		return "";
-	},
-	selectElement: function(/*DomNode*/element) {
-		// summary: clear previous selection and select element (including all its children)
-		var _window = dojo.global();
-		var _document = dojo.doc();
-		element = dojo.byId(element);
-		if(_document.selection && dojo.body().createTextRange){ // IE
-			try{
-				var range = dojo.body().createControlRange();
-				range.addElement(element);
-				range.select();
-			}catch(e){
-				dojo.html.selection.selectElementChildren(element);
+		node = node.parentNode;
+	}
+	return null;
+}, isTag:function (node, tags) {
+	if (node && node.tagName) {
+		for (var i = 0; i < tags.length; i++) {
+			if (node.tagName.toLowerCase() == String(tags[i]).toLowerCase()) {
+				return String(tags[i]).toLowerCase();
 			}
-		}else if(_window["getSelection"]){
+		}
+	}
+	return "";
+}, selectElement:function (element) {
+	var _window = dojo.global();
+	var _document = dojo.doc();
+	element = dojo.byId(element);
+	if (_document.selection && dojo.body().createTextRange) {
+		try {
+			var range = dojo.body().createControlRange();
+			range.addElement(element);
+			range.select();
+		}
+		catch (e) {
+			dojo.html.selection.selectElementChildren(element);
+		}
+	} else {
+		if (_window["getSelection"]) {
 			var selection = _window.getSelection();
-			// FIXME: does this work on Safari?
-			if(selection["removeAllRanges"]){ // Mozilla
-				var range = _document.createRange() ;
-				range.selectNode(element) ;
-				selection.removeAllRanges() ;
-				selection.addRange(range) ;
+			if (selection["removeAllRanges"]) {
+				var range = _document.createRange();
+				range.selectNode(element);
+				selection.removeAllRanges();
+				selection.addRange(range);
 			}
 		}
-	},
-	selectElementChildren: function(/*DomNode*/element){
-		// summary: clear previous selection and select the content of the node (excluding the node itself)
-		var _window = dojo.global();
-		var _document = dojo.doc();
-		element = dojo.byId(element);
-		if(_document.selection && dojo.body().createTextRange){ // IE
-			var range = dojo.body().createTextRange();
-			range.moveToElementText(element);
-			range.select();
-		}else if(_window["getSelection"]){
+	}
+}, selectElementChildren:function (element) {
+	var _window = dojo.global();
+	var _document = dojo.doc();
+	element = dojo.byId(element);
+	if (_document.selection && dojo.body().createTextRange) {
+		var range = dojo.body().createTextRange();
+		range.moveToElementText(element);
+		range.select();
+	} else {
+		if (_window["getSelection"]) {
 			var selection = _window.getSelection();
-			if(selection["setBaseAndExtent"]){ // Safari
+			if (selection["setBaseAndExtent"]) {
 				selection.setBaseAndExtent(element, 0, element, element.innerText.length - 1);
-			} else if(selection["selectAllChildren"]){ // Mozilla
-				selection.selectAllChildren(element);
+			} else {
+				if (selection["selectAllChildren"]) {
+					selection.selectAllChildren(element);
+				}
 			}
 		}
-	},
-	getBookmark: function(){
-		// summary: Retrieves a bookmark that can be used with moveToBookmark to return to the same range
-		var bookmark;
-		var _document = dojo.doc();
-		if(_document["selection"]){ // IE
-			var range = _document.selection.createRange();
-			bookmark = range.getBookmark();
-		}else{
-			var selection;
-			try {selection = dojo.global().getSelection();}
-			catch (e) {}
-			if(selection){
-				var range = selection.getRangeAt(0);
-				bookmark = range.cloneRange();
-			}else{
-				dojo.debug("No idea how to store the current selection for this browser!");
-			}
+	}
+}, getBookmark:function () {
+	var bookmark;
+	var _document = dojo.doc();
+	if (_document["selection"]) {
+		var range = _document.selection.createRange();
+		bookmark = range.getBookmark();
+	} else {
+		var selection;
+		try {
+			selection = dojo.global().getSelection();
 		}
-		return bookmark;
-	},
-	moveToBookmark: function(/*Object*/bookmark){
-		// summary: Moves current selection to a bookmark
-		// bookmark: this should be a returned object from dojo.html.selection.getBookmark()
-		var _document = dojo.doc();
-		if(_document["selection"]){ // IE
-			var range = _document.selection.createRange();
-			 range.moveToBookmark(bookmark);
-			 range.select();
-		}else{ //Moz/W3C
-			var selection;
-			try {selection = dojo.global().getSelection();}
-			catch (e) {}
-			if(selection && selection['removeAllRanges']){
-				selection.removeAllRanges() ;
-				selection.addRange(bookmark) ;
-			}else{
-				dojo.debug("No idea how to restore selection for this browser!");
-			}
+		catch (e) {
 		}
-	},
-	collapse: function(/*Boolean*/beginning) {
-		// summary: clear current selection
-		if(dojo.global()['getSelection']){
-			var selection = dojo.global().getSelection();
-			if(selection.removeAllRanges){ // Mozilla
-				if(beginning){
-					selection.collapseToStart();
-				}else{
-					selection.collapseToEnd();
-				}
-			}else{ // Safari
-				// pulled from WebCore/ecma/kjs_window.cpp, line 2536
-				 dojo.global().getSelection().collapse(beginning);
+		if (selection) {
+			var range = selection.getRangeAt(0);
+			bookmark = range.cloneRange();
+		} else {
+			dojo.debug("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 = _document.selection.createRange();
+		range.moveToBookmark(bookmark);
+		range.select();
+	} else {
+		var selection;
+		try {
+			selection = dojo.global().getSelection();
+		}
+		catch (e) {
+		}
+		if (selection && selection["removeAllRanges"]) {
+			selection.removeAllRanges();
+			selection.addRange(bookmark);
+		} else {
+			dojo.debug("No idea how to restore selection for this browser!");
+		}
+	}
+}, collapse:function (beginning) {
+	if (dojo.global()["getSelection"]) {
+		var selection = dojo.global().getSelection();
+		if (selection.removeAllRanges) {
+			if (beginning) {
+				selection.collapseToStart();
+			} else {
+				selection.collapseToEnd();
 			}
-		}else if(dojo.doc().selection){ // IE
+		} else {
+			dojo.global().getSelection().collapse(beginning);
+		}
+	} else {
+		if (dojo.doc().selection) {
 			var range = dojo.doc().selection.createRange();
 			range.collapse(beginning);
 			range.select();
 		}
-	},
-	remove: function() {
-		// summary: delete current selection
-		if(dojo.doc().selection) { //IE
-			var selection = dojo.doc().selection;
-
-			if ( selection.type.toUpperCase() != "NONE" ){
-				selection.clear();
-			}
-		
-			return selection;
-		}else{
-			var selection = dojo.global().getSelection();
-
-			for ( var i = 0; i < selection.rangeCount; i++ ){
-				selection.getRangeAt(i).deleteContents();
-			}
-		
-			return selection;
+	}
+}, remove:function () {
+	if (dojo.doc().selection) {
+		var selection = dojo.doc().selection;
+		if (selection.type.toUpperCase() != "NONE") {
+			selection.clear();
 		}
+		return selection;
+	} else {
+		var selection = dojo.global().getSelection();
+		for (var i = 0; i < selection.rangeCount; i++) {
+			selection.getRangeAt(i).deleteContents();
+		}
+		return selection;
 	}
-});
+}});
 
+
 __CPAN_FILE__ src/html/shadow.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -15881,12 +11096,11 @@
 */
 
 dojo.provide("dojo.html.shadow");
-
 dojo.require("dojo.lfx.shadow");
 dojo.deprecated("dojo.html.shadow has been moved to dojo.lfx.", "0.5");
-
 dojo.html.shadow = dojo.lfx.shadow;
 
+
 __CPAN_FILE__ src/html/iframe.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -15900,123 +11114,77 @@
 
 dojo.provide("dojo.html.iframe");
 dojo.require("dojo.html.util");
-
-// thanks burstlib!
-dojo.html.iframeContentWindow = function(/* HTMLIFrameElement */iframe_el) {
-	//	summary
-	//	returns the window reference of the passed iframe
-	var win = dojo.html.getDocumentWindow(dojo.html.iframeContentDocument(iframe_el)) ||
-		// Moz. TODO: is this available when defaultView isn't?
-		dojo.html.iframeContentDocument(iframe_el).__parent__ ||
-		(iframe_el.name && document.frames[iframe_el.name]) || null;
-	return win;	//	Window
-}
-
-dojo.html.iframeContentDocument = function(/* HTMLIFrameElement */iframe_el){
-	//	summary
-	//	returns a reference to the document object inside iframe_el
-	var doc = iframe_el.contentDocument // W3
-		|| ((iframe_el.contentWindow)&&(iframe_el.contentWindow.document))	// IE
-		|| ((iframe_el.name)&&(document.frames[iframe_el.name])&&(document.frames[iframe_el.name].document)) 
-		|| null;
-	return doc;	//	HTMLDocument
-}
-
-dojo.html.BackgroundIframe = function(/* HTMLElement */node) {
-	//	summary
-	//	For IE z-index schenanigans
-	//	Two possible uses:
-	//	1. new dojo.html.BackgroundIframe(node)
-	//		Makes a background iframe as a child of node, that fills area (and position) of node
-	//	2. new dojo.html.BackgroundIframe()
-	//		Attaches frame to dojo.body().  User must call size() to set size.
-	if(dojo.render.html.ie55 || dojo.render.html.ie60) {
-		var html="<iframe src='javascript:false'"
-			+ " style='position: absolute; left: 0px; top: 0px; width: 100%; height: 100%;"
-			+ "z-index: -1; filter:Alpha(Opacity=\"0\");' "
-			+ ">";
+dojo.html.iframeContentWindow = function (iframe_el) {
+	var win = dojo.html.getDocumentWindow(dojo.html.iframeContentDocument(iframe_el)) || dojo.html.iframeContentDocument(iframe_el).__parent__ || (iframe_el.name && document.frames[iframe_el.name]) || null;
+	return win;
+};
+dojo.html.iframeContentDocument = function (iframe_el) {
+	var doc = iframe_el.contentDocument || ((iframe_el.contentWindow) && (iframe_el.contentWindow.document)) || ((iframe_el.name) && (document.frames[iframe_el.name]) && (document.frames[iframe_el.name].document)) || null;
+	return doc;
+};
+dojo.html.BackgroundIframe = function (node) {
+	if (dojo.render.html.ie55 || dojo.render.html.ie60) {
+		var html = "<iframe src='javascript:false'" + " style='position: absolute; left: 0px; top: 0px; width: 100%; height: 100%;" + "z-index: -1; filter:Alpha(Opacity=\"0\");' " + ">";
 		this.iframe = dojo.doc().createElement(html);
-		this.iframe.tabIndex = -1; // Magic to prevent iframe from getting focus on tab keypress - as style didnt work.
-		if(node){
+		this.iframe.tabIndex = -1;
+		if (node) {
 			node.appendChild(this.iframe);
-			this.domNode=node;
-		}else{
+			this.domNode = node;
+		} else {
 			dojo.body().appendChild(this.iframe);
-			this.iframe.style.display="none";
+			this.iframe.style.display = "none";
 		}
 	}
-}
-dojo.lang.extend(dojo.html.BackgroundIframe, {
-	iframe: null,
-	onResized: function(){
-		//	summary
-		//	Resize event handler.
-		// TODO: this function shouldn't be necessary but setting width=height=100% doesn't work!
-		if(this.iframe && this.domNode && this.domNode.parentNode){ // No parentElement if onResized() timeout event occurs on a removed domnode
-			var outer = dojo.html.getMarginBox(this.domNode);
-			if (outer.width  == 0 || outer.height == 0 ){
-				dojo.lang.setTimeout(this, this.onResized, 100);
-				return;
-			}
-			this.iframe.style.width = outer.width + "px";
-			this.iframe.style.height = outer.height + "px";
+};
+dojo.lang.extend(dojo.html.BackgroundIframe, {iframe:null, onResized:function () {
+	if (this.iframe && this.domNode && this.domNode.parentNode) {
+		var outer = dojo.html.getMarginBox(this.domNode);
+		if (outer.width == 0 || outer.height == 0) {
+			dojo.lang.setTimeout(this, this.onResized, 100);
+			return;
 		}
-	},
-
-	size: function(/* HTMLElement */node) {
-		// summary:
-		//		Call this function if the iframe is connected to dojo.body()
-		//		rather than the node being shadowed 
-
-		//	(TODO: erase)
-		if(!this.iframe){ return; }
-		var coords = dojo.html.toCoordinateObject(node, true, dojo.html.boxSizing.BORDER_BOX);
-		with(this.iframe.style){
-			width = coords.width + "px";
-			height = coords.height + "px";
-			left = coords.left + "px";
-			top = coords.top + "px";
-		}
-	},
-
-	setZIndex: function(/* HTMLElement */node){
-		//	summary
-		//	Sets the z-index of the background iframe.
-		if(!this.iframe){ return; }
-		if(dojo.dom.isNode(node)){
-			this.iframe.style.zIndex = dojo.html.getStyle(node, "z-index") - 1;
-		}else if(!isNaN(node)){
+		this.iframe.style.width = outer.width + "px";
+		this.iframe.style.height = outer.height + "px";
+	}
+}, size:function (node) {
+	if (!this.iframe) {
+		return;
+	}
+	var coords = dojo.html.toCoordinateObject(node, true, dojo.html.boxSizing.BORDER_BOX);
+	with (this.iframe.style) {
+		width = coords.width + "px";
+		height = coords.height + "px";
+		left = coords.left + "px";
+		top = coords.top + "px";
+	}
+}, setZIndex:function (node) {
+	if (!this.iframe) {
+		return;
+	}
+	if (dojo.dom.isNode(node)) {
+		this.iframe.style.zIndex = dojo.html.getStyle(node, "z-index") - 1;
+	} else {
+		if (!isNaN(node)) {
 			this.iframe.style.zIndex = node;
 		}
-	},
-
-	show: function(){
-		//	summary:
-		//		show the iframe
-		if(this.iframe){ 
-			this.iframe.style.display = "block";
-		}
-	},
-
-	hide: function(){
-		//	summary:
-		//		hide the iframe
-		if(this.iframe){ 
-			this.iframe.style.display = "none";
-		}
-	},
-
-	remove: function(){
-		//	summary:
-		//		remove the iframe
-		if(this.iframe){
-			dojo.html.removeNode(this.iframe, true);
-			delete this.iframe;
-			this.iframe=null;
-		}
 	}
-});
+}, show:function () {
+	if (this.iframe) {
+		this.iframe.style.display = "block";
+	}
+}, hide:function () {
+	if (this.iframe) {
+		this.iframe.style.display = "none";
+	}
+}, remove:function () {
+	if (this.iframe) {
+		dojo.html.removeNode(this.iframe, true);
+		delete this.iframe;
+		this.iframe = null;
+	}
+}});
 
+
 __CPAN_DIR__ src/html/images
 __CPAN_FILE__ src/html/images/shadowBL.png
 ‰PNG
@@ -16066,545 +11234,484 @@
 
 dojo.provide("dojo.event.browser");
 dojo.require("dojo.event.common");
-
-// FIXME: any particular reason this is in the global scope?
-dojo._ie_clobber = new function(){
+dojo._ie_clobber = new function () {
 	this.clobberNodes = [];
-
-	function nukeProp(node, prop){
-		// try{ node.removeAttribute(prop); 	}catch(e){ /* squelch */ }
-		try{ node[prop] = null; 			}catch(e){ /* squelch */ }
-		try{ delete node[prop]; 			}catch(e){ /* squelch */ }
-		// FIXME: JotLive needs this, but I'm not sure if it's too slow or not
-		try{ node.removeAttribute(prop);	}catch(e){ /* squelch */ }
+	function nukeProp(node, prop) {
+		try {
+			node[prop] = null;
+		}
+		catch (e) {
+		}
+		try {
+			delete node[prop];
+		}
+		catch (e) {
+		}
+		try {
+			node.removeAttribute(prop);
+		}
+		catch (e) {
+		}
 	}
-
-	this.clobber = function(nodeRef){
+	this.clobber = function (nodeRef) {
 		var na;
 		var tna;
-		if(nodeRef){
+		if (nodeRef) {
 			tna = nodeRef.all || nodeRef.getElementsByTagName("*");
 			na = [nodeRef];
-			for(var x=0; x<tna.length; x++){
-				// if we're gonna be clobbering the thing, at least make sure
-				// we aren't trying to do it twice
-				if(tna[x]["__doClobber__"]){
+			for (var x = 0; x < tna.length; x++) {
+				if (tna[x]["__doClobber__"]) {
 					na.push(tna[x]);
 				}
 			}
-		}else{
-			try{ window.onload = null; }catch(e){}
+		} else {
+			try {
+				window.onload = null;
+			}
+			catch (e) {
+			}
 			na = (this.clobberNodes.length) ? this.clobberNodes : document.all;
 		}
 		tna = null;
 		var basis = {};
-		for(var i = na.length-1; i>=0; i=i-1){
+		for (var i = na.length - 1; i >= 0; i = i - 1) {
 			var el = na[i];
-			try{
-				if(el && el["__clobberAttrs__"]){
-					for(var j=0; j<el.__clobberAttrs__.length; j++){
+			try {
+				if (el && el["__clobberAttrs__"]) {
+					for (var j = 0; j < el.__clobberAttrs__.length; j++) {
 						nukeProp(el, el.__clobberAttrs__[j]);
 					}
 					nukeProp(el, "__clobberAttrs__");
 					nukeProp(el, "__doClobber__");
 				}
-			}catch(e){ /* squelch! */};
+			}
+			catch (e) {
+			}
 		}
 		na = null;
-	}
-}
-
-if(dojo.render.html.ie){
-	dojo.addOnUnload(function(){
+	};
+};
+if (dojo.render.html.ie) {
+	dojo.addOnUnload(function () {
 		dojo._ie_clobber.clobber();
-		try{
-			if((dojo["widget"])&&(dojo.widget["manager"])){
+		try {
+			if ((dojo["widget"]) && (dojo.widget["manager"])) {
 				dojo.widget.manager.destroyAll();
 			}
-		}catch(e){}
-
-		// Workaround for IE leak recommended in ticket #1727 by schallm
-		if(dojo.widget){
-			for(var name in dojo.widget._templateCache){
-				if(dojo.widget._templateCache[name].node){
+		}
+		catch (e) {
+		}
+		if (dojo.widget) {
+			for (var name in dojo.widget._templateCache) {
+				if (dojo.widget._templateCache[name].node) {
 					dojo.dom.destroyNode(dojo.widget._templateCache[name].node);
 					dojo.widget._templateCache[name].node = null;
 					delete dojo.widget._templateCache[name].node;
 				}
 			}
 		}
-
-		try{ window.onload = null; }catch(e){}
-		try{ window.onunload = null; }catch(e){}
+		try {
+			window.onload = null;
+		}
+		catch (e) {
+		}
+		try {
+			window.onunload = null;
+		}
+		catch (e) {
+		}
 		dojo._ie_clobber.clobberNodes = [];
-		// CollectGarbage();
 	});
 }
-
-dojo.event.browser = new function(){
-
+dojo.event.browser = new function () {
 	var clobberIdx = 0;
-
-	this.normalizedEventName = function(/*String*/eventName){
-		switch(eventName){
-			case "CheckboxStateChange":
-			case "DOMAttrModified":
-			case "DOMMenuItemActive":
-			case "DOMMenuItemInactive":
-			case "DOMMouseScroll":
-			case "DOMNodeInserted":
-			case "DOMNodeRemoved":
-			case "RadioStateChange":
-				return eventName;
-				break;
-			default:
-				return eventName.toLowerCase();
-				break;
+	this.normalizedEventName = function (eventName) {
+		switch (eventName) {
+		  case "CheckboxStateChange":
+		  case "DOMAttrModified":
+		  case "DOMMenuItemActive":
+		  case "DOMMenuItemInactive":
+		  case "DOMMouseScroll":
+		  case "DOMNodeInserted":
+		  case "DOMNodeRemoved":
+		  case "RadioStateChange":
+			return eventName;
+			break;
+		  default:
+			var lcn = eventName.toLowerCase();
+			return (lcn.indexOf("on") == 0) ? lcn.substr(2) : lcn;
+			break;
 		}
-	}
-	
-	this.clean = function(/*DOMNode*/node){
-		// summary:
-		//		removes native event handlers so that destruction of the node
-		//		will not leak memory. On most browsers this is a no-op, but
-		//		it's critical for manual node removal on IE.
-		// node:
-		//		A DOM node. All of it's children will also be cleaned.
-		if(dojo.render.html.ie){ 
+	};
+	this.clean = function (node) {
+		if (dojo.render.html.ie) {
 			dojo._ie_clobber.clobber(node);
 		}
-	}
-
-	this.addClobberNode = function(/*DOMNode*/node){
-		// summary:
-		//		register the passed node to support event stripping
-		// node:
-		//		A DOM node
-		if(!dojo.render.html.ie){ return; }
-		if(!node["__doClobber__"]){
+	};
+	this.addClobberNode = function (node) {
+		if (!dojo.render.html.ie) {
+			return;
+		}
+		if (!node["__doClobber__"]) {
 			node.__doClobber__ = true;
 			dojo._ie_clobber.clobberNodes.push(node);
-			// this might not be the most efficient thing to do, but it's
-			// much less error prone than other approaches which were
-			// previously tried and failed
 			node.__clobberAttrs__ = [];
 		}
-	}
-
-	this.addClobberNodeAttrs = function(/*DOMNode*/node, /*Array*/props){
-		// summary:
-		//		register the passed node to support event stripping
-		// node:
-		//		A DOM node to stip properties from later
-		// props:
-		//		A list of propeties to strip from the node
-		if(!dojo.render.html.ie){ return; }
+	};
+	this.addClobberNodeAttrs = function (node, props) {
+		if (!dojo.render.html.ie) {
+			return;
+		}
 		this.addClobberNode(node);
-		for(var x=0; x<props.length; x++){
+		for (var x = 0; x < props.length; x++) {
 			node.__clobberAttrs__.push(props[x]);
 		}
-	}
-
-	this.removeListener = function(	/*DOMNode*/ node, 
-									/*String*/	evtName, 
-									/*Function*/fp, 
-									/*Boolean*/	capture){
-		// summary:
-		//		clobbers the listener from the node
-		// evtName:
-		//		the name of the handler to remove the function from
-		// node:
-		//		DOM node to attach the event to
-		// fp:
-		//		the function to register
-		// capture:
-		//		Optional. should this listener prevent propigation?
-		if(!capture){ var capture = false; }
+	};
+	this.removeListener = function (node, evtName, fp, capture) {
+		if (!capture) {
+			var capture = false;
+		}
 		evtName = dojo.event.browser.normalizedEventName(evtName);
-		if( (evtName == "onkey") || (evtName == "key") ){
-			if(dojo.render.html.ie){
+		if (evtName == "key") {
+			if (dojo.render.html.ie) {
 				this.removeListener(node, "onkeydown", fp, capture);
 			}
-			evtName = "onkeypress";
+			evtName = "keypress";
 		}
-		if(evtName.substr(0,2)=="on"){ evtName = evtName.substr(2); }
-		// FIXME: this is mostly a punt, we aren't actually doing anything on IE
-		if(node.removeEventListener){
+		if (node.removeEventListener) {
 			node.removeEventListener(evtName, fp, capture);
 		}
-	}
-
-	this.addListener = function(/*DOMNode*/node, /*String*/evtName, /*Function*/fp, /*Boolean*/capture, /*Boolean*/dontFix){
-		// summary:
-		//		adds a listener to the node
-		// evtName:
-		//		the name of the handler to add the listener to can be either of
-		//		the form "onclick" or "click"
-		// node:
-		//		DOM node to attach the event to
-		// fp:
-		//		the function to register
-		// capture:
-		//		Optional. Should this listener prevent propigation?
-		// dontFix:
-		//		Optional. Should we avoid registering a new closure around the
-		//		listener to enable fixEvent for dispatch of the registered
-		//		function?
-		if(!node){ return; } // FIXME: log and/or bail?
-		if(!capture){ var capture = false; }
+	};
+	this.addListener = function (node, evtName, fp, capture, dontFix) {
+		if (!node) {
+			return;
+		}
+		if (!capture) {
+			var capture = false;
+		}
 		evtName = dojo.event.browser.normalizedEventName(evtName);
-		if( (evtName == "onkey") || (evtName == "key") ){
-			if(dojo.render.html.ie){
+		if (evtName == "key") {
+			if (dojo.render.html.ie) {
 				this.addListener(node, "onkeydown", fp, capture, dontFix);
 			}
-			evtName = "onkeypress";
+			evtName = "keypress";
 		}
-		if(evtName.substr(0,2)!="on"){ evtName = "on"+evtName; }
-
-		if(!dontFix){
-			// build yet another closure around fp in order to inject fixEvent
-			// around the resulting event
-			var newfp = function(evt){
-				if(!evt){ evt = window.event; }
+		if (!dontFix) {
+			var newfp = function (evt) {
+				if (!evt) {
+					evt = window.event;
+				}
 				var ret = fp(dojo.event.browser.fixEvent(evt, this));
-				if(capture){
+				if (capture) {
 					dojo.event.browser.stopEvent(evt);
 				}
 				return ret;
-			}
-		}else{
+			};
+		} else {
 			newfp = fp;
 		}
-
-		if(node.addEventListener){ 
-			node.addEventListener(evtName.substr(2), newfp, capture);
+		if (node.addEventListener) {
+			node.addEventListener(evtName, newfp, capture);
 			return newfp;
-		}else{
-			if(typeof node[evtName] == "function" ){
+		} else {
+			evtName = "on" + evtName;
+			if (typeof node[evtName] == "function") {
 				var oldEvt = node[evtName];
-				node[evtName] = function(e){
+				node[evtName] = function (e) {
 					oldEvt(e);
 					return newfp(e);
-				}
-			}else{
-				node[evtName]=newfp;
+				};
+			} else {
+				node[evtName] = newfp;
 			}
-			if(dojo.render.html.ie){
+			if (dojo.render.html.ie) {
 				this.addClobberNodeAttrs(node, [evtName]);
 			}
 			return newfp;
 		}
-	}
-
-	this.isEvent = function(/*Object*/obj){
-		// summary: 
-		//		Tries to determine whether or not the object is a DOM event.
-
-		// FIXME: event detection hack ... could test for additional attributes
-		// if necessary
-		return (typeof obj != "undefined")&&(obj)&&(typeof Event != "undefined")&&(obj.eventPhase); // Boolean
-		// Event does not support instanceof in Opera, otherwise:
-		//return (typeof Event != "undefined")&&(obj instanceof Event);
-	}
-
+	};
+	this.isEvent = function (obj) {
+		return (typeof obj != "undefined") && (obj) && (typeof Event != "undefined") && (obj.eventPhase);
+	};
 	this.currentEvent = null;
-	
-	this.callListener = function(/*Function*/listener, /*DOMNode*/curTarget){
-		// summary:
-		//		calls the specified listener in the context of the passed node
-		//		with the current DOM event object as the only parameter
-		// listener:
-		//		the function to call
-		// curTarget:
-		//		the Node to call the function in the scope of
-		if(typeof listener != 'function'){
+	this.callListener = function (listener, curTarget) {
+		if (typeof listener != "function") {
 			dojo.raise("listener not a function: " + listener);
 		}
 		dojo.event.browser.currentEvent.currentTarget = curTarget;
 		return listener.call(curTarget, dojo.event.browser.currentEvent);
-	}
-
-	this._stopPropagation = function(){
-		dojo.event.browser.currentEvent.cancelBubble = true; 
-	}
-
-	this._preventDefault = function(){
+	};
+	this._stopPropagation = function () {
+		dojo.event.browser.currentEvent.cancelBubble = true;
+	};
+	this._preventDefault = function () {
 		dojo.event.browser.currentEvent.returnValue = false;
-	}
-
-	this.keys = {
-		KEY_BACKSPACE: 8,
-		KEY_TAB: 9,
-		KEY_CLEAR: 12,
-		KEY_ENTER: 13,
-		KEY_SHIFT: 16,
-		KEY_CTRL: 17,
-		KEY_ALT: 18,
-		KEY_PAUSE: 19,
-		KEY_CAPS_LOCK: 20,
-		KEY_ESCAPE: 27,
-		KEY_SPACE: 32,
-		KEY_PAGE_UP: 33,
-		KEY_PAGE_DOWN: 34,
-		KEY_END: 35,
-		KEY_HOME: 36,
-		KEY_LEFT_ARROW: 37,
-		KEY_UP_ARROW: 38,
-		KEY_RIGHT_ARROW: 39,
-		KEY_DOWN_ARROW: 40,
-		KEY_INSERT: 45,
-		KEY_DELETE: 46,
-		KEY_HELP: 47,
-		KEY_LEFT_WINDOW: 91,
-		KEY_RIGHT_WINDOW: 92,
-		KEY_SELECT: 93,
-		KEY_NUMPAD_0: 96,
-		KEY_NUMPAD_1: 97,
-		KEY_NUMPAD_2: 98,
-		KEY_NUMPAD_3: 99,
-		KEY_NUMPAD_4: 100,
-		KEY_NUMPAD_5: 101,
-		KEY_NUMPAD_6: 102,
-		KEY_NUMPAD_7: 103,
-		KEY_NUMPAD_8: 104,
-		KEY_NUMPAD_9: 105,
-		KEY_NUMPAD_MULTIPLY: 106,
-		KEY_NUMPAD_PLUS: 107,
-		KEY_NUMPAD_ENTER: 108,
-		KEY_NUMPAD_MINUS: 109,
-		KEY_NUMPAD_PERIOD: 110,
-		KEY_NUMPAD_DIVIDE: 111,
-		KEY_F1: 112,
-		KEY_F2: 113,
-		KEY_F3: 114,
-		KEY_F4: 115,
-		KEY_F5: 116,
-		KEY_F6: 117,
-		KEY_F7: 118,
-		KEY_F8: 119,
-		KEY_F9: 120,
-		KEY_F10: 121,
-		KEY_F11: 122,
-		KEY_F12: 123,
-		KEY_F13: 124,
-		KEY_F14: 125,
-		KEY_F15: 126,
-		KEY_NUM_LOCK: 144,
-		KEY_SCROLL_LOCK: 145
 	};
-
-	// reverse lookup
+	this.keys = {KEY_BACKSPACE:8, KEY_TAB:9, KEY_CLEAR:12, KEY_ENTER:13, KEY_SHIFT:16, KEY_CTRL:17, KEY_ALT:18, KEY_PAUSE:19, KEY_CAPS_LOCK:20, KEY_ESCAPE:27, KEY_SPACE:32, KEY_PAGE_UP:33, KEY_PAGE_DOWN:34, KEY_END:35, KEY_HOME:36, KEY_LEFT_ARROW:37, KEY_UP_ARROW:38, KEY_RIGHT_ARROW:39, KEY_DOWN_ARROW:40, KEY_INSERT:45, KEY_DELETE:46, KEY_HELP:47, KEY_LEFT_WINDOW:91, KEY_RIGHT_WINDOW:92, KEY_SELECT:93, KEY_NUMPAD_0:96, KEY_NUMPAD_1:97, KEY_NUMPAD_2:98, KEY_NUMPAD_3:99, KEY_NUMPAD_4:100, KEY_NUMPAD_5:101, KEY_NUMPAD_6:102, KEY_NUMPAD_7:103, KEY_NUMPAD_8:104, KEY_NUMPAD_9:105, KEY_NUMPAD_MULTIPLY:106, KEY_NUMPAD_PLUS:107, KEY_NUMPAD_ENTER:108, KEY_NUMPAD_MINUS:109, KEY_NUMPAD_PERIOD:110, KEY_NUMPAD_DIVIDE:111, KEY_F1:112, KEY_F2:113, KEY_F3:114, KEY_F4:115, KEY_F5:116, KEY_F6:117, KEY_F7:118, KEY_F8:119, KEY_F9:120, KEY_F10:121, KEY_F11:122, KEY_F12:123, KEY_F13:124, KEY_F14:125, KEY_F15:126, KEY_NUM_LOCK:144, KEY_SCROLL_LOCK:145};
 	this.revKeys = [];
-	for(var key in this.keys){
+	for (var key in this.keys) {
 		this.revKeys[this.keys[key]] = key;
 	}
-
-	this.fixEvent = function(/*Event*/evt, /*DOMNode*/sender){
-		// summary:
-		//		normalizes properties on the event object including event
-		//		bubbling methods, keystroke normalization, and x/y positions
-		// evt: the native event object
-		// sender: the node to treat as "currentTarget"
-		if(!evt){
-			if(window["event"]){
+	this.fixEvent = function (evt, sender) {
+		if (!evt) {
+			if (window["event"]) {
 				evt = window.event;
 			}
 		}
-		
-		if((evt["type"])&&(evt["type"].indexOf("key") == 0)){ // key events
+		if ((evt["type"]) && (evt["type"].indexOf("key") == 0)) {
 			evt.keys = this.revKeys;
-			// FIXME: how can we eliminate this iteration?
-			for(var key in this.keys){
+			for (var key in this.keys) {
 				evt[key] = this.keys[key];
 			}
-			if(evt["type"] == "keydown" && dojo.render.html.ie){
-				switch(evt.keyCode){
-					case evt.KEY_SHIFT:
-					case evt.KEY_CTRL:
-					case evt.KEY_ALT:
-					case evt.KEY_CAPS_LOCK:
-					case evt.KEY_LEFT_WINDOW:
-					case evt.KEY_RIGHT_WINDOW:
-					case evt.KEY_SELECT:
-					case evt.KEY_NUM_LOCK:
-					case evt.KEY_SCROLL_LOCK:
-					// I'll get these in keypress after the OS munges them based on numlock
-					case evt.KEY_NUMPAD_0:
-					case evt.KEY_NUMPAD_1:
-					case evt.KEY_NUMPAD_2:
-					case evt.KEY_NUMPAD_3:
-					case evt.KEY_NUMPAD_4:
-					case evt.KEY_NUMPAD_5:
-					case evt.KEY_NUMPAD_6:
-					case evt.KEY_NUMPAD_7:
-					case evt.KEY_NUMPAD_8:
-					case evt.KEY_NUMPAD_9:
-					case evt.KEY_NUMPAD_PERIOD:
-						break; // just ignore the keys that can morph
-					case evt.KEY_NUMPAD_MULTIPLY:
-					case evt.KEY_NUMPAD_PLUS:
-					case evt.KEY_NUMPAD_ENTER:
-					case evt.KEY_NUMPAD_MINUS:
-					case evt.KEY_NUMPAD_DIVIDE:
-						break; // I could handle these but just pick them up in keypress
-					case evt.KEY_PAUSE:
-					case evt.KEY_TAB:
-					case evt.KEY_BACKSPACE:
-					case evt.KEY_ENTER:
-					case evt.KEY_ESCAPE:
-					case evt.KEY_PAGE_UP:
-					case evt.KEY_PAGE_DOWN:
-					case evt.KEY_END:
-					case evt.KEY_HOME:
-					case evt.KEY_LEFT_ARROW:
-					case evt.KEY_UP_ARROW:
-					case evt.KEY_RIGHT_ARROW:
-					case evt.KEY_DOWN_ARROW:
-					case evt.KEY_INSERT:
-					case evt.KEY_DELETE:
-					case evt.KEY_F1:
-					case evt.KEY_F2:
-					case evt.KEY_F3:
-					case evt.KEY_F4:
-					case evt.KEY_F5:
-					case evt.KEY_F6:
-					case evt.KEY_F7:
-					case evt.KEY_F8:
-					case evt.KEY_F9:
-					case evt.KEY_F10:
-					case evt.KEY_F11:
-					case evt.KEY_F12:
-					case evt.KEY_F12:
-					case evt.KEY_F13:
-					case evt.KEY_F14:
-					case evt.KEY_F15:
-					case evt.KEY_CLEAR:
-					case evt.KEY_HELP:
-						evt.key = evt.keyCode;
-						break;
-					default:
-						if(evt.ctrlKey || evt.altKey){
-							var unifiedCharCode = evt.keyCode;
-							// if lower case but keycode is uppercase, convert it
-							if(unifiedCharCode >= 65 && unifiedCharCode <= 90 && evt.shiftKey == false){
-								unifiedCharCode += 32;
-							}
-							if(unifiedCharCode >= 1 && unifiedCharCode <= 26 && evt.ctrlKey){
-								unifiedCharCode += 96; // 001-032 = ctrl+[a-z]
-							}
-							evt.key = String.fromCharCode(unifiedCharCode);
+			if (evt["type"] == "keydown" && dojo.render.html.ie) {
+				switch (evt.keyCode) {
+				  case evt.KEY_SHIFT:
+				  case evt.KEY_CTRL:
+				  case evt.KEY_ALT:
+				  case evt.KEY_CAPS_LOCK:
+				  case evt.KEY_LEFT_WINDOW:
+				  case evt.KEY_RIGHT_WINDOW:
+				  case evt.KEY_SELECT:
+				  case evt.KEY_NUM_LOCK:
+				  case evt.KEY_SCROLL_LOCK:
+				  case evt.KEY_NUMPAD_0:
+				  case evt.KEY_NUMPAD_1:
+				  case evt.KEY_NUMPAD_2:
+				  case evt.KEY_NUMPAD_3:
+				  case evt.KEY_NUMPAD_4:
+				  case evt.KEY_NUMPAD_5:
+				  case evt.KEY_NUMPAD_6:
+				  case evt.KEY_NUMPAD_7:
+				  case evt.KEY_NUMPAD_8:
+				  case evt.KEY_NUMPAD_9:
+				  case evt.KEY_NUMPAD_PERIOD:
+					break;
+				  case evt.KEY_NUMPAD_MULTIPLY:
+				  case evt.KEY_NUMPAD_PLUS:
+				  case evt.KEY_NUMPAD_ENTER:
+				  case evt.KEY_NUMPAD_MINUS:
+				  case evt.KEY_NUMPAD_DIVIDE:
+					break;
+				  case evt.KEY_PAUSE:
+				  case evt.KEY_TAB:
+				  case evt.KEY_BACKSPACE:
+				  case evt.KEY_ENTER:
+				  case evt.KEY_ESCAPE:
+				  case evt.KEY_PAGE_UP:
+				  case evt.KEY_PAGE_DOWN:
+				  case evt.KEY_END:
+				  case evt.KEY_HOME:
+				  case evt.KEY_LEFT_ARROW:
+				  case evt.KEY_UP_ARROW:
+				  case evt.KEY_RIGHT_ARROW:
+				  case evt.KEY_DOWN_ARROW:
+				  case evt.KEY_INSERT:
+				  case evt.KEY_DELETE:
+				  case evt.KEY_F1:
+				  case evt.KEY_F2:
+				  case evt.KEY_F3:
+				  case evt.KEY_F4:
+				  case evt.KEY_F5:
+				  case evt.KEY_F6:
+				  case evt.KEY_F7:
+				  case evt.KEY_F8:
+				  case evt.KEY_F9:
+				  case evt.KEY_F10:
+				  case evt.KEY_F11:
+				  case evt.KEY_F12:
+				  case evt.KEY_F12:
+				  case evt.KEY_F13:
+				  case evt.KEY_F14:
+				  case evt.KEY_F15:
+				  case evt.KEY_CLEAR:
+				  case evt.KEY_HELP:
+					evt.key = evt.keyCode;
+					break;
+				  default:
+					if (evt.ctrlKey || evt.altKey) {
+						var unifiedCharCode = evt.keyCode;
+						if (unifiedCharCode >= 65 && unifiedCharCode <= 90 && evt.shiftKey == false) {
+							unifiedCharCode += 32;
 						}
+						if (unifiedCharCode >= 1 && unifiedCharCode <= 26 && evt.ctrlKey) {
+							unifiedCharCode += 96;
+						}
+						evt.key = String.fromCharCode(unifiedCharCode);
+					}
 				}
-			} else if(evt["type"] == "keypress"){
-				if(dojo.render.html.opera){
-					if(evt.which == 0){
-						evt.key = evt.keyCode;
-					}else if(evt.which > 0){
-						switch(evt.which){
-							case evt.KEY_SHIFT:
-							case evt.KEY_CTRL:
-							case evt.KEY_ALT:
-							case evt.KEY_CAPS_LOCK:
-							case evt.KEY_NUM_LOCK:
-							case evt.KEY_SCROLL_LOCK:
-								break;
-							case evt.KEY_PAUSE:
-							case evt.KEY_TAB:
-							case evt.KEY_BACKSPACE:
-							case evt.KEY_ENTER:
-							case evt.KEY_ESCAPE:
-								evt.key = evt.which;
-								break;
-							default:
-								var unifiedCharCode = evt.which;
-								if((evt.ctrlKey || evt.altKey || evt.metaKey) && (evt.which >= 65 && evt.which <= 90 && evt.shiftKey == false)){
-									unifiedCharCode += 32;
+			} else {
+				if (evt["type"] == "keypress") {
+					if (dojo.render.html.opera) {
+						if (evt.which == 0) {
+							evt.key = evt.keyCode;
+						} else {
+							if (evt.which > 0) {
+								switch (evt.which) {
+								  case evt.KEY_SHIFT:
+								  case evt.KEY_CTRL:
+								  case evt.KEY_ALT:
+								  case evt.KEY_CAPS_LOCK:
+								  case evt.KEY_NUM_LOCK:
+								  case evt.KEY_SCROLL_LOCK:
+									break;
+								  case evt.KEY_PAUSE:
+								  case evt.KEY_TAB:
+								  case evt.KEY_BACKSPACE:
+								  case evt.KEY_ENTER:
+								  case evt.KEY_ESCAPE:
+									evt.key = evt.which;
+									break;
+								  default:
+									var unifiedCharCode = evt.which;
+									if ((evt.ctrlKey || evt.altKey || evt.metaKey) && (evt.which >= 65 && evt.which <= 90 && evt.shiftKey == false)) {
+										unifiedCharCode += 32;
+									}
+									evt.key = String.fromCharCode(unifiedCharCode);
 								}
-								evt.key = String.fromCharCode(unifiedCharCode);
+							}
 						}
+					} else {
+						if (dojo.render.html.ie) {
+							if (!evt.ctrlKey && !evt.altKey && evt.keyCode >= evt.KEY_SPACE) {
+								evt.key = String.fromCharCode(evt.keyCode);
+							}
+						} else {
+							if (dojo.render.html.safari) {
+								switch (evt.keyCode) {
+								  case 25:
+									evt.key = evt.KEY_TAB;
+									evt.shift = true;
+									break;
+								  case 63232:
+									evt.key = evt.KEY_UP_ARROW;
+									break;
+								  case 63233:
+									evt.key = evt.KEY_DOWN_ARROW;
+									break;
+								  case 63234:
+									evt.key = evt.KEY_LEFT_ARROW;
+									break;
+								  case 63235:
+									evt.key = evt.KEY_RIGHT_ARROW;
+									break;
+								  case 63236:
+									evt.key = evt.KEY_F1;
+									break;
+								  case 63237:
+									evt.key = evt.KEY_F2;
+									break;
+								  case 63238:
+									evt.key = evt.KEY_F3;
+									break;
+								  case 63239:
+									evt.key = evt.KEY_F4;
+									break;
+								  case 63240:
+									evt.key = evt.KEY_F5;
+									break;
+								  case 63241:
+									evt.key = evt.KEY_F6;
+									break;
+								  case 63242:
+									evt.key = evt.KEY_F7;
+									break;
+								  case 63243:
+									evt.key = evt.KEY_F8;
+									break;
+								  case 63244:
+									evt.key = evt.KEY_F9;
+									break;
+								  case 63245:
+									evt.key = evt.KEY_F10;
+									break;
+								  case 63246:
+									evt.key = evt.KEY_F11;
+									break;
+								  case 63247:
+									evt.key = evt.KEY_F12;
+									break;
+								  case 63250:
+									evt.key = evt.KEY_PAUSE;
+									break;
+								  case 63272:
+									evt.key = evt.KEY_DELETE;
+									break;
+								  case 63273:
+									evt.key = evt.KEY_HOME;
+									break;
+								  case 63275:
+									evt.key = evt.KEY_END;
+									break;
+								  case 63276:
+									evt.key = evt.KEY_PAGE_UP;
+									break;
+								  case 63277:
+									evt.key = evt.KEY_PAGE_DOWN;
+									break;
+								  case 63302:
+									evt.key = evt.KEY_INSERT;
+									break;
+								  case 63248:
+								  case 63249:
+								  case 63289:
+									break;
+								  default:
+									evt.key = evt.charCode >= evt.KEY_SPACE ? String.fromCharCode(evt.charCode) : evt.keyCode;
+								}
+							} else {
+								evt.key = evt.charCode > 0 ? String.fromCharCode(evt.charCode) : evt.keyCode;
+							}
+						}
 					}
-				}else if(dojo.render.html.ie){ // catch some IE keys that are hard to get in keyDown
-					// key combinations were handled in onKeyDown
-					if(!evt.ctrlKey && !evt.altKey && evt.keyCode >= evt.KEY_SPACE){
-						evt.key = String.fromCharCode(evt.keyCode);
-					}
-				}else if(dojo.render.html.safari){
-					switch(evt.keyCode){
-						case 25: evt.key = evt.KEY_TAB; evt.shift = true;break;
-						case 63232: evt.key = evt.KEY_UP_ARROW; break;
-						case 63233: evt.key = evt.KEY_DOWN_ARROW; break;
-						case 63234: evt.key = evt.KEY_LEFT_ARROW; break;
-						case 63235: evt.key = evt.KEY_RIGHT_ARROW; break;
-						case 63236: evt.key = evt.KEY_F1; break;
-						case 63237: evt.key = evt.KEY_F2; break;
-						case 63238: evt.key = evt.KEY_F3; break;
-						case 63239: evt.key = evt.KEY_F4; break;
-						case 63240: evt.key = evt.KEY_F5; break;
-						case 63241: evt.key = evt.KEY_F6; break;
-						case 63242: evt.key = evt.KEY_F7; break;
-						case 63243: evt.key = evt.KEY_F8; break;
-						case 63244: evt.key = evt.KEY_F9; break;
-						case 63245: evt.key = evt.KEY_F10; break;
-						case 63246: evt.key = evt.KEY_F11; break;
-						case 63247: evt.key = evt.KEY_F12; break;
-						case 63250: evt.key = evt.KEY_PAUSE; break;
-						case 63272: evt.key = evt.KEY_DELETE; break;
-						case 63273: evt.key = evt.KEY_HOME; break;
-						case 63275: evt.key = evt.KEY_END; break;
-						case 63276: evt.key = evt.KEY_PAGE_UP; break;
-						case 63277: evt.key = evt.KEY_PAGE_DOWN; break;
-						case 63302: evt.key = evt.KEY_INSERT; break;
-						case 63248://prtscr
-						case 63249://scrolllock
-						case 63289://numlock
-							break;
-						default: 
-							evt.key = evt.charCode >= evt.KEY_SPACE ? String.fromCharCode(evt.charCode) : evt.keyCode;
-					}
-				}else{
-					evt.key = evt.charCode > 0 ? String.fromCharCode(evt.charCode) : evt.keyCode;
 				}
 			}
 		}
-		if(dojo.render.html.ie){
-			if(!evt.target){ evt.target = evt.srcElement; }
-			if(!evt.currentTarget){ evt.currentTarget = (sender ? sender : evt.srcElement); }
-			if(!evt.layerX){ evt.layerX = evt.offsetX; }
-			if(!evt.layerY){ evt.layerY = evt.offsetY; }
-			// FIXME: scroll position query is duped from dojo.html to avoid dependency on that entire module
-			// DONOT replace the following to use dojo.body(), in IE, document.documentElement should be used
-			// here rather than document.body
+		if (dojo.render.html.ie) {
+			if (!evt.target) {
+				evt.target = evt.srcElement;
+			}
+			if (!evt.currentTarget) {
+				evt.currentTarget = (sender ? sender : evt.srcElement);
+			}
+			if (!evt.layerX) {
+				evt.layerX = evt.offsetX;
+			}
+			if (!evt.layerY) {
+				evt.layerY = evt.offsetY;
+			}
 			var doc = (evt.srcElement && evt.srcElement.ownerDocument) ? evt.srcElement.ownerDocument : document;
-			var docBody = ((dojo.render.html.ie55)||(doc["compatMode"] == "BackCompat")) ? doc.body : doc.documentElement;
-			if(!evt.pageX){ evt.pageX = evt.clientX + (docBody.scrollLeft || 0) }
-			if(!evt.pageY){ evt.pageY = evt.clientY + (docBody.scrollTop || 0) }
-			// mouseover
-			if(evt.type == "mouseover"){ evt.relatedTarget = evt.fromElement; }
-			// mouseout
-			if(evt.type == "mouseout"){ evt.relatedTarget = evt.toElement; }
+			var docBody = ((dojo.render.html.ie55) || (doc["compatMode"] == "BackCompat")) ? doc.body : doc.documentElement;
+			if (!evt.pageX) {
+				evt.pageX = evt.clientX + (docBody.scrollLeft || 0);
+			}
+			if (!evt.pageY) {
+				evt.pageY = evt.clientY + (docBody.scrollTop || 0);
+			}
+			if (evt.type == "mouseover") {
+				evt.relatedTarget = evt.fromElement;
+			}
+			if (evt.type == "mouseout") {
+				evt.relatedTarget = evt.toElement;
+			}
 			this.currentEvent = evt;
 			evt.callListener = this.callListener;
 			evt.stopPropagation = this._stopPropagation;
 			evt.preventDefault = this._preventDefault;
 		}
-		return evt; // Event
-	}
-
-	this.stopEvent = function(/*Event*/evt){
-		// summary:
-		//		prevents propigation and clobbers the default action of the
-		//		passed event
-		// evt: Optional for IE. The native event object.
-		if(window.event){
+		return evt;
+	};
+	this.stopEvent = function (evt) {
+		if (window.event) {
 			evt.cancelBubble = true;
 			evt.returnValue = false;
-		}else{
+		} else {
 			evt.preventDefault();
 			evt.stopPropagation();
 		}
-	}
-}
+	};
+};
 
+
 __CPAN_FILE__ src/event/topic.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -16618,196 +11725,72 @@
 
 dojo.require("dojo.event.common");
 dojo.provide("dojo.event.topic");
-
-dojo.event.topic = new function(){
+dojo.event.topic = new function () {
 	this.topics = {};
-
-	this.getTopic = function(/*String*/topic){
-		// summary:
-		//		returns a topic implementation object of type
-		//		dojo.event.topic.TopicImpl
-		// topic:
-		//		a unique, opaque string that names the topic
-		if(!this.topics[topic]){
+	this.getTopic = function (topic) {
+		if (!this.topics[topic]) {
 			this.topics[topic] = new this.TopicImpl(topic);
 		}
-		return this.topics[topic]; // a dojo.event.topic.TopicImpl object
-	}
-
-	this.registerPublisher = function(/*String*/topic, /*Object*/obj, /*String*/funcName){
-		// summary:
-		//		registers a function as a publisher on a topic. Subsequent
-		//		calls to the function will cause a publish event on the topic
-		//		with the arguments passed to the function passed to registered
-		//		listeners.
-		// topic: 
-		//		a unique, opaque string that names the topic
-		// obj:
-		//		the scope to locate the function in
-		// funcName:
-		//		the name of the function to register
+		return this.topics[topic];
+	};
+	this.registerPublisher = function (topic, obj, funcName) {
 		var topic = this.getTopic(topic);
 		topic.registerPublisher(obj, funcName);
-	}
-
-	this.subscribe = function(/*String*/topic, /*Object*/obj, /*String*/funcName){
-		// summary:
-		//		susbscribes the function to the topic. Subsequent events
-		//		dispached to the topic will create a function call for the
-		//		obj.funcName() function.
-		// topic: 
-		//		a unique, opaque string that names the topic
-		// obj:
-		//		the scope to locate the function in
-		// funcName:
-		//		the name of the function to being registered as a listener
+	};
+	this.subscribe = function (topic, obj, funcName) {
 		var topic = this.getTopic(topic);
 		topic.subscribe(obj, funcName);
-	}
-
-	this.unsubscribe = function(/*String*/topic, /*Object*/obj, /*String*/funcName){
-		// summary:
-		//		unsubscribes the obj.funcName() from the topic
-		// topic: 
-		//		a unique, opaque string that names the topic
-		// obj:
-		//		the scope to locate the function in
-		// funcName:
-		//		the name of the function to being unregistered as a listener
+	};
+	this.unsubscribe = function (topic, obj, funcName) {
 		var topic = this.getTopic(topic);
 		topic.unsubscribe(obj, funcName);
-	}
-
-	this.destroy = function(/*String*/topic){
-		// summary: 
-		//		destroys the topic and unregisters all listeners
-		// topic:
-		//		a unique, opaque string that names the topic
+	};
+	this.destroy = function (topic) {
 		this.getTopic(topic).destroy();
 		delete this.topics[topic];
-	}
-
-	this.publishApply = function(/*String*/topic, /*Array*/args){
-		// summary: 
-		//		dispatches an event to the topic using the args array as the
-		//		source for the call arguments to each listener. This is similar
-		//		to JavaScript's built-in Function.apply()
-		// topic:
-		//		a unique, opaque string that names the topic
-		// args:
-		//		the arguments to be passed into listeners of the topic
+	};
+	this.publishApply = function (topic, args) {
 		var topic = this.getTopic(topic);
 		topic.sendMessage.apply(topic, args);
-	}
-
-	this.publish = function(/*String*/topic, /*Object*/message){
-		// summary: 
-		//		manually "publish" to the passed topic
-		// topic:
-		//		a unique, opaque string that names the topic
-		// message:
-		//		can be an array of parameters (similar to publishApply), or
-		//		will be treated as one of many arguments to be passed along in
-		//		a "flat" unrolling
+	};
+	this.publish = function (topic, message) {
 		var topic = this.getTopic(topic);
-		// if message is an array, we treat it as a set of arguments,
-		// otherwise, we just pass on the arguments passed in as-is
 		var args = [];
-		// could we use concat instead here?
-		for(var x=1; x<arguments.length; x++){
+		for (var x = 1; x < arguments.length; x++) {
 			args.push(arguments[x]);
 		}
 		topic.sendMessage.apply(topic, args);
-	}
-}
-
-dojo.event.topic.TopicImpl = function(topicName){
-	// summary: a class to represent topics
-
+	};
+};
+dojo.event.topic.TopicImpl = function (topicName) {
 	this.topicName = topicName;
-
-	this.subscribe = function(/*Object*/listenerObject, /*Function or String*/listenerMethod){
-		// summary:
-		//		use dojo.event.connect() to attach the passed listener to the
-		//		topic represented by this object
-		// listenerObject:
-		//		if a string and listenerMethod is ommitted, this is treated as
-		//		the name of a function in the global namespace. If
-		//		listenerMethod is provided, this is the scope to find/execute
-		//		the function in.
-		// listenerMethod:
-		//		Optional. The function to register.
-		var tf = listenerMethod||listenerObject;
+	this.subscribe = function (listenerObject, listenerMethod) {
+		var tf = listenerMethod || listenerObject;
 		var to = (!listenerMethod) ? dj_global : listenerObject;
-		return dojo.event.kwConnect({ // dojo.event.MethodJoinPoint
-			srcObj:		this, 
-			srcFunc:	"sendMessage", 
-			adviceObj:	to,
-			adviceFunc: tf
-		});
-	}
-
-	this.unsubscribe = function(/*Object*/listenerObject, /*Function or String*/listenerMethod){
-		// summary:
-		//		use dojo.event.disconnect() to attach the passed listener to the
-		//		topic represented by this object
-		// listenerObject:
-		//		if a string and listenerMethod is ommitted, this is treated as
-		//		the name of a function in the global namespace. If
-		//		listenerMethod is provided, this is the scope to find the
-		//		function in.
-		// listenerMethod:
-		//		Optional. The function to unregister.
+		return dojo.event.kwConnect({srcObj:this, srcFunc:"sendMessage", adviceObj:to, adviceFunc:tf});
+	};
+	this.unsubscribe = function (listenerObject, listenerMethod) {
 		var tf = (!listenerMethod) ? listenerObject : listenerMethod;
 		var to = (!listenerMethod) ? null : listenerObject;
-		return dojo.event.kwDisconnect({ // dojo.event.MethodJoinPoint
-			srcObj:		this, 
-			srcFunc:	"sendMessage", 
-			adviceObj:	to,
-			adviceFunc: tf
-		});
-	}
-
-	this._getJoinPoint = function(){
+		return dojo.event.kwDisconnect({srcObj:this, srcFunc:"sendMessage", adviceObj:to, adviceFunc:tf});
+	};
+	this._getJoinPoint = function () {
 		return dojo.event.MethodJoinPoint.getForMethod(this, "sendMessage");
-	}
-
-	this.setSquelch = function(/*Boolean*/shouldSquelch){
-		// summary: 
-		//		determine whether or not exceptions in the calling of a
-		//		listener in the chain should stop execution of the chain.
+	};
+	this.setSquelch = function (shouldSquelch) {
 		this._getJoinPoint().squelch = shouldSquelch;
-	}
-
-	this.destroy = function(){
-		// summary: disconnects all listeners from this topic
+	};
+	this.destroy = function () {
 		this._getJoinPoint().disconnect();
-	}
-
-	this.registerPublisher = function(	/*Object*/publisherObject, 
-										/*Function or String*/publisherMethod){
-		// summary:
-		//		registers the passed function as a publisher on this topic.
-		//		Each time the function is called, an event will be published on
-		//		this topic.
-		// publisherObject:
-		//		if a string and listenerMethod is ommitted, this is treated as
-		//		the name of a function in the global namespace. If
-		//		listenerMethod is provided, this is the scope to find the
-		//		function in.
-		// publisherMethod:
-		//		Optional. The function to register.
+	};
+	this.registerPublisher = function (publisherObject, publisherMethod) {
 		dojo.event.connect(publisherObject, publisherMethod, this, "sendMessage");
-	}
+	};
+	this.sendMessage = function (message) {
+	};
+};
 
-	this.sendMessage = function(message){
-		// summary: a stub to be called when a message is sent to the topic.
 
-		// The message has been propagated
-	}
-}
-
-
 __CPAN_FILE__ src/event/common.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -16820,881 +11803,547 @@
 */
 
 dojo.provide("dojo.event.common");
-
 dojo.require("dojo.lang.array");
 dojo.require("dojo.lang.extras");
 dojo.require("dojo.lang.func");
-
-// TODO: connection filter functions
-//			these are functions that accept a method invocation (like around
-//			advice) and return a boolean based on it. That value determines
-//			whether or not the connection proceeds. It could "feel" like around
-//			advice for those who know what it is (calling proceed() or not),
-//			but I think presenting it as a "filter" and/or calling it with the
-//			function args and not the MethodInvocation might make it more
-//			palletable to "normal" users than around-advice currently is
-// TODO: execution scope mangling
-//			YUI's event facility by default executes listeners in the context
-//			of the source object. This is very odd, but should probably be
-//			supported as an option (both for the source and for the dest). It
-//			can be thought of as a connection-specific hitch().
-// TODO: more resiliency for 4+ arguments to connect()
-
-dojo.event = new function(){
-	this._canTimeout = dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-
-	// FIXME: where should we put this method (not here!)?
-	function interpolateArgs(args, searchForNames){
+dojo.event = new function () {
+	this._canTimeout = dojo.lang.isFunction(dj_global["setTimeout"]) || dojo.lang.isAlien(dj_global["setTimeout"]);
+	function interpolateArgs(args, searchForNames) {
 		var dl = dojo.lang;
-		var ao = {
-			srcObj: dj_global,
-			srcFunc: null,
-			adviceObj: dj_global,
-			adviceFunc: null,
-			aroundObj: null,
-			aroundFunc: null,
-			adviceType: (args.length>2) ? args[0] : "after",
-			precedence: "last",
-			once: false,
-			delay: null,
-			rate: 0,
-			adviceMsg: false
-		};
-
-		switch(args.length){
-			case 0: return;
-			case 1: return;
-			case 2:
-				ao.srcFunc = args[0];
-				ao.adviceFunc = args[1];
-				break;
-			case 3:
-				if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isString(args[2]))){
-					ao.adviceType = "after";
-					ao.srcObj = args[0];
+		var ao = {srcObj:dj_global, srcFunc:null, adviceObj:dj_global, adviceFunc:null, aroundObj:null, aroundFunc:null, adviceType:(args.length > 2) ? args[0] : "after", precedence:"last", once:false, delay:null, rate:0, adviceMsg:false, maxCalls:-1};
+		switch (args.length) {
+		  case 0:
+			return;
+		  case 1:
+			return;
+		  case 2:
+			ao.srcFunc = args[0];
+			ao.adviceFunc = args[1];
+			break;
+		  case 3:
+			if ((dl.isObject(args[0])) && (dl.isString(args[1])) && (dl.isString(args[2]))) {
+				ao.adviceType = "after";
+				ao.srcObj = args[0];
+				ao.srcFunc = args[1];
+				ao.adviceFunc = args[2];
+			} else {
+				if ((dl.isString(args[1])) && (dl.isString(args[2]))) {
 					ao.srcFunc = args[1];
 					ao.adviceFunc = args[2];
-				}else if((dl.isString(args[1]))&&(dl.isString(args[2]))){
-					ao.srcFunc = args[1];
-					ao.adviceFunc = args[2];
-				}else if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isFunction(args[2]))){
-					ao.adviceType = "after";
-					ao.srcObj = args[0];
-					ao.srcFunc = args[1];
-					var tmpName  = dl.nameAnonFunc(args[2], ao.adviceObj, searchForNames);
-					ao.adviceFunc = tmpName;
-				}else if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
-					ao.adviceType = "after";
-					ao.srcObj = dj_global;
-					var tmpName  = dl.nameAnonFunc(args[0], ao.srcObj, searchForNames);
-					ao.srcFunc = tmpName;
-					ao.adviceObj = args[1];
-					ao.adviceFunc = args[2];
+				} else {
+					if ((dl.isObject(args[0])) && (dl.isString(args[1])) && (dl.isFunction(args[2]))) {
+						ao.adviceType = "after";
+						ao.srcObj = args[0];
+						ao.srcFunc = args[1];
+						var tmpName = dl.nameAnonFunc(args[2], ao.adviceObj, searchForNames);
+						ao.adviceFunc = tmpName;
+					} else {
+						if ((dl.isFunction(args[0])) && (dl.isObject(args[1])) && (dl.isString(args[2]))) {
+							ao.adviceType = "after";
+							ao.srcObj = dj_global;
+							var tmpName = dl.nameAnonFunc(args[0], ao.srcObj, searchForNames);
+							ao.srcFunc = tmpName;
+							ao.adviceObj = args[1];
+							ao.adviceFunc = args[2];
+						}
+					}
 				}
-				break;
-			case 4:
-				if((dl.isObject(args[0]))&&(dl.isObject(args[2]))){
-					// we can assume that we've got an old-style "connect" from
-					// the sigslot school of event attachment. We therefore
-					// assume after-advice.
-					ao.adviceType = "after";
-					ao.srcObj = args[0];
-					ao.srcFunc = args[1];
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else if((dl.isString(args[0]))&&(dl.isString(args[1]))&&(dl.isObject(args[2]))){
+			}
+			break;
+		  case 4:
+			if ((dl.isObject(args[0])) && (dl.isObject(args[2]))) {
+				ao.adviceType = "after";
+				ao.srcObj = args[0];
+				ao.srcFunc = args[1];
+				ao.adviceObj = args[2];
+				ao.adviceFunc = args[3];
+			} else {
+				if ((dl.isString(args[0])) && (dl.isString(args[1])) && (dl.isObject(args[2]))) {
 					ao.adviceType = args[0];
 					ao.srcObj = dj_global;
 					ao.srcFunc = args[1];
 					ao.adviceObj = args[2];
 					ao.adviceFunc = args[3];
-				}else if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
-					ao.adviceType = args[0];
-					ao.srcObj = dj_global;
-					var tmpName  = dl.nameAnonFunc(args[1], dj_global, searchForNames);
-					ao.srcFunc = tmpName;
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
-					ao.srcObj = args[1];
-					ao.srcFunc = args[2];
-					var tmpName  = dl.nameAnonFunc(args[3], dj_global, searchForNames);
-					ao.adviceObj = dj_global;
-					ao.adviceFunc = tmpName;
-				}else if(dl.isObject(args[1])){
-					ao.srcObj = args[1];
-					ao.srcFunc = args[2];
-					ao.adviceObj = dj_global;
-					ao.adviceFunc = args[3];
-				}else if(dl.isObject(args[2])){
-					ao.srcObj = dj_global;
-					ao.srcFunc = args[1];
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else{
-					ao.srcObj = ao.adviceObj = ao.aroundObj = dj_global;
-					ao.srcFunc = args[1];
-					ao.adviceFunc = args[2];
-					ao.aroundFunc = args[3];
+				} else {
+					if ((dl.isString(args[0])) && (dl.isFunction(args[1])) && (dl.isObject(args[2]))) {
+						ao.adviceType = args[0];
+						ao.srcObj = dj_global;
+						var tmpName = dl.nameAnonFunc(args[1], dj_global, searchForNames);
+						ao.srcFunc = tmpName;
+						ao.adviceObj = args[2];
+						ao.adviceFunc = args[3];
+					} else {
+						if ((dl.isString(args[0])) && (dl.isObject(args[1])) && (dl.isString(args[2])) && (dl.isFunction(args[3]))) {
+							ao.srcObj = args[1];
+							ao.srcFunc = args[2];
+							var tmpName = dl.nameAnonFunc(args[3], dj_global, searchForNames);
+							ao.adviceObj = dj_global;
+							ao.adviceFunc = tmpName;
+						} else {
+							if (dl.isObject(args[1])) {
+								ao.srcObj = args[1];
+								ao.srcFunc = args[2];
+								ao.adviceObj = dj_global;
+								ao.adviceFunc = args[3];
+							} else {
+								if (dl.isObject(args[2])) {
+									ao.srcObj = dj_global;
+									ao.srcFunc = args[1];
+									ao.adviceObj = args[2];
+									ao.adviceFunc = args[3];
+								} else {
+									ao.srcObj = ao.adviceObj = ao.aroundObj = dj_global;
+									ao.srcFunc = args[1];
+									ao.adviceFunc = args[2];
+									ao.aroundFunc = args[3];
+								}
+							}
+						}
+					}
 				}
-				break;
-			case 6:
-				ao.srcObj = args[1];
-				ao.srcFunc = args[2];
-				ao.adviceObj = args[3]
-				ao.adviceFunc = args[4];
-				ao.aroundFunc = args[5];
-				ao.aroundObj = dj_global;
-				break;
-			default:
-				ao.srcObj = args[1];
-				ao.srcFunc = args[2];
-				ao.adviceObj = args[3]
-				ao.adviceFunc = args[4];
-				ao.aroundObj = args[5];
-				ao.aroundFunc = args[6];
-				ao.once = args[7];
-				ao.delay = args[8];
-				ao.rate = args[9];
-				ao.adviceMsg = args[10];
-				break;
+			}
+			break;
+		  case 6:
+			ao.srcObj = args[1];
+			ao.srcFunc = args[2];
+			ao.adviceObj = args[3];
+			ao.adviceFunc = args[4];
+			ao.aroundFunc = args[5];
+			ao.aroundObj = dj_global;
+			break;
+		  default:
+			ao.srcObj = args[1];
+			ao.srcFunc = args[2];
+			ao.adviceObj = args[3];
+			ao.adviceFunc = args[4];
+			ao.aroundObj = args[5];
+			ao.aroundFunc = args[6];
+			ao.once = args[7];
+			ao.delay = args[8];
+			ao.rate = args[9];
+			ao.adviceMsg = args[10];
+			ao.maxCalls = (!isNaN(parseInt(args[11]))) ? args[11] : -1;
+			break;
 		}
-
-		if(dl.isFunction(ao.aroundFunc)){
-			var tmpName  = dl.nameAnonFunc(ao.aroundFunc, ao.aroundObj, searchForNames);
+		if (dl.isFunction(ao.aroundFunc)) {
+			var tmpName = dl.nameAnonFunc(ao.aroundFunc, ao.aroundObj, searchForNames);
 			ao.aroundFunc = tmpName;
 		}
-
-		if(dl.isFunction(ao.srcFunc)){
+		if (dl.isFunction(ao.srcFunc)) {
 			ao.srcFunc = dl.getNameInObj(ao.srcObj, ao.srcFunc);
 		}
-
-		if(dl.isFunction(ao.adviceFunc)){
+		if (dl.isFunction(ao.adviceFunc)) {
 			ao.adviceFunc = dl.getNameInObj(ao.adviceObj, ao.adviceFunc);
 		}
-
-		if((ao.aroundObj)&&(dl.isFunction(ao.aroundFunc))){
+		if ((ao.aroundObj) && (dl.isFunction(ao.aroundFunc))) {
 			ao.aroundFunc = dl.getNameInObj(ao.aroundObj, ao.aroundFunc);
 		}
-
-		if(!ao.srcObj){
-			dojo.raise("bad srcObj for srcFunc: "+ao.srcFunc);
+		if (!ao.srcObj) {
+			dojo.raise("bad srcObj for srcFunc: " + ao.srcFunc);
 		}
-		if(!ao.adviceObj){
-			dojo.raise("bad adviceObj for adviceFunc: "+ao.adviceFunc);
+		if (!ao.adviceObj) {
+			dojo.raise("bad adviceObj for adviceFunc: " + ao.adviceFunc);
 		}
-		
-		if(!ao.adviceFunc){
-			dojo.debug("bad adviceFunc for srcFunc: "+ao.srcFunc);
+		if (!ao.adviceFunc) {
+			dojo.debug("bad adviceFunc for srcFunc: " + ao.srcFunc);
 			dojo.debugShallow(ao);
-		} 
-		
+		}
 		return ao;
 	}
-
-	this.connect = function(/*...*/){
-		// summary:
-		//		dojo.event.connect is the glue that holds most Dojo-based
-		//		applications together. Most combinations of arguments are
-		//		supported, with the connect() method attempting to disambiguate
-		//		the implied types of positional parameters. The following will
-		//		all work:
-		//			dojo.event.connect("globalFunctionName1", "globalFunctionName2");
-		//			dojo.event.connect(functionReference1, functionReference2);
-		//			dojo.event.connect("globalFunctionName1", functionReference2);
-		//			dojo.event.connect(functionReference1, "globalFunctionName2");
-		//			dojo.event.connect(scope1, "functionName1", "globalFunctionName2");
-		//			dojo.event.connect("globalFunctionName1", scope2, "functionName2");
-		//			dojo.event.connect(scope1, "functionName1", scope2, "functionName2");
-		//			dojo.event.connect("after", scope1, "functionName1", scope2, "functionName2");
-		//			dojo.event.connect("before", scope1, "functionName1", scope2, "functionName2");
-		//			dojo.event.connect("around", 	scope1, "functionName1", 
-		//											scope2, "functionName2",
-		//											aroundFunctionReference);
-		//			dojo.event.connect("around", 	scope1, "functionName1", 
-		//											scope2, "functionName2",
-		//											scope3, "aroundFunctionName");
-		//			dojo.event.connect("before-around", 	scope1, "functionName1", 
-		//													scope2, "functionName2",
-		//													aroundFunctionReference);
-		//			dojo.event.connect("after-around", 		scope1, "functionName1", 
-		//													scope2, "functionName2",
-		//													aroundFunctionReference);
-		//			dojo.event.connect("after-around", 		scope1, "functionName1", 
-		//													scope2, "functionName2",
-		//													scope3, "aroundFunctionName");
-		//			dojo.event.connect("around", 	scope1, "functionName1", 
-		//											scope2, "functionName2",
-		//											scope3, "aroundFunctionName", true, 30);
-		//			dojo.event.connect("around", 	scope1, "functionName1", 
-		//											scope2, "functionName2",
-		//											scope3, "aroundFunctionName", null, null, 10);
-		// adviceType: 
-		//		Optional. String. One of "before", "after", "around",
-		//		"before-around", or "after-around". FIXME
-		// srcObj:
-		//		the scope in which to locate/execute the named srcFunc. Along
-		//		with srcFunc, this creates a way to dereference the function to
-		//		call. So if the function in question is "foo.bar", the
-		//		srcObj/srcFunc pair would be foo and "bar", where "bar" is a
-		//		string and foo is an object reference.
-		// srcFunc:
-		//		the name of the function to connect to. When it is executed,
-		//		the listener being registered with this call will be called.
-		//		The adviceType defines the call order between the source and
-		//		the target functions.
-		// adviceObj:
-		//		the scope in which to locate/execute the named adviceFunc.
-		// adviceFunc:
-		//		the name of the function being conected to srcObj.srcFunc
-		// aroundObj:
-		//		the scope in which to locate/execute the named aroundFunc.
-		// aroundFunc:
-		//		the name of, or a reference to, the function that will be used
-		//		to mediate the advice call. Around advice requires a special
-		//		unary function that will be passed a "MethodInvocation" object.
-		//		These objects have several important properties, namely:
-		//			- args
-		//				a mutable array of arguments to be passed into the
-		//				wrapped function
-		//			- proceed
-		//				a function that "continues" the invocation. The result
-		//				of this function is the return of the wrapped function.
-		//				You can then manipulate this return before passing it
-		//				back out (or take further action based on it).
-		// once:
-		//		boolean that determines whether or not this connect() will
-		//		create a new connection if an identical connect() has already
-		//		been made. Defaults to "false".
-		// delay:
-		//		an optional delay (in ms), as an integer, for dispatch of a
-		//		listener after the source has been fired.
-		// rate:
-		//		an optional rate throttling parameter (integer, in ms). When
-		//		specified, this particular connection will not fire more than
-		//		once in the interval specified by the rate
-		// adviceMsg:
-		//		boolean. Should the listener have all the parameters passed in
-		//		as a single argument?
-
-		/*
-				ao.adviceType = args[0];
-				ao.srcObj = args[1];
-				ao.srcFunc = args[2];
-				ao.adviceObj = args[3]
-				ao.adviceFunc = args[4];
-				ao.aroundObj = args[5];
-				ao.aroundFunc = args[6];
-				ao.once = args[7];
-				ao.delay = args[8];
-				ao.rate = args[9];
-				ao.adviceMsg = args[10];
-		*/
-		if(arguments.length == 1){
+	this.connect = function () {
+		if (arguments.length == 1) {
 			var ao = arguments[0];
-		}else{
+		} else {
 			var ao = interpolateArgs(arguments, true);
 		}
-		if(dojo.lang.isString(ao.srcFunc) && (ao.srcFunc.toLowerCase() == "onkey") ){
-			if(dojo.render.html.ie){
-				ao.srcFunc = "onkeydown";
-				this.connect(ao);
-			}
-			ao.srcFunc = "onkeypress";
-		}
-
-
-		if(dojo.lang.isArray(ao.srcObj) && ao.srcObj!=""){
+		if (dojo.lang.isArray(ao.srcObj) && ao.srcObj != "") {
 			var tmpAO = {};
-			for(var x in ao){
+			for (var x in ao) {
 				tmpAO[x] = ao[x];
 			}
 			var mjps = [];
-			dojo.lang.forEach(ao.srcObj, function(src){
-				if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
+			dojo.lang.forEach(ao.srcObj, function (src) {
+				if ((dojo.render.html.capable) && (dojo.lang.isString(src))) {
 					src = dojo.byId(src);
-					// dojo.debug(src);
 				}
 				tmpAO.srcObj = src;
-				// dojo.debug(tmpAO.srcObj, tmpAO.srcFunc);
-				// dojo.debug(tmpAO.adviceObj, tmpAO.adviceFunc);
 				mjps.push(dojo.event.connect.call(dojo.event, tmpAO));
 			});
 			return mjps;
 		}
-
-		// FIXME: just doing a "getForMethod()" seems to be enough to put this into infinite recursion!!
 		var mjp = dojo.event.MethodJoinPoint.getForMethod(ao.srcObj, ao.srcFunc);
-		if(ao.adviceFunc){
+		if (ao.adviceFunc) {
 			var mjp2 = dojo.event.MethodJoinPoint.getForMethod(ao.adviceObj, ao.adviceFunc);
 		}
-
 		mjp.kwAddAdvice(ao);
-
-		// advanced users might want to fsck w/ the join point manually
-		return mjp; // a MethodJoinPoint object
-	}
-
-	this.log = function(/*object or funcName*/ a1, /*funcName*/ a2){
-		// summary:
-		//		a function that will wrap and log all calls to the specified
-		//		a1.a2() function. If only a1 is passed, it'll be used as a
-		//		function or function name on the global context. Logging will
-		//		be sent to dojo.debug
-		// a1:
-		//		if a2 is passed, this should be an object. If not, it can be a
-		//		function or function name.
-		// a2:
-		//		a function name
+		return mjp;
+	};
+	this.log = function (a1, a2) {
 		var kwArgs;
-		if((arguments.length == 1)&&(typeof a1 == "object")){
+		if ((arguments.length == 1) && (typeof a1 == "object")) {
 			kwArgs = a1;
-		}else{
-			kwArgs = {
-				srcObj: a1,
-				srcFunc: a2
-			};
+		} else {
+			kwArgs = {srcObj:a1, srcFunc:a2};
 		}
-		kwArgs.adviceFunc = function(){
+		kwArgs.adviceFunc = function () {
 			var argsStr = [];
-			for(var x=0; x<arguments.length; x++){
+			for (var x = 0; x < arguments.length; x++) {
 				argsStr.push(arguments[x]);
 			}
-			dojo.debug("("+kwArgs.srcObj+")."+kwArgs.srcFunc, ":", argsStr.join(", "));
-		}
+			dojo.debug("(" + kwArgs.srcObj + ")." + kwArgs.srcFunc, ":", argsStr.join(", "));
+		};
 		this.kwConnect(kwArgs);
-	}
-
-	this.connectBefore = function(){
-		// summary:
-		//	 	takes the same parameters as dojo.event.connect(), except that
-		//	 	the advice type will always be "before"
+	};
+	this.connectBefore = function () {
 		var args = ["before"];
-		for(var i = 0; i < arguments.length; i++){ args.push(arguments[i]); }
-		return this.connect.apply(this, args); // a MethodJoinPoint object
-	}
-
-	this.connectAround = function(){
-		// summary:
-		//	 	takes the same parameters as dojo.event.connect(), except that
-		//	 	the advice type will always be "around"
+		for (var i = 0; i < arguments.length; i++) {
+			args.push(arguments[i]);
+		}
+		return this.connect.apply(this, args);
+	};
+	this.connectAround = function () {
 		var args = ["around"];
-		for(var i = 0; i < arguments.length; i++){ args.push(arguments[i]); }
-		return this.connect.apply(this, args); // a MethodJoinPoint object
-	}
-
-	this.connectOnce = function(){
-		// summary:
-		//	 	takes the same parameters as dojo.event.connect(), except that
-		//	 	the "once" flag will always be set to "true"
+		for (var i = 0; i < arguments.length; i++) {
+			args.push(arguments[i]);
+		}
+		return this.connect.apply(this, args);
+	};
+	this.connectOnce = function () {
 		var ao = interpolateArgs(arguments, true);
 		ao.once = true;
-		return this.connect(ao); // a MethodJoinPoint object
-	}
-
-	this._kwConnectImpl = function(kwArgs, disconnect){
+		return this.connect(ao);
+	};
+	this.connectRunOnce = function () {
+		var ao = interpolateArgs(arguments, true);
+		ao.maxCalls = 1;
+		return this.connect(ao);
+	};
+	this._kwConnectImpl = function (kwArgs, disconnect) {
 		var fn = (disconnect) ? "disconnect" : "connect";
-		if(typeof kwArgs["srcFunc"] == "function"){
-			kwArgs.srcObj = kwArgs["srcObj"]||dj_global;
-			var tmpName  = dojo.lang.nameAnonFunc(kwArgs.srcFunc, kwArgs.srcObj, true);
+		if (typeof kwArgs["srcFunc"] == "function") {
+			kwArgs.srcObj = kwArgs["srcObj"] || dj_global;
+			var tmpName = dojo.lang.nameAnonFunc(kwArgs.srcFunc, kwArgs.srcObj, true);
 			kwArgs.srcFunc = tmpName;
 		}
-		if(typeof kwArgs["adviceFunc"] == "function"){
-			kwArgs.adviceObj = kwArgs["adviceObj"]||dj_global;
-			var tmpName  = dojo.lang.nameAnonFunc(kwArgs.adviceFunc, kwArgs.adviceObj, true);
+		if (typeof kwArgs["adviceFunc"] == "function") {
+			kwArgs.adviceObj = kwArgs["adviceObj"] || dj_global;
+			var tmpName = dojo.lang.nameAnonFunc(kwArgs.adviceFunc, kwArgs.adviceObj, true);
 			kwArgs.adviceFunc = tmpName;
 		}
-		kwArgs.srcObj = kwArgs["srcObj"]||dj_global;
-		kwArgs.adviceObj = kwArgs["adviceObj"]||kwArgs["targetObj"]||dj_global;
-		kwArgs.adviceFunc = kwArgs["adviceFunc"]||kwArgs["targetFunc"];
-		// pass kwargs to avoid unrolling/repacking
+		kwArgs.srcObj = kwArgs["srcObj"] || dj_global;
+		kwArgs.adviceObj = kwArgs["adviceObj"] || kwArgs["targetObj"] || dj_global;
+		kwArgs.adviceFunc = kwArgs["adviceFunc"] || kwArgs["targetFunc"];
 		return dojo.event[fn](kwArgs);
-	}
-
-	this.kwConnect = function(/*Object*/ kwArgs){
-		// summary:
-		//		A version of dojo.event.connect() that takes a map of named
-		//		parameters instead of the positional parameters that
-		//		dojo.event.connect() uses. For many advanced connection types,
-		//		this can be a much more readable (and potentially faster)
-		//		alternative.
-		// kwArgs:
-		// 		An object that can have the following properties:
-		//			- adviceType
-		//			- srcObj
-		//			- srcFunc
-		//			- adviceObj
-		//			- adviceFunc 
-		//			- aroundObj
-		//			- aroundFunc
-		//			- once
-		//			- delay
-		//			- rate
-		//			- adviceMsg
-		//		As with connect, only srcFunc and adviceFunc are generally
-		//		required
-
-		return this._kwConnectImpl(kwArgs, false); // a MethodJoinPoint object
-
-	}
-
-	this.disconnect = function(){
-		// summary:
-		//		Takes the same parameters as dojo.event.connect() but destroys
-		//		an existing connection instead of building a new one. For
-		//		multiple identical connections, multiple disconnect() calls
-		//		will unroll one each time it's called.
-		if(arguments.length == 1){
+	};
+	this.kwConnect = function (kwArgs) {
+		return this._kwConnectImpl(kwArgs, false);
+	};
+	this.disconnect = function () {
+		if (arguments.length == 1) {
 			var ao = arguments[0];
-		}else{
+		} else {
 			var ao = interpolateArgs(arguments, true);
 		}
-		if(!ao.adviceFunc){ return; } // nothing to disconnect
-		if(dojo.lang.isString(ao.srcFunc) && (ao.srcFunc.toLowerCase() == "onkey") ){
-			if(dojo.render.html.ie){
+		if (!ao.adviceFunc) {
+			return;
+		}
+		if (dojo.lang.isString(ao.srcFunc) && (ao.srcFunc.toLowerCase() == "onkey")) {
+			if (dojo.render.html.ie) {
 				ao.srcFunc = "onkeydown";
 				this.disconnect(ao);
 			}
 			ao.srcFunc = "onkeypress";
 		}
-		if(!ao.srcObj[ao.srcFunc]){ return null; } // prevent un-necessaray joinpoint creation
+		if (!ao.srcObj[ao.srcFunc]) {
+			return null;
+		}
 		var mjp = dojo.event.MethodJoinPoint.getForMethod(ao.srcObj, ao.srcFunc, true);
-		mjp.removeAdvice(ao.adviceObj, ao.adviceFunc, ao.adviceType, ao.once); // a MethodJoinPoint object
+		mjp.removeAdvice(ao.adviceObj, ao.adviceFunc, ao.adviceType, ao.once);
 		return mjp;
-	}
-
-	this.kwDisconnect = function(kwArgs){
-		// summary:
-		//		Takes the same parameters as dojo.event.kwConnect() but
-		//		destroys an existing connection instead of building a new one.
+	};
+	this.kwDisconnect = function (kwArgs) {
 		return this._kwConnectImpl(kwArgs, true);
-	}
-}
-
-// exactly one of these is created whenever a method with a joint point is run,
-// if there is at least one 'around' advice.
-dojo.event.MethodInvocation = function(/*dojo.event.MethodJoinPoint*/join_point, /*Object*/obj, /*Array*/args){
-	// summary:
-	//		a class the models the call into a function. This is used under the
-	//		covers for all method invocations on both ends of a
-	//		connect()-wrapped function dispatch. This allows us to "pickle"
-	//		calls, such as in the case of around advice.
-	// join_point:
-	//		a dojo.event.MethodJoinPoint object that represents a connection
-	// obj:
-	//		the scope the call will execute in
-	// args:
-	//		an array of parameters that will get passed to the callee
+	};
+};
+dojo.event.MethodInvocation = function (join_point, obj, args) {
 	this.jp_ = join_point;
 	this.object = obj;
 	this.args = [];
-	// make sure we don't lock into a mutable object which can change under us.
-	// It's ok if the individual items change, though.
-	for(var x=0; x<args.length; x++){
+	for (var x = 0; x < args.length; x++) {
 		this.args[x] = args[x];
 	}
-	// the index of the 'around' that is currently being executed.
 	this.around_index = -1;
-}
-
-dojo.event.MethodInvocation.prototype.proceed = function(){
-	// summary:
-	//		proceed with the method call that's represented by this invocation
-	//		object
+};
+dojo.event.MethodInvocation.prototype.proceed = function () {
 	this.around_index++;
-	if(this.around_index >= this.jp_.around.length){
+	if (this.around_index >= this.jp_.around.length) {
 		return this.jp_.object[this.jp_.methodname].apply(this.jp_.object, this.args);
-		// return this.jp_.run_before_after(this.object, this.args);
-	}else{
+	} else {
 		var ti = this.jp_.around[this.around_index];
-		var mobj = ti[0]||dj_global;
+		var mobj = ti[0] || dj_global;
 		var meth = ti[1];
 		return mobj[meth].call(mobj, this);
 	}
-} 
-
-
-dojo.event.MethodJoinPoint = function(/*Object*/obj, /*String*/funcName){
-	this.object = obj||dj_global;
+};
+dojo.event.MethodJoinPoint = function (obj, funcName) {
+	this.object = obj || dj_global;
 	this.methodname = funcName;
 	this.methodfunc = this.object[funcName];
 	this.squelch = false;
-	// this.before = [];
-	// this.after = [];
-	// this.around = [];
-}
-
-dojo.event.MethodJoinPoint.getForMethod = function(/*Object*/obj, /*String*/funcName){
-	// summary:
-	//		"static" class function for returning a MethodJoinPoint from a
-	//		scoped function. If one doesn't exist, one is created.
-	// obj:
-	//		the scope to search for the function in
-	// funcName:
-	//		the name of the function to return a MethodJoinPoint for
-	if(!obj){ obj = dj_global; }
-	if(!obj[funcName]){
-		// supply a do-nothing method implementation
-		obj[funcName] = function(){};
-		if(!obj[funcName]){
-			// e.g. cannot add to inbuilt objects in IE6
-			dojo.raise("Cannot set do-nothing method on that object "+funcName);
+};
+dojo.event.MethodJoinPoint.getForMethod = function (obj, funcName) {
+	if (!obj) {
+		obj = dj_global;
+	}
+	var ofn = obj[funcName];
+	if (!ofn) {
+		ofn = obj[funcName] = function () {
+		};
+		if (!obj[funcName]) {
+			dojo.raise("Cannot set do-nothing method on that object " + funcName);
 		}
-	}else if((!dojo.lang.isFunction(obj[funcName]))&&(!dojo.lang.isAlien(obj[funcName]))){
-		// FIXME: should we throw an exception here instead?
-		return null; 
+	} else {
+		if ((typeof ofn != "function") && (!dojo.lang.isFunction(ofn)) && (!dojo.lang.isAlien(ofn))) {
+			return null;
+		}
 	}
-	// we hide our joinpoint instance in obj[funcName + '$joinpoint']
 	var jpname = funcName + "$joinpoint";
 	var jpfuncname = funcName + "$joinpoint$method";
 	var joinpoint = obj[jpname];
-	if(!joinpoint){
+	if (!joinpoint) {
 		var isNode = false;
-		if(dojo.event["browser"]){
-			if( (obj["attachEvent"])||
-				(obj["nodeType"])||
-				(obj["addEventListener"]) ){
+		if (dojo.event["browser"]) {
+			if ((obj["attachEvent"]) || (obj["nodeType"]) || (obj["addEventListener"])) {
 				isNode = true;
 				dojo.event.browser.addClobberNodeAttrs(obj, [jpname, jpfuncname, funcName]);
 			}
 		}
-		var origArity = obj[funcName].length;
-		obj[jpfuncname] = obj[funcName];
-		// joinpoint = obj[jpname] = new dojo.event.MethodJoinPoint(obj, funcName);
+		var origArity = ofn.length;
+		obj[jpfuncname] = ofn;
 		joinpoint = obj[jpname] = new dojo.event.MethodJoinPoint(obj, jpfuncname);
-		obj[funcName] = function(){ 
-			var args = [];
-
-			if((isNode)&&(!arguments.length)){
-				var evt = null;
-				try{
-					if(obj.ownerDocument){
-						evt = obj.ownerDocument.parentWindow.event;
-					}else if(obj.documentElement){
-						evt = obj.documentElement.ownerDocument.parentWindow.event;
-					}else if(obj.event){ //obj is a window
-						evt = obj.event;
-					}else{
+		if (!isNode) {
+			obj[funcName] = function () {
+				return joinpoint.run.apply(joinpoint, arguments);
+			};
+		} else {
+			obj[funcName] = function () {
+				var args = [];
+				if (!arguments.length) {
+					var evt = null;
+					try {
+						if (obj.ownerDocument) {
+							evt = obj.ownerDocument.parentWindow.event;
+						} else {
+							if (obj.documentElement) {
+								evt = obj.documentElement.ownerDocument.parentWindow.event;
+							} else {
+								if (obj.event) {
+									evt = obj.event;
+								} else {
+									evt = window.event;
+								}
+							}
+						}
+					}
+					catch (e) {
 						evt = window.event;
 					}
-				}catch(e){
-					evt = window.event;
-				}
-
-				if(evt){
-					args.push(dojo.event.browser.fixEvent(evt, this));
-				}
-			}else{
-				for(var x=0; x<arguments.length; x++){
-					if((x==0)&&(isNode)&&(dojo.event.browser.isEvent(arguments[x]))){
-						args.push(dojo.event.browser.fixEvent(arguments[x], this));
-					}else{
-						args.push(arguments[x]);
+					if (evt) {
+						args.push(dojo.event.browser.fixEvent(evt, this));
 					}
+				} else {
+					for (var x = 0; x < arguments.length; x++) {
+						if ((x == 0) && (dojo.event.browser.isEvent(arguments[x]))) {
+							args.push(dojo.event.browser.fixEvent(arguments[x], this));
+						} else {
+							args.push(arguments[x]);
+						}
+					}
 				}
-			}
-			// return joinpoint.run.apply(joinpoint, arguments); 
-			return joinpoint.run.apply(joinpoint, args); 
+				return joinpoint.run.apply(joinpoint, args);
+			};
 		}
 		obj[funcName].__preJoinArity = origArity;
 	}
-	return joinpoint; // dojo.event.MethodJoinPoint
-}
-
-dojo.lang.extend(dojo.event.MethodJoinPoint, {
-	unintercept: function(){
-		// summary: 
-		//		destroy the connection to all listeners that may have been
-		//		registered on this joinpoint
-		this.object[this.methodname] = this.methodfunc;
-		this.before = [];
-		this.after = [];
-		this.around = [];
-	},
-
-	disconnect: dojo.lang.forward("unintercept"),
-
-	run: function(){
-		// summary:
-		//		execute the connection represented by this join point. The
-		//		arguments passed to run() will be passed to the function and
-		//		its listeners.
-		var obj = this.object||dj_global;
-		var args = arguments;
-
-		// optimization. We only compute once the array version of the arguments
-		// pseudo-arr in order to prevent building it each time advice is unrolled.
-		var aargs = [];
-		for(var x=0; x<args.length; x++){
-			aargs[x] = args[x];
+	return joinpoint;
+};
+dojo.lang.extend(dojo.event.MethodJoinPoint, {squelch:false, unintercept:function () {
+	this.object[this.methodname] = this.methodfunc;
+	this.before = [];
+	this.after = [];
+	this.around = [];
+}, disconnect:dojo.lang.forward("unintercept"), run:function () {
+	var obj = this.object || dj_global;
+	var args = arguments;
+	var aargs = [];
+	for (var x = 0; x < args.length; x++) {
+		aargs[x] = args[x];
+	}
+	var unrollAdvice = function (marr) {
+		if (!marr) {
+			dojo.debug("Null argument to unrollAdvice()");
+			return;
 		}
-
-		var unrollAdvice  = function(marr){ 
-			if(!marr){
-				dojo.debug("Null argument to unrollAdvice()");
+		var callObj = marr[0] || dj_global;
+		var callFunc = marr[1];
+		if (!callObj[callFunc]) {
+			dojo.raise("function \"" + callFunc + "\" does not exist on \"" + callObj + "\"");
+		}
+		var aroundObj = marr[2] || dj_global;
+		var aroundFunc = marr[3];
+		var msg = marr[6];
+		var maxCount = marr[7];
+		if (maxCount > -1) {
+			if (maxCount == 0) {
 				return;
 			}
-		  
-			var callObj = marr[0]||dj_global;
-			var callFunc = marr[1];
-			
-			if(!callObj[callFunc]){
-				dojo.raise("function \"" + callFunc + "\" does not exist on \"" + callObj + "\"");
-			}
-			
-			var aroundObj = marr[2]||dj_global;
-			var aroundFunc = marr[3];
-			var msg = marr[6];
-			var undef;
-
-			var to = {
-				args: [],
-				jp_: this,
-				object: obj,
-				proceed: function(){
-					return callObj[callFunc].apply(callObj, to.args);
-				}
-			};
-			to.args = aargs;
-
-			var delay = parseInt(marr[4]);
-			var hasDelay = ((!isNaN(delay))&&(marr[4]!==null)&&(typeof marr[4] != "undefined"));
-			if(marr[5]){
-				var rate = parseInt(marr[5]);
-				var cur = new Date();
-				var timerSet = false;
-				if((marr["last"])&&((cur-marr.last)<=rate)){
-					if(dojo.event._canTimeout){
-						if(marr["delayTimer"]){
-							clearTimeout(marr.delayTimer);
-						}
-						var tod = parseInt(rate*2); // is rate*2 naive?
-						var mcpy = dojo.lang.shallowCopy(marr);
-						marr.delayTimer = setTimeout(function(){
-							// FIXME: on IE at least, event objects from the
-							// browser can go out of scope. How (or should?) we
-							// deal with it?
-							mcpy[5] = 0;
-							unrollAdvice(mcpy);
-						}, tod);
+			marr[7]--;
+		}
+		var undef;
+		var to = {args:[], jp_:this, object:obj, proceed:function () {
+			return callObj[callFunc].apply(callObj, to.args);
+		}};
+		to.args = aargs;
+		var delay = parseInt(marr[4]);
+		var hasDelay = ((!isNaN(delay)) && (marr[4] !== null) && (typeof marr[4] != "undefined"));
+		if (marr[5]) {
+			var rate = parseInt(marr[5]);
+			var cur = new Date();
+			var timerSet = false;
+			if ((marr["last"]) && ((cur - marr.last) <= rate)) {
+				if (dojo.event._canTimeout) {
+					if (marr["delayTimer"]) {
+						clearTimeout(marr.delayTimer);
 					}
-					return;
-				}else{
-					marr.last = cur;
+					var tod = parseInt(rate * 2);
+					var mcpy = dojo.lang.shallowCopy(marr);
+					marr.delayTimer = setTimeout(function () {
+						mcpy[5] = 0;
+						unrollAdvice(mcpy);
+					}, tod);
 				}
+				return;
+			} else {
+				marr.last = cur;
 			}
-
-			// FIXME: need to enforce rates for a connection here!
-
-			if(aroundFunc){
-				// NOTE: around advice can't delay since we might otherwise depend
-				// on execution order!
-				aroundObj[aroundFunc].call(aroundObj, to);
-			}else{
-				// var tmjp = dojo.event.MethodJoinPoint.getForMethod(obj, methname);
-				if((hasDelay)&&((dojo.render.html)||(dojo.render.svg))){  // FIXME: the render checks are grotty!
-					dj_global["setTimeout"](function(){
-						if(msg){
-							callObj[callFunc].call(callObj, to); 
-						}else{
-							callObj[callFunc].apply(callObj, args); 
-						}
-					}, delay);
-				}else{ // many environments can't support delay!
-					if(msg){
-						callObj[callFunc].call(callObj, to); 
-					}else{
-						callObj[callFunc].apply(callObj, args); 
+		}
+		if (aroundFunc) {
+			aroundObj[aroundFunc].call(aroundObj, to);
+		} else {
+			if ((hasDelay) && ((dojo.render.html) || (dojo.render.svg))) {
+				dj_global["setTimeout"](function () {
+					if (msg) {
+						callObj[callFunc].call(callObj, to);
+					} else {
+						callObj[callFunc].apply(callObj, args);
 					}
+				}, delay);
+			} else {
+				if (msg) {
+					callObj[callFunc].call(callObj, to);
+				} else {
+					callObj[callFunc].apply(callObj, args);
 				}
 			}
 		}
-
-		var unRollSquelch = function(){
-			if(this.squelch){
-				try{
-					return unrollAdvice.apply(this, arguments);
-				}catch(e){ 
-					dojo.debug(e);
-				}
-			}else{
+	};
+	var unRollSquelch = function () {
+		if (this.squelch) {
+			try {
 				return unrollAdvice.apply(this, arguments);
 			}
+			catch (e) {
+				dojo.debug(e);
+			}
+		} else {
+			return unrollAdvice.apply(this, arguments);
 		}
-
-		if((this["before"])&&(this.before.length>0)){
-			// pass a cloned array, if this event disconnects this event forEach on this.before wont work
-			dojo.lang.forEach(this.before.concat(new Array()), unRollSquelch);
-		}
-
-		var result;
-		try{
-			if((this["around"])&&(this.around.length>0)){
-				var mi = new dojo.event.MethodInvocation(this, obj, args);
-				result = mi.proceed();
-			}else if(this.methodfunc){
+	};
+	if ((this["before"]) && (this.before.length > 0)) {
+		dojo.lang.forEach(this.before.concat(new Array()), unRollSquelch);
+	}
+	var result;
+	try {
+		if ((this["around"]) && (this.around.length > 0)) {
+			var mi = new dojo.event.MethodInvocation(this, obj, args);
+			result = mi.proceed();
+		} else {
+			if (this.methodfunc) {
 				result = this.object[this.methodname].apply(this.object, args);
 			}
-		}catch(e){ 
-			if(!this.squelch){ 
-				dojo.debug(e,"when calling",this.methodname,"on",this.object,"with arguments",args);
-				dojo.raise(e);
-			} 
 		}
-
-		if((this["after"])&&(this.after.length>0)){
-			// see comment on this.before above
-			dojo.lang.forEach(this.after.concat(new Array()), unRollSquelch);
+	}
+	catch (e) {
+		if (!this.squelch) {
+			dojo.debug(e, "when calling", this.methodname, "on", this.object, "with arguments", args);
+			dojo.raise(e);
 		}
-
-		return (this.methodfunc) ? result : null;
-	},
-
-	getArr: function(/*String*/kind){
-		// summary: return a list of listeners of the past "kind"
-		// kind:
-		//		can be one of: "before", "after", "around", "before-around", or
-		//		"after-around"
-		var type = "after";
-		// FIXME: we should be able to do this through props or Array.in()
-		if((typeof kind == "string")&&(kind.indexOf("before")!=-1)){
-			type = "before";
-		}else if(kind=="around"){
+	}
+	if ((this["after"]) && (this.after.length > 0)) {
+		dojo.lang.forEach(this.after.concat(new Array()), unRollSquelch);
+	}
+	return (this.methodfunc) ? result : null;
+}, getArr:function (kind) {
+	var type = "after";
+	if ((typeof kind == "string") && (kind.indexOf("before") != -1)) {
+		type = "before";
+	} else {
+		if (kind == "around") {
 			type = "around";
 		}
-		if(!this[type]){ this[type] = []; }
-		return this[type]; // Array
-	},
-
-	kwAddAdvice: function(/*Object*/args){
-		// summary:
-		//		adds advice to the joinpoint with arguments in a map
-		// args:
-		// 		An object that can have the following properties:
-		//			- adviceType
-		//			- adviceObj
-		//			- adviceFunc 
-		//			- aroundObj
-		//			- aroundFunc
-		//			- once
-		//			- delay
-		//			- rate
-		//			- adviceMsg
-		this.addAdvice(	args["adviceObj"], args["adviceFunc"], 
-						args["aroundObj"], args["aroundFunc"], 
-						args["adviceType"], args["precedence"], 
-						args["once"], args["delay"], args["rate"], 
-						args["adviceMsg"]);
-	},
-
-	addAdvice: function(	thisAdviceObj, thisAdvice, 
-							thisAroundObj, thisAround, 
-							adviceType, precedence, 
-							once, delay, rate, asMessage){
-		// summary:
-		//		add advice to this joinpoint using positional parameters
-		// thisAdviceObj:
-		//		the scope in which to locate/execute the named adviceFunc.
-		// thisAdviceFunc:
-		//		the name of the function being conected
-		// thisAroundObj:
-		//		the scope in which to locate/execute the named aroundFunc.
-		// thisAroundFunc:
-		//		the name of the function that will be used to mediate the
-		//		advice call.
-		// adviceType: 
-		//		Optional. String. One of "before", "after", "around",
-		//		"before-around", or "after-around". FIXME
-		// once:
-		//		boolean that determines whether or not this advice will create
-		//		a new connection if an identical advice set has already been
-		//		provided. Defaults to "false".
-		// delay:
-		//		an optional delay (in ms), as an integer, for dispatch of a
-		//		listener after the source has been fired.
-		// rate:
-		//		an optional rate throttling parameter (integer, in ms). When
-		//		specified, this particular connection will not fire more than
-		//		once in the interval specified by the rate
-		// adviceMsg:
-		//		boolean. Should the listener have all the parameters passed in
-		//		as a single argument?
-		var arr = this.getArr(adviceType);
-		if(!arr){
-			dojo.raise("bad this: " + this);
+	}
+	if (!this[type]) {
+		this[type] = [];
+	}
+	return this[type];
+}, kwAddAdvice:function (args) {
+	this.addAdvice(args["adviceObj"], args["adviceFunc"], args["aroundObj"], args["aroundFunc"], args["adviceType"], args["precedence"], args["once"], args["delay"], args["rate"], args["adviceMsg"], args["maxCalls"]);
+}, addAdvice:function (thisAdviceObj, thisAdvice, thisAroundObj, thisAround, adviceType, precedence, once, delay, rate, asMessage, maxCalls) {
+	var arr = this.getArr(adviceType);
+	if (!arr) {
+		dojo.raise("bad this: " + this);
+	}
+	var ao = [thisAdviceObj, thisAdvice, thisAroundObj, thisAround, delay, rate, asMessage, maxCalls];
+	if (once) {
+		if (this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr) >= 0) {
+			return;
 		}
-
-		var ao = [thisAdviceObj, thisAdvice, thisAroundObj, thisAround, delay, rate, asMessage];
-		
-		if(once){
-			if(this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr) >= 0){
-				return;
-			}
+	}
+	if (precedence == "first") {
+		arr.unshift(ao);
+	} else {
+		arr.push(ao);
+	}
+}, hasAdvice:function (thisAdviceObj, thisAdvice, adviceType, arr) {
+	if (!arr) {
+		arr = this.getArr(adviceType);
+	}
+	var ind = -1;
+	for (var x = 0; x < arr.length; x++) {
+		var aao = (typeof thisAdvice == "object") ? (new String(thisAdvice)).toString() : thisAdvice;
+		var a1o = (typeof arr[x][1] == "object") ? (new String(arr[x][1])).toString() : arr[x][1];
+		if ((arr[x][0] == thisAdviceObj) && (a1o == aao)) {
+			ind = x;
 		}
-
-		if(precedence == "first"){
-			arr.unshift(ao);
-		}else{
-			arr.push(ao);
+	}
+	return ind;
+}, removeAdvice:function (thisAdviceObj, thisAdvice, adviceType, once) {
+	var arr = this.getArr(adviceType);
+	var ind = this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr);
+	if (ind == -1) {
+		return false;
+	}
+	while (ind != -1) {
+		arr.splice(ind, 1);
+		if (once) {
+			break;
 		}
-	},
-
-	hasAdvice: function(thisAdviceObj, thisAdvice, adviceType, arr){
-		// summary:
-		//		returns the array index of the first existing connection
-		//		betweened the passed advice and this joinpoint. Will be -1 if
-		//		none exists.
-		// thisAdviceObj:
-		//		the scope in which to locate/execute the named adviceFunc.
-		// thisAdviceFunc:
-		//		the name of the function being conected
-		// adviceType: 
-		//		Optional. String. One of "before", "after", "around",
-		//		"before-around", or "after-around". FIXME
-		// arr:
-		//		Optional. The list of advices to search. Will be found via
-		//		adviceType if not passed
-		if(!arr){ arr = this.getArr(adviceType); }
-		var ind = -1;
-		for(var x=0; x<arr.length; x++){
-			var aao = (typeof thisAdvice == "object") ? (new String(thisAdvice)).toString() : thisAdvice;
-			var a1o = (typeof arr[x][1] == "object") ? (new String(arr[x][1])).toString() : arr[x][1];
-			if((arr[x][0] == thisAdviceObj)&&(a1o == aao)){
-				ind = x;
-			}
-		}
-		return ind; // Integer
-	},
-
-	removeAdvice: function(thisAdviceObj, thisAdvice, adviceType, once){
-		// summary:
-		//		returns the array index of the first existing connection
-		//		betweened the passed advice and this joinpoint. Will be -1 if
-		//		none exists.
-		// thisAdviceObj:
-		//		the scope in which to locate/execute the named adviceFunc.
-		// thisAdviceFunc:
-		//		the name of the function being conected
-		// adviceType: 
-		//		Optional. String. One of "before", "after", "around",
-		//		"before-around", or "after-around". FIXME
-		// once:
-		//		Optional. Should this only remove the first occurance of the
-		//		connection?
-		var arr = this.getArr(adviceType);
-		var ind = this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr);
-		if(ind == -1){
-			return false;
-		}
-		while(ind != -1){
-			arr.splice(ind, 1);
-			if(once){ break; }
-			ind = this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr);
-		}
-		return true;
+		ind = this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr);
 	}
-});
+	return true;
+}});
 
+
 __CPAN_FILE__ src/event/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -17706,13 +12355,10 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: ["dojo.event.common", "dojo.event.topic"],
-	browser: ["dojo.event.browser"],
-	dashboard: ["dojo.event.browser"]
-});
+dojo.kwCompoundRequire({common:["dojo.event.common", "dojo.event.topic"], browser:["dojo.event.browser"], dashboard:["dojo.event.browser"]});
 dojo.provide("dojo.event.*");
 
+
 __CPAN_DIR__ src/dnd
 __CPAN_FILE__ src/dnd/DragAndDrop.js
 /*
@@ -17729,257 +12375,67 @@
 dojo.require("dojo.lang.func");
 dojo.require("dojo.lang.declare");
 dojo.provide("dojo.dnd.DragAndDrop");
-
-// summary:
-//		Core "interfaces" for the participants in all DnD operations.
-//		Subclasses implement all of the actions outlined by these APIs, with
-//		most of the ones you probably care about being defined in
-//		HtmlDragAndDrop.js, which will be automatically included should you
-//		dojo.require("dojo.dnd.*");.
-//
-//		In addition to the various actor classes, a global manager will be
-//		created/installed at dojo.dnd.dragManager. This manager object is of
-//		type dojo.dnd.DragManager and will be replaced by environment-specific
-//		managers.
-//
-// 		The 3 object types involved in any Drag and Drop operation are:
-//			* DragSource
-//				This is the item that can be selected for dragging. Drag
-//				sources can have "types" to help mediate whether or not various
-//				DropTargets will accept (or reject them). Most dragging actions
-//				are handled by the DragObject which the DragSource generates
-//				from its onDragStart method.
-//			* DragObject
-//				This, along with the manger, does most of the hard work of DnD.
-//				Implementations may rely on DragObject instances to implement
-//				"shadowing", "movement", or other kinds of DnD variations that
-//				affect the visual representation of the drag operation.
-//			* DropTarget
-//				Represents some section of the screen that can accept drag
-//				and drop events. DropTargets keep a list of accepted types
-//				which is checked agains the types of the respective DragSource
-//				objects that pass over it. DropTargets may implement behaviors
-//				that respond to drop events to take application-level actions.
-
-dojo.declare("dojo.dnd.DragSource", null, {
-	// String: 
-	//		what kind of drag source are we? Used to determine if we can be
-	//		dropped on a given DropTarget
-	type: "",
-
-	onDragEnd: function(/*dojo.dnd.DragEvent*/evt){
-		// summary:
-		//		stub handler that is called when dragging finishes.
-	},
-
-	onDragStart: function(/*dojo.dnd.DragEvent*/evt){ // dojo.dnd.DragObject
-		// summary:
-		//		stub handler that is called when dragging starts. Subclasses
-		//		should ensure that onDragStart *always* returns a
-		//		dojo.dnd.DragObject instance.
-	},
-
-	onSelected: function(/*dojo.dnd.DragEvent*/evt){
-		// summary:
-		//		This function gets called when the DOM element was selected for
-		//		dragging by the HtmlDragAndDropManager.
-	},
-
-	unregister: function(){
-		// summary: remove this drag source from the manager
-		dojo.dnd.dragManager.unregisterDragSource(this);
-	},
-
-	reregister: function(){
-		// summary: add this drag source to the manager
-		dojo.dnd.dragManager.registerDragSource(this);
+dojo.declare("dojo.dnd.DragSource", null, {type:"", onDragEnd:function (evt) {
+}, onDragStart:function (evt) {
+}, onSelected:function (evt) {
+}, unregister:function () {
+	dojo.dnd.dragManager.unregisterDragSource(this);
+}, reregister:function () {
+	dojo.dnd.dragManager.registerDragSource(this);
+}});
+dojo.declare("dojo.dnd.DragObject", null, {type:"", register:function () {
+	var dm = dojo.dnd.dragManager;
+	if (dm["registerDragObject"]) {
+		dm.registerDragObject(this);
 	}
-});
-
-dojo.declare("dojo.dnd.DragObject", null, {
-	// String: 
-	//		what kind of drag object are we? Used to determine if we can be
-	//		dropped on a given DropTarget
-	type: "",
-	
-	register: function(){
-		// summary: register this DragObject with the manager
-		var dm = dojo.dnd.dragManager;
-		if(dm["registerDragObject"]){ // side-effect prevention
-			dm.registerDragObject(this);
+}, onDragStart:function (evt) {
+}, onDragMove:function (evt) {
+}, onDragOver:function (evt) {
+}, onDragOut:function (evt) {
+}, onDragEnd:function (evt) {
+}, onDragLeave:dojo.lang.forward("onDragOut"), onDragEnter:dojo.lang.forward("onDragOver"), ondragout:dojo.lang.forward("onDragOut"), ondragover:dojo.lang.forward("onDragOver")});
+dojo.declare("dojo.dnd.DropTarget", null, {acceptsType:function (type) {
+	if (!dojo.lang.inArray(this.acceptedTypes, "*")) {
+		if (!dojo.lang.inArray(this.acceptedTypes, type)) {
+			return false;
 		}
-	},
-
-	onDragStart: function(/*dojo.dnd.DragEvent*/evt){
-		// summary:
-		// 		over-ridden by subclasses. Gets called directly after being
-		// 		created by the DragSource default action is to clone self as
-		// 		icon
-	},
-
-	onDragMove: function(/*dojo.dnd.DragEvent*/evt){
-		// summary: 
-		//		Implemented by subclasses. Should change the UI for the drag
-		//		icon i.e., "it moves itself"
-	},
-
-	onDragOver: function(/*dojo.dnd.DragEvent*/evt){
-		// summary:
-		//		stub handler that is called when the DragObject instance is
-		//		"over" a DropTarget.
-	},
-
-	onDragOut: function(/*dojo.dnd.DragEvent*/evt){
-		// summary:
-		//		stub handler that is called when the DragObject instance leaves
-		//		a DropTarget.
-	},
-
-	onDragEnd: function(/*dojo.dnd.DragEvent*/evt){
-		// summary:
-		//		stub handler that is called when dragging ends, either through
-		//		dropping or cancelation.
-	},
-
-	// normal aliases
-	onDragLeave: dojo.lang.forward("onDragOut"),
-	onDragEnter: dojo.lang.forward("onDragOver"),
-
-	// non-camel aliases
-	ondragout: dojo.lang.forward("onDragOut"),
-	ondragover: dojo.lang.forward("onDragOver")
-});
-
-dojo.declare("dojo.dnd.DropTarget", null, {
-
-	acceptsType: function(/*String*/type){
-		// summary: 
-		//		determines whether or not this DropTarget will accept the given
-		//		type. The default behavior is to consult this.acceptedTypes and
-		//		if "*" is a member, to always accept the type.
-		if(!dojo.lang.inArray(this.acceptedTypes, "*")){ // wildcard
-			if(!dojo.lang.inArray(this.acceptedTypes, type)) { return false; } // Boolean
-		}
-		return true; // Boolean
-	},
-
-	accepts: function(/*Array*/dragObjects){
-		// summary: 
-		//		determines if we'll accept all members of the passed array of
-		//		dojo.dnd.DragObject instances
-		if(!dojo.lang.inArray(this.acceptedTypes, "*")){ // wildcard
-			for (var i = 0; i < dragObjects.length; i++) {
-				if (!dojo.lang.inArray(this.acceptedTypes,
-					dragObjects[i].type)) { return false; } // Boolean
+	}
+	return true;
+}, accepts:function (dragObjects) {
+	if (!dojo.lang.inArray(this.acceptedTypes, "*")) {
+		for (var i = 0; i < dragObjects.length; i++) {
+			if (!dojo.lang.inArray(this.acceptedTypes, dragObjects[i].type)) {
+				return false;
 			}
 		}
-		return true; // Boolean
-	},
-
-	unregister: function(){
-		// summary: remove from the drag manager
-		dojo.dnd.dragManager.unregisterDropTarget(this);
-	},
-
-	onDragOver: function(/*dojo.dnd.DragEvent*/evt){
-		// summary:
-		//		stub handler that is called when DragObject instances are
-		//		"over" this DropTarget.
-	},
-
-	onDragOut: function(/*dojo.dnd.DragEvent*/evt){
-		// summary:
-		//		stub handler that is called when DragObject instances are
-		//		"leave" this DropTarget.
-	},
-
-	onDragMove: function(/*dojo.dnd.DragEvent*/evt){
-		// summary:
-		//		stub handler that is called when DragObject instances are
-		//		moved across this DropTarget. May fire many times in the course
-		//		of the drag operation but will end after onDragOut
-	},
-
-	onDropStart: function(/*dojo.dnd.DragEvent*/evt){ // Boolean
-		// summary:
-		//		stub handler that is called when DragObject instances are
-		//		dropped on this target. If true is returned from onDropStart,
-		//		dropping proceeds, otherwise it's cancled.
-	},
-
-	onDrop: function(/*dojo.dnd.DragEvent*/evt){
-		// summary: we're getting dropped on!
-	},
-
-	onDropEnd: function(){
-		// summary: dropping is over
 	}
-}, function(){
+	return true;
+}, unregister:function () {
+	dojo.dnd.dragManager.unregisterDropTarget(this);
+}, onDragOver:function (evt) {
+}, onDragOut:function (evt) {
+}, onDragMove:function (evt) {
+}, onDropStart:function (evt) {
+}, onDrop:function (evt) {
+}, onDropEnd:function () {
+}}, function () {
 	this.acceptedTypes = [];
 });
-
-// NOTE: this interface is defined here for the convenience of the DragManager
-// implementor. It is expected that in most cases it will be satisfied by
-// extending a native event (DOM event in HTML and SVG).
-dojo.dnd.DragEvent = function(){
+dojo.dnd.DragEvent = function () {
 	this.dragSource = null;
 	this.dragObject = null;
 	this.target = null;
 	this.eventStatus = "success";
-	//
-	// can be one of:
-	//	[	"dropSuccess", "dropFailure", "dragMove",
-	//		"dragStart", "dragEnter", "dragLeave"]
-	//
-}
-/*
- *	The DragManager handles listening for low-level events and dispatching
- *	them to higher-level primitives like drag sources and drop targets. In
- *	order to do this, it must keep a list of the items.
- */
-dojo.declare("dojo.dnd.DragManager", null, {
-	// Array: an array of currently selected DragSource objects
-	selectedSources: [],
-	// Array: all DragObjects we know about
-	dragObjects: [],
-	// Array: all DragSources we know about
-	dragSources: [],
-	registerDragSource: function(/*dojo.dnd.DragSource*/ source){
-		// summary: called by DragSource class constructor
-	},
-	// Array: all DropTargets we know about
-	dropTargets: [],
-	registerDropTarget: function(/*dojo.dnd.DropTarget*/ target){
-		// summary: called by DropTarget class constructor
-	},
-	// dojo.dnd.DropTarget:
-	//		what was the last DropTarget instance we left in the drag phase?
-	lastDragTarget: null,
-	// dojo.dnd.DropTarget:
-	//		the DropTarget the mouse is currently over
-	currentDragTarget: null,
-	onKeyDown: function(){
-		// summary: generic handler called by low-level events
-	},
-	onMouseOut: function(){
-		// summary: generic handler called by low-level events
-	},
-	onMouseMove: function(){
-		// summary: generic handler called by low-level events
-	},
-	onMouseUp: function(){
-		// summary: generic handler called by low-level events
-	}
-});
+};
+dojo.declare("dojo.dnd.DragManager", null, {selectedSources:[], dragObjects:[], dragSources:[], registerDragSource:function (source) {
+}, dropTargets:[], registerDropTarget:function (target) {
+}, lastDragTarget:null, currentDragTarget:null, onKeyDown:function () {
+}, onMouseOut:function () {
+}, onMouseMove:function () {
+}, onMouseUp:function () {
+}});
 
-// NOTE: despite the existance of the DragManager class, there will be a
-// singleton drag manager provided by the renderer-specific D&D support code.
-// It is therefore sane for us to assign instance variables to the DragManager
-// prototype
 
-// The renderer-specific file will define the following object:
-// dojo.dnd.dragManager = null;
-
 __CPAN_FILE__ src/dnd/TreeDragAndDropV3.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -17991,400 +12447,213 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-/**
- * TreeDrag* specialized on managing subtree drags
- * It selects nodes and visualises what's going on,
- * but delegates real actions upon tree to the controller
- *
- * This code is considered a part of controller
-*/
-
 dojo.provide("dojo.dnd.TreeDragAndDropV3");
-
 dojo.require("dojo.dnd.HtmlDragAndDrop");
 dojo.require("dojo.lang.func");
 dojo.require("dojo.lang.array");
 dojo.require("dojo.lang.extras");
 dojo.require("dojo.Deferred");
 dojo.require("dojo.html.layout");
-
-// FIXME: if controller can't move then skip node on move start
-dojo.dnd.TreeDragSourceV3 = function(node, syncController, type, treeNode){
-	//dojo.profile.start("TreeDragSourceV3 "+treeNode);
+dojo.dnd.TreeDragSourceV3 = function (node, syncController, type, treeNode) {
 	this.controller = syncController;
 	this.treeNode = treeNode;
-
 	dojo.dnd.HtmlDragSource.call(this, node, type);
-	//dojo.profile.end("TreeDragSourceV3 "+treeNode);
-}
-
+};
 dojo.inherits(dojo.dnd.TreeDragSourceV3, dojo.dnd.HtmlDragSource);
-
-
-// .......................................
-
-dojo.dnd.TreeDropTargetV3 = function(domNode, controller, type, treeNode){
-
+dojo.dnd.TreeDropTargetV3 = function (domNode, controller, type, treeNode) {
 	this.treeNode = treeNode;
-	this.controller = controller; // I will sync-ly process drops
-	
+	this.controller = controller;
 	dojo.dnd.HtmlDropTarget.call(this, domNode, type);
-}
-
+};
 dojo.inherits(dojo.dnd.TreeDropTargetV3, dojo.dnd.HtmlDropTarget);
-
-dojo.lang.extend(dojo.dnd.TreeDropTargetV3, {
-
-	autoExpandDelay: 1500,
-	autoExpandTimer: null,
-
-
-	position: null,
-
-	indicatorStyle: "2px black groove",
-
-	showIndicator: function(position) {
-
-		// do not change style too often, cause of blinking possible
-		if (this.position == position) {
-			return;
-		}
-
-		//dojo.debug("set position for "+this.treeNode)
-
-		this.hideIndicator();
-
-		this.position = position;
-		
-		var node = this.treeNode;
-			
-		
-		node.contentNode.style.width = dojo.html.getBorderBox(node.labelNode).width + "px";
-
-		if (position == "onto") {					
-			node.contentNode.style.border = this.indicatorStyle;
+dojo.lang.extend(dojo.dnd.TreeDropTargetV3, {autoExpandDelay:1500, autoExpandTimer:null, position:null, indicatorStyle:"2px black groove", showIndicator:function (position) {
+	if (this.position == position) {
+		return;
+	}
+	this.hideIndicator();
+	this.position = position;
+	var node = this.treeNode;
+	node.contentNode.style.width = dojo.html.getBorderBox(node.labelNode).width + "px";
+	if (position == "onto") {
+		node.contentNode.style.border = this.indicatorStyle;
+	} else {
+		if (position == "before") {
+			node.contentNode.style.borderTop = this.indicatorStyle;
 		} else {
-			// FIXME: bottom-top or highlight should cover ONLY top/bottom or div itself,
-			// not span whole line (try Dnd)
-			// FAILURE: Can't put span inside div: multiline bottom-top will span multiple lines
-			if (position == "before") {
-				node.contentNode.style.borderTop = this.indicatorStyle;
-			} else if (position == "after") {
+			if (position == "after") {
 				node.contentNode.style.borderBottom = this.indicatorStyle;
-			}									
-		}  
-	},
-
-	hideIndicator: function() {
-		this.treeNode.contentNode.style.borderBottom = "";
-		this.treeNode.contentNode.style.borderTop = "";
-		this.treeNode.contentNode.style.border = "";
-		this.treeNode.contentNode.style.width=""
-		this.position = null;
-	},
-
-
-
-	// is the target possibly ok ?
-	// This function is run on dragOver, but drop possibility is also determined by position over node
-	// that's why acceptsWithPosition is called
-	// doesnt take index into account ( can change while moving mouse w/o changing target )
-	/**
-	 * Coarse (tree-level) access check.
-	 * We can't determine real accepts status w/o position
-	*/
-	onDragOver: function(e){
-		//dojo.debug("onDragOver for "+e);
-
-		var accepts = dojo.dnd.HtmlDropTarget.prototype.onDragOver.apply(this, arguments);
-
-		//dojo.debug("TreeDropTarget.onDragOver accepts:"+accepts)
-
-		if (accepts && this.treeNode.isFolder && !this.treeNode.isExpanded) {
-			this.setAutoExpandTimer();
-		}
-		
-		if (accepts) {
-			this.cacheNodeCoords();
-		}
-
-
-		return accepts;
-	},
-
-	/* Parent.onDragOver calls this function to get accepts status */
-	accepts: function(dragObjects) {
-
-		var accepts = dojo.dnd.HtmlDropTarget.prototype.accepts.apply(this, arguments);
-
-		//dojo.debug("accepts "+accepts);
-
-		if (!accepts) return false;
-
-		for(var i=0; i<dragObjects.length; i++) {
-			// there may be NO treeNode
-			var sourceTreeNode = dragObjects[i].treeNode;
-			
-			if (sourceTreeNode === this.treeNode) return false;
-		}
-
-		return true;
-	},
-
-
-
-	setAutoExpandTimer: function() {
-		// set up autoexpand timer
-		var _this = this;
-
-		var autoExpand = function () {
-			if (dojo.dnd.dragManager.currentDropTarget === _this) {
-				_this.controller.expand(_this.treeNode);
-				// SLOW. Coordinates will not be recalculated if collapse occurs, or
-				// other (generic) resize. So that's a kind of hack.
-				dojo.dnd.dragManager.cacheTargetLocations();
 			}
 		}
-
-		this.autoExpandTimer = dojo.lang.setTimeout(autoExpand, _this.autoExpandDelay);
-	},
-
-		
-
-	getAcceptPosition: function(e, dragObjects) {
-
-
-		var DndMode = this.treeNode.tree.DndMode;
-
-		// disable ONTO mode possibility if impossible 
-		if (DndMode & dojo.widget.TreeV3.prototype.DndModes.ONTO &&
-			// check if ONTO is allowed localy
-			// check dynamically cause may change w/o regeneration of dropTarget
-			this.treeNode.actionIsDisabledNow(this.treeNode.actions.ADDCHILD) 
-		) {
-			// disable ONTO if can't move
-			DndMode &= ~dojo.widget.TreeV3.prototype.DndModes.ONTO;
+	}
+}, hideIndicator:function () {
+	this.treeNode.contentNode.style.borderBottom = "";
+	this.treeNode.contentNode.style.borderTop = "";
+	this.treeNode.contentNode.style.border = "";
+	this.treeNode.contentNode.style.width = "";
+	this.position = null;
+}, onDragOver:function (e) {
+	var accepts = dojo.dnd.HtmlDropTarget.prototype.onDragOver.apply(this, arguments);
+	if (accepts && this.treeNode.isFolder && !this.treeNode.isExpanded) {
+		this.setAutoExpandTimer();
+	}
+	if (accepts) {
+		this.cacheNodeCoords();
+	}
+	return accepts;
+}, accepts:function (dragObjects) {
+	var accepts = dojo.dnd.HtmlDropTarget.prototype.accepts.apply(this, arguments);
+	if (!accepts) {
+		return false;
+	}
+	for (var i = 0; i < dragObjects.length; i++) {
+		var sourceTreeNode = dragObjects[i].treeNode;
+		if (sourceTreeNode === this.treeNode) {
+			return false;
 		}
-		
-
-		var position = this.getPosition(e, DndMode);
-
-		//dojo.debug(DndMode & +" : "+position);
-
-
-		// if onto is here => it was allowed before, no accept check is needed
-		if (position=="onto") {
-			return position;
+	}
+	return true;
+}, setAutoExpandTimer:function () {
+	var _this = this;
+	var autoExpand = function () {
+		if (dojo.dnd.dragManager.currentDropTarget === _this) {
+			_this.controller.expand(_this.treeNode);
+			dojo.dnd.dragManager.cacheTargetLocations();
 		}
-		
-		for(var i=0; i<dragObjects.length; i++) {
-			var source = dragObjects[i].dragSource;
-			if (source.treeNode && this.isAdjacentNode(source.treeNode, position)) { // skip check if same parent
-				continue;
-			}		
-						
-			if (!this.controller.canMove(source.treeNode ? source.treeNode : source, this.treeNode.parent)) {
-				return false;
-			}
-		}
-		
+	};
+	this.autoExpandTimer = dojo.lang.setTimeout(autoExpand, _this.autoExpandDelay);
+}, getAcceptPosition:function (e, dragObjects) {
+	var DndMode = this.treeNode.tree.DndMode;
+	if (DndMode & dojo.widget.TreeV3.prototype.DndModes.ONTO && this.treeNode.actionIsDisabledNow(this.treeNode.actions.ADDCHILD)) {
+		DndMode &= ~dojo.widget.TreeV3.prototype.DndModes.ONTO;
+	}
+	var position = this.getPosition(e, DndMode);
+	if (position == "onto") {
 		return position;
-	
-	},
-
-	
-
-	onDropEnd: function(e) {
-		this.clearAutoExpandTimer();
-
-		this.hideIndicator();
-	},
-
-
-	onDragOut: function(e) {
-		this.clearAutoExpandTimer();
-
-		this.hideIndicator();
-	},
-
-	clearAutoExpandTimer: function() {
-		if (this.autoExpandTimer) {
-			clearTimeout(this.autoExpandTimer);
-			this.autoExpandTimer = null;
+	}
+	for (var i = 0; i < dragObjects.length; i++) {
+		var source = dragObjects[i].dragSource;
+		if (source.treeNode && this.isAdjacentNode(source.treeNode, position)) {
+			continue;
 		}
-	},
-
-
-
-	onDragMove: function(e, dragObjects){
-		
-		var position = this.getAcceptPosition(e, dragObjects);
-
-		if (position) {
-			this.showIndicator(position);
+		if (!this.controller.canMove(source.treeNode ? source.treeNode : source, this.treeNode.parent)) {
+			return false;
 		}
-
-	},
-
-	isAdjacentNode: function(sourceNode, position) {
-
-		if (sourceNode === this.treeNode) return true;
-		if (sourceNode.getNextSibling() === this.treeNode && position=="before") return true;
-		if (sourceNode.getPreviousSibling() === this.treeNode && position=="after") return true;
-
-		return false;
-	},
-
-
-	/**
-	 * cache node coordinates to speed up onDragMove
-	 */
-	cacheNodeCoords: function() {
-		var node = this.treeNode.contentNode;
-		
-		this.cachedNodeY = dojo.html.getAbsolutePosition(node).y;
-		this.cachedNodeHeight = dojo.html.getBorderBox(node).height;
-	},
-	
-	
-
-	/* get DndMode and see which position e fits */
-	getPosition: function(e, DndMode) {
-		var mousey = e.pageY || e.clientY + dojo.body().scrollTop;
-		
-		var relY = mousey - this.cachedNodeY;
-		var p = relY / this.cachedNodeHeight;
-
-		var position = ""; // "" <=> forbidden
-		if (DndMode & dojo.widget.TreeV3.prototype.DndModes.ONTO
-		  && DndMode & dojo.widget.TreeV3.prototype.DndModes.BETWEEN) {
-			//dojo.debug("BOTH");
-			if (p<=0.33) {
-				position = "before";
-				// if children are expanded then I ignore understrike, cause it is confusing with firstChild
-				// but for last nodes I put understrike there
-			} else if (p<=0.66 || this.treeNode.isExpanded && this.treeNode.children.length && !this.treeNode.isLastChild()) {
+	}
+	return position;
+}, onDropEnd:function (e) {
+	this.clearAutoExpandTimer();
+	this.hideIndicator();
+}, onDragOut:function (e) {
+	this.clearAutoExpandTimer();
+	this.hideIndicator();
+}, clearAutoExpandTimer:function () {
+	if (this.autoExpandTimer) {
+		clearTimeout(this.autoExpandTimer);
+		this.autoExpandTimer = null;
+	}
+}, onDragMove:function (e, dragObjects) {
+	var position = this.getAcceptPosition(e, dragObjects);
+	if (position) {
+		this.showIndicator(position);
+	}
+}, isAdjacentNode:function (sourceNode, position) {
+	if (sourceNode === this.treeNode) {
+		return true;
+	}
+	if (sourceNode.getNextSibling() === this.treeNode && position == "before") {
+		return true;
+	}
+	if (sourceNode.getPreviousSibling() === this.treeNode && position == "after") {
+		return true;
+	}
+	return false;
+}, cacheNodeCoords:function () {
+	var node = this.treeNode.contentNode;
+	this.cachedNodeY = dojo.html.getAbsolutePosition(node).y;
+	this.cachedNodeHeight = dojo.html.getBorderBox(node).height;
+}, getPosition:function (e, DndMode) {
+	var mousey = e.pageY || e.clientY + dojo.body().scrollTop;
+	var relY = mousey - this.cachedNodeY;
+	var p = relY / this.cachedNodeHeight;
+	var position = "";
+	if (DndMode & dojo.widget.TreeV3.prototype.DndModes.ONTO && DndMode & dojo.widget.TreeV3.prototype.DndModes.BETWEEN) {
+		if (p <= 0.33) {
+			position = "before";
+		} else {
+			if (p <= 0.66 || this.treeNode.isExpanded && this.treeNode.children.length && !this.treeNode.isLastChild()) {
 				position = "onto";
 			} else {
 				position = "after";
 			}
-		} else if (DndMode & dojo.widget.TreeV3.prototype.DndModes.BETWEEN) {
-			//dojo.debug("BETWEEN");
-			if (p<=0.5 || this.treeNode.isExpanded && this.treeNode.children.length && !this.treeNode.isLastChild()) {
+		}
+	} else {
+		if (DndMode & dojo.widget.TreeV3.prototype.DndModes.BETWEEN) {
+			if (p <= 0.5 || this.treeNode.isExpanded && this.treeNode.children.length && !this.treeNode.isLastChild()) {
 				position = "before";
 			} else {
 				position = "after";
 			}
-		}
-		else if (DndMode & dojo.widget.TreeV3.prototype.DndModes.ONTO) {
-			//dojo.debug("ONTO");
-			position = "onto";
-		}
-
-		//dojo.debug(position);
-
-		return position;
-	},
-
-
-
-	getTargetParentIndex: function(source, position) {
-
-		var index = position == "before" ? this.treeNode.getParentIndex() : this.treeNode.getParentIndex()+1;
-		if (source.treeNode
-		  && this.treeNode.parent === source.treeNode.parent
-		  && this.treeNode.getParentIndex() > source.treeNode.getParentIndex()) {
-		  	index--;  // dragging a node is different for simple move bacause of before-after issues
-		}
-
-		return index;
-	},
-
-
-	onDrop: function(e) {
-		// onDropEnd will clean position
-
-		
-		var position = this.position;
-
-//dojo.debug(position);
-		var source = e.dragObject.dragSource;
-		
-		//dojo.debug("onDrop "+source.treeNode+" " + position + " "+this.treeNode);
-
-
-		var targetParent, targetIndex;
-		if (position == "onto") {
-			targetParent = this.treeNode;
-			targetIndex = 0;
 		} else {
-			targetIndex = this.getTargetParentIndex(source, position);
-			targetParent = this.treeNode.parent;
+			if (DndMode & dojo.widget.TreeV3.prototype.DndModes.ONTO) {
+				position = "onto";
+			}
 		}
-		
-		//dojo.profile.start("onDrop "+sourceTreeNode);
-		var r = this.getDropHandler(e, source, targetParent, targetIndex)();
-		
-		//dojo.profile.end("onDrop "+sourceTreeNode);
-			
-		return r;
-
-	},
-	
-	/**
-	 * determine, which action I should perform with nodes
-	 * e.g move, clone..
-	 */
-	getDropHandler: function(e, source, targetParent, targetIndex) {
-		var handler;
-		var _this = this;
-		handler = function () {
-			var result;
-			
-			//dojo.debug("Move "+source.treeNode+" to parent "+targetParent+":"+targetIndex);
-			if (source.treeNode) {
-				result = _this.controller.move(source.treeNode, targetParent, targetIndex, true);
-				//dojo.debug("moved "+result);
-			} else {
-				if (dojo.lang.isFunction(source.onDrop)) {
-					source.onDrop(targetParent, targetIndex);
-				}
-				
-				var treeNode = source.getTreeNode();
-				if (treeNode) {
-					result = _this.controller.createChild(targetParent, targetIndex, treeNode, true);
-				} else {
-					result = true;
-				}
+	}
+	return position;
+}, getTargetParentIndex:function (source, position) {
+	var index = position == "before" ? this.treeNode.getParentIndex() : this.treeNode.getParentIndex() + 1;
+	if (source.treeNode && this.treeNode.parent === source.treeNode.parent && this.treeNode.getParentIndex() > source.treeNode.getParentIndex()) {
+		index--;
+	}
+	return index;
+}, onDrop:function (e) {
+	var position = this.position;
+	var source = e.dragObject.dragSource;
+	var targetParent, targetIndex;
+	if (position == "onto") {
+		targetParent = this.treeNode;
+		targetIndex = 0;
+	} else {
+		targetIndex = this.getTargetParentIndex(source, position);
+		targetParent = this.treeNode.parent;
+	}
+	var r = this.getDropHandler(e, source, targetParent, targetIndex)();
+	return r;
+}, getDropHandler:function (e, source, targetParent, targetIndex) {
+	var handler;
+	var _this = this;
+	handler = function () {
+		var result;
+		if (source.treeNode) {
+			result = _this.controller.move(source.treeNode, targetParent, targetIndex, true);
+		} else {
+			if (dojo.lang.isFunction(source.onDrop)) {
+				source.onDrop(targetParent, targetIndex);
 			}
-			
-			if (result instanceof dojo.Deferred) {
-				// this Deferred is always sync
-				var isSuccess = result.fired == 0;
-				if (!isSuccess) {
-					_this.handleDropError(source, targetParent, targetIndex, result);
-				}
-				
-				return isSuccess;				
-				
+			var treeNode = source.getTreeNode();
+			if (treeNode) {
+				result = _this.controller.createChild(targetParent, targetIndex, treeNode, true);
 			} else {
-				return result;
+				result = true;
 			}
 		}
-		
-		return handler;
-	},
-	
-	
-	handleDropError: function(source, parent, index, result) {
-		dojo.debug("TreeDropTargetV3.handleDropError: DND error occured");
-		dojo.debugShallow(result);
-	}
+		if (result instanceof dojo.Deferred) {
+			var isSuccess = result.fired == 0;
+			if (!isSuccess) {
+				_this.handleDropError(source, targetParent, targetIndex, result);
+			}
+			return isSuccess;
+		} else {
+			return result;
+		}
+	};
+	return handler;
+}, handleDropError:function (source, parent, index, result) {
+	dojo.debug("TreeDropTargetV3.handleDropError: DND error occured");
+	dojo.debugShallow(result);
+}});
 
 
-});
-
-
 __CPAN_FILE__ src/dnd/Sortable.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -18398,22 +12667,16 @@
 
 dojo.provide("dojo.dnd.Sortable");
 dojo.require("dojo.dnd.*");
-
-dojo.dnd.Sortable = function () {}
-
-dojo.lang.extend(dojo.dnd.Sortable, {
-
-	ondragstart: function (e) {
-		var dragObject = e.target;
-		while (dragObject.parentNode && dragObject.parentNode != this) {
-			dragObject = dragObject.parentNode;
-		}
-		// TODO: should apply HtmlDropTarget interface to self
-		// TODO: should apply HtmlDragObject interface?
-		return dragObject;
+dojo.dnd.Sortable = function () {
+};
+dojo.lang.extend(dojo.dnd.Sortable, {ondragstart:function (e) {
+	var dragObject = e.target;
+	while (dragObject.parentNode && dragObject.parentNode != this) {
+		dragObject = dragObject.parentNode;
 	}
+	return dragObject;
+}});
 
-});
 
 __CPAN_FILE__ src/dnd/HtmlDragManager.js
 /*
@@ -18432,497 +12695,284 @@
 dojo.require("dojo.lang.array");
 dojo.require("dojo.html.common");
 dojo.require("dojo.html.layout");
-
-// NOTE: there will only ever be a single instance of HTMLDragManager, so it's
-// safe to use prototype properties for book-keeping.
-dojo.declare("dojo.dnd.HtmlDragManager", dojo.dnd.DragManager, {
-	/**
-	 * There are several sets of actions that the DnD code cares about in the
-	 * HTML context:
-	 *	1.) mouse-down ->
-	 *			(draggable selection)
-	 *			(dragObject generation)
-	 *		mouse-move ->
-	 *			(draggable movement)
-	 *			(droppable detection)
-	 *			(inform droppable)
-	 *			(inform dragObject)
-	 *		mouse-up
-	 *			(inform/destroy dragObject)
-	 *			(inform draggable)
-	 *			(inform droppable)
-	 *	2.) mouse-down -> mouse-down
-	 *			(click-hold context menu)
-	 *	3.) mouse-click ->
-	 *			(draggable selection)
-	 *		shift-mouse-click ->
-	 *			(augment draggable selection)
-	 *		mouse-down ->
-	 *			(dragObject generation)
-	 *		mouse-move ->
-	 *			(draggable movement)
-	 *			(droppable detection)
-	 *			(inform droppable)
-	 *			(inform dragObject)
-	 *		mouse-up
-	 *			(inform draggable)
-	 *			(inform droppable)
-	 *	4.) mouse-up
-	 *			(clobber draggable selection)
-	 */
-	disabled: false, // to kill all dragging!
-	nestedTargets: false,
-	mouseDownTimer: null, // used for click-hold operations
-	dsCounter: 0,
-	dsPrefix: "dojoDragSource",
-
-	// dimension calculation cache for use durring drag
-	dropTargetDimensions: [],
-
-	currentDropTarget: null,
-	// currentDropTargetPoints: null,
-	previousDropTarget: null,
-	_dragTriggered: false,
-
-	selectedSources: [],
-	dragObjects: [],
-	dragSources: [],
-
-	// mouse position properties
-	currentX: null,
-	currentY: null,
-	lastX: null,
-	lastY: null,
-	mouseDownX: null,
-	mouseDownY: null,
-	threshold: 7,
-
-	dropAcceptable: false,
-
-	cancelEvent: function(e){ e.stopPropagation(); e.preventDefault();},
-
-	// method over-rides
-	registerDragSource: function(ds){
-		//dojo.profile.start("register DragSource");
-
-		if(ds["domNode"]){
-			// FIXME: dragSource objects SHOULD have some sort of property that
-			// references their DOM node, we shouldn't just be passing nodes and
-			// expecting it to work.
-			//dojo.profile.start("register DragSource 1");
-			var dp = this.dsPrefix;
-			var dpIdx = dp+"Idx_"+(this.dsCounter++);
-			ds.dragSourceId = dpIdx;
-			this.dragSources[dpIdx] = ds;
-			ds.domNode.setAttribute(dp, dpIdx);
-			//dojo.profile.end("register DragSource 1");
-
-			//dojo.profile.start("register DragSource 2");
-
-			// so we can drag links
-			if(dojo.render.html.ie){
-				//dojo.profile.start("register DragSource IE");
-				
-				dojo.event.browser.addListener(ds.domNode, "ondragstart", this.cancelEvent);
-				// terribly slow
-				//dojo.event.connect(ds.domNode, "ondragstart", this.cancelEvent);
-				//dojo.profile.end("register DragSource IE");
-
-			}
-			//dojo.profile.end("register DragSource 2");
-
+dojo.declare("dojo.dnd.HtmlDragManager", dojo.dnd.DragManager, {disabled:false, nestedTargets:false, mouseDownTimer:null, dsCounter:0, dsPrefix:"dojoDragSource", dropTargetDimensions:[], currentDropTarget:null, previousDropTarget:null, _dragTriggered:false, selectedSources:[], dragObjects:[], dragSources:[], dropTargets:[], currentX:null, currentY:null, lastX:null, lastY:null, mouseDownX:null, mouseDownY:null, threshold:7, dropAcceptable:false, cancelEvent:function (e) {
+	e.stopPropagation();
+	e.preventDefault();
+}, registerDragSource:function (ds) {
+	if (ds["domNode"]) {
+		var dp = this.dsPrefix;
+		var dpIdx = dp + "Idx_" + (this.dsCounter++);
+		ds.dragSourceId = dpIdx;
+		this.dragSources[dpIdx] = ds;
+		ds.domNode.setAttribute(dp, dpIdx);
+		if (dojo.render.html.ie) {
+			dojo.event.browser.addListener(ds.domNode, "ondragstart", this.cancelEvent);
 		}
-		//dojo.profile.end("register DragSource");
-	},
-
-	unregisterDragSource: function(ds){
-		if (ds["domNode"]){
-			var dp = this.dsPrefix;
-			var dpIdx = ds.dragSourceId;
-			delete ds.dragSourceId;
-			delete this.dragSources[dpIdx];
-			ds.domNode.setAttribute(dp, null);
-			if(dojo.render.html.ie){
-				dojo.event.browser.removeListener(ds.domNode, "ondragstart", this.cancelEvent);			
-			}
+	}
+}, unregisterDragSource:function (ds) {
+	if (ds["domNode"]) {
+		var dp = this.dsPrefix;
+		var dpIdx = ds.dragSourceId;
+		delete ds.dragSourceId;
+		delete this.dragSources[dpIdx];
+		ds.domNode.setAttribute(dp, null);
+		if (dojo.render.html.ie) {
+			dojo.event.browser.removeListener(ds.domNode, "ondragstart", this.cancelEvent);
 		}
-	},
-
-	registerDropTarget: function(dt){
-		this.dropTargets.push(dt);
-	},
-
-	unregisterDropTarget: function(dt){
-		var index = dojo.lang.find(this.dropTargets, dt, true);
-		if (index>=0) {
-			this.dropTargets.splice(index, 1);
-		}
-	},
-
-	/**
-	* Get the DOM element that is meant to drag.
-	* Loop through the parent nodes of the event target until
-	* the element is found that was created as a DragSource and 
-	* return it.
-	*
-	* @param event object The event for which to get the drag source.
-	*/
-	getDragSource: function(e){
-		var tn = e.target;
-		if(tn === dojo.body()){ return; }
-		var ta = dojo.html.getAttribute(tn, this.dsPrefix);
-		while((!ta)&&(tn)){
-			tn = tn.parentNode;
-			if((!tn)||(tn === dojo.body())){ return; }
-			ta = dojo.html.getAttribute(tn, this.dsPrefix);
-		}
-		return this.dragSources[ta];
-	},
-
-	onKeyDown: function(e){
-	},
-
-	onMouseDown: function(e){
-		if(this.disabled) { return; }
-
-		// only begin on left click
-		if(dojo.render.html.ie) {
-			if(e.button != 1) { return; }
-		} else if(e.which != 1) {
+	}
+}, registerDropTarget:function (dt) {
+	this.dropTargets.push(dt);
+}, unregisterDropTarget:function (dt) {
+	var index = dojo.lang.find(this.dropTargets, dt, true);
+	if (index >= 0) {
+		this.dropTargets.splice(index, 1);
+	}
+}, getDragSource:function (e) {
+	var tn = e.target;
+	if (tn === dojo.body()) {
+		return;
+	}
+	var ta = dojo.html.getAttribute(tn, this.dsPrefix);
+	while ((!ta) && (tn)) {
+		tn = tn.parentNode;
+		if ((!tn) || (tn === dojo.body())) {
 			return;
 		}
-
-		var target = e.target.nodeType == dojo.html.TEXT_NODE ?
-			e.target.parentNode : e.target;
-
-		// do not start drag involvement if the user is interacting with
-		// a form element.
-		if(dojo.html.isTag(target, "button", "textarea", "input", "select", "option")) {
+		ta = dojo.html.getAttribute(tn, this.dsPrefix);
+	}
+	return this.dragSources[ta];
+}, onKeyDown:function (e) {
+}, onMouseDown:function (e) {
+	if (this.disabled) {
+		return;
+	}
+	if (dojo.render.html.ie) {
+		if (e.button != 1) {
 			return;
 		}
-
-		// find a selection object, if one is a parent of the source node
-		var ds = this.getDragSource(e);
-		
-		// this line is important.  if we aren't selecting anything then
-		// we need to return now, so preventDefault() isn't called, and thus
-		// the event is propogated to other handling code
-		if(!ds){ return; }
-
-		if(!dojo.lang.inArray(this.selectedSources, ds)){
-			this.selectedSources.push(ds);
-			ds.onSelected();
-		}
-
- 		this.mouseDownX = e.pageX;
- 		this.mouseDownY = e.pageY;
-
-		// Must stop the mouse down from being propogated, or otherwise can't
-		// drag links in firefox.
-		// WARNING: preventing the default action on all mousedown events
-		// prevents user interaction with the contents.
-		e.preventDefault();
-
-		dojo.event.connect(document, "onmousemove", this, "onMouseMove");
-	},
-
-	onMouseUp: function(e, cancel){
-		// if we aren't dragging then ignore the mouse-up
-		// (in particular, don't call preventDefault(), because other
-		// code may need to process this event)
-		if(this.selectedSources.length==0){
+	} else {
+		if (e.which != 1) {
 			return;
 		}
-
-		this.mouseDownX = null;
-		this.mouseDownY = null;
-		this._dragTriggered = false;
- 		// e.preventDefault();
-		e.dragSource = this.dragSource;
-		// let ctrl be used for multiselect or another action
-		// if I use same key to trigger treeV3 node selection and here,
-		// I have bugs with drag'n'drop. why ?? no idea..
-		if((!e.shiftKey)&&(!e.ctrlKey)){ 
-		//if(!e.shiftKey){
-			if(this.currentDropTarget) {
-				this.currentDropTarget.onDropStart();
+	}
+	var target = e.target.nodeType == dojo.html.TEXT_NODE ? e.target.parentNode : e.target;
+	if (dojo.html.isTag(target, "button", "textarea", "input", "select", "option")) {
+		return;
+	}
+	var ds = this.getDragSource(e);
+	if (!ds) {
+		return;
+	}
+	if (!dojo.lang.inArray(this.selectedSources, ds)) {
+		this.selectedSources.push(ds);
+		ds.onSelected();
+	}
+	this.mouseDownX = e.pageX;
+	this.mouseDownY = e.pageY;
+	e.preventDefault();
+	dojo.event.connect(document, "onmousemove", this, "onMouseMove");
+}, onMouseUp:function (e, cancel) {
+	if (this.selectedSources.length == 0) {
+		return;
+	}
+	this.mouseDownX = null;
+	this.mouseDownY = null;
+	this._dragTriggered = false;
+	e.dragSource = this.dragSource;
+	if ((!e.shiftKey) && (!e.ctrlKey)) {
+		if (this.currentDropTarget) {
+			this.currentDropTarget.onDropStart();
+		}
+		dojo.lang.forEach(this.dragObjects, function (tempDragObj) {
+			var ret = null;
+			if (!tempDragObj) {
+				return;
 			}
-			dojo.lang.forEach(this.dragObjects, function(tempDragObj){
-				var ret = null;
-				if(!tempDragObj){ return; }
-				if(this.currentDropTarget) {
-					e.dragObject = tempDragObj;
-
-					// NOTE: we can't get anything but the current drop target
-					// here since the drag shadow blocks mouse-over events.
-					// This is probelematic for dropping "in" something
-					var ce = this.currentDropTarget.domNode.childNodes;
-					if(ce.length > 0){
-						e.dropTarget = ce[0];
-						while(e.dropTarget == tempDragObj.domNode){
-							e.dropTarget = e.dropTarget.nextSibling;
-						}
-					}else{
-						e.dropTarget = this.currentDropTarget.domNode;
+			if (this.currentDropTarget) {
+				e.dragObject = tempDragObj;
+				var ce = this.currentDropTarget.domNode.childNodes;
+				if (ce.length > 0) {
+					e.dropTarget = ce[0];
+					while (e.dropTarget == tempDragObj.domNode) {
+						e.dropTarget = e.dropTarget.nextSibling;
 					}
-					if(this.dropAcceptable){
-						ret = this.currentDropTarget.onDrop(e);
-					}else{
-						 this.currentDropTarget.onDragOut(e);
-					}
+				} else {
+					e.dropTarget = this.currentDropTarget.domNode;
 				}
-
-				e.dragStatus = this.dropAcceptable && ret ? "dropSuccess" : "dropFailure";
-				// decouple the calls for onDragEnd, so they don't block the execution here
-				// ie. if the onDragEnd would call an alert, the execution here is blocked until the
-				// user has confirmed the alert box and then the rest of the dnd code is executed
-				// while the mouse doesnt "hold" the dragged object anymore ... and so on
-				dojo.lang.delayThese([
-					function() {
-						// in FF1.5 this throws an exception, see 
-						// http://dojotoolkit.org/pipermail/dojo-interest/2006-April/006751.html
-						try{
-							tempDragObj.dragSource.onDragEnd(e)
-						} catch(err) {
-							// since the problem seems passing e, we just copy all 
-							// properties and try the copy ...
-							var ecopy = {};
-							for (var i in e) {
-								if (i=="type") { // the type property contains the exception, no idea why...
-									ecopy.type = "mouseup";
-									continue;
-								}
-								ecopy[i] = e[i];
-							}
-							tempDragObj.dragSource.onDragEnd(ecopy);
+				if (this.dropAcceptable) {
+					ret = this.currentDropTarget.onDrop(e);
+				} else {
+					this.currentDropTarget.onDragOut(e);
+				}
+			}
+			e.dragStatus = this.dropAcceptable && ret ? "dropSuccess" : "dropFailure";
+			dojo.lang.delayThese([function () {
+				try {
+					tempDragObj.dragSource.onDragEnd(e);
+				}
+				catch (err) {
+					var ecopy = {};
+					for (var i in e) {
+						if (i == "type") {
+							ecopy.type = "mouseup";
+							continue;
 						}
+						ecopy[i] = e[i];
 					}
-					, function() {tempDragObj.onDragEnd(e)}]);
-			}, this);
-
-			this.selectedSources = [];
-			this.dragObjects = [];
-			this.dragSource = null;
-			if(this.currentDropTarget) {
-				this.currentDropTarget.onDropEnd();
-			}
-		} else {
-			//dojo.debug("special click");
+					tempDragObj.dragSource.onDragEnd(ecopy);
+				}
+			}, function () {
+				tempDragObj.onDragEnd(e);
+			}]);
+		}, this);
+		this.selectedSources = [];
+		this.dragObjects = [];
+		this.dragSource = null;
+		if (this.currentDropTarget) {
+			this.currentDropTarget.onDropEnd();
 		}
-
-		dojo.event.disconnect(document, "onmousemove", this, "onMouseMove");
+	} else {
+	}
+	dojo.event.disconnect(document, "onmousemove", this, "onMouseMove");
+	this.currentDropTarget = null;
+}, onScroll:function () {
+	for (var i = 0; i < this.dragObjects.length; i++) {
+		if (this.dragObjects[i].updateDragOffset) {
+			this.dragObjects[i].updateDragOffset();
+		}
+	}
+	if (this.dragObjects.length) {
+		this.cacheTargetLocations();
+	}
+}, _dragStartDistance:function (x, y) {
+	if ((!this.mouseDownX) || (!this.mouseDownX)) {
+		return;
+	}
+	var dx = Math.abs(x - this.mouseDownX);
+	var dx2 = dx * dx;
+	var dy = Math.abs(y - this.mouseDownY);
+	var dy2 = dy * dy;
+	return parseInt(Math.sqrt(dx2 + dy2), 10);
+}, cacheTargetLocations:function () {
+	dojo.profile.start("cacheTargetLocations");
+	this.dropTargetDimensions = [];
+	dojo.lang.forEach(this.dropTargets, function (tempTarget) {
+		var tn = tempTarget.domNode;
+		if (!tn || !tempTarget.accepts([this.dragSource])) {
+			return;
+		}
+		var abs = dojo.html.getAbsolutePosition(tn, true);
+		var bb = dojo.html.getBorderBox(tn);
+		this.dropTargetDimensions.push([[abs.x, abs.y], [abs.x + bb.width, abs.y + bb.height], tempTarget]);
+	}, this);
+	dojo.profile.end("cacheTargetLocations");
+}, onMouseMove:function (e) {
+	if ((dojo.render.html.ie) && (e.button != 1)) {
 		this.currentDropTarget = null;
-	},
-
-	onScroll: function(){
-		//dojo.profile.start("DNDManager updateoffset");
-		for(var i = 0; i < this.dragObjects.length; i++) {
-			if(this.dragObjects[i].updateDragOffset) {
-				this.dragObjects[i].updateDragOffset();
+		this.onMouseUp(e, true);
+		return;
+	}
+	if ((this.selectedSources.length) && (!this.dragObjects.length)) {
+		var dx;
+		var dy;
+		if (!this._dragTriggered) {
+			this._dragTriggered = (this._dragStartDistance(e.pageX, e.pageY) > this.threshold);
+			if (!this._dragTriggered) {
+				return;
 			}
+			dx = e.pageX - this.mouseDownX;
+			dy = e.pageY - this.mouseDownY;
 		}
-		//dojo.profile.end("DNDManager updateoffset");
-
-		// TODO: do not recalculate, only adjust coordinates
-		if (this.dragObjects.length) {
-			this.cacheTargetLocations();
+		this.dragSource = this.selectedSources[0];
+		dojo.lang.forEach(this.selectedSources, function (tempSource) {
+			if (!tempSource) {
+				return;
+			}
+			var tdo = tempSource.onDragStart(e);
+			if (tdo) {
+				tdo.onDragStart(e);
+				tdo.dragOffset.y += dy;
+				tdo.dragOffset.x += dx;
+				tdo.dragSource = tempSource;
+				this.dragObjects.push(tdo);
+			}
+		}, this);
+		this.previousDropTarget = null;
+		this.cacheTargetLocations();
+	}
+	dojo.lang.forEach(this.dragObjects, function (dragObj) {
+		if (dragObj) {
+			dragObj.onDragMove(e);
 		}
-	},
-
-	_dragStartDistance: function(x, y){
-		if((!this.mouseDownX)||(!this.mouseDownX)){
-			return;
+	});
+	if (this.currentDropTarget) {
+		var c = dojo.html.toCoordinateObject(this.currentDropTarget.domNode, true);
+		var dtp = [[c.x, c.y], [c.x + c.width, c.y + c.height]];
+	}
+	if ((!this.nestedTargets) && (dtp) && (this.isInsideBox(e, dtp))) {
+		if (this.dropAcceptable) {
+			this.currentDropTarget.onDragMove(e, this.dragObjects);
 		}
-		var dx = Math.abs(x-this.mouseDownX);
-		var dx2 = dx*dx;
-		var dy = Math.abs(y-this.mouseDownY);
-		var dy2 = dy*dy;
-		return parseInt(Math.sqrt(dx2+dy2), 10);
-	},
-
-	cacheTargetLocations: function(){
-		dojo.profile.start("cacheTargetLocations");
-
-		this.dropTargetDimensions = [];
-		dojo.lang.forEach(this.dropTargets, function(tempTarget){
-			var tn = tempTarget.domNode;
-			//only cache dropTarget which can accept current dragSource
-			if(!tn || !tempTarget.accepts([this.dragSource])){ return; }
-			var abs = dojo.html.getAbsolutePosition(tn, true);
-			var bb = dojo.html.getBorderBox(tn);
-			this.dropTargetDimensions.push([
-				[abs.x, abs.y],	// upper-left
-				// lower-right
-				[ abs.x+bb.width, abs.y+bb.height ],
-				tempTarget
-			]);
-			//dojo.debug("Cached for "+tempTarget)
-		}, this);
-
-		dojo.profile.end("cacheTargetLocations");
-
-		//dojo.debug("Cache locations")
-	},
-
-	onMouseMove: function(e){
-		if((dojo.render.html.ie)&&(e.button != 1)){
-			// Oooops - mouse up occurred - e.g. when mouse was not over the
-			// window. I don't think we can detect this for FF - but at least
-			// we can be nice in IE.
-			this.currentDropTarget = null;
-			this.onMouseUp(e, true);
+	} else {
+		var bestBox = this.findBestTarget(e);
+		if (bestBox.target === null) {
+			if (this.currentDropTarget) {
+				this.currentDropTarget.onDragOut(e);
+				this.previousDropTarget = this.currentDropTarget;
+				this.currentDropTarget = null;
+			}
+			this.dropAcceptable = false;
 			return;
 		}
-
-		// if we've got some sources, but no drag objects, we need to send
-		// onDragStart to all the right parties and get things lined up for
-		// drop target detection
-
-		if(	(this.selectedSources.length)&&
-			(!this.dragObjects.length) ){
-			var dx;
-			var dy;
-			if(!this._dragTriggered){
-				this._dragTriggered = (this._dragStartDistance(e.pageX, e.pageY) > this.threshold);
-				if(!this._dragTriggered){ return; }
-				dx = e.pageX - this.mouseDownX;
-				dy = e.pageY - this.mouseDownY;
+		if (this.currentDropTarget !== bestBox.target) {
+			if (this.currentDropTarget) {
+				this.previousDropTarget = this.currentDropTarget;
+				this.currentDropTarget.onDragOut(e);
 			}
-
-			// the first element is always our dragSource, if there are multiple
-			// selectedSources (elements that move along) then the first one is the master
-			// and for it the events will be fired etc.
-			this.dragSource = this.selectedSources[0];
-			
-			dojo.lang.forEach(this.selectedSources, function(tempSource){
-				if(!tempSource){ return; }
-				var tdo = tempSource.onDragStart(e);
-				if(tdo){
-					tdo.onDragStart(e);
-
-					// "bump" the drag object to account for the drag threshold
-					tdo.dragOffset.y += dy;
-					tdo.dragOffset.x += dx;
-					tdo.dragSource = tempSource;
-
-					this.dragObjects.push(tdo);
-				}
-			}, this);
-
-			/* clean previous drop target in dragStart */
-			this.previousDropTarget = null;
-
-			this.cacheTargetLocations();
-		}
-
-		// FIXME: we need to add dragSources and dragObjects to e
-		dojo.lang.forEach(this.dragObjects, function(dragObj){
-			if(dragObj){ dragObj.onDragMove(e); }
-		});
-
-		// if we have a current drop target, check to see if we're outside of
-		// it. If so, do all the actions that need doing.
-		if(this.currentDropTarget){
-			//dojo.debug(dojo.html.hasParent(this.currentDropTarget.domNode))
-			var c = dojo.html.toCoordinateObject(this.currentDropTarget.domNode, true);
-			//		var dtp = this.currentDropTargetPoints;
-			var dtp = [
-				[c.x,c.y], [c.x+c.width, c.y+c.height]
-			];
-		}
-
-		if((!this.nestedTargets)&&(dtp)&&(this.isInsideBox(e, dtp))){
-			if(this.dropAcceptable){
+			this.currentDropTarget = bestBox.target;
+			e.dragObjects = this.dragObjects;
+			this.dropAcceptable = this.currentDropTarget.onDragOver(e);
+		} else {
+			if (this.dropAcceptable) {
 				this.currentDropTarget.onDragMove(e, this.dragObjects);
 			}
-		}else{
-			// FIXME: need to fix the event object!
-			// see if we can find a better drop target
-			var bestBox = this.findBestTarget(e);
-
-			if(bestBox.target === null){
-				if(this.currentDropTarget){
-					this.currentDropTarget.onDragOut(e);
-					this.previousDropTarget = this.currentDropTarget;
-					this.currentDropTarget = null;
-					// this.currentDropTargetPoints = null;
-				}
-				this.dropAcceptable = false;
-				return;
-			}
-
-			if(this.currentDropTarget !== bestBox.target){
-				if(this.currentDropTarget){
-					this.previousDropTarget = this.currentDropTarget;
-					this.currentDropTarget.onDragOut(e);
-				}
-				this.currentDropTarget = bestBox.target;
-				// this.currentDropTargetPoints = bestBox.points;
-				e.dragObjects = this.dragObjects;
-				this.dropAcceptable = this.currentDropTarget.onDragOver(e);
-
-			}else{
-				if(this.dropAcceptable){
-					this.currentDropTarget.onDragMove(e, this.dragObjects);
-				}
-			}
 		}
-	},
-
-	findBestTarget: function(e) {
-		var _this = this;
-		var bestBox = new Object();
-		bestBox.target = null;
-		bestBox.points = null;
-		dojo.lang.every(this.dropTargetDimensions, function(tmpDA) {
-			if(!_this.isInsideBox(e, tmpDA)){
-				return true;
-			}
-
-			bestBox.target = tmpDA[2];
-			bestBox.points = tmpDA;
-			// continue iterating only if _this.nestedTargets == true
-			return Boolean(_this.nestedTargets);
-		});
-
-		return bestBox;
-	},
-
-	isInsideBox: function(e, coords){
-		if(	(e.pageX > coords[0][0])&&
-			(e.pageX < coords[1][0])&&
-			(e.pageY > coords[0][1])&&
-			(e.pageY < coords[1][1]) ){
+	}
+}, findBestTarget:function (e) {
+	var _this = this;
+	var bestBox = new Object();
+	bestBox.target = null;
+	bestBox.points = null;
+	dojo.lang.every(this.dropTargetDimensions, function (tmpDA) {
+		if (!_this.isInsideBox(e, tmpDA)) {
 			return true;
 		}
-		return false;
-	},
-
-	onMouseOver: function(e){
-	},
-
-	onMouseOut: function(e){
+		bestBox.target = tmpDA[2];
+		bestBox.points = tmpDA;
+		return Boolean(_this.nestedTargets);
+	});
+	return bestBox;
+}, isInsideBox:function (e, coords) {
+	if ((e.pageX > coords[0][0]) && (e.pageX < coords[1][0]) && (e.pageY > coords[0][1]) && (e.pageY < coords[1][1])) {
+		return true;
 	}
-});
-
+	return false;
+}, onMouseOver:function (e) {
+}, onMouseOut:function (e) {
+}});
 dojo.dnd.dragManager = new dojo.dnd.HtmlDragManager();
-
-// global namespace protection closure
-(function(){
+(function () {
 	var d = document;
 	var dm = dojo.dnd.dragManager;
-	//TODO: when focus manager is ready, dragManager should be rewritten to use it
-	// set up event handlers on the document (or no?)
 	dojo.event.connect(d, "onkeydown", dm, "onKeyDown");
 	dojo.event.connect(d, "onmouseover", dm, "onMouseOver");
 	dojo.event.connect(d, "onmouseout", dm, "onMouseOut");
 	dojo.event.connect(d, "onmousedown", dm, "onMouseDown");
 	dojo.event.connect(d, "onmouseup", dm, "onMouseUp");
-	// TODO: process scrolling of elements, not only window (focus manager would 
-	// probably come to rescue here as well)
 	dojo.event.connect(window, "onscroll", dm, "onScroll");
 })();
 
+
 __CPAN_FILE__ src/dnd/HtmlDragCopy.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -18936,80 +12986,63 @@
 
 dojo.provide("dojo.dnd.HtmlDragCopy");
 dojo.require("dojo.dnd.*");
-
-dojo.declare("dojo.dnd.HtmlDragCopySource", dojo.dnd.HtmlDragSource,
-function(node, type, copyOnce){
-		this.copyOnce = copyOnce;
-		this.makeCopy = true;
-},
-{
-	onDragStart: function(){
-		var dragObj = new dojo.dnd.HtmlDragCopyObject(this.dragObject, this.type, this);
-		if(this.dragClass) { dragObj.dragClass = this.dragClass; }
-
-		if (this.constrainToContainer) {
-			dragObj.constrainTo(this.constrainingContainer || this.domNode.parentNode);
-		}
-
-		return dragObj;
-	},
-	onSelected: function() {
-		for (var i=0; i<this.dragObjects.length; i++) {
-			dojo.dnd.dragManager.selectedSources.push(new dojo.dnd.HtmlDragCopySource(this.dragObjects[i]));
-		}
+dojo.declare("dojo.dnd.HtmlDragCopySource", dojo.dnd.HtmlDragSource, function (node, type, copyOnce) {
+	this.copyOnce = copyOnce;
+	this.makeCopy = true;
+}, {onDragStart:function () {
+	var dragObj = new dojo.dnd.HtmlDragCopyObject(this.dragObject, this.type, this);
+	if (this.dragClass) {
+		dragObj.dragClass = this.dragClass;
 	}
-});
-
-dojo.declare("dojo.dnd.HtmlDragCopyObject", dojo.dnd.HtmlDragObject,
-function(dragObject, type, source){
-		this.copySource = source;
-},
-{
-	onDragStart: function(e) {
-		dojo.dnd.HtmlDragCopyObject.superclass.onDragStart.apply(this, arguments);
-		if(this.copySource.makeCopy) {
-			this.sourceNode = this.domNode;
-			this.domNode    = this.domNode.cloneNode(true);
-		}
-	},
-	onDragEnd: function(e){
-		switch(e.dragStatus){
-			case "dropFailure": // slide back to the start
-				var startCoords = dojo.html.getAbsolutePosition(this.dragClone, true);
-				// offset the end so the effect can be seen
-				var endCoords = { left: this.dragStartPosition.x + 1,
-					top: this.dragStartPosition.y + 1};
-
-				// animate
-				var anim = dojo.lfx.slideTo(this.dragClone, endCoords, 500, dojo.lfx.easeOut);
-				var dragObject = this;
-				dojo.event.connect(anim, "onEnd", function (e) {
-					// pause for a second (not literally) and disappear
-					dojo.lang.setTimeout(function() {
-							dojo.html.removeNode(dragObject.dragClone);
-							dragObject.dragClone = null;
-							if(dragObject.copySource.makeCopy) {
-								dojo.html.removeNode(dragObject.domNode);
-								dragObject.domNode = dragObject.sourceNode;
-								dragObject.sourceNode = null;
-							}
-						},
-						200);
-				});
-				anim.play();
-				dojo.event.topic.publish('dragEnd', { source: this } );
-				return;
-		}
-		dojo.dnd.HtmlDragCopyObject.superclass.onDragEnd.apply(this, arguments);
-		this.copySource.dragObject = this.domNode;
-		if(this.copySource.copyOnce){
-			this.copySource.makeCopy = false;
-		}
-		new dojo.dnd.HtmlDragCopySource(this.sourceNode, this.type, this.copySource.copyOnce);
-		this.sourceNode = null;
+	if (this.constrainToContainer) {
+		dragObj.constrainTo(this.constrainingContainer || this.domNode.parentNode);
 	}
-});
+	return dragObj;
+}, onSelected:function () {
+	for (var i = 0; i < this.dragObjects.length; i++) {
+		dojo.dnd.dragManager.selectedSources.push(new dojo.dnd.HtmlDragCopySource(this.dragObjects[i]));
+	}
+}});
+dojo.declare("dojo.dnd.HtmlDragCopyObject", dojo.dnd.HtmlDragObject, function (dragObject, type, source) {
+	this.copySource = source;
+}, {onDragStart:function (e) {
+	dojo.dnd.HtmlDragCopyObject.superclass.onDragStart.apply(this, arguments);
+	if (this.copySource.makeCopy) {
+		this.sourceNode = this.domNode;
+		this.domNode = this.domNode.cloneNode(true);
+	}
+}, onDragEnd:function (e) {
+	switch (e.dragStatus) {
+	  case "dropFailure":
+		var startCoords = dojo.html.getAbsolutePosition(this.dragClone, true);
+		var endCoords = {left:this.dragStartPosition.x + 1, top:this.dragStartPosition.y + 1};
+		var anim = dojo.lfx.slideTo(this.dragClone, endCoords, 500, dojo.lfx.easeOut);
+		var dragObject = this;
+		dojo.event.connect(anim, "onEnd", function (e) {
+			dojo.lang.setTimeout(function () {
+				dojo.html.removeNode(dragObject.dragClone);
+				dragObject.dragClone = null;
+				if (dragObject.copySource.makeCopy) {
+					dojo.html.removeNode(dragObject.domNode);
+					dragObject.domNode = dragObject.sourceNode;
+					dragObject.sourceNode = null;
+				}
+			}, 200);
+		});
+		anim.play();
+		dojo.event.topic.publish("dragEnd", {source:this});
+		return;
+	}
+	dojo.dnd.HtmlDragCopyObject.superclass.onDragEnd.apply(this, arguments);
+	this.copySource.dragObject = this.domNode;
+	if (this.copySource.copyOnce) {
+		this.copySource.makeCopy = false;
+	}
+	new dojo.dnd.HtmlDragCopySource(this.sourceNode, this.type, this.copySource.copyOnce);
+	this.sourceNode = null;
+}});
 
+
 __CPAN_FILE__ src/dnd/HtmlDragMove.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -19023,84 +13056,47 @@
 
 dojo.provide("dojo.dnd.HtmlDragMove");
 dojo.require("dojo.dnd.*");
-
-dojo.declare("dojo.dnd.HtmlDragMoveSource", dojo.dnd.HtmlDragSource, {
-	onDragStart: function(){
-		var dragObj =  new dojo.dnd.HtmlDragMoveObject(this.dragObject, this.type);
-		if (this.constrainToContainer) {
-			dragObj.constrainTo(this.constrainingContainer);
-		}
-		return dragObj;
-	},
-	/*
-	 * see dojo.dnd.HtmlDragSource.onSelected
-	 */
-	onSelected: function() {
-		for (var i=0; i<this.dragObjects.length; i++) {
-			dojo.dnd.dragManager.selectedSources.push(new dojo.dnd.HtmlDragMoveSource(this.dragObjects[i]));
-		}
+dojo.declare("dojo.dnd.HtmlDragMoveSource", dojo.dnd.HtmlDragSource, {onDragStart:function () {
+	var dragObj = new dojo.dnd.HtmlDragMoveObject(this.dragObject, this.type);
+	if (this.constrainToContainer) {
+		dragObj.constrainTo(this.constrainingContainer);
 	}
-});
-
-dojo.declare("dojo.dnd.HtmlDragMoveObject", dojo.dnd.HtmlDragObject, {
-	onDragStart: function(e){
-		dojo.html.clearSelection();
-
-		this.dragClone = this.domNode;
-
-		// Record drag start position, where "position" is simply the top/left style values for
-		// the node (the meaning of top/left is dependent on whether node is position:absolute or
-		// position:relative, and also on the container).
-		// Not sure if we should support moving nodes that aren't position:absolute,
-		// but supporting it for now
-		if(dojo.html.getComputedStyle(this.domNode, 'position') != 'absolute'){
-			this.domNode.style.position = "relative";
-		}
-		var left = parseInt(dojo.html.getComputedStyle(this.domNode, 'left'));
-		var top = parseInt(dojo.html.getComputedStyle(this.domNode, 'top'));
-		this.dragStartPosition = {
-			x: isNaN(left) ? 0 : left,
-			y: isNaN(top) ? 0 : top
-		};
-
-		this.scrollOffset = dojo.html.getScroll().offset;
-
-		// used to convert mouse position into top/left value for node
-		this.dragOffset = {y: this.dragStartPosition.y - e.pageY,
-			x: this.dragStartPosition.x - e.pageX};
-
-		// since the DragObject's position is relative to the containing block, for our purposes
-		// the containing block's position is just (0,0)
-		this.containingBlockPosition = {x:0, y:0};
-
-		if (this.constrainToContainer) {
-			this.constraints = this.getConstraints();
-		}
-
-		// shortly the browser will fire an onClick() event,
-		// but since this was really a drag, just squelch it
-		dojo.event.connect(this.domNode, "onclick", this, "_squelchOnClick");
-	},
-
-	onDragEnd: function(e){
-	},
-
-	setAbsolutePosition: function(x, y){
-		// summary: Set the top & left style attributes of the drag node (TODO: function is poorly named)
-		if(!this.disableY) { this.domNode.style.top = y + "px"; }
-		if(!this.disableX) { this.domNode.style.left = x + "px"; }
-	},
-
-	_squelchOnClick: function(e){
-		// summary
-		//	this function is called to squelch this onClick() event because
-		//	it's the result of a drag (ie, it's not a real click)
-
-		dojo.event.browser.stopEvent(e);
-		dojo.event.disconnect(this.domNode, "onclick", this, "_squelchOnClick");
+	return dragObj;
+}, onSelected:function () {
+	for (var i = 0; i < this.dragObjects.length; i++) {
+		dojo.dnd.dragManager.selectedSources.push(new dojo.dnd.HtmlDragMoveSource(this.dragObjects[i]));
 	}
-});
+}});
+dojo.declare("dojo.dnd.HtmlDragMoveObject", dojo.dnd.HtmlDragObject, {onDragStart:function (e) {
+	dojo.html.clearSelection();
+	this.dragClone = this.domNode;
+	if (dojo.html.getComputedStyle(this.domNode, "position") != "absolute") {
+		this.domNode.style.position = "relative";
+	}
+	var left = parseInt(dojo.html.getComputedStyle(this.domNode, "left"));
+	var top = parseInt(dojo.html.getComputedStyle(this.domNode, "top"));
+	this.dragStartPosition = {x:isNaN(left) ? 0 : left, y:isNaN(top) ? 0 : top};
+	this.scrollOffset = dojo.html.getScroll().offset;
+	this.dragOffset = {y:this.dragStartPosition.y - e.pageY, x:this.dragStartPosition.x - e.pageX};
+	this.containingBlockPosition = {x:0, y:0};
+	if (this.constrainToContainer) {
+		this.constraints = this.getConstraints();
+	}
+	dojo.event.connect(this.domNode, "onclick", this, "_squelchOnClick");
+}, onDragEnd:function (e) {
+}, setAbsolutePosition:function (x, y) {
+	if (!this.disableY) {
+		this.domNode.style.top = y + "px";
+	}
+	if (!this.disableX) {
+		this.domNode.style.left = x + "px";
+	}
+}, _squelchOnClick:function (e) {
+	dojo.event.browser.stopEvent(e);
+	dojo.event.disconnect(this.domNode, "onclick", this, "_squelchOnClick");
+}});
 
+
 __CPAN_FILE__ src/dnd/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -19112,13 +13108,10 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: ["dojo.dnd.DragAndDrop"],
-	browser: ["dojo.dnd.HtmlDragAndDrop"],
-	dashboard: ["dojo.dnd.HtmlDragAndDrop"]
-});
+dojo.kwCompoundRequire({common:["dojo.dnd.DragAndDrop"], browser:["dojo.dnd.HtmlDragAndDrop"], dashboard:["dojo.dnd.HtmlDragAndDrop"]});
 dojo.provide("dojo.dnd.*");
 
+
 __CPAN_FILE__ src/dnd/HtmlDragAndDrop.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -19131,10 +13124,8 @@
 */
 
 dojo.provide("dojo.dnd.HtmlDragAndDrop");
-
 dojo.require("dojo.dnd.HtmlDragManager");
 dojo.require("dojo.dnd.DragAndDrop");
-
 dojo.require("dojo.html.*");
 dojo.require("dojo.html.display");
 dojo.require("dojo.html.util");
@@ -19143,503 +13134,353 @@
 dojo.require("dojo.lang.extras");
 dojo.require("dojo.lfx.*");
 dojo.require("dojo.event.*");
-
-dojo.declare("dojo.dnd.HtmlDragSource", dojo.dnd.DragSource, {
-		dragClass: "", // CSS classname(s) applied to node when it is being dragged
-
-		onDragStart: function(){
-			var dragObj = new dojo.dnd.HtmlDragObject(this.dragObject, this.type);
-			if(this.dragClass){
-				dragObj.dragClass = this.dragClass;
+dojo.declare("dojo.dnd.HtmlDragSource", dojo.dnd.DragSource, {dragClass:"", onDragStart:function () {
+	var dragObj = new dojo.dnd.HtmlDragObject(this.dragObject, this.type);
+	if (this.dragClass) {
+		dragObj.dragClass = this.dragClass;
+	}
+	if (this.constrainToContainer) {
+		dragObj.constrainTo(this.constrainingContainer || this.domNode.parentNode);
+	}
+	return dragObj;
+}, setDragHandle:function (node) {
+	node = dojo.byId(node);
+	dojo.dnd.dragManager.unregisterDragSource(this);
+	this.domNode = node;
+	dojo.dnd.dragManager.registerDragSource(this);
+}, setDragTarget:function (node) {
+	this.dragObject = node;
+}, constrainTo:function (container) {
+	this.constrainToContainer = true;
+	if (container) {
+		this.constrainingContainer = container;
+	}
+}, onSelected:function () {
+	for (var i = 0; i < this.dragObjects.length; i++) {
+		dojo.dnd.dragManager.selectedSources.push(new dojo.dnd.HtmlDragSource(this.dragObjects[i]));
+	}
+}, addDragObjects:function (el) {
+	for (var i = 0; i < arguments.length; i++) {
+		this.dragObjects.push(dojo.byId(arguments[i]));
+	}
+}}, function (node, type) {
+	node = dojo.byId(node);
+	this.dragObjects = [];
+	this.constrainToContainer = false;
+	if (node) {
+		this.domNode = node;
+		this.dragObject = node;
+		this.type = (type) || (this.domNode.nodeName.toLowerCase());
+		dojo.dnd.DragSource.prototype.reregister.call(this);
+	}
+});
+dojo.declare("dojo.dnd.HtmlDragObject", dojo.dnd.DragObject, {dragClass:"", opacity:0.5, createIframe:true, disableX:false, disableY:false, createDragNode:function () {
+	var node = this.domNode.cloneNode(true);
+	if (this.dragClass) {
+		dojo.html.addClass(node, this.dragClass);
+	}
+	if (this.opacity < 1) {
+		dojo.html.setOpacity(node, this.opacity);
+	}
+	var ltn = node.tagName.toLowerCase();
+	var isTr = (ltn == "tr");
+	if ((isTr) || (ltn == "tbody")) {
+		var doc = this.domNode.ownerDocument;
+		var table = doc.createElement("table");
+		if (isTr) {
+			var tbody = doc.createElement("tbody");
+			table.appendChild(tbody);
+			tbody.appendChild(node);
+		} else {
+			table.appendChild(node);
+		}
+		var tmpSrcTr = ((isTr) ? this.domNode : this.domNode.firstChild);
+		var tmpDstTr = ((isTr) ? node : node.firstChild);
+		var domTds = tmpSrcTr.childNodes;
+		var cloneTds = tmpDstTr.childNodes;
+		for (var i = 0; i < domTds.length; i++) {
+			if ((cloneTds[i]) && (cloneTds[i].style)) {
+				cloneTds[i].style.width = dojo.html.getContentBox(domTds[i]).width + "px";
 			}
-
-			if(this.constrainToContainer){
-				dragObj.constrainTo(this.constrainingContainer || this.domNode.parentNode);
+		}
+		node = table;
+	}
+	if ((dojo.render.html.ie55 || dojo.render.html.ie60) && this.createIframe) {
+		with (node.style) {
+			top = "0px";
+			left = "0px";
+		}
+		var outer = document.createElement("div");
+		outer.appendChild(node);
+		this.bgIframe = new dojo.html.BackgroundIframe(outer);
+		outer.appendChild(this.bgIframe.iframe);
+		node = outer;
+	}
+	node.style.zIndex = 999;
+	return node;
+}, onDragStart:function (e) {
+	dojo.html.clearSelection();
+	this.scrollOffset = dojo.html.getScroll().offset;
+	this.dragStartPosition = dojo.html.getAbsolutePosition(this.domNode, true);
+	this.dragOffset = {y:this.dragStartPosition.y - e.pageY, x:this.dragStartPosition.x - e.pageX};
+	this.dragClone = this.createDragNode();
+	this.containingBlockPosition = this.domNode.offsetParent ? dojo.html.getAbsolutePosition(this.domNode.offsetParent, true) : {x:0, y:0};
+	if (this.constrainToContainer) {
+		this.constraints = this.getConstraints();
+	}
+	with (this.dragClone.style) {
+		position = "absolute";
+		top = this.dragOffset.y + e.pageY + "px";
+		left = this.dragOffset.x + e.pageX + "px";
+	}
+	dojo.body().appendChild(this.dragClone);
+	dojo.event.topic.publish("dragStart", {source:this});
+}, getConstraints:function () {
+	if (this.constrainingContainer.nodeName.toLowerCase() == "body") {
+		var viewport = dojo.html.getViewport();
+		var width = viewport.width;
+		var height = viewport.height;
+		var scroll = dojo.html.getScroll().offset;
+		var x = scroll.x;
+		var y = scroll.y;
+	} else {
+		var content = dojo.html.getContentBox(this.constrainingContainer);
+		width = content.width;
+		height = content.height;
+		x = this.containingBlockPosition.x + dojo.html.getPixelValue(this.constrainingContainer, "padding-left", true) + dojo.html.getBorderExtent(this.constrainingContainer, "left");
+		y = this.containingBlockPosition.y + dojo.html.getPixelValue(this.constrainingContainer, "padding-top", true) + dojo.html.getBorderExtent(this.constrainingContainer, "top");
+	}
+	var mb = dojo.html.getMarginBox(this.domNode);
+	return {minX:x, minY:y, maxX:x + width - mb.width, maxY:y + height - mb.height};
+}, updateDragOffset:function () {
+	var scroll = dojo.html.getScroll().offset;
+	if (scroll.y != this.scrollOffset.y) {
+		var diff = scroll.y - this.scrollOffset.y;
+		this.dragOffset.y += diff;
+		this.scrollOffset.y = scroll.y;
+	}
+	if (scroll.x != this.scrollOffset.x) {
+		var diff = scroll.x - this.scrollOffset.x;
+		this.dragOffset.x += diff;
+		this.scrollOffset.x = scroll.x;
+	}
+}, onDragMove:function (e) {
+	this.updateDragOffset();
+	var x = this.dragOffset.x + e.pageX;
+	var y = this.dragOffset.y + e.pageY;
+	if (this.constrainToContainer) {
+		if (x < this.constraints.minX) {
+			x = this.constraints.minX;
+		}
+		if (y < this.constraints.minY) {
+			y = this.constraints.minY;
+		}
+		if (x > this.constraints.maxX) {
+			x = this.constraints.maxX;
+		}
+		if (y > this.constraints.maxY) {
+			y = this.constraints.maxY;
+		}
+	}
+	this.setAbsolutePosition(x, y);
+	dojo.event.topic.publish("dragMove", {source:this});
+}, setAbsolutePosition:function (x, y) {
+	if (!this.disableY) {
+		this.dragClone.style.top = y + "px";
+	}
+	if (!this.disableX) {
+		this.dragClone.style.left = x + "px";
+	}
+}, onDragEnd:function (e) {
+	switch (e.dragStatus) {
+	  case "dropSuccess":
+		dojo.html.removeNode(this.dragClone);
+		this.dragClone = null;
+		break;
+	  case "dropFailure":
+		var startCoords = dojo.html.getAbsolutePosition(this.dragClone, true);
+		var endCoords = {left:this.dragStartPosition.x + 1, top:this.dragStartPosition.y + 1};
+		var anim = dojo.lfx.slideTo(this.dragClone, endCoords, 300);
+		var dragObject = this;
+		dojo.event.connect(anim, "onEnd", function (e) {
+			dojo.html.removeNode(dragObject.dragClone);
+			dragObject.dragClone = null;
+		});
+		anim.play();
+		break;
+	}
+	dojo.event.topic.publish("dragEnd", {source:this});
+}, constrainTo:function (container) {
+	this.constrainToContainer = true;
+	if (container) {
+		this.constrainingContainer = container;
+	} else {
+		this.constrainingContainer = this.domNode.parentNode;
+	}
+}}, function (node, type) {
+	this.domNode = dojo.byId(node);
+	this.type = type;
+	this.constrainToContainer = false;
+	this.dragSource = null;
+	dojo.dnd.DragObject.prototype.register.call(this);
+});
+dojo.declare("dojo.dnd.HtmlDropTarget", dojo.dnd.DropTarget, {vertical:false, onDragOver:function (e) {
+	if (!this.accepts(e.dragObjects)) {
+		return false;
+	}
+	this.childBoxes = [];
+	for (var i = 0, child; i < this.domNode.childNodes.length; i++) {
+		child = this.domNode.childNodes[i];
+		if (child.nodeType != dojo.html.ELEMENT_NODE) {
+			continue;
+		}
+		var pos = dojo.html.getAbsolutePosition(child, true);
+		var inner = dojo.html.getBorderBox(child);
+		this.childBoxes.push({top:pos.y, bottom:pos.y + inner.height, left:pos.x, right:pos.x + inner.width, height:inner.height, width:inner.width, node:child});
+	}
+	return true;
+}, _getNodeUnderMouse:function (e) {
+	for (var i = 0, child; i < this.childBoxes.length; i++) {
+		with (this.childBoxes[i]) {
+			if (e.pageX >= left && e.pageX <= right && e.pageY >= top && e.pageY <= bottom) {
+				return i;
 			}
-
-			return dragObj;
-		},
-
-		setDragHandle: function(node){
-			node = dojo.byId(node);
-			dojo.dnd.dragManager.unregisterDragSource(this);
-			this.domNode = node;
-			dojo.dnd.dragManager.registerDragSource(this);
-		},
-
-		setDragTarget: function(node){
-			this.dragObject = node;
-		},
-
-		constrainTo: function(container){
-			this.constrainToContainer = true;
-			if(container){
-				this.constrainingContainer = container;
-			}
-		},
-		
-		/*
-		*
-		* see dojo.dnd.DragSource.onSelected
-		*/
-		onSelected: function(){
-			for(var i=0; i<this.dragObjects.length; i++){
-				dojo.dnd.dragManager.selectedSources.push(new dojo.dnd.HtmlDragSource(this.dragObjects[i]));
-			}
-		},
-
-		/**
-		* Register elements that should be dragged along with
-		* the actual DragSource.
-		*
-		* Example usage:
-		* 	var dragSource = new dojo.dnd.HtmlDragSource(...);
-		*	// add a single element
-		*	dragSource.addDragObjects(dojo.byId('id1'));
-		*	// add multiple elements to drag along
-		*	dragSource.addDragObjects('id2', dojo.byId('id3'));
-		*
-		* el A dom node to add to the drag list.
-		*/
-		addDragObjects: function(/*DOMNode*/ el){
-			for(var i=0; i<arguments.length; i++){
-				this.dragObjects.push(dojo.byId(arguments[i]));
-			}
 		}
-	}, 
-
-	function(node, type){
-		node = dojo.byId(node);
-		this.dragObjects = [];
-		this.constrainToContainer = false;
-		if(node){
-			this.domNode = node;
-			this.dragObject = node;
-			// set properties that might have been clobbered by the mixin
-			this.type = (type)||(this.domNode.nodeName.toLowerCase());
-			dojo.dnd.DragSource.prototype.reregister.call(this);
+	}
+	return -1;
+}, createDropIndicator:function () {
+	this.dropIndicator = document.createElement("div");
+	with (this.dropIndicator.style) {
+		position = "absolute";
+		zIndex = 999;
+		if (this.vertical) {
+			borderLeftWidth = "1px";
+			borderLeftColor = "black";
+			borderLeftStyle = "solid";
+			height = dojo.html.getBorderBox(this.domNode).height + "px";
+			top = dojo.html.getAbsolutePosition(this.domNode, true).y + "px";
+		} else {
+			borderTopWidth = "1px";
+			borderTopColor = "black";
+			borderTopStyle = "solid";
+			width = dojo.html.getBorderBox(this.domNode).width + "px";
+			left = dojo.html.getAbsolutePosition(this.domNode, true).x + "px";
 		}
 	}
-);
-
-dojo.declare("dojo.dnd.HtmlDragObject", 
-	dojo.dnd.DragObject, 
-	{
-		dragClass: "",
-		opacity: 0.5,
-		createIframe: true,		// workaround IE6 bug
-
-		// if true, node will not move in X and/or Y direction
-		disableX: false,
-		disableY: false,
-
-		createDragNode: function() {
-			var node = this.domNode.cloneNode(true);
-			if(this.dragClass) { dojo.html.addClass(node, this.dragClass); }
-			if(this.opacity < 1) { dojo.html.setOpacity(node, this.opacity); }
-			var ltn = node.tagName.toLowerCase();
-			var isTr = (ltn == "tr");
-			if((isTr)||(ltn == "tbody")){
-				// dojo.debug("Dragging table row")
-				// Create a table for the cloned row
-				var doc = this.domNode.ownerDocument;
-				var table = doc.createElement("table");
-				if(isTr){
-					var tbody = doc.createElement("tbody");
-					table.appendChild(tbody);
-					tbody.appendChild(node);
-				}else{
-					table.appendChild(node);
-				}
-
-				// Set a fixed width to the cloned TDs
-				var tmpSrcTr = ((isTr) ? this.domNode : this.domNode.firstChild);
-				var tmpDstTr = ((isTr) ? node : node.firstChild);
-				var domTds = tdp.childNodes;
-				var cloneTds = tmpDstTr.childNodes;
-				for(var i = 0; i < domTds.length; i++){
-					if((cloneTds[i])&&(cloneTds[i].style)){
-						cloneTds[i].style.width = dojo.html.getContentBox(domTds[i]).width + "px";
-					}
-				}
-				node = table;
+}, onDragMove:function (e, dragObjects) {
+	var i = this._getNodeUnderMouse(e);
+	if (!this.dropIndicator) {
+		this.createDropIndicator();
+	}
+	var gravity = this.vertical ? dojo.html.gravity.WEST : dojo.html.gravity.NORTH;
+	var hide = false;
+	if (i < 0) {
+		if (this.childBoxes.length) {
+			var before = (dojo.html.gravity(this.childBoxes[0].node, e) & gravity);
+			if (before) {
+				hide = true;
 			}
-
-			if((dojo.render.html.ie55||dojo.render.html.ie60) && this.createIframe){
-				with(node.style) {
-					top="0px";
-					left="0px";
-				}
-				var outer = document.createElement("div");
-				outer.appendChild(node);
-				this.bgIframe = new dojo.html.BackgroundIframe(outer);
-				outer.appendChild(this.bgIframe.iframe);
-				node = outer;
+		} else {
+			var before = true;
+		}
+	} else {
+		var child = this.childBoxes[i];
+		var before = (dojo.html.gravity(child.node, e) & gravity);
+		if (child.node === dragObjects[0].dragSource.domNode) {
+			hide = true;
+		} else {
+			var currentPosChild = before ? (i > 0 ? this.childBoxes[i - 1] : child) : (i < this.childBoxes.length - 1 ? this.childBoxes[i + 1] : child);
+			if (currentPosChild.node === dragObjects[0].dragSource.domNode) {
+				hide = true;
 			}
-			node.style.zIndex = 999;
-
-			return node;
-		},
-
-		onDragStart: function(e){
-			dojo.html.clearSelection();
-
-			this.scrollOffset = dojo.html.getScroll().offset;
-			this.dragStartPosition = dojo.html.getAbsolutePosition(this.domNode, true);
-
-			this.dragOffset = {y: this.dragStartPosition.y - e.pageY,
-				x: this.dragStartPosition.x - e.pageX};
-
-			this.dragClone = this.createDragNode();
-
-			this.containingBlockPosition = this.domNode.offsetParent ? 
-				dojo.html.getAbsolutePosition(this.domNode.offsetParent, true) : {x:0, y:0};
-
-			if(this.constrainToContainer){
-				this.constraints = this.getConstraints();
-			}
-
-			// set up for dragging
-			with(this.dragClone.style){
-				position = "absolute";
-				top = this.dragOffset.y + e.pageY + "px";
-				left = this.dragOffset.x + e.pageX + "px";
-			}
-
-			dojo.body().appendChild(this.dragClone);
-
-			dojo.event.topic.publish('dragStart', { source: this } );
-		},
-
-		/** Return min/max x/y (relative to document.body) for this object) **/
-		getConstraints: function(){
-			if(this.constrainingContainer.nodeName.toLowerCase() == 'body'){
-				var viewport = dojo.html.getViewport();
-				var width = viewport.width;
-				var height = viewport.height;
-				var scroll = dojo.html.getScroll().offset;
-				var x = scroll.x;
-				var y = scroll.y;
-			}else{
-				var content = dojo.html.getContentBox(this.constrainingContainer);
-				width = content.width;
-				height = content.height;
-				x =
-					this.containingBlockPosition.x +
-					dojo.html.getPixelValue(this.constrainingContainer, "padding-left", true) +
-					dojo.html.getBorderExtent(this.constrainingContainer, "left");
-				y =
-					this.containingBlockPosition.y +
-					dojo.html.getPixelValue(this.constrainingContainer, "padding-top", true) +
-					dojo.html.getBorderExtent(this.constrainingContainer, "top");
-			}
-
-			// TODO: should handle left/top/right/bottom margin separately; left/top should affect minX/minY
-			var mb = dojo.html.getMarginBox(this.domNode);
-			return {
-				minX: x,
-				minY: y,
-				maxX: x + width - mb.width,
-				maxY: y + height - mb.height
-			}
-		},
-
-		updateDragOffset: function(){
-			var scroll = dojo.html.getScroll().offset;
-			if(scroll.y != this.scrollOffset.y){
-				var diff = scroll.y - this.scrollOffset.y;
-				this.dragOffset.y += diff;
-				this.scrollOffset.y = scroll.y;
-			}
-			if(scroll.x != this.scrollOffset.x){
-				var diff = scroll.x - this.scrollOffset.x;
-				this.dragOffset.x += diff;
-				this.scrollOffset.x = scroll.x;
-			}
-		},
-
-		/** Moves the node to follow the mouse */
-		onDragMove: function(e){
-			this.updateDragOffset();
-			var x = this.dragOffset.x + e.pageX;
-			var y = this.dragOffset.y + e.pageY;
-
-			if (this.constrainToContainer) {
-				if (x < this.constraints.minX) { x = this.constraints.minX; }
-				if (y < this.constraints.minY) { y = this.constraints.minY; }
-				if (x > this.constraints.maxX) { x = this.constraints.maxX; }
-				if (y > this.constraints.maxY) { y = this.constraints.maxY; }
-			}
-
-			this.setAbsolutePosition(x, y);
-
-			dojo.event.topic.publish('dragMove', { source: this } );
-		},
-
-		/**
-		 * Set the position of the drag clone.  (x,y) is relative to <body>.
-		 */
-		setAbsolutePosition: function(x, y){
-			// The drag clone is attached to document.body so this is trivial
-			if(!this.disableY) { this.dragClone.style.top = y + "px"; }
-			if(!this.disableX) { this.dragClone.style.left = x + "px"; }
-		},
-
-
-		/**
-		 * If the drag operation returned a success we remove the clone of
-		 * ourself from the original position. If the drag operation returned
-		 * failure we slide back over to where we came from and end the operation
-		 * with a little grace.
-		 */
-		onDragEnd: function(e){
-			switch(e.dragStatus){
-
-				case "dropSuccess":
-					dojo.html.removeNode(this.dragClone);
-					this.dragClone = null;
-					break;
-
-				case "dropFailure": // slide back to the start
-					var startCoords = dojo.html.getAbsolutePosition(this.dragClone, true);
-					// offset the end so the effect can be seen
-					var endCoords = { left: this.dragStartPosition.x + 1,
-						top: this.dragStartPosition.y + 1};
-
-					// animate
-					var anim = dojo.lfx.slideTo(this.dragClone, endCoords, 300);
-					var dragObject = this;
-					dojo.event.connect(anim, "onEnd", function(e){
-						// pause for a second (not literally) and disappear
-						// dojo.lang.setTimeout(function() {
-								dojo.html.removeNode(dragObject.dragClone);
-								// Allow drag clone to be gc'ed
-								dragObject.dragClone = null;
-						// 	},
-						// 	50);
-					});
-					anim.play();
-					break;
-			}
-
-			dojo.event.topic.publish('dragEnd', { source: this } );
-		},
-
-		constrainTo: function(container){
-			this.constrainToContainer=true;
-			if(container){
-				this.constrainingContainer = container;
-			}else{
-				this.constrainingContainer = this.domNode.parentNode;
-			}
 		}
-	}, 
-	function(node, type){
-		this.domNode = dojo.byId(node);
-		this.type = type;
-		this.constrainToContainer = false;
-		this.dragSource = null;
-		// this.register();
-		dojo.dnd.DragObject.prototype.register.call(this);
 	}
-);
-
-dojo.declare("dojo.dnd.HtmlDropTarget", 
-	dojo.dnd.DropTarget, 
-	{
-		vertical: false,
-		onDragOver: function(e){
-			if(!this.accepts(e.dragObjects)){ return false; }
-
-			// cache the positions of the child nodes
-			this.childBoxes = [];
-			for(var i = 0, child; i < this.domNode.childNodes.length; i++){
-				child = this.domNode.childNodes[i];
-				if(child.nodeType != dojo.html.ELEMENT_NODE){ continue; }
-				var pos = dojo.html.getAbsolutePosition(child, true);
-				var inner = dojo.html.getBorderBox(child);
-				this.childBoxes.push({top: pos.y, bottom: pos.y+inner.height,
-					left: pos.x, right: pos.x+inner.width, height: inner.height, 
-					width: inner.width, node: child});
+	if (hide) {
+		this.dropIndicator.style.display = "none";
+		return;
+	} else {
+		this.dropIndicator.style.display = "";
+	}
+	this.placeIndicator(e, dragObjects, i, before);
+	if (!dojo.html.hasParent(this.dropIndicator)) {
+		dojo.body().appendChild(this.dropIndicator);
+	}
+}, placeIndicator:function (e, dragObjects, boxIndex, before) {
+	var targetProperty = this.vertical ? "left" : "top";
+	var child;
+	if (boxIndex < 0) {
+		if (this.childBoxes.length) {
+			child = before ? this.childBoxes[0] : this.childBoxes[this.childBoxes.length - 1];
+		} else {
+			this.dropIndicator.style[targetProperty] = dojo.html.getAbsolutePosition(this.domNode, true)[this.vertical ? "x" : "y"] + "px";
+		}
+	} else {
+		child = this.childBoxes[boxIndex];
+	}
+	if (child) {
+		this.dropIndicator.style[targetProperty] = (before ? child[targetProperty] : child[this.vertical ? "right" : "bottom"]) + "px";
+		if (this.vertical) {
+			this.dropIndicator.style.height = child.height + "px";
+			this.dropIndicator.style.top = child.top + "px";
+		} else {
+			this.dropIndicator.style.width = child.width + "px";
+			this.dropIndicator.style.left = child.left + "px";
+		}
+	}
+}, onDragOut:function (e) {
+	if (this.dropIndicator) {
+		dojo.html.removeNode(this.dropIndicator);
+		delete this.dropIndicator;
+	}
+}, onDrop:function (e) {
+	this.onDragOut(e);
+	var i = this._getNodeUnderMouse(e);
+	var gravity = this.vertical ? dojo.html.gravity.WEST : dojo.html.gravity.NORTH;
+	if (i < 0) {
+		if (this.childBoxes.length) {
+			if (dojo.html.gravity(this.childBoxes[0].node, e) & gravity) {
+				return this.insert(e, this.childBoxes[0].node, "before");
+			} else {
+				return this.insert(e, this.childBoxes[this.childBoxes.length - 1].node, "after");
 			}
-
-			// TODO: use dummy node
-
-			return true;
-		},
-
-		_getNodeUnderMouse: function(e){
-			// find the child
-			for(var i = 0, child; i < this.childBoxes.length; i++){
-				with(this.childBoxes[i]){
-					if (e.pageX >= left && e.pageX <= right &&
-						e.pageY >= top && e.pageY <= bottom){ return i; }
-				}
-			}
-
-			return -1;
-		},
-
-		createDropIndicator: function(){
-			this.dropIndicator = document.createElement("div");
-			with(this.dropIndicator.style){
-				position = "absolute";
-				zIndex = 999;
-				if(this.vertical){
-					borderLeftWidth = "1px";
-					borderLeftColor = "black";
-					borderLeftStyle = "solid";
-					height = dojo.html.getBorderBox(this.domNode).height + "px";
-					top = dojo.html.getAbsolutePosition(this.domNode, true).y + "px";
-				}else{
-					borderTopWidth = "1px";
-					borderTopColor = "black";
-					borderTopStyle = "solid";
-					width = dojo.html.getBorderBox(this.domNode).width + "px";
-					left = dojo.html.getAbsolutePosition(this.domNode, true).x + "px";
-				}
-			}
-		},
-
-		onDragMove: function(e, dragObjects){
-			var i = this._getNodeUnderMouse(e);
-
-			if(!this.dropIndicator){
-				this.createDropIndicator();
-			}
-
-			var gravity = this.vertical ? dojo.html.gravity.WEST : dojo.html.gravity.NORTH;
-			var hide = false;
-			if(i < 0){
-				if(this.childBoxes.length){
-					var before = (dojo.html.gravity(this.childBoxes[0].node, e) & gravity);
-					if(before){ hide = true; }
-				}else{
-					var before = true;
-				}
-			}else{
-				var child = this.childBoxes[i];
-				var before = (dojo.html.gravity(child.node, e) & gravity);
-				if(child.node === dragObjects[0].dragSource.domNode){
-					hide = true;
-				}else{
-					var currentPosChild = before ? 
-							(i>0?this.childBoxes[i-1]:child) : 
-							(i<this.childBoxes.length-1?this.childBoxes[i+1]:child);
-					if(currentPosChild.node === dragObjects[0].dragSource.domNode){
-						hide = true;
-					}
-				}
-			}
-
-			if(hide){
-				this.dropIndicator.style.display="none";
-				return;
-			}else{
-				this.dropIndicator.style.display="";
-			}
-
-			this.placeIndicator(e, dragObjects, i, before);
-
-			if(!dojo.html.hasParent(this.dropIndicator)) {
-				dojo.body().appendChild(this.dropIndicator);
-			}
-		},
-
-		/**
-		 * Position the horizontal line that indicates "insert between these two items"
-		 */
-		placeIndicator: function(e, dragObjects, boxIndex, before) {
-			var targetProperty = this.vertical ? "left" : "top";
-			var child;
-			if(boxIndex < 0){
-				if(this.childBoxes.length){
-					child = before ? this.childBoxes[0]
-						: this.childBoxes[this.childBoxes.length - 1];
-				}else{
-					this.dropIndicator.style[targetProperty] = dojo.html.getAbsolutePosition(this.domNode, true)[this.vertical?"x":"y"] + "px";
-				}
-			}else{
-				child = this.childBoxes[boxIndex];
-			}
-			if(child){
-				this.dropIndicator.style[targetProperty] = (before ? child[targetProperty] : child[this.vertical?"right":"bottom"]) + "px";
-				if(this.vertical){
-					this.dropIndicator.style.height = child.height + "px";
-					this.dropIndicator.style.top = child.top + "px";
-				}else{
-					this.dropIndicator.style.width = child.width + "px";
-					this.dropIndicator.style.left = child.left + "px";
-				}
-			}
-		},
-
-		onDragOut: function(e) {
-			if(this.dropIndicator) {
-				dojo.html.removeNode(this.dropIndicator);
-				delete this.dropIndicator;
-			}
-		},
-
-		/**
-		 * Inserts the DragObject as a child of this node relative to the
-		 * position of the mouse.
-		 *
-		 * @return true if the DragObject was inserted, false otherwise
-		 */
-		onDrop: function(e){
-			this.onDragOut(e);
-
-			var i = this._getNodeUnderMouse(e);
-
-			var gravity = this.vertical ? dojo.html.gravity.WEST : dojo.html.gravity.NORTH;
-			if(i < 0){
-				if(this.childBoxes.length){
-					if(dojo.html.gravity(this.childBoxes[0].node, e) & gravity){
-						return this.insert(e, this.childBoxes[0].node, "before");
-					}else{
-						return this.insert(e, this.childBoxes[this.childBoxes.length-1].node, "after");
-					}
-				}
-				return this.insert(e, this.domNode, "append");
-			}
-
-			var child = this.childBoxes[i];
-			if(dojo.html.gravity(child.node, e) & gravity){
-				return this.insert(e, child.node, "before");
-			}else{
-				return this.insert(e, child.node, "after");
-			}
-		},
-
-		insert: function(e, refNode, position){
-			var node = e.dragObject.domNode;
-
-			if(position == "before"){
-				return dojo.html.insertBefore(node, refNode);
-			}else if(position == "after"){
-				return dojo.html.insertAfter(node, refNode);
-			}else if(position == "append"){
+		}
+		return this.insert(e, this.domNode, "append");
+	}
+	var child = this.childBoxes[i];
+	if (dojo.html.gravity(child.node, e) & gravity) {
+		return this.insert(e, child.node, "before");
+	} else {
+		return this.insert(e, child.node, "after");
+	}
+}, insert:function (e, refNode, position) {
+	var node = e.dragObject.domNode;
+	if (position == "before") {
+		return dojo.html.insertBefore(node, refNode);
+	} else {
+		if (position == "after") {
+			return dojo.html.insertAfter(node, refNode);
+		} else {
+			if (position == "append") {
 				refNode.appendChild(node);
 				return true;
 			}
-
-			return false;
 		}
-	}, 
-
-	function(node, types){
-		if(arguments.length == 0){ return; }
-		this.domNode = dojo.byId(node);
-		dojo.dnd.DropTarget.call(this);
-		if(types && dojo.lang.isString(types)) {
-			types = [types];
-		}
-		this.acceptedTypes = types || [];
-		dojo.dnd.dragManager.registerDropTarget(this);
 	}
-);
+	return false;
+}}, function (node, types) {
+	if (arguments.length == 0) {
+		return;
+	}
+	this.domNode = dojo.byId(node);
+	dojo.dnd.DropTarget.call(this);
+	if (types && dojo.lang.isString(types)) {
+		types = [types];
+	}
+	this.acceptedTypes = types || [];
+	dojo.dnd.dragManager.registerDropTarget(this);
+});
 
+
 __CPAN_FILE__ src/dnd/TreeDragAndDrop.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -19651,472 +13492,248 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-/**
- * TreeDrag* specialized on managing subtree drags
- * It selects nodes and visualises what's going on,
- * but delegates real actions upon tree to the controller
- *
- * This code is considered a part of controller
-*/
-
 dojo.provide("dojo.dnd.TreeDragAndDrop");
-
 dojo.require("dojo.dnd.HtmlDragAndDrop");
 dojo.require("dojo.lang.func");
 dojo.require("dojo.lang.array");
 dojo.require("dojo.lang.extras");
 dojo.require("dojo.html.layout");
-
-dojo.dnd.TreeDragSource = function(node, syncController, type, treeNode){
+dojo.dnd.TreeDragSource = function (node, syncController, type, treeNode) {
 	this.controller = syncController;
 	this.treeNode = treeNode;
-
 	dojo.dnd.HtmlDragSource.call(this, node, type);
-}
-
+};
 dojo.inherits(dojo.dnd.TreeDragSource, dojo.dnd.HtmlDragSource);
-
-dojo.lang.extend(dojo.dnd.TreeDragSource, {
-	onDragStart: function(){
-		/* extend adds functions to prototype */
-		var dragObject = dojo.dnd.HtmlDragSource.prototype.onDragStart.call(this);
-		//dojo.debugShallow(dragObject)
-
-		dragObject.treeNode = this.treeNode;
-
-		dragObject.onDragStart = dojo.lang.hitch(dragObject, function(e) {
-
-			/* save selection */
-			this.savedSelectedNode = this.treeNode.tree.selector.selectedNode;
-			if (this.savedSelectedNode) {
-				this.savedSelectedNode.unMarkSelected();
-			}
-
-			var result = dojo.dnd.HtmlDragObject.prototype.onDragStart.apply(this, arguments);
-
-
-			/* remove background grid from cloned object */
-			var cloneGrid = this.dragClone.getElementsByTagName('img');
-			for(var i=0; i<cloneGrid.length; i++) {
-				cloneGrid.item(i).style.backgroundImage='url()';
-			}
-
-			return result;
-
-
-		});
-
-		dragObject.onDragEnd = function(e) {
-
-			/* restore selection */
-			if (this.savedSelectedNode) {
-				this.savedSelectedNode.markSelected();
-			}
-			//dojo.debug(e.dragStatus);
-
-			return dojo.dnd.HtmlDragObject.prototype.onDragEnd.apply(this, arguments);
+dojo.lang.extend(dojo.dnd.TreeDragSource, {onDragStart:function () {
+	var dragObject = dojo.dnd.HtmlDragSource.prototype.onDragStart.call(this);
+	dragObject.treeNode = this.treeNode;
+	dragObject.onDragStart = dojo.lang.hitch(dragObject, function (e) {
+		this.savedSelectedNode = this.treeNode.tree.selector.selectedNode;
+		if (this.savedSelectedNode) {
+			this.savedSelectedNode.unMarkSelected();
 		}
-		//dojo.debug(dragObject.domNode.outerHTML)
-
-
-		return dragObject;
-	},
-
-	onDragEnd: function(e){
-
-
-		 var res = dojo.dnd.HtmlDragSource.prototype.onDragEnd.call(this, e);
-
-
-		 return res;
-	}
-});
-
-// .......................................
-
-dojo.dnd.TreeDropTarget = function(domNode, controller, type, treeNode){
-
+		var result = dojo.dnd.HtmlDragObject.prototype.onDragStart.apply(this, arguments);
+		var cloneGrid = this.dragClone.getElementsByTagName("img");
+		for (var i = 0; i < cloneGrid.length; i++) {
+			cloneGrid.item(i).style.backgroundImage = "url()";
+		}
+		return result;
+	});
+	dragObject.onDragEnd = function (e) {
+		if (this.savedSelectedNode) {
+			this.savedSelectedNode.markSelected();
+		}
+		return dojo.dnd.HtmlDragObject.prototype.onDragEnd.apply(this, arguments);
+	};
+	return dragObject;
+}, onDragEnd:function (e) {
+	var res = dojo.dnd.HtmlDragSource.prototype.onDragEnd.call(this, e);
+	return res;
+}});
+dojo.dnd.TreeDropTarget = function (domNode, controller, type, treeNode) {
 	this.treeNode = treeNode;
-	this.controller = controller; // I will sync-ly process drops
-	
+	this.controller = controller;
 	dojo.dnd.HtmlDropTarget.apply(this, [domNode, type]);
-}
-
+};
 dojo.inherits(dojo.dnd.TreeDropTarget, dojo.dnd.HtmlDropTarget);
-
-dojo.lang.extend(dojo.dnd.TreeDropTarget, {
-
-	autoExpandDelay: 1500,
-	autoExpandTimer: null,
-
-
-	position: null,
-
-	indicatorStyle: "2px black solid",
-
-	showIndicator: function(position) {
-
-		// do not change style too often, cause of blinking possible
-		if (this.position == position) {
-			return;
-		}
-
-		//dojo.debug(position)
-
-		this.hideIndicator();
-
-		this.position = position;
-
-		if (position == "before") {
-			this.treeNode.labelNode.style.borderTop = this.indicatorStyle;
-		} else if (position == "after") {
+dojo.lang.extend(dojo.dnd.TreeDropTarget, {autoExpandDelay:1500, autoExpandTimer:null, position:null, indicatorStyle:"2px black solid", showIndicator:function (position) {
+	if (this.position == position) {
+		return;
+	}
+	this.hideIndicator();
+	this.position = position;
+	if (position == "before") {
+		this.treeNode.labelNode.style.borderTop = this.indicatorStyle;
+	} else {
+		if (position == "after") {
 			this.treeNode.labelNode.style.borderBottom = this.indicatorStyle;
-		} else if (position == "onto") {
-			this.treeNode.markSelected();
-		}
-
-
-	},
-
-	hideIndicator: function() {
-		this.treeNode.labelNode.style.borderBottom="";
-		this.treeNode.labelNode.style.borderTop="";
-		this.treeNode.unMarkSelected();
-		this.position = null;
-	},
-
-
-
-	// is the target possibly ok ?
-	// This function is run on dragOver, but drop possibility is also determined by position over node
-	// that's why acceptsWithPosition is called
-	// doesnt take index into account ( can change while moving mouse w/o changing target )
-
-
-	/**
-	 * Coarse (tree-level) access check.
-	 * We can't determine real accepts status w/o position
-	*/
-	onDragOver: function(e){
-//dojo.debug("onDragOver for "+e);
-
-
-		var accepts = dojo.dnd.HtmlDropTarget.prototype.onDragOver.apply(this, arguments);
-
-		//dojo.debug("TreeDropTarget.onDragOver accepts:"+accepts)
-
-		if (accepts && this.treeNode.isFolder && !this.treeNode.isExpanded) {
-			this.setAutoExpandTimer();
-		}
-
-		return accepts;
-	},
-
-	/* Parent.onDragOver calls this function to get accepts status */
-	accepts: function(dragObjects) {
-
-		var accepts = dojo.dnd.HtmlDropTarget.prototype.accepts.apply(this, arguments);
-
-		if (!accepts) return false;
-
-		var sourceTreeNode = dragObjects[0].treeNode;
-
-		if (dojo.lang.isUndefined(sourceTreeNode) || !sourceTreeNode || !sourceTreeNode.isTreeNode) {
-			dojo.raise("Source is not TreeNode or not found");
-		}
-
-		if (sourceTreeNode === this.treeNode) return false;
-
-		return true;
-	},
-
-
-
-	setAutoExpandTimer: function() {
-		// set up autoexpand timer
-		var _this = this;
-
-		var autoExpand = function () {
-			if (dojo.dnd.dragManager.currentDropTarget === _this) {
-				_this.controller.expand(_this.treeNode);
+		} else {
+			if (position == "onto") {
+				this.treeNode.markSelected();
 			}
 		}
-
-		this.autoExpandTimer = dojo.lang.setTimeout(autoExpand, _this.autoExpandDelay);
-	},
-
-
-	getDNDMode: function() {
-		return this.treeNode.tree.DNDMode;
-	},
-		
-
-	getAcceptPosition: function(e, sourceTreeNode) {
-
-		var DNDMode = this.getDNDMode();
-
-		if (DNDMode & dojo.widget.Tree.prototype.DNDModes.ONTO &&
-			// check if ONTO is allowed localy
-			!(
-			  !this.treeNode.actionIsDisabled(dojo.widget.TreeNode.prototype.actions.ADDCHILD) // check dynamically cause may change w/o regeneration of dropTarget
-			  && sourceTreeNode.parent !== this.treeNode
-			  && this.controller.canMove(sourceTreeNode, this.treeNode)
-			 )
-		) {
-			// disable ONTO if can't move
-			DNDMode &= ~dojo.widget.Tree.prototype.DNDModes.ONTO;
+	}
+}, hideIndicator:function () {
+	this.treeNode.labelNode.style.borderBottom = "";
+	this.treeNode.labelNode.style.borderTop = "";
+	this.treeNode.unMarkSelected();
+	this.position = null;
+}, onDragOver:function (e) {
+	var accepts = dojo.dnd.HtmlDropTarget.prototype.onDragOver.apply(this, arguments);
+	if (accepts && this.treeNode.isFolder && !this.treeNode.isExpanded) {
+		this.setAutoExpandTimer();
+	}
+	return accepts;
+}, accepts:function (dragObjects) {
+	var accepts = dojo.dnd.HtmlDropTarget.prototype.accepts.apply(this, arguments);
+	if (!accepts) {
+		return false;
+	}
+	var sourceTreeNode = dragObjects[0].treeNode;
+	if (dojo.lang.isUndefined(sourceTreeNode) || !sourceTreeNode || !sourceTreeNode.isTreeNode) {
+		dojo.raise("Source is not TreeNode or not found");
+	}
+	if (sourceTreeNode === this.treeNode) {
+		return false;
+	}
+	return true;
+}, setAutoExpandTimer:function () {
+	var _this = this;
+	var autoExpand = function () {
+		if (dojo.dnd.dragManager.currentDropTarget === _this) {
+			_this.controller.expand(_this.treeNode);
 		}
-
-
-		var position = this.getPosition(e, DNDMode);
-
-		//dojo.debug(DNDMode & +" : "+position);
-
-
-		// if onto is here => it was allowed before, no accept check is needed
-		if (position=="onto" ||
-			(!this.isAdjacentNode(sourceTreeNode, position)
-			 && this.controller.canMove(sourceTreeNode, this.treeNode.parent)
-			)
-		) {
-			return position;
-		} else {
-			return false;
-		}
-
-	},
-
-	onDragOut: function(e) {
-		this.clearAutoExpandTimer();
-
-		this.hideIndicator();
-	},
-
-
-	clearAutoExpandTimer: function() {
-		if (this.autoExpandTimer) {
-			clearTimeout(this.autoExpandTimer);
-			this.autoExpandTimer = null;
-		}
-	},
-
-
-
-	onDragMove: function(e, dragObjects){
-
-		var sourceTreeNode = dragObjects[0].treeNode;
-
-		var position = this.getAcceptPosition(e, sourceTreeNode);
-
-		if (position) {
-			this.showIndicator(position);
-		}
-
-	},
-
-	isAdjacentNode: function(sourceNode, position) {
-
-		if (sourceNode === this.treeNode) return true;
-		if (sourceNode.getNextSibling() === this.treeNode && position=="before") return true;
-		if (sourceNode.getPreviousSibling() === this.treeNode && position=="after") return true;
-
+	};
+	this.autoExpandTimer = dojo.lang.setTimeout(autoExpand, _this.autoExpandDelay);
+}, getDNDMode:function () {
+	return this.treeNode.tree.DNDMode;
+}, getAcceptPosition:function (e, sourceTreeNode) {
+	var DNDMode = this.getDNDMode();
+	if (DNDMode & dojo.widget.Tree.prototype.DNDModes.ONTO && !(!this.treeNode.actionIsDisabled(dojo.widget.TreeNode.prototype.actions.ADDCHILD) && sourceTreeNode.parent !== this.treeNode && this.controller.canMove(sourceTreeNode, this.treeNode))) {
+		DNDMode &= ~dojo.widget.Tree.prototype.DNDModes.ONTO;
+	}
+	var position = this.getPosition(e, DNDMode);
+	if (position == "onto" || (!this.isAdjacentNode(sourceTreeNode, position) && this.controller.canMove(sourceTreeNode, this.treeNode.parent))) {
+		return position;
+	} else {
 		return false;
-	},
-
-
-	/* get DNDMode and see which position e fits */
-	getPosition: function(e, DNDMode) {
-		var node = dojo.byId(this.treeNode.labelNode);
-		var mousey = e.pageY || e.clientY + dojo.body().scrollTop;
-		var nodey = dojo.html.getAbsolutePosition(node).y;
-		var height = dojo.html.getBorderBox(node).height;
-
-		var relY = mousey - nodey;
-		var p = relY / height;
-
-		var position = ""; // "" <=> forbidden
-		if (DNDMode & dojo.widget.Tree.prototype.DNDModes.ONTO
-		  && DNDMode & dojo.widget.Tree.prototype.DNDModes.BETWEEN) {
-			if (p<=0.3) {
-				position = "before";
-			} else if (p<=0.7) {
+	}
+}, onDragOut:function (e) {
+	this.clearAutoExpandTimer();
+	this.hideIndicator();
+}, clearAutoExpandTimer:function () {
+	if (this.autoExpandTimer) {
+		clearTimeout(this.autoExpandTimer);
+		this.autoExpandTimer = null;
+	}
+}, onDragMove:function (e, dragObjects) {
+	var sourceTreeNode = dragObjects[0].treeNode;
+	var position = this.getAcceptPosition(e, sourceTreeNode);
+	if (position) {
+		this.showIndicator(position);
+	}
+}, isAdjacentNode:function (sourceNode, position) {
+	if (sourceNode === this.treeNode) {
+		return true;
+	}
+	if (sourceNode.getNextSibling() === this.treeNode && position == "before") {
+		return true;
+	}
+	if (sourceNode.getPreviousSibling() === this.treeNode && position == "after") {
+		return true;
+	}
+	return false;
+}, getPosition:function (e, DNDMode) {
+	var node = dojo.byId(this.treeNode.labelNode);
+	var mousey = e.pageY || e.clientY + dojo.body().scrollTop;
+	var nodey = dojo.html.getAbsolutePosition(node).y;
+	var height = dojo.html.getBorderBox(node).height;
+	var relY = mousey - nodey;
+	var p = relY / height;
+	var position = "";
+	if (DNDMode & dojo.widget.Tree.prototype.DNDModes.ONTO && DNDMode & dojo.widget.Tree.prototype.DNDModes.BETWEEN) {
+		if (p <= 0.3) {
+			position = "before";
+		} else {
+			if (p <= 0.7) {
 				position = "onto";
 			} else {
 				position = "after";
 			}
-		} else if (DNDMode & dojo.widget.Tree.prototype.DNDModes.BETWEEN) {
-			if (p<=0.5) {
+		}
+	} else {
+		if (DNDMode & dojo.widget.Tree.prototype.DNDModes.BETWEEN) {
+			if (p <= 0.5) {
 				position = "before";
 			} else {
 				position = "after";
 			}
-		}
-		else if (DNDMode & dojo.widget.Tree.prototype.DNDModes.ONTO) {
-			position = "onto";
-		}
-
-
-		return position;
-	},
-
-
-
-	getTargetParentIndex: function(sourceTreeNode, position) {
-
-		var index = position == "before" ? this.treeNode.getParentIndex() : this.treeNode.getParentIndex()+1;
-		if (this.treeNode.parent === sourceTreeNode.parent
-		  && this.treeNode.getParentIndex() > sourceTreeNode.getParentIndex()) {
-		  	index--;  // dragging a node is different for simple move bacause of before-after issues
-		}
-
-		return index;
-	},
-
-
-	onDrop: function(e){
-		// onDragOut will clean position
-
-
-		var position = this.position;
-
-//dojo.debug(position);
-
-		this.onDragOut(e);
-
-		var sourceTreeNode = e.dragObject.treeNode;
-
-		if (!dojo.lang.isObject(sourceTreeNode)) {
-			dojo.raise("TreeNode not found in dragObject")
-		}
-
-		if (position == "onto") {
-			return this.controller.move(sourceTreeNode, this.treeNode, 0);
 		} else {
-			var index = this.getTargetParentIndex(sourceTreeNode, position);
-			return this.controller.move(sourceTreeNode, this.treeNode.parent, index);
+			if (DNDMode & dojo.widget.Tree.prototype.DNDModes.ONTO) {
+				position = "onto";
+			}
 		}
-
-		//dojo.debug('drop2');
-
-
-
 	}
-
-
-});
-
-
-
-dojo.dnd.TreeDNDController = function(treeController) {
-
-	// I use this controller to perform actions
+	return position;
+}, getTargetParentIndex:function (sourceTreeNode, position) {
+	var index = position == "before" ? this.treeNode.getParentIndex() : this.treeNode.getParentIndex() + 1;
+	if (this.treeNode.parent === sourceTreeNode.parent && this.treeNode.getParentIndex() > sourceTreeNode.getParentIndex()) {
+		index--;
+	}
+	return index;
+}, onDrop:function (e) {
+	var position = this.position;
+	this.onDragOut(e);
+	var sourceTreeNode = e.dragObject.treeNode;
+	if (!dojo.lang.isObject(sourceTreeNode)) {
+		dojo.raise("TreeNode not found in dragObject");
+	}
+	if (position == "onto") {
+		return this.controller.move(sourceTreeNode, this.treeNode, 0);
+	} else {
+		var index = this.getTargetParentIndex(sourceTreeNode, position);
+		return this.controller.move(sourceTreeNode, this.treeNode.parent, index);
+	}
+}});
+dojo.dnd.TreeDNDController = function (treeController) {
 	this.treeController = treeController;
-
 	this.dragSources = {};
-
 	this.dropTargets = {};
-
-}
-
-dojo.lang.extend(dojo.dnd.TreeDNDController, {
-
-
-	listenTree: function(tree) {
-		//dojo.debug("Listen tree "+tree);
-		dojo.event.topic.subscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
-		dojo.event.topic.subscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
-		dojo.event.topic.subscribe(tree.eventNames.moveTo, this, "onMoveTo");
-		dojo.event.topic.subscribe(tree.eventNames.addChild, this, "onAddChild");
-		dojo.event.topic.subscribe(tree.eventNames.removeNode, this, "onRemoveNode");
-		dojo.event.topic.subscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
-	},
-
-
-	unlistenTree: function(tree) {
-		//dojo.debug("Listen tree "+tree);
-		dojo.event.topic.unsubscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
-		dojo.event.topic.unsubscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
-		dojo.event.topic.unsubscribe(tree.eventNames.moveTo, this, "onMoveTo");
-		dojo.event.topic.unsubscribe(tree.eventNames.addChild, this, "onAddChild");
-		dojo.event.topic.unsubscribe(tree.eventNames.removeNode, this, "onRemoveNode");
-		dojo.event.topic.unsubscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
-	},
-
-	onTreeDestroy: function(message) {
-		this.unlistenTree(message.source);
-		// I'm not widget so don't use destroy() call and dieWithTree
-	},
-
-	onCreateDOMNode: function(message) {
-		this.registerDNDNode(message.source);
-	},
-
-	onAddChild: function(message) {
-		this.registerDNDNode(message.child);
-	},
-
-	onMoveFrom: function(message) {
-		var _this = this;
-		dojo.lang.forEach(
-			message.child.getDescendants(),
-			function(node) { _this.unregisterDNDNode(node); }
-		);
-	},
-
-	onMoveTo: function(message) {
-		var _this = this;
-		dojo.lang.forEach(
-			message.child.getDescendants(),
-			function(node) { _this.registerDNDNode(node); }
-		);
-	},
-
-	/**
-	 * Controller(node model) creates DNDNodes because it passes itself to node for synchroneous drops processing
-	 * I can't process DnD with events cause an event can't return result success/false
-	*/
-	registerDNDNode: function(node) {
-		if (!node.tree.DNDMode) return;
-
-//dojo.debug("registerDNDNode "+node);
-
-		/* I drag label, not domNode, because large domNodes are very slow to copy and large to drag */
-
-		var source = null;
-		var target = null;
-
-		if (!node.actionIsDisabled(node.actions.MOVE)) {
-			//dojo.debug("reg source")
-			var source = new dojo.dnd.TreeDragSource(node.labelNode, this, node.tree.widgetId, node);
-			this.dragSources[node.widgetId] = source;
-		}
-
-		var target = new dojo.dnd.TreeDropTarget(node.labelNode, this.treeController, node.tree.DNDAcceptTypes, node);
-
-		this.dropTargets[node.widgetId] = target;
-
-	},
-
-
-	unregisterDNDNode: function(node) {
-
-		if (this.dragSources[node.widgetId]) {
-			dojo.dnd.dragManager.unregisterDragSource(this.dragSources[node.widgetId]);
-			delete this.dragSources[node.widgetId];
-		}
-
-		if (this.dropTargets[node.widgetId]) {
-			dojo.dnd.dragManager.unregisterDropTarget(this.dropTargets[node.widgetId]);
-			delete this.dropTargets[node.widgetId];
-		}
+};
+dojo.lang.extend(dojo.dnd.TreeDNDController, {listenTree:function (tree) {
+	dojo.event.topic.subscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
+	dojo.event.topic.subscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
+	dojo.event.topic.subscribe(tree.eventNames.moveTo, this, "onMoveTo");
+	dojo.event.topic.subscribe(tree.eventNames.addChild, this, "onAddChild");
+	dojo.event.topic.subscribe(tree.eventNames.removeNode, this, "onRemoveNode");
+	dojo.event.topic.subscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
+}, unlistenTree:function (tree) {
+	dojo.event.topic.unsubscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
+	dojo.event.topic.unsubscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
+	dojo.event.topic.unsubscribe(tree.eventNames.moveTo, this, "onMoveTo");
+	dojo.event.topic.unsubscribe(tree.eventNames.addChild, this, "onAddChild");
+	dojo.event.topic.unsubscribe(tree.eventNames.removeNode, this, "onRemoveNode");
+	dojo.event.topic.unsubscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
+}, onTreeDestroy:function (message) {
+	this.unlistenTree(message.source);
+}, onCreateDOMNode:function (message) {
+	this.registerDNDNode(message.source);
+}, onAddChild:function (message) {
+	this.registerDNDNode(message.child);
+}, onMoveFrom:function (message) {
+	var _this = this;
+	dojo.lang.forEach(message.child.getDescendants(), function (node) {
+		_this.unregisterDNDNode(node);
+	});
+}, onMoveTo:function (message) {
+	var _this = this;
+	dojo.lang.forEach(message.child.getDescendants(), function (node) {
+		_this.registerDNDNode(node);
+	});
+}, registerDNDNode:function (node) {
+	if (!node.tree.DNDMode) {
+		return;
 	}
+	var source = null;
+	var target = null;
+	if (!node.actionIsDisabled(node.actions.MOVE)) {
+		var source = new dojo.dnd.TreeDragSource(node.labelNode, this, node.tree.widgetId, node);
+		this.dragSources[node.widgetId] = source;
+	}
+	var target = new dojo.dnd.TreeDropTarget(node.labelNode, this.treeController, node.tree.DNDAcceptTypes, node);
+	this.dropTargets[node.widgetId] = target;
+}, unregisterDNDNode:function (node) {
+	if (this.dragSources[node.widgetId]) {
+		dojo.dnd.dragManager.unregisterDragSource(this.dragSources[node.widgetId]);
+		delete this.dragSources[node.widgetId];
+	}
+	if (this.dropTargets[node.widgetId]) {
+		dojo.dnd.dragManager.unregisterDropTarget(this.dropTargets[node.widgetId]);
+		delete this.dropTargets[node.widgetId];
+	}
+}});
 
 
-
-
-
-});
-
 __CPAN_DIR__ src/graphics
 __CPAN_FILE__ src/graphics/color.js
 /*
@@ -20131,32 +13748,31 @@
 
 dojo.provide("dojo.graphics.color");
 dojo.require("dojo.gfx.color");
-
 dojo.deprecated("dojo.graphics.color.Color is now dojo.gfx.color.Color.", "0.5");
 dojo.graphics.color.Color = dojo.gfx.color.Color;
-
 dojo.graphics.color.named = dojo.gfx.color.named;
-dojo.graphics.color.blend = function(a, b, weight) {
+dojo.graphics.color.blend = function (a, b, weight) {
 	dojo.deprecated("dojo.graphics.color.blend is now dojo.gfx.color.blend", "0.5");
 	return dojo.gfx.color.blend(a, b, weight);
-}
-dojo.graphics.color.blendHex = function(a, b, weight) {
+};
+dojo.graphics.color.blendHex = function (a, b, weight) {
 	dojo.deprecated("dojo.graphics.color.blendHex is now dojo.gfx.color.blendHex", "0.5");
 	return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a), dojo.gfx.color.hex2rgb(b), weight));
-}
-dojo.graphics.color.extractRGB = function(color) {
+};
+dojo.graphics.color.extractRGB = function (color) {
 	dojo.deprecated("dojo.graphics.color.extractRGB is now dojo.gfx.color.extractRGB", "0.5");
 	return dojo.gfx.color.extractRGB(color);
-}
-dojo.graphics.color.hex2rgb = function(hex) {
+};
+dojo.graphics.color.hex2rgb = function (hex) {
 	dojo.deprecated("dojo.graphics.color.hex2rgb is now dojo.gfx.color.hex2rgb", "0.5");
 	return dojo.gfx.color.hex2rgb(hex);
-}
-dojo.graphics.color.rgb2hex = function(r, g, b) {
+};
+dojo.graphics.color.rgb2hex = function (r, g, b) {
 	dojo.deprecated("dojo.graphics.color.rgb2hex is now dojo.gfx.color.rgb2hex", "0.5");
 	return dojo.gfx.color.rgb2hex;
-}
+};
 
+
 __CPAN_FILE__ src/graphics/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -20168,9 +13784,9 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-// By default... don't pull in anything?  (todo: figure out what should be in list)
 dojo.provide("dojo.graphics.*");
 
+
 __CPAN_FILE__ src/graphics/Colorspace.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -20184,10 +13800,10 @@
 
 dojo.provide("dojo.graphics.Colorspace");
 dojo.require("dojo.gfx.Colorspace");
-
 dojo.deprecated("dojo.graphics.Colorspace: use dojo.gfx.Colorspace instead.", "0.5");
 dojo.graphics.Colorspace = dojo.gfx.Colorspace;
 
+
 __CPAN_DIR__ src/graphics/color
 __CPAN_FILE__ src/graphics/color/hsl.js
 /*
@@ -20202,28 +13818,25 @@
 
 dojo.provide("dojo.graphics.color.hsl");
 dojo.require("dojo.gfx.color.hsl");
-
 dojo.deprecated("dojo.graphics.color.hsl has been replaced with dojo.gfx.color.hsl", "0.5");
-
-dojo.graphics.color.rgb2hsl = function(r, g, b){
+dojo.graphics.color.rgb2hsl = function (r, g, b) {
 	dojo.deprecated("dojo.graphics.color.rgb2hsl has been replaced with dojo.gfx.color.rgb2hsl", "0.5");
 	return dojo.gfx.color.rgb2hsl(r, g, b);
-}
-dojo.graphics.color.hsl2rgb = function(h, s, l){
+};
+dojo.graphics.color.hsl2rgb = function (h, s, l) {
 	dojo.deprecated("dojo.graphics.color.hsl2rgb has been replaced with dojo.gfx.color.hsl2rgb", "0.5");
 	return dojo.gfx.color.hsl2rgb(h, s, l);
-}
-
-dojo.graphics.color.hsl2hex = function(h, s, l){
+};
+dojo.graphics.color.hsl2hex = function (h, s, l) {
 	dojo.deprecated("dojo.graphics.color.hsl2hex has been replaced with dojo.gfx.color.hsl2hex", "0.5");
 	return dojo.gfx.color.hsl2hex(h, s, l);
-}
-
-dojo.graphics.color.hex2hsl = function(hex){
+};
+dojo.graphics.color.hex2hsl = function (hex) {
 	dojo.deprecated("dojo.graphics.color.hex2hsl has been replaced with dojo.gfx.color.hex2hsl", "0.5");
 	return dojo.gfx.color.hex2hsl(hex);
-}
+};
 
+
 __CPAN_FILE__ src/graphics/color/hsv.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -20237,18 +13850,17 @@
 
 dojo.provide("dojo.graphics.color.hsv");
 dojo.require("dojo.gfx.color.hsv");
-
 dojo.deprecated("dojo.graphics.color.hsv has been replaced by dojo.gfx.color.hsv", "0.5");
-
-dojo.graphics.color.rgb2hsv = function(r, g, b){
+dojo.graphics.color.rgb2hsv = function (r, g, b) {
 	dojo.deprecated("dojo.graphics.color.rgb2hsv has been replaced by dojo.gfx.color.rgb2hsv", "0.5");
 	return dojo.gfx.color.rgb2hsv(r, g, b);
-}
-dojo.graphics.color.hsv2rgb = function(h, s, v){
+};
+dojo.graphics.color.hsv2rgb = function (h, s, v) {
 	dojo.deprecated("dojo.graphics.color.hsv2rgb has been replaced by dojo.gfx.color.hsv2rgb", "0.5");
 	return dojo.gfx.color.hsv2rgb(h, s, v);
-}
+};
 
+
 __CPAN_DIR__ src/widget
 __CPAN_FILE__ src/widget/TreeToggleOnSelect.js
 /*
@@ -20261,43 +13873,18 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeToggleOnSelect");
-
 dojo.require("dojo.widget.HtmlWidget");
+dojo.widget.defineWidget("dojo.widget.TreeToggleOnSelect", dojo.widget.HtmlWidget, {selector:"", controller:"", selectEvent:"select", initialize:function () {
+	this.selector = dojo.widget.byId(this.selector);
+	this.controller = dojo.widget.byId(this.controller);
+	dojo.event.topic.subscribe(this.selector.eventNames[this.selectEvent], this, "onSelectEvent");
+}, onSelectEvent:function (message) {
+	var node = message.node;
+	node.isExpanded ? this.controller.collapse(node) : this.controller.expand(node);
+}});
 
 
-/**
- * when a node is selected, expands tree to make it visible
- * useful for program expansion
- */
-dojo.widget.defineWidget(
-	"dojo.widget.TreeToggleOnSelect",
-	dojo.widget.HtmlWidget,
-{
-	selector: "",
-	controller: "",
-	selectEvent: "select",	
-	
-	initialize: function() {
-		this.selector = dojo.widget.byId(this.selector);
-		this.controller = dojo.widget.byId(this.controller);
-		
-		dojo.event.topic.subscribe(this.selector.eventNames[this.selectEvent], this, "onSelectEvent");	
-	},
-
-	
-	onSelectEvent: function(message) {
-	//	if (this.selectEvent
-		var node = message.node
-		node.isExpanded ? this.controller.collapse(node) : this.controller.expand(node)	
-	}
-	
-	
-
-});
-
-
 __CPAN_FILE__ src/widget/TreeEditor.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -20312,105 +13899,59 @@
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.widget.RichText");
-
 dojo.provide("dojo.widget.TreeEditor");
-
-dojo.widget.defineWidget(
-	"dojo.widget.TreeEditor",
-	dojo.widget.HtmlWidget,
-{
-	singleLineMode: false, // enter saves
-	saveOnBlur: true, // blur or new edit saves current
-	sync: false,  // finish editing in sync/async mode
-	selectOnOpen: true,
-	
-	controller: null,
-		
-	node: null,
-	
-	richTextParams: {styleSheets: 'src/widget/templates/TreeEditor.css'},
-
-	getContents: function() {
-		return this.richText.getEditorContent();
-	},
-	
-	open: function(node) {
-		
-		if (!this.richText) {
-			this.richText = dojo.widget.createWidget("RichText", this.richTextParams, node.labelNode);
-
-			dojo.event.connect("around", this.richText, "onKeyDown", this, "richText_onKeyDown" );
-			dojo.event.connect(this.richText, "onBlur", this, "richText_onBlur" );
-			
-			var self = this;
-			dojo.event.connect(this.richText, "onLoad", function(){
-				if (self.selectOnOpen) {
-					self.richText.execCommand("selectall");
-				}
-			});
+dojo.widget.defineWidget("dojo.widget.TreeEditor", dojo.widget.HtmlWidget, {singleLineMode:false, saveOnBlur:true, sync:false, selectOnOpen:true, controller:null, node:null, richTextParams:{styleSheets:"src/widget/templates/TreeEditor.css"}, getContents:function () {
+	return this.richText.getEditorContent();
+}, open:function (node) {
+	if (!this.richText) {
+		this.richText = dojo.widget.createWidget("RichText", this.richTextParams, node.labelNode);
+		dojo.event.connect("around", this.richText, "onKeyDown", this, "richText_onKeyDown");
+		dojo.event.connect(this.richText, "onBlur", this, "richText_onBlur");
+		var self = this;
+		dojo.event.connect(this.richText, "onLoad", function () {
+			if (self.selectOnOpen) {
+				self.richText.execCommand("selectall");
+			}
+		});
+	} else {
+		this.richText.open(node.labelNode);
+	}
+	this.node = node;
+}, close:function (save) {
+	this.richText.close(save);
+	this.node = null;
+}, isClosed:function () {
+	return !this.richText || this.richText.isClosed;
+}, execCommand:function () {
+	this.richText.execCommand.apply(this.richText, arguments);
+}, richText_onKeyDown:function (invocation) {
+	var e = invocation.args[0];
+	if ((!e) && (this.object)) {
+		e = dojo.event.browser.fixEvent(this.editor.window.event);
+	}
+	switch (e.keyCode) {
+	  case e.KEY_ESCAPE:
+		this.finish(false);
+		dojo.event.browser.stopEvent(e);
+		break;
+	  case e.KEY_ENTER:
+		if (e.ctrlKey && !this.singleLineMode) {
+			this.execCommand("inserthtml", "<br/>");
 		} else {
-			this.richText.open(node.labelNode);
+			this.finish(true);
 		}
-		
-		this.node = node;		
-	},
-	
-	close: function(save) {
-		
-		this.richText.close(save);
-		
-		
-		this.node = null;	
-	},
-	
-	isClosed: function() {
-		return !this.richText || this.richText.isClosed;
-	},
-	
-	execCommand: function() {
-		this.richText.execCommand.apply(this.richText, arguments);
-	},
-	
-	richText_onKeyDown: function(invocation) {
-		var e = invocation.args[0];
-		if((!e)&&(this.object)) {
-			e = dojo.event.browser.fixEvent(this.editor.window.event);
-		}
-		
-		switch (e.keyCode) {
-			case e.KEY_ESCAPE:
-				this.finish(false);
-				dojo.event.browser.stopEvent(e);		
-				break;
-			case e.KEY_ENTER:
-				if( e.ctrlKey && !this.singleLineMode ) {
-					this.execCommand( "inserthtml", "<br/>" );
-							
-				}
-				else {
-					this.finish(true);					
-					//dojo.debug("finish");
-				}
-				dojo.event.browser.stopEvent(e);
-				break;
-			default:
-				return invocation.proceed();
-		}
-	},
-	
-	richText_onBlur: function() {
-		this.finish(this.saveOnBlur);
-	},
-	
-	
-	finish: function(save) {
-		return this.controller.editLabelFinish(save, this.sync);
+		dojo.event.browser.stopEvent(e);
+		break;
+	  default:
+		return invocation.proceed();
 	}
-		
-		
-	
-});
+}, richText_onBlur:function () {
+	this.finish(this.saveOnBlur);
+}, finish:function (save) {
+	return this.controller.editLabelFinish(save, this.sync);
+}});
 
+
 __CPAN_FILE__ src/widget/Form.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -20423,309 +13964,261 @@
 */
 
 dojo.provide("dojo.widget.Form");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.HtmlWidget");
-
-dojo.widget.defineWidget("dojo.widget.Form", dojo.widget.HtmlWidget,
-	{
-		/*
-		summary: 
-			Widget for easily moving data to/from form
-		
-			description:
-				gets and sets data to and from js-object. With
-				this it's easy to create forms to application.
-				Just create empty form, then set it's values
-				with this and after user pushes submit,
-				getValues and send them as json-notation to
-				server.
-
-				Note: not all Form widgets are supported ATM
-					
-			usage: 
-				<form dojoType="Form" id="myForm">
-					Name: <input type="text" name="name" />
-				</form>
-				myObj={name: "John Doe"};
-				dojo.widget.byId('myForm').setValues(myObj);
-
-				myObj=dojo.widget.byId('myForm').getValues();
-
-		*/
-
-		isContainer: true,
-   		templateString: "<form dojoAttachPoint='containerNode' dojoAttachEvent='onSubmit:onSubmit'></form>",
-		formElements: [],
-		// ignoreNullValue:
-		//	if true, then only fields that has data is set to form
-		// 	if false, fields that does not have corresponding object, is set to empty
-		ignoreNullValues: false,
-
-		postCreate: function(args,frag){
-			for (var key in args) {
-				if (key == "dojotype") continue;
-				var attr= document.createAttribute(key);
-      				attr.nodeValue=args[key];
-      				this.containerNode.setAttributeNode(attr);
-    			}
-  		},
-		_createRepeaters: function (/*object*/obj, /*widget*/widget) {
-			for(var i=0; i<widget.children.length; ++i) {
-				  if (widget.children[i].widgetType == "RepeaterContainer") {
-					var rIndex=widget.children[i].index;
-					var rIndexPos=rIndex.indexOf("%{index}");
-					rIndex=rIndex.substr(0,rIndexPos-1);
-					var myObj = this._getObject(obj, rIndex);
-					if (typeof(myObj) == "object" && myObj.length == 0) {
-						myObj=new Array();
-					}
-					var rowCount = widget.children[i].getRowCount();
-					for (var j=0,len=rowCount; j<len; ++j) {
-						widget.children[i].deleteRow(0);
-					}
-					for (var j=0; j<myObj.length; j++) {
-    					 	widget.children[i].addRow(false);
-					}
+dojo.widget.defineWidget("dojo.widget.Form", dojo.widget.HtmlWidget, {isContainer:true, templateString:"<form dojoAttachPoint='containerNode' dojoAttachEvent='onSubmit:onSubmit'></form>", formElements:[], ignoreNullValues:false, postCreate:function (args, frag) {
+	for (var key in args) {
+		if (key == "dojotype") {
+			continue;
+		}
+		var attr = document.createAttribute(key);
+		attr.nodeValue = args[key];
+		this.containerNode.setAttributeNode(attr);
+	}
+}, _createRepeaters:function (obj, widget) {
+	for (var i = 0; i < widget.children.length; ++i) {
+		if (widget.children[i].widgetType == "RepeaterContainer") {
+			var rIndex = widget.children[i].index;
+			var rIndexPos = rIndex.indexOf("%{index}");
+			rIndex = rIndex.substr(0, rIndexPos - 1);
+			var myObj = this._getObject(obj, rIndex);
+			if (typeof (myObj) == "object" && myObj.length == 0) {
+				myObj = new Array();
+			}
+			var rowCount = widget.children[i].getRowCount();
+			for (var j = 0, len = rowCount; j < len; ++j) {
+				widget.children[i].deleteRow(0);
+			}
+			for (var j = 0; j < myObj.length; j++) {
+				widget.children[i].addRow(false);
+			}
+		}
+		if (widget.children[i].isContainer) {
+			this._createRepeaters(obj, widget.children[i]);
+		}
+	}
+}, _createFormElements:function () {
+	if (dojo.render.html.safari) {
+		this.formElements = [];
+		var elems = ["INPUT", "SELECT", "TEXTAREA"];
+		for (var k = 0; k < elems.length; k++) {
+			var list = this.containerNode.getElementsByTagName(elems[k]);
+			for (var j = 0, len2 = list.length; j < len2; j++) {
+				this.formElements.push(list[j]);
+			}
+		}
+	} else {
+		this.formElements = this.containerNode.elements;
+	}
+}, onSubmit:function (e) {
+	e.preventDefault();
+}, submit:function () {
+	this.containerNode.submit();
+}, _getFormElement:function (name) {
+	if (dojo.render.html.ie) {
+		for (var i = 0, len = this.formElements.length; i < len; i++) {
+			var element = this.formElements[i];
+			if (element.name == name) {
+				return element;
+			}
+		}
+	} else {
+		var elem = this.formElements[name];
+		if (typeof (elem) != "undefined") {
+			return elem;
+		}
+	}
+	return null;
+}, _getObject:function (obj, searchString) {
+	var namePath = [];
+	namePath = searchString.split(".");
+	var myObj = obj;
+	var name = namePath[namePath.length - 1];
+	for (var j = 0, len = namePath.length; j < len; ++j) {
+		var p = namePath[j];
+		if (typeof (myObj[p]) == "undefined") {
+			myObj[p] = {};
+		}
+		myObj = myObj[p];
+	}
+	return myObj;
+}, _setToContainers:function (obj, widget) {
+	for (var i = 0, len = widget.children.length; i < len; ++i) {
+		var currentWidget = widget.children[i];
+		if (currentWidget.widgetType == "Repeater") {
+			for (var j = 0, len = currentWidget.getRowCount(); j < len; ++j) {
+				currentWidget._initRow(j);
+			}
+		}
+		if (currentWidget.isContainer) {
+			this._setToContainers(obj, currentWidget);
+			continue;
+		}
+		switch (currentWidget.widgetType) {
+		  case "Checkbox":
+			currentWidget.setValue(currentWidget.inputNode.checked);
+			break;
+		  case "DropdownDatePicker":
+			currentWidget.setValue(currentWidget.getValue());
+			break;
+		  case "Select":
+			continue;
+			break;
+		  case "ComboBox":
+			continue;
+			break;
+		  default:
+			break;
+		}
+	}
+}, setValues:function (obj) {
+	this._createFormElements();
+	this._createRepeaters(obj, this);
+	for (var i = 0, len = this.formElements.length; i < len; i++) {
+		var element = this.formElements[i];
+		if (element.name == "") {
+			continue;
+		}
+		var namePath = new Array();
+		namePath = element.name.split(".");
+		var myObj = obj;
+		var name = namePath[namePath.length - 1];
+		for (var j = 1, len2 = namePath.length; j < len2; ++j) {
+			var p = namePath[j - 1];
+			if (typeof (myObj[p]) == "undefined") {
+				myObj = undefined;
+				break;
+			}
+			myObj = myObj[p];
+		}
+		if (typeof (myObj) == "undefined") {
+			continue;
+		}
+		if (typeof (myObj[name]) == "undefined" && this.ignoreNullValues) {
+			continue;
+		}
+		var type = element.type;
+		if (type == "hidden" || type == "text" || type == "textarea" || type == "password") {
+			type = "text";
+		}
+		switch (type) {
+		  case "checkbox":
+			element.checked = false;
+			if (typeof (myObj[name]) == "undefined") {
+				continue;
+			}
+			for (var j = 0, len2 = myObj[name].length; j < len2; ++j) {
+				if (element.value == myObj[name][j]) {
+					element.checked = true;
 				}
-				if (widget.children[i].isContainer) {
-					this._createRepeaters(obj, widget.children[i]);
-				}
 			}
-		},
- 
-		_createFormElements: function() {
-   			if(dojo.render.html.safari) {
-				// bug in safari (not registering form-elements)
-				this.formElements=[];
-				var elems = ["INPUT", "SELECT", "TEXTAREA"];
-				for (var k=0; k < elems.length; k++) {
-					var list = this.containerNode.getElementsByTagName(elems[k]);
-					for (var j=0,len2=list.length; j<len2; j++) {
-						this.formElements.push(list[j]);
+			break;
+		  case "radio":
+			element.checked = false;
+			if (typeof (myObj[name]) == "undefined") {
+				continue;
+			}
+			if (myObj[name] == element.value) {
+				element.checked = true;
+			}
+			break;
+		  case "select-multiple":
+			element.selectedIndex = -1;
+			for (var j = 0, len2 = element.options.length; j < len2; ++j) {
+				for (var k = 0, len3 = myObj[name].length; k < len3; ++k) {
+					if (element.options[j].value == myObj[name][k]) {
+						element.options[j].selected = true;
 					}
 				}
-				// fixed in safari nightly
-			} else {
-				this.formElements=this.containerNode.elements;
 			}
-		},
-		onSubmit: function(/*event*/e) {
-    			e.preventDefault();
-  		},
-
-		submit: function() {
-			this.containerNode.submit();
-		},
-
-		_getFormElement: function(/*form elements name*/name) {
-			if(dojo.render.html.ie) {
-				for(var i=0, len=this.formElements.length; i<len; i++) {
-					var element = this.formElements[i];
-					if (element.name == name) {
-						return element;
-					} // if
-				} // for
-			} else {
-				var elem = this.formElements[name];
-				if (typeof(elem) != "undefined") {
-					return elem;
+			break;
+		  case "select-one":
+			element.selectedIndex = "0";
+			for (var j = 0, len2 = element.options.length; j < len2; ++j) {
+				if (element.options[j].value == myObj[name]) {
+					element.options[j].selected = true;
+				} else {
 				}
 			}
-			return null;
-		},
-
-		_getObject: function(/*object*/obj, /*string*/searchString) {
-			var namePath = [];
-			namePath=searchString.split(".");
-			var myObj=obj;
-			var name=namePath[namePath.length-1];
-
-			for(var j=0, len=namePath.length;j<len;++j) {
-				var p=namePath[j];
-				if (typeof(myObj[p]) == "undefined") {
-					myObj[p]={};
-				}
-				myObj=myObj[p];
+			break;
+		  case "text":
+			var value = "";
+			if (typeof (myObj[name]) != "undefined") {
+				value = myObj[name];
 			}
-			return myObj;
-		},
-		_setToContainers: function (/*object*/obj,/*widget*/widget) {
-			for(var i=0, len=widget.children.length; i<len; ++i) {
-				var currentWidget=widget.children[i];
-				if (currentWidget.widgetType == "Repeater") {
-        				for(var j=0,len=currentWidget.getRowCount(); j<len; ++j) {
-          					currentWidget._initRow(j);
-        				}
+			element.value = value;
+			break;
+		  default:
+			dojo.debug("Not supported type (" + type + ")");
+			break;
+		}
+	}
+	this._setToContainers(obj, this);
+}, getValues:function () {
+	this._createFormElements();
+	var obj = {};
+	for (var i = 0, len = this.formElements.length; i < len; i++) {
+		var elm = this.formElements[i];
+		var namePath = [];
+		if (elm.name == "") {
+			continue;
+		}
+		namePath = elm.name.split(".");
+		var myObj = obj;
+		var name = namePath[namePath.length - 1];
+		for (var j = 1, len2 = namePath.length; j < len2; ++j) {
+			var nameIndex = null;
+			var p = namePath[j - 1];
+			var nameA = p.split("[");
+			if (nameA.length > 1) {
+				if (typeof (myObj[nameA[0]]) == "undefined") {
+					myObj[nameA[0]] = [];
 				}
-
-				if (currentWidget.isContainer) {
-					this._setToContainers (obj, currentWidget);
-					continue;
+				nameIndex = parseInt(nameA[1]);
+				if (typeof (myObj[nameA[0]][nameIndex]) == "undefined") {
+					myObj[nameA[0]][nameIndex] = {};
 				}
-
-				switch(currentWidget.widgetType) {
-					case "Checkbox":
-						currentWidget.setValue(currentWidget.inputNode.checked);
-						break;
-					case "DropdownDatePicker":
-						currentWidget.setValue(currentWidget.getValue());
-						break;
-					case "Select":
-						//widget.children[i].setValue(myObj[name]);
-						continue;
-						break;
-					case "ComboBox":
-						//widget.children[i].setSelectedValue(myObj[name]);
-						continue;
-						break;
-					default:
-						break;
+			} else {
+				if (typeof (myObj[nameA[0]]) == "undefined") {
+					myObj[nameA[0]] = {};
 				}
 			}
-		},
-		setValues: function(/*object*/obj) {
-			this._createFormElements();
-    			this._createRepeaters(obj,this);
-			for(var i=0, len=this.formElements.length; i<len; i++) {
-				var element = this.formElements[i];
-				if (element.name == '') {continue};
-				var namePath = new Array();
-				namePath=element.name.split(".");
-				var myObj=obj;
-				var name=namePath[namePath.length-1];
-				for(var j=1,len2=namePath.length;j<len2;++j) {
-					var p=namePath[j - 1];
-					if(typeof(myObj[p]) == "undefined") {
-						myObj=undefined;
-						break;
-					};
-					myObj=myObj[p];
+			if (nameA.length == 1) {
+				myObj = myObj[nameA[0]];
+			} else {
+				myObj = myObj[nameA[0]][nameIndex];
+			}
+		}
+		if ((elm.type != "select-multiple" && elm.type != "checkbox" && elm.type != "radio") || (elm.type == "radio" && elm.checked)) {
+			if (name == name.split("[")[0]) {
+				myObj[name] = elm.value;
+			} else {
+			}
+		} else {
+			if (elm.type == "checkbox" && elm.checked) {
+				if (typeof (myObj[name]) == "undefined") {
+					myObj[name] = [];
 				}
-
-				if (typeof(myObj) == "undefined") {
-					continue;
-				}
-				if (typeof(myObj[name]) == "undefined" && this.ignoreNullValues) {
-					continue;
-				}
-				var type=element.type;
-				if (type == "hidden" || type == "text" || type == "textarea" || type == "password") {
-					type = "text";
-				}
-				switch(type) {
-					case "checkbox":
-						element.checked=false;
-						if (typeof(myObj[name]) == 'undefined') continue;
-						for (var j=0,len2=myObj[name].length; j<len2; ++j) {
-							if(element.value == myObj[name][j]) {
-								element.checked=true;
-							}
-						}
-						break;
-					case "radio":
-						element.checked=false;
-						if (typeof(myObj[name]) == 'undefined') {continue};
-						if (myObj[name] == element.value) {
-							element.checked=true;
-						}
-						break;
-					case "select-multiple":
-						element.selectedIndex=-1;
-						for (var j=0,len2=element.options.length; j<len2; ++j) {
-							for (var k=0,len3=myObj[name].length;k<len3;++k) {
-								if (element.options[j].value == myObj[name][k]) {
-									element.options[j].selected=true;
-								}
-							}
-						}
-						break;
-					case "select-one":
-						element.selectedIndex="0";
-						for (var j=0,len2=element.options.length; j<len2; ++j) {
-							if (element.options[j].value == myObj[name]) {
-								element.options[j].selected=true;
-							} else {
-							//	element.options[j].selected=false;
-							}
-						}
-						break;
-					case "text":
-						var value="";
-						if (typeof(myObj[name]) != 'undefined') {
-							value = myObj[name];
-						}
-						element.value=value;
-						break;
-					default:
-						dojo.debug("Not supported type ("+type+")");
-						break;
-				}
-      			}
-			this._setToContainers(obj,this);
-		},
-		getValues: function() {
-			this._createFormElements();
-			var obj = { };
-
-			for(var i=0,len=this.formElements.length; i<len; i++) {
-				// FIXME: would be better to give it an attachPoint:
-				var elm = this.formElements[i];
-				var namePath = [];
-				if (elm.name == '') { continue;}
-				namePath=elm.name.split(".");
-				var myObj=obj;
-				var name=namePath[namePath.length-1];
-				for(var j=1,len2=namePath.length;j<len2;++j) {
-					var nameIndex = null;
-					var p=namePath[j - 1];
-					var nameA=p.split("[");
-					if (nameA.length > 1) {
-						if(typeof(myObj[nameA[0]]) == "undefined") {
-							myObj[nameA[0]]=[ ];
-						} // if
-						nameIndex=parseInt(nameA[1]);
-						if(typeof(myObj[nameA[0]][nameIndex]) == "undefined") {
-							myObj[nameA[0]][nameIndex]={};
-						}
-					} else if(typeof(myObj[nameA[0]]) == "undefined") {
-						myObj[nameA[0]]={}
-					} // if
-
-					if (nameA.length == 1) {
-						myObj=myObj[nameA[0]];
-					} else {
-						myObj=myObj[nameA[0]][nameIndex];
-					} // if
-				} // for
-
-				if ((elm.type != "select-multiple" && elm.type != "checkbox" && elm.type != "radio") || (elm.type=="radio" && elm.checked)) {
-					if(name == name.split("[")[0]) {
-						myObj[name]=elm.value;
-					} else {
-						// can not set value when there is no name
+				myObj[name].push(elm.value);
+			} else {
+				if (elm.type == "select-multiple") {
+					if (typeof (myObj[name]) == "undefined") {
+						myObj[name] = [];
 					}
-				} else if (elm.type == "checkbox" && elm.checked) {
-					if(typeof(myObj[name]) == 'undefined') {
-						myObj[name]=[ ];
-					}
-					myObj[name].push(elm.value);
-				} else if (elm.type == "select-multiple") {
-					if(typeof(myObj[name]) == 'undefined') {
-						myObj[name]=[ ];
-					}
-					for (var jdx=0,len3=elm.options.length; jdx<len3; ++jdx) {
+					for (var jdx = 0, len3 = elm.options.length; jdx < len3; ++jdx) {
 						if (elm.options[jdx].selected) {
 							myObj[name].push(elm.options[jdx].value);
 						}
 					}
-				} // if
-				name=undefined;
-			} // for
-		return obj;
+				}
+			}
+		}
+		name = undefined;
 	}
-});
+	return obj;
+}});
 
+
 __CPAN_FILE__ src/widget/Widget.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -20738,7 +14231,6 @@
 */
 
 dojo.provide("dojo.widget.Widget");
-
 dojo.require("dojo.lang.func");
 dojo.require("dojo.lang.array");
 dojo.require("dojo.lang.extras");
@@ -20747,748 +14239,298 @@
 dojo.require("dojo.widget.Manager");
 dojo.require("dojo.event.*");
 dojo.require("dojo.a11y");
-
-dojo.declare("dojo.widget.Widget", null,
-	function(){
-		// these properties aren't primitives and need to be created on a per-item
-		// basis.
-
-		// children: Array
-		//		a list of all of the widgets that have been added as children of
-		//		this component. Should only have values if isContainer is true.
-		this.children = [];
-
-		// extraArgs: Object
-		//		a map of properties which the widget system tried to assign from
-		//		user input but did not correspond to any of the properties set on
-		//		the class prototype. These names will also be available in all
-		//		lower-case form in this map
-		this.extraArgs = {};
-	},
-{
-	// parent: Widget
-	//		the parent of this widget
-	parent: null, 
-
-	// isTopLevel: Boolean
-	//		should this widget eat all events that bubble up to it?
-	//		obviously, top-level and modal widgets should set these appropriately
-	isTopLevel:  false, 
-
-	// disabled: Boolean
-	//		should this widget respond to user input?
-	//		in markup, this is specified as "disabled='disabled'", or just "disabled"
-	disabled: false,
-
-	// isContainer: Boolean
-	//		can this widget contain other widgets?
-	isContainer: false, 
-
-	// widgetId: String
-	//		a unique, opaque ID string that can be assigned by users or by the
-	//		system. If the developer passes an ID which is known not to be
-	//		unique, the specified ID is ignored and the system-generated ID is
-	//		used instead.
-	widgetId: "",
-
-	// widgetType: String
-	//		used for building generic widgets
-	widgetType: "Widget",
-
-	// ns: String
-	//		defaults to 'dojo'.  "namespace" is a reserved word in JavaScript, so we abbreviate
-	ns: "dojo",
-
-	getNamespacedType: function(){ 
-		// summary:
-		//		get the "full" name of the widget. If the widget comes from the
-		//		"dojo" namespace and is a Button, calling this method will
-		//		return "dojo:button", all lower-case
-		return (this.ns ? this.ns + ":" + this.widgetType : this.widgetType).toLowerCase(); // String
-	},
-	
-	toString: function(){
-		// summary:
-		//		returns a string that represents the widget. When a widget is
-		//		cast to a string, this method will be used to generate the
-		//		output. Currently, it does not implement any sort of reversable
-		//		serialization.
-		return '[Widget ' + this.getNamespacedType() + ', ' + (this.widgetId || 'NO ID') + ']'; // String
-	},
-
-	repr: function(){
-		// summary: returns the string representation of the widget.
-		return this.toString(); // String
-	},
-
-	enable: function(){
-		// summary:
-		//		enables the widget, usually involving unmasking inputs and
-		//		turning on event handlers. Not implemented here.
-		this.disabled = false;
-	},
-
-	disable: function(){
-		// summary:
-		//		disables the widget, usually involves masking inputs and
-		//		unsetting event handlers. Not implemented here.
-		this.disabled = true;
-	},
-
-	// TODO:
-	//	1) this would be better in HtmlWidget rather than here?
-	//	2) since many widgets don't care if they've been resized, maybe this should be a mixin?
-	onResized: function(){
-		// summary:
-		//		A signal that widgets will call when they have been resized.
-		//		Can be connected to for determining if a layout needs to be
-		//		reflowed. Clients should override this function to do special
-		//		processing, then call this.notifyChildrenOfResize() to notify
-		//		children of resize.
-		this.notifyChildrenOfResize();
-	},
-	
-	notifyChildrenOfResize: function(){
-		// summary: dispatches resized events to all children of this widget
-		for(var i=0; i<this.children.length; i++){
-			var child = this.children[i];
-			//dojo.debug(this.widgetId + " resizing child " + child.widgetId);
-			if( child.onResized ){
-				child.onResized();
-			}
+dojo.declare("dojo.widget.Widget", null, function () {
+	this.children = [];
+	this.extraArgs = {};
+}, {parent:null, isTopLevel:false, disabled:false, isContainer:false, widgetId:"", widgetType:"Widget", ns:"dojo", getNamespacedType:function () {
+	return (this.ns ? this.ns + ":" + this.widgetType : this.widgetType).toLowerCase();
+}, toString:function () {
+	return "[Widget " + this.getNamespacedType() + ", " + (this.widgetId || "NO ID") + "]";
+}, repr:function () {
+	return this.toString();
+}, enable:function () {
+	this.disabled = false;
+}, disable:function () {
+	this.disabled = true;
+}, onResized:function () {
+	this.notifyChildrenOfResize();
+}, notifyChildrenOfResize:function () {
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child.onResized) {
+			child.onResized();
 		}
-	},
-
-	create: function(args, fragment, parent, ns){
-		// summary:
-		//		'create' manages the initialization part of the widget
-		//		lifecycle. It's called implicitly when any widget is created.
-		//		All other initialization functions for widgets, except for the
-		//		constructor, are called as a result of 'create' being fired.
-		// args: Object
-		//		a normalized view of the parameters that the widget should take
-		// fragment: Object
-		//		if the widget is being instantiated from markup, this object 
-		// parent: Widget?
-		//		the widget, if any, that this widget will be the child of.  If
-		//		none is passed, the global default widget is used.
-		// ns: String?
-		//		what namespace the widget belongs to
-		// description:
-		//		to understand the process by which widgets are instantiated, it
-		//		is critical to understand what other methods 'create' calls and
-		//		which of them you'll want to over-ride. Of course, adventurous
-		//		developers could over-ride 'create' entirely, but this should
-		//		only be done as a last resort.
-		//
-		//		Below is a list of the methods that are called, in the order
-		//		they are fired, along with notes about what they do and if/when
-		//		you should over-ride them in your widget:
-		//			
-		//			mixInProperties:
-		//				takes the args and does lightweight type introspection
-		//				on pre-existing object properties to initialize widget
-		//				values by casting the values that are passed in args
-		//			postMixInProperties:
-		//				a stub function that you can over-ride to modify
-		//				variables that may have been naively assigned by
-		//				mixInProperties
-		//			# widget is added to manager object here
-		//			buildRendering
-		//				subclasses use this method to handle all UI initialization
-		//			initialize:
-		//				a stub function that you can over-ride.
-		//			postInitialize:
-		//				a stub function that you can over-ride.
-		//			postCreate
-		//				a stub function that you can over-ride to modify take
-		//				actions once the widget has been placed in the UI
-		//
-		//		all of these functions are passed the same arguments as are
-		//		passed to 'create'
-
-		//dojo.profile.start(this.widgetType + " create");
-		if(ns){
-			this.ns = ns;
+	}
+}, create:function (args, fragment, parent, ns) {
+	if (ns) {
+		this.ns = ns;
+	}
+	this.satisfyPropertySets(args, fragment, parent);
+	this.mixInProperties(args, fragment, parent);
+	this.postMixInProperties(args, fragment, parent);
+	dojo.widget.manager.add(this);
+	this.buildRendering(args, fragment, parent);
+	this.initialize(args, fragment, parent);
+	this.postInitialize(args, fragment, parent);
+	this.postCreate(args, fragment, parent);
+	return this;
+}, destroy:function (finalize) {
+	if (this.parent) {
+		this.parent.removeChild(this);
+	}
+	this.destroyChildren();
+	this.uninitialize();
+	this.destroyRendering(finalize);
+	dojo.widget.manager.removeById(this.widgetId);
+}, destroyChildren:function () {
+	var widget;
+	var i = 0;
+	while (this.children.length > i) {
+		widget = this.children[i];
+		if (widget instanceof dojo.widget.Widget) {
+			this.removeChild(widget);
+			widget.destroy();
+			continue;
 		}
-		// dojo.debug(this.widgetType, "create");
-		//dojo.profile.start(this.widgetType + " satisfyPropertySets");
-		this.satisfyPropertySets(args, fragment, parent);
-		//dojo.profile.end(this.widgetType + " satisfyPropertySets");
-		// dojo.debug(this.widgetType, "-> mixInProperties");
-		//dojo.profile.start(this.widgetType + " mixInProperties");
-		this.mixInProperties(args, fragment, parent);
-		//dojo.profile.end(this.widgetType + " mixInProperties");
-		// dojo.debug(this.widgetType, "-> postMixInProperties");
-		//dojo.profile.start(this.widgetType + " postMixInProperties");
-		this.postMixInProperties(args, fragment, parent);
-		//dojo.profile.end(this.widgetType + " postMixInProperties");
-		// dojo.debug(this.widgetType, "-> dojo.widget.manager.add");
-		dojo.widget.manager.add(this);
-		// dojo.debug(this.widgetType, "-> buildRendering");
-		//dojo.profile.start(this.widgetType + " buildRendering");
-		this.buildRendering(args, fragment, parent);
-		//dojo.profile.end(this.widgetType + " buildRendering");
-		// dojo.debug(this.widgetType, "-> initialize");
-		//dojo.profile.start(this.widgetType + " initialize");
-		this.initialize(args, fragment, parent);
-		//dojo.profile.end(this.widgetType + " initialize");
-		// dojo.debug(this.widgetType, "-> postInitialize");
-		// postinitialize includes subcomponent creation
-		// profile is put directly to function
-		this.postInitialize(args, fragment, parent);
-		// dojo.debug(this.widgetType, "-> postCreate");
-		//dojo.profile.start(this.widgetType + " postCreate");
-		this.postCreate(args, fragment, parent);
-		//dojo.profile.end(this.widgetType + " postCreate");
-		// dojo.debug(this.widgetType, "done!");
-		
-		//dojo.profile.end(this.widgetType + " create");
-		
-		return this;
-	},
-
-	destroy: function(finalize){
-		// summary:
-		// 		Destroy this widget and it's descendants. This is the generic
-		// 		"destructor" function that all widget users should call to
-		// 		clealy discard with a widget. Once a widget is destroyed, it's
-		// 		removed from the manager object.
-		// finalize: Boolean
-		//		is this function being called part of global environment
-		//		tear-down?
-
-		// FIXME: this is woefully incomplete
-		if(this.parent){
-			this.parent.removeChild(this);
-		}
-		this.destroyChildren();
-		this.uninitialize();
-		this.destroyRendering(finalize);
-		dojo.widget.manager.removeById(this.widgetId);
-	},
-
-	destroyChildren: function(){
-		// summary:
-		//		Recursively destroy the children of this widget and their
-		//		descendents.
-		var widget;
-		var i=0;
-		while(this.children.length > i){
-			widget = this.children[i];
-			if (widget instanceof dojo.widget.Widget) { // find first widget
-				this.removeChild(widget);
-				widget.destroy();
-				continue;
+		i++;
+	}
+}, getChildrenOfType:function (type, recurse) {
+	var ret = [];
+	var isFunc = dojo.lang.isFunction(type);
+	if (!isFunc) {
+		type = type.toLowerCase();
+	}
+	for (var x = 0; x < this.children.length; x++) {
+		if (isFunc) {
+			if (this.children[x] instanceof type) {
+				ret.push(this.children[x]);
 			}
-			
-			i++; // skip data object
-		}
-				
-	},
-
-	getChildrenOfType: function(/*String*/type, recurse){
-		// summary: 
-		//		return an array of descendant widgets who match the passed type
-		// recurse: Boolean
-		//		should we try to get all descendants that match? Defaults to
-		//		false.
-		var ret = [];
-		var isFunc = dojo.lang.isFunction(type);
-		if(!isFunc){
-			type = type.toLowerCase();
-		}
-		for(var x=0; x<this.children.length; x++){
-			if(isFunc){
-				if(this.children[x] instanceof type){
-					ret.push(this.children[x]);
-				}
-			}else{
-				if(this.children[x].widgetType.toLowerCase() == type){
-					ret.push(this.children[x]);
-				}
+		} else {
+			if (this.children[x].widgetType.toLowerCase() == type) {
+				ret.push(this.children[x]);
 			}
-			if(recurse){
-				ret = ret.concat(this.children[x].getChildrenOfType(type, recurse));
-			}
 		}
-		return ret; // Array
-	},
-
-	getDescendants: function(){
-		// returns: a flattened array of all direct descendants including self
-		var result = [];
-		var stack = [this];
-		var elem;
-		while ((elem = stack.pop())){
-			result.push(elem);
-			// a child may be data object without children field set (not widget)
-			if (elem.children) {
-				dojo.lang.forEach(elem.children, function(elem) { stack.push(elem); });
-			}
+		if (recurse) {
+			ret = ret.concat(this.children[x].getChildrenOfType(type, recurse));
 		}
-		return result; // Array
-	},
-
-
-	isFirstChild: function(){
-		return this === this.parent.children[0]; // Boolean
-	},
-
-	isLastChild: function() {
-		return this === this.parent.children[this.parent.children.length-1]; // Boolean
-	},
-
-	satisfyPropertySets: function(args){
-		// summary: not implemented!
-
-		// dojo.profile.start("satisfyPropertySets");
-		// get the default propsets for our component type
-		/*
-		var typePropSets = []; // FIXME: need to pull these from somewhere!
-		var localPropSets = []; // pull out propsets from the parser's return structure
-
-		// for(var x=0; x<args.length; x++){
-		// }
-
-		for(var x=0; x<typePropSets.length; x++){
+	}
+	return ret;
+}, getDescendants:function () {
+	var result = [];
+	var stack = [this];
+	var elem;
+	while ((elem = stack.pop())) {
+		result.push(elem);
+		if (elem.children) {
+			dojo.lang.forEach(elem.children, function (elem) {
+				stack.push(elem);
+			});
 		}
-
-		for(var x=0; x<localPropSets.length; x++){
+	}
+	return result;
+}, isFirstChild:function () {
+	return this === this.parent.children[0];
+}, isLastChild:function () {
+	return this === this.parent.children[this.parent.children.length - 1];
+}, satisfyPropertySets:function (args) {
+	return args;
+}, mixInProperties:function (args, frag) {
+	if ((args["fastMixIn"]) || (frag["fastMixIn"])) {
+		for (var x in args) {
+			this[x] = args[x];
 		}
-		*/
-		// dojo.profile.end("satisfyPropertySets");
-		
-		return args;
-	},
-
-	mixInProperties: function(args, /*Object*/frag){
-		// summary:
-		// 		takes the list of properties listed in args and sets values of
-		// 		the current object based on existence of properties with the
-		// 		same name (case insensitive) and the type of the pre-existing
-		// 		property. This is a lightweight conversion and is not intended
-		// 		to capture custom type semantics.
-		// args: Object
-		//		A map of properties and values to set on the current object. By
-		//		default it is assumed that properties in args are in string
-		//		form and need to be converted. However, if there is a
-		//		'fastMixIn' property with the value 'true' in the args param,
-		//		this assumption is ignored and all values in args are copied
-		//		directly to the current object without any form of type
-		//		casting.
-		// description:
-		//		The mix-in code attempts to do some type-assignment based on
-		//		PRE-EXISTING properties of the "this" object. When a named
-		//		property of args is located, it is first tested to make
-		//		sure that the current object already "has one". Properties
-		//		which are undefined in the base widget are NOT settable here.
-		//		The next step is to try to determine type of the pre-existing
-		//		property. If it's a string, the property value is simply
-		//		assigned. If a function, it is first cast using "new
-		//		Function()" and the execution scope modified such that it
-		//		always evaluates in the context of the current object. This
-		//		listener is then added to the original function via
-		//		dojo.event.connect(). If an Array, the system attempts to split
-		//		the string value on ";" chars, and no further processing is
-		//		attempted (conversion of array elements to a integers, for
-		//		instance). If the property value is an Object
-		//		(testObj.constructor === Object), the property is split first
-		//		on ";" chars, secondly on ":" chars, and the resulting
-		//		key/value pairs are assigned to an object in a map style. The
-		//		onus is on the property user to ensure that all property values
-		//		are converted to the expected type before usage. Properties
-		//		which do not occur in the "this" object are assigned to the
-		//		this.extraArgs map using both the original name and the
-		//		lower-case name of the property. This allows for consistent
-		//		access semantics regardless of the case preservation of the
-		//		source of the property names.
-		
-		if((args["fastMixIn"])||(frag["fastMixIn"])){
-			// dojo.profile.start("mixInProperties_fastMixIn");
-			// fast mix in assumes case sensitivity, no type casting, etc...
-			// dojo.lang.mixin(this, args);
-			for(var x in args){
-				this[x] = args[x];
-			}
-			// dojo.profile.end("mixInProperties_fastMixIn");
-			return;
+		return;
+	}
+	var undef;
+	var lcArgs = dojo.widget.lcArgsCache[this.widgetType];
+	if (lcArgs == null) {
+		lcArgs = {};
+		for (var y in this) {
+			lcArgs[((new String(y)).toLowerCase())] = y;
 		}
-		// dojo.profile.start("mixInProperties");
-
-		var undef;
-
-		// NOTE: we cannot assume that the passed properties are case-correct
-		// (esp due to some browser bugs). Therefore, we attempt to locate
-		// properties for assignment regardless of case. This may cause
-		// problematic assignments and bugs in the future and will need to be
-		// documented with big bright neon lights.
-
-		// FIXME: fails miserably if a mixin property has a default value of null in 
-		// a widget
-
-		// NOTE: caching lower-cased args in the prototype is only 
-		// acceptable if the properties are invariant.
-		// if we have a name-cache, get it
-		var lcArgs = dojo.widget.lcArgsCache[this.widgetType];
-		if ( lcArgs == null ){
-			// build a lower-case property name cache if we don't have one
-			lcArgs = {};
-			for(var y in this){
-				lcArgs[((new String(y)).toLowerCase())] = y;
+		dojo.widget.lcArgsCache[this.widgetType] = lcArgs;
+	}
+	var visited = {};
+	for (var x in args) {
+		if (!this[x]) {
+			var y = lcArgs[(new String(x)).toLowerCase()];
+			if (y) {
+				args[y] = args[x];
+				x = y;
 			}
-			dojo.widget.lcArgsCache[this.widgetType] = lcArgs;
 		}
-		var visited = {};
-		for(var x in args){
-			if(!this[x]){ // check the cache for properties
-				var y = lcArgs[(new String(x)).toLowerCase()];
-				if(y){
-					args[y] = args[x];
-					x = y; 
-				}
-			}
-			if(visited[x]){ continue; }
-			visited[x] = true;
-			if((typeof this[x]) != (typeof undef)){
-				if(typeof args[x] != "string"){
+		if (visited[x]) {
+			continue;
+		}
+		visited[x] = true;
+		if ((typeof this[x]) != (typeof undef)) {
+			if (typeof args[x] != "string") {
+				this[x] = args[x];
+			} else {
+				if (dojo.lang.isString(this[x])) {
 					this[x] = args[x];
-				}else{
-					if(dojo.lang.isString(this[x])){
-						this[x] = args[x];
-					}else if(dojo.lang.isNumber(this[x])){
-						this[x] = new Number(args[x]); // FIXME: what if NaN is the result?
-					}else if(dojo.lang.isBoolean(this[x])){
-						this[x] = (args[x].toLowerCase()=="false") ? false : true;
-					}else if(dojo.lang.isFunction(this[x])){
-
-						// FIXME: need to determine if always over-writing instead
-						// of attaching here is appropriate. I suspect that we
-						// might want to only allow attaching w/ action items.
-						
-						// RAR, 1/19/05: I'm going to attach instead of
-						// over-write here. Perhaps function objects could have
-						// some sort of flag set on them? Or mixed-into objects
-						// could have some list of non-mutable properties
-						// (although I'm not sure how that would alleviate this
-						// particular problem)? 
-
-						// this[x] = new Function(args[x]);
-
-						// after an IRC discussion last week, it was decided
-						// that these event handlers should execute in the
-						// context of the widget, so that the "this" pointer
-						// takes correctly.
-						
-						// argument that contains no punctuation other than . is 
-						// considered a function spec, not code
-						if(args[x].search(/[^\w\.]+/i) == -1){
-							this[x] = dojo.evalObjPath(args[x], false);
-						}else{
-							var tn = dojo.lang.nameAnonFunc(new Function(args[x]), this);
-							dojo.event.kwConnect({
-								srcObj: this, 
-								srcFunc: x, 
-								adviceObj: this, 
-								adviceFunc: tn
-							});
-						}
-					}else if(dojo.lang.isArray(this[x])){ // typeof [] == "object"
-						this[x] = args[x].split(";");
-					} else if (this[x] instanceof Date) {
-						this[x] = new Date(Number(args[x])); // assume timestamp
-					}else if(typeof this[x] == "object"){ 
-						// FIXME: should we be allowing extension here to handle
-						// other object types intelligently?
-
-						// if a plain string is passed to a property of type dojo.uri.Uri,
-						// we assume it is relative to root of dojo
-						if (this[x] instanceof dojo.uri.Uri){
-							this[x] = dojo.uri.dojoUri(args[x]);
-						}else{
-							// FIXME: unlike all other types, we do not replace the
-							// object with a new one here. Should we change that?
-							var pairs = args[x].split(";");
-							for(var y=0; y<pairs.length; y++){
-								var si = pairs[y].indexOf(":");
-								if((si != -1)&&(pairs[y].length>si)){
-									this[x][pairs[y].substr(0, si).replace(/^\s+|\s+$/g, "")] = pairs[y].substr(si+1);
+				} else {
+					if (dojo.lang.isNumber(this[x])) {
+						this[x] = new Number(args[x]);
+					} else {
+						if (dojo.lang.isBoolean(this[x])) {
+							this[x] = (args[x].toLowerCase() == "false") ? false : true;
+						} else {
+							if (dojo.lang.isFunction(this[x])) {
+								if (args[x].search(/[^\w\.]+/i) == -1) {
+									this[x] = dojo.evalObjPath(args[x], false);
+								} else {
+									var tn = dojo.lang.nameAnonFunc(new Function(args[x]), this);
+									dojo.event.kwConnect({srcObj:this, srcFunc:x, adviceObj:this, adviceFunc:tn});
 								}
+							} else {
+								if (dojo.lang.isArray(this[x])) {
+									this[x] = args[x].split(";");
+								} else {
+									if (this[x] instanceof Date) {
+										this[x] = new Date(Number(args[x]));
+									} else {
+										if (typeof this[x] == "object") {
+											if (this[x] instanceof dojo.uri.Uri) {
+												this[x] = dojo.uri.dojoUri(args[x]);
+											} else {
+												var pairs = args[x].split(";");
+												for (var y = 0; y < pairs.length; y++) {
+													var si = pairs[y].indexOf(":");
+													if ((si != -1) && (pairs[y].length > si)) {
+														this[x][pairs[y].substr(0, si).replace(/^\s+|\s+$/g, "")] = pairs[y].substr(si + 1);
+													}
+												}
+											}
+										} else {
+											this[x] = args[x];
+										}
+									}
+								}
 							}
 						}
-					}else{
-						// the default is straight-up string assignment. When would
-						// we ever hit this?
-						this[x] = args[x];
 					}
 				}
-			}else{
-				// collect any extra 'non mixed in' args
-				this.extraArgs[x.toLowerCase()] = args[x];
 			}
+		} else {
+			this.extraArgs[x.toLowerCase()] = args[x];
 		}
-		// dojo.profile.end("mixInProperties");
-	},
-	
-	postMixInProperties: function(/*Object*/args, /*Object*/frag, /*Widget*/parent){
-		// summary
-		//	Called after the parameters to the widget have been read-in,
-		//	but before the widget template is instantiated.
-		//	Especially useful to set properties that are referenced in the widget template.
-	},
-
-	initialize: function(/*Object*/args, /*Object*/frag, /*Widget*/parent){
-		// summary: stub function.
-		return false;
-		// dojo.unimplemented("dojo.widget.Widget.initialize");
-	},
-
-	postInitialize: function(/*Object*/args, /*Object*/frag, /*Widget*/parent){
-		// summary: stub function.
-		return false;
-	},
-
-	postCreate: function(/*Object*/args, /*Object*/frag, /*Widget*/parent){
-		// summary: stub function.
-		return false;
-	},
-
-	uninitialize: function(){
-		// summary: 
-		//		stub function. Over-ride to implement custom widget tear-down
-		//		behavior.
-		return false;
-	},
-
-	buildRendering: function(/*Object*/args, /*Object*/frag, /*Widget*/parent){
-		// summary: stub function. SUBCLASSES MUST IMPLEMENT
-		dojo.unimplemented("dojo.widget.Widget.buildRendering, on "+this.toString()+", ");
-		return false;
-	},
-
-	destroyRendering: function(){
-		// summary: stub function. SUBCLASSES MUST IMPLEMENT
-		dojo.unimplemented("dojo.widget.Widget.destroyRendering");
-		return false;
-	},
-
-	addedTo: function(parent){
-		// summary:
-		//		stub function this is just a signal that can be caught
-		// parent: Widget
-		//		instance of dojo.widget.Widget that we were added to
-	},
-
-	addChild: function(child){
-		// summary: stub function. SUBCLASSES MUST IMPLEMENT
-		dojo.unimplemented("dojo.widget.Widget.addChild");
-		return false;
-	},
-
-	// Detach the given child widget from me, but don't destroy it
-	removeChild: function(/*Widget*/widget){
-		// summary: 
-		//		removes the passed widget instance from this widget but does
-		//		not destroy it
-		for(var x=0; x<this.children.length; x++){
-			if(this.children[x] === widget){
-				this.children.splice(x, 1);
-				widget.parent=null;
-				break;
-			}
+	}
+}, postMixInProperties:function (args, frag, parent) {
+}, initialize:function (args, frag, parent) {
+	return false;
+}, postInitialize:function (args, frag, parent) {
+	return false;
+}, postCreate:function (args, frag, parent) {
+	return false;
+}, uninitialize:function () {
+	return false;
+}, buildRendering:function (args, frag, parent) {
+	dojo.unimplemented("dojo.widget.Widget.buildRendering, on " + this.toString() + ", ");
+	return false;
+}, destroyRendering:function () {
+	dojo.unimplemented("dojo.widget.Widget.destroyRendering");
+	return false;
+}, addedTo:function (parent) {
+}, addChild:function (child) {
+	dojo.unimplemented("dojo.widget.Widget.addChild");
+	return false;
+}, removeChild:function (widget) {
+	for (var x = 0; x < this.children.length; x++) {
+		if (this.children[x] === widget) {
+			this.children.splice(x, 1);
+			widget.parent = null;
+			break;
 		}
-		return widget; // Widget
-	},
-
-	getPreviousSibling: function(){
-		// summary:
-		//		returns null if this is the first child of the parent,
-		//		otherwise returns the next sibling to the "left".
-		var idx = this.getParentIndex();
- 
-		 // first node is idx=0 not found is idx<0
-		if (idx<=0) return null;
- 
-		return this.parent.children[idx-1]; // Widget
-	},
- 
-	getSiblings: function(){
-		// summary: gets an array of all children of our parent, including "this"
-		return this.parent.children; // Array
-	},
- 
-	getParentIndex: function(){
-		// summary: what index are we at in the parent's children array?
-		return dojo.lang.indexOf(this.parent.children, this, true); // int
-	},
- 
-	getNextSibling: function(){
-		// summary:
-		//		returns null if this is the last child of the parent,
-		//		otherwise returns the next sibling to the "right".
- 
-		var idx = this.getParentIndex();
- 
-		if (idx == this.parent.children.length-1){return null;} // last node
-		if (idx < 0){return null;} // not found
- 
-		return this.parent.children[idx+1]; // Widget
 	}
-});
-
-// Lower case name cache: listing of the lower case elements in each widget.
-// We can't store the lcArgs in the widget itself because if B subclasses A,
-// then B.prototype.lcArgs might return A.prototype.lcArgs, which is not what we
-// want
+	return widget;
+}, getPreviousSibling:function () {
+	var idx = this.getParentIndex();
+	if (idx <= 0) {
+		return null;
+	}
+	return this.parent.children[idx - 1];
+}, getSiblings:function () {
+	return this.parent.children;
+}, getParentIndex:function () {
+	return dojo.lang.indexOf(this.parent.children, this, true);
+}, getNextSibling:function () {
+	var idx = this.getParentIndex();
+	if (idx == this.parent.children.length - 1) {
+		return null;
+	}
+	if (idx < 0) {
+		return null;
+	}
+	return this.parent.children[idx + 1];
+}});
 dojo.widget.lcArgsCache = {};
-
-// TODO: should have a more general way to add tags or tag libraries?
-// TODO: need a default tags class to inherit from for things like getting propertySets
-// TODO: parse properties/propertySets into component attributes
-// TODO: parse subcomponents
-// TODO: copy/clone raw markup fragments/nodes as appropriate
 dojo.widget.tags = {};
-dojo.widget.tags.addParseTreeHandler = function(/*String*/type){
-	// summary: deprecated!
+dojo.widget.tags.addParseTreeHandler = function (type) {
 	dojo.deprecated("addParseTreeHandler", ". ParseTreeHandlers are now reserved for components. Any unfiltered DojoML tag without a ParseTreeHandler is assumed to be a widget", "0.5");
-	/*
-	var ltype = type.toLowerCase();
-	this[ltype] = function(fragment, widgetParser, parentComp, insertionIndex, localProps){
-		var _ltype = ltype;
-		dojo.profile.start(_ltype);
-		var n = dojo.widget.buildWidgetFromParseTree(ltype, fragment, widgetParser, parentComp, insertionIndex, localProps);
-		dojo.profile.end(_ltype);
-		return n;
-	}
-	*/
-}
-
-//dojo.widget.tags.addParseTreeHandler("dojo:widget");
-
-dojo.widget.tags["dojo:propertyset"] = function(fragment, widgetParser, parentComp){
-	// FIXME: Is this needed?
-	// FIXME: Not sure that this parses into the structure that I want it to parse into...
-	// FIXME: add support for nested propertySets
+};
+dojo.widget.tags["dojo:propertyset"] = function (fragment, widgetParser, parentComp) {
 	var properties = widgetParser.parseProperties(fragment["dojo:propertyset"]);
-}
-
-// FIXME: need to add the <dojo:connect />
-dojo.widget.tags["dojo:connect"] = function(fragment, widgetParser, parentComp){
+};
+dojo.widget.tags["dojo:connect"] = function (fragment, widgetParser, parentComp) {
 	var properties = widgetParser.parseProperties(fragment["dojo:connect"]);
-}
-
-// FIXME: if we know the insertion point (to a reasonable location), why then do we:
-//	- create a template node
-//	- clone the template node
-//	- render the clone and set properties
-//	- remove the clone from the render tree
-//	- place the clone
-// this is quite dumb
-dojo.widget.buildWidgetFromParseTree = function(/*String*/				type,
-												/*Object*/				frag, 
-												/*dojo.widget.Parse*/	parser,
-												/*Widget, optional*/	parentComp, 
-												/*int, optional*/		insertionIndex,
-												/*Object*/				localProps){
-
-	// summary: creates a tree of widgets from the data structure produced by the first-pass parser (frag)
-	
-	// test for accessibility mode 
+};
+dojo.widget.buildWidgetFromParseTree = function (type, frag, parser, parentComp, insertionIndex, localProps) {
 	dojo.a11y.setAccessibleMode();
-	//dojo.profile.start("buildWidgetFromParseTree");
-	// FIXME: for codepath from createComponentFromScript, we are now splitting a path 
-	// that we already split and then joined
 	var stype = type.split(":");
 	stype = (stype.length == 2) ? stype[1] : type;
-	
-	// FIXME: we don't seem to be doing anything with this!
-	// var propertySets = parser.getPropertySets(frag);
-	var localProperties = localProps || parser.parseProperties(frag[frag["ns"]+":"+stype]);
-	var twidget = dojo.widget.manager.getImplementation(stype,null,null,frag["ns"]);
-	if(!twidget){
-		throw new Error('cannot find "' + type + '" widget');
-	}else if (!twidget.create){
-		throw new Error('"' + type + '" widget object has no "create" method and does not appear to implement *Widget');
+	var localProperties = localProps || parser.parseProperties(frag[frag["ns"] + ":" + stype]);
+	var twidget = dojo.widget.manager.getImplementation(stype, null, null, frag["ns"]);
+	if (!twidget) {
+		throw new Error("cannot find \"" + type + "\" widget");
+	} else {
+		if (!twidget.create) {
+			throw new Error("\"" + type + "\" widget object has no \"create\" method and does not appear to implement *Widget");
+		}
 	}
 	localProperties["dojoinsertionindex"] = insertionIndex;
-	// FIXME: we lose no less than 5ms in construction!
 	var ret = twidget.create(localProperties, frag, parentComp, frag["ns"]);
-	// dojo.profile.end("buildWidgetFromParseTree");
 	return ret;
-}
-
-dojo.widget.defineWidget = function(widgetClass, renderer, superclasses, init, props){
-	// summary: Create a widget constructor function (aka widgetClass)
-	// widgetClass: String
-	//		the location in the object hierarchy to place the new widget class constructor
-	// renderer: String
-	//		usually "html", determines when this delcaration will be used
-	// superclasses: Function||Function[]
-	//		can be either a single function or an array of functions to be
-	//		mixed in as superclasses. If an array, only the first will be used
-	//		to set prototype inheritance.
-	// init: Function
-	//		an optional constructor function. Will be called after superclasses are mixed in.
-	// props: Object
-	//		a map of properties and functions to extend the class prototype with
-
-	// This meta-function does parameter juggling for backward compat and overloading
-	// if 4th argument is a string, we are using the old syntax
-	// old sig: widgetClass, superclasses, props (object), renderer (string), init (function)
-	if(dojo.lang.isString(arguments[3])){
+};
+dojo.widget.defineWidget = function (widgetClass, renderer, superclasses, init, props) {
+	if (dojo.lang.isString(arguments[3])) {
 		dojo.widget._defineWidget(arguments[0], arguments[3], arguments[1], arguments[4], arguments[2]);
-	}else{
-		// widgetClass
-		var args = [ arguments[0] ], p = 3;
-		if(dojo.lang.isString(arguments[1])){
-			// renderer, superclass
+	} else {
+		var args = [arguments[0]], p = 3;
+		if (dojo.lang.isString(arguments[1])) {
 			args.push(arguments[1], arguments[2]);
-		}else{
-			// superclass
-			args.push('', arguments[1]);
+		} else {
+			args.push("", arguments[1]);
 			p = 2;
 		}
-		if(dojo.lang.isFunction(arguments[p])){
-			// init (function), props (object) 
-			args.push(arguments[p], arguments[p+1]);
-		}else{
-			// props (object) 
+		if (dojo.lang.isFunction(arguments[p])) {
+			args.push(arguments[p], arguments[p + 1]);
+		} else {
 			args.push(null, arguments[p]);
 		}
 		dojo.widget._defineWidget.apply(this, args);
 	}
-}
-
+};
 dojo.widget.defineWidget.renderers = "html|svg|vml";
-
-dojo.widget._defineWidget = function(widgetClass /*string*/, renderer /*string*/, superclasses /*function||array*/, init /*function*/, props /*object*/){
-	// FIXME: uncomment next line to test parameter juggling ... remove when confidence improves
-	// dojo.debug('(c:)' + widgetClass + '\n\n(r:)' + renderer + '\n\n(i:)' + init + '\n\n(p:)' + props);
-	// widgetClass takes the form foo.bar.baz<.renderer>.WidgetName (e.g. foo.bar.baz.WidgetName or foo.bar.baz.html.WidgetName)
+dojo.widget._defineWidget = function (widgetClass, renderer, superclasses, init, props) {
 	var module = widgetClass.split(".");
-	var type = module.pop(); // type <= WidgetName, module <= foo.bar.baz<.renderer>
-	var regx = "\\.(" + (renderer ? renderer + '|' : '') + dojo.widget.defineWidget.renderers + ")\\.";
+	var type = module.pop();
+	var regx = "\\.(" + (renderer ? renderer + "|" : "") + dojo.widget.defineWidget.renderers + ")\\.";
 	var r = widgetClass.search(new RegExp(regx));
 	module = (r < 0 ? module.join(".") : widgetClass.substr(0, r));
-
-	// deprecated in favor of namespace system, remove for 0.5
 	dojo.widget.manager.registerWidgetPackage(module);
-	
 	var pos = module.indexOf(".");
-	var nsName = (pos > -1) ? module.substring(0,pos) : module;
-
-	// FIXME: hrm, this might make things simpler
-	//dojo.widget.tags.addParseTreeHandler(nsName+":"+type.toLowerCase());
-	
-	props=(props)||{};
+	var nsName = (pos > -1) ? module.substring(0, pos) : module;
+	props = (props) || {};
 	props.widgetType = type;
-	if((!init)&&(props["classConstructor"])){
+	if ((!init) && (props["classConstructor"])) {
 		init = props.classConstructor;
 		delete props.classConstructor;
 	}
 	dojo.declare(widgetClass, superclasses, init, props);
-}
+};
 
+
 __CPAN_FILE__ src/widget/DropdownDatePicker.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -21501,7 +14543,6 @@
 */
 
 dojo.provide("dojo.widget.DropdownDatePicker");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.DropdownContainer");
 dojo.require("dojo.widget.DatePicker");
@@ -21512,224 +14553,94 @@
 dojo.require("dojo.string.common");
 dojo.require("dojo.i18n.common");
 dojo.requireLocalization("dojo.widget", "DropdownDatePicker", null, "ROOT");
-
-
-dojo.widget.defineWidget(
-	"dojo.widget.DropdownDatePicker",
-	dojo.widget.DropdownContainer,
-	{
-		/*
-		summary: 
-			A form input for entering dates with a pop-up dojo.widget.DatePicker to aid in selection
-		
-			description: 
-				This is DatePicker in a DropdownContainer, it supports all features of DatePicker.
-		
-				The value displayed in the widget is localized according to the default algorithm provided
-				in dojo.date.format and dojo.date.parse.  It is possible to customize the user-visible formatting
-				with either the formatLength or displayFormat attributes.  The value sent to the server is
-				typically a locale-independent value in a hidden field as defined by the name attribute.
-				RFC3339 representation is used by default, but other options are available with saveFormat.
-		
-			usage: 
-				var ddp = dojo.widget.createWidget("DropdownDatePicker", {},   
-				dojo.byId("DropdownDatePickerNode")); 
-		 	 
-				<input dojoType="DropdownDatePicker">
-		*/
-
-		iconURL: dojo.uri.dojoUri("src/widget/templates/images/dateIcon.gif"),
-
-		// formatLength: String
-		// 	Type of formatting used for visual display, appropriate to locale (choice of long, short, medium or full)
-		//  See dojo.date.format for details.
-		formatLength: "short",
-
-		// displayFormat: String
-		//	A pattern used for the visual display of the formatted date, e.g. dd/MM/yyyy.
-		//	Setting this overrides the default locale-specific settings as well as the formatLength
-		//	attribute.  See dojo.date.format for a reference which defines the formatting patterns.
-		displayFormat: "",
-
-		dateFormat: "", // deprecated, will be removed for 0.5
-
-		// saveFormat: String
-		//	Formatting scheme used when submitting the form element.  This formatting is used in a hidden
-		//  field (name) intended for server use, and is therefore typically locale-independent.
-		//  By default, uses rfc3339 style date formatting (rfc)
-		//	Use a pattern string like displayFormat or one of the following:
-		//	rfc|iso|posix|unix
-		saveFormat: "",
-
-		// value: String|Date
-		//	form value property in rfc3339 format. If =='today', will use today's date
-		value: "",
-
-		// name: String
-		// 	name of the form element, used to create a hidden field by this name for form element submission.
-		name: "",
-
-		// Implement various attributes from DatePicker
-
-		// displayWeeks: Integer
-		//	number of weeks to display 
-		displayWeeks: 6,
-
-		// adjustWeeks: Boolean
-		//	if true, weekly size of calendar changes to accomodate the month if false, 42 day format is used
-		adjustWeeks: false,
-
-		// startDate: String|Date
-		//	first available date in the calendar set
-		startDate: "1492-10-12",
-
-		// endDate: String|Date
-		//	last available date in the calendar set
-		endDate: "2941-10-12",
-
-		// weekStartsOn: Integer
-		//	adjusts the first day of the week 0==Sunday..6==Saturday
-		weekStartsOn: "",
-
-		// staticDisplay: Boolean
-		//	disable all incremental controls, must pick a date in the current display
-		staticDisplay: false,
-		
-		postMixInProperties: function(localProperties, frag){
-			// summary: see dojo.widget.DomWidget
-
-			dojo.widget.DropdownDatePicker.superclass.postMixInProperties.apply(this, arguments);
-			var messages = dojo.i18n.getLocalization("dojo.widget", "DropdownDatePicker", this.lang);
-			this.iconAlt = messages.selectDate;
-
-			//FIXME: should this be if/else/else?
-			if(typeof(this.value)=='string'&&this.value.toLowerCase()=='today'){
-				this.value = new Date();
-			}
-			if(this.value && isNaN(this.value)){
-				var orig = this.value;
-				this.value = dojo.date.fromRfc3339(this.value);
-				if(!this.value){this.value = new Date(orig); dojo.deprecated("dojo.widget.DropdownDatePicker", "date attributes must be passed in Rfc3339 format", "0.5");}
-			}
-			if(this.value && !isNaN(this.value)){
-				this.value = new Date(this.value);
-			}
-		},
-
-		fillInTemplate: function(args, frag){
-			// summary: see dojo.widget.DomWidget
-			dojo.widget.DropdownDatePicker.superclass.fillInTemplate.call(this, args, frag);
-			//attributes to be passed on to DatePicker
-			var dpArgs = {widgetContainerId: this.widgetId, lang: this.lang, value: this.value,
-				startDate: this.startDate, endDate: this.endDate, displayWeeks: this.displayWeeks,
-				weekStartsOn: this.weekStartsOn, adjustWeeks: this.adjustWeeks, staticDisplay: this.staticDisplay};
-
-			//build the args for DatePicker based on the public attributes of DropdownDatePicker
-			this.datePicker = dojo.widget.createWidget("DatePicker", dpArgs, this.containerNode, "child");
-			dojo.event.connect(this.datePicker, "onValueChanged", this, "_updateText");
-			
-			if(this.value){
-				this._updateText();
-			}
-			this.containerNode.explodeClassName = "calendarBodyContainer";
-			this.valueNode.name=this.name;
-		},
-
-		getValue: function(){
-			// summary: return current date in RFC 3339 format
-			return this.valueNode.value; /*String*/
-		},
-
-		getDate: function(){
-			// summary: return current date as a Date object
-			return this.datePicker.value; /*Date*/
-		},
-
-		setValue: function(/*Date|String*/rfcDate){
-			//summary: set the current date from RFC 3339 formatted string or a date object, synonymous with setDate
-			this.setDate(rfcDate);
-		},
-
-		setDate: function(/*Date|String*/dateObj){
-			// summary: set the current date and update the UI
-			this.datePicker.setDate(dateObj);
-			this._syncValueNode();
-		},
-	
-		_updateText: function(){
-			// summary: updates the <input> field according to the current value (ie, displays the formatted date)
-			if(this.dateFormat){
-				dojo.deprecated("dojo.widget.DropdownDatePicker",
-				"Must use displayFormat attribute instead of dateFormat.  See dojo.date.format for specification.", "0.5");
-				this.inputNode.value = dojo.date.strftime(this.datePicker.value, this.dateFormat, this.lang);
-			}else if(this.datePicker.value){
-				this.inputNode.value = dojo.date.format(this.datePicker.value,
-					{formatLength:this.formatLength, datePattern:this.displayFormat, selector:'dateOnly', locale:this.lang});
-			}else{
-				this.inputNode.value = "";
-			}
-
-			if(this.value < this.datePicker.startDate||this.value>this.datePicker.endDate){
-				this.inputNode.value = "";
-			}
-			this._syncValueNode();
-			this.onValueChanged(this.getDate());
-			this.hideContainer();
-		},
-
-		onValueChanged: function(/*Date*/dateObj){
-			//summary: triggered when this.value is changed
-		},
-		
-		onInputChange: function(){
-			// summary: callback when user manually types a date into the <input> field
-			if(this.dateFormat){
-				dojo.deprecated("dojo.widget.DropdownDatePicker",
-				"Cannot parse user input.  Must use displayFormat attribute instead of dateFormat.  See dojo.date.format for specification.", "0.5");
-			}else{
-				var input = dojo.string.trim(this.inputNode.value);
-				if(input){
-					var inputDate = dojo.date.parse(input,
-							{formatLength:this.formatLength, datePattern:this.displayFormat, selector:'dateOnly', locale:this.lang});			
-					if(inputDate){
-						this.setDate(inputDate);
-					}
-				} else {
-					this.valueNode.value = input;
-				}
-			}
-			// If the date entered didn't parse, reset to the old date.  KISS, for now.
-			//TODO: usability?  should we provide more feedback somehow? an error notice?
-			// seems redundant to do this if the parse failed, but at least until we have validation,
-			// this will fix up the display of entries like 01/32/2006
-			if(input){ this._updateText(); }
-		},
-
-		_syncValueNode: function(){
-			var date = this.datePicker.value;
-				var value = "";
-			switch(this.saveFormat.toLowerCase()){
-				case "rfc": case "iso": case "":
-					value = dojo.date.toRfc3339(date, 'dateOnly');
-					break;
-				case "posix": case "unix":
-					value = Number(date);
-					break;
-				default:
-					if(date){
-						value = dojo.date.format(date, {datePattern:this.saveFormat, selector:'dateOnly', locale:this.lang});
-					}
-			}
-			this.valueNode.value = value;
-		},
-		
-		destroy: function(/*Boolean*/finalize){
-			this.datePicker.destroy(finalize);
-			dojo.widget.DropdownDatePicker.superclass.destroy.apply(this, arguments);
+dojo.widget.defineWidget("dojo.widget.DropdownDatePicker", dojo.widget.DropdownContainer, {iconURL:dojo.uri.moduleUri("dojo.widget", "templates/images/dateIcon.gif"), formatLength:"short", displayFormat:"", saveFormat:"", value:"", name:"", displayWeeks:6, adjustWeeks:false, startDate:"1492-10-12", endDate:"2941-10-12", weekStartsOn:"", staticDisplay:false, postMixInProperties:function (localProperties, frag) {
+	dojo.widget.DropdownDatePicker.superclass.postMixInProperties.apply(this, arguments);
+	var messages = dojo.i18n.getLocalization("dojo.widget", "DropdownDatePicker", this.lang);
+	this.iconAlt = messages.selectDate;
+	if (typeof (this.value) == "string" && this.value.toLowerCase() == "today") {
+		this.value = new Date();
+	}
+	if (this.value && isNaN(this.value)) {
+		var orig = this.value;
+		this.value = dojo.date.fromRfc3339(this.value);
+		if (!this.value) {
+			this.value = new Date(orig);
+			dojo.deprecated("dojo.widget.DropdownDatePicker", "date attributes must be passed in Rfc3339 format", "0.5");
 		}
 	}
-);
+	if (this.value && !isNaN(this.value)) {
+		this.value = new Date(this.value);
+	}
+}, fillInTemplate:function (args, frag) {
+	dojo.widget.DropdownDatePicker.superclass.fillInTemplate.call(this, args, frag);
+	var dpArgs = {widgetContainerId:this.widgetId, lang:this.lang, value:this.value, startDate:this.startDate, endDate:this.endDate, displayWeeks:this.displayWeeks, weekStartsOn:this.weekStartsOn, adjustWeeks:this.adjustWeeks, staticDisplay:this.staticDisplay};
+	this.datePicker = dojo.widget.createWidget("DatePicker", dpArgs, this.containerNode, "child");
+	dojo.event.connect(this.datePicker, "onValueChanged", this, "_updateText");
+	dojo.event.connect(this.inputNode, "onChange", this, "_updateText");
+	if (this.value) {
+		this._updateText();
+	}
+	this.containerNode.explodeClassName = "calendarBodyContainer";
+	this.valueNode.name = this.name;
+}, getValue:function () {
+	return this.valueNode.value;
+}, getDate:function () {
+	return this.datePicker.value;
+}, setValue:function (rfcDate) {
+	this.setDate(rfcDate);
+}, setDate:function (dateObj) {
+	this.datePicker.setDate(dateObj);
+	this._syncValueNode();
+}, _updateText:function () {
+	this.inputNode.value = this.datePicker.value ? dojo.date.format(this.datePicker.value, {formatLength:this.formatLength, datePattern:this.displayFormat, selector:"dateOnly", locale:this.lang}) : "";
+	if (this.value < this.datePicker.startDate || this.value > this.datePicker.endDate) {
+		this.inputNode.value = "";
+	}
+	this._syncValueNode();
+	this.onValueChanged(this.getDate());
+	this.hideContainer();
+}, onValueChanged:function (dateObj) {
+}, onInputChange:function () {
+	var input = dojo.string.trim(this.inputNode.value);
+	if (input) {
+		var inputDate = dojo.date.parse(input, {formatLength:this.formatLength, datePattern:this.displayFormat, selector:"dateOnly", locale:this.lang});
+		if (!this.datePicker._isDisabledDate(inputDate)) {
+			this.setDate(inputDate);
+		}
+	} else {
+		if (input == "") {
+			this.datePicker.setDate("");
+		}
+		this.valueNode.value = input;
+	}
+	if (input) {
+		this._updateText();
+	}
+}, _syncValueNode:function () {
+	var date = this.datePicker.value;
+	var value = "";
+	switch (this.saveFormat.toLowerCase()) {
+	  case "rfc":
+	  case "iso":
+	  case "":
+		value = dojo.date.toRfc3339(date, "dateOnly");
+		break;
+	  case "posix":
+	  case "unix":
+		value = Number(date);
+		break;
+	  default:
+		if (date) {
+			value = dojo.date.format(date, {datePattern:this.saveFormat, selector:"dateOnly", locale:this.lang});
+		}
+	}
+	this.valueNode.value = value;
+}, destroy:function (finalize) {
+	this.datePicker.destroy(finalize);
+	dojo.widget.DropdownDatePicker.superclass.destroy.apply(this, arguments);
+}});
 
+
 __CPAN_FILE__ src/widget/Button.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -21742,427 +14653,253 @@
 */
 
 dojo.provide("dojo.widget.Button");
-
 dojo.require("dojo.lang.extras");
 dojo.require("dojo.html.*");
 dojo.require("dojo.html.selection");
 dojo.require("dojo.widget.*");
-
-/*
- * usage
- *	<button dojoType="button" onClick="...">Hello world</button>
- *
- *  var button1 = dojo.widget.createWidget("Button", {caption: "hello world", onClick: foo});
- *	document.body.appendChild(button1.domNode);
- */
-dojo.widget.defineWidget(
-	"dojo.widget.Button",
-	dojo.widget.HtmlWidget,
-	{
-		// summary
-		//	Basically the same thing as a normal HTML button, but with special styling.
-
-		isContainer: true,
-
-		// caption: String
-		//	text to display in button
-		caption: "",
-		
-		templatePath: dojo.uri.dojoUri("src/widget/templates/ButtonTemplate.html"),
-		templateCssPath: dojo.uri.dojoUri("src/widget/templates/ButtonTemplate.css"),
-		
-		// inactiveImg: Url
-		//	prefix of filename holding images (left, center, right) for button in normal state
-		inactiveImg: "src/widget/templates/images/soriaButton-",
-		
-		// activeImg: Url
-		//	prefix of filename holding images (left, center, right) for button when it's being hovered over
-		activeImg: "src/widget/templates/images/soriaActive-",
-
-		// pressedImg: Url
-		//	prefix of filename holding images (left, center, right) for button between mouse-down and mouse-up
-		pressedImg: "src/widget/templates/images/soriaPressed-",
-
-		// disabledImg: Url
-		//	prefix of filename holding images (left, center, right) for button when it's disabled (aka, grayed-out)
-		disabledImg: "src/widget/templates/images/soriaDisabled-",
-		
-		// widget2height: Number
-		//	shape of the button's end pieces;
-		//	the height of the end pieces is a function of the button's height (which in turn is a function of the button's content),
-		//	and then the width of the end pieces is relative to their height.
-		width2height: 1.0/3.0,
-
-		fillInTemplate: function(){
-			if(this.caption){
-				this.containerNode.appendChild(document.createTextNode(this.caption));
-			}
-			dojo.html.disableSelection(this.containerNode);
-		},
-
-		postCreate: function(){
-			this._sizeMyself();
-		},
-	
-		_sizeMyself: function(){
-			// we cannot size correctly if any of our ancestors are hidden (display:none),
-			// so temporarily attach to document.body
-			if(this.domNode.parentNode){
-				var placeHolder = document.createElement("span");
-				dojo.html.insertBefore(placeHolder, this.domNode);
-			}
-			dojo.body().appendChild(this.domNode);
-			
-			this._sizeMyselfHelper();
-			
-			// Put this.domNode back where it was originally
-			if(placeHolder){
-				dojo.html.insertBefore(this.domNode, placeHolder);
-				dojo.html.removeNode(placeHolder);
-			}
-		},
-
-		_sizeMyselfHelper: function(){
-			var mb = dojo.html.getMarginBox(this.containerNode);
-			this.height = mb.height;
-			this.containerWidth = mb.width;
-			var endWidth= this.height * this.width2height;
-	
-			this.containerNode.style.left=endWidth+"px";
-	
-			this.leftImage.height = this.rightImage.height = this.centerImage.height = this.height;
-			this.leftImage.width = this.rightImage.width = endWidth+1;
-			this.centerImage.width = this.containerWidth;
-			this.centerImage.style.left=endWidth+"px";
-			this._setImage(this.disabled ? this.disabledImg : this.inactiveImg);
-
-			if ( this.disabled ) {
-				dojo.html.prependClass(this.domNode, "dojoButtonDisabled");
-				this.domNode.removeAttribute("tabIndex");
-				dojo.widget.wai.setAttr(this.domNode, "waiState", "disabled", true);
-			} else {
-				dojo.html.removeClass(this.domNode, "dojoButtonDisabled");
-				this.domNode.setAttribute("tabIndex", "0");
-				dojo.widget.wai.setAttr(this.domNode, "waiState", "disabled", false);
-			}
-				
-			this.domNode.style.height=this.height + "px";
-			this.domNode.style.width= (this.containerWidth+2*endWidth) + "px";
-		},
-	
-		onMouseOver: function(/*Event*/ e){
-			// summary: callback when user mouses-over the button
-			if( this.disabled ){ return; }
-			dojo.html.prependClass(this.buttonNode, "dojoButtonHover");
-			this._setImage(this.activeImg);
-		},
-	
-		onMouseDown: function(/*Event*/ e){
-			// summary: callback when user starts to click the button
-			if( this.disabled ){ return; }
-			dojo.html.prependClass(this.buttonNode, "dojoButtonDepressed");
-			dojo.html.removeClass(this.buttonNode, "dojoButtonHover");
-			this._setImage(this.pressedImg);
-		},
-
-		onMouseUp: function(/*Event*/ e){
-			// summary: callback when the user finishes clicking
-			if( this.disabled ){ return; }
-			dojo.html.prependClass(this.buttonNode, "dojoButtonHover");
-			dojo.html.removeClass(this.buttonNode, "dojoButtonDepressed");
-			this._setImage(this.activeImg);
-		},
-	
-		onMouseOut: function(/*Event*/ e){
-			// summary: callback when the user moves the mouse off the button
-			if( this.disabled ){ return; }
-			if( e.toElement && dojo.html.isDescendantOf(e.toElement, this.buttonNode) ){
-				return; // Ignore IE mouseOut events that dont actually leave button - Prevents hover image flicker in IE
-			}
-			dojo.html.removeClass(this.buttonNode, "dojoButtonHover");
-			dojo.html.removeClass(this.buttonNode, "dojoButtonDepressed");
-			this._setImage(this.inactiveImg);
-		},
-
-		onKey: function(/*Event*/ e){
-			// summary: callback when the user presses a key (on key-down)
-			if (!e.key) { return; }
-			var menu = dojo.widget.getWidgetById(this.menuId);
-			if (e.key == e.KEY_ENTER || e.key == " "){
-				this.onMouseDown(e);
-				this.buttonClick(e);
-				dojo.lang.setTimeout(this, "onMouseUp", 75, e);
-				dojo.event.browser.stopEvent(e);
-			}
-			if(menu && menu.isShowingNow && e.key == e.KEY_DOWN_ARROW){
-				// disconnect onBlur when focus moves into menu
-				dojo.event.disconnect(this.domNode, "onblur", this, "onBlur");
-				// allow event to propagate to menu
-			}
-		},
-
-		onFocus: function(/*Event*/ e){
-			// summary: callback on focus to the button
-			var menu = dojo.widget.getWidgetById(this.menuId);
-			if (menu){
-				dojo.event.connectOnce(this.domNode, "onblur", this, "onBlur");
-			}
-		},
-
-		onBlur: function(/*Event*/ e){
-			// summary: callback when button loses focus
-			var menu = dojo.widget.getWidgetById(this.menuId);
-			if ( !menu ) { return; }
-	
-			if ( menu.close && menu.isShowingNow ){
-				menu.close();
-			}
-		},
-
-		buttonClick: function(/*Event*/ e){
-			// summary: internal function for handling button clicks
-			if(!this.disabled){ 
-				// focus may fail when tabIndex is not supported on div's
-				// by the browser, or when the node is disabled
-				try { this.domNode.focus(); } catch(e2) {};
-				this.onClick(e); 
-			}
-		},
-
-		onClick: function(/*Event*/ e) {
-			// summary: callback for when button is clicked; user can override this function
-		},
-
-		_setImage: function(/*String*/ prefix){
-			this.leftImage.src=dojo.uri.dojoUri(prefix + "l.gif");
-			this.centerImage.src=dojo.uri.dojoUri(prefix + "c.gif");
-			this.rightImage.src=dojo.uri.dojoUri(prefix + "r.gif");
-		},
-		
-		_toggleMenu: function(/*String*/ menuId){
-			var menu = dojo.widget.getWidgetById(menuId); 
-			if ( !menu ) { return; }
-			if ( menu.open && !menu.isShowingNow) {
-				var pos = dojo.html.getAbsolutePosition(this.domNode, false);
-				menu.open(pos.x, pos.y+this.height, this);
-			} else if ( menu.close && menu.isShowingNow ){
-				menu.close();
-			} else {
-				menu.toggle();
-			}
-		},
-		
-		setCaption: function(/*String*/ content){
-			// summary: reset the caption (text) of the button; takes an HTML string
-			this.caption=content;
-			this.containerNode.innerHTML=content;
-			this._sizeMyself();
-		},
-		
-		setDisabled: function(/*Boolean*/ disabled){
-			// summary: set disabled state of button
-			this.disabled=disabled;
-			this._sizeMyself();
+dojo.widget.defineWidget("dojo.widget.Button", dojo.widget.HtmlWidget, {isContainer:true, caption:"", templateString:"<div dojoAttachPoint=\"buttonNode\" class=\"dojoButton\" style=\"position:relative;\" dojoAttachEvent=\"onMouseOver; onMouseOut; onMouseDown; onMouseUp; onClick:buttonClick; onKey:onKey; onFocus;\">\n  <div class=\"dojoButtonContents\" align=center dojoAttachPoint=\"containerNode\" style=\"position:absolute;z-index:2;\"></div>\n  <img dojoAttachPoint=\"leftImage\" style=\"position:absolute;left:0px;\">\n  <img dojoAttachPoint=\"centerImage\" style=\"position:absolute;z-index:1;\">\n  <img dojoAttachPoint=\"rightImage\" style=\"position:absolute;top:0px;right:0px;\">\n</div>\n", templateCssString:"/* ---- button --- */\n.dojoButton {\n\tpadding: 0 0 0 0;\n\tfont-size: 8pt;\n\twhite-space: nowrap;\n\tcursor: pointer;\n\tfont-family: Myriad, Tahoma, Verdana, sans-serif;\n}\n\n.dojoButton .dojoButtonContents {\n\tpadding: 2px 2px 2px 2px;\n\ttext-align: center;\t\t/* if icon and label are split across two lines, center icon */\n\tcolor: white;\n}\n\n.dojoButtonLeftPart .dojoButtonContents {\n\tpadding-right: 8px;\n}\n\n.dojoButtonDisabled {\n\tcursor: url(\"images/no.gif\"), default;\n}\n\n\n.dojoButtonContents img {\n\tvertical-align: middle;\t/* if icon and label are on same line, center them */\n}\n\n/* -------- colors ------------ */\n\n.dojoButtonHover .dojoButtonContents {\n}\n\n.dojoButtonDepressed .dojoButtonContents {\n\tcolor: #293a4b;\n}\n\n.dojoButtonDisabled .dojoButtonContents {\n\tcolor: #aaa;\n}\n\n\n/* ---------- drop down button specific ---------- */\n\n/* border between label and arrow (for drop down buttons */\n.dojoButton .border {\n\twidth: 1px;\n\tbackground: gray;\n}\n\n/* button arrow */\n.dojoButton .downArrow {\n\tpadding-left: 10px;\n\ttext-align: center;\n}\n\n.dojoButton.disabled .downArrow {\n\tcursor : default;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/ButtonTemplate.css"), inactiveImg:"templates/images/soriaButton-", activeImg:"templates/images/soriaActive-", pressedImg:"templates/images/soriaPressed-", disabledImg:"templates/images/soriaDisabled-", width2height:1 / 3, fillInTemplate:function () {
+	if (this.caption) {
+		this.containerNode.appendChild(document.createTextNode(this.caption));
+	}
+	dojo.html.disableSelection(this.containerNode);
+}, postCreate:function () {
+	this._sizeMyself();
+}, _sizeMyself:function () {
+	if (this.domNode.parentNode) {
+		var placeHolder = document.createElement("span");
+		dojo.html.insertBefore(placeHolder, this.domNode);
+	}
+	dojo.body().appendChild(this.domNode);
+	this._sizeMyselfHelper();
+	if (placeHolder) {
+		dojo.html.insertBefore(this.domNode, placeHolder);
+		dojo.html.removeNode(placeHolder);
+	}
+}, _sizeMyselfHelper:function () {
+	var mb = dojo.html.getMarginBox(this.containerNode);
+	this.height = mb.height;
+	this.containerWidth = mb.width;
+	var endWidth = this.height * this.width2height;
+	this.containerNode.style.left = endWidth + "px";
+	this.leftImage.height = this.rightImage.height = this.centerImage.height = this.height;
+	this.leftImage.width = this.rightImage.width = endWidth + 1;
+	this.centerImage.width = this.containerWidth;
+	this.centerImage.style.left = endWidth + "px";
+	this._setImage(this.disabled ? this.disabledImg : this.inactiveImg);
+	if (this.disabled) {
+		dojo.html.prependClass(this.domNode, "dojoButtonDisabled");
+		this.domNode.removeAttribute("tabIndex");
+		dojo.widget.wai.setAttr(this.domNode, "waiState", "disabled", true);
+	} else {
+		dojo.html.removeClass(this.domNode, "dojoButtonDisabled");
+		this.domNode.setAttribute("tabIndex", "0");
+		dojo.widget.wai.setAttr(this.domNode, "waiState", "disabled", false);
+	}
+	this.domNode.style.height = this.height + "px";
+	this.domNode.style.width = (this.containerWidth + 2 * endWidth) + "px";
+}, onMouseOver:function (e) {
+	if (this.disabled) {
+		return;
+	}
+	if (!dojo.html.hasClass(this.buttonNode, "dojoButtonHover")) {
+		dojo.html.prependClass(this.buttonNode, "dojoButtonHover");
+	}
+	this._setImage(this.activeImg);
+}, onMouseDown:function (e) {
+	if (this.disabled) {
+		return;
+	}
+	dojo.html.prependClass(this.buttonNode, "dojoButtonDepressed");
+	dojo.html.removeClass(this.buttonNode, "dojoButtonHover");
+	this._setImage(this.pressedImg);
+}, onMouseUp:function (e) {
+	if (this.disabled) {
+		return;
+	}
+	dojo.html.prependClass(this.buttonNode, "dojoButtonHover");
+	dojo.html.removeClass(this.buttonNode, "dojoButtonDepressed");
+	this._setImage(this.activeImg);
+}, onMouseOut:function (e) {
+	if (this.disabled) {
+		return;
+	}
+	if (e.toElement && dojo.html.isDescendantOf(e.toElement, this.buttonNode)) {
+		return;
+	}
+	dojo.html.removeClass(this.buttonNode, "dojoButtonHover");
+	dojo.html.removeClass(this.buttonNode, "dojoButtonDepressed");
+	this._setImage(this.inactiveImg);
+}, onKey:function (e) {
+	if (!e.key) {
+		return;
+	}
+	var menu = dojo.widget.getWidgetById(this.menuId);
+	if (e.key == e.KEY_ENTER || e.key == " ") {
+		this.onMouseDown(e);
+		this.buttonClick(e);
+		dojo.lang.setTimeout(this, "onMouseUp", 75, e);
+		dojo.event.browser.stopEvent(e);
+	}
+	if (menu && menu.isShowingNow && e.key == e.KEY_DOWN_ARROW) {
+		dojo.event.disconnect(this.domNode, "onblur", this, "onBlur");
+	}
+}, onFocus:function (e) {
+	var menu = dojo.widget.getWidgetById(this.menuId);
+	if (menu) {
+		dojo.event.connectOnce(this.domNode, "onblur", this, "onBlur");
+	}
+}, onBlur:function (e) {
+	var menu = dojo.widget.getWidgetById(this.menuId);
+	if (!menu) {
+		return;
+	}
+	if (menu.close && menu.isShowingNow) {
+		menu.close();
+	}
+}, buttonClick:function (e) {
+	if (!this.disabled) {
+		try {
+			this.domNode.focus();
 		}
-	});
-
-/*
- * usage
- *	<button dojoType="DropDownButton" menuId="mymenu">Hello world</button>
- *
- *  var button1 = dojo.widget.createWidget("DropDownButton", {caption: "hello world", menuId: foo});
- *	document.body.appendChild(button1.domNode);
- */
-dojo.widget.defineWidget(
-	"dojo.widget.DropDownButton",
-	dojo.widget.Button,
-	{
-		// summary
-		//		push the button and a menu shows up
-		// menuId: String
-		//	widget id of the menu that this button should activate
-		menuId: "",
-
-		// downArrow: Url
-		//	path of arrow image to display to the right of the button text
-		downArrow: "src/widget/templates/images/whiteDownArrow.gif",
-
-		// disabledDownArray: Url
-		//	path of arrow image to display to the right of the button text, when the button is disabled
-		disabledDownArrow: "src/widget/templates/images/whiteDownArrow.gif",
-	
-		fillInTemplate: function(){
-			dojo.widget.DropDownButton.superclass.fillInTemplate.apply(this, arguments);
-	
-			this.arrow = document.createElement("img");
-			dojo.html.setClass(this.arrow, "downArrow");
-
-			dojo.widget.wai.setAttr(this.domNode, "waiState", "haspopup", this.menuId);
-		},
-
-		_sizeMyselfHelper: function(){
-			// draw the arrow (todo: why is the arror in containerNode rather than outside it?)
-			this.arrow.src = dojo.uri.dojoUri(this.disabled ? this.disabledDownArrow : this.downArrow);
-			this.containerNode.appendChild(this.arrow);
-
-			dojo.widget.DropDownButton.superclass._sizeMyselfHelper.call(this);
-		},
-
-		onClick: function(/*Event*/ e){
-			// summary: callback when button is clicked; user shouldn't override this function or else the menu won't toggle
-			this._toggleMenu(this.menuId);
+		catch (e2) {
 		}
-	});
-
-/*
- * usage
- *	<button dojoType="ComboButton" onClick="..." menuId="mymenu">Hello world</button>
- *
- *  var button1 = dojo.widget.createWidget("DropDownButton", {caption: "hello world", onClick: foo, menuId: "myMenu"});
- *	document.body.appendChild(button1.domNode);
- */
-dojo.widget.defineWidget(
-	"dojo.widget.ComboButton",
-	dojo.widget.Button,
-	{
-		// summary
-		//		left side is normal button, right side displays menu
-		// menuId: String
-		//	widget id of the menu that this button should activate
-		menuId: "",
-	
-		templatePath: dojo.uri.dojoUri("src/widget/templates/ComboButtonTemplate.html"),
-	
-		// splitWidth: Integer
-		//	# of pixels between left & right part of button
-		splitWidth: 2,
-		
-		// arrowWidth: Integer
-		//	width of segment holding down arrow
-		arrowWidth: 5,
-	
-		_sizeMyselfHelper: function(/*Event*/ e){
-			var mb = dojo.html.getMarginBox(this.containerNode);
-			this.height = mb.height;
-			this.containerWidth = mb.width;
-
-			var endWidth= this.height/3;
-
-			if(this.disabled){
-				dojo.widget.wai.setAttr(this.domNode, "waiState", "disabled", true);
-				this.domNode.removeAttribute("tabIndex");
-			}
-			else {
-				dojo.widget.wai.setAttr(this.domNode, "waiState", "disabled", false);
-				this.domNode.setAttribute("tabIndex", "0");
-			}
-	
-			// left part
-			this.leftImage.height = this.rightImage.height = this.centerImage.height = 
-				this.arrowBackgroundImage.height = this.height;
-			this.leftImage.width = endWidth+1;
-			this.centerImage.width = this.containerWidth;
-			this.buttonNode.style.height = this.height + "px";
-			this.buttonNode.style.width = endWidth + this.containerWidth + "px";
-			this._setImage(this.disabled ? this.disabledImg : this.inactiveImg);
-
-			// right part
-			this.arrowBackgroundImage.width=this.arrowWidth;
-			this.rightImage.width = endWidth+1;
-			this.rightPart.style.height = this.height + "px";
-			this.rightPart.style.width = this.arrowWidth + endWidth + "px";
-			this._setImageR(this.disabled ? this.disabledImg : this.inactiveImg);
-	
-			// outer container
-			this.domNode.style.height=this.height + "px";
-			var totalWidth = this.containerWidth+this.splitWidth+this.arrowWidth+2*endWidth;
-			this.domNode.style.width= totalWidth + "px";
-		},
-	
-		_setImage: function(prefix){
-			this.leftImage.src=dojo.uri.dojoUri(prefix + "l.gif");
-			this.centerImage.src=dojo.uri.dojoUri(prefix + "c.gif");
-		},
-	
-		/*** functions on right part of button ***/
-		rightOver: function(/*Event*/ e){
-			// summary:
-			//	callback when mouse-over right part of button;
-			//	onMouseOver() is the callback for the left side of the button.
-			if( this.disabled ){ return; }
-			dojo.html.prependClass(this.rightPart, "dojoButtonHover");
-			this._setImageR(this.activeImg);
-		},
-	
-		rightDown: function(/*Event*/ e){
-			// summary:
-			//	callback when mouse-down right part of button;
-			//	onMouseDown() is the callback for the left side of the button.
-			if( this.disabled ){ return; }
-			dojo.html.prependClass(this.rightPart, "dojoButtonDepressed");
-			dojo.html.removeClass(this.rightPart, "dojoButtonHover");
-			this._setImageR(this.pressedImg);
-		},
-
-		rightUp: function(/*Event*/ e){
-			// summary:
-			//	callback when mouse-up right part of button;
-			//	onMouseUp() is the callback for the left side of the button.
-			if( this.disabled ){ return; }
-			dojo.html.prependClass(this.rightPart, "dojoButtonHover");
-			dojo.html.removeClass(this.rightPart, "dojoButtonDepressed");
-			this._setImageR(this.activeImg);
-		},
-	
-		rightOut: function(/*Event*/ e){
-			// summary:
-			//	callback when moving the mouse off of the right part of button;
-			//	onMouseOut() is the callback for the left side of the button.
-			if( this.disabled ){ return; }
-			dojo.html.removeClass(this.rightPart, "dojoButtonHover");
-			dojo.html.removeClass(this.rightPart, "dojoButtonDepressed");
-			this._setImageR(this.inactiveImg);
-		},
-
-		rightClick: function(/*Event*/ e){
-			// summary:
-			//	callback when clicking the right part of button;
-			//	onClick() is the callback for the left side of the button.
-			if( this.disabled ){ return; }
-			// focus may fail when tabIndex is not supported on div's
-			// by the browser, or when the node is disabled
-			try { this.domNode.focus(); } catch(e2) {};
-			this._toggleMenu(this.menuId);
-		},
-	
-		_setImageR: function(prefix){
-			this.arrowBackgroundImage.src=dojo.uri.dojoUri(prefix + "c.gif");
-			this.rightImage.src=dojo.uri.dojoUri(prefix + "r.gif");
-		},
-
-		/*** keyboard functions ***/
-		
-		onKey: function(/*Event*/ e){
-			if (!e.key) { return; }
-			var menu = dojo.widget.getWidgetById(this.menuId);
-			if(e.key== e.KEY_ENTER || e.key == " "){
-				this.onMouseDown(e);
-				this.buttonClick(e);
-				dojo.lang.setTimeout(this, "onMouseUp", 75, e);
-				dojo.event.browser.stopEvent(e);
-			} else if (e.key == e.KEY_DOWN_ARROW && e.altKey){
-				this.rightDown(e);
-				this.rightClick(e);
-				dojo.lang.setTimeout(this, "rightUp", 75, e);
-				dojo.event.browser.stopEvent(e);
-			} else if(menu && menu.isShowingNow && e.key == e.KEY_DOWN_ARROW){
-				// disconnect onBlur when focus moves into menu
+		this.onClick(e);
+	}
+}, onClick:function (e) {
+}, _setImage:function (prefix) {
+	this.leftImage.src = dojo.uri.moduleUri("dojo.widget", prefix + "l.gif");
+	this.centerImage.src = dojo.uri.moduleUri("dojo.widget", prefix + "c.gif");
+	this.rightImage.src = dojo.uri.moduleUri("dojo.widget", prefix + "r.gif");
+}, _toggleMenu:function (menuId) {
+	var menu = dojo.widget.getWidgetById(menuId);
+	if (!menu) {
+		return;
+	}
+	if (menu.open && !menu.isShowingNow) {
+		var pos = dojo.html.getAbsolutePosition(this.domNode, false);
+		menu.open(pos.x, pos.y + this.height, this);
+		dojo.event.disconnect(this.domNode, "onblur", this, "onBlur");
+	} else {
+		if (menu.close && menu.isShowingNow) {
+			menu.close();
+		} else {
+			menu.toggle();
+		}
+	}
+}, setCaption:function (content) {
+	this.caption = content;
+	this.containerNode.innerHTML = content;
+	this._sizeMyself();
+}, setDisabled:function (disabled) {
+	this.disabled = disabled;
+	this._sizeMyself();
+}});
+dojo.widget.defineWidget("dojo.widget.DropDownButton", dojo.widget.Button, {menuId:"", downArrow:"templates/images/whiteDownArrow.gif", disabledDownArrow:"templates/images/whiteDownArrow.gif", fillInTemplate:function () {
+	dojo.widget.DropDownButton.superclass.fillInTemplate.apply(this, arguments);
+	this.arrow = document.createElement("img");
+	dojo.html.setClass(this.arrow, "downArrow");
+	dojo.widget.wai.setAttr(this.domNode, "waiState", "haspopup", this.menuId);
+}, _sizeMyselfHelper:function () {
+	this.arrow.src = dojo.uri.moduleUri("dojo.widget", this.disabled ? this.disabledDownArrow : this.downArrow);
+	this.containerNode.appendChild(this.arrow);
+	dojo.widget.DropDownButton.superclass._sizeMyselfHelper.call(this);
+}, onClick:function (e) {
+	this._toggleMenu(this.menuId);
+}});
+dojo.widget.defineWidget("dojo.widget.ComboButton", dojo.widget.Button, {menuId:"", templateString:"<div class=\"dojoButton\" style=\"position:relative;top:0px;left:0px; text-align:none;\" dojoAttachEvent=\"onKey;onFocus\">\n\n\t<div dojoAttachPoint=\"buttonNode\" class=\"dojoButtonLeftPart\" style=\"position:absolute;left:0px;top:0px;\"\n\t\tdojoAttachEvent=\"onMouseOver; onMouseOut; onMouseDown; onMouseUp; onClick:buttonClick;\">\n\t\t<div class=\"dojoButtonContents\" dojoAttachPoint=\"containerNode\" style=\"position:absolute;top:0px;right:0px;z-index:2;\"></div>\n\t\t<img dojoAttachPoint=\"leftImage\" style=\"position:absolute;left:0px;top:0px;\">\n\t\t<img dojoAttachPoint=\"centerImage\" style=\"position:absolute;right:0px;top:0px;z-index:1;\">\n\t</div>\n\n\t<div dojoAttachPoint=\"rightPart\" class=\"dojoButtonRightPart\" style=\"position:absolute;top:0px;right:0px;\"\n\t\tdojoAttachEvent=\"onMouseOver:rightOver; onMouseOut:rightOut; onMouseDown:rightDown; onMouseUp:rightUp; onClick:rightClick;\">\n\t\t<img dojoAttachPoint=\"arrowBackgroundImage\" style=\"position:absolute;top:0px;left:0px;z-index:1;\">\n\t\t<img src=\"${dojoWidgetModuleUri}templates/images/whiteDownArrow.gif\"\n\t\t  \t\tstyle=\"z-index:2;position:absolute;left:3px;top:50%;\">\n\t\t<img dojoAttachPoint=\"rightImage\" style=\"position:absolute;top:0px;right:0px;\">\n\t</div>\n\n</div>\n", splitWidth:2, arrowWidth:5, _sizeMyselfHelper:function (e) {
+	var mb = dojo.html.getMarginBox(this.containerNode);
+	this.height = mb.height;
+	this.containerWidth = mb.width;
+	var endWidth = this.height / 3;
+	if (this.disabled) {
+		dojo.widget.wai.setAttr(this.domNode, "waiState", "disabled", true);
+		this.domNode.removeAttribute("tabIndex");
+	} else {
+		dojo.widget.wai.setAttr(this.domNode, "waiState", "disabled", false);
+		this.domNode.setAttribute("tabIndex", "0");
+	}
+	this.leftImage.height = this.rightImage.height = this.centerImage.height = this.arrowBackgroundImage.height = this.height;
+	this.leftImage.width = endWidth + 1;
+	this.centerImage.width = this.containerWidth;
+	this.buttonNode.style.height = this.height + "px";
+	this.buttonNode.style.width = endWidth + this.containerWidth + "px";
+	this._setImage(this.disabled ? this.disabledImg : this.inactiveImg);
+	this.arrowBackgroundImage.width = this.arrowWidth;
+	this.rightImage.width = endWidth + 1;
+	this.rightPart.style.height = this.height + "px";
+	this.rightPart.style.width = this.arrowWidth + endWidth + "px";
+	this._setImageR(this.disabled ? this.disabledImg : this.inactiveImg);
+	this.domNode.style.height = this.height + "px";
+	var totalWidth = this.containerWidth + this.splitWidth + this.arrowWidth + 2 * endWidth;
+	this.domNode.style.width = totalWidth + "px";
+}, _setImage:function (prefix) {
+	this.leftImage.src = dojo.uri.moduleUri("dojo.widget", prefix + "l.gif");
+	this.centerImage.src = dojo.uri.moduleUri("dojo.widget", prefix + "c.gif");
+}, rightOver:function (e) {
+	if (this.disabled) {
+		return;
+	}
+	dojo.html.prependClass(this.rightPart, "dojoButtonHover");
+	this._setImageR(this.activeImg);
+}, rightDown:function (e) {
+	if (this.disabled) {
+		return;
+	}
+	dojo.html.prependClass(this.rightPart, "dojoButtonDepressed");
+	dojo.html.removeClass(this.rightPart, "dojoButtonHover");
+	this._setImageR(this.pressedImg);
+}, rightUp:function (e) {
+	if (this.disabled) {
+		return;
+	}
+	dojo.html.prependClass(this.rightPart, "dojoButtonHover");
+	dojo.html.removeClass(this.rightPart, "dojoButtonDepressed");
+	this._setImageR(this.activeImg);
+}, rightOut:function (e) {
+	if (this.disabled) {
+		return;
+	}
+	dojo.html.removeClass(this.rightPart, "dojoButtonHover");
+	dojo.html.removeClass(this.rightPart, "dojoButtonDepressed");
+	this._setImageR(this.inactiveImg);
+}, rightClick:function (e) {
+	if (this.disabled) {
+		return;
+	}
+	try {
+		this.domNode.focus();
+	}
+	catch (e2) {
+	}
+	this._toggleMenu(this.menuId);
+}, _setImageR:function (prefix) {
+	this.arrowBackgroundImage.src = dojo.uri.moduleUri("dojo.widget", prefix + "c.gif");
+	this.rightImage.src = dojo.uri.moduleUri("dojo.widget", prefix + "r.gif");
+}, onKey:function (e) {
+	if (!e.key) {
+		return;
+	}
+	var menu = dojo.widget.getWidgetById(this.menuId);
+	if (e.key == e.KEY_ENTER || e.key == " ") {
+		this.onMouseDown(e);
+		this.buttonClick(e);
+		dojo.lang.setTimeout(this, "onMouseUp", 75, e);
+		dojo.event.browser.stopEvent(e);
+	} else {
+		if (e.key == e.KEY_DOWN_ARROW && e.altKey) {
+			this.rightDown(e);
+			this.rightClick(e);
+			dojo.lang.setTimeout(this, "rightUp", 75, e);
+			dojo.event.browser.stopEvent(e);
+		} else {
+			if (menu && menu.isShowingNow && e.key == e.KEY_DOWN_ARROW) {
 				dojo.event.disconnect(this.domNode, "onblur", this, "onBlur");
-				// allow event to propagate to menu
 			}
 		}
-	});
+	}
+}});
 
+
 __CPAN_FILE__ src/widget/TreeLoadingControllerV3.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -22174,492 +14911,244 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeLoadingControllerV3");
-
 dojo.require("dojo.widget.TreeBasicControllerV3");
 dojo.require("dojo.event.*");
-dojo.require("dojo.json")
+dojo.require("dojo.json");
 dojo.require("dojo.io.*");
 dojo.require("dojo.Deferred");
 dojo.require("dojo.DeferredList");
-
-dojo.declare(
-	"dojo.Error",
-	Error,
-	function(message, extra) {
-		this.message = message;
-		this.extra = extra;
-		this.stack = (new Error()).stack;	
+dojo.declare("dojo.Error", Error, function (message, extra) {
+	this.message = message;
+	this.extra = extra;
+	this.stack = (new Error()).stack;
+});
+dojo.declare("dojo.CommunicationError", dojo.Error, function () {
+	this.name = "CommunicationError";
+});
+dojo.declare("dojo.LockedError", dojo.Error, function () {
+	this.name = "LockedError";
+});
+dojo.declare("dojo.FormatError", dojo.Error, function () {
+	this.name = "FormatError";
+});
+dojo.declare("dojo.RpcError", dojo.Error, function () {
+	this.name = "RpcError";
+});
+dojo.widget.defineWidget("dojo.widget.TreeLoadingControllerV3", dojo.widget.TreeBasicControllerV3, {RpcUrl:"", RpcActionParam:"action", preventCache:true, checkValidRpcResponse:function (type, obj) {
+	if (type != "load") {
+		var extra = {};
+		for (var i = 1; i < arguments.length; i++) {
+			dojo.lang.mixin(extra, arguments[i]);
+		}
+		return new dojo.CommunicationError(obj, extra);
 	}
-);
-
-dojo.declare(
-	"dojo.CommunicationError",
-	dojo.Error,
-	function() {
-		this.name="CommunicationError";
+	if (typeof obj != "object") {
+		return new dojo.FormatError("Wrong server answer format " + (obj && obj.toSource ? obj.toSource() : obj) + " type " + (typeof obj), obj);
 	}
-);
-
-dojo.declare(
-	"dojo.LockedError",
-	dojo.Error,
-	function() {
-		this.name="LockedError";
+	if (!dojo.lang.isUndefined(obj.error)) {
+		return new dojo.RpcError(obj.error, obj);
 	}
-);
-
-dojo.declare(
-	"dojo.FormatError",
-	dojo.Error,
-	function() {
-		this.name="FormatError";
+	return false;
+}, getDeferredBindHandler:function (deferred) {
+	return dojo.lang.hitch(this, function (type, obj) {
+		var error = this.checkValidRpcResponse.apply(this, arguments);
+		if (error) {
+			deferred.errback(error);
+			return;
+		}
+		deferred.callback(obj);
+	});
+}, getRpcUrl:function (action) {
+	if (this.RpcUrl == "local") {
+		var dir = document.location.href.substr(0, document.location.href.lastIndexOf("/"));
+		var localUrl = dir + "/local/" + action;
+		return localUrl;
 	}
-);
-
-dojo.declare(
-	"dojo.RpcError",
-	dojo.Error,
-	function() {
-		this.name="RpcError";
+	if (!this.RpcUrl) {
+		dojo.raise("Empty RpcUrl: can't load");
 	}
-);
-
-dojo.widget.defineWidget(
-	"dojo.widget.TreeLoadingControllerV3",
-	dojo.widget.TreeBasicControllerV3,
-{	
-	RpcUrl: "",
-
-	RpcActionParam: "action", // used for GET for RpcUrl
-
-	preventCache: true,
-
-	checkValidRpcResponse: function(type, obj) {
-		if (type != "load") {
-			var extra = {}				
-			for(var i=1; i<arguments.length;i++) {
-				dojo.lang.mixin(extra, arguments[i]);					
-			}
-			return new dojo.CommunicationError(obj, extra);				
+	var url = this.RpcUrl;
+	if (url.indexOf("/") != 0) {
+		var protocol = document.location.href.replace(/:\/\/.*/, "");
+		var prefix = document.location.href.substring(protocol.length + 3);
+		if (prefix.lastIndexOf("/") != prefix.length - 1) {
+			prefix = prefix.replace(/\/[^\/]+$/, "/");
 		}
-		
-		if (typeof obj != 'object') {
-			return new dojo.FormatError("Wrong server answer format "+(obj && obj.toSource ? obj.toSource() : obj)+" type "+(typeof obj), obj);
+		if (prefix.lastIndexOf("/") != prefix.length - 1) {
+			prefix = prefix + "/";
 		}
-		
-		//dojo.debugShallow(obj);
-			
-		if (!dojo.lang.isUndefined(obj.error)) {
-			return new dojo.RpcError(obj.error, obj);
+		url = protocol + "://" + prefix + url;
+	}
+	return url + (url.indexOf("?") > -1 ? "&" : "?") + this.RpcActionParam + "=" + action;
+}, loadProcessResponse:function (node, result) {
+	if (!dojo.lang.isArray(result)) {
+		throw new dojo.FormatError("loadProcessResponse: Not array loaded: " + result);
+	}
+	node.setChildren(result);
+}, runRpc:function (kw) {
+	var _this = this;
+	var deferred = new dojo.Deferred();
+	dojo.io.bind({url:kw.url, handle:this.getDeferredBindHandler(deferred), mimetype:"text/javascript", preventCache:this.preventCache, sync:kw.sync, content:{data:dojo.json.serialize(kw.params)}});
+	return deferred;
+}, loadRemote:function (node, sync) {
+	var _this = this;
+	var params = {node:this.getInfo(node), tree:this.getInfo(node.tree)};
+	var deferred = this.runRpc({url:this.getRpcUrl("getChildren"), sync:sync, params:params});
+	deferred.addCallback(function (res) {
+		return _this.loadProcessResponse(node, res);
+	});
+	return deferred;
+}, batchExpandTimeout:0, recurseToLevel:function (widget, level, callFunc, callObj, skipFirst, sync) {
+	if (level == 0) {
+		return;
+	}
+	if (!skipFirst) {
+		var deferred = callFunc.call(callObj, widget, sync);
+	} else {
+		var deferred = dojo.Deferred.prototype.makeCalled();
+	}
+	var _this = this;
+	var recurseOnExpand = function () {
+		var children = widget.children;
+		var deferreds = [];
+		for (var i = 0; i < children.length; i++) {
+			deferreds.push(_this.recurseToLevel(children[i], level - 1, callFunc, callObj, sync));
 		}
-		
+		return new dojo.DeferredList(deferreds);
+	};
+	deferred.addCallback(recurseOnExpand);
+	return deferred;
+}, expandToLevel:function (nodeOrTree, level, sync) {
+	return this.recurseToLevel(nodeOrTree, nodeOrTree.isTree ? level + 1 : level, this.expand, this, nodeOrTree.isTree, sync);
+}, loadToLevel:function (nodeOrTree, level, sync) {
+	return this.recurseToLevel(nodeOrTree, nodeOrTree.isTree ? level + 1 : level, this.loadIfNeeded, this, nodeOrTree.isTree, sync);
+}, loadAll:function (nodeOrTree, sync) {
+	return this.loadToLevel(nodeOrTree, Number.POSITIVE_INFINITY, sync);
+}, expand:function (node, sync) {
+	var _this = this;
+	var deferred = this.startProcessing(node);
+	deferred.addCallback(function () {
+		return _this.loadIfNeeded(node, sync);
+	});
+	deferred.addCallback(function (res) {
+		dojo.widget.TreeBasicControllerV3.prototype.expand(node);
+		return res;
+	});
+	deferred.addBoth(function (res) {
+		_this.finishProcessing(node);
+		return res;
+	});
+	return deferred;
+}, loadIfNeeded:function (node, sync) {
+	var deferred;
+	if (node.state == node.loadStates.UNCHECKED && node.isFolder && !node.children.length) {
+		deferred = this.loadRemote(node, sync);
+	} else {
+		deferred = new dojo.Deferred();
+		deferred.callback();
+	}
+	return deferred;
+}, runStages:function (check, prepare, make, finalize, expose, args) {
+	var _this = this;
+	if (check && !check.apply(this, args)) {
 		return false;
-	},
-		
-
-	getDeferredBindHandler: function(/* dojo.rpc.Deferred */ deferred){
-		// summary
-		// create callback that calls the Deferred's callback method		
-		
-		return dojo.lang.hitch(this, 
-			function(type, obj){				
-				//dojo.debug("getDeferredBindHandler "+obj.toSource());
-								
-				var error = this.checkValidRpcResponse.apply(this, arguments);
-				
-				if (error) {
-					deferred.errback(error);
-					return;
-				}
-	
-				deferred.callback(obj);								
-			}
-		);
-		
-	},
-
-	getRpcUrl: function(action) {
-
-		// RpcUrl=local meant SOLELY for DEMO and LOCAL TESTS
-		if (this.RpcUrl == "local") {
-			var dir = document.location.href.substr(0, document.location.href.lastIndexOf('/'));
-			var localUrl = dir+"/local/"+action;
-			//dojo.debug(localUrl);
-			return localUrl;	
-		}
-
-		if (!this.RpcUrl) {
-			dojo.raise("Empty RpcUrl: can't load");
-		}
-		
-		var url = this.RpcUrl;
-		
-		if (url.indexOf("/") != 0) { // not absolute
-			var protocol = document.location.href.replace(/:\/\/.*/,'');
-			var prefix = document.location.href.substring(protocol.length+3);
-			
-			if (prefix.lastIndexOf("/") != prefix.length-1) {
-				prefix = prefix.replace(/\/[^\/]+$/,'/'); // strip file name
-			}
-			if (prefix.lastIndexOf("/") != prefix.length-1) {
-				prefix = prefix+'/'; // add / if not exists it all
-			}
-			//dojo.debug(url);
-			url = protocol + '://' + prefix + url;
-		}
-			
-
-		return url + (url.indexOf("?")>-1 ? "&" : "?") + this.RpcActionParam+"="+action;
-	},
-
-
-	/**
-	 * Add all loaded nodes from array obj as node children and expand it
-	*/
-	loadProcessResponse: function(node, result) {
-		//dojo.debug("Process response "+node);
-				
-		if (!dojo.lang.isArray(result)) {
-			throw new dojo.FormatError('loadProcessResponse: Not array loaded: '+result);
-		}
-
-		node.setChildren(result);
-		
-	},
-
-	/**
-	 * kw = { url, sync, params }
-	 */
-	runRpc: function(kw) {
-		var _this = this;
-		
-		var deferred = new dojo.Deferred();
-		
-		dojo.io.bind({
-			url: kw.url,			
-			handle: this.getDeferredBindHandler(deferred),
-			mimetype: "text/javascript",
-			preventCache: this.preventCache,
-			sync: kw.sync,
-			content: { data: dojo.json.serialize(kw.params) }
+	}
+	var deferred = dojo.Deferred.prototype.makeCalled();
+	if (prepare) {
+		deferred.addCallback(function () {
+			return prepare.apply(_this, args);
 		});
-		
-		return deferred;
-
-	},
-
-
-
-	/**
-	 * Load children of the node from server
-	 * Synchroneous loading doesn't break control flow
-	 * I need sync mode for DnD
-	*/
-	loadRemote: function(node, sync){
-		var _this = this;
-
-		var params = {
-			node: this.getInfo(node),
-			tree: this.getInfo(node.tree)
-		};
-
-		
-		var deferred = this.runRpc({
-			url: this.getRpcUrl('getChildren'),
-			sync: sync,
-			params: params
+	}
+	if (make) {
+		deferred.addCallback(function () {
+			var res = make.apply(_this, args);
+			return res;
 		});
-		
-		deferred.addCallback(function(res) { return _this.loadProcessResponse(node,res) });
-		
-				
-		
-		return deferred;
-
-	},
-
-	batchExpandTimeout: 0,
-
-	recurseToLevel: function(widget, level, callFunc, callObj, skipFirst, sync) {
-		if (level == 0) return;
-
-
-		
-		if (!skipFirst) {
-			var deferred = callFunc.call(callObj, widget, sync);
-		} else {
-			var deferred = dojo.Deferred.prototype.makeCalled();
-		}
-		
-		//dojo.debug("expand deferred saved "+node+" sync "+sync);
-		
-		
-		var _this = this;
-		
-		var recurseOnExpand = function() {
-			var children = widget.children;
-			var deferreds = [];		
-			for(var i=0; i<children.length; i++) {
-				//dojo.debug("push recursive call for "+node.children[i]+" level "+level);
-				deferreds.push(_this.recurseToLevel(children[i], level-1, callFunc, callObj, sync));
-			}
-			return new dojo.DeferredList(deferreds);
-		}
-		
-		deferred.addCallback(recurseOnExpand);
-		
-		return deferred;
-	},
-	
-	
-	expandToLevel: function(nodeOrTree, level, sync) {
-		return this.recurseToLevel(nodeOrTree, nodeOrTree.isTree ? level+1 : level, this.expand, this, nodeOrTree.isTree, sync);
-	},
-	
-	loadToLevel: function(nodeOrTree, level, sync) {
-		return this.recurseToLevel(nodeOrTree, nodeOrTree.isTree ? level+1 : level, this.loadIfNeeded, this, nodeOrTree.isTree, sync);
-	},
-	
-	
-	loadAll: function(nodeOrTree, sync) {
-		return this.loadToLevel(nodeOrTree, Number.POSITIVE_INFINITY, sync);
-	},
-		
-	
-	
-	expand: function(node, sync) {		
-		// widget which children are data objects, is UNCHECKED, but has children and shouldn't be loaded
-		// so I put children check here too
-		
-		var _this = this;
-		
-		var deferred = this.startProcessing(node);
-		
-		deferred.addCallback(function() {
-			return _this.loadIfNeeded(node, sync);
-		});
-				
-		deferred.addCallback(function(res) {
-			//dojo.debug("Activated callback dojo.widget.TreeBasicControllerV3.prototype.expand(node); "+res);
-			dojo.widget.TreeBasicControllerV3.prototype.expand(node);
+	}
+	if (finalize) {
+		deferred.addBoth(function (res) {
+			finalize.apply(_this, args);
 			return res;
 		});
-		
-		deferred.addBoth(function(res) {
-			_this.finishProcessing(node);
+	}
+	if (expose) {
+		deferred.addCallback(function (res) {
+			expose.apply(_this, args);
 			return res;
 		});
-		
-		
-		
-		return deferred;
-	},
-
-	
-	loadIfNeeded: function(node, sync) {
-		var deferred
-		if (node.state == node.loadStates.UNCHECKED && node.isFolder && !node.children.length) {
-			// populate deferred with other things to pre-do
-			deferred = this.loadRemote(node, sync);			
-		} else {
-			/* "fake action" here */
-			deferred = new dojo.Deferred();
-			deferred.callback();
+	}
+	return deferred;
+}, startProcessing:function (nodesArray) {
+	var deferred = new dojo.Deferred();
+	var nodes = dojo.lang.isArray(nodesArray) ? nodesArray : arguments;
+	for (var i = 0; i < nodes.length; i++) {
+		if (nodes[i].isLocked()) {
+			deferred.errback(new dojo.LockedError("item locked " + nodes[i], nodes[i]));
+			return deferred;
 		}
-		
-		return deferred;
-	},
-	
-	/**
-	 * 1) if specified, run check, return false if failed
-	 * 2) if specified, run prepare
-	 * 3) run make if prepare if no errors
-	 * 4) run finalize no matter what happened, pass through make result
-	 * 5) if specified, run expose if no errors
-	 */
-	runStages: function(check, prepare, make, finalize, expose, args) {
-		var _this = this;
-		
-		if (check && !check.apply(this, args)) {
-			return false;
+		if (nodes[i].isTreeNode) {
+			nodes[i].markProcessing();
 		}
-		
-		var deferred = dojo.Deferred.prototype.makeCalled();
-		
-		
-		if (prepare) {
-			deferred.addCallback(function() {
-				return prepare.apply(_this, args);
-			});
+		nodes[i].lock();
+	}
+	deferred.callback();
+	return deferred;
+}, finishProcessing:function (nodesArray) {
+	var nodes = dojo.lang.isArray(nodesArray) ? nodesArray : arguments;
+	for (var i = 0; i < nodes.length; i++) {
+		if (!nodes[i].hasLock()) {
+			continue;
 		}
-		
-		
-		//deferred.addCallback(function(res) { dojo.debug("Prepare fired "+res); return res});
-		
-		if (make) {
-			deferred.addCallback(function() {			
-			var res = make.apply(_this, args);
-			//res.addBoth(function(r) {dojo.debugShallow(r); return r;});
-			return res;
-			});
+		nodes[i].unlock();
+		if (nodes[i].isTreeNode) {
+			nodes[i].unmarkProcessing();
 		}
-		
-		//deferred.addCallback(function(res) { dojo.debug("Main fired "+res); return res});
-		
-		if (finalize) {
-			deferred.addBoth(function(res) {
-				finalize.apply(_this, args);
-				return res;
-			});
-		}
-			
-				
-		// exposer does not affect result
-		if (expose) {
-			deferred.addCallback(function(res) {
-				expose.apply(_this, args);
-				return res;
-			});
-		}
-		
-		return deferred;
-	},
-		
-	startProcessing: function(nodesArray) {
-		var deferred = new dojo.Deferred();
-		
-		
-		var nodes = dojo.lang.isArray(nodesArray) ? nodesArray : arguments;
-		
-		/*
-		for(var i=0;i<nodes.length;i++) {
-			dojo.debug(nodes[i]);
-		}*/
-		
-		for(var i=0;i<nodes.length;i++) {
-			if (nodes[i].isLocked()) {
-				deferred.errback(new dojo.LockedError("item locked "+nodes[i], nodes[i]));
-				//dojo.debug("startProcessing errback "+arguments[i]);
-				return deferred;
-			}
-			if (nodes[i].isTreeNode) {
-				//dojo.debug("mark "+nodes[i]);
-				nodes[i].markProcessing();
-			}
-			nodes[i].lock();
-		}
-				
-		//dojo.debug("startProcessing callback");
-				
-		deferred.callback();
-		
-		return deferred;
-	},
-	
-	finishProcessing: function(nodesArray) {
-		
-		var nodes = dojo.lang.isArray(nodesArray) ? nodesArray : arguments;
-		
-		for(var i=0;i<nodes.length;i++) {
-			if (!nodes[i].hasLock()) {
-				// is not processed. probably we locked it and then met bad node in startProcessing
-				continue; 
-			}
-			//dojo.debug("has lock");	
-			nodes[i].unlock();
-			if (nodes[i].isTreeNode) {
-				//dojo.debug("unmark "+nodes[i]);
-				nodes[i].unmarkProcessing();
-			}
-		}
-	},
-	
-	// ----------------- refresh -----------------
-	
-	refreshChildren: function(nodeOrTree, sync) {		
-		return this.runStages(null, this.prepareRefreshChildren, this.doRefreshChildren, this.finalizeRefreshChildren, this.exposeRefreshChildren, arguments);
-	},
-
-
-	prepareRefreshChildren: function(nodeOrTree, sync) {
-		var deferred = this.startProcessing(nodeOrTree);
-		nodeOrTree.destroyChildren();
-						
-		nodeOrTree.state = nodeOrTree.loadStates.UNCHECKED;
-		
-		return deferred;
-	},
-	
-	doRefreshChildren: function(nodeOrTree, sync) {
-		return this.loadRemote(nodeOrTree, sync);
-	},
-	
-	finalizeRefreshChildren: function(nodeOrTree, sync) {
-		this.finishProcessing(nodeOrTree);
-	},
-	
-	exposeRefreshChildren: function(nodeOrTree, sync) {
-		nodeOrTree.expand();
-	},
-
-	// ----------------- move -----------------
-
-	move: function(child, newParent, index/*,...*/) {
-		return this.runStages(this.canMove, this.prepareMove, this.doMove, this.finalizeMove, this.exposeMove, arguments);			
-	},
-
-	doMove: function(child, newParent, index) {
-		//dojo.debug("MOVE "+child);
-		child.tree.move(child, newParent, index);
-
-		return true;
-	},
-	
-	
-	prepareMove: function(child, newParent, index, sync) {
-		var deferred = this.startProcessing(newParent);
-		deferred.addCallback(dojo.lang.hitch(this, function() {
-			return this.loadIfNeeded(newParent, sync);
-		}));
-		return deferred;
-	},
-	
-	finalizeMove: function(child, newParent) {
-		this.finishProcessing(newParent);
-	},
-
-	// -------------------- createChild ------------
-
-	prepareCreateChild: function(parent, index, data, sync) {
-		var deferred = this.startProcessing(parent);
-		
-		deferred.addCallback(dojo.lang.hitch(this, function() {
-			return this.loadIfNeeded(parent, sync);
-		}));
-		return deferred;
-	},
-	
-	finalizeCreateChild: function(parent) {
-		this.finishProcessing(parent);
-	},
-
-	// ---------------- clone ---------------
-	
-	prepareClone: function(child, newParent, index, deep, sync) {
-		var deferred = this.startProcessing(child, newParent);
-		deferred.addCallback(dojo.lang.hitch(this, function() {
-			return this.loadIfNeeded(newParent, sync);
-		}));		
-		return deferred;	
-	},	
-	
-	finalizeClone: function(child, newParent) {
-		this.finishProcessing(child, newParent);
 	}
+}, refreshChildren:function (nodeOrTree, sync) {
+	return this.runStages(null, this.prepareRefreshChildren, this.doRefreshChildren, this.finalizeRefreshChildren, this.exposeRefreshChildren, arguments);
+}, prepareRefreshChildren:function (nodeOrTree, sync) {
+	var deferred = this.startProcessing(nodeOrTree);
+	nodeOrTree.destroyChildren();
+	nodeOrTree.state = nodeOrTree.loadStates.UNCHECKED;
+	return deferred;
+}, doRefreshChildren:function (nodeOrTree, sync) {
+	return this.loadRemote(nodeOrTree, sync);
+}, finalizeRefreshChildren:function (nodeOrTree, sync) {
+	this.finishProcessing(nodeOrTree);
+}, exposeRefreshChildren:function (nodeOrTree, sync) {
+	nodeOrTree.expand();
+}, move:function (child, newParent, index) {
+	return this.runStages(this.canMove, this.prepareMove, this.doMove, this.finalizeMove, this.exposeMove, arguments);
+}, doMove:function (child, newParent, index) {
+	child.tree.move(child, newParent, index);
+	return true;
+}, prepareMove:function (child, newParent, index, sync) {
+	var deferred = this.startProcessing(newParent);
+	deferred.addCallback(dojo.lang.hitch(this, function () {
+		return this.loadIfNeeded(newParent, sync);
+	}));
+	return deferred;
+}, finalizeMove:function (child, newParent) {
+	this.finishProcessing(newParent);
+}, prepareCreateChild:function (parent, index, data, sync) {
+	var deferred = this.startProcessing(parent);
+	deferred.addCallback(dojo.lang.hitch(this, function () {
+		return this.loadIfNeeded(parent, sync);
+	}));
+	return deferred;
+}, finalizeCreateChild:function (parent) {
+	this.finishProcessing(parent);
+}, prepareClone:function (child, newParent, index, deep, sync) {
+	var deferred = this.startProcessing(child, newParent);
+	deferred.addCallback(dojo.lang.hitch(this, function () {
+		return this.loadIfNeeded(newParent, sync);
+	}));
+	return deferred;
+}, finalizeClone:function (child, newParent) {
+	this.finishProcessing(child, newParent);
+}});
 
-});
 
 __CPAN_FILE__ src/widget/Tooltip.js
 /*
@@ -22673,7 +15162,6 @@
 */
 
 dojo.provide("dojo.widget.Tooltip");
-
 dojo.require("dojo.widget.ContentPane");
 dojo.require("dojo.widget.PopupContainer");
 dojo.require("dojo.uri.Uri");
@@ -22681,171 +15169,94 @@
 dojo.require("dojo.event.*");
 dojo.require("dojo.html.style");
 dojo.require("dojo.html.util");
-
-dojo.widget.defineWidget(
-	"dojo.widget.Tooltip",
-	[dojo.widget.ContentPane, dojo.widget.PopupContainerBase],
-	{
-		// summary
-		//		Pops up a tooltip (a help message) when you hover over a node
-
-		// caption: String
-		//		Text to display in the tooltip.
-		//		Can also be specified as innerHTML (when creating the widget from markup).
-		caption: "",
-		
-		// showDelay: Integer
-		//		Number of milliseconds to wait after hovering over the object, before
-		//		the tooltip is displayed.
-		showDelay: 500,
-		
-		// hideDelay: Integer
-		//		Number of milliseconds to wait after moving mouse off of the object (or
-		//		off of the tooltip itself), before erasing the tooltip
-		hideDelay: 100,
-		
-		// connectId: String
-		//		Id of domNode to attach the tooltip to.
-		//		(When user hovers over specified dom node, the tooltip will appear.)
-		connectId: "",
-
-		templateCssPath: dojo.uri.dojoUri("src/widget/templates/TooltipTemplate.css"),
-
-		fillInTemplate: function(args, frag){
-			if(this.caption != ""){
-				this.domNode.appendChild(document.createTextNode(this.caption));
-			}
-			this._connectNode = dojo.byId(this.connectId);
-			dojo.widget.Tooltip.superclass.fillInTemplate.call(this, args, frag);
-
-			this.addOnLoad(this, "_loadedContent");
-			dojo.html.addClass(this.domNode, "dojoTooltip");
-
-			//copy style from input node to output node
-			var source = this.getFragNodeRef(frag);
-			dojo.html.copyStyle(this.domNode, source);
-
-			//apply the necessary css rules to the node so that it can popup
-			this.applyPopupBasicStyle();
-		},
-
-		postCreate: function(args, frag){
-			dojo.event.connect(this._connectNode, "onmouseover", this, "_onMouseOver");
-			dojo.widget.Tooltip.superclass.postCreate.call(this, args, frag);
-		},
-
-		_onMouseOver: function(e){
-			this._mouse = {x: e.pageX, y: e.pageY};
-
-			// Start tracking mouse movements, so we know when to cancel timers or erase the tooltip
-			if(!this._tracking){
-				dojo.event.connect(document.documentElement, "onmousemove", this, "_onMouseMove");
-				this._tracking=true;
-			}
-
-			this._onHover(e);			
-		},
-
-		_onMouseMove: function(e) {
-			this._mouse = {x: e.pageX, y: e.pageY};
-
-			if(dojo.html.overElement(this._connectNode, e) || dojo.html.overElement(this.domNode, e)){
-				this._onHover(e);
-			} else {
-				// mouse has been moved off the element/tooltip
-				// note: can't use onMouseOut to detect this because the "explode" effect causes
-				// spurious onMouseOut events (due to interference from outline), w/out corresponding _onMouseOver
-				this._onUnHover(e);
-			}
-		},
-
-		_onHover: function(e) {
-			if(this._hover){ return; }
-			this._hover=true;
-
-			// If the tooltip has been scheduled to be erased, cancel that timer
-			// since we are hovering over element/tooltip again
-			if(this._hideTimer) {
-				clearTimeout(this._hideTimer);
-				delete this._hideTimer;
-			}
-			
-			// If tooltip not showing yet then set a timer to show it shortly
-			if(!this.isShowingNow && !this._showTimer){
-				this._showTimer = setTimeout(dojo.lang.hitch(this, "open"), this.showDelay);
-			}
-		},
-
-		_onUnHover: function(e){
-			if(!this._hover){ return; }
-			this._hover=false;
-
-			if(this._showTimer){
-				clearTimeout(this._showTimer);
-				delete this._showTimer;
-			}
-			if(this.isShowingNow && !this._hideTimer){
-				this._hideTimer = setTimeout(dojo.lang.hitch(this, "close"), this.hideDelay);
-			}
-			
-			// If we aren't showing the tooltip, then we can stop tracking the mouse now;
-			// otherwise must track the mouse until tooltip disappears
-			if(!this.isShowingNow){
-				dojo.event.disconnect(document.documentElement, "onmousemove", this, "_onMouseMove");
-				this._tracking=false;
-			}
-		},
-
-		open: function() {
-			// summary: display the tooltip; usually not called directly.
-
-			if (this.isShowingNow) { return; }
-			dojo.widget.PopupContainerBase.prototype.open.call(this, this._mouse.x, this._mouse.y, null, [this._mouse.x, this._mouse.y], "TL,TR,BL,BR", [10,15]);
-		},
-
-		close: function() {
-			// summary: hide the tooltip; usually not called directly.
-			if (this.isShowingNow) {
-				if ( this._showTimer ) {
-					clearTimeout(this._showTimer);
-					delete this._showTimer;
-				}
-				if ( this._hideTimer ) {
-					clearTimeout(this._hideTimer);
-					delete this._hideTimer;
-				}
-				dojo.event.disconnect(document.documentElement, "onmousemove", this, "_onMouseMove");
-				this._tracking=false;
-				dojo.widget.PopupContainerBase.prototype.close.call(this);
-			}
-		},
-
-		_position: function(){
-			this.move(this._mouse.x, this._mouse.y, [10,15], "TL,TR,BL,BR");
-		},
-
-		_loadedContent: function(){
-			if(this.isShowingNow){
-				// the tooltip has changed size due to downloaded contents, so reposition it
-				this._position();
-			}
-		},
-
-		checkSize: function(){
-			// Override checkSize() in HtmlWidget.
-			// checkSize() is called when the user has resized the browser window,
-			// but that doesn't affect this widget (or this widget's children)
-			// so it can be safely ignored
-		},
-
-		uninitialize: function(){
-			this.close();
-			dojo.event.disconnect(this._connectNode, "onmouseover", this, "_onMouseOver");
+dojo.widget.defineWidget("dojo.widget.Tooltip", [dojo.widget.ContentPane, dojo.widget.PopupContainerBase], {caption:"", showDelay:500, hideDelay:100, connectId:"", templateCssString:".dojoTooltip {\n\tborder: solid black 1px;\n\tbackground: beige;\n\tcolor: black;\n\tposition: absolute;\n\tfont-size: small;\n\tpadding: 2px 2px 2px 2px;\n\tz-index: 10;\n\tdisplay: block;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/TooltipTemplate.css"), fillInTemplate:function (args, frag) {
+	if (this.caption != "") {
+		this.domNode.appendChild(document.createTextNode(this.caption));
+	}
+	this._connectNode = dojo.byId(this.connectId);
+	dojo.widget.Tooltip.superclass.fillInTemplate.call(this, args, frag);
+	this.addOnLoad(this, "_loadedContent");
+	dojo.html.addClass(this.domNode, "dojoTooltip");
+	var source = this.getFragNodeRef(frag);
+	dojo.html.copyStyle(this.domNode, source);
+	this.applyPopupBasicStyle();
+}, postCreate:function (args, frag) {
+	dojo.event.connect(this._connectNode, "onmouseover", this, "_onMouseOver");
+	dojo.widget.Tooltip.superclass.postCreate.call(this, args, frag);
+}, _onMouseOver:function (e) {
+	this._mouse = {x:e.pageX, y:e.pageY};
+	if (!this._tracking) {
+		dojo.event.connect(document.documentElement, "onmousemove", this, "_onMouseMove");
+		this._tracking = true;
+	}
+	this._onHover(e);
+}, _onMouseMove:function (e) {
+	this._mouse = {x:e.pageX, y:e.pageY};
+	if (dojo.html.overElement(this._connectNode, e) || dojo.html.overElement(this.domNode, e)) {
+		this._onHover(e);
+	} else {
+		this._onUnHover(e);
+	}
+}, _onHover:function (e) {
+	if (this._hover) {
+		return;
+	}
+	this._hover = true;
+	if (this._hideTimer) {
+		clearTimeout(this._hideTimer);
+		delete this._hideTimer;
+	}
+	if (!this.isShowingNow && !this._showTimer) {
+		this._showTimer = setTimeout(dojo.lang.hitch(this, "open"), this.showDelay);
+	}
+}, _onUnHover:function (e) {
+	if (!this._hover) {
+		return;
+	}
+	this._hover = false;
+	if (this._showTimer) {
+		clearTimeout(this._showTimer);
+		delete this._showTimer;
+	}
+	if (this.isShowingNow && !this._hideTimer) {
+		this._hideTimer = setTimeout(dojo.lang.hitch(this, "close"), this.hideDelay);
+	}
+	if (!this.isShowingNow) {
+		dojo.event.disconnect(document.documentElement, "onmousemove", this, "_onMouseMove");
+		this._tracking = false;
+	}
+}, open:function () {
+	if (this.isShowingNow) {
+		return;
+	}
+	dojo.widget.PopupContainerBase.prototype.open.call(this, this._mouse.x, this._mouse.y, null, [this._mouse.x, this._mouse.y], "TL,TR,BL,BR", [10, 15]);
+}, close:function () {
+	if (this.isShowingNow) {
+		if (this._showTimer) {
+			clearTimeout(this._showTimer);
+			delete this._showTimer;
 		}
-
+		if (this._hideTimer) {
+			clearTimeout(this._hideTimer);
+			delete this._hideTimer;
+		}
+		dojo.event.disconnect(document.documentElement, "onmousemove", this, "_onMouseMove");
+		this._tracking = false;
+		dojo.widget.PopupContainerBase.prototype.close.call(this);
 	}
-);
+}, _position:function () {
+	this.move(this._mouse.x, this._mouse.y, [10, 15], "TL,TR,BL,BR");
+}, _loadedContent:function () {
+	if (this.isShowingNow) {
+		this._position();
+	}
+}, checkSize:function () {
+}, uninitialize:function () {
+	this.close();
+	dojo.event.disconnect(this._connectNode, "onmouseover", this, "_onMouseOver");
+}});
 
+
 __CPAN_FILE__ src/widget/TreeLinkExtension.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -22857,70 +15268,41 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeLinkExtension");
-
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.widget.TreeExtension");
-
-dojo.widget.defineWidget(
-	"dojo.widget.TreeLinkExtension",
-	dojo.widget.TreeExtension,
-	function() {
-		this.params = {};
-	},
-{
-	/**
-	 * can only listen, no unlisten
-	 */
-
-	listenTreeEvents: ["afterChangeTree"],	
-
-	listenTree: function(tree) {
-		
-		dojo.widget.TreeCommon.prototype.listenTree.call(this,tree);
-		
-		var labelNode = tree.labelNodeTemplate;
-		var newLabel = this.makeALabel();
-		dojo.html.setClass(newLabel, dojo.html.getClass(labelNode));
-		labelNode.parentNode.replaceChild(newLabel, labelNode);		
-	},
-	
-		
-	
-	makeALabel: function() {		
-		var newLabel = document.createElement("a");
-		
-		for(var key in this.params) {
-			if (key in {}) continue;
-			newLabel.setAttribute(key, this.params[key]);
+dojo.widget.defineWidget("dojo.widget.TreeLinkExtension", dojo.widget.TreeExtension, function () {
+	this.params = {};
+}, {listenTreeEvents:["afterChangeTree"], listenTree:function (tree) {
+	dojo.widget.TreeCommon.prototype.listenTree.call(this, tree);
+	var labelNode = tree.labelNodeTemplate;
+	var newLabel = this.makeALabel();
+	dojo.html.setClass(newLabel, dojo.html.getClass(labelNode));
+	labelNode.parentNode.replaceChild(newLabel, labelNode);
+}, makeALabel:function () {
+	var newLabel = document.createElement("a");
+	for (var key in this.params) {
+		if (key in {}) {
+			continue;
 		}
-		
-		return newLabel;
-	},
-		
-	
-	onAfterChangeTree: function(message) {
-		var _this = this;
-		
-		
-		// only for new nodes
-		if (!message.oldTree) {
-			this.listenNode(message.node);
+		newLabel.setAttribute(key, this.params[key]);
+	}
+	return newLabel;
+}, onAfterChangeTree:function (message) {
+	var _this = this;
+	if (!message.oldTree) {
+		this.listenNode(message.node);
+	}
+}, listenNode:function (node) {
+	for (var key in node.object) {
+		if (key in {}) {
+			continue;
 		}
-		
-	},
-	
-	listenNode: function(node) {
-		for(var key in node.object) {
-			if (key in {}) continue;
-			node.labelNode.setAttribute(key, node.object[key]);
-		}
+		node.labelNode.setAttribute(key, node.object[key]);
 	}
+}});
 
 
-});
-
 __CPAN_FILE__ src/widget/TreeContextMenuV3.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -22933,128 +15315,68 @@
 */
 
 dojo.provide("dojo.widget.TreeContextMenuV3");
-
 dojo.require("dojo.event.*");
 dojo.require("dojo.io.*");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.Menu2");
 dojo.require("dojo.widget.TreeCommon");
-
-dojo.widget.defineWidget(
-	"dojo.widget.TreeContextMenuV3",
-	[dojo.widget.PopupMenu2, dojo.widget.TreeCommon],
-	function() {
-		this.listenedTrees = {};
-		
-	},
-{
-
-	listenTreeEvents: ["afterTreeCreate","beforeTreeDestroy"],
-	listenNodeFilter: function(elem) { return elem instanceof dojo.widget.Widget},
-	
-	onAfterTreeCreate: function(message) {
-		var tree = message.source;
-		this.bindDomNode(tree.domNode);
-	},
-	
-	onBeforeTreeDestroy: function(message) {
-		this.unBindDomNode(message.source.domNode);
-	},
-	
-	
-	getTreeNode: function() {
-		
-		var source = this.getTopOpenEvent().target;
-		var treeNode = this.domElement2TreeNode(source);
-		return treeNode;
-	
-	},
-		
-	open: function() {
-		var result = dojo.widget.PopupMenu2.prototype.open.apply(this, arguments);
-
-		for(var i=0; i< this.children.length; i++) {
-			/* notify children */
-			if (this.children[i].menuOpen) {
-				this.children[i].menuOpen(this.getTreeNode());
-			}
+dojo.widget.defineWidget("dojo.widget.TreeContextMenuV3", [dojo.widget.PopupMenu2, dojo.widget.TreeCommon], function () {
+	this.listenedTrees = {};
+}, {listenTreeEvents:["afterTreeCreate", "beforeTreeDestroy"], listenNodeFilter:function (elem) {
+	return elem instanceof dojo.widget.Widget;
+}, onAfterTreeCreate:function (message) {
+	var tree = message.source;
+	this.bindDomNode(tree.domNode);
+}, onBeforeTreeDestroy:function (message) {
+	this.unBindDomNode(message.source.domNode);
+}, getTreeNode:function () {
+	var source = this.getTopOpenEvent().target;
+	var treeNode = this.domElement2TreeNode(source);
+	return treeNode;
+}, open:function () {
+	var result = dojo.widget.PopupMenu2.prototype.open.apply(this, arguments);
+	for (var i = 0; i < this.children.length; i++) {
+		if (this.children[i].menuOpen) {
+			this.children[i].menuOpen(this.getTreeNode());
 		}
-		return result;
-	},
-	
-	close: function(){
-		
-		for(var i=0; i< this.children.length; i++) {
-			/* notify menu entries */
-			if (this.children[i].menuClose) {
-				this.children[i].menuClose(this.getTreeNode());
-			}
-		}
-		
-
-		var result = dojo.widget.PopupMenu2.prototype.close.apply(this, arguments);
-		
-		return result
 	}
-	
-});
-
-
-dojo.widget.defineWidget(
-	"dojo.widget.TreeMenuItemV3",
-	[dojo.widget.MenuItem2, dojo.widget.TreeCommon],
-	function() {
-		this.treeActions = [];
-	},
-{
-	// treeActions menu item performs following actions (to be checked for permissions)
-	treeActions: "",
-
-	initialize: function(args, frag) {
-		for(var i=0; i<this.treeActions.length; i++) {
-			this.treeActions[i] = this.treeActions[i].toUpperCase();
+	return result;
+}, close:function () {
+	for (var i = 0; i < this.children.length; i++) {
+		if (this.children[i].menuClose) {
+			this.children[i].menuClose(this.getTreeNode());
 		}
-	},
-
-		
-	getTreeNode: function() {
-		var menu = this;
-
-		// FIXME: change to dojo.widget[this.widgetType]
-		while (! (menu instanceof dojo.widget.TreeContextMenuV3) ) {
-				menu = menu.parent;
-		}
-
-		var treeNode = menu.getTreeNode()
-
-		return treeNode;
-	},
-
-
-	menuOpen: function(treeNode) {
-
-		treeNode.viewEmphasize()
-		this.setDisabled(false); // enable by default
-
-		var _this = this;
-		dojo.lang.forEach(_this.treeActions,
-			function(action) {
-				_this.setDisabled( treeNode.actionIsDisabledNow(action) );
-			}
-		);
-
-	},
-	
-	menuClose: function(treeNode) {
-
-		treeNode.viewUnemphasize()
-	},
-
-	toString: function() {
-		return "["+this.widgetType+" node "+this.getTreeNode()+"]";
 	}
-});
+	var result = dojo.widget.PopupMenu2.prototype.close.apply(this, arguments);
+	return result;
+}});
+dojo.widget.defineWidget("dojo.widget.TreeMenuItemV3", [dojo.widget.MenuItem2, dojo.widget.TreeCommon], function () {
+	this.treeActions = [];
+}, {treeActions:"", initialize:function (args, frag) {
+	for (var i = 0; i < this.treeActions.length; i++) {
+		this.treeActions[i] = this.treeActions[i].toUpperCase();
+	}
+}, getTreeNode:function () {
+	var menu = this;
+	while (!(menu instanceof dojo.widget.TreeContextMenuV3)) {
+		menu = menu.parent;
+	}
+	var treeNode = menu.getTreeNode();
+	return treeNode;
+}, menuOpen:function (treeNode) {
+	treeNode.viewEmphasize();
+	this.setDisabled(false);
+	var _this = this;
+	dojo.lang.forEach(_this.treeActions, function (action) {
+		_this.setDisabled(treeNode.actionIsDisabledNow(action));
+	});
+}, menuClose:function (treeNode) {
+	treeNode.viewUnemphasize();
+}, toString:function () {
+	return "[" + this.widgetType + " node " + this.getTreeNode() + "]";
+}});
 
+
 __CPAN_FILE__ src/widget/TreeCommon.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -23066,147 +15388,77 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeCommon");
-dojo.require("dojo.widget.*"); // for dojo.widget.manager
-
-dojo.declare(
-	"dojo.widget.TreeCommon",
-	null,
-{
-	listenTreeEvents: [],
-	listenedTrees: {},
-	
-	/**
-	 * evaluates to false => skip unlistening nodes
-	 * provided => use it
-	 */	
-	listenNodeFilter: null,
-	
-	listenTree: function(tree) {
-		
-		//dojo.debug("listenTree in "+this+" tree "+tree);
-		
-		var _this = this;
-		
-		if (this.listenedTrees[tree.widgetId]) {
-			return; // already listening
+dojo.require("dojo.widget.*");
+dojo.declare("dojo.widget.TreeCommon", null, {listenTreeEvents:[], listenedTrees:{}, listenNodeFilter:null, listenTree:function (tree) {
+	var _this = this;
+	if (this.listenedTrees[tree.widgetId]) {
+		return;
+	}
+	dojo.lang.forEach(this.listenTreeEvents, function (event) {
+		var eventHandler = "on" + event.charAt(0).toUpperCase() + event.substr(1);
+		dojo.event.topic.subscribe(tree.eventNames[event], _this, eventHandler);
+	});
+	var filter;
+	if (this.listenNodeFilter) {
+		this.processDescendants(tree, this.listenNodeFilter, this.listenNode, true);
+	}
+	this.listenedTrees[tree.widgetId] = true;
+}, listenNode:function () {
+}, unlistenNode:function () {
+}, unlistenTree:function (tree, nodeFilter) {
+	var _this = this;
+	if (!this.listenedTrees[tree.widgetId]) {
+		return;
+	}
+	dojo.lang.forEach(this.listenTreeEvents, function (event) {
+		var eventHandler = "on" + event.charAt(0).toUpperCase() + event.substr(1);
+		dojo.event.topic.unsubscribe(tree.eventNames[event], _this, eventHandler);
+	});
+	if (this.listenNodeFilter) {
+		this.processDescendants(tree, this.listenNodeFilter, this.unlistenNode, true);
+	}
+	delete this.listenedTrees[tree.widgetId];
+}, checkPathCondition:function (domElement, condition) {
+	while (domElement && !domElement.widgetId) {
+		if (condition.call(null, domElement)) {
+			return true;
 		}
-		
-		dojo.lang.forEach(this.listenTreeEvents, function(event) {
-			var eventHandler =  "on" + event.charAt(0).toUpperCase() + event.substr(1);
-			//dojo.debug("subscribe: event "+tree.eventNames[event]+" widget "+_this+" handler "+eventHandler);
-			dojo.event.topic.subscribe(tree.eventNames[event], _this, eventHandler);
-		});
-		
-		
-		var filter;
-		
-		if (this.listenNodeFilter) {			
-			this.processDescendants(tree, this.listenNodeFilter, this.listenNode, true);
+		domElement = domElement.parentNode;
+	}
+	return false;
+}, domElement2TreeNode:function (domElement) {
+	while (domElement && !domElement.widgetId) {
+		domElement = domElement.parentNode;
+	}
+	if (!domElement) {
+		return null;
+	}
+	var widget = dojo.widget.byId(domElement.widgetId);
+	if (!widget.isTreeNode) {
+		return null;
+	}
+	return widget;
+}, processDescendants:function (elem, filter, func, skipFirst) {
+	var _this = this;
+	if (!skipFirst) {
+		if (!filter.call(_this, elem)) {
+			return;
 		}
-		
-		/**
-		 * remember that I listen to this tree. No unbinding/binding/deselection
-		 * needed when transfer between listened trees
-		 */
-		this.listenedTrees[tree.widgetId] = true;
-		
-	},			
-	
-	// interface functions
-	listenNode: function() {},	
-	unlistenNode: function() {},
-			
-	unlistenTree: function(tree, nodeFilter) {
-		
-		var _this = this;
-	
-		if (!this.listenedTrees[tree.widgetId]) {
-			return; 
-		}
-		
-		dojo.lang.forEach(this.listenTreeEvents, function(event) {
-			var eventHandler =  "on" + event.charAt(0).toUpperCase() + event.substr(1);
-			dojo.event.topic.unsubscribe(tree.eventNames[event], _this, eventHandler);
-		});
-		
-		
-		if (this.listenNodeFilter) {
-			this.processDescendants(tree, this.listenNodeFilter, this.unlistenNode, true);
-		}
-		
-		delete this.listenedTrees[tree.widgetId];
-		
-	},
-	
-	
-	/**
-	 * check condition for node.domNode -> .. -> any node chain
-	 */
-	checkPathCondition: function(domElement, condition) {
-		
-		while (domElement && !domElement.widgetId) {
-			if (condition.call(null, domElement)) {
-				return true;
+		func.call(_this, elem);
+	}
+	var stack = [elem];
+	while (elem = stack.pop()) {
+		dojo.lang.forEach(elem.children, function (elem) {
+			if (filter.call(_this, elem)) {
+				func.call(_this, elem);
+				stack.push(elem);
 			}
-			
-			domElement = domElement.parentNode;
-		}
-		
-		return false;
-	},
-		
-	
-	/**
-	 * get node widget id by its descendant dom node
-	 */
-	domElement2TreeNode: function(domElement) {
-		
-		while (domElement && !domElement.widgetId) {
-			domElement = domElement.parentNode;
-		}
-		
-		if (!domElement) {
-			return null;
-		}
-		
-		var widget = dojo.widget.byId(domElement.widgetId);
-		
-		if (!widget.isTreeNode) {
-			return null;
-		}
-		
-		return widget;
-	},
-	
-	/**
-	 * it is here, not in Widget, because mostly tree needs it
-	 */
-	processDescendants: function(elem, filter, func, skipFirst) {
-		
-		var _this = this;
-		
-		if (!skipFirst) {
-			if (!filter.call(_this,elem)) {
-				return;
-			}
-			func.call(_this,elem);	        
-		}
-		
-		
-		var stack = [elem];
-		while (elem = stack.pop()) {
-			dojo.lang.forEach(elem.children, function(elem) {
-				if (filter.call(_this, elem)) {		
-					func.call(_this, elem);
-					stack.push(elem);
-				}
-			});
-		}
-    }
-});
+		});
+	}
+}});
 
+
 __CPAN_FILE__ src/widget/Toaster.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -23219,261 +15471,157 @@
 */
 
 dojo.provide("dojo.widget.Toaster");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.lfx.*");
 dojo.require("dojo.html.iframe");
-
-// This is mostly taken from Jesse Kuhnert's MessageNotifier.
-// Modified by Bryan Forbes to support topics and a variable delay.
-
-dojo.widget.defineWidget(
-	"dojo.widget.Toaster",
-	dojo.widget.HtmlWidget,
-	{
-		// summary
-		//		Message that slides in from the corner of the screen, used for notifications
-		//		like "new email".
-
-		templateString: '<div dojoAttachPoint="clipNode"><div dojoAttachPoint="containerNode" dojoAttachEvent="onClick:onSelect"><div dojoAttachPoint="contentNode"></div></div></div>',
-		templateCssPath: dojo.uri.dojoUri("src/widget/templates/Toaster.css"),
-		
-		// messageTopic: String
-		//		Name of topic; anything published to this topic will be displayed as a message.
-		//		Message format is either String or an object like
-		//		{message: "hello word", type: "ERROR", delay: 500}
-		messageTopic: "",
-		
-		// messageTypes: Enumeration
-		//		Possible message types.
-		messageTypes: {
-			MESSAGE: "MESSAGE",
-			WARNING: "WARNING",
-			ERROR: "ERROR",
-			FATAL: "FATAL"
-		},
-		
-		// defaultType: String
-		//		If message type isn't specified (see "messageTopic" parameter),
-		//		then display message as this type.
-		//		Possible values in messageTypes enumeration ("MESSAGE", "WARNING", "ERROR", "FATAL")
-		defaultType: "MESSAGE",
-
-		// css classes
-		clipCssClass: "dojoToasterClip",
-		containerCssClass: "dojoToasterContainer",
-		contentCssClass: "dojoToasterContent",
-		messageCssClass: "dojoToasterMessage",
-		warningCssClass: "dojoToasterWarning",
-		errorCssClass: "dojoToasterError",
-		fatalCssClass: "dojoToasterFatal",
-
-		// positionDirection: String
-		//		Position from which message slides into screen, one of
-		//		["br-up", "br-left", "bl-up", "bl-right", "tr-down", "tr-left", "tl-down", "tl-right"]
-		positionDirection: "br-up",
-		
-		// positionDirectionTypes: Enumeration
-		//		Possible values for positionDirection parameter
-		positionDirectionTypes: ["br-up", "br-left", "bl-up", "bl-right", "tr-down", "tr-left", "tl-down", "tl-right"],
-		
-		// showDelay: Integer
-		//		Number of milliseconds to show message
-		// TODO: this is a strange name.  "duration" makes more sense
-		showDelay: 2000,
-
-		postCreate: function(){
-			this.hide();
-			dojo.html.setClass(this.clipNode, this.clipCssClass);
-			dojo.html.addClass(this.containerNode, this.containerCssClass);
-			dojo.html.setClass(this.contentNode, this.contentCssClass);
-			if(this.messageTopic){
-				dojo.event.topic.subscribe(this.messageTopic, this, "_handleMessage");
+dojo.widget.defineWidget("dojo.widget.Toaster", dojo.widget.HtmlWidget, {templateString:"<div dojoAttachPoint=\"clipNode\"><div dojoAttachPoint=\"containerNode\" dojoAttachEvent=\"onClick:onSelect\"><div dojoAttachPoint=\"contentNode\"></div></div></div>", templateCssString:".dojoToasterClip {\n\tposition: absolute;\n\toverflow: hidden;\n}\n\n.dojoToasterContainer {\n\tdisplay: block;\n\tposition: absolute;\n\twidth: 17.5em;\n\tz-index: 5000;\n\tmargin: 0px;\n\tfont:0.75em Tahoma, Helvetica, Verdana, Arial;\n}\n\n.dojoToasterContent{\n\tpadding:1em;\n\tpadding-top:0.25em;\n\tbackground:#73c74a;\n}\n\n.dojoToasterMessage{ \n\tcolor:#fff;\n}\n.dojoToasterWarning{ }\n.dojoToasterError,\n.dojoToasterFatal{\n\tfont-weight:bold;\n\tcolor:#fff;\n}\n\n\n.dojoToasterWarning .dojoToasterContent{\n\tpadding:1em;\n\tpadding-top:0.25em;\n\tbackground:#d4d943;\n} \n\n.dojoToasterError .dojoToasterContent{\n\tpadding:1em;\n\tpadding-top:0.25em;\n\tbackground:#c46600;\n} \n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/Toaster.css"), messageTopic:"", messageTypes:{MESSAGE:"MESSAGE", WARNING:"WARNING", ERROR:"ERROR", FATAL:"FATAL"}, defaultType:"MESSAGE", clipCssClass:"dojoToasterClip", containerCssClass:"dojoToasterContainer", contentCssClass:"dojoToasterContent", messageCssClass:"dojoToasterMessage", warningCssClass:"dojoToasterWarning", errorCssClass:"dojoToasterError", fatalCssClass:"dojoToasterFatal", positionDirection:"br-up", positionDirectionTypes:["br-up", "br-left", "bl-up", "bl-right", "tr-down", "tr-left", "tl-down", "tl-right"], showDelay:2000, postCreate:function () {
+	this.hide();
+	dojo.html.setClass(this.clipNode, this.clipCssClass);
+	dojo.html.addClass(this.containerNode, this.containerCssClass);
+	dojo.html.setClass(this.contentNode, this.contentCssClass);
+	if (this.messageTopic) {
+		dojo.event.topic.subscribe(this.messageTopic, this, "_handleMessage");
+	}
+	if (!this.positionDirection || !dojo.lang.inArray(this.positionDirectionTypes, this.positionDirection)) {
+		this.positionDirection = this.positionDirectionTypes.BRU;
+	}
+}, _handleMessage:function (msg) {
+	if (dojo.lang.isString(msg)) {
+		this.setContent(msg);
+	} else {
+		this.setContent(msg["message"], msg["type"], msg["delay"]);
+	}
+}, setContent:function (msg, messageType, delay) {
+	var delay = delay || this.showDelay;
+	if (this.slideAnim && this.slideAnim.status() == "playing") {
+		dojo.lang.setTimeout(50, dojo.lang.hitch(this, function () {
+			this.setContent(msg, messageType);
+		}));
+		return;
+	} else {
+		if (this.slideAnim) {
+			this.slideAnim.stop();
+			if (this.fadeAnim) {
+				this.fadeAnim.stop();
 			}
-			if(!this.positionDirection || !dojo.lang.inArray(this.positionDirectionTypes, this.positionDirection)){
-				this.positionDirection = this.positionDirectionTypes.BRU;
-			}
-		},
-
-		_handleMessage: function(msg){
-			if(dojo.lang.isString(msg)){
-				this.setContent(msg);
-			}else{
-				this.setContent(msg["message"], msg["type"], msg["delay"]);
-			}
-		},
-
-		setContent: function(msg, messageType, delay){
-			// summary
-			//		sets and displays the given message and show duration
-			// msg: String
-			//		the message
-			// messageType: Enumeration
-			//		type of message; possible values in messageTypes array ("MESSAGE", "WARNING", "ERROR", "FATAL")
-			// delay: Integer
-			//		number of milliseconds to display message
-
-			var delay = delay||this.showDelay;
-			// sync animations so there are no ghosted fades and such
-			if(this.slideAnim && this.slideAnim.status() == "playing"){
-				dojo.lang.setTimeout(50, dojo.lang.hitch(this, function(){
-					this.setContent(msg, messageType);
-				}));
-				return;
-			}else if(this.slideAnim){
-				this.slideAnim.stop();
-				if(this.fadeAnim) this.fadeAnim.stop();
-			}
-			if(!msg){
-				dojo.debug(this.widgetId + ".setContent() incoming content was null, ignoring.");
-				return;
-			}
-			if(!this.positionDirection || !dojo.lang.inArray(this.positionDirectionTypes, this.positionDirection)){
-				dojo.raise(this.widgetId + ".positionDirection is an invalid value: " + this.positionDirection);
-			}
-
-			// determine type of content and apply appropriately
-			dojo.html.removeClass(this.containerNode, this.messageCssClass);
-			dojo.html.removeClass(this.containerNode, this.warningCssClass);
-			dojo.html.removeClass(this.containerNode, this.errorCssClass);
-			dojo.html.removeClass(this.containerNode, this.fatalCssClass);
-
-			dojo.html.clearOpacity(this.containerNode);
-			
-			if(msg instanceof String || typeof msg == "string"){
-				this.contentNode.innerHTML = msg;
-			}else if(dojo.html.isNode(msg)){
-				this.contentNode.innerHTML = dojo.html.getContentAsString(msg);
-			}else{
-				dojo.raise("Toaster.setContent(): msg is of unknown type:" + msg);
-			}
-
-			switch(messageType){
-				case this.messageTypes.WARNING:
-					dojo.html.addClass(this.containerNode, this.warningCssClass);
-					break;
-				case this.messageTypes.ERROR:
-					dojo.html.addClass(this.containerNode, this.errorCssClass);
-					break
-				case this.messageTypes.FATAL:
-					dojo.html.addClass(this.containerNode, this.fatalCssClass);
-					break;
-				case this.messageTypes.MESSAGE:
-				default:
-					dojo.html.addClass(this.containerNode, this.messageCssClass);
-					break;
-			}
-
-			// now do funky animation of widget appearing from
-			// bottom right of page and up
-			this.show();
-
-			var nodeSize = dojo.html.getMarginBox(this.containerNode);
-
-			// sets up initial position of container node and slide-out direction
-			if(this.positionDirection.indexOf("-up") >= 0){
-				this.containerNode.style.left=0+"px";
-				this.containerNode.style.top=nodeSize.height + 10 + "px";
-			}else if(this.positionDirection.indexOf("-left") >= 0){
-				this.containerNode.style.left=nodeSize.width + 10 +"px";
-				this.containerNode.style.top=0+"px";
-			}else if(this.positionDirection.indexOf("-right") >= 0){
+		}
+	}
+	if (!msg) {
+		dojo.debug(this.widgetId + ".setContent() incoming content was null, ignoring.");
+		return;
+	}
+	if (!this.positionDirection || !dojo.lang.inArray(this.positionDirectionTypes, this.positionDirection)) {
+		dojo.raise(this.widgetId + ".positionDirection is an invalid value: " + this.positionDirection);
+	}
+	dojo.html.removeClass(this.containerNode, this.messageCssClass);
+	dojo.html.removeClass(this.containerNode, this.warningCssClass);
+	dojo.html.removeClass(this.containerNode, this.errorCssClass);
+	dojo.html.removeClass(this.containerNode, this.fatalCssClass);
+	dojo.html.clearOpacity(this.containerNode);
+	if (msg instanceof String || typeof msg == "string") {
+		this.contentNode.innerHTML = msg;
+	} else {
+		if (dojo.html.isNode(msg)) {
+			this.contentNode.innerHTML = dojo.html.getContentAsString(msg);
+		} else {
+			dojo.raise("Toaster.setContent(): msg is of unknown type:" + msg);
+		}
+	}
+	switch (messageType) {
+	  case this.messageTypes.WARNING:
+		dojo.html.addClass(this.containerNode, this.warningCssClass);
+		break;
+	  case this.messageTypes.ERROR:
+		dojo.html.addClass(this.containerNode, this.errorCssClass);
+		break;
+	  case this.messageTypes.FATAL:
+		dojo.html.addClass(this.containerNode, this.fatalCssClass);
+		break;
+	  case this.messageTypes.MESSAGE:
+	  default:
+		dojo.html.addClass(this.containerNode, this.messageCssClass);
+		break;
+	}
+	this.show();
+	var nodeSize = dojo.html.getMarginBox(this.containerNode);
+	if (this.positionDirection.indexOf("-up") >= 0) {
+		this.containerNode.style.left = 0 + "px";
+		this.containerNode.style.top = nodeSize.height + 10 + "px";
+	} else {
+		if (this.positionDirection.indexOf("-left") >= 0) {
+			this.containerNode.style.left = nodeSize.width + 10 + "px";
+			this.containerNode.style.top = 0 + "px";
+		} else {
+			if (this.positionDirection.indexOf("-right") >= 0) {
 				this.containerNode.style.left = 0 - nodeSize.width - 10 + "px";
-				this.containerNode.style.top = 0+"px";
-			}else if(this.positionDirection.indexOf("-down") >= 0){
-				this.containerNode.style.left = 0+"px";
-				this.containerNode.style.top = 0 - nodeSize.height - 10 + "px";
-			}else{
-				dojo.raise(this.widgetId + ".positionDirection is an invalid value: " + this.positionDirection);
-			}
-
-			this.slideAnim = dojo.lfx.html.slideTo(
-				this.containerNode,
-				{ top: 0, left: 0 },
-				450,
-				null,
-				dojo.lang.hitch(this, function(nodes, anim){
-					dojo.lang.setTimeout(dojo.lang.hitch(this, function(evt){
-						// we must hide the iframe in order to fade
-						// TODO: figure out how to fade with a BackgroundIframe
-						if(this.bgIframe){
-							this.bgIframe.hide();
-						}
-						// can't do a fadeHide because we're fading the
-						// inner node rather than the clipping node
-						this.fadeAnim = dojo.lfx.html.fadeOut(
-							this.containerNode,
-							1000,
-							null,
-							dojo.lang.hitch(this, function(evt){
-								this.hide();
-							})).play();
-					}), delay);
-				})).play();
-		},
-
-		_placeClip: function(){
-			var scroll = dojo.html.getScroll();
-			var view = dojo.html.getViewport();
-
-			var nodeSize = dojo.html.getMarginBox(this.containerNode);
-
-			// sets up the size of the clipping node
-			this.clipNode.style.height = nodeSize.height+"px";
-			this.clipNode.style.width = nodeSize.width+"px";
-
-			// sets up the position of the clipping node
-			if(this.positionDirection.match(/^t/)){
-				this.clipNode.style.top = scroll.top+"px";
-			}else if(this.positionDirection.match(/^b/)){
-				this.clipNode.style.top = (view.height - nodeSize.height - 2 + scroll.top)+"px";
-			}
-			if(this.positionDirection.match(/^[tb]r-/)){
-				this.clipNode.style.left = (view.width - nodeSize.width - 1 - scroll.left)+"px";
-			}else if(this.positionDirection.match(/^[tb]l-/)){
-				this.clipNode.style.left = 0 + "px";
-			}
-
-			this.clipNode.style.clip = "rect(0px, " + nodeSize.width + "px, " + nodeSize.height + "px, 0px)";
-
-			if(dojo.render.html.ie){
-				if(!this.bgIframe){
-					this.bgIframe = new dojo.html.BackgroundIframe(this.containerNode);
-					this.bgIframe.setZIndex(this.containerNode);
+				this.containerNode.style.top = 0 + "px";
+			} else {
+				if (this.positionDirection.indexOf("-down") >= 0) {
+					this.containerNode.style.left = 0 + "px";
+					this.containerNode.style.top = 0 - nodeSize.height - 10 + "px";
+				} else {
+					dojo.raise(this.widgetId + ".positionDirection is an invalid value: " + this.positionDirection);
 				}
-				this.bgIframe.onResized();
-				this.bgIframe.show();
 			}
-		},
-
-		onSelect: function(e) {
-			// summary: callback for when user clicks the message
-		},
-
-		show: function(){
-			dojo.widget.Toaster.superclass.show.call(this);
-
-			this._placeClip();
-
-			if(!this._scrollConnected){
-				this._scrollConnected = true;
-				dojo.event.connect(window, "onscroll", this, "_placeClip");
+		}
+	}
+	this.slideAnim = dojo.lfx.html.slideTo(this.containerNode, {top:0, left:0}, 450, null, dojo.lang.hitch(this, function (nodes, anim) {
+		dojo.lang.setTimeout(dojo.lang.hitch(this, function (evt) {
+			if (this.bgIframe) {
+				this.bgIframe.hide();
 			}
-		},
-
-		hide: function(){
-			dojo.widget.Toaster.superclass.hide.call(this);
-
-			if(this._scrollConnected){
-				this._scrollConnected = false;
-				dojo.event.disconnect(window, "onscroll", this, "_placeClip");
-			}
-
-			dojo.html.setOpacity(this.containerNode, 1.0);
+			this.fadeAnim = dojo.lfx.html.fadeOut(this.containerNode, 1000, null, dojo.lang.hitch(this, function (evt) {
+				this.hide();
+			})).play();
+		}), delay);
+	})).play();
+}, _placeClip:function () {
+	var scroll = dojo.html.getScroll();
+	var view = dojo.html.getViewport();
+	var nodeSize = dojo.html.getMarginBox(this.containerNode);
+	this.clipNode.style.height = nodeSize.height + "px";
+	this.clipNode.style.width = nodeSize.width + "px";
+	if (this.positionDirection.match(/^t/)) {
+		this.clipNode.style.top = scroll.top + "px";
+	} else {
+		if (this.positionDirection.match(/^b/)) {
+			this.clipNode.style.top = (view.height - nodeSize.height - 2 + scroll.top) + "px";
 		}
 	}
-);
+	if (this.positionDirection.match(/^[tb]r-/)) {
+		this.clipNode.style.left = (view.width - nodeSize.width - 1 - scroll.left) + "px";
+	} else {
+		if (this.positionDirection.match(/^[tb]l-/)) {
+			this.clipNode.style.left = 0 + "px";
+		}
+	}
+	this.clipNode.style.clip = "rect(0px, " + nodeSize.width + "px, " + nodeSize.height + "px, 0px)";
+	if (dojo.render.html.ie) {
+		if (!this.bgIframe) {
+			this.bgIframe = new dojo.html.BackgroundIframe(this.containerNode);
+			this.bgIframe.setZIndex(this.containerNode);
+		}
+		this.bgIframe.onResized();
+		this.bgIframe.show();
+	}
+}, onSelect:function (e) {
+}, show:function () {
+	dojo.widget.Toaster.superclass.show.call(this);
+	this._placeClip();
+	if (!this._scrollConnected) {
+		this._scrollConnected = true;
+		dojo.event.connect(window, "onscroll", this, "_placeClip");
+	}
+}, hide:function () {
+	dojo.widget.Toaster.superclass.hide.call(this);
+	if (this._scrollConnected) {
+		this._scrollConnected = false;
+		dojo.event.disconnect(window, "onscroll", this, "_placeClip");
+	}
+	dojo.html.setOpacity(this.containerNode, 1);
+}});
 
+
 __CPAN_FILE__ src/widget/ContentPane.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -23486,701 +15634,435 @@
 */
 
 dojo.provide("dojo.widget.ContentPane");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.io.*");
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.string");
 dojo.require("dojo.string.extras");
 dojo.require("dojo.html.style");
-
-
-dojo.widget.defineWidget(
-	"dojo.widget.ContentPane",
-	dojo.widget.HtmlWidget,
-	function(){
-		// summary:
-		//		A widget that can be used as a standalone widget 
-		//		or as a baseclass for other widgets
-		//		Handles replacement of document fragment using either external uri or javascript/java 
-		//		generated markup or DomNode content, instanciating widgets within content and runs scripts.
-		//		Dont confuse it with an iframe, it only needs document fragments.
-		//		It's useful as a child of LayoutContainer, SplitContainer, or TabContainer.
-		//		But note that those classes can contain any widget as a child.
-		// scriptScope: Function
-		//		reference holder to the inline scripts container, if scriptSeparation is true
-		// bindArgs: String[]
-		//		Send in extra args to the dojo.io.bind call
-		
-		// per widgetImpl variables
-		this._styleNodes =  [];
-		this._onLoadStack = [];
-		this._onUnloadStack = [];
-		this._callOnUnload = false;
-		this._ioBindObj;
-		//	Note:
-		//		dont change this value externally
-		this.scriptScope; // undefined for now
-
-		// loading option
-		//	example:
-		//		bindArgs="preventCache:false;" overrides cacheContent
-		this.bindArgs = {};
-
-	
-	}, {
-		isContainer: true,
-
-		// loading options
-		// adjustPaths: Boolean
-		//		adjust relative paths in markup to fit this page
-		adjustPaths: true,
-
-		// href: String
-		//		The href of the content that displays now
-		//		Set this at construction if you want to load externally,
-		//		changing href after creation doesnt have any effect, see setUrl
-		href: "",
-
-		// extractContent Boolean: Extract visible content from inside of <body> .... </body>
-		extractContent: true,
-
-		// parseContent Boolean: Construct all widgets that is in content
-		parseContent:	true,
-
-		// cacheContent Boolean: Cache content retreived externally
-		cacheContent:	true,
-
-		// preload: Boolean
-		//		Force load of data even if pane is hidden.
-		// Note:
-		//		In order to delay download you need to initially hide the node it constructs from
-		preload: false,
-
-		// refreshOnShow: Boolean
-		//		Refresh (re-download) content when pane goes from hidden to shown
-		refreshOnShow: false,
-
-		// handler: String||Function
-		//		Generate pane content from a java function
-		//		The name of the java proxy function
-		handler: "",
-
-		// executeScripts: Boolean
-		//		Run scripts within content, extractContent has NO effect on this.
-		// Note:
-		//		if true scripts in content will be evaled after content is innerHTML'ed
-		executeScripts: false,
-
-		// scriptSeparation: Boolean
-		//		Run scripts in a separate scope, unique for each ContentPane
-		scriptSeparation: true,
-
-		// loadingMessage: String
-		//		Message that shows while downloading
-		loadingMessage: "Loading...",
-
-		// isLoaded: Boolean
-		//		Tells loading status
-		isLoaded: false,
-
-		postCreate: function(args, frag, parentComp){
-			if (this.handler!==""){
-				this.setHandler(this.handler);
+dojo.widget.defineWidget("dojo.widget.ContentPane", dojo.widget.HtmlWidget, function () {
+	this._styleNodes = [];
+	this._onLoadStack = [];
+	this._onUnloadStack = [];
+	this._callOnUnload = false;
+	this._ioBindObj;
+	this.scriptScope;
+	this.bindArgs = {};
+}, {isContainer:true, adjustPaths:true, href:"", extractContent:true, parseContent:true, cacheContent:true, preload:false, refreshOnShow:false, handler:"", executeScripts:false, scriptSeparation:true, loadingMessage:"Loading...", isLoaded:false, postCreate:function (args, frag, parentComp) {
+	if (this.handler !== "") {
+		this.setHandler(this.handler);
+	}
+	if (this.isShowing() || this.preload) {
+		this.loadContents();
+	}
+}, show:function () {
+	if (this.refreshOnShow) {
+		this.refresh();
+	} else {
+		this.loadContents();
+	}
+	dojo.widget.ContentPane.superclass.show.call(this);
+}, refresh:function () {
+	this.isLoaded = false;
+	this.loadContents();
+}, loadContents:function () {
+	if (this.isLoaded) {
+		return;
+	}
+	if (dojo.lang.isFunction(this.handler)) {
+		this._runHandler();
+	} else {
+		if (this.href != "") {
+			this._downloadExternalContent(this.href, this.cacheContent && !this.refreshOnShow);
+		}
+	}
+}, setUrl:function (url) {
+	this.href = url;
+	this.isLoaded = false;
+	if (this.preload || this.isShowing()) {
+		this.loadContents();
+	}
+}, abort:function () {
+	var bind = this._ioBindObj;
+	if (!bind || !bind.abort) {
+		return;
+	}
+	bind.abort();
+	delete this._ioBindObj;
+}, _downloadExternalContent:function (url, useCache) {
+	this.abort();
+	this._handleDefaults(this.loadingMessage, "onDownloadStart");
+	var self = this;
+	this._ioBindObj = dojo.io.bind(this._cacheSetting({url:url, mimetype:"text/html", handler:function (type, data, xhr) {
+		delete self._ioBindObj;
+		if (type == "load") {
+			self.onDownloadEnd.call(self, url, data);
+		} else {
+			var e = {responseText:xhr.responseText, status:xhr.status, statusText:xhr.statusText, responseHeaders:xhr.getAllResponseHeaders(), text:"Error loading '" + url + "' (" + xhr.status + " " + xhr.statusText + ")"};
+			self._handleDefaults.call(self, e, "onDownloadError");
+			self.onLoad();
+		}
+	}}, useCache));
+}, _cacheSetting:function (bindObj, useCache) {
+	for (var x in this.bindArgs) {
+		if (dojo.lang.isUndefined(bindObj[x])) {
+			bindObj[x] = this.bindArgs[x];
+		}
+	}
+	if (dojo.lang.isUndefined(bindObj.useCache)) {
+		bindObj.useCache = useCache;
+	}
+	if (dojo.lang.isUndefined(bindObj.preventCache)) {
+		bindObj.preventCache = !useCache;
+	}
+	if (dojo.lang.isUndefined(bindObj.mimetype)) {
+		bindObj.mimetype = "text/html";
+	}
+	return bindObj;
+}, onLoad:function (e) {
+	this._runStack("_onLoadStack");
+	this.isLoaded = true;
+}, onUnLoad:function (e) {
+	dojo.deprecated(this.widgetType + ".onUnLoad, use .onUnload (lowercased load)", 0.5);
+}, onUnload:function (e) {
+	this._runStack("_onUnloadStack");
+	delete this.scriptScope;
+	if (this.onUnLoad !== dojo.widget.ContentPane.prototype.onUnLoad) {
+		this.onUnLoad.apply(this, arguments);
+	}
+}, _runStack:function (stName) {
+	var st = this[stName];
+	var err = "";
+	var scope = this.scriptScope || window;
+	for (var i = 0; i < st.length; i++) {
+		try {
+			st[i].call(scope);
+		}
+		catch (e) {
+			err += "\n" + st[i] + " failed: " + e.description;
+		}
+	}
+	this[stName] = [];
+	if (err.length) {
+		var name = (stName == "_onLoadStack") ? "addOnLoad" : "addOnUnLoad";
+		this._handleDefaults(name + " failure\n " + err, "onExecError", "debug");
+	}
+}, addOnLoad:function (obj, func) {
+	this._pushOnStack(this._onLoadStack, obj, func);
+}, addOnUnload:function (obj, func) {
+	this._pushOnStack(this._onUnloadStack, obj, func);
+}, addOnUnLoad:function () {
+	dojo.deprecated(this.widgetType + ".addOnUnLoad, use addOnUnload instead. (lowercased Load)", 0.5);
+	this.addOnUnload.apply(this, arguments);
+}, _pushOnStack:function (stack, obj, func) {
+	if (typeof func == "undefined") {
+		stack.push(obj);
+	} else {
+		stack.push(function () {
+			obj[func]();
+		});
+	}
+}, destroy:function () {
+	this.onUnload();
+	dojo.widget.ContentPane.superclass.destroy.call(this);
+}, onExecError:function (e) {
+}, onContentError:function (e) {
+}, onDownloadError:function (e) {
+}, onDownloadStart:function (e) {
+}, onDownloadEnd:function (url, data) {
+	data = this.splitAndFixPaths(data, url);
+	this.setContent(data);
+}, _handleDefaults:function (e, handler, messType) {
+	if (!handler) {
+		handler = "onContentError";
+	}
+	if (dojo.lang.isString(e)) {
+		e = {text:e};
+	}
+	if (!e.text) {
+		e.text = e.toString();
+	}
+	e.toString = function () {
+		return this.text;
+	};
+	if (typeof e.returnValue != "boolean") {
+		e.returnValue = true;
+	}
+	if (typeof e.preventDefault != "function") {
+		e.preventDefault = function () {
+			this.returnValue = false;
+		};
+	}
+	this[handler](e);
+	if (e.returnValue) {
+		switch (messType) {
+		  case true:
+		  case "alert":
+			alert(e.toString());
+			break;
+		  case "debug":
+			dojo.debug(e.toString());
+			break;
+		  default:
+			if (this._callOnUnload) {
+				this.onUnload();
 			}
-			if(this.isShowing() || this.preload){
-				this.loadContents(); 
+			this._callOnUnload = false;
+			if (arguments.callee._loopStop) {
+				dojo.debug(e.toString());
+			} else {
+				arguments.callee._loopStop = true;
+				this._setContent(e.toString());
 			}
-		},
-	
-		show: function(){
-			// if refreshOnShow is true, reload the contents every time; otherwise, load only the first time
-			if(this.refreshOnShow){
-				this.refresh();
-			}else{
-				this.loadContents();
-			}
-			dojo.widget.ContentPane.superclass.show.call(this);
-		},
-	
-		refresh: function(){
-			// summary:
-			//		Force a refresh (re-download) of content, be sure to turn of cache
-			this.isLoaded=false;
-			this.loadContents();
-		},
-	
-		loadContents: function() {
-			// summary:
-			//		Download if isLoaded is false, else ignore
-			if ( this.isLoaded ){
-				return;
-			}
-			if ( dojo.lang.isFunction(this.handler)) {
-				this._runHandler();
-			} else if ( this.href != "" ) {
-				this._downloadExternalContent(this.href, this.cacheContent && !this.refreshOnShow);
-			}
-		},
-		
-		setUrl: function(/*String||dojo.uri.Uri*/ url) {
-			// summary:
-			//		Reset the (external defined) content of this pane and replace with new url
-
-			//	Note:
-			//		It delays the download until widget is shown if preload is false
-			this.href = url;
-			this.isLoaded = false;
-			if ( this.preload || this.isShowing() ){
-				this.loadContents();
-			}
-		},
-
-		abort: function(){
-			// summary
-			//		Aborts a inflight download of content
-			var bind = this._ioBindObj;
-			if(!bind || !bind.abort){ return; }
-			bind.abort();
-			delete this._ioBindObj;
-		},
-	
-		_downloadExternalContent: function(url, useCache) {
-			this.abort();
-			this._handleDefaults(this.loadingMessage, "onDownloadStart");
-			var self = this;
-			this._ioBindObj = dojo.io.bind(
-				this._cacheSetting({
-					url: url,
-					mimetype: "text/html",
-					handler: function(type, data, xhr){
-						delete self._ioBindObj; // makes sure abort doesnt clear cache
-						if(type=="load"){
-							self.onDownloadEnd.call(self, url, data);
-						}else{
-							// XHR isnt a normal JS object, IE doesnt have prototype on XHR so we cant extend it or shallowCopy it
-							var e = {
-								responseText: xhr.responseText,
-								status: xhr.status,
-								statusText: xhr.statusText,
-								responseHeaders: xhr.getAllResponseHeaders(),
-								text: "Error loading '" + url + "' (" + xhr.status + " "+  xhr.statusText + ")"
-							};
-							self._handleDefaults.call(self, e, "onDownloadError");
-							self.onLoad();
+		}
+	}
+	arguments.callee._loopStop = false;
+}, splitAndFixPaths:function (s, url) {
+	var titles = [], scripts = [], tmp = [];
+	var match = [], requires = [], attr = [], styles = [];
+	var str = "", path = "", fix = "", tagFix = "", tag = "", origPath = "";
+	if (!url) {
+		url = "./";
+	}
+	if (s) {
+		var regex = /<title[^>]*>([\s\S]*?)<\/title>/i;
+		while (match = regex.exec(s)) {
+			titles.push(match[1]);
+			s = s.substring(0, match.index) + s.substr(match.index + match[0].length);
+		}
+		if (this.adjustPaths) {
+			var regexFindTag = /<[a-z][a-z0-9]*[^>]*\s(?:(?:src|href|style)=[^>])+[^>]*>/i;
+			var regexFindAttr = /\s(src|href|style)=(['"]?)([\w()\[\]\/.,\\'"-:;#=&?\s@]+?)\2/i;
+			var regexProtocols = /^(?:[#]|(?:(?:https?|ftps?|file|javascript|mailto|news):))/;
+			while (tag = regexFindTag.exec(s)) {
+				str += s.substring(0, tag.index);
+				s = s.substring((tag.index + tag[0].length), s.length);
+				tag = tag[0];
+				tagFix = "";
+				while (attr = regexFindAttr.exec(tag)) {
+					path = "";
+					origPath = attr[3];
+					switch (attr[1].toLowerCase()) {
+					  case "src":
+					  case "href":
+						if (regexProtocols.exec(origPath)) {
+							path = origPath;
+						} else {
+							path = (new dojo.uri.Uri(url, origPath).toString());
 						}
+						break;
+					  case "style":
+						path = dojo.html.fixPathsInCssText(origPath, url);
+						break;
+					  default:
+						path = origPath;
 					}
-				}, useCache)
-			);
-		},
-	
-		_cacheSetting: function(bindObj, useCache){
-			for(var x in this.bindArgs){
-				if(dojo.lang.isUndefined(bindObj[x])){
-					bindObj[x] = this.bindArgs[x];
+					fix = " " + attr[1] + "=" + attr[2] + path + attr[2];
+					tagFix += tag.substring(0, attr.index) + fix;
+					tag = tag.substring((attr.index + attr[0].length), tag.length);
 				}
+				str += tagFix + tag;
 			}
-
-			if(dojo.lang.isUndefined(bindObj.useCache)){ bindObj.useCache = useCache; }
-			if(dojo.lang.isUndefined(bindObj.preventCache)){ bindObj.preventCache = !useCache; }
-			if(dojo.lang.isUndefined(bindObj.mimetype)){ bindObj.mimetype = "text/html"; }
-			return bindObj;
-		},
-
-		onLoad: function(e){
-			// summary:
-			//		Event hook, is called after everything is loaded and widgetified 
-			this._runStack("_onLoadStack");
-			this.isLoaded=true;
-		},
-	
-		onUnLoad: function(e){
-			// summary:
-			//		Deprecated, use onUnload (lowercased load)
-			dojo.deprecated(this.widgetType+".onUnLoad, use .onUnload (lowercased load)", 0.5);
-		},
-
-		onUnload: function(e){
-			// summary:
-			//		Event hook, is called before old content is cleared
-			this._runStack("_onUnloadStack");
-			delete this.scriptScope;
-			// FIXME: remove for 0.5 along with onUnLoad
-			if(this.onUnLoad !== dojo.widget.ContentPane.prototype.onUnLoad){
-				this.onUnLoad.apply(this, arguments);
-			}
-		},
-	
-		_runStack: function(stName){
-			var st = this[stName]; var err = "";
-			var scope = this.scriptScope || window;
-			for(var i = 0;i < st.length; i++){
-				try{
-					st[i].call(scope);
-				}catch(e){ 
-					err += "\n"+st[i]+" failed: "+e.description;
+			s = str + s;
+		}
+		regex = /(?:<(style)[^>]*>([\s\S]*?)<\/style>|<link ([^>]*rel=['"]?stylesheet['"]?[^>]*)>)/i;
+		while (match = regex.exec(s)) {
+			if (match[1] && match[1].toLowerCase() == "style") {
+				styles.push(dojo.html.fixPathsInCssText(match[2], url));
+			} else {
+				if (attr = match[3].match(/href=(['"]?)([^'">]*)\1/i)) {
+					styles.push({path:attr[2]});
 				}
 			}
-			this[stName] = [];
-	
-			if(err.length){
-				var name = (stName== "_onLoadStack") ? "addOnLoad" : "addOnUnLoad";
-				this._handleDefaults(name+" failure\n "+err, "onExecError", "debug");
-			}
-		},
-	
-		addOnLoad: function(obj, func){
-			// summary
-			//		Stores function refs and calls them one by one in the order they came in
-			//		when load event occurs.
-			//	obj: Function||Object?
-			//		holder object
-			//	func: Function
-			//		function that will be called 
-			this._pushOnStack(this._onLoadStack, obj, func);
-		},
-	
-		addOnUnload: function(obj, func){
-			// summary
-			//		Stores function refs and calls them one by one in the order they came in
-			//		when unload event occurs.
-			//	obj: Function||Object
-			//		holder object
-			//	func: Function
-			//		function that will be called 
-			this._pushOnStack(this._onUnloadStack, obj, func);
-		},
-
-		addOnUnLoad: function(){
-			// summary:
-			//		Deprecated use addOnUnload (lower cased load)
-			dojo.deprecated(this.widgetType + ".addOnUnLoad, use addOnUnload instead. (lowercased Load)", 0.5);
-			this.addOnUnload.apply(this, arguments);
-		},
-	
-		_pushOnStack: function(stack, obj, func){
-			if(typeof func == 'undefined') {
-				stack.push(obj);
-			}else{
-				stack.push(function(){ obj[func](); });
-			}
-		},
-	
-		destroy: function(){
-			// make sure we call onUnload
-			this.onUnload();
-			dojo.widget.ContentPane.superclass.destroy.call(this);
-		},
- 
-		onExecError: function(/*Object*/e){
-			// summary:
-			//		called when content script eval error or Java error occurs, preventDefault-able
-			//		default is to debug not alert as in 0.3.1
-		},
-	
-		onContentError: function(/*Object*/e){
-			// summary: 
-			//		called on DOM faults, require fault etc in content, preventDefault-able
-			//		default is to display errormessage inside pane
-		},
-	
-		onDownloadError: function(/*Object*/e){
-			// summary: 
-			//		called when download error occurs, preventDefault-able
-			//		default is to display errormessage inside pane
-		},
-	
-		onDownloadStart: function(/*Object*/e){
-			// summary:
-			//		called before download starts, preventDefault-able
-			//		default is to display loadingMessage inside pane
-			//		by changing e.text in your event handler you can change loading message
-		},
-	
-		// 
-		onDownloadEnd: function(url, data){
-			// summary:
-			//		called when download is finished
-			//
-			//	url String: url that downloaded data
-			//	data String: the markup that was downloaded
-			data = this.splitAndFixPaths(data, url);
-			this.setContent(data);
-		},
-	
-		// useful if user wants to prevent default behaviour ie: _setContent("Error...")
-		_handleDefaults: function(e, handler, messType){
-			if(!handler){ handler = "onContentError"; }
-
-			if(dojo.lang.isString(e)){ e = {text: e}; }
-
-			if(!e.text){ e.text = e.toString(); }
-
-			e.toString = function(){ return this.text; };
-
-			if(typeof e.returnValue != "boolean"){
-				e.returnValue = true; 
-			}
-			if(typeof e.preventDefault != "function"){
-				e.preventDefault = function(){ this.returnValue = false; };
-			}
-			// call our handler
-			this[handler](e);
-			if(e.returnValue){
-				switch(messType){
-					case true: // fallthrough, old compat
-					case "alert":
-						alert(e.toString()); break;
-					case "debug":
-						dojo.debug(e.toString()); break;
-					default:
-					// makes sure scripts can clean up after themselves, before we setContent
-					if(this._callOnUnload){ this.onUnload(); } 
-					// makes sure we dont try to call onUnLoad again on this event,
-					// ie onUnLoad before 'Loading...' but not before clearing 'Loading...'
-					this._callOnUnload = false;
-
-					// we might end up in a endless recursion here if domNode cant append content
-					if(arguments.callee._loopStop){
-						dojo.debug(e.toString());
-					}else{
-						arguments.callee._loopStop = true;
-						this._setContent(e.toString());
+			s = s.substring(0, match.index) + s.substr(match.index + match[0].length);
+		}
+		var regex = /<script([^>]*)>([\s\S]*?)<\/script>/i;
+		var regexSrc = /src=(['"]?)([^"']*)\1/i;
+		var regexDojoJs = /.*(\bdojo\b\.js(?:\.uncompressed\.js)?)$/;
+		var regexInvalid = /(?:var )?\bdjConfig\b(?:[\s]*=[\s]*\{[^}]+\}|\.[\w]*[\s]*=[\s]*[^;\n]*)?;?|dojo\.hostenv\.writeIncludes\(\s*\);?/g;
+		var regexRequires = /dojo\.(?:(?:require(?:After)?(?:If)?)|(?:widget\.(?:manager\.)?registerWidgetPackage)|(?:(?:hostenv\.)?setModulePrefix|registerModulePath)|defineNamespace)\((['"]).*?\1\)\s*;?/;
+		while (match = regex.exec(s)) {
+			if (this.executeScripts && match[1]) {
+				if (attr = regexSrc.exec(match[1])) {
+					if (regexDojoJs.exec(attr[2])) {
+						dojo.debug("Security note! inhibit:" + attr[2] + " from  being loaded again.");
+					} else {
+						scripts.push({path:attr[2]});
 					}
 				}
 			}
-			arguments.callee._loopStop = false;
-		},
-	
-		// pathfixes, require calls, css stuff and neccesary content clean
-		splitAndFixPaths: function(s, url){
-			// summary:
-			// 		adjusts all relative paths in (hopefully) all cases, images, remote scripts, links etc.
-			// 		splits up content in different pieces, scripts, title, style, link and whats left becomes .xml
-			//	s String:	The markup in string
-			//	url (String||dojo.uri.Uri?) url that pulled in markup
-
-			var titles = [], scripts = [],tmp = [];// init vars
-			var match = [], requires = [], attr = [], styles = [];
-			var str = '', path = '', fix = '', tagFix = '', tag = '', origPath = '';
-	
-			if(!url) { url = "./"; } // point to this page if not set
-
-			if(s){ // make sure we dont run regexes on empty content
-
-				/************** <title> ***********/
-				// khtml is picky about dom faults, you can't attach a <style> or <title> node as child of body
-				// must go into head, so we need to cut out those tags
-				var regex = /<title[^>]*>([\s\S]*?)<\/title>/i;
-				while(match = regex.exec(s)){
-					titles.push(match[1]);
-					s = s.substring(0, match.index) + s.substr(match.index + match[0].length);
-				};
-		
-				/************** adjust paths *****************/
-				if(this.adjustPaths){
-					// attributepaths one tag can have multiple paths example:
-					// <input src="..." style="url(..)"/> or <a style="url(..)" href="..">
-					// strip out the tag and run fix on that.
-					// this guarantees that we won't run replace on another tag's attribute + it was easier do
-					var regexFindTag = /<[a-z][a-z0-9]*[^>]*\s(?:(?:src|href|style)=[^>])+[^>]*>/i;
-					var regexFindAttr = /\s(src|href|style)=(['"]?)([\w()\[\]\/.,\\'"-:;#=&?\s@]+?)\2/i;
-					// these are the supported protocols, all other is considered relative
-					var regexProtocols = /^(?:[#]|(?:(?:https?|ftps?|file|javascript|mailto|news):))/;
-		
-					while(tag = regexFindTag.exec(s)){
-						str += s.substring(0, tag.index);
-						s = s.substring((tag.index + tag[0].length), s.length);
-						tag = tag[0];
-			
-						// loop through attributes
-						tagFix = '';
-						while(attr = regexFindAttr.exec(tag)){
-							path = ""; origPath = attr[3];
-							switch(attr[1].toLowerCase()){
-								case "src":// falltrough
-								case "href":
-									if(regexProtocols.exec(origPath)){
-										path = origPath;
-									} else {
-										path = (new dojo.uri.Uri(url, origPath).toString());
-									}
-									break;
-								case "style":// style
-									path = dojo.html.fixPathsInCssText(origPath, url);
-									break;
-								default:
-									path = origPath;
-							}
-							fix = " " + attr[1] + "=" + attr[2] + path + attr[2];
-							// slices up tag before next attribute check
-							tagFix += tag.substring(0, attr.index) + fix;
-							tag = tag.substring((attr.index + attr[0].length), tag.length);
-						}
-						str += tagFix + tag; //dojo.debug(tagFix + tag);
-					}
-					s = str+s;
+			if (match[2]) {
+				var sc = match[2].replace(regexInvalid, "");
+				if (!sc) {
+					continue;
 				}
-
-				/****************  cut out all <style> and <link rel="stylesheet" href=".."> **************/
-				regex = /(?:<(style)[^>]*>([\s\S]*?)<\/style>|<link ([^>]*rel=['"]?stylesheet['"]?[^>]*)>)/i;
-				while(match = regex.exec(s)){
-					if(match[1] && match[1].toLowerCase() == "style"){
-						styles.push(dojo.html.fixPathsInCssText(match[2],url));
-					}else if(attr = match[3].match(/href=(['"]?)([^'">]*)\1/i)){
-						styles.push({path: attr[2]});
-					}
-					s = s.substring(0, match.index) + s.substr(match.index + match[0].length);
-				};
-
-				/***************** cut out all <script> tags, push them into scripts array ***************/
-				var regex = /<script([^>]*)>([\s\S]*?)<\/script>/i;
-				var regexSrc = /src=(['"]?)([^"']*)\1/i;
-				var regexDojoJs = /.*(\bdojo\b\.js(?:\.uncompressed\.js)?)$/;
-				var regexInvalid = /(?:var )?\bdjConfig\b(?:[\s]*=[\s]*\{[^}]+\}|\.[\w]*[\s]*=[\s]*[^;\n]*)?;?|dojo\.hostenv\.writeIncludes\(\s*\);?/g;
-				var regexRequires = /dojo\.(?:(?:require(?:After)?(?:If)?)|(?:widget\.(?:manager\.)?registerWidgetPackage)|(?:(?:hostenv\.)?setModulePrefix|registerModulePath)|defineNamespace)\((['"]).*?\1\)\s*;?/;
-
-				while(match = regex.exec(s)){
-					if(this.executeScripts && match[1]){
-						if(attr = regexSrc.exec(match[1])){
-							// remove a dojo.js or dojo.js.uncompressed.js from remoteScripts
-							// we declare all files named dojo.js as bad, regardless of path
-							if(regexDojoJs.exec(attr[2])){
-								dojo.debug("Security note! inhibit:"+attr[2]+" from  being loaded again.");
-							}else{
-								scripts.push({path: attr[2]});
-							}
-						}
-					}
-					if(match[2]){
-						// remove all invalid variables etc like djConfig and dojo.hostenv.writeIncludes()
-						var sc = match[2].replace(regexInvalid, "");
-						if(!sc){ continue; }
-		
-						// cut out all dojo.require (...) calls, if we have execute 
-						// scripts false widgets dont get there require calls
-						// takes out possible widgetpackage registration as well
-						while(tmp = regexRequires.exec(sc)){
-							requires.push(tmp[0]);
-							sc = sc.substring(0, tmp.index) + sc.substr(tmp.index + tmp[0].length);
-						}
-						if(this.executeScripts){
-							scripts.push(sc);
-						}
-					}
-					s = s.substr(0, match.index) + s.substr(match.index + match[0].length);
+				while (tmp = regexRequires.exec(sc)) {
+					requires.push(tmp[0]);
+					sc = sc.substring(0, tmp.index) + sc.substr(tmp.index + tmp[0].length);
 				}
-
-				/********* extract content *********/
-				if(this.extractContent){
-					match = s.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-					if(match) { s = match[1]; }
+				if (this.executeScripts) {
+					scripts.push(sc);
 				}
-	
-				/*** replace scriptScope prefix in html Event handler
-				* working order: find tags with scriptScope in a tag attribute
-				* then replace all standalone scriptScope occurencies with reference to to this widget
-				* valid onClick="scriptScope.func()" or onClick="scriptScope['func']();scriptScope.i++"
-				* not valid onClick="var.scriptScope.ref" nor onClick="var['scriptScope'].ref" */
-				if(this.executeScripts && this.scriptSeparation){
-					var regex = /(<[a-zA-Z][a-zA-Z0-9]*\s[^>]*?\S=)((['"])[^>]*scriptScope[^>]*>)/;
-					var regexAttr = /([\s'";:\(])scriptScope(.*)/; // we rely on that attribute begins ' or "
-					str = ""; 
-					while(tag = regex.exec(s)){
-						tmp = ((tag[3]=="'") ? '"': "'");fix= "";
-						str += s.substring(0, tag.index) + tag[1];
-						while(attr = regexAttr.exec(tag[2])){
-							tag[2] = tag[2].substring(0, attr.index) + attr[1] + "dojo.widget.byId("+ tmp + this.widgetId + tmp + ").scriptScope" + attr[2];
-						}
-						str += tag[2];
-						s = s.substr(tag.index + tag[0].length);
-					}
-					s = str + s;
-				}
-	 		}
-
-			return {"xml": 		s, // Object
-				"styles":		styles,
-				"titles": 		titles,
-				"requires": 	requires,
-				"scripts": 		scripts,
-				"url": 			url};
-		},
-	
-		
-		_setContent: function(cont){
-			this.destroyChildren();
-	
-			// remove old stylenodes from HEAD
-			for(var i = 0; i < this._styleNodes.length; i++){
-				if(this._styleNodes[i] && this._styleNodes[i].parentNode){
-					this._styleNodes[i].parentNode.removeChild(this._styleNodes[i]);
-				}
 			}
-			this._styleNodes = [];
-
-			try{
-				var node = this.containerNode || this.domNode;
-				while(node.firstChild){
-					dojo.html.destroyNode(node.firstChild);
+			s = s.substr(0, match.index) + s.substr(match.index + match[0].length);
+		}
+		if (this.extractContent) {
+			match = s.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+			if (match) {
+				s = match[1];
+			}
+		}
+		if (this.executeScripts && this.scriptSeparation) {
+			var regex = /(<[a-zA-Z][a-zA-Z0-9]*\s[^>]*?\S=)((['"])[^>]*scriptScope[^>]*>)/;
+			var regexAttr = /([\s'";:\(])scriptScope(.*)/;
+			str = "";
+			while (tag = regex.exec(s)) {
+				tmp = ((tag[3] == "'") ? "\"" : "'");
+				fix = "";
+				str += s.substring(0, tag.index) + tag[1];
+				while (attr = regexAttr.exec(tag[2])) {
+					tag[2] = tag[2].substring(0, attr.index) + attr[1] + "dojo.widget.byId(" + tmp + this.widgetId + tmp + ").scriptScope" + attr[2];
 				}
-				if(typeof cont != "string"){
-					node.appendChild(cont);
-				}else{
-					node.innerHTML = cont;
-				}
-			}catch(e){
-				e.text = "Couldn't load content:"+e.description;
-				this._handleDefaults(e, "onContentError");
+				str += tag[2];
+				s = s.substr(tag.index + tag[0].length);
 			}
-		},
-	
-		setContent: function(data){
-			// summary:
-			//		Replaces old content with data content, include style classes from old content
-			//	data String||DomNode:	new content, be it Document fragment or a DomNode chain
-			//			If data contains style tags, link rel=stylesheet it inserts those styles into DOM
-			this.abort();
-			if(this._callOnUnload){ this.onUnload(); }// this tells a remote script clean up after itself
-			this._callOnUnload = true;
-	
-			if(!data || dojo.html.isNode(data)){
-				// if we do a clean using setContent(""); or setContent(#node) bypass all parsing, extractContent etc
-				this._setContent(data);
-				this.onResized();
-				this.onLoad();
-			}else{
-				// need to run splitAndFixPaths? ie. manually setting content
-				// adjustPaths is taken care of inside splitAndFixPaths
-				if(typeof data.xml != "string"){ 
-					this.href = ""; // so we can refresh safely
-					data = this.splitAndFixPaths(data); 
+			s = str + s;
+		}
+	}
+	return {"xml":s, "styles":styles, "titles":titles, "requires":requires, "scripts":scripts, "url":url};
+}, _setContent:function (cont) {
+	this.destroyChildren();
+	for (var i = 0; i < this._styleNodes.length; i++) {
+		if (this._styleNodes[i] && this._styleNodes[i].parentNode) {
+			this._styleNodes[i].parentNode.removeChild(this._styleNodes[i]);
+		}
+	}
+	this._styleNodes = [];
+	try {
+		var node = this.containerNode || this.domNode;
+		while (node.firstChild) {
+			dojo.html.destroyNode(node.firstChild);
+		}
+		if (typeof cont != "string") {
+			node.appendChild(cont);
+		} else {
+			node.innerHTML = cont;
+		}
+	}
+	catch (e) {
+		e.text = "Couldn't load content:" + e.description;
+		this._handleDefaults(e, "onContentError");
+	}
+}, setContent:function (data) {
+	this.abort();
+	if (this._callOnUnload) {
+		this.onUnload();
+	}
+	this._callOnUnload = true;
+	if (!data || dojo.html.isNode(data)) {
+		this._setContent(data);
+		this.onResized();
+		this.onLoad();
+	} else {
+		if (typeof data.xml != "string") {
+			this.href = "";
+			data = this.splitAndFixPaths(data);
+		}
+		this._setContent(data.xml);
+		for (var i = 0; i < data.styles.length; i++) {
+			if (data.styles[i].path) {
+				this._styleNodes.push(dojo.html.insertCssFile(data.styles[i].path, dojo.doc(), false, true));
+			} else {
+				this._styleNodes.push(dojo.html.insertCssText(data.styles[i]));
+			}
+		}
+		if (this.parseContent) {
+			for (var i = 0; i < data.requires.length; i++) {
+				try {
+					eval(data.requires[i]);
 				}
-
-				this._setContent(data.xml);
-
-				// insert styles from content (in same order they came in)
-				for(var i = 0; i < data.styles.length; i++){
-					if(data.styles[i].path){
-						this._styleNodes.push(dojo.html.insertCssFile(data.styles[i].path, dojo.doc(), false, true));
-					}else{
-						this._styleNodes.push(dojo.html.insertCssText(data.styles[i]));
-					}
+				catch (e) {
+					e.text = "ContentPane: error in package loading calls, " + (e.description || e);
+					this._handleDefaults(e, "onContentError", "debug");
 				}
-	
-				if(this.parseContent){
-					for(var i = 0; i < data.requires.length; i++){
-						try{
-							eval(data.requires[i]);
-						} catch(e){
-							e.text = "ContentPane: error in package loading calls, " + (e.description||e);
-							this._handleDefaults(e, "onContentError", "debug");
-						}
-					}
-				}
-				// need to allow async load, Xdomain uses it
-				// is inline function because we cant send args to dojo.addOnLoad
-				var _self = this;
-				function asyncParse(){
-					if(_self.executeScripts){
-						_self._executeScripts(data.scripts);
-					}
-	
-					if(_self.parseContent){
-						var node = _self.containerNode || _self.domNode;
-						var parser = new dojo.xml.Parse();
-						var frag = parser.parseElement(node, null, true);
-						// createSubComponents not createComponents because frag has already been created
-						dojo.widget.getParser().createSubComponents(frag, _self);
-					}
-	
-					_self.onResized();
-					_self.onLoad();
-				}
-				// try as long as possible to make setContent sync call
-				if(dojo.hostenv.isXDomain && data.requires.length){
-					dojo.addOnLoad(asyncParse);
-				}else{
-					asyncParse();
-				}
 			}
-		},
-
-		setHandler: function(/*Function*/ handler) {
-			// summary:
-			//		Generate pane content from given java function
-			var fcn = dojo.lang.isFunction(handler) ? handler : window[handler];
-			if(!dojo.lang.isFunction(fcn)) {
-				// FIXME: needs testing! somebody with java knowledge needs to try this
-				this._handleDefaults("Unable to set handler, '" + handler + "' not a function.", "onExecError", true);
-				return;
+		}
+		var _self = this;
+		function asyncParse() {
+			if (_self.executeScripts) {
+				_self._executeScripts(data.scripts);
 			}
-			this.handler = function() {
-				return fcn.apply(this, arguments);
+			if (_self.parseContent) {
+				var node = _self.containerNode || _self.domNode;
+				var parser = new dojo.xml.Parse();
+				var frag = parser.parseElement(node, null, true);
+				dojo.widget.getParser().createSubComponents(frag, _self);
 			}
-		},
-	
-		_runHandler: function() {
-			var ret = true;
-			if(dojo.lang.isFunction(this.handler)) {
-				this.handler(this, this.domNode);
-				ret = false;
+			_self.onResized();
+			_self.onLoad();
+		}
+		if (dojo.hostenv.isXDomain && data.requires.length) {
+			dojo.addOnLoad(asyncParse);
+		} else {
+			asyncParse();
+		}
+	}
+}, setHandler:function (handler) {
+	var fcn = dojo.lang.isFunction(handler) ? handler : window[handler];
+	if (!dojo.lang.isFunction(fcn)) {
+		this._handleDefaults("Unable to set handler, '" + handler + "' not a function.", "onExecError", true);
+		return;
+	}
+	this.handler = function () {
+		return fcn.apply(this, arguments);
+	};
+}, _runHandler:function () {
+	var ret = true;
+	if (dojo.lang.isFunction(this.handler)) {
+		this.handler(this, this.domNode);
+		ret = false;
+	}
+	this.onLoad();
+	return ret;
+}, _executeScripts:function (scripts) {
+	var self = this;
+	var tmp = "", code = "";
+	for (var i = 0; i < scripts.length; i++) {
+		if (scripts[i].path) {
+			dojo.io.bind(this._cacheSetting({"url":scripts[i].path, "load":function (type, scriptStr) {
+				dojo.lang.hitch(self, tmp = ";" + scriptStr);
+			}, "error":function (type, error) {
+				error.text = type + " downloading remote script";
+				self._handleDefaults.call(self, error, "onExecError", "debug");
+			}, "mimetype":"text/plain", "sync":true}, this.cacheContent));
+			code += tmp;
+		} else {
+			code += scripts[i];
+		}
+	}
+	try {
+		if (this.scriptSeparation) {
+			delete this.scriptScope;
+			this.scriptScope = new (new Function("_container_", code + "; return this;"))(self);
+		} else {
+			var djg = dojo.global();
+			if (djg.execScript) {
+				djg.execScript(code);
+			} else {
+				var djd = dojo.doc();
+				var sc = djd.createElement("script");
+				sc.appendChild(djd.createTextNode(code));
+				(this.containerNode || this.domNode).appendChild(sc);
 			}
-			this.onLoad();
-			return ret;
-		},
-	
-		_executeScripts: function(scripts) {
-			// loop through the scripts in the order they came in
-			var self = this;
-			var tmp = "", code = "";
-			for(var i = 0; i < scripts.length; i++){
-				if(scripts[i].path){ // remotescript
-					dojo.io.bind(this._cacheSetting({
-						"url": 		scripts[i].path,
-						"load":     function(type, scriptStr){
-								dojo.lang.hitch(self, tmp = ";"+scriptStr);
-						},
-						"error":    function(type, error){
-								error.text = type + " downloading remote script";
-								self._handleDefaults.call(self, error, "onExecError", "debug");
-						},
-						"mimetype": "text/plain",
-						"sync":     true
-					}, this.cacheContent));
-					code += tmp;
-				}else{
-					code += scripts[i];
-				}
-			}
-
-
-			try{
-				if(this.scriptSeparation){
-					// initialize a new anonymous container for our script, dont make it part of this widgets scope chain
-					// instead send in a variable that points to this widget, useful to connect events to onLoad, onUnload etc..
-					delete this.scriptScope;
-					this.scriptScope = new (new Function('_container_', code+'; return this;'))(self);
-				}else{
-					// exec in global, lose the _container_ feature
-					var djg = dojo.global();
-					if(djg.execScript){
-						djg.execScript(code);
-					}else{
-						var djd = dojo.doc();
-						var sc = djd.createElement("script");
-						sc.appendChild(djd.createTextNode(code));
-						(this.containerNode||this.domNode).appendChild(sc);
-					}
-				}
-			}catch(e){
-				e.text = "Error running scripts from content:\n"+e.description;
-				this._handleDefaults(e, "onExecError", "debug");
-			}
 		}
 	}
-);
+	catch (e) {
+		e.text = "Error running scripts from content:\n" + e.description;
+		this._handleDefaults(e, "onExecError", "debug");
+	}
+}});
 
+
 __CPAN_FILE__ src/widget/Select.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -24193,85 +16075,33 @@
 */
 
 dojo.provide("dojo.widget.Select");
-
 dojo.require("dojo.widget.ComboBox");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.html.stabile");
-
-dojo.widget.defineWidget(
-	"dojo.widget.Select",
-	dojo.widget.ComboBox,
-	{
-		/*
-		 * summary
-		 *	Enhanced version of HTML's <select> tag.
-		 *
-		 *	Similar features:
-		 *	  - There is a drop down list of possible values.
-		 *    - You can only enter a value from the drop down list.  (You can't enter an arbitrary value.)
-		 *    - The value submitted with the form is the hidden value (ex: CA),
-		 *      not the displayed value a.k.a. label (ex: California)
-		 *
-		 *	Enhancements over plain HTML version:
-		 *    - If you type in some text then it will filter down the list of possible values in the drop down list.
-		 *    - List can be specified either as a static list or via a javascript function (that can get the list from a server)
-		 */
-
-		//	This value should not be changed by the user
-		forceValidOption: true,
-
-		setValue: function(value) {
-			// summary
-			//	Sets the value of the combobox.
-			//	TODO: this doesn't work correctly when a URL is specified, because we can't
-			//	set the label automatically (based on the specified value)
-			this.comboBoxValue.value = value;
-			dojo.widget.html.stabile.setState(this.widgetId, this.getState(), true);
-			this.onValueChanged(value);
-		},
-
-		setLabel: function(value){
-			// summary
-			//	FIXME, not sure what to do here!
-			//	Users shouldn't call this function; they should be calling setValue() instead
-			this.comboBoxSelectionValue.value = value;
-			if (this.textInputNode.value != value) { // prevent mucking up of selection
-				this.textInputNode.value = value;
-			}
-		},	  
-
-		getLabel: function(){
-			// summary: returns current label
-			return this.comboBoxSelectionValue.value;	// String
-		},
-
-		getState: function() {
-			// summary: returns current value and label
-			return {
-				value: this.getValue(),
-				label: this.getLabel()
-			};	// Object
-		},
-
-		onKeyUp: function(/*Event*/ evt){
-			// summary: internal function
-			this.setLabel(this.textInputNode.value);
-		},
-
-		setState: function(/*Object*/ state) {
-			// summary: internal function to set both value and label
-			this.setValue(state.value);
-			this.setLabel(state.label);
-		},
-
-		setAllValues: function(/*String*/ value1, /*String*/ value2){
-			// summary: internal function to set both value and label
-			this.setLabel(value1);
-			this.setValue(value2);
-		}
+dojo.widget.defineWidget("dojo.widget.Select", dojo.widget.ComboBox, {forceValidOption:true, setValue:function (value) {
+	this.comboBoxValue.value = value;
+	dojo.widget.html.stabile.setState(this.widgetId, this.getState(), true);
+	this.onValueChanged(value);
+}, setLabel:function (value) {
+	this.comboBoxSelectionValue.value = value;
+	if (this.textInputNode.value != value) {
+		this.textInputNode.value = value;
 	}
-);
+}, getLabel:function () {
+	return this.comboBoxSelectionValue.value;
+}, getState:function () {
+	return {value:this.getValue(), label:this.getLabel()};
+}, onKeyUp:function (evt) {
+	this.setLabel(this.textInputNode.value);
+}, setState:function (state) {
+	this.setValue(state.value);
+	this.setLabel(state.label);
+}, setAllValues:function (value1, value2) {
+	this.setLabel(value1);
+	this.setValue(value2);
+}});
 
+
 __CPAN_FILE__ src/widget/TreeTimeoutIterator.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -24283,165 +16113,83 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeTimeoutIterator");
-
-
 dojo.require("dojo.event.*");
-dojo.require("dojo.json")
+dojo.require("dojo.json");
 dojo.require("dojo.io.*");
 dojo.require("dojo.widget.TreeCommon");
-
-
-/**
- * Iterates the tree processNext
- * filterFunc/filterObj called to determine if I need to pass the node
- * 
- * callFunc/callObj called to process the node
- *    callObj.callFunc(elem, iterator) should call iterator.forward() to go on
- *    callFunc may change elem to another object (e.g create widget from it),
- *       keeping its parent and parent position are untouched *
- *
- * finishFunc/finishObj called at the end
- *
- * TODO: it should work only sync-way to solve CPU-hungry tasks 
- */
- dojo.declare(
- 	"dojo.widget.TreeTimeoutIterator",
- 	null,
- 	
-function(elem, callFunc, callObj) {
+dojo.declare("dojo.widget.TreeTimeoutIterator", null, function (elem, callFunc, callObj) {
 	var _this = this;
-	
 	this.currentParent = elem;
-	
 	this.callFunc = callFunc;
-	this.callObj = callObj ? callObj: this;
-	this.stack = [];	
-},
-
-{
-	// public
-	maxStackDepth: Number.POSITIVE_INFINITY,
-	
-	stack: null,
-	currentParent: null,
-		
-	currentIndex: 0,
-	
-	filterFunc: function() { return true },
-	
-	finishFunc: function() { return true },
-	
-	
-	setFilter: function(func, obj) {
-		this.filterFunc = func;
-		this.filterObj = obj;
-	},
-	
-	
-	setMaxLevel: function(level) {
-		this.maxStackDepth = level-2;
-	},
-	
-	forward: function(timeout) {
-		var _this = this;
-		
-		if (this.timeout) { // if timeout required between forwards
-			// tid will be assigned at the end of outer func execution
-			var tid = setTimeout(function() {_this.processNext(); clearTimeout(tid); }, _this.timeout);
-		} else {
-			return this.processNext();
-		}
-	},
-	
-	start: function(processFirst) {
-		if (processFirst) {			
-			return this.callFunc.call(this.callObj, this.currentParent, this);			
-		}
-				
+	this.callObj = callObj ? callObj : this;
+	this.stack = [];
+}, {maxStackDepth:Number.POSITIVE_INFINITY, stack:null, currentParent:null, currentIndex:0, filterFunc:function () {
+	return true;
+}, finishFunc:function () {
+	return true;
+}, setFilter:function (func, obj) {
+	this.filterFunc = func;
+	this.filterObj = obj;
+}, setMaxLevel:function (level) {
+	this.maxStackDepth = level - 2;
+}, forward:function (timeout) {
+	var _this = this;
+	if (this.timeout) {
+		var tid = setTimeout(function () {
+			_this.processNext();
+			clearTimeout(tid);
+		}, _this.timeout);
+	} else {
 		return this.processNext();
-	},
-	
-	/**
-	 * @private
-	 * find next node, move current parent to it if possible & process
-	 */
-	processNext: function() {
-				
-		//dojo.debug("processNext with currentParent "+this.currentParent+" index "+this.currentIndex);
-		var handler;
-		
-		var _this = this;
-		
-		var found;
-		
-		var next;
-			
-		if (this.maxStackDepth == -2) {   
-			return; // process only first cause level=0, do not process children
-		}
-		
-		while (true) {
-			var children = this.currentParent.children;
-		
-			if (children && children.length) {
-		
-				// look for a node that can be the next target
-				do {					
-					next = children[this.currentIndex];
-					//dojo.debug("check "+next);
-				} while (this.currentIndex++ < children.length && !(found = this.filterFunc.call(this.filterObj,next)));
-			
-			
-				if (found) {
-					//dojo.debug("found "+next);
-					// move to next node as new parent if depth is fine
-					// I can't check current children to decide whether to move it or not,
-					// because expand may populate children					
-					if (next.isFolder && this.stack.length <= this.maxStackDepth) {
-						this.moveParent(next,0);
-					}
-					//dojo.debug("Run callFunc on "+next);
-					return this.callFunc.call(this.callObj, next, this);					
+	}
+}, start:function (processFirst) {
+	if (processFirst) {
+		return this.callFunc.call(this.callObj, this.currentParent, this);
+	}
+	return this.processNext();
+}, processNext:function () {
+	var handler;
+	var _this = this;
+	var found;
+	var next;
+	if (this.maxStackDepth == -2) {
+		return;
+	}
+	while (true) {
+		var children = this.currentParent.children;
+		if (children && children.length) {
+			do {
+				next = children[this.currentIndex];
+			} while (this.currentIndex++ < children.length && !(found = this.filterFunc.call(this.filterObj, next)));
+			if (found) {
+				if (next.isFolder && this.stack.length <= this.maxStackDepth) {
+					this.moveParent(next, 0);
 				}
+				return this.callFunc.call(this.callObj, next, this);
 			}
-				
-			if (this.stack.length) {
-				this.popParent();
-				continue;
-			}
-			
-			break;
 		}
-
-		/**
-		 * couldn't find next node to process, finish here
-		 */
-		return this.finishFunc.call(this.finishObj);
-
-	},
-	
-	setFinish: function(func, obj) {
-		this.finishFunc = func;
-		this.finishObj = obj;
-	},
-		
-	popParent: function() {
-		var p = this.stack.pop();
-		//dojo.debug("Pop "+p[0]+":"+p[1]);		
-		this.currentParent = p[0];
-		this.currentIndex = p[1];
-	},
-	
-	moveParent: function(nextParent, nextIndex) {
-		//dojo.debug("Move from "+this.currentParent+":"+this.currentIndex+" to "+nextParent+":"+nextIndex);
-		this.stack.push([this.currentParent, this.currentIndex]);
-		this.currentParent = nextParent;
-		this.currentIndex = nextIndex;
+		if (this.stack.length) {
+			this.popParent();
+			continue;
+		}
+		break;
 	}
+	return this.finishFunc.call(this.finishObj);
+}, setFinish:function (func, obj) {
+	this.finishFunc = func;
+	this.finishObj = obj;
+}, popParent:function () {
+	var p = this.stack.pop();
+	this.currentParent = p[0];
+	this.currentIndex = p[1];
+}, moveParent:function (nextParent, nextIndex) {
+	this.stack.push([this.currentParent, this.currentIndex]);
+	this.currentParent = nextParent;
+	this.currentIndex = nextIndex;
+}});
 
-});
+
 __CPAN_FILE__ src/widget/DocPane.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -24454,382 +16202,256 @@
 */
 
 dojo.provide("dojo.widget.DocPane");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.io.*");
 dojo.require("dojo.event.*");
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.widget.Editor2");
 dojo.require("dojo.widget.Dialog");
-
 dojo.require("dojo.html.common");
 dojo.require("dojo.html.display");
-
-dojo.widget.DocPane = function(){
+dojo.widget.DocPane = function () {
 	dojo.event.topic.subscribe("/docs/function/results", this, "onDocResults");
 	dojo.event.topic.subscribe("/docs/package/results", this, "onPkgResults");
 	dojo.event.topic.subscribe("/docs/function/detail", this, "onDocSelectFunction");
-}
-
-dojo.widget.defineWidget(
-	"dojo.widget.DocPane",
-	dojo.widget.HtmlWidget,
-	{
-		// summary
-		//		This widget is used by the API documentation system;
-		//		Users aren't expected to use this widget directly.
-
-		// Template parameters
-		dialog: null,
-		dialogBg: null,
-		dialogFg: null,
-		logIn: null,
-		edit: null,
-		save: null,
-		cancel: null,
-		detail: null,
-		result: null,
-		packag: null,
-		fn: null,
-		fnLink: null,
-		count: null,
-		row: null,
-		summary: null,
-		description: null,
-		variables: null,
-		vRow: null,
-		vLink: null,
-		vDesc: null,
-		methods: null,
-		mRow: null,
-		mLink: null,
-		mDesc: null,
-		requires: null,
-		rRow: null,
-		rRow2: null,
-		rH3: null,
-		rLink: null,
-		parameters: null,
-		pRow: null,
-		pLink: null,
-		pDesc: null,
-		pOpt: null,
-		pType: null,
-		sType: null,
-		sName: null,
-		sParams: null,
-		sPType: null,
-		sPTypeSave: null,
-		sPName: null,
-		sPNameSave: null,
-		pkgDescription: null,
-
-		// Fields and methods
-		_appends: [],
-		templatePath: dojo.uri.dojoUri("src/widget/templates/DocPane.html"),
-		templateCssPath: dojo.uri.dojoUri("src/widget/templates/DocPane.css"),
-		isContainer: true,
-		fillInTemplate: function(){
-			this.requires = dojo.html.removeNode(this.requires);
-			this.rRow.style.display = "none";
-			this.rRow2.style.display = "none";
-			
-			this.methods = dojo.html.removeNode(this.methods);
-			this.mRow.style.display = "none";
-			
-			this.dialog = dojo.widget.createWidget("dialog", {}, this.dialog);
-			this.dialog.setCloseControl(this.cancel);
-			dojo.html.setOpacity(this.dialogBg, 0.8);
-			dojo.html.setOpacity(this.dialogFg, 1);
-
-			dojo.event.connect(this.edit, "onclick", dojo.lang.hitch(this, function(){
-				if(!this._isLoggedIn){
-					this.dialog.show();
-				}
-			}));
-			dojo.event.connect(this.logIn, "onclick", this, "_logIn");
-			dojo.event.connect(this.save, "onclick", this, "_save");
-			dojo.event.connect(dojo.docs, "logInSuccess", this, "_loggedIn");
-			
-			/*
-			this.pkgDescription = dojo.widget.createWidget("editor2", {
-				toolbarAlwaysVisible: true
-			}, this.pkgDescription);
-			*/
-			
-			this.homeSave = this.containerNode.cloneNode(true);
-			this.detailSave = dojo.html.removeNode(this.detail);
-			this.resultSave = dojo.html.removeNode(this.result);
-			this.packageSave = dojo.html.removeNode(this.packag);
-			this.results = dojo.html.removeNode(this.results);
-			this.rowParent = this.row.parentNode;
-			this.rowSave = dojo.html.removeNode(this.row);
-			this.vParent = this.vRow.parentNode;
-			this.vSave = dojo.html.removeNode(this.vRow);
-			this.pParent = this.pRow.parentNode;
-			this.pSave = dojo.html.removeNode(this.pRow);
-			this.sPTypeSave = dojo.html.removeNode(this.sPType);
-			this.sPNameSave = dojo.html.removeNode(this.sPName);
-			this.navSave = dojo.html.removeNode(this.nav);
-		},
-
-		_logIn: function(){
-			dojo.docs.setUserName(this.userName.value);
-			dojo.docs.setPassword(this.password.value);
-		},
-
-		_loggedIn: function(){
-			this._isLoggedIn = true;
-			this.dialog.hide();
-			this.pkgEditor = dojo.widget.createWidget("editor2", {
-				toolbarAlwaysVisible: true
-			}, this.pkgDescription);
-		},
-
-		_save: function(){
-			if(this.pkgEditor){
-				dojo.docs.savePackage(this._pkgPath, {
-					description: this.pkgEditor.getEditorContent()
-				});
+};
+dojo.widget.defineWidget("dojo.widget.DocPane", dojo.widget.HtmlWidget, {dialog:null, dialogBg:null, dialogFg:null, logIn:null, edit:null, save:null, cancel:null, detail:null, result:null, packag:null, fn:null, fnLink:null, count:null, row:null, summary:null, description:null, variables:null, vRow:null, vLink:null, vDesc:null, methods:null, mRow:null, mLink:null, mDesc:null, requires:null, rRow:null, rRow2:null, rH3:null, rLink:null, parameters:null, pRow:null, pLink:null, pDesc:null, pOpt:null, pType:null, sType:null, sName:null, sParams:null, sPType:null, sPTypeSave:null, sPName:null, sPNameSave:null, pkgDescription:null, _appends:[], templateString:"<div class=\"dojoDocPane\">\n\t<div dojoAttachPoint=\"containerNode\" class=\"container\"></div>\n\n\t<div dojoAttachPoint=\"dialog\" class=\"dialog\">\n\t\t<div class=\"container\" dojoAttachPoint=\"dialogBg\">\n\t\t\t<div class=\"docDialog\" dojoAttachPoint=\"dialogFg\">\n\t\t\t\t<h2>Log In</h2>\n\t\t\t\t<p><input id=\"dojoDocUserName\" dojoAttachPoint=\"userName\"><label for=\"dojoDocUserName\">User Name:</label></p>\n\t\t\t\t<p><input id=\"dojoDocPassword\" dojoAttachPoint=\"password\" type=\"password\"><label for=\"dojoDocPassword\">Password:</label></p>\n\t\t\t\t<p><input type=\"button\" dojoAttachPoint=\"cancel\" value=\"cancel\"> <input type=\"button\" dojoAttachPoint=\"logIn\" value=\"Log In\"></p>\n\t\t\t\t<p></p>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div dojoAttachPoint=\"nav\" class=\"nav\"><span>Detail</span> | <span>Source</span> | <span>Examples</span> | <span>Walkthrough</span></div>\n\n\t<div dojoAttachPoint=\"detail\" class=\"detail\">\n\t\t<h1>Detail: <span class=\"fn\" dojoAttachPoint=\"fn\">dojo.select</span></h1>\n\t\t<div class=\"description\" dojoAttachPoint=\"description\">Description</div>\n\t\t<div class=\"params\" dojoAttachPoint=\"parameters\">\n\t\t\t<h2>Parameters</h2>\n\t\t\t<div class=\"row\" dojoAttachPoint=\"pRow\">\n\t\t\t\t<span dojoAttachPoint=\"pOpt\"><em>optional</em> </span>\n\t\t\t\t<span><span dojoAttachPoint=\"pType\">type</span> </span>\n\t\t\t\t<a href=\"#\" dojoAttachPoint=\"pLink\">variable</a>\n\t\t\t\t<span> - <span dojoAttachPoint=\"pDesc\"></span></span>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"variables\" dojoAttachPoint=\"variables\">\n\t\t\t<h2>Variables</h2>\n\t\t\t<div class\"row\" dojoAttachPoint=\"vRow\">\n\t\t\t\t<a href=\"#\" dojoAttachPoint=\"vLink\">variable</a><span> - <span dojoAttachPoint=\"vDesc\"></span></span>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"signature\">\n\t\t\t<h2>Signature</h2>\n\t\t\t<div class=\"source\">\n\t\t\t\t<span class=\"return\" dojoAttachPoint=\"sType\">returnType</span> \n\t\t\t\t<span class=\"function\" dojoAttachPoint=\"sName\">foo</span>\n\t\t\t\t(<span class=\"params\" dojoAttachPoint=\"sParams\">\n\t\t\t\t\t<span class=\"type\" dojoAttachPoint=\"sPType\">type </span>\n\t\t\t\t\t<span class=\"name\" dojoAttachPoint=\"sPName\">paramName</span>\n\t\t\t\t</span>)\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t\n\t<div dojoAttachPoint=\"result\" class=\"result\">\n\t\t<h1>Search Results: <span dojoAttachPoint=\"count\">0</span> matches</h1>\n\t\t<div class=\"row\" dojoAttachPoint=\"row\">\n\t\t\t<a href=\"#\" dojoAttachPoint=\"fnLink\">dojo.fnLink</a>\n\t\t\t<span> - <span class=\"summary\" dojoAttachPoint=\"summary\">summary</span></span>\n\t\t</div>\n\t</div>\n\n\t<div dojoAttachPoint=\"packag\" class=\"package\">\n\t\t<h1>Package: \n\t\t\t<span class=\"pkg\" dojoAttachPoint=\"pkg\">dojo.package</span> \n\t\t\t<span class=\"edit\" dojoAttachPoint=\"edit\">[edit]</span> \n\t\t\t<span class=\"save\" dojoAttachPoint=\"save\">[save]</span>\n\t\t</h1>\n\t\t<div dojoAttachPoint=\"pkgDescription\" class=\"description\">Description</div>\n\t\t<div class=\"methods\" dojoAttachPoint=\"methods\">\n\t\t\t<h2>Methods</h2>\n\t\t\t<div class=\"row\" dojoAttachPoint=\"mRow\">\n\t\t\t\t<a href=\"#\" dojoAttachPoint=\"mLink\">method</a>\n\t\t\t\t<span> - <span class=\"description\" dojoAttachPoint=\"mDesc\"></span></span>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"requires\" dojoAttachPoint=\"requires\">\n\t\t\t<h2>Requires</h2>\n\t\t\t<div class=\"row\" dojoAttachPoint=\"rRow\">\n\t\t\t\t<h3 dojoAttachPoint=\"rH3\">Environment</h3>\n\t\t\t\t<div dojoAttachPoint=\"rRow2\"><a href=\"#\" dojoAttachPoint=\"rLink\" class=\"package\">require</a></div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n", templateCssString:".dojoDocPane { padding:1em; font: 1em Georgia,Times,\"Times New Roman\",serif; }\n\n.dojoDocPane .container{ }\n\n.dojoDocPane .dialog{ }\n.dojoDocPane .dialog .container{ padding: 0.5em; background: #fff; border: 2px solid #333; }\n.dojoDocPane .dialog .docDialog{ background: transparent; width: 20em; }\n.dojoDocPane .dialog .docDialog h2{ margin-top: 0; padding-top: 0; }\n.dojoDocPane .dialog .docDialog input { float: right; margin-right: 1em; }\n.dojoDocPane .dialog .docDialog p{ clear: both; }\n#dojoDocUserName, #dojoDocPassword { width: 10em; }\n\n.dojoDocPane .nav{ }\n.dojoDocPane .nav span{ }\n\n.dojoDocPane .detail{ }\n.dojoDocPane .detail h1{ }\n.dojoDocPane .detail h1 span.fn{ }\n.dojoDocPane .detail .description{ }\n.dojoDocPane .detail .params{ }\n.dojoDocPane .detail .params .row{ }\n.dojoDocPane .detail .params .row span{ }\n.dojoDocPane .detail .variables{ }\n.dojoDocPane .detail .variables .row{ }\n.dojoDocPane .detail .signature{ }\n.dojoDocPane .detail .signature .source{ white-space: pre; font: 0.8em Monaco, Courier, \"Courier New\", monospace; }\n.dojoDocPane .detail .signature .source .return{ color:#369; }\n.dojoDocPane .detail .signature .source .function{ color: #98543F; font-weight: bold; }\n.dojoDocPane .detail .signature .source .params{ }\n.dojoDocPane .detail .signature .source .params .type{ font-style: italic; color: #d17575; }\n.dojoDocPane .detail .signature .source .params .name{ color: #d14040; }\n\n.dojoDocPane .result{ }\n.dojoDocPane .result h1{ }\n.dojoDocPane .result .row{ }\n.dojoDocPane .result .row .summary{ }\n\n.dojoDocPane .package{ }\n.dojoDocPane .package h1{ }\n.dojoDocPane .package .row{ }\n.dojoDocPane .package .row .summary{ }\n.dojoDocPane .package .description{ }\n.dojoDocPane .package .methods{ }\n.dojoDocPane .package .methods h2{ }\n.dojoDocPane .package .methods .row{ }\n.dojoDocPane .package .methods .row .description{ }\n.dojoDocPane .package .requires{ }\n.dojoDocPane .package .requires h2{ }\n.dojoDocPane .package .requires .row{ }\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/DocPane.css"), isContainer:true, fillInTemplate:function () {
+	this.requires = dojo.html.removeNode(this.requires);
+	this.rRow.style.display = "none";
+	this.rRow2.style.display = "none";
+	this.methods = dojo.html.removeNode(this.methods);
+	this.mRow.style.display = "none";
+	this.dialog = dojo.widget.createWidget("dialog", {}, this.dialog);
+	this.dialog.setCloseControl(this.cancel);
+	dojo.html.setOpacity(this.dialogBg, 0.8);
+	dojo.html.setOpacity(this.dialogFg, 1);
+	dojo.event.connect(this.edit, "onclick", dojo.lang.hitch(this, function () {
+		if (!this._isLoggedIn) {
+			this.dialog.show();
+		}
+	}));
+	dojo.event.connect(this.logIn, "onclick", this, "_logIn");
+	dojo.event.connect(this.save, "onclick", this, "_save");
+	dojo.event.connect(dojo.docs, "logInSuccess", this, "_loggedIn");
+	this.homeSave = this.containerNode.cloneNode(true);
+	this.detailSave = dojo.html.removeNode(this.detail);
+	this.resultSave = dojo.html.removeNode(this.result);
+	this.packageSave = dojo.html.removeNode(this.packag);
+	this.results = dojo.html.removeNode(this.results);
+	this.rowParent = this.row.parentNode;
+	this.rowSave = dojo.html.removeNode(this.row);
+	this.vParent = this.vRow.parentNode;
+	this.vSave = dojo.html.removeNode(this.vRow);
+	this.pParent = this.pRow.parentNode;
+	this.pSave = dojo.html.removeNode(this.pRow);
+	this.sPTypeSave = dojo.html.removeNode(this.sPType);
+	this.sPNameSave = dojo.html.removeNode(this.sPName);
+	this.navSave = dojo.html.removeNode(this.nav);
+}, _logIn:function () {
+	dojo.docs.setUserName(this.userName.value);
+	dojo.docs.setPassword(this.password.value);
+}, _loggedIn:function () {
+	this._isLoggedIn = true;
+	this.dialog.hide();
+	this.pkgEditor = dojo.widget.createWidget("editor2", {toolbarAlwaysVisible:true}, this.pkgDescription);
+}, _save:function () {
+	if (this.pkgEditor) {
+		dojo.docs.savePackage(this._pkgPath, {description:this.pkgEditor.getEditorContent()});
+	}
+}, onDocSelectFunction:function (message) {
+	dojo.debug("onDocSelectFunction()");
+	for (var key in message) {
+		dojo.debug(key + ": " + dojo.json.serialize(message[key]));
+	}
+	var meta = message.meta;
+	if (meta) {
+		var variables = meta.variables;
+		var this_variables = meta.this_variables;
+		var child_variables = meta.child_variables;
+		var parameters = meta.parameters;
+	}
+	var doc = message.doc;
+	dojo.debug(dojo.json.serialize(doc));
+	var appends = this._appends;
+	dojo.html.removeChildren(this.domNode);
+	this.fn.innerHTML = message.name;
+	this.variables.style.display = "block";
+	var all = [];
+	if (variables) {
+		all = variables;
+	}
+	if (this_variables) {
+		all = all.concat(this_variables);
+	}
+	if (child_variables) {
+		all = all.concat(child_variables);
+	}
+	if (!all.length) {
+		this.variables.style.display = "none";
+	} else {
+		for (var i = 0, one; one = all[i]; i++) {
+			this.vLink.innerHTML = one;
+			this.vDesc.parentNode.style.display = "none";
+			appends.push(this.vParent.appendChild(this.vSave.cloneNode(true)));
+		}
+	}
+	this.sParams.innerHTML = "";
+	var first = true;
+	for (var param in parameters) {
+		var paramType = parameters[param].type;
+		var paramSummary = parameters[param].summary;
+		var paramName = param;
+		this.parameters.style.display = "block";
+		this.pLink.innerHTML = paramName;
+		this.pOpt.style.display = "none";
+		if (parameters[param].opt) {
+			this.pOpt.style.display = "inline";
+		}
+		this.pType.parentNode.style.display = "none";
+		if (parameters[param][0]) {
+			this.pType.parentNode.style.display = "inline";
+			this.pType.innerHTML = paramType;
+		}
+		this.pDesc.parentNode.style.display = "none";
+		if (paramSummary) {
+			this.pDesc.parentNode.style.display = "inline";
+			this.pDesc.innerHTML = paramSummary;
+		}
+		appends.push(this.pParent.appendChild(this.pSave.cloneNode(true)));
+		if (!first) {
+			this.sParams.appendChild(document.createTextNode(", "));
+		}
+		first = false;
+		if (paramType) {
+			dojo.debug(this.sPTypeSave);
+			this.sPTypeSave.innerHTML = paramType;
+			this.sParams.appendChild(this.sPTypeSave.cloneNode(true));
+			this.sParams.appendChild(document.createTextNode(" "));
+		}
+		dojo.debug(this.sPNameSave);
+		this.sPNameSave.innerHTML = paramName;
+		this.sParams.appendChild(this.sPNameSave.cloneNode(true));
+	}
+	if (message.returns) {
+		this.sType.innerHTML = message.returns;
+	} else {
+		this.sType.innerHTML = "void";
+	}
+	this.sName.innerHTML = message.name;
+	this.domNode.appendChild(this.navSave);
+	this.domNode.appendChild(this.detailSave.cloneNode(true));
+	for (var i = 0, append; append = appends[i]; i++) {
+		dojo.html.removeNode(append);
+	}
+}, onPkgResult:function (results) {
+	if (this.pkgEditor) {
+		this.pkgEditor.close(true);
+		dojo.debug(this.pkgDescription);
+	}
+	var methods = results.methods;
+	var requires = results.requires;
+	var description = results.description;
+	this._pkgPath = results.path;
+	var requireLinks = [];
+	var appends = this._appends;
+	while (appends.length) {
+		dojo.html.removeNode(appends.shift());
+	}
+	dojo.html.removeChildren(this.domNode);
+	this.pkg.innerHTML = results.pkg;
+	var hasRequires = false;
+	for (var env in requires) {
+		hasRequires = true;
+		this.rH3.style.display = "none";
+		if (env != "common") {
+			this.rH3.style.display = "";
+			this.rH3.innerHTML = env;
+		}
+		for (var i = 0, require; require = requires[env][i]; i++) {
+			requireLinks.push({name:require});
+			this.rLink.innerHTML = require;
+			this.rLink.href = "#" + require;
+			var rRow2 = this.rRow2.parentNode.insertBefore(this.rRow2.cloneNode(true), this.rRow2);
+			rRow2.style.display = "";
+			appends.push(rRow2);
+		}
+		var rRow = this.rRow.parentNode.insertBefore(this.rRow.cloneNode(true), this.rRow);
+		rRow.style.display = "";
+		appends.push(rRow);
+	}
+	if (hasRequires) {
+		appends.push(this.packageSave.appendChild(this.requires.cloneNode(true)));
+	}
+	if (results.size) {
+		for (var i = 0, method; method = methods[i]; i++) {
+			this.mLink.innerHTML = method.name;
+			this.mLink.href = "#" + method.name;
+			this.mDesc.parentNode.style.display = "none";
+			if (method.summary) {
+				this.mDesc.parentNode.style.display = "inline";
+				this.mDesc.innerHTML = method.summary;
 			}
-		},
-
-		onDocSelectFunction: function(message){
-			dojo.debug("onDocSelectFunction()");
-			for(var key in message){
-				dojo.debug(key + ": " + dojo.json.serialize(message[key]));
+			var mRow = this.mRow.parentNode.insertBefore(this.mRow.cloneNode(true), this.mRow);
+			mRow.style.display = "";
+			appends.push(mRow);
+		}
+		appends.push(this.packageSave.appendChild(this.methods.cloneNode(true)));
+	}
+	this.domNode.appendChild(this.packageSave);
+	this.pkgDescription.innerHTML = description;
+	function makeSelect(fOrP, x) {
+		return function (e) {
+			dojo.event.topic.publish("/docs/" + fOrP + "/select", x);
+		};
+	}
+	var as = this.domNode.getElementsByTagName("a");
+	for (var i = 0, a; a = as[i]; i++) {
+		if (a.className == "docMLink") {
+			dojo.event.connect(a, "onclick", makeSelect("function", methods[i]));
+		} else {
+			if (a.className == "docRLink") {
+				dojo.event.connect(a, "onclick", makeSelect("package", requireLinks[i]));
 			}
-			var meta = message.meta;
-			if(meta){
-				var variables = meta.variables;
-				var this_variables = meta.this_variables;
-				var child_variables = meta.child_variables;
-				var parameters = meta.parameters;
-			}
-			var doc = message.doc;
-			dojo.debug(dojo.json.serialize(doc));
-
-			var appends = this._appends;
-			dojo.html.removeChildren(this.domNode);
-			this.fn.innerHTML = message.name;
-
-			this.variables.style.display = "block";
-			var all = [];
-			if(variables){
-				all = variables;
-			}
-			if(this_variables){
-				all = all.concat(this_variables);
-			}
-			if(child_variables){
-				all = all.concat(child_variables);
-			}
-			if(!all.length){
-				this.variables.style.display = "none";
-			}else{
-				for(var i = 0, one; one = all[i]; i++){
-					this.vLink.innerHTML = one;
-					this.vDesc.parentNode.style.display = "none";
-					appends.push(this.vParent.appendChild(this.vSave.cloneNode(true)));
-				}
-			}
-
-			this.sParams.innerHTML = "";
-			var first = true;
-			for(var param in parameters){
-				var paramType = parameters[param].type;
-				var paramSummary = parameters[param].summary;
-				var paramName = param;
-				this.parameters.style.display = "block";		
-				this.pLink.innerHTML = paramName;
-				this.pOpt.style.display = "none";
-				if(parameters[param].opt){
-					this.pOpt.style.display = "inline";				
-				}
-				this.pType.parentNode.style.display = "none";
-				if(parameters[param][0]){
-					this.pType.parentNode.style.display = "inline";
-					this.pType.innerHTML = paramType;
-				}
-				this.pDesc.parentNode.style.display = "none";
-				if(paramSummary){
-					this.pDesc.parentNode.style.display = "inline";
-					this.pDesc.innerHTML = paramSummary;
-				}
-				appends.push(this.pParent.appendChild(this.pSave.cloneNode(true)));
-
-				if(!first) {
-					this.sParams.appendChild(document.createTextNode(", "));
-				}
-				first = false;
-				if(paramType){
-					dojo.debug(this.sPTypeSave);
-					this.sPTypeSave.innerHTML = paramType;
-					this.sParams.appendChild(this.sPTypeSave.cloneNode(true));
-					this.sParams.appendChild(document.createTextNode(" "));
-				}
-				dojo.debug(this.sPNameSave);
-				this.sPNameSave.innerHTML = paramName;
-				this.sParams.appendChild(this.sPNameSave.cloneNode(true))
-			}
-
-			if(message.returns){
-				this.sType.innerHTML = message.returns;
-			}else{
-				this.sType.innerHTML = "void";
-			}
-
-			this.sName.innerHTML = message.name;
-
-			this.domNode.appendChild(this.navSave);
-			this.domNode.appendChild(this.detailSave.cloneNode(true));
-
-			for(var i = 0, append; append = appends[i]; i++){
-				dojo.html.removeNode(append);
-			}
-		},
-
-		onPkgResult: function(/*Object*/ results){
-			if(this.pkgEditor){
-				this.pkgEditor.close(true);
-				dojo.debug(this.pkgDescription);
-			}
-			var methods = results.methods;
-			var requires = results.requires;
-			var description = results.description;
-			this._pkgPath = results.path;
-			var requireLinks = [];
-			var appends = this._appends;
-			while(appends.length){
-				dojo.html.removeNode(appends.shift());
-			}
-
-			dojo.html.removeChildren(this.domNode);
-			
-			this.pkg.innerHTML = results.pkg;
-			
-			var hasRequires = false;
-			for(var env in requires){
-				hasRequires = true;
-
-				this.rH3.style.display = "none";
-				if(env != "common"){
-					this.rH3.style.display = "";
-					this.rH3.innerHTML = env;
-				}
-
-				for(var i = 0, require; require = requires[env][i]; i++){
-					requireLinks.push({
-						name: require
-					});
-					this.rLink.innerHTML = require;
-					this.rLink.href = "#" + require;
-					var rRow2 = this.rRow2.parentNode.insertBefore(this.rRow2.cloneNode(true), this.rRow2);
-					rRow2.style.display = "";
-					appends.push(rRow2);
-				}
-				var rRow = this.rRow.parentNode.insertBefore(this.rRow.cloneNode(true), this.rRow);
-				rRow.style.display = "";
-				appends.push(rRow);
-			}
-			
-			if(hasRequires){
-				appends.push(this.packageSave.appendChild(this.requires.cloneNode(true)));
-			}
-
-			if(results.size){
-				for(var i = 0, method; method = methods[i]; i++){
-					this.mLink.innerHTML = method.name;
-					this.mLink.href = "#" + method.name;
-					this.mDesc.parentNode.style.display = "none";
-					if(method.summary){
-						this.mDesc.parentNode.style.display = "inline";				
-						this.mDesc.innerHTML = method.summary;
-					}
-					var mRow = this.mRow.parentNode.insertBefore(this.mRow.cloneNode(true), this.mRow);
-					mRow.style.display = "";
-					appends.push(mRow);
-				}
-				appends.push(this.packageSave.appendChild(this.methods.cloneNode(true)));
-			}
-
-			this.domNode.appendChild(this.packageSave);
-			
-			/*
-			dojo.debug(description);
-			function fillContent(){
-				this.pkgDescription.replaceEditorContent(description);
-				this.pkgDescription._updateHeight();
-			}
-			if(this.pkgDescription.isLoaded){
-				fillContent();
-			}else{
-				dojo.event.connect(this.pkgDescription, "onLoad", dojo.lang.hitch(this, fillContent));
-			}
-			*/
-			this.pkgDescription.innerHTML = description;
-			
-			function makeSelect(fOrP, x){
-				return function(e) {
-					dojo.event.topic.publish("/docs/" + fOrP + "/select", x);
-				}
-			}
-
-			var as = this.domNode.getElementsByTagName("a");
-			for(var i = 0, a; a = as[i]; i++){
-				if(a.className == "docMLink"){
-					dojo.event.connect(a, "onclick", makeSelect("function", methods[i]));
-				}else if(a.className == "docRLink"){
-					dojo.event.connect(a, "onclick", makeSelect("package", requireLinks[i]));
-				}
-			}
-		},
-
-		onDocResults: function(fns){
-			dojo.debug("onDocResults(): called");
-
-			if(fns.length == 1){
-				dojo.event.topic.publish("/docs/function/select", fns[0]);
-				return;
-			}
-
-			dojo.html.removeChildren(this.domNode);
-
-			this.count.innerHTML = fns.length;
-			var appends = [];
-			for(var i = 0, fn; fn = fns[i]; i++){
-				this.fnLink.innerHTML = fn.name;
-				this.fnLink.href = "#" + fn.name;
-				if(fn.id){
-					this.fnLink.href = this.fnLink.href + "," + fn.id;	
-				}
-				this.summary.parentNode.style.display = "none";
-				if(fn.summary){
-					this.summary.parentNode.style.display = "inline";				
-					this.summary.innerHTML = fn.summary;
-				}
-				appends.push(this.rowParent.appendChild(this.rowSave.cloneNode(true)));
-			}
-
-			function makeSelect(x){
-				return function(e) {
-					dojo.event.topic.publish("/docs/function/select", x);
-				}
-			}
-
-			this.domNode.appendChild(this.resultSave.cloneNode(true));
-			var as = this.domNode.getElementsByTagName("a");
-			for(var i = 0, a; a = as[i]; i++){
-				dojo.event.connect(a, "onclick", makeSelect(fns[i]));
-			}
-
-			for(var i = 0, append; append = appends[i]; i++){
-				this.rowParent.removeChild(append);
-			}
 		}
 	}
-);
+}, onDocResults:function (fns) {
+	dojo.debug("onDocResults(): called");
+	if (fns.length == 1) {
+		dojo.event.topic.publish("/docs/function/select", fns[0]);
+		return;
+	}
+	dojo.html.removeChildren(this.domNode);
+	this.count.innerHTML = fns.length;
+	var appends = [];
+	for (var i = 0, fn; fn = fns[i]; i++) {
+		this.fnLink.innerHTML = fn.name;
+		this.fnLink.href = "#" + fn.name;
+		if (fn.id) {
+			this.fnLink.href = this.fnLink.href + "," + fn.id;
+		}
+		this.summary.parentNode.style.display = "none";
+		if (fn.summary) {
+			this.summary.parentNode.style.display = "inline";
+			this.summary.innerHTML = fn.summary;
+		}
+		appends.push(this.rowParent.appendChild(this.rowSave.cloneNode(true)));
+	}
+	function makeSelect(x) {
+		return function (e) {
+			dojo.event.topic.publish("/docs/function/select", x);
+		};
+	}
+	this.domNode.appendChild(this.resultSave.cloneNode(true));
+	var as = this.domNode.getElementsByTagName("a");
+	for (var i = 0, a; a = as[i]; i++) {
+		dojo.event.connect(a, "onclick", makeSelect(fns[i]));
+	}
+	for (var i = 0, append; append = appends[i]; i++) {
+		this.rowParent.removeChild(append);
+	}
+}});
 
+
 __CPAN_FILE__ src/widget/Editor2Toolbar.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -24842,7 +16464,6 @@
 */
 
 dojo.provide("dojo.widget.Editor2Toolbar");
-
 dojo.require("dojo.lang.*");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.event.*");
@@ -24851,669 +16472,482 @@
 dojo.require("dojo.widget.RichText");
 dojo.require("dojo.widget.PopupContainer");
 dojo.require("dojo.widget.ColorPalette");
-
-dojo.lang.declare("dojo.widget.HandlerManager", null,
-	function(){
-		this._registeredHandlers=[];
-	},
-{
-	// summary: internal base class for handler function management
-	registerHandler: function(/*Object*/obj, /*String*/func){
-		// summary: register a handler
-		// obj: object which has the function to call
-		// func: the function in the object
-		if(arguments.length == 2){
-			this._registeredHandlers.push(function(){return obj[func].apply(obj, arguments);});
-		}else{
-			/* obj: Function
-			    func: null
-			    pId: f */
-			this._registeredHandlers.push(obj);
-		}
-	},
-	removeHandler: function(func){
-		// summary: remove a registered handler
-		for(var i=0;i<this._registeredHandlers.length;i++){
-			if(func === this._registeredHandlers[i]){
-				delete this._registeredHandlers[i];
-				return;
-			}
-		}
-		dojo.debug("HandlerManager handler "+func+" is not registered, can not remove.");
-	},
-	destroy: function(){
-		for(var i=0;i<this._registeredHandlers.length;i++){
+dojo.lang.declare("dojo.widget.HandlerManager", null, function () {
+	this._registeredHandlers = [];
+}, {registerHandler:function (obj, func) {
+	if (arguments.length == 2) {
+		this._registeredHandlers.push(function () {
+			return obj[func].apply(obj, arguments);
+		});
+	} else {
+		this._registeredHandlers.push(obj);
+	}
+}, removeHandler:function (func) {
+	for (var i = 0; i < this._registeredHandlers.length; i++) {
+		if (func === this._registeredHandlers[i]) {
 			delete this._registeredHandlers[i];
+			return;
 		}
 	}
-});
-
+	dojo.debug("HandlerManager handler " + func + " is not registered, can not remove.");
+}, destroy:function () {
+	for (var i = 0; i < this._registeredHandlers.length; i++) {
+		delete this._registeredHandlers[i];
+	}
+}});
 dojo.widget.Editor2ToolbarItemManager = new dojo.widget.HandlerManager;
-dojo.lang.mixin(dojo.widget.Editor2ToolbarItemManager,
-{
-	getToolbarItem: function(/*String*/name){
-		// summary: return a toobar item with the given name
-		var item;
-		name = name.toLowerCase();
-		for(var i=0;i<this._registeredHandlers.length;i++){
-			item = this._registeredHandlers[i](name);
-			if(item){
-				return item;
-			}
+dojo.lang.mixin(dojo.widget.Editor2ToolbarItemManager, {getToolbarItem:function (name) {
+	var item;
+	name = name.toLowerCase();
+	for (var i = 0; i < this._registeredHandlers.length; i++) {
+		item = this._registeredHandlers[i](name);
+		if (item) {
+			return item;
 		}
-
-		switch(name){
-			//button for builtin functions
-			case 'bold':
-			case 'copy':
-			case 'cut':
-			case 'delete':
-			case 'indent':
-			case 'inserthorizontalrule':
-			case 'insertorderedlist':
-			case 'insertunorderedlist':
-			case 'italic':
-			case 'justifycenter':
-			case 'justifyfull':
-			case 'justifyleft':
-			case 'justifyright':
-			case 'outdent':
-			case 'paste':
-			case 'redo':
-			case 'removeformat':
-			case 'selectall':
-			case 'strikethrough':
-			case 'subscript':
-			case 'superscript':
-			case 'underline':
-			case 'undo':
-			case 'unlink':
-			case 'createlink':
-			case 'insertimage':
-			//extra simple buttons
-			case 'htmltoggle':
-				item = new dojo.widget.Editor2ToolbarButton(name);
-				break;
-			case 'forecolor':
-			case 'hilitecolor':
-				item = new dojo.widget.Editor2ToolbarColorPaletteButton(name);
-				break;
-			case 'plainformatblock':
-				item = new dojo.widget.Editor2ToolbarFormatBlockPlainSelect("formatblock");
-				break;
-			case 'formatblock':
-				item = new dojo.widget.Editor2ToolbarFormatBlockSelect("formatblock");
-				break;
-			case 'fontsize':
-				item = new dojo.widget.Editor2ToolbarFontSizeSelect("fontsize");
-				break;
-			case 'fontname':
-				item = new dojo.widget.Editor2ToolbarFontNameSelect("fontname");
-				break;
-			case 'inserttable':
-			case 'insertcell':
-			case 'insertcol':
-			case 'insertrow':
-			case 'deletecells':
-			case 'deletecols':
-			case 'deleterows':
-			case 'mergecells':
-			case 'splitcell':
-				dojo.debug(name + " is implemented in dojo.widget.Editor2Plugin.TableOperation, please require it first.");
-				break;
-			//TODO:
-			case 'inserthtml':
-			case 'blockdirltr':
-			case 'blockdirrtl':
-			case 'dirltr':
-			case 'dirrtl':
-			case 'inlinedirltr':
-			case 'inlinedirrtl':
-				dojo.debug("Not yet implemented toolbar item: "+name);
-				break;
-			default:
-				dojo.debug("dojo.widget.Editor2ToolbarItemManager.getToolbarItem: Unknown toolbar item: "+name);
-		}
-		return item;
 	}
-});
-
+	switch (name) {
+	  case "bold":
+	  case "copy":
+	  case "cut":
+	  case "delete":
+	  case "indent":
+	  case "inserthorizontalrule":
+	  case "insertorderedlist":
+	  case "insertunorderedlist":
+	  case "italic":
+	  case "justifycenter":
+	  case "justifyfull":
+	  case "justifyleft":
+	  case "justifyright":
+	  case "outdent":
+	  case "paste":
+	  case "redo":
+	  case "removeformat":
+	  case "selectall":
+	  case "strikethrough":
+	  case "subscript":
+	  case "superscript":
+	  case "underline":
+	  case "undo":
+	  case "unlink":
+	  case "createlink":
+	  case "insertimage":
+	  case "htmltoggle":
+		item = new dojo.widget.Editor2ToolbarButton(name);
+		break;
+	  case "forecolor":
+	  case "hilitecolor":
+		item = new dojo.widget.Editor2ToolbarColorPaletteButton(name);
+		break;
+	  case "plainformatblock":
+		item = new dojo.widget.Editor2ToolbarFormatBlockPlainSelect("formatblock");
+		break;
+	  case "formatblock":
+		item = new dojo.widget.Editor2ToolbarFormatBlockSelect("formatblock");
+		break;
+	  case "fontsize":
+		item = new dojo.widget.Editor2ToolbarFontSizeSelect("fontsize");
+		break;
+	  case "fontname":
+		item = new dojo.widget.Editor2ToolbarFontNameSelect("fontname");
+		break;
+	  case "inserttable":
+	  case "insertcell":
+	  case "insertcol":
+	  case "insertrow":
+	  case "deletecells":
+	  case "deletecols":
+	  case "deleterows":
+	  case "mergecells":
+	  case "splitcell":
+		dojo.debug(name + " is implemented in dojo.widget.Editor2Plugin.TableOperation, please require it first.");
+		break;
+	  case "inserthtml":
+	  case "blockdirltr":
+	  case "blockdirrtl":
+	  case "dirltr":
+	  case "dirrtl":
+	  case "inlinedirltr":
+	  case "inlinedirrtl":
+		dojo.debug("Not yet implemented toolbar item: " + name);
+		break;
+	  default:
+		dojo.debug("dojo.widget.Editor2ToolbarItemManager.getToolbarItem: Unknown toolbar item: " + name);
+	}
+	return item;
+}});
 dojo.addOnUnload(dojo.widget.Editor2ToolbarItemManager, "destroy");
-
-dojo.declare("dojo.widget.Editor2ToolbarButton", null,
-	function(name){
-		this._name = name;
-//		this._command = editor.getCommand(name);
-	},
-{
-	// summary:
-	//		dojo.widget.Editor2ToolbarButton is the base class for all toolbar item in Editor2Toolbar
-	create: function(/*DomNode*/node, /*dojo.widget.Editor2Toolbar*/toolbar, /*Boolean*/nohover){
-		// summary: create the item
-		// node: the dom node which is the root of this toolbar item
-		// toolbar: the Editor2Toolbar widget this toolbar item belonging to
-		// nohover: whether this item in charge of highlight this item
-		this._domNode = node;
-		var cmd = toolbar.parent.getCommand(this._name); //FIXME: maybe an issue if different instance has different language
-		if(cmd){
-			this._domNode.title = cmd.getText();
+dojo.declare("dojo.widget.Editor2ToolbarButton", null, function (name) {
+	this._name = name;
+}, {create:function (node, toolbar, nohover) {
+	this._domNode = node;
+	var cmd = toolbar.parent.getCommand(this._name);
+	if (cmd) {
+		this._domNode.title = cmd.getText();
+	}
+	this.disableSelection(this._domNode);
+	this._parentToolbar = toolbar;
+	dojo.event.connect(this._domNode, "onclick", this, "onClick");
+	if (!nohover) {
+		dojo.event.connect(this._domNode, "onmouseover", this, "onMouseOver");
+		dojo.event.connect(this._domNode, "onmouseout", this, "onMouseOut");
+	}
+}, disableSelection:function (rootnode) {
+	dojo.html.disableSelection(rootnode);
+	var nodes = rootnode.all || rootnode.getElementsByTagName("*");
+	for (var x = 0; x < nodes.length; x++) {
+		dojo.html.disableSelection(nodes[x]);
+	}
+}, onMouseOver:function () {
+	var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+	if (curInst) {
+		var _command = curInst.getCommand(this._name);
+		if (_command && _command.getState() != dojo.widget.Editor2Manager.commandState.Disabled) {
+			this.highlightToolbarItem();
 		}
-		//make this unselectable: different browsers
-		//use different properties for this, so use
-		//js do it automatically
-		this.disableSelection(this._domNode);
-
-		this._parentToolbar = toolbar;
-		dojo.event.connect(this._domNode, 'onclick', this, 'onClick');
-		if(!nohover){
-			dojo.event.connect(this._domNode, 'onmouseover', this, 'onMouseOver');
-			dojo.event.connect(this._domNode, 'onmouseout', this, 'onMouseOut');
-		}
-	},
-	disableSelection: function(/*DomNode*/rootnode){
-		// summary: disable selection on the passed node and all its children
-		dojo.html.disableSelection(rootnode);
-		var nodes = rootnode.all || rootnode.getElementsByTagName("*");
-		for(var x=0; x<nodes.length; x++){
-			dojo.html.disableSelection(nodes[x]);
-		}
-	},
-	onMouseOver: function(){
+	}
+}, onMouseOut:function () {
+	this.unhighlightToolbarItem();
+}, destroy:function () {
+	this._domNode = null;
+	this._parentToolbar = null;
+}, onClick:function (e) {
+	if (this._domNode && !this._domNode.disabled && this._parentToolbar.checkAvailability()) {
+		e.preventDefault();
+		e.stopPropagation();
 		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-		if(curInst){
+		if (curInst) {
 			var _command = curInst.getCommand(this._name);
-			if(_command && _command.getState() != dojo.widget.Editor2Manager.commandState.Disabled){
-				this.highlightToolbarItem();
+			if (_command) {
+				_command.execute();
 			}
 		}
-	},
-	onMouseOut: function(){
-		this.unhighlightToolbarItem();
-	},
-	destroy: function(){
-		// summary: destructor
-		this._domNode = null;
-//		delete this._command;
-		this._parentToolbar = null;
-	},
-	onClick: function(e){
-		if(this._domNode && !this._domNode.disabled && this._parentToolbar.checkAvailability()){
-			e.preventDefault();
-			e.stopPropagation();
-			var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-			if(curInst){
-				var _command = curInst.getCommand(this._name);
-				if(_command){
-					_command.execute();
+	}
+}, refreshState:function () {
+	var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+	var em = dojo.widget.Editor2Manager;
+	if (curInst) {
+		var _command = curInst.getCommand(this._name);
+		if (_command) {
+			var state = _command.getState();
+			if (state != this._lastState) {
+				switch (state) {
+				  case em.commandState.Latched:
+					this.latchToolbarItem();
+					break;
+				  case em.commandState.Enabled:
+					this.enableToolbarItem();
+					break;
+				  case em.commandState.Disabled:
+				  default:
+					this.disableToolbarItem();
 				}
+				this._lastState = state;
 			}
 		}
-	},
-	refreshState: function(){
-		// summary: update the state of the toolbar item
-		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-		var em = dojo.widget.Editor2Manager;
-		if(curInst){
-			var _command = curInst.getCommand(this._name);
-			if(_command){
-				var state = _command.getState();
-				if(state != this._lastState){
-					switch(state){
-						case em.commandState.Latched:
-							this.latchToolbarItem();
-							break;
-						case em.commandState.Enabled:
-							this.enableToolbarItem();
-							break;
-						case em.commandState.Disabled:
-						default:
-							this.disableToolbarItem();
-					}
-					this._lastState = state;
-				}
-			}
-		}
-		return em.commandState.Enabled;
-	},
-
-	latchToolbarItem: function(){
-		this._domNode.disabled = false;
-		this.removeToolbarItemStyle(this._domNode);
-		dojo.html.addClass(this._domNode, this._parentToolbar.ToolbarLatchedItemStyle);
-	},
-
-	enableToolbarItem: function(){
-		this._domNode.disabled = false;
-		this.removeToolbarItemStyle(this._domNode);
-		dojo.html.addClass(this._domNode, this._parentToolbar.ToolbarEnabledItemStyle);
-	},
-
-	disableToolbarItem: function(){
-		this._domNode.disabled = true;
-		this.removeToolbarItemStyle(this._domNode);
-		dojo.html.addClass(this._domNode, this._parentToolbar.ToolbarDisabledItemStyle);
-	},
-
-	highlightToolbarItem: function(){
-		dojo.html.addClass(this._domNode, this._parentToolbar.ToolbarHighlightedItemStyle);
-	},
-
-	unhighlightToolbarItem: function(){
-		dojo.html.removeClass(this._domNode, this._parentToolbar.ToolbarHighlightedItemStyle);
-	},
-
-	removeToolbarItemStyle: function(){
-		dojo.html.removeClass(this._domNode, this._parentToolbar.ToolbarEnabledItemStyle);
-		dojo.html.removeClass(this._domNode, this._parentToolbar.ToolbarLatchedItemStyle);
-		dojo.html.removeClass(this._domNode, this._parentToolbar.ToolbarDisabledItemStyle);
-		this.unhighlightToolbarItem();
 	}
-});
-
-dojo.declare("dojo.widget.Editor2ToolbarDropDownButton", dojo.widget.Editor2ToolbarButton, {
-	// summary: dojo.widget.Editor2ToolbarDropDownButton extends the basic button with a dropdown list
-
-	onClick: function(){
-		if(this._domNode && !this._domNode.disabled && this._parentToolbar.checkAvailability()){
-			if(!this._dropdown){
-				this._dropdown = dojo.widget.createWidget("PopupContainer", {});
-				this._domNode.appendChild(this._dropdown.domNode);
-			}
-			if(this._dropdown.isShowingNow){
-				this._dropdown.close();
-			}else{
-				this.onDropDownShown();
-				this._dropdown.open(this._domNode, null, this._domNode);
-			}
+	return em.commandState.Enabled;
+}, latchToolbarItem:function () {
+	this._domNode.disabled = false;
+	this.removeToolbarItemStyle(this._domNode);
+	dojo.html.addClass(this._domNode, this._parentToolbar.ToolbarLatchedItemStyle);
+}, enableToolbarItem:function () {
+	this._domNode.disabled = false;
+	this.removeToolbarItemStyle(this._domNode);
+	dojo.html.addClass(this._domNode, this._parentToolbar.ToolbarEnabledItemStyle);
+}, disableToolbarItem:function () {
+	this._domNode.disabled = true;
+	this.removeToolbarItemStyle(this._domNode);
+	dojo.html.addClass(this._domNode, this._parentToolbar.ToolbarDisabledItemStyle);
+}, highlightToolbarItem:function () {
+	dojo.html.addClass(this._domNode, this._parentToolbar.ToolbarHighlightedItemStyle);
+}, unhighlightToolbarItem:function () {
+	dojo.html.removeClass(this._domNode, this._parentToolbar.ToolbarHighlightedItemStyle);
+}, removeToolbarItemStyle:function () {
+	dojo.html.removeClass(this._domNode, this._parentToolbar.ToolbarEnabledItemStyle);
+	dojo.html.removeClass(this._domNode, this._parentToolbar.ToolbarLatchedItemStyle);
+	dojo.html.removeClass(this._domNode, this._parentToolbar.ToolbarDisabledItemStyle);
+	this.unhighlightToolbarItem();
+}});
+dojo.declare("dojo.widget.Editor2ToolbarDropDownButton", dojo.widget.Editor2ToolbarButton, {onClick:function () {
+	if (this._domNode && !this._domNode.disabled && this._parentToolbar.checkAvailability()) {
+		if (!this._dropdown) {
+			this._dropdown = dojo.widget.createWidget("PopupContainer", {});
+			this._domNode.appendChild(this._dropdown.domNode);
 		}
-	},
-	destroy: function(){
-		this.onDropDownDestroy();
-		if(this._dropdown){
-			this._dropdown.destroy();
+		if (this._dropdown.isShowingNow) {
+			this._dropdown.close();
+		} else {
+			this.onDropDownShown();
+			this._dropdown.open(this._domNode, null, this._domNode);
 		}
-		dojo.widget.Editor2ToolbarDropDownButton.superclass.destroy.call(this);
-	},
-	onDropDownShown: function(){},
-	onDropDownDestroy: function(){}
-});
-
-dojo.declare("dojo.widget.Editor2ToolbarColorPaletteButton", dojo.widget.Editor2ToolbarDropDownButton, {
-	// summary: dojo.widget.Editor2ToolbarColorPaletteButton provides a dropdown color palette picker
-
-	onDropDownShown: function(){
-		if(!this._colorpalette){
-			this._colorpalette = dojo.widget.createWidget("ColorPalette", {});
-			this._dropdown.addChild(this._colorpalette);
-
-			this.disableSelection(this._dropdown.domNode);
-			this.disableSelection(this._colorpalette.domNode);
-			//do we need a destory to delete this._colorpalette manually?
-			//I assume as it is added to this._dropdown via addChild, it
-			//should be deleted when this._dropdown is destroyed
-
-			dojo.event.connect(this._colorpalette, "onColorSelect", this, 'setColor');
-			dojo.event.connect(this._dropdown, "open", this, 'latchToolbarItem');
-			dojo.event.connect(this._dropdown, "close", this, 'enableToolbarItem');
+	}
+}, destroy:function () {
+	this.onDropDownDestroy();
+	if (this._dropdown) {
+		this._dropdown.destroy();
+	}
+	dojo.widget.Editor2ToolbarDropDownButton.superclass.destroy.call(this);
+}, onDropDownShown:function () {
+}, onDropDownDestroy:function () {
+}});
+dojo.declare("dojo.widget.Editor2ToolbarColorPaletteButton", dojo.widget.Editor2ToolbarDropDownButton, {onDropDownShown:function () {
+	if (!this._colorpalette) {
+		this._colorpalette = dojo.widget.createWidget("ColorPalette", {});
+		this._dropdown.addChild(this._colorpalette);
+		this.disableSelection(this._dropdown.domNode);
+		this.disableSelection(this._colorpalette.domNode);
+		dojo.event.connect(this._colorpalette, "onColorSelect", this, "setColor");
+		dojo.event.connect(this._dropdown, "open", this, "latchToolbarItem");
+		dojo.event.connect(this._dropdown, "close", this, "enableToolbarItem");
+	}
+}, setColor:function (color) {
+	this._dropdown.close();
+	var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+	if (curInst) {
+		var _command = curInst.getCommand(this._name);
+		if (_command) {
+			_command.execute(color);
 		}
-	},
-	setColor: function(color){
-		this._dropdown.close();
+	}
+}});
+dojo.declare("dojo.widget.Editor2ToolbarFormatBlockPlainSelect", dojo.widget.Editor2ToolbarButton, {create:function (node, toolbar) {
+	this._domNode = node;
+	this._parentToolbar = toolbar;
+	this._domNode = node;
+	this.disableSelection(this._domNode);
+	dojo.event.connect(this._domNode, "onchange", this, "onChange");
+}, destroy:function () {
+	this._domNode = null;
+}, onChange:function () {
+	if (this._parentToolbar.checkAvailability()) {
+		var sv = this._domNode.value.toLowerCase();
 		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-		if(curInst){
+		if (curInst) {
 			var _command = curInst.getCommand(this._name);
-			if(_command){
-				_command.execute(color);
+			if (_command) {
+				_command.execute(sv);
 			}
 		}
 	}
-});
-
-dojo.declare("dojo.widget.Editor2ToolbarFormatBlockPlainSelect", dojo.widget.Editor2ToolbarButton, {
-	// summary: dojo.widget.Editor2ToolbarFormatBlockPlainSelect provides a simple select for setting block format
-
-	create: function(node, toolbar){
-//		dojo.widget.Editor2ToolbarFormatBlockPlainSelect.superclass.create.apply(this, arguments);
-		this._domNode = node;
-		this._parentToolbar = toolbar;
-		//TODO: check node is a select
-		this._domNode = node;
-		this.disableSelection(this._domNode);
-		dojo.event.connect(this._domNode, 'onchange', this, 'onChange');
-	},
-
-	destroy: function(){
-		this._domNode = null;
-	},
-
-	onChange: function(){
-		if(this._parentToolbar.checkAvailability()){
-			var sv = this._domNode.value.toLowerCase();
-			var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-			if(curInst){
-				var _command = curInst.getCommand(this._name);
-				if(_command){
-					_command.execute(sv);
+}, refreshState:function () {
+	if (this._domNode) {
+		dojo.widget.Editor2ToolbarFormatBlockPlainSelect.superclass.refreshState.call(this);
+		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+		if (curInst) {
+			var _command = curInst.getCommand(this._name);
+			if (_command) {
+				var format = _command.getValue();
+				if (!format) {
+					format = "";
 				}
+				dojo.lang.forEach(this._domNode.options, function (item) {
+					if (item.value.toLowerCase() == format.toLowerCase()) {
+						item.selected = true;
+					}
+				});
 			}
 		}
-	},
-
-	refreshState: function(){
-		if(this._domNode){
-			dojo.widget.Editor2ToolbarFormatBlockPlainSelect.superclass.refreshState.call(this);
-			var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-			if(curInst){
-				var _command = curInst.getCommand(this._name);
-				if(_command){
-					var format = _command.getValue();
-					if(!format){ format = ""; }
-					dojo.lang.forEach(this._domNode.options, function(item){
-						if(item.value.toLowerCase() == format.toLowerCase()){
-							item.selected = true;
-						}
-					});
-				}
+	}
+}});
+dojo.declare("dojo.widget.Editor2ToolbarComboItem", dojo.widget.Editor2ToolbarDropDownButton, {href:null, create:function (node, toolbar) {
+	dojo.widget.Editor2ToolbarComboItem.superclass.create.apply(this, arguments);
+	if (!this._contentPane) {
+		dojo.require("dojo.widget.ContentPane");
+		this._contentPane = dojo.widget.createWidget("ContentPane", {preload:"true"});
+		this._contentPane.addOnLoad(this, "setup");
+		this._contentPane.setUrl(this.href);
+	}
+}, onMouseOver:function (e) {
+	if (this._lastState != dojo.widget.Editor2Manager.commandState.Disabled) {
+		dojo.html.addClass(e.currentTarget, this._parentToolbar.ToolbarHighlightedSelectStyle);
+	}
+}, onMouseOut:function (e) {
+	dojo.html.removeClass(e.currentTarget, this._parentToolbar.ToolbarHighlightedSelectStyle);
+}, onDropDownShown:function () {
+	if (!this._dropdown.__addedContentPage) {
+		this._dropdown.addChild(this._contentPane);
+		this._dropdown.__addedContentPage = true;
+	}
+}, setup:function () {
+}, onChange:function (e) {
+	if (this._parentToolbar.checkAvailability()) {
+		var name = e.currentTarget.getAttribute("dropDownItemName");
+		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+		if (curInst) {
+			var _command = curInst.getCommand(this._name);
+			if (_command) {
+				_command.execute(name);
 			}
 		}
 	}
-});
-
-dojo.declare("dojo.widget.Editor2ToolbarComboItem", dojo.widget.Editor2ToolbarDropDownButton,{
-	// summary: dojo.widget.Editor2ToolbarComboItem provides an external loaded dropdown list
-
-	href: null,
-	create: function(node, toolbar){
-		dojo.widget.Editor2ToolbarComboItem.superclass.create.apply(this, arguments);
-		//do not use lazy initilization, as we need the local names in refreshState()
-		if(!this._contentPane){
-			dojo.require("dojo.widget.ContentPane");
-			this._contentPane = dojo.widget.createWidget("ContentPane", {preload: 'true'});
-			this._contentPane.addOnLoad(this, "setup");
-			this._contentPane.setUrl(this.href);
+	this._dropdown.close();
+}, onMouseOverItem:function (e) {
+	dojo.html.addClass(e.currentTarget, this._parentToolbar.ToolbarHighlightedSelectItemStyle);
+}, onMouseOutItem:function (e) {
+	dojo.html.removeClass(e.currentTarget, this._parentToolbar.ToolbarHighlightedSelectItemStyle);
+}});
+dojo.declare("dojo.widget.Editor2ToolbarFormatBlockSelect", dojo.widget.Editor2ToolbarComboItem, {href:dojo.uri.moduleUri("dojo.widget", "templates/Editor2/EditorToolbar_FormatBlock.html"), setup:function () {
+	dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.setup.call(this);
+	var nodes = this._contentPane.domNode.all || this._contentPane.domNode.getElementsByTagName("*");
+	this._blockNames = {};
+	this._blockDisplayNames = {};
+	for (var x = 0; x < nodes.length; x++) {
+		var node = nodes[x];
+		dojo.html.disableSelection(node);
+		var name = node.getAttribute("dropDownItemName");
+		if (name) {
+			this._blockNames[name] = node;
+			var childrennodes = node.getElementsByTagName(name);
+			this._blockDisplayNames[name] = childrennodes[childrennodes.length - 1].innerHTML;
 		}
-	},
-
-	onMouseOver: function(e){
-		if(this._lastState != dojo.widget.Editor2Manager.commandState.Disabled){
-			dojo.html.addClass(e.currentTarget, this._parentToolbar.ToolbarHighlightedSelectStyle);
-		}
-	},
-	onMouseOut:function(e){
-		dojo.html.removeClass(e.currentTarget, this._parentToolbar.ToolbarHighlightedSelectStyle);
-	},
-
-	onDropDownShown: function(){
-		if(!this._dropdown.__addedContentPage){
-			this._dropdown.addChild(this._contentPane);
-			this._dropdown.__addedContentPage = true;
-		}
-	},
-
-	setup: function(){
-		// summary: overload this to connect event
-	},
-
-	onChange: function(e){
-		if(this._parentToolbar.checkAvailability()){
-			var name = e.currentTarget.getAttribute("dropDownItemName");
-			var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-			if(curInst){
-				var _command = curInst.getCommand(this._name);
-				if(_command){
-					_command.execute(name);
-				}
-			}
-		}
-		this._dropdown.close();
-	},
-
-	onMouseOverItem: function(e){
-		dojo.html.addClass(e.currentTarget, this._parentToolbar.ToolbarHighlightedSelectItemStyle);
-	},
-
-	onMouseOutItem: function(e){
-		dojo.html.removeClass(e.currentTarget, this._parentToolbar.ToolbarHighlightedSelectItemStyle);
 	}
-});
-
-dojo.declare("dojo.widget.Editor2ToolbarFormatBlockSelect", dojo.widget.Editor2ToolbarComboItem, {
-	// summary: dojo.widget.Editor2ToolbarFormatBlockSelect is an improved format block setting item
-
-	href: dojo.uri.dojoUri("src/widget/templates/Editor2/EditorToolbar_FormatBlock.html"),
-
-	setup: function(){
-		dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.setup.call(this);
-
-		var nodes = this._contentPane.domNode.all || this._contentPane.domNode.getElementsByTagName("*");
-		this._blockNames = {};
-		this._blockDisplayNames = {};
-		for(var x=0; x<nodes.length; x++){
-			var node = nodes[x];
-			dojo.html.disableSelection(node);
-			var name=node.getAttribute("dropDownItemName")
-			if(name){
-				this._blockNames[name] = node;
-				var childrennodes = node.getElementsByTagName(name);
-				this._blockDisplayNames[name] = childrennodes[childrennodes.length-1].innerHTML;
-			}
+	for (var name in this._blockNames) {
+		dojo.event.connect(this._blockNames[name], "onclick", this, "onChange");
+		dojo.event.connect(this._blockNames[name], "onmouseover", this, "onMouseOverItem");
+		dojo.event.connect(this._blockNames[name], "onmouseout", this, "onMouseOutItem");
+	}
+}, onDropDownDestroy:function () {
+	if (this._blockNames) {
+		for (var name in this._blockNames) {
+			delete this._blockNames[name];
+			delete this._blockDisplayNames[name];
 		}
-		for(var name in this._blockNames){
-			dojo.event.connect(this._blockNames[name], "onclick", this, "onChange");
-			dojo.event.connect(this._blockNames[name], "onmouseover", this, "onMouseOverItem");
-			dojo.event.connect(this._blockNames[name], "onmouseout", this, "onMouseOutItem");
-		}
-	},
-
-	onDropDownDestroy: function(){
-		if(this._blockNames){
-			for(var name in this._blockNames){
-				delete this._blockNames[name];
-				delete this._blockDisplayNames[name];
-			}
-		}
-	},
-
-	refreshState: function(){
-		dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.refreshState.call(this);
-		if(this._lastState != dojo.widget.Editor2Manager.commandState.Disabled){
-			var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-			if(curInst){
-				var _command = curInst.getCommand(this._name);
-				if(_command){
-					var format = _command.getValue();
-					if(format == this._lastSelectedFormat && this._blockDisplayNames){
-						return this._lastState;
-					}
-					this._lastSelectedFormat = format;
-					var label = this._domNode.getElementsByTagName("label")[0];
-					var isSet = false;
-					if(this._blockDisplayNames){
-						for(var name in this._blockDisplayNames){
-							if(name == format){
-								label.innerHTML = 	this._blockDisplayNames[name];
-								isSet = true;
-								break;
-							}
+	}
+}, refreshState:function () {
+	dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.refreshState.call(this);
+	if (this._lastState != dojo.widget.Editor2Manager.commandState.Disabled) {
+		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+		if (curInst) {
+			var _command = curInst.getCommand(this._name);
+			if (_command) {
+				var format = _command.getValue();
+				if (format == this._lastSelectedFormat && this._blockDisplayNames) {
+					return this._lastState;
+				}
+				this._lastSelectedFormat = format;
+				var label = this._domNode.getElementsByTagName("label")[0];
+				var isSet = false;
+				if (this._blockDisplayNames) {
+					for (var name in this._blockDisplayNames) {
+						if (name == format) {
+							label.innerHTML = this._blockDisplayNames[name];
+							isSet = true;
+							break;
 						}
-						if(!isSet){
-							label.innerHTML = "&nbsp;";
-						}
 					}
+					if (!isSet) {
+						label.innerHTML = "&nbsp;";
+					}
 				}
 			}
 		}
-
-		return this._lastState;
 	}
-});
-
-dojo.declare("dojo.widget.Editor2ToolbarFontSizeSelect", dojo.widget.Editor2ToolbarComboItem,{
-	// summary: dojo.widget.Editor2ToolbarFontSizeSelect provides a dropdown list for setting fontsize
-
-	href: dojo.uri.dojoUri("src/widget/templates/Editor2/EditorToolbar_FontSize.html"),
-
-	setup: function(){
-		dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.setup.call(this);
-
-		var nodes = this._contentPane.domNode.all || this._contentPane.domNode.getElementsByTagName("*");
-		this._fontsizes = {};
-		this._fontSizeDisplayNames = {};
-		for(var x=0; x<nodes.length; x++){
-			var node = nodes[x];
-			dojo.html.disableSelection(node);
-			var name=node.getAttribute("dropDownItemName")
-			if(name){
-				this._fontsizes[name] = node;
-				this._fontSizeDisplayNames[name] = node.getElementsByTagName('font')[0].innerHTML;
-			}
+	return this._lastState;
+}});
+dojo.declare("dojo.widget.Editor2ToolbarFontSizeSelect", dojo.widget.Editor2ToolbarComboItem, {href:dojo.uri.moduleUri("dojo.widget", "templates/Editor2/EditorToolbar_FontSize.html"), setup:function () {
+	dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.setup.call(this);
+	var nodes = this._contentPane.domNode.all || this._contentPane.domNode.getElementsByTagName("*");
+	this._fontsizes = {};
+	this._fontSizeDisplayNames = {};
+	for (var x = 0; x < nodes.length; x++) {
+		var node = nodes[x];
+		dojo.html.disableSelection(node);
+		var name = node.getAttribute("dropDownItemName");
+		if (name) {
+			this._fontsizes[name] = node;
+			this._fontSizeDisplayNames[name] = node.getElementsByTagName("font")[0].innerHTML;
 		}
-		for(var name in this._fontsizes){
-			dojo.event.connect(this._fontsizes[name], "onclick", this, "onChange");
-			dojo.event.connect(this._fontsizes[name], "onmouseover", this, "onMouseOverItem");
-			dojo.event.connect(this._fontsizes[name], "onmouseout", this, "onMouseOutItem");
+	}
+	for (var name in this._fontsizes) {
+		dojo.event.connect(this._fontsizes[name], "onclick", this, "onChange");
+		dojo.event.connect(this._fontsizes[name], "onmouseover", this, "onMouseOverItem");
+		dojo.event.connect(this._fontsizes[name], "onmouseout", this, "onMouseOutItem");
+	}
+}, onDropDownDestroy:function () {
+	if (this._fontsizes) {
+		for (var name in this._fontsizes) {
+			delete this._fontsizes[name];
+			delete this._fontSizeDisplayNames[name];
 		}
-	},
-
-	onDropDownDestroy: function(){
-		if(this._fontsizes){
-			for(var name in this._fontsizes){
-				delete this._fontsizes[name];
-				delete this._fontSizeDisplayNames[name];
-			}
-		}
-	},
-
-	refreshState: function(){
-		dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.refreshState.call(this);
-		if(this._lastState != dojo.widget.Editor2Manager.commandState.Disabled){
-			var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-			if(curInst){
-				var _command = curInst.getCommand(this._name);
-				if(_command){
-					var size = _command.getValue();
-					if(size == this._lastSelectedSize && this._fontSizeDisplayNames){
-						return this._lastState;
-					}
-					this._lastSelectedSize = size;
-					var label = this._domNode.getElementsByTagName("label")[0];
-					var isSet = false;
-					if(this._fontSizeDisplayNames){
-						for(var name in this._fontSizeDisplayNames){
-							if(name == size){
-								label.innerHTML = 	this._fontSizeDisplayNames[name];
-								isSet = true;
-								break;
-							}
+	}
+}, refreshState:function () {
+	dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.refreshState.call(this);
+	if (this._lastState != dojo.widget.Editor2Manager.commandState.Disabled) {
+		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+		if (curInst) {
+			var _command = curInst.getCommand(this._name);
+			if (_command) {
+				var size = _command.getValue();
+				if (size == this._lastSelectedSize && this._fontSizeDisplayNames) {
+					return this._lastState;
+				}
+				this._lastSelectedSize = size;
+				var label = this._domNode.getElementsByTagName("label")[0];
+				var isSet = false;
+				if (this._fontSizeDisplayNames) {
+					for (var name in this._fontSizeDisplayNames) {
+						if (name == size) {
+							label.innerHTML = this._fontSizeDisplayNames[name];
+							isSet = true;
+							break;
 						}
-						if(!isSet){
-							label.innerHTML = "&nbsp;";
-						}
 					}
+					if (!isSet) {
+						label.innerHTML = "&nbsp;";
+					}
 				}
 			}
 		}
-		return this._lastState;
 	}
-});
-
-dojo.declare("dojo.widget.Editor2ToolbarFontNameSelect", dojo.widget.Editor2ToolbarFontSizeSelect, {
-	// summary: dojo.widget.Editor2ToolbarFontNameSelect provides a dropdown list for setting fontname
-	href: dojo.uri.dojoUri("src/widget/templates/Editor2/EditorToolbar_FontName.html")
-});
-
-dojo.widget.defineWidget(
-	"dojo.widget.Editor2Toolbar",
-	dojo.widget.HtmlWidget,
-	function(){
-		dojo.event.connect(this, "fillInTemplate", dojo.lang.hitch(this, function(){
-			if(dojo.render.html.ie){
-				this.domNode.style.zoom = 1.0;
+	return this._lastState;
+}});
+dojo.declare("dojo.widget.Editor2ToolbarFontNameSelect", dojo.widget.Editor2ToolbarFontSizeSelect, {href:dojo.uri.moduleUri("dojo.widget", "templates/Editor2/EditorToolbar_FontName.html")});
+dojo.widget.defineWidget("dojo.widget.Editor2Toolbar", dojo.widget.HtmlWidget, function () {
+	dojo.event.connect(this, "fillInTemplate", dojo.lang.hitch(this, function () {
+		if (dojo.render.html.ie) {
+			this.domNode.style.zoom = 1;
+		}
+	}));
+}, {templateString:"<div dojoAttachPoint=\"domNode\" class=\"EditorToolbarDomNode\" unselectable=\"on\">\n\t<table cellpadding=\"3\" cellspacing=\"0\" border=\"0\">\n\t\t<!--\n\t\t\tour toolbar should look something like:\n\n\t\t\t+=======+=======+=======+=============================================+\n\t\t\t| w   w | style | copy  | bo | it | un | le | ce | ri |\n\t\t\t| w w w | style |=======|==============|==============|\n\t\t\t|  w w  | style | paste |  undo | redo | change style |\n\t\t\t+=======+=======+=======+=============================================+\n\t\t-->\n\t\t<tbody>\n\t\t\t<tr valign=\"top\">\n\t\t\t\t<td rowspan=\"2\">\n\t\t\t\t\t<div class=\"bigIcon\" dojoAttachPoint=\"wikiWordButton\"\n\t\t\t\t\t\tdojoOnClick=\"wikiWordClick; buttonClick;\">\n\t\t\t\t\t\t<span style=\"font-size: 30px; margin-left: 5px;\">\n\t\t\t\t\t\t\tW\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</td>\n\t\t\t\t<td rowspan=\"2\">\n\t\t\t\t\t<div class=\"bigIcon\" dojoAttachPoint=\"styleDropdownButton\"\n\t\t\t\t\t\tdojoOnClick=\"styleDropdownClick; buttonClick;\">\n\t\t\t\t\t\t<span unselectable=\"on\"\n\t\t\t\t\t\t\tstyle=\"font-size: 30px; margin-left: 5px;\">\n\t\t\t\t\t\t\tS\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"StyleDropdownContainer\" style=\"display: none;\"\n\t\t\t\t\t\tdojoAttachPoint=\"styleDropdownContainer\">\n\t\t\t\t\t\t<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\"\n\t\t\t\t\t\t\theight=\"100%\" width=\"100%\">\n\t\t\t\t\t\t\t<tr valign=\"top\">\n\t\t\t\t\t\t\t\t<td rowspan=\"2\">\n\t\t\t\t\t\t\t\t\t<div style=\"height: 245px; overflow: auto;\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"normalTextClick\">normal</div>\n\t\t\t\t\t\t\t\t\t\t<h1 class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"h1TextClick\">Heading 1</h1>\n\t\t\t\t\t\t\t\t\t\t<h2 class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"h2TextClick\">Heading 2</h2>\n\t\t\t\t\t\t\t\t\t\t<h3 class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"h3TextClick\">Heading 3</h3>\n\t\t\t\t\t\t\t\t\t\t<h4 class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"h4TextClick\">Heading 4</h4>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"blahTextClick\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"blahTextClick\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"blahTextClick\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\">blah</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<!--\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<span class=\"iconContainer\" dojoOnClick=\"buttonClick;\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"icon justifyleft\" \n\t\t\t\t\t\t\t\t\t\t\tstyle=\"float: left;\">&nbsp;</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<span class=\"iconContainer\" dojoOnClick=\"buttonClick;\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"icon justifycenter\" \n\t\t\t\t\t\t\t\t\t\t\tstyle=\"float: left;\">&nbsp;</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<span class=\"iconContainer\" dojoOnClick=\"buttonClick;\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"icon justifyright\" \n\t\t\t\t\t\t\t\t\t\t\tstyle=\"float: left;\">&nbsp;</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<span class=\"iconContainer\" dojoOnClick=\"buttonClick;\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"icon justifyfull\" \n\t\t\t\t\t\t\t\t\t\t\tstyle=\"float: left;\">&nbsp;</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t-->\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr valign=\"top\">\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\tthud\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</div>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<!-- copy -->\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"copyButton\"\n\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\tdojoOnClick=\"copyClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon copy\" \n\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\tstyle=\"float: left;\">&nbsp;</span> copy\n\t\t\t\t\t</span>\n\t\t\t\t\t<!-- \"droppable\" options -->\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"boldButton\"\n\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\tdojoOnClick=\"boldClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon bold\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"italicButton\"\n\t\t\t\t\t\tdojoOnClick=\"italicClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon italic\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"underlineButton\"\n\t\t\t\t\t\tdojoOnClick=\"underlineClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon underline\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"leftButton\"\n\t\t\t\t\t\tdojoOnClick=\"leftClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon justifyleft\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"fullButton\"\n\t\t\t\t\t\tdojoOnClick=\"fullClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon justifyfull\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"rightButton\"\n\t\t\t\t\t\tdojoOnClick=\"rightClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon justifyright\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>\n\t\t\t\t\t<!-- paste -->\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"pasteButton\"\n\t\t\t\t\t\tdojoOnClick=\"pasteClick; buttonClick;\" unselectable=\"on\">\n\t\t\t\t\t\t<span class=\"icon paste\" style=\"float: left;\" unselectable=\"on\">&nbsp;</span> paste\n\t\t\t\t\t</span>\n\t\t\t\t\t<!-- \"droppable\" options -->\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"undoButton\"\n\t\t\t\t\t\tdojoOnClick=\"undoClick; buttonClick;\" unselectable=\"on\">\n\t\t\t\t\t\t<span class=\"icon undo\" style=\"float: left;\" unselectable=\"on\">&nbsp;</span> undo\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"redoButton\"\n\t\t\t\t\t\tdojoOnClick=\"redoClick; buttonClick;\" unselectable=\"on\">\n\t\t\t\t\t\t<span class=\"icon redo\" style=\"float: left;\" unselectable=\"on\">&nbsp;</span> redo\n\t\t\t\t\t</span>\n\t\t\t\t</td>\t\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n", templateCssString:".StyleDropdownContainer {\n\tposition: absolute;\n\tz-index: 1000;\n\toverflow: auto;\n\tcursor: default;\n\twidth: 250px;\n\theight: 250px;\n\tbackground-color: white;\n\tborder: 1px solid black;\n}\n\n.ColorDropdownContainer {\n\tposition: absolute;\n\tz-index: 1000;\n\toverflow: auto;\n\tcursor: default;\n\twidth: 250px;\n\theight: 150px;\n\tbackground-color: white;\n\tborder: 1px solid black;\n}\n\n.EditorToolbarDomNode {\n\tbackground-image: url(buttons/bg-fade.png);\n\tbackground-repeat: repeat-x;\n\tbackground-position: 0px -50px;\n}\n\n.EditorToolbarSmallBg {\n\tbackground-image: url(images/toolbar-bg.gif);\n\tbackground-repeat: repeat-x;\n\tbackground-position: 0px 0px;\n}\n\n/*\nbody {\n\tbackground:url(images/blank.gif) fixed;\n}*/\n\n.IEFixedToolbar {\n\tposition:absolute;\n\t/* top:0; */\n\ttop: expression(eval((document.documentElement||document.body).scrollTop));\n}\n\ndiv.bigIcon {\n\twidth: 40px;\n\theight: 40px; \n\t/* background-color: white; */\n\t/* border: 1px solid #a6a7a3; */\n\tfont-family: Verdana, Trebuchet, Tahoma, Arial;\n}\n\n.iconContainer {\n\tfont-family: Verdana, Trebuchet, Tahoma, Arial;\n\tfont-size: 13px;\n\tfloat: left;\n\theight: 18px;\n\tdisplay: block;\n\t/* background-color: white; */\n\tcursor: pointer;\n\tpadding: 1px 4px 1px 1px; /* almost the same as a transparent border */\n\tborder: 0px;\n}\n\n.dojoE2TBIcon {\n\tdisplay: block;\n\ttext-align: center;\n\tmin-width: 18px;\n\twidth: 18px;\n\theight: 18px;\n\t/* background-color: #a6a7a3; */\n\tbackground-repeat: no-repeat;\n\tbackground-image: url(buttons/aggregate.gif);\n}\n\n\n.dojoE2TBIcon[class~=dojoE2TBIcon] {\n}\n\n.ToolbarButtonLatched {\n	border: #316ac5 1px solid; !important;\n	padding: 0px 3px 0px 0px; !important; /* make room for border */\n	background-color: #c1d2ee;\n}\n\n.ToolbarButtonHighlighted {\n	border: #316ac5 1px solid; !important;\n	padding: 0px 3px 0px 0px; !important; /* make room for border */\n	background-color: #dff1ff;\n}\n\n.ToolbarButtonDisabled{\n	filter: gray() alpha(opacity=30); /* IE */\n	opacity: 0.30; /* Safari, Opera and Mozilla */\n}\n\n.headingContainer {\n\twidth: 150px;\n\theight: 30px;\n\tmargin: 0px;\n\t/* padding-left: 5px; */\n\toverflow: hidden;\n\tline-height: 25px;\n\tborder-bottom: 1px solid black;\n\tborder-top: 1px solid white;\n}\n\n.EditorToolbarDomNode select {\n\tfont-size: 14px;\n}\n \n.dojoE2TBIcon_Sep { width: 5px; min-width: 5px; max-width: 5px; background-position: 0px 0px}\n.dojoE2TBIcon_Backcolor { background-position: -18px 0px}\n.dojoE2TBIcon_Bold { background-position: -36px 0px}\n.dojoE2TBIcon_Cancel { background-position: -54px 0px}\n.dojoE2TBIcon_Copy { background-position: -72px 0px}\n.dojoE2TBIcon_Link { background-position: -90px 0px}\n.dojoE2TBIcon_Cut { background-position: -108px 0px}\n.dojoE2TBIcon_Delete { background-position: -126px 0px}\n.dojoE2TBIcon_TextColor { background-position: -144px 0px}\n.dojoE2TBIcon_BackgroundColor { background-position: -162px 0px}\n.dojoE2TBIcon_Indent { background-position: -180px 0px}\n.dojoE2TBIcon_HorizontalLine { background-position: -198px 0px}\n.dojoE2TBIcon_Image { background-position: -216px 0px}\n.dojoE2TBIcon_NumberedList { background-position: -234px 0px}\n.dojoE2TBIcon_Table { background-position: -252px 0px}\n.dojoE2TBIcon_BulletedList { background-position: -270px 0px}\n.dojoE2TBIcon_Italic { background-position: -288px 0px}\n.dojoE2TBIcon_CenterJustify { background-position: -306px 0px}\n.dojoE2TBIcon_BlockJustify { background-position: -324px 0px}\n.dojoE2TBIcon_LeftJustify { background-position: -342px 0px}\n.dojoE2TBIcon_RightJustify { background-position: -360px 0px}\n.dojoE2TBIcon_left_to_right { background-position: -378px 0px}\n.dojoE2TBIcon_list_bullet_indent { background-position: -396px 0px}\n.dojoE2TBIcon_list_bullet_outdent { background-position: -414px 0px}\n.dojoE2TBIcon_list_num_indent { background-position: -432px 0px}\n.dojoE2TBIcon_list_num_outdent { background-position: -450px 0px}\n.dojoE2TBIcon_Outdent { background-position: -468px 0px}\n.dojoE2TBIcon_Paste { background-position: -486px 0px}\n.dojoE2TBIcon_Redo { background-position: -504px 0px}\ndojoE2TBIcon_RemoveFormat { background-position: -522px 0px}\n.dojoE2TBIcon_right_to_left { background-position: -540px 0px}\n.dojoE2TBIcon_Save { background-position: -558px 0px}\n.dojoE2TBIcon_Space { background-position: -576px 0px}\n.dojoE2TBIcon_StrikeThrough { background-position: -594px 0px}\n.dojoE2TBIcon_Subscript { background-position: -612px 0px}\n.dojoE2TBIcon_Superscript { background-position: -630px 0px}\n.dojoE2TBIcon_Underline { background-position: -648px 0px}\n.dojoE2TBIcon_Undo { background-position: -666px 0px}\n.dojoE2TBIcon_WikiWord { background-position: -684px 0px}\n\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/EditorToolbar.css"), ToolbarLatchedItemStyle:"ToolbarButtonLatched", ToolbarEnabledItemStyle:"ToolbarButtonEnabled", ToolbarDisabledItemStyle:"ToolbarButtonDisabled", ToolbarHighlightedItemStyle:"ToolbarButtonHighlighted", ToolbarHighlightedSelectStyle:"ToolbarSelectHighlighted", ToolbarHighlightedSelectItemStyle:"ToolbarSelectHighlightedItem", postCreate:function () {
+	var nodes = dojo.html.getElementsByClass("dojoEditorToolbarItem", this.domNode);
+	this.items = {};
+	for (var x = 0; x < nodes.length; x++) {
+		var node = nodes[x];
+		var itemname = node.getAttribute("dojoETItemName");
+		if (itemname) {
+			var item = dojo.widget.Editor2ToolbarItemManager.getToolbarItem(itemname);
+			if (item) {
+				item.create(node, this);
+				this.items[itemname.toLowerCase()] = item;
+			} else {
+				node.style.display = "none";
 			}
-		}));
-	},
-	{
-		// summary:
-		//		dojo.widget.Editor2Toolbar is the main widget for the toolbar associated with an Editor2
-
-		templatePath: dojo.uri.dojoUri("src/widget/templates/EditorToolbar.html"),
-		templateCssPath: dojo.uri.dojoUri("src/widget/templates/EditorToolbar.css"),
-
-		// ToolbarLatchedItemStyle: String: class name for latched toolbar button items
-		ToolbarLatchedItemStyle: "ToolbarButtonLatched",
-
-		// ToolbarEnabledItemStyle: String: class name for enabled toolbar button items
-		ToolbarEnabledItemStyle: "ToolbarButtonEnabled",
-
-		// ToolbarDisabledItemStyle: String: class name for disabled toolbar button items
-		ToolbarDisabledItemStyle: "ToolbarButtonDisabled",
-
-		// ToolbarHighlightedItemStyle: String: class name for highlighted toolbar button items
-		ToolbarHighlightedItemStyle: "ToolbarButtonHighlighted",
-
-		// ToolbarHighlightedSelectStyle: String: class name for highlighted toolbar select items
-		ToolbarHighlightedSelectStyle: "ToolbarSelectHighlighted",
-
-		// ToolbarHighlightedSelectItemStyle: String: class name for highlighted toolbar select dropdown items
-		ToolbarHighlightedSelectItemStyle: "ToolbarSelectHighlightedItem",
-
-//		itemNodeType: 'span', //all the items (with attribute dojoETItemName set) defined in the toolbar should be a of this type
-
-		postCreate: function(){
-			var nodes = dojo.html.getElementsByClass("dojoEditorToolbarItem", this.domNode/*, this.itemNodeType*/);
-
-			this.items = {};
-			for(var x=0; x<nodes.length; x++){
-				var node = nodes[x];
-				var itemname = node.getAttribute("dojoETItemName");
-				if(itemname){
-					var item = dojo.widget.Editor2ToolbarItemManager.getToolbarItem(itemname);
-					if(item){
-						item.create(node, this);
-						this.items[itemname.toLowerCase()] = item;
-					}else{
-						//hide unsupported toolbar items
-						node.style.display = "none";
-					}
-				}
-			}
-		},
-
-		update: function(){
-			// summary: update all the toolbar items
-			for(var cmd in this.items){
-				this.items[cmd].refreshState();
-			}
-		},
-
-		shareGroup: '',
-		checkAvailability: function(){
-			// summary: returns whether items in this toolbar can be executed
-			// description: 
-			//		For unshared toolbar, when clicking on a toolbar, the corresponding
-			//		editor will be focused, and this function always return true. For shared
-			//		toolbar, if the current focued editor is not one of the instances sharing
-			//		this toolbar, this function return false, otherwise true.
-			if(!this.shareGroup){
-				this.parent.focus();
-				return true;
-			}
-			var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-			if(this.shareGroup == curInst.toolbarGroup){
-				return true;
-			}
-			return false;
-		},
-		destroy: function(){
-			for(var it in this.items){
-				this.items[it].destroy();
-				delete this.items[it];
-			}
-			dojo.widget.Editor2Toolbar.superclass.destroy.call(this);
 		}
 	}
-);
+}, update:function () {
+	for (var cmd in this.items) {
+		this.items[cmd].refreshState();
+	}
+}, shareGroup:"", checkAvailability:function () {
+	if (!this.shareGroup) {
+		this.parent.focus();
+		return true;
+	}
+	var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+	if (this.shareGroup == curInst.toolbarGroup) {
+		return true;
+	}
+	return false;
+}, destroy:function () {
+	for (var it in this.items) {
+		this.items[it].destroy();
+		delete this.items[it];
+	}
+	dojo.widget.Editor2Toolbar.superclass.destroy.call(this);
+}});
 
+
 __CPAN_FILE__ src/widget/Slider.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -25526,923 +16960,469 @@
 */
 
 dojo.provide("dojo.widget.Slider");
-
-// load dependencies
 dojo.require("dojo.event.*");
 dojo.require("dojo.dnd.*");
-// dojo.dnd.* doesn't include this package, because it's not in __package__.js
 dojo.require("dojo.dnd.HtmlDragMove");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.html.layout");
-
-
-dojo.widget.defineWidget (
-	"dojo.widget.Slider",
-	dojo.widget.HtmlWidget,
-	{
-		// summary
-		//	Slider Widget.
-		//	
-		//	The slider widget comes in three forms:
-		//	 1. Base Slider widget which supports movement in x and y dimensions
-		//	 2. Vertical Slider (SliderVertical) widget which supports movement
-		//	    only in the y dimension.
-		//	 3. Horizontal Slider (SliderHorizontal) widget which supports movement
-		//	    only in the x dimension.
-		//
-		//	The key objects in the widget are:
-		//	 - a container div which displays a bar in the background (Slider object)
-		//	 - a handle inside the container div, which represents the value
-		//	   (sliderHandle DOM node)
-		//	 - the object which moves the handle (_handleMove is of type 
-		//	   SliderDragMoveSource)
-		//
-		//	The values for the slider are calculated by grouping pixels together, 
-		//	based on the number of values to be represented by the slider.
-		//	The number of pixels in a group is called the _valueSize
-		//	 e.g. if slider is 150 pixels long, and is representing the values
-		//	      0,1,...10 then pixels are grouped into lots of 15 (_valueSize), where:
-		//	        value 0 maps to pixels  0 -  7
-		//	              1                 8 - 22
-		//	              2                23 - 37 etc.
-		//	The accuracy of the slider is limited to the number of pixels
-		//	(i.e tiles > pixels will result in the slider not being able to
-		//	 represent some values).
-
-		// minimumX: Number
-		//	minimum value to be represented by slider in the horizontal direction
-		minimumX: 0,
-
-		// minimumY: Number
-		//	minimum value to be represented by slider in the vertical direction
-		minimumY: 0,
-
-		// maximumX: Number
-		//	maximum value to be represented by slider in the horizontal direction
-		maximumX: 10,
-
-		// maximumY: Number
-		//	maximum value to be represented by slider in the vertical direction
-		maximumY: 10,
-
-		// snapValuesX: Number
-		//	number of values to be represented by slider in the horizontal direction
-		//	=0 means no snapping
-		snapValuesX: 0,
-
-		// snapValuesY: Number
-		//	number of values to be represented by slider in the vertical direction
-		//	=0 means no snapping
-		snapValuesY: 0,
-
-		// should the handle snap to the grid or remain where it was dragged to?
-		// FIXME: snapToGrid=false is logically in conflict with setting snapValuesX and snapValuesY
-		_snapToGrid: true,
-
-		// isEnableX: Boolean
-		//	enables (disables) sliding in the horizontal direction
-		isEnableX: true,
-
-		// isEnableY: Boolean
-		//	enables (disables) sliding in the vertical direction
-		isEnableY: true,
-
-		// value size (pixels) in the x dimension
-		_valueSizeX: 0.0,
-		// value size (pixels) in the y dimension
-		_valueSizeY: 0.0,
-		// left most edge of constraining container (pixels) in the X dimension
-		_minX: 0,
-		// top most edge of constraining container (pixels) in the Y dimension
-		_minY: 0,
-		// constrained slider size (pixels) in the x dimension
-		_constraintWidth: 0,
-		// constrained slider size (pixels) in the y dimension
-		_constraintHeight: 0,
-		// progress image right clip value (pixels) in the X dimension
-		_clipLeft: 0,
-		// progress image left clip value (pixels) in the X dimension
-		_clipRight: 0,
-		// progress image top clip value (pixels) in the Y dimension
-		_clipTop: 0,
-		// progress image bottom clip value (pixels) in the Y dimension
-		_clipBottom: 0,
-		// half the size of the slider handle (pixels) in the X dimension
-		_clipXdelta: 0,
-		// half the size of the slider handle (pixels) in the Y dimension
-		_clipYdelta: 0,
-
-		// initialValueX: Number
-		//	initial value in the x dimension
-		initialValueX: 0,
-
-		// initialValueY: Number
-		//	initial value in the y dimension
-		initialValueY: 0,
-
-		// flipX: Boolean
-		//	values decrease in the X dimension
-		flipX: false,
-
-		// flipY: Boolean
-		//	values decrease in the Y dimension
-		flipY: false,
-
-		// clickSelect: Boolean
-		//	enables (disables) the user to click on the slider to set the position
-		clickSelect: true,
-
-		// activeDrag: Boolean
-		//	disables (enables) the value to change while you are dragging, or just after drag finishes
-		activeDrag: false,
-
-		templateCssPath: dojo.uri.dojoUri ("src/widget/templates/Slider.css"),
-		templatePath: dojo.uri.dojoUri ("src/widget/templates/Slider.html"),
-
-		// This is set to true when a drag is started, so that it is not confused
-		// with a click
-		_isDragInProgress: false,
-
-		// default user style attributes
-
-		// bottomButtonSrc: String
-		//	down arrow graphic URL
-		bottomButtonSrc: dojo.uri.dojoUri("src/widget/templates/images/slider_down_arrow.png"),
-
-		// topButtonSrc: String
-		//	up arrow graphic URL
-		topButtonSrc: dojo.uri.dojoUri("src/widget/templates/images/slider_up_arrow.png"),
-
-		// leftButtonSrc: String
-		//	left arrow graphic URL
-		leftButtonSrc: dojo.uri.dojoUri("src/widget/templates/images/slider_left_arrow.png"),
-
-		// rightButtonSrc: String
-		//	right arrow graphic URL
-		rightButtonSrc: dojo.uri.dojoUri("src/widget/templates/images/slider_right_arrow.png"),
-
-		// backgroundSrc: String
-		//	slider background graphic URL
-		backgroundSrc: dojo.uri.dojoUri("src/widget/templates/images/blank.gif"),
-
-		// progressBackgroundSrc: String
-		//	slider background graphic URL to overlay the normal background to show progress
-		progressBackgroundSrc: dojo.uri.dojoUri("src/widget/templates/images/blank.gif"),
-
-		// backgroundSize: String
-		//	sizing style attributes for the background image
-		backgroundSize: "width:200px;height:200px;",
-
-		// backgroundStyle: String
-		//	style attributes (other than sizing) for the background image
-		backgroundStyle: "",
-
-		// buttonStyleX: String
-		//	style attributes for the left and right arrow images
-		buttonStyleX: "",
-
-		// buttonStyleY: String
-		//	style attributes for the up and down arrow images
-		buttonStyleY: "",
-
-		// handleStyle: String
-		//	style attributes for the moveable slider image
-		handleStyle: "",
-
-		// handleSrc: String
-		//	moveable slider graphic URL
-		handleSrc: dojo.uri.dojoUri("src/widget/templates/images/slider-button.png"),
-
-		// showButtons: Boolean
-		//	show (don't show) the arrow buttons
-		showButtons: true,
-
-		_eventCount: 0,
-		_typamaticTimer: null,
-		_typamaticFunction: null,
-
-		// defaultTimeout: Number
-		//	number of milliseconds before a held key or button becomes typematic 
-		defaultTimeout: 500,
-
-		// timeoutChangeRate: Number
-		//	fraction of time used to change the typematic timer between events
-		//	1.0 means that each typematic event fires at defaultTimeout intervals
-		//	< 1.0 means that each typematic event fires at an increasing faster rate
-		timeoutChangeRate: 0.90,
-
-		_currentTimeout: this.defaultTimeout,
-
-		// does the keyboard related stuff
-		_handleKeyEvents: function(/*Event*/ evt){
-			if(!evt.key){ return; }
-
-			if(!evt.ctrlKey && !evt.altKey){
-				switch(evt.key){
-					case evt.KEY_LEFT_ARROW:
-						dojo.event.browser.stopEvent(evt);
-						this._leftButtonPressed(evt);
-						return;
-					case evt.KEY_RIGHT_ARROW:
-						dojo.event.browser.stopEvent(evt);
-						this._rightButtonPressed(evt);
-						return;
-					case evt.KEY_DOWN_ARROW:
-						dojo.event.browser.stopEvent(evt);
-						this._bottomButtonPressed(evt);
-						return;
-					case evt.KEY_UP_ARROW:
-						dojo.event.browser.stopEvent(evt);
-						this._topButtonPressed(evt);
-						return;
-				}
+dojo.widget.defineWidget("dojo.widget.Slider", dojo.widget.HtmlWidget, {minimumX:0, minimumY:0, maximumX:10, maximumY:10, snapValuesX:0, snapValuesY:0, _snapToGrid:true, isEnableX:true, isEnableY:true, _valueSizeX:0, _valueSizeY:0, _minX:0, _minY:0, _constraintWidth:0, _constraintHeight:0, _clipLeft:0, _clipRight:0, _clipTop:0, _clipBottom:0, _clipXdelta:0, _clipYdelta:0, initialValueX:0, initialValueY:0, flipX:false, flipY:false, clickSelect:true, activeDrag:false, templateCssString:".sliderMain {\n  border: 0px !important;\n  border-spacing: 0px !important;\n  line-height: 0px !important;\n  padding: 0px !important;\n  display: -moz-inline-table !important;\n  display: inline !important;\n  -moz-user-focus: normal !important;\n}\n\n.sliderComponent {\n  border: 0px;\n  padding: 0px;\n  margin: 0px;\n}\n\n.sliderHandle { \n  top: 0px;\n  left: 0px;\n  z-index: 1000;\n  position: absolute !important;\n}\n\n.sliderOutsetButton { \n  border-style: outset;\n  border-width: 0px 1px 1px 0px;\n  border-color: black;\n}\n\n.sliderInsetButton { \n  border-style: inset;\n  border-width: 1px 0px 0px 1px;\n  border-color: black;\n}\n\n.sliderButtonY {\n  margin: 0px;\n  padding: 0px;\n  z-index: 900;\n}\n\n.sliderButtonX {\n  margin: 0px;\n  padding: 0px;\n  z-index: 900;\n}\n\n.sliderBackground { \n  z-index: 0;\n  display: block !important;\n  position: relative !important;\n}\n\n.sliderProgressBackground { \n  z-index: 800;\n  position: absolute !important;\n  clip: rect(0px,0px,0px,0px);\n}\n\n.sliderBackgroundSizeOnly { \n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/Slider.css"), templateString:"<table _=\"weird end tag formatting is to prevent whitespace from becoming &nbsp;\" \n\tclass=\"sliderMain\" \n\tdojoAttachPoint=\"focusNode\" \n\tdojoAttachEvent=\"onmousedown:_setFocus; onkey:_handleKeyEvents; onkeyup:_buttonReleased; onmouseup:_buttonReleased; onmousewheel:_mouseWheeled;\"\n\ttabindex=\"0\" cols=3 cellpadding=0 cellspacing=0 style=\"\">\n\t<tr valign=middle align=center>\n\t\t<td class=\"sliderComponent\" colspan=3 dojoAttachPoint=topBorderNode style=\"\"\n\t\t\t><img class=\"sliderOutsetButton sliderButtonY\"\n\t\t\t\tdojoAttachPoint=topButtonNode \n\t\t\t\tdojoAttachEvent=\"onmousedown:_topButtonPressed; onmousemove:_discardEvent; ondblclick:_topButtonDoubleClicked;\"\n\t\t\t\tsrc=\"${this.topButtonSrc}\" \n\t\t\t\tstyle=\"${this.buttonStyleY}\"\n\t\t></td>\n\t</tr>\n\t<tr valign=middle align=center>\n\t\t<td class=\"sliderComponent\" dojoAttachPoint=leftBorderNode style=\"\"\n\t\t\t><img class=\"sliderOutsetButton sliderButtonX\"\n\t\t\t\tdojoAttachPoint=leftButtonNode\n\t\t\t\tdojoAttachEvent=\"onmousedown:_leftButtonPressed; onmousemove:_discardEvent; ondblclick:_leftButtonDoubleClicked;\"\n\t\t\t\tsrc=\"${this.leftButtonSrc}\" \n\t\t\t\tstyle=\"${this.buttonStyleX}\"\n\t\t></td>\n\t\t<td dojoAttachPoint=constrainingContainerNode \n\t\t\tclass=\"sliderComponent sliderBackground\"\n\t\t\tstyle=\"${this.backgroundStyle}\"\n\t\t\t><img src=\"${this.handleSrc}\" \n\t\t\t\tclass=sliderHandle\n\t\t\t\tdojoAttachPoint=sliderHandleNode\n\t\t\t\tstyle=\"${this.handleStyle}\"\n\t\t\t><img src=\"${this.progressBackgroundSrc}\"\n\t\t\t\tclass=\"sliderBackgroundSizeOnly sliderProgressBackground\"\n\t\t\t\tdojoAttachPoint=progressBackgroundNode\n\t\t\t\tstyle=\"${this.backgroundSize}\"\n\t\t\t><img src=\"${this.backgroundSrc}\" \n\t\t\t\tclass=sliderBackgroundSizeOnly\n\t\t\t\tdojoAttachPoint=sliderBackgroundNode\n\t\t\t\tstyle=\"${this.backgroundSize}\"\n\t\t></td>\n\t\t<td class=\"sliderComponent\" dojoAttachPoint=rightBorderNode style=\"\"\n\t\t\t><img class=\"sliderOutsetButton sliderButtonX\"\n\t\t\t\tdojoAttachPoint=rightButtonNode\n\t\t\t\tdojoAttachEvent=\"onmousedown:_rightButtonPressed; onmousemove:_discardEvent; ondblclick:_rightButtonDoubleClicked;\"\n\t\t\t\tsrc=\"${this.rightButtonSrc}\" \n\t\t\t\tstyle=\"${this.buttonStyleX}\"\n\t\t></td>\n\t</tr>\n\t<tr valign=middle align=center>\n\t\t<td class=\"sliderComponent\" colspan=3 dojoAttachPoint=bottomBorderNode style=\"\"\n\t\t\t><img class=\"sliderOutsetButton sliderButtonY\"\n\t\t\t\tdojoAttachPoint=bottomButtonNode \n\t\t\t\tdojoAttachEvent=\"onmousedown:_bottomButtonPressed; onmousemove:_discardEvent; ondblclick:_bottomButtonDoubleClicked;\"\n\t\t\t\tsrc=\"${this.bottomButtonSrc}\" \n\t\t\t\tstyle=\"${this.buttonStyleY}\"\n\t\t></td>\n\t</tr>\n</table>\n", _isDragInProgress:false, bottomButtonSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/slider_down_arrow.png"), topButtonSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/slider_up_arrow.png"), leftButtonSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/slider_left_arrow.png"), rightButtonSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/slider_right_arrow.png"), backgroundSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/blank.gif"), progressBackgroundSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/blank.gif"), backgroundSize:"width:200px;height:200px;", backgroundStyle:"", buttonStyleX:"", buttonStyleY:"", handleStyle:"", handleSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/slider-button.png"), showButtons:true, _eventCount:0, _typamaticTimer:null, _typamaticFunction:null, defaultTimeout:500, timeoutChangeRate:0.9, _currentTimeout:this.defaultTimeout, _handleKeyEvents:function (evt) {
+	if (!evt.key) {
+		return;
+	}
+	if (!evt.ctrlKey && !evt.altKey) {
+		switch (evt.key) {
+		  case evt.KEY_LEFT_ARROW:
+			dojo.event.browser.stopEvent(evt);
+			this._leftButtonPressed(evt);
+			return;
+		  case evt.KEY_RIGHT_ARROW:
+			dojo.event.browser.stopEvent(evt);
+			this._rightButtonPressed(evt);
+			return;
+		  case evt.KEY_DOWN_ARROW:
+			dojo.event.browser.stopEvent(evt);
+			this._bottomButtonPressed(evt);
+			return;
+		  case evt.KEY_UP_ARROW:
+			dojo.event.browser.stopEvent(evt);
+			this._topButtonPressed(evt);
+			return;
+		}
+	}
+	this._eventCount++;
+}, _pressButton:function (buttonNode) {
+	buttonNode.className = buttonNode.className.replace("Outset", "Inset");
+}, _releaseButton:function (buttonNode) {
+	buttonNode.className = buttonNode.className.replace("Inset", "Outset");
+}, _buttonPressed:function (evt, buttonNode) {
+	this._setFocus();
+	if (typeof evt == "object") {
+		if (this._typamaticTimer != null) {
+			if (this._typamaticNode == buttonNode) {
+				return;
 			}
-			this._eventCount++;
-
-		},
-
-		_pressButton: function(/*DomNode*/ buttonNode){
-			buttonNode.className = buttonNode.className.replace("Outset","Inset");
-		},
-
-		_releaseButton: function(/*DomNode*/ buttonNode){
-			buttonNode.className = buttonNode.className.replace("Inset","Outset");
-		},
-
-		_buttonPressed: function(/*Event*/ evt, /*DomNode*/ buttonNode){
-			this._setFocus();
-			if(typeof evt == "object"){
-				if(this._typamaticTimer != null){
-					if(this._typamaticNode == buttonNode){
-						return;
-					}
-					clearTimeout(this._typamaticTimer);
-				}
-				this._buttonReleased(null);
-				this._eventCount++;
-				this._typamaticTimer = null;
-				this._currentTimeout = this.defaultTimeout;
-				dojo.event.browser.stopEvent(evt);
-			}else if (evt != this._eventCount){
-				this._buttonReleased(null);
-				return false;
-			}
-			if (buttonNode == this.leftButtonNode && this.isEnableX){
-				this._snapX(dojo.html.getPixelValue (this.sliderHandleNode,"left") - this._valueSizeX);
-			}
-			else if (buttonNode == this.rightButtonNode && this.isEnableX){
-				this._snapX(dojo.html.getPixelValue (this.sliderHandleNode,"left") + this._valueSizeX);
-			}
-			else if (buttonNode == this.topButtonNode && this.isEnableY){
-				this._snapY(dojo.html.getPixelValue (this.sliderHandleNode,"top") - this._valueSizeY);
-			}
-			else if (buttonNode == this.bottomButtonNode && this.isEnableY){
-				this._snapY(dojo.html.getPixelValue (this.sliderHandleNode,"top") + this._valueSizeY);
-			}
-			else {
-				return false;
-			}
-			this._pressButton(buttonNode);
-			this.notifyListeners();
-			this._typamaticNode = buttonNode;
-			this._typamaticTimer = dojo.lang.setTimeout(this, "_buttonPressed", this._currentTimeout, this._eventCount, buttonNode);
-			this._currentTimeout = Math.round(this._currentTimeout * this.timeoutChangeRate);
+			clearTimeout(this._typamaticTimer);
+		}
+		this._buttonReleased(null);
+		this._eventCount++;
+		this._typamaticTimer = null;
+		this._currentTimeout = this.defaultTimeout;
+		dojo.event.browser.stopEvent(evt);
+	} else {
+		if (evt != this._eventCount) {
+			this._buttonReleased(null);
 			return false;
-		},
-
-		_bottomButtonPressed: function(/*Event*/ evt){
-			return this._buttonPressed(evt,this.bottomButtonNode);
-		},
-
-		// IE sends these events when rapid clicking, mimic an extra single click
-		_bottomButtonDoubleClicked: function(/*Event*/ evt){
-			var rc = this._bottomButtonPressed(evt);
-			dojo.lang.setTimeout( this, "_buttonReleased", 50, null);
-			return rc;
-		},
-
-		_topButtonPressed: function(/*Event*/ evt){
-			return this._buttonPressed(evt,this.topButtonNode);
-		},
-
-		// IE sends these events when rapid clicking, mimic an extra single click
-		_topButtonDoubleClicked: function(/*Event*/ evt){
-			var rc = this._topButtonPressed(evt);
-			dojo.lang.setTimeout( this, "_buttonReleased", 50, null);
-			return rc;
-		},
-
-		_leftButtonPressed: function(/*Event*/ evt){
-			return this._buttonPressed(evt,this.leftButtonNode);
-		},
-
-		// IE sends these events when rapid clicking, mimic an extra single click
-		_leftButtonDoubleClicked: function(/*Event*/ evt){
-			var rc = this._leftButtonPressed(evt);
-			dojo.lang.setTimeout( this, "_buttonReleased", 50, null);
-			return rc;
-		},
-
-		_rightButtonPressed: function(/*Event*/ evt){
-			return this._buttonPressed(evt,this.rightButtonNode);
-		},
-
-		// IE sends these events when rapid clicking, mimic an extra single click
-		_rightButtonDoubleClicked: function(/*Event*/ evt){
-			var rc = this._rightButtonPressed(evt);
-			dojo.lang.setTimeout( this, "_buttonReleased", 50, null);
-			return rc;
-		},
-
-		_buttonReleased: function(/*Event*/ evt){
-			if(typeof evt == "object" && evt != null && typeof evt.keyCode != "undefined" && evt.keyCode != null){
-				var keyCode = evt.keyCode;
-
-				switch(keyCode){
-					case evt.KEY_LEFT_ARROW:
-					case evt.KEY_RIGHT_ARROW:
-					case evt.KEY_DOWN_ARROW:
-					case evt.KEY_UP_ARROW:
-						dojo.event.browser.stopEvent(evt);
-						break;
+		}
+	}
+	if (buttonNode == this.leftButtonNode && this.isEnableX) {
+		this._snapX(dojo.html.getPixelValue(this.sliderHandleNode, "left") - this._valueSizeX);
+	} else {
+		if (buttonNode == this.rightButtonNode && this.isEnableX) {
+			this._snapX(dojo.html.getPixelValue(this.sliderHandleNode, "left") + this._valueSizeX);
+		} else {
+			if (buttonNode == this.topButtonNode && this.isEnableY) {
+				this._snapY(dojo.html.getPixelValue(this.sliderHandleNode, "top") - this._valueSizeY);
+			} else {
+				if (buttonNode == this.bottomButtonNode && this.isEnableY) {
+					this._snapY(dojo.html.getPixelValue(this.sliderHandleNode, "top") + this._valueSizeY);
+				} else {
+					return false;
 				}
 			}
-			this._releaseButton(this.topButtonNode);
-			this._releaseButton(this.bottomButtonNode);
-			this._releaseButton(this.leftButtonNode);
-			this._releaseButton(this.rightButtonNode);
-			this._eventCount++;
-			if(this._typamaticTimer != null){
-				clearTimeout(this._typamaticTimer);
+		}
+	}
+	this._pressButton(buttonNode);
+	this.notifyListeners();
+	this._typamaticNode = buttonNode;
+	this._typamaticTimer = dojo.lang.setTimeout(this, "_buttonPressed", this._currentTimeout, this._eventCount, buttonNode);
+	this._currentTimeout = Math.round(this._currentTimeout * this.timeoutChangeRate);
+	return false;
+}, _bottomButtonPressed:function (evt) {
+	return this._buttonPressed(evt, this.bottomButtonNode);
+}, _bottomButtonDoubleClicked:function (evt) {
+	var rc = this._bottomButtonPressed(evt);
+	dojo.lang.setTimeout(this, "_buttonReleased", 50, null);
+	return rc;
+}, _topButtonPressed:function (evt) {
+	return this._buttonPressed(evt, this.topButtonNode);
+}, _topButtonDoubleClicked:function (evt) {
+	var rc = this._topButtonPressed(evt);
+	dojo.lang.setTimeout(this, "_buttonReleased", 50, null);
+	return rc;
+}, _leftButtonPressed:function (evt) {
+	return this._buttonPressed(evt, this.leftButtonNode);
+}, _leftButtonDoubleClicked:function (evt) {
+	var rc = this._leftButtonPressed(evt);
+	dojo.lang.setTimeout(this, "_buttonReleased", 50, null);
+	return rc;
+}, _rightButtonPressed:function (evt) {
+	return this._buttonPressed(evt, this.rightButtonNode);
+}, _rightButtonDoubleClicked:function (evt) {
+	var rc = this._rightButtonPressed(evt);
+	dojo.lang.setTimeout(this, "_buttonReleased", 50, null);
+	return rc;
+}, _buttonReleased:function (evt) {
+	if (typeof evt == "object" && evt != null && typeof evt.keyCode != "undefined" && evt.keyCode != null) {
+		var keyCode = evt.keyCode;
+		switch (keyCode) {
+		  case evt.KEY_LEFT_ARROW:
+		  case evt.KEY_RIGHT_ARROW:
+		  case evt.KEY_DOWN_ARROW:
+		  case evt.KEY_UP_ARROW:
+			dojo.event.browser.stopEvent(evt);
+			break;
+		}
+	}
+	this._releaseButton(this.topButtonNode);
+	this._releaseButton(this.bottomButtonNode);
+	this._releaseButton(this.leftButtonNode);
+	this._releaseButton(this.rightButtonNode);
+	this._eventCount++;
+	if (this._typamaticTimer != null) {
+		clearTimeout(this._typamaticTimer);
+	}
+	this._typamaticTimer = null;
+	this._currentTimeout = this.defaultTimeout;
+}, _mouseWheeled:function (evt) {
+	var scrollAmount = 0;
+	if (typeof evt.wheelDelta == "number") {
+		scrollAmount = evt.wheelDelta;
+	} else {
+		if (typeof evt.detail == "number") {
+			scrollAmount = -evt.detail;
+		}
+	}
+	if (this.isEnableY) {
+		if (scrollAmount > 0) {
+			this._topButtonPressed(evt);
+			this._buttonReleased(evt);
+		} else {
+			if (scrollAmount < 0) {
+				this._bottomButtonPressed(evt);
+				this._buttonReleased(evt);
 			}
-			this._typamaticTimer = null;
-			this._currentTimeout = this.defaultTimeout;
-		},
-
-		_mouseWheeled: function(/*Event*/ evt){
-			var scrollAmount = 0;
-			if(typeof evt.wheelDelta == 'number'){ // IE
-				scrollAmount = evt.wheelDelta;
-			}else if (typeof evt.detail == 'number'){ // Mozilla+Firefox
-				scrollAmount = -evt.detail;
-			}
-			if (this.isEnableY){
-				if(scrollAmount > 0){
-					this._topButtonPressed(evt);
-					this._buttonReleased(evt);
-				}else if (scrollAmount < 0){
-					this._bottomButtonPressed(evt);
-					this._buttonReleased(evt);
-				}
-			} else if (this.isEnableX){
-				if(scrollAmount > 0){
-					this._rightButtonPressed(evt);
-					this._buttonReleased(evt);
-				}else if (scrollAmount < 0){
+		}
+	} else {
+		if (this.isEnableX) {
+			if (scrollAmount > 0) {
+				this._rightButtonPressed(evt);
+				this._buttonReleased(evt);
+			} else {
+				if (scrollAmount < 0) {
 					this._leftButtonPressed(evt);
 					this._buttonReleased(evt);
 				}
 			}
-		},
-
-		_discardEvent: function(/*Event*/ evt){
-			dojo.event.browser.stopEvent(evt);
-		},
-
-		_setFocus: function(){
-			if (this.focusNode.focus){
-				this.focusNode.focus();
-			}
-		},
-
-		// This function is called when the template is loaded
-		fillInTemplate: function (/*Object*/ args, /*Object*/ frag) 
-		{
-			var source = this.getFragNodeRef(frag);
-			dojo.html.copyStyle(this.domNode, source);
-			// the user's style for the widget might include border and padding
-			// unfortunately, border isn't supported for inline elements
-			// so I get to fake everyone out by setting the border and padding
-			// of the outer table cells
-			var padding = this.domNode.style.padding;
-			if (dojo.lang.isString(padding) && padding != "" && padding != "0px" && padding != "0px 0px 0px 0px"){
-				this.topBorderNode.style.padding = 
-					this.bottomBorderNode.style.padding = padding;
-				this.topBorderNode.style.paddingBottom = "0px";
-				this.bottomBorderNode.style.paddingTop = "0px";
-				this.rightBorderNode.style.paddingRight = this.domNode.style.paddingRight;
-				this.leftBorderNode.style.paddingLeft= this.domNode.style.paddingLeft;
-				this.domNode.style.padding = "0px 0px 0px 0px";
-			}
-			var borderWidth = this.domNode.style.borderWidth;
-			if (dojo.lang.isString(borderWidth) && borderWidth != "" && borderWidth != "0px" && borderWidth != "0px 0px 0px 0px"){
-				this.topBorderNode.style.borderStyle = 
-					this.rightBorderNode.style.borderStyle = 
-					this.bottomBorderNode.style.borderStyle = 
-					this.leftBorderNode.style.borderStyle = 
-						this.domNode.style.borderStyle;
-				this.topBorderNode.style.borderColor = 
-					this.rightBorderNode.style.borderColor = 
-					this.bottomBorderNode.style.borderColor = 
-					this.leftBorderNode.style.borderColor = 
-						this.domNode.style.borderColor;
-				this.topBorderNode.style.borderWidth = 
-					this.bottomBorderNode.style.borderWidth = borderWidth;
-				this.topBorderNode.style.borderBottomWidth = "0px";
-				this.bottomBorderNode.style.borderTopWidth = "0px";
-				this.rightBorderNode.style.borderRightWidth = this.domNode.style.borderRightWidth;
-				this.leftBorderNode.style.borderLeftWidth = this.domNode.style.borderLeftWidth;
-				this.domNode.style.borderWidth = "0px 0px 0px 0px";
-			}
-
-			// dojo.debug ("fillInTemplate - className = " + this.domNode.className);
-
-			// setup drag-n-drop for the sliderHandle
-			this._handleMove = new dojo.widget._SliderDragMoveSource (this.sliderHandleNode);
-			this._handleMove.setParent (this);
-
-			if (this.clickSelect){
-				dojo.event.connect (this.constrainingContainerNode, "onmousedown", this, "_onClick");
-			} 
-
-			if (this.isEnableX){
-				this.setValueX (!isNaN(this.initialValueX) ? this.initialValueX : (!isNaN(this.minimumX) ? this.minimumX : 0));
-			}
-			if (!this.isEnableX || !this.showButtons){
-				this.rightButtonNode.style.width = "1px"; // allow the border to show
-				this.rightButtonNode.style.visibility = "hidden";
-				this.leftButtonNode.style.width = "1px"; // allow the border to show
-				this.leftButtonNode.style.visibility = "hidden";
-			}
-			if (this.isEnableY){
-				this.setValueY (!isNaN(this.initialValueY) ? this.initialValueY : (!isNaN(this.minimumY) ? this.minimumY : 0));
-			}
-			if (!this.isEnableY || !this.showButtons){
-				this.bottomButtonNode.style.width = "1px"; // allow the border to show
-				this.bottomButtonNode.style.visibility = "hidden";
-				this.topButtonNode.style.width = "1px"; // allow the border to show
-				this.topButtonNode.style.visibility = "hidden";
-			}
-			if(this.focusNode.addEventListener){
-				// dojo.event.connect() doesn't seem to work with DOMMouseScroll
-				this.focusNode.addEventListener('DOMMouseScroll', dojo.lang.hitch(this, "_mouseWheeled"), false); // Mozilla + Firefox + Netscape
-			}
-		},
-
-		// move the X value to the closest allowable value
-		_snapX: function(/*Number*/ x){
-			if (x < 0){ x = 0; }
-			else if (x > this._constraintWidth){ x = this._constraintWidth; }
-			else {
-				var selectedValue = Math.round (x / this._valueSizeX);
-				x = Math.round (selectedValue * this._valueSizeX);
-			}
-			this.sliderHandleNode.style.left = x + "px";
-			if (this.flipX){
-				this._clipLeft = x + this._clipXdelta;
-			} else {
-				this._clipRight = x + this._clipXdelta;
-			}
-			this.progressBackgroundNode.style.clip = "rect("+this._clipTop+"px,"+this._clipRight+"px,"+this._clipBottom+"px,"+this._clipLeft+"px)";
-		},
-
-		// compute _valueSizeX & _constraintWidth & default snapValuesX
-		_calc_valueSizeX: function (){
-			var constrainingCtrBox = dojo.html.getContentBox(this.constrainingContainerNode);
-			var sliderHandleBox = dojo.html.getContentBox(this.sliderHandleNode);
-			if (isNaN(constrainingCtrBox.width) || isNaN(sliderHandleBox.width) || constrainingCtrBox.width <= 0 || sliderHandleBox.width <= 0){ 
-				return false; 
-			}
-
-			this._constraintWidth = constrainingCtrBox.width 
-				+ dojo.html.getPadding(this.constrainingContainerNode).width
-				- sliderHandleBox.width;
-
-			if (this.flipX){
-				this._clipLeft = this._clipRight = constrainingCtrBox.width;
-			} else {
-				this._clipLeft = this._clipRight = 0;
-			}
-			this._clipXdelta = sliderHandleBox.width >> 1;
-			if (!this.isEnableY){
-				this._clipTop = 0;
-				this._clipBottom = constrainingCtrBox.height;
-			}
-
-			if (this._constraintWidth <= 0){ return false; }
-			if (this.snapValuesX == 0){
-				this.snapValuesX = this._constraintWidth + 1;
-			}
-
-			this._valueSizeX = this._constraintWidth / (this.snapValuesX - 1);
-			return true;
-		},
-
-		// summary
-		//	move the handle horizontally to the specified value
-		setValueX: function (/*Number*/ value){
-			if (0.0 == this._valueSizeX){
-				if (this._calc_valueSizeX () == false){
-					dojo.lang.setTimeout(this, "setValueX", 100, value);
-					return;
-				}
-			}
-			if (isNaN(value)){
-				value = 0;
-			}
-			if (value > this.maximumX){
-				value = this.maximumX;
-			}
-			else if (value < this.minimumX){
-				value = this.minimumX;
-			}
-			var pixelPercent = (value-this.minimumX) / (this.maximumX-this.minimumX);
-			if (this.flipX){
-				pixelPercent = 1.0 - pixelPercent;
-			}
-			this._snapX (pixelPercent * this._constraintWidth);
-			this.notifyListeners();
-		},
-
-
-		// summary
-		//	return the X value that the matches the position of the handle
-		getValueX: function (){
-			var pixelPercent = dojo.html.getPixelValue (this.sliderHandleNode,"left") / this._constraintWidth;
-			if (this.flipX){
-				pixelPercent = 1.0 - pixelPercent;
-			}
-			return Math.round (pixelPercent * (this.snapValuesX-1)) * ((this.maximumX-this.minimumX) / (this.snapValuesX-1)) + this.minimumX;
-		},
-
-		// move the Y value to the closest allowable value
-		_snapY: function (/*Number*/ y){
-			if (y < 0){ y = 0; }
-			else if (y > this._constraintHeight){ y = this._constraintHeight; }
-			else {
-				var selectedValue = Math.round (y / this._valueSizeY);
-				y = Math.round (selectedValue * this._valueSizeY);
-			}
-			this.sliderHandleNode.style.top = y + "px";
-			if (this.flipY){
-				this._clipTop = y + this._clipYdelta;
-			} else {
-				this._clipBottom = y + this._clipYdelta;
-			}
-			this.progressBackgroundNode.style.clip = "rect("+this._clipTop+"px,"+this._clipRight+"px,"+this._clipBottom+"px,"+this._clipLeft+"px)";
-		},
-		// compute _valueSizeY & _constraintHeight & default snapValuesY
-		_calc_valueSizeY: function (){
-			var constrainingCtrBox = dojo.html.getContentBox(this.constrainingContainerNode);
-			var sliderHandleBox = dojo.html.getContentBox(this.sliderHandleNode);
-			if (isNaN(constrainingCtrBox.height) || isNaN(sliderHandleBox.height) || constrainingCtrBox.height <= 0 || sliderHandleBox.height <= 0){ 
-				return false; 
-			}
-
-			this._constraintHeight = constrainingCtrBox.height
-				+ dojo.html.getPadding(this.constrainingContainerNode).height
-				- sliderHandleBox.height;
-
-			if (this.flipY){
-				this._clipTop = this._clipBottom = constrainingCtrBox.height;
-			} else {
-				this._clipTop = this._clipBottom = 0;
-			}
-			this._clipYdelta = sliderHandleBox.height >> 1;
-			if (!this.isEnableX){
-				this._clipLeft = 0;
-				this._clipRight = constrainingCtrBox.width;
-			}
-
-			if (this._constraintHeight <= 0){ return false; }
-			if (this.snapValuesY == 0){
-				this.snapValuesY = this._constraintHeight + 1;
-			}
-
-			this._valueSizeY = this._constraintHeight / (this.snapValuesY - 1);
-			return true;
-		},
-
-		// summary
-		//	move the handle vertically to the specified value
-		setValueY: function (/*Number*/ value){
-			if (0.0 == this._valueSizeY){
-				if (this._calc_valueSizeY () == false){
-					dojo.lang.setTimeout(this, "setValueY", 100, value);
-					return;
-				}
-			}
-			if (isNaN(value)){
-				value = 0;
-			}
-			if (value > this.maximumY){
-				value = this.maximumY;
-			}
-			else if (value < this.minimumY){
-				value = this.minimumY;
-			}
-			var pixelPercent = (value-this.minimumY) / (this.maximumY-this.minimumY);
-			if (this.flipY){
-				pixelPercent = 1.0 - pixelPercent;
-			}
-			this._snapY (pixelPercent * this._constraintHeight);
-			this.notifyListeners();
-		},
-
-		// summary
-		//	return the Y value that the matches the position of the handle
-		getValueY: function (){
-			var pixelPercent = dojo.html.getPixelValue (this.sliderHandleNode,"top") / this._constraintHeight;
-			if (this.flipY){
-				pixelPercent = 1.0 - pixelPercent;
-			}
-			return Math.round (pixelPercent * (this.snapValuesY-1)) * ((this.maximumY-this.minimumY) / (this.snapValuesY-1)) + this.minimumY;
-		},
-
-		// set the position of the handle
-		_onClick: function(/*Event*/ evt){
-			if (this._isDragInProgress){
-				return;
-			}
-
-			var parent = dojo.html.getAbsolutePosition(this.constrainingContainerNode, true, dojo.html.boxSizing.MARGIN_BOX);
-			var content = dojo.html.getContentBox(this._handleMove.domNode);			
-			if (this.isEnableX){
-				var x = evt.pageX - parent.x - (content.width >> 1);
-				this._snapX(x);
-			}
-			if (this.isEnableY){
-				var y = evt.pageY - parent.y - (content.height >> 1);
-				this._snapY(y);
-			}
-			this.notifyListeners();
-		},
-
-		// summary
-		//	method to invoke user's onValueChanged method
-		notifyListeners: function(){
-			this.onValueChanged(this.getValueX(), this.getValueY());
-		},
-
-		// summary
-		//	empty method to be overridden by user
-		onValueChanged: function(/*Number*/ x, /*Number*/ y){
 		}
 	}
-);
-
-
-
-dojo.widget.defineWidget (
-	"dojo.widget.SliderHorizontal",
-	dojo.widget.Slider,
-	{
-		// summary
-		//	the horizontal slider widget subclass
-
-		isEnableX: true,
-		isEnableY: false,
-
-		// initialValue: Number
-		//	sets initialValueX.
-		//	TODO: should be called "value".  Also, common attributes between SliderHorizontal/SliderVertical
-		//	should be consolidated to Slider1D base class
-		initialValue: "",
-
-		// snapValues: Number
-		//	sets snapValuesX
-		snapValues: "",
-
-		// minimum: Number
-		//	sets minimumX
-		minimum: "",
-
-		// maximum: Number
-		//	sets maximumX
-		maximum: "",
-
-		// buttonStyle: String
-		//	sets buttonStyleX
-		buttonStyle: "",
-
-		backgroundSize: "height:10px;width:200px;",
-		backgroundSrc: dojo.uri.dojoUri("src/widget/templates/images/slider-bg.gif"),
-
-		// flip: Boolean
-		//	sets flipX
-		flip: false,
-
-		postMixInProperties: function(){
-			dojo.widget.SliderHorizontal.superclass.postMixInProperties.apply(this, arguments);
-			if (!isNaN(parseFloat(this.initialValue))){
-				this.initialValueX = parseFloat(this.initialValue);
-			}
-			if (!isNaN(parseFloat(this.minimum))){
-				this.minimumX = parseFloat(this.minimum);
-			}
-			if (!isNaN(parseFloat(this.maximum))){
-				this.maximumX = parseFloat(this.maximum);
-			}
-			if (!isNaN(parseInt(this.snapValues))){
-				this.snapValuesX = parseInt(this.snapValues);
-			}
-			if (dojo.lang.isString(this.buttonStyle) && this.buttonStyle != ""){
-				this.buttonStyleX = this.buttonStyle;
-			}
-			if (dojo.lang.isBoolean(this.flip)){
-				this.flipX = this.flip;
-			}
-		},
-
-		notifyListeners: function(){
-			this.onValueChanged(this.getValueX());
-		},
-
-		// summary
-		//	wrapper for getValueX()
-		getValue: function (){
-			return this.getValueX ();
-		},
-
-		// summary
-		//	wrapper for setValueX()
-		setValue: function (/*Number*/ value){
-			this.setValueX (value);
-		},
-
-		onValueChanged: function(/*Number*/ value){
+}, _discardEvent:function (evt) {
+	dojo.event.browser.stopEvent(evt);
+}, _setFocus:function () {
+	if (this.focusNode.focus) {
+		this.focusNode.focus();
+	}
+}, fillInTemplate:function (args, frag) {
+	var source = this.getFragNodeRef(frag);
+	dojo.html.copyStyle(this.domNode, source);
+	var padding = this.domNode.style.padding;
+	if (dojo.lang.isString(padding) && padding != "" && padding != "0px" && padding != "0px 0px 0px 0px") {
+		this.topBorderNode.style.padding = this.bottomBorderNode.style.padding = padding;
+		this.topBorderNode.style.paddingBottom = "0px";
+		this.bottomBorderNode.style.paddingTop = "0px";
+		this.rightBorderNode.style.paddingRight = this.domNode.style.paddingRight;
+		this.leftBorderNode.style.paddingLeft = this.domNode.style.paddingLeft;
+		this.domNode.style.padding = "0px 0px 0px 0px";
+	}
+	var borderWidth = this.domNode.style.borderWidth;
+	if (dojo.lang.isString(borderWidth) && borderWidth != "" && borderWidth != "0px" && borderWidth != "0px 0px 0px 0px") {
+		this.topBorderNode.style.borderStyle = this.rightBorderNode.style.borderStyle = this.bottomBorderNode.style.borderStyle = this.leftBorderNode.style.borderStyle = this.domNode.style.borderStyle;
+		this.topBorderNode.style.borderColor = this.rightBorderNode.style.borderColor = this.bottomBorderNode.style.borderColor = this.leftBorderNode.style.borderColor = this.domNode.style.borderColor;
+		this.topBorderNode.style.borderWidth = this.bottomBorderNode.style.borderWidth = borderWidth;
+		this.topBorderNode.style.borderBottomWidth = "0px";
+		this.bottomBorderNode.style.borderTopWidth = "0px";
+		this.rightBorderNode.style.borderRightWidth = this.domNode.style.borderRightWidth;
+		this.leftBorderNode.style.borderLeftWidth = this.domNode.style.borderLeftWidth;
+		this.domNode.style.borderWidth = "0px 0px 0px 0px";
+	}
+	this._handleMove = new dojo.widget._SliderDragMoveSource(this.sliderHandleNode);
+	this._handleMove.setParent(this);
+	if (this.clickSelect) {
+		dojo.event.connect(this.constrainingContainerNode, "onmousedown", this, "_onClick");
+	}
+	if (this.isEnableX) {
+		this.setValueX(!isNaN(this.initialValueX) ? this.initialValueX : (!isNaN(this.minimumX) ? this.minimumX : 0));
+	}
+	if (!this.isEnableX || !this.showButtons) {
+		this.rightButtonNode.style.width = "1px";
+		this.rightButtonNode.style.visibility = "hidden";
+		this.leftButtonNode.style.width = "1px";
+		this.leftButtonNode.style.visibility = "hidden";
+	}
+	if (this.isEnableY) {
+		this.setValueY(!isNaN(this.initialValueY) ? this.initialValueY : (!isNaN(this.minimumY) ? this.minimumY : 0));
+	}
+	if (!this.isEnableY || !this.showButtons) {
+		this.bottomButtonNode.style.width = "1px";
+		this.bottomButtonNode.style.visibility = "hidden";
+		this.topButtonNode.style.width = "1px";
+		this.topButtonNode.style.visibility = "hidden";
+	}
+	if (this.focusNode.addEventListener) {
+		this.focusNode.addEventListener("DOMMouseScroll", dojo.lang.hitch(this, "_mouseWheeled"), false);
+	}
+}, _snapX:function (x) {
+	if (x < 0) {
+		x = 0;
+	} else {
+		if (x > this._constraintWidth) {
+			x = this._constraintWidth;
+		} else {
+			var selectedValue = Math.round(x / this._valueSizeX);
+			x = Math.round(selectedValue * this._valueSizeX);
 		}
 	}
-);
-
-
-/* ------------------------------------------------------------------------- */
-
-
-dojo.widget.defineWidget (
-	"dojo.widget.SliderVertical",
-	dojo.widget.Slider,
-	{
-		// summary
-		//	the vertical slider widget subclass
-
-		isEnableX: false,
-		isEnableY: true,
-
-		// initialValue: Number
-		//	sets initialValueY
-		initialValue: "",
-
-		// snapValues: Number
-		//	sets snapValuesY
-		snapValues: "",
-
-		// minimum: Number
-		//	sets minimumY
-		minimum: "",
-
-		// Number
-		//	maximum: sets maximumY
-		maximum: "",
-
-		// buttonStyle: String
-		//	sets buttonStyleY
-		buttonStyle: "",
-
-		backgroundSize: "width:10px;height:200px;",
-		backgroundSrc: dojo.uri.dojoUri("src/widget/templates/images/slider-bg-vert.gif"),
-
-		// flip: Boolean
-		//	sets flipY
-		flip: false,
-
-		postMixInProperties: function(){
-			dojo.widget.SliderVertical.superclass.postMixInProperties.apply(this, arguments);
-			if (!isNaN(parseFloat(this.initialValue))){
-				this.initialValueY = parseFloat(this.initialValue);
-			}
-			if (!isNaN(parseFloat(this.minimum))){
-				this.minimumY = parseFloat(this.minimum);
-			}
-			if (!isNaN(parseFloat(this.maximum))){
-				this.maximumY = parseFloat(this.maximum);
-			}
-			if (!isNaN(parseInt(this.snapValues))){
-				this.snapValuesY = parseInt(this.snapValues);
-			}
-			if (dojo.lang.isString(this.buttonStyle) && this.buttonStyle != ""){
-				this.buttonStyleY = this.buttonStyle;
-			}
-			if (dojo.lang.isBoolean(this.flip)){
-				this.flipY = this.flip;
-			}
-		},
-
-		notifyListeners: function(){
-			this.onValueChanged(this.getValueY());
-		},
-
-		// summary
-		//	wrapper for getValueY()
-		getValue: function (){
-			return this.getValueY ();
-		},
-
-		// summary
-		//	wrapper for setValueY()
-		setValue: function (/*Number*/ value){
-			this.setValueY (value);
-		},
-
-		onValueChanged: function(/*Number*/ value){
+	this.sliderHandleNode.style.left = x + "px";
+	if (this.flipX) {
+		this._clipLeft = x + this._clipXdelta;
+	} else {
+		this._clipRight = x + this._clipXdelta;
+	}
+	this.progressBackgroundNode.style.clip = "rect(" + this._clipTop + "px," + this._clipRight + "px," + this._clipBottom + "px," + this._clipLeft + "px)";
+}, _calc_valueSizeX:function () {
+	var constrainingCtrBox = dojo.html.getContentBox(this.constrainingContainerNode);
+	var sliderHandleBox = dojo.html.getContentBox(this.sliderHandleNode);
+	if (isNaN(constrainingCtrBox.width) || isNaN(sliderHandleBox.width) || constrainingCtrBox.width <= 0 || sliderHandleBox.width <= 0) {
+		return false;
+	}
+	this._constraintWidth = constrainingCtrBox.width + dojo.html.getPadding(this.constrainingContainerNode).width - sliderHandleBox.width;
+	if (this.flipX) {
+		this._clipLeft = this._clipRight = constrainingCtrBox.width;
+	} else {
+		this._clipLeft = this._clipRight = 0;
+	}
+	this._clipXdelta = sliderHandleBox.width >> 1;
+	if (!this.isEnableY) {
+		this._clipTop = 0;
+		this._clipBottom = constrainingCtrBox.height;
+	}
+	if (this._constraintWidth <= 0) {
+		return false;
+	}
+	if (this.snapValuesX == 0) {
+		this.snapValuesX = this._constraintWidth + 1;
+	}
+	this._valueSizeX = this._constraintWidth / (this.snapValuesX - 1);
+	return true;
+}, setValueX:function (value) {
+	if (0 == this._valueSizeX) {
+		if (this._calc_valueSizeX() == false) {
+			dojo.lang.setTimeout(this, "setValueX", 100, value);
+			return;
 		}
 	}
-);
-
-
-/* ------------------------------------------------------------------------- */
-
-
-/**
- * This class extends the HtmlDragMoveSource class to provide
- * features for the slider handle.
- */
-dojo.declare (
-	"dojo.widget._SliderDragMoveSource",
-	dojo.dnd.HtmlDragMoveSource,
-{
-	slider: null,
-
-	/** Setup the handle for drag
-	 *  Extends dojo.dnd.HtmlDragMoveSource by creating a SliderDragMoveSource */
-	onDragStart: function(/*Event*/ evt){
-		this.slider._isDragInProgress = true;
-		var dragObj = this.createDragMoveObject ();
-
-		this.slider.notifyListeners();
-		return dragObj;
-	},
-
-	onDragEnd: function(/*Event*/ evt){
-		this.slider._isDragInProgress = false;
-		this.slider.notifyListeners();
-	},
-
-	createDragMoveObject: function (){
-		//dojo.debug ("SliderDragMoveSource#createDragMoveObject - " + this.slider);
-		var dragObj = new dojo.widget._SliderDragMoveObject (this.dragObject, this.type);
-		dragObj.slider = this.slider;
-
-		// this code copied from dojo.dnd.HtmlDragSource#onDragStart
-		if (this.dragClass){ 
-			dragObj.dragClass = this.dragClass; 
+	if (isNaN(value)) {
+		value = 0;
+	}
+	if (value > this.maximumX) {
+		value = this.maximumX;
+	} else {
+		if (value < this.minimumX) {
+			value = this.minimumX;
 		}
-
-		return dragObj;
-	},
-
-
-	setParent: function (/*Widget*/ slider){
-		this.slider = slider;
 	}
-});
-
-
-/* ------------------------------------------------------------------------- */
-
-
-/**
- * This class extends the HtmlDragMoveObject class to provide
- * features for the slider handle.
- */
-dojo.declare (
-	"dojo.widget._SliderDragMoveObject",
-	dojo.dnd.HtmlDragMoveObject,
-{
-	// reference to dojo.widget.Slider
-	slider: null,
-
-	/** Moves the node to follow the mouse.
-	 *  Extends functon HtmlDragObject by adding functionality to snap handle
-	 *  to a discrete value */
-	onDragMove: function(/*Event*/ evt){
-		this.updateDragOffset ();
-
-		if (this.slider.isEnableX){
-			var x = this.dragOffset.x + evt.pageX;
-			this.slider._snapX(x);
+	var pixelPercent = (value - this.minimumX) / (this.maximumX - this.minimumX);
+	if (this.flipX) {
+		pixelPercent = 1 - pixelPercent;
+	}
+	this._snapX(pixelPercent * this._constraintWidth);
+	this.notifyListeners();
+}, getValueX:function () {
+	var pixelPercent = dojo.html.getPixelValue(this.sliderHandleNode, "left") / this._constraintWidth;
+	if (this.flipX) {
+		pixelPercent = 1 - pixelPercent;
+	}
+	return Math.round(pixelPercent * (this.snapValuesX - 1)) * ((this.maximumX - this.minimumX) / (this.snapValuesX - 1)) + this.minimumX;
+}, _snapY:function (y) {
+	if (y < 0) {
+		y = 0;
+	} else {
+		if (y > this._constraintHeight) {
+			y = this._constraintHeight;
+		} else {
+			var selectedValue = Math.round(y / this._valueSizeY);
+			y = Math.round(selectedValue * this._valueSizeY);
 		}
-
-		if (this.slider.isEnableY){
-			var y = this.dragOffset.y + evt.pageY;
-			this.slider._snapY(y);
+	}
+	this.sliderHandleNode.style.top = y + "px";
+	if (this.flipY) {
+		this._clipTop = y + this._clipYdelta;
+	} else {
+		this._clipBottom = y + this._clipYdelta;
+	}
+	this.progressBackgroundNode.style.clip = "rect(" + this._clipTop + "px," + this._clipRight + "px," + this._clipBottom + "px," + this._clipLeft + "px)";
+}, _calc_valueSizeY:function () {
+	var constrainingCtrBox = dojo.html.getContentBox(this.constrainingContainerNode);
+	var sliderHandleBox = dojo.html.getContentBox(this.sliderHandleNode);
+	if (isNaN(constrainingCtrBox.height) || isNaN(sliderHandleBox.height) || constrainingCtrBox.height <= 0 || sliderHandleBox.height <= 0) {
+		return false;
+	}
+	this._constraintHeight = constrainingCtrBox.height + dojo.html.getPadding(this.constrainingContainerNode).height - sliderHandleBox.height;
+	if (this.flipY) {
+		this._clipTop = this._clipBottom = constrainingCtrBox.height;
+	} else {
+		this._clipTop = this._clipBottom = 0;
+	}
+	this._clipYdelta = sliderHandleBox.height >> 1;
+	if (!this.isEnableX) {
+		this._clipLeft = 0;
+		this._clipRight = constrainingCtrBox.width;
+	}
+	if (this._constraintHeight <= 0) {
+		return false;
+	}
+	if (this.snapValuesY == 0) {
+		this.snapValuesY = this._constraintHeight + 1;
+	}
+	this._valueSizeY = this._constraintHeight / (this.snapValuesY - 1);
+	return true;
+}, setValueY:function (value) {
+	if (0 == this._valueSizeY) {
+		if (this._calc_valueSizeY() == false) {
+			dojo.lang.setTimeout(this, "setValueY", 100, value);
+			return;
 		}
-		if(this.slider.activeDrag){
-			this.slider.notifyListeners();
+	}
+	if (isNaN(value)) {
+		value = 0;
+	}
+	if (value > this.maximumY) {
+		value = this.maximumY;
+	} else {
+		if (value < this.minimumY) {
+			value = this.minimumY;
 		}
 	}
-});
+	var pixelPercent = (value - this.minimumY) / (this.maximumY - this.minimumY);
+	if (this.flipY) {
+		pixelPercent = 1 - pixelPercent;
+	}
+	this._snapY(pixelPercent * this._constraintHeight);
+	this.notifyListeners();
+}, getValueY:function () {
+	var pixelPercent = dojo.html.getPixelValue(this.sliderHandleNode, "top") / this._constraintHeight;
+	if (this.flipY) {
+		pixelPercent = 1 - pixelPercent;
+	}
+	return Math.round(pixelPercent * (this.snapValuesY - 1)) * ((this.maximumY - this.minimumY) / (this.snapValuesY - 1)) + this.minimumY;
+}, _onClick:function (evt) {
+	if (this._isDragInProgress) {
+		return;
+	}
+	var parent = dojo.html.getAbsolutePosition(this.constrainingContainerNode, true, dojo.html.boxSizing.MARGIN_BOX);
+	var content = dojo.html.getContentBox(this._handleMove.domNode);
+	if (this.isEnableX) {
+		var x = evt.pageX - parent.x - (content.width >> 1);
+		this._snapX(x);
+	}
+	if (this.isEnableY) {
+		var y = evt.pageY - parent.y - (content.height >> 1);
+		this._snapY(y);
+	}
+	this.notifyListeners();
+}, notifyListeners:function () {
+	this.onValueChanged(this.getValueX(), this.getValueY());
+}, onValueChanged:function (x, y) {
+}});
+dojo.widget.defineWidget("dojo.widget.SliderHorizontal", dojo.widget.Slider, {isEnableX:true, isEnableY:false, initialValue:"", snapValues:"", minimum:"", maximum:"", buttonStyle:"", backgroundSize:"height:10px;width:200px;", backgroundSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/slider-bg.gif"), flip:false, postMixInProperties:function () {
+	dojo.widget.SliderHorizontal.superclass.postMixInProperties.apply(this, arguments);
+	if (!isNaN(parseFloat(this.initialValue))) {
+		this.initialValueX = parseFloat(this.initialValue);
+	}
+	if (!isNaN(parseFloat(this.minimum))) {
+		this.minimumX = parseFloat(this.minimum);
+	}
+	if (!isNaN(parseFloat(this.maximum))) {
+		this.maximumX = parseFloat(this.maximum);
+	}
+	if (!isNaN(parseInt(this.snapValues))) {
+		this.snapValuesX = parseInt(this.snapValues);
+	}
+	if (dojo.lang.isString(this.buttonStyle) && this.buttonStyle != "") {
+		this.buttonStyleX = this.buttonStyle;
+	}
+	if (dojo.lang.isBoolean(this.flip)) {
+		this.flipX = this.flip;
+	}
+}, notifyListeners:function () {
+	this.onValueChanged(this.getValueX());
+}, getValue:function () {
+	return this.getValueX();
+}, setValue:function (value) {
+	this.setValueX(value);
+}, onValueChanged:function (value) {
+}});
+dojo.widget.defineWidget("dojo.widget.SliderVertical", dojo.widget.Slider, {isEnableX:false, isEnableY:true, initialValue:"", snapValues:"", minimum:"", maximum:"", buttonStyle:"", backgroundSize:"width:10px;height:200px;", backgroundSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/slider-bg-vert.gif"), flip:false, postMixInProperties:function () {
+	dojo.widget.SliderVertical.superclass.postMixInProperties.apply(this, arguments);
+	if (!isNaN(parseFloat(this.initialValue))) {
+		this.initialValueY = parseFloat(this.initialValue);
+	}
+	if (!isNaN(parseFloat(this.minimum))) {
+		this.minimumY = parseFloat(this.minimum);
+	}
+	if (!isNaN(parseFloat(this.maximum))) {
+		this.maximumY = parseFloat(this.maximum);
+	}
+	if (!isNaN(parseInt(this.snapValues))) {
+		this.snapValuesY = parseInt(this.snapValues);
+	}
+	if (dojo.lang.isString(this.buttonStyle) && this.buttonStyle != "") {
+		this.buttonStyleY = this.buttonStyle;
+	}
+	if (dojo.lang.isBoolean(this.flip)) {
+		this.flipY = this.flip;
+	}
+}, notifyListeners:function () {
+	this.onValueChanged(this.getValueY());
+}, getValue:function () {
+	return this.getValueY();
+}, setValue:function (value) {
+	this.setValueY(value);
+}, onValueChanged:function (value) {
+}});
+dojo.declare("dojo.widget._SliderDragMoveSource", dojo.dnd.HtmlDragMoveSource, {slider:null, onDragStart:function (evt) {
+	this.slider._isDragInProgress = true;
+	var dragObj = this.createDragMoveObject();
+	this.slider.notifyListeners();
+	return dragObj;
+}, onDragEnd:function (evt) {
+	this.slider._isDragInProgress = false;
+	this.slider.notifyListeners();
+}, createDragMoveObject:function () {
+	var dragObj = new dojo.widget._SliderDragMoveObject(this.dragObject, this.type);
+	dragObj.slider = this.slider;
+	if (this.dragClass) {
+		dragObj.dragClass = this.dragClass;
+	}
+	return dragObj;
+}, setParent:function (slider) {
+	this.slider = slider;
+}});
+dojo.declare("dojo.widget._SliderDragMoveObject", dojo.dnd.HtmlDragMoveObject, {slider:null, onDragMove:function (evt) {
+	this.updateDragOffset();
+	if (this.slider.isEnableX) {
+		var x = this.dragOffset.x + evt.pageX;
+		this.slider._snapX(x);
+	}
+	if (this.slider.isEnableY) {
+		var y = this.dragOffset.y + evt.pageY;
+		this.slider._snapY(y);
+	}
+	if (this.slider.activeDrag) {
+		this.slider.notifyListeners();
+	}
+}});
 
+
 __CPAN_FILE__ src/widget/AnimatedPng.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -26455,94 +17435,41 @@
 */
 
 dojo.provide("dojo.widget.AnimatedPng");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.HtmlWidget");
-
-// usage
-//	<img dojoType="AnimatedPng"
-//		src="images/animatedpng_static.gif"		(for degradation; in case javascript is disabled)
-//		aniSrc="images/animatedpng_frames.gif"
-//		width="20"
-//		height="20"
-//		interval="50"
-//	/>
-//
-//	var params = {src: "images/animatedpng_static.gif", aniSrc: "images/animatedpng_frames.gif", width: 20, height: 20, interval: 50};
-//	var widget = dojo.widget.createWidget("AnimatedPng", params, document.getElementById("pngContainer"));
-//
-dojo.widget.defineWidget(
-	"dojo.widget.AnimatedPng",
-	dojo.widget.HtmlWidget,
-	{
-		// summary
-		//	PNGs have great tranparency, but lack animation.
-		//	This widget lets you point an img tag at an animated gif for graceful degrading,
-		//	while letting you specify a png containing a grid of cells to animate between.
-
-		isContainer: false,
-
-		// width: Integer
-		//	width (of each frame) in pixels
-		width: 0,
-		
-		// height: Integer
-		//	height (of each frame) in pixels
-		height: 0,
-		
-		// aniSrc: String
-		//	pathname to png file containing frames to be animated (ie, displayed sequentially)
-		aniSrc: '',
-		
-		// interval: Integer
-		//	time to display each frame
-		interval: 100,
-
-		_blankSrc: dojo.uri.dojoUri("src/widget/templates/images/blank.gif"),
-
-		templateString: '<img class="dojoAnimatedPng" />',
-
-		postCreate: function(){
-			this.cellWidth = this.width;
-			this.cellHeight = this.height;
-
-			var img = new Image();
-			var self = this;
-
-			img.onload = function(){ self._initAni(img.width, img.height); };
-			img.src = this.aniSrc;
-		},
-
-		_initAni: function(w, h){
-			this.domNode.src = this._blankSrc;
-			this.domNode.width = this.cellWidth;
-			this.domNode.height = this.cellHeight;
-			this.domNode.style.backgroundImage = 'url('+this.aniSrc+')';
-			this.domNode.style.backgroundRepeat = 'no-repeat';
-
-			this.aniCols = Math.floor(w/this.cellWidth);
-			this.aniRows = Math.floor(h/this.cellHeight);
-			this.aniCells = this.aniCols * this.aniRows;
-			this.aniFrame = 0;
-
-			window.setInterval(dojo.lang.hitch(this, '_tick'), this.interval);
-		},
-
-		_tick: function(){
-			this.aniFrame++;
-			if (this.aniFrame == this.aniCells) this.aniFrame = 0;
-
-			var col = this.aniFrame % this.aniCols;
-			var row = Math.floor(this.aniFrame / this.aniCols);
-
-			var bx = -1 * col * this.cellWidth;
-			var by = -1 * row * this.cellHeight;
-
-			this.domNode.style.backgroundPosition = bx+'px '+by+'px';
-		}
+dojo.widget.defineWidget("dojo.widget.AnimatedPng", dojo.widget.HtmlWidget, {isContainer:false, width:0, height:0, aniSrc:"", interval:100, _blankSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/blank.gif"), templateString:"<img class=\"dojoAnimatedPng\" />", postCreate:function () {
+	this.cellWidth = this.width;
+	this.cellHeight = this.height;
+	var img = new Image();
+	var self = this;
+	img.onload = function () {
+		self._initAni(img.width, img.height);
+	};
+	img.src = this.aniSrc;
+}, _initAni:function (w, h) {
+	this.domNode.src = this._blankSrc;
+	this.domNode.width = this.cellWidth;
+	this.domNode.height = this.cellHeight;
+	this.domNode.style.backgroundImage = "url(" + this.aniSrc + ")";
+	this.domNode.style.backgroundRepeat = "no-repeat";
+	this.aniCols = Math.floor(w / this.cellWidth);
+	this.aniRows = Math.floor(h / this.cellHeight);
+	this.aniCells = this.aniCols * this.aniRows;
+	this.aniFrame = 0;
+	window.setInterval(dojo.lang.hitch(this, "_tick"), this.interval);
+}, _tick:function () {
+	this.aniFrame++;
+	if (this.aniFrame == this.aniCells) {
+		this.aniFrame = 0;
 	}
-);
+	var col = this.aniFrame % this.aniCols;
+	var row = Math.floor(this.aniFrame / this.aniCols);
+	var bx = -1 * col * this.cellWidth;
+	var by = -1 * row * this.cellHeight;
+	this.domNode.style.backgroundPosition = bx + "px " + by + "px";
+}});
 
+
 __CPAN_FILE__ src/widget/TreeDocIconExtension.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -26554,113 +17481,48 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeDocIconExtension");
-
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.widget.TreeExtension");
-
-// selector extension to emphasize node
-
-dojo.widget.defineWidget(
-	"dojo.widget.TreeDocIconExtension",
-	[dojo.widget.TreeExtension],
-{
-	/**
-	 * can't unlisten
-	 */
-	
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/TreeDocIcon.css"),
-
-	
-	listenTreeEvents: ["afterChangeTree","afterSetFolder","afterUnsetFolder"],
-	
-	listenNodeFilter: function(elem) { return elem instanceof dojo.widget.Widget },
-	
-	getnodeDocType: function(node) {
-		var nodeDocType = node.getnodeDocType();
-		if (!nodeDocType) { // set default type
-			nodeDocType = node.isFolder ? "Folder" : "Document";
-		}
-		return nodeDocType;
-	},
-	
-	setnodeDocTypeClass: function(node) {
-		
-		var reg = new RegExp("(^|\\s)"+node.tree.classPrefix+"Icon\\w+",'g');			
-				
-		var clazz = dojo.html.getClass(node.iconNode).replace(reg,'') + ' ' + node.tree.classPrefix+'Icon'+this.getnodeDocType(node);
-		dojo.html.setClass(node.iconNode, clazz);		
-	},
-		
-		
-	onAfterSetFolder: function(message) {
-		//dojo.debug("FOLDER");
-		if (message.source.iconNode) {
-			// on node-initialize time when folder is set there is no iconNode
-			// this case will be processed in treeChange anyway			
-			this.setnodeDocTypeClass(message.source);
-		}
-	},
-	
-	
-	onAfterUnsetFolder: function(message) {
+dojo.widget.defineWidget("dojo.widget.TreeDocIconExtension", [dojo.widget.TreeExtension], {templateCssString:"\n/* CSS for TreeDocIconExtension */\n\n\n/* long vertical line under docIcon, connecting w/ children */\n.TreeStateChildrenYes-ExpandOpen .TreeIconContent {\n	background-image : url('../templates/images/TreeV3/i_long.gif');\n	background-repeat : no-repeat;\n	background-position: 18px 9px;\n}\n\n/* close has higher priority */\n.TreeStateChildrenYes-ExpandClosed .TreeIconContent {\n	background-image : url();\n}\n\n/* higher priotity: same length and appear after background-definition */\n.TreeStateChildrenNo-ExpandLeaf .TreeIconContent {\n	background-image : url();\n}\n\n.TreeStateChildrenNo-ExpandClosed .TreeIconContent {\n	background-image : url();\n}\n\n.TreeStateChildrenNo-ExpandOpen .TreeIconContent {\n	background-image : url();\n}\n\n\n/* highest priority */\n.TreeIconDocument {\n	background-image: url('../templates/images/TreeV3/document.gif');\n}\n\n.TreeExpandOpen .TreeIconFolder {\n	background-image: url('../templates/images/TreeV3/open.gif');\n}\n\n.TreeExpandClosed .TreeIconFolder {\n	background-image: url('../templates/images/TreeV3/closed.gif');\n}\n\n/* generic class for docIcon */\n.TreeIcon {\n	width: 18px;\n	height: 18px;\n	float: left;\n	display: inline;\n	background-repeat : no-repeat;\n}\n\ndiv.TreeContent {\n	margin-left: 36px;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/TreeDocIcon.css"), listenTreeEvents:["afterChangeTree", "afterSetFolder", "afterUnsetFolder"], listenNodeFilter:function (elem) {
+	return elem instanceof dojo.widget.Widget;
+}, getnodeDocType:function (node) {
+	var nodeDocType = node.getnodeDocType();
+	if (!nodeDocType) {
+		nodeDocType = node.isFolder ? "Folder" : "Document";
+	}
+	return nodeDocType;
+}, setnodeDocTypeClass:function (node) {
+	var reg = new RegExp("(^|\\s)" + node.tree.classPrefix + "Icon\\w+", "g");
+	var clazz = dojo.html.getClass(node.iconNode).replace(reg, "") + " " + node.tree.classPrefix + "Icon" + this.getnodeDocType(node);
+	dojo.html.setClass(node.iconNode, clazz);
+}, onAfterSetFolder:function (message) {
+	if (message.source.iconNode) {
 		this.setnodeDocTypeClass(message.source);
-	},
-		
-	
-	listenNode: function(node) {
-		/**
-		 * add node with document type icon to node template and Tree.iconNodeTemplate
-		 * it will be set to TreeNode.iconNode on node creation
-		 * we do not assign document type yet, its node specific
-		 */
-		//dojo.debug("listenNode in "+node);
-			
-		node.contentIconNode = document.createElement("div");
-		var clazz = node.tree.classPrefix+"IconContent";
-		if (dojo.render.html.ie) {
-			clazz = clazz+' '+ node.tree.classPrefix+"IEIconContent";
-		}
-		dojo.html.setClass(node.contentIconNode, clazz);
-		
-		node.contentNode.parentNode.replaceChild(node.contentIconNode, node.expandNode);
-									  
-	  	node.iconNode = document.createElement("div");
-		dojo.html.setClass(node.iconNode, node.tree.classPrefix+"Icon"+' '+node.tree.classPrefix+'Icon'+this.getnodeDocType(node));
-		
-		node.contentIconNode.appendChild(node.expandNode);
-		node.contentIconNode.appendChild(node.iconNode);
-		
-		dojo.dom.removeNode(node.contentNode);
-		node.contentIconNode.appendChild(node.contentNode);
-		
-	
-		
-		//dojo.html.insertAfter(node.iconNode, node.expandNode);
-		
-		//dojo.debug("listenNode out "+node);
-		
-	},
-			
-	
-	onAfterChangeTree: function(message) {
-		var _this = this;
-		
-		//dojo.debug(message.node)
-		
-		if (!message.oldTree || !this.listenedTrees[message.oldTree.widgetId]) {			
-			// moving from old tree to our tree
-			this.processDescendants(message.node,
-				this.listenNodeFilter,
-				this.listenNode
-			);
-		}
-		
 	}
-	
+}, onAfterUnsetFolder:function (message) {
+	this.setnodeDocTypeClass(message.source);
+}, listenNode:function (node) {
+	node.contentIconNode = document.createElement("div");
+	var clazz = node.tree.classPrefix + "IconContent";
+	if (dojo.render.html.ie) {
+		clazz = clazz + " " + node.tree.classPrefix + "IEIconContent";
+	}
+	dojo.html.setClass(node.contentIconNode, clazz);
+	node.contentNode.parentNode.replaceChild(node.contentIconNode, node.expandNode);
+	node.iconNode = document.createElement("div");
+	dojo.html.setClass(node.iconNode, node.tree.classPrefix + "Icon" + " " + node.tree.classPrefix + "Icon" + this.getnodeDocType(node));
+	node.contentIconNode.appendChild(node.expandNode);
+	node.contentIconNode.appendChild(node.iconNode);
+	dojo.dom.removeNode(node.contentNode);
+	node.contentIconNode.appendChild(node.contentNode);
+}, onAfterChangeTree:function (message) {
+	var _this = this;
+	if (!message.oldTree || !this.listenedTrees[message.oldTree.widgetId]) {
+		this.processDescendants(message.node, this.listenNodeFilter, this.listenNode);
+	}
+}});
 
-});
 
 __CPAN_FILE__ src/widget/TreeRPCController.js
 /*
@@ -26673,159 +17535,67 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeRPCController");
-
 dojo.require("dojo.event.*");
-dojo.require("dojo.json")
+dojo.require("dojo.json");
 dojo.require("dojo.io.*");
 dojo.require("dojo.widget.TreeLoadingController");
-
-
-dojo.widget.defineWidget("dojo.widget.TreeRPCController", dojo.widget.TreeLoadingController, {
-	/**
-	 * Make request to server about moving children.
-	 *
-	 * Request returns "true" if move succeeded,
-	 * object with error field if failed
-	 *
-	 * I can't leave DragObject floating until async request returns, need to return false/true
-	 * so making it sync way...
-	 *
-	 * Also, "loading" icon is not shown until function finishes execution, so no indication for remote request.
-	*/
-	doMove: function(child, newParent, index){
-
-		//if (newParent.isTreeNode) newParent.markLoading();
-
-		var params = {
-			// where from
-			child: this.getInfo(child),
-			childTree: this.getInfo(child.tree),
-			// where to
-			newParent: this.getInfo(newParent),
-			newParentTree: this.getInfo(newParent.tree),
-			newIndex: index
-		};
-
-		var success;
-
-		this.runRPC({		
-			url: this.getRPCUrl('move'),
-			/* I hitch to get this.loadOkHandler */
-			load: function(response){
-				success = this.doMoveProcessResponse(response, child, newParent, index) ;
-			},
-			sync: true,
-			lock: [child, newParent],
-			params: params
-		});
-
-
-		return success;
-	},
-
-	doMoveProcessResponse: function(response, child, newParent, index){
-
-		if(!dojo.lang.isUndefined(response.error)){
-			this.RPCErrorHandler("server", response.error);
-			return false;
-		}
-
-		var args = [child, newParent, index];
-		return dojo.widget.TreeLoadingController.prototype.doMove.apply(this, args);
-
-	},
-
-
-	doRemoveNode: function(node, callObj, callFunc){
-
-		var params = {
-			node: this.getInfo(node),
-			tree: this.getInfo(node.tree)
-		}
-
-		this.runRPC({
-				url: this.getRPCUrl('removeNode'),
-				/* I hitch to get this.loadOkHandler */
-				load: function(response){
-					this.doRemoveNodeProcessResponse(response, node, callObj, callFunc) 
-				},
-				params: params,
-				lock: [node]
-		});
-
-	},
-
-
-	doRemoveNodeProcessResponse: function(response, node, callObj, callFunc){
-		if(!dojo.lang.isUndefined(response.error)){
-			this.RPCErrorHandler("server", response.error);
-			return false;
-		}
-
-		if(!response){ return false; }
-
-		if(response == true){
-			/* change parent succeeded */
-			var args = [ node, callObj, callFunc ];
-			dojo.widget.TreeLoadingController.prototype.doRemoveNode.apply(this, args);
-
-			return;
-		}else if(dojo.lang.isObject(response)){
+dojo.widget.defineWidget("dojo.widget.TreeRPCController", dojo.widget.TreeLoadingController, {doMove:function (child, newParent, index) {
+	var params = {child:this.getInfo(child), childTree:this.getInfo(child.tree), newParent:this.getInfo(newParent), newParentTree:this.getInfo(newParent.tree), newIndex:index};
+	var success;
+	this.runRPC({url:this.getRPCUrl("move"), load:function (response) {
+		success = this.doMoveProcessResponse(response, child, newParent, index);
+	}, sync:true, lock:[child, newParent], params:params});
+	return success;
+}, doMoveProcessResponse:function (response, child, newParent, index) {
+	if (!dojo.lang.isUndefined(response.error)) {
+		this.RPCErrorHandler("server", response.error);
+		return false;
+	}
+	var args = [child, newParent, index];
+	return dojo.widget.TreeLoadingController.prototype.doMove.apply(this, args);
+}, doRemoveNode:function (node, callObj, callFunc) {
+	var params = {node:this.getInfo(node), tree:this.getInfo(node.tree)};
+	this.runRPC({url:this.getRPCUrl("removeNode"), load:function (response) {
+		this.doRemoveNodeProcessResponse(response, node, callObj, callFunc);
+	}, params:params, lock:[node]});
+}, doRemoveNodeProcessResponse:function (response, node, callObj, callFunc) {
+	if (!dojo.lang.isUndefined(response.error)) {
+		this.RPCErrorHandler("server", response.error);
+		return false;
+	}
+	if (!response) {
+		return false;
+	}
+	if (response == true) {
+		var args = [node, callObj, callFunc];
+		dojo.widget.TreeLoadingController.prototype.doRemoveNode.apply(this, args);
+		return;
+	} else {
+		if (dojo.lang.isObject(response)) {
 			dojo.raise(response.error);
-		}else{
-			dojo.raise("Invalid response "+response)
+		} else {
+			dojo.raise("Invalid response " + response);
 		}
-
-
-	},
-
-
-
-	// -----------------------------------------------------------------------------
-	//                             Create node stuff
-	// -----------------------------------------------------------------------------
-
-
-	doCreateChild: function(parent, index, output, callObj, callFunc){
-
-			var params = {
-				tree: this.getInfo(parent.tree),
-				parent: this.getInfo(parent),
-				index: index,
-				data: output
-			}
-
-			this.runRPC({
-				url: this.getRPCUrl('createChild'),
-				load: function(response) {
-					// suggested data is dead, fresh data from server is used
-					this.doCreateChildProcessResponse( response, parent, index, callObj, callFunc) 
-				},
-				params: params,
-				lock: [parent]
-			});
-
-	},
-
-	doCreateChildProcessResponse: function(response, parent, index, callObj, callFunc){
-
-		if(!dojo.lang.isUndefined(response.error)){
-			this.RPCErrorHandler("server",response.error);
-			return false;
-		}
-
-		if(!dojo.lang.isObject(response)){
-			dojo.raise("Invalid result "+response)
-		}
-
-		var args = [parent, index, response, callObj, callFunc];
-		
-		dojo.widget.TreeLoadingController.prototype.doCreateChild.apply(this, args);
 	}
-});
+}, doCreateChild:function (parent, index, output, callObj, callFunc) {
+	var params = {tree:this.getInfo(parent.tree), parent:this.getInfo(parent), index:index, data:output};
+	this.runRPC({url:this.getRPCUrl("createChild"), load:function (response) {
+		this.doCreateChildProcessResponse(response, parent, index, callObj, callFunc);
+	}, params:params, lock:[parent]});
+}, doCreateChildProcessResponse:function (response, parent, index, callObj, callFunc) {
+	if (!dojo.lang.isUndefined(response.error)) {
+		this.RPCErrorHandler("server", response.error);
+		return false;
+	}
+	if (!dojo.lang.isObject(response)) {
+		dojo.raise("Invalid result " + response);
+	}
+	var args = [parent, index, response, callObj, callFunc];
+	dojo.widget.TreeLoadingController.prototype.doCreateChild.apply(this, args);
+}});
 
+
 __CPAN_FILE__ src/widget/TreeEmphasizeOnSelect.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -26837,40 +17607,21 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeEmphasizeOnSelect");
-
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.widget.TreeSelectorV3");
 dojo.require("dojo.html.selection");
+dojo.widget.defineWidget("dojo.widget.TreeEmphasizeOnSelect", dojo.widget.HtmlWidget, {selector:"", initialize:function () {
+	this.selector = dojo.widget.byId(this.selector);
+	dojo.event.topic.subscribe(this.selector.eventNames.select, this, "onSelect");
+	dojo.event.topic.subscribe(this.selector.eventNames.deselect, this, "onDeselect");
+}, onSelect:function (message) {
+	message.node.viewEmphasize();
+}, onDeselect:function (message) {
+	message.node.viewUnemphasize();
+}});
 
-// selector extension to emphasize node
 
-dojo.widget.defineWidget(
-	"dojo.widget.TreeEmphasizeOnSelect",
-	dojo.widget.HtmlWidget,
-{
-	selector: "",
-	
-	initialize: function() {
-		this.selector = dojo.widget.byId(this.selector);
-		
-		dojo.event.topic.subscribe(this.selector.eventNames.select, this, "onSelect");
-		dojo.event.topic.subscribe(this.selector.eventNames.deselect, this, "onDeselect");	
-	},
-
-	
-	onSelect: function(message) {
-		message.node.viewEmphasize()		
-	},
-	
-	onDeselect: function(message) {
-		message.node.viewUnemphasize()
-	}
-	
-
-});
-
 __CPAN_FILE__ src/widget/TreeRpcControllerV3.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -26882,425 +17633,176 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeRpcControllerV3");
-
 dojo.require("dojo.event.*");
-dojo.require("dojo.json")
+dojo.require("dojo.json");
 dojo.require("dojo.io.*");
 dojo.require("dojo.widget.TreeLoadingControllerV3");
-
-dojo.widget.defineWidget(
-	"dojo.widget.TreeRpcControllerV3",
-	dojo.widget.TreeLoadingControllerV3,
-{
-	// TODO: do something with addChild / setChild, so that RpcController become able
-	// to hook on this and report to server
-
-	extraRpcOnEdit: false,
-				
-	/**
-	 * Make request to server about moving children.
-	 *
-	 * Request returns "true" if move succeeded,
-	 * object with error field if failed
-	 *
-	 * I can't leave DragObject floating until async request returns, need to return false/true
-	 * so making it sync way...
-	 *
-	 * Also, "loading" icon is not shown until function finishes execution, so no indication for remote request.
-	*/
-	doMove: function(child, newParent, index, sync){
-
-		//if (newParent.isTreeNode) newParent.markLoading();
-
-		
-		var params = {
-			// where from
-			child: this.getInfo(child),
-			childTree: this.getInfo(child.tree),
-			oldParent: this.getInfo(child.parent),
-			oldParentTree: this.getInfo(child.parent.tree),
-			// where to
-			newParent: this.getInfo(newParent),
-			newParentTree: this.getInfo(newParent.tree),
-			newIndex: index
-		};
-
-
-		var deferred = this.runRpc({		
-			url: this.getRpcUrl('move'),
-			sync: sync,			
-			params: params
+dojo.widget.defineWidget("dojo.widget.TreeRpcControllerV3", dojo.widget.TreeLoadingControllerV3, {extraRpcOnEdit:false, doMove:function (child, newParent, index, sync) {
+	var params = {child:this.getInfo(child), childTree:this.getInfo(child.tree), oldParent:this.getInfo(child.parent), oldParentTree:this.getInfo(child.parent.tree), newParent:this.getInfo(newParent), newParentTree:this.getInfo(newParent.tree), newIndex:index};
+	var deferred = this.runRpc({url:this.getRpcUrl("move"), sync:sync, params:params});
+	var _this = this;
+	var args = arguments;
+	deferred.addCallback(function () {
+		dojo.widget.TreeBasicControllerV3.prototype.doMove.apply(_this, args);
+	});
+	return deferred;
+}, prepareDetach:function (node, sync) {
+	var deferred = this.startProcessing(node);
+	return deferred;
+}, finalizeDetach:function (node) {
+	this.finishProcessing(node);
+}, doDetach:function (node, sync) {
+	var params = {node:this.getInfo(node), tree:this.getInfo(node.tree)};
+	var deferred = this.runRpc({url:this.getRpcUrl("detach"), sync:sync, params:params});
+	var _this = this;
+	var args = arguments;
+	deferred.addCallback(function () {
+		dojo.widget.TreeBasicControllerV3.prototype.doDetach.apply(_this, args);
+	});
+	return deferred;
+}, requestEditConfirmation:function (node, action, sync) {
+	if (!this.extraRpcOnEdit) {
+		return dojo.Deferred.prototype.makeCalled();
+	}
+	var _this = this;
+	var deferred = this.startProcessing(node);
+	var params = {node:this.getInfo(node), tree:this.getInfo(node.tree)};
+	deferred.addCallback(function () {
+		return _this.runRpc({url:_this.getRpcUrl(action), sync:sync, params:params});
+	});
+	deferred.addBoth(function (r) {
+		_this.finishProcessing(node);
+		return r;
+	});
+	return deferred;
+}, editLabelSave:function (node, newContent, sync) {
+	var deferred = this.startProcessing(node);
+	var _this = this;
+	var params = {node:this.getInfo(node), tree:this.getInfo(node.tree), newContent:newContent};
+	deferred.addCallback(function () {
+		return _this.runRpc({url:_this.getRpcUrl("editLabelSave"), sync:sync, params:params});
+	});
+	deferred.addBoth(function (r) {
+		_this.finishProcessing(node);
+		return r;
+	});
+	return deferred;
+}, editLabelStart:function (node, sync) {
+	if (!this.canEditLabel(node)) {
+		return false;
+	}
+	var _this = this;
+	if (!this.editor.isClosed()) {
+		var deferred = this.editLabelFinish(this.editor.saveOnBlur, sync);
+		deferred.addCallback(function () {
+			return _this.editLabelStart(node, sync);
 		});
-
-		var _this = this;
-		var args = arguments;	
-		
-		//deferred.addCallback(function(res) { dojo.debug("doMove fired "+res); return res});
-		
-		deferred.addCallback(function() {			
-			dojo.widget.TreeBasicControllerV3.prototype.doMove.apply(_this,args);
-		});
-
-		
 		return deferred;
-	},
-
-	// -------------- detach
-	
-	prepareDetach: function(node, sync) {
-		var deferred = this.startProcessing(node);		
-		return deferred;
-	},
-	
-	finalizeDetach: function(node) {
-		this.finishProcessing(node);
-	},
-
-	doDetach: function(node, sync){
-
-		
-		var params = {
-			node: this.getInfo(node),
-			tree: this.getInfo(node.tree)
+	}
+	var deferred = this.requestEditConfirmation(node, "editLabelStart", sync);
+	deferred.addCallback(function () {
+		_this.doEditLabelStart(node);
+	});
+	return deferred;
+}, editLabelFinish:function (save, sync) {
+	var _this = this;
+	var node = this.editor.node;
+	var deferred = dojo.Deferred.prototype.makeCalled();
+	if (!save && !node.isPhantom) {
+		deferred = this.requestEditConfirmation(this.editor.node, "editLabelFinishCancel", sync);
+	}
+	if (save) {
+		if (node.isPhantom) {
+			deferred = this.sendCreateChildRequest(node.parent, node.getParentIndex(), {title:this.editor.getContents()}, sync);
+		} else {
+			deferred = this.editLabelSave(node, this.editor.getContents(), sync);
 		}
-
-		var deferred = this.runRpc({
-			url: this.getRpcUrl('detach'),
-			sync: sync,
-			params: params			
+	}
+	deferred.addCallback(function (server_data) {
+		_this.doEditLabelFinish(save, server_data);
+	});
+	deferred.addErrback(function (r) {
+		_this.doEditLabelFinish(false);
+		return false;
+	});
+	return deferred;
+}, createAndEdit:function (parent, index, sync) {
+	var data = {title:parent.tree.defaultChildTitle};
+	if (!this.canCreateChild(parent, index, data)) {
+		return false;
+	}
+	if (!this.editor.isClosed()) {
+		var deferred = this.editLabelFinish(this.editor.saveOnBlur, sync);
+		deferred.addCallback(function () {
+			return _this.createAndEdit(parent, index, sync);
 		});
-		
-		
-		var _this = this;
-		var args = arguments;
-		
-		deferred.addCallback(function() {			
-			dojo.widget.TreeBasicControllerV3.prototype.doDetach.apply(_this,args);
-		});
-		
-						
 		return deferred;
-
-	},
-
-	// -------------------------- Inline edit node ---------------------	
-
-	/**
-	 * send edit start request if needed
-	 * useful for server-side locking 
-	 */
-	requestEditConfirmation: function(node, action, sync) {
-		if (!this.extraRpcOnEdit) {			
-			return dojo.Deferred.prototype.makeCalled();
-		}
-	
-		//dojo.debug("requestEditConfirmation "+node+" "+action);
-		
-		var _this = this;
-	
-		var deferred = this.startProcessing(node);
-			
-		//dojo.debug("startProcessing "+node);
-		
-		var params = {
-			node: this.getInfo(node),
-			tree: this.getInfo(node.tree)
-		}
-		
-		deferred.addCallback(function() {
-			//dojo.debug("add action on requestEditConfirmation "+action);
-			return _this.runRpc({
-				url: _this.getRpcUrl(action),
-				sync: sync,
-				params: params			
-			});
-		});
-		
-		
-		deferred.addBoth(function(r) {
-			//dojo.debug("finish rpc with "+r);
-			_this.finishProcessing(node);
-			return r;
-		});
-	
-		return deferred;
-	},
-	
-	editLabelSave: function(node, newContent, sync) {
-		var deferred = this.startProcessing(node);
-						
-		var _this = this;
-		
-		var params = {
-			node: this.getInfo(node),
-			tree: this.getInfo(node.tree),
-			newContent: newContent
-		}
-		
-	
-		deferred.addCallback(function() {
-			return _this.runRpc({
-				url: _this.getRpcUrl('editLabelSave'),
-				sync: sync,
-				params: params			
-			});
-		});
-		
-		
-		deferred.addBoth(function(r) {
-			_this.finishProcessing(node);
-			return r;
-		});
-	
-		return deferred;
-	},
-	
-	editLabelStart: function(node, sync) {		
-		if (!this.canEditLabel(node)) {
-			return false;
-		}
-		
-		var _this = this;
-		
-		if (!this.editor.isClosed()) {
-			//dojo.debug("editLabelStart editor open");
-			var deferred = this.editLabelFinish(this.editor.saveOnBlur, sync);
-			deferred.addCallback(function() {
-				return _this.editLabelStart(node, sync);
-			});
-			return deferred;
-		}
-						
-		//dojo.debug("editLabelStart closed, request");
-		var deferred = this.requestEditConfirmation(node, 'editLabelStart', sync);
-		
-		deferred.addCallback(function() {
-			//dojo.debug("start edit");
-			_this.doEditLabelStart(node);
-		});
-	
-		
-		return deferred;
-	
-	},
-
-	editLabelFinish: function(save, sync) {
-		var _this = this;
-		
-		var node = this.editor.node;
-		
-		var deferred = dojo.Deferred.prototype.makeCalled();
-		
-		if (!save && !node.isPhantom) {
-			deferred = this.requestEditConfirmation(this.editor.node,'editLabelFinishCancel', sync);
-		}
-		
-		if (save) {
-			if (node.isPhantom) {
-				deferred = this.sendCreateChildRequest(
-					node.parent,
-					node.getParentIndex(),
-					{title:this.editor.getContents()},
-					sync
-				);
-			} else {				
-				// this deferred has new information from server
-				deferred = this.editLabelSave(node, this.editor.getContents(), sync);
-			}
-		}
-		
-		deferred.addCallback(function(server_data) {			
-			_this.doEditLabelFinish(save, server_data);
-		});
-		
-		deferred.addErrback(function(r) {
-			//dojo.debug("Error occured");
-			//dojo.debugShallow(r);
-			_this.doEditLabelFinish(false);
-			return false;
-		});
-		
-		return deferred;
-	},
-	
-			
-	
-	/**
-	 * TODO: merge server-side info
-	 */
-	createAndEdit: function(parent, index, sync) {
-		var data = {title:parent.tree.defaultChildTitle};
-		
-		if (!this.canCreateChild(parent, index, data)) {
-			return false;
-		}
-		
-		/* close editor first */
-		if (!this.editor.isClosed()) {
-			//dojo.debug("editLabelStart editor open");
-			var deferred = this.editLabelFinish(this.editor.saveOnBlur, sync);
-			deferred.addCallback(function() {
-				return _this.createAndEdit(parent, index, sync);
-			});
-			return deferred;
-		}
-			
-		var _this = this;
-		
-		/* load parent and create child*/
-		var deferred = this.prepareCreateChild(parent, index, data, sync);
-		
-		
-		deferred.addCallback(function() {
-			var child = _this.makeDefaultNode(parent, index);			
-			child.isPhantom = true;
+	}
+	var _this = this;
+	var deferred = this.prepareCreateChild(parent, index, data, sync);
+	deferred.addCallback(function () {
+		var child = _this.makeDefaultNode(parent, index);
+		child.isPhantom = true;
+		return child;
+	});
+	deferred.addBoth(function (r) {
+		_this.finalizeCreateChild(parent, index, data, sync);
+		return r;
+	});
+	deferred.addCallback(function (child) {
+		var d = _this.exposeCreateChild(parent, index, data, sync);
+		d.addCallback(function () {
 			return child;
 		});
-		
-		
-		deferred.addBoth(function(r) {
-			_this.finalizeCreateChild(parent, index, data, sync);
-			return r;
-		});
-		
-		/* expand parent */
-		deferred.addCallback(function(child) {
-			var d = _this.exposeCreateChild(parent, index, data, sync);
-			d.addCallback(function() { return child });
-			return d;
-		});
-		
-		
-		deferred.addCallback(function(child) {
-			//dojo.debug("start edit");
-			_this.doEditLabelStart(child);
-			return child;
-		});
-		
-		
-		
-		return deferred;
-	
-	},
-
-	prepareDestroyChild: function(node, sync) {
-		//dojo.debug(node);
-		var deferred = this.startProcessing(node);		
-		return deferred;
-	},
-	
-	finalizeDestroyChild: function(node) {
-		this.finishProcessing(node);
-	},
-		
-
-	doDestroyChild: function(node, sync){
-
-		
-		var params = {
-			node: this.getInfo(node),
-			tree: this.getInfo(node.tree)
-		}
-
-		var deferred = this.runRpc({
-			url: this.getRpcUrl('destroyChild'),
-			sync: sync,
-			params: params			
-		});
-		
-		
-		var _this = this;
-		var args = arguments;
-		
-		deferred.addCallback(function() {			
-			dojo.widget.TreeBasicControllerV3.prototype.doDestroyChild.apply(_this,args);
-		});
-		
-						
-		return deferred;
-
-	},
-
-	// -----------------------------------------------------------------------------
-	//                             Create node stuff
-	// -----------------------------------------------------------------------------
-	sendCreateChildRequest: function(parent, index, data, sync) {
-		var params = {
-			tree: this.getInfo(parent.tree),
-			parent: this.getInfo(parent),
-			index: index,
-			data: data
-		}
-
-		var deferred = this.runRpc({
-			url: this.getRpcUrl('createChild'),
-			sync: sync,
-			params: params
-		});
-		
-		return deferred;
-	},
-		
-
-	doCreateChild: function(parent, index, data, sync){		
-		
-		if (dojo.lang.isUndefined(data.title)) {
-			data.title = parent.tree.defaultChildTitle;
-		}
-
-		var deferred = this.sendCreateChildRequest(parent,index,data,sync);
-		
-		var _this = this;
-		var args = arguments;
-		
-		
-		deferred.addCallback(function(server_data) {
-			dojo.lang.mixin(data, server_data); // add my data as less priority
-			//dojo.debug("Create ");
-			//dojo.debug(server_data);
-			return dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(_this,parent,index,data);
-		});
-		
-						
-		return deferred;
-	},
-	
-	// TODO: merge server data into cloned node, like in createChild	
-	doClone: function(child, newParent, index, deep, sync) {
-		
-		var params = {
-			child: this.getInfo(child),
-			oldParent: this.getInfo(child.parent),
-			oldParentTree: this.getInfo(child.parent.tree),
-			newParent: this.getInfo(newParent),
-			newParentTree: this.getInfo(newParent.tree),
-			index: index,
-			deep: deep ? true : false, // undefined -> false
-			tree: this.getInfo(child.tree)
-		}
-		
-		
-		var deferred = this.runRpc({
-			url: this.getRpcUrl('clone'),
-			sync: sync,
-			params: params
-		});
-		
-		var _this = this;
-		var args = arguments;
-		
-		deferred.addCallback(function() {			
-			dojo.widget.TreeBasicControllerV3.prototype.doClone.apply(_this,args);
-		});
-		
-						
-		return deferred;	
+		return d;
+	});
+	deferred.addCallback(function (child) {
+		_this.doEditLabelStart(child);
+		return child;
+	});
+	return deferred;
+}, prepareDestroyChild:function (node, sync) {
+	var deferred = this.startProcessing(node);
+	return deferred;
+}, finalizeDestroyChild:function (node) {
+	this.finishProcessing(node);
+}, doDestroyChild:function (node, sync) {
+	var params = {node:this.getInfo(node), tree:this.getInfo(node.tree)};
+	var deferred = this.runRpc({url:this.getRpcUrl("destroyChild"), sync:sync, params:params});
+	var _this = this;
+	var args = arguments;
+	deferred.addCallback(function () {
+		dojo.widget.TreeBasicControllerV3.prototype.doDestroyChild.apply(_this, args);
+	});
+	return deferred;
+}, sendCreateChildRequest:function (parent, index, data, sync) {
+	var params = {tree:this.getInfo(parent.tree), parent:this.getInfo(parent), index:index, data:data};
+	var deferred = this.runRpc({url:this.getRpcUrl("createChild"), sync:sync, params:params});
+	return deferred;
+}, doCreateChild:function (parent, index, data, sync) {
+	if (dojo.lang.isUndefined(data.title)) {
+		data.title = parent.tree.defaultChildTitle;
 	}
+	var deferred = this.sendCreateChildRequest(parent, index, data, sync);
+	var _this = this;
+	var args = arguments;
+	deferred.addCallback(function (server_data) {
+		dojo.lang.mixin(data, server_data);
+		return dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(_this, parent, index, data);
+	});
+	return deferred;
+}, doClone:function (child, newParent, index, deep, sync) {
+	var params = {child:this.getInfo(child), oldParent:this.getInfo(child.parent), oldParentTree:this.getInfo(child.parent.tree), newParent:this.getInfo(newParent), newParentTree:this.getInfo(newParent.tree), index:index, deep:deep ? true : false, tree:this.getInfo(child.tree)};
+	var deferred = this.runRpc({url:this.getRpcUrl("clone"), sync:sync, params:params});
+	var _this = this;
+	var args = arguments;
+	deferred.addCallback(function () {
+		dojo.widget.TreeBasicControllerV3.prototype.doClone.apply(_this, args);
+	});
+	return deferred;
+}});
 
-	
-});
 
 __CPAN_FILE__ src/widget/TaskBar.js
 /*
@@ -27314,88 +17816,43 @@
 */
 
 dojo.provide("dojo.widget.TaskBar");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.FloatingPane");
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.event.*");
 dojo.require("dojo.html.selection");
-
-dojo.widget.defineWidget(
-	"dojo.widget.TaskBarItem",
-	dojo.widget.HtmlWidget,
-{
-	// summary
-	//	Widget used internally by the TaskBar;
-	//	shows an icon associated w/a floating pane
-
-	// iconSrc: String
-	//	path of icon for associated floating pane
-	iconSrc: '',
-	
-	// caption: String
-	//	name of associated floating pane
-	caption: 'Untitled',
-
-	templatePath: dojo.uri.dojoUri("src/widget/templates/TaskBarItemTemplate.html"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/TaskBar.css"),
-
-	fillInTemplate: function() {
-		if (this.iconSrc) {
-			var img = document.createElement("img");
-			img.src = this.iconSrc;
-			this.domNode.appendChild(img);
-		}
-		this.domNode.appendChild(document.createTextNode(this.caption));
-		dojo.html.disableSelection(this.domNode);
-	},
-
-	postCreate: function() {
-		this.window=dojo.widget.getWidgetById(this.windowId);
-		this.window.explodeSrc = this.domNode;
-		dojo.event.connect(this.window, "destroy", this, "destroy")
-	},
-
-	onClick: function() {
-		this.window.toggleDisplay();
+dojo.widget.defineWidget("dojo.widget.TaskBarItem", dojo.widget.HtmlWidget, {iconSrc:"", caption:"Untitled", templateString:"<div class=\"dojoTaskBarItem\" dojoAttachEvent=\"onClick\">\n</div>\n", templateCssString:".dojoTaskBarItem {\n\tdisplay: inline-block;\n\tbackground-color: ThreeDFace;\n\tborder: outset 2px;\n\tmargin-right: 5px;\n\tcursor: pointer;\n\theight: 35px;\n\twidth: 100px;\n\tfont-size: 10pt;\n\twhite-space: nowrap;\n\ttext-align: center;\n\tfloat: left;\n\toverflow: hidden;\n}\n\n.dojoTaskBarItem img {\n\tvertical-align: middle;\n\tmargin-right: 5px;\n\tmargin-left: 5px;\t\n\theight: 32px;\n\twidth: 32px;\n}\n\n.dojoTaskBarItem a {\n\t color: black;\n\ttext-decoration: none;\n}\n\n\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/TaskBar.css"), fillInTemplate:function () {
+	if (this.iconSrc) {
+		var img = document.createElement("img");
+		img.src = this.iconSrc;
+		this.domNode.appendChild(img);
 	}
-});
-
-dojo.widget.defineWidget(
-	"dojo.widget.TaskBar",
-	dojo.widget.FloatingPane,
-	function(){
-		this._addChildStack = [];
-	},
-{
-	// summary:
-	//	Displays an icon for each associated floating pane, like Windows task bar
-
-	// TODO: this class extends floating pane merely to get the shadow;
-	//	it should extend HtmlWidget and then just call the shadow code directly
-
-	resizable: false,
-	titleBarDisplay: false,
-
-	addChild: function(/*Widget*/ child) {
-		// summary: add taskbar item for specified FloatingPane
-		// TODO: this should not be called addChild(), as that has another meaning.
-		if(!this.containerNode){ 
-			this._addChildStack.push(child);
-		}else if(this._addChildStack.length > 0){
+	this.domNode.appendChild(document.createTextNode(this.caption));
+	dojo.html.disableSelection(this.domNode);
+}, postCreate:function () {
+	this.window = dojo.widget.getWidgetById(this.windowId);
+	this.window.explodeSrc = this.domNode;
+	dojo.event.connect(this.window, "destroy", this, "destroy");
+}, onClick:function () {
+	this.window.toggleDisplay();
+}});
+dojo.widget.defineWidget("dojo.widget.TaskBar", dojo.widget.FloatingPane, function () {
+	this._addChildStack = [];
+}, {resizable:false, titleBarDisplay:false, addChild:function (child) {
+	if (!this.containerNode) {
+		this._addChildStack.push(child);
+	} else {
+		if (this._addChildStack.length > 0) {
 			var oarr = this._addChildStack;
 			this._addChildStack = [];
 			dojo.lang.forEach(oarr, this.addChild, this);
 		}
-		var tbi = dojo.widget.createWidget("TaskBarItem",
-			{	windowId: child.widgetId, 
-				caption: child.title, 
-				iconSrc: child.iconSrc
-			});
-		dojo.widget.TaskBar.superclass.addChild.call(this,tbi);
 	}
-});
+	var tbi = dojo.widget.createWidget("TaskBarItem", {windowId:child.widgetId, caption:child.title, iconSrc:child.iconSrc});
+	dojo.widget.TaskBar.superclass.addChild.call(this, tbi);
+}});
 
+
 __CPAN_FILE__ src/widget/TabContainer.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -27408,220 +17865,83 @@
 */
 
 dojo.provide("dojo.widget.TabContainer");
-
 dojo.require("dojo.lang.func");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.PageContainer");
 dojo.require("dojo.event.*");
 dojo.require("dojo.html.selection");
 dojo.require("dojo.widget.html.layout");
-
-dojo.widget.defineWidget("dojo.widget.TabContainer", dojo.widget.PageContainer, {
-
-	// summary
-	//	A TabContainer is a container that has multiple panes, but shows only
-	//	one pane at a time.  There are a set of tabs corresponding to each pane,
-	//	where each tab has the title (aka label) of the pane, and optionally a close button.
-	//
-	//	Publishes topics <widgetId>-addChild, <widgetId>-removeChild, and <widgetId>-selectChild
-	//	(where <widgetId> is the id of the TabContainer itself.
-
-	// labelPosition: String
-	//   Defines where tab labels go relative to tab content.
-	//   "top", "bottom", "left-h", "right-h"
-	labelPosition: "top",
-	
-	// closeButton: String
-	//   If closebutton=="tab", then every tab gets a close button.
-	//   DEPRECATED:  Should just say closable=true on each
-	//   pane you want to be closable.
-	closeButton: "none",
-
-	templateString: null,	// override setting in PageContainer
-	templatePath: dojo.uri.dojoUri("src/widget/templates/TabContainer.html"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/TabContainer.css"),
-
-	// selectedTab: String
-	//	initially selected tab (widgetId)
-	//	DEPRECATED: use selectedChild instead.
-	selectedTab: "",
-
-	postMixInProperties: function() {
-		if(this.selectedTab){
-			dojo.deprecated("selectedTab deprecated, use selectedChild instead, will be removed in", "0.5");
-			this.selectedChild=this.selectedTab;
-		}
-		if(this.closeButton!="none"){
-			dojo.deprecated("closeButton deprecated, use closable='true' on each child instead, will be removed in", "0.5");
-		}
-		dojo.widget.TabContainer.superclass.postMixInProperties.apply(this, arguments);
-	},
-
-	fillInTemplate: function() {
-		// create the tab list that will have a tab (a.k.a. tab button) for each tab panel
-		this.tablist = dojo.widget.createWidget("TabController",
-			{
-				id: this.widgetId + "_tablist",
-				labelPosition: this.labelPosition,
-				doLayout: this.doLayout,
-				containerId: this.widgetId
-			}, this.tablistNode);
-		dojo.widget.TabContainer.superclass.fillInTemplate.apply(this, arguments);
-	},
-
-	postCreate: function(args, frag) {	
-		dojo.widget.TabContainer.superclass.postCreate.apply(this, arguments);
-
-		// size the container pane to take up the space not used by the tabs themselves
-		this.onResized();
-	},
-
-	_setupChild: function(tab){
-		if(this.closeButton=="tab" || this.closeButton=="pane"){
-			// TODO: remove in 0.5
-			tab.closable=true;
-		}
-		dojo.html.addClass(tab.domNode, "dojoTabPane");
-		dojo.widget.TabContainer.superclass._setupChild.apply(this, arguments);
-	},
-
-	onResized: function(){
-		// Summary: Configure the content pane to take up all the space except for where the tabs are
-		if(!this.doLayout){ return; }
-
-		// position the labels and the container node
-		var labelAlign=this.labelPosition.replace(/-h/,"");
-		var children = [
-			{domNode: this.tablist.domNode, layoutAlign: labelAlign},
-			{domNode: this.containerNode, layoutAlign: "client"}
-		];
-		dojo.widget.html.layout(this.domNode, children);
-
-		if(this.selectedChildWidget){
-			var containerSize = dojo.html.getContentBox(this.containerNode);
-			this.selectedChildWidget.resizeTo(containerSize.width, containerSize.height);
-		}
-	},
-
-	selectTab: function(tab, callingWidget){
-		dojo.deprecated("use selectChild() rather than selectTab(), selectTab() will be removed in", "0.5");
-		this.selectChild(tab, callingWidget);
-	},
-
-	onKey: function(e){
-		// summary
-		//	Keystroke handling for keystrokes on the tab panel itself (that were bubbled up to me)
-		//	Ctrl-up: focus is returned from the pane to the tab button
-		//	Alt-del: close tab
-		if(e.keyCode == e.KEY_UP_ARROW && e.ctrlKey){
-			// set focus to current tab
-			var button = this.correspondingTabButton || this.selectedTabWidget.tabButton;
-			button.focus();
-			dojo.event.browser.stopEvent(e);
-		}else if(e.keyCode == e.KEY_DELETE && e.altKey){
-			if (this.selectedChildWidget.closable){
+dojo.widget.defineWidget("dojo.widget.TabContainer", dojo.widget.PageContainer, {labelPosition:"top", closeButton:"none", templateString:null, templateString:"<div id=\"${this.widgetId}\" class=\"dojoTabContainer\">\n\t<div dojoAttachPoint=\"tablistNode\"></div>\n\t<div class=\"dojoTabPaneWrapper\" dojoAttachPoint=\"containerNode\" dojoAttachEvent=\"onKey\" waiRole=\"tabpanel\"></div>\n</div>\n", templateCssString:".dojoTabContainer {\n\tposition : relative;\n}\n\n.dojoTabPaneWrapper {\n\tborder : 1px solid #6290d2;\n\t_zoom: 1; /* force IE6 layout mode so top border doesnt disappear */\n\tdisplay: block;\n\tclear: both;\n\toverflow: hidden;\n}\n\n.dojoTabLabels-top {\n\tposition : relative;\n\ttop : 0px;\n\tleft : 0px;\n\toverflow : visible;\n\tmargin-bottom : -1px;\n\twidth : 100%;\n\tz-index: 2;\t/* so the bottom of the tab label will cover up the border of dojoTabPaneWrapper */\n}\n\n.dojoTabNoLayout.dojoTabLabels-top .dojoTab {\n\tmargin-bottom: -1px;\n\t_margin-bottom: 0px; /* IE filter so top border lines up correctly */\n}\n\n.dojoTab {\n\tposition : relative;\n\tfloat : left;\n\tpadding-left : 9px;\n\tborder-bottom : 1px solid #6290d2;\n\tbackground : url(images/tab_left.gif) no-repeat left top;\n\tcursor: pointer;\n\twhite-space: nowrap;\n\tz-index: 3;\n}\n\n.dojoTab div {\n\tdisplay : block;\n\tpadding : 4px 15px 4px 6px;\n\tbackground : url(images/tab_top_right.gif) no-repeat right top;\n\tcolor : #333;\n\tfont-size : 90%;\n}\n\n.dojoTab .close {\n\tdisplay : inline-block;\n\theight : 12px;\n\twidth : 12px;\n\tpadding : 0 12px 0 0;\n\tmargin : 0 -10px 0 10px;\n\tcursor : default;\n\tfont-size: small;\n}\n\n.dojoTab .closeImage {\n\tbackground : url(images/tab_close.gif) no-repeat right top;\n}\n\n.dojoTab .closeHover {\n\tbackground-image : url(images/tab_close_h.gif);\n}\n\n.dojoTab.current {\n\tpadding-bottom : 1px;\n\tborder-bottom : 0;\n\tbackground-position : 0 -150px;\n}\n\n.dojoTab.current div {\n\tpadding-bottom : 5px;\n\tmargin-bottom : -1px;\n\tbackground-position : 100% -150px;\n}\n\n/* bottom tabs */\n\n.dojoTabLabels-bottom {\n\tposition : relative;\n\tbottom : 0px;\n\tleft : 0px;\n\toverflow : visible;\n\tmargin-top : -1px;\n\twidth : 100%;\n\tz-index: 2;\n}\n\n.dojoTabNoLayout.dojoTabLabels-bottom {\n\tposition : relative;\n}\n\n.dojoTabLabels-bottom .dojoTab {\n\tborder-top :  1px solid #6290d2;\n\tborder-bottom : 0;\n\tbackground : url(images/tab_bot_left.gif) no-repeat left bottom;\n}\n\n.dojoTabLabels-bottom .dojoTab div {\n\tbackground : url(images/tab_bot_right.gif) no-repeat right bottom;\n}\n\n.dojoTabLabels-bottom .dojoTab.current {\n\tborder-top : 0;\n\tbackground : url(images/tab_bot_left_curr.gif) no-repeat left bottom;\n}\n\n.dojoTabLabels-bottom .dojoTab.current div {\n\tpadding-top : 4px;\n\tbackground : url(images/tab_bot_right_curr.gif) no-repeat right bottom;\n}\n\n/* right-h tabs */\n\n.dojoTabLabels-right-h {\n\toverflow : visible;\n\tmargin-left : -1px;\n\tz-index: 2;\n}\n\n.dojoTabLabels-right-h .dojoTab {\n\tpadding-left : 0;\n\tborder-left :  1px solid #6290d2;\n\tborder-bottom : 0;\n\tbackground : url(images/tab_bot_right.gif) no-repeat right bottom;\n\tfloat : none;\n}\n\n.dojoTabLabels-right-h .dojoTab div {\n\tpadding : 4px 15px 4px 15px;\n}\n\n.dojoTabLabels-right-h .dojoTab.current {\n\tborder-left :  0;\n\tborder-bottom :  1px solid #6290d2;\n}\n\n/* left-h tabs */\n\n.dojoTabLabels-left-h {\n\toverflow : visible;\n\tmargin-right : -1px;\n\tz-index: 2;\n}\n\n.dojoTabLabels-left-h .dojoTab {\n\tborder-right :  1px solid #6290d2;\n\tborder-bottom : 0;\n\tfloat : none;\n\tbackground : url(images/tab_top_left.gif) no-repeat left top;\n}\n\n.dojoTabLabels-left-h .dojoTab.current {\n\tborder-right : 0;\n\tborder-bottom :  1px solid #6290d2;\n\tpadding-bottom : 0;\n\tbackground : url(images/tab_top_left.gif) no-repeat 0 -150px;\n}\n\n.dojoTabLabels-left-h .dojoTab div {\n\tbackground : 0;\n\tborder-bottom :  1px solid #6290d2;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/TabContainer.css"), selectedTab:"", postMixInProperties:function () {
+	if (this.selectedTab) {
+		dojo.deprecated("selectedTab deprecated, use selectedChild instead, will be removed in", "0.5");
+		this.selectedChild = this.selectedTab;
+	}
+	if (this.closeButton != "none") {
+		dojo.deprecated("closeButton deprecated, use closable='true' on each child instead, will be removed in", "0.5");
+	}
+	dojo.widget.TabContainer.superclass.postMixInProperties.apply(this, arguments);
+}, fillInTemplate:function () {
+	this.tablist = dojo.widget.createWidget("TabController", {id:this.widgetId + "_tablist", labelPosition:this.labelPosition, doLayout:this.doLayout, containerId:this.widgetId}, this.tablistNode);
+	dojo.widget.TabContainer.superclass.fillInTemplate.apply(this, arguments);
+}, postCreate:function (args, frag) {
+	dojo.widget.TabContainer.superclass.postCreate.apply(this, arguments);
+	this.onResized();
+}, _setupChild:function (tab) {
+	if (this.closeButton == "tab" || this.closeButton == "pane") {
+		tab.closable = true;
+	}
+	dojo.html.addClass(tab.domNode, "dojoTabPane");
+	dojo.widget.TabContainer.superclass._setupChild.apply(this, arguments);
+}, onResized:function () {
+	if (!this.doLayout) {
+		return;
+	}
+	var labelAlign = this.labelPosition.replace(/-h/, "");
+	var children = [{domNode:this.tablist.domNode, layoutAlign:labelAlign}, {domNode:this.containerNode, layoutAlign:"client"}];
+	dojo.widget.html.layout(this.domNode, children);
+	if (this.selectedChildWidget) {
+		var containerSize = dojo.html.getContentBox(this.containerNode);
+		this.selectedChildWidget.resizeTo(containerSize.width, containerSize.height);
+	}
+}, selectTab:function (tab, callingWidget) {
+	dojo.deprecated("use selectChild() rather than selectTab(), selectTab() will be removed in", "0.5");
+	this.selectChild(tab, callingWidget);
+}, onKey:function (e) {
+	if (e.keyCode == e.KEY_UP_ARROW && e.ctrlKey) {
+		var button = this.correspondingTabButton || this.selectedTabWidget.tabButton;
+		button.focus();
+		dojo.event.browser.stopEvent(e);
+	} else {
+		if (e.keyCode == e.KEY_DELETE && e.altKey) {
+			if (this.selectedChildWidget.closable) {
 				this.closeChild(this.selectedChildWidget);
 				dojo.event.browser.stopEvent(e);
 			}
 		}
-	},
-
-	destroy: function(){
-		this.tablist.destroy();
-		dojo.widget.TabContainer.superclass.destroy.apply(this, arguments);
 	}
-});
-
-dojo.widget.defineWidget(
-    "dojo.widget.TabController",
-    dojo.widget.PageController,
-	{
-		// summary
-		// 	Set of tabs (the things with labels and a close button, that you click to show a tab panel).
-		//	Lets the user select the currently shown pane in a TabContainer or PageContainer.
-		//	TabController also monitors the TabContainer, and whenever a pane is
-		//	added or deleted updates itself accordingly.
-
-		templateString: "<div wairole='tablist' dojoAttachEvent='onKey'></div>",
-
-		// labelPosition: String
-		//   Defines where tab labels go relative to tab content.
-		//   "top", "bottom", "left-h", "right-h"
-		labelPosition: "top",
-
-		doLayout: true,
-
-		// class: String
-		//	Class name to apply to the top dom node
-		"class": "",
-
-		// buttonWidget: String
-		//	the name of the tab widget to create to correspond to each page
-		buttonWidget: "TabButton",
-
-		postMixInProperties: function() {
-			if(!this["class"]){
-				this["class"] = "dojoTabLabels-" + this.labelPosition + (this.doLayout ? "" : " dojoTabNoLayout");
-			}
-			dojo.widget.TabController.superclass.postMixInProperties.apply(this, arguments);
-		}
+}, destroy:function () {
+	this.tablist.destroy();
+	dojo.widget.TabContainer.superclass.destroy.apply(this, arguments);
+}});
+dojo.widget.defineWidget("dojo.widget.TabController", dojo.widget.PageController, {templateString:"<div wairole='tablist' dojoAttachEvent='onKey'></div>", labelPosition:"top", doLayout:true, "class":"", buttonWidget:"TabButton", postMixInProperties:function () {
+	if (!this["class"]) {
+		this["class"] = "dojoTabLabels-" + this.labelPosition + (this.doLayout ? "" : " dojoTabNoLayout");
 	}
-);
+	dojo.widget.TabController.superclass.postMixInProperties.apply(this, arguments);
+}});
+dojo.widget.defineWidget("dojo.widget.TabButton", dojo.widget.PageButton, {templateString:"<div class='dojoTab' dojoAttachEvent='onClick'>" + "<div dojoAttachPoint='innerDiv'>" + "<span dojoAttachPoint='titleNode' tabIndex='-1' waiRole='tab'>${this.label}</span>" + "<span dojoAttachPoint='closeButtonNode' class='close closeImage' style='${this.closeButtonStyle}'" + "	dojoAttachEvent='onMouseOver:onCloseButtonMouseOver; onMouseOut:onCloseButtonMouseOut; onClick:onCloseButtonClick'></span>" + "</div>" + "</div>", postMixInProperties:function () {
+	this.closeButtonStyle = this.closeButton ? "" : "display: none";
+	dojo.widget.TabButton.superclass.postMixInProperties.apply(this, arguments);
+}, fillInTemplate:function () {
+	dojo.html.disableSelection(this.titleNode);
+	dojo.widget.TabButton.superclass.fillInTemplate.apply(this, arguments);
+}, onCloseButtonClick:function (evt) {
+	evt.stopPropagation();
+	dojo.widget.TabButton.superclass.onCloseButtonClick.apply(this, arguments);
+}});
+dojo.widget.defineWidget("dojo.widget.a11y.TabButton", dojo.widget.TabButton, {imgPath:dojo.uri.moduleUri("dojo.widget", "templates/images/tab_close.gif"), templateString:"<div class='dojoTab' dojoAttachEvent='onClick;onKey'>" + "<div dojoAttachPoint='innerDiv'>" + "<span dojoAttachPoint='titleNode' tabIndex='-1' waiRole='tab'>${this.label}</span>" + "<img class='close' src='${this.imgPath}' alt='[x]' style='${this.closeButtonStyle}'" + "	dojoAttachEvent='onClick:onCloseButtonClick'>" + "</div>" + "</div>"});
 
-dojo.widget.defineWidget("dojo.widget.TabButton", dojo.widget.PageButton,
-{
-	// summary
-	//	A tab (the thing you click to select a pane).
-	//	Contains the title (aka label) of the pane, and optionally a close-button to destroy the pane.
-	//	This is an internal widget and should not be instantiated directly.
 
-	templateString: "<div class='dojoTab' dojoAttachEvent='onClick'>"
-						+"<div dojoAttachPoint='innerDiv'>"
-							+"<span dojoAttachPoint='titleNode' tabIndex='-1' waiRole='tab'>${this.label}</span>"
-							+"<span dojoAttachPoint='closeButtonNode' class='close closeImage' style='${this.closeButtonStyle}'"
-							+"    dojoAttachEvent='onMouseOver:onCloseButtonMouseOver; onMouseOut:onCloseButtonMouseOut; onClick:onCloseButtonClick'></span>"
-						+"</div>"
-					+"</div>",
-
-	postMixInProperties: function(){
-		this.closeButtonStyle = this.closeButton ? "" : "display: none";
-		dojo.widget.TabButton.superclass.postMixInProperties.apply(this, arguments);
-	},
-
-	fillInTemplate: function(){
-		dojo.html.disableSelection(this.titleNode);
-		dojo.widget.TabButton.superclass.fillInTemplate.apply(this, arguments);
-	},
-	
-	onCloseButtonClick: function(/*Event*/ evt){
-		// since the close button is located inside the select button, make sure that the select
-		// button doesn't inadvertently get an onClick event
-		evt.stopPropagation();
-		dojo.widget.TabButton.superclass.onCloseButtonClick.apply(this, arguments);
-	}
-});
-
-
-dojo.widget.defineWidget(
-	"dojo.widget.a11y.TabButton",
-	dojo.widget.TabButton,
-	{
-		// summary
-		//	Tab for display in high-contrast mode (where background images don't show up).
-		//	This is an internal widget and shouldn't be instantiated directly.
-
-		imgPath: dojo.uri.dojoUri("src/widget/templates/images/tab_close.gif"),
-		
-		templateString: "<div class='dojoTab' dojoAttachEvent='onClick;onKey'>"
-							+"<div dojoAttachPoint='innerDiv'>"
-								+"<span dojoAttachPoint='titleNode' tabIndex='-1' waiRole='tab'>${this.label}</span>"
-								+"<img class='close' src='${this.imgPath}' alt='[x]' style='${this.closeButtonStyle}'"
-								+"    dojoAttachEvent='onClick:onCloseButtonClick'>"
-							+"</div>"
-						+"</div>"
-	}
-);
-
 __CPAN_FILE__ src/widget/TitlePane.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -27638,68 +17958,33 @@
 dojo.require("dojo.widget.ContentPane");
 dojo.require("dojo.html.style");
 dojo.require("dojo.lfx.*");
-
-dojo.widget.defineWidget(
-	"dojo.widget.TitlePane",
-	dojo.widget.ContentPane,
-{
-	// summary
-	//		A pane with a title on top, that can be opened or collapsed.
-	
-	// labelNodeClass: String
-	//		CSS class name for <div> containing title of the pane.
-	labelNodeClass: "",
-
-	// containerNodeClass: String
-	//		CSS class name for <div> containing content of the pane.
-	containerNodeClass: "",
-
-	// label: String
-	//		Title of the pane
-	label: "",
-	
-	// open: Boolean
-	//		Whether pane is opened or closed.
-	open: true,
-
-	templatePath: dojo.uri.dojoUri("src/widget/templates/TitlePane.html"),
-
-	postCreate: function() {
-		if (this.label) {
-			this.labelNode.appendChild(document.createTextNode(this.label));
-		}
-
-		if (this.labelNodeClass) {
-			dojo.html.addClass(this.labelNode, this.labelNodeClass);
-		}	
-
-		if (this.containerNodeClass) {
-			dojo.html.addClass(this.containerNode, this.containerNodeClass);
-		}	
-
-		if (!this.open) {
-			dojo.html.hide(this.containerNode);
-		}
-		dojo.widget.TitlePane.superclass.postCreate.apply(this, arguments);
-	},
-
-	onLabelClick: function() {
-		// summary: callback when label is clicked
-		if (this.open) {
-			dojo.lfx.wipeOut(this.containerNode, 250).play();
-			this.open=false;
-		} else {
-			dojo.lfx.wipeIn(this.containerNode, 250).play();
-			this.open=true;
-		}
-	},
-
-	setLabel: function(/*String*/ label) {
-		// summary: sets the text of the label
-		this.labelNode.innerHTML=label;
+dojo.widget.defineWidget("dojo.widget.TitlePane", dojo.widget.ContentPane, {labelNodeClass:"", containerNodeClass:"", label:"", open:true, templateString:"<div dojoAttachPoint=\"domNode\">\n<div dojoAttachPoint=\"labelNode\" dojoAttachEvent=\"onclick: onLabelClick\"></div>\n<div dojoAttachPoint=\"containerNode\"></div>\n</div>\n", postCreate:function () {
+	if (this.label) {
+		this.labelNode.appendChild(document.createTextNode(this.label));
 	}
-});
+	if (this.labelNodeClass) {
+		dojo.html.addClass(this.labelNode, this.labelNodeClass);
+	}
+	if (this.containerNodeClass) {
+		dojo.html.addClass(this.containerNode, this.containerNodeClass);
+	}
+	if (!this.open) {
+		dojo.html.hide(this.containerNode);
+	}
+	dojo.widget.TitlePane.superclass.postCreate.apply(this, arguments);
+}, onLabelClick:function () {
+	if (this.open) {
+		dojo.lfx.wipeOut(this.containerNode, 250).play();
+		this.open = false;
+	} else {
+		dojo.lfx.wipeIn(this.containerNode, 250).play();
+		this.open = true;
+	}
+}, setLabel:function (label) {
+	this.labelNode.innerHTML = label;
+}});
 
+
 __CPAN_FILE__ src/widget/CurrencyTextbox.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -27712,73 +17997,34 @@
 */
 
 dojo.provide("dojo.widget.CurrencyTextbox");
-
 dojo.require("dojo.widget.IntegerTextbox");
 dojo.require("dojo.validate.common");
-
-dojo.widget.defineWidget(
-	"dojo.widget.CurrencyTextbox",
-	dojo.widget.IntegerTextbox,
-	{
-		// summary:
-		//	  A subclass that extends IntegerTextbox.
-		//		Over-rides isValid/isInRange to test if input denotes a monetary value .
-
-		/*=====
-		// fractional: Boolean
-		//		The decimal places (e.g. for cents).  Can be true or false, optional if omitted.
-		fractional: undefined,
-
-		// symbol: String
-		//		A currency symbol such as Yen "???", Pound "???", or the Euro "???". Default is "$".
-		symbol: "$",
-
-		// separator: String
-		//		Default is "," instead of no separator as in IntegerTextbox.
-		separator: ",",
-
-		// min: Number
-		//		Minimum signed value.  Default is -Infinity
-		min: undefined,
-
-		// max: Number
-		//		Maximum signed value.  Default is +Infinity
-		max: undefined,
-		=====*/
-
-		mixInProperties: function(localProperties, frag){
-			// First initialize properties in super-class.
-			dojo.widget.CurrencyTextbox.superclass.mixInProperties.apply(this, arguments);
-	
-			// Get properties from markup attributes, and assign to flags object.
-			if(localProperties.fractional){
-				this.flags.fractional = (localProperties.fractional == "true");
-			}else if(localProperties.cents){
-				dojo.deprecated("dojo.widget.IntegerTextbox", "use fractional attr instead of cents", "0.5");
-				this.flags.fractional = (localProperties.cents == "true");
-			}
-			if(localProperties.symbol){
-				this.flags.symbol = localProperties.symbol;
-			}
-			if(localProperties.min){ 
-				this.flags.min = parseFloat(localProperties.min);
-			}
-			if(localProperties.max){ 
-				this.flags.max = parseFloat(localProperties.max);
-			}
-		},
-
-		isValid: function(){
-			// summary: Over-ride for currency validation
-			return dojo.validate.isCurrency(this.textbox.value, this.flags);
-		},
-		isInRange: function(){
-			// summary: Over-ride for currency validation
-			return dojo.validate.isInRange(this.textbox.value, this.flags);
+dojo.widget.defineWidget("dojo.widget.CurrencyTextbox", dojo.widget.IntegerTextbox, {mixInProperties:function (localProperties, frag) {
+	dojo.widget.CurrencyTextbox.superclass.mixInProperties.apply(this, arguments);
+	if (localProperties.fractional) {
+		this.flags.fractional = (localProperties.fractional == "true");
+	} else {
+		if (localProperties.cents) {
+			dojo.deprecated("dojo.widget.IntegerTextbox", "use fractional attr instead of cents", "0.5");
+			this.flags.fractional = (localProperties.cents == "true");
 		}
 	}
-);
+	if (localProperties.symbol) {
+		this.flags.symbol = localProperties.symbol;
+	}
+	if (localProperties.min) {
+		this.flags.min = parseFloat(localProperties.min);
+	}
+	if (localProperties.max) {
+		this.flags.max = parseFloat(localProperties.max);
+	}
+}, isValid:function () {
+	return dojo.validate.isCurrency(this.textbox.value, this.flags);
+}, isInRange:function () {
+	return dojo.validate.isInRange(this.textbox.value, this.flags);
+}});
 
+
 __CPAN_FILE__ src/widget/Clock.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -27790,230 +18036,137 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.widget.Clock");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.gfx.*");
-dojo.require("dojo.uri.Uri");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.timing.Timer");
-
-dojo.widget.defineWidget(
-	"dojo.widget.Clock",
-	dojo.widget.HtmlWidget,
-	function(){
-		// summary: A basic clock that supports offset and labels
-		// description:
-		//		Uses SVG and Internet Explorer's VML implementation to render a clock
-		//		using the gfx module.
-		// timeZoneOffset: Integer
-		//		Amount (in hours) to offset the clock, relative to local time.
-		// date: Date
-		// image: String
-		//		Location of the background image
-		var self=this;
-		this.timeZoneOffset=0;	//	this is fun.
-		this.label="";		//	optional label.
-		
-		this.date=new Date();
-		
-		this.handColor="#788598";
-		this.handStroke="#6f7b8c";
-	//	this.secondHandColor="#c90405";
-		this.secondHandColor=[201, 4, 5, 0.8];
-		this.topLabelColor="#efefef";
-		this.labelColor="#fff";
-
-		//	timer
-		this.timer = new dojo.lang.timing.Timer(1000);
-
-		//	shapes
-		this.center={ x:75, y:75 };
-		this.hands={
-			hour:null,
-			minute:null,
-			second:null
-		};
-		this.shadows={
-			hour:{ shadow:null, shift:{ dx:2, dy:2} },
-			minute:{ shadow:null, shift:{ dx:2, dy:3} },
-			second:{ shadow:null, shift:{ dx:4, dy:4} }
-		};
-		this.image = dojo.uri.dojoUri("src/widget/templates/images/clock.png");
-		this.surface=null;
-		this.labelNode=null;
-		this.topLabelNode=null;
-
-		this.draw=function(){
-			//	summary: Moves the hands of the clock to the proper position based on the current date.
-			self.date=new Date();
-			var h=(self.date.getHours()+self.timeZoneOffset) % 12;
-			var m=self.date.getMinutes();
-			var s=self.date.getSeconds();
-
-			self.placeHour(h, m, s);
-			self.placeMinute(m, s);
-			self.placeSecond(s);
-
-			self.topLabelNode.innerHTML=((self.date.getHours()+self.timeZoneOffset)>11)?"PM":"AM";
-		};
-
-		this.timer.onTick=self.draw;
-	},
-	{
-		set:function(/* Date */dt){
-			// summary: Set the date object manually
-			this.date=dt;
-			if(!this.timer.isRunning){
-				this.draw();
-			}
-		},
-		start:function(){ 
-			// summary: start the clock.
-			this.timer.start(); 
-		},
-		stop:function(){ 
-			// summary: stop the clock.
-			this.timer.stop(); 
-		},
-
-		_initPoly:function(parent, points){
-			var path = parent.createPath();
-			var first = true;
-			dojo.lang.forEach(points, function(c){
-				if(first){
-					path.moveTo(c.x, c.y);
-					first=false;
-				} else {
-					path.lineTo(c.x, c.y);
-				}
-			});
-			return path;
-		},
-		_placeHand:function(shape, angle, shift){
-			var move = { dx:this.center.x + (shift?shift.dx:0), dy:this.center.y+(shift?shift.dy:0) };
-			return shape.setTransform([move, dojo.gfx.matrix.rotateg(-angle)]);
-		},
-		placeHour:function(/* Number */h, /* Number */m, /* number */s){
-			// summary: place the hour hand at the proper point and rotation.
-			var angle=30 *(h + m/60 + s/3600);
-			this._placeHand(this.hands.hour, angle);
-			this._placeHand(this.shadows.hour.shadow, angle, this.shadows.hour.shift);
-		},
-		placeMinute:function(/* Number */m, /* Number */s){
-			// summary: place the minute hand at the proper point and rotation.
-			var angle=6 * (m + s/60);
-			this._placeHand(this.hands.minute, angle);
-			this._placeHand(this.shadows.minute.shadow, angle, this.shadows.minute.shift);
-		},
-		placeSecond:function(/* Number */s){
-			// summary: place the second hand at the proper point and rotation.
-			var angle=6 * s;
-			this._placeHand(this.hands.second, angle);
-			this._placeHand(this.shadows.second.shadow, angle, this.shadows.second.shift);
-		},
-		
-		init:function(){
-			// summary: initialize the widget by creating the initial shapes.
-			//	start by setting up the domNode
-			if(this.domNode.style.position != "absolute"){
-				this.domNode.style.position = "relative";
-			}
-
-			//	clean out any children
-			while(this.domNode.childNodes.length>0){
-				this.domNode.removeChild(this.domNode.childNodes[0]);
-			}
-			
-			//	set ourselves up.
-			this.domNode.style.width="150px";
-			this.domNode.style.height="150px";
-
-			this.surface=dojo.gfx.createSurface(this.domNode, 150, 150);
-			this.surface.createRect({width: 150, height: 150});
-			this.surface.createImage({width: 150, height: 150, src: this.image+""});
-			
-			var hP=[ {x: -3, y: -4}, {x: 3, y: -4}, {x: 1, y: -27}, { x:-1, y:-27}, {x: -3, y: -4} ];
-			var mP=[ {x: -3, y: -4}, {x: 3, y: -4}, {x: 1, y: -38}, {x:-1, y:-38}, {x: -3, y: -4} ];
-			var sP=[ {x: -2, y: -2}, {x: 2, y: -2}, {x: 1, y: -45}, {x: -1, y: -45}, {x: -2, y: -2} ];
-			
-			this.shadows.hour.shadow = this._initPoly(this.surface, hP)
-				.setFill([0, 0, 0, 0.1]);
-			this.hands.hour = this._initPoly(this.surface, hP)
-				.setStroke({color: this.handStroke, width:1 })
-				.setFill({ 
-					type:"linear", 
-					x1:0, y1:0, x2:0, y2:-27, 
-					colors:[{offset:0, color:"#fff"}, {offset:0.33, color:this.handColor}]
-				});
-			this.shadows.minute.shadow = this._initPoly(this.surface, mP)
-				.setFill([0, 0, 0, 0.1]);
-			this.hands.minute = this._initPoly(this.surface, mP)
-				.setStroke({color: this.handStroke, width:1 })
-				.setFill({ 
-					type:"linear", 
-					x1:0, y1:0, x2:0, y2:-38, 
-					colors:[{offset:0, color:"#fff"}, {offset:0.33, color:this.handColor}]
-				});
-
-			this.surface.createCircle({r: 6})
-				.setStroke({color: this.handStroke, width:2 })
-				.setFill("#fff")
-				.setTransform({dx: 75, dy: 75});
-
-			this.shadows.second.shadow = this._initPoly(this.surface, sP)
-				.setFill([0, 0, 0, 0.1]);
-			this.hands.second = this._initPoly(this.surface, sP)
-				.setFill(this.secondHandColor);
-
-			//	clock centers, doesn't move.
-			this.surface.createCircle({r: 4})
-				.setFill(this.secondHandColor)
-				.setTransform({dx: 75, dy: 75});
-
-			//	labels
-			this.topLabelNode=document.createElement("div");
-			with(this.topLabelNode.style){
-				position="absolute";
-				top="3px";
-				left="0px";
-				color=this.topLabelColor;
-				textAlign="center";
-				width="150px";
-				fontFamily="sans-serif";
-				fontSize="11px";
-				textTransform="uppercase";
-				fontWeight="bold";
-			}
-			this.topLabelNode.innerHTML=((this.date.getHours()+this.timeZoneOffset)>11)?"PM":"AM";
-			this.domNode.appendChild(this.topLabelNode);
-
-			this.labelNode=document.createElement("div");
-			with(this.labelNode.style){
-				position="absolute";
-				top="134px";
-				left="0px";
-				color=this.labelColor;
-				textAlign="center";
-				width="150px";
-				fontFamily="sans-serif";
-				fontSize="10px";
-				textTransform="uppercase";
-				fontWeight="bold";
-			}
-			this.labelNode.innerHTML=this.label||"&nbsp;";
-			this.domNode.appendChild(this.labelNode);
-			
-			this.draw();
-		},
-		postCreate:function(){
-			// summary: Create the clock and start the timer.
-			this.init();
-			this.start();
-		}
-	}
-);
+dojo.provide("dojo.widget.Clock");
+dojo.require("dojo.widget.*");
+dojo.require("dojo.gfx.*");
+dojo.require("dojo.uri.Uri");
+dojo.require("dojo.lang.common");
+dojo.require("dojo.lang.timing.Timer");
+dojo.widget.defineWidget("dojo.widget.Clock", dojo.widget.HtmlWidget, function () {
+	var self = this;
+	this.timeZoneOffset = 0;
+	this.label = "";
+	this.date = new Date();
+	this.handColor = "#788598";
+	this.handStroke = "#6f7b8c";
+	this.secondHandColor = [201, 4, 5, 0.8];
+	this.topLabelColor = "#efefef";
+	this.labelColor = "#fff";
+	this.timer = new dojo.lang.timing.Timer(1000);
+	this.center = {x:75, y:75};
+	this.hands = {hour:null, minute:null, second:null};
+	this.shadows = {hour:{shadow:null, shift:{dx:2, dy:2}}, minute:{shadow:null, shift:{dx:2, dy:3}}, second:{shadow:null, shift:{dx:4, dy:4}}};
+	this.image = dojo.uri.moduleUri("dojo.widget", "templates/images/clock.png");
+	this.surface = null;
+	this.labelNode = null;
+	this.topLabelNode = null;
+	this.draw = function () {
+		self.date = new Date();
+		var h = (self.date.getHours() + self.timeZoneOffset) % 12;
+		var m = self.date.getMinutes();
+		var s = self.date.getSeconds();
+		self.placeHour(h, m, s);
+		self.placeMinute(m, s);
+		self.placeSecond(s);
+		self.topLabelNode.innerHTML = ((self.date.getHours() + self.timeZoneOffset) > 11) ? "PM" : "AM";
+	};
+	this.timer.onTick = self.draw;
+}, {set:function (dt) {
+	this.date = dt;
+	if (!this.timer.isRunning) {
+		this.draw();
+	}
+}, start:function () {
+	this.timer.start();
+}, stop:function () {
+	this.timer.stop();
+}, _initPoly:function (parent, points) {
+	var path = parent.createPath();
+	var first = true;
+	dojo.lang.forEach(points, function (c) {
+		if (first) {
+			path.moveTo(c.x, c.y);
+			first = false;
+		} else {
+			path.lineTo(c.x, c.y);
+		}
+	});
+	return path;
+}, _placeHand:function (shape, angle, shift) {
+	var move = {dx:this.center.x + (shift ? shift.dx : 0), dy:this.center.y + (shift ? shift.dy : 0)};
+	return shape.setTransform([move, dojo.gfx.matrix.rotateg(-angle)]);
+}, placeHour:function (h, m, s) {
+	var angle = 30 * (h + m / 60 + s / 3600);
+	this._placeHand(this.hands.hour, angle);
+	this._placeHand(this.shadows.hour.shadow, angle, this.shadows.hour.shift);
+}, placeMinute:function (m, s) {
+	var angle = 6 * (m + s / 60);
+	this._placeHand(this.hands.minute, angle);
+	this._placeHand(this.shadows.minute.shadow, angle, this.shadows.minute.shift);
+}, placeSecond:function (s) {
+	var angle = 6 * s;
+	this._placeHand(this.hands.second, angle);
+	this._placeHand(this.shadows.second.shadow, angle, this.shadows.second.shift);
+}, init:function () {
+	if (this.domNode.style.position != "absolute") {
+		this.domNode.style.position = "relative";
+	}
+	while (this.domNode.childNodes.length > 0) {
+		this.domNode.removeChild(this.domNode.childNodes[0]);
+	}
+	this.domNode.style.width = "150px";
+	this.domNode.style.height = "150px";
+	this.surface = dojo.gfx.createSurface(this.domNode, 150, 150);
+	this.surface.createRect({width:150, height:150});
+	this.surface.createImage({width:150, height:150, src:this.image + ""});
+	var hP = [{x:-3, y:-4}, {x:3, y:-4}, {x:1, y:-27}, {x:-1, y:-27}, {x:-3, y:-4}];
+	var mP = [{x:-3, y:-4}, {x:3, y:-4}, {x:1, y:-38}, {x:-1, y:-38}, {x:-3, y:-4}];
+	var sP = [{x:-2, y:-2}, {x:2, y:-2}, {x:1, y:-45}, {x:-1, y:-45}, {x:-2, y:-2}];
+	this.shadows.hour.shadow = this._initPoly(this.surface, hP).setFill([0, 0, 0, 0.1]);
+	this.hands.hour = this._initPoly(this.surface, hP).setStroke({color:this.handStroke, width:1}).setFill({type:"linear", x1:0, y1:0, x2:0, y2:-27, colors:[{offset:0, color:"#fff"}, {offset:0.33, color:this.handColor}]});
+	this.shadows.minute.shadow = this._initPoly(this.surface, mP).setFill([0, 0, 0, 0.1]);
+	this.hands.minute = this._initPoly(this.surface, mP).setStroke({color:this.handStroke, width:1}).setFill({type:"linear", x1:0, y1:0, x2:0, y2:-38, colors:[{offset:0, color:"#fff"}, {offset:0.33, color:this.handColor}]});
+	this.surface.createCircle({r:6}).setStroke({color:this.handStroke, width:2}).setFill("#fff").setTransform({dx:75, dy:75});
+	this.shadows.second.shadow = this._initPoly(this.surface, sP).setFill([0, 0, 0, 0.1]);
+	this.hands.second = this._initPoly(this.surface, sP).setFill(this.secondHandColor);
+	this.surface.createCircle({r:4}).setFill(this.secondHandColor).setTransform({dx:75, dy:75});
+	this.topLabelNode = document.createElement("div");
+	with (this.topLabelNode.style) {
+		position = "absolute";
+		top = "3px";
+		left = "0px";
+		color = this.topLabelColor;
+		textAlign = "center";
+		width = "150px";
+		fontFamily = "sans-serif";
+		fontSize = "11px";
+		textTransform = "uppercase";
+		fontWeight = "bold";
+	}
+	this.topLabelNode.innerHTML = ((this.date.getHours() + this.timeZoneOffset) > 11) ? "PM" : "AM";
+	this.domNode.appendChild(this.topLabelNode);
+	this.labelNode = document.createElement("div");
+	with (this.labelNode.style) {
+		position = "absolute";
+		top = "134px";
+		left = "0px";
+		color = this.labelColor;
+		textAlign = "center";
+		width = "150px";
+		fontFamily = "sans-serif";
+		fontSize = "10px";
+		textTransform = "uppercase";
+		fontWeight = "bold";
+	}
+	this.labelNode.innerHTML = this.label || "&nbsp;";
+	this.domNode.appendChild(this.labelNode);
+	this.draw();
+}, postCreate:function () {
+	this.init();
+	this.start();
+}});
 
+
 __CPAN_FILE__ src/widget/TreeBasicControllerV3.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -28025,828 +18178,456 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeBasicControllerV3");
-
 dojo.require("dojo.event.*");
-dojo.require("dojo.json")
+dojo.require("dojo.json");
 dojo.require("dojo.io.*");
 dojo.require("dojo.widget.TreeCommon");
 dojo.require("dojo.widget.TreeNodeV3");
 dojo.require("dojo.widget.TreeV3");
-
-dojo.widget.defineWidget(
-	"dojo.widget.TreeBasicControllerV3",
-	[dojo.widget.HtmlWidget, dojo.widget.TreeCommon],
-	function(){
-		this.listenedTrees = {};
-	},
-{
-	// TODO: do something with addChild / setChild, so that RpcController become able
-	// to hook on this and report to server
-	
-	// TODO: make sure keyboard control stuff works when node is moved between trees
-	// node should be unfocus()'ed when it its ancestor is moved and tree,lastFocus - cleared
-
-	/**
-	 * TreeCommon.listenTree will attach listeners to these events
-	 *
-	 * The logic behind the naming:
-	 * 1. (after|before)
-	 * 2. if an event refers to tree, then add "Tree"
-	 * 3. add action
-	 */
-	listenTreeEvents: ["afterSetFolder", "afterTreeCreate", "beforeTreeDestroy"],
-	listenNodeFilter: function(elem) { return elem instanceof dojo.widget.Widget},	
-		
-		
-	editor: null,
-
-	
-	initialize: function(args) {
-		if (args.editor) {
-			this.editor = dojo.widget.byId(args.editor);
-			this.editor.controller = this;
-		}
-		
-	},
-		
-	
-	getInfo: function(elem) {
-		return elem.getInfo();
-	},
-
-	onBeforeTreeDestroy: function(message) {
-                this.unlistenTree(message.source);
-	},
-
-	onAfterSetFolder: function(message) {
-		
-		//dojo.profile.start("onTreeChange");
-        
-		if (message.source.expandLevel > 0) {
-			this.expandToLevel(message.source, message.source.expandLevel);				
-		}
-		if (message.source.loadLevel > 0) {
-			this.loadToLevel(message.source, message.source.loadLevel);				
-		}
-			
-		
-		//dojo.profile.end("onTreeChange");
-	},
-	
-
-	// down arrow
-	_focusNextVisible: function(nodeWidget) {
-		
-		// if this is an expanded folder, get the first child
-		if (nodeWidget.isFolder && nodeWidget.isExpanded && nodeWidget.children.length > 0) {
-			returnWidget = nodeWidget.children[0];			
-		} else {
-			// find a parent node with a sibling
-			while (nodeWidget.isTreeNode && nodeWidget.isLastChild()) {
-				nodeWidget = nodeWidget.parent;
-			}
-			
-			if (nodeWidget.isTreeNode) {
-				var returnWidget = nodeWidget.parent.children[nodeWidget.getParentIndex()+1];				
-			}
-			
-		}
-				
-		if (returnWidget && returnWidget.isTreeNode) {
-			this._focusLabel(returnWidget);
-			return returnWidget;
-		}
-		
-	},
-	
-	// up arrow
-	_focusPreviousVisible: function(nodeWidget) {
-		var returnWidget = nodeWidget;
-		
-		// if younger siblings		
-		if (!nodeWidget.isFirstChild()) {
-			var previousSibling = nodeWidget.parent.children[nodeWidget.getParentIndex()-1]
-
-			nodeWidget = previousSibling;
-			// if the previous nodeWidget is expanded, dive in deep
-			while (nodeWidget.isFolder && nodeWidget.isExpanded && nodeWidget.children.length > 0) {
-				returnWidget = nodeWidget;
-				// move to the last child
-				nodeWidget = nodeWidget.children[nodeWidget.children.length-1];
-			}
-		} else {
-			// if this is the first child, return the parent
+dojo.widget.defineWidget("dojo.widget.TreeBasicControllerV3", [dojo.widget.HtmlWidget, dojo.widget.TreeCommon], function () {
+	this.listenedTrees = {};
+}, {listenTreeEvents:["afterSetFolder", "afterTreeCreate", "beforeTreeDestroy"], listenNodeFilter:function (elem) {
+	return elem instanceof dojo.widget.Widget;
+}, editor:null, initialize:function (args) {
+	if (args.editor) {
+		this.editor = dojo.widget.byId(args.editor);
+		this.editor.controller = this;
+	}
+}, getInfo:function (elem) {
+	return elem.getInfo();
+}, onBeforeTreeDestroy:function (message) {
+	this.unlistenTree(message.source);
+}, onAfterSetFolder:function (message) {
+	if (message.source.expandLevel > 0) {
+		this.expandToLevel(message.source, message.source.expandLevel);
+	}
+	if (message.source.loadLevel > 0) {
+		this.loadToLevel(message.source, message.source.loadLevel);
+	}
+}, _focusNextVisible:function (nodeWidget) {
+	if (nodeWidget.isFolder && nodeWidget.isExpanded && nodeWidget.children.length > 0) {
+		returnWidget = nodeWidget.children[0];
+	} else {
+		while (nodeWidget.isTreeNode && nodeWidget.isLastChild()) {
 			nodeWidget = nodeWidget.parent;
 		}
-		
-		if (nodeWidget && nodeWidget.isTreeNode) {
+		if (nodeWidget.isTreeNode) {
+			var returnWidget = nodeWidget.parent.children[nodeWidget.getParentIndex() + 1];
+		}
+	}
+	if (returnWidget && returnWidget.isTreeNode) {
+		this._focusLabel(returnWidget);
+		return returnWidget;
+	}
+}, _focusPreviousVisible:function (nodeWidget) {
+	var returnWidget = nodeWidget;
+	if (!nodeWidget.isFirstChild()) {
+		var previousSibling = nodeWidget.parent.children[nodeWidget.getParentIndex() - 1];
+		nodeWidget = previousSibling;
+		while (nodeWidget.isFolder && nodeWidget.isExpanded && nodeWidget.children.length > 0) {
 			returnWidget = nodeWidget;
+			nodeWidget = nodeWidget.children[nodeWidget.children.length - 1];
 		}
-		
-		if (returnWidget && returnWidget.isTreeNode) {
-			this._focusLabel(returnWidget);
-			return returnWidget;
-		}
-		
-	},
-	
-	// right arrow
-	_focusZoomIn: function(nodeWidget) {
-		var returnWidget = nodeWidget;
-		
-		// if not expanded, expand, else move to 1st child
-		if (nodeWidget.isFolder && !nodeWidget.isExpanded) {
-			this.expand(nodeWidget);
-		}else if (nodeWidget.children.length > 0) {
+	} else {
+		nodeWidget = nodeWidget.parent;
+	}
+	if (nodeWidget && nodeWidget.isTreeNode) {
+		returnWidget = nodeWidget;
+	}
+	if (returnWidget && returnWidget.isTreeNode) {
+		this._focusLabel(returnWidget);
+		return returnWidget;
+	}
+}, _focusZoomIn:function (nodeWidget) {
+	var returnWidget = nodeWidget;
+	if (nodeWidget.isFolder && !nodeWidget.isExpanded) {
+		this.expand(nodeWidget);
+	} else {
+		if (nodeWidget.children.length > 0) {
 			nodeWidget = nodeWidget.children[0];
 		}
-		
-		if (nodeWidget && nodeWidget.isTreeNode) {
-			returnWidget = nodeWidget;
-		}
-		
-		if (returnWidget && returnWidget.isTreeNode) {
-			this._focusLabel(returnWidget);
-			return returnWidget;
-		}
-		
-	},
-	
-	// left arrow
-	_focusZoomOut: function(node) {
-		
-		var returnWidget = node;
-		
-		// if not expanded, expand, else move to 1st child
-		if (node.isFolder && node.isExpanded) {
-			this.collapse(node);
-		} else {
-			node = node.parent;
-		}
-		if (node && node.isTreeNode) {
-			returnWidget = node;
-		}
-		
-		if (returnWidget && returnWidget.isTreeNode) {
-			this._focusLabel(returnWidget);
-			return returnWidget;
-		}
-		
-	},
-	
-	onFocusNode: function(e) {
-		var node = this.domElement2TreeNode(e.target);
-		
-		if (node) {
-			node.viewFocus();			
-			dojo.event.browser.stopEvent(e);
-		}
-	},
-	
-	onBlurNode: function(e) {
-		var node = this.domElement2TreeNode(e.target);
-		
-		if (!node) {
-			return;
-		}
-		
-		var labelNode = node.labelNode;
-		
-		labelNode.setAttribute("tabIndex", "-1");
-		node.viewUnfocus();		
+	}
+	if (nodeWidget && nodeWidget.isTreeNode) {
+		returnWidget = nodeWidget;
+	}
+	if (returnWidget && returnWidget.isTreeNode) {
+		this._focusLabel(returnWidget);
+		return returnWidget;
+	}
+}, _focusZoomOut:function (node) {
+	var returnWidget = node;
+	if (node.isFolder && node.isExpanded) {
+		this.collapse(node);
+	} else {
+		node = node.parent;
+	}
+	if (node && node.isTreeNode) {
+		returnWidget = node;
+	}
+	if (returnWidget && returnWidget.isTreeNode) {
+		this._focusLabel(returnWidget);
+		return returnWidget;
+	}
+}, onFocusNode:function (e) {
+	var node = this.domElement2TreeNode(e.target);
+	if (node) {
+		node.viewFocus();
 		dojo.event.browser.stopEvent(e);
-		
-		// this could have been set to -1 by the shift+TAB processing
-		node.tree.domNode.setAttribute("tabIndex", "0");
-		
-	},
-	
-	
-	_focusLabel: function(node) {
-		//dojo.debug((new Error()).stack)		
-		var lastFocused = node.tree.lastFocused;
-		var labelNode;
-		
-		if (lastFocused && lastFocused.labelNode) {
-			labelNode = lastFocused.labelNode;
-			// help Opera out with blur events
-			dojo.event.disconnect(labelNode, "onblur", this, "onBlurNode");
-			labelNode.setAttribute("tabIndex", "-1");
-			dojo.html.removeClass(labelNode, "TreeLabelFocused");
+	}
+}, onBlurNode:function (e) {
+	var node = this.domElement2TreeNode(e.target);
+	if (!node) {
+		return;
+	}
+	var labelNode = node.labelNode;
+	labelNode.setAttribute("tabIndex", "-1");
+	node.viewUnfocus();
+	dojo.event.browser.stopEvent(e);
+	node.tree.domNode.setAttribute("tabIndex", "0");
+}, _focusLabel:function (node) {
+	var lastFocused = node.tree.lastFocused;
+	var labelNode;
+	if (lastFocused && lastFocused.labelNode) {
+		labelNode = lastFocused.labelNode;
+		dojo.event.disconnect(labelNode, "onblur", this, "onBlurNode");
+		labelNode.setAttribute("tabIndex", "-1");
+		dojo.html.removeClass(labelNode, "TreeLabelFocused");
+	}
+	labelNode = node.labelNode;
+	labelNode.setAttribute("tabIndex", "0");
+	node.tree.lastFocused = node;
+	dojo.html.addClass(labelNode, "TreeLabelFocused");
+	dojo.event.connectOnce(labelNode, "onblur", this, "onBlurNode");
+	dojo.event.connectOnce(labelNode, "onfocus", this, "onFocusNode");
+	labelNode.focus();
+}, onKey:function (e) {
+	if (!e.key || e.ctrkKey || e.altKey) {
+		return;
+	}
+	var nodeWidget = this.domElement2TreeNode(e.target);
+	if (!nodeWidget) {
+		return;
+	}
+	var treeWidget = nodeWidget.tree;
+	if (treeWidget.lastFocused && treeWidget.lastFocused.labelNode) {
+		nodeWidget = treeWidget.lastFocused;
+	}
+	switch (e.key) {
+	  case e.KEY_TAB:
+		if (e.shiftKey) {
+			treeWidget.domNode.setAttribute("tabIndex", "-1");
 		}
-		
-		// set tabIndex so that the tab key can find this node
-		labelNode = node.labelNode;
-		labelNode.setAttribute("tabIndex", "0");
-		node.tree.lastFocused = node;
-		
-		// add an outline - this helps opera a lot
-		dojo.html.addClass(labelNode, "TreeLabelFocused");
-		dojo.event.connectOnce(labelNode, "onblur", this, "onBlurNode");
-		// prevent the domNode from seeing the focus event
-		dojo.event.connectOnce(labelNode, "onfocus", this, "onFocusNode");
-		// set focus so that the label wil be voiced using screen readers
-		labelNode.focus();
-			
-	},
-	
-	onKey: function(e) {
-		if (!e.key || e.ctrkKey || e.altKey) { return; }
-		// pretend the key was directed toward the current focused node (helps opera out)
-		
-		var nodeWidget = this.domElement2TreeNode(e.target);
-		if (!nodeWidget) {
+		break;
+	  case e.KEY_RIGHT_ARROW:
+		this._focusZoomIn(nodeWidget);
+		dojo.event.browser.stopEvent(e);
+		break;
+	  case e.KEY_LEFT_ARROW:
+		this._focusZoomOut(nodeWidget);
+		dojo.event.browser.stopEvent(e);
+		break;
+	  case e.KEY_UP_ARROW:
+		this._focusPreviousVisible(nodeWidget);
+		dojo.event.browser.stopEvent(e);
+		break;
+	  case e.KEY_DOWN_ARROW:
+		this._focusNextVisible(nodeWidget);
+		dojo.event.browser.stopEvent(e);
+		break;
+	}
+}, onFocusTree:function (e) {
+	if (!e.currentTarget) {
+		return;
+	}
+	try {
+		var treeWidget = this.getWidgetByNode(e.currentTarget);
+		if (!treeWidget || !treeWidget.isTree) {
 			return;
 		}
-		
-		var treeWidget = nodeWidget.tree;
-		
-		if (treeWidget.lastFocused && treeWidget.lastFocused.labelNode) {
-			nodeWidget = treeWidget.lastFocused;
-		}
-		
-		switch(e.key) {
-			case e.KEY_TAB:
-				if (e.shiftKey) {
-					// we're moving backwards so don't tab to the domNode
-					// it'll be added back in onBlurNode
-					treeWidget.domNode.setAttribute("tabIndex", "-1");
-				}
-				break;
-			case e.KEY_RIGHT_ARROW:
-				this._focusZoomIn(nodeWidget);
-				dojo.event.browser.stopEvent(e);
-				break;
-			case e.KEY_LEFT_ARROW:
-				this._focusZoomOut(nodeWidget);
-				dojo.event.browser.stopEvent(e);
-				break;
-			case e.KEY_UP_ARROW:
-				this._focusPreviousVisible(nodeWidget);
-				dojo.event.browser.stopEvent(e);
-				break;
-			case e.KEY_DOWN_ARROW:
-				this._focusNextVisible(nodeWidget);
-				dojo.event.browser.stopEvent(e);
-				break;
-		}
-	},
-	
-	
-	onFocusTree: function(e) {
-		if (!e.currentTarget) { return; }
-		try {
-			var treeWidget = this.getWidgetByNode(e.currentTarget);
-			if (!treeWidget || !treeWidget.isTree) { return; }
-			// on first focus, choose the root node
-			var nodeWidget = this.getWidgetByNode(treeWidget.domNode.firstChild);
-			if (nodeWidget && nodeWidget.isTreeNode) {
-				if (treeWidget.lastFocused && treeWidget.lastFocused.isTreeNode) { // onClick could have chosen a non-root node
-					nodeWidget = treeWidget.lastFocused;
-				}
-				this._focusLabel(nodeWidget);
+		var nodeWidget = this.getWidgetByNode(treeWidget.domNode.firstChild);
+		if (nodeWidget && nodeWidget.isTreeNode) {
+			if (treeWidget.lastFocused && treeWidget.lastFocused.isTreeNode) {
+				nodeWidget = treeWidget.lastFocused;
 			}
+			this._focusLabel(nodeWidget);
 		}
-		catch(e) {}
-	},
-
-	// perform actions-initializers for tree
-	onAfterTreeCreate: function(message) {
-		var tree = message.source;
-		dojo.event.browser.addListener(tree.domNode, "onKey", dojo.lang.hitch(this, this.onKey));
-		dojo.event.browser.addListener(tree.domNode, "onmousedown", dojo.lang.hitch(this, this.onTreeMouseDown));
-		dojo.event.browser.addListener(tree.domNode, "onclick", dojo.lang.hitch(this, this.onTreeClick));
-		dojo.event.browser.addListener(tree.domNode, "onfocus", dojo.lang.hitch(this, this.onFocusTree));
-		tree.domNode.setAttribute("tabIndex", "0");
-		
-		if (tree.expandLevel) {								
-			this.expandToLevel(tree, tree.expandLevel)
+	}
+	catch (e) {
+	}
+}, onAfterTreeCreate:function (message) {
+	var tree = message.source;
+	dojo.event.browser.addListener(tree.domNode, "onKey", dojo.lang.hitch(this, this.onKey));
+	dojo.event.browser.addListener(tree.domNode, "onmousedown", dojo.lang.hitch(this, this.onTreeMouseDown));
+	dojo.event.browser.addListener(tree.domNode, "onclick", dojo.lang.hitch(this, this.onTreeClick));
+	dojo.event.browser.addListener(tree.domNode, "onfocus", dojo.lang.hitch(this, this.onFocusTree));
+	tree.domNode.setAttribute("tabIndex", "0");
+	if (tree.expandLevel) {
+		this.expandToLevel(tree, tree.expandLevel);
+	}
+	if (tree.loadLevel) {
+		this.loadToLevel(tree, tree.loadLevel);
+	}
+}, onTreeMouseDown:function (e) {
+}, onTreeClick:function (e) {
+	var domElement = e.target;
+	var node = this.domElement2TreeNode(domElement);
+	if (!node || !node.isTreeNode) {
+		return;
+	}
+	var checkExpandClick = function (el) {
+		return el === node.expandNode;
+	};
+	if (this.checkPathCondition(domElement, checkExpandClick)) {
+		this.processExpandClick(node);
+	}
+	this._focusLabel(node);
+}, processExpandClick:function (node) {
+	if (node.isExpanded) {
+		this.collapse(node);
+	} else {
+		this.expand(node);
+	}
+}, batchExpandTimeout:20, expandAll:function (nodeOrTree) {
+	return this.expandToLevel(nodeOrTree, Number.POSITIVE_INFINITY);
+}, collapseAll:function (nodeOrTree) {
+	var _this = this;
+	var filter = function (elem) {
+		return (elem instanceof dojo.widget.Widget) && elem.isFolder && elem.isExpanded;
+	};
+	if (nodeOrTree.isTreeNode) {
+		this.processDescendants(nodeOrTree, filter, this.collapse);
+	} else {
+		if (nodeOrTree.isTree) {
+			dojo.lang.forEach(nodeOrTree.children, function (c) {
+				_this.processDescendants(c, filter, _this.collapse);
+			});
 		}
-		if (tree.loadLevel) {
-			this.loadToLevel(tree, tree.loadLevel);
+	}
+}, expandToNode:function (node, withSelected) {
+	n = withSelected ? node : node.parent;
+	s = [];
+	while (!n.isExpanded) {
+		s.push(n);
+		n = n.parent;
+	}
+	dojo.lang.forEach(s, function (n) {
+		n.expand();
+	});
+}, expandToLevel:function (nodeOrTree, level) {
+	dojo.require("dojo.widget.TreeTimeoutIterator");
+	var _this = this;
+	var filterFunc = function (elem) {
+		var res = elem.isFolder || elem.children && elem.children.length;
+		return res;
+	};
+	var callFunc = function (node, iterator) {
+		_this.expand(node, true);
+		iterator.forward();
+	};
+	var iterator = new dojo.widget.TreeTimeoutIterator(nodeOrTree, callFunc, this);
+	iterator.setFilter(filterFunc);
+	iterator.timeout = this.batchExpandTimeout;
+	iterator.setMaxLevel(nodeOrTree.isTreeNode ? level - 1 : level);
+	return iterator.start(nodeOrTree.isTreeNode);
+}, getWidgetByNode:function (node) {
+	var widgetId;
+	var newNode = node;
+	while (!(widgetId = newNode.widgetId)) {
+		newNode = newNode.parentNode;
+		if (newNode == null) {
+			break;
 		}
-	},
-
-    onTreeMouseDown: function(e) {
-    },
-
-	onTreeClick: function(e){
-		//dojo.profile.start("onTreeClick");
-		
-		var domElement = e.target;
-		//dojo.debug('click')
-		// find node
-        var node = this.domElement2TreeNode(domElement);		
-		if (!node || !node.isTreeNode) {
-			return;
-		}
-		
-		
-		var checkExpandClick = function(el) {
-			return el === node.expandNode;
-		}
-		
-		if (this.checkPathCondition(domElement, checkExpandClick)) {
-			this.processExpandClick(node);			
-		}
-		
-		this._focusLabel(node);
-		
-		//dojo.profile.end("onTreeClick");
-		
-	},
-	
-	processExpandClick: function(node){
-		
-		//dojo.profile.start("processExpandClick");
-		
-		if (node.isExpanded){
-			this.collapse(node);
+	}
+	if (widgetId) {
+		return dojo.widget.byId(widgetId);
+	} else {
+		if (node == null) {
+			return null;
 		} else {
-			this.expand(node);
+			return dojo.widget.manager.byNode(node);
 		}
-		
-		//dojo.profile.end("processExpandClick");
-	},
-		
-	
-	
-	/**
-	 * time between expand calls for batch operations
-	 * @see expandToLevel
-	 */
-	batchExpandTimeout: 20,
-	
-	
-	expandAll: function(nodeOrTree) {		
-		return this.expandToLevel(nodeOrTree, Number.POSITIVE_INFINITY);
-		
-	},
-	
-	
-	collapseAll: function(nodeOrTree) {
-		var _this = this;
-		
-		var filter = function(elem) {
-			return (elem instanceof dojo.widget.Widget) && elem.isFolder && elem.isExpanded;
+	}
+}, expand:function (node) {
+	if (node.isFolder) {
+		node.expand();
+	}
+}, collapse:function (node) {
+	if (node.isFolder) {
+		node.collapse();
+	}
+}, canEditLabel:function (node) {
+	if (node.actionIsDisabledNow(node.actions.EDIT)) {
+		return false;
+	}
+	return true;
+}, editLabelStart:function (node) {
+	if (!this.canEditLabel(node)) {
+		return false;
+	}
+	if (!this.editor.isClosed()) {
+		this.editLabelFinish(this.editor.saveOnBlur);
+	}
+	this.doEditLabelStart(node);
+}, editLabelFinish:function (save) {
+	this.doEditLabelFinish(save);
+}, doEditLabelStart:function (node) {
+	if (!this.editor) {
+		dojo.raise(this.widgetType + ": no editor specified");
+	}
+	this.editor.open(node);
+}, doEditLabelFinish:function (save, server_data) {
+	if (!this.editor) {
+		dojo.raise(this.widgetType + ": no editor specified");
+	}
+	var node = this.editor.node;
+	var editorTitle = this.editor.getContents();
+	this.editor.close(save);
+	if (save) {
+		var data = {title:editorTitle};
+		if (server_data) {
+			dojo.lang.mixin(data, server_data);
 		}
-		
-		if (nodeOrTree.isTreeNode) {		
-			this.processDescendants(nodeOrTree, filter, this.collapse);
-		} else if (nodeOrTree.isTree) {
-			dojo.lang.forEach(nodeOrTree.children,function(c) { _this.processDescendants(c, filter, _this.collapse) });
-		}
-	},
-	
-	/**
-	 * expand tree to specific node
-	 */
-	expandToNode: function(node, withSelected) {
-		n = withSelected ? node : node.parent
-		s = []
-		while (!n.isExpanded) {
-			s.push(n)
-			n = n.parent
-		}
-				
-		dojo.lang.forEach(s, function(n) { n.expand() })
-	},
-		
-	/**
-	 * walk a node in time, forward order, with pauses between expansions
-	 */
-	expandToLevel: function(nodeOrTree, level) {
-		dojo.require("dojo.widget.TreeTimeoutIterator");
-		
-		var _this = this;
-		var filterFunc = function(elem) {
-			var res = elem.isFolder || elem.children && elem.children.length;
-			//dojo.debug("Filter "+elem+ " result:"+res);
-			return res;
-		};
-		var callFunc = function(node, iterator) {			
-			 _this.expand(node, true);
-			 iterator.forward();
-		}
-			
-		var iterator = new dojo.widget.TreeTimeoutIterator(nodeOrTree, callFunc, this);
-		iterator.setFilter(filterFunc);
-		
-		
-		iterator.timeout = this.batchExpandTimeout;
-		
-		//dojo.debug("here "+nodeOrTree+" level "+level);
-		
-		iterator.setMaxLevel(nodeOrTree.isTreeNode ? level-1 : level);
-		
-		
-		return iterator.start(nodeOrTree.isTreeNode);
-	},
-	
-
-	getWidgetByNode: function(node) {
-		var widgetId;
-		var newNode = node;
-		while (! (widgetId = newNode.widgetId) ) {
-			newNode = newNode.parentNode;
-			if (newNode == null) { break; }
-		}
-		if (widgetId) { return dojo.widget.byId(widgetId); }
-		else if (node == null) { return null; }
-		else{ return dojo.widget.manager.byNode(node); }
-	},
-
-
-
-	/**
-	 * callout activated even if node is expanded already
-	 */
-	expand: function(node) {
-		
-		//dojo.profile.start("expand");
-		
-		//dojo.debug("Expand "+node.isFolder);
-		
-		if (node.isFolder) {			
-			node.expand(); // skip trees or non-folders
-		}		
-		
-		//dojo.profile.end("expand");
-				
-	},
-
-	/**
-	 * safe to call on tree and non-folder
-	 */
-	collapse: function(node) {
-		if (node.isFolder) {
-			node.collapse();
-		}
-	},
-	
-	
-	// -------------------------- TODO: Inline edit node ---------------------
-	canEditLabel: function(node) {
-		if (node.actionIsDisabledNow(node.actions.EDIT)) return false;
-
-		return true;
-	},
-	
-		
-	editLabelStart: function(node) {		
-		if (!this.canEditLabel(node)) {
-			return false;
-		}
-		
-		if (!this.editor.isClosed()) {
-			//dojo.debug("editLabelStart editor open");
-			this.editLabelFinish(this.editor.saveOnBlur);			
-		}
-				
-		this.doEditLabelStart(node);
-		
-	
-	},
-	
-	
-	editLabelFinish: function(save) {
-		this.doEditLabelFinish(save);		
-	},
-	
-	
-	doEditLabelStart: function(node) {
-		if (!this.editor) {
-			dojo.raise(this.widgetType+": no editor specified");
-		}
-		
-		//dojo.debug("editLabelStart editor open "+node);
-		
-		this.editor.open(node);
-	},
-	
-	doEditLabelFinish: function(save, server_data) {
-		//dojo.debug("Finish "+save);
-		//dojo.debug((new Error()).stack)
-		if (!this.editor) {
-			dojo.raise(this.widgetType+": no editor specified");
-		}
-
-		var node = this.editor.node;	
-		var editorTitle = this.editor.getContents();
-		
-		this.editor.close(save);
-
-		if (save) {
-			var data = {title:editorTitle};
-			
-			if (server_data) { // may be undefined
-				dojo.lang.mixin(data, server_data);
-			}
-			
-			
-			if (node.isPhantom) {			
-				// I can't just set node phantom's title, because widgetId/objectId/widgetName...
-				// may be provided by server
-				var parent = node.parent;
-				var index = node.getParentIndex();				
-				node.destroy();
-				// new node was added!
-				dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this, parent, index, data);
-			} else {
-				var title = server_data && server_data.title ? server_data.title : editorTitle;
-				// use special method to make sure everything updated and event sent
-				node.setTitle(title); 
-			}
+		if (node.isPhantom) {
+			var parent = node.parent;
+			var index = node.getParentIndex();
+			node.destroy();
+			dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this, parent, index, data);
 		} else {
-			//dojo.debug("Kill phantom on cancel");
-			if (node.isPhantom) {
-				node.destroy();
-			}
+			var title = server_data && server_data.title ? server_data.title : editorTitle;
+			node.setTitle(title);
 		}
-	},
-	
-	
-		
-	makeDefaultNode: function(parent, index) {
-		var data = {title:parent.tree.defaultChildTitle};
-		return dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this,parent,index,data);
-	},
-	
-	/**
-	 * check that something is possible
-	 * run maker to do it
-	 * run exposer to expose result to visitor immediatelly
-	 *   exposer does not affect result
-	 */
-	runStages: function(check, prepare, make, finalize, expose, args) {
-		
-		if (check && !check.apply(this, args)) {
-			return false;
+	} else {
+		if (node.isPhantom) {
+			node.destroy();
 		}
-		
-		if (prepare && !prepare.apply(this, args)) {
-			return false;
-		}
-		
-		var result = make.apply(this, args);
-		
-		
-		if (finalize) {
-			finalize.apply(this,args);			
-		}
-			
-		if (!result) {
-			return result;
-		}
-		
-			
-		if (expose) {
-			expose.apply(this, args);
-		}
-		
+	}
+}, makeDefaultNode:function (parent, index) {
+	var data = {title:parent.tree.defaultChildTitle};
+	return dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this, parent, index, data);
+}, runStages:function (check, prepare, make, finalize, expose, args) {
+	if (check && !check.apply(this, args)) {
+		return false;
+	}
+	if (prepare && !prepare.apply(this, args)) {
+		return false;
+	}
+	var result = make.apply(this, args);
+	if (finalize) {
+		finalize.apply(this, args);
+	}
+	if (!result) {
 		return result;
 	}
-});
-
-
-// create and edit
-dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {
-		
-	createAndEdit: function(parent, index) {
-		var data = {title:parent.tree.defaultChildTitle};
-		
-		if (!this.canCreateChild(parent, index, data)) {
-			return false;
-		}
-		
-		var child = this.doCreateChild(parent, index, data);
-		if (!child) return false;
-		this.exposeCreateChild(parent, index, data);
-		
-		child.isPhantom = true;
-		
-		if (!this.editor.isClosed()) {
-			//dojo.debug("editLabelStart editor open");
-			this.editLabelFinish(this.editor.saveOnBlur);			
-		}
-		
-		
-				
-		this.doEditLabelStart(child);		
-	
+	if (expose) {
+		expose.apply(this, args);
 	}
-	
-});
-
-
-// =============================== clone ============================
-dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {
-	
-	canClone: function(child, newParent, index, deep){
-		return true;
-	},
-	
-	
-	clone: function(child, newParent, index, deep) {
-		return this.runStages(
-			this.canClone, this.prepareClone, this.doClone, this.finalizeClone, this.exposeClone, arguments
-		);			
-	},
-
-	exposeClone: function(child, newParent) {
-		if (newParent.isTreeNode) {
-			this.expand(newParent);
-		}
-	},
-
-	doClone: function(child, newParent, index, deep) {
-		//dojo.debug("Clone "+child);
-		var cloned = child.clone(deep);
-		newParent.addChild(cloned, index);
-				
-		return cloned;
+	return result;
+}});
+dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {createAndEdit:function (parent, index) {
+	var data = {title:parent.tree.defaultChildTitle};
+	if (!this.canCreateChild(parent, index, data)) {
+		return false;
 	}
-	
-
-});
-
-// =============================== detach ============================
-
-dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {
-	canDetach: function(child) {
-		if (child.actionIsDisabledNow(child.actions.DETACH)) {
-			return false;
-		}
-
-		return true;
-	},
-
-
-	detach: function(node) {
-		return this.runStages(
-			this.canDetach, this.prepareDetach, this.doDetach, this.finalizeDetach, this.exposeDetach, arguments
-		);			
-	},
-
-
-	doDetach: function(node, callObj, callFunc) {
-		node.detach();
+	var child = this.doCreateChild(parent, index, data);
+	if (!child) {
+		return false;
 	}
-	
-});
-
-
-// =============================== destroy ============================
-dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {
-
-	canDestroyChild: function(child) {
-		
-		if (child.parent && !this.canDetach(child)) {
-			return false;
-		}
-		return true;
-	},
-
-
-	destroyChild: function(node) {
-		return this.runStages(
-			this.canDestroyChild, this.prepareDestroyChild, this.doDestroyChild, this.finalizeDestroyChild, this.exposeDestroyChild, arguments
-		);			
-	},
-
-
-	doDestroyChild: function(node) {
-		node.destroy();
+	this.exposeCreateChild(parent, index, data);
+	child.isPhantom = true;
+	if (!this.editor.isClosed()) {
+		this.editLabelFinish(this.editor.saveOnBlur);
 	}
-	
-});
-
-
-
-// =============================== move ============================
-
-dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {
-
-	/**
-	 * check for non-treenodes
-	 */
-	canMoveNotANode: function(child, parent) {
-		if (child.treeCanMove) {
-			return child.treeCanMove(parent);
-		}
-		
-		return true;
-	},
-
-	/**
-	 * Checks whether it is ok to change parent of child to newParent
-	 * May incur type checks etc
-	 *
-	 * It should check only hierarchical possibility w/o index, etc
-	 * because in onDragOver event for Between Dnd mode we can't calculate index at once on onDragOVer.
-	 * index changes as client moves mouse up-down over the node
-	 */
-	canMove: function(child, newParent){
-		if (!child.isTreeNode) {
-			return this.canMoveNotANode(child, newParent);
-		}
-						
-		if (child.actionIsDisabledNow(child.actions.MOVE)) {
-			return false;
-		}
-
-		// if we move under same parent then no matter if ADDCHILD disabled for him
-		// but if we move to NEW parent then check if action is disabled for him
-		// also covers case for newParent being a non-folder in strict mode etc
-		if (child.parent !== newParent && newParent.actionIsDisabledNow(newParent.actions.ADDCHILD)) {
-			return false;
-		}
-
-		// Can't move parent under child. check whether new parent is child of "child".
-		var node = newParent;
-		while(node.isTreeNode) {
-			//dojo.debugShallow(node.title)
-			if (node === child) {
-				// parent of newParent is child
-				return false;
-			}
-			node = node.parent;
-		}
-
-		return true;
-	},
-
-
-	move: function(child, newParent, index/*,...*/) {
-		return this.runStages(this.canMove, this.prepareMove, this.doMove, this.finalizeMove, this.exposeMove, arguments);			
-	},
-
-	doMove: function(child, newParent, index) {
-		//dojo.debug("MOVE "+child);
-		child.tree.move(child, newParent, index);
-
-		return true;
-	},
-	
-	exposeMove: function(child, newParent) {		
-		if (newParent.isTreeNode) {
-			this.expand(newParent);
-		}
+	this.doEditLabelStart(child);
+}});
+dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canClone:function (child, newParent, index, deep) {
+	return true;
+}, clone:function (child, newParent, index, deep) {
+	return this.runStages(this.canClone, this.prepareClone, this.doClone, this.finalizeClone, this.exposeClone, arguments);
+}, exposeClone:function (child, newParent) {
+	if (newParent.isTreeNode) {
+		this.expand(newParent);
 	}
-		
-
-});
-
-dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {
-
-	// -----------------------------------------------------------------------------
-	//                             Create node stuff
-	// -----------------------------------------------------------------------------
-
-
-	canCreateChild: function(parent, index, data) {
-		if (parent.actionIsDisabledNow(parent.actions.ADDCHILD)) {
+}, doClone:function (child, newParent, index, deep) {
+	var cloned = child.clone(deep);
+	newParent.addChild(cloned, index);
+	return cloned;
+}});
+dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canDetach:function (child) {
+	if (child.actionIsDisabledNow(child.actions.DETACH)) {
+		return false;
+	}
+	return true;
+}, detach:function (node) {
+	return this.runStages(this.canDetach, this.prepareDetach, this.doDetach, this.finalizeDetach, this.exposeDetach, arguments);
+}, doDetach:function (node, callObj, callFunc) {
+	node.detach();
+}});
+dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canDestroyChild:function (child) {
+	if (child.parent && !this.canDetach(child)) {
+		return false;
+	}
+	return true;
+}, destroyChild:function (node) {
+	return this.runStages(this.canDestroyChild, this.prepareDestroyChild, this.doDestroyChild, this.finalizeDestroyChild, this.exposeDestroyChild, arguments);
+}, doDestroyChild:function (node) {
+	node.destroy();
+}});
+dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canMoveNotANode:function (child, parent) {
+	if (child.treeCanMove) {
+		return child.treeCanMove(parent);
+	}
+	return true;
+}, canMove:function (child, newParent) {
+	if (!child.isTreeNode) {
+		return this.canMoveNotANode(child, newParent);
+	}
+	if (child.actionIsDisabledNow(child.actions.MOVE)) {
+		return false;
+	}
+	if (child.parent !== newParent && newParent.actionIsDisabledNow(newParent.actions.ADDCHILD)) {
+		return false;
+	}
+	var node = newParent;
+	while (node.isTreeNode) {
+		if (node === child) {
 			return false;
 		}
-
-		return true;
-	},
-
-
-	/* send data to server and add child from server */
-	/* data may contain an almost ready child, or anything else, suggested to server */
-	/*in Rpc controllers server responds with child data to be inserted */
-	createChild: function(parent, index, data) {
-		if(!data) {
-			data = {title:parent.tree.defaultChildTitle};
-		}
-		return this.runStages(this.canCreateChild, this.prepareCreateChild, this.doCreateChild, this.finalizeCreateChild, this.exposeCreateChild,
-			[parent, index, data]);		
-	},
-
-	prepareCreateChild: function() { return true; },
-	finalizeCreateChild: function() {},
-
-	doCreateChild: function(parent, index, data) {
-		//dojo.debug("doCreateChild parent "+parent+" index "+index+" data "+data);
-		
-		var newChild = parent.tree.createNode(data); 
-		//var newChild = dojo.widget.createWidget(widgetType, data);
-
-		parent.addChild(newChild, index);
-
-		return newChild;
-	},
-	
-	exposeCreateChild: function(parent) {
-		return this.expand(parent);
+		node = node.parent;
 	}
+	return true;
+}, move:function (child, newParent, index) {
+	return this.runStages(this.canMove, this.prepareMove, this.doMove, this.finalizeMove, this.exposeMove, arguments);
+}, doMove:function (child, newParent, index) {
+	child.tree.move(child, newParent, index);
+	return true;
+}, exposeMove:function (child, newParent) {
+	if (newParent.isTreeNode) {
+		this.expand(newParent);
+	}
+}});
+dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canCreateChild:function (parent, index, data) {
+	if (parent.actionIsDisabledNow(parent.actions.ADDCHILD)) {
+		return false;
+	}
+	return true;
+}, createChild:function (parent, index, data) {
+	if (!data) {
+		data = {title:parent.tree.defaultChildTitle};
+	}
+	return this.runStages(this.canCreateChild, this.prepareCreateChild, this.doCreateChild, this.finalizeCreateChild, this.exposeCreateChild, [parent, index, data]);
+}, prepareCreateChild:function () {
+	return true;
+}, finalizeCreateChild:function () {
+}, doCreateChild:function (parent, index, data) {
+	var newChild = parent.tree.createNode(data);
+	parent.addChild(newChild, index);
+	return newChild;
+}, exposeCreateChild:function (parent) {
+	return this.expand(parent);
+}});
 
 
-});
-
 __CPAN_FILE__ src/widget/TreeDisableWrapExtension.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -28858,52 +18639,32 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
-dojo.provide( "dojo.widget.TreeDisableWrapExtension" );
-
-dojo.require( "dojo.widget.HtmlWidget" );
-dojo.require( "dojo.widget.TreeExtension" );
-
-// selector extension to emphasize node
-dojo.widget.defineWidget(
-	"dojo.widget.TreeDisableWrapExtension",
-	dojo.widget.TreeExtension,
-{
-	/**
-	 * can't unlisten
-	 */
-	templateCssPath: dojo.uri.dojoUri( "src/widget/templates/TreeDisableWrap.css" ),
-		
-	listenTree: function(tree) {
-		
-		var wrappingDiv = document.createElement( "div" );
-		var clazz = tree.classPrefix+"DisableWrap";
-		if (dojo.render.html.ie) {
-			clazz = clazz+' '+ tree.classPrefix+"IEDisableWrap";
-		}
-		dojo.html.setClass(wrappingDiv, clazz);
-		
-		var table = document.createElement( "table" );
-		wrappingDiv.appendChild( table );
-		
-		var tbody = document.createElement( "tbody" );
-		table.appendChild( tbody );
-		
-		var tr = document.createElement( "tr" );
-		tbody.appendChild( tr );
-		
-		var td = document.createElement( "td" );
-		tr.appendChild( td );
-		
-		if( tree.domNode.parentNode ) {
-			tree.domNode.parentNode.replaceChild( wrappingDiv, tree.domNode );
-		}
-		
-		td.appendChild( tree.domNode );
-		tree.domNode = wrappingDiv;
+dojo.provide("dojo.widget.TreeDisableWrapExtension");
+dojo.require("dojo.widget.HtmlWidget");
+dojo.require("dojo.widget.TreeExtension");
+dojo.widget.defineWidget("dojo.widget.TreeDisableWrapExtension", dojo.widget.TreeExtension, {templateCssString:"\n/* CSS for TreeDisableWrapExtension */\n\n.TreeDisableWrap {\n\twhite-space: nowrap;\n}\n.TreeIEDisableWrap {\n\twidth: expression( 5 + firstChild.offsetWidth );\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/TreeDisableWrap.css"), listenTree:function (tree) {
+	var wrappingDiv = document.createElement("div");
+	var clazz = tree.classPrefix + "DisableWrap";
+	if (dojo.render.html.ie) {
+		clazz = clazz + " " + tree.classPrefix + "IEDisableWrap";
 	}
-});
+	dojo.html.setClass(wrappingDiv, clazz);
+	var table = document.createElement("table");
+	wrappingDiv.appendChild(table);
+	var tbody = document.createElement("tbody");
+	table.appendChild(tbody);
+	var tr = document.createElement("tr");
+	tbody.appendChild(tr);
+	var td = document.createElement("td");
+	tr.appendChild(td);
+	if (tree.domNode.parentNode) {
+		tree.domNode.parentNode.replaceChild(wrappingDiv, tree.domNode);
+	}
+	td.appendChild(tree.domNode);
+	tree.domNode = wrappingDiv;
+}});
 
+
 __CPAN_FILE__ src/widget/Toggler.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -28918,30 +18679,18 @@
 dojo.provide("dojo.widget.Toggler");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.event.*");
-
-dojo.widget.defineWidget(
-	"dojo.widget.Toggler",
-	dojo.widget.HtmlWidget,
-{
-	// summary:
-	//		clicking on this widget shows/hides another widget
-
-	// targetId: String
-	//		Id of widget to show/hide when this widget is clicked
-	targetId: '',
-	
-	fillInTemplate: function() {
-		dojo.event.connect(this.domNode, "onclick", this, "onClick");
-	},
-	
-	onClick: function() {
-		var pane = dojo.widget.byId(this.targetId);
-		if(!pane){ return; }
-		pane.explodeSrc = this.domNode;
-		pane.toggleShowing();
+dojo.widget.defineWidget("dojo.widget.Toggler", dojo.widget.HtmlWidget, {targetId:"", fillInTemplate:function () {
+	dojo.event.connect(this.domNode, "onclick", this, "onClick");
+}, onClick:function () {
+	var pane = dojo.widget.byId(this.targetId);
+	if (!pane) {
+		return;
 	}
-});
+	pane.explodeSrc = this.domNode;
+	pane.toggleShowing();
+}});
 
+
 __CPAN_FILE__ src/widget/TreeLoadingController.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -28953,202 +18702,89 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeLoadingController");
-
 dojo.require("dojo.widget.TreeBasicController");
 dojo.require("dojo.event.*");
-dojo.require("dojo.json")
+dojo.require("dojo.json");
 dojo.require("dojo.io.*");
-
-
-dojo.widget.defineWidget("dojo.widget.TreeLoadingController", dojo.widget.TreeBasicController, {
-	RPCUrl: "",
-
-	RPCActionParam: "action", // used for GET for RPCUrl
-
-
-	/**
-	 * Common RPC error handler (dies)
-	*/
-	RPCErrorHandler: function(type, obj, evt) {
-		alert( "RPC Error: " + (obj.message||"no message"));
-	},
-
-	preventCache: true,
-
-	getRPCUrl: function(action) {
-
-		// RPCUrl=local meant SOLELY for DEMO and LOCAL TESTS.
-		// May lead to widgetId collisions
-		if (this.RPCUrl == "local") {
-			var dir = document.location.href.substr(0, document.location.href.lastIndexOf('/'));
-			var localUrl = dir+"/"+action;
-			//dojo.debug(localUrl);
-			return localUrl;
-		}
-
-		if (!this.RPCUrl) {
-			dojo.raise("Empty RPCUrl: can't load");
-		}
-
-		return this.RPCUrl + ( this.RPCUrl.indexOf("?") > -1 ? "&" : "?") + this.RPCActionParam+"="+action;
-	},
-
-
-	/**
-	 * Add all loaded nodes from array obj as node children and expand it
-	*/
-	loadProcessResponse: function(node, result, callObj, callFunc) {
-
-		if (!dojo.lang.isUndefined(result.error)) {
-			this.RPCErrorHandler("server", result.error);
-			return false;
-		}
-
-		//dojo.debugShallow(result);
-
-		var newChildren = result;
-
-		if (!dojo.lang.isArray(newChildren)) {
-			dojo.raise('loadProcessResponse: Not array loaded: '+newChildren);
-		}
-
-		for(var i=0; i<newChildren.length; i++) {
-			// looks like dojo.widget.manager needs no special "add" command
-			newChildren[i] = dojo.widget.createWidget(node.widgetType, newChildren[i]);
-			node.addChild(newChildren[i]);
-		}
-
-
-		//node.addAllChildren(newChildren);
-
-		node.state = node.loadStates.LOADED;
-
-		//dojo.debug(callFunc);
-
-		if (dojo.lang.isFunction(callFunc)) {
-			callFunc.apply(dojo.lang.isUndefined(callObj) ? this : callObj, [node, newChildren]);
-		}
-		//this.expand(node);
-	},
-
-	getInfo: function(obj) {
-		return obj.getInfo();
-	},
-
-	runRPC: function(kw) {
-		var _this = this;
-
-		var handle = function(type, data, evt) {
-			// unlock BEFORE any processing is done
-			// so errorHandler may apply locking
-			if (kw.lock) {
-				dojo.lang.forEach(kw.lock,
-					function(t) { t.unlock() }
-				);
-			}
-
-			if(type == "load"){
-				kw.load.call(this, data);
-			}else{
-				this.RPCErrorHandler(type, data, evt);
-			}
-
-		}
-
+dojo.widget.defineWidget("dojo.widget.TreeLoadingController", dojo.widget.TreeBasicController, {RPCUrl:"", RPCActionParam:"action", RPCErrorHandler:function (type, obj, evt) {
+	alert("RPC Error: " + (obj.message || "no message"));
+}, preventCache:true, getRPCUrl:function (action) {
+	if (this.RPCUrl == "local") {
+		var dir = document.location.href.substr(0, document.location.href.lastIndexOf("/"));
+		var localUrl = dir + "/" + action;
+		return localUrl;
+	}
+	if (!this.RPCUrl) {
+		dojo.raise("Empty RPCUrl: can't load");
+	}
+	return this.RPCUrl + (this.RPCUrl.indexOf("?") > -1 ? "&" : "?") + this.RPCActionParam + "=" + action;
+}, loadProcessResponse:function (node, result, callObj, callFunc) {
+	if (!dojo.lang.isUndefined(result.error)) {
+		this.RPCErrorHandler("server", result.error);
+		return false;
+	}
+	var newChildren = result;
+	if (!dojo.lang.isArray(newChildren)) {
+		dojo.raise("loadProcessResponse: Not array loaded: " + newChildren);
+	}
+	for (var i = 0; i < newChildren.length; i++) {
+		newChildren[i] = dojo.widget.createWidget(node.widgetType, newChildren[i]);
+		node.addChild(newChildren[i]);
+	}
+	node.state = node.loadStates.LOADED;
+	if (dojo.lang.isFunction(callFunc)) {
+		callFunc.apply(dojo.lang.isUndefined(callObj) ? this : callObj, [node, newChildren]);
+	}
+}, getInfo:function (obj) {
+	return obj.getInfo();
+}, runRPC:function (kw) {
+	var _this = this;
+	var handle = function (type, data, evt) {
 		if (kw.lock) {
-			dojo.lang.forEach(kw.lock,
-				function(t) { t.lock() }
-			);
+			dojo.lang.forEach(kw.lock, function (t) {
+				t.unlock();
+			});
 		}
-
-
-		dojo.io.bind({
-			url: kw.url,
-			/* I hitch to get this.loadOkHandler */
-			handle: dojo.lang.hitch(this, handle),
-			mimetype: "text/json",
-			preventCache: _this.preventCache,
-			sync: kw.sync,
-			content: { data: dojo.json.serialize(kw.params) }
+		if (type == "load") {
+			kw.load.call(this, data);
+		} else {
+			this.RPCErrorHandler(type, data, evt);
+		}
+	};
+	if (kw.lock) {
+		dojo.lang.forEach(kw.lock, function (t) {
+			t.lock();
 		});
-	},
-
-
-
-	/**
-	 * Load children of the node from server
-	 * Synchroneous loading doesn't break control flow
-	 * I need sync mode for DnD
-	*/
-	loadRemote: function(node, sync, callObj, callFunc){
-		var _this = this;
-
-		var params = {
-			node: this.getInfo(node),
-			tree: this.getInfo(node.tree)
-		};
-
-		//dojo.debug(callFunc)
-
-		this.runRPC({
-			url: this.getRPCUrl('getChildren'),
-			load: function(result) {
-				_this.loadProcessResponse(node, result, callObj, callFunc) ;
-			},
-			sync: sync,
-			lock: [node],
-			params: params
+	}
+	dojo.io.bind({url:kw.url, handle:dojo.lang.hitch(this, handle), mimetype:"text/json", preventCache:_this.preventCache, sync:kw.sync, content:{data:dojo.json.serialize(kw.params)}});
+}, loadRemote:function (node, sync, callObj, callFunc) {
+	var _this = this;
+	var params = {node:this.getInfo(node), tree:this.getInfo(node.tree)};
+	this.runRPC({url:this.getRPCUrl("getChildren"), load:function (result) {
+		_this.loadProcessResponse(node, result, callObj, callFunc);
+	}, sync:sync, lock:[node], params:params});
+}, expand:function (node, sync, callObj, callFunc) {
+	if (node.state == node.loadStates.UNCHECKED && node.isFolder) {
+		this.loadRemote(node, sync, this, function (node, newChildren) {
+			this.expand(node, sync, callObj, callFunc);
 		});
-
-	},
-
-
-	expand: function(node, sync, callObj, callFunc) {
-
-		if (node.state == node.loadStates.UNCHECKED && node.isFolder) {
-
-			this.loadRemote(node, sync,
-				this,
-				function(node, newChildren) {
-					this.expand(node, sync, callObj, callFunc);
-				}
-			);
-
-			return;
-		}
-
-		dojo.widget.TreeBasicController.prototype.expand.apply(this, arguments);
-
-	},
-
-
-
-	doMove: function(child, newParent, index) {
-		/* load nodes into newParent in sync mode, if needed, first */
-		if (newParent.isTreeNode && newParent.state == newParent.loadStates.UNCHECKED) {
-			this.loadRemote(newParent, true);
-		}
-
-		return dojo.widget.TreeBasicController.prototype.doMove.apply(this, arguments);
-	},
-
-
-	doCreateChild: function(parent, index, data, callObj, callFunc) {
-
-		/* load nodes into newParent in sync mode, if needed, first */
-		if (parent.state == parent.loadStates.UNCHECKED) {
-			this.loadRemote(parent, true);
-		}
-
-		return dojo.widget.TreeBasicController.prototype.doCreateChild.apply(this, arguments);
+		return;
 	}
+	dojo.widget.TreeBasicController.prototype.expand.apply(this, arguments);
+}, doMove:function (child, newParent, index) {
+	if (newParent.isTreeNode && newParent.state == newParent.loadStates.UNCHECKED) {
+		this.loadRemote(newParent, true);
+	}
+	return dojo.widget.TreeBasicController.prototype.doMove.apply(this, arguments);
+}, doCreateChild:function (parent, index, data, callObj, callFunc) {
+	if (parent.state == parent.loadStates.UNCHECKED) {
+		this.loadRemote(parent, true);
+	}
+	return dojo.widget.TreeBasicController.prototype.doCreateChild.apply(this, arguments);
+}});
 
 
-
-});
-
 __CPAN_FILE__ src/widget/RegexpTextbox.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -29161,46 +18797,21 @@
 */
 
 dojo.provide("dojo.widget.RegexpTextbox");
-
 dojo.require("dojo.widget.ValidationTextbox");
-
-dojo.widget.defineWidget(
-	"dojo.widget.RegexpTextbox",
-	dojo.widget.ValidationTextbox,
-	{
-		/*
-		summary
-		  A subclass of ValidationTextbox.
-		  Over-rides isValid to test input based on a regular expression.
-		  Has a new property that can be specified as attributes in the markup. 
-		
-		regexp: String
-		       The regular expression string to use
-		flags: String
-		        Flags to pass to the regular expression (e.g. 'i', 'g', etc)
-		*/
-
-	    mixInProperties: function(localProperties, frag){
-	        // First initialize properties in super-class.
-	        dojo.widget.RegexpTextbox.superclass.mixInProperties.apply(this, arguments);
-
-	        // Get properties from markup attibutes, and assign to flags object.
-	        if(localProperties.regexp){
-	            this.flags.regexp = localProperties.regexp;
-	        }
-	        if(localProperties.flags){
-	            this.flags.flags = localProperties.flags;
-	        }
-	    },
-
-	    // Over-ride for integer validation
-	    isValid: function(){
-	        var regexp = new RegExp(this.flags.regexp, this.flags.flags);
-	        return regexp.test(this.textbox.value);
-	    }
+dojo.widget.defineWidget("dojo.widget.RegexpTextbox", dojo.widget.ValidationTextbox, {mixInProperties:function (localProperties, frag) {
+	dojo.widget.RegexpTextbox.superclass.mixInProperties.apply(this, arguments);
+	if (localProperties.regexp) {
+		this.flags.regexp = localProperties.regexp;
 	}
-);
+	if (localProperties.flags) {
+		this.flags.flags = localProperties.flags;
+	}
+}, isValid:function () {
+	var regexp = new RegExp(this.flags.regexp, this.flags.flags);
+	return regexp.test(this.textbox.value);
+}});
 
+
 __CPAN_FILE__ src/widget/Tree.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -29212,18 +18823,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-/**
- * Tree model does all the drawing, visual node management etc.
- * Throws events about clicks on it, so someone may catch them and process
- * Tree knows nothing about DnD stuff, covered in TreeDragAndDrop and (if enabled) attached by controller
-*/
-
-/**
- * TODO: use domNode.cloneNode instead of createElement for grid
- * Should be faster (lyxsus)
- */
 dojo.provide("dojo.widget.Tree");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.event.*");
 dojo.require("dojo.io.*");
@@ -29231,541 +18831,223 @@
 dojo.require("dojo.widget.TreeNode");
 dojo.require("dojo.html.common");
 dojo.require("dojo.html.selection");
-
-
-dojo.widget.defineWidget("dojo.widget.Tree", dojo.widget.HtmlWidget, function() {
+dojo.widget.defineWidget("dojo.widget.Tree", dojo.widget.HtmlWidget, function () {
 	this.eventNames = {};
-
 	this.tree = this;
 	this.DNDAcceptTypes = [];
 	this.actionsDisabled = [];
-
-},
-{
-	widgetType: "Tree",
-
-	eventNamesDefault: {
-		// new child does not get domNode filled in (only template draft)
-		// until addChild->createDOMNode is called(program way) OR createDOMNode (html-way)
-		// hook events to operate on new DOMNode, create dropTargets etc
-		createDOMNode: "createDOMNode",
-		// tree created.. Perform tree-wide actions if needed
-		treeCreate: "treeCreate",
-		treeDestroy: "treeDestroy",
-		// expand icon clicked
-		treeClick: "treeClick",
-		// node icon clicked
-		iconClick: "iconClick",
-		// node title clicked
-		titleClick: "titleClick",
-
-		moveFrom: "moveFrom",
-		moveTo: "moveTo",
-		addChild: "addChild",
-		removeNode: "removeNode",
-		expand: "expand",
-		collapse: "collapse"
-	},
-
-	isContainer: true,
-
-	DNDMode: "off",
-
-	lockLevel: 0, // lock ++ unlock --, so nested locking works fine
-
-	strictFolders: true,
-
-	DNDModes: {
-		BETWEEN: 1,
-		ONTO: 2
-	},
-
-	DNDAcceptTypes: "",
-
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/images/Tree/Tree.css"),
-
-	templateString: '<div class="dojoTree"></div>',
-
-	isExpanded: true, // consider this "root node" to be always expanded
-
-	isTree: true,
-
-	objectId: "",
-
-	// autoCreate if not "off"
-	// used to get the autocreated controller ONLY.
-	// generally, tree DOES NOT KNOW about its CONTROLLER, it just doesn't care
-	// controller gets messages via dojo.event
-	controller: "",
-
-	// autoCreate if not "off"
-	// used to get the autocreated selector ONLY.
-	// generally, tree DOES NOT KNOW its SELECTOR
-	// binding is made with dojo.event
-	selector: "",
-
-	// used ONLY at initialization time
-	menu: "", // autobind menu if menu's widgetId is set here
-
-	expandLevel: "", // expand to level automatically
-
-	//
-	// these icons control the grid and expando buttons for the whole tree
-	//
-
-	blankIconSrc: dojo.uri.dojoUri("src/widget/templates/images/Tree/treenode_blank.gif"),
-
-	gridIconSrcT: dojo.uri.dojoUri("src/widget/templates/images/Tree/treenode_grid_t.gif"), // for non-last child grid
-	gridIconSrcL: dojo.uri.dojoUri("src/widget/templates/images/Tree/treenode_grid_l.gif"), // for last child grid
-	gridIconSrcV: dojo.uri.dojoUri("src/widget/templates/images/Tree/treenode_grid_v.gif"), // vertical line
-	gridIconSrcP: dojo.uri.dojoUri("src/widget/templates/images/Tree/treenode_grid_p.gif"), // for under parent item child icons
-	gridIconSrcC: dojo.uri.dojoUri("src/widget/templates/images/Tree/treenode_grid_c.gif"), // for under child item child icons
-	gridIconSrcX: dojo.uri.dojoUri("src/widget/templates/images/Tree/treenode_grid_x.gif"), // grid for sole root item
-	gridIconSrcY: dojo.uri.dojoUri("src/widget/templates/images/Tree/treenode_grid_y.gif"), // grid for last rrot item
-	gridIconSrcZ: dojo.uri.dojoUri("src/widget/templates/images/Tree/treenode_grid_z.gif"), // for under root parent item child icon
-
-	expandIconSrcPlus: dojo.uri.dojoUri("src/widget/templates/images/Tree/treenode_expand_plus.gif"),
-	expandIconSrcMinus: dojo.uri.dojoUri("src/widget/templates/images/Tree/treenode_expand_minus.gif"),
-	expandIconSrcLoading: dojo.uri.dojoUri("src/widget/templates/images/Tree/treenode_loading.gif"),
-
-
-	iconWidth: 18,
-	iconHeight: 18,
-
-
-	//
-	// tree options
-	//
-
-	showGrid: true,
-	showRootGrid: true,
-
-	actionIsDisabled: function(action) {
-		var _this = this;
-		return dojo.lang.inArray(_this.actionsDisabled, action)
-	},
-
-
-	actions: {
-    	ADDCHILD: "ADDCHILD"
-	},
-
-
-	getInfo: function() {
-		var info = {
-			widgetId: this.widgetId,
-			objectId: this.objectId
-		}
-
-		return info;
-	},
-
-	initializeController: function() {
-		if (this.controller != "off") {
-			if (this.controller) {
-				this.controller = dojo.widget.byId(this.controller);
-			}
-			else {
-				// create default controller here
-				dojo.require("dojo.widget.TreeBasicController");
-				this.controller = dojo.widget.createWidget("TreeBasicController",
-					{ DNDController: (this.DNDMode ? "create" : ""), dieWithTree: true }
-				 );
-
-			}
-			this.controller.listenTree(this); // controller listens to my events
-
+}, {widgetType:"Tree", eventNamesDefault:{createDOMNode:"createDOMNode", treeCreate:"treeCreate", treeDestroy:"treeDestroy", treeClick:"treeClick", iconClick:"iconClick", titleClick:"titleClick", moveFrom:"moveFrom", moveTo:"moveTo", addChild:"addChild", removeNode:"removeNode", expand:"expand", collapse:"collapse"}, isContainer:true, DNDMode:"off", lockLevel:0, strictFolders:true, DNDModes:{BETWEEN:1, ONTO:2}, DNDAcceptTypes:"", templateCssString:"\n.dojoTree {\n\tfont: caption;\n\tfont-size: 11px;\n\tfont-weight: normal;\n\toverflow: auto;\n}\n\n\n.dojoTreeNodeLabelTitle {\n\tpadding-left: 2px;\n\tcolor: WindowText;\n}\n\n.dojoTreeNodeLabel {\n\tcursor:hand;\n\tcursor:pointer;\n}\n\n.dojoTreeNodeLabelTitle:hover {\n\ttext-decoration: underline;\n}\n\n.dojoTreeNodeLabelSelected {\n\tbackground-color: Highlight;\n\tcolor: HighlightText;\n}\n\n.dojoTree div {\n\twhite-space: nowrap;\n}\n\n.dojoTree img, .dojoTreeNodeLabel img {\n\tvertical-align: middle;\n}\n\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/Tree.css"), templateString:"<div class=\"dojoTree\"></div>", isExpanded:true, isTree:true, objectId:"", controller:"", selector:"", menu:"", expandLevel:"", blankIconSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_blank.gif"), gridIconSrcT:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_t.gif"), gridIconSrcL:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_l.gif"), gridIconSrcV:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_v.gif"), gridIconSrcP:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_p.gif"), gridIconSrcC:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_c.gif"), gridIconSrcX:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_x.gif"), gridIconSrcY:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_y.gif"), gridIconSrcZ:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_z.gif"), expandIconSrcPlus:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_expand_plus.gif"), expandIconSrcMinus:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_expand_minus.gif"), expandIconSrcLoading:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_loading.gif"), iconWidth:18, iconHeight:18, showGrid:true, showRootGrid:true, actionIsDisabled:function (action) {
+	var _this = this;
+	return dojo.lang.inArray(_this.actionsDisabled, action);
+}, actions:{ADDCHILD:"ADDCHILD"}, getInfo:function () {
+	var info = {widgetId:this.widgetId, objectId:this.objectId};
+	return info;
+}, initializeController:function () {
+	if (this.controller != "off") {
+		if (this.controller) {
+			this.controller = dojo.widget.byId(this.controller);
 		} else {
-			this.controller = null;
+			dojo.require("dojo.widget.TreeBasicController");
+			this.controller = dojo.widget.createWidget("TreeBasicController", {DNDController:(this.DNDMode ? "create" : ""), dieWithTree:true});
 		}
-	},
-
-	initializeSelector: function() {
-
-		if (this.selector != "off") {
-			if (this.selector) {
-				this.selector = dojo.widget.byId(this.selector);
-			}
-			else {
-				// create default controller here
-				dojo.require("dojo.widget.TreeSelector");
-				this.selector = dojo.widget.createWidget("TreeSelector", {dieWithTree: true});
-			}
-
-			this.selector.listenTree(this);
-
+		this.controller.listenTree(this);
+	} else {
+		this.controller = null;
+	}
+}, initializeSelector:function () {
+	if (this.selector != "off") {
+		if (this.selector) {
+			this.selector = dojo.widget.byId(this.selector);
 		} else {
-			this.selector = null;
+			dojo.require("dojo.widget.TreeSelector");
+			this.selector = dojo.widget.createWidget("TreeSelector", {dieWithTree:true});
 		}
-	},
-
-	initialize: function(args, frag){
-
-		var _this = this;
-
-		for(name in this.eventNamesDefault) {
-			if (dojo.lang.isUndefined(this.eventNames[name])) {
-				this.eventNames[name] = this.widgetId+"/"+this.eventNamesDefault[name];
-			}
+		this.selector.listenTree(this);
+	} else {
+		this.selector = null;
+	}
+}, initialize:function (args, frag) {
+	var _this = this;
+	for (name in this.eventNamesDefault) {
+		if (dojo.lang.isUndefined(this.eventNames[name])) {
+			this.eventNames[name] = this.widgetId + "/" + this.eventNamesDefault[name];
 		}
-
-		for(var i=0; i<this.actionsDisabled.length; i++) {
-			this.actionsDisabled[i] = this.actionsDisabled[i].toUpperCase();
-		}
-
-		if (this.DNDMode == "off") {
-			this.DNDMode = 0;
-		} else if (this.DNDMode == "between") {
+	}
+	for (var i = 0; i < this.actionsDisabled.length; i++) {
+		this.actionsDisabled[i] = this.actionsDisabled[i].toUpperCase();
+	}
+	if (this.DNDMode == "off") {
+		this.DNDMode = 0;
+	} else {
+		if (this.DNDMode == "between") {
 			this.DNDMode = this.DNDModes.ONTO | this.DNDModes.BETWEEN;
-		} else if (this.DNDMode == "onto") {
-			this.DNDMode = this.DNDModes.ONTO;
-		}
-
-		this.expandLevel = parseInt(this.expandLevel);
-
-		this.initializeSelector();
-		this.initializeController();
-
-		if (this.menu) {
-			this.menu = dojo.widget.byId(this.menu);
-			this.menu.listenTree(this);
-		}
-
-
-		this.containerNode = this.domNode;
-
-	},
-
-
-	postCreate: function() {
-		this.createDOMNode();
-	},
-
-
-	createDOMNode: function() {
-
-		dojo.html.disableSelection(this.domNode);
-
-		for(var i=0; i<this.children.length; i++){
-			this.children[i].parent = this; // root nodes have tree as parent
-
-			var node = this.children[i].createDOMNode(this, 0);
-
-
-			this.domNode.appendChild(node);
-		}
-
-
-		if (!this.showRootGrid){
-			for(var i=0; i<this.children.length; i++){
-				this.children[i].expand();
-			}
-		}
-
-		dojo.event.topic.publish(this.eventNames.treeCreate, { source: this } );
-
-	},
-
-
-	destroy: function() {
-		dojo.event.topic.publish(this.tree.eventNames.treeDestroy, { source: this } );
-
-		return dojo.widget.HtmlWidget.prototype.destroy.apply(this, arguments);
-	},
-
-
-	addChild: function(child, index) {
-
-//		dojo.debug("doAddChild "+index+" called for "+child);
-
-		var message = {
-			child: child,
-			index: index,
-			parent: this,
-			// remember if dom was already initialized
-			// initialized => no createDOMNode => no createDOMNode event
-			domNodeInitialized: child.domNodeInitialized
-		}
-
-		this.doAddChild.apply(this, arguments);
-
-		dojo.event.topic.publish(this.tree.eventNames.addChild, message);
-	},
-
-
-	// not called for initial tree building. See createDOMNode instead.
-	// builds child html node if needed
-	// index is "last node" by default
-	/**
-	 * FIXME: Is it possible that removeNode from the tree will cause leaks cause of attached events ?
-	 * if yes, then only attach events in addChild and detach in remove.. Seems all ok yet.
-	*/
-	doAddChild: function(child, index){
-
-		if (dojo.lang.isUndefined(index)) {
-			index = this.children.length;
-		}
-
-		if (!child.isTreeNode){
-			dojo.raise("You can only add TreeNode widgets to a "+this.widgetType+" widget!");
-			return;
-		}
-
-		// usually it is impossible to change "isFolder" state, but if anyone wants to add a child to leaf,
-		// it is possible program-way.
-		if (this.isTreeNode){
-			if (!this.isFolder) { // just became a folder.
-				//dojo.debug("becoming folder "+this);
-				this.setFolder();
-			}
-		}
-
-		// adjust tree
-		var _this = this;
-		dojo.lang.forEach(child.getDescendants(), function(elem) { elem.tree = _this.tree; });
-
-		// fix parent
-		child.parent = this;
-
-
-		// no dynamic loading for those who become parents
-		if (this.isTreeNode) {
-			this.state = this.loadStates.LOADED;
-		}
-
-		// add new child into DOM after it was added into children
-		if (index < this.children.length) { // children[] already has child
-			//dojo.debug("Inserting before "+this.children[index].title);
-			dojo.html.insertBefore(child.domNode, this.children[index].domNode);
 		} else {
-			this.containerNode.appendChild(child.domNode);
-			if (this.isExpanded && this.isTreeNode) {
-				/* When I add children to hidden containerNode => show container w/ them */
-				this.showChildren();
+			if (this.DNDMode == "onto") {
+				this.DNDMode = this.DNDModes.ONTO;
 			}
 		}
-
-
-		this.children.splice(index, 0, child);
-
-		//dojo.debugShallow(this.children);
-
-
-		// if node exists - adjust its depth, otherwise build it
-		if (child.domNodeInitialized) {
-			var d = this.isTreeNode ? this.depth : -1;
-			child.adjustDepth( d - child.depth + 1 );
-
-
-			// update icons to link generated dom with Tree => updateParentGrid
-			// if I moved child from LastNode inside the tree => need to link it up'n'down =>
-			// updateExpandGridColumn
-			// if I change depth => need to update all grid..
-			child.updateIconTree();
-		} else {
-			//dojo.debug("Create domnode ");
-			child.depth = this.isTreeNode ? this.depth+1 : 0;
-			child.createDOMNode(child.tree, child.depth);
+	}
+	this.expandLevel = parseInt(this.expandLevel);
+	this.initializeSelector();
+	this.initializeController();
+	if (this.menu) {
+		this.menu = dojo.widget.byId(this.menu);
+		this.menu.listenTree(this);
+	}
+	this.containerNode = this.domNode;
+}, postCreate:function () {
+	this.createDOMNode();
+}, createDOMNode:function () {
+	dojo.html.disableSelection(this.domNode);
+	for (var i = 0; i < this.children.length; i++) {
+		this.children[i].parent = this;
+		var node = this.children[i].createDOMNode(this, 0);
+		this.domNode.appendChild(node);
+	}
+	if (!this.showRootGrid) {
+		for (var i = 0; i < this.children.length; i++) {
+			this.children[i].expand();
 		}
-
-
-
-		// Use-case:
-		// When previous sibling was created => it was last, no children after it
-		// so it did not create link down => let's add it for all descendants
-		// Use-case:
-		// a child was moved down under the last node so last node should be updated
-		var prevSibling = child.getPreviousSibling();
-		if (child.isLastChild() && prevSibling) {
-			prevSibling.updateExpandGridColumn();
+	}
+	dojo.event.topic.publish(this.eventNames.treeCreate, {source:this});
+}, destroy:function () {
+	dojo.event.topic.publish(this.tree.eventNames.treeDestroy, {source:this});
+	return dojo.widget.HtmlWidget.prototype.destroy.apply(this, arguments);
+}, addChild:function (child, index) {
+	var message = {child:child, index:index, parent:this, domNodeInitialized:child.domNodeInitialized};
+	this.doAddChild.apply(this, arguments);
+	dojo.event.topic.publish(this.tree.eventNames.addChild, message);
+}, doAddChild:function (child, index) {
+	if (dojo.lang.isUndefined(index)) {
+		index = this.children.length;
+	}
+	if (!child.isTreeNode) {
+		dojo.raise("You can only add TreeNode widgets to a " + this.widgetType + " widget!");
+		return;
+	}
+	if (this.isTreeNode) {
+		if (!this.isFolder) {
+			this.setFolder();
 		}
-
-
-		//dojo.debug("Added child "+child);
-
-
-
-	},
-
-
-
-
-	makeBlankImg: function() {
-		var img = document.createElement('img');
-
-		img.style.width = this.iconWidth + 'px';
-		img.style.height = this.iconHeight + 'px';
-		img.src = this.blankIconSrc;
-		img.style.verticalAlign = 'middle';
-
-		return img;
-	},
-
-
-	updateIconTree: function(){
-
-		//dojo.debug("Update icons for "+this)
-		if (!this.isTree) {
-			this.updateIcons();
+	}
+	var _this = this;
+	dojo.lang.forEach(child.getDescendants(), function (elem) {
+		elem.tree = _this.tree;
+	});
+	child.parent = this;
+	if (this.isTreeNode) {
+		this.state = this.loadStates.LOADED;
+	}
+	if (index < this.children.length) {
+		dojo.html.insertBefore(child.domNode, this.children[index].domNode);
+	} else {
+		this.containerNode.appendChild(child.domNode);
+		if (this.isExpanded && this.isTreeNode) {
+			this.showChildren();
 		}
-
-		for(var i=0; i<this.children.length; i++){
-			this.children[i].updateIconTree();
+	}
+	this.children.splice(index, 0, child);
+	if (child.domNodeInitialized) {
+		var d = this.isTreeNode ? this.depth : -1;
+		child.adjustDepth(d - child.depth + 1);
+		child.updateIconTree();
+	} else {
+		child.depth = this.isTreeNode ? this.depth + 1 : 0;
+		child.createDOMNode(child.tree, child.depth);
+	}
+	var prevSibling = child.getPreviousSibling();
+	if (child.isLastChild() && prevSibling) {
+		prevSibling.updateExpandGridColumn();
+	}
+}, makeBlankImg:function () {
+	var img = document.createElement("img");
+	img.style.width = this.iconWidth + "px";
+	img.style.height = this.iconHeight + "px";
+	img.src = this.blankIconSrc;
+	img.style.verticalAlign = "middle";
+	return img;
+}, updateIconTree:function () {
+	if (!this.isTree) {
+		this.updateIcons();
+	}
+	for (var i = 0; i < this.children.length; i++) {
+		this.children[i].updateIconTree();
+	}
+}, toString:function () {
+	return "[" + this.widgetType + " ID:" + this.widgetId + "]";
+}, move:function (child, newParent, index) {
+	var oldParent = child.parent;
+	var oldTree = child.tree;
+	this.doMove.apply(this, arguments);
+	var newParent = child.parent;
+	var newTree = child.tree;
+	var message = {oldParent:oldParent, oldTree:oldTree, newParent:newParent, newTree:newTree, child:child};
+	dojo.event.topic.publish(oldTree.eventNames.moveFrom, message);
+	dojo.event.topic.publish(newTree.eventNames.moveTo, message);
+}, doMove:function (child, newParent, index) {
+	child.parent.doRemoveNode(child);
+	newParent.doAddChild(child, index);
+}, removeNode:function (child) {
+	if (!child.parent) {
+		return;
+	}
+	var oldTree = child.tree;
+	var oldParent = child.parent;
+	var removedChild = this.doRemoveNode.apply(this, arguments);
+	dojo.event.topic.publish(this.tree.eventNames.removeNode, {child:removedChild, tree:oldTree, parent:oldParent});
+	return removedChild;
+}, doRemoveNode:function (child) {
+	if (!child.parent) {
+		return;
+	}
+	var parent = child.parent;
+	var children = parent.children;
+	var index = child.getParentIndex();
+	if (index < 0) {
+		dojo.raise("Couldn't find node " + child + " for removal");
+	}
+	children.splice(index, 1);
+	dojo.html.removeNode(child.domNode);
+	if (parent.children.length == 0 && !parent.isTree) {
+		parent.containerNode.style.display = "none";
+	}
+	if (index == children.length && index > 0) {
+		children[index - 1].updateExpandGridColumn();
+	}
+	if (parent instanceof dojo.widget.Tree && index == 0 && children.length > 0) {
+		children[0].updateExpandGrid();
+	}
+	child.parent = child.tree = null;
+	return child;
+}, markLoading:function () {
+}, unMarkLoading:function () {
+}, lock:function () {
+	!this.lockLevel && this.markLoading();
+	this.lockLevel++;
+}, unlock:function () {
+	if (!this.lockLevel) {
+		dojo.raise("unlock: not locked");
+	}
+	this.lockLevel--;
+	!this.lockLevel && this.unMarkLoading();
+}, isLocked:function () {
+	var node = this;
+	while (true) {
+		if (node.lockLevel) {
+			return true;
 		}
-
-	},
-
-	toString: function() {
-		return "["+this.widgetType+" ID:"+this.widgetId+"]"
-	},
-
-
-
-
-	/**
-	 * Move child to newParent as last child
-	 * redraw tree and update icons.
-	 *
-	 * Called by target, saves source in event.
-	 * events are published for BOTH trees AFTER update.
-	*/
-	move: function(child, newParent, index) {
-
-		//dojo.debug(child+" "+newParent+" at "+index);
-
-		var oldParent = child.parent;
-		var oldTree = child.tree;
-
-		this.doMove.apply(this, arguments);
-
-		var newParent = child.parent;
-		var newTree = child.tree;
-
-		var message = {
-				oldParent: oldParent, oldTree: oldTree,
-				newParent: newParent, newTree: newTree,
-				child: child
-		};
-
-		/* publish events here about structural changes for both source and target trees */
-		dojo.event.topic.publish(oldTree.eventNames.moveFrom, message);
-		dojo.event.topic.publish(newTree.eventNames.moveTo, message);
-
-	},
-
-
-	/* do actual parent change here. Write remove child first */
-	doMove: function(child, newParent, index) {
-		//var parent = child.parent;
-		child.parent.doRemoveNode(child);
-
-		newParent.doAddChild(child, index);
-	},
-
-
-
-// ================================ removeNode ===================================
-
-	removeNode: function(child) {
-		if (!child.parent) return;
-
-		var oldTree = child.tree;
-		var oldParent = child.parent;
-
-		var removedChild = this.doRemoveNode.apply(this, arguments);
-
-
-		dojo.event.topic.publish(this.tree.eventNames.removeNode,
-			{ child: removedChild, tree: oldTree, parent: oldParent }
-		);
-
-		return removedChild;
-	},
-
-
-	doRemoveNode: function(child) {
-		if (!child.parent) return;
-
-		var parent = child.parent;
-
-		var children = parent.children;
-
-
-		var index = child.getParentIndex();
-		if (index < 0) {
-			dojo.raise("Couldn't find node "+child+" for removal");
+		if (node instanceof dojo.widget.Tree) {
+			break;
 		}
-
-
-		children.splice(index,1);
-		dojo.html.removeNode(child.domNode);
-
-		if (parent.children.length == 0 && !parent.isTree) {
-			parent.containerNode.style.display = "none";
-		}
-
-		// if WAS last node (children.length decreased already) and has prevSibling
-		if (index == children.length && index>0) {
-			children[index-1].updateExpandGridColumn();
-		}
-		// if it WAS first node in WHOLE TREE -
-		// update link up of its former lower neighbour(if exists still)
-		if (parent instanceof dojo.widget.Tree && index == 0 && children.length>0) {
-			children[0].updateExpandGrid();
-		}
-
-		//parent.updateIconTree();
-
-
-		child.parent = child.tree = null;
-
-		return child;
-	},
-
-	markLoading: function() {
-		// no way to mark tree loading
-	},
-
-	unMarkLoading: function() {
-		// no way to show that tree finished loading
-	},
-
-
-	lock: function() {
-		!this.lockLevel && this.markLoading();
-		this.lockLevel++;
-	},
-	unlock: function() {
-		if (!this.lockLevel) {
-			dojo.raise("unlock: not locked");
-		}
-		this.lockLevel--;
-		!this.lockLevel && this.unMarkLoading();
-	},
-
-	isLocked: function() {
-		var node = this;
-		while (true) {
-			if (node.lockLevel) {
-				return true;
-			}
-			if (node instanceof dojo.widget.Tree) {
-				break;
-			}
-			node = node.parent;
-		}
-
-		return false;
-	},
-
-	flushLock: function() {
-		this.lockLevel = 0;
-		this.unMarkLoading();
+		node = node.parent;
 	}
-});
+	return false;
+}, flushLock:function () {
+	this.lockLevel = 0;
+	this.unMarkLoading();
+}});
 
 
-
 __CPAN_FILE__ src/widget/Chart.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -29778,252 +19060,226 @@
 */
 
 dojo.provide("dojo.widget.Chart");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.gfx.color");
 dojo.require("dojo.gfx.color.hsl");
-
-dojo.declare(
-	"dojo.widget.Chart",
-	null,
-	function(){
-		// summary: Base class for svg and vml implementations of Chart
-		this.series = [];
-	},
-{
-	isContainer: false,
-
-	assignColors: function(){
-		//	summary
-		//	Assigns/generates a color for a data series.
-		var hue=30;
-		var sat=120;
-		var lum=120;
-		var steps = Math.round(330/this.series.length);
-
-		for(var i=0; i<this.series.length; i++){
-			var c=dojo.gfx.color.hsl2rgb(hue,sat,lum);
-			if(!this.series[i].color){
-				this.series[i].color = dojo.gfx.color.rgb2hex(c[0],c[1],c[2]);
-			}
-			hue += steps;
+dojo.declare("dojo.widget.Chart", null, function () {
+	this.series = [];
+}, {isContainer:false, assignColors:function () {
+	var hue = 30;
+	var sat = 120;
+	var lum = 120;
+	var steps = Math.round(330 / this.series.length);
+	for (var i = 0; i < this.series.length; i++) {
+		var c = dojo.gfx.color.hsl2rgb(hue, sat, lum);
+		if (!this.series[i].color) {
+			this.series[i].color = dojo.gfx.color.rgb2hex(c[0], c[1], c[2]);
 		}
-	},
-	parseData: function(table){
-		var thead=table.getElementsByTagName("thead")[0];
-		var tbody=table.getElementsByTagName("tbody")[0];
-		if(!(thead&&tbody)) dojo.raise("dojo.widget.Chart: supplied table must define a head and a body.");
-
-		//	set up the series.
-		var columns=thead.getElementsByTagName("tr")[0].getElementsByTagName("th");	//	should be <tr><..>
-		
-		//	assume column 0 == X
-		for (var i=1; i<columns.length; i++){
-			var key="column"+i;
-			var label=columns[i].innerHTML;
-			var plotType=columns[i].getAttribute("plotType")||"line";
-			var color=columns[i].getAttribute("color");
-			var ds=new dojo.widget.Chart.DataSeries(key,label,plotType,color);
-			this.series.push(ds);
-		}
-
-		//	ok, get the values.
-		var rows=tbody.rows;
-		var xMin=Number.MAX_VALUE,xMax=Number.MIN_VALUE;
-		var yMin=Number.MAX_VALUE,yMax=Number.MIN_VALUE;
-		var ignore = [
-			"accesskey","align","bgcolor","class",
-			"colspan","height","id","nowrap",
-			"rowspan","style","tabindex","title",
-			"valign","width"
-		];
-
-		for(var i=0; i<rows.length; i++){
-			var row=rows[i];
-			var cells=row.cells;
-			var x=Number.MIN_VALUE;
-			for (var j=0; j<cells.length; j++){
-				if (j==0){
-					x=parseFloat(cells[j].innerHTML);
-					xMin=Math.min(xMin, x);
-					xMax=Math.max(xMax, x);
-				} else {
-					var ds=this.series[j-1];
-					var y=parseFloat(cells[j].innerHTML);
-					yMin=Math.min(yMin,y);
-					yMax=Math.max(yMax,y);
-					var o={x:x, value:y};
-					var attrs=cells[j].attributes;
-					for(var k=0; k<attrs.length; k++){
-						var attr=attrs.item(k);
-						var bIgnore=false;
-						for (var l=0; l<ignore.length; l++){
-							if (attr.nodeName.toLowerCase()==ignore[l]){
-								bIgnore=true;
-								break;
-							}
+		hue += steps;
+	}
+}, parseData:function (table) {
+	var thead = table.getElementsByTagName("thead")[0];
+	var tbody = table.getElementsByTagName("tbody")[0];
+	if (!(thead && tbody)) {
+		dojo.raise("dojo.widget.Chart: supplied table must define a head and a body.");
+	}
+	var columns = thead.getElementsByTagName("tr")[0].getElementsByTagName("th");
+	for (var i = 1; i < columns.length; i++) {
+		var key = "column" + i;
+		var label = columns[i].innerHTML;
+		var plotType = columns[i].getAttribute("plotType") || "line";
+		var color = columns[i].getAttribute("color");
+		var ds = new dojo.widget.Chart.DataSeries(key, label, plotType, color);
+		this.series.push(ds);
+	}
+	var rows = tbody.rows;
+	var xMin = Number.MAX_VALUE, xMax = Number.MIN_VALUE;
+	var yMin = Number.MAX_VALUE, yMax = Number.MIN_VALUE;
+	var ignore = ["accesskey", "align", "bgcolor", "class", "colspan", "height", "id", "nowrap", "rowspan", "style", "tabindex", "title", "valign", "width"];
+	for (var i = 0; i < rows.length; i++) {
+		var row = rows[i];
+		var cells = row.cells;
+		var x = Number.MIN_VALUE;
+		for (var j = 0; j < cells.length; j++) {
+			if (j == 0) {
+				x = parseFloat(cells[j].innerHTML);
+				xMin = Math.min(xMin, x);
+				xMax = Math.max(xMax, x);
+			} else {
+				var ds = this.series[j - 1];
+				var y = parseFloat(cells[j].innerHTML);
+				yMin = Math.min(yMin, y);
+				yMax = Math.max(yMax, y);
+				var o = {x:x, value:y};
+				var attrs = cells[j].attributes;
+				for (var k = 0; k < attrs.length; k++) {
+					var attr = attrs.item(k);
+					var bIgnore = false;
+					for (var l = 0; l < ignore.length; l++) {
+						if (attr.nodeName.toLowerCase() == ignore[l]) {
+							bIgnore = true;
+							break;
 						}
-						if(!bIgnore) o[attr.nodeName]=attr.nodeValue;
 					}
-					ds.add(o);
+					if (!bIgnore) {
+						o[attr.nodeName] = attr.nodeValue;
+					}
 				}
+				ds.add(o);
 			}
 		}
-		return { x:{ min:xMin, max:xMax}, y:{ min:yMin, max:yMax} };
 	}
-});
-
-dojo.declare(
-	"dojo.widget.Chart.DataSeries",
-	null,
-	function(key, label, plotType, color){
-		//	summary:
-		//		Every chart has a set of data series; this is the series.  Note that each
-		//		member of value is an object and in the minimum has 2 properties: .x and
-		//		.value.
-		//
-		this.id = "DataSeries"+dojo.widget.Chart.DataSeries.count++;
-		this.key = key;
-		this.label = label||this.id;
-		this.plotType = plotType||"line";	//	let line be the default.
-		this.color = color;
-		this.values = [];
-	},
-{
-	add: function(v){
-		if(v.x==null||v.value==null){
-			dojo.raise("dojo.widget.Chart.DataSeries.add: v must have both an 'x' and 'value' property.");
+	return {x:{min:xMin, max:xMax}, y:{min:yMin, max:yMax}};
+}});
+dojo.declare("dojo.widget.Chart.DataSeries", null, function (key, label, plotType, color) {
+	this.id = "DataSeries" + dojo.widget.Chart.DataSeries.count++;
+	this.key = key;
+	this.label = label || this.id;
+	this.plotType = plotType || "line";
+	this.color = color;
+	this.values = [];
+}, {add:function (v) {
+	if (v.x == null || v.value == null) {
+		dojo.raise("dojo.widget.Chart.DataSeries.add: v must have both an 'x' and 'value' property.");
+	}
+	this.values.push(v);
+}, clear:function () {
+	this.values = [];
+}, createRange:function (len) {
+	var idx = this.values.length - 1;
+	var length = (len || this.values.length);
+	return {"index":idx, "length":length, "start":Math.max(idx - length, 0)};
+}, getMean:function (len) {
+	var range = this.createRange(len);
+	if (range.index < 0) {
+		return 0;
+	}
+	var t = 0;
+	var c = 0;
+	for (var i = range.index; i >= range.start; i--) {
+		var n = parseFloat(this.values[i].value);
+		if (!isNaN(n)) {
+			t += n;
+			c++;
 		}
-		this.values.push(v);
-	},
-
-	clear: function(){
-		this.values=[];
-	},
-
-	createRange: function(len){
-		var idx = this.values.length-1;
-		var length = (len||this.values.length);
-		return { "index": idx, "length": length, "start":Math.max(idx-length,0) };
-	},
-
-	//	trend values
-	getMean: function(len){
-		var range = this.createRange(len);
-		if(range.index<0){ return 0; }
-		var t = 0;
-		var c = 0;
-		for(var i=range.index; i>=range.start; i--){
-			var n = parseFloat(this.values[i].value);
-			if(!isNaN(n)){ t += n; c++; }
+	}
+	t /= Math.max(c, 1);
+	return t;
+}, getMovingAverage:function (len) {
+	var range = this.createRange(len);
+	if (range.index < 0) {
+		return 0;
+	}
+	var t = 0;
+	var c = 0;
+	for (var i = range.index; i >= range.start; i--) {
+		var n = parseFloat(this.values[i].value);
+		if (!isNaN(n)) {
+			t += n;
+			c++;
 		}
-		t /= Math.max(c,1);
-		return t;
-	},
-
-	getMovingAverage: function(len){
-		var range = this.createRange(len);
-		if(range.index<0){ return 0; }
-		var t = 0;
-		var c = 0;
-		for(var i=range.index; i>=range.start; i--){
-			var n = parseFloat(this.values[i].value);
-			if(!isNaN(n)){ t += n; c++; }
+	}
+	t /= Math.max(c, 1);
+	return t;
+}, getVariance:function (len) {
+	var range = this.createRange(len);
+	if (range.index < 0) {
+		return 0;
+	}
+	var t = 0;
+	var s = 0;
+	var c = 0;
+	for (var i = range.index; i >= range.start; i--) {
+		var n = parseFloat(this.values[i].value);
+		if (!isNaN(n)) {
+			t += n;
+			s += Math.pow(n, 2);
+			c++;
 		}
-		t /= Math.max(c,1);
-		return t;
-	},
-
-	getVariance: function(len){
-		var range = this.createRange(len);
-		if(range.index < 0){ return 0; }
-		var t = 0; // FIXME: for tom: wtf are t, c, and s?
-		var s = 0;
-		var c = 0;
-		for(var i=range.index; i>=range.start; i--){
-			var n = parseFloat(this.values[i].value);
-			if(!isNaN(n)){
-				t += n;
-				s += Math.pow(n,2);
-				c++;
-			}
+	}
+	return (s / c) - Math.pow(t / c, 2);
+}, getStandardDeviation:function (len) {
+	return Math.sqrt(this.getVariance(len));
+}, getMax:function (len) {
+	var range = this.createRange(len);
+	if (range.index < 0) {
+		return 0;
+	}
+	var t = 0;
+	for (var i = range.index; i >= range.start; i--) {
+		var n = parseFloat(this.values[i].value);
+		if (!isNaN(n)) {
+			t = Math.max(n, t);
 		}
-		return (s/c)-Math.pow(t/c,2);
-	},
-
-	getStandardDeviation: function(len){
-		return Math.sqrt(this.getVariance(len));
-	},
-
-	getMax: function(len){
-		var range = this.createRange(len);
-		if(range.index < 0){ return 0; }
-		var t = 0;
-		for (var i=range.index; i>=range.start; i--){
-			var n=parseFloat(this.values[i].value);
-			if (!isNaN(n)){
-				t=Math.max(n,t);
-			}
+	}
+	return t;
+}, getMin:function (len) {
+	var range = this.createRange(len);
+	if (range.index < 0) {
+		return 0;
+	}
+	var t = 0;
+	for (var i = range.index; i >= range.start; i--) {
+		var n = parseFloat(this.values[i].value);
+		if (!isNaN(n)) {
+			t = Math.min(n, t);
 		}
-		return t;
-	},
-
-	getMin: function(len){
-		var range=this.createRange(len);
-		if(range.index < 0){ return 0; }
-		var t = 0;
-		for(var i=range.index; i>=range.start; i--){
-			var n = parseFloat(this.values[i].value);
-			if(!isNaN(n)){
-				t=Math.min(n,t);
-			}
-		}
-		return t;
-	},
-
-	getMedian: function(len){
-		var range = this.createRange(len);
-
-		if(range.index<0){ return 0; }
-
-		var a = [];
-		for (var i=range.index; i>=range.start; i--){
-			var n=parseFloat(this.values[i].value);
-			if (!isNaN(n)){
-				var b=false;
-				for(var j=0; j<a.length&&!b; j++){
-					if (n==a[j]) b=true; 
+	}
+	return t;
+}, getMedian:function (len) {
+	var range = this.createRange(len);
+	if (range.index < 0) {
+		return 0;
+	}
+	var a = [];
+	for (var i = range.index; i >= range.start; i--) {
+		var n = parseFloat(this.values[i].value);
+		if (!isNaN(n)) {
+			var b = false;
+			for (var j = 0; j < a.length && !b; j++) {
+				if (n == a[j]) {
+					b = true;
 				}
-				if(!b){ a.push(n); }
 			}
+			if (!b) {
+				a.push(n);
+			}
 		}
-		a.sort();
-		if(a.length>0){ return a[Math.ceil(a.length/2)]; }
+	}
+	a.sort();
+	if (a.length > 0) {
+		return a[Math.ceil(a.length / 2)];
+	}
+	return 0;
+}, getMode:function (len) {
+	var range = this.createRange(len);
+	if (range.index < 0) {
 		return 0;
-	},
-
-	getMode: function(len){
-		var range=this.createRange(len);
-		if(range.index<0){ return 0; }
-		var o = {};
-		var ret = 0
-		var m = 0;
-		for(var i=range.index; i>=range.start; i--){
-			var n=parseFloat(this.values[i].value);
-			if(!isNaN(n)){
-				if (!o[this.values[i].value]) o[this.values[i].value] = 1;
-				else o[this.values[i].value]++;
+	}
+	var o = {};
+	var ret = 0;
+	var m = 0;
+	for (var i = range.index; i >= range.start; i--) {
+		var n = parseFloat(this.values[i].value);
+		if (!isNaN(n)) {
+			if (!o[this.values[i].value]) {
+				o[this.values[i].value] = 1;
+			} else {
+				o[this.values[i].value]++;
 			}
 		}
-		for(var p in o){
-			if(m<o[p]){ m=o[p]; ret=p; }
+	}
+	for (var p in o) {
+		if (m < o[p]) {
+			m = o[p];
+			ret = p;
 		}
-		return parseFloat(ret);
 	}
-});
+	return parseFloat(ret);
+}});
+dojo.requireIf(dojo.render.svg.capable, "dojo.widget.svg.Chart");
+dojo.requireIf(!dojo.render.svg.capable && dojo.render.vml.capable, "dojo.widget.vml.Chart");
 
-dojo["requireIf"](dojo.render.svg.capable, "dojo.widget.svg.Chart");
-dojo["requireIf"](!dojo.render.svg.capable && dojo.render.vml.capable, "dojo.widget.vml.Chart");
 
 __CPAN_FILE__ src/widget/Textbox.js
 /*
@@ -30037,7 +19293,6 @@
 */
 
 dojo.provide("dojo.widget.Textbox");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.widget.Manager");
@@ -30045,103 +19300,39 @@
 dojo.require("dojo.xml.Parse");
 dojo.require("dojo.lang.array");
 dojo.require("dojo.lang.common");
-
 dojo.require("dojo.i18n.common");
 dojo.requireLocalization("dojo.widget", "validate", null, "fr,ja,zh-cn,ROOT");
-
-dojo.widget.defineWidget(
-	"dojo.widget.Textbox",
-	dojo.widget.HtmlWidget,
-	{
-		// summary:
-		//		A generic textbox field.
-		//		Serves as a base class to derive more specialized functionality in subclasses.
-
-		// className: String
-		//		The textbox class attribute.
-		className: "",
-
-		//	name: String
-		//		The textbox name attribute.
-		name: "",
-
-		// value: String
-		//		The textbox value attribute.
-		value: "",
-
-		// type: String
-		//		Basic input tag type declaration.
-		type: "",
-
-		//	trim: Boolean
-		//		Removes leading and trailing whitespace if true.  Default is false.
-		trim: false,
-
-		//	uppercase: Boolean
-		//		Converts all characters to uppercase if true.  Default is false.
-		uppercase: false,
-
-		//	lowercase: Boolean
-		//		Converts all characters to lowercase if true.  Default is false.
-		lowercase: false,
-
-		//	ucFirst: Boolean
-		//		Converts the first character of each word to uppercase if true.
-		ucFirst: false,
-
-		//	digit: Boolean
-		//		Removes all characters that are not digits if true.  Default is false.
-		digit: false,
-		
-		// htmlfloat: String
-		//		"none", "left", or "right".  CSS float attribute applied to generated dom node.
-		htmlfloat: "none",
-
-		templatePath: dojo.uri.dojoUri("src/widget/templates/Textbox.html"),
-	
-		// textbox DomNode:
-		//		our DOM node
-		textbox: null,
-
-		fillInTemplate: function() {
-			// assign value programatically in case it has a quote in it
-			this.textbox.value = this.value;
-		},
-
-		filter: function() {
-			// summary: Apply various filters to textbox value
-			if (this.trim) {
-				this.textbox.value = this.textbox.value.replace(/(^\s*|\s*$)/g, "");
-			} 
-			if (this.uppercase) {
-				this.textbox.value = this.textbox.value.toUpperCase();
-			} 
-			if (this.lowercase) {
-				this.textbox.value = this.textbox.value.toLowerCase();
-			} 
-			if (this.ucFirst) {
-				this.textbox.value = this.textbox.value.replace(/\b\w+\b/g, 
-					function(word) { return word.substring(0,1).toUpperCase() + word.substring(1).toLowerCase(); });
-			} 
-			if (this.digit) {
-				this.textbox.value = this.textbox.value.replace(/\D/g, "");
-			} 
-		},
-	
-		// event handlers, you can over-ride these in your own subclasses
-		onfocus: function() {},
-		onblur: function() { this.filter(); },
-	
-		// All functions below are called by create from dojo.widget.Widget
-		mixInProperties: function(localProperties, frag) {
-			dojo.widget.Textbox.superclass.mixInProperties.apply(this, arguments);
-			if ( localProperties["class"] ) { 
-				this.className = localProperties["class"];
-			}
-		}
+dojo.widget.defineWidget("dojo.widget.Textbox", dojo.widget.HtmlWidget, {className:"", name:"", value:"", type:"", trim:false, uppercase:false, lowercase:false, ucFirst:false, digit:false, htmlfloat:"none", templateString:"<span style='float:${this.htmlfloat};'>\n\t<input dojoAttachPoint='textbox' dojoAttachEvent='onblur;onfocus'\n\t\tid='${this.widgetId}' name='${this.name}'\n\t\tclass='${this.className}' type='${this.type}' >\n</span>\n", textbox:null, fillInTemplate:function () {
+	this.textbox.value = this.value;
+}, filter:function () {
+	if (this.trim) {
+		this.textbox.value = this.textbox.value.replace(/(^\s*|\s*$)/g, "");
 	}
-);
+	if (this.uppercase) {
+		this.textbox.value = this.textbox.value.toUpperCase();
+	}
+	if (this.lowercase) {
+		this.textbox.value = this.textbox.value.toLowerCase();
+	}
+	if (this.ucFirst) {
+		this.textbox.value = this.textbox.value.replace(/\b\w+\b/g, function (word) {
+			return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();
+		});
+	}
+	if (this.digit) {
+		this.textbox.value = this.textbox.value.replace(/\D/g, "");
+	}
+}, onfocus:function () {
+}, onblur:function () {
+	this.filter();
+}, mixInProperties:function (localProperties, frag) {
+	dojo.widget.Textbox.superclass.mixInProperties.apply(this, arguments);
+	if (localProperties["class"]) {
+		this.className = localProperties["class"];
+	}
+}});
 
+
 __CPAN_FILE__ src/widget/TreeExtension.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -30153,20 +19344,13 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeExtension");
-
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.widget.TreeCommon");
+dojo.widget.defineWidget("dojo.widget.TreeExtension", [dojo.widget.HtmlWidget, dojo.widget.TreeCommon], function () {
+	this.listenedTrees = {};
+}, {});
 
-dojo.widget.defineWidget(
-	"dojo.widget.TreeExtension",
-	[dojo.widget.HtmlWidget, dojo.widget.TreeCommon],
-	function() {
-		this.listenedTrees = {};
-	},
-	{}
-);
 
 __CPAN_FILE__ src/widget/GoogleMap.js
 /*
@@ -30185,234 +19369,158 @@
 dojo.require("dojo.widget.*");
 dojo.require("dojo.uri.Uri");
 dojo.require("dojo.widget.HtmlWidget");
-
-(function(){
-	var gkey = djConfig["gMapKey"]||djConfig["googleMapKey"];
-
-	//	the Google API key mechanism sucks.  We're hardcoding here for love and affection but I don't like it.
-	var uri=new dojo.uri.Uri(window.location.href);
-	if(uri.host=="www.dojotoolkit.org"){
-		gkey="ABQIAAAACUNdgv_7FGOmUslbm9l6_hRqjp7ri2mNiOEYqetD3xnFHpt5rBSjszDd1sdufPyQKUTyCf_YxoIxvw";
+(function () {
+	var gkey = djConfig["gMapKey"] || djConfig["googleMapKey"];
+	var uri = new dojo.uri.Uri(window.location.href);
+	if (uri.host == "www.dojotoolkit.org") {
+		gkey = "ABQIAAAACUNdgv_7FGOmUslbm9l6_hRqjp7ri2mNiOEYqetD3xnFHpt5rBSjszDd1sdufPyQKUTyCf_YxoIxvw";
+	} else {
+		if (uri.host == "blog.dojotoolkit.org") {
+			gkey = "ABQIAAAACUNdgv_7FGOmUslbm9l6_hSkep6Av1xaMhVn3yCLkorJeXeLARQ6fammI_P3qSGleTJhoI5_1JmP_Q";
+		} else {
+			if (uri.host == "archive.dojotoolkit.org") {
+				gkey = "ABQIAAAACUNdgv_7FGOmUslbm9l6_hTaQpDt0dyGLIHbXMPTzg1kWeAfwRTwZNyrUfbfxYE9yIvRivEjcXoDTg";
+			} else {
+				if (uri.host == "dojotoolkit.org") {
+					gkey = "ABQIAAAACUNdgv_7FGOmUslbm9l6_hSaOaO_TgJ5c3mtQFnk5JO2zD5dZBRZk-ieqVs7BORREYNzAERmcJoEjQ";
+				}
+			}
+		}
 	}
-	else if(uri.host=="blog.dojotoolkit.org"){
-		gkey="ABQIAAAACUNdgv_7FGOmUslbm9l6_hSkep6Av1xaMhVn3yCLkorJeXeLARQ6fammI_P3qSGleTJhoI5_1JmP_Q";
-	}
-	else if(uri.host=="archive.dojotoolkit.org"){
-		gkey="ABQIAAAACUNdgv_7FGOmUslbm9l6_hTaQpDt0dyGLIHbXMPTzg1kWeAfwRTwZNyrUfbfxYE9yIvRivEjcXoDTg";
-	}
-	else if(uri.host=="dojotoolkit.org"){
-		gkey="ABQIAAAACUNdgv_7FGOmUslbm9l6_hSaOaO_TgJ5c3mtQFnk5JO2zD5dZBRZk-ieqVs7BORREYNzAERmcJoEjQ";
-	}
-
-	if(!dojo.hostenv.post_load_){
-		if(!gkey || gkey==""){
+	if (!dojo.hostenv.post_load_) {
+		if (!gkey || gkey == "") {
 			dojo.raise("dojo.widget.GoogleMap: The Google Map widget requires a proper API key in order to be used.");
 		}
-		var tag = "<scr"+"ipt src='http://maps.google.com/maps?file=api&amp;v=2&amp;key="+gkey+"'></scri"+"pt>";
-		if(!dj_global["GMap2"]){
+		var tag = "<scr" + "ipt src='http://maps.google.com/maps?file=api&amp;v=2&amp;key=" + gkey + "'></scri" + "pt>";
+		if (!dj_global["GMap2"]) {
 			document.write(tag);
 		}
-	}else{
+	} else {
 		dojo.debug("Cannot initialize Google Map system after the page has been loaded! Please either manually include the script block provided by Google in your page or require() the GoogleMap widget before onload has fired.");
 	}
 })();
-
-dojo.widget.defineWidget(
-	"dojo.widget.GoogleMap",
-	dojo.widget.HtmlWidget,
-	function(){
-		// summary: A widget that wraps the Google Map API.
-		// description:
-		//		Implements and wraps the Google Map API so that you can easily create
-		//		and include Google Maps in your Dojo application.  Will parse an included
-		//		table for point information, but also exposes the underlying map via the
-		//		map property.
-		// map: GMap2
-		//		The actual Google Map object.
-		// geocoder: GClientGeocoder
-		//		A reference to the Google Geocoder object, for getting points for addresses.
-		// data: Object[]
-		//		Array of generated points plotted on the map
-		// datasrc: String
-		//		Reference to external (to the widget) source for points to plot on the map.
-		// controls: String[]
-		//		List of controls to plot on the map; shortened names correspond to Google Controls.
-		this.map=null;
-		this.geocoder=null;
-		this.data=[];
-		this.datasrc="";
-		this.controls=["largemap","scale","maptype"];
-	},
-{
-	templatePath:null,
-	templateCssPath:null,
-	isContainer: false,
-
-	_defaultPoint:{lat:39.10662, lng: -94.578209},
-
-	setControls:function(){
-		//	summary
-		//	Set any controls on the map in question.
-		var methodmap={
-			largemap:GLargeMapControl,
-			smallmap:GSmallMapControl,
-			smallzoom:GSmallZoomControl,
-			scale:GScaleControl,
-			maptype:GMapTypeControl,
-			overview:GOverviewMapControl
-		};
-		for(var i=0; i<this.controls.length; i++){
-			this.map.addControl(new (methodmap[this.controls[i].toLowerCase()])());
-		}
-	},
-	
-	findCenter:function(/* GLatLngBounds */bounds){
-		//	summary
-		//	Returns the center point given the Bounds object.
-		if(this.data.length==1){
-			return (new GLatLng(this.data[0].lat, this.data[0].lng));	//	GLatLng
-		}
-		var clat=(bounds.getNorthEast().lat()+bounds.getSouthWest().lat())/2;
-		var clng=(bounds.getNorthEast().lng()+bounds.getSouthWest().lng())/2;
-		return (new GLatLng(clat,clng));	//	GLatLng
-	},
-
-	createPinpoint:function(/* GLatLng */pt, /* string? */overlay){
-		//	summary
-		//	Creates a marker at the given point, with an optional overlay HTML string.
-		var m=new GMarker(pt);
-		if(overlay){
-			GEvent.addListener(m,"click",function(){
-				m.openInfoWindowHtml("<div>"+overlay+"</div>");
-			});
-		}
-		return m;	//	GMarker
-	},
-	plot:function(/* object */obj){
-		//	summary
-		//	Plots a point at given lat/lng coordinate
-		var p=new GLatLng(obj.lat,obj.lng);
-		var d=obj.description||null;
-		var m=this.createPinpoint(p,d);
-		this.map.addOverlay(m);
-	},
-	plotAddress:function(/* string */address){
-		//	summary
-		//	Calls the Google Geocoder to get a lat/lng coordinate at string address
-		var self=this;
-		this.geocoder.getLocations(address, function(response){
-			if(!response || response.Status.code != 200){
-				alert("The address \"" + address + "\" was not found.");
-				return;
-			}
-			var obj={
-				lat:response.Placemark[0].Point.coordinates[1],
-				lng:response.Placemark[0].Point.coordinates[0],
-				description:response.Placemark[0].address
-			};
-			self.data.push(obj);
-			self.render();
+dojo.widget.defineWidget("dojo.widget.GoogleMap", dojo.widget.HtmlWidget, function () {
+	this.map = null;
+	this.geocoder = null;
+	this.data = [];
+	this.datasrc = "";
+	this.controls = ["largemap", "scale", "maptype"];
+}, {templatePath:null, templateCssPath:null, isContainer:false, _defaultPoint:{lat:39.10662, lng:-94.578209}, setControls:function () {
+	var methodmap = {largemap:GLargeMapControl, smallmap:GSmallMapControl, smallzoom:GSmallZoomControl, scale:GScaleControl, maptype:GMapTypeControl, overview:GOverviewMapControl};
+	for (var i = 0; i < this.controls.length; i++) {
+		this.map.addControl(new (methodmap[this.controls[i].toLowerCase()])());
+	}
+}, findCenter:function (bounds) {
+	if (this.data.length == 1) {
+		return (new GLatLng(this.data[0].lat, this.data[0].lng));
+	}
+	var clat = (bounds.getNorthEast().lat() + bounds.getSouthWest().lat()) / 2;
+	var clng = (bounds.getNorthEast().lng() + bounds.getSouthWest().lng()) / 2;
+	return (new GLatLng(clat, clng));
+}, createPinpoint:function (pt, overlay) {
+	var m = new GMarker(pt);
+	if (overlay) {
+		GEvent.addListener(m, "click", function () {
+			m.openInfoWindowHtml("<div>" + overlay + "</div>");
 		});
-	},
-
-	parse:function(/* HTMLTable */table){
-		//	summary
-		//	Parses the passed table for data to plot on this map.
-		this.data=[];
-
-		//	get the column indices
-		var h=table.getElementsByTagName("thead")[0];
-		if(!h){
+	}
+	return m;
+}, plot:function (obj) {
+	var p = new GLatLng(obj.lat, obj.lng);
+	var d = obj.description || null;
+	var m = this.createPinpoint(p, d);
+	this.map.addOverlay(m);
+}, plotAddress:function (address) {
+	var self = this;
+	this.geocoder.getLocations(address, function (response) {
+		if (!response || response.Status.code != 200) {
+			alert("The address \"" + address + "\" was not found.");
 			return;
 		}
-
-		var a=[];
-		var cols=h.getElementsByTagName("td");
-		if(cols.length==0){
-			cols=h.getElementsByTagName("th");
+		var obj = {lat:response.Placemark[0].Point.coordinates[1], lng:response.Placemark[0].Point.coordinates[0], description:response.Placemark[0].address};
+		self.data.push(obj);
+		self.render();
+	});
+}, parse:function (table) {
+	this.data = [];
+	var h = table.getElementsByTagName("thead")[0];
+	if (!h) {
+		return;
+	}
+	var a = [];
+	var cols = h.getElementsByTagName("td");
+	if (cols.length == 0) {
+		cols = h.getElementsByTagName("th");
+	}
+	for (var i = 0; i < cols.length; i++) {
+		var c = cols[i].innerHTML.toLowerCase();
+		if (c == "long") {
+			c = "lng";
 		}
-		for(var i=0; i<cols.length; i++){
-			var c=cols[i].innerHTML.toLowerCase();
-			if(c=="long") c="lng";
-			a.push(c);
+		a.push(c);
+	}
+	var b = table.getElementsByTagName("tbody")[0];
+	if (!b) {
+		return;
+	}
+	for (var i = 0; i < b.childNodes.length; i++) {
+		if (!(b.childNodes[i].nodeName && b.childNodes[i].nodeName.toLowerCase() == "tr")) {
+			continue;
 		}
-		
-		//	parse the data
-		var b=table.getElementsByTagName("tbody")[0];
-		if(!b){
-			return;
-		}
-		for(var i=0; i<b.childNodes.length; i++){
-			if(!(b.childNodes[i].nodeName&&b.childNodes[i].nodeName.toLowerCase()=="tr")){
-				continue;
+		var cells = b.childNodes[i].getElementsByTagName("td");
+		var o = {};
+		for (var j = 0; j < a.length; j++) {
+			var col = a[j];
+			if (col == "lat" || col == "lng") {
+				o[col] = parseFloat(cells[j].innerHTML);
+			} else {
+				o[col] = cells[j].innerHTML;
 			}
-			var cells=b.childNodes[i].getElementsByTagName("td");
-			var o={};
-			for(var j=0; j<a.length; j++){
-				var col=a[j];
-				if(col=="lat"||col=="lng"){
-					o[col]=parseFloat(cells[j].innerHTML);					
-				}else{
-					o[col]=cells[j].innerHTML;
-				}
-			}
-			this.data.push(o);
 		}
-	},
-	render:function(){
-		//	summary
-		//	Plots all acutal points in the current data array.
-		if(this.data.length==0){
-			this.map.setCenter(new GLatLng(this._defaultPoint.lat, this._defaultPoint.lng), 4);
-			return;
-		}
-
-		//	remove all overlays
-		this.map.clearOverlays();
-
-		var bounds=new GLatLngBounds();
-		var d=this.data;
-		for(var i=0; i<d.length; i++){
-			bounds.extend(new GLatLng(d[i].lat,d[i].lng));
-		}
-		var zoom=Math.min((this.map.getBoundsZoomLevel(bounds)-1),14);
-		this.map.setCenter(this.findCenter(bounds), zoom);
-
-		for(var i=0; i<this.data.length; i++){
-			this.plot(this.data[i]);
-		}
-	},
-
-	initialize:function(/* object */args, /* object */frag){
-		//	summary
-		//	initializes the widget
-		if(this.datasrc){
-			this.parse(dojo.byId(this.datasrc));
-		}
-		else if(this.domNode.getElementsByTagName("table")[0]){
+		this.data.push(o);
+	}
+}, render:function () {
+	if (this.data.length == 0) {
+		this.map.setCenter(new GLatLng(this._defaultPoint.lat, this._defaultPoint.lng), 4);
+		return;
+	}
+	this.map.clearOverlays();
+	var bounds = new GLatLngBounds();
+	var d = this.data;
+	for (var i = 0; i < d.length; i++) {
+		bounds.extend(new GLatLng(d[i].lat, d[i].lng));
+	}
+	var zoom = Math.min((this.map.getBoundsZoomLevel(bounds) - 1), 14);
+	this.map.setCenter(this.findCenter(bounds), zoom);
+	for (var i = 0; i < this.data.length; i++) {
+		this.plot(this.data[i]);
+	}
+}, initialize:function (args, frag) {
+	if (this.datasrc) {
+		this.parse(dojo.byId(this.datasrc));
+	} else {
+		if (this.domNode.getElementsByTagName("table")[0]) {
 			this.parse(this.domNode.getElementsByTagName("table")[0]);
 		}
-	},
-	postCreate:function(){
-		//	summary
-		//	Sets up and renders the widget.
-
-		//	clean the domNode before creating the map.
-		while(this.domNode.childNodes.length>0){
-			this.domNode.removeChild(this.domNode.childNodes[0]);
-		}
-		if(this.domNode.style.position!="absolute"){
-			this.domNode.style.position="relative";
-		}
-		this.map=new GMap2(this.domNode);
-		try{
-			this.geocoder=new GClientGeocoder();
-		}catch(ex){}
-		this.render();
-		this.setControls();
 	}
-});
+}, postCreate:function () {
+	while (this.domNode.childNodes.length > 0) {
+		this.domNode.removeChild(this.domNode.childNodes[0]);
+	}
+	if (this.domNode.style.position != "absolute") {
+		this.domNode.style.position = "relative";
+	}
+	this.map = new GMap2(this.domNode);
+	try {
+		this.geocoder = new GClientGeocoder();
+	}
+	catch (ex) {
+	}
+	this.render();
+	this.setControls();
+}});
 
+
 __CPAN_FILE__ src/widget/MonthlyCalendar.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -30432,139 +19540,103 @@
 dojo.require("dojo.event.*");
 dojo.require("dojo.html.*");
 dojo.require("dojo.experimental");
-
 dojo.experimental("dojo.widget.MonthlyCalendar");
-
-dojo.widget.defineWidget(
-	"dojo.widget.MonthlyCalendar",
-	dojo.widget.DatePicker,
-	{
-		dayWidth: 'wide',
-
-		templatePath: dojo.uri.dojoUri("src/widget/templates/MonthlyCalendar.html"),
-		templateCssPath: dojo.uri.dojoUri("src/widget/templates/MonthlyCalendar.css"),
-
-		initializer: function(){
-			this.iCalendars = [];
-		},
-
-		/*
-		cache: function(){
-		},
-		*/
-
-		addCalendar: function(/* dojo.iCalendar */ cal) {
-			dojo.debug("Adding Calendar");
-			this.iCalendars.push(cal);
-			dojo.debug("Starting init");
-			this.initUI();
-			dojo.debug("done init");
-		},
-
-		createDayContents: function(node,mydate) {
-			dojo.html.removeChildren(node);
-			node.appendChild(document.createTextNode(mydate.getDate()));	
-				for(var x=0; x<this.iCalendars.length; x++) {
-					var evts = this.iCalendars[x].getEvents(mydate);
-					if ((dojo.lang.isArray(evts)) && (evts.length>0)) {
-					for(var y=0;y<evts.length;y++) {
-						var el = document.createElement("div");
-						dojo.html.addClass(el, "dojoMonthlyCalendarEvent");          
-						el.appendChild(document.createTextNode(evts[y].summary.value));
-						el.width = dojo.html.getContentBox(node).width;
-						node.appendChild(el);
-					}
-				}
+dojo.widget.defineWidget("dojo.widget.MonthlyCalendar", dojo.widget.DatePicker, {dayWidth:"wide", templateString:"<div class=\"datePickerContainer\" dojoAttachPoint=\"datePickerContainerNode\">\n\t<h3 class=\"monthLabel\">\n\t<!--\n\t<span \n\t\tdojoAttachPoint=\"decreaseWeekNode\" \n\t\tdojoAttachEvent=\"onClick: onIncrementWeek;\" \n\t\tclass=\"incrementControl\">\n\t\t<img src=\"${dojoWidgetModuleUri}templates/decrementWeek.gif\" alt=\"&uarr;\" />\n\t</span>\n\t-->\n\t<span \n\t\tdojoAttachPoint=\"decreaseMonthNode\" \n\t\tdojoAttachEvent=\"onClick: onIncrementMonth;\" class=\"incrementControl\">\n\t\t<img src=\"${dojoWidgetModuleUri}templates/decrementMonth.gif\" \n\t\t\talt=\"&uarr;\" dojoAttachPoint=\"decrementMonthImageNode\">\n\t</span>\n\t<span dojoAttachPoint=\"monthLabelNode\" class=\"month\">July</span>\n\t<span \n\t\tdojoAttachPoint=\"increaseMonthNode\" \n\t\tdojoAttachEvent=\"onClick: onIncrementMonth;\" class=\"incrementControl\">\n\t\t<img src=\"${dojoWidgetModuleUri}templates/incrementMonth.gif\" \n\t\t\talt=\"&darr;\"  dojoAttachPoint=\"incrementMonthImageNode\">\n\t</span>\n\t<!--\n\t\t<span dojoAttachPoint=\"increaseWeekNode\" \n\t\t\tdojoAttachEvent=\"onClick: onIncrementWeek;\" \n\t\t\tclass=\"incrementControl\">\n\t\t\t<img src=\"${dojoWidgetModuleUri}templates/incrementWeek.gif\" \n\t\t\talt=\"&darr;\" />\n\t\t</span>\n\t-->\n\t</h3>\n\t<table class=\"calendarContainer\">\n\t\t<thead>\n\t\t\t<tr dojoAttachPoint=\"dayLabelsRow\">\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody dojoAttachPoint=\"calendarDatesContainerNode\" \n\t\t\tdojoAttachEvent=\"onClick: onSetDate;\">\n\t\t\t<tr dojoAttachPoint=\"calendarRow0\">\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t</tr>\n\t\t\t<tr dojoAttachPoint=\"calendarRow1\">\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t</tr>\n\t\t\t<tr dojoAttachPoint=\"calendarRow2\">\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t</tr>\n\t\t\t<tr dojoAttachPoint=\"calendarRow3\">\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t</tr>\n\t\t\t<tr dojoAttachPoint=\"calendarRow4\">\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t</tr>\n\t\t\t<tr dojoAttachPoint=\"calendarRow5\">\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n\t<h3 class=\"yearLabel\">\n\t\t<span dojoAttachPoint=\"previousYearLabelNode\"\n\t\t\tdojoAttachEvent=\"onClick: onIncrementYear;\" class=\"previousYear\"></span>\n\t\t<span class=\"selectedYear\" dojoAttachPoint=\"currentYearLabelNode\"></span>\n\t\t<span dojoAttachPoint=\"nextYearLabelNode\" \n\t\t\tdojoAttachEvent=\"onClick: onIncrementYear;\" class=\"nextYear\"></span>\n\t</h3>\n</div>\n", templateCssString:".datePickerContainer {\n\tmargin:0.5em 2em 0.5em 0;\n\t/*width:10em;*/\n\tfloat:left;\n}\n\n.previousMonth {\n\tbackground-color:#bbbbbb;\n}\n\n.currentMonth {\n\tbackground-color:#8f8f8f;\n}\n\n.nextMonth {\n\tbackground-color:#eeeeee;\n}\n\n.currentDate {\n\ttext-decoration:underline;\n\tfont-style:italic;\n}\n\n.selectedItem {\n\tbackground-color:#3a3a3a;\n\tcolor:#ffffff;\n}\n\n.calendarContainer {\n\tborder-collapse:collapse;\n\tborder-spacing:0;\n\tborder-bottom:1px solid #e6e6e6;\n\toverflow: hidden;\n\ttext-align: right;\n}\n\n.calendarContainer thead{\n\tborder-bottom:1px solid #e6e6e6;\n}\n\n.calendarContainer tbody * td {\n		height: 100px;\n		border: 1px solid gray;\n}\n\n.calendarContainer td {\n		width: 100px;\n		padding: 2px;\n\tvertical-align: top;\n}\n\n.monthLabel {\n\tfont-size:0.9em;\n\tfont-weight:400;\n\tmargin:0;\n\ttext-align:center;\n}\n\n.monthLabel .month {\n\tpadding:0 0.4em 0 0.4em;\n}\n\n.yearLabel {\n\tfont-size:0.9em;\n\tfont-weight:400;\n\tmargin:0.25em 0 0 0;\n\ttext-align:right;\n\tcolor:#a3a3a3;\n}\n\n.yearLabel .selectedYear {\n\tcolor:#000;\n\tpadding:0 0.2em;\n}\n\n.nextYear, .previousYear {\n\tcursor:pointer;cursor:hand;\n}\n\n.incrementControl {\n\tcursor:pointer;cursor:hand;\n\twidth:1em;\n}\n\n.dojoMonthlyCalendarEvent {\n\tfont-size:0.7em;\n\toverflow: hidden;\n\tfont-color: grey;\n\twhite-space: nowrap;\n\ttext-align: left;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/MonthlyCalendar.css"), initializer:function () {
+	this.iCalendars = [];
+}, addCalendar:function (cal) {
+	dojo.debug("Adding Calendar");
+	this.iCalendars.push(cal);
+	dojo.debug("Starting init");
+	this.initUI();
+	dojo.debug("done init");
+}, createDayContents:function (node, mydate) {
+	dojo.html.removeChildren(node);
+	node.appendChild(document.createTextNode(mydate.getDate()));
+	for (var x = 0; x < this.iCalendars.length; x++) {
+		var evts = this.iCalendars[x].getEvents(mydate);
+		if ((dojo.lang.isArray(evts)) && (evts.length > 0)) {
+			for (var y = 0; y < evts.length; y++) {
+				var el = document.createElement("div");
+				dojo.html.addClass(el, "dojoMonthlyCalendarEvent");
+				el.appendChild(document.createTextNode(evts[y].summary.value));
+				el.width = dojo.html.getContentBox(node).width;
+				node.appendChild(el);
 			}
-		},
-
-		initUI: function() {
-			var dayLabels = dojo.date.getNames('days', this.dayWidth, 'standAlone', this.lang);
-			var dayLabelNodes = this.dayLabelsRow.getElementsByTagName("td");
-			for(var i=0; i<7; i++) {
-				dayLabelNodes.item(i).innerHTML = dayLabels[i];
-			}
-
-			this.selectedIsUsed = false;
-			this.currentIsUsed = false;
-			var currentClassName = "";
-			var previousDate = new Date();
-			var calendarNodes = this.calendarDatesContainerNode.getElementsByTagName("td");
-			var currentCalendarNode;
-			// set hours of date such that there is no chance of rounding error due to 
-			// time change in local time zones
-			previousDate.setHours(8);
-			var nextDate = new Date(this.firstSaturday.year, this.firstSaturday.month, this.firstSaturday.date, 8);
-			var lastDay = new Date(this.firstSaturday.year, this.firstSaturday.month, this.firstSaturday.date + 42, 8);
-			
-			if (this.iCalendars.length > 0) {
-				for (var x=0; x<this.iCalendars.length;x++) {
-					this.iCalendars[x].preComputeRecurringEvents(lastDay);
-				}
-			}
-
-			if(this.firstSaturday.date < 7) {
-				// this means there are days to show from the previous month
-				var dayInWeek = 6;
-				for (var i=this.firstSaturday.date; i>0; i--) {
-					currentCalendarNode = calendarNodes.item(dayInWeek);
-					this.createDayContents(currentCalendarNode, nextDate);
-					
-					dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "current"));
-					dayInWeek--;
-					previousDate = nextDate;
-					nextDate = this.incrementDate(nextDate, false);
-				}
-				for(var i=dayInWeek; i>-1; i--) {
-					currentCalendarNode = calendarNodes.item(i);
-
-					this.createDayContents(currentCalendarNode, nextDate);
-
-					dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "previous"));
-					previousDate = nextDate;
-					nextDate = this.incrementDate(nextDate, false);				
-				}
-			} else {
-				nextDate.setDate(1);
-				for(var i=0; i<7; i++) {
-					currentCalendarNode = calendarNodes.item(i);
-					this.createDayContents(currentCalendarNode, nextDate);
-					dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "current"));
-					previousDate = nextDate;
-					nextDate = this.incrementDate(nextDate, true);				
-				}
-			}
-			previousDate.setDate(this.firstSaturday.date);
-			previousDate.setMonth(this.firstSaturday.month);
-			previousDate.setFullYear(this.firstSaturday.year);
-			nextDate = this.incrementDate(previousDate, true);
-			var count = 7;
-			currentCalendarNode = calendarNodes.item(count);
-			while((nextDate.getMonth() == previousDate.getMonth()) && (count<42)) {
-				this.createDayContents(currentCalendarNode, nextDate);
-				dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "current"));
-				currentCalendarNode = calendarNodes.item(++count);
-				previousDate = nextDate;
-				nextDate = this.incrementDate(nextDate, true);
-			}
-			
-			while(count < 42) {
-				this.createDayContents(currentCalendarNode, nextDate);
-				dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "next"));
-				currentCalendarNode = calendarNodes.item(++count);
-				previousDate = nextDate;
-				nextDate = this.incrementDate(nextDate, true);
-			}
-			this.setMonthLabel(this.firstSaturday.month);
-			this.setYearLabels(this.firstSaturday.year);
-		}	
+		}
 	}
-);
-
-dojo.widget.MonthlyCalendar.util= new function() {
-
-	this.toRfcDate = function(jsDate) {
-		if(!jsDate) {
+}, initUI:function () {
+	var dayLabels = dojo.date.getNames("days", this.dayWidth, "standAlone", this.lang);
+	var dayLabelNodes = this.dayLabelsRow.getElementsByTagName("td");
+	for (var i = 0; i < 7; i++) {
+		dayLabelNodes.item(i).innerHTML = dayLabels[i];
+	}
+	this.selectedIsUsed = false;
+	this.currentIsUsed = false;
+	var currentClassName = "";
+	var previousDate = new Date();
+	var calendarNodes = this.calendarDatesContainerNode.getElementsByTagName("td");
+	var currentCalendarNode;
+	previousDate.setHours(8);
+	var nextDate = new Date(this.firstSaturday.year, this.firstSaturday.month, this.firstSaturday.date, 8);
+	var lastDay = new Date(this.firstSaturday.year, this.firstSaturday.month, this.firstSaturday.date + 42, 8);
+	if (this.iCalendars.length > 0) {
+		for (var x = 0; x < this.iCalendars.length; x++) {
+			this.iCalendars[x].preComputeRecurringEvents(lastDay);
+		}
+	}
+	if (this.firstSaturday.date < 7) {
+		var dayInWeek = 6;
+		for (var i = this.firstSaturday.date; i > 0; i--) {
+			currentCalendarNode = calendarNodes.item(dayInWeek);
+			this.createDayContents(currentCalendarNode, nextDate);
+			dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "current"));
+			dayInWeek--;
+			previousDate = nextDate;
+			nextDate = this.incrementDate(nextDate, false);
+		}
+		for (var i = dayInWeek; i > -1; i--) {
+			currentCalendarNode = calendarNodes.item(i);
+			this.createDayContents(currentCalendarNode, nextDate);
+			dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "previous"));
+			previousDate = nextDate;
+			nextDate = this.incrementDate(nextDate, false);
+		}
+	} else {
+		nextDate.setDate(1);
+		for (var i = 0; i < 7; i++) {
+			currentCalendarNode = calendarNodes.item(i);
+			this.createDayContents(currentCalendarNode, nextDate);
+			dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "current"));
+			previousDate = nextDate;
+			nextDate = this.incrementDate(nextDate, true);
+		}
+	}
+	previousDate.setDate(this.firstSaturday.date);
+	previousDate.setMonth(this.firstSaturday.month);
+	previousDate.setFullYear(this.firstSaturday.year);
+	nextDate = this.incrementDate(previousDate, true);
+	var count = 7;
+	currentCalendarNode = calendarNodes.item(count);
+	while ((nextDate.getMonth() == previousDate.getMonth()) && (count < 42)) {
+		this.createDayContents(currentCalendarNode, nextDate);
+		dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "current"));
+		currentCalendarNode = calendarNodes.item(++count);
+		previousDate = nextDate;
+		nextDate = this.incrementDate(nextDate, true);
+	}
+	while (count < 42) {
+		this.createDayContents(currentCalendarNode, nextDate);
+		dojo.html.setClass(currentCalendarNode, this.getDateClassName(nextDate, "next"));
+		currentCalendarNode = calendarNodes.item(++count);
+		previousDate = nextDate;
+		nextDate = this.incrementDate(nextDate, true);
+	}
+	this.setMonthLabel(this.firstSaturday.month);
+	this.setYearLabels(this.firstSaturday.year);
+}});
+dojo.widget.MonthlyCalendar.util = new function () {
+	this.toRfcDate = function (jsDate) {
+		if (!jsDate) {
 			jsDate = this.today;
 		}
 		var year = jsDate.getFullYear();
@@ -30576,33 +19648,28 @@
 		if (date < 10) {
 			date = "0" + date.toString();
 		}
-		// because this is a date picker and not a time picker, we treat time 
-		// as zero
 		return year + "-" + month + "-" + date + "T00:00:00+00:00";
-	}
-	
-	this.fromRfcDate = function(rfcDate) {
+	};
+	this.fromRfcDate = function (rfcDate) {
 		var tempDate = rfcDate.split("-");
-		if(tempDate.length < 3) {
+		if (tempDate.length < 3) {
 			return new Date();
 		}
-		// fullYear, month, date
-		return new Date(parseInt(tempDate[0]), (parseInt(tempDate[1], 10) - 1), parseInt(tempDate[2].substr(0,2), 10));
-	}
-
-//Note: redundant with dojo.widget.DatePicker.util	
-	this.initFirstSaturday = function(month, year) {
-		if(!month) {
+		return new Date(parseInt(tempDate[0]), (parseInt(tempDate[1], 10) - 1), parseInt(tempDate[2].substr(0, 2), 10));
+	};
+	this.initFirstSaturday = function (month, year) {
+		if (!month) {
 			month = this.date.getMonth();
 		}
-		if(!year) {
+		if (!year) {
 			year = this.date.getFullYear();
 		}
 		var firstOfMonth = new Date(year, month, 1);
-		return {year: year, month: month, date: 7 - firstOfMonth.getDay()};
-	}
-}
+		return {year:year, month:month, date:7 - firstOfMonth.getDay()};
+	};
+};
 
+
 __CPAN_FILE__ src/widget/TreeWithNode.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -30614,274 +19681,110 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.require("dojo.lang.declare");
 dojo.provide("dojo.widget.TreeWithNode");
-
-dojo.declare(
-	"dojo.widget.TreeWithNode",
-	null,
-	function(){ },
-{
-	/*
-	 * dynamic loading-related stuff. 
-	 * When an empty folder node appears, it is "UNCHECKED" first,
-	 * then after Rpc call it becomes LOADING and, finally LOADED
-	 *
-	 * tree may be dynamically loaded also
-	 */
-	loadStates: {
-		UNCHECKED: "UNCHECKED",
-    	LOADING: "LOADING",
-    	LOADED: "LOADED"
-	},
-	
-	state: "UNCHECKED",  // after creation will change to loadStates: "loaded/loading/unchecked"
-
-    //RpcUrl: "", // user can override rpc url for specific nodes
-
-	objectId: "", // the widget represents an object
-
-
-	// I need this to parse children
-	isContainer: true,
-	
-	lockLevel: 0, // lock ++ unlock --, so nested locking works fine
-	
-	lock: function() {
-		this.lockLevel++;
-	},
-	unlock: function() {
-		if (!this.lockLevel) {
-			//dojo.debug((new Error()).stack);
-			dojo.raise(this.widgetType+" unlock: not locked");
+dojo.declare("dojo.widget.TreeWithNode", null, function () {
+}, {loadStates:{UNCHECKED:"UNCHECKED", LOADING:"LOADING", LOADED:"LOADED"}, state:"UNCHECKED", objectId:"", isContainer:true, lockLevel:0, lock:function () {
+	this.lockLevel++;
+}, unlock:function () {
+	if (!this.lockLevel) {
+		dojo.raise(this.widgetType + " unlock: not locked");
+	}
+	this.lockLevel--;
+}, expandLevel:0, loadLevel:0, hasLock:function () {
+	return this.lockLevel > 0;
+}, isLocked:function () {
+	var node = this;
+	while (true) {
+		if (node.lockLevel) {
+			return true;
 		}
-		this.lockLevel--;
-	},
-	
-	
-	expandLevel: 0, // expand to level automatically
-	loadLevel: 0, // load to level automatically
-		
-	hasLock: function() {
-		return this.lockLevel>0;
-	},
-
-	isLocked: function() {
-		var node = this;
-		while (true) {
-			if (node.lockLevel) {
-				return true;
-			}
-			if (!node.parent || node.isTree) {
-				break;
-			}
-			
-			node = node.parent;
-			
+		if (!node.parent || node.isTree) {
+			break;
 		}
-
-		return false;
-	},
-
-	
-	flushLock: function() {
-		this.lockLevel = 0;
-		//this.unMarkLoading();
-	},
-	
-	
-	actionIsDisabled: function(action) {
-		var disabled = false;
-
-		if (dojo.lang.inArray(this.actionsDisabled, action)) {
+		node = node.parent;
+	}
+	return false;
+}, flushLock:function () {
+	this.lockLevel = 0;
+}, actionIsDisabled:function (action) {
+	var disabled = false;
+	if (dojo.lang.inArray(this.actionsDisabled, action)) {
+		disabled = true;
+	}
+	if (this.isTreeNode) {
+		if (!this.tree.allowAddChildToLeaf && action == this.actions.ADDCHILD && !this.isFolder) {
 			disabled = true;
 		}
-
-
-		//dojo.debug("Check "+this+" "+disabled)
-		
-		
+	}
+	return disabled;
+}, actionIsDisabledNow:function (action) {
+	return this.actionIsDisabled(action) || this.isLocked();
+}, setChildren:function (childrenArray) {
+	if (this.isTreeNode && !this.isFolder) {
+		this.setFolder();
+	} else {
 		if (this.isTreeNode) {
-			if (!this.tree.allowAddChildToLeaf && action == this.actions.ADDCHILD && !this.isFolder) {
-				disabled = true;
-			}
-		}
-		return disabled;
-	},
-		
-	actionIsDisabledNow: function(action) {
-		return this.actionIsDisabled(action) || this.isLocked();
-	},
-	
-	
-	/**
-	 * childrenArray is array of Widgets or array of Objects
-	 * widgets may be both attached and detached
-	 *
-	 * Use Cases
-	 * 1) lots of widgets are packed and passed in.
-	 *  - widgets are created
-	 *  - widgets have no parent (detached or not attached yet)
-	 *
-	 * 2) array of widgets and data objects passed in with flag makeWidgetsFromChildren
-	 *  - some widgets are not created
-	 *  - all objects have no parent
-	 *
-	 * 3) expand is called with makeWidgetsFromChildren=true
-	 *  - some objects need to be turned into widgets
-	 *  - some widgets have parent (e.g markup), some widgets and objects do not
-	 *
-	 *  Will folderize a node as side-effect.
-	 */
-	setChildren: function(childrenArray) {
-		//dojo.profile.start("setChildren "+this);
-		//dojo.debug("setChildren in "+this);
-		
-		
-		if (this.isTreeNode && !this.isFolder) {
-			//dojo.debug("folder parent "+parent+ " isfolder "+parent.isFolder);
-			this.setFolder();
-		} else if (this.isTreeNode) {
 			this.state = this.loadStates.LOADED;
 		}
-		
-		var hadChildren = this.children.length > 0;
-		
-        if (hadChildren && childrenArray){
-            // perf: most of time setChildren used for empty nodes, so save function call
-            this.destroyChildren()
-        }
-        
-		if (childrenArray) {
-			this.children = childrenArray;
+	}
+	var hadChildren = this.children.length > 0;
+	if (hadChildren && childrenArray) {
+		this.destroyChildren();
+	}
+	if (childrenArray) {
+		this.children = childrenArray;
+	}
+	var hasChildren = this.children.length > 0;
+	if (this.isTreeNode && hasChildren != hadChildren) {
+		this.viewSetHasChildren();
+	}
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (!(child instanceof dojo.widget.Widget)) {
+			child = this.children[i] = this.tree.createNode(child);
+			var childWidgetCreated = true;
+		} else {
+			var childWidgetCreated = false;
 		}
-		
-
-
-		var hasChildren = this.children.length > 0;
-		if (this.isTreeNode && hasChildren != hadChildren) {
-			// call only when hasChildren state changes
-			this.viewSetHasChildren();
-		}
-		
-
-
-		for(var i=0; i<this.children.length; i++) {
-			var child = this.children[i];
-			
-			//dojo.profile.start("setChildren - create "+this);
-			
-			if (!(child instanceof dojo.widget.Widget)) {
-				
-				child = this.children[i] = this.tree.createNode(child);
-				var childWidgetCreated = true;	
-				//dojo.debugShallow(child)
-				
-				//dojo.debug("setChildren creates node "+child);
-			} else {
-				var childWidgetCreated = false;
+		if (!child.parent) {
+			child.parent = this;
+			if (this.tree !== child.tree) {
+				child.updateTree(this.tree);
 			}
-			
-			//dojo.profile.end("setChildren - create "+this);
-
-			//dojo.profile.start("setChildren - attach "+this);
-
-			if (!child.parent) { // detached child
-				
-				//dojo.debug("detached child "+child);
-				
-				child.parent = this;
-
-				//dojo.profile.start("setChildren - updateTree "+this);
-				
-				if (this.tree !== child.tree) {				
-					child.updateTree(this.tree);
-				}
-				//dojo.profile.end("setChildren - updateTree "+this);
-
-			
-				//dojo.debug("Add layout for "+child);
-				child.viewAddLayout();
-				this.containerNode.appendChild(child.domNode);
-					
-				var message = {
-					child: child,
-					index: i,
-					parent: this,
-					childWidgetCreated: childWidgetCreated
-				}
-			
-				delete dojo.widget.manager.topWidgets[child.widgetId];
-		
-
-				//dojo.profile.start("setChildren - event "+this);
-				//dojo.debug("publish "+this.tree.eventNames.afterAddChild)
-				dojo.event.topic.publish(this.tree.eventNames.afterAddChild, message);
-
-				//dojo.profile.end("setChildren - event "+this);
-
-			}
-			
-			if (this.tree.eagerWidgetInstantiation) {
-				dojo.lang.forEach(this.children, function(child) {
-					child.setChildren();
-				});
-			}
-
-			//dojo.profile.end("setChildren - attach "+this);
-
-		
+			child.viewAddLayout();
+			this.containerNode.appendChild(child.domNode);
+			var message = {child:child, index:i, parent:this, childWidgetCreated:childWidgetCreated};
+			delete dojo.widget.manager.topWidgets[child.widgetId];
+			dojo.event.topic.publish(this.tree.eventNames.afterAddChild, message);
 		}
-		
-
-
-		//dojo.profile.end("setChildren "+this);
-		
-	},	
-	
-	
-	doAddChild: function(child, index) {
-		return this.addChild(child, index, true);
-	},
-		
-	addChild: function(child, index, dontPublishEvent) {
-		if (dojo.lang.isUndefined(index)) {
-			index = this.children.length;
+		if (this.tree.eagerWidgetInstantiation) {
+			dojo.lang.forEach(this.children, function (child) {
+				child.setChildren();
+			});
 		}
-		
-		//dojo.debug("doAddChild "+index+" called for "+this+" child "+child+" existing children "+(this.children.length ? this.children : "<no children>"));
-				
-		if (!child.isTreeNode){
-			dojo.raise("You can only add TreeNode widgets to a "+this.widgetType+" widget!");
-			return;
-		}
-			
-		this.children.splice(index, 0, child);
-		child.parent = this;
-				
-		child.addedTo(this, index, dontPublishEvent);
-		
-		// taken from DomWidget.registerChild
-		// delete from widget list that are notified on resize etc (no parent)
-		delete dojo.widget.manager.topWidgets[child.widgetId];
-				
-	},
-	
-	 /**
-     * does not inform children about resize (skips onShow),
-     * because on large trees that's slow
-     */
-    onShow: function() {        
-        this.animationInProgress=false;
-    },
-    
-    onHide: function() {        
-        this.animationInProgress=false;
-    }
-	
-});
+	}
+}, doAddChild:function (child, index) {
+	return this.addChild(child, index, true);
+}, addChild:function (child, index, dontPublishEvent) {
+	if (dojo.lang.isUndefined(index)) {
+		index = this.children.length;
+	}
+	if (!child.isTreeNode) {
+		dojo.raise("You can only add TreeNode widgets to a " + this.widgetType + " widget!");
+		return;
+	}
+	this.children.splice(index, 0, child);
+	child.parent = this;
+	child.addedTo(this, index, dontPublishEvent);
+	delete dojo.widget.manager.topWidgets[child.widgetId];
+}, onShow:function () {
+	this.animationInProgress = false;
+}, onHide:function () {
+	this.animationInProgress = false;
+}});
 
+
 __CPAN_FILE__ src/widget/RadioGroup.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -30894,202 +19797,116 @@
 */
 
 dojo.provide("dojo.widget.RadioGroup");
-
 dojo.require("dojo.lang.common");
 dojo.require("dojo.event.browser");
 dojo.require("dojo.html.selection");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.HtmlWidget");
-
-dojo.widget.defineWidget(
-	"dojo.widget.RadioGroup", 
-	dojo.widget.HtmlWidget,
-	function(){
-		// summary:
-		// 	Widget that provides useful/common functionality that may be desirable
-		// 	when interacting with ul/ol html lists.
-		//	
-		// The core behaviour of the lists this widget manages is expected to be determined
-		// by the css class names defined: 
-		// 	
-		// 	 "radioGroup" - Applied to main ol or ul 
-		//	 "selected"	- Applied to the currently selected li, if any.
-		//   "itemContent" - Applied to the content contained in a li, this widget embeds a span 
-		//					within each <li></li> to contain the contents of the li.
-		// This widget was mostly developed under supervision/guidance from Tom Trenka.
-		
-		// selectedItem: DomNode: Currently selected li, if any
-		this.selectedItem=null;
-
-		// items: DomNode[]: Array of li nodes being managed by widget
-		this.items=[];
-
-		// selected: String[]: List of optional ids specifying which li's should be selected by default
-		this.selected=[];
-		
-		// groupCssClass: String: Css class applied to main ol or ul, value is "radioGroup"
-		this.groupCssClass="radioGroup";
-
-		// selectedCssClass: String: Css class applied to the currently selected li, if any. value of "selected"
-		this.selectedCssClass="selected";
-
-		// itemContentCssClass: String: Css class Applied to the content contained in a li, this widget embeds a span 
-		// within each <li></li> to contain the contents of the li. value is "itemContent"
-		this.itemContentCssClass="itemContent";
-	},
-	{
-		isContainer:false,
-		templatePath: null,
-		templateCssPath: null,
-		
-		postCreate:function(){
-			// summary: Parses content of widget and sets up the default state of any 
-			// default selections / etc. The onSelect function will also be fired for any
-			// default selections.
-			this._parseStructure();
-			dojo.html.addClass(this.domNode, this.groupCssClass);
-			this._setupChildren();
-			
-			dojo.event.browser.addListener(this.domNode, "onclick", dojo.lang.hitch(this, "onSelect"));
-			if (this.selectedItem){
-				this._selectItem(this.selectedItem);
-			}
-		},
-		
-		_parseStructure: function() {
-			// summary: Sets local radioGroup and items properties, also validates
-		    // that domNode contains an expected list.
-		    // 
-		    // Exception raised if a ul or ol node can't be found in this widgets domNode.
-			if(this.domNode.tagName.toLowerCase() != "ul" 
-				&& this.domNode.tagName.toLowerCase() != "ol") {
-				dojo.raise("RadioGroup: Expected ul or ol content.");
-				return;
-			}
-			
-			this.items=[];	//	reset the items.
-			var nl=this.domNode.getElementsByTagName("li");
-			for (var i=0; i<nl.length; i++){
-				if(nl[i].parentNode==this.domNode){
-					this.items.push(nl[i]);
-				}
-			}
-		},
-		
-		add:function(/*DomNode*/ node){
-			// summary: Allows the app to add a node on the fly, finishing up
-		    // the setup so that we don't need to deal with it on a
-		    // widget-wide basis.
-			if(node.parentNode!=this.domNode){
-				this.domNode.appendChild(node);
-			}
-			this.items.push(node);
-			this._setup(node);
-		},
-		
-		remove:function(/*DomNode*/ node){
-			// summary: Removes the specified node from this group, if it exists.
-			var idx=-1;
-			for(var i=0; i<this.items.length; i++){
-				if(this.items[i]==node){
-					idx=i;
-					break;
-				}
-			}
-			if(idx<0) {return;}
-			this.items.splice(idx,1);
-			node.parentNode.removeChild(node);
-		},
-		
-		clear:function(){
-			// summary: Removes all items in this list
-			for(var i=0; i<this.items.length; i++){
-				this.domNode.removeChild(this.items[i]);
-			}
-			this.items=[];
-		},
-		
-		clearSelections:function(){
-			// summary: Clears any selected items from being selected
-			for(var i=0; i<this.items.length; i++){
-				dojo.html.removeClass(this.items[i], this.selectedCssClass);
-			}
-			this.selectedItem=null;
-		},
-		
-		_setup:function(node){
-			var span = document.createElement("span");
-			dojo.html.disableSelection(span);
-			dojo.html.addClass(span, this.itemContentCssClass);
-			dojo.dom.moveChildren(node, span);
-			node.appendChild(span);
-			
-			if (this.selected.length > 0) {
-				var uid = dojo.html.getAttribute(node, "id");
-				if (uid && uid == this.selected){
-					this.selectedItem = node;
-				}
-			}
-			dojo.event.browser.addListener(node, "onclick", dojo.lang.hitch(this, "onItemSelect"));
-			if (dojo.html.hasAttribute(node, "onitemselect")) {
-				var tn = dojo.lang.nameAnonFunc(new Function(dojo.html.getAttribute(node, "onitemselect")), 
-												this);
-				dojo.event.browser.addListener(node, "onclick", dojo.lang.hitch(this, tn));
-			}
-		},
-
-		_setupChildren:function(){
-			for (var i=0; i<this.items.length; i++){
-				this._setup(this.items[i]);
-			}
-		},
-
-		_selectItem:function(node, event, nofire){
-			// summary: Sets the selectedItem to passed in node, applies
-			// css selection class on new item
-			if(this.selectedItem){
-				dojo.html.removeClass(this.selectedItem, this.selectedCssClass);
-			}
-			
+dojo.widget.defineWidget("dojo.widget.RadioGroup", dojo.widget.HtmlWidget, function () {
+	this.selectedItem = null;
+	this.items = [];
+	this.selected = [];
+	this.groupCssClass = "radioGroup";
+	this.selectedCssClass = "selected";
+	this.itemContentCssClass = "itemContent";
+}, {isContainer:false, templatePath:null, templateCssPath:null, postCreate:function () {
+	this._parseStructure();
+	dojo.html.addClass(this.domNode, this.groupCssClass);
+	this._setupChildren();
+	dojo.event.browser.addListener(this.domNode, "onclick", dojo.lang.hitch(this, "onSelect"));
+	if (this.selectedItem) {
+		this._selectItem(this.selectedItem);
+	}
+}, _parseStructure:function () {
+	if (this.domNode.tagName.toLowerCase() != "ul" && this.domNode.tagName.toLowerCase() != "ol") {
+		dojo.raise("RadioGroup: Expected ul or ol content.");
+		return;
+	}
+	this.items = [];
+	var nl = this.domNode.getElementsByTagName("li");
+	for (var i = 0; i < nl.length; i++) {
+		if (nl[i].parentNode == this.domNode) {
+			this.items.push(nl[i]);
+		}
+	}
+}, add:function (node) {
+	if (node.parentNode != this.domNode) {
+		this.domNode.appendChild(node);
+	}
+	this.items.push(node);
+	this._setup(node);
+}, remove:function (node) {
+	var idx = -1;
+	for (var i = 0; i < this.items.length; i++) {
+		if (this.items[i] == node) {
+			idx = i;
+			break;
+		}
+	}
+	if (idx < 0) {
+		return;
+	}
+	this.items.splice(idx, 1);
+	node.parentNode.removeChild(node);
+}, clear:function () {
+	for (var i = 0; i < this.items.length; i++) {
+		this.domNode.removeChild(this.items[i]);
+	}
+	this.items = [];
+}, clearSelections:function () {
+	for (var i = 0; i < this.items.length; i++) {
+		dojo.html.removeClass(this.items[i], this.selectedCssClass);
+	}
+	this.selectedItem = null;
+}, _setup:function (node) {
+	var span = document.createElement("span");
+	dojo.html.disableSelection(span);
+	dojo.html.addClass(span, this.itemContentCssClass);
+	dojo.dom.moveChildren(node, span);
+	node.appendChild(span);
+	if (this.selected.length > 0) {
+		var uid = dojo.html.getAttribute(node, "id");
+		if (uid && uid == this.selected) {
 			this.selectedItem = node;
-			dojo.html.addClass(this.selectedItem, this.selectedCssClass);
-			
-			// if this is the result of an event, stop here.
-			if (!dj_undef("currentTarget", event)){
-				return;
-			}
-			
-			//	if there's no nofire flag, passed when this is nailed internally.
-			if(!nofire){
-				if(dojo.render.html.ie){
-					this.selectedItem.fireEvent("onclick");
-				}else{
-					var e = document.createEvent("MouseEvents");
-					e.initEvent("click", true, false);
-					this.selectedItem.dispatchEvent(e);
-				}
-			}
-		},
-		
-		getValue:function() {
-			// summary: Gets the currently selected item, if any.
-			return this.selectedItem; /*DomNode*/
-		},
-		
-		onSelect:function(e) { 
-			// summary: When the ul or ol contained by this widget is selected this function
-			// is fired. A good function to listen to via dojo.event.connect. 
-		},
-		
-		onItemSelect:function(e) {
-			// summary: when an individual li is selected
-			if (!dj_undef("currentTarget", e)){
-				this._selectItem(e.currentTarget, e);
-			}
 		}
 	}
-);
+	dojo.event.browser.addListener(node, "onclick", dojo.lang.hitch(this, "onItemSelect"));
+	if (dojo.html.hasAttribute(node, "onitemselect")) {
+		var tn = dojo.lang.nameAnonFunc(new Function(dojo.html.getAttribute(node, "onitemselect")), this);
+		dojo.event.browser.addListener(node, "onclick", dojo.lang.hitch(this, tn));
+	}
+}, _setupChildren:function () {
+	for (var i = 0; i < this.items.length; i++) {
+		this._setup(this.items[i]);
+	}
+}, _selectItem:function (node, event, nofire) {
+	if (this.selectedItem) {
+		dojo.html.removeClass(this.selectedItem, this.selectedCssClass);
+	}
+	this.selectedItem = node;
+	dojo.html.addClass(this.selectedItem, this.selectedCssClass);
+	if (!dj_undef("currentTarget", event)) {
+		return;
+	}
+	if (!nofire) {
+		if (dojo.render.html.ie) {
+			this.selectedItem.fireEvent("onclick");
+		} else {
+			var e = document.createEvent("MouseEvents");
+			e.initEvent("click", true, false);
+			this.selectedItem.dispatchEvent(e);
+		}
+	}
+}, getValue:function () {
+	return this.selectedItem;
+}, onSelect:function (e) {
+}, onItemSelect:function (e) {
+	if (!dj_undef("currentTarget", e)) {
+		this._selectItem(e.currentTarget, e);
+	}
+}});
 
+
 __CPAN_FILE__ src/widget/Repeater.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -31107,168 +19924,117 @@
 dojo.require("dojo.event.*");
 dojo.require("dojo.experimental");
 dojo.experimental("dojo.widget.Repeater");
-
-dojo.widget.defineWidget("dojo.widget.Repeater", dojo.widget.HtmlWidget,
-	{
-		/*
-		summary: 
-			Makes it easy to add dynamicly new segments to form, ie. add new rows.
-		
-			description: 
-					
-			usage: 
-				<div dojoType="Repeater" pattern="row.%{index}" useDnd="false">
-					<p>Name: <input typ="text" name="row.%{index}.name" value="" /><input type="button" rowAction="delete" value="remove this" </p>
-				</div>
-
-				or:
-				var myRepeater=dojo.widget.createWidget("Repeater",{pattern: "row.%{index}", useDnd: false});
-				myRepeater.setRow("<p>Name: <input typ="text" name="row.%{index}.name" value="" rowFunction="doThis" /><input type="button" rowAction="delete" value="remove this" /></p>", {doThis: function(node) { dojo.event.connect(node,"onClick", function() { alert("HERE"); }); } );
-
-		*/
-
-
-		name: "",
-		rowTemplate: "",
-		// myObject:
-		// 	Used to bind functionality to rowFunctions
-		myObject: null,
-		// myObject:
-		// 	defines pattern of the names
-		pattern: "",
-		// useDnd:
-		// 	if true, you can change position of rows by DnD
-		//	you can also remove rows by dragging row away
-		useDnd: false,
-		isContainer: true,
-
-		initialize: function(args,frag) {
-			var node = this.getFragNodeRef(frag);
-			node.removeAttribute("dojotype");
-			this.setRow(dojo.string.trim(node.innerHTML), {});
-			node.innerHTML="";
-			frag=null;
-		},
-
-		postCreate: function(args,frag){
-			if (this.useDnd) {
-				dojo.require("dojo.dnd.*");
-				var dnd = new dojo.dnd.HtmlDropTarget(this.domNode, [this.widgetId]);
+dojo.widget.defineWidget("dojo.widget.Repeater", dojo.widget.HtmlWidget, {name:"", rowTemplate:"", myObject:null, pattern:"", useDnd:false, isContainer:true, initialize:function (args, frag) {
+	var node = this.getFragNodeRef(frag);
+	node.removeAttribute("dojotype");
+	this.setRow(dojo.string.trim(node.innerHTML), {});
+	node.innerHTML = "";
+	frag = null;
+}, postCreate:function (args, frag) {
+	if (this.useDnd) {
+		dojo.require("dojo.dnd.*");
+		var dnd = new dojo.dnd.HtmlDropTarget(this.domNode, [this.widgetId]);
+	}
+}, _reIndexRows:function () {
+	for (var i = 0, len = this.domNode.childNodes.length; i < len; i++) {
+		var elems = ["INPUT", "SELECT", "TEXTAREA"];
+		for (var k = 0; k < elems.length; k++) {
+			var list = this.domNode.childNodes[i].getElementsByTagName(elems[k]);
+			for (var j = 0, len2 = list.length; j < len2; j++) {
+				var name = list[j].name;
+				var index = dojo.string.escape("regexp", this.pattern);
+				index = index.replace(/(%\\\{index\\\})/g, "%{index}");
+				var nameRegexp = dojo.string.substituteParams(index, {"index":"[0-9]*"});
+				var newName = dojo.string.substituteParams(this.pattern, {"index":"" + i});
+				var re = new RegExp(nameRegexp, "g");
+				list[j].name = name.replace(re, newName);
 			}
-		},
-
-		_reIndexRows: function() {
-			for(var i=0,len=this.domNode.childNodes.length; i<len;i++) {
-				var elems = ["INPUT", "SELECT", "TEXTAREA"];
-				for (var k=0; k < elems.length; k++) {
-					var list = this.domNode.childNodes[i].getElementsByTagName(elems[k]);
-					for (var j=0,len2=list.length; j<len2; j++) {
-						var name = list[j].name;
-						var index=dojo.string.escape("regexp", this.pattern);
-						index = index.replace(/(%\\\{index\\\})/g,"%{index}");
-						var nameRegexp = dojo.string.substituteParams(index, {"index": "[0-9]*"});
-						var newName= dojo.string.substituteParams(this.pattern, {"index": "" + i});
-						var re=new RegExp(nameRegexp,"g");
-						list[j].name = name.replace(re,newName);
+		}
+	}
+}, onDeleteRow:function (e) {
+	var index = dojo.string.escape("regexp", this.pattern);
+	index = index.replace(/%\\\{index\\\}/g, "%{index}");
+	var nameRegexp = dojo.string.substituteParams(index, {"index":"([0-9]*)"});
+	var re = new RegExp(nameRegexp, "g");
+	this.deleteRow(re.exec(e.target.name)[1]);
+}, hasRows:function () {
+	if (this.domNode.childNodes.length > 0) {
+		return true;
+	}
+	return false;
+}, getRowCount:function () {
+	return this.domNode.childNodes.length;
+}, deleteRow:function (idx) {
+	this.domNode.removeChild(this.domNode.childNodes[idx]);
+	this._reIndexRows();
+}, _changeRowPosition:function (e) {
+	if (e.dragStatus == "dropFailure") {
+		this.domNode.removeChild(e["dragSource"].domNode);
+	} else {
+		if (e.dragStatus == "dropSuccess") {
+		}
+	}
+	this._reIndexRows();
+}, setRow:function (template, myObject) {
+	template = template.replace(/\%\{(index)\}/g, "0");
+	this.rowTemplate = template;
+	this.myObject = myObject;
+}, getRow:function () {
+	return this.rowTemplate;
+}, _initRow:function (node) {
+	if (typeof (node) == "number") {
+		node = this.domNode.childNodes[node];
+	}
+	var elems = ["INPUT", "SELECT", "IMG"];
+	for (var k = 0; k < elems.length; k++) {
+		var list = node.getElementsByTagName(elems[k]);
+		for (var i = 0, len = list.length; i < len; i++) {
+			var child = list[i];
+			if (child.nodeType != 1) {
+				continue;
+			}
+			if (child.getAttribute("rowFunction") != null) {
+				if (typeof (this.myObject[child.getAttribute("rowFunction")]) == "undefined") {
+					dojo.debug("Function " + child.getAttribute("rowFunction") + " not found");
+				} else {
+					this.myObject[child.getAttribute("rowFunction")](child);
+				}
+			} else {
+				if (child.getAttribute("rowAction") != null) {
+					if (child.getAttribute("rowAction") == "delete") {
+						child.name = dojo.string.substituteParams(this.pattern, {"index":"" + (this.getRowCount() - 1)});
+						dojo.event.connect(child, "onclick", this, "onDeleteRow");
 					}
 				}
 			}
-		},
-
-		onDeleteRow: function(e) {
-			var index=dojo.string.escape("regexp", this.pattern);
-			index = index.replace(/%\\\{index\\\}/g,"\%{index}");
-			var nameRegexp = dojo.string.substituteParams(index, {"index": "([0-9]*)"});
-			var re=new RegExp(nameRegexp,"g");
-			this.deleteRow(re.exec(e.target.name)[1]);
-		},
-		hasRows: function() {
-			if (this.domNode.childNodes.length > 0) {
-				return true;
-			}
-			return false;
-		},
-
-		getRowCount: function() {
-			return this.domNode.childNodes.length;
-		},
-
-		deleteRow: function(/*integer*/idx) {
-			this.domNode.removeChild(this.domNode.childNodes[idx]);
-			this._reIndexRows();
-		},
-
-		_changeRowPosition: function(e) {
-			if (e.dragStatus == "dropFailure") {
-				this.domNode.removeChild(e["dragSource"].domNode);
-			} else if (e.dragStatus == "dropSuccess") {
-				//  nothing to do
-			} // else-if
-			this._reIndexRows();
-		},
-		setRow: function(/*string*/template, /*object*/myObject) {
-			//template = dojo.string.substituteParams(template, {"index": "0"});
-			template= template.replace(/\%\{(index)\}/g, "0");
-			this.rowTemplate=template;
-			this.myObject = myObject;
-		},
-		getRow: function() {
-			return this.rowTemplate;
-		},
-		_initRow: function(/*integer or dom node*/node) {
-			if (typeof(node) == "number") {
-                           node=this.domNode.childNodes[node];
-			} // if
-			var elems = ["INPUT", "SELECT", "IMG"];
-			for (var k=0; k < elems.length; k++) {
-				var list = node.getElementsByTagName(elems[k]);
-				for(var i=0, len=list.length; i<len; i++) {
-					var child = list[i];
-					if(child.nodeType != 1) {continue};
-					if (child.getAttribute("rowFunction") != null) {
-						if(typeof(this.myObject[child.getAttribute("rowFunction")]) == "undefined") {
-							dojo.debug("Function " + child.getAttribute("rowFunction") + " not found");
-						} else { 
-							this.myObject[child.getAttribute("rowFunction")](child);
-						} // ifelse
-					} else if (child.getAttribute("rowAction") != null) {
-						if(child.getAttribute("rowAction") == "delete") {
-							child.name=dojo.string.substituteParams(this.pattern, {"index": "" + (this.getRowCount() - 1)});
-							dojo.event.connect(child, "onclick", this, "onDeleteRow");
-						} // if
-					} // else-if
-				} // for
-			} // for
-		},
-		onAddRow: function(e) {
-		},
-		addRow: function(/*boolean*/doInit) {
-                        if (typeof(doInit) == "undefined") {
-				doInit=true;
-                        }
-			var node = document.createElement('span');
-			node.innerHTML=this.getRow();
-			if (node.childNodes.length == 1) {
-				node=node.childNodes[0];
-			}
-			this.domNode.appendChild(node);
-			var parser = new dojo.xml.Parse();
-			var frag = parser.parseElement(node, null, true);
-			dojo.widget.getParser().createSubComponents(frag, this);
-			this._reIndexRows();
-			if (doInit) {
-				this._initRow(node);
-			}
-			if (this.useDnd) { // bind to DND
-				node=new dojo.dnd.HtmlDragSource(node, this.widgetId);
-				dojo.event.connect(node, "onDragEnd", this, "_changeRowPosition");
-			}
-			this.onAddRow(node);
 		}
-});
+	}
+}, onAddRow:function (e) {
+}, addRow:function (doInit) {
+	if (typeof (doInit) == "undefined") {
+		doInit = true;
+	}
+	var node = document.createElement("span");
+	node.innerHTML = this.getRow();
+	if (node.childNodes.length == 1) {
+		node = node.childNodes[0];
+	}
+	this.domNode.appendChild(node);
+	var parser = new dojo.xml.Parse();
+	var frag = parser.parseElement(node, null, true);
+	dojo.widget.getParser().createSubComponents(frag, this);
+	this._reIndexRows();
+	if (doInit) {
+		this._initRow(node);
+	}
+	if (this.useDnd) {
+		node = new dojo.dnd.HtmlDragSource(node, this.widgetId);
+		dojo.event.connect(node, "onDragEnd", this, "_changeRowPosition");
+	}
+	this.onAddRow(node);
+}});
 
 
-
 __CPAN_FILE__ src/widget/DropdownContainer.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -31289,106 +20055,51 @@
 dojo.require("dojo.html.display");
 dojo.require("dojo.html.iframe");
 dojo.require("dojo.html.util");
-
-dojo.widget.defineWidget(
-	"dojo.widget.DropdownContainer",
-	dojo.widget.HtmlWidget,
-	{
-		// summary:
-		//		provides an input box and a button for a dropdown.
-		//		In subclass, the dropdown can be specified.
-
-		// inputWidth: String: width of the input box
-		inputWidth: "7em",
-
-		// id: String: id of this widget
-		id: "",
-
-		// inputId: String: id of the input box
-		inputId: "",
-
-		// inputName: String: name of the input box
-		inputName: "",
-
-		// iconURL: dojo.uri.Uri: icon for the dropdown button
-		iconURL: dojo.uri.dojoUri("src/widget/templates/images/combo_box_arrow.png"),
-
-		// copyClass:
-		//		should we use the class properties on the source node instead
-		//		of our own styles?
-		copyClasses: false,
-
-		// iconAlt: dojo.uri.Uri: alt text for the dropdown button icon
-		iconAlt: "",
-
-		// containerToggle: String: toggle property of the dropdown
-		containerToggle: "plain",
-
-		// containerToggleDuration: Integer: toggle duration property of the dropdown
-		containerToggleDuration: 150,
-
-		templateString: '<span style="white-space:nowrap"><input type="hidden" name="" value="" dojoAttachPoint="valueNode" /><input name="" type="text" value="" style="vertical-align:middle;" dojoAttachPoint="inputNode" autocomplete="off" /> <img src="${this.iconURL}" alt="${this.iconAlt}" dojoAttachEvent="onclick:onIconClick" dojoAttachPoint="buttonNode" style="vertical-align:middle; cursor:pointer; cursor:hand" /></span>',
-		templateCssPath: "",
-		isContainer: true,
-
-		attachTemplateNodes: function(){
-			// summary: use attachTemplateNodes to specify containerNode, as fillInTemplate is too late for this
-			dojo.widget.DropdownContainer.superclass.attachTemplateNodes.apply(this, arguments);
-			this.popup = dojo.widget.createWidget("PopupContainer", {toggle: this.containerToggle, toggleDuration: this.containerToggleDuration});
-			this.containerNode = this.popup.domNode;
-		},
-
-		fillInTemplate: function(args, frag){
-			this.domNode.appendChild(this.popup.domNode);
-			if(this.id) { this.domNode.id = this.id; }
-			if(this.inputId){ this.inputNode.id = this.inputId; }
-			if(this.inputName){ this.inputNode.name = this.inputName; }
-			this.inputNode.style.width = this.inputWidth;
-			this.inputNode.disabled = this.disabled;
-
-			if(this.copyClasses){
-				this.inputNode.style = "";
-				this.inputNode.className = this.getFragNodeRef(frag).className;
-			}
-
-
-			dojo.event.connect(this.inputNode, "onchange", this, "onInputChange");
-		},
-
-		onIconClick: function(/*Event*/ evt){
-			if(this.disabled) return;
-			if(!this.popup.isShowingNow){
-				this.popup.open(this.inputNode, this, this.buttonNode);
-			}else{
-				this.popup.close();
-			}
-		},
-
-		hideContainer: function(){
-			// summary: hide the dropdown
-			if(this.popup.isShowingNow){
-				this.popup.close();
-			}
-		},
-
-		onInputChange: function(){
-			// summary: signal for changes in the input box
-		},
-		
-		enable: function() {
-			// summary: enable this widget to accept user input
-			this.inputNode.disabled = false;
-			dojo.widget.DropdownContainer.superclass.enable.apply(this, arguments);
-		},
-		
-		disable: function() {
-			// summary: lock this widget so that the user can't change the value
-			this.inputNode.disabled = true;
-			dojo.widget.DropdownContainer.superclass.disable.apply(this, arguments);
-		}
+dojo.widget.defineWidget("dojo.widget.DropdownContainer", dojo.widget.HtmlWidget, {inputWidth:"7em", id:"", inputId:"", inputName:"", iconURL:dojo.uri.moduleUri("dojo.widget", "templates/images/combo_box_arrow.png"), copyClasses:false, iconAlt:"", containerToggle:"plain", containerToggleDuration:150, templateString:"<span style=\"white-space:nowrap\"><input type=\"hidden\" name=\"\" value=\"\" dojoAttachPoint=\"valueNode\" /><input name=\"\" type=\"text\" value=\"\" style=\"vertical-align:middle;\" dojoAttachPoint=\"inputNode\" autocomplete=\"off\" /> <img src=\"${this.iconURL}\" alt=\"${this.iconAlt}\" dojoAttachEvent=\"onclick:onIconClick\" dojoAttachPoint=\"buttonNode\" style=\"vertical-align:middle; cursor:pointer; cursor:hand\" /></span>", templateCssPath:"", isContainer:true, attachTemplateNodes:function () {
+	dojo.widget.DropdownContainer.superclass.attachTemplateNodes.apply(this, arguments);
+	this.popup = dojo.widget.createWidget("PopupContainer", {toggle:this.containerToggle, toggleDuration:this.containerToggleDuration});
+	this.containerNode = this.popup.domNode;
+}, fillInTemplate:function (args, frag) {
+	this.domNode.appendChild(this.popup.domNode);
+	if (this.id) {
+		this.domNode.id = this.id;
 	}
-);
+	if (this.inputId) {
+		this.inputNode.id = this.inputId;
+	}
+	if (this.inputName) {
+		this.inputNode.name = this.inputName;
+	}
+	this.inputNode.style.width = this.inputWidth;
+	this.inputNode.disabled = this.disabled;
+	if (this.copyClasses) {
+		this.inputNode.style = "";
+		this.inputNode.className = this.getFragNodeRef(frag).className;
+	}
+	dojo.event.connect(this.inputNode, "onchange", this, "onInputChange");
+}, onIconClick:function (evt) {
+	if (this.disabled) {
+		return;
+	}
+	if (!this.popup.isShowingNow) {
+		this.popup.open(this.inputNode, this, this.buttonNode);
+	} else {
+		this.popup.close();
+	}
+}, hideContainer:function () {
+	if (this.popup.isShowingNow) {
+		this.popup.close();
+	}
+}, onInputChange:function () {
+}, enable:function () {
+	this.inputNode.disabled = false;
+	dojo.widget.DropdownContainer.superclass.enable.apply(this, arguments);
+}, disable:function () {
+	this.inputNode.disabled = true;
+	dojo.widget.DropdownContainer.superclass.disable.apply(this, arguments);
+}});
 
+
 __CPAN_FILE__ src/widget/validate.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -31401,9 +20112,8 @@
 */
 
 dojo.provide("dojo.widget.validate");
+dojo.deprecated("dojo.widget.validate", "use one of the specific widgets in dojo.widget.<name>Textbox instead", "0.5");
 
-dojo.deprecated("dojo.widget.validate", 
-	"use one of the specific widgets in dojo.widget.<name>Textbox instead", "0.5");
 
 __CPAN_FILE__ src/widget/LinkPane.js
 /*
@@ -31417,39 +20127,17 @@
 */
 
 dojo.provide("dojo.widget.LinkPane");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.ContentPane");
 dojo.require("dojo.html.style");
+dojo.widget.defineWidget("dojo.widget.LinkPane", dojo.widget.ContentPane, {templateString:"<div class=\"dojoLinkPane\"></div>", fillInTemplate:function (args, frag) {
+	var source = this.getFragNodeRef(frag);
+	this.label += source.innerHTML;
+	var source = this.getFragNodeRef(frag);
+	dojo.html.copyStyle(this.domNode, source);
+}});
 
-dojo.widget.defineWidget(
-	"dojo.widget.LinkPane",
-	dojo.widget.ContentPane,
-{
-	// summary
-	//	LinkPane is just a ContentPane that loads data remotely (via the href attribute),
-	//	and has markup similar to an anchor.  The anchor's body (the words between <a> and </a>)
-	//	become the label of the widget (used for TabContainer, AccordionContainer, etc.)
-	// usage
-	//	<a href="foo.html">my label</a>
 
-	// I'm using a template because the user may specify the input as
-	// <a href="foo.html">label</a>, in which case we need to get rid of the
-	// <a> because we don't want a link.
-	templateString: '<div class="dojoLinkPane"></div>',
-
-	fillInTemplate: function(args, frag){
-		var source = this.getFragNodeRef(frag);
-
-		// If user has specified node contents, they become the label
-		// (the link must be plain text)
-		this.label += source.innerHTML;
-
-		var source = this.getFragNodeRef(frag);
-		dojo.html.copyStyle(this.domNode, source);
-	}
-});
-
 __CPAN_FILE__ src/widget/TreeV3.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -31461,343 +20149,129 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-/**
- * Tree model does all the drawing, visual node management etc.
- * Throws events about clicks on it, so someone may catch them and process
- * Tree knows nothing about DnD stuff, covered in TreeDragAndDrop and (if enabled) attached by controller
-*/
-
-/**
- * TODO: use domNode.cloneNode instead of createElement for grid
- * Should be faster (lyxsus)
- */
 dojo.provide("dojo.widget.TreeV3");
-
 dojo.require("dojo.widget.TreeWithNode");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.event.*");
 dojo.require("dojo.io.*");
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.widget.TreeNodeV3");
-
-dojo.widget.defineWidget(
-	"dojo.widget.TreeV3",
-	[dojo.widget.HtmlWidget, dojo.widget.TreeWithNode],
-	function() {
-		this.eventNames = {};
-		
-		this.DndAcceptTypes = [];
-		this.actionsDisabled = [];
-		
-		this.listeners = [];
-		
-		this.tree = this;
-	},
-{
-	DndMode: "",
-
-	/**
-	 * factory to generate default widgets
-	 */
-	defaultChildWidget: null,
-	
-	defaultChildTitle: "New Node", // for editing
-	
-	
-	eagerWidgetInstantiation: false,
-	
-	eventNamesDefault: {
-
-		// tree created.. Perform tree-wide actions if needed
-		afterTreeCreate: "afterTreeCreate",
-		beforeTreeDestroy: "beforeTreeDestroy",
-		/* can't name it "beforeDestroy", because such name causes memleaks in IE */
-		beforeNodeDestroy: "beforeNodeDestroy",
-		afterChangeTree: "afterChangeTree",
-
-		afterSetFolder: "afterSetFolder",
-		afterUnsetFolder: "afterUnsetFolder",		
-		beforeMoveFrom: "beforeMoveFrom",
-		beforeMoveTo: "beforeMoveTo",
-		afterMoveFrom: "afterMoveFrom",
-		afterMoveTo: "afterMoveTo",
-		afterAddChild: "afterAddChild",
-		afterDetach: "afterDetach",
-		afterExpand: "afterExpand",
-		beforeExpand: "beforeExpand",
-		afterSetTitle: "afterSetTitle",		
-		afterCollapse: "afterCollapse",	
-		beforeCollapse: "beforeCollapse"
-	},
-
-	classPrefix: "Tree",
-	
-	style: "",
-	
-	/**
-	 * is it possible to add a new child to leaf ?
-	 */	
-	allowAddChildToLeaf: true,
-	
-	/**
-	 * when last children is removed from node should it stop being a "folder" ?
-	 */
-	unsetFolderOnEmpty: true,
-
-
-	DndModes: {
-		BETWEEN: 1,
-		ONTO: 2
-	},
-
-	DndAcceptTypes: "",
-
-    // will have cssRoot before it 
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/TreeV3.css"),
-
-	templateString: '<div style="${this.style}">\n</div>',
-
-	isExpanded: true, // consider this "root node" to be always expanded
-
-	isTree: true,
-	
-	
-
-	createNode: function(data) {
-			
-		data.tree = this.widgetId;		
-		
-		if (data.widgetName) {
-			// TODO: check if such widget has createSimple			
-			return dojo.widget.createWidget(data.widgetName, data);		
-		} else if (this.defaultChildWidget.prototype.createSimple) {			
-			return this.defaultChildWidget.prototype.createSimple(data);					
+dojo.widget.defineWidget("dojo.widget.TreeV3", [dojo.widget.HtmlWidget, dojo.widget.TreeWithNode], function () {
+	this.eventNames = {};
+	this.DndAcceptTypes = [];
+	this.actionsDisabled = [];
+	this.listeners = [];
+	this.tree = this;
+}, {DndMode:"", defaultChildWidget:null, defaultChildTitle:"New Node", eagerWidgetInstantiation:false, eventNamesDefault:{afterTreeCreate:"afterTreeCreate", beforeTreeDestroy:"beforeTreeDestroy", beforeNodeDestroy:"beforeNodeDestroy", afterChangeTree:"afterChangeTree", afterSetFolder:"afterSetFolder", afterUnsetFolder:"afterUnsetFolder", beforeMoveFrom:"beforeMoveFrom", beforeMoveTo:"beforeMoveTo", afterMoveFrom:"afterMoveFrom", afterMoveTo:"afterMoveTo", afterAddChild:"afterAddChild", afterDetach:"afterDetach", afterExpand:"afterExpand", beforeExpand:"beforeExpand", afterSetTitle:"afterSetTitle", afterCollapse:"afterCollapse", beforeCollapse:"beforeCollapse"}, classPrefix:"Tree", style:"", allowAddChildToLeaf:true, unsetFolderOnEmpty:true, DndModes:{BETWEEN:1, ONTO:2}, DndAcceptTypes:"", templateCssString:"/* indent for all tree children excepts root */\n.TreeNode {\n	background-image : url('../templates/images/TreeV3/i.gif');\n	background-position : top left;\n	background-repeat : repeat-y;\n	margin-left: 19px;\n	zoom: 1;\n}\n.TreeIsRoot {\n	margin-left: 0;\n}\n \n/* left vertical line (grid) for all nodes */\n.TreeIsLast {\n	background-image: url('../templates/images/TreeV3/i_half.gif');\n	background-repeat : no-repeat;\n}\n \n.TreeExpandOpen .TreeExpand {\n	background-image: url('../templates/images/TreeV3/expand_minus.gif');\n}\n \n/* closed is higher priority than open */\n.TreeExpandClosed .TreeExpand {\n	background-image: url('../templates/images/TreeV3/expand_plus.gif');\n}\n \n/* highest priority */\n.TreeExpandLeaf .TreeExpand {\n	background-image: url('../templates/images/TreeV3/expand_leaf.gif');\n}\n\n/* \nshould always override any expand setting, but do not touch children.\nif I add .TreeExpand .TreeExpandLoading same time and put it to top/bottom, then it will take precedence over +- for all descendants or always fail\nso I have to remove TreeExpand and process this one specifically\n*/\n\n.TreeExpandLoading   {\n	width: 18px;\n	height: 18px;\n	float: left;\n	display: inline;\n	background-repeat : no-repeat;\n	background-image: url('../templates/images/TreeV3/expand_loading.gif');\n}\n \n.TreeContent {\n	min-height: 18px;\n	min-width: 18px;\n	margin-left:18px;\n	cursor: default;\n	/* can't make inline - multiline bugs */\n}\n\n.TreeIEContent {\n\theight: 18px;\n}\n \n.TreeExpand {\n	width: 18px;\n	height: 18px;\n	float: left;\n	display: inline;\n	background-repeat : no-repeat;\n}\n \n/* same style as IE selection */\n.TreeNodeEmphasized {\n	background-color: Highlight;\n	color: HighlightText;\n}\n \n.TreeContent .RichTextEditable, .TreeContent .RichTextEditable iframe {\n	  background-color: #ffc;\n	  color: black;\n}\n\n/* don't use :focus due to opera's lack of support on div's */\n.TreeLabelFocused {\n	  outline: 1px invert dotted;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/TreeV3.css"), templateString:"<div style=\"${this.style}\">\n</div>", isExpanded:true, isTree:true, createNode:function (data) {
+	data.tree = this.widgetId;
+	if (data.widgetName) {
+		return dojo.widget.createWidget(data.widgetName, data);
+	} else {
+		if (this.defaultChildWidget.prototype.createSimple) {
+			return this.defaultChildWidget.prototype.createSimple(data);
 		} else {
-			var ns = this.defaultChildWidget.prototype.ns; 
-			var wt = this.defaultChildWidget.prototype.widgetType; 
-
-			return dojo.widget.createWidget(ns + ":" + wt, data); 
+			var ns = this.defaultChildWidget.prototype.ns;
+			var wt = this.defaultChildWidget.prototype.widgetType;
+			return dojo.widget.createWidget(ns + ":" + wt, data);
 		}
- 	    	
-	},
-				
-
-	// expandNode has +- CSS background. Not img.src for performance, background src string resides in single place.
-	// selection in KHTML/Mozilla disabled treewide, IE requires unselectable for every node
-	// you can add unselectable if you want both in postCreate of tree and in this template
-
-	// create new template and put into prototype
-	makeNodeTemplate: function() {
-		
-		var domNode = document.createElement("div");
-		dojo.html.setClass(domNode, this.classPrefix+"Node "+this.classPrefix+"ExpandLeaf "+this.classPrefix+"ChildrenNo");		
-		this.nodeTemplate = domNode;
-		
-		var expandNode = document.createElement("div");
-		var clazz = this.classPrefix+"Expand";
-		if (dojo.render.html.ie) {
-			clazz = clazz + ' ' + this.classPrefix+"IEExpand";
+	}
+}, makeNodeTemplate:function () {
+	var domNode = document.createElement("div");
+	dojo.html.setClass(domNode, this.classPrefix + "Node " + this.classPrefix + "ExpandLeaf " + this.classPrefix + "ChildrenNo");
+	this.nodeTemplate = domNode;
+	var expandNode = document.createElement("div");
+	var clazz = this.classPrefix + "Expand";
+	if (dojo.render.html.ie) {
+		clazz = clazz + " " + this.classPrefix + "IEExpand";
+	}
+	dojo.html.setClass(expandNode, clazz);
+	this.expandNodeTemplate = expandNode;
+	var labelNode = document.createElement("span");
+	dojo.html.setClass(labelNode, this.classPrefix + "Label");
+	this.labelNodeTemplate = labelNode;
+	var contentNode = document.createElement("div");
+	var clazz = this.classPrefix + "Content";
+	if (dojo.render.html.ie && !dojo.render.html.ie70) {
+		clazz = clazz + " " + this.classPrefix + "IEContent";
+	}
+	dojo.html.setClass(contentNode, clazz);
+	this.contentNodeTemplate = contentNode;
+	domNode.appendChild(expandNode);
+	domNode.appendChild(contentNode);
+	contentNode.appendChild(labelNode);
+}, makeContainerNodeTemplate:function () {
+	var div = document.createElement("div");
+	div.style.display = "none";
+	dojo.html.setClass(div, this.classPrefix + "Container");
+	this.containerNodeTemplate = div;
+}, actions:{ADDCHILD:"ADDCHILD"}, getInfo:function () {
+	var info = {widgetId:this.widgetId, objectId:this.objectId};
+	return info;
+}, adjustEventNames:function () {
+	for (var name in this.eventNamesDefault) {
+		if (dojo.lang.isUndefined(this.eventNames[name])) {
+			this.eventNames[name] = this.widgetId + "/" + this.eventNamesDefault[name];
 		}
-		dojo.html.setClass(expandNode, clazz);
-		
-		this.expandNodeTemplate = expandNode;
-
-		// need <span> inside <div>
-		// div for multiline support, span for styling exactly the text, not whole line
-		var labelNode = document.createElement("span");
-		dojo.html.setClass(labelNode, this.classPrefix+"Label");
-		this.labelNodeTemplate = labelNode;
-		
-		var contentNode = document.createElement("div");
-		var clazz = this.classPrefix+"Content";
-		
-		/**
-		 * IE<7 does not support min-height properly so I have to rely
-		 * on this hack
-		 * FIXME: do it in CSS only
-		 */
-		if (dojo.render.html.ie && !dojo.render.html.ie70) {
-			clazz = clazz + ' ' + this.classPrefix+"IEContent";
-		}	
-		
-				
-		dojo.html.setClass(contentNode, clazz);
-		
-		this.contentNodeTemplate = contentNode;
-		
-		domNode.appendChild(expandNode);
-		domNode.appendChild(contentNode);
-		contentNode.appendChild(labelNode);
-		
-		
-	},
-
-	makeContainerNodeTemplate: function() {
-		
-		var div = document.createElement('div');
-		div.style.display = 'none';			
-		dojo.html.setClass(div, this.classPrefix+"Container");
-		
-		this.containerNodeTemplate = div;
-		
-	},
-
-	
-	actions: {
-    	ADDCHILD: "ADDCHILD"
-	},
-
-
-	getInfo: function() {
-		var info = {
-			widgetId: this.widgetId,
-			objectId: this.objectId
+	}
+}, adjustDndMode:function () {
+	var _this = this;
+	var DndMode = 0;
+	dojo.lang.forEach(this.DndMode.split(";"), function (elem) {
+		var mode = _this.DndModes[dojo.string.trim(elem).toUpperCase()];
+		if (mode) {
+			DndMode = DndMode | mode;
 		}
-
-		return info;
-	},
-
-	adjustEventNames: function() {
-		
-		for(var name in this.eventNamesDefault) {
-			if (dojo.lang.isUndefined(this.eventNames[name])) {
-				this.eventNames[name] = this.widgetId+"/"+this.eventNamesDefault[name];
-			}
-		}
-	},
-
-	
-	adjustDndMode: function() {
-		var _this = this;
-		
-		
-		var DndMode = 0;
-		dojo.lang.forEach(this.DndMode.split(';'),
-			function(elem) {
-				var mode = _this.DndModes[dojo.string.trim(elem).toUpperCase()];
-				if (mode) DndMode = DndMode | mode;
-			}
-		 );
-	
-		
-		this.DndMode = DndMode;
-
-	},
-	
-	/**
-	 * publish destruction event so that any listeners should stop listening
-	 */
-	destroy: function() {
-		dojo.event.topic.publish(this.tree.eventNames.beforeTreeDestroy, { source: this } );
-
-		return dojo.widget.HtmlWidget.prototype.destroy.apply(this, arguments);
-	},
-
-	initialize: function(args){
-		
-		this.domNode.widgetId = this.widgetId;
-		
-		for(var i=0; i<this.actionsDisabled.length;i++) {
-			this.actionsDisabled[i] = this.actionsDisabled[i].toUpperCase();
-		}
-		
-		//dojo.debug(args.defaultChildWidget ? true : false)
-		
-		if (!args.defaultChildWidget) {
-			this.defaultChildWidget = dojo.widget.TreeNodeV3;
-		} else {
-			this.defaultChildWidget = dojo.lang.getObjPathValue(args.defaultChildWidget);
-		}
-		
-		this.adjustEventNames();
-		this.adjustDndMode();
-
-		this.makeNodeTemplate();
-		this.makeContainerNodeTemplate();
-		
-		this.containerNode = this.domNode;
-		
-		dojo.html.setClass(this.domNode, this.classPrefix+"Container");
-		
-		var _this = this;
-			
-		//dojo.html.disableSelection(this.domNode)
-				
-		dojo.lang.forEach(this.listeners,
-			function(elem) {
-				var t = dojo.lang.isString(elem) ? dojo.widget.byId(elem) : elem;
-				t.listenTree(_this)				
-			}
-		);
-		
-
-		
-		
-
-	},
-
-	
-	postCreate: function() {						
-		dojo.event.topic.publish(this.eventNames.afterTreeCreate, { source: this } );
-	},
-	
-	
-	/**
-	 * Move child to newParent as last child
-	 * redraw tree and update icons.
-	 *
-	 * Called by target, saves source in event.
-	 * events are published for BOTH trees AFTER update.
-	*/
-	move: function(child, newParent, index) {
-		
-		if (!child.parent) {
-			dojo.raise(this.widgetType+": child can be moved only while it's attached");
-		}
-		
-		var oldParent = child.parent;
-		var oldTree = child.tree;
-		var oldIndex = child.getParentIndex();
-		var newTree = newParent.tree;
-		var newParent = newParent;
-		var newIndex = index;
-
-		var message = {
-				oldParent: oldParent, oldTree: oldTree, oldIndex: oldIndex,
-				newParent: newParent, newTree: newTree, newIndex: newIndex,
-				child: child
-		};
-
-		dojo.event.topic.publish(oldTree.eventNames.beforeMoveFrom, message);
-		dojo.event.topic.publish(newTree.eventNames.beforeMoveTo, message);
-		
-		this.doMove.apply(this, arguments);
-
-		
-		/* publish events here about structural changes for both source and target trees */
-		dojo.event.topic.publish(oldTree.eventNames.afterMoveFrom, message);
-		dojo.event.topic.publish(newTree.eventNames.afterMoveTo, message);
-
-	},
-
-
-	/* do actual parent change here. Write remove child first */
-	doMove: function(child, newParent, index) {
-		//dojo.debug("MOVE "+child+" to "+newParent+" at "+index);
-
-		//var parent = child.parent;
-		child.doDetach();
-
-		//dojo.debug("addChild "+child+" to "+newParent+" at "+index);
-
-		newParent.doAddChild(child, index);
-	},
-
-	toString: function() {
-		return "["+this.widgetType+" ID:"+this.widgetId	+"]"
+	});
+	this.DndMode = DndMode;
+}, destroy:function () {
+	dojo.event.topic.publish(this.tree.eventNames.beforeTreeDestroy, {source:this});
+	return dojo.widget.HtmlWidget.prototype.destroy.apply(this, arguments);
+}, initialize:function (args) {
+	this.domNode.widgetId = this.widgetId;
+	for (var i = 0; i < this.actionsDisabled.length; i++) {
+		this.actionsDisabled[i] = this.actionsDisabled[i].toUpperCase();
 	}
+	if (!args.defaultChildWidget) {
+		this.defaultChildWidget = dojo.widget.TreeNodeV3;
+	} else {
+		this.defaultChildWidget = dojo.lang.getObjPathValue(args.defaultChildWidget);
+	}
+	this.adjustEventNames();
+	this.adjustDndMode();
+	this.makeNodeTemplate();
+	this.makeContainerNodeTemplate();
+	this.containerNode = this.domNode;
+	dojo.html.setClass(this.domNode, this.classPrefix + "Container");
+	var _this = this;
+	dojo.lang.forEach(this.listeners, function (elem) {
+		var t = dojo.lang.isString(elem) ? dojo.widget.byId(elem) : elem;
+		t.listenTree(_this);
+	});
+}, postCreate:function () {
+	dojo.event.topic.publish(this.eventNames.afterTreeCreate, {source:this});
+}, move:function (child, newParent, index) {
+	if (!child.parent) {
+		dojo.raise(this.widgetType + ": child can be moved only while it's attached");
+	}
+	var oldParent = child.parent;
+	var oldTree = child.tree;
+	var oldIndex = child.getParentIndex();
+	var newTree = newParent.tree;
+	var newParent = newParent;
+	var newIndex = index;
+	var message = {oldParent:oldParent, oldTree:oldTree, oldIndex:oldIndex, newParent:newParent, newTree:newTree, newIndex:newIndex, child:child};
+	dojo.event.topic.publish(oldTree.eventNames.beforeMoveFrom, message);
+	dojo.event.topic.publish(newTree.eventNames.beforeMoveTo, message);
+	this.doMove.apply(this, arguments);
+	dojo.event.topic.publish(oldTree.eventNames.afterMoveFrom, message);
+	dojo.event.topic.publish(newTree.eventNames.afterMoveTo, message);
+}, doMove:function (child, newParent, index) {
+	child.doDetach();
+	newParent.doAddChild(child, index);
+}, toString:function () {
+	return "[" + this.widgetType + " ID:" + this.widgetId + "]";
+}});
 
-});
 
 __CPAN_FILE__ src/widget/ResizableTextarea.js
 /*
@@ -31814,79 +20288,26 @@
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.LayoutContainer");
 dojo.require("dojo.widget.ResizeHandle");
-
-dojo.widget.defineWidget(
-	"dojo.widget.ResizableTextarea",
-	dojo.widget.HtmlWidget,
-{
-	// summary
-	//	A resizable textarea.
-	//	Takes all the parameters (name, value, etc.) that a vanilla textarea takes.
-	// usage
-	//	<textarea dojoType="ResizableTextArea">...</textarea>
-
-	templatePath: dojo.uri.dojoUri("src/widget/templates/ResizableTextarea.html"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/ResizableTextarea.css"),
-
-	fillInTemplate: function(args, frag){
-		this.textAreaNode = this.getFragNodeRef(frag).cloneNode(true);
-
-		// FIXME: Safari apparently needs this!
-		dojo.body().appendChild(this.domNode);
-
-		this.rootLayout = dojo.widget.createWidget(
-			"LayoutContainer",
-			{
-				minHeight: 50,
-				minWidth: 100
-			},
-			this.rootLayoutNode
-		);
-
-		// TODO: all this code should be replaced with a template
-		// (especially now that templates can contain subwidgets)
-		this.textAreaContainer = dojo.widget.createWidget(
-			"LayoutContainer",
-			{ layoutAlign: "client" },
-			this.textAreaContainerNode
-		);
-		this.rootLayout.addChild(this.textAreaContainer);
-
-		this.textAreaContainer.domNode.appendChild(this.textAreaNode);
-		with(this.textAreaNode.style){
-			width="100%";
-			height="100%";
-		}
-
-		this.statusBar = dojo.widget.createWidget(
-			"LayoutContainer",
-			{ 
-				layoutAlign: "bottom", 
-				minHeight: 28
-			},
-			this.statusBarContainerNode
-		);
-		this.rootLayout.addChild(this.statusBar);
-
-		this.statusLabel = dojo.widget.createWidget(
-			"LayoutContainer",
-			{ 
-				layoutAlign: "client", 
-				minWidth: 50
-			},
-			this.statusLabelNode
-		);
-		this.statusBar.addChild(this.statusLabel);
-
-		this.resizeHandle = dojo.widget.createWidget(
-			"ResizeHandle", 
-			{ targetElmId: this.rootLayout.widgetId },
-			this.resizeHandleNode
-		);
-		this.statusBar.addChild(this.resizeHandle);
+dojo.widget.defineWidget("dojo.widget.ResizableTextarea", dojo.widget.HtmlWidget, {templateString:"<div>\n\t<div style=\"border: 2px solid black; width: 90%; height: 200px;\"\n\t\tdojoAttachPoint=\"rootLayoutNode\">\n\t\t<div dojoAttachPoint=\"textAreaContainerNode\" \n\t\t\tstyle=\"border: 0px; margin: 0px; overflow: hidden;\">\n\t\t</div>\n\t\t<div dojoAttachPoint=\"statusBarContainerNode\" class=\"statusBar\">\n\t\t\t<div dojoAttachPoint=\"statusLabelNode\" \n\t\t\t\tclass=\"statusPanel\"\n\t\t\t\tstyle=\"padding-right: 0px; z-index: 1;\">drag to resize</div>\n\t\t\t<div dojoAttachPoint=\"resizeHandleNode\"></div>\n\t\t</div>\n\t</div>\n</div>\n", templateCssString:"div.statusBar {\n\tbackground-color: ThreeDFace;\n\theight: 28px;\n\tpadding: 1px;\n\toverflow: hidden;\n\tfont-size: 12px;\n}\n\ndiv.statusPanel {\n\tbackground-color: ThreeDFace;\n\tborder: 1px solid;\n\tborder-color: ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow;\n\tmargin: 1px;\n\tpadding: 2px 6px;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/ResizableTextarea.css"), fillInTemplate:function (args, frag) {
+	this.textAreaNode = this.getFragNodeRef(frag).cloneNode(true);
+	dojo.body().appendChild(this.domNode);
+	this.rootLayout = dojo.widget.createWidget("LayoutContainer", {minHeight:50, minWidth:100}, this.rootLayoutNode);
+	this.textAreaContainer = dojo.widget.createWidget("LayoutContainer", {layoutAlign:"client"}, this.textAreaContainerNode);
+	this.rootLayout.addChild(this.textAreaContainer);
+	this.textAreaContainer.domNode.appendChild(this.textAreaNode);
+	with (this.textAreaNode.style) {
+		width = "100%";
+		height = "100%";
 	}
-});
+	this.statusBar = dojo.widget.createWidget("LayoutContainer", {layoutAlign:"bottom", minHeight:28}, this.statusBarContainerNode);
+	this.rootLayout.addChild(this.statusBar);
+	this.statusLabel = dojo.widget.createWidget("LayoutContainer", {layoutAlign:"client", minWidth:50}, this.statusLabelNode);
+	this.statusBar.addChild(this.statusLabel);
+	this.resizeHandle = dojo.widget.createWidget("ResizeHandle", {targetElmId:this.rootLayout.widgetId}, this.resizeHandleNode);
+	this.statusBar.addChild(this.resizeHandle);
+}});
 
+
 __CPAN_FILE__ src/widget/DomWidget.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -31899,7 +20320,6 @@
 */
 
 dojo.provide("dojo.widget.DomWidget");
-
 dojo.require("dojo.event.*");
 dojo.require("dojo.widget.Widget");
 dojo.require("dojo.dom");
@@ -31908,889 +20328,493 @@
 dojo.require("dojo.uri.*");
 dojo.require("dojo.lang.func");
 dojo.require("dojo.lang.extras");
-
 dojo.widget._cssFiles = {};
 dojo.widget._cssStrings = {};
 dojo.widget._templateCache = {};
-
-dojo.widget.defaultStrings = {
-	// summary: a mapping of strings that are used in template variable replacement
-	dojoRoot: dojo.hostenv.getBaseScriptUri(),
-	baseScriptUri: dojo.hostenv.getBaseScriptUri()
-};
-
-dojo.widget.fillFromTemplateCache = function(obj, templatePath, templateString, avoidCache){
-	// summary:
-	//		static method to build from a template w/ or w/o a real widget in
-	//		place
-	// obj: DomWidget
-	//		an instance of dojo.widget.DomWidget to initialize the template for
-	// templatePath: String
-	//		the URL to get the template from. dojo.uri.Uri is often passed as well.
-	// templateString: String?
-	//		a string to use in lieu of fetching the template from a URL
-	// avoidCache: Boolean?
-	//		should the template system not use whatever is in the cache and
-	//		always use the passed templatePath or templateString?
-
-	// dojo.debug("avoidCache:", avoidCache);
+dojo.widget.defaultStrings = {dojoRoot:dojo.hostenv.getBaseScriptUri(), dojoWidgetModuleUri:dojo.uri.moduleUri("dojo.widget"), baseScriptUri:dojo.hostenv.getBaseScriptUri()};
+dojo.widget.fillFromTemplateCache = function (obj, templatePath, templateString, avoidCache) {
 	var tpath = templatePath || obj.templatePath;
-
 	var tmplts = dojo.widget._templateCache;
-	if(!tpath && !obj["widgetType"]) { // don't have a real template here
+	if (!tpath && !obj["widgetType"]) {
 		do {
 			var dummyName = "__dummyTemplate__" + dojo.widget._templateCache.dummyCount++;
-		} while(tmplts[dummyName]);
+		} while (tmplts[dummyName]);
 		obj.widgetType = dummyName;
 	}
-	var wt = tpath?tpath.toString():obj.widgetType;
-
+	var wt = tpath ? tpath.toString() : obj.widgetType;
 	var ts = tmplts[wt];
-	if(!ts){
-		tmplts[wt] = {"string": null, "node": null};
-		if(avoidCache){
+	if (!ts) {
+		tmplts[wt] = {"string":null, "node":null};
+		if (avoidCache) {
 			ts = {};
-		}else{
+		} else {
 			ts = tmplts[wt];
 		}
 	}
-	if((!obj.templateString)&&(!avoidCache)){
+	if ((!obj.templateString) && (!avoidCache)) {
 		obj.templateString = templateString || ts["string"];
 	}
-	if((!obj.templateNode)&&(!avoidCache)){
+	if (obj.templateString) {
+		obj.templateString = this._sanitizeTemplateString(obj.templateString);
+	}
+	if ((!obj.templateNode) && (!avoidCache)) {
 		obj.templateNode = ts["node"];
 	}
-	if((!obj.templateNode)&&(!obj.templateString)&&(tpath)){
-		// fetch a text fragment and assign it to templateString
-		// NOTE: we rely on blocking IO here!
-		var tstring = dojo.hostenv.getText(tpath);
-		if(tstring){
-			// strip <?xml ...?> declarations so that external SVG and XML
-			// documents can be added to a document without worry
-			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 = "";
-		}
-
+	if ((!obj.templateNode) && (!obj.templateString) && (tpath)) {
+		var tstring = this._sanitizeTemplateString(dojo.hostenv.getText(tpath));
 		obj.templateString = tstring;
-		if(!avoidCache){
+		if (!avoidCache) {
 			tmplts[wt]["string"] = tstring;
 		}
 	}
-	if((!ts["string"])&&(!avoidCache)){
+	if ((!ts["string"]) && (!avoidCache)) {
 		ts.string = obj.templateString;
 	}
-}
+};
+dojo.widget._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;
+};
 dojo.widget._templateCache.dummyCount = 0;
-
-// Array: list of properties to search for node-to-property mappings
 dojo.widget.attachProperties = ["dojoAttachPoint", "id"];
-
-// String: name of the property to use for mapping DOM events to widget functions
 dojo.widget.eventAttachProperty = "dojoAttachEvent";
-
-// String: property name of code to evaluate when the widget is constructed
 dojo.widget.onBuildProperty = "dojoOnBuild";
-
-// Array:  possible accessibility values to set on widget elements - role or state
-dojo.widget.waiNames  = ["waiRole", "waiState"];
-
-dojo.widget.wai = {
-	// summary: Contains functions to set accessibility roles and states
-	//		onto widget elements
-	waiRole: { 	
-				// name: String:
-				//		information for mapping accessibility role
-				name: "waiRole", 
-				// namespace: String:
-				//		URI of the namespace for the set of roles
-				"namespace": "http://www.w3.org/TR/xhtml2", 
-				// alias: String:
-				//		The alias to assign the namespace
-				alias: "x2",
-				// prefix: String:
-				//		The prefix to assign to the role value
-				prefix: "wairole:"
-	},
-	waiState: { 
-				// name: String:
-				//		information for mapping accessibility state
-				name: "waiState", 
-				// namespace: String:
-				//		URI of the namespace for the set of states
-				"namespace": "http://www.w3.org/2005/07/aaa", 
-				// alias: String:
-				//		The alias to assign the namespace
-				alias: "aaa",
-				// prefix: String:
-				//		empty string - state value does not require prefix
-				prefix: ""
-	},
-	setAttr: function(/*DomNode*/node, /*String*/ ns, /*String*/ attr, /*String|Boolean*/value){
-		// summary: Use appropriate API to set the role or state attribute onto the element.
-		// description: In IE use the generic setAttribute() api.  Append a namespace
-		//   alias to the attribute name and appropriate prefix to the value. 
-		//   Otherwise, use the setAttribueNS api to set the namespaced attribute. Also
-		//   add the appropriate prefix to the attribute value.
-		if(dojo.render.html.ie){
-			node.setAttribute(this[ns].alias+":"+ attr, this[ns].prefix+value);
-		}else{
-			node.setAttributeNS(this[ns]["namespace"], attr, this[ns].prefix+value);
-		}
-	},
-
-	getAttr: function(/*DomNode*/ node, /*String*/ ns, /*String|Boolena*/ attr){
-		// Summary:  Use the appropriate API to retrieve the role or state value
-		// Description: In IE use the generic getAttribute() api.  An alias value 
-		// 	was added to the attribute name to simulate a namespace when the attribute
-		//  was set.  Otherwise use the getAttributeNS() api to retrieve the state value
-		if(dojo.render.html.ie){
-			return node.getAttribute(this[ns].alias+":"+attr);
-		}else{
-			return node.getAttributeNS(this[ns]["namespace"], attr);
-		}
-	},
-	removeAttr: function(/*DomNode*/ node, /*String*/ ns, /*String|Boolena*/ attr){
-		// summary:  Use the appropriate API to remove the role or state value
-		// description: In IE use the generic removeAttribute() api.  An alias value 
-		// 	was added to the attribute name to simulate a namespace when the attribute
-		//  was set.  Otherwise use the removeAttributeNS() api to remove the state value
-		var success = true; //only IE returns a value
-		if(dojo.render.html.ie){
-			 success = node.removeAttribute(this[ns].alias+":"+attr);
-		}else{
-			node.removeAttributeNS(this[ns]["namespace"], attr);
-		}
-		return success;
+dojo.widget.waiNames = ["waiRole", "waiState"];
+dojo.widget.wai = {waiRole:{name:"waiRole", "namespace":"http://www.w3.org/TR/xhtml2", alias:"x2", prefix:"wairole:"}, waiState:{name:"waiState", "namespace":"http://www.w3.org/2005/07/aaa", alias:"aaa", prefix:""}, setAttr:function (node, ns, attr, value) {
+	if (dojo.render.html.ie) {
+		node.setAttribute(this[ns].alias + ":" + attr, this[ns].prefix + value);
+	} else {
+		node.setAttributeNS(this[ns]["namespace"], attr, this[ns].prefix + value);
 	}
-};
-
-dojo.widget.attachTemplateNodes = function(rootNode, /*Widget*/ targetObj, events ){
-	// summary:
-	//		map widget properties and functions to the handlers specified in
-	//		the dom node and it's descendants. This function iterates over all
-	//		nodes and looks for these properties:
-	//			* dojoAttachPoint
-	//			* dojoAttachEvent	
-	//			* waiRole
-	//			* waiState
-	//			* any "dojoOn*" proprties passed in the events array
-	// rootNode: DomNode
-	//		the node to search for properties. All children will be searched.
-	// events: Array
-	//		a list of properties generated from getDojoEventsFromStr.
-
-	// FIXME: this method is still taking WAAAY too long. We need ways of optimizing:
-	//	a.) what we are looking for on each node
-	//	b.) the nodes that are subject to interrogation (use xpath instead?)
-	//	c.) how expensive event assignment is (less eval(), more connect())
-	// var start = new Date();
+}, getAttr:function (node, ns, attr) {
+	if (dojo.render.html.ie) {
+		return node.getAttribute(this[ns].alias + ":" + attr);
+	} else {
+		return node.getAttributeNS(this[ns]["namespace"], attr);
+	}
+}, removeAttr:function (node, ns, attr) {
+	var success = true;
+	if (dojo.render.html.ie) {
+		success = node.removeAttribute(this[ns].alias + ":" + attr);
+	} else {
+		node.removeAttributeNS(this[ns]["namespace"], attr);
+	}
+	return success;
+}};
+dojo.widget.attachTemplateNodes = function (rootNode, targetObj, events) {
 	var elementNodeType = dojo.dom.ELEMENT_NODE;
-
-	function trim(str){
+	function trim(str) {
 		return str.replace(/^\s+|\s+$/g, "");
 	}
-
-	if(!rootNode){ 
+	if (!rootNode) {
 		rootNode = targetObj.domNode;
 	}
-
-	if(rootNode.nodeType != elementNodeType){
+	if (rootNode.nodeType != elementNodeType) {
 		return;
 	}
-	// alert(events.length);
-
 	var nodes = rootNode.all || rootNode.getElementsByTagName("*");
 	var _this = targetObj;
-	for(var x=-1; x<nodes.length; x++){
+	for (var x = -1; x < nodes.length; x++) {
 		var baseNode = (x == -1) ? rootNode : nodes[x];
-		// FIXME: is this going to have capitalization problems?  Could use getAttribute(name, 0); to get attributes case-insensitve
 		var attachPoint = [];
-		if(!targetObj.widgetsInTemplate || !baseNode.getAttribute('dojoType')){
-			for(var y=0; y<this.attachProperties.length; y++){
+		if (!targetObj.widgetsInTemplate || !baseNode.getAttribute("dojoType")) {
+			for (var y = 0; y < this.attachProperties.length; y++) {
 				var tmpAttachPoint = baseNode.getAttribute(this.attachProperties[y]);
-				if(tmpAttachPoint){
+				if (tmpAttachPoint) {
 					attachPoint = tmpAttachPoint.split(";");
-					for(var z=0; z<attachPoint.length; z++){
-						if(dojo.lang.isArray(targetObj[attachPoint[z]])){
+					for (var z = 0; z < attachPoint.length; z++) {
+						if (dojo.lang.isArray(targetObj[attachPoint[z]])) {
 							targetObj[attachPoint[z]].push(baseNode);
-						}else{
-							targetObj[attachPoint[z]]=baseNode;
+						} else {
+							targetObj[attachPoint[z]] = baseNode;
 						}
 					}
 					break;
 				}
 			}
-
 			var attachEvent = baseNode.getAttribute(this.eventAttachProperty);
-			if(attachEvent){
-				// NOTE: we want to support attributes that have the form
-				// "domEvent: nativeEvent; ..."
+			if (attachEvent) {
 				var evts = attachEvent.split(";");
-				for(var y=0; y<evts.length; y++){
-					if((!evts[y])||(!evts[y].length)){ continue; }
+				for (var y = 0; y < evts.length; y++) {
+					if ((!evts[y]) || (!evts[y].length)) {
+						continue;
+					}
 					var thisFunc = null;
 					var tevt = trim(evts[y]);
-					if(evts[y].indexOf(":") >= 0){
-						// oh, if only JS had tuple assignment
+					if (evts[y].indexOf(":") >= 0) {
 						var funcNameArr = tevt.split(":");
 						tevt = trim(funcNameArr[0]);
 						thisFunc = trim(funcNameArr[1]);
 					}
-					if(!thisFunc){
+					if (!thisFunc) {
 						thisFunc = tevt;
 					}
-	
-					var tf = function(){ 
+					var tf = function () {
 						var ntf = new String(thisFunc);
-						return function(evt){
-							if(_this[ntf]){
+						return function (evt) {
+							if (_this[ntf]) {
 								_this[ntf](dojo.event.browser.fixEvent(evt, this));
 							}
 						};
 					}();
 					dojo.event.browser.addListener(baseNode, tevt, tf, false, true);
-					// dojo.event.browser.addListener(baseNode, tevt, dojo.lang.hitch(_this, thisFunc));
 				}
 			}
-	
-			for(var y=0; y<events.length; y++){
-				//alert(events[x]);
+			for (var y = 0; y < events.length; y++) {
 				var evtVal = baseNode.getAttribute(events[y]);
-				if((evtVal)&&(evtVal.length)){
+				if ((evtVal) && (evtVal.length)) {
 					var thisFunc = null;
-					var domEvt = events[y].substr(4); // clober the "dojo" prefix
+					var domEvt = events[y].substr(4);
 					thisFunc = trim(evtVal);
 					var funcs = [thisFunc];
-					if(thisFunc.indexOf(";")>=0){
+					if (thisFunc.indexOf(";") >= 0) {
 						funcs = dojo.lang.map(thisFunc.split(";"), trim);
 					}
-					for(var z=0; z<funcs.length; z++){
-						if(!funcs[z].length){ continue; }
-						var tf = function(){ 
+					for (var z = 0; z < funcs.length; z++) {
+						if (!funcs[z].length) {
+							continue;
+						}
+						var tf = function () {
 							var ntf = new String(funcs[z]);
-							return function(evt){
-								if(_this[ntf]){
+							return function (evt) {
+								if (_this[ntf]) {
 									_this[ntf](dojo.event.browser.fixEvent(evt, this));
 								}
-							}
+							};
 						}();
 						dojo.event.browser.addListener(baseNode, domEvt, tf, false, true);
-						// dojo.event.browser.addListener(baseNode, domEvt, dojo.lang.hitch(_this, funcs[z]));
 					}
 				}
 			}
 		}
-		// continue;
-
-		// FIXME: we need to put this into some kind of lookup structure
-		// instead of direct assignment
 		var tmpltPoint = baseNode.getAttribute(this.templateProperty);
-		if(tmpltPoint){
-			targetObj[tmpltPoint]=baseNode;
+		if (tmpltPoint) {
+			targetObj[tmpltPoint] = baseNode;
 		}
-
-		dojo.lang.forEach(dojo.widget.waiNames, function(name){
+		dojo.lang.forEach(dojo.widget.waiNames, function (name) {
 			var wai = dojo.widget.wai[name];
 			var val = baseNode.getAttribute(wai.name);
-			if(val){
-				if(val.indexOf('-') == -1){ 
+			if (val) {
+				if (val.indexOf("-") == -1) {
 					dojo.widget.wai.setAttr(baseNode, wai.name, "role", val);
-				}else{
-					// this is a state-value pair
-					var statePair = val.split('-');
+				} else {
+					var statePair = val.split("-");
 					dojo.widget.wai.setAttr(baseNode, wai.name, statePair[0], statePair[1]);
 				}
 			}
 		}, this);
-
 		var onBuild = baseNode.getAttribute(this.onBuildProperty);
-		if(onBuild){
-			eval("var node = baseNode; var widget = targetObj; "+onBuild);
+		if (onBuild) {
+			eval("var node = baseNode; var widget = targetObj; " + onBuild);
 		}
 	}
-
-}
-
-dojo.widget.getDojoEventsFromStr = function(str){
-	// summary:
-	//		generates a list of properties with names that match the form
-	//		dojoOn*
-	// str: String
-	//		the template string to search
-	
-	// var lstr = str.toLowerCase();
+};
+dojo.widget.getDojoEventsFromStr = function (str) {
 	var re = /(dojoOn([a-z]+)(\s?))=/gi;
-	var evts = str ? str.match(re)||[] : [];
+	var evts = str ? str.match(re) || [] : [];
 	var ret = [];
 	var lem = {};
-	for(var x=0; x<evts.length; x++){
-		if(evts[x].length < 1){ continue; }
+	for (var x = 0; x < evts.length; x++) {
+		if (evts[x].length < 1) {
+			continue;
+		}
 		var cm = evts[x].replace(/\s/, "");
-		cm = (cm.slice(0, cm.length-1));
-		if(!lem[cm]){
+		cm = (cm.slice(0, cm.length - 1));
+		if (!lem[cm]) {
 			lem[cm] = true;
 			ret.push(cm);
 		}
 	}
-	return ret; // Array
-}
-
-dojo.declare("dojo.widget.DomWidget", 
-	dojo.widget.Widget,
-	function(){
-		// summary:
-		//		dojo.widget.DomWidget is the superclass that provides behavior for all
-		//		DOM-based renderers, including HtmlWidget and SvgWidget. DomWidget
-		//		implements the templating system that most widget authors use to define
-		//		the UI for their widgets.
-		if((arguments.length>0)&&(typeof arguments[0] == "object")){
-			this.create(arguments[0]);
+	return ret;
+};
+dojo.declare("dojo.widget.DomWidget", dojo.widget.Widget, function () {
+	if ((arguments.length > 0) && (typeof arguments[0] == "object")) {
+		this.create(arguments[0]);
+	}
+}, {templateNode:null, templateString:null, templateCssString:null, preventClobber:false, domNode:null, containerNode:null, widgetsInTemplate:false, addChild:function (widget, overrideContainerNode, pos, ref, insertIndex) {
+	if (!this.isContainer) {
+		dojo.debug("dojo.widget.DomWidget.addChild() attempted on non-container widget");
+		return null;
+	} else {
+		if (insertIndex == undefined) {
+			insertIndex = this.children.length;
 		}
-	},
-	{							 
-		// templateNode: DomNode
-		//		a node that represents the widget template. Pre-empts both templateString and templatePath.
-		templateNode: null,
-
-		// templateString String:
-		//		a string that represents the widget template. Pre-empts the
-		//		templatePath. In builds that have their strings "interned", the
-		//		templatePath is converted to an inline templateString, thereby
-		//		preventing a synchronous network call.
-		templateString: null,
-
-		// templateCssString String:
-		//		a string that represents the CSS for the widgettemplate.
-		//		Pre-empts the templateCssPath. In builds that have their
-		//		strings "interned", the templateCssPath is converted to an
-		//		inline templateCssString, thereby preventing a synchronous
-		//		network call.
-		templateCssString: null,
-
-		// preventClobber Boolean:
-		//		should the widget not replace the node from which it was
-		//		constructed? Widgets that apply behaviors to pre-existing parts
-		//		of a page can be implemented easily by setting this to "true".
-		//		In these cases, the domNode property will point to the node
-		//		which the widget was created from.
-		preventClobber: false,
-
-		// domNode DomNode:
-		//		this is our visible representation of the widget! Other DOM
-		//		Nodes may by assigned to other properties, usually through the
-		//		template system's dojoAttachPonit syntax, but the domNode
-		//		property is the canonical "top level" node in widget UI.
-		domNode: null, 
-
-		// containerNode DomNode:
-		//		holds child elements. "containerNode" is generally set via a
-		//		dojoAttachPoint assignment and it designates where widgets that
-		//		are defined as "children" of the parent will be placed
-		//		visually.
-		containerNode: null,
-
-		// widgetsInTemplate Boolean:
-		//		should we parse the template to find widgets that might be
-		//		declared in markup inside it? false by default.
-		widgetsInTemplate: false,
-
-		addChild: function(/*Widget*/	widget, overrideContainerNode, pos, ref, insertIndex){
-			// summary:
-			//		Process the given child widget, inserting it's dom node as
-			//		a child of our dom node
-			// overrideContainerNode: DomNode?
-			//		a non-default container node for the widget
-			// pos: String?
-			//		can be one of "before", "after", "first", or "last". This
-			//		has the same meaning as in dojo.dom.insertAtPosition()
-			// ref: DomNode?
-			//		a node to place the widget relative to
-			// insertIndex: int?
-			//		DOM index, same meaning as in dojo.dom.insertAtIndex()
-			// returns: the widget that was inserted
-
-			// FIXME: should we support addition at an index in the children arr and
-			// order the display accordingly? Right now we always append.
-			if(!this.isContainer){ // we aren't allowed to contain other widgets, it seems
-				dojo.debug("dojo.widget.DomWidget.addChild() attempted on non-container widget");
-				return null;
-			}else{
-				if(insertIndex == undefined){
-					insertIndex = this.children.length;
-				}
-				this.addWidgetAsDirectChild(widget, overrideContainerNode, pos, ref, insertIndex);
-				this.registerChild(widget, insertIndex);
+		this.addWidgetAsDirectChild(widget, overrideContainerNode, pos, ref, insertIndex);
+		this.registerChild(widget, insertIndex);
+	}
+	return widget;
+}, addWidgetAsDirectChild:function (widget, overrideContainerNode, pos, ref, insertIndex) {
+	if ((!this.containerNode) && (!overrideContainerNode)) {
+		this.containerNode = this.domNode;
+	}
+	var cn = (overrideContainerNode) ? overrideContainerNode : this.containerNode;
+	if (!pos) {
+		pos = "after";
+	}
+	if (!ref) {
+		if (!cn) {
+			cn = dojo.body();
+		}
+		ref = cn.lastChild;
+	}
+	if (!insertIndex) {
+		insertIndex = 0;
+	}
+	widget.domNode.setAttribute("dojoinsertionindex", insertIndex);
+	if (!ref) {
+		cn.appendChild(widget.domNode);
+	} else {
+		if (pos == "insertAtIndex") {
+			dojo.dom.insertAtIndex(widget.domNode, ref.parentNode, insertIndex);
+		} else {
+			if ((pos == "after") && (ref === cn.lastChild)) {
+				cn.appendChild(widget.domNode);
+			} else {
+				dojo.dom.insertAtPosition(widget.domNode, cn, pos);
 			}
-			return widget; // Widget
-		},
-		
-		addWidgetAsDirectChild: function(/*Widget*/	widget, overrideContainerNode, pos, ref, insertIndex){
-			// summary:
-			//		Process the given child widget, inserting it's dom node as
-			//		a child of our dom node
-			// overrideContainerNode: DomNode
-			//		a non-default container node for the widget
-			// pos: String?
-			//		can be one of "before", "after", "first", or "last". This
-			//		has the same meaning as in dojo.dom.insertAtPosition()
-			// ref: DomNode?
-			//		a node to place the widget relative to
-			// insertIndex: int?
-			//		DOM index, same meaning as in dojo.dom.insertAtIndex()
-			if((!this.containerNode)&&(!overrideContainerNode)){
-				this.containerNode = this.domNode;
+		}
+	}
+}, registerChild:function (widget, insertionIndex) {
+	widget.dojoInsertionIndex = insertionIndex;
+	var idx = -1;
+	for (var i = 0; i < this.children.length; i++) {
+		if (this.children[i].dojoInsertionIndex <= insertionIndex) {
+			idx = i;
+		}
+	}
+	this.children.splice(idx + 1, 0, widget);
+	widget.parent = this;
+	widget.addedTo(this, idx + 1);
+	delete dojo.widget.manager.topWidgets[widget.widgetId];
+}, removeChild:function (widget) {
+	dojo.dom.removeNode(widget.domNode);
+	return dojo.widget.DomWidget.superclass.removeChild.call(this, widget);
+}, getFragNodeRef:function (frag) {
+	if (!frag) {
+		return null;
+	}
+	if (!frag[this.getNamespacedType()]) {
+		dojo.raise("Error: no frag for widget type " + this.getNamespacedType() + ", id " + this.widgetId + " (maybe a widget has set it's type incorrectly)");
+	}
+	return frag[this.getNamespacedType()]["nodeRef"];
+}, postInitialize:function (args, frag, parentComp) {
+	var sourceNodeRef = this.getFragNodeRef(frag);
+	if (parentComp && (parentComp.snarfChildDomOutput || !sourceNodeRef)) {
+		parentComp.addWidgetAsDirectChild(this, "", "insertAtIndex", "", args["dojoinsertionindex"], sourceNodeRef);
+	} else {
+		if (sourceNodeRef) {
+			if (this.domNode && (this.domNode !== sourceNodeRef)) {
+				this._sourceNodeRef = dojo.dom.replaceNode(sourceNodeRef, this.domNode);
 			}
-			var cn = (overrideContainerNode) ? overrideContainerNode : this.containerNode;
-			if(!pos){ pos = "after"; }
-			if(!ref){ 
-				if(!cn){ cn = dojo.body(); }
-				ref = cn.lastChild; 
+		}
+	}
+	if (parentComp) {
+		parentComp.registerChild(this, args.dojoinsertionindex);
+	} else {
+		dojo.widget.manager.topWidgets[this.widgetId] = this;
+	}
+	if (this.widgetsInTemplate) {
+		var parser = new dojo.xml.Parse();
+		var subContainerNode;
+		var subnodes = this.domNode.getElementsByTagName("*");
+		for (var i = 0; i < subnodes.length; i++) {
+			if (subnodes[i].getAttribute("dojoAttachPoint") == "subContainerWidget") {
+				subContainerNode = subnodes[i];
 			}
-			if(!insertIndex) { insertIndex = 0; }
-			widget.domNode.setAttribute("dojoinsertionindex", insertIndex);
-
-			// insert the child widget domNode directly underneath my domNode, in the
-			// specified position (by default, append to end)
-			if(!ref){
-				cn.appendChild(widget.domNode);
-			}else{
-				// FIXME: was this meant to be the (ugly hack) way to support insert @ index?
-				//dojo.dom[pos](widget.domNode, ref, insertIndex);
-
-				// CAL: this appears to be the intended way to insert a node at a given position...
-				if (pos == 'insertAtIndex'){
-					// dojo.debug("idx:", insertIndex, "isLast:", ref === cn.lastChild);
-					dojo.dom.insertAtIndex(widget.domNode, ref.parentNode, insertIndex);
-				}else{
-					// dojo.debug("pos:", pos, "isLast:", ref === cn.lastChild);
-					if((pos == "after")&&(ref === cn.lastChild)){
-						cn.appendChild(widget.domNode);
-					}else{
-						dojo.dom.insertAtPosition(widget.domNode, cn, pos);
-					}
-				}
+			if (subnodes[i].getAttribute("dojoType")) {
+				subnodes[i].setAttribute("isSubWidget", true);
 			}
-		},
-
-		registerChild: function(widget, insertionIndex){
-			// summary: record that given widget descends from me
-			// widget: Widget
-			//		the widget that is now a child
-			// insertionIndex: int
-			//		where in the children[] array to place it
-
-			// we need to insert the child at the right point in the parent's 
-			// 'children' array, based on the insertionIndex
-
-			widget.dojoInsertionIndex = insertionIndex;
-
-			var idx = -1;
-			for(var i=0; i<this.children.length; i++){
-
-				//This appears to fix an out of order issue in the case of mixed
-				//markup and programmatically added children.  Previously, if a child
-				//existed from markup, and another child was addChild()d without specifying
-				//any additional parameters, it would end up first in the list, when in fact
-				//it should be after.  I can't see cases where this would break things, but
-				//I could see no other obvious solution. -dustin
-
-				if (this.children[i].dojoInsertionIndex <= insertionIndex){
-					idx = i;
+		}
+		if (this.isContainer && !this.containerNode) {
+			if (subContainerNode) {
+				var src = this.getFragNodeRef(frag);
+				if (src) {
+					dojo.dom.moveChildren(src, subContainerNode);
+					frag["dojoDontFollow"] = true;
 				}
+			} else {
+				dojo.debug("No subContainerWidget node can be found in template file for widget " + this);
 			}
-
-			this.children.splice(idx+1, 0, widget);
-
-			widget.parent = this;
-			widget.addedTo(this, idx+1);
-			
-			// If this widget was created programatically, then it was erroneously added
-			// to dojo.widget.manager.topWidgets.  Fix that here.
-			delete dojo.widget.manager.topWidgets[widget.widgetId];
-		},
-
-		removeChild: function(/*Widget*/ widget){
-			// summary: detach child domNode from parent domNode
-			dojo.dom.removeNode(widget.domNode);
-
-			// remove child widget from parent widget 
-			return dojo.widget.DomWidget.superclass.removeChild.call(this, widget); // Widget
-		},
-
-		getFragNodeRef: function(frag){
-			// summary:
-			//		returns the source node, if any, that the widget was
-			//		declared from
-			// frag: Object
-			//		an opaque data structure generated by the first-pass parser
-			if(!frag){return null;} // null
-			if(!frag[this.getNamespacedType()]){
-				dojo.raise("Error: no frag for widget type " + this.getNamespacedType() 
-					+ ", id " + this.widgetId
-					+ " (maybe a widget has set it's type incorrectly)");
-			}
-			return frag[this.getNamespacedType()]["nodeRef"]; // DomNode
-		},
-		
-		postInitialize: function(/*Object*/ args, /*Object*/ frag, /*Widget*/ parentComp){
-			// summary:
-			//		Replace the source domNode with the generated dom
-			//		structure, and register the widget with its parent.
-			//		This is an implementation of the stub function defined in
-			//		dojo.widget.Widget.
-			
-			//dojo.profile.start(this.widgetType + " postInitialize");
-			
-			var sourceNodeRef = this.getFragNodeRef(frag);
-			// Stick my generated dom into the output tree
-			//alert(this.widgetId + ": replacing " + sourceNodeRef + " with " + this.domNode.innerHTML);
-			if (parentComp && (parentComp.snarfChildDomOutput || !sourceNodeRef)){
-				// Add my generated dom as a direct child of my parent widget
-				// This is important for generated widgets, and also cases where I am generating an
-				// <li> node that can't be inserted back into the original DOM tree
-				parentComp.addWidgetAsDirectChild(this, "", "insertAtIndex", "",  args["dojoinsertionindex"], sourceNodeRef);
-			} else if (sourceNodeRef){
-				// Do in-place replacement of the my source node with my generated dom
-				if(this.domNode && (this.domNode !== sourceNodeRef)){
-					this._sourceNodeRef = dojo.dom.replaceNode(sourceNodeRef, this.domNode);
+		}
+		var templatefrag = parser.parseElement(this.domNode, null, true);
+		dojo.widget.getParser().createSubComponents(templatefrag, this);
+		var subwidgets = [];
+		var stack = [this];
+		var w;
+		while ((w = stack.pop())) {
+			for (var i = 0; i < w.children.length; i++) {
+				var cwidget = w.children[i];
+				if (cwidget._processedSubWidgets || !cwidget.extraArgs["issubwidget"]) {
+					continue;
 				}
+				subwidgets.push(cwidget);
+				if (cwidget.isContainer) {
+					stack.push(cwidget);
+				}
 			}
-
-			// Register myself with my parent, or with the widget manager if
-			// I have no parent
-			// TODO: the code below erroneously adds all programatically generated widgets
-			// to topWidgets (since we don't know who the parent is until after creation finishes)
-			if ( parentComp ) {
-				parentComp.registerChild(this, args.dojoinsertionindex);
-			} else {
-				dojo.widget.manager.topWidgets[this.widgetId]=this;
+		}
+		for (var i = 0; i < subwidgets.length; i++) {
+			var widget = subwidgets[i];
+			if (widget._processedSubWidgets) {
+				dojo.debug("This should not happen: widget._processedSubWidgets is already true!");
+				return;
 			}
-
-			if(this.widgetsInTemplate){
-				var parser = new dojo.xml.Parse();
-
-				var subContainerNode;
-				//TODO: use xpath here?
-				var subnodes = this.domNode.getElementsByTagName("*");
-				for(var i=0;i<subnodes.length;i++){
-					if(subnodes[i].getAttribute('dojoAttachPoint') == 'subContainerWidget'){
-						subContainerNode = subnodes[i];
-//						break;
+			widget._processedSubWidgets = true;
+			if (widget.extraArgs["dojoattachevent"]) {
+				var evts = widget.extraArgs["dojoattachevent"].split(";");
+				for (var j = 0; j < evts.length; j++) {
+					var thisFunc = null;
+					var tevt = dojo.string.trim(evts[j]);
+					if (tevt.indexOf(":") >= 0) {
+						var funcNameArr = tevt.split(":");
+						tevt = dojo.string.trim(funcNameArr[0]);
+						thisFunc = dojo.string.trim(funcNameArr[1]);
 					}
-					if(subnodes[i].getAttribute('dojoType')){
-						subnodes[i].setAttribute('isSubWidget', true);
+					if (!thisFunc) {
+						thisFunc = tevt;
 					}
-				}
-				if (this.isContainer && !this.containerNode){
-					//no containerNode is available, which means a widget is used as a container. find it here and move
-					//all dom nodes defined in the main html page as children of this.domNode into the actual container
-					//widget's node (at this point, the subwidgets defined in the template file is not parsed yet)
-					if(subContainerNode){
-						var src = this.getFragNodeRef(frag);
-						if (src){
-							dojo.dom.moveChildren(src, subContainerNode);
-							//do not need to follow children nodes in the main html page, as they
-							//will be dealt with in the subContainerWidget
-							frag['dojoDontFollow'] = true;
-						}
-					}else{
-						dojo.debug("No subContainerWidget node can be found in template file for widget "+this);
+					if (dojo.lang.isFunction(widget[tevt])) {
+						dojo.event.kwConnect({srcObj:widget, srcFunc:tevt, targetObj:this, targetFunc:thisFunc});
+					} else {
+						alert(tevt + " is not a function in widget " + widget);
 					}
 				}
-
-				var templatefrag = parser.parseElement(this.domNode, null, true);
-				// createSubComponents not createComponents because frag has already been created
-				dojo.widget.getParser().createSubComponents(templatefrag, this);
-	
-				//find all the sub widgets defined in the template file of this widget
-				var subwidgets = [];
-				var stack = [this];
-				var w;
-				while((w = stack.pop())){
-					for(var i = 0; i < w.children.length; i++){
-						var cwidget = w.children[i];
-						if(cwidget._processedSubWidgets || !cwidget.extraArgs['issubwidget']){ continue; }
-						subwidgets.push(cwidget);
-						if(cwidget.isContainer){
-							stack.push(cwidget);
-						}
-					}
-				}
-	
-				//connect event to this widget/attach dom node
-				for(var i = 0; i < subwidgets.length; i++){
-					var widget = subwidgets[i];
-					if(widget._processedSubWidgets){
-						dojo.debug("This should not happen: widget._processedSubWidgets is already true!");
-						return;
-					}
-					widget._processedSubWidgets = true;
-					if(widget.extraArgs['dojoattachevent']){
-						var evts = widget.extraArgs['dojoattachevent'].split(";");
-						for(var j=0; j<evts.length; j++){
-							var thisFunc = null;
-							var tevt = dojo.string.trim(evts[j]);
-							if(tevt.indexOf(":") >= 0){
-								// oh, if only JS had tuple assignment
-								var funcNameArr = tevt.split(":");
-								tevt = dojo.string.trim(funcNameArr[0]);
-								thisFunc = dojo.string.trim(funcNameArr[1]);
-							}
-							if(!thisFunc){
-								thisFunc = tevt;
-							}
-							if(dojo.lang.isFunction(widget[tevt])){
-								dojo.event.kwConnect({
-									srcObj: widget, 
-									srcFunc: tevt, 
-									targetObj: this, 
-									targetFunc: thisFunc
-								});
-							}else{
-								alert(tevt+" is not a function in widget "+widget);
-							}
-						}
-					}
-	
-					if(widget.extraArgs['dojoattachpoint']){
-						//don't attach widget.domNode here, as we do not know which
-						//dom node we should connect to (in checkbox widget case, 
-						//it is inputNode). So we make the widget itself available
-						this[widget.extraArgs['dojoattachpoint']] = widget;
-					}
-				}
 			}
-
-			//dojo.profile.end(this.widgetType + " postInitialize");
-
-			// Expand my children widgets
-			/* dojoDontFollow is important for a very special case
-			 * basically if you have a widget that you instantiate from script
-			 * and that widget is a container, and it contains a reference to a parent
-			 * instance, the parser will start recursively parsing until the browser
-			 * complains.  So the solution is to set an initialization property of 
-			 * dojoDontFollow: true and then it won't recurse where it shouldn't
-			 */
-			if(this.isContainer && !frag["dojoDontFollow"]){
-				//alert("recurse from " + this.widgetId);
-				// build any sub-components with us as the parent
-				dojo.widget.getParser().createSubComponents(frag, this);
+			if (widget.extraArgs["dojoattachpoint"]) {
+				this[widget.extraArgs["dojoattachpoint"]] = widget;
 			}
-		},
-
-		// method over-ride
-		buildRendering: function(/*Object*/ args, /*Object*/ frag){
-			// summary:
-			//		Construct the UI for this widget, generally from a
-			//		template. This can be over-ridden for custom UI creation to
-			//		to side-step the template system.  This is an
-			//		implementation of the stub function defined in
-			//		dojo.widget.Widget.
-
-			// DOM widgets construct themselves from a template
-			var ts = dojo.widget._templateCache[this.widgetType];
-			
-			// Handle style for this widget here, as even if templatePath
-			// is not set, style specified by templateCssString or templateCssPath
-			// should be applied. templateCssString has higher priority
-			// than templateCssPath
-			if(args["templatecsspath"]){
-				args["templateCssPath"] = args["templatecsspath"];
-			}
-			var cpath = args["templateCssPath"] || this.templateCssPath;
-			if(cpath && !dojo.widget._cssFiles[cpath.toString()]){
-				if((!this.templateCssString)&&(cpath)){
-					this.templateCssString = dojo.hostenv.getText(cpath);
-					this.templateCssPath = null;
+		}
+	}
+	if (this.isContainer && !frag["dojoDontFollow"]) {
+		dojo.widget.getParser().createSubComponents(frag, this);
+	}
+}, buildRendering:function (args, frag) {
+	var ts = dojo.widget._templateCache[this.widgetType];
+	if (args["templatecsspath"]) {
+		args["templateCssPath"] = args["templatecsspath"];
+	}
+	var cpath = args["templateCssPath"] || this.templateCssPath;
+	if (cpath && !dojo.widget._cssFiles[cpath.toString()]) {
+		if ((!this.templateCssString) && (cpath)) {
+			this.templateCssString = dojo.hostenv.getText(cpath);
+			this.templateCssPath = null;
+		}
+		dojo.widget._cssFiles[cpath.toString()] = true;
+	}
+	if ((this["templateCssString"]) && (!dojo.widget._cssStrings[this.templateCssString])) {
+		dojo.html.insertCssText(this.templateCssString, null, cpath);
+		dojo.widget._cssStrings[this.templateCssString] = true;
+	}
+	if ((!this.preventClobber) && ((this.templatePath) || (this.templateNode) || ((this["templateString"]) && (this.templateString.length)) || ((typeof ts != "undefined") && ((ts["string"]) || (ts["node"]))))) {
+		this.buildFromTemplate(args, frag);
+	} else {
+		this.domNode = this.getFragNodeRef(frag);
+	}
+	this.fillInTemplate(args, frag);
+}, buildFromTemplate:function (args, frag) {
+	var avoidCache = false;
+	if (args["templatepath"]) {
+		args["templatePath"] = args["templatepath"];
+	}
+	dojo.widget.fillFromTemplateCache(this, args["templatePath"], null, avoidCache);
+	var ts = dojo.widget._templateCache[this.templatePath ? this.templatePath.toString() : this.widgetType];
+	if ((ts) && (!avoidCache)) {
+		if (!this.templateString.length) {
+			this.templateString = ts["string"];
+		}
+		if (!this.templateNode) {
+			this.templateNode = ts["node"];
+		}
+	}
+	var matches = false;
+	var node = null;
+	var tstr = this.templateString;
+	if ((!this.templateNode) && (this.templateString)) {
+		matches = this.templateString.match(/\$\{([^\}]+)\}/g);
+		if (matches) {
+			var hash = this.strings || {};
+			for (var key in dojo.widget.defaultStrings) {
+				if (dojo.lang.isUndefined(hash[key])) {
+					hash[key] = dojo.widget.defaultStrings[key];
 				}
-				dojo.widget._cssFiles[cpath.toString()] = true;
 			}
-		
-			if((this["templateCssString"])&&(!dojo.widget._cssStrings[this.templateCssString])){
-				dojo.html.insertCssText(this.templateCssString, null, cpath);
-				dojo.widget._cssStrings[this.templateCssString] = true;
-			}
-			if(	
-				(!this.preventClobber)&&(
-					(this.templatePath)||
-					(this.templateNode)||
-					(
-						(this["templateString"])&&(this.templateString.length) 
-					)||
-					(
-						(typeof ts != "undefined")&&( (ts["string"])||(ts["node"]) )
-					)
-				)
-			){
-				// if it looks like we can build the thing from a template, do it!
-				this.buildFromTemplate(args, frag);
-			}else{
-				// otherwise, assign the DOM node that was the source of the widget
-				// parsing to be the root node
-				this.domNode = this.getFragNodeRef(frag);
-			}
-			this.fillInTemplate(args, frag); 	// this is where individual widgets
-												// will handle population of data
-												// from properties, remote data
-												// sets, etc.
-		},
-
-		buildFromTemplate: function(/*Object*/ args, /*Object*/ frag){
-			// summary:
-			//		Called by buildRendering, creates the actual UI in a DomWidget.
-
-			// var start = new Date();
-			// copy template properties if they're already set in the templates object
-			// dojo.debug("buildFromTemplate:", this);
-			var avoidCache = false;
-			if(args["templatepath"]){
-//				avoidCache = true;
-				args["templatePath"] = args["templatepath"];
-			}
-			dojo.widget.fillFromTemplateCache(	this, 
-												args["templatePath"], 
-												null,
-												avoidCache);
-			var ts = dojo.widget._templateCache[this.templatePath?this.templatePath.toString():this.widgetType];
-			if((ts)&&(!avoidCache)){
-				if(!this.templateString.length){
-					this.templateString = ts["string"];
-				}
-				if(!this.templateNode){
-					this.templateNode = ts["node"];
-				}
-			}
-			var matches = false;
-			var node = null;
-			// var tstr = new String(this.templateString); 
-			var tstr = this.templateString; 
-			// attempt to clone a template node, if there is one
-			if((!this.templateNode)&&(this.templateString)){
-				matches = this.templateString.match(/\$\{([^\}]+)\}/g);
-				if(matches) {
-					// if we do property replacement, don't create a templateNode
-					// to clone from.
-					var hash = this.strings || {};
-					// FIXME: should this hash of default replacements be cached in
-					// templateString?
-					for(var key in dojo.widget.defaultStrings) {
-						if(dojo.lang.isUndefined(hash[key])) {
-							hash[key] = dojo.widget.defaultStrings[key];
-						}
+			for (var i = 0; i < matches.length; i++) {
+				var key = matches[i];
+				key = key.substring(2, key.length - 1);
+				var kval = (key.substring(0, 5) == "this.") ? dojo.lang.getObjPathValue(key.substring(5), this) : hash[key];
+				var value;
+				if ((kval) || (dojo.lang.isString(kval))) {
+					value = new String((dojo.lang.isFunction(kval)) ? kval.call(this, key, this.templateString) : kval);
+					while (value.indexOf("\"") > -1) {
+						value = value.replace("\"", "&quot;");
 					}
-					// FIXME: this is a lot of string munging. Can we make it faster?
-					for(var i = 0; i < matches.length; i++) {
-						var key = matches[i];
-						key = key.substring(2, key.length-1);
-						var kval = (key.substring(0, 5) == "this.") ? dojo.lang.getObjPathValue(key.substring(5), this) : hash[key];
-						var value;
-						if((kval)||(dojo.lang.isString(kval))){
-							value = new String((dojo.lang.isFunction(kval)) ? kval.call(this, key, this.templateString) : kval);
-							// Safer substitution, see heading "Attribute values" in  
-							// http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2
-							while (value.indexOf("\"") > -1) {
-								value=value.replace("\"","&quot;");
-							}
-							tstr = tstr.replace(matches[i], value);
-						}
-					}
-				}else{
-					// otherwise, we are required to instantiate a copy of the template
-					// string if one is provided.
-					
-					// FIXME: need to be able to distinguish here what should be done
-					// or provide a generic interface across all DOM implementations
-					// FIMXE: this breaks if the template has whitespace as its first 
-					// characters
-					// node = this.createNodesFromText(this.templateString, true);
-					// this.templateNode = node[0].cloneNode(true); // we're optimistic here
-					this.templateNode = this.createNodesFromText(this.templateString, true)[0];
-					if(!avoidCache){
-						ts.node = this.templateNode;
-					}
+					tstr = tstr.replace(matches[i], value);
 				}
 			}
-			if((!this.templateNode)&&(!matches)){ 
-				dojo.debug("DomWidget.buildFromTemplate: could not create template");
+		} else {
+			this.templateNode = this.createNodesFromText(this.templateString, true)[0];
+			if (!avoidCache) {
+				ts.node = this.templateNode;
+			}
+		}
+	}
+	if ((!this.templateNode) && (!matches)) {
+		dojo.debug("DomWidget.buildFromTemplate: could not create template");
+		return false;
+	} else {
+		if (!matches) {
+			node = this.templateNode.cloneNode(true);
+			if (!node) {
 				return false;
-			}else if(!matches){
-				node = this.templateNode.cloneNode(true);
-				if(!node){ return false; }
-			}else{
-				node = this.createNodesFromText(tstr, true)[0];
 			}
-
-			// recurse through the node, looking for, and attaching to, our
-			// attachment points which should be defined on the template node.
-
-			this.domNode = node;
-			// dojo.profile.start("attachTemplateNodes");
-			this.attachTemplateNodes();
-			// dojo.profile.end("attachTemplateNodes");
-		
-			// relocate source contents to templated container node
-			// this.containerNode must be able to receive children, or exceptions will be thrown
-			if (this.isContainer && this.containerNode){
-				var src = this.getFragNodeRef(frag);
-				if (src){
-					dojo.dom.moveChildren(src, this.containerNode);
-				}
-			}
-		},
-
-		attachTemplateNodes: function(baseNode, targetObj){
-			// summary: 
-			//		hooks up event handlers and property/node linkages. Calls
-			//		dojo.widget.attachTemplateNodes to do all the hard work.
-			// baseNode: DomNode
-			//		defaults to "this.domNode"
-			// targetObj: Widget
-			//		defaults to "this"
-			if(!baseNode){ baseNode = this.domNode; }
-			if(!targetObj){ targetObj = this; }
-			return dojo.widget.attachTemplateNodes(baseNode, targetObj, 
-						dojo.widget.getDojoEventsFromStr(this.templateString));
-		},
-
-		fillInTemplate: function(){
-			// summary:
-			//		stub function! sub-classes may use as a default UI
-			//		initializer function. The UI rendering will be available by
-			//		the time this is called from buildRendering. If
-			//		buildRendering is over-ridden, this function may not be
-			//		fired!
-
-			// dojo.unimplemented("dojo.widget.DomWidget.fillInTemplate");
-		},
-		
-		// method over-ride
-		destroyRendering: function(){
-			// summary: UI destructor.  Destroy the dom nodes associated w/this widget.
-			try{
-				dojo.dom.destroyNode(this.domNode);
-				delete this.domNode;
-			}catch(e){ /* squelch! */ }
-			if(this._sourceNodeRef){
-				try{
-					dojo.dom.destroyNode(this._sourceNodeRef);
-				}catch(e){ /* squelch! */ }
-			}
-		},
-
-		createNodesFromText: function(){
-			// summary
-			//	Attempts to create a set of nodes based on the structure of the passed text.
-			//	Implemented in HtmlWidget and SvgWidget.
-			dojo.unimplemented("dojo.widget.DomWidget.createNodesFromText");
+		} else {
+			node = this.createNodesFromText(tstr, true)[0];
 		}
 	}
-);
+	this.domNode = node;
+	this.attachTemplateNodes();
+	if (this.isContainer && this.containerNode) {
+		var src = this.getFragNodeRef(frag);
+		if (src) {
+			dojo.dom.moveChildren(src, this.containerNode);
+		}
+	}
+}, attachTemplateNodes:function (baseNode, targetObj) {
+	if (!baseNode) {
+		baseNode = this.domNode;
+	}
+	if (!targetObj) {
+		targetObj = this;
+	}
+	return dojo.widget.attachTemplateNodes(baseNode, targetObj, dojo.widget.getDojoEventsFromStr(this.templateString));
+}, fillInTemplate:function () {
+}, destroyRendering:function () {
+	try {
+		dojo.dom.destroyNode(this.domNode);
+		delete this.domNode;
+	}
+	catch (e) {
+	}
+	if (this._sourceNodeRef) {
+		try {
+			dojo.dom.destroyNode(this._sourceNodeRef);
+		}
+		catch (e) {
+		}
+	}
+}, createNodesFromText:function () {
+	dojo.unimplemented("dojo.widget.DomWidget.createNodesFromText");
+}});
 
+
 __CPAN_FILE__ src/widget/FisheyeList.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -32803,739 +20827,438 @@
 */
 
 dojo.provide("dojo.widget.FisheyeList");
-
-//
-// TODO
-// fix SVG support, and turn it on only if the browser supports it
-// fix really long labels in vertical mode
-//
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.html.style");
 dojo.require("dojo.html.selection");
 dojo.require("dojo.html.util");
 dojo.require("dojo.event.*");
-
-
-dojo.widget.defineWidget(
-	"dojo.widget.FisheyeList",
-	dojo.widget.HtmlWidget,
-function(){
-	/*
-	 * summary
-	 *	Menu similar to the fish eye menu on the Mac OS
-	 * usage
-	 *	<div dojoType="FisheyeList"
-	 *	itemWidth="40" itemHeight="40"
-	 *	itemMaxWidth="150" itemMaxHeight="150"
-	 *	orientation="horizontal"
-	 *	effectUnits="2"
-	 *	itemPadding="10"
-	 *	attachEdge="center"
-	 *	labelEdge="bottom">
-	 *
-	 *		<div dojoType="FisheyeListItem"
-	 *			id="item1"
-	 *			onclick="alert('click on' + this.caption + '(from widget id ' + this.widgetId + ')!');"
-	 *			caption="Item 1"
-	 *			iconsrc="images/fisheye_1.png">
-	 *		</div>
-	 *		...
-	 *	</div>
-	 */
-	 
-	this.pos = {x: -1, y: -1};		// current cursor position, relative to the grid
-
-	this.EDGE = {
-		CENTER: 0,
-		LEFT: 1,
-		RIGHT: 2,
-		TOP: 3,
-		BOTTOM: 4
-	};
-	
-	// for conservative trigger mode, when triggered, timerScale is gradually increased from 0 to 1
-	this.timerScale = 1.0;
-
-},
-{
-	templateString: '<div class="dojoHtmlFisheyeListBar"></div>',
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/FisheyeList.css"),
-
-	isContainer: true,
-	snarfChildDomOutput: true,
-
-	// itemWidth: Integer
-	//	width of menu item (in pixels) in it's dormant state (when the mouse is far away)
-	itemWidth: 40,
-
-	// itemHeight: Integer
-	//	height of menu item (in pixels) in it's dormant state (when the mouse is far away)
-	itemHeight: 40,
-
-	// itemMaxWidth: Integer
-	//	width of menu item (in pixels) in it's fully enlarged state (when the mouse is directly over it)
-	itemMaxWidth: 150,
-
-	// itemMaxHeight: Integer
-	//	height of menu item (in pixels) in it's fully enlarged state (when the mouse is directly over it)
-	itemMaxHeight: 150,
-
-
-	// orientation: String
-	//	orientation of the menu, either "horizontal" or "vertical"
-	orientation: 'horizontal',
-
-	// conservativeTrigger: Boolean
-	//	if true, don't start enlarging menu items until mouse is over an image;
-	//	if false, start enlarging menu items as the mouse moves near them.
-	conservativeTrigger: false,
-
-	// effectUnits: Number
-	//	controls how much reaction the menu makes, relative to the distance of the mouse from the menu
-	effectUnits: 2,
-	
-	// itemPadding: Integer
-	//	padding (in pixels) betweeen each menu item
-	itemPadding: 10,
-
-	// attachEdge: String
-	//	controls the border that the menu items don't expand past;
-	//	for example, if set to "top", then the menu items will drop downwards as they expand.
-	// values
-	//	"center", "left", "right", "top", "bottom".
-	attachEdge: 'center',
-
-	// labelEdge: String
-	//	controls were the labels show up in relation to the menu item icons
-	// values
-	//	"center", "left", "right", "top", "bottom".
-	labelEdge: 'bottom',
-
-	// enableCrappySvgSupportBoolean
-	//	for browsers that support svg, use the svg image (specified in FisheyeListIem.svgSrc)
-	//	rather than the iconSrc image attribute
-	enableCrappySvgSupport: false,
-
-	fillInTemplate: function() {
-		dojo.html.disableSelection(this.domNode);
-
-		this.isHorizontal = (this.orientation == 'horizontal');
-		this.selectedNode = -1;
-
-		this.isOver = false;
-		this.hitX1 = -1;
-		this.hitY1 = -1;
-		this.hitX2 = -1;
-		this.hitY2 = -1;
-
-		//
-		// only some edges make sense...
-		//
-		this.anchorEdge = this._toEdge(this.attachEdge, this.EDGE.CENTER);
-		this.labelEdge  = this._toEdge(this.labelEdge,  this.EDGE.TOP);
-
-		if ( this.isHorizontal && (this.anchorEdge == this.EDGE.LEFT  )){ this.anchorEdge = this.EDGE.CENTER; }
-		if ( this.isHorizontal && (this.anchorEdge == this.EDGE.RIGHT )){ this.anchorEdge = this.EDGE.CENTER; }
-		if (!this.isHorizontal && (this.anchorEdge == this.EDGE.TOP   )){ this.anchorEdge = this.EDGE.CENTER; }
-		if (!this.isHorizontal && (this.anchorEdge == this.EDGE.BOTTOM)){ this.anchorEdge = this.EDGE.CENTER; }
-
-		if (this.labelEdge == this.EDGE.CENTER){ this.labelEdge = this.EDGE.TOP; }
-		if ( this.isHorizontal && (this.labelEdge == this.EDGE.LEFT  )){ this.labelEdge = this.EDGE.TOP; }
-		if ( this.isHorizontal && (this.labelEdge == this.EDGE.RIGHT )){ this.labelEdge = this.EDGE.TOP; }
-		if (!this.isHorizontal && (this.labelEdge == this.EDGE.TOP   )){ this.labelEdge = this.EDGE.LEFT; }
-		if (!this.isHorizontal && (this.labelEdge == this.EDGE.BOTTOM)){ this.labelEdge = this.EDGE.LEFT; }
-
-		//
-		// figure out the proximity size
-		//
-		this.proximityLeft   = this.itemWidth  * (this.effectUnits - 0.5);
-		this.proximityRight  = this.itemWidth  * (this.effectUnits - 0.5);
-		this.proximityTop    = this.itemHeight * (this.effectUnits - 0.5);
-		this.proximityBottom = this.itemHeight * (this.effectUnits - 0.5);
-
-		if (this.anchorEdge == this.EDGE.LEFT){
-			this.proximityLeft = 0;
+dojo.widget.defineWidget("dojo.widget.FisheyeList", dojo.widget.HtmlWidget, function () {
+	this.pos = {x:-1, y:-1};
+	this.EDGE = {CENTER:0, LEFT:1, RIGHT:2, TOP:3, BOTTOM:4};
+	this.timerScale = 1;
+}, {templateString:"<div class=\"dojoHtmlFisheyeListBar\"></div>", templateCssString:".dojoHtmlFisheyeListItemLabel {\n\tfont-family: Arial, Helvetica, sans-serif;\n\tbackground-color: #eee;\n\tborder: 2px solid #666;\n\tpadding: 2px;\n\ttext-align: center;\n\tposition: absolute;\n\tdisplay: none;\n}\n\n.dojoHtmlFisheyeListItemLabel.selected {\n\tdisplay: block;\n}\n\n.dojoHtmlFisheyeListItemImage {\n\tborder: 0px;\n\tposition: absolute;\n}\n\n.dojoHtmlFisheyeListItem {\n\tposition: absolute;\n\tz-index: 2;\n}\n\n.dojoHtmlFisheyeListBar {\n\tposition: relative;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/FisheyeList.css"), isContainer:true, snarfChildDomOutput:true, itemWidth:40, itemHeight:40, itemMaxWidth:150, itemMaxHeight:150, orientation:"horizontal", conservativeTrigger:false, effectUnits:2, itemPadding:10, attachEdge:"center", labelEdge:"bottom", enableCrappySvgSupport:false, fillInTemplate:function () {
+	dojo.html.disableSelection(this.domNode);
+	this.isHorizontal = (this.orientation == "horizontal");
+	this.selectedNode = -1;
+	this.isOver = false;
+	this.hitX1 = -1;
+	this.hitY1 = -1;
+	this.hitX2 = -1;
+	this.hitY2 = -1;
+	this.anchorEdge = this._toEdge(this.attachEdge, this.EDGE.CENTER);
+	this.labelEdge = this._toEdge(this.labelEdge, this.EDGE.TOP);
+	if (this.isHorizontal && (this.anchorEdge == this.EDGE.LEFT)) {
+		this.anchorEdge = this.EDGE.CENTER;
+	}
+	if (this.isHorizontal && (this.anchorEdge == this.EDGE.RIGHT)) {
+		this.anchorEdge = this.EDGE.CENTER;
+	}
+	if (!this.isHorizontal && (this.anchorEdge == this.EDGE.TOP)) {
+		this.anchorEdge = this.EDGE.CENTER;
+	}
+	if (!this.isHorizontal && (this.anchorEdge == this.EDGE.BOTTOM)) {
+		this.anchorEdge = this.EDGE.CENTER;
+	}
+	if (this.labelEdge == this.EDGE.CENTER) {
+		this.labelEdge = this.EDGE.TOP;
+	}
+	if (this.isHorizontal && (this.labelEdge == this.EDGE.LEFT)) {
+		this.labelEdge = this.EDGE.TOP;
+	}
+	if (this.isHorizontal && (this.labelEdge == this.EDGE.RIGHT)) {
+		this.labelEdge = this.EDGE.TOP;
+	}
+	if (!this.isHorizontal && (this.labelEdge == this.EDGE.TOP)) {
+		this.labelEdge = this.EDGE.LEFT;
+	}
+	if (!this.isHorizontal && (this.labelEdge == this.EDGE.BOTTOM)) {
+		this.labelEdge = this.EDGE.LEFT;
+	}
+	this.proximityLeft = this.itemWidth * (this.effectUnits - 0.5);
+	this.proximityRight = this.itemWidth * (this.effectUnits - 0.5);
+	this.proximityTop = this.itemHeight * (this.effectUnits - 0.5);
+	this.proximityBottom = this.itemHeight * (this.effectUnits - 0.5);
+	if (this.anchorEdge == this.EDGE.LEFT) {
+		this.proximityLeft = 0;
+	}
+	if (this.anchorEdge == this.EDGE.RIGHT) {
+		this.proximityRight = 0;
+	}
+	if (this.anchorEdge == this.EDGE.TOP) {
+		this.proximityTop = 0;
+	}
+	if (this.anchorEdge == this.EDGE.BOTTOM) {
+		this.proximityBottom = 0;
+	}
+	if (this.anchorEdge == this.EDGE.CENTER) {
+		this.proximityLeft /= 2;
+		this.proximityRight /= 2;
+		this.proximityTop /= 2;
+		this.proximityBottom /= 2;
+	}
+}, postCreate:function () {
+	this._initializePositioning();
+	if (!this.conservativeTrigger) {
+		dojo.event.connect(document.documentElement, "onmousemove", this, "_onMouseMove");
+	}
+	dojo.event.connect(document.documentElement, "onmouseout", this, "_onBodyOut");
+	dojo.event.connect(this, "addChild", this, "_initializePositioning");
+}, _initializePositioning:function () {
+	this.itemCount = this.children.length;
+	this.barWidth = (this.isHorizontal ? this.itemCount : 1) * this.itemWidth;
+	this.barHeight = (this.isHorizontal ? 1 : this.itemCount) * this.itemHeight;
+	this.totalWidth = this.proximityLeft + this.proximityRight + this.barWidth;
+	this.totalHeight = this.proximityTop + this.proximityBottom + this.barHeight;
+	for (var i = 0; i < this.children.length; i++) {
+		this.children[i].posX = this.itemWidth * (this.isHorizontal ? i : 0);
+		this.children[i].posY = this.itemHeight * (this.isHorizontal ? 0 : i);
+		this.children[i].cenX = this.children[i].posX + (this.itemWidth / 2);
+		this.children[i].cenY = this.children[i].posY + (this.itemHeight / 2);
+		var isz = this.isHorizontal ? this.itemWidth : this.itemHeight;
+		var r = this.effectUnits * isz;
+		var c = this.isHorizontal ? this.children[i].cenX : this.children[i].cenY;
+		var lhs = this.isHorizontal ? this.proximityLeft : this.proximityTop;
+		var rhs = this.isHorizontal ? this.proximityRight : this.proximityBottom;
+		var siz = this.isHorizontal ? this.barWidth : this.barHeight;
+		var range_lhs = r;
+		var range_rhs = r;
+		if (range_lhs > c + lhs) {
+			range_lhs = c + lhs;
 		}
-		if (this.anchorEdge == this.EDGE.RIGHT){
-			this.proximityRight = 0;
+		if (range_rhs > (siz - c + rhs)) {
+			range_rhs = siz - c + rhs;
 		}
-		if (this.anchorEdge == this.EDGE.TOP){
-			this.proximityTop = 0;
+		this.children[i].effectRangeLeft = range_lhs / isz;
+		this.children[i].effectRangeRght = range_rhs / isz;
+	}
+	this.domNode.style.width = this.barWidth + "px";
+	this.domNode.style.height = this.barHeight + "px";
+	for (var i = 0; i < this.children.length; i++) {
+		var itm = this.children[i];
+		var elm = itm.domNode;
+		elm.style.left = itm.posX + "px";
+		elm.style.top = itm.posY + "px";
+		elm.style.width = this.itemWidth + "px";
+		elm.style.height = this.itemHeight + "px";
+		if (itm.svgNode) {
+			itm.svgNode.style.position = "absolute";
+			itm.svgNode.style.left = this.itemPadding + "%";
+			itm.svgNode.style.top = this.itemPadding + "%";
+			itm.svgNode.style.width = (100 - 2 * this.itemPadding) + "%";
+			itm.svgNode.style.height = (100 - 2 * this.itemPadding) + "%";
+			itm.svgNode.style.zIndex = 1;
+			itm.svgNode.setSize(this.itemWidth, this.itemHeight);
+		} else {
+			itm.imgNode.style.left = this.itemPadding + "%";
+			itm.imgNode.style.top = this.itemPadding + "%";
+			itm.imgNode.style.width = (100 - 2 * this.itemPadding) + "%";
+			itm.imgNode.style.height = (100 - 2 * this.itemPadding) + "%";
 		}
-		if (this.anchorEdge == this.EDGE.BOTTOM){
-			this.proximityBottom = 0;
+	}
+	this._calcHitGrid();
+}, _onBodyOut:function (e) {
+	if (dojo.html.overElement(dojo.body(), e)) {
+		return;
+	}
+	this._setDormant(e);
+}, _setDormant:function (e) {
+	if (!this.isOver) {
+		return;
+	}
+	this.isOver = false;
+	if (this.conservativeTrigger) {
+		dojo.event.disconnect(document.documentElement, "onmousemove", this, "_onMouseMove");
+	}
+	this._onGridMouseMove(-1, -1);
+}, _setActive:function (e) {
+	if (this.isOver) {
+		return;
+	}
+	this.isOver = true;
+	if (this.conservativeTrigger) {
+		dojo.event.connect(document.documentElement, "onmousemove", this, "_onMouseMove");
+		this.timerScale = 0;
+		this._onMouseMove(e);
+		this._expandSlowly();
+	}
+}, _onMouseMove:function (e) {
+	if ((e.pageX >= this.hitX1) && (e.pageX <= this.hitX2) && (e.pageY >= this.hitY1) && (e.pageY <= this.hitY2)) {
+		if (!this.isOver) {
+			this._setActive(e);
 		}
-		if (this.anchorEdge == this.EDGE.CENTER){
-			this.proximityLeft   /= 2;
-			this.proximityRight  /= 2;
-			this.proximityTop    /= 2;
-			this.proximityBottom /= 2;
+		this._onGridMouseMove(e.pageX - this.hitX1, e.pageY - this.hitY1);
+	} else {
+		if (this.isOver) {
+			this._setDormant(e);
 		}
-	},
-	
-	postCreate: function() {
-		this._initializePositioning();
-
-		//
-		// in liberal trigger mode, activate menu whenever mouse is close
-		//
-		if( !this.conservativeTrigger ){
-			dojo.event.connect(document.documentElement, "onmousemove", this, "_onMouseMove");
+	}
+}, onResized:function () {
+	this._calcHitGrid();
+}, _onGridMouseMove:function (x, y) {
+	this.pos = {x:x, y:y};
+	this._paint();
+}, _paint:function () {
+	var x = this.pos.x;
+	var y = this.pos.y;
+	if (this.itemCount <= 0) {
+		return;
+	}
+	var pos = this.isHorizontal ? x : y;
+	var prx = this.isHorizontal ? this.proximityLeft : this.proximityTop;
+	var siz = this.isHorizontal ? this.itemWidth : this.itemHeight;
+	var sim = this.isHorizontal ? (1 - this.timerScale) * this.itemWidth + this.timerScale * this.itemMaxWidth : (1 - this.timerScale) * this.itemHeight + this.timerScale * this.itemMaxHeight;
+	var cen = ((pos - prx) / siz) - 0.5;
+	var max_off_cen = (sim / siz) - 0.5;
+	if (max_off_cen > this.effectUnits) {
+		max_off_cen = this.effectUnits;
+	}
+	var off_weight = 0;
+	if (this.anchorEdge == this.EDGE.BOTTOM) {
+		var cen2 = (y - this.proximityTop) / this.itemHeight;
+		off_weight = (cen2 > 0.5) ? 1 : y / (this.proximityTop + (this.itemHeight / 2));
+	}
+	if (this.anchorEdge == this.EDGE.TOP) {
+		var cen2 = (y - this.proximityTop) / this.itemHeight;
+		off_weight = (cen2 < 0.5) ? 1 : (this.totalHeight - y) / (this.proximityBottom + (this.itemHeight / 2));
+	}
+	if (this.anchorEdge == this.EDGE.RIGHT) {
+		var cen2 = (x - this.proximityLeft) / this.itemWidth;
+		off_weight = (cen2 > 0.5) ? 1 : x / (this.proximityLeft + (this.itemWidth / 2));
+	}
+	if (this.anchorEdge == this.EDGE.LEFT) {
+		var cen2 = (x - this.proximityLeft) / this.itemWidth;
+		off_weight = (cen2 < 0.5) ? 1 : (this.totalWidth - x) / (this.proximityRight + (this.itemWidth / 2));
+	}
+	if (this.anchorEdge == this.EDGE.CENTER) {
+		if (this.isHorizontal) {
+			off_weight = y / (this.totalHeight);
+		} else {
+			off_weight = x / (this.totalWidth);
 		}
-		
-		// Deactivate the menu if mouse is moved off screen (doesn't work for FF?)
-		dojo.event.connect(document.documentElement, "onmouseout", this, "_onBodyOut");
-		dojo.event.connect(this, "addChild", this, "_initializePositioning");
-	},
-
-	_initializePositioning: function(){
-		this.itemCount = this.children.length;
-
-		this.barWidth  = (this.isHorizontal ? this.itemCount : 1) * this.itemWidth;
-		this.barHeight = (this.isHorizontal ? 1 : this.itemCount) * this.itemHeight;
-
-		this.totalWidth  = this.proximityLeft + this.proximityRight  + this.barWidth;
-		this.totalHeight = this.proximityTop  + this.proximityBottom + this.barHeight;
-
-		//
-		// calculate effect ranges for each item
-		//
-		for (var i=0; i<this.children.length; i++){
-
-			this.children[i].posX = this.itemWidth  * (this.isHorizontal ? i : 0);
-			this.children[i].posY = this.itemHeight * (this.isHorizontal ? 0 : i);
-
-			this.children[i].cenX = this.children[i].posX + (this.itemWidth  / 2);
-			this.children[i].cenY = this.children[i].posY + (this.itemHeight / 2);
-
-			var isz = this.isHorizontal ? this.itemWidth : this.itemHeight;
-			var r = this.effectUnits * isz;
-			var c = this.isHorizontal ? this.children[i].cenX : this.children[i].cenY;
-			var lhs = this.isHorizontal ? this.proximityLeft : this.proximityTop;
-			var rhs = this.isHorizontal ? this.proximityRight : this.proximityBottom;
-			var siz = this.isHorizontal ? this.barWidth : this.barHeight;
-
-			var range_lhs = r;
-			var range_rhs = r;
-
-			if (range_lhs > c+lhs){ range_lhs = c+lhs; }
-			if (range_rhs > (siz-c+rhs)){ range_rhs = siz-c+rhs; }
-
-			this.children[i].effectRangeLeft = range_lhs / isz;
-			this.children[i].effectRangeRght = range_rhs / isz;
-
-			//dojo.debug('effect range for '+i+' is '+range_lhs+'/'+range_rhs);
+		if (off_weight > 0.5) {
+			off_weight = 1 - off_weight;
 		}
-
-		//
-		// create the bar
-		//
-		this.domNode.style.width = this.barWidth + 'px';
-		this.domNode.style.height = this.barHeight + 'px';
-
-		//
-		// position the items
-		//
-		for (var i=0; i<this.children.length; i++){
-			var itm = this.children[i];
-			var elm = itm.domNode;
-			elm.style.left   = itm.posX + 'px';
-			elm.style.top    = itm.posY + 'px';
-			elm.style.width  = this.itemWidth + 'px';
-			elm.style.height = this.itemHeight + 'px';
-			
-			if ( itm.svgNode ) {
-				itm.svgNode.style.position = 'absolute';
-				itm.svgNode.style.left = this.itemPadding+'%';
-				itm.svgNode.style.top = this.itemPadding+'%';
-				itm.svgNode.style.width = (100 - 2 * this.itemPadding) + '%';
-				itm.svgNode.style.height = (100 - 2 * this.itemPadding) + '%';
-				itm.svgNode.style.zIndex = 1;
-	
-				itm.svgNode.setSize(this.itemWidth, this.itemHeight);
-			} else {
-				itm.imgNode.style.left = this.itemPadding+'%';
-				itm.imgNode.style.top = this.itemPadding+'%';
-				itm.imgNode.style.width = (100 - 2 * this.itemPadding) + '%';
-				itm.imgNode.style.height = (100 - 2 * this.itemPadding) + '%';
-			}
+		off_weight *= 2;
+	}
+	for (var i = 0; i < this.itemCount; i++) {
+		var weight = this._weighAt(cen, i);
+		if (weight < 0) {
+			weight = 0;
 		}
-
-		//
-		// calc the grid
-		//
-		this._calcHitGrid();
-	},
-
-	_onBodyOut: function(/*Event*/ e){
-		// clicking over an object inside of body causes this event to fire; ignore that case
-		if( dojo.html.overElement(dojo.body(), e) ){
-			return;
-		}
-		this._setDormant(e);
-	},
-
-	_setDormant: function(/*Event*/ e){
-		// summary: called when mouse moves out of menu's range
-
-		if( !this.isOver ){ return; }	// already dormant?
-		this.isOver = false;
-
-		if ( this.conservativeTrigger ) {
-			// user can't re-trigger the menu expansion
-			// until he mouses over a icon again
-			dojo.event.disconnect(document.documentElement, "onmousemove", this, "_onMouseMove");
-		}
-		this._onGridMouseMove(-1, -1);
-	},
-
-	_setActive: function(/*Event*/ e){
-		// summary: called when mouse is moved into menu's range
-
-		if( this.isOver ){ return; }	// already activated?
-		this.isOver = true;
-
-		if ( this.conservativeTrigger ) {
-			// switch event handlers so that we handle mouse events from anywhere near
-			// the menu
-			dojo.event.connect(document.documentElement, "onmousemove", this, "_onMouseMove");
-
-			this.timerScale=0.0;
-
-			// call mouse handler to do some initial necessary calculations/positioning
-			this._onMouseMove(e);
-
-			// slowly expand the icon size so it isn't jumpy
-			this._expandSlowly();
-		}
-	},
-
-	_onMouseMove: function(/*Event*/ e) {
-		// summary: called when mouse is moved
-		if ((e.pageX >= this.hitX1) && (e.pageX <= this.hitX2) &&
-			(e.pageY >= this.hitY1) && (e.pageY <= this.hitY2)){
-			if( !this.isOver ){
-				this._setActive(e);
-			}
-			this._onGridMouseMove(e.pageX-this.hitX1, e.pageY-this.hitY1);
-		}else{
-			if (this.isOver){
-				this._setDormant(e);
-			}
-		}
-	},
-
-	onResized: function() {
-		this._calcHitGrid();
-	},
-
-	_onGridMouseMove: function(x, y){
-		// summary: called when mouse is moved in the vicinity of the menu
-		this.pos = {x:x, y:y};
-		this._paint();
-	},
-	
-	_paint: function(){
-		var x=this.pos.x;
-		var y=this.pos.y;
-
-		if( this.itemCount <= 0 ){ return; }
-
-		//
-		// figure out our main index
-		//
-		var pos = this.isHorizontal ? x : y;
-		var prx = this.isHorizontal ? this.proximityLeft : this.proximityTop;
-		var siz = this.isHorizontal ? this.itemWidth : this.itemHeight;
-		var sim = this.isHorizontal ? 
-			(1.0-this.timerScale)*this.itemWidth + this.timerScale*this.itemMaxWidth :
-			(1.0-this.timerScale)*this.itemHeight + this.timerScale*this.itemMaxHeight ;
-
-		var cen = ((pos - prx) / siz) - 0.5;
-		var max_off_cen = (sim / siz) - 0.5;
-
-		if (max_off_cen > this.effectUnits){ max_off_cen = this.effectUnits; }
-
-		//
-		// figure out our off-axis weighting
-		//
-		var off_weight = 0;
-
-		if (this.anchorEdge == this.EDGE.BOTTOM){
-			var cen2 = (y - this.proximityTop) / this.itemHeight;
-			off_weight = (cen2 > 0.5) ? 1 : y / (this.proximityTop + (this.itemHeight / 2));
-		}
-		if (this.anchorEdge == this.EDGE.TOP){
-			var cen2 = (y - this.proximityTop) / this.itemHeight;
-			off_weight = (cen2 < 0.5) ? 1 : (this.totalHeight - y) / (this.proximityBottom + (this.itemHeight / 2));
-		}
-		if (this.anchorEdge == this.EDGE.RIGHT){
-			var cen2 = (x - this.proximityLeft) / this.itemWidth;
-			off_weight = (cen2 > 0.5) ? 1 : x / (this.proximityLeft + (this.itemWidth / 2));
-		}
-		if (this.anchorEdge == this.EDGE.LEFT){
-			var cen2 = (x - this.proximityLeft) / this.itemWidth;
-			off_weight = (cen2 < 0.5) ? 1 : (this.totalWidth - x) / (this.proximityRight + (this.itemWidth / 2));
-		}
-		if (this.anchorEdge == this.EDGE.CENTER){
-			if (this.isHorizontal){
-				off_weight = y / (this.totalHeight);
-			}else{
-				off_weight = x / (this.totalWidth);
-			}
-
-			if (off_weight > 0.5){
-				off_weight = 1 - off_weight;
-			}
-
-			off_weight *= 2;
-		}
-
-		//
-		// set the sizes
-		//
-		for(var i=0; i<this.itemCount; i++){
-			var weight = this._weighAt(cen, i);
-			if (weight < 0){weight = 0;}
-			this._setItemSize(i, weight * off_weight);
-		}
-
-		//
-		// set the positions
-		//
-
-		var main_p = Math.round(cen);
-		var offset = 0;
-
-		if (cen < 0){
-			main_p = 0;
-
-		}else if (cen > this.itemCount - 1){
-
-			main_p = this.itemCount -1;
-
-		}else{
-
+		this._setItemSize(i, weight * off_weight);
+	}
+	var main_p = Math.round(cen);
+	var offset = 0;
+	if (cen < 0) {
+		main_p = 0;
+	} else {
+		if (cen > this.itemCount - 1) {
+			main_p = this.itemCount - 1;
+		} else {
 			offset = (cen - main_p) * ((this.isHorizontal ? this.itemWidth : this.itemHeight) - this.children[main_p].sizeMain);
 		}
-
-		this._positionElementsFrom(main_p, offset);
-	},
-
-	_weighAt: function(/*Integer*/ cen, /*Integer*/ i){
-		var dist = Math.abs(cen - i);
-		var limit = ((cen - i) > 0) ? this.children[i].effectRangeRght : this.children[i].effectRangeLeft;
-		return (dist > limit) ? 0 : (1 - dist / limit);			// Integer
-	},
-
-	_setItemSize: function(p, scale){
-		scale *= this.timerScale;
-		var w = Math.round(this.itemWidth  + ((this.itemMaxWidth  - this.itemWidth ) * scale));
-		var h = Math.round(this.itemHeight + ((this.itemMaxHeight - this.itemHeight) * scale));
-
-		if (this.isHorizontal){
-
-			this.children[p].sizeW = w;
-			this.children[p].sizeH = h;
-
-			this.children[p].sizeMain = w;
-			this.children[p].sizeOff  = h;
-
-			var y = 0;
-			if (this.anchorEdge == this.EDGE.TOP){
-				y = (this.children[p].cenY - (this.itemHeight / 2));
-			}else if (this.anchorEdge == this.EDGE.BOTTOM){
+	}
+	this._positionElementsFrom(main_p, offset);
+}, _weighAt:function (cen, i) {
+	var dist = Math.abs(cen - i);
+	var limit = ((cen - i) > 0) ? this.children[i].effectRangeRght : this.children[i].effectRangeLeft;
+	return (dist > limit) ? 0 : (1 - dist / limit);
+}, _setItemSize:function (p, scale) {
+	scale *= this.timerScale;
+	var w = Math.round(this.itemWidth + ((this.itemMaxWidth - this.itemWidth) * scale));
+	var h = Math.round(this.itemHeight + ((this.itemMaxHeight - this.itemHeight) * scale));
+	if (this.isHorizontal) {
+		this.children[p].sizeW = w;
+		this.children[p].sizeH = h;
+		this.children[p].sizeMain = w;
+		this.children[p].sizeOff = h;
+		var y = 0;
+		if (this.anchorEdge == this.EDGE.TOP) {
+			y = (this.children[p].cenY - (this.itemHeight / 2));
+		} else {
+			if (this.anchorEdge == this.EDGE.BOTTOM) {
 				y = (this.children[p].cenY - (h - (this.itemHeight / 2)));
-			}else{
+			} else {
 				y = (this.children[p].cenY - (h / 2));
 			}
-
-			this.children[p].usualX = Math.round(this.children[p].cenX - (w / 2));
-			this.children[p].domNode.style.top  = y + 'px';
-			this.children[p].domNode.style.left  = this.children[p].usualX + 'px';
-
-		}else{
-
-			this.children[p].sizeW = w;
-			this.children[p].sizeH = h;
-
-			this.children[p].sizeOff  = w;
-			this.children[p].sizeMain = h;
-
-			var x = 0;
-			if (this.anchorEdge == this.EDGE.LEFT){
-				x = this.children[p].cenX - (this.itemWidth / 2);
-			}else if (this.anchorEdge == this.EDGE.RIGHT){
+		}
+		this.children[p].usualX = Math.round(this.children[p].cenX - (w / 2));
+		this.children[p].domNode.style.top = y + "px";
+		this.children[p].domNode.style.left = this.children[p].usualX + "px";
+	} else {
+		this.children[p].sizeW = w;
+		this.children[p].sizeH = h;
+		this.children[p].sizeOff = w;
+		this.children[p].sizeMain = h;
+		var x = 0;
+		if (this.anchorEdge == this.EDGE.LEFT) {
+			x = this.children[p].cenX - (this.itemWidth / 2);
+		} else {
+			if (this.anchorEdge == this.EDGE.RIGHT) {
 				x = this.children[p].cenX - (w - (this.itemWidth / 2));
-			}else{
+			} else {
 				x = this.children[p].cenX - (w / 2);
 			}
-
-			this.children[p].domNode.style.left = x + 'px';
-			this.children[p].usualY = Math.round(this.children[p].cenY - (h / 2));
-
-			this.children[p].domNode.style.top  = this.children[p].usualY + 'px';
 		}
-
-		this.children[p].domNode.style.width  = w + 'px';
-		this.children[p].domNode.style.height = h + 'px';
-
-		if (this.children[p].svgNode){
-			this.children[p].svgNode.setSize(w, h);
+		this.children[p].domNode.style.left = x + "px";
+		this.children[p].usualY = Math.round(this.children[p].cenY - (h / 2));
+		this.children[p].domNode.style.top = this.children[p].usualY + "px";
+	}
+	this.children[p].domNode.style.width = w + "px";
+	this.children[p].domNode.style.height = h + "px";
+	if (this.children[p].svgNode) {
+		this.children[p].svgNode.setSize(w, h);
+	}
+}, _positionElementsFrom:function (p, offset) {
+	var pos = 0;
+	if (this.isHorizontal) {
+		pos = Math.round(this.children[p].usualX + offset);
+		this.children[p].domNode.style.left = pos + "px";
+	} else {
+		pos = Math.round(this.children[p].usualY + offset);
+		this.children[p].domNode.style.top = pos + "px";
+	}
+	this._positionLabel(this.children[p]);
+	var bpos = pos;
+	for (var i = p - 1; i >= 0; i--) {
+		bpos -= this.children[i].sizeMain;
+		if (this.isHorizontal) {
+			this.children[i].domNode.style.left = bpos + "px";
+		} else {
+			this.children[i].domNode.style.top = bpos + "px";
 		}
-	},
-
-	_positionElementsFrom: function(p, offset){
-
-		var pos = 0;
-
-		if (this.isHorizontal){
-			pos = Math.round(this.children[p].usualX + offset);
-			this.children[p].domNode.style.left = pos + 'px';
-		}else{
-			pos = Math.round(this.children[p].usualY + offset);
-			this.children[p].domNode.style.top = pos + 'px';
+		this._positionLabel(this.children[i]);
+	}
+	var apos = pos;
+	for (var i = p + 1; i < this.itemCount; i++) {
+		apos += this.children[i - 1].sizeMain;
+		if (this.isHorizontal) {
+			this.children[i].domNode.style.left = apos + "px";
+		} else {
+			this.children[i].domNode.style.top = apos + "px";
 		}
-		this._positionLabel(this.children[p]);
-
-
-		//
-		// position before
-		//
-		var bpos = pos;
-		for(var i=p-1; i>=0; i--){
-			bpos -= this.children[i].sizeMain;
-
-			if (this.isHorizontal){
-				this.children[i].domNode.style.left = bpos + 'px';
-			}else{
-				this.children[i].domNode.style.top = bpos + 'px';
-			}
-			this._positionLabel(this.children[i]);
-		}
-
-		//
-		// position after
-		//
-		var apos = pos;
-		for(var i=p+1; i<this.itemCount; i++){
-			apos += this.children[i-1].sizeMain;
-
-			if (this.isHorizontal){
-				this.children[i].domNode.style.left = apos + 'px';
-			}else{
-				this.children[i].domNode.style.top = apos + 'px';
-			}
-			this._positionLabel(this.children[i]);
-		}
-
-	},
-
-	_positionLabel: function(itm){
-
-		var x = 0;
-		var y = 0;
-		
-		var mb = dojo.html.getMarginBox(itm.lblNode);
-
-		if (this.labelEdge == this.EDGE.TOP){
-			x = Math.round((itm.sizeW / 2) - (mb.width / 2));
-			y = -mb.height;
-		}
-
-		if (this.labelEdge == this.EDGE.BOTTOM){
-			x = Math.round((itm.sizeW / 2) - (mb.width / 2));
-			y = itm.sizeH;
-		}
-
-		if (this.labelEdge == this.EDGE.LEFT){
-			x = -mb.width;
-			y = Math.round((itm.sizeH / 2) - (mb.height / 2));
-		}
-
-		if (this.labelEdge == this.EDGE.RIGHT){
-			x = itm.sizeW;
-			y = Math.round((itm.sizeH / 2) - (mb.height / 2));
-		}
-
-		itm.lblNode.style.left = x + 'px';
-		itm.lblNode.style.top  = y + 'px';
-	},
-
-	_calcHitGrid: function(){
-
-		var pos = dojo.html.getAbsolutePosition(this.domNode, true);
-
-		this.hitX1 = pos.x - this.proximityLeft;
-		this.hitY1 = pos.y - this.proximityTop;
-		this.hitX2 = this.hitX1 + this.totalWidth;
-		this.hitY2 = this.hitY1 + this.totalHeight;
-
-		//dojo.debug(this.hitX1+','+this.hitY1+' // '+this.hitX2+','+this.hitY2);
-	},
-
-	_toEdge: function(inp, def){
-		return this.EDGE[inp.toUpperCase()] || def;
-	},
-	
-	_expandSlowly: function(){
-		// summary: slowly expand the image to user specified max size
-		if( !this.isOver ){ return; }
-		this.timerScale += 0.2;
-		this._paint();
-		if ( this.timerScale<1.0 ) {
-			dojo.lang.setTimeout(this, "_expandSlowly", 10);
-		}
-	},
-
-	destroy: function(){
-		// need to disconnect when we destroy
-		dojo.event.disconnect(document.documentElement, "onmouseout", this, "_onBodyOut");
-		dojo.event.disconnect(document.documentElement, "onmousemove", this, "_onMouseMove");
-		dojo.widget.FisheyeList.superclass.destroy.call(this);
+		this._positionLabel(this.children[i]);
 	}
-});
-
-dojo.widget.defineWidget(
-	"dojo.widget.FisheyeListItem",
-	dojo.widget.HtmlWidget,
-{
-	/*
-	 * summary
-	 *	Menu item inside of a FisheyeList.
-	 *	See FisheyeList documentation for details on usage.
-	 */
-
-	// iconSrc: String
-	//	pathname to image file (jpg, gif, png, etc.) of icon for this menu item
-	iconSrc: "",
-
-	// svgSrc: String
-	//	pathname to svg file of icon for this menu item
-	svgSrc: "",
-	
-	// caption: String
-	//	label to print next to the icon, when it is moused-over
-	caption: "",
-
-	// id: String
-	//	will be set to the id of the orginal div element
-	id: "",
-
-	_blankImgPath: dojo.uri.dojoUri("src/widget/templates/images/blank.gif"),
-
-	templateString:
-		'<div class="dojoHtmlFisheyeListItem">' +
-		'  <img class="dojoHtmlFisheyeListItemImage" dojoAttachPoint="imgNode" dojoAttachEvent="onMouseOver;onMouseOut;onClick">' +
-		'  <div class="dojoHtmlFisheyeListItemLabel" dojoAttachPoint="lblNode"></div>' +
-		'</div>',
-	
-	fillInTemplate: function() {
-		//
-		// set image
-		// TODO: turn on/off SVG support based on browser version.
-		// this.parent.enableCrappySvgSupport is not available to this function
-		//
-		if (this.svgSrc != ""){
-			this.svgNode = this._createSvgNode(this.svgSrc);
-			this.domNode.appendChild(this.svgNode);
-			this.imgNode.style.display = 'none';
-		} else if((this.iconSrc.toLowerCase().substring(this.iconSrc.length-4)==".png")&&(dojo.render.html.ie)&&(!dojo.render.html.ie70)){
-			/* we set the id of the new fisheyeListItem to the id of the div defined in the HTML */
-			if (dojo.dom.hasParent(this.imgNode) && this.id != ""){
+}, _positionLabel:function (itm) {
+	var x = 0;
+	var y = 0;
+	var mb = dojo.html.getMarginBox(itm.lblNode);
+	if (this.labelEdge == this.EDGE.TOP) {
+		x = Math.round((itm.sizeW / 2) - (mb.width / 2));
+		y = -mb.height;
+	}
+	if (this.labelEdge == this.EDGE.BOTTOM) {
+		x = Math.round((itm.sizeW / 2) - (mb.width / 2));
+		y = itm.sizeH;
+	}
+	if (this.labelEdge == this.EDGE.LEFT) {
+		x = -mb.width;
+		y = Math.round((itm.sizeH / 2) - (mb.height / 2));
+	}
+	if (this.labelEdge == this.EDGE.RIGHT) {
+		x = itm.sizeW;
+		y = Math.round((itm.sizeH / 2) - (mb.height / 2));
+	}
+	itm.lblNode.style.left = x + "px";
+	itm.lblNode.style.top = y + "px";
+}, _calcHitGrid:function () {
+	var pos = dojo.html.getAbsolutePosition(this.domNode, true);
+	this.hitX1 = pos.x - this.proximityLeft;
+	this.hitY1 = pos.y - this.proximityTop;
+	this.hitX2 = this.hitX1 + this.totalWidth;
+	this.hitY2 = this.hitY1 + this.totalHeight;
+}, _toEdge:function (inp, def) {
+	return this.EDGE[inp.toUpperCase()] || def;
+}, _expandSlowly:function () {
+	if (!this.isOver) {
+		return;
+	}
+	this.timerScale += 0.2;
+	this._paint();
+	if (this.timerScale < 1) {
+		dojo.lang.setTimeout(this, "_expandSlowly", 10);
+	}
+}, destroy:function () {
+	dojo.event.disconnect(document.documentElement, "onmouseout", this, "_onBodyOut");
+	dojo.event.disconnect(document.documentElement, "onmousemove", this, "_onMouseMove");
+	dojo.widget.FisheyeList.superclass.destroy.call(this);
+}});
+dojo.widget.defineWidget("dojo.widget.FisheyeListItem", dojo.widget.HtmlWidget, {iconSrc:"", svgSrc:"", caption:"", id:"", _blankImgPath:dojo.uri.moduleUri("dojo.widget", "templates/images/blank.gif"), templateString:"<div class=\"dojoHtmlFisheyeListItem\">" + "  <img class=\"dojoHtmlFisheyeListItemImage\" dojoAttachPoint=\"imgNode\" dojoAttachEvent=\"onMouseOver;onMouseOut;onClick\">" + "  <div class=\"dojoHtmlFisheyeListItemLabel\" dojoAttachPoint=\"lblNode\"></div>" + "</div>", fillInTemplate:function () {
+	if (this.svgSrc != "") {
+		this.svgNode = this._createSvgNode(this.svgSrc);
+		this.domNode.appendChild(this.svgNode);
+		this.imgNode.style.display = "none";
+	} else {
+		if ((this.iconSrc.toLowerCase().substring(this.iconSrc.length - 4) == ".png") && (dojo.render.html.ie) && (!dojo.render.html.ie70)) {
+			if (dojo.dom.hasParent(this.imgNode) && this.id != "") {
 				var parent = this.imgNode.parentNode;
 				parent.setAttribute("id", this.id);
 			}
-			this.imgNode.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this.iconSrc+"', sizingMethod='scale')";
+			this.imgNode.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.iconSrc + "', sizingMethod='scale')";
 			this.imgNode.src = this._blankImgPath.toString();
 		} else {
-			if (dojo.dom.hasParent(this.imgNode) && this.id != ""){
+			if (dojo.dom.hasParent(this.imgNode) && this.id != "") {
 				var parent = this.imgNode.parentNode;
 				parent.setAttribute("id", this.id);
 			}
 			this.imgNode.src = this.iconSrc;
 		}
-
-		//
-		// Label
-		//
-		if ( this.lblNode ) {
-			this.lblNode.appendChild(document.createTextNode(this.caption));
+	}
+	if (this.lblNode) {
+		this.lblNode.appendChild(document.createTextNode(this.caption));
+	}
+	dojo.html.disableSelection(this.domNode);
+}, _createSvgNode:function (src) {
+	var elm = document.createElement("embed");
+	elm.src = src;
+	elm.type = "image/svg+xml";
+	elm.style.width = "1px";
+	elm.style.height = "1px";
+	elm.loaded = 0;
+	elm.setSizeOnLoad = false;
+	elm.onload = function () {
+		this.svgRoot = this.getSVGDocument().rootElement;
+		this.svgDoc = this.getSVGDocument().documentElement;
+		this.zeroWidth = this.svgRoot.width.baseVal.value;
+		this.zeroHeight = this.svgRoot.height.baseVal.value;
+		this.loaded = true;
+		if (this.setSizeOnLoad) {
+			this.setSize(this.setWidth, this.setHeight);
 		}
-		dojo.html.disableSelection(this.domNode);
-	},
-	
-	_createSvgNode: function(src){
-		var elm = document.createElement('embed');
-		elm.src = src;
-		elm.type = 'image/svg+xml';
-		//elm.style.border = '1px solid black';
-		elm.style.width = '1px';
-		elm.style.height = '1px';
-		elm.loaded = 0;
-		elm.setSizeOnLoad = false;
-
-		elm.onload = function(){
-			this.svgRoot = this.getSVGDocument().rootElement;
-			this.svgDoc = this.getSVGDocument().documentElement;
-			this.zeroWidth = this.svgRoot.width.baseVal.value;
-			this.zeroHeight = this.svgRoot.height.baseVal.value;
-			this.loaded = true;
-
-			if (this.setSizeOnLoad){
-				this.setSize(this.setWidth, this.setHeight);
-			}
+	};
+	elm.setSize = function (w, h) {
+		if (!this.loaded) {
+			this.setWidth = w;
+			this.setHeight = h;
+			this.setSizeOnLoad = true;
+			return;
 		}
-
-		elm.setSize = function(w, h){
-			if (!this.loaded){
-				this.setWidth = w;
-				this.setHeight = h;
-				this.setSizeOnLoad = true;
-				return;
+		this.style.width = w + "px";
+		this.style.height = h + "px";
+		this.svgRoot.width.baseVal.value = w;
+		this.svgRoot.height.baseVal.value = h;
+		var scale_x = w / this.zeroWidth;
+		var scale_y = h / this.zeroHeight;
+		for (var i = 0; i < this.svgDoc.childNodes.length; i++) {
+			if (this.svgDoc.childNodes[i].setAttribute) {
+				this.svgDoc.childNodes[i].setAttribute("transform", "scale(" + scale_x + "," + scale_y + ")");
 			}
-
-			this.style.width = w+'px';
-			this.style.height = h+'px';
-			this.svgRoot.width.baseVal.value = w;
-			this.svgRoot.height.baseVal.value = h;
-
-			var scale_x = w / this.zeroWidth;
-			var scale_y = h / this.zeroHeight;
-
-			for(var i=0; i<this.svgDoc.childNodes.length; i++){
-				if (this.svgDoc.childNodes[i].setAttribute){
-					this.svgDoc.childNodes[i].setAttribute( "transform", "scale("+scale_x+","+scale_y+")" );
-				}
-			}
 		}
-
-		return elm;
-	},
-
-	onMouseOver: function(/*Event*/ e) {
-		// summary: callback when user moves mouse over this menu item
-		// in conservative mode, don't activate the menu until user mouses over an icon
-		if( !this.parent.isOver ){
-			this.parent._setActive(e);
-		}
-		if ( this.caption != "" ) {
-			dojo.html.addClass(this.lblNode, "selected");
-			this.parent._positionLabel(this);
-		}
-	},
-	
-	onMouseOut: function(/*Event*/ e) {
-		// summary: callback when user moves mouse off of this menu item
-		dojo.html.removeClass(this.lblNode, "selected");
-	},
-
-	onClick: function(/*Event*/ e) {
-		// summary: user overridable callback when user clicks this menu item
+	};
+	return elm;
+}, onMouseOver:function (e) {
+	if (!this.parent.isOver) {
+		this.parent._setActive(e);
 	}
-});
+	if (this.caption != "") {
+		dojo.html.addClass(this.lblNode, "selected");
+		this.parent._positionLabel(this);
+	}
+}, onMouseOut:function (e) {
+	dojo.html.removeClass(this.lblNode, "selected");
+}, onClick:function (e) {
+}});
 
 
 __CPAN_FILE__ src/widget/ProgressBar.js
@@ -33550,358 +21273,181 @@
 */
 
 dojo.provide("dojo.widget.ProgressBar");
-
-dojo.require("dojo.widget.*"); 
+dojo.require("dojo.widget.*");
 dojo.require("dojo.event");
 dojo.require("dojo.dom");
 dojo.require("dojo.html.style");
 dojo.require("dojo.string.*");
 dojo.require("dojo.lfx.*");
-
-
-dojo.widget.defineWidget(
-	"dojo.widget.ProgressBar",
-	dojo.widget.HtmlWidget,
-	{
-		// summary:
-		// a progress widget, with some calculation and server polling capabilities
-		//
-		// description: 
-		// (implementation) four overlapped divs:
-		// (1) lower z-index
-		// (4) higher z-index
-		// back and front percent label have the same content: when the vertical line (*)
-		// partially hides the backPercentLabel, the frontPercentLabel becomes visible
-		// 
-		//  ________________________(1)_containerNode_________________________________
-		// |__(3)_internalProgress____________                                        |
-		// |                                  | <--- (*)                              |
-		// |     (4) frontPercentLabel        | (2) backPercentLabel                  |
-		// |__________________________________|                                       |
-		// |__________________________________________________________________________| 
-		//
-		// usage:
-		// <div dojoType="ProgressBar" frontBarClass="..." backBarClass="..."
-		//   backBarClass="..." frontBarClass="..." duration="..."
-		//   showOnlyIntegers="true|false" width="..." height="..." dataSource="..."
-		//   pollInterval="..." 
-		//   hasText="true|false" isVertical="true|false" 
-		//   progressValue="..." maxProgressValue="..."></div>
-	
-		// progressValue: String
-		// initial progress value. 
-		// with "%": percentual value, 0% <= progressValue <= 100%
-		// or without "%": absolute value, 0 <= progressValue <= maxProgressValue
-		progressValue: 0,
-		
-		// maxProgressValue: Float
-		// max sample number
-		maxProgressValue: 100,
-
-		// width: Integer
-		// ProgressBar width (pixel)
-		width: 300,
-
-		// height: Integer
-		// ProgressBar height, (pixel)
-		height: 30,
-		
-		// frontPercentClass: String
-		// css class for frontPercentLabel (4)
-		frontPercentClass: "frontPercent",
-
-		// backPercentClass: String
-		// css class for backPercentLabel (2)
-		backPercentClass: "backPercent",
-
-		// frontBarClass: String
-		// css class for containerNode (1)
-		frontBarClass: "frontBar",
-
-		// backBarClass: String
-		// css class for internalProgress (3)
-		backBarClass: "backBar",
-
-		// hasText: Boolean
-		// if true, the percent label is visible
-		hasText: false,
-
-		// isVertical: Boolean
-		// if true, the widget is vertical
-		isVertical: false,
-		
-		// showOnlyIntegers: Boolean
-		// if true, the percent label shows only integer values
-		showOnlyIntegers: false,
-		
-		// dataSource: String
-		// dataSource uri for server polling
-		dataSource: "",
-		
-		// pollInterval: Integer
-		// server poll interval
-		pollInterval: 3000,
-		
-		// duration: Integer
-		// duration of the animation
-		duration: 1000,
-
-		templatePath: dojo.uri.dojoUri("src/widget/templates/ProgressBar.html"),
-		templateCssPath: dojo.uri.dojoUri("src/widget/templates/ProgressBar.css"),
-		
-	
-		// attach points
-		containerNode: null,
-		internalProgress: null,
-	
-		// private members
-		_pixelUnitRatio: 0.0,
-		_pixelPercentRatio: 0.0,
-		_unitPercentRatio: 0.0,
-		_unitPixelRatio: 0.0,
-		_floatDimension: 0.0,
-		_intDimension: 0,
-		_progressPercentValue: "0%",
-		_floatMaxProgressValue: 0.0,
-		_dimension: "width",
-		_pixelValue: 0,
-		_oInterval: null,
-		_animation: null,
-		_animationStopped: true,
-		_progressValueBak: false,
-		_hasTextBak: false,
-
-		// public functions
-		fillInTemplate: function(args, frag){
-			this.internalProgress.className = this.frontBarClass;
-			this.containerNode.className = this.backBarClass;
-			if (this.isVertical){
-				this.internalProgress.style.bottom="0px";
-				this.internalProgress.style.left="0px";
-				this._dimension = "height";
-			} else {
-				this.internalProgress.style.top="0px";
-				this.internalProgress.style.left="0px";
-				this._dimension = "width";
+dojo.widget.defineWidget("dojo.widget.ProgressBar", dojo.widget.HtmlWidget, {progressValue:0, maxProgressValue:100, width:300, height:30, frontPercentClass:"frontPercent", backPercentClass:"backPercent", frontBarClass:"frontBar", backBarClass:"backBar", hasText:false, isVertical:false, showOnlyIntegers:false, dataSource:"", pollInterval:3000, duration:1000, templateString:"<div dojoAttachPoint=\"containerNode\" style=\"position:relative;overflow:hidden\">\n\t<div style=\"position:absolute;display:none;width:100%;text-align:center\" dojoAttachPoint=\"backPercentLabel\" class=\"dojoBackPercentLabel\"></div>\n\t<div style=\"position:absolute;overflow:hidden;width:100%;height:100%\" dojoAttachPoint=\"internalProgress\">\n\t<div style=\"position:absolute;display:none;width:100%;text-align:center\" dojoAttachPoint=\"frontPercentLabel\" class=\"dojoFrontPercentLabel\"></div></div>\n</div>\n", templateCssString:".backBar{\n\tborder:1px solid #84a3d1;\n}\n.frontBar{\n\tbackground:url(\"images/bar.gif\") repeat bottom left;\n\tbackground-attachment: fixed;\n}\n.h-frontBar{\n\tbackground:url(\"images/h-bar.gif\") repeat bottom left;\n\tbackground-attachment: fixed;\n}\n.simpleFrontBar{\n\tbackground: red;\n}\n.frontPercent,.backPercent{\n\tfont:bold 13px helvetica;\n}\n.backPercent{\n\tcolor:#293a4b;\n}\n.frontPercent{\n\tcolor:#fff;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/ProgressBar.css"), containerNode:null, internalProgress:null, _pixelUnitRatio:0, _pixelPercentRatio:0, _unitPercentRatio:0, _unitPixelRatio:0, _floatDimension:0, _intDimension:0, _progressPercentValue:"0%", _floatMaxProgressValue:0, _dimension:"width", _pixelValue:0, _oInterval:null, _animation:null, _animationStopped:true, _progressValueBak:false, _hasTextBak:false, fillInTemplate:function (args, frag) {
+	this.internalProgress.className = this.frontBarClass;
+	this.containerNode.className = this.backBarClass;
+	if (this.isVertical) {
+		this.internalProgress.style.bottom = "0px";
+		this.internalProgress.style.left = "0px";
+		this._dimension = "height";
+	} else {
+		this.internalProgress.style.top = "0px";
+		this.internalProgress.style.left = "0px";
+		this._dimension = "width";
+	}
+	this.frontPercentLabel.className = this.frontPercentClass;
+	this.backPercentLabel.className = this.backPercentClass;
+	this.progressValue = "" + this.progressValue;
+	this.domNode.style.height = this.height + "px";
+	this.domNode.style.width = this.width + "px";
+	this._intDimension = parseInt("0" + eval("this." + this._dimension));
+	this._floatDimension = parseFloat("0" + eval("this." + this._dimension));
+	this._pixelPercentRatio = this._floatDimension / 100;
+	this.setMaxProgressValue(this.maxProgressValue, true);
+	this.setProgressValue(dojo.string.trim(this.progressValue), true);
+	dojo.debug("float dimension: " + this._floatDimension);
+	dojo.debug("this._unitPixelRatio: " + this._unitPixelRatio);
+	this.showText(this.hasText);
+}, showText:function (visible) {
+	if (visible) {
+		this.backPercentLabel.style.display = "block";
+		this.frontPercentLabel.style.display = "block";
+	} else {
+		this.backPercentLabel.style.display = "none";
+		this.frontPercentLabel.style.display = "none";
+	}
+	this.hasText = visible;
+}, postCreate:function (args, frag) {
+	this.render();
+}, _backupValues:function () {
+	this._progressValueBak = this.progressValue;
+	this._hasTextBak = this.hasText;
+}, _restoreValues:function () {
+	this.setProgressValue(this._progressValueBak);
+	this.showText(this._hasTextBak);
+}, _setupAnimation:function () {
+	var _self = this;
+	dojo.debug("internalProgress width: " + this.internalProgress.style.width);
+	this._animation = dojo.lfx.html.slideTo(this.internalProgress, {top:0, left:parseInt(this.width) - parseInt(this.internalProgress.style.width)}, parseInt(this.duration), null, function () {
+		var _backAnim = dojo.lfx.html.slideTo(_self.internalProgress, {top:0, left:0}, parseInt(_self.duration));
+		dojo.event.connect(_backAnim, "onEnd", function () {
+			if (!_self._animationStopped) {
+				_self._animation.play();
 			}
-			this.frontPercentLabel.className = this.frontPercentClass;
-			this.backPercentLabel.className = this.backPercentClass;
-			this.progressValue = "" + this.progressValue; 
-			this.domNode.style.height = this.height + "px"; 
-			this.domNode.style.width = this.width + "px";
-			this._intDimension = parseInt("0" + eval("this." + this._dimension));
-			this._floatDimension = parseFloat("0" + eval("this."+this._dimension));
-			this._pixelPercentRatio = this._floatDimension/100;
-			this.setMaxProgressValue(this.maxProgressValue, true);
-			this.setProgressValue(dojo.string.trim(this.progressValue), true);
-			dojo.debug("float dimension: " + this._floatDimension);
-			dojo.debug("this._unitPixelRatio: " + this._unitPixelRatio);
-			this.showText(this.hasText);
-		},
-		showText: function(visible){
-			// summary: shows or hides the labels
-			if (visible){
-				this.backPercentLabel.style.display="block";
-				this.frontPercentLabel.style.display="block";
-			} else {
-				this.backPercentLabel.style.display="none";
-				this.frontPercentLabel.style.display="none";
-			}
-			this.hasText = visible;
-		},
-		postCreate: function(args, frag){
-			this.render();
-		},
-		_backupValues: function(){
-			this._progressValueBak = this.progressValue;
-			this._hasTextBak = this.hasText;
-		},
-		_restoreValues: function(){
-				this.setProgressValue(this._progressValueBak);
-				this.showText(this._hasTextBak);
-		},
-		_setupAnimation: function(){
-			var _self = this;
-			dojo.debug("internalProgress width: " + this.internalProgress.style.width);
-			this._animation = dojo.lfx.html.slideTo(this.internalProgress, 
-				{top: 0, left: parseInt(this.width)-parseInt(this.internalProgress.style.width)}, parseInt(this.duration), null, 
-					function(){
-						var _backAnim = dojo.lfx.html.slideTo(_self.internalProgress, 
-						{ top: 0, left: 0 }, parseInt(_self.duration));
-						dojo.event.connect(_backAnim, "onEnd", function(){
-							if (!_self._animationStopped){
-								_self._animation.play();
-							}
-							});
-						if (!_self._animationStopped){
-							_backAnim.play();
-						}
-						_backAnim = null; // <-- to avoid memory leaks in IE
-					}
-				);
-		},
-		getMaxProgressValue: function(){
-			// summary: returns the maxProgressValue
-			return this.maxProgressValue;
-		},
-		setMaxProgressValue: function(maxValue, noRender){
-			// summary: sets the maxProgressValue
-			// if noRender is true, only sets the internal max progress value
-			if (!this._animationStopped){
-				return;
-			}
-			this.maxProgressValue = maxValue;
-			this._floatMaxProgressValue = parseFloat("0" + this.maxProgressValue);
-			this._pixelUnitRatio = this._floatDimension/this.maxProgressValue;
-			this._unitPercentRatio = this._floatMaxProgressValue/100;
-			this._unitPixelRatio = this._floatMaxProgressValue/this._floatDimension;
-			this.setProgressValue(this.progressValue, true);
-			if (!noRender){
-				this.render();
-			}
-		},
-		setProgressValue: function(value, noRender){
-			// summary: sets the progressValue
-			// if value ends width "%", does a normalization
-			// if noRender is true, only sets the internal value: useful if
-			// there is a setMaxProgressValue call
-			if (!this._animationStopped){
-				return;
-			}
-			// transformations here
-			this._progressPercentValue = "0%";
-			var _value=dojo.string.trim("" + value);
-			var _floatValue = parseFloat("0" + _value);
-			var _intValue = parseInt("0" + _value);
-			var _pixelValue = 0;
-			if (dojo.string.endsWith(_value, "%", false)){
-				this._progressPercentValue = Math.min(_floatValue.toFixed(1), 100) + "%";
-				_value = Math.min((_floatValue)*this._unitPercentRatio, this.maxProgressValue);
-				_pixelValue = Math.min((_floatValue)*this._pixelPercentRatio, eval("this."+this._dimension));
-			} else {
-				this.progressValue = Math.min(_floatValue, this.maxProgressValue);
-				this._progressPercentValue = Math.min((_floatValue/this._unitPercentRatio).toFixed(1), 100) + "%";
-				_pixelValue = Math.min(_floatValue/this._unitPixelRatio, eval("this."+this._dimension));
-			}
-			this.progressValue = dojo.string.trim(_value);
-			this._pixelValue = _pixelValue;
-			if (!noRender){
-				this.render();
-			}
-		},
-		getProgressValue: function(){
-			// summary: returns the progressValue
-			return this.progressValue;
-		},
-		getProgressPercentValue: function(){
-			// summary: returns the percentual progressValue
-			return this._progressPercentValue;
-		},
-		setDataSource: function(dataSource){
-			// summary: sets the dataSource
-			this.dataSource = dataSource;
-		},
-		setPollInterval: function(pollInterval){
-			// summary: sets the pollInterval
-			this.pollInterval = pollInterval;
-		},
-		start: function(){
-			// summary: starts the server polling
-			var _showFunction = dojo.lang.hitch(this, this._showRemoteProgress);
-			this._oInterval = setInterval(_showFunction, this.pollInterval);
-		},
-		startAnimation: function(){
-			// summary: starts the left-right animation, useful when
-			// the user doesn't know how much time the operation will last
-			if (this._animationStopped) {
-				this._backupValues();
-				this.setProgressValue("10%");
-				this._animationStopped = false;
-				this._setupAnimation();
-				this.showText(false);
-				this.internalProgress.style.height="105%";
-				this._animation.play();
-			}
-		},
-		stopAnimation: function(){
-			// summary: stops the left-right animation
-			if (this._animation) {
-				this._animationStopped = true;
-				this._animation.stop();
-				this.internalProgress.style.height="100%";
-				this.internalProgress.style.left = "0px";
-				this._restoreValues();
-				this._setLabelPosition();
-			}
-		},
-		_showRemoteProgress: function(){
-			var _self = this;
-			if ( (this.getMaxProgressValue() == this.getProgressValue()) &&
-				this._oInterval){
-				clearInterval(this._oInterval);
-				this._oInterval = null;
-				this.setProgressValue("100%");
-				return;	
-			}
-			var bArgs = {
-				url: _self.dataSource,
-				method: "POST",
-				mimetype: "text/json",
-				error: function(type, errorObj){
-					dojo.debug("[ProgressBar] showRemoteProgress error");
-				},
-				load: function(type, data, evt){
-					_self.setProgressValue(
-						(_self._oInterval ? data["progress"] : "100%")
-					);
-				}
-			};
-			dojo.io.bind(bArgs);
-		},
-		render: function(){
-			// summary: renders the ProgressBar, based on current values
-			this._setPercentLabel(dojo.string.trim(this._progressPercentValue));
-			this._setPixelValue(this._pixelValue);
-			this._setLabelPosition();
-		},
-
-		_setLabelPosition: function(){
-			var _widthFront = 
-				dojo.html.getContentBox(this.frontPercentLabel).width;
-			var _heightFront = 
-				dojo.html.getContentBox(this.frontPercentLabel).height;
-			var _widthBack = 
-				dojo.html.getContentBox(this.backPercentLabel).width;
-			var _heightBack = 
-				dojo.html.getContentBox(this.backPercentLabel).height;
-			var _leftFront = (parseInt(this.width) - _widthFront)/2 + "px";
-			var _bottomFront = (parseInt(this.height) - parseInt(_heightFront))/2 + "px";
-			var _leftBack = (parseInt(this.width) - _widthBack)/2 + "px";
-			var _bottomBack = (parseInt(this.height) - parseInt(_heightBack))/2 + "px";
-			this.frontPercentLabel.style.left = _leftFront;
-			this.backPercentLabel.style.left = _leftBack; 
-			this.frontPercentLabel.style.bottom = _bottomFront;
-			this.backPercentLabel.style.bottom = _bottomBack; 
-		},
-		_setPercentLabel: function(percentValue){
-			dojo.dom.removeChildren(this.frontPercentLabel);
-			dojo.dom.removeChildren(this.backPercentLabel);
-			var _percentValue = this.showOnlyIntegers == false ? 
-				percentValue : parseInt(percentValue) + "%";
-			this.frontPercentLabel.
-				appendChild(document.createTextNode(_percentValue));
-			this.backPercentLabel.
-				appendChild(document.createTextNode(_percentValue));
-		},
-		_setPixelValue: function(value){
-			eval("this.internalProgress.style." + this._dimension + " = " + value + " + 'px'");
-			this.onChange();
-		},
-		onChange: function(){
+		});
+		if (!_self._animationStopped) {
+			_backAnim.play();
 		}
+		_backAnim = null;
 	});
-	
+}, getMaxProgressValue:function () {
+	return this.maxProgressValue;
+}, setMaxProgressValue:function (maxValue, noRender) {
+	if (!this._animationStopped) {
+		return;
+	}
+	this.maxProgressValue = maxValue;
+	this._floatMaxProgressValue = parseFloat("0" + this.maxProgressValue);
+	this._pixelUnitRatio = this._floatDimension / this.maxProgressValue;
+	this._unitPercentRatio = this._floatMaxProgressValue / 100;
+	this._unitPixelRatio = this._floatMaxProgressValue / this._floatDimension;
+	this.setProgressValue(this.progressValue, true);
+	if (!noRender) {
+		this.render();
+	}
+}, setProgressValue:function (value, noRender) {
+	if (!this._animationStopped) {
+		return;
+	}
+	this._progressPercentValue = "0%";
+	var _value = dojo.string.trim("" + value);
+	var _floatValue = parseFloat("0" + _value);
+	var _intValue = parseInt("0" + _value);
+	var _pixelValue = 0;
+	if (dojo.string.endsWith(_value, "%", false)) {
+		this._progressPercentValue = Math.min(_floatValue.toFixed(1), 100) + "%";
+		_value = Math.min((_floatValue) * this._unitPercentRatio, this.maxProgressValue);
+		_pixelValue = Math.min((_floatValue) * this._pixelPercentRatio, eval("this." + this._dimension));
+	} else {
+		this.progressValue = Math.min(_floatValue, this.maxProgressValue);
+		this._progressPercentValue = Math.min((_floatValue / this._unitPercentRatio).toFixed(1), 100) + "%";
+		_pixelValue = Math.min(_floatValue / this._unitPixelRatio, eval("this." + this._dimension));
+	}
+	this.progressValue = dojo.string.trim(_value);
+	this._pixelValue = _pixelValue;
+	if (!noRender) {
+		this.render();
+	}
+}, getProgressValue:function () {
+	return this.progressValue;
+}, getProgressPercentValue:function () {
+	return this._progressPercentValue;
+}, setDataSource:function (dataSource) {
+	this.dataSource = dataSource;
+}, setPollInterval:function (pollInterval) {
+	this.pollInterval = pollInterval;
+}, start:function () {
+	var _showFunction = dojo.lang.hitch(this, this._showRemoteProgress);
+	this._oInterval = setInterval(_showFunction, this.pollInterval);
+}, startAnimation:function () {
+	if (this._animationStopped) {
+		this._backupValues();
+		this.setProgressValue("10%");
+		this._animationStopped = false;
+		this._setupAnimation();
+		this.showText(false);
+		this.internalProgress.style.height = "105%";
+		this._animation.play();
+	}
+}, stopAnimation:function () {
+	if (this._animation) {
+		this._animationStopped = true;
+		this._animation.stop();
+		this.internalProgress.style.height = "100%";
+		this.internalProgress.style.left = "0px";
+		this._restoreValues();
+		this._setLabelPosition();
+	}
+}, _showRemoteProgress:function () {
+	var _self = this;
+	if ((this.getMaxProgressValue() == this.getProgressValue()) && this._oInterval) {
+		clearInterval(this._oInterval);
+		this._oInterval = null;
+		this.setProgressValue("100%");
+		return;
+	}
+	var bArgs = {url:_self.dataSource, method:"POST", mimetype:"text/json", error:function (type, errorObj) {
+		dojo.debug("[ProgressBar] showRemoteProgress error");
+	}, load:function (type, data, evt) {
+		_self.setProgressValue((_self._oInterval ? data["progress"] : "100%"));
+	}};
+	dojo.io.bind(bArgs);
+}, render:function () {
+	this._setPercentLabel(dojo.string.trim(this._progressPercentValue));
+	this._setPixelValue(this._pixelValue);
+	this._setLabelPosition();
+}, _setLabelPosition:function () {
+	var _widthFront = dojo.html.getContentBox(this.frontPercentLabel).width;
+	var _heightFront = dojo.html.getContentBox(this.frontPercentLabel).height;
+	var _widthBack = dojo.html.getContentBox(this.backPercentLabel).width;
+	var _heightBack = dojo.html.getContentBox(this.backPercentLabel).height;
+	var _leftFront = (parseInt(this.width) - _widthFront) / 2 + "px";
+	var _bottomFront = (parseInt(this.height) - parseInt(_heightFront)) / 2 + "px";
+	var _leftBack = (parseInt(this.width) - _widthBack) / 2 + "px";
+	var _bottomBack = (parseInt(this.height) - parseInt(_heightBack)) / 2 + "px";
+	this.frontPercentLabel.style.left = _leftFront;
+	this.backPercentLabel.style.left = _leftBack;
+	this.frontPercentLabel.style.bottom = _bottomFront;
+	this.backPercentLabel.style.bottom = _bottomBack;
+}, _setPercentLabel:function (percentValue) {
+	dojo.dom.removeChildren(this.frontPercentLabel);
+	dojo.dom.removeChildren(this.backPercentLabel);
+	var _percentValue = this.showOnlyIntegers == false ? percentValue : parseInt(percentValue) + "%";
+	this.frontPercentLabel.appendChild(document.createTextNode(_percentValue));
+	this.backPercentLabel.appendChild(document.createTextNode(_percentValue));
+}, _setPixelValue:function (value) {
+	eval("this.internalProgress.style." + this._dimension + " = " + value + " + 'px'");
+	this.onChange();
+}, onChange:function () {
+}});
 
+
 __CPAN_FILE__ src/widget/UsTextbox.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -33914,89 +21460,30 @@
 */
 
 dojo.provide("dojo.widget.UsTextbox");
-
 dojo.require("dojo.widget.ValidationTextbox");
 dojo.require("dojo.validate.us");
-
-dojo.widget.defineWidget(
-	"dojo.widget.UsStateTextbox",
-	dojo.widget.ValidationTextbox,
-	{
-		// summary:
-		//		a Textbox which tests for a United States state abbreviation
-
-		// allowTerritories: Boolean
-		//		  Allow Guam, Puerto Rico, etc.  Default is true.
-
-		// allowMilitary: Boolean
-		//     Allow military 'states', e.g. Armed Forces Europe (AE). Default is true.
-
-		mixInProperties: function(/*Object*/localProperties){
-			// summary: see dojo.widget.Widget
-
-			// Initialize properties in super-class.
-			dojo.widget.UsStateTextbox.superclass.mixInProperties.apply(this, arguments);
-
-			// Get properties from markup attributes, and assign to flags object.
-			if(localProperties.allowterritories){
-				this.flags.allowTerritories = (localProperties.allowterritories == "true");
-			}
-			if(localProperties.allowmilitary){
-				this.flags.allowMilitary = (localProperties.allowmilitary == "true");
-			}
-		},
-
-		isValid: function(){
-			// summary: see dojo.widget.ValidationTextbox
-			return dojo.validate.us.isState(this.textbox.value, this.flags);
-		}
+dojo.widget.defineWidget("dojo.widget.UsStateTextbox", dojo.widget.ValidationTextbox, {mixInProperties:function (localProperties) {
+	dojo.widget.UsStateTextbox.superclass.mixInProperties.apply(this, arguments);
+	if (localProperties.allowterritories) {
+		this.flags.allowTerritories = (localProperties.allowterritories == "true");
 	}
-);
-
-/*
-  ****** UsZipTextbox ******
-
-  A subclass of ValidationTextbox.
-  Over-rides isValid to test if input is a US zip code.
-  Validates zip-5 and zip-5 plus 4.
-*/
-dojo.widget.defineWidget(
-	"dojo.widget.UsZipTextbox",
-	dojo.widget.ValidationTextbox,
-	{
-		// summary: a Textbox which tests for a United States postal code
-		isValid: function(){
-			// summary: see dojo.widget.ValidationTextbox
-			return dojo.validate.us.isZipCode(this.textbox.value);
-		}
+	if (localProperties.allowmilitary) {
+		this.flags.allowMilitary = (localProperties.allowmilitary == "true");
 	}
-);
+}, isValid:function () {
+	return dojo.validate.us.isState(this.textbox.value, this.flags);
+}});
+dojo.widget.defineWidget("dojo.widget.UsZipTextbox", dojo.widget.ValidationTextbox, {isValid:function () {
+	return dojo.validate.us.isZipCode(this.textbox.value);
+}});
+dojo.widget.defineWidget("dojo.widget.UsSocialSecurityNumberTextbox", dojo.widget.ValidationTextbox, {isValid:function () {
+	return dojo.validate.us.isSocialSecurityNumber(this.textbox.value);
+}});
+dojo.widget.defineWidget("dojo.widget.UsPhoneNumberTextbox", dojo.widget.ValidationTextbox, {isValid:function () {
+	return dojo.validate.us.isPhoneNumber(this.textbox.value);
+}});
 
-dojo.widget.defineWidget(
-	"dojo.widget.UsSocialSecurityNumberTextbox",
-	dojo.widget.ValidationTextbox,
-	{
-		// summary: a Textbox which tests for a United States Social Security number
-		isValid: function(){
-			// summary: see dojo.widget.ValidationTextbox
-			return dojo.validate.us.isSocialSecurityNumber(this.textbox.value);
-		}
-	}
-);
 
-dojo.widget.defineWidget(
-	"dojo.widget.UsPhoneNumberTextbox",
-	dojo.widget.ValidationTextbox,
-	{
-		// summary: a Textbox which tests for a United States 10-digit telephone number, extension is optional.
-
-		isValid: function(){
-			// summary: see dojo.widget.ValidationTextbox
-			return dojo.validate.us.isPhoneNumber(this.textbox.value);
-		}
-	}
-);
-
 __CPAN_FILE__ src/widget/TreeControllerExtension.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -34008,91 +21495,55 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-/**
- * Additional tree utils
- *
- */
 dojo.provide("dojo.widget.TreeControllerExtension");
-
-dojo.declare(
-	"dojo.widget.TreeControllerExtension",
-	null,
-{
-	saveExpandedIndices: function(node, field) {
-		var obj = {};
-
-		for(var i=0; i<node.children.length; i++) {
-			if (node.children[i].isExpanded) {
-				var key = dojo.lang.isUndefined(field) ? i : node.children[i][field];
-				obj[key] = this.saveExpandedIndices(node.children[i], field);
-			}
+dojo.declare("dojo.widget.TreeControllerExtension", null, {saveExpandedIndices:function (node, field) {
+	var obj = {};
+	for (var i = 0; i < node.children.length; i++) {
+		if (node.children[i].isExpanded) {
+			var key = dojo.lang.isUndefined(field) ? i : node.children[i][field];
+			obj[key] = this.saveExpandedIndices(node.children[i], field);
 		}
-
-		return obj;
-	},
-
-
-	restoreExpandedIndices: function(node, savedIndices, field) {
-		var _this = this;
-
-		var handler = function(node, savedIndices) {
-			this.node = node; //.children[i];
-			this.savedIndices = savedIndices; //[i];
-			// recursively read next savedIndices level and apply to opened node
-			this.process = function() {
-				//dojo.debug("Callback applied for "+this.node);
-				_this.restoreExpandedIndices(this.node, this.savedIndices, field);
-			};
+	}
+	return obj;
+}, restoreExpandedIndices:function (node, savedIndices, field) {
+	var _this = this;
+	var handler = function (node, savedIndices) {
+		this.node = node;
+		this.savedIndices = savedIndices;
+		this.process = function () {
+			_this.restoreExpandedIndices(this.node, this.savedIndices, field);
+		};
+	};
+	for (var i = 0; i < node.children.length; i++) {
+		var child = node.children[i];
+		var found = false;
+		var key = -1;
+		if (dojo.lang.isUndefined(field) && savedIndices[i]) {
+			found = true;
+			key = i;
 		}
-
-
-		for(var i=0; i<node.children.length; i++) {
-			var child = node.children[i];
-
-			var found = false;
-			var key = -1;
-
-			//dojo.debug("Check "+child)
-			// process field set case
-			if (dojo.lang.isUndefined(field) && savedIndices[i]) {
-				found = true;
-				key = i;
-			}
-
-			// process case when field is not set
-			if (field) {
-				for(var key in savedIndices) {
-					//dojo.debug("Compare "+key+" "+child[field])
-					if (key == child[field]) {
-						found = true;
-						break;
-					}
+		if (field) {
+			for (var key in savedIndices) {
+				if (key == child[field]) {
+					found = true;
+					break;
 				}
 			}
-
-			// if we found anything - expand it
-			if (found) {
-				//dojo.debug("Found at "+key)
-				var h = new handler(child, savedIndices[key]);
-				_this.expand(child, false, h, h.process);
-			} else if (child.isExpanded) { // not found, so collapse
-				//dojo.debug("Collapsing all descendants "+node.children[i])
-				dojo.lang.forEach(child.getDescendants(), function(elem) { _this.collapse(elem); });
-				//this.collapse(node.children[i]);
+		}
+		if (found) {
+			var h = new handler(child, savedIndices[key]);
+			_this.expand(child, false, h, h.process);
+		} else {
+			if (child.isExpanded) {
+				dojo.lang.forEach(child.getDescendants(), function (elem) {
+					_this.collapse(elem);
+				});
 			}
-
 		}
-
-
 	}
+}});
 
-});
 
-
-
-
-
-
 __CPAN_FILE__ src/widget/RealNumberTextbox.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -34105,78 +21556,44 @@
 */
 
 dojo.provide("dojo.widget.RealNumberTextbox");
-
 dojo.require("dojo.widget.IntegerTextbox");
 dojo.require("dojo.validate.common");
-
-dojo.widget.defineWidget(
-	"dojo.widget.RealNumberTextbox",
-	dojo.widget.IntegerTextbox,
-	{
-		/*
-		  summary
-			A subclass that extends IntegerTextbox.
-			Over-rides isValid/isInRange to test for real number input.
-			Has 5 new properties that can be specified as attributes in the markup.
-		
-		  places: Integer
-		  	The exact number of decimal places.  If omitted, it's unlimited and optional.
-	
-		  exponent: Boolean
-		  	Can be true or false.  If omitted the exponential part is optional.
-	
-		  eSigned: Boolean
-		  	Is the exponent signed?  Can be true or false, if omitted the sign is optional.
-	
-		  min: Number
-			Minimum signed value.  Default is -Infinity.
-	
-		  max: Number
-		  	Maximum signed value.  Default is +Infinity
-		*/
-
-		mixInProperties: function(localProperties, frag){
-			// First initialize properties in super-class.
-			dojo.widget.RealNumberTextbox.superclass.mixInProperties.apply(this, arguments);
-	
-			// Get properties from markup attributes, and assign to flags object.
-			if (localProperties.places){ 
-				this.flags.places = Number(localProperties.places);
-			}
-			if((localProperties.exponent == "true")||
-				(localProperties.exponent == "always")){
-				this.flags.exponent = true;
-			}else if((localProperties.exponent == "false")||(localProperties.exponent == "never")){
-				this.flags.exponent = false;
-			}else{
-				this.flags.exponent = [ true, false ]; // optional
-			}
-			if((localProperties.esigned == "true")||(localProperties.esigned == "always")){
-				this.flags.eSigned = true;
-			}else if((localProperties.esigned == "false")||(localProperties.esigned == "never")){
-				this.flags.eSigned = false;
-			}else{
-				this.flags.eSigned = [ true, false ]; // optional
-			}
-			if(localProperties.min){ 
-				this.flags.min = parseFloat(localProperties.min);
-			}
-			if(localProperties.max){ 
-				this.flags.max = parseFloat(localProperties.max);
-			}
-		},
-
-		// Over-ride for real number validation
-		isValid: function(){
-			return dojo.validate.isRealNumber(this.textbox.value, this.flags);
-		},
-		isInRange: function(){
-			return dojo.validate.isInRange(this.textbox.value, this.flags);
+dojo.widget.defineWidget("dojo.widget.RealNumberTextbox", dojo.widget.IntegerTextbox, {mixInProperties:function (localProperties, frag) {
+	dojo.widget.RealNumberTextbox.superclass.mixInProperties.apply(this, arguments);
+	if (localProperties.places) {
+		this.flags.places = Number(localProperties.places);
+	}
+	if ((localProperties.exponent == "true") || (localProperties.exponent == "always")) {
+		this.flags.exponent = true;
+	} else {
+		if ((localProperties.exponent == "false") || (localProperties.exponent == "never")) {
+			this.flags.exponent = false;
+		} else {
+			this.flags.exponent = [true, false];
 		}
-
 	}
-);
+	if ((localProperties.esigned == "true") || (localProperties.esigned == "always")) {
+		this.flags.eSigned = true;
+	} else {
+		if ((localProperties.esigned == "false") || (localProperties.esigned == "never")) {
+			this.flags.eSigned = false;
+		} else {
+			this.flags.eSigned = [true, false];
+		}
+	}
+	if (localProperties.min) {
+		this.flags.min = parseFloat(localProperties.min);
+	}
+	if (localProperties.max) {
+		this.flags.max = parseFloat(localProperties.max);
+	}
+}, isValid:function () {
+	return dojo.validate.isRealNumber(this.textbox.value, this.flags);
+}, isInRange:function () {
+	return dojo.validate.isInRange(this.textbox.value, this.flags);
+}});
 
+
 __CPAN_FILE__ src/widget/ComboBox.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -34189,7 +21606,6 @@
 */
 
 dojo.provide("dojo.widget.ComboBox");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.event.*");
 dojo.require("dojo.io.*");
@@ -34197,938 +21613,545 @@
 dojo.require("dojo.string");
 dojo.require("dojo.widget.html.stabile");
 dojo.require("dojo.widget.PopupContainer");
-
-dojo.declare(
-	"dojo.widget.incrementalComboBoxDataProvider",
-	null,
-	function(options){
-		// summary:
-		//		Reference implementation / interface for Combobox incremental data provider.
-		//		This class takes a search string and returns values that match
-		//		that search string.  The filtering of values (to find values matching given
-		//		search string) is done on the server.
-		//
-		// options:
-		//		Structure containing {dataUrl: "foo.js?search={searchString}"} or similar data.
-		//		dataUrl is a URL that is passed the search string a returns a JSON structure
-		//		showing the matching values, like [ ["Alabama","AL"], ["Alaska","AK"], ["American Samoa","AS"] ]
-
-		this.searchUrl = options.dataUrl;
-
-		// TODO: cache doesn't work
-		this._cache = {};
-
-		this._inFlight = false;
-		this._lastRequest = null;
-
-		// allowCache: Boolean
-		//	Setting to use/not use cache for previously seen values
-		//	TODO: caching doesn't work.
-		//	TODO: read the setting for this value from the widget parameters
-		this.allowCache = false;
-	},
-	{
-		_addToCache: function(/*String*/ keyword, /*Array*/ data){
-			if(this.allowCache){
-				this._cache[keyword] = data;
+dojo.declare("dojo.widget.incrementalComboBoxDataProvider", null, function (options) {
+	this.searchUrl = options.dataUrl;
+	this._cache = {};
+	this._inFlight = false;
+	this._lastRequest = null;
+	this.allowCache = false;
+}, {_addToCache:function (keyword, data) {
+	if (this.allowCache) {
+		this._cache[keyword] = data;
+	}
+}, startSearch:function (searchStr, callback) {
+	if (this._inFlight) {
+	}
+	var tss = encodeURIComponent(searchStr);
+	var realUrl = dojo.string.substituteParams(this.searchUrl, {"searchString":tss});
+	var _this = this;
+	var request = this._lastRequest = dojo.io.bind({url:realUrl, method:"get", mimetype:"text/json", load:function (type, data, evt) {
+		_this._inFlight = false;
+		if (!dojo.lang.isArray(data)) {
+			var arrData = [];
+			for (var key in data) {
+				arrData.push([data[key], key]);
 			}
-		},
-
-		startSearch: function(/*String*/ searchStr, /*Function*/ callback){
-			// summary:
-			//		Start the search for patterns that match searchStr, and call
-			//		specified callback functions with the results
-			// searchStr:
-			//		The characters the user has typed into the <input>.
-			// callback:
-			//		This function will be called with the result, as an
-			//		array of label/value pairs (the value is used for the Select widget).  Example:
-			//		[ ["Alabama","AL"], ["Alaska","AK"], ["American Samoa","AS"] ]
-
-			if(this._inFlight){
-				// FIXME: implement backoff!
-			}
-			var tss = encodeURIComponent(searchStr);
-			var realUrl = dojo.string.substituteParams(this.searchUrl, {"searchString": tss});
-			var _this = this;
-			var request = this._lastRequest = dojo.io.bind({
-				url: realUrl,
-				method: "get",
-				mimetype: "text/json",
-				load: function(type, data, evt){
-					_this._inFlight = false;
-					if(!dojo.lang.isArray(data)){
-						var arrData = [];
-						for(var key in data){
-							arrData.push([data[key], key]);
-						}
-						data = arrData;
-					}
-					_this._addToCache(searchStr, data);
-					if (request == _this._lastRequest){
-						callback(data);
-					}
+			data = arrData;
+		}
+		_this._addToCache(searchStr, data);
+		if (request == _this._lastRequest) {
+			callback(data);
+		}
+	}});
+	this._inFlight = true;
+}});
+dojo.declare("dojo.widget.basicComboBoxDataProvider", null, function (options, node) {
+	this._data = [];
+	this.searchLimit = 30;
+	this.searchType = "STARTSTRING";
+	this.caseSensitive = false;
+	if (!dj_undef("dataUrl", options) && !dojo.string.isBlank(options.dataUrl)) {
+		this._getData(options.dataUrl);
+	} else {
+		if ((node) && (node.nodeName.toLowerCase() == "select")) {
+			var opts = node.getElementsByTagName("option");
+			var ol = opts.length;
+			var data = [];
+			for (var x = 0; x < ol; x++) {
+				var text = opts[x].textContent || opts[x].innerText || opts[x].innerHTML;
+				var keyValArr = [String(text), String(opts[x].value)];
+				data.push(keyValArr);
+				if (opts[x].selected) {
+					options.setAllValues(keyValArr[0], keyValArr[1]);
 				}
-			});
-			this._inFlight = true;
+			}
+			this.setData(data);
 		}
 	}
-);
-
-dojo.declare(
-	"dojo.widget.basicComboBoxDataProvider",
-	null,
-	function(/*Object*/ options, /*DomNode*/ node){
-		// summary:
-		//		Reference implementation / interface for Combobox data provider.
-		//		This class takes a search string and returns values that match
-		//		that search string.    All possible values for the combobox are downloaded
-		//		on initialization, and then startSearch() runs locally,
-		//		merely filting that downloaded list, to find values matching search string
-		//
-		//		NOTE: this data provider is designed as a naive reference
-		//		implementation, and as such it is written more for readability than
-		//		speed. A deployable data provider would implement lookups, search
-		//		caching (and invalidation), and a significantly less naive data
-		//		structure for storage of items.
-		//
-		//	options: Object
-		//		Options object.  Example:
-		//		{
-		//			dataUrl: String (URL to query to get list of possible drop down values),
-		//			setAllValues: Function (callback for setting initially selected value)
-		//		}
-		//		The return format for dataURL is (for example)
-		//			[ ["Alabama","AL"], ["Alaska","AK"], ["American Samoa","AS"] ... ]
-		//
-		// node:
-		//		Pointer to the domNode in the original markup.
-		//		This is needed in the case when the list of values is embedded
-		//		in the html like <select> <option>Alabama</option> <option>Arkansas</option> ...
-		//		rather than specified as a URL.
-
-		// _data: Array
-		//		List of every possible value for the drop down list
-		//		startSearch() simply searches this array and returns matching values.
-		this._data = [];
-
-		// searchLimit: Integer
-		//		Maximum number of results to return.
-		//		TODO: need to read this value from the widget parameters
-		this.searchLimit = 30;
-
-		// searchType: String
-		//		Defines what values match the search string; see searchType parameter
-		//		of ComboBox for details
-		//		TODO: need to read this value from the widget parameters; the setting in ComboBox is being ignored.
-		this.searchType = "STARTSTRING";
-
-		// caseSensitive: Boolean
-		//		Should search be case sensitive?
-		//		TODO: this should be a parameter to combobox?
-		this.caseSensitive = false;
-
-		if(!dj_undef("dataUrl", options) && !dojo.string.isBlank(options.dataUrl)){
-			this._getData(options.dataUrl);
-		}else{
-			// check to see if we can populate the list from <option> elements
-			if((node)&&(node.nodeName.toLowerCase() == "select")){
-				// NOTE: we're not handling <optgroup> here yet
-				var opts = node.getElementsByTagName("option");
-				var ol = opts.length;
-				var data = [];
-				for(var x=0; x<ol; x++){
-					var text = opts[x].textContent || opts[x].innerText || opts[x].innerHTML;
-					var keyValArr = [String(text), String(opts[x].value)];
-					data.push(keyValArr);
-					if(opts[x].selected){
-						options.setAllValues(keyValArr[0], keyValArr[1]);
-					}
-				}
-				this.setData(data);
+}, {_getData:function (url) {
+	dojo.io.bind({url:url, load:dojo.lang.hitch(this, function (type, data, evt) {
+		if (!dojo.lang.isArray(data)) {
+			var arrData = [];
+			for (var key in data) {
+				arrData.push([data[key], key]);
 			}
+			data = arrData;
 		}
-	},
-	{
-		_getData: function(/*String*/ url){
-			dojo.io.bind({
-				url: url,
-				load: dojo.lang.hitch(this, function(type, data, evt){
-					if(!dojo.lang.isArray(data)){
-						var arrData = [];
-						for(var key in data){
-							arrData.push([data[key], key]);
-						}
-						data = arrData;
-					}
-					this.setData(data);
-				}),
-				mimetype: "text/json"
-			});
-		},
-
-		startSearch: function(/*String*/ searchStr, /*Function*/ callback){
-			// summary:
-			//		Start the search for patterns that match searchStr.
-			// searchStr:
-			//		The characters the user has typed into the <input>.
-			// callback:
-			//		This function will be called with the result, as an
-			//		array of label/value pairs (the value is used for the Select widget).  Example:
-			//		[ ["Alabama","AL"], ["Alaska","AK"], ["American Samoa","AS"] ]
-
-			// FIXME: need to add timeout handling here!!
-			this._performSearch(searchStr, callback);
-		},
-
-		_performSearch: function(/*String*/ searchStr, /*Function*/ callback){
-			//
-			//	NOTE: this search is LINEAR, which means that it exhibits perhaps
-			//	the worst possible speed characteristics of any search type. It's
-			//	written this way to outline the responsibilities and interfaces for
-			//	a search.
-			//
-			var st = this.searchType;
-			// FIXME: this is just an example search, which means that we implement
-			// only a linear search without any of the attendant (useful!) optimizations
-			var ret = [];
-			if(!this.caseSensitive){
-				searchStr = searchStr.toLowerCase();
+		this.setData(data);
+	}), mimetype:"text/json"});
+}, startSearch:function (searchStr, callback) {
+	this._performSearch(searchStr, callback);
+}, _performSearch:function (searchStr, callback) {
+	var st = this.searchType;
+	var ret = [];
+	if (!this.caseSensitive) {
+		searchStr = searchStr.toLowerCase();
+	}
+	for (var x = 0; x < this._data.length; x++) {
+		if ((this.searchLimit > 0) && (ret.length >= this.searchLimit)) {
+			break;
+		}
+		var dataLabel = new String((!this.caseSensitive) ? this._data[x][0].toLowerCase() : this._data[x][0]);
+		if (dataLabel.length < searchStr.length) {
+			continue;
+		}
+		if (st == "STARTSTRING") {
+			if (searchStr == dataLabel.substr(0, searchStr.length)) {
+				ret.push(this._data[x]);
 			}
-			for(var x=0; x<this._data.length; x++){
-				if((this.searchLimit > 0)&&(ret.length >= this.searchLimit)){
-					break;
+		} else {
+			if (st == "SUBSTRING") {
+				if (dataLabel.indexOf(searchStr) >= 0) {
+					ret.push(this._data[x]);
 				}
-				// FIXME: we should avoid copies if possible!
-				var dataLabel = new String((!this.caseSensitive) ? this._data[x][0].toLowerCase() : this._data[x][0]);
-				if(dataLabel.length < searchStr.length){
-					// this won't ever be a good search, will it? What if we start
-					// to support regex search?
-					continue;
-				}
-
-				if(st == "STARTSTRING"){
-					if(searchStr == dataLabel.substr(0, searchStr.length)){
-						ret.push(this._data[x]);
-					}
-				}else if(st == "SUBSTRING"){
-					// this one is a gimmie
-					if(dataLabel.indexOf(searchStr) >= 0){
-						ret.push(this._data[x]);
-					}
-				}else if(st == "STARTWORD"){
-					// do a substring search and then attempt to determine if the
-					// preceeding char was the beginning of the string or a
-					// whitespace char.
+			} else {
+				if (st == "STARTWORD") {
 					var idx = dataLabel.indexOf(searchStr);
-					if(idx == 0){
-						// implicit match
+					if (idx == 0) {
 						ret.push(this._data[x]);
 					}
-					if(idx <= 0){
-						// if we didn't match or implicily matched, march onward
+					if (idx <= 0) {
 						continue;
 					}
-					// otherwise, we have to go figure out if the match was at the
-					// start of a word...
-					// this code is taken almost directy from nWidgets
 					var matches = false;
-					while(idx!=-1){
-						// make sure the match either starts whole string, or
-						// follows a space, or follows some punctuation
-						if(" ,/(".indexOf(dataLabel.charAt(idx-1)) != -1){
-							// FIXME: what about tab chars?
-							matches = true; break;
+					while (idx != -1) {
+						if (" ,/(".indexOf(dataLabel.charAt(idx - 1)) != -1) {
+							matches = true;
+							break;
 						}
-						idx = dataLabel.indexOf(searchStr, idx+1);
+						idx = dataLabel.indexOf(searchStr, idx + 1);
 					}
-					if(!matches){
+					if (!matches) {
 						continue;
-					}else{
+					} else {
 						ret.push(this._data[x]);
 					}
 				}
 			}
-			callback(ret);
-		},
-
-		setData: function(/*Array*/ pdata){
-			// summary: set (or reset) the data and initialize lookup structures
-			this._data = pdata;
 		}
 	}
-);
-
-dojo.widget.defineWidget(
-	"dojo.widget.ComboBox",
-	dojo.widget.HtmlWidget,
-	{
-		// summary:
-		//		Auto-completing text box, and base class for Select widget.
-		//
-		//		The drop down box's values are populated from an class called
-		//		a data provider, which returns a list of values based on the characters
-		//		that the user has typed into the input box.
-		//
-		//		Some of the options to the ComboBox are actually arguments to the data
-		//		provider.
-
-		// forceValidOption: Boolean
-		//		If true, only allow selection of strings in drop down list.
-		//		If false, user can select a value from the drop down, or just type in
-		//		any random value.
-		forceValidOption: false,
-
-		// searchType: String
-		//		Argument to data provider.
-		//		Specifies rule for matching typed in string w/list of available auto-completions.
-		//			startString - look for auto-completions that start w/the specified string.
-		//			subString - look for auto-completions containing the typed in string.
-		//			startWord - look for auto-completions where any word starts w/the typed in string.
-		searchType: "stringstart",
-
-		// dataProvider: Object
-		//		(Read only) reference to data provider object created for this combobox
-		//		according to "dataProviderClass" argument.
-		dataProvider: null,
-
-		// autoComplete: Boolean
-		//		If you type in a partial string, and then tab out of the <input> box,
-		//		automatically copy the first entry displayed in the drop down list to
-		//		the <input> field
-		autoComplete: true,
-
-		// searchDelay: Integer
-		//		Delay in milliseconds between when user types something and we start
-		//		searching based on that value
-		searchDelay: 100,
-
-		// dataUrl: String
-		//		URL argument passed to data provider object (class name specified in "dataProviderClass")
-		//		An example of the URL format for the default data provider is
-		//		"remoteComboBoxData.js?search=%{searchString}"
-		dataUrl: "",
-
-		// fadeTime: Integer
-		//		Milliseconds duration of fadeout for drop down box
-		fadeTime: 200,
-
-		// maxListLength: Integer
-		//		 Limits list to X visible rows, scroll on rest
-		maxListLength: 8,
-
-		// mode: String
-		//		Mode must be specified unless dataProviderClass is specified.
-		//		"local" to inline search string, "remote" for JSON-returning live search
-		//		or "html" for dumber live search.
-		mode: "local",
-
-		// selectedResult: Array
-		//		(Read only) array specifying the value/label that the user selected
-		selectedResult: null,
-
-		// dataProviderClass: String
-		//		Name of data provider class (code that maps a search string to a list of values)
-		//		The class must match the interface demonstrated by dojo.widget.incrementalComboBoxDataProvider
-		dataProviderClass: "",
-
-		// buttonSrc: URI
-		//		URI for the down arrow icon to the right of the input box.
-		buttonSrc: dojo.uri.dojoUri("src/widget/templates/images/combo_box_arrow.png"),
-
-		// dropdownToggle: String
-		//		Animation effect for showing/displaying drop down box
-		dropdownToggle: "fade",
-
-		templatePath: dojo.uri.dojoUri("src/widget/templates/ComboBox.html"),
-		templateCssPath: dojo.uri.dojoUri("src/widget/templates/ComboBox.css"),
-
-		setValue: function(/*String*/ value){
-			// summary: Sets the value of the combobox
-			this.comboBoxValue.value = value;
-			if (this.textInputNode.value != value){ // prevent mucking up of selection
-				this.textInputNode.value = value;
-				// only change state and value if a new value is set
-				dojo.widget.html.stabile.setState(this.widgetId, this.getState(), true);
-				this.onValueChanged(value);
+	callback(ret);
+}, setData:function (pdata) {
+	this._data = pdata;
+}});
+dojo.widget.defineWidget("dojo.widget.ComboBox", dojo.widget.HtmlWidget, {forceValidOption:false, searchType:"stringstart", dataProvider:null, autoComplete:true, searchDelay:100, dataUrl:"", fadeTime:200, maxListLength:8, mode:"local", selectedResult:null, dataProviderClass:"", buttonSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/combo_box_arrow.png"), dropdownToggle:"fade", templateString:"<span _=\"whitespace and CR's between tags adds &nbsp; in FF\"\n\tclass=\"dojoComboBoxOuter\"\n\t><input style=\"display:none\"  tabindex=\"-1\" name=\"\" value=\"\" \n\t\tdojoAttachPoint=\"comboBoxValue\"\n\t><input style=\"display:none\"  tabindex=\"-1\" name=\"\" value=\"\" \n\t\tdojoAttachPoint=\"comboBoxSelectionValue\"\n\t><input type=\"text\" autocomplete=\"off\" class=\"dojoComboBox\"\n\t\tdojoAttachEvent=\"key:_handleKeyEvents; keyUp: onKeyUp; compositionEnd; onResize;\"\n\t\tdojoAttachPoint=\"textInputNode\"\n\t><img hspace=\"0\"\n\t\tvspace=\"0\"\n\t\tclass=\"dojoComboBox\"\n\t\tdojoAttachPoint=\"downArrowNode\"\n\t\tdojoAttachEvent=\"onMouseUp: handleArrowClick; onResize;\"\n\t\tsrc=\"${this.buttonSrc}\"\n></span>\n", templateCssString:".dojoComboBoxOuter {\n\tborder: 0px !important;\n\tmargin: 0px !important;\n\tpadding: 0px !important;\n\tbackground: transparent !important;\n\twhite-space: nowrap !important;\n}\n\n.dojoComboBox {\n\tborder: 1px inset #afafaf;\n\tmargin: 0px;\n\tpadding: 0px;\n\tvertical-align: middle !important;\n\tfloat: none !important;\n\tposition: static !important;\n\tdisplay: inline !important;\n}\n\n/* the input box */\ninput.dojoComboBox {\n\tborder-right-width: 0px !important; \n\tmargin-right: 0px !important;\n\tpadding-right: 0px !important;\n}\n\n/* the down arrow */\nimg.dojoComboBox {\n\tborder-left-width: 0px !important;\n\tpadding-left: 0px !important;\n\tmargin-left: 0px !important;\n}\n\n/* IE vertical-alignment calculations can be off by +-1 but these margins are collapsed away */\n.dj_ie img.dojoComboBox {\n\tmargin-top: 1px; \n\tmargin-bottom: 1px; \n}\n\n/* the drop down */\n.dojoComboBoxOptions {\n\tfont-family: Verdana, Helvetica, Garamond, sans-serif;\n\t/* font-size: 0.7em; */\n\tbackground-color: white;\n\tborder: 1px solid #afafaf;\n\tposition: absolute;\n\tz-index: 1000; \n\toverflow: auto;\n\tcursor: default;\n}\n\n.dojoComboBoxItem {\n\tpadding-left: 2px;\n\tpadding-top: 2px;\n\tmargin: 0px;\n}\n\n.dojoComboBoxItemEven {\n\tbackground-color: #f4f4f4;\n}\n\n.dojoComboBoxItemOdd {\n\tbackground-color: white;\n}\n\n.dojoComboBoxItemHighlight {\n\tbackground-color: #63709A;\n\tcolor: white;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/ComboBox.css"), setValue:function (value) {
+	this.comboBoxValue.value = value;
+	if (this.textInputNode.value != value) {
+		this.textInputNode.value = value;
+		dojo.widget.html.stabile.setState(this.widgetId, this.getState(), true);
+		this.onValueChanged(value);
+	}
+}, onValueChanged:function (value) {
+}, getValue:function () {
+	return this.comboBoxValue.value;
+}, getState:function () {
+	return {value:this.getValue()};
+}, setState:function (state) {
+	this.setValue(state.value);
+}, enable:function () {
+	this.disabled = false;
+	this.textInputNode.removeAttribute("disabled");
+}, disable:function () {
+	this.disabled = true;
+	this.textInputNode.setAttribute("disabled", true);
+}, _getCaretPos:function (element) {
+	if (dojo.lang.isNumber(element.selectionStart)) {
+		return element.selectionStart;
+	} else {
+		if (dojo.render.html.ie) {
+			var tr = document.selection.createRange().duplicate();
+			var ntr = element.createTextRange();
+			tr.move("character", 0);
+			ntr.move("character", 0);
+			try {
+				ntr.setEndPoint("EndToEnd", tr);
+				return String(ntr.text).replace(/\r/g, "").length;
 			}
-		},
-
-		onValueChanged: function(/*String*/ value){
-			// summary: callback when value changes, for user to attach to
-		},
-
-		getValue: function(){
-			// summary: Rerturns combo box value
-			return this.comboBoxValue.value;
-		},
-
-		getState: function(){
-			// summary:
-			//	Used for saving state of ComboBox when navigates to a new
-			//	page, in case they then hit the browser's "Back" button.
-			return {value: this.getValue()};
-		},
-
-		setState: function(/*Object*/ state){
-			// summary:
-			//	Used for restoring state of ComboBox when has navigated to a new
-			//	page but then hits browser's "Back" button.
-			this.setValue(state.value);
-		},
-
-		enable:function(){
-			this.disabled=false;
-			this.textInputNode.removeAttribute("disabled");
-		},
-
-		disable: function(){
-			this.disabled = true;
-			this.textInputNode.setAttribute("disabled",true);
-		},
-
-		_getCaretPos: function(/*DomNode*/ element){
-			// khtml 3.5.2 has selection* methods as does webkit nightlies from 2005-06-22
-			if(dojo.lang.isNumber(element.selectionStart)){
-				// FIXME: this is totally borked on Moz < 1.3. Any recourse?
-				return element.selectionStart;
-			}else if(dojo.render.html.ie){
-				// in the case of a mouse click in a popup being handled,
-				// then the document.selection is not the textarea, but the popup
-				// var r = document.selection.createRange();
-				// hack to get IE 6 to play nice. What a POS browser.
-				var tr = document.selection.createRange().duplicate();
-				var ntr = element.createTextRange();
-				tr.move("character",0);
-				ntr.move("character",0);
-				try {
-					// If control doesnt have focus, you get an exception.
-					// Seems to happen on reverse-tab, but can also happen on tab (seems to be a race condition - only happens sometimes).
-					// There appears to be no workaround for this - googled for quite a while.
-					ntr.setEndPoint("EndToEnd", tr);
-					return String(ntr.text).replace(/\r/g,"").length;
-				} catch (e){
-					return 0; // If focus has shifted, 0 is fine for caret pos.
-				}
-
+			catch (e) {
+				return 0;
 			}
-		},
-
-		_setCaretPos: function(/*DomNode*/ element, /*Number*/ location){
-			location = parseInt(location);
-			this._setSelectedRange(element, location, location);
-		},
-
-		_setSelectedRange: function(/*DomNode*/ element, /*Number*/ start, /*Number*/ end){
-			if(!end){ end = element.value.length; }  // NOTE: Strange - should be able to put caret at start of text?
-			// Mozilla
-			// parts borrowed from http://www.faqts.com/knowledge_base/view.phtml/aid/13562/fid/130
-			if(element.setSelectionRange){
-				element.focus();
-				element.setSelectionRange(start, end);
-			}else if(element.createTextRange){ // IE
-				var range = element.createTextRange();
-				with(range){
-					collapse(true);
-					moveEnd('character', end);
-					moveStart('character', start);
-					select();
-				}
-			}else{ //otherwise try the event-creation hack (our own invention)
-				// do we need these?
-				element.value = element.value;
-				element.blur();
-				element.focus();
-				// figure out how far back to go
-				var dist = parseInt(element.value.length)-end;
-				var tchar = String.fromCharCode(37);
-				var tcc = tchar.charCodeAt(0);
-				for(var x = 0; x < dist; x++){
-					var te = document.createEvent("KeyEvents");
-					te.initKeyEvent("keypress", true, true, null, false, false, false, false, tcc, tcc);
-					element.dispatchEvent(te);
-				}
+		}
+	}
+}, _setCaretPos:function (element, location) {
+	location = parseInt(location);
+	this._setSelectedRange(element, location, location);
+}, _setSelectedRange:function (element, start, end) {
+	if (!end) {
+		end = element.value.length;
+	}
+	if (element.setSelectionRange) {
+		element.focus();
+		element.setSelectionRange(start, end);
+	} else {
+		if (element.createTextRange) {
+			var range = element.createTextRange();
+			with (range) {
+				collapse(true);
+				moveEnd("character", end);
+				moveStart("character", start);
+				select();
 			}
-		},
-
-		_handleKeyEvents: function(/*Event*/ evt){
-			// summary: handles keyboard events
-			if(evt.ctrlKey || evt.altKey || !evt.key){ return; }
-
-			// reset these
-			this._prev_key_backspace = false;
-			this._prev_key_esc = false;
-
-			var k = dojo.event.browser.keys;
-			var doSearch = true;
-
-			switch(evt.key){
-	 			case k.KEY_DOWN_ARROW:
-					if(!this.popupWidget.isShowingNow){
-						this._startSearchFromInput();
-					}
-					this._highlightNextOption();
-					dojo.event.browser.stopEvent(evt);
-					return;
-				case k.KEY_UP_ARROW:
-					this._highlightPrevOption();
-					dojo.event.browser.stopEvent(evt);
-					return;
-				case k.KEY_TAB:
-					// using linux alike tab for autocomplete
-					if(!this.autoComplete && this.popupWidget.isShowingNow && this._highlighted_option){
-						dojo.event.browser.stopEvent(evt);
-						this._selectOption({ 'target': this._highlighted_option, 'noHide': false});
-
-						// put caret last
-						this._setSelectedRange(this.textInputNode, this.textInputNode.value.length, null);
-					}else{
-						this._selectOption();
-						return;
-					}
-					break;
-				case k.KEY_ENTER:
-					// prevent submitting form if we press enter with list open
-					if(this.popupWidget.isShowingNow){
-						dojo.event.browser.stopEvent(evt);
-					}
-					if(this.autoComplete){
-						this._selectOption();
-						return;
-					}
-					// fallthrough
-				case " ":
-					if(this.popupWidget.isShowingNow && this._highlighted_option){
-						dojo.event.browser.stopEvent(evt);
-						this._selectOption();
-						this._hideResultList();
-						return;
-					}
-					break;
-				case k.KEY_ESCAPE:
-					this._hideResultList();
-					this._prev_key_esc = true;
-					return;
-				case k.KEY_BACKSPACE:
-					this._prev_key_backspace = true;
-					if(!this.textInputNode.value.length){
-						this.setAllValues("", "");
-						this._hideResultList();
-						doSearch = false;
-					}
-					break;
-				case k.KEY_RIGHT_ARROW: // fall through
-				case k.KEY_LEFT_ARROW: // fall through
-					doSearch = false;
-					break;
-				default:// non char keys (F1-F12 etc..)  shouldn't open list
-					if(evt.charCode==0){
-						doSearch = false;
-					}
+		} else {
+			element.value = element.value;
+			element.blur();
+			element.focus();
+			var dist = parseInt(element.value.length) - end;
+			var tchar = String.fromCharCode(37);
+			var tcc = tchar.charCodeAt(0);
+			for (var x = 0; x < dist; x++) {
+				var te = document.createEvent("KeyEvents");
+				te.initKeyEvent("keypress", true, true, null, false, false, false, false, tcc, tcc);
+				element.dispatchEvent(te);
 			}
-
-			if(this.searchTimer){
-				clearTimeout(this.searchTimer);
-			}
-			if(doSearch){
-				// if we have gotten this far we dont want to keep our highlight
-				this._blurOptionNode();
-
-				// need to wait a tad before start search so that the event bubbles through DOM and we have value visible
-				this.searchTimer = setTimeout(dojo.lang.hitch(this, this._startSearchFromInput), this.searchDelay);
-			}
-		},
-
-		compositionEnd: function(/*Event*/ evt){
-			// summary: When inputting characters using an input method, such as Asian
-			// languages, it will generate this event instead of onKeyDown event
-			evt.key = evt.keyCode;
-			this._handleKeyEvents(evt);
-		},
-
-		onKeyUp: function(/*Event*/ evt){
-			// summary: callback on key up event
-			this.setValue(this.textInputNode.value);
-		},
-
-		setSelectedValue: function(/*String*/ value){
-			// summary:
-			//		This sets a hidden value associated w/the displayed value.
-			//		The hidden value (and this function) shouldn't be used; if
-			//		you need a hidden value then use Select widget instead of ComboBox.
-			// TODO: remove?
-			// FIXME, not sure what to do here!
-			this.comboBoxSelectionValue.value = value;
-		},
-
-		setAllValues: function(/*String*/ value1, /*String*/ value2){
-			// summary:
-			//		This sets the displayed value and hidden value.
-			//		The hidden value (and this function) shouldn't be used; if
-			//		you need a hidden value then use Select widget instead of ComboBox.
-			this.setSelectedValue(value2);
-			this.setValue(value1);
-		},
-
-		_focusOptionNode: function(/*DomNode*/ node){
-			// summary: does the actual highlight
-			if(this._highlighted_option != node){
-				this._blurOptionNode();
-				this._highlighted_option = node;
-				dojo.html.addClass(this._highlighted_option, "dojoComboBoxItemHighlight");
-			}
-		},
-
-		_blurOptionNode: function(){
-			// sumary: removes highlight on highlighted
-			if(this._highlighted_option){
-				dojo.html.removeClass(this._highlighted_option, "dojoComboBoxItemHighlight");
-				this._highlighted_option = null;
-			}
-		},
-
-		_highlightNextOption: function(){
-			if((!this._highlighted_option) || !this._highlighted_option.parentNode){
-				this._focusOptionNode(this.optionsListNode.firstChild);
-			}else if(this._highlighted_option.nextSibling){
-				this._focusOptionNode(this._highlighted_option.nextSibling);
-			}
-			dojo.html.scrollIntoView(this._highlighted_option);
-		},
-
-		_highlightPrevOption: function(){
-			if(this._highlighted_option && this._highlighted_option.previousSibling){
-				this._focusOptionNode(this._highlighted_option.previousSibling);
-			}else{
-				this._highlighted_option = null;
-				this._hideResultList();
-				return;
-			}
-			dojo.html.scrollIntoView(this._highlighted_option);
-		},
-
-		_itemMouseOver: function(/*Event*/ evt){
-			if (evt.target === this.optionsListNode){ return; }
-			this._focusOptionNode(evt.target);
-			dojo.html.addClass(this._highlighted_option, "dojoComboBoxItemHighlight");
-		},
-
-		_itemMouseOut: function(/*Event*/ evt){
-			if (evt.target === this.optionsListNode){ return; }
-			this._blurOptionNode();
-		},
-
-		onResize: function(){
-			// summary: this function is called when the input area has changed size
-			var inputSize = dojo.html.getContentBox(this.textInputNode);
-			if( inputSize.height <= 0 ){
-				// need more time to calculate size
-				dojo.lang.setTimeout(this, "onResize", 100);
-				return;
-			}
-			var buttonSize = { width: inputSize.height, height: inputSize.height};
-			dojo.html.setContentBox(this.downArrowNode, buttonSize);
-		},
-
-		fillInTemplate: function(/*Object*/ args, /*Object*/ frag){
-			// there's some browser specific CSS in ComboBox.css
-			dojo.html.applyBrowserClass(this.domNode);
-
-			var source = this.getFragNodeRef(frag);
-			if (! this.name && source.name){ this.name = source.name; }
-			this.comboBoxValue.name = this.name;
-			this.comboBoxSelectionValue.name = this.name+"_selected";
-
-			/* different nodes get different parts of the style */
-			dojo.html.copyStyle(this.domNode, source);
-			dojo.html.copyStyle(this.textInputNode, source);
-			dojo.html.copyStyle(this.downArrowNode, source);
-			with (this.downArrowNode.style){ // calculate these later
-				width = "0px";
-				height = "0px";
-			}
-
-			// Use specified data provider class; if no class is specified
-			// then use comboboxDataProvider or incrmentalComboBoxDataProvider
-			// depending on setting of mode
-			var dpClass;
-			if(this.dataProviderClass){
-				if(typeof this.dataProviderClass == "string"){
-					dpClass = dojo.evalObjPath(this.dataProviderClass)
-				}else{
-					dpClass = this.dataProviderClass;
-				}
-			}else{
-				if(this.mode == "remote"){
-					dpClass = dojo.widget.incrementalComboBoxDataProvider;
-				}else{
-					dpClass = dojo.widget.basicComboBoxDataProvider;
-				}
-			}
-			this.dataProvider = new dpClass(this, this.getFragNodeRef(frag));
-
-			this.popupWidget = new dojo.widget.createWidget("PopupContainer",
-				{toggle: this.dropdownToggle, toggleDuration: this.toggleDuration});
-			dojo.event.connect(this, 'destroy', this.popupWidget, 'destroy');
-			this.optionsListNode = this.popupWidget.domNode;
-			this.domNode.appendChild(this.optionsListNode);
-			dojo.html.addClass(this.optionsListNode, 'dojoComboBoxOptions');
-			dojo.event.connect(this.optionsListNode, 'onclick', this, '_selectOption');
-			dojo.event.connect(this.optionsListNode, 'onmouseover', this, '_onMouseOver');
-			dojo.event.connect(this.optionsListNode, 'onmouseout', this, '_onMouseOut');
-
-			// TODO: why does onmouseover and onmouseout connect to two separate handlers???
-			dojo.event.connect(this.optionsListNode, "onmouseover", this, "_itemMouseOver");
-			dojo.event.connect(this.optionsListNode, "onmouseout", this, "_itemMouseOut");
-		},
-
-		_openResultList: function(/*Array*/ results){
-			if (this.disabled){
-				return;
-			}
-			this._clearResultList();
-			if(!results.length){
-				this._hideResultList();
-			}
-
-			if(	(this.autoComplete)&&
-				(results.length)&&
-				(!this._prev_key_backspace)&&
-				(this.textInputNode.value.length > 0)){
-				var cpos = this._getCaretPos(this.textInputNode);
-				// only try to extend if we added the last character at the end of the input
-				if((cpos+1) > this.textInputNode.value.length){
-					// only add to input node as we would overwrite Capitalisation of chars
-					this.textInputNode.value += results[0][0].substr(cpos);
-					// build a new range that has the distance from the earlier
-					// caret position to the end of the first string selected
-					this._setSelectedRange(this.textInputNode, cpos, this.textInputNode.value.length);
-				}
-			}
-
-			var even = true;
-			while(results.length){
-				var tr = results.shift();
-				if(tr){
-					var td = document.createElement("div");
-					td.appendChild(document.createTextNode(tr[0]));
-					td.setAttribute("resultName", tr[0]);
-					td.setAttribute("resultValue", tr[1]);
-					td.className = "dojoComboBoxItem "+((even) ? "dojoComboBoxItemEven" : "dojoComboBoxItemOdd");
-					even = (!even);
-					this.optionsListNode.appendChild(td);
-				}
-			}
-
-			// show our list (only if we have content, else nothing)
-			this._showResultList();
-		},
-
-		_onFocusInput: function(){
-			this._hasFocus = true;
-		},
-
-		_onBlurInput: function(){
-			this._hasFocus = false;
-			this._handleBlurTimer(true, 500);
-		},
-
-		_handleBlurTimer: function(/*Boolean*/clear, /*Number*/ millisec){
-			// summary: collect all blur timers issues here
-			if(this.blurTimer && (clear || millisec)){
-				clearTimeout(this.blurTimer);
-			}
-			if(millisec){ // we ignore that zero is false and never sets as that never happens in this widget
-				this.blurTimer = dojo.lang.setTimeout(this, "_checkBlurred", millisec);
-			}
-		},
-
-		_onMouseOver: function(/*Event*/ evt){
-			// summary: needed in IE and Safari as inputTextNode loses focus when scrolling optionslist
-			if(!this._mouseover_list){
-				this._handleBlurTimer(true, 0);
-				this._mouseover_list = true;
-			}
-		},
-
-		_onMouseOut:function(/*Event*/ evt){
-			// summary: needed in IE and Safari as inputTextNode loses focus when scrolling optionslist
-			var relTarget = evt.relatedTarget;
-			try { // fixes #1807
-				if(!relTarget || relTarget.parentNode != this.optionsListNode){
-					this._mouseover_list = false;
-					this._handleBlurTimer(true, 100);
-					this._tryFocus();
-				}
-			}catch(e){}
-		},
-
-		_isInputEqualToResult: function(/*String*/ result){
-			var input = this.textInputNode.value;
-			if(!this.dataProvider.caseSensitive){
-				input = input.toLowerCase();
-				result = result.toLowerCase();
-			}
-			return (input == result);
-		},
-
-		_isValidOption: function(){
-			var tgt = dojo.html.firstElement(this.optionsListNode);
-			var isValidOption = false;
-			while(!isValidOption && tgt){
-				if(this._isInputEqualToResult(tgt.getAttribute("resultName"))){
-					isValidOption = true;
-				}else{
-					tgt = dojo.html.nextElement(tgt);
-				}
-			}
-			return isValidOption;
-		},
-
-		_checkBlurred: function(){
-			if(!this._hasFocus && !this._mouseover_list){
-				this._hideResultList();
-				// clear the list if the user empties field and moves away.
-				if(!this.textInputNode.value.length){
-					this.setAllValues("", "");
-					return;
-				}
-
-				var isValidOption = this._isValidOption();
-				// enforce selection from option list
-				if(this.forceValidOption && !isValidOption){
-					this.setAllValues("", "");
-					return;
-				}
-				if(!isValidOption){// clear
-					this.setSelectedValue("");
-				}
-			}
-		},
-
-		_selectOption: function(/*Event*/ evt){
-			var tgt = null;
-			if(!evt){
-				evt = { target: this._highlighted_option };
-			}
-
-			if(!dojo.html.isDescendantOf(evt.target, this.optionsListNode)){
-				// handle autocompletion where the the user has hit ENTER or TAB
-
-				// if the input is empty do nothing
-				if(!this.textInputNode.value.length){
-					return;
-				}
-				tgt = dojo.html.firstElement(this.optionsListNode);
-
-				// user has input value not in option list
-				if(!tgt || !this._isInputEqualToResult(tgt.getAttribute("resultName"))){
-					return;
-				}
-				// otherwise the user has accepted the autocompleted value
-			}else{
-				tgt = evt.target;
-			}
-
-			while((tgt.nodeType!=1)||(!tgt.getAttribute("resultName"))){
-				tgt = tgt.parentNode;
-				if(tgt === dojo.body()){
-					return false;
-				}
-			}
-
-			this.selectedResult = [tgt.getAttribute("resultName"), tgt.getAttribute("resultValue")];
-			this.setAllValues(tgt.getAttribute("resultName"), tgt.getAttribute("resultValue"));
-			if(!evt.noHide){
-				this._hideResultList();
-				this._setSelectedRange(this.textInputNode, 0, null);
-			}
+		}
+	}
+}, _handleKeyEvents:function (evt) {
+	if (evt.ctrlKey || evt.altKey || !evt.key) {
+		return;
+	}
+	this._prev_key_backspace = false;
+	this._prev_key_esc = false;
+	var k = dojo.event.browser.keys;
+	var doSearch = true;
+	switch (evt.key) {
+	  case k.KEY_DOWN_ARROW:
+		if (!this.popupWidget.isShowingNow) {
+			this._startSearchFromInput();
+		}
+		this._highlightNextOption();
+		dojo.event.browser.stopEvent(evt);
+		return;
+	  case k.KEY_UP_ARROW:
+		this._highlightPrevOption();
+		dojo.event.browser.stopEvent(evt);
+		return;
+	  case k.KEY_TAB:
+		if (!this.autoComplete && this.popupWidget.isShowingNow && this._highlighted_option) {
+			dojo.event.browser.stopEvent(evt);
+			this._selectOption({"target":this._highlighted_option, "noHide":false});
+			this._setSelectedRange(this.textInputNode, this.textInputNode.value.length, null);
+		} else {
+			this._selectOption();
+			return;
+		}
+		break;
+	  case k.KEY_ENTER:
+		if (this.popupWidget.isShowingNow) {
+			dojo.event.browser.stopEvent(evt);
+		}
+		if (this.autoComplete) {
+			this._selectOption();
+			return;
+		}
+	  case " ":
+		if (this.popupWidget.isShowingNow && this._highlighted_option) {
+			dojo.event.browser.stopEvent(evt);
+			this._selectOption();
+			this._hideResultList();
+			return;
+		}
+		break;
+	  case k.KEY_ESCAPE:
+		this._hideResultList();
+		this._prev_key_esc = true;
+		return;
+	  case k.KEY_BACKSPACE:
+		this._prev_key_backspace = true;
+		if (!this.textInputNode.value.length) {
+			this.setAllValues("", "");
+			this._hideResultList();
+			doSearch = false;
+		}
+		break;
+	  case k.KEY_RIGHT_ARROW:
+	  case k.KEY_LEFT_ARROW:
+		doSearch = false;
+		break;
+	  default:
+		if (evt.charCode == 0) {
+			doSearch = false;
+		}
+	}
+	if (this.searchTimer) {
+		clearTimeout(this.searchTimer);
+	}
+	if (doSearch) {
+		this._blurOptionNode();
+		this.searchTimer = setTimeout(dojo.lang.hitch(this, this._startSearchFromInput), this.searchDelay);
+	}
+}, compositionEnd:function (evt) {
+	evt.key = evt.keyCode;
+	this._handleKeyEvents(evt);
+}, onKeyUp:function (evt) {
+	this.setValue(this.textInputNode.value);
+}, setSelectedValue:function (value) {
+	this.comboBoxSelectionValue.value = value;
+}, setAllValues:function (value1, value2) {
+	this.setSelectedValue(value2);
+	this.setValue(value1);
+}, _focusOptionNode:function (node) {
+	if (this._highlighted_option != node) {
+		this._blurOptionNode();
+		this._highlighted_option = node;
+		dojo.html.addClass(this._highlighted_option, "dojoComboBoxItemHighlight");
+	}
+}, _blurOptionNode:function () {
+	if (this._highlighted_option) {
+		dojo.html.removeClass(this._highlighted_option, "dojoComboBoxItemHighlight");
+		this._highlighted_option = null;
+	}
+}, _highlightNextOption:function () {
+	if ((!this._highlighted_option) || !this._highlighted_option.parentNode) {
+		this._focusOptionNode(this.optionsListNode.firstChild);
+	} else {
+		if (this._highlighted_option.nextSibling) {
+			this._focusOptionNode(this._highlighted_option.nextSibling);
+		}
+	}
+	dojo.html.scrollIntoView(this._highlighted_option);
+}, _highlightPrevOption:function () {
+	if (this._highlighted_option && this._highlighted_option.previousSibling) {
+		this._focusOptionNode(this._highlighted_option.previousSibling);
+	} else {
+		this._highlighted_option = null;
+		this._hideResultList();
+		return;
+	}
+	dojo.html.scrollIntoView(this._highlighted_option);
+}, _itemMouseOver:function (evt) {
+	if (evt.target === this.optionsListNode) {
+		return;
+	}
+	this._focusOptionNode(evt.target);
+	dojo.html.addClass(this._highlighted_option, "dojoComboBoxItemHighlight");
+}, _itemMouseOut:function (evt) {
+	if (evt.target === this.optionsListNode) {
+		return;
+	}
+	this._blurOptionNode();
+}, onResize:function () {
+	var inputSize = dojo.html.getContentBox(this.textInputNode);
+	if (inputSize.height <= 0) {
+		dojo.lang.setTimeout(this, "onResize", 100);
+		return;
+	}
+	var buttonSize = {width:inputSize.height, height:inputSize.height};
+	dojo.html.setContentBox(this.downArrowNode, buttonSize);
+}, fillInTemplate:function (args, frag) {
+	dojo.html.applyBrowserClass(this.domNode);
+	var source = this.getFragNodeRef(frag);
+	if (!this.name && source.name) {
+		this.name = source.name;
+	}
+	this.comboBoxValue.name = this.name;
+	this.comboBoxSelectionValue.name = this.name + "_selected";
+	dojo.html.copyStyle(this.domNode, source);
+	dojo.html.copyStyle(this.textInputNode, source);
+	dojo.html.copyStyle(this.downArrowNode, source);
+	with (this.downArrowNode.style) {
+		width = "0px";
+		height = "0px";
+	}
+	var dpClass;
+	if (this.dataProviderClass) {
+		if (typeof this.dataProviderClass == "string") {
+			dpClass = dojo.evalObjPath(this.dataProviderClass);
+		} else {
+			dpClass = this.dataProviderClass;
+		}
+	} else {
+		if (this.mode == "remote") {
+			dpClass = dojo.widget.incrementalComboBoxDataProvider;
+		} else {
+			dpClass = dojo.widget.basicComboBoxDataProvider;
+		}
+	}
+	this.dataProvider = new dpClass(this, this.getFragNodeRef(frag));
+	this.popupWidget = new dojo.widget.createWidget("PopupContainer", {toggle:this.dropdownToggle, toggleDuration:this.toggleDuration});
+	dojo.event.connect(this, "destroy", this.popupWidget, "destroy");
+	this.optionsListNode = this.popupWidget.domNode;
+	this.domNode.appendChild(this.optionsListNode);
+	dojo.html.addClass(this.optionsListNode, "dojoComboBoxOptions");
+	dojo.event.connect(this.optionsListNode, "onclick", this, "_selectOption");
+	dojo.event.connect(this.optionsListNode, "onmouseover", this, "_onMouseOver");
+	dojo.event.connect(this.optionsListNode, "onmouseout", this, "_onMouseOut");
+	dojo.event.connect(this.optionsListNode, "onmouseover", this, "_itemMouseOver");
+	dojo.event.connect(this.optionsListNode, "onmouseout", this, "_itemMouseOut");
+}, _openResultList:function (results) {
+	if (this.disabled) {
+		return;
+	}
+	this._clearResultList();
+	if (!results.length) {
+		this._hideResultList();
+	}
+	if ((this.autoComplete) && (results.length) && (!this._prev_key_backspace) && (this.textInputNode.value.length > 0)) {
+		var cpos = this._getCaretPos(this.textInputNode);
+		if ((cpos + 1) > this.textInputNode.value.length) {
+			this.textInputNode.value += results[0][0].substr(cpos);
+			this._setSelectedRange(this.textInputNode, cpos, this.textInputNode.value.length);
+		}
+	}
+	var even = true;
+	while (results.length) {
+		var tr = results.shift();
+		if (tr) {
+			var td = document.createElement("div");
+			td.appendChild(document.createTextNode(tr[0]));
+			td.setAttribute("resultName", tr[0]);
+			td.setAttribute("resultValue", tr[1]);
+			td.className = "dojoComboBoxItem " + ((even) ? "dojoComboBoxItemEven" : "dojoComboBoxItemOdd");
+			even = (!even);
+			this.optionsListNode.appendChild(td);
+		}
+	}
+	this._showResultList();
+}, _onFocusInput:function () {
+	this._hasFocus = true;
+}, _onBlurInput:function () {
+	this._hasFocus = false;
+	this._handleBlurTimer(true, 500);
+}, _handleBlurTimer:function (clear, millisec) {
+	if (this.blurTimer && (clear || millisec)) {
+		clearTimeout(this.blurTimer);
+	}
+	if (millisec) {
+		this.blurTimer = dojo.lang.setTimeout(this, "_checkBlurred", millisec);
+	}
+}, _onMouseOver:function (evt) {
+	if (!this._mouseover_list) {
+		this._handleBlurTimer(true, 0);
+		this._mouseover_list = true;
+	}
+}, _onMouseOut:function (evt) {
+	var relTarget = evt.relatedTarget;
+	try {
+		if (!relTarget || relTarget.parentNode != this.optionsListNode) {
+			this._mouseover_list = false;
+			this._handleBlurTimer(true, 100);
 			this._tryFocus();
-		},
-
-		_clearResultList: function(){
-			if(this.optionsListNode.innerHTML){
-				this.optionsListNode.innerHTML = "";  // browser natively knows how to collect this memory
+		}
+	}
+	catch (e) {
+	}
+}, _isInputEqualToResult:function (result) {
+	var input = this.textInputNode.value;
+	if (!this.dataProvider.caseSensitive) {
+		input = input.toLowerCase();
+		result = result.toLowerCase();
+	}
+	return (input == result);
+}, _isValidOption:function () {
+	var tgt = dojo.html.firstElement(this.optionsListNode);
+	var isValidOption = false;
+	while (!isValidOption && tgt) {
+		if (this._isInputEqualToResult(tgt.getAttribute("resultName"))) {
+			isValidOption = true;
+		} else {
+			tgt = dojo.html.nextElement(tgt);
+		}
+	}
+	return isValidOption;
+}, _checkBlurred:function () {
+	if (!this._hasFocus && !this._mouseover_list) {
+		this._hideResultList();
+		if (!this.textInputNode.value.length) {
+			this.setAllValues("", "");
+			return;
+		}
+		var isValidOption = this._isValidOption();
+		if (this.forceValidOption && !isValidOption) {
+			this.setAllValues("", "");
+			return;
+		}
+		if (!isValidOption) {
+			this.setSelectedValue("");
+		}
+	}
+}, _selectOption:function (evt) {
+	var tgt = null;
+	if (!evt) {
+		evt = {target:this._highlighted_option};
+	}
+	if (!dojo.html.isDescendantOf(evt.target, this.optionsListNode)) {
+		if (!this.textInputNode.value.length) {
+			return;
+		}
+		tgt = dojo.html.firstElement(this.optionsListNode);
+		if (!tgt || !this._isInputEqualToResult(tgt.getAttribute("resultName"))) {
+			return;
+		}
+	} else {
+		tgt = evt.target;
+	}
+	while ((tgt.nodeType != 1) || (!tgt.getAttribute("resultName"))) {
+		tgt = tgt.parentNode;
+		if (tgt === dojo.body()) {
+			return false;
+		}
+	}
+	this.selectedResult = [tgt.getAttribute("resultName"), tgt.getAttribute("resultValue")];
+	this.setAllValues(tgt.getAttribute("resultName"), tgt.getAttribute("resultValue"));
+	if (!evt.noHide) {
+		this._hideResultList();
+		this._setSelectedRange(this.textInputNode, 0, null);
+	}
+	this._tryFocus();
+}, _clearResultList:function () {
+	if (this.optionsListNode.innerHTML) {
+		this.optionsListNode.innerHTML = "";
+	}
+}, _hideResultList:function () {
+	this.popupWidget.close();
+}, _showResultList:function () {
+	var childs = this.optionsListNode.childNodes;
+	if (childs.length) {
+		var visibleCount = Math.min(childs.length, this.maxListLength);
+		with (this.optionsListNode.style) {
+			display = "";
+			if (visibleCount == childs.length) {
+				height = "";
+			} else {
+				height = visibleCount * dojo.html.getMarginBox(childs[0]).height + "px";
 			}
-		},
-
-		_hideResultList: function(){
-			this.popupWidget.close();
-		},
-
-		_showResultList: function(){
-			// Our dear friend IE doesnt take max-height so we need to calculate that on our own every time
-			var childs = this.optionsListNode.childNodes;
-			if(childs.length){
-				var visibleCount = Math.min(childs.length,this.maxListLength);
-
-				with(this.optionsListNode.style)
-				{
-					display = "";
-					if(visibleCount == childs.length){
-						//no scrollbar is required, so unset height to let browser calcuate it,
-						//as in css, overflow is already set to auto
-						height = "";
-					}else{
-						//show it first to get the correct dojo.style.getOuterHeight(childs[0])
-						//FIXME: shall we cache the height of the item?
-						height = visibleCount * dojo.html.getMarginBox(childs[0]).height +"px";
-					}
-					width = (dojo.html.getMarginBox(this.domNode).width-2)+"px";
-				}
-				this.popupWidget.open(this.domNode, this, this.downArrowNode);
-			}else{
-				this._hideResultList();
-			}
-		},
-
-		handleArrowClick: function(){
-			// summary: callback when arrow is clicked
-			this._handleBlurTimer(true, 0);
-			this._tryFocus();
-			if(this.popupWidget.isShowingNow){
-				this._hideResultList();
-			}else{
-				// forces full population of results, if they click
-				// on the arrow it means they want to see more options
-				this._startSearch("");
-			}
-		},
-
-		_tryFocus: function(){
-			try {
-				this.textInputNode.focus();
-			} catch (e){
-				// element isn't focusable if disabled, or not visible etc - not easy to test for.
-	 		};
-		},
-
-		_startSearchFromInput: function(){
-			this._startSearch(this.textInputNode.value);
-		},
-
-		_startSearch: function(/*String*/ key){
-			this.dataProvider.startSearch(key, dojo.lang.hitch(this, "_openResultList"));
-		},
-
-		postCreate: function(){
-			this.onResize();
-
-			// TODO: add these attach events to template
-			dojo.event.connect(this.textInputNode, "onblur", this, "_onBlurInput");
-			dojo.event.connect(this.textInputNode, "onfocus", this, "_onFocusInput");
-
-			if (this.disabled){
-				this.disable();
-			}
-			var s = dojo.widget.html.stabile.getState(this.widgetId);
-			if (s){
-				this.setState(s);
-			}
+			width = (dojo.html.getMarginBox(this.domNode).width - 2) + "px";
 		}
+		this.popupWidget.open(this.domNode, this, this.downArrowNode);
+	} else {
+		this._hideResultList();
 	}
-);
+}, handleArrowClick:function () {
+	this._handleBlurTimer(true, 0);
+	this._tryFocus();
+	if (this.popupWidget.isShowingNow) {
+		this._hideResultList();
+	} else {
+		this._startSearch("");
+	}
+}, _tryFocus:function () {
+	try {
+		this.textInputNode.focus();
+	}
+	catch (e) {
+	}
+}, _startSearchFromInput:function () {
+	this._startSearch(this.textInputNode.value);
+}, _startSearch:function (key) {
+	this.dataProvider.startSearch(key, dojo.lang.hitch(this, "_openResultList"));
+}, postCreate:function () {
+	this.onResize();
+	dojo.event.connect(this.textInputNode, "onblur", this, "_onBlurInput");
+	dojo.event.connect(this.textInputNode, "onfocus", this, "_onFocusInput");
+	if (this.disabled) {
+		this.disable();
+	}
+	var s = dojo.widget.html.stabile.getState(this.widgetId);
+	if (s) {
+		this.setState(s);
+	}
+}});
 
+
 __CPAN_FILE__ src/widget/SplitContainer.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -35141,13 +22164,6 @@
 */
 
 dojo.provide("dojo.widget.SplitContainer");
-
-//
-// TODO
-// make it prettier
-// active dragging upwards doesn't always shift other bars (direction calculation is wrong in this case)
-//
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.ContentPane");
 dojo.require("dojo.widget.HtmlWidget");
@@ -35155,522 +22171,312 @@
 dojo.require("dojo.html.layout");
 dojo.require("dojo.html.selection");
 dojo.require("dojo.io.cookie");
-
-dojo.widget.defineWidget(
-	"dojo.widget.SplitContainer",
-	dojo.widget.HtmlWidget,
-	function(){
-		this.sizers = [];
-	},
-{
-	// summary
-	//		Contains multiple children widgets, all of which are displayed side by side
-	//		(either horizontally or vertically); there's a bar between each of the children,
-	//		and you can adjust the relative size of each child by dragging the bars.
-	//
-	//		You must specify a size (width and height) for the SplitContainer.
-
-	isContainer: true,
-
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/SplitContainer.css"),
-
-	// activeSizing: Boolean
-	//		If true, the children's size changes as you drag the bar;
-	//		otherwise, the sizes don't change until you drop the bar (by mouse-up)
-	activeSizing: false,
-	
-	// sizerWidget: Integer
-	//		Size in pixels of the bar between each child
-	sizerWidth: 15,
-	
-	// orientation: String
-	//		either 'horizontal' or vertical; indicates whether the children are
-	//		arranged side-by-side or up/down.
-	orientation: 'horizontal',
-	
-	// persist: Boolean
-	//		Save splitter positions in a cookie
-	persist: true,
-
-	postMixInProperties: function(){
-		dojo.widget.SplitContainer.superclass.postMixInProperties.apply(this, arguments);
-		this.isHorizontal = (this.orientation == 'horizontal');
-	},
-
-	fillInTemplate: function(){
-		dojo.widget.SplitContainer.superclass.fillInTemplate.apply(this, arguments);
-		dojo.html.addClass(this.domNode, "dojoSplitContainer");
-		// overflow has to be explicitly hidden for splitContainers using gekko (trac #1435)
-		// to keep other combined css classes from inadvertantly making the overflow visible
-		if (dojo.render.html.moz) {
-		        this.domNode.style.overflow = '-moz-scrollbars-none'; // hidden doesn't work
+dojo.widget.defineWidget("dojo.widget.SplitContainer", dojo.widget.HtmlWidget, function () {
+	this.sizers = [];
+}, {isContainer:true, templateCssString:".dojoSplitContainer{\n\tposition: relative;\n\toverflow: hidden;\n\tdisplay: block;\n}\n\n.dojoSplitPane{\n\tposition: absolute;\n}\n\n.dojoSplitContainerSizerH,\n.dojoSplitContainerSizerV {\n\tfont-size: 1px;\n\tcursor: move;\n\tcursor: w-resize;\n\tbackground-color: ThreeDFace;\n\tborder: 1px solid;\n\tborder-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;\n\tmargin: 0;\n}\n\n.dojoSplitContainerSizerV {\n\tcursor: n-resize;\n}\n\n.dojoSplitContainerVirtualSizerH,\n.dojoSplitContainerVirtualSizerV {\n\tfont-size: 1px;\n\tcursor: move;\n\tcursor: w-resize;\n\tbackground-color: ThreeDShadow;\n\t-moz-opacity: 0.5;\n\topacity: 0.5;\n\tfilter: Alpha(Opacity=50);\n\tmargin: 0;\n}\n\n.dojoSplitContainerVirtualSizerV {\n\tcursor: n-resize;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/SplitContainer.css"), activeSizing:false, sizerWidth:15, orientation:"horizontal", persist:true, postMixInProperties:function () {
+	dojo.widget.SplitContainer.superclass.postMixInProperties.apply(this, arguments);
+	this.isHorizontal = (this.orientation == "horizontal");
+}, fillInTemplate:function () {
+	dojo.widget.SplitContainer.superclass.fillInTemplate.apply(this, arguments);
+	dojo.html.addClass(this.domNode, "dojoSplitContainer");
+	if (dojo.render.html.moz) {
+		this.domNode.style.overflow = "-moz-scrollbars-none";
+	}
+	var content = dojo.html.getContentBox(this.domNode);
+	this.paneWidth = content.width;
+	this.paneHeight = content.height;
+}, onResized:function (e) {
+	var content = dojo.html.getContentBox(this.domNode);
+	this.paneWidth = content.width;
+	this.paneHeight = content.height;
+	this._layoutPanels();
+}, postCreate:function (args, fragment, parentComp) {
+	dojo.widget.SplitContainer.superclass.postCreate.apply(this, arguments);
+	for (var i = 0; i < this.children.length; i++) {
+		with (this.children[i].domNode.style) {
+			position = "absolute";
 		}
-		
-		var content = dojo.html.getContentBox(this.domNode);
-		this.paneWidth = content.width;
-		this.paneHeight = content.height;
-	},
-
-	onResized: function(e){
-		var content = dojo.html.getContentBox(this.domNode);
-		this.paneWidth = content.width;
-		this.paneHeight = content.height;
-		this._layoutPanels();
-	},
-
-	postCreate: function(args, fragment, parentComp){
-		dojo.widget.SplitContainer.superclass.postCreate.apply(this, arguments);
-		// attach the children and create the draggers
-		for(var i=0; i<this.children.length; i++){
-            with(this.children[i].domNode.style){
-                position = "absolute";
-            }
-            dojo.html.addClass(this.children[i].domNode,
-                "dojoSplitPane");
-
-            if(i == this.children.length-1){
-                break;
-            }
-
-            this._addSizer();
+		dojo.html.addClass(this.children[i].domNode, "dojoSplitPane");
+		if (i == this.children.length - 1) {
+			break;
 		}
-
-		// create the fake dragger
-		if (typeof this.sizerWidth == "object") { 
-			try {
-				this.sizerWidth = parseInt(this.sizerWidth.toString()); 
-			} catch(e) { this.sizerWidth = 15; }
+		this._addSizer();
+	}
+	if (typeof this.sizerWidth == "object") {
+		try {
+			this.sizerWidth = parseInt(this.sizerWidth.toString());
 		}
-		this.virtualSizer = document.createElement('div');
-		this.virtualSizer.style.position = 'absolute';
-		this.virtualSizer.style.display = 'none';
-		//this.virtualSizer.style.backgroundColor = 'lime';
-		this.virtualSizer.style.zIndex = 10;
-		this.virtualSizer.className = this.isHorizontal ? 'dojoSplitContainerVirtualSizerH' : 'dojoSplitContainerVirtualSizerV';
-		this.domNode.appendChild(this.virtualSizer);
-
-		dojo.html.disableSelection(this.virtualSizer);
-
-		if(this.persist){
-			this._restoreState();
+		catch (e) {
+			this.sizerWidth = 15;
 		}
-
-		// size the panels once the browser has caught up
-		this.resizeSoon();
-	},
-
-    _injectChild: function(child) {
-        with(child.domNode.style){
-            position = "absolute";
-        }
-        dojo.html.addClass(child.domNode,
-            "dojoSplitPane");
-    },
-
-    _addSizer: function() {
-        var i = this.sizers.length;
-
-        this.sizers[i] = document.createElement('div');
-        this.sizers[i].style.position = 'absolute';
-        this.sizers[i].className = this.isHorizontal ? 'dojoSplitContainerSizerH' : 'dojoSplitContainerSizerV';
-
-        var self = this;
-        var handler = (function(){ var sizer_i = i; return function(e){ self.beginSizing(e, sizer_i); } })();
-        dojo.event.connect(this.sizers[i], "onmousedown", handler);
-
-        this.domNode.appendChild(this.sizers[i]);
-        dojo.html.disableSelection(this.sizers[i]);
-    },
-
-    removeChild: function(widget){
-        // Remove sizer, but only if widget is really our child and
-        // we have at least one sizer to throw away
-        if (this.sizers.length > 0) {
-            for(var x=0; x<this.children.length; x++){
-                if(this.children[x] === widget){
-                    var i = this.sizers.length - 1;
-                    this.domNode.removeChild(this.sizers[i]);
-                    this.sizers.length = i;
-                    break;
-                }
-            }
-        }
-
-        // Remove widget and repaint
-        dojo.widget.SplitContainer.superclass.removeChild.call(this, widget, arguments);
-        this.onResized();
-    },
-
-    addChild: function(widget){
-        dojo.widget.SplitContainer.superclass.addChild.apply(this, arguments);
-        this._injectChild(widget);
-
-        if (this.children.length > 1) {
-            this._addSizer();
-        }
-
-        this._layoutPanels();
-    },
-
-    _layoutPanels: function(){
-        if (this.children.length == 0){ return; }
-
-		//
-		// calculate space
-		//
-
-		var space = this.isHorizontal ? this.paneWidth : this.paneHeight;
-		if (this.children.length > 1){
-			space -= this.sizerWidth * (this.children.length - 1);
+	}
+	this.virtualSizer = document.createElement("div");
+	this.virtualSizer.style.position = "absolute";
+	this.virtualSizer.style.display = "none";
+	this.virtualSizer.style.zIndex = 10;
+	this.virtualSizer.className = this.isHorizontal ? "dojoSplitContainerVirtualSizerH" : "dojoSplitContainerVirtualSizerV";
+	this.domNode.appendChild(this.virtualSizer);
+	dojo.html.disableSelection(this.virtualSizer);
+	if (this.persist) {
+		this._restoreState();
+	}
+	this.resizeSoon();
+}, _injectChild:function (child) {
+	with (child.domNode.style) {
+		position = "absolute";
+	}
+	dojo.html.addClass(child.domNode, "dojoSplitPane");
+}, _addSizer:function () {
+	var i = this.sizers.length;
+	this.sizers[i] = document.createElement("div");
+	this.sizers[i].style.position = "absolute";
+	this.sizers[i].className = this.isHorizontal ? "dojoSplitContainerSizerH" : "dojoSplitContainerSizerV";
+	var self = this;
+	var handler = (function () {
+		var sizer_i = i;
+		return function (e) {
+			self.beginSizing(e, sizer_i);
+		};
+	})();
+	dojo.event.connect(this.sizers[i], "onmousedown", handler);
+	this.domNode.appendChild(this.sizers[i]);
+	dojo.html.disableSelection(this.sizers[i]);
+}, removeChild:function (widget) {
+	if (this.sizers.length > 0) {
+		for (var x = 0; x < this.children.length; x++) {
+			if (this.children[x] === widget) {
+				var i = this.sizers.length - 1;
+				this.domNode.removeChild(this.sizers[i]);
+				this.sizers.length = i;
+				break;
+			}
 		}
-
-
-		//
-		// calculate total of SizeShare values
-		//
-
-		var out_of = 0;
-		for(var i=0; i<this.children.length; i++){
-			out_of += this.children[i].sizeShare;
-		}
-
-
-		//
-		// work out actual pixels per sizeshare unit
-		//
-
-		var pix_per_unit = space / out_of;
-
-
-		//
-		// set the SizeActual member of each pane
-		//
-
-		var total_size = 0;
-
-		for(var i=0; i<this.children.length-1; i++){
-			var size = Math.round(pix_per_unit * this.children[i].sizeShare);
-			this.children[i].sizeActual = size;
-			total_size += size;
-		}
-		this.children[this.children.length-1].sizeActual = space - total_size;
-
-		//
-		// make sure the sizes are ok
-		//
-
-		this._checkSizes();
-
-
-		//
-		// now loop, positioning each pane and letting children resize themselves
-		//
-
-		var pos = 0;
-		var size = this.children[0].sizeActual;
-		this._movePanel(this.children[0], pos, size);
-		this.children[0].position = pos;
+	}
+	dojo.widget.SplitContainer.superclass.removeChild.call(this, widget, arguments);
+	this.onResized();
+}, addChild:function (widget) {
+	dojo.widget.SplitContainer.superclass.addChild.apply(this, arguments);
+	this._injectChild(widget);
+	if (this.children.length > 1) {
+		this._addSizer();
+	}
+	this._layoutPanels();
+}, _layoutPanels:function () {
+	if (this.children.length == 0) {
+		return;
+	}
+	var space = this.isHorizontal ? this.paneWidth : this.paneHeight;
+	if (this.children.length > 1) {
+		space -= this.sizerWidth * (this.children.length - 1);
+	}
+	var out_of = 0;
+	for (var i = 0; i < this.children.length; i++) {
+		out_of += this.children[i].sizeShare;
+	}
+	var pix_per_unit = space / out_of;
+	var total_size = 0;
+	for (var i = 0; i < this.children.length - 1; i++) {
+		var size = Math.round(pix_per_unit * this.children[i].sizeShare);
+		this.children[i].sizeActual = size;
+		total_size += size;
+	}
+	this.children[this.children.length - 1].sizeActual = space - total_size;
+	this._checkSizes();
+	var pos = 0;
+	var size = this.children[0].sizeActual;
+	this._movePanel(this.children[0], pos, size);
+	this.children[0].position = pos;
+	pos += size;
+	for (var i = 1; i < this.children.length; i++) {
+		this._moveSlider(this.sizers[i - 1], pos, this.sizerWidth);
+		this.sizers[i - 1].position = pos;
+		pos += this.sizerWidth;
+		size = this.children[i].sizeActual;
+		this._movePanel(this.children[i], pos, size);
+		this.children[i].position = pos;
 		pos += size;
-
-		for(var i=1; i<this.children.length; i++){
-
-			// first we position the sizing handle before this pane
-			this._moveSlider(this.sizers[i-1], pos, this.sizerWidth);
-			this.sizers[i-1].position = pos;
-			pos += this.sizerWidth;
-
-			size = this.children[i].sizeActual;
-			this._movePanel(this.children[i], pos, size);
-			this.children[i].position = pos;
-			pos += size;
+	}
+}, _movePanel:function (panel, pos, size) {
+	if (this.isHorizontal) {
+		panel.domNode.style.left = pos + "px";
+		panel.domNode.style.top = 0;
+		panel.resizeTo(size, this.paneHeight);
+	} else {
+		panel.domNode.style.left = 0;
+		panel.domNode.style.top = pos + "px";
+		panel.resizeTo(this.paneWidth, size);
+	}
+}, _moveSlider:function (slider, pos, size) {
+	if (this.isHorizontal) {
+		slider.style.left = pos + "px";
+		slider.style.top = 0;
+		dojo.html.setMarginBox(slider, {width:size, height:this.paneHeight});
+	} else {
+		slider.style.left = 0;
+		slider.style.top = pos + "px";
+		dojo.html.setMarginBox(slider, {width:this.paneWidth, height: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;
+			}
 		}
-	},
-
-	_movePanel: function(/*Widget*/ panel, pos, size){
-		if (this.isHorizontal){
-			panel.domNode.style.left = pos + 'px';
-			panel.domNode.style.top = 0;
-			panel.resizeTo(size, this.paneHeight);
-		}else{
-			panel.domNode.style.left = 0;
-			panel.domNode.style.top = pos + 'px';
-			panel.resizeTo(this.paneWidth, size);
-		}
-	},
-
-	_moveSlider: function(/*DomNode*/ slider, pos, size){
-		if (this.isHorizontal){
-			slider.style.left = pos + 'px';
-			slider.style.top = 0;
-			dojo.html.setMarginBox(slider, { width: size, height: this.paneHeight });
-		}else{
-			slider.style.left = 0;
-			slider.style.top = pos + 'px';
-			dojo.html.setMarginBox(slider, { width: this.paneWidth, height: size });
-		}
-	},
-
-	_growPane: function(growth, pane){
-		if (growth > 0){
-			if (pane.sizeActual > pane.sizeMin){
-				if ((pane.sizeActual - pane.sizeMin) > growth){
-
-					// stick all the growth in this pane
-					pane.sizeActual = pane.sizeActual - growth;
-					growth = 0;
-				}else{
-					// put as much growth in here as we can
-					growth -= pane.sizeActual - pane.sizeMin;
-					pane.sizeActual = pane.sizeMin;
-				}
+	}
+	return growth;
+}, _checkSizes:function () {
+	var total_min_size = 0;
+	var total_size = 0;
+	for (var i = 0; i < this.children.length; i++) {
+		total_size += this.children[i].sizeActual;
+		total_min_size += this.children[i].sizeMin;
+	}
+	if (total_min_size <= total_size) {
+		var growth = 0;
+		for (var i = 0; i < this.children.length; i++) {
+			if (this.children[i].sizeActual < this.children[i].sizeMin) {
+				growth += this.children[i].sizeMin - this.children[i].sizeActual;
+				this.children[i].sizeActual = this.children[i].sizeMin;
 			}
 		}
-		return growth;
-	},
-
-	_checkSizes: function(){
-
-		var total_min_size = 0;
-		var total_size = 0;
-
-		for(var i=0; i<this.children.length; i++){
-
-			total_size += this.children[i].sizeActual;
-			total_min_size += this.children[i].sizeMin;
-		}
-
-		// only make adjustments if we have enough space for all the minimums
-
-		if (total_min_size <= total_size){
-
-			var growth = 0;
-
-			for(var i=0; i<this.children.length; i++){
-
-				if (this.children[i].sizeActual < this.children[i].sizeMin){
-
-					growth += this.children[i].sizeMin - this.children[i].sizeActual;
-					this.children[i].sizeActual = this.children[i].sizeMin;
+		if (growth > 0) {
+			if (this.isDraggingLeft) {
+				for (var i = this.children.length - 1; i >= 0; i--) {
+					growth = this._growPane(growth, this.children[i]);
 				}
-			}
-
-			if (growth > 0){
-				if (this.isDraggingLeft){
-					for(var i=this.children.length-1; i>=0; i--){
-						growth = this._growPane(growth, this.children[i]);
-					}
-				}else{
-					for(var i=0; i<this.children.length; i++){
-						growth = this._growPane(growth, this.children[i]);
-					}
+			} else {
+				for (var i = 0; i < this.children.length; i++) {
+					growth = this._growPane(growth, this.children[i]);
 				}
 			}
-		}else{
-
-			for(var i=0; i<this.children.length; i++){
-				this.children[i].sizeActual = Math.round(total_size * (this.children[i].sizeMin / total_min_size));
-			}
 		}
-	},
-
-	beginSizing: function(e, i){
-		this.paneBefore = this.children[i];
-		this.paneAfter = this.children[i+1];
-
-		this.isSizing = true;
-		this.sizingSplitter = this.sizers[i];
-		this.originPos = dojo.html.getAbsolutePosition(this.children[0].domNode, true, dojo.html.boxSizing.MARGIN_BOX);
-		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;
+	} else {
+		for (var i = 0; i < this.children.length; i++) {
+			this.children[i].sizeActual = Math.round(total_size * (this.children[i].sizeMin / total_min_size));
 		}
-		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();
-		}
-
-		//
-		// attach mouse events
-		//
-
-		dojo.event.connect(document.documentElement, "onmousemove", this, "changeSizing");
-		dojo.event.connect(document.documentElement, "onmouseup", this, "endSizing");
-		dojo.event.browser.stopEvent(e);
-	},
-
-	changeSizing: function(e){
-		this.lastPoint = this.isHorizontal ? e.pageX : e.pageY;
-		if (this.activeSizing){
-			this.movePoint();
-			this._updateSize();
-		}else{
-			this.movePoint();
-			this._moveSizingLine();
-		}
-		dojo.event.browser.stopEvent(e);
-	},
-
-	endSizing: function(e){
-
-		if (!this.activeSizing){
-			this._hideSizingLine();
-		}
-
+	}
+}, beginSizing:function (e, i) {
+	this.paneBefore = this.children[i];
+	this.paneAfter = this.children[i + 1];
+	this.isSizing = true;
+	this.sizingSplitter = this.sizers[i];
+	this.originPos = dojo.html.getAbsolutePosition(this.children[0].domNode, true, dojo.html.boxSizing.MARGIN_BOX);
+	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();
+	}
+	dojo.event.connect(document.documentElement, "onmousemove", this, "changeSizing");
+	dojo.event.connect(document.documentElement, "onmouseup", this, "endSizing");
+	dojo.event.browser.stopEvent(e);
+}, changeSizing:function (e) {
+	this.lastPoint = this.isHorizontal ? e.pageX : e.pageY;
+	if (this.activeSizing) {
+		this.movePoint();
 		this._updateSize();
-
-		this.isSizing = false;
-
-		dojo.event.disconnect(document.documentElement, "onmousemove", this, "changeSizing");
-		dojo.event.disconnect(document.documentElement, "onmouseup", this, "endSizing");
-		
-		if(this.persist){
-			this._saveState(this);
-		}
-	},
-
-	movePoint: function(){
-
-		// make sure lastPoint is a legal point to drag to
-		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) ? true : false;
-
-		if (!this.activeSizing){
-
-			if (a < this.paneBefore.position + this.paneBefore.sizeMin){
-
-				a = this.paneBefore.position + this.paneBefore.sizeMin;
-			}
-
-			if (a > this.paneAfter.position + (this.paneAfter.sizeActual - (this.sizerWidth + this.paneAfter.sizeMin))){
-
-				a = this.paneAfter.position + (this.paneAfter.sizeActual - (this.sizerWidth + this.paneAfter.sizeMin));
-			}
-		}
-
-		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;
-
-		for(var i=0; i<this.children.length; i++){
-
-			this.children[i].sizeShare = this.children[i].sizeActual;
-		}
-
-		this._layoutPanels();
-	},
-
-	_showSizingLine: function(){
-
+	} else {
+		this.movePoint();
 		this._moveSizingLine();
-
-		if (this.isHorizontal){
-			dojo.html.setMarginBox(this.virtualSizer, { width: this.sizerWidth, height: this.paneHeight });
-		}else{
-			dojo.html.setMarginBox(this.virtualSizer, { width: this.paneWidth, height: this.sizerWidth });
+	}
+	dojo.event.browser.stopEvent(e);
+}, endSizing:function (e) {
+	if (!this.activeSizing) {
+		this._hideSizingLine();
+	}
+	this._updateSize();
+	this.isSizing = false;
+	dojo.event.disconnect(document.documentElement, "onmousemove", this, "changeSizing");
+	dojo.event.disconnect(document.documentElement, "onmouseup", this, "endSizing");
+	if (this.persist) {
+		this._saveState(this);
+	}
+}, 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) ? true : false;
+	if (!this.activeSizing) {
+		if (a < this.paneBefore.position + this.paneBefore.sizeMin) {
+			a = this.paneBefore.position + this.paneBefore.sizeMin;
 		}
-
-		this.virtualSizer.style.display = 'block';
-	},
-
-	_hideSizingLine: function(){
-		this.virtualSizer.style.display = 'none';
-	},
-
-	_moveSizingLine: function(){
-		var pos = this.lastPoint - this.startPoint + this.sizingSplitter.position;
-		if (this.isHorizontal){
-			this.virtualSizer.style.left = pos + 'px';
-		}else{
-			var pos = (this.lastPoint - this.startPoint) + this.sizingSplitter.position;
-			this.virtualSizer.style.top = pos + 'px';
+		if (a > this.paneAfter.position + (this.paneAfter.sizeActual - (this.sizerWidth + this.paneAfter.sizeMin))) {
+			a = this.paneAfter.position + (this.paneAfter.sizeActual - (this.sizerWidth + this.paneAfter.sizeMin));
 		}
-
-	},
-	
-	_getCookieName: function(i) {
-		return this.widgetId + "_" + i;
-	},
-
-	_restoreState: function () {
-		for(var i=0; i<this.children.length; i++) {
-			var cookieName = this._getCookieName(i);
-			var cookieValue = dojo.io.cookie.getCookie(cookieName);
-			if (cookieValue != null) {
-				var pos = parseInt(cookieValue);
-				if (typeof pos == "number") {
-					this.children[i].sizeShare=pos;
-				}
+	}
+	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;
+	for (var i = 0; i < this.children.length; i++) {
+		this.children[i].sizeShare = this.children[i].sizeActual;
+	}
+	this._layoutPanels();
+}, _showSizingLine:function () {
+	this._moveSizingLine();
+	if (this.isHorizontal) {
+		dojo.html.setMarginBox(this.virtualSizer, {width:this.sizerWidth, height:this.paneHeight});
+	} else {
+		dojo.html.setMarginBox(this.virtualSizer, {width:this.paneWidth, height: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;
+	if (this.isHorizontal) {
+		this.virtualSizer.style.left = pos + "px";
+	} else {
+		var pos = (this.lastPoint - this.startPoint) + this.sizingSplitter.position;
+		this.virtualSizer.style.top = pos + "px";
+	}
+}, _getCookieName:function (i) {
+	return this.widgetId + "_" + i;
+}, _restoreState:function () {
+	for (var i = 0; i < this.children.length; i++) {
+		var cookieName = this._getCookieName(i);
+		var cookieValue = dojo.io.cookie.getCookie(cookieName);
+		if (cookieValue != null) {
+			var pos = parseInt(cookieValue);
+			if (typeof pos == "number") {
+				this.children[i].sizeShare = pos;
 			}
 		}
-	},
-
-	_saveState: function (){
-		for(var i=0; i<this.children.length; i++) {
-			var cookieName = this._getCookieName(i);
-			dojo.io.cookie.setCookie(cookieName, this.children[i].sizeShare, null, null, null, null);
-		}
 	}
-});
+}, _saveState:function () {
+	for (var i = 0; i < this.children.length; i++) {
+		var cookieName = this._getCookieName(i);
+		dojo.io.cookie.setCookie(cookieName, this.children[i].sizeShare, null, null, null, null);
+	}
+}});
+dojo.lang.extend(dojo.widget.Widget, {sizeMin:10, sizeShare:10});
+dojo.widget.defineWidget("dojo.widget.SplitContainerPanel", dojo.widget.ContentPane, {});
 
-// These arguments can be specified for the children of a SplitContainer.
-// Since any widget can be specified as a SplitContainer child, mix them
-// into the base widget class.  (This is a hack, but it's effective.)
-dojo.lang.extend(dojo.widget.Widget, {
-	// sizeMin: Integer
-	//	Minimum size (width or height) of a child of a SplitContainer.
-	//	The value is relative to other children's sizeShare properties.
-	sizeMin: 10,
 
-	// sizeShare: Integer
-	//	Size (width or height) of a child of a SplitContainer.
-	//	The value is relative to other children's sizeShare properties.
-	//	For example, if there are two children and each has sizeShare=10, then
-	//	each takes up 50% of the available space.
-	sizeShare: 10
-});
-
-// Deprecated class for split pane children.
-// Actually any widget can be the child of a split pane
-dojo.widget.defineWidget(
-	"dojo.widget.SplitContainerPanel",
-	dojo.widget.ContentPane,
-	{}
-);
-
-
 __CPAN_FILE__ src/widget/TreeExpandToNodeOnSelect.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -35682,44 +22488,17 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeExpandToNodeOnSelect");
-
 dojo.require("dojo.widget.HtmlWidget");
+dojo.widget.defineWidget("dojo.widget.TreeExpandToNodeOnSelect", dojo.widget.HtmlWidget, {selector:"", controller:"", withSelected:false, initialize:function () {
+	this.selector = dojo.widget.byId(this.selector);
+	this.controller = dojo.widget.byId(this.controller);
+	dojo.event.topic.subscribe(this.selector.eventNames.select, this, "onSelect");
+}, onSelectEvent:function (message) {
+	this.controller.expandToNode(message.node, this.withSelected);
+}});
 
-/**
- * when a node is selected, expands tree to make it visible
- * useful for program expansion
- */
-dojo.widget.defineWidget(
-	"dojo.widget.TreeExpandToNodeOnSelect",
-	dojo.widget.HtmlWidget,
-{
-	selector: "",
-	controller: "",
-	
-	/**
-	* if true, then selected node will be expanded too
-	*/
-	withSelected: false,
-	
-	initialize: function() {
-		this.selector = dojo.widget.byId(this.selector);
-		this.controller = dojo.widget.byId(this.controller);
-		
-		dojo.event.topic.subscribe(this.selector.eventNames.select, this, "onSelect");	
-	},
 
-	
-	onSelectEvent: function(message) {
-		this.controller.expandToNode(message.node, this.withSelected)		
-	}
-	
-	
-	
-
-});
-
 __CPAN_FILE__ src/widget/FloatingPane.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -35732,7 +22511,6 @@
 */
 
 dojo.provide("dojo.widget.FloatingPane");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.Manager");
 dojo.require("dojo.html.*");
@@ -35743,438 +22521,233 @@
 dojo.require("dojo.widget.html.layout");
 dojo.require("dojo.widget.ContentPane");
 dojo.require("dojo.dnd.HtmlDragMove");
-dojo.require("dojo.widget.Dialog");		// for ModalFloatingPane
+dojo.require("dojo.widget.Dialog");
 dojo.require("dojo.widget.ResizeHandle");
-
-dojo.declare(
-	"dojo.widget.FloatingPaneBase",
-	null,
-	{
-		// summary
-		//	Base class for FloatingPane, ModalFloatingPane
-
-		// title: String
-		//	text to display in floating pane's title bar (ex: "My Window")
-		title: '',
-
-		// iconSrc: String
-		//	path of icon to display in floating pane's title bar
-		iconSrc: '',
-
-		// hasShadow: Boolean
-		//	if true, display a shadow behind the floating pane
-		hasShadow: false,
-
-		// constrainToContainer: Boolean
-		//	if true, and the floating pane is inside another container (ContentPane, another FloatingPane, etc.),
-		//	then don't allow the floating pane to be dragged outside of it's container
-		constrainToContainer: false,
-
-		// taskBarId: String
-		//	widget id of TaskBar widget;
-		//	if specified, then an icon for this FloatingPane will be added to the specified TaskBar
-		taskBarId: "",
-
-		// resizable: Boolean
-		//	if true, allow user to resize floating pane
-		resizable: true,
-
-		// titleBarDisplay: Boolean
-		//	if true, display title bar for this floating pane
-		titleBarDisplay: true,
-
-		// windowState: String
-		//	controls whether window is initially not displayed ("minimized"), displayed full screen ("maximized"),
-		//	or just displayed normally ("normal").
-		// Values
-		//	"normal", "maximized", "minimized"
-		windowState: "normal",
-
-		// displayCloseAction: Boolean
-		//	display button to close window
-		displayCloseAction: false,
-
-		// displayMinimizeAction: Boolean
-		//	display button to minimize window (ie, window disappears so only the taskbar item remains)
-		displayMinimizeAction: false,
-
-		// displayMaximizeAction: Boolean
-		//	display button to maximize window (ie, to take up the full screen)
-		displayMaximizeAction: false,
-
-		// Related to connecting to taskbar
-		// TODO: use topics rather than repeated connect attempts?
-		_max_taskBarConnectAttempts: 5,
-		_taskBarConnectAttempts: 0,
-
-		templatePath: dojo.uri.dojoUri("src/widget/templates/FloatingPane.html"),
-		templateCssPath: dojo.uri.dojoUri("src/widget/templates/FloatingPane.css"),
-
-		fillInFloatingPaneTemplate: function(args, frag){
-			// summary: this should be called by fillInTemplate() of the widget that I'm mixed into
-
-			// Copy style info from input node to output node
-			var source = this.getFragNodeRef(frag);
-			dojo.html.copyStyle(this.domNode, source);
-
-			// necessary for safari, khtml (for computing width/height)
-			dojo.body().appendChild(this.domNode);
-
-			// if display:none then state=minimized, otherwise state=normal
-			if(!this.isShowing()){
-				this.windowState="minimized";
+dojo.declare("dojo.widget.FloatingPaneBase", null, {title:"", iconSrc:"", hasShadow:false, constrainToContainer:false, taskBarId:"", resizable:true, titleBarDisplay:true, windowState:"normal", displayCloseAction:false, displayMinimizeAction:false, displayMaximizeAction:false, _max_taskBarConnectAttempts:5, _taskBarConnectAttempts:0, templateString:"<div id=\"${this.widgetId}\" dojoAttachEvent=\"onMouseDown\" class=\"dojoFloatingPane\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dojoFloatingPaneTitleBar\"  style=\"display:none\">\n\t  \t<img dojoAttachPoint=\"titleBarIcon\"  class=\"dojoFloatingPaneTitleBarIcon\">\n\t\t<div dojoAttachPoint=\"closeAction\" dojoAttachEvent=\"onClick:closeWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneCloseIcon\"></div>\n\t\t<div dojoAttachPoint=\"restoreAction\" dojoAttachEvent=\"onClick:restoreWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneRestoreIcon\"></div>\n\t\t<div dojoAttachPoint=\"maximizeAction\" dojoAttachEvent=\"onClick:maximizeWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneMaximizeIcon\"></div>\n\t\t<div dojoAttachPoint=\"minimizeAction\" dojoAttachEvent=\"onClick:minimizeWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneMinimizeIcon\"></div>\n\t  \t<div dojoAttachPoint=\"titleBarText\" class=\"dojoFloatingPaneTitleText\">${this.title}</div>\n\t</div>\n\n\t<div id=\"${this.widgetId}_container\" dojoAttachPoint=\"containerNode\" class=\"dojoFloatingPaneClient\"></div>\n\n\t<div dojoAttachPoint=\"resizeBar\" class=\"dojoFloatingPaneResizebar\" style=\"display:none\"></div>\n</div>\n", templateCssString:"\n/********** Outer Window ***************/\n\n.dojoFloatingPane {\n\t/* essential css */\n\tposition: absolute;\n\toverflow: visible;\t\t/* so drop shadow is displayed */\n\tz-index: 10;\n\n\t/* styling css */\n\tborder: 1px solid;\n\tborder-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;\n\tbackground-color: ThreeDFace;\n}\n\n\n/********** Title Bar ****************/\n\n.dojoFloatingPaneTitleBar {\n\tvertical-align: top;\n\tmargin: 2px 2px 2px 2px;\n\tz-index: 10;\n\tbackground-color: #7596c6;\n\tcursor: default;\n\toverflow: hidden;\n\tborder-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;\n\tvertical-align: middle;\n}\n\n.dojoFloatingPaneTitleText {\n\tfloat: left;\n\tpadding: 2px 4px 2px 2px;\n\twhite-space: nowrap;\n\tcolor: CaptionText;\n\tfont: small-caption;\n}\n\n.dojoTitleBarIcon {\n\tfloat: left;\n\theight: 22px;\n\twidth: 22px;\n\tvertical-align: middle;\n\tmargin-right: 5px;\n\tmargin-left: 5px;\n}\n\n.dojoFloatingPaneActions{\n\tfloat: right;\n\tposition: absolute;\n\tright: 2px;\n\ttop: 2px;\n\tvertical-align: middle;\n}\n\n\n.dojoFloatingPaneActionItem {\n\tvertical-align: middle;\n\tmargin-right: 1px;\n\theight: 22px;\n\twidth: 22px;\n}\n\n\n.dojoFloatingPaneTitleBarIcon {\n\t/* essential css */\n\tfloat: left;\n\n\t/* styling css */\n\tmargin-left: 2px;\n\tmargin-right: 4px;\n\theight: 22px;\n}\n\n/* minimize/maximize icons are specified by CSS only */\n.dojoFloatingPaneMinimizeIcon,\n.dojoFloatingPaneMaximizeIcon,\n.dojoFloatingPaneRestoreIcon,\n.dojoFloatingPaneCloseIcon {\n\tvertical-align: middle;\n\theight: 22px;\n\twidth: 22px;\n\tfloat: right;\n}\n.dojoFloatingPaneMinimizeIcon {\n\tbackground-image: url(images/floatingPaneMinimize.gif);\n}\n.dojoFloatingPaneMaximizeIcon {\n\tbackground-image: url(images/floatingPaneMaximize.gif);\n}\n.dojoFloatingPaneRestoreIcon {\n\tbackground-image: url(images/floatingPaneRestore.gif);\n}\n.dojoFloatingPaneCloseIcon {\n\tbackground-image: url(images/floatingPaneClose.gif);\n}\n\n/* bar at bottom of window that holds resize handle */\n.dojoFloatingPaneResizebar {\n\tz-index: 10;\n\theight: 13px;\n\tbackground-color: ThreeDFace;\n}\n\n/************* Client Area ***************/\n\n.dojoFloatingPaneClient {\n\tposition: relative;\n\tz-index: 10;\n\tborder: 1px solid;\n\tborder-color: ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow;\n\tmargin: 2px;\n\tbackground-color: ThreeDFace;\n\tpadding: 8px;\n\tfont-family: Verdana, Helvetica, Garamond, sans-serif;\n\tfont-size: 12px;\n\toverflow: auto;\n}\n\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/FloatingPane.css"), fillInFloatingPaneTemplate:function (args, frag) {
+	var source = this.getFragNodeRef(frag);
+	dojo.html.copyStyle(this.domNode, source);
+	dojo.body().appendChild(this.domNode);
+	if (!this.isShowing()) {
+		this.windowState = "minimized";
+	}
+	if (this.iconSrc == "") {
+		dojo.html.removeNode(this.titleBarIcon);
+	} else {
+		this.titleBarIcon.src = this.iconSrc.toString();
+	}
+	if (this.titleBarDisplay) {
+		this.titleBar.style.display = "";
+		dojo.html.disableSelection(this.titleBar);
+		this.titleBarIcon.style.display = (this.iconSrc == "" ? "none" : "");
+		this.minimizeAction.style.display = (this.displayMinimizeAction ? "" : "none");
+		this.maximizeAction.style.display = (this.displayMaximizeAction && this.windowState != "maximized" ? "" : "none");
+		this.restoreAction.style.display = (this.displayMaximizeAction && this.windowState == "maximized" ? "" : "none");
+		this.closeAction.style.display = (this.displayCloseAction ? "" : "none");
+		this.drag = new dojo.dnd.HtmlDragMoveSource(this.domNode);
+		if (this.constrainToContainer) {
+			this.drag.constrainTo();
+		}
+		this.drag.setDragHandle(this.titleBar);
+		var self = this;
+		dojo.event.topic.subscribe("dragMove", function (info) {
+			if (info.source.domNode == self.domNode) {
+				dojo.event.topic.publish("floatingPaneMove", {source:self});
 			}
-
-			// <img src=""> can hang IE!  better get rid of it
-			if(this.iconSrc==""){
-				dojo.html.removeNode(this.titleBarIcon);
-			}else{
-				this.titleBarIcon.src = this.iconSrc.toString();// dojo.uri.Uri obj req. toString()
+		});
+	}
+	if (this.resizable) {
+		this.resizeBar.style.display = "";
+		this.resizeHandle = dojo.widget.createWidget("ResizeHandle", {targetElmId:this.widgetId, id:this.widgetId + "_resize"});
+		this.resizeBar.appendChild(this.resizeHandle.domNode);
+	}
+	if (this.hasShadow) {
+		this.shadow = new dojo.lfx.shadow(this.domNode);
+	}
+	this.bgIframe = new dojo.html.BackgroundIframe(this.domNode);
+	if (this.taskBarId) {
+		this._taskBarSetup();
+	}
+	dojo.body().removeChild(this.domNode);
+}, postCreate:function () {
+	if (dojo.hostenv.post_load_) {
+		this._setInitialWindowState();
+	} else {
+		dojo.addOnLoad(this, "_setInitialWindowState");
+	}
+}, maximizeWindow:function (evt) {
+	var mb = dojo.html.getMarginBox(this.domNode);
+	this.previous = {width:mb.width || this.width, height:mb.height || this.height, left:this.domNode.style.left, top:this.domNode.style.top, bottom:this.domNode.style.bottom, right:this.domNode.style.right};
+	if (this.domNode.parentNode.style.overflow.toLowerCase() != "hidden") {
+		this.parentPrevious = {overflow:this.domNode.parentNode.style.overflow};
+		dojo.debug(this.domNode.parentNode.style.overflow);
+		this.domNode.parentNode.style.overflow = "hidden";
+	}
+	this.domNode.style.left = dojo.html.getPixelValue(this.domNode.parentNode, "padding-left", true) + "px";
+	this.domNode.style.top = dojo.html.getPixelValue(this.domNode.parentNode, "padding-top", true) + "px";
+	if ((this.domNode.parentNode.nodeName.toLowerCase() == "body")) {
+		var viewport = dojo.html.getViewport();
+		var padding = dojo.html.getPadding(dojo.body());
+		this.resizeTo(viewport.width - padding.width, viewport.height - padding.height);
+	} else {
+		var content = dojo.html.getContentBox(this.domNode.parentNode);
+		this.resizeTo(content.width, content.height);
+	}
+	this.maximizeAction.style.display = "none";
+	this.restoreAction.style.display = "";
+	if (this.resizeHandle) {
+		this.resizeHandle.domNode.style.display = "none";
+	}
+	this.drag.setDragHandle(null);
+	this.windowState = "maximized";
+}, minimizeWindow:function (evt) {
+	this.hide();
+	for (var attr in this.parentPrevious) {
+		this.domNode.parentNode.style[attr] = this.parentPrevious[attr];
+	}
+	this.lastWindowState = this.windowState;
+	this.windowState = "minimized";
+}, restoreWindow:function (evt) {
+	if (this.windowState == "minimized") {
+		this.show();
+		if (this.lastWindowState == "maximized") {
+			this.domNode.parentNode.style.overflow = "hidden";
+			this.windowState = "maximized";
+		} else {
+			this.windowState = "normal";
+		}
+	} else {
+		if (this.windowState == "maximized") {
+			for (var attr in this.previous) {
+				this.domNode.style[attr] = this.previous[attr];
 			}
-
-			if(this.titleBarDisplay){
-				this.titleBar.style.display="";
-				dojo.html.disableSelection(this.titleBar);
-
-				this.titleBarIcon.style.display = (this.iconSrc=="" ? "none" : "");
-
-				this.minimizeAction.style.display = (this.displayMinimizeAction ? "" : "none");
-				this.maximizeAction.style.display=
-					(this.displayMaximizeAction && this.windowState!="maximized" ? "" : "none");
-				this.restoreAction.style.display=
-					(this.displayMaximizeAction && this.windowState=="maximized" ? "" : "none");
-				this.closeAction.style.display= (this.displayCloseAction ? "" : "none");
-
-				this.drag = new dojo.dnd.HtmlDragMoveSource(this.domNode);
-				if (this.constrainToContainer) {
-					this.drag.constrainTo();
-				}
-				this.drag.setDragHandle(this.titleBar);
-
-				var self = this;
-
-				dojo.event.topic.subscribe("dragMove",
-					function (info){
-						if (info.source.domNode == self.domNode){
-							dojo.event.topic.publish('floatingPaneMove', { source: self } );
-						}
-					}
-				);
-			}
-
-			if(this.resizable){
-				this.resizeBar.style.display="";
-				this.resizeHandle = dojo.widget.createWidget("ResizeHandle", {targetElmId: this.widgetId, id:this.widgetId+"_resize"});
-				this.resizeBar.appendChild(this.resizeHandle.domNode);
-			}
-
-			// add a drop shadow
-			if(this.hasShadow){
-				this.shadow=new dojo.lfx.shadow(this.domNode);
-			}
-
-			// Prevent IE bleed-through problem
-			this.bgIframe = new dojo.html.BackgroundIframe(this.domNode);
-
-			if( this.taskBarId ){
-				this._taskBarSetup();
-			}
-
-			// counteract body.appendChild above
-			dojo.body().removeChild(this.domNode);
-		},
-
-		postCreate: function(){
-			if (dojo.hostenv.post_load_) {
-				this._setInitialWindowState();
-			} else {
-				dojo.addOnLoad(this, "_setInitialWindowState");
-			}
-		},
-
-		maximizeWindow: function(/*Event*/ evt) {
-			// summary: maximize the window
-			var mb = dojo.html.getMarginBox(this.domNode);
-			this.previous={
-				width: mb.width || this.width,
-				height: mb.height || this.height,
-				left: this.domNode.style.left,
-				top: this.domNode.style.top,
-				bottom: this.domNode.style.bottom,
-				right: this.domNode.style.right
-			};
-			if(this.domNode.parentNode.style.overflow.toLowerCase() != 'hidden'){
-				this.parentPrevious={
-					overflow: this.domNode.parentNode.style.overflow
-				};
-				dojo.debug(this.domNode.parentNode.style.overflow);
-				this.domNode.parentNode.style.overflow = 'hidden';
-			}
-
-			this.domNode.style.left =
-				dojo.html.getPixelValue(this.domNode.parentNode, "padding-left", true) + "px";
-			this.domNode.style.top =
-				dojo.html.getPixelValue(this.domNode.parentNode, "padding-top", true) + "px";
-
-			if ((this.domNode.parentNode.nodeName.toLowerCase() == 'body')) {
-				var viewport = dojo.html.getViewport();
-				var padding = dojo.html.getPadding(dojo.body());
-				this.resizeTo(viewport.width-padding.width, viewport.height-padding.height);
-			} else {
-				var content = dojo.html.getContentBox(this.domNode.parentNode);
-				this.resizeTo(content.width, content.height);
-			}
-			this.maximizeAction.style.display="none";
-			this.restoreAction.style.display="";
-
-			//disable resize and drag
-			if(this.resizeHandle){
-				this.resizeHandle.domNode.style.display="none";
-			}
-			this.drag.setDragHandle(null);
-
-			this.windowState="maximized";
-		},
-
-		minimizeWindow: function(/*Event*/ evt) {
-			// summary: hide the window so that only the icon in the taskbar is shown
-			this.hide();
-			for(var attr in this.parentPrevious){
+			for (var attr in this.parentPrevious) {
 				this.domNode.parentNode.style[attr] = this.parentPrevious[attr];
 			}
-			this.lastWindowState = this.windowState;
-			this.windowState = "minimized";
-		},
-
-		restoreWindow: function(/*Event*/ evt) {
-			// summary: set the winow to normal size (neither maximized nor minimized)
-			if (this.windowState=="minimized") {
-				this.show();
-				if(this.lastWindowState == "maximized"){
-					this.domNode.parentNode.style.overflow = 'hidden';
-					this.windowState="maximized";
-				}else{ //normal
-					this.windowState="normal";
-				}
-			} else if (this.windowState=="maximized"){
-				for(var attr in this.previous){
-					this.domNode.style[attr] = this.previous[attr];
-				}
-				for(var attr in this.parentPrevious){
-					this.domNode.parentNode.style[attr] = this.parentPrevious[attr];
-				}
-				this.resizeTo(this.previous.width, this.previous.height);
-				this.previous=null;
-				this.parentPrevious=null;
-
-				this.restoreAction.style.display="none";
-				this.maximizeAction.style.display=this.displayMaximizeAction ? "" : "none";
-
-				if(this.resizeHandle){
-					this.resizeHandle.domNode.style.display="";
-				}
-				this.drag.setDragHandle(this.titleBar);
-				this.windowState="normal";
-			} else { //normal
-				// do nothing
+			this.resizeTo(this.previous.width, this.previous.height);
+			this.previous = null;
+			this.parentPrevious = null;
+			this.restoreAction.style.display = "none";
+			this.maximizeAction.style.display = this.displayMaximizeAction ? "" : "none";
+			if (this.resizeHandle) {
+				this.resizeHandle.domNode.style.display = "";
 			}
-		},
-
-		toggleDisplay: function(){
-			// summary: switch between hidden mode and displayed mode (either maximized or normal, depending on state before window was minimized)
-			if(this.windowState=="minimized"){
-				this.restoreWindow();
-			}else{
-				this.minimizeWindow();
-			}
-		},
-
-		closeWindow: function(/*Event*/ evt) {
-			// summary: destroy this window
-			dojo.html.removeNode(this.domNode);
-			this.destroy();
-		},
-
-		onMouseDown: function(/*Event*/ evt) {
-			// summary: callback when user clicks anywhere on the floating pane
-			this.bringToTop();
-		},
-
-		bringToTop: function() {
-			// summary
-			//	all the floating panes are stacked in z-index order; bring this floating pane to the top of that stack,
-			//	so that it's displayed in front of all the other floating panes
-			var floatingPanes= dojo.widget.manager.getWidgetsByType(this.widgetType);
-			var windows = [];
-			for (var x=0; x<floatingPanes.length; x++) {
-				if (this.widgetId != floatingPanes[x].widgetId) {
-						windows.push(floatingPanes[x]);
-				}
-			}
-
-			windows.sort(function(a,b) {
-				return a.domNode.style.zIndex - b.domNode.style.zIndex;
-			});
-
-			windows.push(this);
-
-			var floatingPaneStartingZ = 100;
-			for (x=0; x<windows.length;x++) {
-				windows[x].domNode.style.zIndex = floatingPaneStartingZ + x*2;
-			}
-		},
-
-		_setInitialWindowState: function() {
-			if(this.isShowing()){
-				this.width=-1;	// force resize
-				var mb = dojo.html.getMarginBox(this.domNode);
-				this.resizeTo(mb.width, mb.height);
-			}
-			if (this.windowState == "maximized") {
-				this.maximizeWindow();
-				this.show();
-				return;
-			}
-
-			if (this.windowState=="normal") {
-				this.show();
-				return;
-			}
-
-			if (this.windowState=="minimized") {
-				this.hide();
-				return;
-			}
-
-			this.windowState="minimized";
-		},
-
-		_taskBarSetup: function() {
-			// summary: add icon to task bar, connected to me
-			var taskbar = dojo.widget.getWidgetById(this.taskBarId);
-			if (!taskbar){
-				if (this._taskBarConnectAttempts <  this._max_taskBarConnectAttempts) {
-					dojo.lang.setTimeout(this, this._taskBarSetup, 50);
-					this._taskBarConnectAttempts++;
-				} else {
-					dojo.debug("Unable to connect to the taskBar");
-				}
-				return;
-			}
-			taskbar.addChild(this);
-		},
-
-		showFloatingPane: function(){
-			// summary:
-			//	bring this floating pane to the top
-			this.bringToTop();
-		},
-
-		onFloatingPaneShow: function(){
-			// summary: callback for when someone calls FloatingPane.show
-			var mb = dojo.html.getMarginBox(this.domNode);
-			this.resizeTo(mb.width, mb.height);
-		},
-
-		// summary: set the floating pane to the given size
-		resizeTo: function(/*Integer*/ width, /*Integer*/ height){
-			dojo.html.setMarginBox(this.domNode, { width: width, height: height });
-
-			dojo.widget.html.layout(this.domNode,
-				[
-				  {domNode: this.titleBar, layoutAlign: "top"},
-				  {domNode: this.resizeBar, layoutAlign: "bottom"},
-				  {domNode: this.containerNode, layoutAlign: "client"}
-				] );
-
-			// If any of the children have layoutAlign specified, obey it
-			dojo.widget.html.layout(this.containerNode, this.children, "top-bottom");
-
-			this.bgIframe.onResized();
-			if(this.shadow){ this.shadow.size(width, height); }
-			this.onResized();
-		},
-
-		checkSize: function() {
-			// summary
-			//	checkSize() is called when the user has resized the browser window,
-			// 	but that doesn't affect this widget (or this widget's children)
-			// 	so it can be safely ignored...
-			// TODO: unless we are maximized.  then we should resize ourself.
-		},
-		destroyFloatingPane: function() {
-			if(this.resizeHandle){
-				this.resizeHandle.destroy();
-				this.resizeHandle = null;
-			}
+			this.drag.setDragHandle(this.titleBar);
+			this.windowState = "normal";
+		} else {
 		}
 	}
-);
-
-dojo.widget.defineWidget(
-	"dojo.widget.FloatingPane",
-	[dojo.widget.ContentPane, dojo.widget.FloatingPaneBase],
-{
-	// summary
-	//	A non-modal floating window.
-	//	Attaches to a Taskbar which has an icon for each window.
-	//	Must specify size (like style="width: 500px; height: 500px;"),
-
-	fillInTemplate: function(args, frag){
-		this.fillInFloatingPaneTemplate(args, frag);
-		dojo.widget.FloatingPane.superclass.fillInTemplate.call(this, args, frag);
-	},
-	postCreate: function(){
-		dojo.widget.FloatingPaneBase.prototype.postCreate.apply(this, arguments);
-		dojo.widget.FloatingPane.superclass.postCreate.apply(this, arguments);
-	},
-	show: function(){
-		dojo.widget.FloatingPane.superclass.show.apply(this, arguments);
-		this.showFloatingPane();
-	},
-	onShow: function(){
-		dojo.widget.FloatingPane.superclass.onShow.call(this);
-		this.onFloatingPaneShow();
-	},
-	destroy: function(){
-		this.destroyFloatingPane();
-		dojo.widget.FloatingPane.superclass.destroy.apply(this, arguments);
+}, toggleDisplay:function () {
+	if (this.windowState == "minimized") {
+		this.restoreWindow();
+	} else {
+		this.minimizeWindow();
 	}
-});
-
-
-dojo.widget.defineWidget(
-	"dojo.widget.ModalFloatingPane",
-	[dojo.widget.FloatingPane, dojo.widget.ModalDialogBase],
-	{
-		// summary
-		//	A modal floating window.
-		//	This widget is similar to the Dialog widget, but the window, unlike the Dialog, can be moved.
-		//	Must specify size (like style="width: 500px; height: 500px;"),
-
-		windowState: "minimized",
-		displayCloseAction: true,
-		postCreate: function(){
-			dojo.widget.ModalDialogBase.prototype.postCreate.call(this);
-			dojo.widget.ModalFloatingPane.superclass.postCreate.call(this);
-		},
-		show: function(){
-			this.showModalDialog();
-			dojo.widget.ModalFloatingPane.superclass.show.apply(this, arguments);
-			//place the background div under this modal pane
-			this.bg.style.zIndex = this.domNode.style.zIndex-1;
-		},
-		hide: function(){
-			this.hideModalDialog();
-			dojo.widget.ModalFloatingPane.superclass.hide.apply(this, arguments);
-		},
-		closeWindow: function(){
-			this.hide();
-			dojo.widget.ModalFloatingPane.superclass.closeWindow.apply(this, arguments);
+}, closeWindow:function (evt) {
+	dojo.html.removeNode(this.domNode);
+	this.destroy();
+}, onMouseDown:function (evt) {
+	this.bringToTop();
+}, bringToTop:function () {
+	var floatingPanes = dojo.widget.manager.getWidgetsByType(this.widgetType);
+	var windows = [];
+	for (var x = 0; x < floatingPanes.length; x++) {
+		if (this.widgetId != floatingPanes[x].widgetId) {
+			windows.push(floatingPanes[x]);
 		}
 	}
-);
+	windows.sort(function (a, b) {
+		return a.domNode.style.zIndex - b.domNode.style.zIndex;
+	});
+	windows.push(this);
+	var floatingPaneStartingZ = 100;
+	for (x = 0; x < windows.length; x++) {
+		windows[x].domNode.style.zIndex = floatingPaneStartingZ + x * 2;
+	}
+}, _setInitialWindowState:function () {
+	if (this.isShowing()) {
+		this.width = -1;
+		var mb = dojo.html.getMarginBox(this.domNode);
+		this.resizeTo(mb.width, mb.height);
+	}
+	if (this.windowState == "maximized") {
+		this.maximizeWindow();
+		this.show();
+		return;
+	}
+	if (this.windowState == "normal") {
+		this.show();
+		return;
+	}
+	if (this.windowState == "minimized") {
+		this.hide();
+		return;
+	}
+	this.windowState = "minimized";
+}, _taskBarSetup:function () {
+	var taskbar = dojo.widget.getWidgetById(this.taskBarId);
+	if (!taskbar) {
+		if (this._taskBarConnectAttempts < this._max_taskBarConnectAttempts) {
+			dojo.lang.setTimeout(this, this._taskBarSetup, 50);
+			this._taskBarConnectAttempts++;
+		} else {
+			dojo.debug("Unable to connect to the taskBar");
+		}
+		return;
+	}
+	taskbar.addChild(this);
+}, showFloatingPane:function () {
+	this.bringToTop();
+}, onFloatingPaneShow:function () {
+	var mb = dojo.html.getMarginBox(this.domNode);
+	this.resizeTo(mb.width, mb.height);
+}, resizeTo:function (width, height) {
+	dojo.html.setMarginBox(this.domNode, {width:width, height:height});
+	dojo.widget.html.layout(this.domNode, [{domNode:this.titleBar, layoutAlign:"top"}, {domNode:this.resizeBar, layoutAlign:"bottom"}, {domNode:this.containerNode, layoutAlign:"client"}]);
+	dojo.widget.html.layout(this.containerNode, this.children, "top-bottom");
+	this.bgIframe.onResized();
+	if (this.shadow) {
+		this.shadow.size(width, height);
+	}
+	this.onResized();
+}, checkSize:function () {
+}, destroyFloatingPane:function () {
+	if (this.resizeHandle) {
+		this.resizeHandle.destroy();
+		this.resizeHandle = null;
+	}
+}});
+dojo.widget.defineWidget("dojo.widget.FloatingPane", [dojo.widget.ContentPane, dojo.widget.FloatingPaneBase], {fillInTemplate:function (args, frag) {
+	this.fillInFloatingPaneTemplate(args, frag);
+	dojo.widget.FloatingPane.superclass.fillInTemplate.call(this, args, frag);
+}, postCreate:function () {
+	dojo.widget.FloatingPaneBase.prototype.postCreate.apply(this, arguments);
+	dojo.widget.FloatingPane.superclass.postCreate.apply(this, arguments);
+}, show:function () {
+	dojo.widget.FloatingPane.superclass.show.apply(this, arguments);
+	this.showFloatingPane();
+}, onShow:function () {
+	dojo.widget.FloatingPane.superclass.onShow.call(this);
+	this.onFloatingPaneShow();
+}, destroy:function () {
+	this.destroyFloatingPane();
+	dojo.widget.FloatingPane.superclass.destroy.apply(this, arguments);
+}});
+dojo.widget.defineWidget("dojo.widget.ModalFloatingPane", [dojo.widget.FloatingPane, dojo.widget.ModalDialogBase], {windowState:"minimized", displayCloseAction:true, postCreate:function () {
+	dojo.widget.ModalDialogBase.prototype.postCreate.call(this);
+	dojo.widget.ModalFloatingPane.superclass.postCreate.call(this);
+}, show:function () {
+	this.showModalDialog();
+	dojo.widget.ModalFloatingPane.superclass.show.apply(this, arguments);
+	this.bg.style.zIndex = this.domNode.style.zIndex - 1;
+}, hide:function () {
+	this.hideModalDialog();
+	dojo.widget.ModalFloatingPane.superclass.hide.apply(this, arguments);
+}, closeWindow:function () {
+	this.hide();
+	dojo.widget.ModalFloatingPane.superclass.closeWindow.apply(this, arguments);
+}});
 
+
 __CPAN_FILE__ src/widget/YahooMap.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -36191,187 +22764,135 @@
 dojo.require("dojo.math");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.HtmlWidget");
-
-(function(){
-	var yappid = djConfig["yAppId"]||djConfig["yahooAppId"]||"dojotoolkit";
-	if(!dojo.hostenv.post_load_){
-		if(yappid == "dojotoolkit"){
+(function () {
+	var yappid = djConfig["yAppId"] || djConfig["yahooAppId"] || "dojotoolkit";
+	if (!dojo.hostenv.post_load_) {
+		if (yappid == "dojotoolkit") {
 			dojo.debug("please provide a unique Yahoo App ID in djConfig.yahooAppId when using the map widget");
 		}
-		var tag = "<scr"+"ipt src='http://api.maps.yahoo.com/ajaxymap?v=3.0&appid="+yappid+"'></scri"+"pt>";
-		if(!dj_global["YMap"]){
+		var tag = "<scr" + "ipt src='http://api.maps.yahoo.com/ajaxymap?v=3.0&appid=" + yappid + "'></scri" + "pt>";
+		if (!dj_global["YMap"]) {
 			document.write(tag);
 		}
-	}else{
+	} else {
 		dojo.debug("cannot initialize map system after the page has been loaded! Please either manually include the script block provided by Yahoo in your page or require() the YahooMap widget before onload has fired");
 	}
 })();
-
-dojo.widget.defineWidget(
-	"dojo.widget.YahooMap",
-	dojo.widget.HtmlWidget,
-	function(){
-		// summary: Creates a widget that wraps the Yahoo Map API.
-		// description:
-		//		Widget wrapper for the Yahoo Map API; it allows you to easily embed a Yahoo Map
-		//		within your Dojo application.
-		// map: YMap
-		//		Reference to the Yahoo Map object.
-		// datasrc: String
-		//		Reference to an external (to the widget) source for point data.
-		// data: Object[]
-		//		Array of point information objects.
-		// width: Number
-		//		Width of the map control.
-		// height: Number
-		// 		Height of the map control
-		// controls: String[]
-		//		Array of strings that map to corresponding controls on a Yahoo Map.
-		this.map=null;
-		this.datasrc="";
-		this.data=[];
-		this.width=0;
-		this.height=0;
-		this.controls=["zoomlong","maptype","pan"];
-	},
-{
-	isContainer: false,
-	templatePath:null,
-	templateCssPath:null,
-
-	findCenter:function(/* array */aPts){
-		//	summary
-		//	Find the center lat/lng coordinate based on the passed points.
-		var start=new YGeoPoint(37,-90);
-		if(aPts.length==0) return start;
-		var minLat,maxLat, minLon, maxLon, cLat, cLon;
-		minLat=maxLat=aPts[0].Lat;
-		minLon=maxLon=aPts[0].Lon;
-		for(var i=0; i<aPts.length; i++){
-			minLat=Math.min(minLat,aPts[i].Lat);
-			maxLat=Math.max(maxLat,aPts[i].Lat);
-			minLon=Math.min(minLon,aPts[i].Lon);
-			maxLon=Math.max(maxLon,aPts[i].Lon);
+dojo.widget.defineWidget("dojo.widget.YahooMap", dojo.widget.HtmlWidget, function () {
+	this.map = null;
+	this.datasrc = "";
+	this.data = [];
+	this.width = 0;
+	this.height = 0;
+	this.controls = ["zoomlong", "maptype", "pan"];
+}, {isContainer:false, templatePath:null, templateCssPath:null, findCenter:function (aPts) {
+	var start = new YGeoPoint(37, -90);
+	if (aPts.length == 0) {
+		return start;
+	}
+	var minLat, maxLat, minLon, maxLon, cLat, cLon;
+	minLat = maxLat = aPts[0].Lat;
+	minLon = maxLon = aPts[0].Lon;
+	for (var i = 0; i < aPts.length; i++) {
+		minLat = Math.min(minLat, aPts[i].Lat);
+		maxLat = Math.max(maxLat, aPts[i].Lat);
+		minLon = Math.min(minLon, aPts[i].Lon);
+		maxLon = Math.max(maxLon, aPts[i].Lon);
+	}
+	cLat = dojo.math.round((minLat + maxLat) / 2, 6);
+	cLon = dojo.math.round((minLon + maxLon) / 2, 6);
+	return new YGeoPoint(cLat, cLon);
+}, setControls:function () {
+	var methodmap = {maptype:"addTypeControl", pan:"addPanControl", zoomlong:"addZoomLong", zoomshort:"addZoomShort"};
+	var c = this.controls;
+	for (var i = 0; i < c.length; i++) {
+		var controlMethod = methodmap[c[i].toLowerCase()];
+		if (this.map[controlMethod]) {
+			this.map[controlMethod]();
 		}
-		cLat=dojo.math.round((minLat+maxLat)/2,6);
-		cLon=dojo.math.round((minLon+maxLon)/2,6);
-		return new YGeoPoint(cLat,cLon);	//	YGeoPoint
-	},
-	setControls:function(){
-		//	summary
-		//	Set the controls on the map
-		var methodmap={
-			maptype:"addTypeControl",
-			pan:"addPanControl",
-			zoomlong:"addZoomLong",
-			zoomshort:"addZoomShort"
+	}
+}, parse:function (table) {
+	this.data = [];
+	var h = table.getElementsByTagName("thead")[0];
+	if (!h) {
+		return;
+	}
+	var a = [];
+	var cols = h.getElementsByTagName("td");
+	if (cols.length == 0) {
+		cols = h.getElementsByTagName("th");
+	}
+	for (var i = 0; i < cols.length; i++) {
+		var c = cols[i].innerHTML.toLowerCase();
+		if (c == "long") {
+			c = "lng";
 		}
-		var c=this.controls;
-		for(var i=0; i<c.length; i++){
-			var controlMethod=methodmap[c[i].toLowerCase()];
-			if(this.map[controlMethod]){
-				this.map[controlMethod]();
-			}
+		a.push(c);
+	}
+	var b = table.getElementsByTagName("tbody")[0];
+	if (!b) {
+		return;
+	}
+	for (var i = 0; i < b.childNodes.length; i++) {
+		if (!(b.childNodes[i].nodeName && b.childNodes[i].nodeName.toLowerCase() == "tr")) {
+			continue;
 		}
-	},
-	
-	parse:function(/* HTMLTable */table){
-		//	summary
-		//	Parses an HTML table for data to plot on the map.
-		this.data=[];
-
-		//	get the column indices
-		var h=table.getElementsByTagName("thead")[0];
-		if(!h){
-			return;
-		}
-
-		var a=[];
-		var cols=h.getElementsByTagName("td");
-		if(cols.length==0){
-			cols=h.getElementsByTagName("th");
-		}
-		for(var i=0; i<cols.length; i++){
-			var c=cols[i].innerHTML.toLowerCase();
-			if(c=="long") c="lng";
-			a.push(c);
-		}
-		
-		//	parse the data
-		var b=table.getElementsByTagName("tbody")[0];
-		if(!b){
-			return;
-		}
-		for(var i=0; i<b.childNodes.length; i++){
-			if(!(b.childNodes[i].nodeName&&b.childNodes[i].nodeName.toLowerCase()=="tr")){
-				continue;
+		var cells = b.childNodes[i].getElementsByTagName("td");
+		var o = {};
+		for (var j = 0; j < a.length; j++) {
+			var col = a[j];
+			if (col == "lat" || col == "lng") {
+				o[col] = parseFloat(cells[j].innerHTML);
+			} else {
+				o[col] = cells[j].innerHTML;
 			}
-			var cells=b.childNodes[i].getElementsByTagName("td");
-			var o={};
-			for(var j=0; j<a.length; j++){
-				var col=a[j];
-				if(col=="lat"||col=="lng"){
-					o[col]=parseFloat(cells[j].innerHTML);					
-				}else{
-					o[col]=cells[j].innerHTML;
-				}
-			}
-			this.data.push(o);
 		}
-	},
-	render:function(){
-		//	summary
-		//	Plots all points in internal data array on the map.
-		var pts=[];
-		var d=this.data;
-		for(var i=0; i<d.length; i++){
-			var pt=new YGeoPoint(d[i].lat, d[i].lng);
-			pts.push(pt);
-			var icon=d[i].icon||null;
-			if(icon){
-				icon=new YImage(icon);
-			}
-			var m=new YMarker(pt,icon);
-			if(d[i].description){
-				m.addAutoExpand("<div>"+d[i].description+"</div>");
-			}
-			this.map.addOverlay(m);
+		this.data.push(o);
+	}
+}, render:function () {
+	var pts = [];
+	var d = this.data;
+	for (var i = 0; i < d.length; i++) {
+		var pt = new YGeoPoint(d[i].lat, d[i].lng);
+		pts.push(pt);
+		var icon = d[i].icon || null;
+		if (icon) {
+			icon = new YImage(icon);
 		}
-		var c=this.findCenter(pts);
-		var z=this.map.getZoomLevel(pts);
-		this.map.drawZoomAndCenter(c,z);
-	},
-	
-	initialize:function(/* object */args, /* object */frag){
-		//	summary
-		//	Initialize the widget.
-		if(!YMap || !YGeoPoint){
-			dojo.raise("dojo.widget.YahooMap: The Yahoo Map script must be included in order to use this widget.");
+		var m = new YMarker(pt, icon);
+		if (d[i].description) {
+			m.addAutoExpand("<div>" + d[i].description + "</div>");
 		}
-		if(this.datasrc){
-			this.parse(dojo.byId(this.datasrc));
-		}
-		else if(this.domNode.getElementsByTagName("table")[0]){
+		this.map.addOverlay(m);
+	}
+	var c = this.findCenter(pts);
+	var z = this.map.getZoomLevel(pts);
+	this.map.drawZoomAndCenter(c, z);
+}, initialize:function (args, frag) {
+	if (!YMap || !YGeoPoint) {
+		dojo.raise("dojo.widget.YahooMap: The Yahoo Map script must be included in order to use this widget.");
+	}
+	if (this.datasrc) {
+		this.parse(dojo.byId(this.datasrc));
+	} else {
+		if (this.domNode.getElementsByTagName("table")[0]) {
 			this.parse(this.domNode.getElementsByTagName("table")[0]);
 		}
-	},
-	postCreate:function(){
-		//	summary
-		//	Finalize and plot all points on the widget.
-		while(this.domNode.childNodes.length>0){
-			this.domNode.removeChild(this.domNode.childNodes[0]);
-		}
-
-		if(this.width>0&&this.height>0){
-			this.map=new YMap(this.domNode, YAHOO_MAP_REG, new YSize(this.width, this.height));
-		}else{
-			this.map=new YMap(this.domNode);
-		}
-		this.setControls();
-		this.render();
 	}
-});
+}, postCreate:function () {
+	while (this.domNode.childNodes.length > 0) {
+		this.domNode.removeChild(this.domNode.childNodes[0]);
+	}
+	if (this.width > 0 && this.height > 0) {
+		this.map = new YMap(this.domNode, YAHOO_MAP_REG, new YSize(this.width, this.height));
+	} else {
+		this.map = new YMap(this.domNode);
+	}
+	this.setControls();
+	this.render();
+}});
 
+
 __CPAN_FILE__ src/widget/TreeDemo.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -36383,127 +22904,80 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeDemo");
 dojo.require("dojo.Deferred");
-
-dojo.widget.TreeDemo = {
-	
-	reportIfDefered: function(res) {
-		if (res instanceof dojo.Deferred) {			
-			res.addCallbacks(
-				function(res) { /* dojo.debug("OK " + (res ? res: '')); */ return res },
-				function(err) { dojo.debug("Error"); dojo.debugShallow(err); }
-			);
-		}		
-	},
-	
-	resetRandomChildren: function(maxCount) {
-		this.randomChildrenMaxCount = maxCount;
-		this.randomChildrenCount = 0;
-		this.randomChildrenDepth = 0;
-	},
-	
-	
-	makeRandomChildren: function(title) {		
-
-		this.randomChildrenDepth++;
-			
-		var children = [];
-		for (var i=1; i<=5; i++) {				
-
-			var t = title+(this.randomChildrenDepth==1 ? '' : '.')+i;
-			var node = {title: t};
-				
-			children.push(node);		
-			this.randomChildrenCount++	
-			if (this.randomChildrenCount >= this.randomChildrenMaxCount) {
-				break;			
-			}
-		}
-
-		var i=1;
-		var _this = this;
-		dojo.lang.forEach(children, function(child) {
-			var t = title+(_this.randomChildrenDepth==1 ? '' : '.')+i;
-			i++;
-		
-			// first node is always folder for tests
-			if (_this.randomChildrenCount<_this.randomChildrenMaxCount && (
-				_this.randomChildrenDepth==1 && child === children[0] || _this.randomChildrenDepth<5 && Math.random()>0.3 )
-			  ) {
-				//dojo.debug("add child "+t);
-				child.children = _this.makeRandomChildren(t);	
-			}
+dojo.widget.TreeDemo = {reportIfDefered:function (res) {
+	if (res instanceof dojo.Deferred) {
+		res.addCallbacks(function (res) {
+			return res;
+		}, function (err) {
+			dojo.debug("Error");
+			dojo.debugShallow(err);
 		});
-				
-
-			//dojo.debug("out "+nodeOrTree);
-			
-		this.randomChildrenDepth--;
-			
-		return children;			
-	},
-	
-	bindDemoMenu: function(controller) {
-		var _t = this;
-		
-		dojo.event.topic.subscribe('treeContextMenuDestroy/engage',
-			function (menuItem) { 
-				var node = menuItem.getTreeNode();
-				//if (confirm("Delete node with descendants: "+node.title.replace(/(<([^>]+)>)/ig," ") +" ?")) {
-				_t.reportIfDefered(controller.destroyChild(node)); 
-				
-			}
-		);
-
-		dojo.event.topic.subscribe('treeContextMenuRefresh/engage',
-			function (menuItem) {
-                var node = menuItem.getTreeNode();
-                _t.reportIfDefered(controller.refreshChildren(node));
-			}
-		);
-
-		dojo.event.topic.subscribe('treeContextMenuCreate/engage',
-			function (menuItem) {
-				var node = menuItem.getTreeNode();
-				var d = controller.createAndEdit(node, 0);
-				_t.reportIfDefered(d);
-            }
-		);
-
-
-		dojo.event.topic.subscribe('treeContextMenuUp/engage',
-			function (menuItem) {
-                var node = menuItem.getTreeNode();
-                if (node.isFirstChild()) return;
-                _t.reportIfDefered(controller.move(node, node.parent, node.getParentIndex()-1));
-            }
-		);
-
-
-		dojo.event.topic.subscribe('treeContextMenuDown/engage',
-			function (menuItem) {
-                var node = menuItem.getTreeNode();
-                if (node.isLastChild()) return;
-                _t.reportIfDefered(controller.move(node, node.parent, node.getParentIndex()+1));
-            }
-		);
-
-		dojo.event.topic.subscribe('treeContextMenuEdit/engage',
-			function (menuItem) {
-                var node = menuItem.getTreeNode();
-                _t.reportIfDefered(controller.editLabelStart(node));
-			}
-		);
-
-
 	}
-	
-	
-	
-}
+}, resetRandomChildren:function (maxCount) {
+	this.randomChildrenMaxCount = maxCount;
+	this.randomChildrenCount = 0;
+	this.randomChildrenDepth = 0;
+}, makeRandomChildren:function (title) {
+	this.randomChildrenDepth++;
+	var children = [];
+	for (var i = 1; i <= 5; i++) {
+		var t = title + (this.randomChildrenDepth == 1 ? "" : ".") + i;
+		var node = {title:t};
+		children.push(node);
+		this.randomChildrenCount++;
+		if (this.randomChildrenCount >= this.randomChildrenMaxCount) {
+			break;
+		}
+	}
+	var i = 1;
+	var _this = this;
+	dojo.lang.forEach(children, function (child) {
+		var t = title + (_this.randomChildrenDepth == 1 ? "" : ".") + i;
+		i++;
+		if (_this.randomChildrenCount < _this.randomChildrenMaxCount && (_this.randomChildrenDepth == 1 && child === children[0] || _this.randomChildrenDepth < 5 && Math.random() > 0.3)) {
+			child.children = _this.makeRandomChildren(t);
+		}
+	});
+	this.randomChildrenDepth--;
+	return children;
+}, bindDemoMenu:function (controller) {
+	var _t = this;
+	dojo.event.topic.subscribe("treeContextMenuDestroy/engage", function (menuItem) {
+		var node = menuItem.getTreeNode();
+		_t.reportIfDefered(controller.destroyChild(node));
+	});
+	dojo.event.topic.subscribe("treeContextMenuRefresh/engage", function (menuItem) {
+		var node = menuItem.getTreeNode();
+		_t.reportIfDefered(controller.refreshChildren(node));
+	});
+	dojo.event.topic.subscribe("treeContextMenuCreate/engage", function (menuItem) {
+		var node = menuItem.getTreeNode();
+		var d = controller.createAndEdit(node, 0);
+		_t.reportIfDefered(d);
+	});
+	dojo.event.topic.subscribe("treeContextMenuUp/engage", function (menuItem) {
+		var node = menuItem.getTreeNode();
+		if (node.isFirstChild()) {
+			return;
+		}
+		_t.reportIfDefered(controller.move(node, node.parent, node.getParentIndex() - 1));
+	});
+	dojo.event.topic.subscribe("treeContextMenuDown/engage", function (menuItem) {
+		var node = menuItem.getTreeNode();
+		if (node.isLastChild()) {
+			return;
+		}
+		_t.reportIfDefered(controller.move(node, node.parent, node.getParentIndex() + 1));
+	});
+	dojo.event.topic.subscribe("treeContextMenuEdit/engage", function (menuItem) {
+		var node = menuItem.getTreeNode();
+		_t.reportIfDefered(controller.editLabelStart(node));
+	});
+}};
 
+
 __CPAN_FILE__ src/widget/SvgWidget.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -36517,72 +22991,64 @@
 
 dojo.require("dojo.widget.DomWidget");
 dojo.provide("dojo.widget.SvgWidget");
-dojo.provide("dojo.widget.SVGWidget"); // back compat
-
+dojo.provide("dojo.widget.SVGWidget");
 dojo.require("dojo.dom");
-
-
 dojo.require("dojo.experimental");
 dojo.experimental("dojo.widget.SvgWidget");
-
-// SVGWidget is a mixin ONLY
-dojo.widget.declare(
-	"dojo.widget.SvgWidget",
-	dojo.widget.DomWidget,
-{
-	createNodesFromText: function(txt, wrap){
-		return dojo.svg.createNodesFromText(txt, wrap);
-	}
-});
-
+dojo.widget.declare("dojo.widget.SvgWidget", dojo.widget.DomWidget, {createNodesFromText:function (txt, wrap) {
+	return dojo.svg.createNodesFromText(txt, wrap);
+}});
 dojo.widget.SVGWidget = dojo.widget.SvgWidget;
-
-try{
-(function(){
-	var tf = function(){
-		// FIXME: fill this in!!!
-		var rw = new function(){
-			dojo.widget.SvgWidget.call(this);
-			this.buildRendering = function(){ return; }
-			this.destroyRendering = function(){ return; }
-			this.postInitialize = function(){ return; }
-			this.widgetType = "SVGRootWidget";
-			this.domNode = document.documentElement;
-		}
-		var wm = dojo.widget.manager;
-		wm.root = rw;
-		wm.add(rw);
-
-		// extend the widgetManager with a getWidgetFromNode method
-		wm.getWidgetFromNode = function(node){
-			var filter = function(x){
-				if(x.domNode == node){
-					return true;
+try {
+	(function () {
+		var tf = function () {
+			var rw = new function () {
+				dojo.widget.SvgWidget.call(this);
+				this.buildRendering = function () {
+					return;
+				};
+				this.destroyRendering = function () {
+					return;
+				};
+				this.postInitialize = function () {
+					return;
+				};
+				this.widgetType = "SVGRootWidget";
+				this.domNode = document.documentElement;
+			};
+			var wm = dojo.widget.manager;
+			wm.root = rw;
+			wm.add(rw);
+			wm.getWidgetFromNode = function (node) {
+				var filter = function (x) {
+					if (x.domNode == node) {
+						return true;
+					}
+				};
+				var widgets = [];
+				while ((node) && (widgets.length < 1)) {
+					widgets = this.getWidgetsByFilter(filter);
+					node = node.parentNode;
 				}
-			}
-			var widgets = [];
-			while((node)&&(widgets.length < 1)){
-				widgets = this.getWidgetsByFilter(filter);
-				node = node.parentNode;
-			}
-			if(widgets.length > 0){
-				return widgets[0];
-			}else{
-				return null;
-			}
-		}
+				if (widgets.length > 0) {
+					return widgets[0];
+				} else {
+					return null;
+				}
+			};
+			wm.getWidgetFromEvent = function (domEvt) {
+				return this.getWidgetFromNode(domEvt.target);
+			};
+			wm.getWidgetFromPrimitive = wm.getWidgetFromNode;
+		};
+		dojo.event.connect(dojo.hostenv, "loaded", tf);
+	})();
+}
+catch (e) {
+	alert(e);
+}
 
-		wm.getWidgetFromEvent = function(domEvt){
-			return this.getWidgetFromNode(domEvt.target);
-		}
 
-		wm.getWidgetFromPrimitive = wm.getWidgetFromNode;
-	}
-	// make sure we get called when the time is right
-	dojo.event.connect(dojo.hostenv, "loaded", tf);
-})();
-}catch(e){ alert(e); }
-
 __CPAN_FILE__ src/widget/SortableTable.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -36595,9 +23061,7 @@
 */
 
 dojo.provide("dojo.widget.SortableTable");
-
 dojo.deprecated("SortableTable will be removed in favor of FilteringTable.", "0.5");
-
 dojo.require("dojo.lang.common");
 dojo.require("dojo.date.format");
 dojo.require("dojo.html.*");
@@ -36607,599 +23071,484 @@
 dojo.require("dojo.event.*");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.HtmlWidget");
-
-dojo.widget.defineWidget(
-	"dojo.widget.SortableTable",
-	dojo.widget.HtmlWidget,
-	function(){
-		this.data=[];
-		this.selected=[];		//	always an array to handle multiple selections.
-		this.columns=[];
-	},
-	{
-		//	custom properties
-		enableMultipleSelect: false,
-		maximumNumberOfSelections: 0,	//	0 for unlimited, is the default.
-		enableAlternateRows: false,
-		minRows: 0,	//	0 means ignore.
-		defaultDateFormat: "%D",
-		sortIndex: 0,		//	index of the column sorted on, first is the default.
-		sortDirection: 0,	//	0==asc, 1==desc
-		valueField: "Id",	//	if a JSON structure is parsed and there is a field of this name,
-							//	a value attribute will be added to the row (tr value="{Id}")
-
-		headClass: "",
-		tbodyClass: "",
-		headerClass: "",
-		headerSortUpClass: "selected",
-		headerSortDownClass: "selected",
-		rowClass: "",
-		rowAlternateClass: "alt",
-		rowSelectedClass: "selected",
-		columnSelected: "sorted-column",
-
-		isContainer: false,
-		templatePath:null,
-		templateCssPath:null,
-
-		getTypeFromString:function(/* string */ s){
-			//	summary
-			//	Find the constructor that matches param s by searching through the entire object tree.
-			var parts=s.split("."),i=0,obj=dj_global; 
-			do{obj=obj[parts[i++]];}while(i<parts.length&&obj); 
-			return(obj!=dj_global)?obj:null;	//	function
-		},
-		compare:function(/* object */ o1, /* object */ o2){
-			//	summary
-			//	Compare two objects using a shallow property compare
-			for(var p in o1){
-				if(!(p in o2)) return false;	//	boolean
-				if(o1[p].valueOf()!=o2[p].valueOf()) return false;	//	boolean
+dojo.widget.defineWidget("dojo.widget.SortableTable", dojo.widget.HtmlWidget, function () {
+	this.data = [];
+	this.selected = [];
+	this.columns = [];
+}, {enableMultipleSelect:false, maximumNumberOfSelections:0, enableAlternateRows:false, minRows:0, defaultDateFormat:"%D", sortIndex:0, sortDirection:0, valueField:"Id", headClass:"", tbodyClass:"", headerClass:"", headerSortUpClass:"selected", headerSortDownClass:"selected", rowClass:"", rowAlternateClass:"alt", rowSelectedClass:"selected", columnSelected:"sorted-column", isContainer:false, templatePath:null, templateCssPath:null, getTypeFromString:function (s) {
+	var parts = s.split("."), i = 0, obj = dj_global;
+	do {
+		obj = obj[parts[i++]];
+	} while (i < parts.length && obj);
+	return (obj != dj_global) ? obj : null;
+}, compare:function (o1, o2) {
+	for (var p in o1) {
+		if (!(p in o2)) {
+			return false;
+		}
+		if (o1[p].valueOf() != o2[p].valueOf()) {
+			return false;
+		}
+	}
+	return true;
+}, isSelected:function (o) {
+	for (var i = 0; i < this.selected.length; i++) {
+		if (this.compare(this.selected[i], o)) {
+			return true;
+		}
+	}
+	return false;
+}, removeFromSelected:function (o) {
+	var idx = -1;
+	for (var i = 0; i < this.selected.length; i++) {
+		if (this.compare(this.selected[i], o)) {
+			idx = i;
+			break;
+		}
+	}
+	if (idx >= 0) {
+		this.selected.splice(idx, 1);
+	}
+}, getSelection:function () {
+	return this.selected;
+}, getValue:function () {
+	var a = [];
+	for (var i = 0; i < this.selected.length; i++) {
+		if (this.selected[i][this.valueField]) {
+			a.push(this.selected[i][this.valueField]);
+		}
+	}
+	return a.join();
+}, reset:function () {
+	this.columns = [];
+	this.data = [];
+	this.resetSelections(this.domNode.getElementsByTagName("tbody")[0]);
+}, resetSelections:function (body) {
+	this.selected = [];
+	var idx = 0;
+	var rows = body.getElementsByTagName("tr");
+	for (var i = 0; i < rows.length; i++) {
+		if (rows[i].parentNode == body) {
+			rows[i].removeAttribute("selected");
+			if (this.enableAlternateRows && idx % 2 == 1) {
+				rows[i].className = this.rowAlternateClass;
+			} else {
+				rows[i].className = "";
 			}
-			return true;	// boolean
-		},
-		isSelected:function(/* object */ o){
-			//	summary
-			//	checked to see if the passed object is in the current selection.
-			for(var i=0;i<this.selected.length;i++){
-				if(this.compare(this.selected[i],o)){
-					return true; // boolean
-				}
+			idx++;
+		}
+	}
+}, getObjectFromRow:function (row) {
+	var cells = row.getElementsByTagName("td");
+	var o = {};
+	for (var i = 0; i < this.columns.length; i++) {
+		if (this.columns[i].sortType == "__markup__") {
+			o[this.columns[i].getField()] = cells[i].innerHTML;
+		} else {
+			var text = dojo.html.renderedTextContent(cells[i]);
+			var val = text;
+			if (this.columns[i].getType() != String) {
+				var val = new (this.columns[i].getType())(text);
 			}
-			return false;	// boolean
-		},
-		removeFromSelected:function(/* object */ o){
-			//	summary
-			//	remove the passed object from the current selection.
-			var idx=-1;
-			for(var i=0;i<this.selected.length;i++){
-				if(this.compare(this.selected[i],o)){
-					idx=i;
-					break;
-				}
+			o[this.columns[i].getField()] = val;
+		}
+	}
+	if (dojo.html.hasAttribute(row, "value")) {
+		o[this.valueField] = dojo.html.getAttribute(row, "value");
+	}
+	return o;
+}, setSelectionByRow:function (row) {
+	var o = this.getObjectFromRow(row);
+	var b = false;
+	for (var i = 0; i < this.selected.length; i++) {
+		if (this.compare(this.selected[i], o)) {
+			b = true;
+			break;
+		}
+	}
+	if (!b) {
+		this.selected.push(o);
+	}
+}, parseColumns:function (node) {
+	this.reset();
+	var row = node.getElementsByTagName("tr")[0];
+	var cells = row.getElementsByTagName("td");
+	if (cells.length == 0) {
+		cells = row.getElementsByTagName("th");
+	}
+	for (var i = 0; i < cells.length; i++) {
+		var o = {field:null, format:null, noSort:false, sortType:"String", dataType:String, sortFunction:null, label:null, align:"left", valign:"middle", getField:function () {
+			return this.field || this.label;
+		}, getType:function () {
+			return this.dataType;
+		}};
+		if (dojo.html.hasAttribute(cells[i], "align")) {
+			o.align = dojo.html.getAttribute(cells[i], "align");
+		}
+		if (dojo.html.hasAttribute(cells[i], "valign")) {
+			o.valign = dojo.html.getAttribute(cells[i], "valign");
+		}
+		if (dojo.html.hasAttribute(cells[i], "nosort")) {
+			o.noSort = dojo.html.getAttribute(cells[i], "nosort") == "true";
+		}
+		if (dojo.html.hasAttribute(cells[i], "sortusing")) {
+			var trans = dojo.html.getAttribute(cells[i], "sortusing");
+			var f = this.getTypeFromString(trans);
+			if (f != null && f != window && typeof (f) == "function") {
+				o.sortFunction = f;
 			}
-			if(idx>=0){
-				this.selected.splice(idx,1);
-			}
-		},
-		getSelection:function(){
-			//	summary
-			//	return the array of currently selected objects (JSON format)
-			return this.selected;	//	array
-		},
-		getValue:function(){
-			//	summary
-			//	return a comma-delimited list of selected valueFields.
-			var a=[];
-			for(var i=0;i<this.selected.length;i++){
-				if (this.selected[i][this.valueField]){
-					a.push(this.selected[i][this.valueField]);
+		}
+		if (dojo.html.hasAttribute(cells[i], "field")) {
+			o.field = dojo.html.getAttribute(cells[i], "field");
+		}
+		if (dojo.html.hasAttribute(cells[i], "format")) {
+			o.format = dojo.html.getAttribute(cells[i], "format");
+		}
+		if (dojo.html.hasAttribute(cells[i], "dataType")) {
+			var sortType = dojo.html.getAttribute(cells[i], "dataType");
+			if (sortType.toLowerCase() == "html" || sortType.toLowerCase() == "markup") {
+				o.sortType = "__markup__";
+				o.noSort = true;
+			} else {
+				var type = this.getTypeFromString(sortType);
+				if (type) {
+					o.sortType = sortType;
+					o.dataType = type;
 				}
 			}
-			return a.join();	//	string
-		},
-		reset:function(){
-			//	summary
-			//	completely resets the internal representations.
-			this.columns=[];
-			this.data=[];
-			this.resetSelections(this.domNode.getElementsByTagName("tbody")[0]);
-		},
-		resetSelections:function(/* HTMLTableBodyElement */ body){
-			this.selected=[];
-			var idx=0;
-			var rows=body.getElementsByTagName("tr");
-			for(var i=0; i<rows.length; i++){
-				if(rows[i].parentNode==body){
-					rows[i].removeAttribute("selected");
-					if(this.enableAlternateRows&&idx%2==1){
-						rows[i].className=this.rowAlternateClass;
-					}else{
-						rows[i].className="";
+		}
+		o.label = dojo.html.renderedTextContent(cells[i]);
+		this.columns.push(o);
+		if (dojo.html.hasAttribute(cells[i], "sort")) {
+			this.sortIndex = i;
+			var dir = dojo.html.getAttribute(cells[i], "sort");
+			if (!isNaN(parseInt(dir))) {
+				dir = parseInt(dir);
+				this.sortDirection = (dir != 0) ? 1 : 0;
+			} else {
+				this.sortDirection = (dir.toLowerCase() == "desc") ? 1 : 0;
+			}
+		}
+	}
+}, parseData:function (data) {
+	this.data = [];
+	this.selected = [];
+	for (var i = 0; i < data.length; i++) {
+		var o = {};
+		for (var j = 0; j < this.columns.length; j++) {
+			var field = this.columns[j].getField();
+			if (this.columns[j].sortType == "__markup__") {
+				o[field] = String(data[i][field]);
+			} else {
+				var type = this.columns[j].getType();
+				var val = data[i][field];
+				var t = this.columns[j].sortType.toLowerCase();
+				if (type == String) {
+					o[field] = val;
+				} else {
+					if (val != null) {
+						o[field] = new type(val);
+					} else {
+						o[field] = new type();
 					}
-					idx++;
 				}
 			}
-		},
-
-		getObjectFromRow:function(/* HTMLTableRowElement */ row){
-			//	summary
-			//	creates a JSON object based on the passed row
-			var cells=row.getElementsByTagName("td");
-			var o={};
-			for(var i=0; i<this.columns.length;i++){
-				if(this.columns[i].sortType=="__markup__"){
-					//	FIXME: should we parse this instead?  Because if the user may not get back the markup they put in...
-					o[this.columns[i].getField()]=cells[i].innerHTML;
-				}else{
-					var text=dojo.html.renderedTextContent(cells[i]);
-					var val=text;
-					if (this.columns[i].getType() != String){
-						var val=new (this.columns[i].getType())(text);
+		}
+		if (data[i][this.valueField] && !o[this.valueField]) {
+			o[this.valueField] = data[i][this.valueField];
+		}
+		this.data.push(o);
+	}
+}, parseDataFromTable:function (tbody) {
+	this.data = [];
+	this.selected = [];
+	var rows = tbody.getElementsByTagName("tr");
+	for (var i = 0; i < rows.length; i++) {
+		if (dojo.html.getAttribute(rows[i], "ignoreIfParsed") == "true") {
+			continue;
+		}
+		var o = {};
+		var cells = rows[i].getElementsByTagName("td");
+		for (var j = 0; j < this.columns.length; j++) {
+			var field = this.columns[j].getField();
+			if (this.columns[j].sortType == "__markup__") {
+				o[field] = cells[j].innerHTML;
+			} else {
+				var type = this.columns[j].getType();
+				var val = dojo.html.renderedTextContent(cells[j]);
+				if (type == String) {
+					o[field] = val;
+				} else {
+					if (val != null) {
+						o[field] = new type(val);
+					} else {
+						o[field] = new type();
 					}
-					o[this.columns[i].getField()]=val;
 				}
 			}
-			if(dojo.html.hasAttribute(row,"value")){
-				o[this.valueField]=dojo.html.getAttribute(row,"value");
-			}
-			return o;	//	object
-		},
-		setSelectionByRow:function(/* HTMLTableElementRow */ row){
-			//	summary
-			//	create the selection object based on the passed row, makes sure it's unique.
-			//	note that you need to call render manually (because of multi-select operations)
-			var o=this.getObjectFromRow(row);
-			var b=false;
-			for(var i=0;i<this.selected.length;i++){
-				if(this.compare(this.selected[i], o)){
-					b=true;
-					break;
+		}
+		if (dojo.html.hasAttribute(rows[i], "value") && !o[this.valueField]) {
+			o[this.valueField] = dojo.html.getAttribute(rows[i], "value");
+		}
+		this.data.push(o);
+		if (dojo.html.getAttribute(rows[i], "selected") == "true") {
+			this.selected.push(o);
+		}
+	}
+}, showSelections:function () {
+	var body = this.domNode.getElementsByTagName("tbody")[0];
+	var rows = body.getElementsByTagName("tr");
+	var idx = 0;
+	for (var i = 0; i < rows.length; i++) {
+		if (rows[i].parentNode == body) {
+			if (dojo.html.getAttribute(rows[i], "selected") == "true") {
+				rows[i].className = this.rowSelectedClass;
+			} else {
+				if (this.enableAlternateRows && idx % 2 == 1) {
+					rows[i].className = this.rowAlternateClass;
+				} else {
+					rows[i].className = "";
 				}
 			}
-			if(!b){
-				this.selected.push(o);
-			}
-		},
-
-		parseColumns:function(/* HTMLTableHeadElement */ node){
-			//	summary
-			//	parses the passed element to create column objects
-			this.reset();
-			var row=node.getElementsByTagName("tr")[0];
-			var cells=row.getElementsByTagName("td");
-			if (cells.length==0) cells=row.getElementsByTagName("th");
-			for(var i=0; i<cells.length; i++){
-				var o={
-					field:null,
-					format:null,
-					noSort:false,
-					sortType:"String",
-					dataType:String,
-					sortFunction:null,
-					label:null,
-					align:"left",
-					valign:"middle",
-					getField:function(){ return this.field||this.label; },
-					getType:function(){ return this.dataType; }
-				};
-				//	presentation attributes
-				if(dojo.html.hasAttribute(cells[i], "align")){
-					o.align=dojo.html.getAttribute(cells[i],"align");
+			idx++;
+		}
+	}
+}, render:function (bDontPreserve) {
+	var data = [];
+	var body = this.domNode.getElementsByTagName("tbody")[0];
+	if (!bDontPreserve) {
+		this.parseDataFromTable(body);
+	}
+	for (var i = 0; i < this.data.length; i++) {
+		data.push(this.data[i]);
+	}
+	var col = this.columns[this.sortIndex];
+	if (!col.noSort) {
+		var field = col.getField();
+		if (col.sortFunction) {
+			var sort = col.sortFunction;
+		} else {
+			var sort = function (a, b) {
+				if (a[field] > b[field]) {
+					return 1;
 				}
-				if(dojo.html.hasAttribute(cells[i], "valign")){
-					o.valign=dojo.html.getAttribute(cells[i],"valign");
+				if (a[field] < b[field]) {
+					return -1;
 				}
-
-				//	sorting features.
-				if(dojo.html.hasAttribute(cells[i], "nosort")){
-					o.noSort=dojo.html.getAttribute(cells[i],"nosort")=="true";
-				}
-				if(dojo.html.hasAttribute(cells[i], "sortusing")){
-					var trans=dojo.html.getAttribute(cells[i],"sortusing");
-					var f=this.getTypeFromString(trans);
-					if (f!=null && f!=window && typeof(f)=="function") 
-						o.sortFunction=f;
-				}
-
-				if(dojo.html.hasAttribute(cells[i], "field")){
-					o.field=dojo.html.getAttribute(cells[i],"field");
-				}
-				if(dojo.html.hasAttribute(cells[i], "format")){
-					o.format=dojo.html.getAttribute(cells[i],"format");
-				}
-				if(dojo.html.hasAttribute(cells[i], "dataType")){
-					var sortType=dojo.html.getAttribute(cells[i],"dataType");
-					if(sortType.toLowerCase()=="html"||sortType.toLowerCase()=="markup"){
-						o.sortType="__markup__";	//	always convert to "__markup__"
-						o.noSort=true;
-					}else{
-						var type=this.getTypeFromString(sortType);
-						if(type){
-							o.sortType=sortType;
-							o.dataType=type;
-						}
-					}
-				}
-				o.label=dojo.html.renderedTextContent(cells[i]);
-				this.columns.push(o);
-
-				//	check to see if there's a default sort, and set the properties necessary
-				if(dojo.html.hasAttribute(cells[i], "sort")){
-					this.sortIndex=i;
-					var dir=dojo.html.getAttribute(cells[i], "sort");
-					if(!isNaN(parseInt(dir))){
-						dir=parseInt(dir);
-						this.sortDirection=(dir!=0)?1:0;
-					}else{
-						this.sortDirection=(dir.toLowerCase()=="desc")?1:0;
-					}
-				}
+				return 0;
+			};
+		}
+		data.sort(sort);
+		if (this.sortDirection != 0) {
+			data.reverse();
+		}
+	}
+	while (body.childNodes.length > 0) {
+		body.removeChild(body.childNodes[0]);
+	}
+	for (var i = 0; i < data.length; i++) {
+		var row = document.createElement("tr");
+		dojo.html.disableSelection(row);
+		if (data[i][this.valueField]) {
+			row.setAttribute("value", data[i][this.valueField]);
+		}
+		if (this.isSelected(data[i])) {
+			row.className = this.rowSelectedClass;
+			row.setAttribute("selected", "true");
+		} else {
+			if (this.enableAlternateRows && i % 2 == 1) {
+				row.className = this.rowAlternateClass;
 			}
-		},
-
-		parseData:function(/* array */ data){
-			//	summary
-			//	Parse the passed JSON data structure, and cast based on columns.
-			this.data=[];
-			this.selected=[];
-			for(var i=0; i<data.length; i++){
-				var o={};	//	new data object.
-				for(var j=0; j<this.columns.length; j++){
-					var field=this.columns[j].getField();
-					if(this.columns[j].sortType=="__markup__"){
-						o[field]=String(data[i][field]);
-					}else{
-						var type=this.columns[j].getType();
-						var val=data[i][field];
-						var t=this.columns[j].sortType.toLowerCase();
-						if(type == String) {
-							o[field]=val;
-						} else {
-							if(val!=null){
-								o[field]=new type(val);
-							}else{
-								o[field]=new type();	//	let it use the default.
-							}
-						}
-					}
-				}
-				//	check for the valueField if not already parsed.
-				if(data[i][this.valueField]&&!o[this.valueField]){
-					o[this.valueField]=data[i][this.valueField];
-				}
-				this.data.push(o);
+		}
+		for (var j = 0; j < this.columns.length; j++) {
+			var cell = document.createElement("td");
+			cell.setAttribute("align", this.columns[j].align);
+			cell.setAttribute("valign", this.columns[j].valign);
+			dojo.html.disableSelection(cell);
+			if (this.sortIndex == j) {
+				cell.className = this.columnSelected;
 			}
-		}, 
-
-		parseDataFromTable:function(/* HTMLTableBodyElement */ tbody){
-			//	summary
-			//	parses the data in the tbody of a table to create a set of objects.
-			//	Will add objects to this.selected if an attribute 'selected="true"' is present on the row.
-			this.data=[];
-			this.selected=[];
-			var rows=tbody.getElementsByTagName("tr");
-			for(var i=0; i<rows.length; i++){
-				if(dojo.html.getAttribute(rows[i],"ignoreIfParsed")=="true"){
-					continue;
-				}
-				var o={};	//	new data object.
-				var cells=rows[i].getElementsByTagName("td");
-				for(var j=0; j<this.columns.length; j++){
-					var field=this.columns[j].getField();
-					if(this.columns[j].sortType=="__markup__"){
-						//	FIXME: parse this?
-						o[field]=cells[j].innerHTML;
-					}else{
-						var type=this.columns[j].getType();
-						var val=dojo.html.renderedTextContent(cells[j]); //	should be the same index as the column.
-						if(type == String){
-							o[field]=val;
-						} else {
-							if (val!=null){
-								o[field]=new type(val);
-							} else {
-								o[field]=new type();	//	let it use the default.
-							}
-						}
+			if (this.columns[j].sortType == "__markup__") {
+				cell.innerHTML = data[i][this.columns[j].getField()];
+				for (var k = 0; k < cell.childNodes.length; k++) {
+					var node = cell.childNodes[k];
+					if (node && node.nodeType == dojo.html.ELEMENT_NODE) {
+						dojo.html.disableSelection(node);
 					}
 				}
-				if(dojo.html.hasAttribute(rows[i],"value")&&!o[this.valueField]){
-					o[this.valueField]=dojo.html.getAttribute(rows[i],"value");
-				}
-				//	FIXME: add code to preserve row attributes in __metadata__ field?
-				this.data.push(o);
-				
-				//	add it to the selections if selected="true" is present.
-				if(dojo.html.getAttribute(rows[i],"selected")=="true"){
-					this.selected.push(o);
-				}
-			}
-		},
-		
-		showSelections:function(){
-			var body=this.domNode.getElementsByTagName("tbody")[0];
-			var rows=body.getElementsByTagName("tr");
-			var idx=0;
-			for(var i=0; i<rows.length; i++){
-				if(rows[i].parentNode==body){
-					if(dojo.html.getAttribute(rows[i],"selected")=="true"){
-						rows[i].className=this.rowSelectedClass;
-					} else {
-						if(this.enableAlternateRows&&idx%2==1){
-							rows[i].className=this.rowAlternateClass;
-						}else{
-							rows[i].className="";
-						}
+			} else {
+				if (this.columns[j].getType() == Date) {
+					var format = this.defaultDateFormat;
+					if (this.columns[j].format) {
+						format = this.columns[j].format;
 					}
-					idx++;
+					cell.appendChild(document.createTextNode(dojo.date.strftime(data[i][this.columns[j].getField()], format)));
+				} else {
+					cell.appendChild(document.createTextNode(data[i][this.columns[j].getField()]));
 				}
 			}
-		},
-		render:function(bDontPreserve){
-			//	summary
-			//	renders the table to the browser
-			var data=[];
-			var body=this.domNode.getElementsByTagName("tbody")[0];
-
-			if(!bDontPreserve){
-				//	rebuild data and selection
-				this.parseDataFromTable(body);
+			row.appendChild(cell);
+		}
+		body.appendChild(row);
+		dojo.event.connect(row, "onclick", this, "onUISelect");
+	}
+	var minRows = parseInt(this.minRows);
+	if (!isNaN(minRows) && minRows > 0 && data.length < minRows) {
+		var mod = 0;
+		if (data.length % 2 == 0) {
+			mod = 1;
+		}
+		var nRows = minRows - data.length;
+		for (var i = 0; i < nRows; i++) {
+			var row = document.createElement("tr");
+			row.setAttribute("ignoreIfParsed", "true");
+			if (this.enableAlternateRows && i % 2 == mod) {
+				row.className = this.rowAlternateClass;
 			}
-
-			//	clone this.data for sorting purposes.
-			for(var i=0; i<this.data.length; i++){
-				data.push(this.data[i]);
+			for (var j = 0; j < this.columns.length; j++) {
+				var cell = document.createElement("td");
+				cell.appendChild(document.createTextNode("\xa0"));
+				row.appendChild(cell);
 			}
-			
-			var col=this.columns[this.sortIndex];
-			if(!col.noSort){
-				var field=col.getField();
-				if(col.sortFunction){
-					var sort=col.sortFunction;
-				}else{
-					var sort=function(a,b){
-						if (a[field]>b[field]) return 1;
-						if (a[field]<b[field]) return -1;
-						return 0;
-					}
-				}
-				data.sort(sort);
-				if(this.sortDirection!=0) data.reverse();
+			body.appendChild(row);
+		}
+	}
+}, onSelect:function (e) {
+}, onUISelect:function (e) {
+	var row = dojo.html.getParentByType(e.target, "tr");
+	var body = dojo.html.getParentByType(row, "tbody");
+	if (this.enableMultipleSelect) {
+		if (e.metaKey || e.ctrlKey) {
+			if (this.isSelected(this.getObjectFromRow(row))) {
+				this.removeFromSelected(this.getObjectFromRow(row));
+				row.removeAttribute("selected");
+			} else {
+				this.setSelectionByRow(row);
+				row.setAttribute("selected", "true");
 			}
-
-			//	build the table and pop it in.
-			while(body.childNodes.length>0) body.removeChild(body.childNodes[0]);
-			for(var i=0; i<data.length;i++){
-				var row=document.createElement("tr");
-				dojo.html.disableSelection(row);
-				if (data[i][this.valueField]){
-					row.setAttribute("value",data[i][this.valueField]);
-				}
-				if(this.isSelected(data[i])){
-					row.className=this.rowSelectedClass;
-					row.setAttribute("selected","true");
-				} else {
-					if(this.enableAlternateRows&&i%2==1){
-						row.className=this.rowAlternateClass;
-					}
-				}
-				for(var j=0;j<this.columns.length;j++){
-					var cell=document.createElement("td");
-					cell.setAttribute("align", this.columns[j].align);
-					cell.setAttribute("valign", this.columns[j].valign);
-					dojo.html.disableSelection(cell);
-					if(this.sortIndex==j){
-						cell.className=this.columnSelected;
-					}
-					if(this.columns[j].sortType=="__markup__"){
-						cell.innerHTML=data[i][this.columns[j].getField()];
-						for(var k=0; k<cell.childNodes.length; k++){
-							var node=cell.childNodes[k];
-							if(node&&node.nodeType==dojo.html.ELEMENT_NODE){
-								dojo.html.disableSelection(node);
-							}
+		} else {
+			if (e.shiftKey) {
+				var startRow;
+				var rows = body.getElementsByTagName("tr");
+				for (var i = 0; i < rows.length; i++) {
+					if (rows[i].parentNode == body) {
+						if (rows[i] == row) {
+							break;
 						}
-					}else{
-						if(this.columns[j].getType()==Date){
-							var format=this.defaultDateFormat;
-							if(this.columns[j].format) format=this.columns[j].format;
-							cell.appendChild(document.createTextNode(dojo.date.strftime(data[i][this.columns[j].getField()], format)));
-						}else{
-							cell.appendChild(document.createTextNode(data[i][this.columns[j].getField()]));
+						if (dojo.html.getAttribute(rows[i], "selected") == "true") {
+							startRow = rows[i];
 						}
 					}
-					row.appendChild(cell);
 				}
-				body.appendChild(row);
-				dojo.event.connect(row, "onclick", this, "onUISelect");
-			}
-			
-			//	if minRows exist.
-			var minRows=parseInt(this.minRows);
-			if (!isNaN(minRows) && minRows>0 && data.length<minRows){
-				var mod=0;
-				if(data.length%2==0) mod=1;
-				var nRows=minRows-data.length;
-				for(var i=0; i<nRows; i++){
-					var row=document.createElement("tr");
-					row.setAttribute("ignoreIfParsed","true");
-					if(this.enableAlternateRows&&i%2==mod){
-						row.className=this.rowAlternateClass;
+				if (!startRow) {
+					startRow = row;
+					for (; i < rows.length; i++) {
+						if (dojo.html.getAttribute(rows[i], "selected") == "true") {
+							row = rows[i];
+							break;
+						}
 					}
-					for(var j=0;j<this.columns.length;j++){
-						var cell=document.createElement("td");
-						cell.appendChild(document.createTextNode("\u00A0"));
-						row.appendChild(cell);
-					}
-					body.appendChild(row);
 				}
-			}
-		},
-
-		//	the following the user can override.
-		onSelect:function(/* DomEvent */ e){ 
-			//	summary
-			//	empty function for the user to attach code to, fired by onUISelect
-		},
-		onUISelect:function(/* DomEvent */ e){
-			//	summary
-			//	fired when a user selects a row
-			var row=dojo.html.getParentByType(e.target,"tr");
-			var body=dojo.html.getParentByType(row,"tbody");
-			if(this.enableMultipleSelect){
-				if(e.metaKey||e.ctrlKey){
-					if(this.isSelected(this.getObjectFromRow(row))){
-						this.removeFromSelected(this.getObjectFromRow(row));
-						row.removeAttribute("selected");
-					}else{
-						//	push onto the selection stack.
-						this.setSelectionByRow(row);
-						row.setAttribute("selected","true");
-					}
-				}else if(e.shiftKey){
-					//	the tricky one.  We need to figure out the *last* selected row above, 
-					//	and select all the rows in between.
-					var startRow;
-					var rows=body.getElementsByTagName("tr");
-					//	if there's a selection above, we go with that first. 
-					for(var i=0;i<rows.length;i++){
-						if(rows[i].parentNode==body){
-							if(rows[i]==row) break;
-							if(dojo.html.getAttribute(rows[i],"selected")=="true"){
-								startRow=rows[i];
+				this.resetSelections(body);
+				if (startRow == row) {
+					row.setAttribute("selected", "true");
+					this.setSelectionByRow(row);
+				} else {
+					var doSelect = false;
+					for (var i = 0; i < rows.length; i++) {
+						if (rows[i].parentNode == body) {
+							rows[i].removeAttribute("selected");
+							if (rows[i] == startRow) {
+								doSelect = true;
 							}
-						}
-					}
-					//	if there isn't a selection above, we continue with a selection below.
-					if(!startRow){
-						startRow=row;
-						for(;i<rows.length;i++){
-							if(dojo.html.getAttribute(rows[i],"selected")=="true"){
-								row=rows[i];
-								break;
+							if (doSelect) {
+								this.setSelectionByRow(rows[i]);
+								rows[i].setAttribute("selected", "true");
 							}
-						}
-					}
-					this.resetSelections(body);
-					if(startRow==row){
-						//	this is the only selection
-						row.setAttribute("selected","true");
-						this.setSelectionByRow(row);
-					}else{
-						var doSelect=false;
-						for(var i=0; i<rows.length; i++){
-							if(rows[i].parentNode==body){
-								rows[i].removeAttribute("selected");
-								if(rows[i]==startRow){
-									doSelect=true;
-								}
-								if(doSelect){
-									this.setSelectionByRow(rows[i]);
-									rows[i].setAttribute("selected","true");
-								}
-								if(rows[i]==row){
-									doSelect=false;
-								}
+							if (rows[i] == row) {
+								doSelect = false;
 							}
 						}
 					}
-				}else{
-					//	reset the selection
-					this.resetSelections(body);
-					row.setAttribute("selected","true");
-					this.setSelectionByRow(row);
 				}
-			}else{
-				//	reset the data selection and go.
+			} else {
 				this.resetSelections(body);
-				row.setAttribute("selected","true");
+				row.setAttribute("selected", "true");
 				this.setSelectionByRow(row);
 			}
-			this.showSelections();
-			this.onSelect(e);
-			e.stopPropagation();
-			e.preventDefault();
-		},
-		onHeaderClick:function(/* DomEvent */ e){
-			//	summary
-			//	Main handler function for each header column click.
-			var oldIndex=this.sortIndex;
-			var oldDirection=this.sortDirection;
-			var source=e.target;
-			var row=dojo.html.getParentByType(source,"tr");
-			var cellTag="td";
-			if(row.getElementsByTagName(cellTag).length==0) cellTag="th";
-
-			var headers=row.getElementsByTagName(cellTag);
-			var header=dojo.html.getParentByType(source,cellTag);
-			
-			for(var i=0; i<headers.length; i++){
-				if(headers[i]==header){
-					if(i!=oldIndex){
-						//	new col.
-						this.sortIndex=i;
-						this.sortDirection=0;
-						headers[i].className=this.headerSortDownClass
-					}else{
-						this.sortDirection=(oldDirection==0)?1:0;
-						if(this.sortDirection==0){
-							headers[i].className=this.headerSortDownClass;
-						}else{
-							headers[i].className=this.headerSortUpClass;
-						}
-					}
-				}else{
-					//	reset the header class.
-					headers[i].className=this.headerClass;
+		}
+	} else {
+		this.resetSelections(body);
+		row.setAttribute("selected", "true");
+		this.setSelectionByRow(row);
+	}
+	this.showSelections();
+	this.onSelect(e);
+	e.stopPropagation();
+	e.preventDefault();
+}, onHeaderClick:function (e) {
+	var oldIndex = this.sortIndex;
+	var oldDirection = this.sortDirection;
+	var source = e.target;
+	var row = dojo.html.getParentByType(source, "tr");
+	var cellTag = "td";
+	if (row.getElementsByTagName(cellTag).length == 0) {
+		cellTag = "th";
+	}
+	var headers = row.getElementsByTagName(cellTag);
+	var header = dojo.html.getParentByType(source, cellTag);
+	for (var i = 0; i < headers.length; i++) {
+		if (headers[i] == header) {
+			if (i != oldIndex) {
+				this.sortIndex = i;
+				this.sortDirection = 0;
+				headers[i].className = this.headerSortDownClass;
+			} else {
+				this.sortDirection = (oldDirection == 0) ? 1 : 0;
+				if (this.sortDirection == 0) {
+					headers[i].className = this.headerSortDownClass;
+				} else {
+					headers[i].className = this.headerSortUpClass;
 				}
 			}
-			this.render();
-		},
-
-		postCreate:function(){ 
-			// 	summary
-			//	overridden from HtmlWidget, initializes and renders the widget.
-			var thead=this.domNode.getElementsByTagName("thead")[0];
-			if(this.headClass.length>0){
-				thead.className=this.headClass;
+		} else {
+			headers[i].className = this.headerClass;
+		}
+	}
+	this.render();
+}, postCreate:function () {
+	var thead = this.domNode.getElementsByTagName("thead")[0];
+	if (this.headClass.length > 0) {
+		thead.className = this.headClass;
+	}
+	dojo.html.disableSelection(this.domNode);
+	this.parseColumns(thead);
+	var header = "td";
+	if (thead.getElementsByTagName(header).length == 0) {
+		header = "th";
+	}
+	var headers = thead.getElementsByTagName(header);
+	for (var i = 0; i < headers.length; i++) {
+		if (!this.columns[i].noSort) {
+			dojo.event.connect(headers[i], "onclick", this, "onHeaderClick");
+		}
+		if (this.sortIndex == i) {
+			if (this.sortDirection == 0) {
+				headers[i].className = this.headerSortDownClass;
+			} else {
+				headers[i].className = this.headerSortUpClass;
 			}
-
-			//	disable selections
-			dojo.html.disableSelection(this.domNode);
-
-			//	parse the columns.
-			this.parseColumns(thead);
-
-			//	attach header handlers.
-			var header="td";
-			if(thead.getElementsByTagName(header).length==0) header="th";
-			var headers=thead.getElementsByTagName(header);
-			for(var i=0; i<headers.length; i++){
-				if(!this.columns[i].noSort){
-					dojo.event.connect(headers[i], "onclick", this, "onHeaderClick");
-				}
-				if(this.sortIndex==i){
-					if(this.sortDirection==0){
-						headers[i].className=this.headerSortDownClass;
-					}else{
-						headers[i].className=this.headerSortUpClass;
-					}
-				}
-			}
-
-			//	parse the tbody element and re-render it.
-			var tbody=this.domNode.getElementsByTagName("tbody")[0];
-			if (this.tbodyClass.length>0) {
-				tbody.className=this.tbodyClass;
-			}
-
-			this.parseDataFromTable(tbody);
-			this.render(true);
 		}
 	}
-);
+	var tbody = this.domNode.getElementsByTagName("tbody")[0];
+	if (this.tbodyClass.length > 0) {
+		tbody.className = this.tbodyClass;
+	}
+	this.parseDataFromTable(tbody);
+	this.render(true);
+}});
 
+
 __CPAN_FILE__ src/widget/ValidationTextbox.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -37212,200 +23561,118 @@
 */
 
 dojo.provide("dojo.widget.ValidationTextbox");
-
 dojo.require("dojo.widget.Textbox");
 dojo.require("dojo.i18n.common");
-
-dojo.widget.defineWidget(
-	"dojo.widget.ValidationTextbox",
-	dojo.widget.Textbox,
-	function() {
-		// summary:
-		//		A subclass of Textbox.
-		//		Over-ride isValid in subclasses to perform specific kinds of validation.
-		
-		// this property isn't a primitive and needs to be created on a per-item basis.
-		this.flags = {};
-	},
-	{
-		// default values for new subclass properties
-		// required: Boolean
-		//		Can be true or false, default is false.
-		required: false,
-		rangeClass: "range",
-		// invalidClass: String
-		//		Class used to format displayed text in page if necessary to override default class
-		invalidClass: "invalid",
-		// missingClass: String
-		//		Override default class used for missing input data
-		missingClass: "missing",
-		classPrefix: "dojoValidate",
-		// size: String
-		//		Basic input tag size declaration.
-		size: "",
-		// maxlength: String
-		//		Basic input tag maxlength declaration.	
-		maxlength: "",
-		// promptMessage: String
-		//		Will not issue invalid message if field is populated with default user-prompt text
-		promptMessage: "",
-		// invalidMessage: String
-		// 		The message to display if value is invalid.
-		invalidMessage: "",
-		// missingMessage: String
-		//		The message to display if value is missing.
-		missingMessage: "",
-		rangeMessage: "",
-		// listenOnKeyPress: Boolean
-		//		Updates messages on each key press.  Default is true.
-		listenOnKeyPress: true,
-		htmlfloat: "none",
-		lastCheckedValue: null,
-	
-		templatePath: dojo.uri.dojoUri("src/widget/templates/ValidationTextbox.html"),
-		templateCssPath: dojo.uri.dojoUri("src/widget/templates/Validate.css"),
-		
-		// new DOM nodes
-		invalidSpan: null,
-		missingSpan: null,
-		rangeSpan: null,
-
-		getValue: function() {
-			return this.textbox.value;
-		},
-	
-		setValue: function(value) {
-			this.textbox.value = value;
-			this.update();
-		},
-	
-		isValid: function() {
-			// summary: Need to over-ride with your own validation code in subclasses
-			return true;
-		},
-	
-		isInRange: function() {
-			// summary: Need to over-ride with your own validation code in subclasses
-			return true;
-		},
-	
-		isEmpty: function() {
-			// summary: Checks for whitespace
-			return ( /^\s*$/.test(this.textbox.value) ); // Boolean
-		},
-	
-		isMissing: function() {
-			// summary: Checks to see if value is required and is whitespace
-			return ( this.required && this.isEmpty() ); // Boolean
-		},
-	
-		update: function() {
-			// summary:
-			//		Called by oninit, onblur, and onkeypress.
-			// description:
-			//		Show missing or invalid messages if appropriate, and highlight textbox field.
-			this.lastCheckedValue = this.textbox.value;
-			this.missingSpan.style.display = "none";
-			this.invalidSpan.style.display = "none";
-			this.rangeSpan.style.display = "none";
-	
-			var empty = this.isEmpty();
-			var valid = true;
-			if(this.promptMessage != this.textbox.value){ 
-				valid = this.isValid(); 
-			}
-			var missing = this.isMissing();
-	
-			// Display at most one error message
-			if(missing){
-				this.missingSpan.style.display = "";
-			}else if( !empty && !valid ){
-				this.invalidSpan.style.display = "";
-			}else if( !empty && !this.isInRange() ){
+dojo.widget.defineWidget("dojo.widget.ValidationTextbox", dojo.widget.Textbox, function () {
+	this.flags = {};
+}, {required:false, rangeClass:"range", invalidClass:"invalid", missingClass:"missing", classPrefix:"dojoValidate", size:"", maxlength:"", promptMessage:"", invalidMessage:"", missingMessage:"", rangeMessage:"", listenOnKeyPress:true, htmlfloat:"none", lastCheckedValue:null, templateString:"<span style='float:${this.htmlfloat};'>\n\t<input dojoAttachPoint='textbox' type='${this.type}' dojoAttachEvent='onblur;onfocus;onkeyup'\n\t\tid='${this.widgetId}' name='${this.name}' size='${this.size}' maxlength='${this.maxlength}'\n\t\tclass='${this.className}' style=''>\n\t<span dojoAttachPoint='invalidSpan' class='${this.invalidClass}'>${this.messages.invalidMessage}</span>\n\t<span dojoAttachPoint='missingSpan' class='${this.missingClass}'>${this.messages.missingMessage}</span>\n\t<span dojoAttachPoint='rangeSpan' class='${this.rangeClass}'>${this.messages.rangeMessage}</span>\n</span>\n", templateCssString:".dojoValidateEmpty{\n\tbackground-color: #00FFFF;\n}\n.dojoValidateValid{\n\tbackground-color: #cfc;\n}\n.dojoValidateInvalid{\n\tbackground-color: #fcc;\n}\n.dojoValidateRange{\n\tbackground-color: #ccf;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/Validate.css"), invalidSpan:null, missingSpan:null, rangeSpan:null, getValue:function () {
+	return this.textbox.value;
+}, setValue:function (value) {
+	this.textbox.value = value;
+	this.update();
+}, isValid:function () {
+	return true;
+}, isInRange:function () {
+	return true;
+}, isEmpty:function () {
+	return (/^\s*$/.test(this.textbox.value));
+}, isMissing:function () {
+	return (this.required && this.isEmpty());
+}, update:function () {
+	this.lastCheckedValue = this.textbox.value;
+	this.missingSpan.style.display = "none";
+	this.invalidSpan.style.display = "none";
+	this.rangeSpan.style.display = "none";
+	var empty = this.isEmpty();
+	var valid = true;
+	if (this.promptMessage != this.textbox.value) {
+		valid = this.isValid();
+	}
+	var missing = this.isMissing();
+	if (missing) {
+		this.missingSpan.style.display = "";
+	} else {
+		if (!empty && !valid) {
+			this.invalidSpan.style.display = "";
+		} else {
+			if (!empty && !this.isInRange()) {
 				this.rangeSpan.style.display = "";
 			}
-			this.highlight();
-		},
-		
-		updateClass: function(className){
-			// summary: used to ensure that only 1 validation class is set at a time
-			var pre = this.classPrefix;
-			dojo.html.removeClass(this.textbox,pre+"Empty");
-			dojo.html.removeClass(this.textbox,pre+"Valid");
-			dojo.html.removeClass(this.textbox,pre+"Invalid");
-			dojo.html.addClass(this.textbox,pre+className);
-		},
-		
-		highlight: function() {
-			// summary: by Called oninit, and onblur.
-			
-			// highlight textbox background 
-			if (this.isEmpty()) {
-				this.updateClass("Empty");
-			}else if (this.isValid() && this.isInRange() ){
-				this.updateClass("Valid");
-			}else if(this.textbox.value != this.promptMessage){ 
+		}
+	}
+	this.highlight();
+}, updateClass:function (className) {
+	var pre = this.classPrefix;
+	dojo.html.removeClass(this.textbox, pre + "Empty");
+	dojo.html.removeClass(this.textbox, pre + "Valid");
+	dojo.html.removeClass(this.textbox, pre + "Invalid");
+	dojo.html.addClass(this.textbox, pre + className);
+}, highlight:function () {
+	if (this.isEmpty()) {
+		this.updateClass("Empty");
+	} else {
+		if (this.isValid() && this.isInRange()) {
+			this.updateClass("Valid");
+		} else {
+			if (this.textbox.value != this.promptMessage) {
 				this.updateClass("Invalid");
-			}else{
+			} else {
 				this.updateClass("Empty");
 			}
-		},
-	
-		onfocus: function(evt) {
-			if ( !this.listenOnKeyPress) {
-				this.updateClass("Empty");
-//			    this.textbox.style.backgroundColor = "";
-			}
-		},
-	
-		onblur: function(evt) { 
-			this.filter();
-			this.update(); 
-		},
-	
-		onkeyup: function(evt){ 
-			if(this.listenOnKeyPress){ 
-				//this.filter();  trim is problem if you have to type two words
-				this.update(); 
-			}else if (this.textbox.value != this.lastCheckedValue){
-				this.updateClass("Empty");
-//			    this.textbox.style.backgroundColor = "";
-			}
-		},
-
-		postMixInProperties: function(localProperties, frag) {
-			dojo.widget.ValidationTextbox.superclass.postMixInProperties.apply(this, arguments);
-			this.messages = dojo.i18n.getLocalization("dojo.widget", "validate", this.lang);
-			dojo.lang.forEach(["invalidMessage", "missingMessage", "rangeMessage"], function(prop) {
-				if(this[prop]){ this.messages[prop] = this[prop]; }
-			}, this);
-		},
-	
-		fillInTemplate: function() {
-			dojo.widget.ValidationTextbox.superclass.fillInTemplate.apply(this, arguments);
-
-			// Attach isMissing and isValid methods to the textbox.
-			// We may use them later in connection with a submit button widget.
-			// TODO: this is unorthodox; it seems better to do it another way -- Bill
-			this.textbox.isValid = function() { this.isValid.call(this); };
-			this.textbox.isMissing = function() { this.isMissing.call(this); };
-			this.textbox.isInRange = function() { this.isInRange.call(this); };
-			dojo.html.setClass(this.invalidSpan,this.invalidClass);
-			this.update(); 
-			
-			// apply any filters to initial value
-			this.filter();
-
-			// set table to be inlined (technique varies by browser)
-			// TODO: use method in dojo.html that does this
-			if(dojo.render.html.ie){ dojo.html.addClass(this.domNode, "ie"); }
-			if(dojo.render.html.moz){ dojo.html.addClass(this.domNode, "moz"); }
-			if(dojo.render.html.opera){ dojo.html.addClass(this.domNode, "opera"); }
-			if(dojo.render.html.safari){ dojo.html.addClass(this.domNode, "safari"); }
 		}
 	}
-);
+}, onfocus:function (evt) {
+	if (!this.listenOnKeyPress) {
+		this.updateClass("Empty");
+	}
+}, onblur:function (evt) {
+	this.filter();
+	this.update();
+}, onkeyup:function (evt) {
+	if (this.listenOnKeyPress) {
+		this.update();
+	} else {
+		if (this.textbox.value != this.lastCheckedValue) {
+			this.updateClass("Empty");
+		}
+	}
+}, postMixInProperties:function (localProperties, frag) {
+	dojo.widget.ValidationTextbox.superclass.postMixInProperties.apply(this, arguments);
+	this.messages = dojo.i18n.getLocalization("dojo.widget", "validate", this.lang);
+	dojo.lang.forEach(["invalidMessage", "missingMessage", "rangeMessage"], function (prop) {
+		if (this[prop]) {
+			this.messages[prop] = this[prop];
+		}
+	}, this);
+}, fillInTemplate:function () {
+	dojo.widget.ValidationTextbox.superclass.fillInTemplate.apply(this, arguments);
+	this.textbox.isValid = function () {
+		this.isValid.call(this);
+	};
+	this.textbox.isMissing = function () {
+		this.isMissing.call(this);
+	};
+	this.textbox.isInRange = function () {
+		this.isInRange.call(this);
+	};
+	dojo.html.setClass(this.invalidSpan, this.invalidClass);
+	this.update();
+	this.filter();
+	if (dojo.render.html.ie) {
+		dojo.html.addClass(this.domNode, "ie");
+	}
+	if (dojo.render.html.moz) {
+		dojo.html.addClass(this.domNode, "moz");
+	}
+	if (dojo.render.html.opera) {
+		dojo.html.addClass(this.domNode, "opera");
+	}
+	if (dojo.render.html.safari) {
+		dojo.html.addClass(this.domNode, "safari");
+	}
+}});
 
+
 __CPAN_FILE__ src/widget/AccordionContainer.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -37418,269 +23685,121 @@
 */
 
 dojo.provide("dojo.widget.AccordionContainer");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.html.*");
 dojo.require("dojo.lfx.html");
 dojo.require("dojo.html.selection");
 dojo.require("dojo.widget.html.layout");
 dojo.require("dojo.widget.PageContainer");
-
-
-/**
- * description
- *	Front view (3 panes, pane #2 open)
- *	------------------------
- *	|:::Pane#1 title:::    |
- * 	|:::Pane#2 title:::    |
- *	|                      |
- *	|    pane#2 contents   |
- *	|                      |
- *	|:::Pane#3 title:::    |
- *	------------------------
- *
- *	Side view (showing implementation):
- *
- *         viewport    pane#3     pane#2     pane#1
- *            =                                
- *            |                                =
- *            |                      =         |
- *	front     |                      |         |
- *            |                      |         =
- *            |                      =
- *            |          =
- *            =          |
- *                       |
- *                       =
- *
- *	Panes are stacked by z-index like a stack of cards, so they can be slid correctly.
- *	The panes on the bottom extend past the bottom of the viewport (but are hidden).
- *
- * usage
- *	<div dojoType="AccordionContainer">
- *		<div dojoType="ContentPane" label="pane 1">...</div>
- *		...
- *	</div>
- *
- * TODO:
- *	* this widget should extend PageContainer
- */
- dojo.widget.defineWidget(
-	"dojo.widget.AccordionContainer",
-	dojo.widget.HtmlWidget,
-	{
-		// summary: 
-		//		Holds a set of panes where every pane's title is visible, but only one pane's content is visible at a time,
-		//		and switching between panes is visualized by sliding the other panes up/down.
-
-		isContainer: true,
-		
-		// labelNodeClass: String
-		//		CSS class name for dom node w/the title
-		labelNodeClass: "label",
-		
-		// containerNodeClass: String
-		//		CSS class name for dom node holding the content
-		containerNodeClass: "accBody",
-
-		// duration: Integer
-		//		Amount of time (in ms) it takes to slide panes
-		duration: 250,
-
-		fillInTemplate: function(){
-			with(this.domNode.style){
-				// position must be either relative or absolute
-				if(position!="absolute"){
-					position="relative";
-				}
-				overflow="hidden";
-			}
-		},
-
-		addChild: function(/*Widget*/ widget){
-			var child = this._addChild(widget);
-			this._setSizes();
-			return child;	// Widget
-		},
-		
-		_addChild: function(/*Widget*/ widget){
-			// summary
-			//		Internal call to add child, used during postCreate() and by the real addChild() call
-			if(widget.open){
-				dojo.deprecated("open parameter deprecated, use 'selected=true' instead will be removed in ", "0.5");
-				dojo.debug(widget.widgetId + ": open == " + widget.open);
-				widget.selected=true;
-			}
-			if (widget.widgetType != "AccordionPane") {
-				var wrapper=dojo.widget.createWidget("AccordionPane",{label: widget.label, selected: widget.selected, labelNodeClass: this.labelNodeClass, containerNodeClass: this.containerNodeClass, allowCollapse: this.allowCollapse });
-				wrapper.addChild(widget);
-				this.addWidgetAsDirectChild(wrapper);
-				this.registerChild(wrapper, this.children.length);
-				return wrapper;	// Widget
-			} else {
-				dojo.html.addClass(widget.containerNode, this.containerNodeClass);
-				dojo.html.addClass(widget.labelNode, this.labelNodeClass);
-				this.addWidgetAsDirectChild(widget);
-				this.registerChild(widget, this.children.length);	
-				return widget;	// Widget
-			}
-		},
-	
-		postCreate: function() {
-			var tmpChildren = this.children;
-			this.children=[];
-			dojo.html.removeChildren(this.domNode);
-			dojo.lang.forEach(tmpChildren, dojo.lang.hitch(this,"_addChild"));
-			this._setSizes();
-		},
-	
-		removeChild: function(/*Widget*/ widget) {
-			dojo.widget.AccordionContainer.superclass.removeChild.call(this, widget);
-			this._setSizes();
-		},
-		
-		onResized: function(){
-			this._setSizes();
-		},
-
-		_setSizes: function() {
-			// summary
-			//		Set panes' size/position based on my size, and the current open node.
-
-			// get cumulative height of all the title bars, and figure out which pane is open
-			var totalCollapsedHeight = 0;
-			var openIdx = 0;
-			dojo.lang.forEach(this.children, function(child, idx){
-				totalCollapsedHeight += child.getLabelHeight();
-				if(child.selected){ openIdx=idx; }
-			});
-
-			// size and position each pane
-			var mySize=dojo.html.getContentBox(this.domNode);
-			var y = 0;
-			dojo.lang.forEach(this.children, function(child, idx){
-				var childCollapsedHeight = child.getLabelHeight();
-				child.resizeTo(mySize.width, mySize.height-totalCollapsedHeight+childCollapsedHeight);
-				child.domNode.style.zIndex=idx+1;
-				child.domNode.style.position="absolute";
-				child.domNode.style.top = y+"px";
-				y += (idx==openIdx) ? dojo.html.getBorderBox(child.domNode).height : childCollapsedHeight;
-			});
-		},
-
-		selectChild: function(/*Widget*/ page){
-			// summary
-			//		close the current page and select a new one
-			dojo.lang.forEach(this.children, function(child){child.setSelected(child==page);});
-
-			// slide each pane that needs to be moved
-			var y = 0;
-			var anims = [];
-			dojo.lang.forEach(this.children, function(child, idx){
-				if(child.domNode.style.top != (y+"px")){
-					anims.push(dojo.lfx.html.slideTo(child.domNode, {top: y, left: 0}, this.duration));
-				}
-				y += child.selected ? dojo.html.getBorderBox(child.domNode).height : child.getLabelHeight();
-			}, this);
-			dojo.lfx.combine(anims).play();
+dojo.widget.defineWidget("dojo.widget.AccordionContainer", dojo.widget.HtmlWidget, {isContainer:true, labelNodeClass:"label", containerNodeClass:"accBody", duration:250, fillInTemplate:function () {
+	with (this.domNode.style) {
+		if (position != "absolute") {
+			position = "relative";
 		}
+		overflow = "hidden";
 	}
-);
-
-dojo.widget.defineWidget(
-	"dojo.widget.AccordionPane",
-	dojo.widget.HtmlWidget,
-{
-	// summary
-	//		AccordionPane is a box with a title that contains another widget (often a ContentPane).
-	//		It's a widget used internally by AccordionContainer.
-	// label: String
-	//		label to print on top of AccordionPane
-	label: "",
-
-	// class: String
-	//	CSS class name for the AccordionPane's dom node
-	"class": "dojoAccordionPane",
-
-	// labelNodeClass: String
-	//	CSS class name for the AccordionPane's label node
-	labelNodeClass: "label",
-
-	// containerNodeClass: String
-	//	CSS class name for the AccordionPane's container node
-	containerNodeClass: "accBody",
-	
-	// selected: Boolean
-	//	if true, this is the open pane
-	selected: false,
-
-	templatePath: dojo.uri.dojoUri("src/widget/templates/AccordionPane.html"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/AccordionPane.css"),
-
-	isContainer: true,
-
-	fillInTemplate: function() {
-		dojo.html.addClass(this.domNode, this["class"]);
-		dojo.widget.AccordionPane.superclass.fillInTemplate.call(this);
-		dojo.html.disableSelection(this.labelNode);
-		this.setSelected(this.selected);
-	},
-
-	setLabel: function(/*String*/ label) {
-		// summary: set the  title of the node
-		this.labelNode.innerHTML=label;
-	},
-	
-	resizeTo: function(width, height){
-		dojo.html.setMarginBox(this.domNode, {width: width, height: height});
-		var children = [
-			{domNode: this.labelNode, layoutAlign: "top"},
-			{domNode: this.containerNode, layoutAlign: "client"}
-		];
-		dojo.widget.html.layout(this.domNode, children);
-		var childSize = dojo.html.getContentBox(this.containerNode);
-		this.children[0].resizeTo(childSize.width, childSize.height);
-	},
-
-	getLabelHeight: function() {
-		// summary: returns the height of the title dom node
-		return dojo.html.getMarginBox(this.labelNode).height;	// Integer
-	},
-
-	onLabelClick: function() {
-		// summary: callback when someone clicks my label
-		this.parent.selectChild(this);
-	},
-	
-	setSelected: function(/*Boolean*/ isSelected){
-		this.selected=isSelected;
-		(isSelected ? dojo.html.addClass : dojo.html.removeClass)(this.domNode, this["class"]+"-selected");
-
-		// make sure child is showing (lazy load), and also that onShow()/onHide() is called
-		var child = this.children[0];
-		if(child){
-			if(isSelected){
-				if(!child.isShowing()){
-					child.show();
-				}else{
-					child.onShow();
-				}
-			}else{
-				child.onHide();
+}, addChild:function (widget) {
+	var child = this._addChild(widget);
+	this._setSizes();
+	return child;
+}, _addChild:function (widget) {
+	if (widget.open) {
+		dojo.deprecated("open parameter deprecated, use 'selected=true' instead will be removed in ", "0.5");
+		dojo.debug(widget.widgetId + ": open == " + widget.open);
+		widget.selected = true;
+	}
+	if (widget.widgetType != "AccordionPane") {
+		var wrapper = dojo.widget.createWidget("AccordionPane", {label:widget.label, selected:widget.selected, labelNodeClass:this.labelNodeClass, containerNodeClass:this.containerNodeClass, allowCollapse:this.allowCollapse});
+		wrapper.addChild(widget);
+		this.addWidgetAsDirectChild(wrapper);
+		this.registerChild(wrapper, this.children.length);
+		return wrapper;
+	} else {
+		dojo.html.addClass(widget.containerNode, this.containerNodeClass);
+		dojo.html.addClass(widget.labelNode, this.labelNodeClass);
+		this.addWidgetAsDirectChild(widget);
+		this.registerChild(widget, this.children.length);
+		return widget;
+	}
+}, postCreate:function () {
+	var tmpChildren = this.children;
+	this.children = [];
+	dojo.html.removeChildren(this.domNode);
+	dojo.lang.forEach(tmpChildren, dojo.lang.hitch(this, "_addChild"));
+	this._setSizes();
+}, removeChild:function (widget) {
+	dojo.widget.AccordionContainer.superclass.removeChild.call(this, widget);
+	this._setSizes();
+}, onResized:function () {
+	this._setSizes();
+}, _setSizes:function () {
+	var totalCollapsedHeight = 0;
+	var openIdx = 0;
+	dojo.lang.forEach(this.children, function (child, idx) {
+		totalCollapsedHeight += child.getLabelHeight();
+		if (child.selected) {
+			openIdx = idx;
+		}
+	});
+	var mySize = dojo.html.getContentBox(this.domNode);
+	var y = 0;
+	dojo.lang.forEach(this.children, function (child, idx) {
+		var childCollapsedHeight = child.getLabelHeight();
+		child.resizeTo(mySize.width, mySize.height - totalCollapsedHeight + childCollapsedHeight);
+		child.domNode.style.zIndex = idx + 1;
+		child.domNode.style.position = "absolute";
+		child.domNode.style.top = y + "px";
+		y += (idx == openIdx) ? dojo.html.getBorderBox(child.domNode).height : childCollapsedHeight;
+	});
+}, selectChild:function (page) {
+	dojo.lang.forEach(this.children, function (child) {
+		child.setSelected(child == page);
+	});
+	var y = 0;
+	var anims = [];
+	dojo.lang.forEach(this.children, function (child, idx) {
+		if (child.domNode.style.top != (y + "px")) {
+			anims.push(dojo.lfx.html.slideTo(child.domNode, {top:y, left:0}, this.duration));
+		}
+		y += child.selected ? dojo.html.getBorderBox(child.domNode).height : child.getLabelHeight();
+	}, this);
+	dojo.lfx.combine(anims).play();
+}});
+dojo.widget.defineWidget("dojo.widget.AccordionPane", dojo.widget.HtmlWidget, {label:"", "class":"dojoAccordionPane", labelNodeClass:"label", containerNodeClass:"accBody", selected:false, templateString:"<div dojoAttachPoint=\"domNode\">\n<div dojoAttachPoint=\"labelNode\" dojoAttachEvent=\"onclick: onLabelClick\" class=\"${this.labelNodeClass}\">${this.label}</div>\n<div dojoAttachPoint=\"containerNode\" style=\"overflow: hidden;\" class=\"${this.containerNodeClass}\"></div>\n</div>\n", templateCssString:".dojoAccordionPane .label {\n\tcolor: #000;\n\tfont-weight: bold;\n\tbackground: url(\"images/soriaAccordionOff.gif\") repeat-x top left #85aeec;\n\tborder:1px solid #d9d9d9;\n\tfont-size:0.9em;\n}\n\n.dojoAccordionPane-selected .label {\n\tbackground: url(\"images/soriaAccordionSelected.gif\") repeat-x top left #85aeec;\n\tborder:1px solid #84a3d1;\n}\n\n.dojoAccordionPane .label:hover {\n\tcursor: pointer;\n}\n\n.dojoAccordionPane .accBody {\n\tbackground: #fff;\n\toverflow: auto;\n\tborder:1px solid #84a3d1;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/AccordionPane.css"), isContainer:true, fillInTemplate:function () {
+	dojo.html.addClass(this.domNode, this["class"]);
+	dojo.widget.AccordionPane.superclass.fillInTemplate.call(this);
+	dojo.html.disableSelection(this.labelNode);
+	this.setSelected(this.selected);
+}, setLabel:function (label) {
+	this.labelNode.innerHTML = label;
+}, resizeTo:function (width, height) {
+	dojo.html.setMarginBox(this.domNode, {width:width, height:height});
+	var children = [{domNode:this.labelNode, layoutAlign:"top"}, {domNode:this.containerNode, layoutAlign:"client"}];
+	dojo.widget.html.layout(this.domNode, children);
+	var childSize = dojo.html.getContentBox(this.containerNode);
+	this.children[0].resizeTo(childSize.width, childSize.height);
+}, getLabelHeight:function () {
+	return dojo.html.getMarginBox(this.labelNode).height;
+}, onLabelClick:function () {
+	this.parent.selectChild(this);
+}, setSelected:function (isSelected) {
+	this.selected = isSelected;
+	(isSelected ? dojo.html.addClass : dojo.html.removeClass)(this.domNode, this["class"] + "-selected");
+	var child = this.children[0];
+	if (child) {
+		if (isSelected) {
+			if (!child.isShowing()) {
+				child.show();
+			} else {
+				child.onShow();
 			}
+		} else {
+			child.onHide();
 		}
 	}
-});
+}});
+dojo.lang.extend(dojo.widget.Widget, {open:false});
 
-// These arguments can be specified for the children of an AccordionContainer
-// Since any widget can be specified as a child, mix them
-// into the base widget class.  (This is a hack, but it's effective.)
-dojo.lang.extend(dojo.widget.Widget, {
-	// open: String
-	//	is this the selected child?
-	//	DEPRECATED: will be removed in 0.5.  Used "selected" attribute instead.
-	open: false
-});
 
 __CPAN_FILE__ src/widget/TreeNode.js
 /*
@@ -37694,519 +23813,240 @@
 */
 
 dojo.provide("dojo.widget.TreeNode");
-
 dojo.require("dojo.html.*");
 dojo.require("dojo.event.*");
 dojo.require("dojo.io.*");
-
-dojo.widget.defineWidget("dojo.widget.TreeNode", dojo.widget.HtmlWidget, function() {
+dojo.widget.defineWidget("dojo.widget.TreeNode", dojo.widget.HtmlWidget, function () {
 	this.actionsDisabled = [];
-},
-{
-	widgetType: "TreeNode",
-
-	loadStates: {
-		UNCHECKED: "UNCHECKED",
-    	LOADING: "LOADING",
-    	LOADED: "LOADED"
-	},
-
-
-	actions: {
-		MOVE: "MOVE",
-    	REMOVE: "REMOVE",
-    	EDIT: "EDIT",
-    	ADDCHILD: "ADDCHILD"
-	},
-
-	isContainer: true,
-
-	lockLevel: 0, // lock ++ unlock --, so nested locking works fine
-
-
-	templateString: ('<div class="dojoTreeNode"> '
-		+ '<span treeNode="${this.widgetId}" class="dojoTreeNodeLabel" dojoAttachPoint="labelNode"> '
-		+ '		<span dojoAttachPoint="titleNode" dojoAttachEvent="onClick: onTitleClick" class="dojoTreeNodeLabelTitle">${this.title}</span> '
-		+ '</span> '
-		+ '<span class="dojoTreeNodeAfterLabel" dojoAttachPoint="afterLabelNode">${this.afterLabel}</span> '
-		+ '<div dojoAttachPoint="containerNode" style="display:none"></div> '
-		+ '</div>').replace(/(>|<)\s+/g, '$1'), // strip whitespaces between nodes
-
-
-	childIconSrc: "",
-	childIconFolderSrc: dojo.uri.dojoUri("src/widget/templates/images/Tree/closed.gif"), // for under root parent item child icon,
-	childIconDocumentSrc: dojo.uri.dojoUri("src/widget/templates/images/Tree/document.gif"), // for under root parent item child icon,
-
-	childIcon: null,
-	isTreeNode: true,
-
-	objectId: "", // the widget represents an object
-
-	afterLabel: "",
-	afterLabelNode: null, // node to the left of labelNode
-
-	// an icon left from childIcon: imgs[-2].
-	// if +/- for folders, blank for leaves
-	expandIcon: null,
-
-	title: "",
-	object: "", // node may have object attached, settable from HTML
-	isFolder: false,
-
-	labelNode: null, // the item label
-	titleNode: null, // the item title
-	imgs: null, // an array of icons imgs
-
-	expandLevel: "", // expand to level
-
-	tree: null,
-
-	depth: 0,
-
-	isExpanded: false,
-
-	state: null,  // after creation will change to loadStates: "loaded/loading/unchecked"
-	domNodeInitialized: false,  // domnode is initialized with icons etc
-
-
-	isFirstChild: function() {
-		return this.getParentIndex() == 0 ? true: false;
-	},
-
-	isLastChild: function() {
-		return this.getParentIndex() == this.parent.children.length-1 ? true : false;
-	},
-
-	lock: function(){ return this.tree.lock.apply(this, arguments) },
-	unlock: function(){ return this.tree.unlock.apply(this, arguments) },
-	isLocked: function(){ return this.tree.isLocked.apply(this, arguments) },
-	cleanLock: function(){ return this.tree.cleanLock.apply(this, arguments) },
-
-	actionIsDisabled: function(action) {
-		var _this = this;
-
-		var disabled = false;
-
-		if (this.tree.strictFolders && action == this.actions.ADDCHILD && !this.isFolder) {
-			disabled = true;
-		}
-
-		if (dojo.lang.inArray(_this.actionsDisabled, action)) {
-			disabled = true;
-		}
-
-		if (this.isLocked()) {
-			disabled = true;
-		}
-
-		return disabled;
-	},
-
-	getInfo: function() {
-		// No title here (title may be widget)
-		var info = {
-			widgetId: this.widgetId,
-			objectId: this.objectId,
-			index: this.getParentIndex(),
-			isFolder: this.isFolder
-		}
-
-		return info;
-	},
-
-	initialize: function(args, frag){
-
-		//dojo.debug(this.title)
-
-		this.state = this.loadStates.UNCHECKED;
-
-		for(var i=0; i<this.actionsDisabled.length; i++) {
-			this.actionsDisabled[i] = this.actionsDisabled[i].toUpperCase();
-		}
-
-		this.expandLevel = parseInt(this.expandLevel);
-
-	},
-
-
-	/**
-	 * Change visible node depth by appending/prepending with blankImgs
-	 * @param depthDiff Integer positive => move right, negative => move left
-	*/
-	adjustDepth: function(depthDiff) {
-
-		for(var i=0; i<this.children.length; i++) {
-			this.children[i].adjustDepth(depthDiff);
-		}
-
-		this.depth += depthDiff;
-
-		if (depthDiff>0) {
-			for(var i=0; i<depthDiff; i++) {
-				var img = this.tree.makeBlankImg();
-				this.imgs.unshift(img);
-				//dojo.debugShallow(this.domNode);
-				dojo.html.insertBefore(this.imgs[0], this.domNode.firstChild);
-
-			}
-		}
-		if (depthDiff<0) {
-			for(var i=0; i<-depthDiff;i++) {
-				this.imgs.shift();
-				dojo.html.removeNode(this.domNode.firstChild);
-			}
-		}
-
-	},
-
-
-	markLoading: function() {
-		this._markLoadingSavedIcon = this.expandIcon.src;
-		this.expandIcon.src = this.tree.expandIconSrcLoading;
-	},
-
-	// if icon is "Loading" then
-	unMarkLoading: function() {
-		if (!this._markLoadingSavedIcon) return;
-
-		var im = new Image();
-		im.src = this.tree.expandIconSrcLoading;
-
-		//dojo.debug("Unmark "+this.expandIcon.src+" : "+im.src);
-		if (this.expandIcon.src == im.src) {
-			this.expandIcon.src = this._markLoadingSavedIcon;
-		}
-		this._markLoadingSavedIcon = null;
-	},
-
-
-	setFolder: function() {
-		dojo.event.connect(this.expandIcon, 'onclick', this, 'onTreeClick');
-		this.expandIcon.src = this.isExpanded ? this.tree.expandIconSrcMinus : this.tree.expandIconSrcPlus;
-		this.isFolder = true;
-	},
-
-
-	createDOMNode: function(tree, depth){
-
-		this.tree = tree;
-		this.depth = depth;
-
-
-		//
-		// add the tree icons
-		//
-
-		this.imgs = [];
-
-		for(var i=0; i<this.depth+1; i++){
-
+}, {widgetType:"TreeNode", loadStates:{UNCHECKED:"UNCHECKED", LOADING:"LOADING", LOADED:"LOADED"}, actions:{MOVE:"MOVE", REMOVE:"REMOVE", EDIT:"EDIT", ADDCHILD:"ADDCHILD"}, isContainer:true, lockLevel:0, templateString:("<div class=\"dojoTreeNode\"> " + "<span treeNode=\"${this.widgetId}\" class=\"dojoTreeNodeLabel\" dojoAttachPoint=\"labelNode\"> " + "\t\t<span dojoAttachPoint=\"titleNode\" dojoAttachEvent=\"onClick: onTitleClick\" class=\"dojoTreeNodeLabelTitle\">${this.title}</span> " + "</span> " + "<span class=\"dojoTreeNodeAfterLabel\" dojoAttachPoint=\"afterLabelNode\">${this.afterLabel}</span> " + "<div dojoAttachPoint=\"containerNode\" style=\"display:none\"></div> " + "</div>").replace(/(>|<)\s+/g, "$1"), childIconSrc:"", childIconFolderSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/closed.gif"), childIconDocumentSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/document.gif"), childIcon:null, isTreeNode:true, objectId:"", afterLabel:"", afterLabelNode:null, expandIcon:null, title:"", object:"", isFolder:false, labelNode:null, titleNode:null, imgs:null, expandLevel:"", tree:null, depth:0, isExpanded:false, state:null, domNodeInitialized:false, isFirstChild:function () {
+	return this.getParentIndex() == 0 ? true : false;
+}, isLastChild:function () {
+	return this.getParentIndex() == this.parent.children.length - 1 ? true : false;
+}, lock:function () {
+	return this.tree.lock.apply(this, arguments);
+}, unlock:function () {
+	return this.tree.unlock.apply(this, arguments);
+}, isLocked:function () {
+	return this.tree.isLocked.apply(this, arguments);
+}, cleanLock:function () {
+	return this.tree.cleanLock.apply(this, arguments);
+}, actionIsDisabled:function (action) {
+	var _this = this;
+	var disabled = false;
+	if (this.tree.strictFolders && action == this.actions.ADDCHILD && !this.isFolder) {
+		disabled = true;
+	}
+	if (dojo.lang.inArray(_this.actionsDisabled, action)) {
+		disabled = true;
+	}
+	if (this.isLocked()) {
+		disabled = true;
+	}
+	return disabled;
+}, getInfo:function () {
+	var info = {widgetId:this.widgetId, objectId:this.objectId, index:this.getParentIndex(), isFolder:this.isFolder};
+	return info;
+}, initialize:function (args, frag) {
+	this.state = this.loadStates.UNCHECKED;
+	for (var i = 0; i < this.actionsDisabled.length; i++) {
+		this.actionsDisabled[i] = this.actionsDisabled[i].toUpperCase();
+	}
+	this.expandLevel = parseInt(this.expandLevel);
+}, adjustDepth:function (depthDiff) {
+	for (var i = 0; i < this.children.length; i++) {
+		this.children[i].adjustDepth(depthDiff);
+	}
+	this.depth += depthDiff;
+	if (depthDiff > 0) {
+		for (var i = 0; i < depthDiff; i++) {
 			var img = this.tree.makeBlankImg();
-
-			this.domNode.insertBefore(img, this.labelNode);
-
-			this.imgs.push(img);
+			this.imgs.unshift(img);
+			dojo.html.insertBefore(this.imgs[0], this.domNode.firstChild);
 		}
-
-
-		this.expandIcon = this.imgs[this.imgs.length-1];
-
-
-		this.childIcon = this.tree.makeBlankImg();
-
-		// add to images before the title
-		this.imgs.push(this.childIcon);
-
-		dojo.html.insertBefore(this.childIcon, this.titleNode);
-
-		// node with children(from source html) becomes folder on build stage.
-		if (this.children.length || this.isFolder) {
-			this.setFolder();
+	}
+	if (depthDiff < 0) {
+		for (var i = 0; i < -depthDiff; i++) {
+			this.imgs.shift();
+			dojo.html.removeNode(this.domNode.firstChild);
 		}
-		else {
-			// leaves are always loaded
-			//dojo.debug("Set "+this+" state to loaded");
-			this.state = this.loadStates.LOADED;
-		}
-
-		dojo.event.connect(this.childIcon, 'onclick', this, 'onIconClick');
-
-
-		//
-		// create the child rows
-		//
-
-
-		for(var i=0; i<this.children.length; i++){
-			this.children[i].parent = this;
-
-			var node = this.children[i].createDOMNode(this.tree, this.depth+1);
-
-			this.containerNode.appendChild(node);
-		}
-
-
-		if (this.children.length) {
-			this.state = this.loadStates.LOADED;
-		}
-
-		this.updateIcons();
-
-		this.domNodeInitialized = true;
-
-		dojo.event.topic.publish(this.tree.eventNames.createDOMNode, { source: this } );
-
-		return this.domNode;
-	},
-
-	onTreeClick: function(e){
-		dojo.event.topic.publish(this.tree.eventNames.treeClick, { source: this, event: e });
-	},
-
-	onIconClick: function(e){
-		dojo.event.topic.publish(this.tree.eventNames.iconClick, { source: this, event: e });
-	},
-
-	onTitleClick: function(e){
-		dojo.event.topic.publish(this.tree.eventNames.titleClick, { source: this, event: e });
-	},
-
-	markSelected: function() {
-		dojo.html.addClass(this.titleNode, 'dojoTreeNodeLabelSelected');
-	},
-
-
-	unMarkSelected: function() {
-		//dojo.debug('unmark')
-		dojo.html.removeClass(this.titleNode, 'dojoTreeNodeLabelSelected');
-	},
-
-	updateExpandIcon: function() {
-		if (this.isFolder){
-			this.expandIcon.src = this.isExpanded ? this.tree.expandIconSrcMinus : this.tree.expandIconSrcPlus;
+	}
+}, markLoading:function () {
+	this._markLoadingSavedIcon = this.expandIcon.src;
+	this.expandIcon.src = this.tree.expandIconSrcLoading;
+}, unMarkLoading:function () {
+	if (!this._markLoadingSavedIcon) {
+		return;
+	}
+	var im = new Image();
+	im.src = this.tree.expandIconSrcLoading;
+	if (this.expandIcon.src == im.src) {
+		this.expandIcon.src = this._markLoadingSavedIcon;
+	}
+	this._markLoadingSavedIcon = null;
+}, setFolder:function () {
+	dojo.event.connect(this.expandIcon, "onclick", this, "onTreeClick");
+	this.expandIcon.src = this.isExpanded ? this.tree.expandIconSrcMinus : this.tree.expandIconSrcPlus;
+	this.isFolder = true;
+}, createDOMNode:function (tree, depth) {
+	this.tree = tree;
+	this.depth = depth;
+	this.imgs = [];
+	for (var i = 0; i < this.depth + 1; i++) {
+		var img = this.tree.makeBlankImg();
+		this.domNode.insertBefore(img, this.labelNode);
+		this.imgs.push(img);
+	}
+	this.expandIcon = this.imgs[this.imgs.length - 1];
+	this.childIcon = this.tree.makeBlankImg();
+	this.imgs.push(this.childIcon);
+	dojo.html.insertBefore(this.childIcon, this.titleNode);
+	if (this.children.length || this.isFolder) {
+		this.setFolder();
+	} else {
+		this.state = this.loadStates.LOADED;
+	}
+	dojo.event.connect(this.childIcon, "onclick", this, "onIconClick");
+	for (var i = 0; i < this.children.length; i++) {
+		this.children[i].parent = this;
+		var node = this.children[i].createDOMNode(this.tree, this.depth + 1);
+		this.containerNode.appendChild(node);
+	}
+	if (this.children.length) {
+		this.state = this.loadStates.LOADED;
+	}
+	this.updateIcons();
+	this.domNodeInitialized = true;
+	dojo.event.topic.publish(this.tree.eventNames.createDOMNode, {source:this});
+	return this.domNode;
+}, onTreeClick:function (e) {
+	dojo.event.topic.publish(this.tree.eventNames.treeClick, {source:this, event:e});
+}, onIconClick:function (e) {
+	dojo.event.topic.publish(this.tree.eventNames.iconClick, {source:this, event:e});
+}, onTitleClick:function (e) {
+	dojo.event.topic.publish(this.tree.eventNames.titleClick, {source:this, event:e});
+}, markSelected:function () {
+	dojo.html.addClass(this.titleNode, "dojoTreeNodeLabelSelected");
+}, unMarkSelected:function () {
+	dojo.html.removeClass(this.titleNode, "dojoTreeNodeLabelSelected");
+}, updateExpandIcon:function () {
+	if (this.isFolder) {
+		this.expandIcon.src = this.isExpanded ? this.tree.expandIconSrcMinus : this.tree.expandIconSrcPlus;
+	} else {
+		this.expandIcon.src = this.tree.blankIconSrc;
+	}
+}, updateExpandGrid:function () {
+	if (this.tree.showGrid) {
+		if (this.depth) {
+			this.setGridImage(-2, this.isLastChild() ? this.tree.gridIconSrcL : this.tree.gridIconSrcT);
 		} else {
-			this.expandIcon.src = this.tree.blankIconSrc;
-		}
-	},
-
-	/* set the grid under the expand icon */
-	updateExpandGrid: function() {
-
-		if (this.tree.showGrid){
-			if (this.depth){
+			if (this.isFirstChild()) {
+				this.setGridImage(-2, this.isLastChild() ? this.tree.gridIconSrcX : this.tree.gridIconSrcY);
+			} else {
 				this.setGridImage(-2, this.isLastChild() ? this.tree.gridIconSrcL : this.tree.gridIconSrcT);
-			}else{
-				if (this.isFirstChild()){
-					this.setGridImage(-2, this.isLastChild() ? this.tree.gridIconSrcX : this.tree.gridIconSrcY);
-				}else{
-					this.setGridImage(-2, this.isLastChild() ? this.tree.gridIconSrcL : this.tree.gridIconSrcT);
-				}
 			}
-		}else{
-			this.setGridImage(-2, this.tree.blankIconSrc);
 		}
-
-	},
-
-	/* set the grid under the child icon */
-	updateChildGrid: function() {
-
-		if ((this.depth || this.tree.showRootGrid) && this.tree.showGrid){
-			this.setGridImage(-1, (this.children.length && this.isExpanded) ? this.tree.gridIconSrcP : this.tree.gridIconSrcC);
-		}else{
-			if (this.tree.showGrid && !this.tree.showRootGrid){
-				this.setGridImage(-1, (this.children.length && this.isExpanded) ? this.tree.gridIconSrcZ : this.tree.blankIconSrc);
-			}else{
-				this.setGridImage(-1, this.tree.blankIconSrc);
-			}
+	} else {
+		this.setGridImage(-2, this.tree.blankIconSrc);
+	}
+}, updateChildGrid:function () {
+	if ((this.depth || this.tree.showRootGrid) && this.tree.showGrid) {
+		this.setGridImage(-1, (this.children.length && this.isExpanded) ? this.tree.gridIconSrcP : this.tree.gridIconSrcC);
+	} else {
+		if (this.tree.showGrid && !this.tree.showRootGrid) {
+			this.setGridImage(-1, (this.children.length && this.isExpanded) ? this.tree.gridIconSrcZ : this.tree.blankIconSrc);
+		} else {
+			this.setGridImage(-1, this.tree.blankIconSrc);
 		}
-
-
-	},
-
-	updateParentGrid: function() {
-		var parent = this.parent;
-
-		//dojo.debug("updateParentGrid "+this);
-
-		for(var i=0; i<this.depth; i++){
-
-			//dojo.debug("Parent "+parent);
-
-			var idx = this.imgs.length-(3+i);
-			var img = (this.tree.showGrid && !parent.isLastChild()) ? this.tree.gridIconSrcV : this.tree.blankIconSrc;
-
-			//dojo.debug("Image "+img+" for "+idx);
-
-			this.setGridImage(idx, img);
-
-			parent = parent.parent;
-		}
-	},
-
-	updateExpandGridColumn: function() {
-		if (!this.tree.showGrid) return;
-
-		var _this = this;
-
-		var icon = this.isLastChild() ? this.tree.blankIconSrc : this.tree.gridIconSrcV;
-
-		dojo.lang.forEach(_this.getDescendants(),
-			function(node) { node.setGridImage(_this.depth, icon); }
-		);
-
-		this.updateExpandGrid();
-	},
-
-	updateIcons: function(){
-
-
-		//dojo.profile.start("updateIcons")
-
-		//dojo.debug("Update icons for "+this)
-		//dojo.debug(this.isFolder)
-
-		this.imgs[0].style.display = this.tree.showRootGrid ? 'inline' : 'none';
-
-
-		//
-		// set the expand icon
-		//
-
-
-		//
-		// set the child icon
-		//
+	}
+}, updateParentGrid:function () {
+	var parent = this.parent;
+	for (var i = 0; i < this.depth; i++) {
+		var idx = this.imgs.length - (3 + i);
+		var img = (this.tree.showGrid && !parent.isLastChild()) ? this.tree.gridIconSrcV : this.tree.blankIconSrc;
+		this.setGridImage(idx, img);
+		parent = parent.parent;
+	}
+}, updateExpandGridColumn:function () {
+	if (!this.tree.showGrid) {
+		return;
+	}
+	var _this = this;
+	var icon = this.isLastChild() ? this.tree.blankIconSrc : this.tree.gridIconSrcV;
+	dojo.lang.forEach(_this.getDescendants(), function (node) {
+		node.setGridImage(_this.depth, icon);
+	});
+	this.updateExpandGrid();
+}, updateIcons:function () {
+	this.imgs[0].style.display = this.tree.showRootGrid ? "inline" : "none";
+	this.buildChildIcon();
+	this.updateExpandGrid();
+	this.updateChildGrid();
+	this.updateParentGrid();
+	dojo.profile.stop("updateIcons");
+}, buildChildIcon:function () {
+	if (this.childIconSrc) {
+		this.childIcon.src = this.childIconSrc;
+	}
+	this.childIcon.style.display = this.childIconSrc ? "inline" : "none";
+}, setGridImage:function (idx, src) {
+	if (idx < 0) {
+		idx = this.imgs.length + idx;
+	}
+	this.imgs[idx].style.backgroundImage = "url(" + src + ")";
+}, updateIconTree:function () {
+	this.tree.updateIconTree.call(this);
+}, expand:function () {
+	if (this.isExpanded) {
+		return;
+	}
+	if (this.children.length) {
+		this.showChildren();
+	}
+	this.isExpanded = true;
+	this.updateExpandIcon();
+	dojo.event.topic.publish(this.tree.eventNames.expand, {source:this});
+}, collapse:function () {
+	if (!this.isExpanded) {
+		return;
+	}
+	this.hideChildren();
+	this.isExpanded = false;
+	this.updateExpandIcon();
+	dojo.event.topic.publish(this.tree.eventNames.collapse, {source:this});
+}, hideChildren:function () {
+	this.tree.toggleObj.hide(this.containerNode, this.toggleDuration, this.explodeSrc, dojo.lang.hitch(this, "onHide"));
+	if (dojo.exists(dojo, "dnd.dragManager.dragObjects") && dojo.dnd.dragManager.dragObjects.length) {
+		dojo.dnd.dragManager.cacheTargetLocations();
+	}
+}, showChildren:function () {
+	this.tree.toggleObj.show(this.containerNode, this.toggleDuration, this.explodeSrc, dojo.lang.hitch(this, "onShow"));
+	if (dojo.exists(dojo, "dnd.dragManager.dragObjects") && dojo.dnd.dragManager.dragObjects.length) {
+		dojo.dnd.dragManager.cacheTargetLocations();
+	}
+}, addChild:function () {
+	return this.tree.addChild.apply(this, arguments);
+}, doAddChild:function () {
+	return this.tree.doAddChild.apply(this, arguments);
+}, edit:function (props) {
+	dojo.lang.mixin(this, props);
+	if (props.title) {
+		this.titleNode.innerHTML = this.title;
+	}
+	if (props.afterLabel) {
+		this.afterLabelNode.innerHTML = this.afterLabel;
+	}
+	if (props.childIconSrc) {
 		this.buildChildIcon();
-
-		this.updateExpandGrid();
-		this.updateChildGrid();
-		this.updateParentGrid();
-
-
-
-		dojo.profile.stop("updateIcons")
-
-	},
-
-	buildChildIcon: function() {
-		// IE (others?) tries to download whatever is on src attribute so setting "url()" like before isnt a good idea
-		// Only results in a 404
-		if(this.childIconSrc){
-			this.childIcon.src = this.childIconSrc;
-		}
-		this.childIcon.style.display = this.childIconSrc ? 'inline' : 'none';
-	},
-
-	setGridImage: function(idx, src){
-
-		if (idx < 0){
-			idx = this.imgs.length + idx;
-		}
-
-		//if (idx >= this.imgs.length-2) return;
-		this.imgs[idx].style.backgroundImage = 'url(' + src + ')';
-	},
-
-
-	updateIconTree: function(){
-		this.tree.updateIconTree.call(this);
-	},
-
-
-
-
-	expand: function(){
-		if (this.isExpanded) return;
-
-		if (this.children.length) {
-			this.showChildren();
-		}
-
-		this.isExpanded = true;
-
-		this.updateExpandIcon();
-
-		dojo.event.topic.publish(this.tree.eventNames.expand, {source: this} );
-	},
-
-	collapse: function(){
-		if (!this.isExpanded) return;
-
-		this.hideChildren();
-		this.isExpanded = false;
-
-		this.updateExpandIcon();
-
-		dojo.event.topic.publish(this.tree.eventNames.collapse, {source: this} );
-	},
-
-	hideChildren: function(){
-		this.tree.toggleObj.hide(
-			this.containerNode, this.toggleDuration, this.explodeSrc, dojo.lang.hitch(this, "onHide")
-		);
-
-		/* if dnd is in action, recalculate changed coordinates */
-		if(dojo.exists(dojo, 'dnd.dragManager.dragObjects') && dojo.dnd.dragManager.dragObjects.length) {
-			dojo.dnd.dragManager.cacheTargetLocations();
-		}
-	},
-
-	showChildren: function(){
-		this.tree.toggleObj.show(
-			this.containerNode, this.toggleDuration, this.explodeSrc, dojo.lang.hitch(this, "onShow")
-		);
-
-		/* if dnd is in action, recalculate changed coordinates */
-		if(dojo.exists(dojo, 'dnd.dragManager.dragObjects') && dojo.dnd.dragManager.dragObjects.length) {
-			dojo.dnd.dragManager.cacheTargetLocations();
-		}
-	},
-
-	addChild: function(){
-		return this.tree.addChild.apply(this, arguments);
-	},
-
-	doAddChild: function(){
-		return this.tree.doAddChild.apply(this, arguments);
-	},
-
-
-
-	/* Edit current node : change properties and update contents */
-	edit: function(props) {
-		dojo.lang.mixin(this, props);
-		if (props.title) {
-			this.titleNode.innerHTML = this.title;
-		}
-
-		if (props.afterLabel) {
-			this.afterLabelNode.innerHTML = this.afterLabel;
-		}
-
-		if (props.childIconSrc) {
-			this.buildChildIcon();
-		}
-
-
-	},
-
-
-	removeNode: function(){ return this.tree.removeNode.apply(this, arguments) },
-	doRemoveNode: function(){ return this.tree.doRemoveNode.apply(this, arguments) },
-
-
-	toString: function() {
-		return "["+this.widgetType+" Tree:"+this.tree+" ID:"+this.widgetId+" Title:"+this.title+"]";
-
 	}
+}, removeNode:function () {
+	return this.tree.removeNode.apply(this, arguments);
+}, doRemoveNode:function () {
+	return this.tree.doRemoveNode.apply(this, arguments);
+}, toString:function () {
+	return "[" + this.widgetType + " Tree:" + this.tree + " ID:" + this.widgetId + " Title:" + this.title + "]";
+}});
 
-});
 
-
-
-
-
 __CPAN_FILE__ src/widget/TreeSelectorV3.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -38218,305 +24058,155 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeSelectorV3");
-
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.widget.TreeCommon");
-
-dojo.widget.defineWidget(
-	"dojo.widget.TreeSelectorV3",
-	[dojo.widget.HtmlWidget, dojo.widget.TreeCommon],
-	function() {
-		this.eventNames = {};
-		this.listenedTrees = {};
-		this.selectedNodes = [];
-		this.lastClicked = {}
-	},
-{
-	// TODO: add multiselect
-
-	listenTreeEvents: ["afterTreeCreate","afterCollapse","afterChangeTree", "afterDetach", "beforeTreeDestroy"],
-	listenNodeFilter: function(elem) { return elem instanceof dojo.widget.Widget},	
-	
-	allowedMulti: true,
-	
-	/**
-	* if time between clicks < dblselectTimeout => its dblselect
-	*/
-	dblselectTimeout: 300,
-	
-	eventNamesDefault: {
-		select : "select",
-		deselect : "deselect",
-		dblselect: "dblselect" // select already selected node.. Edit or whatever
-	},
-
-	onAfterTreeCreate: function(message) {
-		var tree = message.source;
-		dojo.event.browser.addListener(tree.domNode, "onclick", dojo.lang.hitch(this, this.onTreeClick));
-		if (dojo.render.html.ie) {
-			dojo.event.browser.addListener(tree.domNode, "ondblclick", dojo.lang.hitch(this, this.onTreeDblClick));
+dojo.widget.defineWidget("dojo.widget.TreeSelectorV3", [dojo.widget.HtmlWidget, dojo.widget.TreeCommon], function () {
+	this.eventNames = {};
+	this.listenedTrees = {};
+	this.selectedNodes = [];
+	this.lastClicked = {};
+}, {listenTreeEvents:["afterTreeCreate", "afterCollapse", "afterChangeTree", "afterDetach", "beforeTreeDestroy"], listenNodeFilter:function (elem) {
+	return elem instanceof dojo.widget.Widget;
+}, allowedMulti:true, dblselectTimeout:300, eventNamesDefault:{select:"select", deselect:"deselect", dblselect:"dblselect"}, onAfterTreeCreate:function (message) {
+	var tree = message.source;
+	dojo.event.browser.addListener(tree.domNode, "onclick", dojo.lang.hitch(this, this.onTreeClick));
+	if (dojo.render.html.ie) {
+		dojo.event.browser.addListener(tree.domNode, "ondblclick", dojo.lang.hitch(this, this.onTreeDblClick));
+	}
+	dojo.event.browser.addListener(tree.domNode, "onKey", dojo.lang.hitch(this, this.onKey));
+}, onKey:function (e) {
+	if (!e.key || e.ctrkKey || e.altKey) {
+		return;
+	}
+	switch (e.key) {
+	  case e.KEY_ENTER:
+		var node = this.domElement2TreeNode(e.target);
+		if (node) {
+			this.processNode(node, e);
 		}
-		dojo.event.browser.addListener(tree.domNode, "onKey", dojo.lang.hitch(this, this.onKey));
-		
-	},
-	
-	
-	onKey: function(e) {
-		if (!e.key || e.ctrkKey || e.altKey) { return; }
-		
-		switch(e.key) {
-			case e.KEY_ENTER:
-				var node = this.domElement2TreeNode(e.target);
-				if (node) {
-					this.processNode(node, e);
-				}
-		
+	}
+}, onAfterChangeTree:function (message) {
+	if (!message.oldTree && message.node.selected) {
+		this.select(message.node);
+	}
+	if (!message.newTree || !this.listenedTrees[message.newTree.widgetId]) {
+		if (this.selectedNode && message.node.children) {
+			this.deselectIfAncestorMatch(message.node);
 		}
-	},
-	
-	
-		
-	onAfterChangeTree: function(message) {
-		
-		if (!message.oldTree && message.node.selected) {
-			this.select(message.node);
+	}
+}, initialize:function (args) {
+	for (name in this.eventNamesDefault) {
+		if (dojo.lang.isUndefined(this.eventNames[name])) {
+			this.eventNames[name] = this.widgetId + "/" + this.eventNamesDefault[name];
 		}
-		
-		if (!message.newTree || !this.listenedTrees[message.newTree.widgetId]) {
-			// moving from our trfee to new one that we don't listen
-			
-			if (this.selectedNode && message.node.children) {
-				this.deselectIfAncestorMatch(message.node);
-			}						
-			
-		}
-		
-		
-	},
-		
-		
-		
-	initialize: function(args) {
-
-		for(name in this.eventNamesDefault) {
-			if (dojo.lang.isUndefined(this.eventNames[name])) {
-				this.eventNames[name] = this.widgetId+"/"+this.eventNamesDefault[name];
-			}
-		}
-				
-	},
-
-	onBeforeTreeDestroy: function(message) {
-		this.unlistenTree(message.source);
-	},
-
-	// deselect node if ancestor is collapsed
-	onAfterCollapse: function(message) {		
-		this.deselectIfAncestorMatch(message.source);		
-	},
-
-	// IE will throw select -> dblselect. Need to transform to select->select
-	onTreeDblClick: function(event) {
-		this.onTreeClick(event);			
-	},		
-		
-	checkSpecialEvent: function(event) {		
-		return event.shiftKey || event.ctrlKey;
-	},
-	
-	
-	onTreeClick: function(event) {		
-		
-		var node = this.domElement2TreeNode(event.target);
-				
-		if (!node) {
+	}
+}, onBeforeTreeDestroy:function (message) {
+	this.unlistenTree(message.source);
+}, onAfterCollapse:function (message) {
+	this.deselectIfAncestorMatch(message.source);
+}, onTreeDblClick:function (event) {
+	this.onTreeClick(event);
+}, checkSpecialEvent:function (event) {
+	return event.shiftKey || event.ctrlKey;
+}, onTreeClick:function (event) {
+	var node = this.domElement2TreeNode(event.target);
+	if (!node) {
+		return;
+	}
+	var checkLabelClick = function (domElement) {
+		return domElement === node.labelNode;
+	};
+	if (this.checkPathCondition(event.target, checkLabelClick)) {
+		this.processNode(node, event);
+	}
+}, processNode:function (node, event) {
+	if (node.actionIsDisabled(node.actions.SELECT)) {
+		return;
+	}
+	if (dojo.lang.inArray(this.selectedNodes, node)) {
+		if (this.checkSpecialEvent(event)) {
+			this.deselect(node);
 			return;
 		}
-		
-		
-		
-		var checkLabelClick = function(domElement) {
-			return domElement === node.labelNode;
-		}
-		
-		if (this.checkPathCondition(event.target, checkLabelClick)) {
-			this.processNode(node, event);			
-		}
-		
-		
-	},
-	
-	
-	/**
-	 * press on selected with ctrl => deselect it
-	 * press on selected w/o ctrl => dblselect it and deselect all other
-	 *
-	 * press on unselected with ctrl => add it to selection
-	 *
-	 * event may be both mouse & keyboard enter
-	 */
-	processNode: function(node, event) {
-		
-		if (node.actionIsDisabled(node.actions.SELECT)) {
-			return;
-		}
-		
-		//dojo.debug("click "+node+ "special "+this.checkSpecialEvent(event));		
-		
-		if (dojo.lang.inArray(this.selectedNodes, node)) {
-				
-			if(this.checkSpecialEvent(event)){				
-				// If the node is currently selected, and they select it again while holding
-				// down a meta key, it deselects it
-				this.deselect(node);
-				return;
+		var _this = this;
+		var i = 0;
+		var selectedNode;
+		while (this.selectedNodes.length > i) {
+			selectedNode = this.selectedNodes[i];
+			if (selectedNode !== node) {
+				this.deselect(selectedNode);
+				continue;
 			}
-			
-			var _this = this;
-			var i=0;
-			var selectedNode;
-			
-			/* remove all nodes from selection excepts this one */
-			while(this.selectedNodes.length > i) {
-				selectedNode = this.selectedNodes[i];
-				if (selectedNode !== node) {
-					//dojo.debug("Deselect "+selectedNode);
-					this.deselect(selectedNode);
-					continue;
-				}
-			
-				i++; // skip the doubleclicked node
-			}
-		
-			/* lastClicked.node may be undefined if node was selected(before) programmatically */
-			var wasJustClicked = this.checkRecentClick(node)
-			
-			eventName = wasJustClicked ? this.eventNames.dblselect : this.eventNames.select;
-			if (wasJustClicked) {
-				eventName = this.eventNames.dblselect;
-				/* after dblselect, next select is usual select */
-				this.forgetLastClicked();
-			} else {
-				eventName = this.eventNames.select;
-				this.setLastClicked(node)
-			}
-			
-			dojo.event.topic.publish(eventName, { node: node });
-			
-			return;
+			i++;
 		}
-		
-		/* if unselected node..	*/
-		
-		this.deselectIfNoMulti(event);
-		
-		//dojo.debug("select");
-		
-		this.setLastClicked(node);
-		
-		this.select(node);
-
-	},
-	
-	forgetLastClicked: function() {
-		this.lastClicked = {}
-	},
-	
-	setLastClicked: function(node) {
-		this.lastClicked.date = new Date();	
-		this.lastClicked.node = node;
-	},
-	
-	checkRecentClick: function(node) {
-		var diff = new Date() - this.lastClicked.date;
-		//dojo.debug(new Date())
-		//dojo.debug("check old "+this.lastClicked.node+" now "+(new Date())+" diff "+diff)
-		if (this.lastClicked.node && diff < this.dblselectTimeout) {
-			return true;
+		var wasJustClicked = this.checkRecentClick(node);
+		eventName = wasJustClicked ? this.eventNames.dblselect : this.eventNames.select;
+		if (wasJustClicked) {
+			eventName = this.eventNames.dblselect;
+			this.forgetLastClicked();
 		} else {
-			return false;
+			eventName = this.eventNames.select;
+			this.setLastClicked(node);
 		}
-	},
-	
-	// deselect all if no meta key or disallowed
-	deselectIfNoMulti: function(event) {
-		if (!this.checkSpecialEvent(event) || !this.allowedMulti) {
-			//dojo.debug("deselect All");
-			this.deselectAll();
-		}
-	},
-
-	deselectIfAncestorMatch: function(ancestor) {
-		/* deselect all nodes with this ancestor */
-		var _this = this;
-		dojo.lang.forEach(this.selectedNodes, function(node) {
-			var selectedNode = node;
-			node = node.parent
-			while (node && node.isTreeNode) {
-				//dojo.debug("ancestor try "+node);
-				
-				if (node === ancestor) {
-					_this.deselect(selectedNode); 
-					return;					
-				}
-				node = node.parent;
+		dojo.event.topic.publish(eventName, {node:node});
+		return;
+	}
+	this.deselectIfNoMulti(event);
+	this.setLastClicked(node);
+	this.select(node);
+}, forgetLastClicked:function () {
+	this.lastClicked = {};
+}, setLastClicked:function (node) {
+	this.lastClicked.date = new Date();
+	this.lastClicked.node = node;
+}, checkRecentClick:function (node) {
+	var diff = new Date() - this.lastClicked.date;
+	if (this.lastClicked.node && diff < this.dblselectTimeout) {
+		return true;
+	} else {
+		return false;
+	}
+}, deselectIfNoMulti:function (event) {
+	if (!this.checkSpecialEvent(event) || !this.allowedMulti) {
+		this.deselectAll();
+	}
+}, deselectIfAncestorMatch:function (ancestor) {
+	var _this = this;
+	dojo.lang.forEach(this.selectedNodes, function (node) {
+		var selectedNode = node;
+		node = node.parent;
+		while (node && node.isTreeNode) {
+			if (node === ancestor) {
+				_this.deselect(selectedNode);
+				return;
 			}
-		});
-	},
-	
-			
-
-
-	onAfterDetach: function(message) {
-		this.deselectIfAncestorMatch(message.child);		
-	},
-
-
-	select: function(node) {
-
-		var index = dojo.lang.find(this.selectedNodes, node, true);
-		
-		if (index >=0 ) {
-			return; // already selected
+			node = node.parent;
 		}
-				
-		//dojo.debug("select "+node);
-		this.selectedNodes.push(node);
-						
-		dojo.event.topic.publish(this.eventNames.select, {node: node} );
-	},
-
-
-	deselect: function(node){
-		var index = dojo.lang.find(this.selectedNodes, node, true);
-		if (index < 0) {
-			//dojo.debug("not selected");
-			return; // not selected
-		}
-		
-		//dojo.debug("deselect "+node);
-		//dojo.debug((new Error()).stack);
-		
-		this.selectedNodes.splice(index, 1);
-		dojo.event.topic.publish(this.eventNames.deselect, {node: node} );
-		//dojo.debug("deselect");
-
-	},
-	
-	deselectAll: function() {
-		//dojo.debug("deselect all "+this.selectedNodes);
-		while (this.selectedNodes.length) {
-			this.deselect(this.selectedNodes[0]);
-		}
+	});
+}, onAfterDetach:function (message) {
+	this.deselectIfAncestorMatch(message.child);
+}, select:function (node) {
+	var index = dojo.lang.find(this.selectedNodes, node, true);
+	if (index >= 0) {
+		return;
 	}
+	this.selectedNodes.push(node);
+	dojo.event.topic.publish(this.eventNames.select, {node:node});
+}, deselect:function (node) {
+	var index = dojo.lang.find(this.selectedNodes, node, true);
+	if (index < 0) {
+		return;
+	}
+	this.selectedNodes.splice(index, 1);
+	dojo.event.topic.publish(this.eventNames.deselect, {node:node});
+}, deselectAll:function () {
+	while (this.selectedNodes.length) {
+		this.deselect(this.selectedNodes[0]);
+	}
+}});
 
-});
 
-
-
-
 __CPAN_FILE__ src/widget/PageContainer.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -38529,410 +24219,196 @@
 */
 
 dojo.provide("dojo.widget.PageContainer");
-
 dojo.require("dojo.lang.func");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.event.*");
 dojo.require("dojo.html.selection");
-
-dojo.widget.defineWidget("dojo.widget.PageContainer", dojo.widget.HtmlWidget, {
-	// summary
-	//	A container that has multiple children, but shows only
-	//	one child at a time (like looking at the pages in a book one by one).
-	//
-	//	Publishes topics <widgetId>-addChild, <widgetId>-removeChild, and <widgetId>-selectChild
-	//
-	//	Can be base class for container, Wizard, Show, etc.
-
-	isContainer: true,
-
-	// doLayout: Boolean
-	//  if true, change the size of my currently displayed child to match my size
-	doLayout: true,
-
-	templateString: "<div dojoAttachPoint='containerNode'></div>",
-
-	// selectedChild: String
-	//   id of the currently shown page
-	selectedChild: "",
-
-	fillInTemplate: function(args, frag) {
-		// Copy style info from input node to output node
-		var source = this.getFragNodeRef(frag);
-		dojo.html.copyStyle(this.domNode, source);
-		dojo.widget.PageContainer.superclass.fillInTemplate.apply(this, arguments);
-	},
-
-	postCreate: function(args, frag) {
-		if(this.children.length){
-			// Setup each page panel
-			dojo.lang.forEach(this.children, this._setupChild, this);
-
-			// Figure out which child to initially display
-			var initialChild;
-			if(this.selectedChild){
-				this.selectChild(this.selectedChild);
-			}else{
-				for(var i=0; i<this.children.length; i++){
-					if(this.children[i].selected){
-						this.selectChild(this.children[i]);
-						break;
-					}
+dojo.widget.defineWidget("dojo.widget.PageContainer", dojo.widget.HtmlWidget, {isContainer:true, doLayout:true, templateString:"<div dojoAttachPoint='containerNode'></div>", selectedChild:"", fillInTemplate:function (args, frag) {
+	var source = this.getFragNodeRef(frag);
+	dojo.html.copyStyle(this.domNode, source);
+	dojo.widget.PageContainer.superclass.fillInTemplate.apply(this, arguments);
+}, postCreate:function (args, frag) {
+	if (this.children.length) {
+		dojo.lang.forEach(this.children, this._setupChild, this);
+		var initialChild;
+		if (this.selectedChild) {
+			this.selectChild(this.selectedChild);
+		} else {
+			for (var i = 0; i < this.children.length; i++) {
+				if (this.children[i].selected) {
+					this.selectChild(this.children[i]);
+					break;
 				}
-				if(!this.selectedChildWidget){
-					this.selectChild(this.children[0]);
-				}
 			}
-		}
-	},
-
-	addChild: function(child){
-		dojo.widget.PageContainer.superclass.addChild.apply(this, arguments);
-		this._setupChild(child);
-
-		// in case the tab labels have overflowed from one line to two lines
-		this.onResized();
-
-		// if this is the first child, then select it
-		if(!this.selectedChildWidget){
-			this.selectChild(child);
-		}
-	},
-
-	_setupChild: function(/*Widget*/ page){
-		// Summary: Add the given child to this page container
-
-		page.hide();
-		
-		// since we are setting the width/height of the child elements, they need
-		// to be position:relative, or IE has problems (See bug #2033)
-		page.domNode.style.position="relative";
-
-		// publish the addChild event for panes added via addChild(), and the original panes too
-		dojo.event.topic.publish(this.widgetId+"-addChild", page);
-	},
-
-	removeChild: function(/*Widget*/ page){
-		dojo.widget.PageContainer.superclass.removeChild.apply(this, arguments);
-
-		// If we are being destroyed than don't run the code below (to select another page), because we are deleting
-		// every page one by one
-		if(this._beingDestroyed){ return; }
-
-		// this will notify any tablists to remove a button; do this first because it may affect sizing
-		dojo.event.topic.publish(this.widgetId+"-removeChild", page);
-
-		// in case the tab labels now take up one line instead of two lines
-		this.onResized();
-
-		if (this.selectedChildWidget === page) {
-			this.selectedChildWidget = undefined;
-			if (this.children.length > 0) {
-				this.selectChild(this.children[0], true);
+			if (!this.selectedChildWidget) {
+				this.selectChild(this.children[0]);
 			}
 		}
-	},
-
-	selectChild: function(/*Widget*/ page, /*Widget*/ callingWidget){
-		// summary
-		//	Show the given widget (which must be one of my children)
-		page = dojo.widget.byId(page);
-		this.correspondingPageButton = callingWidget;
-
-		// Deselect old page and select new one
-		if(this.selectedChildWidget){
-			this._hideChild(this.selectedChildWidget);
+	}
+}, addChild:function (child) {
+	dojo.widget.PageContainer.superclass.addChild.apply(this, arguments);
+	this._setupChild(child);
+	this.onResized();
+	if (!this.selectedChildWidget) {
+		this.selectChild(child);
+	}
+}, _setupChild:function (page) {
+	page.hide();
+	page.domNode.style.position = "relative";
+	dojo.event.topic.publish(this.widgetId + "-addChild", page);
+}, removeChild:function (page) {
+	dojo.widget.PageContainer.superclass.removeChild.apply(this, arguments);
+	if (this._beingDestroyed) {
+		return;
+	}
+	dojo.event.topic.publish(this.widgetId + "-removeChild", page);
+	this.onResized();
+	if (this.selectedChildWidget === page) {
+		this.selectedChildWidget = undefined;
+		if (this.children.length > 0) {
+			this.selectChild(this.children[0], true);
 		}
-		this.selectedChildWidget = page;
-		this.selectedChild = page.widgetId;
-		this._showChild(page);
-		page.isFirstChild = (page == this.children[0]);
-		page.isLastChild = (page == this.children[this.children.length-1]);
-		dojo.event.topic.publish(this.widgetId+"-selectChild", page);
-	},
-
-	forward: function(){
-		// Summary: advance to next page
-		var index = dojo.lang.find(this.children, this.selectedChildWidget);
-		this.selectChild(this.children[index+1]);
-	},
-
-	back: function(){
-		// Summary: go back to previous page
-		var index = dojo.lang.find(this.children, this.selectedChildWidget);
-		this.selectChild(this.children[index-1]);
-	},
-
-	onResized: function(){
-		// Summary: called when any page is shown, to make it fit the container correctly
-		if(this.doLayout && this.selectedChildWidget){
-			with(this.selectedChildWidget.domNode.style){
-				top = dojo.html.getPixelValue(this.containerNode, "padding-top", true);
-				left = dojo.html.getPixelValue(this.containerNode, "padding-left", true);
-			}
-			var content = dojo.html.getContentBox(this.containerNode);
-			this.selectedChildWidget.resizeTo(content.width, content.height);
-		}
-	},
-
-	_showChild: function(/*Widget*/ page) {
-		// size the current page (in case this is the first time it's being shown, or I have been resized)
-		if(this.doLayout){
-			var content = dojo.html.getContentBox(this.containerNode);
-			page.resizeTo(content.width, content.height);
-		}
-
-		page.selected=true;
-		page.show();
-	},
-
-	_hideChild: function(/*Widget*/ page) {
-		page.selected=false;
-		page.hide();
-	},
-
-	closeChild: function(/*Widget*/ page) {
-		// summary
-		//	callback when user clicks the [X] to remove a page
-		//	if onClose() returns true then remove and destroy the childd
-		var remove = page.onClose(this, page);
-		if(remove) {
-			this.removeChild(page);
-			// makes sure we can clean up executeScripts in ContentPane onUnLoad
-			page.destroy();
-		}
-	},
-
-	destroy: function(){
-		this._beingDestroyed = true;
-		dojo.event.topic.destroy(this.widgetId+"-addChild");
-		dojo.event.topic.destroy(this.widgetId+"-removeChild");
-		dojo.event.topic.destroy(this.widgetId+"-selectChild");
-		dojo.widget.PageContainer.superclass.destroy.apply(this, arguments);
 	}
-});
-
-
-dojo.widget.defineWidget(
-    "dojo.widget.PageController",
-    dojo.widget.HtmlWidget,
-	{
-		// summary
-		//	Set of buttons to select a page in a page list.
-		//	Monitors the specified PageContaine, and whenever a page is
-		//	added, deleted, or selected, updates itself accordingly.
-
-		templateString: "<span wairole='tablist' dojoAttachEvent='onKey'></span>",
-		isContainer: true,
-
-		// containerId: String
-		//	the id of the page container that I point to
-		containerId: "",
-
-		// buttonWidget: String
-		//	the name of the button widget to create to correspond to each page
-		buttonWidget: "PageButton",
-
-		// class: String
-		//	Class name to apply to the top dom node
-		"class": "dojoPageController",
-
-		fillInTemplate: function() {
-			dojo.html.addClass(this.domNode, this["class"]);  // "class" is a reserved word in JS
-			dojo.widget.wai.setAttr(this.domNode, "waiRole", "role", "tablist");
-		},
-
-		postCreate: function(){
-			this.pane2button = {};		// mapping from panes to buttons
-
-			// If children have already been added to the page container then create buttons for them
-			var container = dojo.widget.byId(this.containerId);
-			if(container){
-				dojo.lang.forEach(container.children, this.onAddChild, this);
-			}
-
-			dojo.event.topic.subscribe(this.containerId+"-addChild", this, "onAddChild");
-			dojo.event.topic.subscribe(this.containerId+"-removeChild", this, "onRemoveChild");
-			dojo.event.topic.subscribe(this.containerId+"-selectChild", this, "onSelectChild");
-		},
-
-		destroy: function(){
-			dojo.event.topic.unsubscribe(this.containerId+"-addChild", this, "onAddChild");
-			dojo.event.topic.unsubscribe(this.containerId+"-removeChild", this, "onRemoveChild");
-			dojo.event.topic.unsubscribe(this.containerId+"-selectChild", this, "onSelectChild");
-			dojo.widget.PageController.superclass.destroy.apply(this, arguments);
-		},
-
-		onAddChild: function(/*Widget*/ page){
-			// summary
-			//   Called whenever a page is added to the container.
-			//   Create button corresponding to the page.
-			var button = dojo.widget.createWidget(this.buttonWidget,
-				{
-					label: page.label,
-					closeButton: page.closable
-				});
-			this.addChild(button);
-			this.domNode.appendChild(button.domNode);
-			this.pane2button[page]=button;
-			page.controlButton = button;	// this value might be overwritten if two tabs point to same container
-
-			var _this = this;
-			dojo.event.connect(button, "onClick", function(){ _this.onButtonClick(page); });
-			dojo.event.connect(button, "onCloseButtonClick", function(){ _this.onCloseButtonClick(page); });
-		},
-
-		onRemoveChild: function(/*Widget*/ page){
-			// summary
-			//   Called whenever a page is removed from the container.
-			//   Remove the button corresponding to the page.
-			if(this._currentChild == page){ this._currentChild = null; }
-			var button = this.pane2button[page];
-			if(button){
-				button.destroy();
-			}
-			this.pane2button[page] = null;
-		},
-
-		onSelectChild: function(/*Widget*/ page){
-			// Summary
-			//	Called when a page has been selected in the PageContainer, either by me or by another PageController
-			if(this._currentChild){
-				var oldButton=this.pane2button[this._currentChild];
-				oldButton.clearSelected();
-			}
-			var newButton=this.pane2button[page];
-			newButton.setSelected();
-			this._currentChild=page;
-		},
-
-		onButtonClick: function(/*Widget*/ page){
-			// summary
-			//   Called whenever one of my child buttons is pressed in an attempt to select a page
-			var container = dojo.widget.byId(this.containerId);	// TODO: do this via topics?
-			container.selectChild(page, false, this);
-		},
-
-		onCloseButtonClick: function(/*Widget*/ page){
-			// summary
-			//   Called whenever one of my child buttons [X] is pressed in an attempt to close a page
-			var container = dojo.widget.byId(this.containerId);
-			container.closeChild(page);
-		},
-
-		onKey: function(/*Event*/ evt){
-			// summary:
-			//   Handle keystrokes on the page list, for advancing to next/previous button
-
-			if( (evt.keyCode == evt.KEY_RIGHT_ARROW)||
-				(evt.keyCode == evt.KEY_LEFT_ARROW) ){
-				var current = 0;
-				var next = null;	// the next button to focus on
-				
-				// find currently focused button in children array
-				var current = dojo.lang.find(this.children, this.pane2button[this._currentChild]);
-				
-				// pick next button to focus on
-				if(evt.keyCode == evt.KEY_RIGHT_ARROW){
-					next = this.children[ (current+1) % this.children.length ]; 
-				}else{ // is LEFT_ARROW
-					next = this.children[ (current+ (this.children.length-1)) % this.children.length ];
-				}
-				
-				dojo.event.browser.stopEvent(evt);
-				next.onClick();
-			}
+}, selectChild:function (page, callingWidget) {
+	page = dojo.widget.byId(page);
+	this.correspondingPageButton = callingWidget;
+	if (this.selectedChildWidget) {
+		this._hideChild(this.selectedChildWidget);
+	}
+	this.selectedChildWidget = page;
+	this.selectedChild = page.widgetId;
+	this._showChild(page);
+	page.isFirstChild = (page == this.children[0]);
+	page.isLastChild = (page == this.children[this.children.length - 1]);
+	dojo.event.topic.publish(this.widgetId + "-selectChild", page);
+}, forward:function () {
+	var index = dojo.lang.find(this.children, this.selectedChildWidget);
+	this.selectChild(this.children[index + 1]);
+}, back:function () {
+	var index = dojo.lang.find(this.children, this.selectedChildWidget);
+	this.selectChild(this.children[index - 1]);
+}, onResized:function () {
+	if (this.doLayout && this.selectedChildWidget) {
+		with (this.selectedChildWidget.domNode.style) {
+			top = dojo.html.getPixelValue(this.containerNode, "padding-top", true);
+			left = dojo.html.getPixelValue(this.containerNode, "padding-left", true);
 		}
+		var content = dojo.html.getContentBox(this.containerNode);
+		this.selectedChildWidget.resizeTo(content.width, content.height);
 	}
-);
-
-dojo.widget.defineWidget("dojo.widget.PageButton", dojo.widget.HtmlWidget,
-{
-	// summary
-	//	Internal widget used by PageList.
-	//	The button-like or tab-like object you click to select or delete a page
-
-	templateString: "<span class='item'>" +
-						"<span dojoAttachEvent='onClick' dojoAttachPoint='titleNode' class='selectButton'>${this.label}</span>" +
-						"<span dojoAttachEvent='onClick:onCloseButtonClick' class='closeButton'>[X]</span>" +
-					"</span>",
-
-	// label: String
-	//  Name to print on the button
-	label: "foo",
-	
-	// closeButton: Boolean
-	//	true iff we should also print a close icon to destroy corresponding page
-	closeButton: false,
-
-	onClick: function(){
-		// summary
-		//  Basically this is the attach point PageController listens to, to select the page
-		this.focus();
-	},
-
-	onCloseButtonMouseOver: function(){
-		// summary
-		//	The close button changes color a bit when you mouse over	
-		dojo.html.addClass(this.closeButtonNode, "closeHover");
-	},
-
-	onCloseButtonMouseOut: function(){
-		// summary
-		// 	Revert close button to normal color on mouse out
-		dojo.html.removeClass(this.closeButtonNode, "closeHover");
-	},
-
-	onCloseButtonClick: function(/*Event*/ evt){
-		// summary
-		//	Handle clicking the close button for this tab
-	},
-	
-	setSelected: function(){
-		// summary
-		//	This is run whenever the page corresponding to this button has been selected
-		dojo.html.addClass(this.domNode, "current");
-		this.titleNode.setAttribute("tabIndex","0");
-	},
-	
-	clearSelected: function(){
-		// summary
-		//	This function is run whenever the page corresponding to this button has been deselected (and another page has been shown)
-		dojo.html.removeClass(this.domNode, "current");
-		this.titleNode.setAttribute("tabIndex","-1");
-	},
-
-	focus: function(){
-		// summary
-		//	This will focus on the this button (for accessibility you need to do this when the button is selected)
-		if(this.titleNode.focus){	// mozilla 1.7 doesn't have focus() func
-			this.titleNode.focus();
+}, _showChild:function (page) {
+	if (this.doLayout) {
+		var content = dojo.html.getContentBox(this.containerNode);
+		page.resizeTo(content.width, content.height);
+	}
+	page.selected = true;
+	page.show();
+}, _hideChild:function (page) {
+	page.selected = false;
+	page.hide();
+}, closeChild:function (page) {
+	var remove = page.onClose(this, page);
+	if (remove) {
+		this.removeChild(page);
+		page.destroy();
+	}
+}, destroy:function () {
+	this._beingDestroyed = true;
+	dojo.event.topic.destroy(this.widgetId + "-addChild");
+	dojo.event.topic.destroy(this.widgetId + "-removeChild");
+	dojo.event.topic.destroy(this.widgetId + "-selectChild");
+	dojo.widget.PageContainer.superclass.destroy.apply(this, arguments);
+}});
+dojo.widget.defineWidget("dojo.widget.PageController", dojo.widget.HtmlWidget, {templateString:"<span wairole='tablist' dojoAttachEvent='onKey'></span>", isContainer:true, containerId:"", buttonWidget:"PageButton", "class":"dojoPageController", fillInTemplate:function () {
+	dojo.html.addClass(this.domNode, this["class"]);
+	dojo.widget.wai.setAttr(this.domNode, "waiRole", "role", "tablist");
+}, postCreate:function () {
+	this.pane2button = {};
+	var container = dojo.widget.byId(this.containerId);
+	if (container) {
+		dojo.lang.forEach(container.children, this.onAddChild, this);
+	}
+	dojo.event.topic.subscribe(this.containerId + "-addChild", this, "onAddChild");
+	dojo.event.topic.subscribe(this.containerId + "-removeChild", this, "onRemoveChild");
+	dojo.event.topic.subscribe(this.containerId + "-selectChild", this, "onSelectChild");
+}, destroy:function () {
+	dojo.event.topic.unsubscribe(this.containerId + "-addChild", this, "onAddChild");
+	dojo.event.topic.unsubscribe(this.containerId + "-removeChild", this, "onRemoveChild");
+	dojo.event.topic.unsubscribe(this.containerId + "-selectChild", this, "onSelectChild");
+	dojo.widget.PageController.superclass.destroy.apply(this, arguments);
+}, onAddChild:function (page) {
+	var button = dojo.widget.createWidget(this.buttonWidget, {label:page.label, closeButton:page.closable});
+	this.addChild(button);
+	this.domNode.appendChild(button.domNode);
+	this.pane2button[page] = button;
+	page.controlButton = button;
+	var _this = this;
+	dojo.event.connect(button, "onClick", function () {
+		_this.onButtonClick(page);
+	});
+	dojo.event.connect(button, "onCloseButtonClick", function () {
+		_this.onCloseButtonClick(page);
+	});
+}, onRemoveChild:function (page) {
+	if (this._currentChild == page) {
+		this._currentChild = null;
+	}
+	var button = this.pane2button[page];
+	if (button) {
+		button.destroy();
+	}
+	this.pane2button[page] = null;
+}, onSelectChild:function (page) {
+	if (this._currentChild) {
+		var oldButton = this.pane2button[this._currentChild];
+		oldButton.clearSelected();
+	}
+	var newButton = this.pane2button[page];
+	newButton.setSelected();
+	this._currentChild = page;
+}, onButtonClick:function (page) {
+	var container = dojo.widget.byId(this.containerId);
+	container.selectChild(page, false, this);
+}, onCloseButtonClick:function (page) {
+	var container = dojo.widget.byId(this.containerId);
+	container.closeChild(page);
+}, onKey:function (evt) {
+	if ((evt.keyCode == evt.KEY_RIGHT_ARROW) || (evt.keyCode == evt.KEY_LEFT_ARROW)) {
+		var current = 0;
+		var next = null;
+		var current = dojo.lang.find(this.children, this.pane2button[this._currentChild]);
+		if (evt.keyCode == evt.KEY_RIGHT_ARROW) {
+			next = this.children[(current + 1) % this.children.length];
+		} else {
+			next = this.children[(current + (this.children.length - 1)) % this.children.length];
 		}
+		dojo.event.browser.stopEvent(evt);
+		next.onClick();
 	}
-});
-
-// These arguments can be specified for the children of a PageContainer.
-// Since any widget can be specified as a PageContainer child, mix them
-// into the base widget class.  (This is a hack, but it's effective.)
-dojo.lang.extend(dojo.widget.Widget, {
-	// label: String
-	//		Label or title of this widget.  Used by TabContainer to the name the tab, etc.
-	label: "",
-	
-	// selected: Boolean
-	//		Is this child currently selected?
-	selected: false,
-	
-	// closable: Boolean
-	//		True if user can close (destroy) this child, such as (for example) clicking the X on the tab.
-	closable: false,	// true if user can close this tab pane
-	
-	onClose: function(){
-		// summary: Callback if someone tries to close the child, child will be closed if func returns true
-		return true;
+}});
+dojo.widget.defineWidget("dojo.widget.PageButton", dojo.widget.HtmlWidget, {templateString:"<span class='item'>" + "<span dojoAttachEvent='onClick' dojoAttachPoint='titleNode' class='selectButton'>${this.label}</span>" + "<span dojoAttachEvent='onClick:onCloseButtonClick' class='closeButton'>[X]</span>" + "</span>", label:"foo", closeButton:false, onClick:function () {
+	this.focus();
+}, onCloseButtonMouseOver:function () {
+	dojo.html.addClass(this.closeButtonNode, "closeHover");
+}, onCloseButtonMouseOut:function () {
+	dojo.html.removeClass(this.closeButtonNode, "closeHover");
+}, onCloseButtonClick:function (evt) {
+}, setSelected:function () {
+	dojo.html.addClass(this.domNode, "current");
+	this.titleNode.setAttribute("tabIndex", "0");
+}, clearSelected:function () {
+	dojo.html.removeClass(this.domNode, "current");
+	this.titleNode.setAttribute("tabIndex", "-1");
+}, focus:function () {
+	if (this.titleNode.focus) {
+		this.titleNode.focus();
 	}
-});
+}});
+dojo.lang.extend(dojo.widget.Widget, {label:"", selected:false, closable:false, onClose:function () {
+	return true;
+}});
 
+
 __CPAN_FILE__ src/widget/TreeDeselectOnDblselect.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -38944,34 +24420,18 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeDeselectOnDblselect");
-
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.widget.TreeSelectorV3");
-
 dojo.deprecated("Does anyone still need this extension? (TreeDeselectOnDblselect)");
-// selector extension to emphasize node
+dojo.widget.defineWidget("dojo.widget.TreeDeselectOnDblselect", [dojo.widget.HtmlWidget], {selector:"", initialize:function () {
+	this.selector = dojo.widget.byId(this.selector);
+	dojo.event.topic.subscribe(this.selector.eventNames.dblselect, this, "onDblselect");
+}, onDblselect:function (message) {
+	this.selector.deselect(message.node);
+}});
 
-dojo.widget.defineWidget(
-	"dojo.widget.TreeDeselectOnDblselect",
-	[dojo.widget.HtmlWidget],
-{
-	selector: "",
-	
-	initialize: function() {
-		this.selector = dojo.widget.byId(this.selector);
-		//dojo.debug("OK "+this.selector);
-		dojo.event.topic.subscribe(this.selector.eventNames.dblselect, this, "onDblselect");		
-	},
 
-	onDblselect: function(message) {
-		//dojo.debug("happen "+this.selector);
-		//dojo.debug(message.node);
-		this.selector.deselect(message.node);
-	}
-});
-
 __CPAN_FILE__ src/widget/DebugConsole.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -38987,21 +24447,14 @@
 dojo.require("dojo.widget.Widget");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.FloatingPane");
+dojo.widget.defineWidget("dojo.widget.DebugConsole", dojo.widget.FloatingPane, {fillInTemplate:function () {
+	dojo.widget.DebugConsole.superclass.fillInTemplate.apply(this, arguments);
+	this.containerNode.id = "debugConsoleClientPane";
+	djConfig.isDebug = true;
+	djConfig.debugContainerId = this.containerNode.id;
+}});
 
-dojo.widget.defineWidget(
-	"dojo.widget.DebugConsole",
-	dojo.widget.FloatingPane,
-{
-	// summary: opens a floating pane that collects and display debug messages (from dojo.debug(), etc.)
 
-	fillInTemplate: function() {
-		dojo.widget.DebugConsole.superclass.fillInTemplate.apply(this, arguments);
-		this.containerNode.id = "debugConsoleClientPane";
-		djConfig.isDebug = true;
-		djConfig.debugContainerId = this.containerNode.id;
-	}
-});
-
 __CPAN_FILE__ src/widget/HtmlWidget.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -39021,181 +24474,88 @@
 dojo.require("dojo.lang.extras");
 dojo.require("dojo.lang.func");
 dojo.require("dojo.lfx.toggle");
-
-dojo.declare("dojo.widget.HtmlWidget", dojo.widget.DomWidget, {								 
-	// summary
-	//	Base class for all browser based widgets, or at least "html" widgets.
-	//	The meaning of "html" has become unclear; in practice, all widgets derive from this class.
-	
-	// templateCssPath: String
-	//	Path to CSS file for this widget
-	templateCssPath: null,
-	
-	// templatePath: String
-	//	Path to template (HTML file) for this widget
-	templatePath: null,
-
-	// lang: String
-	//	Language to display this widget in (like en-us).
-	//	Defaults to brower's specified preferred language (typically the language of the OS)
-	lang: "",
-
-	// toggle: String
-	//	Controls animation effect for when show() and hide() (or toggle()) are called.
-	//	Possible values: "plain", "wipe", "fade", "explode"
-	toggle: "plain",
-
-	// toggleDuration: Integer
-	//	Number of milliseconds for toggle animation effect to complete
-	toggleDuration: 150,
-
-	initialize: function(args, frag){
-		// summary: called after the widget is rendered; most subclasses won't override or call this function
-	},
-
-	postMixInProperties: function(args, frag){
-		if(this.lang === ""){this.lang = null;}
-		// now that we know the setting for toggle, get toggle object
-		// (default to plain toggler if user specified toggler not present)
-		this.toggleObj =
-			dojo.lfx.toggle[this.toggle.toLowerCase()] || dojo.lfx.toggle.plain;
-	},
-
-	createNodesFromText: function(txt, wrap){
-		return dojo.html.createNodesFromText(txt, wrap);
-	},
-
-	destroyRendering: function(finalize){
-		try{
-			if(this.bgIframe){
-				this.bgIframe.remove();
-				delete this.bgIframe;
-			}
-			if(!finalize && this.domNode){
-				dojo.event.browser.clean(this.domNode);
-			}
-			dojo.widget.HtmlWidget.superclass.destroyRendering.call(this);
-		}catch(e){ /* squelch! */ }
-	},
-
-	/////////////////////////////////////////////////////////
-	// Displaying/hiding the widget
-	/////////////////////////////////////////////////////////
-	isShowing: function(){
-		// summary
-		//	Tests whether widget is set to show-mode or hide-mode (see show() and 
-		//	hide() methods)
-		//
-		//	This function is poorly named.  Even if widget is in show-mode,
-		//	if it's inside a container that's hidden
-		//	(either a container widget, or just a domnode with display:none),
-		//	then it won't be displayed
-		return dojo.html.isShowing(this.domNode);	// Boolean
-	},
-
-	toggleShowing: function(){
-		// summary: show or hide the widget, to switch it's state
-		if(this.isShowing()){
-			this.hide();
-		}else{
-			this.show();
+dojo.declare("dojo.widget.HtmlWidget", dojo.widget.DomWidget, {templateCssPath:null, templatePath:null, lang:"", toggle:"plain", toggleDuration:150, initialize:function (args, frag) {
+}, postMixInProperties:function (args, frag) {
+	if (this.lang === "") {
+		this.lang = null;
+	}
+	this.toggleObj = dojo.lfx.toggle[this.toggle.toLowerCase()] || dojo.lfx.toggle.plain;
+}, createNodesFromText:function (txt, wrap) {
+	return dojo.html.createNodesFromText(txt, wrap);
+}, destroyRendering:function (finalize) {
+	try {
+		if (this.bgIframe) {
+			this.bgIframe.remove();
+			delete this.bgIframe;
 		}
-	},
-
-	show: function(){
-		// summary: show the widget
-		if(this.isShowing()){ return; }
-		this.animationInProgress=true;
-		this.toggleObj.show(this.domNode, this.toggleDuration, null,
-			dojo.lang.hitch(this, this.onShow), this.explodeSrc);
-	},
-
-	onShow: function(){
-		// summary: called after the show() animation has completed
-		this.animationInProgress=false;
-		this.checkSize();
-	},
-
-	hide: function(){
-		// summary: hide the widget (ending up with display:none)
-		if(!this.isShowing()){ return; }
-		this.animationInProgress = true;
-		this.toggleObj.hide(this.domNode, this.toggleDuration, null,
-			dojo.lang.hitch(this, this.onHide), this.explodeSrc);
-	},
-
-	onHide: function(){
-		// summary: called after the hide() animation has completed
-		this.animationInProgress=false;
-	},
-
-	//////////////////////////////////////////////////////////////////////////////
-	// Sizing related methods
-	//  If the parent changes size then for each child it should call either
-	//   - resizeTo(): size the child explicitly
-	//   - or checkSize(): notify the child the the parent has changed size
-	//////////////////////////////////////////////////////////////////////////////
-
-	_isResized: function(w, h){
-		// summary
-		//	Test if my size has changed.
-		//	If width & height are specified then that's my new size; otherwise,
-		//	query outerWidth/outerHeight of my domNode
-
-		// If I'm not being displayed then disregard (show() must
-		// check if the size has changed)
-		if(!this.isShowing()){ return false; }
-
-		// If my parent has been resized and I have style="height: 100%"
-		// or something similar then my size has changed too.
-		var wh = dojo.html.getMarginBox(this.domNode);
-		var width=w||wh.width;
-		var height=h||wh.height;
-		if(this.width == width && this.height == height){ return false; }
-
-		this.width=width;
-		this.height=height;
-		return true;
-	},
-
-	checkSize: function(){
-		// summary
-		//	Called when my parent has changed size, but my parent won't call resizeTo().
-		//	This is useful if my size is height:100% or something similar.
-		//	Also called whenever I am shown, because the first time I am shown I may need
-		//	to do size calculations.
-		if(!this._isResized()){ return; }
+		if (!finalize && this.domNode) {
+			dojo.event.browser.clean(this.domNode);
+		}
+		dojo.widget.HtmlWidget.superclass.destroyRendering.call(this);
+	}
+	catch (e) {
+	}
+}, isShowing:function () {
+	return dojo.html.isShowing(this.domNode);
+}, toggleShowing:function () {
+	if (this.isShowing()) {
+		this.hide();
+	} else {
+		this.show();
+	}
+}, show:function () {
+	if (this.isShowing()) {
+		return;
+	}
+	this.animationInProgress = true;
+	this.toggleObj.show(this.domNode, this.toggleDuration, null, dojo.lang.hitch(this, this.onShow), this.explodeSrc);
+}, onShow:function () {
+	this.animationInProgress = false;
+	this.checkSize();
+}, hide:function () {
+	if (!this.isShowing()) {
+		return;
+	}
+	this.animationInProgress = true;
+	this.toggleObj.hide(this.domNode, this.toggleDuration, null, dojo.lang.hitch(this, this.onHide), this.explodeSrc);
+}, onHide:function () {
+	this.animationInProgress = false;
+}, _isResized:function (w, h) {
+	if (!this.isShowing()) {
+		return false;
+	}
+	var wh = dojo.html.getMarginBox(this.domNode);
+	var width = w || wh.width;
+	var height = h || wh.height;
+	if (this.width == width && this.height == height) {
+		return false;
+	}
+	this.width = width;
+	this.height = height;
+	return true;
+}, checkSize:function () {
+	if (!this._isResized()) {
+		return;
+	}
+	this.onResized();
+}, resizeTo:function (w, h) {
+	dojo.html.setMarginBox(this.domNode, {width:w, height:h});
+	if (this.isShowing()) {
 		this.onResized();
-	},
-
-	resizeTo: function(w, h){
-		// summary: explicitly set this widget's size (in pixels).
-		dojo.html.setMarginBox(this.domNode, { width: w, height: h });
-		
-		// can't do sizing if widget is hidden because referencing node.offsetWidth/node.offsetHeight returns 0.
-		// do sizing on show() instead.
-		if(this.isShowing()){
-			this.onResized();
+	}
+}, resizeSoon:function () {
+	if (this.isShowing()) {
+		dojo.lang.setTimeout(this, this.onResized, 0);
+	}
+}, onResized:function () {
+	dojo.lang.forEach(this.children, function (child) {
+		if (child.checkSize) {
+			child.checkSize();
 		}
-	},
+	});
+}});
 
-	resizeSoon: function(){
-		// summary
-		//	schedule onResized() to be called soon, after browser has had
-		//	a little more time to calculate the sizes
-		if(this.isShowing()){
-			dojo.lang.setTimeout(this, this.onResized, 0);
-		}
-	},
 
-	onResized: function(){
-		// summary
-		//	Called when my size has changed.
-		//	Must notify children if their size has (possibly) changed.
-		dojo.lang.forEach(this.children, function(child){ if(child.checkSize){child.checkSize();} });
-	}
-});
-
 __CPAN_FILE__ src/widget/ShowAction.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -39209,25 +24569,13 @@
 
 dojo.provide("dojo.widget.ShowAction");
 dojo.require("dojo.widget.*");
-
-dojo.widget.defineWidget(
-	"dojo.widget.ShowAction",
-	dojo.widget.HtmlWidget,
-{
-	on: "",
-	action: "fade",
-	duration: 350,
-	from: "",
-	to: "",
-	auto: "false",
-	postMixInProperties: function(){ 
-		// fix for very strange Opera 9 bug
-		if(dojo.render.html.opera){
-			this.action = this.action.split("/").pop();
-		}
+dojo.widget.defineWidget("dojo.widget.ShowAction", dojo.widget.HtmlWidget, {on:"", action:"fade", duration:350, from:"", to:"", auto:"false", postMixInProperties:function () {
+	if (dojo.render.html.opera) {
+		this.action = this.action.split("/").pop();
 	}
-});
+}});
 
+
 __CPAN_FILE__ src/widget/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -39239,20 +24587,10 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: ["dojo.xml.Parse", 
-			 "dojo.widget.Widget", 
-			 "dojo.widget.Parse", 
-			 "dojo.widget.Manager"],
-	browser: ["dojo.widget.DomWidget",
-			  "dojo.widget.HtmlWidget"],
-	dashboard: ["dojo.widget.DomWidget",
-			  "dojo.widget.HtmlWidget"],
-	svg: 	 ["dojo.widget.SvgWidget"],
-	rhino: 	 ["dojo.widget.SwtWidget"]
-});
+dojo.kwCompoundRequire({common:["dojo.xml.Parse", "dojo.widget.Widget", "dojo.widget.Parse", "dojo.widget.Manager"], browser:["dojo.widget.DomWidget", "dojo.widget.HtmlWidget"], dashboard:["dojo.widget.DomWidget", "dojo.widget.HtmlWidget"], svg:["dojo.widget.SvgWidget"], rhino:["dojo.widget.SwtWidget"]});
 dojo.provide("dojo.widget.*");
 
+
 __CPAN_FILE__ src/widget/Menu2.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -39265,761 +24603,449 @@
 */
 
 dojo.provide("dojo.widget.Menu2");
-
 dojo.require("dojo.widget.PopupContainer");
-
-dojo.widget.defineWidget(
-	"dojo.widget.PopupMenu2",
-	dojo.widget.PopupContainer,
-	function(){
-		// summary
-		//	provides a menu that can be used as a context menu (typically shown by right-click),
-		//	or as the drop down on a DropDownButton, ComboButton, etc.
-
-		// targetNodeIds: String[]
-		//	Array of dom node ids of nodes to attach to.
-		//	Fill this with nodeIds upon widget creation and it becomes context menu for those nodes.
-		this.targetNodeIds = [];
-	
-		this.eventNames =  {
-			open: ""
-		};
-	},
-{
-	snarfChildDomOutput: true,
-
-	// eventNaming: String
-	//	if "default" event names are based on widget id, otherwise user must define
-	//	TODO: write real documentation about the events
-	eventNaming: "default",
-
-	templateString: '<table class="dojoPopupMenu2" border=0 cellspacing=0 cellpadding=0 style="display: none;"><tbody dojoAttachPoint="containerNode"></tbody></table>',
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/Menu2.css"),
-	templateCssString: "",
-
-	// submenuDelay: Integer
-	//	number of milliseconds before hovering (without clicking) causes the submenu to automatically open
-	submenuDelay: 500,
-	
-	// submenuOverlap: Integer
-	//	a submenu usually appears to the right, but slightly overlapping, it's parent menu;
-	//	this controls the number of pixels the two menus overlap.
-	submenuOverlap: 5,
-	
-	// contextMenuForWindow: Boolean
-	//	if true, right clicking anywhere on the window will cause this context menu to open;
-	//	if false, must specify targetNodeIds
-	contextMenuForWindow: false,
-
-	initialize: function(args, frag) {
-		if (this.eventNaming == "default") {
-			for (var eventName in this.eventNames) {
-				this.eventNames[eventName] = this.widgetId+"/"+eventName;
-			}
+dojo.declare("dojo.widget.MenuBase", null, function () {
+	this.eventNames = {open:""};
+}, {isContainer:true, isMenu:true, eventNaming:"default", templateCssString:"\n.dojoPopupMenu2 {\n\tposition: absolute;\n\tborder: 1px solid #7298d0;\n\tbackground:#85aeec url(images/soriaMenuBg.gif) repeat-x bottom left !important;\n\tpadding: 1px;\n\tmargin-top: 1px;\n\tmargin-bottom: 1px;\n}\n\n.dojoMenuItem2{\n\twhite-space: nowrap;\n\tfont: menu;\n\tmargin: 0;\n}\n\n.dojoMenuItem2Hover {\n\tbackground-color: #D2E4FD;\n\tcursor:pointer;\n\tcursor:hand;\n}\n\n.dojoMenuItem2Icon {\n\tposition: relative;\n\tbackground-position: center center;\n\tbackground-repeat: no-repeat;\n\twidth: 16px;\n\theight: 16px;\n\tpadding-right: 3px;\n}\n\n.dojoMenuItem2Label {\n\tposition: relative;\n\tvertical-align: middle;\n}\n\n/* main label text */\n.dojoMenuItem2Label {\n\tposition: relative;\n\tvertical-align: middle;\n}\n\n.dojoMenuItem2Accel {\n\tposition: relative;\n\tvertical-align: middle;\n\tpadding-left: 3px;\n}\n\n.dojoMenuItem2Disabled .dojoMenuItem2Label,\n.dojoMenuItem2Disabled .dojoMenuItem2Accel {\n\tcolor: #607a9e;\n}\n\n.dojoMenuItem2Submenu {\n\tposition: relative;\n\tbackground-position: center center;\n\tbackground-repeat: no-repeat;\n\tbackground-image: url(images/submenu_off.gif);\n\twidth: 5px;\n\theight: 9px;\n\tpadding-left: 3px;\n}\n.dojoMenuItem2Hover .dojoMenuItem2Submenu {\n\tbackground-image: url(images/submenu_on.gif);\n}\n\n.dojoMenuItem2Disabled .dojoMenuItem2Submenu {\n\tbackground-image: url(images/submenu_disabled.gif);\n}\n\n.dojoMenuSeparator2 {\n\tfont-size: 1px;\n\tmargin: 0;\n}\n\n.dojoMenuSeparator2Top {\n\theight: 50%;\n\tborder-bottom: 1px solid #7a98c4;\n\tmargin: 0px 2px;\n\tfont-size: 1px;\n}\n\n.dojoMenuSeparator2Bottom {\n\theight: 50%;\n\tborder-top: 1px solid #c9deff;\n\tmargin: 0px 2px;\n\tfont-size: 1px;\n}\n\n.dojoMenuBar2 {\n\tbackground:#85aeec url(images/soriaBarBg.gif) repeat-x top left;\n\t/*border-bottom:1px solid #6b9fec;*/\n\tpadding: 1px;\n}\n\n.dojoMenuBar2 .dojoMenuItem2 {\n\twhite-space: nowrap;\n\tfont: menu;\n\tmargin: 0;\n\tposition: relative;\n\tvertical-align: middle;\n\tz-index: 1;\n\tpadding: 3px 8px;\n\tdisplay: inline;/* needed in khtml to display correctly */\n\tdisplay: -moz-inline-box;/* needed in firefox */\n\tcursor:pointer;\n\tcursor:hand;\n}\n\n.dojoMenuBar2 .dojoMenuItem2Hover {\n\tbackground-color:#d2e4fd;\n}\n\n.dojoMenuBar2 .dojoMenuItem2Disabled span {\n\tcolor: #4f6582;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/Menu2.css"), submenuDelay:500, initialize:function (args, frag) {
+	if (this.eventNaming == "default") {
+		for (var eventName in this.eventNames) {
+			this.eventNames[eventName] = this.widgetId + "/" + eventName;
 		}
-	},
-
-	postCreate: function(){
-		if (this.contextMenuForWindow){
-			var doc = dojo.body();
-			this.bindDomNode(doc);
-		} else if ( this.targetNodeIds.length > 0 ){
-			dojo.lang.forEach(this.targetNodeIds, this.bindDomNode, this);
-		}
-
-		this._subscribeSubitemsOnOpen();
-	},
-
-	_subscribeSubitemsOnOpen: function() {
-		var subItems = this.getChildrenOfType(dojo.widget.MenuItem2);
-
-		for(var i=0; i<subItems.length; i++) {
-			dojo.event.topic.subscribe(this.eventNames.open, subItems[i], "menuOpen")
-		}
-	},
-
-	getTopOpenEvent: function() {
-		// summary: get event that initially caused current chain of menus to open
-		var menu = this;
-		while (menu.parentPopup){ menu = menu.parentPopup; }
-		return menu.openEvent;	// Event
-	},
-
-	bindDomNode: function(/*String|DomNode*/ node){
-		// summary: attach menu to given node
-		node = dojo.byId(node);
-
-		var win = dojo.html.getElementWindow(node);
-		if(dojo.html.isTag(node,'iframe') == 'iframe'){
-			win = dojo.html.iframeContentWindow(node);
-			node = dojo.withGlobal(win, dojo.body);
-		}
-		// fixes node so that it supports oncontextmenu if not natively supported, Konqueror, Opera more?
-		dojo.widget.Menu2.OperaAndKonqFixer.fixNode(node);
-
-		dojo.event.kwConnect({
-			srcObj:     node,
-			srcFunc:    "oncontextmenu",
-			targetObj:  this,
-			targetFunc: "onOpen",
-			once:       true
-		});
-
-		//normal connect does not work if document.designMode is on in FF, use addListener instead
-		if(dojo.render.html.moz && win.document.designMode.toLowerCase() == 'on'){
-			dojo.event.browser.addListener(node, "contextmenu", dojo.lang.hitch(this, "onOpen"));
-		}
-		dojo.widget.PopupManager.registerWin(win);
-	},
-
-	unBindDomNode: function(/*String|DomNode*/ nodeName){
-		// summary: detach menu from given node
-		var node = dojo.byId(nodeName);
-		dojo.event.kwDisconnect({
-			srcObj:     node,
-			srcFunc:    "oncontextmenu",
-			targetObj:  this,
-			targetFunc: "onOpen",
-			once:       true
-		});
-
-		// cleans a fixed node, konqueror and opera
-		dojo.widget.Menu2.OperaAndKonqFixer.cleanNode(node);
-	},
-
-	_moveToNext: function(/*Event*/ evt){
-		this._highlightOption(1);
-		return true; //do not pass to parent menu
-	},
-
-	_moveToPrevious: function(/*Event*/ evt){
-		this._highlightOption(-1);
-		return true; //do not pass to parent menu
-	},
-
-	_moveToParentMenu: function(/*Event*/ evt){
-		if(this._highlighted_option && this.parentPopup){
-			//only process event in the focused menu
-			//and its immediate parentPopup to support
-			//MenuBar2
-			if(evt._menu2UpKeyProcessed){
-				return true; //do not pass to parent menu
-			}else{
-				this._highlighted_option.onUnhover();
-				this.closeSubpopup();
-				evt._menu2UpKeyProcessed = true;
-			}
-		}
-		return false;
-	},
-
-	_moveToChildMenu: function(/*Event*/ evt){
-		if(this._highlighted_option && this._highlighted_option.submenuId){
-			this._highlighted_option._onClick(true);
-			return true; //do not pass to parent menu
-		}
-		return false;
-	},
-
-	_selectCurrentItem: function(/*Event*/ evt){
-		if(this._highlighted_option){
-			this._highlighted_option._onClick();
+	}
+}, _moveToNext:function (evt) {
+	this._highlightOption(1);
+	return true;
+}, _moveToPrevious:function (evt) {
+	this._highlightOption(-1);
+	return true;
+}, _moveToParentMenu:function (evt) {
+	if (this._highlighted_option && this.parentMenu) {
+		if (evt._menu2UpKeyProcessed) {
 			return true;
+		} else {
+			this._highlighted_option.onUnhover();
+			this.closeSubmenu();
+			evt._menu2UpKeyProcessed = true;
 		}
+	}
+	return false;
+}, _moveToChildMenu:function (evt) {
+	if (this._highlighted_option && this._highlighted_option.submenuId) {
+		this._highlighted_option._onClick(true);
+		return true;
+	}
+	return false;
+}, _selectCurrentItem:function (evt) {
+	if (this._highlighted_option) {
+		this._highlighted_option._onClick();
+		return true;
+	}
+	return false;
+}, processKey:function (evt) {
+	if (evt.ctrlKey || evt.altKey || !evt.key) {
 		return false;
-	},
-
-	processKey: function(/*Event*/ evt){
-		// summary
-		//	callback to process key strokes
-		//	return true to stop the event being processed by the
-		//	parent popupmenu
-
-		if(evt.ctrlKey || evt.altKey || !evt.key){ return false; }
-
-		var rval = false;
-		switch(evt.key){
- 			case evt.KEY_DOWN_ARROW:
-				rval = this._moveToNext(evt);
-				break;
-			case evt.KEY_UP_ARROW:
-				rval = this._moveToPrevious(evt);
-				break;
-			case evt.KEY_RIGHT_ARROW:
-				rval = this._moveToChildMenu(evt);
-				break;
-			case evt.KEY_LEFT_ARROW:
-				rval = this._moveToParentMenu(evt);
-				break;
-			case " ": //fall through
-			case evt.KEY_ENTER: 
-				if(rval = this._selectCurrentItem(evt)){
-					break;
-				}
-				//fall through
-			case evt.KEY_ESCAPE:
-				dojo.widget.PopupManager.currentMenu.close();
-				rval = true;
-				break;
+	}
+	var rval = false;
+	switch (evt.key) {
+	  case evt.KEY_DOWN_ARROW:
+		rval = this._moveToNext(evt);
+		break;
+	  case evt.KEY_UP_ARROW:
+		rval = this._moveToPrevious(evt);
+		break;
+	  case evt.KEY_RIGHT_ARROW:
+		rval = this._moveToChildMenu(evt);
+		break;
+	  case evt.KEY_LEFT_ARROW:
+		rval = this._moveToParentMenu(evt);
+		break;
+	  case " ":
+	  case evt.KEY_ENTER:
+		if (rval = this._selectCurrentItem(evt)) {
+			break;
 		}
-
-		return rval;
-	},
-
-	_findValidItem: function(dir, curItem){
-		if(curItem){
-			curItem = dir>0 ? curItem.getNextSibling() : curItem.getPreviousSibling();
+	  case evt.KEY_ESCAPE:
+	  case evt.KEY_TAB:
+		this.close(true);
+		rval = true;
+		break;
+	}
+	return rval;
+}, _findValidItem:function (dir, curItem) {
+	if (curItem) {
+		curItem = dir > 0 ? curItem.getNextSibling() : curItem.getPreviousSibling();
+	}
+	for (var i = 0; i < this.children.length; ++i) {
+		if (!curItem) {
+			curItem = dir > 0 ? this.children[0] : this.children[this.children.length - 1];
 		}
-
-		for(var i=0; i < this.children.length; ++i){
-			if(!curItem){
-				curItem = dir>0 ? this.children[0] : this.children[this.children.length-1];
-			}
-			//find next/previous visible menu item, not including separators
-			if(curItem.onHover && curItem.isShowing()){
-				return curItem;
-			}
-			curItem = dir>0 ? curItem.getNextSibling() : curItem.getPreviousSibling();
+		if (curItem.onHover && curItem.isShowing()) {
+			return curItem;
 		}
-	},
-	
-	_highlightOption: function(dir){
-		var item;
-		// || !this._highlighted_option.parentNode
-		if((!this._highlighted_option)){
-			item = this._findValidItem(dir);
-		}else{
-			item = this._findValidItem(dir, this._highlighted_option);
-		}
-		if(item){
-			if(this._highlighted_option) {
-				this._highlighted_option.onUnhover();
-			}
-			item.onHover();
-			dojo.html.scrollIntoView(item.domNode);
-			// navigate into the item table and select the first caption tag
-			try {
-				var node = dojo.html.getElementsByClass("dojoMenuItem2Label", item.domNode)[0];
-				node.focus();
-			} catch(e) { }
-		}
-	},
-
-	onItemClick: function(/*Widget*/ item) {
-		// summary: user defined function to handle clicks on an item
-	},
-
-	close: function(/*Boolean*/ force){
-		// summary: close the menu
-		if(this.animationInProgress){
-			dojo.widget.PopupMenu2.superclass.close.apply(this, arguments);
-			return;
-		}
-
-		if(this._highlighted_option){
+		curItem = dir > 0 ? curItem.getNextSibling() : curItem.getPreviousSibling();
+	}
+}, _highlightOption:function (dir) {
+	var item;
+	if ((!this._highlighted_option)) {
+		item = this._findValidItem(dir);
+	} else {
+		item = this._findValidItem(dir, this._highlighted_option);
+	}
+	if (item) {
+		if (this._highlighted_option) {
 			this._highlighted_option.onUnhover();
 		}
-
-		dojo.widget.PopupMenu2.superclass.close.apply(this, arguments);
-	},
-
-	closeSubpopup: function(force){
-		// summary: close the currently displayed submenu
-		if (this.currentSubpopup == null){ return; }
-
-		this.currentSubpopup.close(force);
-		this.currentSubpopup = null;
-
-		this.currentSubmenuTrigger.is_open = false;
-		this.currentSubmenuTrigger._closedSubmenu(force);
-		this.currentSubmenuTrigger = null;
-	},
-
-	_openSubmenu: function(submenu, from_item){
-		// summary: open the menu to the right of the current menu item
-		var fromPos = dojo.html.getAbsolutePosition(from_item.domNode, true);
-		var our_w = dojo.html.getMarginBox(this.domNode).width;
-		var x = fromPos.x + our_w - this.submenuOverlap;
-		var y = fromPos.y;
-
-		//the following is set in open, so we do not need it
-		//this.currentSubpopup = submenu;
-		submenu.open(x, y, this, from_item.domNode);
-
-		this.currentSubmenuTrigger = from_item;
-		this.currentSubmenuTrigger.is_open = true;
-	},
-
-	onOpen: function(/*Event*/ e){
-		// summary: callback when menu is opened
-		this.openEvent = e;
-		if(e["target"]){
-			this.openedForWindow = dojo.html.getElementWindow(e.target);
-		}else{
-			this.openedForWindow = null;
+		item.onHover();
+		dojo.html.scrollIntoView(item.domNode);
+		try {
+			var node = dojo.html.getElementsByClass("dojoMenuItem2Label", item.domNode)[0];
+			node.focus();
 		}
-		var x = e.pageX, y = e.pageY;
-
-		var win = dojo.html.getElementWindow(e.target);
-		var iframe = win._frameElement || win.frameElement;
-		if(iframe){
-			var cood = dojo.html.abs(iframe, true);
-			x += cood.x - dojo.withGlobal(win, dojo.html.getScroll).left;
-			y += cood.y - dojo.withGlobal(win, dojo.html.getScroll).top;
+		catch (e) {
 		}
-		this.open(x, y, null, [x, y]);
-
-		e.preventDefault();
-		e.stopPropagation();
 	}
-});
-
-// summary
-//	A line item in a Menu2
-dojo.widget.defineWidget(
-	"dojo.widget.MenuItem2",
-	dojo.widget.HtmlWidget,
-	function(){
-		this.eventNames = {
-			engage: ""
-		};
-	},
-{
-	// Make 4 columns
-	//   icon, label, accelerator-key, and right-arrow indicating sub-menu
-	templateString:
-		 '<tr class="dojoMenuItem2" dojoAttachEvent="onMouseOver: onHover; onMouseOut: onUnhover; onClick: _onClick; onKey:onKey;">'
-		+'<td><div class="${this.iconClass}" style="${this.iconStyle}"></div></td>'
-		+'<td tabIndex="-1" class="dojoMenuItem2Label">${this.caption}</td>'
-		+'<td class="dojoMenuItem2Accel">${this.accelKey}</td>'
-		+'<td><div class="dojoMenuItem2Submenu" style="display:${this.arrowDisplay};"></div></td>'
-		+'</tr>',
-
-	//
-	// internal settings
-	//
-
-	is_hovering: false,
-	hover_timer: null,
-	is_open: false,
-	topPosition: 0,
-
-	//
-	// options
-	//
-
-	// caption: String
-	//	text of the menu item
-	caption: 'Untitled',
-	
-	// accelKey: String
-	//	accelerator key (not supported yet!)
-	accelKey: '',
-	
-	// iconSrc: String
-	//	path to icon to display to the left of the menu text
-	iconSrc: '',
-	
-	// disabledClass: String
-	//  CSS class for disabled nodes
-	disabledClass: 'dojoMenuItem2Disabled',
-	
-	// iconClass: String
-	//	CSS class name to use for menu item (if CSS class specifies a background image then iconSrc is not necessary)
-	iconClass: 'dojoMenuItem2Icon',
-	
-	// submenuId: String
-	//	widget ID of Menu2 widget to open when this menu item is clicked
-	submenuId: '',
-	
-	// eventNaming: String
-	//	event names for announcing when menu item is clicked.
-	//	if "default", then use the default name, based on the widget ID
-	eventNaming: "default",
-	
-	// highlightClass: String
-	//	CSS class for menu item when it's hovered over
-	highlightClass: 'dojoMenuItem2Hover',
-
-	postMixInProperties: function(){
-		this.iconStyle="";
-		if (this.iconSrc){
-			if ((this.iconSrc.toLowerCase().substring(this.iconSrc.length-4) == ".png") && (dojo.render.html.ie55 || dojo.render.html.ie60)){
-				this.iconStyle="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this.iconSrc+"', sizingMethod='image')";
-			}else{
-				this.iconStyle="background-image: url("+this.iconSrc+")";
-			}
+}, onItemClick:function (item) {
+}, closeSubmenu:function (force) {
+	if (this.currentSubmenu == null) {
+		return;
+	}
+	this.currentSubmenu.close(force);
+	this.currentSubmenu = null;
+	this.currentSubmenuTrigger.is_open = false;
+	this.currentSubmenuTrigger._closedSubmenu(force);
+	this.currentSubmenuTrigger = null;
+}});
+dojo.widget.defineWidget("dojo.widget.PopupMenu2", [dojo.widget.HtmlWidget, dojo.widget.PopupContainerBase, dojo.widget.MenuBase], function () {
+	this.targetNodeIds = [];
+}, {templateString:"<table class=\"dojoPopupMenu2\" border=0 cellspacing=0 cellpadding=0 style=\"display: none; position: absolute;\">" + "<tbody dojoAttachPoint=\"containerNode\"></tbody>" + "</table>", submenuOverlap:5, contextMenuForWindow:false, parentMenu:null, postCreate:function () {
+	if (this.contextMenuForWindow) {
+		var doc = dojo.body();
+		this.bindDomNode(doc);
+	} else {
+		if (this.targetNodeIds.length > 0) {
+			dojo.lang.forEach(this.targetNodeIds, this.bindDomNode, this);
 		}
-		this.arrowDisplay = this.submenuId ? 'block' : 'none';
-		dojo.widget.MenuItem2.superclass.postMixInProperties.apply(this, arguments);
-	},
-
-	fillInTemplate: function(){
-		dojo.html.disableSelection(this.domNode);
-
-		if (this.disabled){
-			this.setDisabled(true);
-		}
-
-		if (this.eventNaming == "default") {
-			for (var eventName in this.eventNames) {
-				this.eventNames[eventName] = this.widgetId+"/"+eventName;
+	}
+	this._subscribeSubitemsOnOpen();
+}, _subscribeSubitemsOnOpen:function () {
+	var subItems = this.getChildrenOfType(dojo.widget.MenuItem2);
+	for (var i = 0; i < subItems.length; i++) {
+		dojo.event.topic.subscribe(this.eventNames.open, subItems[i], "menuOpen");
+	}
+}, getTopOpenEvent:function () {
+	var menu = this;
+	while (menu.parentMenu) {
+		menu = menu.parentMenu;
+	}
+	return menu.openEvent;
+}, bindDomNode:function (node) {
+	node = dojo.byId(node);
+	var win = dojo.html.getElementWindow(node);
+	if (dojo.html.isTag(node, "iframe") == "iframe") {
+		win = dojo.html.iframeContentWindow(node);
+		node = dojo.withGlobal(win, dojo.body);
+	}
+	dojo.widget.Menu2.OperaAndKonqFixer.fixNode(node);
+	dojo.event.kwConnect({srcObj:node, srcFunc:"oncontextmenu", targetObj:this, targetFunc:"onOpen", once:true});
+	if (dojo.render.html.moz && win.document.designMode.toLowerCase() == "on") {
+		dojo.event.browser.addListener(node, "contextmenu", dojo.lang.hitch(this, "onOpen"));
+	}
+	dojo.widget.PopupManager.registerWin(win);
+}, unBindDomNode:function (nodeName) {
+	var node = dojo.byId(nodeName);
+	dojo.event.kwDisconnect({srcObj:node, srcFunc:"oncontextmenu", targetObj:this, targetFunc:"onOpen", once:true});
+	dojo.widget.Menu2.OperaAndKonqFixer.cleanNode(node);
+}, _openAsSubmenu:function (parent, explodeSrc, orient) {
+	if (this.isShowingNow) {
+		return;
+	}
+	this.parentMenu = parent;
+	this.open(explodeSrc, parent, explodeSrc, orient);
+}, close:function (force) {
+	if (this.animationInProgress) {
+		dojo.widget.PopupContainerBase.prototype.close.call(this, force);
+		return;
+	}
+	if (this._highlighted_option) {
+		this._highlighted_option.onUnhover();
+	}
+	dojo.widget.PopupContainerBase.prototype.close.call(this, force);
+	this.parentMenu = null;
+}, closeAll:function (force) {
+	if (this.parentMenu) {
+		this.parentMenu.closeAll(force);
+	} else {
+		this.close(force);
+	}
+}, _openSubmenu:function (submenu, from_item) {
+	submenu._openAsSubmenu(this, from_item.arrow, {"TR":"TL", "TL":"TR"});
+	this.currentSubmenu = submenu;
+	this.currentSubmenuTrigger = from_item;
+	this.currentSubmenuTrigger.is_open = true;
+}, focus:function () {
+	if (this.currentSubmenuTrigger) {
+		if (this.currentSubmenuTrigger.caption) {
+			try {
+				this.currentSubmenuTrigger.caption.focus();
 			}
-		}
-	},
-
-	onHover: function(){
-		// summary: callback when mouse is moved onto menu item
-
-		//this is to prevent some annoying behavior when both mouse and keyboard are used
-		this.onUnhover();
-
-		if (this.is_hovering){ return; }
-		if (this.is_open){ return; }
-
-		if(this.parent._highlighted_option){
-			this.parent._highlighted_option.onUnhover();
-		}
-		this.parent.closeSubpopup();
-		this.parent._highlighted_option = this;
-		dojo.widget.PopupManager.setFocusedMenu(this.parent);
-
-		this._highlightItem();
-
-		if (this.is_hovering){ this._stopSubmenuTimer(); }
-		this.is_hovering = true;
-		this._startSubmenuTimer();
-	},
-
-	onUnhover: function(){
-		// summary: callback when mouse is moved off of menu item
-		if(!this.is_open){ this._unhighlightItem(); }
-
-		this.is_hovering = false;
-
-		this.parent._highlighted_option = null;
-
-		if(this.parent.parentPopup){
-			dojo.widget.PopupManager.setFocusedMenu(this.parent.parentPopup);
-		}
-
-		this._stopSubmenuTimer();
-	},
-
-	_onClick: function(focus){
-		// summary: internal function for clicks
-		var displayingSubMenu = false;
-		if (this.disabled){ return false; }
-
-		if (this.submenuId){
-			if (!this.is_open){
-				this._stopSubmenuTimer();
-				this._openSubmenu();
+			catch (e) {
 			}
-			displayingSubMenu = true;
-		}else{
-			// for some browsers the onMouseOut doesn't get called (?), so call it manually
-			this.onUnhover(); //only onUnhover when no submenu is available
-			this.parent.closeAll(true);
+		} else {
+			try {
+				this.currentSubmenuTrigger.domNode.focus();
+			}
+			catch (e) {
+			}
 		}
-
-		// user defined handler for click
-		this.onClick();
-
-		dojo.event.topic.publish(this.eventNames.engage, this);
-
-		if(displayingSubMenu && focus){
-			dojo.widget.getWidgetById(this.submenuId)._highlightOption(1);
+	}
+}, onOpen:function (e) {
+	this.openEvent = e;
+	if (e["target"]) {
+		this.openedForWindow = dojo.html.getElementWindow(e.target);
+	} else {
+		this.openedForWindow = null;
+	}
+	var x = e.pageX, y = e.pageY;
+	var win = dojo.html.getElementWindow(e.target);
+	var iframe = win._frameElement || win.frameElement;
+	if (iframe) {
+		var cood = dojo.html.abs(iframe, true);
+		x += cood.x - dojo.withGlobal(win, dojo.html.getScroll).left;
+		y += cood.y - dojo.withGlobal(win, dojo.html.getScroll).top;
+	}
+	this.open(x, y, null, [x, y]);
+	dojo.event.browser.stopEvent(e);
+}});
+dojo.widget.defineWidget("dojo.widget.MenuItem2", dojo.widget.HtmlWidget, function () {
+	this.eventNames = {engage:""};
+}, {templateString:"<tr class=\"dojoMenuItem2\" dojoAttachEvent=\"onMouseOver: onHover; onMouseOut: onUnhover; onClick: _onClick; onKey:onKey;\">" + "<td><div class=\"${this.iconClass}\" style=\"${this.iconStyle}\"></div></td>" + "<td tabIndex=\"-1\" class=\"dojoMenuItem2Label\" dojoAttachPoint=\"caption\">${this.caption}</td>" + "<td class=\"dojoMenuItem2Accel\">${this.accelKey}</td>" + "<td><div class=\"dojoMenuItem2Submenu\" style=\"display:${this.arrowDisplay};\" dojoAttachPoint=\"arrow\"></div></td>" + "</tr>", is_hovering:false, hover_timer:null, is_open:false, topPosition:0, caption:"Untitled", accelKey:"", iconSrc:"", disabledClass:"dojoMenuItem2Disabled", iconClass:"dojoMenuItem2Icon", submenuId:"", eventNaming:"default", highlightClass:"dojoMenuItem2Hover", postMixInProperties:function () {
+	this.iconStyle = "";
+	if (this.iconSrc) {
+		if ((this.iconSrc.toLowerCase().substring(this.iconSrc.length - 4) == ".png") && (dojo.render.html.ie55 || dojo.render.html.ie60)) {
+			this.iconStyle = "filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.iconSrc + "', sizingMethod='image')";
+		} else {
+			this.iconStyle = "background-image: url(" + this.iconSrc + ")";
 		}
+	}
+	this.arrowDisplay = this.submenuId ? "block" : "none";
+	dojo.widget.MenuItem2.superclass.postMixInProperties.apply(this, arguments);
+}, fillInTemplate:function () {
+	dojo.html.disableSelection(this.domNode);
+	if (this.disabled) {
+		this.setDisabled(true);
+	}
+	if (this.eventNaming == "default") {
+		for (var eventName in this.eventNames) {
+			this.eventNames[eventName] = this.widgetId + "/" + eventName;
+		}
+	}
+}, onHover:function () {
+	this.onUnhover();
+	if (this.is_hovering) {
 		return;
-	},
-
-	onClick: function() {
-		// summary
-		//	User defined function to handle clicks
-		//	this default function call the parent
-		//	menu's onItemClick
-		this.parent.onItemClick(this);
-	},
-
-	_highlightItem: function(){
-		dojo.html.addClass(this.domNode, this.highlightClass);
-	},
-
-	_unhighlightItem: function(){
-		dojo.html.removeClass(this.domNode, this.highlightClass);
-	},
-
-	_startSubmenuTimer: function(){
+	}
+	if (this.is_open) {
+		return;
+	}
+	if (this.parent._highlighted_option) {
+		this.parent._highlighted_option.onUnhover();
+	}
+	this.parent.closeSubmenu();
+	this.parent._highlighted_option = this;
+	dojo.widget.PopupManager.setFocusedMenu(this.parent);
+	this._highlightItem();
+	if (this.is_hovering) {
 		this._stopSubmenuTimer();
-
-		if (this.disabled){ return; }
-
-		var self = this;
-		var closure = function(){ return function(){ self._openSubmenu(); } }();
-
-		this.hover_timer = dojo.lang.setTimeout(closure, this.parent.submenuDelay);
-	},
-
-	_stopSubmenuTimer: function(){
-		if (this.hover_timer){
-			dojo.lang.clearTimeout(this.hover_timer);
-			this.hover_timer = null;
+	}
+	this.is_hovering = true;
+	this._startSubmenuTimer();
+}, onUnhover:function () {
+	if (!this.is_open) {
+		this._unhighlightItem();
+	}
+	this.is_hovering = false;
+	this.parent._highlighted_option = null;
+	if (this.parent.parentMenu) {
+		dojo.widget.PopupManager.setFocusedMenu(this.parent.parentMenu);
+	}
+	this._stopSubmenuTimer();
+}, _onClick:function (focus) {
+	var displayingSubMenu = false;
+	if (this.disabled) {
+		return false;
+	}
+	if (this.submenuId) {
+		if (!this.is_open) {
+			this._stopSubmenuTimer();
+			this._openSubmenu();
 		}
-	},
-
-	_openSubmenu: function(){
-		if (this.disabled){ return; }
-
-		// first close any other open submenu
-		this.parent.closeSubpopup();
-
-		var submenu = dojo.widget.getWidgetById(this.submenuId);
-		if (submenu){
-			this.parent._openSubmenu(submenu, this);
-		}
-	},
-
-	_closedSubmenu: function(){
+		displayingSubMenu = true;
+	} else {
 		this.onUnhover();
-	},
-
-	setDisabled: function(/*Boolean*/ value){
-		// summary: enable or disable this menu item
-		this.disabled = value;
-
-		if (this.disabled){
-			dojo.html.addClass(this.domNode, this.disabledClass);
-		}else{
-			dojo.html.removeClass(this.domNode, this.disabledClass);
-		}
-	},
-
-	enable: function(){
-		// summary: enable this menu item so user can click it
-		this.setDisabled(false);
-	},
-
-	disable: function(){
-		// summary: disable this menu item so user can't click it
-		this.setDisabled(true);
-	},
-
-	menuOpen: function(message) {
-		// summary: callback when menu is opened
-		// TODO: I don't see anyone calling this menu item
+		this.parent.closeAll(true);
 	}
-
-});
-
-// summary
-//	A line between two menu items
-dojo.widget.defineWidget(
-	"dojo.widget.MenuSeparator2",
-	dojo.widget.HtmlWidget,
-{
-	templateString: '<tr class="dojoMenuSeparator2"><td colspan=4>'
-			+'<div class="dojoMenuSeparator2Top"></div>'
-			+'<div class="dojoMenuSeparator2Bottom"></div>'
-			+'</td></tr>',
-
-	postCreate: function(){
-		dojo.html.disableSelection(this.domNode);
+	this.onClick();
+	dojo.event.topic.publish(this.eventNames.engage, this);
+	if (displayingSubMenu && focus) {
+		dojo.widget.getWidgetById(this.submenuId)._highlightOption(1);
 	}
-});
-
-// summary
-//	A menu bar, listing menu choices horizontally, like the "File" menu in most desktop applications
-dojo.widget.defineWidget(
-	"dojo.widget.MenuBar2",
-	dojo.widget.PopupMenu2,
-{
-	menuOverlap: 2,
-
-	templateString: '<div class="dojoMenuBar2" tabIndex="0"><table class="dojoMenuBar2Client"><tr dojoAttachPoint="containerNode"></tr></table></div>',
-
-	close: function(force){
-		if(this._highlighted_option){
-			this._highlighted_option.onUnhover();
+	return;
+}, onClick:function () {
+	this.parent.onItemClick(this);
+}, _highlightItem:function () {
+	dojo.html.addClass(this.domNode, this.highlightClass);
+}, _unhighlightItem:function () {
+	dojo.html.removeClass(this.domNode, this.highlightClass);
+}, _startSubmenuTimer:function () {
+	this._stopSubmenuTimer();
+	if (this.disabled) {
+		return;
+	}
+	var self = this;
+	var closure = function () {
+		return function () {
+			self._openSubmenu();
+		};
+	}();
+	this.hover_timer = dojo.lang.setTimeout(closure, this.parent.submenuDelay);
+}, _stopSubmenuTimer:function () {
+	if (this.hover_timer) {
+		dojo.lang.clearTimeout(this.hover_timer);
+		this.hover_timer = null;
+	}
+}, _openSubmenu:function () {
+	if (this.disabled) {
+		return;
+	}
+	this.parent.closeSubmenu();
+	var submenu = dojo.widget.getWidgetById(this.submenuId);
+	if (submenu) {
+		this.parent._openSubmenu(submenu, this);
+	}
+}, _closedSubmenu:function () {
+	this.onUnhover();
+}, setDisabled:function (value) {
+	this.disabled = value;
+	if (this.disabled) {
+		dojo.html.addClass(this.domNode, this.disabledClass);
+	} else {
+		dojo.html.removeClass(this.domNode, this.disabledClass);
+	}
+}, enable:function () {
+	this.setDisabled(false);
+}, disable:function () {
+	this.setDisabled(true);
+}, menuOpen:function (message) {
+}});
+dojo.widget.defineWidget("dojo.widget.MenuSeparator2", dojo.widget.HtmlWidget, {templateString:"<tr class=\"dojoMenuSeparator2\"><td colspan=4>" + "<div class=\"dojoMenuSeparator2Top\"></div>" + "<div class=\"dojoMenuSeparator2Bottom\"></div>" + "</td></tr>", postCreate:function () {
+	dojo.html.disableSelection(this.domNode);
+}});
+dojo.widget.defineWidget("dojo.widget.MenuBar2", [dojo.widget.HtmlWidget, dojo.widget.MenuBase], {menuOverlap:2, templateString:"<div class=\"dojoMenuBar2\" dojoAttachPoint=\"containerNode\" tabIndex=\"0\"></div>", close:function (force) {
+	if (this._highlighted_option) {
+		this._highlighted_option.onUnhover();
+	}
+	this.closeSubmenu(force);
+}, closeAll:function (force) {
+	this.close(force);
+}, processKey:function (evt) {
+	if (evt.ctrlKey || evt.altKey) {
+		return false;
+	}
+	var rval = false;
+	switch (evt.key) {
+	  case evt.KEY_DOWN_ARROW:
+		rval = this._moveToChildMenu(evt);
+		break;
+	  case evt.KEY_UP_ARROW:
+		rval = this._moveToParentMenu(evt);
+		break;
+	  case evt.KEY_RIGHT_ARROW:
+		rval = this._moveToNext(evt);
+		break;
+	  case evt.KEY_LEFT_ARROW:
+		rval = this._moveToPrevious(evt);
+		break;
+	  default:
+		rval = dojo.widget.MenuBar2.superclass.processKey.apply(this, arguments);
+		break;
+	}
+	return rval;
+}, postCreate:function () {
+	dojo.widget.MenuBar2.superclass.postCreate.apply(this, arguments);
+	this.isShowingNow = true;
+}, _openSubmenu:function (submenu, from_item) {
+	submenu._openAsSubmenu(this, from_item.domNode, {"BL":"TL", "TL":"BL"});
+	this.currentSubmenu = submenu;
+	this.currentSubmenuTrigger = from_item;
+	this.currentSubmenuTrigger.is_open = true;
+}});
+dojo.widget.defineWidget("dojo.widget.MenuBarItem2", dojo.widget.MenuItem2, {templateString:"<span class=\"dojoMenuItem2\" dojoAttachEvent=\"onMouseOver: onHover; onMouseOut: onUnhover; onClick: _onClick;\">${this.caption}</span>"});
+dojo.widget.Menu2.OperaAndKonqFixer = new function () {
+	var implement = true;
+	var delfunc = false;
+	if (!dojo.lang.isFunction(dojo.doc().oncontextmenu)) {
+		dojo.doc().oncontextmenu = function () {
+			implement = false;
+			delfunc = true;
+		};
+	}
+	if (dojo.doc().createEvent) {
+		try {
+			var e = dojo.doc().createEvent("MouseEvents");
+			e.initMouseEvent("contextmenu", 1, 1, dojo.global(), 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, null);
+			dojo.doc().dispatchEvent(e);
 		}
-
-		this.closeSubpopup(force);
-	},
-
-	processKey: function(/*Event*/ evt){
-		if(evt.ctrlKey || evt.altKey){ return false; }
-
-		if (!dojo.html.hasClass(evt.target,"dojoMenuBar2")) { return false; }
-		var rval = false;
-
-		switch(evt.key){
- 			case evt.KEY_DOWN_ARROW:
-				rval = this._moveToChildMenu(evt);
-				break;
-			case evt.KEY_UP_ARROW:
-				rval = this._moveToParentMenu(evt);
-				break;
-			case evt.KEY_RIGHT_ARROW:
-				rval = this._moveToNext(evt);
-				break;
-			case evt.KEY_LEFT_ARROW:
-				rval = this._moveToPrevious(evt);
-				break;
-			default:
-				rval = 	dojo.widget.MenuBar2.superclass.processKey.apply(this, arguments);
-				break;
+		catch (e) {
 		}
-
-		return rval;
-	},
-
-	postCreate: function(){
-		dojo.widget.MenuBar2.superclass.postCreate.apply(this, arguments);
-		dojo.widget.PopupManager.opened(this);
-		this.isShowingNow = true;
-	},
-
-	/*
-	 * override PopupMenu2 to open the submenu below us rather than to our right
-	 */
-	_openSubmenu: function(submenu, from_item){
-		var fromPos = dojo.html.getAbsolutePosition(from_item.domNode, true);
-		var ourPos = dojo.html.getAbsolutePosition(this.domNode, true);
-		var our_h = dojo.html.getBorderBox(this.domNode).height;
-		var x = fromPos.x;
-		var y = ourPos.y + our_h - this.menuOverlap;
-
-		submenu.open(x, y, this, from_item.domNode);
-
-		this.currentSubmenuTrigger = from_item;
-		this.currentSubmenuTrigger.is_open = true;
+	} else {
+		implement = false;
 	}
-});
-
-// summary
-//	Item in a Menu2Bar
-dojo.widget.defineWidget(
-	"dojo.widget.MenuBarItem2",
-	dojo.widget.MenuItem2,
-{
-	templateString:
-		 '<td class="dojoMenuBarItem2" dojoAttachEvent="onMouseOver: onHover; onMouseOut: onUnhover; onClick: _onClick;">'
-		+'<span>${this.caption}</span>'
-		+'</td>',
-
-	highlightClass: 'dojoMenuBarItem2Hover',
-
-	setDisabled: function(value){
-		this.disabled = value;
-		if (this.disabled){
-			dojo.html.addClass(this.domNode, 'dojoMenuBarItem2Disabled');
-		}else{
-			dojo.html.removeClass(this.domNode, 'dojoMenuBarItem2Disabled');
-		}
+	if (delfunc) {
+		delete dojo.doc().oncontextmenu;
 	}
-});
+	this.fixNode = function (node) {
+		if (implement) {
+			if (!dojo.lang.isFunction(node.oncontextmenu)) {
+				node.oncontextmenu = function (e) {
+				};
+			}
+			if (dojo.render.html.opera) {
+				node._menufixer_opera = function (e) {
+					if (e.ctrlKey) {
+						this.oncontextmenu(e);
+					}
+				};
+				dojo.event.connect(node, "onclick", node, "_menufixer_opera");
+			} else {
+				node._menufixer_konq = function (e) {
+					if (e.button == 2) {
+						e.preventDefault();
+						this.oncontextmenu(e);
+					}
+				};
+				dojo.event.connect(node, "onmousedown", node, "_menufixer_konq");
+			}
+		}
+	};
+	this.cleanNode = function (node) {
+		if (implement) {
+			if (node._menufixer_opera) {
+				dojo.event.disconnect(node, "onclick", node, "_menufixer_opera");
+				delete node._menufixer_opera;
+			} else {
+				if (node._menufixer_konq) {
+					dojo.event.disconnect(node, "onmousedown", node, "_menufixer_konq");
+					delete node._menufixer_konq;
+				}
+			}
+			if (node.oncontextmenu) {
+				delete node.oncontextmenu;
+			}
+		}
+	};
+};
 
 
-// summary
-//	Internal class to make contextmenu work in konqueror and opera
-dojo.widget.Menu2.OperaAndKonqFixer = new function(){
- 	var implement = true;
- 	var delfunc = false;
-
- 	/** 	dom event check
- 	*
- 	*	make a event and dispatch it and se if it calls function below,
- 	*	if it indeed is supported and we dont need to implement our own
- 	*/
-
- 	// gets called if we have support for oncontextmenu
- 	if (!dojo.lang.isFunction(dojo.doc().oncontextmenu)){
- 		dojo.doc().oncontextmenu = function(){
- 			implement = false;
- 			delfunc = true;
- 		}
- 	}
-
- 	if (dojo.doc().createEvent){ // moz, safari has contextmenu event, need to do livecheck on this env.
- 		try {
- 			var e = dojo.doc().createEvent("MouseEvents");
- 			e.initMouseEvent("contextmenu", 1, 1, dojo.global(), 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, null);
- 			dojo.doc().dispatchEvent(e);
- 		} catch (e) {/* assume not supported */}
- 	} else {
- 		// IE no need to implement custom contextmenu
- 		implement = false;
- 	}
-
- 	// clear this one if it wasn't there before
- 	if (delfunc){
- 		delete dojo.doc().oncontextmenu;
- 	}
- 	/***** end dom event check *****/
-
-
- 	/**
- 	*	this fixes a dom node by attaching a custom oncontextmenu function that gets called when apropriate
- 	*	@param	node	a dom node
- 	*
- 	*	no returns
- 	*/
- 	this.fixNode = function(node){
- 		if (implement){
- 			// attach stub oncontextmenu function
- 			if (!dojo.lang.isFunction(node.oncontextmenu)){
- 				node.oncontextmenu = function(e){/*stub*/}
- 			}
-
- 			// attach control function for oncontextmenu
- 			if (dojo.render.html.opera){
- 				// opera
- 				// listen to ctrl-click events
- 				node._menufixer_opera = function(e){
- 					if (e.ctrlKey){
- 						this.oncontextmenu(e);
- 					}
- 				};
-
- 				dojo.event.connect(node, "onclick", node, "_menufixer_opera");
-
- 			} else {
- 				// konqueror
- 				// rightclick, listen to mousedown events
- 				node._menufixer_konq = function(e){
- 					if (e.button==2 ){
- 						e.preventDefault(); // need to prevent browsers menu
- 						this.oncontextmenu(e);
- 					}
- 				};
-
- 				dojo.event.connect(node, "onmousedown", node, "_menufixer_konq");
- 			}
- 		}
- 	}
-
- 	/**
- 	*	this cleans up a fixed node, prevent memoryleak?
- 	*	@param node	node to clean
- 	*
- 	*	no returns
- 	*/
- 	this.cleanNode = function(node){
- 		if (implement){
- 			// checks needed if we gets a non fixed node
- 			if (node._menufixer_opera){
- 				dojo.event.disconnect(node, "onclick", node, "_menufixer_opera");
- 				delete node._menufixer_opera;
- 			} else if(node._menufixer_konq){
- 				dojo.event.disconnect(node, "onmousedown", node, "_menufixer_konq");
- 				delete node._menufixer_konq;
- 			}
- 			if (node.oncontextmenu){
- 				delete node.oncontextmenu;
- 			}
- 		}
- 	}
-};
 __CPAN_FILE__ src/widget/FilteringTable.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -40032,8 +25058,8 @@
 */
 
 dojo.provide("dojo.widget.FilteringTable");
-
 dojo.require("dojo.date.format");
+dojo.require("dojo.math");
 dojo.require("dojo.collections.Store");
 dojo.require("dojo.html.*");
 dojo.require("dojo.html.util");
@@ -40042,989 +25068,694 @@
 dojo.require("dojo.event.*");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.HtmlWidget");
-
-dojo.widget.defineWidget(
-	"dojo.widget.FilteringTable", 
-	dojo.widget.HtmlWidget, 
-	function(){
-		// summary: A basic tabular data widget that supports sorting and filtering mechanisms.
-		// description:
-		//		FilteringTable is a 2D data view that supports multiple column sorting and filtering
-		//		functionality.  It can get its data in one of two ways: via HTML (i.e. degradable
-		//		data), or from an external JSON source through widget.store.setData.  Records in
-		//		a FilteringTable can be selected as if it were a select list.
-		// store: dojo.collections.Store
-		//		The underlying Store for all data represented by the widget.
-		// valueField: String
-		// 		The name of the field used as a unique key for each row, defaults to "Id".
-		// multiple: boolean
-		//		Allow multiple selections.
-		// maxSelect: Integer
-		//		Maximum number of rows that can be selected at once.  0 == no limit.
-		// maxSortable: Integer
-		//		Maximum number of columns allowed for sorting at one time.
-		// minRows: Integer
-		//		The minimum number of rows to show.  Default is 0.
-		// defaultDateFormat: String
-		//		The default format for a date column, as used by dojo.date.format.
-		// alternateRows: Boolean
-		//		Use alternate row CSS classes to show zebra striping.
-		// headClass: String
-		//		CSS Class name for the head of the table.
-		// tbodyClass: String
-		//		CSS Class name for the body of the table.
-		// headerClass: String
-		//		CSS Class name for headers that are not sorted.
-		// headerUpClass: String
-		//		CSS Class name for headers that are for ascending sorted columns. Default is "selectedUp".
-		// headerDownClass: String
-		//		CSS Class name for headers that are for descending sorted columns. Default is "selectedDown".
-		// rowClass: String
-		//		CSS Class name for body rows.
-		// rowAlternateClass: String
-		//		CSS Class name for alternate rows.  Default is "alt".
-		// rowSelectedClass: String
-		//		CSS Class name for selected rows.  Default is "selected".
-		// columnSelectedClass: String
-		//		CSS Class name for any columns being sorted on.  Unimplemented.
-		this.store=new dojo.collections.Store();
-
-		//declare per instance changeable widget properties
-		this.valueField="Id";
-		this.multiple=false;
-		this.maxSelect=0;
-		this.maxSortable=1;  // how many columns can be sorted at once.
-		this.minRows=0;
-		this.defaultDateFormat = "%D";
-		this.isInitialized=false;
-		this.alternateRows=false;
-
-		this.columns=[];
-		this.sortInformation=[{
-			index:0,
-			direction:0
-		}];
-
-		// CSS definitions
-		this.headClass="";
-		this.tbodyClass="";
-		this.headerClass="";
-		this.headerUpClass="selectedUp";
-		this.headerDownClass="selectedDown";
-		this.rowClass="";
-		this.rowAlternateClass="alt";
-		this.rowSelectedClass="selected";
-		this.columnSelected="sorted-column";
-	},
-{
-	//	dojo widget properties
-	isContainer: false,
-	templatePath: null,
-	templateCssPath: null,
-
-	//	methods.
-	getTypeFromString: function(/* string */s){
-		//	summary
-		//	Gets a function based on the passed string.
-		var parts = s.split("."), i = 0, obj = dj_global; 
-		do{ 
-			obj = obj[parts[i++]]; 
-		} while (i < parts.length && obj); 
-		return (obj != dj_global) ? obj : null;	//	function
-	},
-
-	//	custom data access.
-	getByRow: function(/*HTMLTableRow*/row){
-		//	summary
-		//	Returns the data object based on the passed row.
-		return this.store.getByKey(dojo.html.getAttribute(row, "value"));	//	object
-	},
-	getDataByRow: function(/*HTMLTableRow*/row){
-		//	summary
-		//	Returns the source data object based on the passed row.
-		return this.store.getDataByKey(dojo.html.getAttribute(row, "value")); // object
-	},
-
-	getRow: function(/* Object */ obj){
-		//	summary
-		//	Finds the row in the table based on the passed data object.
-		var rows = this.domNode.tBodies[0].rows;
-		for(var i=0; i<rows.length; i++){
-			if(this.store.getDataByKey(dojo.html.getAttribute(rows[i], "value")) == obj){
-				return rows[i];	//	HTMLTableRow
-			}
+dojo.widget.defineWidget("dojo.widget.FilteringTable", dojo.widget.HtmlWidget, function () {
+	this.store = new dojo.collections.Store();
+	this.valueField = "Id";
+	this.multiple = false;
+	this.maxSelect = 0;
+	this.maxSortable = 1;
+	this.minRows = 0;
+	this.defaultDateFormat = "%D";
+	this.isInitialized = false;
+	this.alternateRows = false;
+	this.columns = [];
+	this.sortInformation = [{index:0, direction:0}];
+	this.headClass = "";
+	this.tbodyClass = "";
+	this.headerClass = "";
+	this.headerUpClass = "selectedUp";
+	this.headerDownClass = "selectedDown";
+	this.rowClass = "";
+	this.rowAlternateClass = "alt";
+	this.rowSelectedClass = "selected";
+	this.columnSelected = "sorted-column";
+}, {isContainer:false, templatePath:null, templateCssPath:null, getTypeFromString:function (s) {
+	var parts = s.split("."), i = 0, obj = dj_global;
+	do {
+		obj = obj[parts[i++]];
+	} while (i < parts.length && obj);
+	return (obj != dj_global) ? obj : null;
+}, getByRow:function (row) {
+	return this.store.getByKey(dojo.html.getAttribute(row, "value"));
+}, getDataByRow:function (row) {
+	return this.store.getDataByKey(dojo.html.getAttribute(row, "value"));
+}, getRow:function (obj) {
+	var rows = this.domNode.tBodies[0].rows;
+	for (var i = 0; i < rows.length; i++) {
+		if (this.store.getDataByKey(dojo.html.getAttribute(rows[i], "value")) == obj) {
+			return rows[i];
 		}
-		return null;	//	HTMLTableRow
-	},
-	getColumnIndex: function(/* string */fieldPath){
-		//	summary
-		//	Returns index of the column that represents the passed field path.
-		for(var i=0; i<this.columns.length; i++){
-			if(this.columns[i].getField() == fieldPath){
-				return i;	//	integer
-			}
+	}
+	return null;
+}, getColumnIndex:function (fieldPath) {
+	for (var i = 0; i < this.columns.length; i++) {
+		if (this.columns[i].getField() == fieldPath) {
+			return i;
 		}
-		return -1;	//	integer
-	},
-
-	getSelectedData: function(){
-		//	summary
-		//	returns all objects that are selected.
-		var data=this.store.get();
-		var a=[];
-		for(var i=0; i<data.length; i++){
-			if(data[i].isSelected){
-				a.push(data[i].src);
-			}
+	}
+	return -1;
+}, getSelectedData:function () {
+	var data = this.store.get();
+	var a = [];
+	for (var i = 0; i < data.length; i++) {
+		if (data[i].isSelected) {
+			a.push(data[i].src);
 		}
-		if(this.multiple){
-			return a;		//	array
-		} else {
-			return a[0];	//	object
+	}
+	if (this.multiple) {
+		return a;
+	} else {
+		return a[0];
+	}
+}, isSelected:function (obj) {
+	var data = this.store.get();
+	for (var i = 0; i < data.length; i++) {
+		if (data[i].src == obj) {
+			return true;
 		}
-	},
-	
-	isSelected: function(/* object */obj){
-		//	summary
-		//	Returns whether the passed object is currently selected.
-		var data = this.store.get();
-		for(var i=0; i<data.length; i++){
-			if(data[i].src == obj){
-				return true;	//	boolean
-			}
+	}
+	return false;
+}, isValueSelected:function (val) {
+	var v = this.store.getByKey(val);
+	if (v) {
+		return v.isSelected;
+	}
+	return false;
+}, isIndexSelected:function (idx) {
+	var v = this.store.getByIndex(idx);
+	if (v) {
+		return v.isSelected;
+	}
+	return false;
+}, isRowSelected:function (row) {
+	var v = this.getByRow(row);
+	if (v) {
+		return v.isSelected;
+	}
+	return false;
+}, reset:function () {
+	this.store.clearData();
+	this.columns = [];
+	this.sortInformation = [{index:0, direction:0}];
+	this.resetSelections();
+	this.isInitialized = false;
+	this.onReset();
+}, resetSelections:function () {
+	this.store.forEach(function (element) {
+		element.isSelected = false;
+	});
+}, onReset:function () {
+}, select:function (obj) {
+	var data = this.store.get();
+	for (var i = 0; i < data.length; i++) {
+		if (data[i].src == obj) {
+			data[i].isSelected = true;
+			break;
 		}
-		return false;	//	boolean
-	},
-	isValueSelected: function(/* string */val){
-		//	summary
-		//	Returns the object represented by key "val" is selected.
-		var v = this.store.getByKey(val);
-		if(v){
-			return v.isSelected;	//	boolean
+	}
+	this.onDataSelect(obj);
+}, selectByValue:function (val) {
+	this.select(this.store.getDataByKey(val));
+}, selectByIndex:function (idx) {
+	this.select(this.store.getDataByIndex(idx));
+}, selectByRow:function (row) {
+	this.select(this.getDataByRow(row));
+}, selectAll:function () {
+	this.store.forEach(function (element) {
+		element.isSelected = true;
+	});
+}, onDataSelect:function (obj) {
+}, toggleSelection:function (obj) {
+	var data = this.store.get();
+	for (var i = 0; i < data.length; i++) {
+		if (data[i].src == obj) {
+			data[i].isSelected = !data[i].isSelected;
+			break;
 		}
-		return false;	//	boolean
-	},
-	isIndexSelected: function(/* number */idx){
-		//	summary
-		//	Returns the object represented by integer "idx" is selected.
-		var v = this.store.getByIndex(idx);
-		if(v){
-			return v.isSelected;	//	boolean
+	}
+	this.onDataToggle(obj);
+}, toggleSelectionByValue:function (val) {
+	this.toggleSelection(this.store.getDataByKey(val));
+}, toggleSelectionByIndex:function (idx) {
+	this.toggleSelection(this.store.getDataByIndex(idx));
+}, toggleSelectionByRow:function (row) {
+	this.toggleSelection(this.getDataByRow(row));
+}, toggleAll:function () {
+	this.store.forEach(function (element) {
+		element.isSelected = !element.isSelected;
+	});
+}, onDataToggle:function (obj) {
+}, _meta:{field:null, format:null, filterer:null, noSort:false, sortType:"String", dataType:String, sortFunction:null, filterFunction:null, label:null, align:"left", valign:"middle", getField:function () {
+	return this.field || this.label;
+}, getType:function () {
+	return this.dataType;
+}}, createMetaData:function (obj) {
+	for (var p in this._meta) {
+		if (!obj[p]) {
+			obj[p] = this._meta[p];
 		}
-		return false;	//	boolean
-	},
-	isRowSelected: function(/* HTMLTableRow */row){
-		//	summary
-		//	Returns if the passed row is selected.
-		var v = this.getByRow(row);
-		if(v){
-			return v.isSelected;	//	boolean
+	}
+	if (!obj.label) {
+		obj.label = obj.field;
+	}
+	if (!obj.filterFunction) {
+		obj.filterFunction = this._defaultFilter;
+	}
+	return obj;
+}, parseMetadata:function (head) {
+	this.columns = [];
+	this.sortInformation = [];
+	var row = head.getElementsByTagName("tr")[0];
+	var cells = row.getElementsByTagName("td");
+	if (cells.length == 0) {
+		cells = row.getElementsByTagName("th");
+	}
+	for (var i = 0; i < cells.length; i++) {
+		var o = this.createMetaData({});
+		if (dojo.html.hasAttribute(cells[i], "align")) {
+			o.align = dojo.html.getAttribute(cells[i], "align");
 		}
-		return false;	//	boolean
-	},
-
-	reset: function(){
-		//	summary
-		//	Resets the widget to its initial internal state.
-		this.store.clearData();
-		this.columns = [];
-		this.sortInformation = [ {index:0, direction:0} ];
-		this.resetSelections();
-		this.isInitialized = false;
-		this.onReset();
-	},
-	resetSelections: function(){
-		//	summary
-		//	Unselects all data objects.
-		this.store.forEach(function(element){
-			element.isSelected = false;
-		});
-	},
-	onReset:function(){ 
-		//	summary
-		//	Stub for onReset event.
-	},
-
-	//	selection and toggle functions
-	select: function(/*object*/ obj){
-		//	summary
-		//	selects the passed object.
-		var data = this.store.get();
-		for(var i=0; i<data.length; i++){
-			if(data[i].src == obj){
-				data[i].isSelected = true;
-				break;
-			}
+		if (dojo.html.hasAttribute(cells[i], "valign")) {
+			o.valign = dojo.html.getAttribute(cells[i], "valign");
 		}
-		this.onDataSelect(obj);
-	},
-	selectByValue: function(/*string*/ val){
-		//	summary
-		//	selects the object represented by key "val".
-		this.select(this.store.getDataByKey(val));
-	},
-	selectByIndex: function(/*number*/ idx){
-		//	summary
-		//	selects the object represented at index "idx".
-		this.select(this.store.getDataByIndex(idx));
-	},
-	selectByRow: function(/*HTMLTableRow*/ row){
-		//	summary
-		//	selects the object represented by HTMLTableRow row.
-		this.select(this.getDataByRow(row));
-	},
-	selectAll: function(){
-		//	summary
-		//	selects all objects.
-		this.store.forEach(function(element){
-			element.isSelected = true;
-		});
-	},
-	onDataSelect: function(/* object */obj){ 
-		//	summary
-		//	Stub for onDataSelect event.
-	},
-
-	toggleSelection: function(/*object*/obj){
-		//	summary
-		//	Flips the selection state of passed obj.
-		var data = this.store.get();
-		for(var i=0; i<data.length; i++){
-			if(data[i].src == obj){
-				data[i].isSelected = !data[i].isSelected;
-				break;
-			}
+		if (dojo.html.hasAttribute(cells[i], "nosort")) {
+			o.noSort = (dojo.html.getAttribute(cells[i], "nosort") == "true");
 		}
-		this.onDataToggle(obj);
-	},
-	toggleSelectionByValue: function(/*string*/val){
-		//	summary
-		//	Flips the selection state of object represented by val.
-		this.toggleSelection(this.store.getDataByKey(val));
-	},
-	toggleSelectionByIndex: function(/*number*/idx){
-		//	summary
-		//	Flips the selection state of object at index idx.
-		this.toggleSelection(this.store.getDataByIndex(idx));
-	},
-	toggleSelectionByRow: function(/*HTMLTableRow*/row){
-		//	summary
-		//	Flips the selection state of object represented by row.
-		this.toggleSelection(this.getDataByRow(row));
-	},
-	toggleAll: function(){
-		//	summary
-		//	Flips the selection state of all objects.
-		this.store.forEach(function(element){
-			element.isSelected = !element.isSelected;
-		});
-	},
-	onDataToggle: function(/* object */obj){ 
-		//	summary
-		//	Stub for onDataToggle event.
-	},
-
-	//	parsing functions, from HTML to metadata/SimpleStore
-	_meta:{
-		field:null,
-		format:null,
-		filterer:null,
-		noSort:false,
-		sortType:"String",
-		dataType:String,
-		sortFunction:null,
-		filterFunction:null,
-		label:null,
-		align:"left",
-		valign:"middle",
-		getField:function(){ 
-			return this.field || this.label; 
-		},
-		getType:function(){ 
-			return this.dataType; 
-		}
-	},
-	createMetaData: function(/* object */obj){
-		//	summary
-		//	Take a JSON-type structure and make it into a ducktyped metadata object.
-		for(var p in this._meta){
-			//	rudimentary mixin
-			if(!obj[p]){
-				obj[p] = this._meta[p];
+		if (dojo.html.hasAttribute(cells[i], "sortusing")) {
+			var trans = dojo.html.getAttribute(cells[i], "sortusing");
+			var f = this.getTypeFromString(trans);
+			if (f != null && f != window && typeof (f) == "function") {
+				o.sortFunction = f;
 			}
 		}
-		if(!obj.label){
-			obj.label=obj.field;
-		}
-		if(!obj.filterFunction){
-			obj.filterFunction=this._defaultFilter;
-		}
-		return obj;	//	object
-	},
-	parseMetadata: function(/* HTMLTableHead */head){
-		//	summary
-		//	Parses the passed HTMLTableHead element to create meta data.
-		this.columns=[];
-		this.sortInformation=[];
-		var row = head.getElementsByTagName("tr")[0];
-		var cells = row.getElementsByTagName("td");
-		if (cells.length == 0){
-			cells = row.getElementsByTagName("th");
-		}
-		for(var i=0; i<cells.length; i++){
-			var o = this.createMetaData({ });
-			
-			//	presentation attributes
-			if(dojo.html.hasAttribute(cells[i], "align")){
-				o.align = dojo.html.getAttribute(cells[i],"align");
-			}
-			if(dojo.html.hasAttribute(cells[i], "valign")){
-				o.valign = dojo.html.getAttribute(cells[i],"valign");
-			}
-			if(dojo.html.hasAttribute(cells[i], "nosort")){
-				o.noSort = (dojo.html.getAttribute(cells[i],"nosort")=="true");
-			}
-			if(dojo.html.hasAttribute(cells[i], "sortusing")){
-				var trans = dojo.html.getAttribute(cells[i],"sortusing");
-				var f = this.getTypeFromString(trans);
-				if (f != null && f != window && typeof(f)=="function"){
-					o.sortFunction=f;
-				}
-			}
-			o.label = dojo.html.renderedTextContent(cells[i]);
-			if(dojo.html.hasAttribute(cells[i], "field")){
-				o.field=dojo.html.getAttribute(cells[i],"field");
-			} else if(o.label.length > 0){
-				o.field=o.label;
+		o.label = dojo.html.renderedTextContent(cells[i]);
+		if (dojo.html.hasAttribute(cells[i], "field")) {
+			o.field = dojo.html.getAttribute(cells[i], "field");
+		} else {
+			if (o.label.length > 0) {
+				o.field = o.label;
 			} else {
 				o.field = "field" + i;
 			}
-			if(dojo.html.hasAttribute(cells[i], "format")){
-				o.format=dojo.html.getAttribute(cells[i],"format");
-			}
-			if(dojo.html.hasAttribute(cells[i], "dataType")){
-				var sortType = dojo.html.getAttribute(cells[i],"dataType");
-				if(sortType.toLowerCase()=="html" || sortType.toLowerCase()=="markup"){
-					o.sortType = "__markup__";	//	always convert to "__markup__"
-				}else{
-					var type = this.getTypeFromString(sortType);
-					if(type){
-						o.sortType = sortType;
-						o.dataType = type;
-					}
+		}
+		if (dojo.html.hasAttribute(cells[i], "format")) {
+			o.format = dojo.html.getAttribute(cells[i], "format");
+		}
+		if (dojo.html.hasAttribute(cells[i], "dataType")) {
+			var sortType = dojo.html.getAttribute(cells[i], "dataType");
+			if (sortType.toLowerCase() == "html" || sortType.toLowerCase() == "markup") {
+				o.sortType = "__markup__";
+			} else {
+				var type = this.getTypeFromString(sortType);
+				if (type) {
+					o.sortType = sortType;
+					o.dataType = type;
 				}
 			}
-
-			//	TODO: set up filtering mechanisms here.
-			if(dojo.html.hasAttribute(cells[i], "filterusing")){
-				var trans = dojo.html.getAttribute(cells[i],"filterusing");
-				var f = this.getTypeFromString(trans);
-				if (f != null && f != window && typeof(f)=="function"){
-					o.filterFunction=f;
-				}
+		}
+		if (dojo.html.hasAttribute(cells[i], "filterusing")) {
+			var trans = dojo.html.getAttribute(cells[i], "filterusing");
+			var f = this.getTypeFromString(trans);
+			if (f != null && f != window && typeof (f) == "function") {
+				o.filterFunction = f;
 			}
-			
-			this.columns.push(o);
-
-			//	check to see if there's a default sort, and set the properties necessary
-			if(dojo.html.hasAttribute(cells[i], "sort")){
-				var info = {
-					index:i,
-					direction:0
-				};
-				var dir = dojo.html.getAttribute(cells[i], "sort");
-				if(!isNaN(parseInt(dir))){
-					dir = parseInt(dir);
-					info.direction = (dir != 0) ? 1 : 0;
-				}else{
-					info.direction = (dir.toLowerCase() == "desc") ? 1 : 0;
-				}
-				this.sortInformation.push(info);
+		}
+		this.columns.push(o);
+		if (dojo.html.hasAttribute(cells[i], "sort")) {
+			var info = {index:i, direction:0};
+			var dir = dojo.html.getAttribute(cells[i], "sort");
+			if (!isNaN(parseInt(dir))) {
+				dir = parseInt(dir);
+				info.direction = (dir != 0) ? 1 : 0;
+			} else {
+				info.direction = (dir.toLowerCase() == "desc") ? 1 : 0;
 			}
+			this.sortInformation.push(info);
 		}
-		if(this.sortInformation.length == 0){
-			this.sortInformation.push({
-				index:0,
-				direction:0
-			});
-		} else if (this.sortInformation.length > this.maxSortable){
+	}
+	if (this.sortInformation.length == 0) {
+		this.sortInformation.push({index:0, direction:0});
+	} else {
+		if (this.sortInformation.length > this.maxSortable) {
 			this.sortInformation.length = this.maxSortable;
 		}
-	},
-	parseData: function(/* HTMLTableBody */body){
-		//	summary
-		//	Parse HTML data into native JSON structure for the store.
-		if(body.rows.length == 0 && this.columns.length == 0){
-			return;	//	there's no data, ignore me.
+	}
+}, parseData:function (body) {
+	if (body.rows.length == 0 && this.columns.length == 0) {
+		return;
+	}
+	var self = this;
+	this["__selected__"] = [];
+	var arr = this.store.getFromHtml(this.columns, body, function (obj, row) {
+		if (typeof (obj[self.valueField]) == "undefined" || obj[self.valueField] == null) {
+			obj[self.valueField] = dojo.html.getAttribute(row, "value");
 		}
-
-		//	create a data constructor based on what we've got for the fields.
-		var self=this;
-		this["__selected__"] = [];
-		var arr = this.store.getFromHtml(this.columns, body, function(obj, row){
-			if(typeof(obj[self.valueField])=="undefined" || obj[self.valueField]==null){
-				obj[self.valueField] = dojo.html.getAttribute(row, "value");
-			}
-			if(dojo.html.getAttribute(row, "selected")=="true"){
-				self["__selected__"].push(obj);
-			}
-		});
-		
-		this.store.setData(arr, true);
-		this.render();
-		
-		for(var i=0; i<this["__selected__"].length; i++){
-			this.select(this["__selected__"][i]);
+		if (dojo.html.getAttribute(row, "selected") == "true") {
+			self["__selected__"].push(obj);
 		}
-		this.renderSelections();
-
-		delete this["__selected__"];
-
-		//	say that we are already initialized so that we don't kill anything
-		this.isInitialized=true;
-	},
-
-	//	standard events
-	onSelect: function(/* HTMLEvent */e){
-		//	summary
-		//	Handles the onclick event of any element.
-		var row = dojo.html.getParentByType(e.target,"tr");
-		if(dojo.html.hasAttribute(row,"emptyRow")){
-			return;
-		}
-		var body = dojo.html.getParentByType(row,"tbody");
-		if(this.multiple){
-			if(e.shiftKey){
-				var startRow;
-				var rows=body.rows;
-				for(var i=0;i<rows.length;i++){
-					if(rows[i]==row){
+	});
+	this.store.setData(arr, true);
+	this.render();
+	for (var i = 0; i < this["__selected__"].length; i++) {
+		this.select(this["__selected__"][i]);
+	}
+	this.renderSelections();
+	delete this["__selected__"];
+	this.isInitialized = true;
+}, onSelect:function (e) {
+	var row = dojo.html.getParentByType(e.target, "tr");
+	if (dojo.html.hasAttribute(row, "emptyRow")) {
+		return;
+	}
+	var body = dojo.html.getParentByType(row, "tbody");
+	if (this.multiple) {
+		if (e.shiftKey) {
+			var startRow;
+			var rows = body.rows;
+			for (var i = 0; i < rows.length; i++) {
+				if (rows[i] == row) {
+					break;
+				}
+				if (this.isRowSelected(rows[i])) {
+					startRow = rows[i];
+				}
+			}
+			if (!startRow) {
+				startRow = row;
+				for (; i < rows.length; i++) {
+					if (this.isRowSelected(rows[i])) {
+						row = rows[i];
 						break;
 					}
-					if(this.isRowSelected(rows[i])){
-						startRow=rows[i];
-					}
 				}
-				if(!startRow){
-					startRow = row;
-					for(; i<rows.length; i++){
-						if(this.isRowSelected(rows[i])){
-							row = rows[i];
-							break;
-						}
+			}
+			this.resetSelections();
+			if (startRow == row) {
+				this.toggleSelectionByRow(row);
+			} else {
+				var doSelect = false;
+				for (var i = 0; i < rows.length; i++) {
+					if (rows[i] == startRow) {
+						doSelect = true;
 					}
-				}
-				this.resetSelections();
-				if(startRow == row){
-					this.toggleSelectionByRow(row);
-				} else {
-					var doSelect = false;
-					for(var i=0; i<rows.length; i++){
-						if(rows[i] == startRow){
-							doSelect=true;
-						}
-						if(doSelect){
-							this.selectByRow(rows[i]);
-						}
-						if(rows[i] == row){
-							doSelect = false;
-						}
+					if (doSelect) {
+						this.selectByRow(rows[i]);
 					}
+					if (rows[i] == row) {
+						doSelect = false;
+					}
 				}
-			} else {
-				this.toggleSelectionByRow(row);
 			}
 		} else {
-			this.resetSelections();
 			this.toggleSelectionByRow(row);
 		}
-		this.renderSelections();
-	},
-	onSort: function(/* HTMLEvent */e){
-		//	summary
-		//	Sort the table based on the column selected.
-		var oldIndex=this.sortIndex;
-		var oldDirection=this.sortDirection;
-		
-		var source=e.target;
-		var row=dojo.html.getParentByType(source,"tr");
-		var cellTag="td";
-		if(row.getElementsByTagName(cellTag).length==0){
-			cellTag="th";
-		}
-
-		var headers=row.getElementsByTagName(cellTag);
-		var header=dojo.html.getParentByType(source,cellTag);
-		
-		for(var i=0; i<headers.length; i++){
-			dojo.html.setClass(headers[i], this.headerClass);
-			if(headers[i]==header){
-				if(this.sortInformation[0].index != i){
-					this.sortInformation.unshift({ 
-						index:i, 
-						direction:0
-					});
-				} else {
-					this.sortInformation[0] = {
-						index:i,
-						direction:(~this.sortInformation[0].direction)&1
-					};
-				}
+	} else {
+		this.resetSelections();
+		this.toggleSelectionByRow(row);
+	}
+	this.renderSelections();
+}, onSort:function (e) {
+	var oldIndex = this.sortIndex;
+	var oldDirection = this.sortDirection;
+	var source = e.target;
+	var row = dojo.html.getParentByType(source, "tr");
+	var cellTag = "td";
+	if (row.getElementsByTagName(cellTag).length == 0) {
+		cellTag = "th";
+	}
+	var headers = row.getElementsByTagName(cellTag);
+	var header = dojo.html.getParentByType(source, cellTag);
+	for (var i = 0; i < headers.length; i++) {
+		dojo.html.setClass(headers[i], this.headerClass);
+		if (headers[i] == header) {
+			if (this.sortInformation[0].index != i) {
+				this.sortInformation.unshift({index:i, direction:0});
+			} else {
+				this.sortInformation[0] = {index:i, direction:(~this.sortInformation[0].direction) & 1};
 			}
 		}
-
-		this.sortInformation.length = Math.min(this.sortInformation.length, this.maxSortable);
-		for(var i=0; i<this.sortInformation.length; i++){
-			var idx=this.sortInformation[i].index;
-			var dir=(~this.sortInformation[i].direction)&1;
-			dojo.html.setClass(headers[idx], dir==0?this.headerDownClass:this.headerUpClass);
+	}
+	this.sortInformation.length = Math.min(this.sortInformation.length, this.maxSortable);
+	for (var i = 0; i < this.sortInformation.length; i++) {
+		var idx = this.sortInformation[i].index;
+		var dir = (~this.sortInformation[i].direction) & 1;
+		dojo.html.setClass(headers[idx], dir == 0 ? this.headerDownClass : this.headerUpClass);
+	}
+	this.render();
+}, onFilter:function () {
+}, _defaultFilter:function (obj) {
+	return true;
+}, setFilter:function (field, fn) {
+	for (var i = 0; i < this.columns.length; i++) {
+		if (this.columns[i].getField() == field) {
+			this.columns[i].filterFunction = fn;
+			break;
 		}
-		this.render();
-	},
-	onFilter: function(){
-		//	summary
-		//	show or hide rows based on the parameters of the passed filter.
-	},
-
-	//	Filtering methods
-	_defaultFilter: function(/* Object */obj){
-		//	summary
-		//	Always return true as the result of the default filter.
-		return true;
-	},
-	setFilter: function(/* string */field, /* function */fn){
-		//	summary
-		//	set a filtering function on the passed field.
-		for(var i=0; i<this.columns.length; i++){
-			if(this.columns[i].getField() == field){
-				this.columns[i].filterFunction=fn;
-				break;
-			}
+	}
+	this.applyFilters();
+}, setFilterByIndex:function (idx, fn) {
+	this.columns[idx].filterFunction = fn;
+	this.applyFilters();
+}, clearFilter:function (field) {
+	for (var i = 0; i < this.columns.length; i++) {
+		if (this.columns[i].getField() == field) {
+			this.columns[i].filterFunction = this._defaultFilter;
+			break;
 		}
-		this.applyFilters();
-	},
-	setFilterByIndex: function(/* number */idx, /* function */fn){
-		//	summary
-		//	set a filtering function on the passed column index.
-		this.columns[idx].filterFunction=fn;
-		this.applyFilters();
-	},
-	clearFilter: function(/* string */field){
-		//	summary
-		//	clear a filtering function on the passed field.
-		for(var i=0; i<this.columns.length; i++){
-			if(this.columns[i].getField() == field){
-				this.columns[i].filterFunction=this._defaultFilter;
+	}
+	this.applyFilters();
+}, clearFilterByIndex:function (idx) {
+	this.columns[idx].filterFunction = this._defaultFilter;
+	this.applyFilters();
+}, clearFilters:function () {
+	for (var i = 0; i < this.columns.length; i++) {
+		this.columns[i].filterFunction = this._defaultFilter;
+	}
+	var rows = this.domNode.tBodies[0].rows;
+	for (var i = 0; i < rows.length; i++) {
+		rows[i].style.display = "";
+		if (this.alternateRows) {
+			dojo.html[((i % 2 == 1) ? "addClass" : "removeClass")](rows[i], this.rowAlternateClass);
+		}
+	}
+	this.onFilter();
+}, applyFilters:function () {
+	var alt = 0;
+	var rows = this.domNode.tBodies[0].rows;
+	for (var i = 0; i < rows.length; i++) {
+		var b = true;
+		var row = rows[i];
+		for (var j = 0; j < this.columns.length; j++) {
+			var value = this.store.getField(this.getDataByRow(row), this.columns[j].getField());
+			if (this.columns[j].getType() == Date && value != null && !value.getYear) {
+				value = new Date(value);
+			}
+			if (!this.columns[j].filterFunction(value)) {
+				b = false;
 				break;
 			}
 		}
-		this.applyFilters();
-	}, 
-	clearFilterByIndex: function(/* number */idx){
-		//	summary
-		//	clear a filtering function on the passed column index.
-		this.columns[idx].filterFunction=this._defaultFilter;
-		this.applyFilters();
-	}, 
-	clearFilters: function(){
-		//	summary
-		//	clears all filters.
-		for(var i=0; i<this.columns.length; i++){
-			this.columns[i].filterFunction=this._defaultFilter;
+		row.style.display = (b ? "" : "none");
+		if (b && this.alternateRows) {
+			dojo.html[((alt++ % 2 == 1) ? "addClass" : "removeClass")](row, this.rowAlternateClass);
 		}
-		//	we'll do the clear manually, it will be faster.
-		var rows=this.domNode.tBodies[0].rows;
-		for(var i=0; i<rows.length; i++){
-			rows[i].style.display="";
-			if(this.alternateRows){
-				dojo.html[((i % 2 == 1)?"addClass":"removeClass")](rows[i], this.rowAlternateClass);
+	}
+	this.onFilter();
+}, createSorter:function (info) {
+	var self = this;
+	var sortFunctions = [];
+	function createSortFunction(fieldIndex, dir) {
+		var meta = self.columns[fieldIndex];
+		var field = meta.getField();
+		return function (rowA, rowB) {
+			if (dojo.html.hasAttribute(rowA, "emptyRow")) {
+				return 1;
 			}
-		}
-		this.onFilter();
-	},
-	applyFilters: function(){
-		//	summary
-		//	apply all filters to the table.
-		var alt=0;
-		var rows=this.domNode.tBodies[0].rows;
-		for(var i=0; i<rows.length; i++){
-			var b=true;
-			var row=rows[i];
-			for(var j=0; j<this.columns.length; j++){
-				var value = this.store.getField(this.getDataByRow(row), this.columns[j].getField());
-				if(this.columns[j].getType() == Date && value != null && !value.getYear){
-					value = new Date(value);
-				}
-				if(!this.columns[j].filterFunction(value)){
-					b=false;
-					break;
-				}
+			if (dojo.html.hasAttribute(rowB, "emptyRow")) {
+				return -1;
 			}
-			row.style.display=(b?"":"none");
-			if(b && this.alternateRows){
-				dojo.html[((alt++ % 2 == 1)?"addClass":"removeClass")](row, this.rowAlternateClass);
+			var a = self.store.getField(self.getDataByRow(rowA), field);
+			var b = self.store.getField(self.getDataByRow(rowB), field);
+			var ret = 0;
+			if (a > b) {
+				ret = 1;
 			}
-		}
-		this.onFilter();
-	},
-
-	//	sorting functionality
-	createSorter: function(/* array */info){
-		//	summary
-		//	creates a custom function to be used for sorting.
-		var self=this;
-		var sortFunctions=[];	//	our function stack.
-	
-		function createSortFunction(fieldIndex, dir){
-			var meta=self.columns[fieldIndex];
-			var field=meta.getField();
-			return function(rowA, rowB){
-				if(dojo.html.hasAttribute(rowA,"emptyRow")){ return 1; }
-				if(dojo.html.hasAttribute(rowB,"emptyRow")){ return -1; }
-
-				//	TODO: check for markup and compare by rendered text.
-				var a = self.store.getField(self.getDataByRow(rowA), field);
-				var b = self.store.getField(self.getDataByRow(rowB), field);
-				var ret = 0;
-				if(a > b) ret = 1;
-				if(a < b) ret = -1;
-				return dir * ret;
+			if (a < b) {
+				ret = -1;
 			}
-		}
-
-		var current=0;
-		var max = Math.min(info.length, this.maxSortable, this.columns.length);
-		while(current < max){
-			var direction = (info[current].direction == 0) ? 1 : -1;
-			sortFunctions.push(
-				createSortFunction(info[current].index, direction)
-			);
-			current++;
-		}
-
-		return function(rowA, rowB){
-			var idx=0;
-			while(idx < sortFunctions.length){
-				var ret = sortFunctions[idx++](rowA, rowB);
-				if(ret != 0) return ret;
+			return dir * ret;
+		};
+	}
+	var current = 0;
+	var max = Math.min(info.length, this.maxSortable, this.columns.length);
+	while (current < max) {
+		var direction = (info[current].direction == 0) ? 1 : -1;
+		sortFunctions.push(createSortFunction(info[current].index, direction));
+		current++;
+	}
+	return function (rowA, rowB) {
+		var idx = 0;
+		while (idx < sortFunctions.length) {
+			var ret = sortFunctions[idx++](rowA, rowB);
+			if (ret != 0) {
+				return ret;
 			}
-			//	if we got here then we must be equal.
-			return 0; 	
-		};	//	function
-	},
-
-	//	rendering
-	createRow: function(/* object */obj){
-		//	summary
-		//	Create an HTML row based on the passed object
-		var row=document.createElement("tr");
-		dojo.html.disableSelection(row);
-		if(obj.key != null){
-			row.setAttribute("value", obj.key);
 		}
-		for(var j=0; j<this.columns.length; j++){
-			var cell=document.createElement("td");
-			cell.setAttribute("align", this.columns[j].align);
-			cell.setAttribute("valign", this.columns[j].valign);
-			dojo.html.disableSelection(cell);
-			var val = this.store.getField(obj.src, this.columns[j].getField());
-			if(typeof(val)=="undefined"){
-				val="";
-			}
-			this.fillCell(cell, this.columns[j], val);
-			row.appendChild(cell);
+		return 0;
+	};
+}, createRow:function (obj) {
+	var row = document.createElement("tr");
+	dojo.html.disableSelection(row);
+	if (obj.key != null) {
+		row.setAttribute("value", obj.key);
+	}
+	for (var j = 0; j < this.columns.length; j++) {
+		var cell = document.createElement("td");
+		cell.setAttribute("align", this.columns[j].align);
+		cell.setAttribute("valign", this.columns[j].valign);
+		dojo.html.disableSelection(cell);
+		var val = this.store.getField(obj.src, this.columns[j].getField());
+		if (typeof (val) == "undefined") {
+			val = "";
 		}
-		return row;	//	HTMLTableRow
-	},
-	fillCell: function(/* HTMLTableCell */cell, /* object */meta, /* object */val){
-		//	summary
-		//	Fill the passed cell with value, based on the passed meta object.
-		if(meta.sortType=="__markup__"){
-			cell.innerHTML=val;
+		this.fillCell(cell, this.columns[j], val);
+		row.appendChild(cell);
+	}
+	return row;
+}, fillCell:function (cell, meta, val) {
+	if (meta.sortType == "__markup__") {
+		cell.innerHTML = val;
+	} else {
+		if (meta.getType() == Date) {
+			val = new Date(val);
+			if (!isNaN(val)) {
+				var format = this.defaultDateFormat;
+				if (meta.format) {
+					format = meta.format;
+				}
+				cell.innerHTML = dojo.date.strftime(val, format);
+			} else {
+				cell.innerHTML = val;
+			}
 		} else {
-			if(meta.getType()==Date) {
-				val=new Date(val);
-				if(!isNaN(val)){
-					var format = this.defaultDateFormat;
-					if(meta.format){
-						format = meta.format;
-					}
-					cell.innerHTML = dojo.date.strftime(val, format);
-				} else {
-					cell.innerHTML = val;
+			if ("Number number int Integer float Float".indexOf(meta.getType()) > -1) {
+				if (val.length == 0) {
+					val = "0";
 				}
-			} else if ("Number number int Integer float Float".indexOf(meta.getType())>-1){
-				//	TODO: number formatting
-				if(val.length == 0){
-					val="0";
-				}
 				var n = parseFloat(val, 10) + "";
-				//	TODO: numeric formatting + rounding :)
-				if(n.indexOf(".")>-1){
-					n = dojo.math.round(parseFloat(val,10),2);
+				if (n.indexOf(".") > -1) {
+					n = dojo.math.round(parseFloat(val, 10), 2);
 				}
 				cell.innerHTML = n;
-			}else{
+			} else {
 				cell.innerHTML = val;
 			}
 		}
-	},
-	prefill: function(){
-		//	summary
-		//	if there's no data in the table, then prefill it with this.minRows.
-		this.isInitialized = false;
+	}
+}, prefill:function () {
+	this.isInitialized = false;
+	var body = this.domNode.tBodies[0];
+	while (body.childNodes.length > 0) {
+		body.removeChild(body.childNodes[0]);
+	}
+	if (this.minRows > 0) {
+		for (var i = 0; i < this.minRows; i++) {
+			var row = document.createElement("tr");
+			if (this.alternateRows) {
+				dojo.html[((i % 2 == 1) ? "addClass" : "removeClass")](row, this.rowAlternateClass);
+			}
+			row.setAttribute("emptyRow", "true");
+			for (var j = 0; j < this.columns.length; j++) {
+				var cell = document.createElement("td");
+				cell.innerHTML = "&nbsp;";
+				row.appendChild(cell);
+			}
+			body.appendChild(row);
+		}
+	}
+}, init:function () {
+	this.isInitialized = false;
+	var head = this.domNode.getElementsByTagName("thead")[0];
+	if (head.getElementsByTagName("tr").length == 0) {
+		var row = document.createElement("tr");
+		for (var i = 0; i < this.columns.length; i++) {
+			var cell = document.createElement("td");
+			cell.setAttribute("align", this.columns[i].align);
+			cell.setAttribute("valign", this.columns[i].valign);
+			dojo.html.disableSelection(cell);
+			cell.innerHTML = this.columns[i].label;
+			row.appendChild(cell);
+			if (!this.columns[i].noSort) {
+				dojo.event.connect(cell, "onclick", this, "onSort");
+			}
+		}
+		dojo.html.prependChild(row, head);
+	}
+	if (this.store.get().length == 0) {
+		return false;
+	}
+	var idx = this.domNode.tBodies[0].rows.length;
+	if (!idx || idx == 0 || this.domNode.tBodies[0].rows[0].getAttribute("emptyRow") == "true") {
+		idx = 0;
 		var body = this.domNode.tBodies[0];
-		while (body.childNodes.length > 0){
+		while (body.childNodes.length > 0) {
 			body.removeChild(body.childNodes[0]);
 		}
-		
-		if(this.minRows>0){
-			for(var i=0; i < this.minRows; i++){
-				var row = document.createElement("tr");
-				if(this.alternateRows){
-					dojo.html[((i % 2 == 1)?"addClass":"removeClass")](row, this.rowAlternateClass);
-				}
-				row.setAttribute("emptyRow","true");
-				for(var j=0; j<this.columns.length; j++){
-					var cell = document.createElement("td");
-					cell.innerHTML = "&nbsp;";
-					row.appendChild(cell);
-				}
-				body.appendChild(row);
-			}
+		var data = this.store.get();
+		for (var i = 0; i < data.length; i++) {
+			var row = this.createRow(data[i]);
+			body.appendChild(row);
+			idx++;
 		}
-	},
-	init: function(){
-		//	summary
-		//	initializes the table of data
-		this.isInitialized=false;
-
-		//	if there is no thead, create it now.
-		var head=this.domNode.getElementsByTagName("thead")[0];
-		if(head.getElementsByTagName("tr").length == 0){
-			//	render the column code.
-			var row=document.createElement("tr");
-			for(var i=0; i<this.columns.length; i++){
-				var cell=document.createElement("td");
-				cell.setAttribute("align", this.columns[i].align);
-				cell.setAttribute("valign", this.columns[i].valign);
-				dojo.html.disableSelection(cell);
-				cell.innerHTML=this.columns[i].label;
+	}
+	if (this.minRows > 0 && idx < this.minRows) {
+		idx = this.minRows - idx;
+		for (var i = 0; i < idx; i++) {
+			row = document.createElement("tr");
+			row.setAttribute("emptyRow", "true");
+			for (var j = 0; j < this.columns.length; j++) {
+				cell = document.createElement("td");
+				cell.innerHTML = "&nbsp;";
 				row.appendChild(cell);
-
-				//	attach the events.
-				if(!this.columns[i].noSort){
-					dojo.event.connect(cell, "onclick", this, "onSort");
-				}
 			}
-			dojo.html.prependChild(row, head);
+			body.appendChild(row);
 		}
-		
-		if(this.store.get().length == 0){
-			return false;
+	}
+	var row = this.domNode.getElementsByTagName("thead")[0].rows[0];
+	var cellTag = "td";
+	if (row.getElementsByTagName(cellTag).length == 0) {
+		cellTag = "th";
+	}
+	var headers = row.getElementsByTagName(cellTag);
+	for (var i = 0; i < headers.length; i++) {
+		dojo.html.setClass(headers[i], this.headerClass);
+	}
+	for (var i = 0; i < this.sortInformation.length; i++) {
+		var idx = this.sortInformation[i].index;
+		var dir = (~this.sortInformation[i].direction) & 1;
+		dojo.html.setClass(headers[idx], dir == 0 ? this.headerDownClass : this.headerUpClass);
+	}
+	this.isInitialized = true;
+	return this.isInitialized;
+}, render:function () {
+	if (!this.isInitialized) {
+		var b = this.init();
+		if (!b) {
+			this.prefill();
+			return;
 		}
-
-		var idx=this.domNode.tBodies[0].rows.length;
-		if(!idx || idx==0 || this.domNode.tBodies[0].rows[0].getAttribute("emptyRow")=="true"){
-			idx = 0;
-			var body = this.domNode.tBodies[0];
-			while(body.childNodes.length>0){
+	}
+	var rows = [];
+	var body = this.domNode.tBodies[0];
+	var emptyRowIdx = -1;
+	for (var i = 0; i < body.rows.length; i++) {
+		rows.push(body.rows[i]);
+	}
+	var sortFunction = this.createSorter(this.sortInformation);
+	if (sortFunction) {
+		rows.sort(sortFunction);
+	}
+	for (var i = 0; i < rows.length; i++) {
+		if (this.alternateRows) {
+			dojo.html[((i % 2 == 1) ? "addClass" : "removeClass")](rows[i], this.rowAlternateClass);
+		}
+		dojo.html[(this.isRowSelected(body.rows[i]) ? "addClass" : "removeClass")](body.rows[i], this.rowSelectedClass);
+		body.appendChild(rows[i]);
+	}
+}, renderSelections:function () {
+	var body = this.domNode.tBodies[0];
+	for (var i = 0; i < body.rows.length; i++) {
+		dojo.html[(this.isRowSelected(body.rows[i]) ? "addClass" : "removeClass")](body.rows[i], this.rowSelectedClass);
+	}
+}, initialize:function () {
+	var self = this;
+	dojo.event.connect(this.store, "onSetData", function () {
+		self.store.forEach(function (element) {
+			element.isSelected = false;
+		});
+		self.isInitialized = false;
+		var body = self.domNode.tBodies[0];
+		if (body) {
+			while (body.childNodes.length > 0) {
 				body.removeChild(body.childNodes[0]);
 			}
-
-			var data = this.store.get();
-			for(var i=0; i<data.length; i++){
-				var row = this.createRow(data[i]);
-				body.appendChild(row);
-				idx++;
-			}
 		}
-
-		//	add empty rows
-		if(this.minRows > 0 && idx < this.minRows){
-			idx = this.minRows - idx;
-			for(var i=0; i<idx; i++){
-				row=document.createElement("tr");
-				row.setAttribute("emptyRow","true");
-				for(var j=0; j<this.columns.length; j++){
-					cell=document.createElement("td");
-					cell.innerHTML="&nbsp;";
-					row.appendChild(cell);
-				}
-				body.appendChild(row);
-			}
+		self.render();
+	});
+	dojo.event.connect(this.store, "onClearData", function () {
+		self.isInitialized = false;
+		self.render();
+	});
+	dojo.event.connect(this.store, "onAddData", function (addedObject) {
+		var row = self.createRow(addedObject);
+		self.domNode.tBodies[0].appendChild(row);
+		self.render();
+	});
+	dojo.event.connect(this.store, "onAddDataRange", function (arr) {
+		for (var i = 0; i < arr.length; i++) {
+			arr[i].isSelected = false;
+			var row = self.createRow(arr[i]);
+			self.domNode.tBodies[0].appendChild(row);
 		}
-
-		//	last but not least, show any columns that have sorting already on them.
-		var row=this.domNode.getElementsByTagName("thead")[0].rows[0];
-		var cellTag="td";
-		if(row.getElementsByTagName(cellTag).length==0) cellTag="th";
-		var headers=row.getElementsByTagName(cellTag);
-		for(var i=0; i<headers.length; i++){
-			dojo.html.setClass(headers[i], this.headerClass);
-		}
-		for(var i=0; i<this.sortInformation.length; i++){
-			var idx=this.sortInformation[i].index;
-			var dir=(~this.sortInformation[i].direction)&1;
-			dojo.html.setClass(headers[idx], dir==0?this.headerDownClass:this.headerUpClass);
-		}
-
-		this.isInitialized=true;
-		return this.isInitialized;
-	},
-	render: function(){
-		//	summary
-		//	Renders the actual table data.
-
-	/*	The method that should be called once underlying changes
-	 *	are made, including sorting, filtering, data changes.
-	 *	Rendering the selections themselves are a different method,
-	 *	which render() will call as the last step.
-	 ****************************************************************/
-		if(!this.isInitialized){
-			var b = this.init();
-			if(!b){
-				this.prefill();
-				return;
+		self.render();
+	});
+	dojo.event.connect(this.store, "onRemoveData", function (removedObject) {
+		var rows = self.domNode.tBodies[0].rows;
+		for (var i = 0; i < rows.length; i++) {
+			if (self.getDataByRow(rows[i]) == removedObject.src) {
+				rows[i].parentNode.removeChild(rows[i]);
+				break;
 			}
 		}
-
-		//	do the sort
-		var rows=[];
-		var body=this.domNode.tBodies[0];
-		var emptyRowIdx=-1;
-		for(var i=0; i<body.rows.length; i++){
-			rows.push(body.rows[i]);
+		self.render();
+	});
+	dojo.event.connect(this.store, "onUpdateField", function (obj, fieldPath, val) {
+		var row = self.getRow(obj);
+		var idx = self.getColumnIndex(fieldPath);
+		if (row && row.cells[idx] && self.columns[idx]) {
+			self.fillCell(row.cells[idx], self.columns[idx], val);
 		}
-
-		//	build the sorting function, and do the sorting.
-		var sortFunction = this.createSorter(this.sortInformation);
-		if(sortFunction){
-			rows.sort(sortFunction);
+	});
+}, postCreate:function () {
+	this.store.keyField = this.valueField;
+	if (this.domNode) {
+		if (this.domNode.nodeName.toLowerCase() != "table") {
 		}
-
-		//	append the rows without killing them, this should help with the HTML problems.
-		for(var i=0; i<rows.length; i++){
-			if(this.alternateRows){
-				dojo.html[((i%2==1)?"addClass":"removeClass")](rows[i], this.rowAlternateClass);
+		if (this.domNode.getElementsByTagName("thead")[0]) {
+			var head = this.domNode.getElementsByTagName("thead")[0];
+			if (this.headClass.length > 0) {
+				head.className = this.headClass;
 			}
-			dojo.html[(this.isRowSelected(body.rows[i])?"addClass":"removeClass")](body.rows[i], this.rowSelectedClass);
-			body.appendChild(rows[i]);
-		}
-	},
-	renderSelections: function(){
-		//	summary
-		//	Render all selected objects using CSS.
-		var body=this.domNode.tBodies[0];
-		for(var i=0; i<body.rows.length; i++){
-			dojo.html[(this.isRowSelected(body.rows[i])?"addClass":"removeClass")](body.rows[i], this.rowSelectedClass);
-		}
-	},
-
-	//	widget lifetime handlers
-	initialize: function(){ 
-		//	summary
-		//	Initializes the widget.
-		var self=this;
-		//	connect up binding listeners here.
-		dojo.event.connect(this.store, "onSetData", function(){
-			self.store.forEach(function(element){
-				element.isSelected = false;
-			});
-			self.isInitialized=false;
-			var body = self.domNode.tBodies[0];
-			if(body){
-				while(body.childNodes.length>0){
-					body.removeChild(body.childNodes[0]);
-				}
+			dojo.html.disableSelection(this.domNode);
+			this.parseMetadata(head);
+			var header = "td";
+			if (head.getElementsByTagName(header).length == 0) {
+				header = "th";
 			}
-			self.render();
-		});
-		dojo.event.connect(this.store, "onClearData", function(){
-			self.isInitialized = false;
-			self.render();
-		});
-		dojo.event.connect(this.store, "onAddData", function(addedObject){
-			var row=self.createRow(addedObject);
-			self.domNode.tBodies[0].appendChild(row);
-			self.render();
-		});
-		dojo.event.connect(this.store, "onAddDataRange", function(arr){
-			for(var i=0; i<arr.length; i++){
-				arr[i].isSelected=false;
-				var row=self.createRow(arr[i]);
-				self.domNode.tBodies[0].appendChild(row);
-			};
-			self.render();
-		});
-		dojo.event.connect(this.store, "onRemoveData", function(removedObject){
-			var rows = self.domNode.tBodies[0].rows;
-			for(var i=0; i<rows.length; i++){
-				if(self.getDataByRow(rows[i]) == removedObject.src){
-					rows[i].parentNode.removeChild(rows[i]);
-					break;
+			var headers = head.getElementsByTagName(header);
+			for (var i = 0; i < headers.length; i++) {
+				if (!this.columns[i].noSort) {
+					dojo.event.connect(headers[i], "onclick", this, "onSort");
 				}
 			}
-			self.render();
-		});
-		dojo.event.connect(this.store, "onUpdateField", function(obj, fieldPath, val){
-			var row = self.getRow(obj);
-			var idx = self.getColumnIndex(fieldPath);
-			if(row && row.cells[idx] && self.columns[idx]){
-				self.fillCell(row.cells[idx], self.columns[idx], val);
-			}
-		});
-	},
-	postCreate: function(){
-		//	summary
-		//	finish widget initialization.
-		this.store.keyField = this.valueField;
-
-		if(this.domNode){
-			//	start by making sure domNode is a table element;
-			if(this.domNode.nodeName.toLowerCase() != "table"){
-			}
-
-			//	see if there is columns set up already
-			if(this.domNode.getElementsByTagName("thead")[0]){
-				var head=this.domNode.getElementsByTagName("thead")[0];
-				if(this.headClass.length > 0){
-					head.className = this.headClass;
-				}
-				dojo.html.disableSelection(this.domNode);
-				this.parseMetadata(head);
-
-				var header="td";
-				if(head.getElementsByTagName(header).length==0){
-					header="th";
-				}
-				var headers = head.getElementsByTagName(header);
-				for(var i=0; i<headers.length; i++){
-					if(!this.columns[i].noSort){
-						dojo.event.connect(headers[i], "onclick", this, "onSort");
-					}
-				}
-			} else {
-				this.domNode.appendChild(document.createElement("thead"));
-			}
-
-			// if the table doesn't have a tbody already, add one and grab a reference to it
-			if (this.domNode.tBodies.length < 1) {
-				var body = document.createElement("tbody");
-				this.domNode.appendChild(body);
-			} else {
-				var body = this.domNode.tBodies[0];
-			}
-
-			if (this.tbodyClass.length > 0){
-				body.className = this.tbodyClass;
-			}
-			dojo.event.connect(body, "onclick", this, "onSelect");
-			this.parseData(body);
+		} else {
+			this.domNode.appendChild(document.createElement("thead"));
 		}
+		if (this.domNode.tBodies.length < 1) {
+			var body = document.createElement("tbody");
+			this.domNode.appendChild(body);
+		} else {
+			var body = this.domNode.tBodies[0];
+		}
+		if (this.tbodyClass.length > 0) {
+			body.className = this.tbodyClass;
+		}
+		dojo.event.connect(body, "onclick", this, "onSelect");
+		this.parseData(body);
 	}
-});
+}});
 
+
 __CPAN_FILE__ src/widget/Manager.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -41040,331 +25771,252 @@
 dojo.require("dojo.lang.array");
 dojo.require("dojo.lang.func");
 dojo.require("dojo.event.*");
-
-// summary
-//	Manager class for the widgets.
-//	This is an internal class used by dojo; users shouldn't call this class directly.
-dojo.widget.manager = new function(){
+dojo.widget.manager = new function () {
 	this.widgets = [];
 	this.widgetIds = [];
-	
-	// map of widgetId-->widget for widgets without parents (top level widgets)
 	this.topWidgets = {};
-
 	var widgetTypeCtr = {};
 	var renderPrefixCache = [];
-
 	this.getUniqueId = function (widgetType) {
 		var widgetId;
-		do{
-			widgetId = widgetType + "_" + (widgetTypeCtr[widgetType] != undefined ?
-			++widgetTypeCtr[widgetType] : widgetTypeCtr[widgetType] = 0);
-		}while(this.getWidgetById(widgetId));
+		do {
+			widgetId = widgetType + "_" + (widgetTypeCtr[widgetType] != undefined ? ++widgetTypeCtr[widgetType] : widgetTypeCtr[widgetType] = 0);
+		} while (this.getWidgetById(widgetId));
 		return widgetId;
-	}
-
-	this.add = function(widget){
-		//dojo.profile.start("dojo.widget.manager.add");
+	};
+	this.add = function (widget) {
 		this.widgets.push(widget);
-		// Opera9 uses ID (caps)
-		if(!widget.extraArgs["id"]){
+		if (!widget.extraArgs["id"]) {
 			widget.extraArgs["id"] = widget.extraArgs["ID"];
 		}
-		// FIXME: the rest of this method is very slow!
-		if(widget.widgetId == ""){
-			if(widget["id"]){
+		if (widget.widgetId == "") {
+			if (widget["id"]) {
 				widget.widgetId = widget["id"];
-			}else if(widget.extraArgs["id"]){
-				widget.widgetId = widget.extraArgs["id"];
-			}else{
-				widget.widgetId = this.getUniqueId(widget.ns+'_'+widget.widgetType);
+			} else {
+				if (widget.extraArgs["id"]) {
+					widget.widgetId = widget.extraArgs["id"];
+				} else {
+					widget.widgetId = this.getUniqueId(widget.ns + "_" + widget.widgetType);
+				}
 			}
 		}
-		if(this.widgetIds[widget.widgetId]){
-			dojo.debug("widget ID collision on ID: "+widget.widgetId);
+		if (this.widgetIds[widget.widgetId]) {
+			dojo.debug("widget ID collision on ID: " + widget.widgetId);
 		}
 		this.widgetIds[widget.widgetId] = widget;
-		// Widget.destroy already calls removeById(), so we don't need to
-		// connect() it here
-		//dojo.profile.end("dojo.widget.manager.add");
-	}
-
-	this.destroyAll = function(){
-		for(var x=this.widgets.length-1; x>=0; x--){
-			try{
-				// this.widgets[x].destroyChildren();
+	};
+	this.destroyAll = function () {
+		for (var x = this.widgets.length - 1; x >= 0; x--) {
+			try {
 				this.widgets[x].destroy(true);
 				delete this.widgets[x];
-			}catch(e){ }
+			}
+			catch (e) {
+			}
 		}
-	}
-
-	// FIXME: we should never allow removal of the root widget until all others
-	// are removed!
-	this.remove = function(widgetIndex){
-		if(dojo.lang.isNumber(widgetIndex)){
+	};
+	this.remove = function (widgetIndex) {
+		if (dojo.lang.isNumber(widgetIndex)) {
 			var tw = this.widgets[widgetIndex].widgetId;
+			delete this.topWidgets[tw];
 			delete this.widgetIds[tw];
 			this.widgets.splice(widgetIndex, 1);
-		}else{
+		} else {
 			this.removeById(widgetIndex);
 		}
-	}
-	
-	// FIXME: suboptimal performance
-	this.removeById = function(id) {
-		if(!dojo.lang.isString(id)){
+	};
+	this.removeById = function (id) {
+		if (!dojo.lang.isString(id)) {
 			id = id["widgetId"];
-			if(!id){ dojo.debug("invalid widget or id passed to removeById"); return; }
+			if (!id) {
+				dojo.debug("invalid widget or id passed to removeById");
+				return;
+			}
 		}
-		for (var i=0; i<this.widgets.length; i++){
-			if(this.widgets[i].widgetId == id){
+		for (var i = 0; i < this.widgets.length; i++) {
+			if (this.widgets[i].widgetId == id) {
 				this.remove(i);
 				break;
 			}
 		}
-	}
-
-	this.getWidgetById = function(id){
-		if(dojo.lang.isString(id)){
+	};
+	this.getWidgetById = function (id) {
+		if (dojo.lang.isString(id)) {
 			return this.widgetIds[id];
 		}
 		return id;
-	}
-
-	this.getWidgetsByType = function(type){
+	};
+	this.getWidgetsByType = function (type) {
 		var lt = type.toLowerCase();
-		var getType = (type.indexOf(":") < 0 ? 
-			function(x) { return x.widgetType.toLowerCase(); } :
-			function(x) { return x.getNamespacedType(); }
-		);
+		var getType = (type.indexOf(":") < 0 ? function (x) {
+			return x.widgetType.toLowerCase();
+		} : function (x) {
+			return x.getNamespacedType();
+		});
 		var ret = [];
-		dojo.lang.forEach(this.widgets, function(x){
-			if(getType(x) == lt){ret.push(x);}
+		dojo.lang.forEach(this.widgets, function (x) {
+			if (getType(x) == lt) {
+				ret.push(x);
+			}
 		});
 		return ret;
-	}
-
-	this.getWidgetsByFilter = function(unaryFunc, onlyOne){
+	};
+	this.getWidgetsByFilter = function (unaryFunc, onlyOne) {
 		var ret = [];
-		dojo.lang.every(this.widgets, function(x){
-			if(unaryFunc(x)){
+		dojo.lang.every(this.widgets, function (x) {
+			if (unaryFunc(x)) {
 				ret.push(x);
-				if(onlyOne){return false;}
+				if (onlyOne) {
+					return false;
+				}
 			}
 			return true;
 		});
 		return (onlyOne ? ret[0] : ret);
-	}
-
-	this.getAllWidgets = function() {
+	};
+	this.getAllWidgets = function () {
 		return this.widgets.concat();
-	}
-
-	//	added, trt 2006-01-20
-	this.getWidgetByNode = function(/* DOMNode */ node){
-		var w=this.getAllWidgets();
+	};
+	this.getWidgetByNode = function (node) {
+		var w = this.getAllWidgets();
 		node = dojo.byId(node);
-		for(var i=0; i<w.length; i++){
-			if(w[i].domNode==node){
+		for (var i = 0; i < w.length; i++) {
+			if (w[i].domNode == node) {
 				return w[i];
 			}
 		}
 		return null;
-	}
-
-	// shortcuts, baby
+	};
 	this.byId = this.getWidgetById;
 	this.byType = this.getWidgetsByType;
 	this.byFilter = this.getWidgetsByFilter;
 	this.byNode = this.getWidgetByNode;
-
-	// map of previousally discovered implementation names to constructors
 	var knownWidgetImplementations = {};
-
-	// support manually registered widget packages
 	var widgetPackages = ["dojo.widget"];
-	for (var i=0; i<widgetPackages.length; i++) {
-		// convenience for checking if a package exists (reverse lookup)
+	for (var i = 0; i < widgetPackages.length; i++) {
 		widgetPackages[widgetPackages[i]] = true;
 	}
-
-	this.registerWidgetPackage = function(pname) {
-		if(!widgetPackages[pname]){
+	this.registerWidgetPackage = function (pname) {
+		if (!widgetPackages[pname]) {
 			widgetPackages[pname] = true;
 			widgetPackages.push(pname);
 		}
-	}
-	
-	this.getWidgetPackageList = function() {
-		return dojo.lang.map(widgetPackages, function(elt) { return(elt!==true ? elt : undefined); });
-	}
-	
-	this.getImplementation = function(widgetName, ctorObject, mixins, ns){
-		// try and find a name for the widget
+	};
+	this.getWidgetPackageList = function () {
+		return dojo.lang.map(widgetPackages, function (elt) {
+			return (elt !== true ? elt : undefined);
+		});
+	};
+	this.getImplementation = function (widgetName, ctorObject, mixins, ns) {
 		var impl = this.getImplementationName(widgetName, ns);
-		if(impl){ 
-			// var tic = new Date();
+		if (impl) {
 			var ret = ctorObject ? new impl(ctorObject) : new impl();
-			// dojo.debug(new Date() - tic);
 			return ret;
 		}
-	}
-
+	};
 	function buildPrefixCache() {
-		for(var renderer in dojo.render){
-			if(dojo.render[renderer]["capable"] === true){
+		for (var renderer in dojo.render) {
+			if (dojo.render[renderer]["capable"] === true) {
 				var prefixes = dojo.render[renderer].prefixes;
-				for(var i=0; i<prefixes.length; i++){
+				for (var i = 0; i < prefixes.length; i++) {
 					renderPrefixCache.push(prefixes[i].toLowerCase());
 				}
 			}
 		}
-		// make sure we don't HAVE to prefix widget implementation names
-		// with anything to get them to render
-		//renderPrefixCache.push("");
-		// empty prefix is included automatically
 	}
-	
-	var findImplementationInModule = function(lowerCaseWidgetName, module){
-		if(!module){return null;}
-		for(var i=0, l=renderPrefixCache.length, widgetModule; i<=l; i++){
-			widgetModule = (i<l ? module[renderPrefixCache[i]] : module);
-			if(!widgetModule){continue;}
-			for(var name in widgetModule){
-				if(name.toLowerCase() == lowerCaseWidgetName){
+	var findImplementationInModule = function (lowerCaseWidgetName, module) {
+		if (!module) {
+			return null;
+		}
+		for (var i = 0, l = renderPrefixCache.length, widgetModule; i <= l; i++) {
+			widgetModule = (i < l ? module[renderPrefixCache[i]] : module);
+			if (!widgetModule) {
+				continue;
+			}
+			for (var name in widgetModule) {
+				if (name.toLowerCase() == lowerCaseWidgetName) {
 					return widgetModule[name];
 				}
 			}
 		}
 		return null;
-	}
-
-	var findImplementation = function(lowerCaseWidgetName, moduleName){
-		// locate registered widget module
+	};
+	var findImplementation = function (lowerCaseWidgetName, moduleName) {
 		var module = dojo.evalObjPath(moduleName, false);
-		// locate a widget implementation in the registered module for our current rendering environment
 		return (module ? findImplementationInModule(lowerCaseWidgetName, module) : null);
-	}
-
-	this.getImplementationName = function(widgetName, ns){
-		/*
-		 * Locate an implementation (constructor) for 'widgetName' in namespace 'ns' 
-		 * widgetNames are case INSENSITIVE
-		 * 
-		 * 1. Return value from implementation cache, if available, for quick turnaround.
-		 * 2. Locate a namespace registration for 'ns'
-		 * 3. If no namespace found, register the conventional one (ns.widget)
-		 * 4. Allow the namespace resolver (if any) to load a module for this widget.
-		 * 5. Permute the widget name and capable rendering prefixes to locate, cache, and return 
-		 *    an appropriate widget implementation.
-		 * 6. If no implementation is found, attempt to load the namespace manifest,
-		 *    and then look again for an implementation to cache and return.
-		 * 7. Use the deprecated widgetPackages registration system to attempt to locate the widget
-		 * 8. Fail
-		 */
+	};
+	this.getImplementationName = function (widgetName, ns) {
 		var lowerCaseWidgetName = widgetName.toLowerCase();
-
-		// default to dojo namespace
-		ns=ns||"dojo";
-		// use cache if available
-		var imps = knownWidgetImplementations[ns] || (knownWidgetImplementations[ns]={});
-		//if(!knownWidgetImplementations[ns]){knownWidgetImplementations[ns]={};}
+		ns = ns || "dojo";
+		var imps = knownWidgetImplementations[ns] || (knownWidgetImplementations[ns] = {});
 		var impl = imps[lowerCaseWidgetName];
-		if(impl){
+		if (impl) {
 			return impl;
 		}
-		
-		// (one time) store a list of the render prefixes we are capable of rendering
-		if(!renderPrefixCache.length){
+		if (!renderPrefixCache.length) {
 			buildPrefixCache();
 		}
-
-		// lookup namespace
 		var nsObj = dojo.ns.get(ns);
-		if(!nsObj){
-			// default to <ns>.widget by convention
-			dojo.ns.register(ns, ns + '.widget');
+		if (!nsObj) {
+			dojo.ns.register(ns, ns + ".widget");
 			nsObj = dojo.ns.get(ns);
 		}
-		
-		// allow the namespace to resolve the widget module
-		if(nsObj){nsObj.resolve(widgetName);}
-
-		// locate a widget implementation in the registered module for our current rendering environment
+		if (nsObj) {
+			nsObj.resolve(widgetName);
+		}
 		impl = findImplementation(lowerCaseWidgetName, nsObj.module);
-		if(impl){return(imps[lowerCaseWidgetName] = impl)};
-
-		// try to load a manifest to resolve this implemenation
+		if (impl) {
+			return (imps[lowerCaseWidgetName] = impl);
+		}
 		nsObj = dojo.ns.require(ns);
-		if((nsObj)&&(nsObj.resolver)){
+		if ((nsObj) && (nsObj.resolver)) {
 			nsObj.resolve(widgetName);
 			impl = findImplementation(lowerCaseWidgetName, nsObj.module);
-			if(impl){return(imps[lowerCaseWidgetName] = impl)};
+			if (impl) {
+				return (imps[lowerCaseWidgetName] = impl);
+			}
 		}
-	
-		// this is an error condition under new rules
-		dojo.deprecated('dojo.widget.Manager.getImplementationName', 
-			'Could not locate widget implementation for "' + widgetName + '" in "' + nsObj.module + '" registered to namespace "' + nsObj.name + '". '										
-			+ "Developers must specify correct namespaces for all non-Dojo widgets", "0.5");
-
-		// backward compat: if the user has not specified any namespace and their widget is not in dojo.widget.*
-		// search registered widget packages [sic]
-		// note: registerWidgetPackage itself is now deprecated 
-		for(var i=0; i<widgetPackages.length; i++){
+		dojo.deprecated("dojo.widget.Manager.getImplementationName", "Could not locate widget implementation for \"" + widgetName + "\" in \"" + nsObj.module + "\" registered to namespace \"" + nsObj.name + "\". " + "Developers must specify correct namespaces for all non-Dojo widgets", "0.5");
+		for (var i = 0; i < widgetPackages.length; i++) {
 			impl = findImplementation(lowerCaseWidgetName, widgetPackages[i]);
-			if(impl){return(imps[lowerCaseWidgetName] = impl)};
+			if (impl) {
+				return (imps[lowerCaseWidgetName] = impl);
+			}
 		}
-		
-		throw new Error('Could not locate widget implementation for "' + widgetName + '" in "' + nsObj.module + '" registered to namespace "' + nsObj.name + '"');
-	}
-
-	// FIXME: does it even belong in this module?
-	// NOTE: this method is implemented by DomWidget.js since not all
-	// hostenv's would have an implementation.
-	/*this.getWidgetFromPrimitive = function(baseRenderType){
-		dojo.unimplemented("dojo.widget.manager.getWidgetFromPrimitive");
-	}
-
-	this.getWidgetFromEvent = function(nativeEvt){
-		dojo.unimplemented("dojo.widget.manager.getWidgetFromEvent");
-	}*/
-
-	// Catch window resize events and notify top level widgets
-	this.resizing=false;
-	this.onWindowResized = function(){
-		if(this.resizing){
-			return;	// duplicate event
+		throw new Error("Could not locate widget implementation for \"" + widgetName + "\" in \"" + nsObj.module + "\" registered to namespace \"" + nsObj.name + "\"");
+	};
+	this.resizing = false;
+	this.onWindowResized = function () {
+		if (this.resizing) {
+			return;
 		}
-		try{
-			this.resizing=true;
-			for(var id in this.topWidgets){
+		try {
+			this.resizing = true;
+			for (var id in this.topWidgets) {
 				var child = this.topWidgets[id];
-				if(child.checkSize ){
+				if (child.checkSize) {
 					child.checkSize();
 				}
 			}
-		}catch(e){
-		}finally{
-			this.resizing=false;
 		}
+		catch (e) {
+		}
+		finally {
+			this.resizing = false;
+		}
+	};
+	if (typeof window != "undefined") {
+		dojo.addOnLoad(this, "onWindowResized");
+		dojo.event.connect(window, "onresize", this, "onWindowResized");
 	}
-	if(typeof window != "undefined") {
-		dojo.addOnLoad(this, 'onWindowResized');							// initial sizing
-		dojo.event.connect(window, 'onresize', this, 'onWindowResized');	// window resize
-	}
-
-	// FIXME: what else?
 };
-
-(function(){
+(function () {
 	var dw = dojo.widget;
 	var dwm = dw.manager;
 	var h = dojo.lang.curry(dojo.lang, "hitch", dwm);
-	var g = function(oldName, newName){
-		dw[(newName||oldName)] = h(oldName);
-	}
-	// copy the methods from the default manager (this) to the widget namespace
+	var g = function (oldName, newName) {
+		dw[(newName || oldName)] = h(oldName);
+	};
 	g("add", "addWidget");
 	g("destroyAll", "destroyAllWidgets");
 	g("remove", "removeWidget");
@@ -41376,22 +26028,22 @@
 	g("getWidgetsByType", "byType");
 	g("getWidgetsByFilter", "byFilter");
 	g("getWidgetByNode", "byNode");
-	dw.all = function(n){
+	dw.all = function (n) {
 		var widgets = dwm.getAllWidgets.apply(dwm, arguments);
-		if(arguments.length > 0) {
+		if (arguments.length > 0) {
 			return widgets[n];
 		}
 		return widgets;
-	}
+	};
 	g("registerWidgetPackage");
 	g("getImplementation", "getWidgetImplementation");
 	g("getImplementationName", "getWidgetImplementationName");
-
 	dw.widgets = dwm.widgets;
 	dw.widgetIds = dwm.widgetIds;
 	dw.root = dwm.root;
 })();
 
+
 __CPAN_FILE__ src/widget/DatePicker.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -41403,7 +26055,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-	dojo.provide("dojo.widget.DatePicker");
+dojo.provide("dojo.widget.DatePicker");
 dojo.require("dojo.date.common");
 dojo.require("dojo.date.format");
 dojo.require("dojo.date.serialize");
@@ -41412,502 +26064,335 @@
 dojo.require("dojo.event.*");
 dojo.require("dojo.dom");
 dojo.require("dojo.html.style");
-
-
-dojo.widget.defineWidget(
-	"dojo.widget.DatePicker",
-	dojo.widget.HtmlWidget,
-	{	
-
-		/*
-		summary: 
-			Base class for a stand-alone DatePicker widget 
-			which makes it easy to select a date, or switch by month and/or year. 
-		description: 
-			A stand-alone DatePicker widget that makes it  
-			easy to select a date, or increment by week, month, and/or year. 
-			It is designed to be used on its own, or inside of other widgets to  
-			(see dojo.widget.DropdownDatePicker) or other similar combination widgets. 
-		 	              
-			Dates attributes passed in the `RFC 3339` format:
-			http://www.faqs.org/rfcs/rfc3339.html (2005-06-30T08:05:00-07:00)
-			so that they are serializable and locale-independent.
-		
-		usage: 
-			var datePicker = dojo.widget.createWidget("DatePicker", {},   
-			dojo.byId("datePickerNode")); 
-		 	 
-			<div dojoType="DatePicker"></div> 
-		*/
-
-		//start attributes
-		
-		// value: String|Date
-		//	form value property if =='today' will be today's date
-		value: "", 
-
-		// name: String
-		// 	name of the form element
-		name: "",
-
-		// displayWeeks: Integer
-		//	total weeks to display default 
-		displayWeeks: 6, 
-
-		// adjustWeeks: Boolean
-		//	if true, weekly size of calendar changes to acomodate the month if false, 42 day format is used
-		adjustWeeks: false,
-
-		// startDate: String|Date
-		//	first available date in the calendar set
-		startDate: "1492-10-12",
-
-		// endDate: String|Date
-		//	last available date in the calendar set
-		endDate: "2941-10-12",
-
-		// weekStartsOn: Integer
-		//	adjusts the first day of the week 0==Sunday..6==Saturday
-		weekStartsOn: "",
-
-		// storedDate: String
-		//	deprecated use value instead
-		storedDate: "",
-
-		// staticDisplay: Boolean
-		//	disable all incremental controls, must pick a date in the current display
-		staticDisplay: false,
-		
-		// dayWidth: String
-		//	how to render the names of the days in the header. see dojo.date.getDayNames
-		dayWidth: 'narrow',
-
-		classNames: {
-		// summary:
-		//	stores a list of class names that may be overriden
-		//	TODO: this is not good; can't be adjusted via markup, etc. since it's an array
-			previous: "previousMonth",
-			disabledPrevious: "previousMonthDisabled",
-			current: "currentMonth",
-			disabledCurrent: "currentMonthDisabled",
-			next: "nextMonth",
-			disabledNext: "nextMonthDisabled",
-			currentDate: "currentDate",
-			selectedDate: "selectedItem"
-		},
-		templatePath:  dojo.uri.dojoUri("src/widget/templates/DatePicker.html"),
-		templateCssPath:  dojo.uri.dojoUri("src/widget/templates/DatePicker.css"),
-
-		postMixInProperties: function(){
-			// summary: see dojo.widget.DomWidget
-
-			dojo.widget.DatePicker.superclass.postMixInProperties.apply(this, arguments);
-			if(this.storedDate){
-				dojo.deprecated("dojo.widget.DatePicker", "use 'value' instead of 'storedDate'", "0.5");
-				this.value=this.storedDate;
-			}
-			this.startDate = dojo.date.fromRfc3339(this.startDate);
-			this.endDate = dojo.date.fromRfc3339(this.endDate);
-			this.startDate.setHours(0,0,0,0); //adjust startDate to be exactly midnight
-			this.endDate.setHours(24,0,0,-1); //adjusting endDate to be a fraction of a second before  midnight
-			if(!this.weekStartsOn){
-				this.weekStartsOn=dojo.date.getFirstDayOfWeek(this.lang);
-			}
-			this.today = new Date();
-			this.today.setHours(0,0,0,0);
-			if(typeof(this.value)=='string'&&this.value.toLowerCase()=='today'){
-				this.value = new Date();
-			}else if(this.value && (typeof this.value=="string") && (this.value.split("-").length > 2)) {
-				this.value = dojo.date.fromRfc3339(this.value);
-				this.value.setHours(0,0,0,0);
-			}
-		},
-
-		fillInTemplate: function(args, frag) {
-			// summary: see dojo.widget.DomWidget
-
-			dojo.widget.DatePicker.superclass.fillInTemplate.apply(this, arguments);
-
-			// Copy style info from input node to output node
-			var source = this.getFragNodeRef(frag);
-			dojo.html.copyStyle(this.domNode, source);
-
-			this.weekTemplate = dojo.dom.removeNode(this.calendarWeekTemplate);
-			this._preInitUI(this.value ? this.value : this.today, false, true); //init UI with date selected ONLY if user supplies one
-
-			// Insert localized day names in the template
-			var dayLabels = dojo.lang.unnest(dojo.date.getNames('days', this.dayWidth, 'standAlone', this.lang)); //if we dont use unnest, we risk modifying the dayLabels array inside of dojo.date and screwing up other calendars on the page
-			if(this.weekStartsOn > 0){
-				//adjust dayLabels for different first day of week. ie: Monday or Thursday instead of Sunday
-				for(var i=0;i<this.weekStartsOn;i++){
-					dayLabels.push(dayLabels.shift());
-				}
-			}
-			var dayLabelNodes = this.dayLabelsRow.getElementsByTagName("td");
- 			for(i=0; i<7; i++) {
-				dayLabelNodes.item(i).innerHTML = dayLabels[i];
-			}
-
-			if(this.value){
-				this.setValue(this.value);
-			}
-
-		},
-		
-		getValue: function() {
-			// summary: return current date in RFC 3339 format
-			return dojo.date.toRfc3339(new Date(this.value),'dateOnly'); /*String*/
-		},
-
-		getDate: function() {
-			// summary: return current date as a Date object
-			return this.value; /*Date*/
-		},
-
-		setValue: function(/*Date|String*/rfcDate) {
-			//summary: set the current date from RFC 3339 formatted string or a date object, synonymous with setDate
-			this.setDate(rfcDate);
-		},			
-
-		setDate: function(/*Date|String*/dateObj) {
-			//summary: set the current date and update the UI
-			if(typeof dateObj=="string"){
-				this.value = dojo.date.fromRfc3339(dateObj);
-			}else{
-				this.value = new Date(dateObj);
-			}
-			this.value.setHours(0,0,0,0);
-			if(this.selectedNode!=null){
-				dojo.html.removeClass(this.selectedNode,this.classNames.selectedDate);
-			}
-			if(this.clickedNode!=null){
-				dojo.html.addClass(this.clickedNode,this.classNames.selectedDate);
-				this.selectedNode = this.clickedNode;
-			}else{
-				//only call this if setDate was called by means other than clicking a date
-				this._preInitUI(this.value,false,true);
-			}
-			this.clickedNode=null;
-			this.onValueChanged(this.value);
-		},
-
-		_preInitUI: function(dateObj,initFirst,initUI) {
-			/*
-	 	              To get a sense of what month to highlight, we initialize on 
-	 	              the first Saturday of each month, since that will be either the first  
-	 	              of two or the second of three months being partially displayed, and  
-	 	              then work forwards and backwards from that point.
-			*/
-
-			//initFirst is to tell _initFirstDay if you want first day of the displayed calendar, or first day of the week for dateObj
-			//initUI tells preInitUI to go ahead and run initUI if set to true
-			if(dateObj<this.startDate||dateObj>this.endDate){
-				dateObj = new Date((dateObj<this.startDate)?this.startDate:this.endDate);
-			}
-			this.firstDay = this._initFirstDay(dateObj,initFirst);
-			this.selectedIsUsed = false;
-			this.currentIsUsed = false;
-			var nextDate = new Date(this.firstDay);
-			var tmpMonth = nextDate.getMonth();
-			this.curMonth = new Date(nextDate);
-			this.curMonth.setDate(nextDate.getDate()+6); //first saturday gives us the current Month
-			this.curMonth.setDate(1);
-			if(this.displayWeeks=="" || this.adjustWeeks){
-				this.adjustWeeks = true;
-				this.displayWeeks = Math.ceil((dojo.date.getDaysInMonth(this.curMonth) + this._getAdjustedDay(this.curMonth))/7);
-			}
-			var days = this.displayWeeks*7; //init total days to display
-			if(dojo.date.diff(this.startDate,this.endDate, dojo.date.dateParts.DAY) < days){
-				this.staticDisplay = true;
-				if(dojo.date.diff(nextDate,this.endDate, dojo.date.dateParts.DAY) > days){
-					this._preInitUI(this.startDate,true,false);
-					nextDate = new Date(this.firstDay);
-				}
-				this.curMonth = new Date(nextDate);
-				this.curMonth.setDate(nextDate.getDate()+6);
-				this.curMonth.setDate(1);
-				var curClass = (nextDate.getMonth() == this.curMonth.getMonth())?'current':'previous';
-			}
-			if(initUI){
-				this._initUI(days);
-			}
-		},
-		_initUI: function(days) {
-			dojo.dom.removeChildren(this.calendarDatesContainerNode);
-			for(var i=0;i<this.displayWeeks;i++){
-				this.calendarDatesContainerNode.appendChild(this.weekTemplate.cloneNode(true));
-			}
-
-			var nextDate = new Date(this.firstDay);
-			this._setMonthLabel(this.curMonth.getMonth());
-			this._setYearLabels(this.curMonth.getFullYear());
-			var calendarNodes = this.calendarDatesContainerNode.getElementsByTagName("td");
-			var calendarRows = this.calendarDatesContainerNode.getElementsByTagName("tr");
-			var currentCalendarNode;
-			for(i=0;i<days;i++){
-				//this is our new UI loop... one loop to rule them all, and in the datepicker bind them
-				currentCalendarNode = calendarNodes.item(i);
-				currentCalendarNode.innerHTML = nextDate.getDate();
-				var curClass = (nextDate.getMonth()<this.curMonth.getMonth())?'previous':(nextDate.getMonth()==this.curMonth.getMonth())?'current':'next';
-				var mappedClass = curClass;
-				if(this._isDisabledDate(nextDate)){
-					var classMap={previous:"disabledPrevious",current:"disabledCurrent",next:"disabledNext"};
-					mappedClass=classMap[curClass];
-				}
-				dojo.html.setClass(currentCalendarNode, this._getDateClassName(nextDate, mappedClass));
-				if(dojo.html.hasClass(currentCalendarNode,this.classNames.selectedDate)){
-					this.selectedNode = currentCalendarNode;
-				}
-				nextDate = dojo.date.add(nextDate, dojo.date.dateParts.DAY, 1);
-			}
-			this.lastDay = dojo.date.add(nextDate,dojo.date.dateParts.DAY,-1);
-			this._initControls();
-		},
-		_initControls: function(){
-			var d = this.firstDay;
-			var d2 = this.lastDay;
-			var decWeek, incWeek, decMonth, incMonth, decYear, incYear;
-			decWeek = incWeek = decMonth = incMonth = decYear = incYear = !this.staticDisplay;
-			with(dojo.date.dateParts){
-				var add = dojo.date.add;
-				if(decWeek && add(d,DAY,(-1*(this._getAdjustedDay(d)+1)))<this.startDate){
-					decWeek = decMonth = decYear = false;
-				}
-				if(incWeek && d2>this.endDate){
-					incWeek = incMonth = incYear = false;
-				}
-				if(decMonth && add(d,DAY,-1)<this.startDate){
-					decMonth = decYear = false;
-				}
-				if(incMonth && add(d2,DAY,1)>this.endDate){
-					incMonth = incYear = false;
-				}
-				if(decYear && add(d2,YEAR,-1)<this.startDate){
-					decYear = false;
-				}
-				if(incYear && add(d,YEAR,1)>this.endDate){
-					incYear = false;
-				}
-			}
-
-			function enableControl(node, enabled){
-				dojo.html.setVisibility(node, enabled ? '' : 'hidden');
-			}
-			enableControl(this.decreaseWeekNode,decWeek);
-			enableControl(this.increaseWeekNode,incWeek);
-			enableControl(this.decreaseMonthNode,decMonth);
-			enableControl(this.increaseMonthNode,incMonth);
-			enableControl(this.previousYearLabelNode,decYear);
-			enableControl(this.nextYearLabelNode,incYear);
-		},
-		
-		_incrementWeek: function(evt) {
-			var d = new Date(this.firstDay);
-			switch(evt.target) {
-				case this.increaseWeekNode.getElementsByTagName("img").item(0): 
-				case this.increaseWeekNode:
-					var tmpDate = dojo.date.add(d, dojo.date.dateParts.WEEK, 1);
-					if(tmpDate < this.endDate){
-						d = dojo.date.add(d, dojo.date.dateParts.WEEK, 1);
-					}
-					break;
-				case this.decreaseWeekNode.getElementsByTagName("img").item(0):
-				case this.decreaseWeekNode:
-					if(d >= this.startDate){
-						d = dojo.date.add(d, dojo.date.dateParts.WEEK, -1);
-					}
-					break;
-			}
-			this._preInitUI(d,true,true);
-		},
-	
-		_incrementMonth: function(evt) {
-			var d = new Date(this.curMonth);
-			var tmpDate = new Date(this.firstDay);
-			switch(evt.currentTarget) {
-				case this.increaseMonthNode.getElementsByTagName("img").item(0):
-				case this.increaseMonthNode:
-					tmpDate = dojo.date.add(tmpDate, dojo.date.dateParts.DAY, this.displayWeeks*7);
-					if(tmpDate < this.endDate){
-						d = dojo.date.add(d, dojo.date.dateParts.MONTH, 1);
-					}else{
-						var revertToEndDate = true;
-					}
-					break;
-				case this.decreaseMonthNode.getElementsByTagName("img").item(0):
-				case this.decreaseMonthNode:
-					if(tmpDate > this.startDate){
-						d = dojo.date.add(d, dojo.date.dateParts.MONTH, -1);
-					}else{
-						var revertToStartDate = true;
-					}
-					break;
-			}
-			if(revertToStartDate){
-				d = new Date(this.startDate);
-			}else if(revertToEndDate){
-				d = new Date(this.endDate);
-			}
-			this._preInitUI(d,false,true);
-		},
-	
-		_incrementYear: function(evt) {
-			var year = this.curMonth.getFullYear();
-			var tmpDate = new Date(this.firstDay);
-			switch(evt.target) {
-				case this.nextYearLabelNode:
-					tmpDate = dojo.date.add(tmpDate, dojo.date.dateParts.YEAR, 1);
-					if(tmpDate<this.endDate){
-						year++;
-					}else{
-						var revertToEndDate = true;
-					}
-					break;
-				case this.previousYearLabelNode:
-					tmpDate = dojo.date.add(tmpDate, dojo.date.dateParts.YEAR, -1);
-					if(tmpDate>this.startDate){
-						year--;
-					}else{
-						var revertToStartDate = true;
-					}
-					break;
-			}
-			var d;
-			if(revertToStartDate){
-				d = new Date(this.startDate);
-			}else if(revertToEndDate){
-				d = new Date(this.endDate);
-			}else{
-				d = new Date(year, this.curMonth.getMonth(), 1);
-			}
-			this._preInitUI(d,false,true);
-		},
-	
-		onIncrementWeek: function(/*Event*/evt) {
-			// summary: handler for increment week event
-			evt.stopPropagation();
-			if(!this.staticDisplay){
-				this._incrementWeek(evt);
-			}
-		},
-	
-		onIncrementMonth: function(/*Event*/evt) {
-			// summary: handler for increment month event
-			evt.stopPropagation();
-			if(!this.staticDisplay){
-				this._incrementMonth(evt);
-			}
-		},
-		
-		onIncrementYear: function(/*Event*/evt) {
-			// summary: handler for increment year event
-			evt.stopPropagation();
-			if(!this.staticDisplay){
-				this._incrementYear(evt);
-			}
-		},
-	
-		_setMonthLabel: function(monthIndex) {
-			this.monthLabelNode.innerHTML = dojo.date.getNames('months', 'wide', 'standAlone', this.lang)[monthIndex];
-		},
-		
-		_setYearLabels: function(year) {
-			var y = year - 1;
-			var that = this;
-			function f(n){
-				that[n+"YearLabelNode"].innerHTML =
-					dojo.date.format(new Date(y++, 0), {formatLength:'yearOnly', locale:that.lang});
-			}
-			f("previous");
-			f("current");
-			f("next");
-		},
-		
-		_getDateClassName: function(date, monthState) {
-			var currentClassName = this.classNames[monthState];
-			//we use Number comparisons because 2 dateObjects never seem to equal each other otherwise
-			if ((!this.selectedIsUsed && this.value) && (Number(date) == Number(this.value))) {
-				currentClassName = this.classNames.selectedDate + " " + currentClassName;
-				this.selectedIsUsed = true;
-			}
-			if((!this.currentIsUsed) && (Number(date) == Number(this.today))) {
-				currentClassName = currentClassName + " "  + this.classNames.currentDate;
-				this.currentIsUsed = true;
-			}
-			return currentClassName;
-		},
-	
-		onClick: function(/*Event*/evt) {
-			//summary: the click event handler
-			dojo.event.browser.stopEvent(evt);
-		},
-
-		_handleUiClick: function(/*Event*/evt) {
-			var eventTarget = evt.target;
-			if(eventTarget.nodeType != dojo.dom.ELEMENT_NODE){eventTarget = eventTarget.parentNode;}
-			dojo.event.browser.stopEvent(evt);
-			this.selectedIsUsed = this.todayIsUsed = false;
-			var month = this.curMonth.getMonth();
-			var year = this.curMonth.getFullYear();
-			if(dojo.html.hasClass(eventTarget, this.classNames["disabledPrevious"])||dojo.html.hasClass(eventTarget, this.classNames["disabledCurrent"])||dojo.html.hasClass(eventTarget, this.classNames["disabledNext"])){
-				return; //this date is disabled... ignore it
-			}else if (dojo.html.hasClass(eventTarget, this.classNames["next"])) {
-				month = ++month % 12;
-				if(month===0){++year;}
-			} else if (dojo.html.hasClass(eventTarget, this.classNames["previous"])) {
-				month = --month % 12;
-				if(month==11){--year;}
-			}
-			this.clickedNode = eventTarget;
-			this.setDate(new Date(year, month, eventTarget.innerHTML));
-		},
-		
-		onValueChanged: function(/*Date*/date) {
-			//summary: the set date event handler
-		},
-		
-		_isDisabledDate: function(dateObj){
-			if(dateObj<this.startDate||dateObj>this.endDate){
-				return true;
-			}
-
-			return this.isDisabledDate(dateObj, this.lang);
-		},
-
-		isDisabledDate: function(/*Date*/dateObj, /*String?*/locale){
-		// summary:
-		//	May be overridden to disable certain dates in the calendar e.g. isDisabledDate=dojo.date.isWeekend
-
-			return false; // Boolean
-		},
-
-		_initFirstDay: function(/*Date*/dateObj, /*Boolean*/adj){
-			//adj: false for first day of month, true for first day of week adjusted by startOfWeek
-			var d = new Date(dateObj);
-			if(!adj){d.setDate(1);}
-			d.setDate(d.getDate()-this._getAdjustedDay(d,this.weekStartsOn));
-			d.setHours(0,0,0,0);
-			return d; // Date
-		},
-
-		_getAdjustedDay: function(/*Date*/dateObj){
-			//summary: used to adjust date.getDay() values to the new values based on the current first day of the week value
-			var days = [0,1,2,3,4,5,6];
-			if(this.weekStartsOn>0){
-				for(var i=0;i<this.weekStartsOn;i++){
-					days.unshift(days.pop());
-				}
-			}
-			return days[dateObj.getDay()]; // Number: 0..6 where 0=Sunday
-		},
-
-		destroy: function(){
-			dojo.widget.DatePicker.superclass.destroy.apply(this, arguments);
-			dojo.html.destroyNode(this.weekTemplate);
+dojo.widget.defineWidget("dojo.widget.DatePicker", dojo.widget.HtmlWidget, {value:"", name:"", displayWeeks:6, adjustWeeks:false, startDate:"1492-10-12", endDate:"2941-10-12", weekStartsOn:"", staticDisplay:false, dayWidth:"narrow", classNames:{previous:"previousMonth", disabledPrevious:"previousMonthDisabled", current:"currentMonth", disabledCurrent:"currentMonthDisabled", next:"nextMonth", disabledNext:"nextMonthDisabled", currentDate:"currentDate", selectedDate:"selectedDate"}, templateString:"<div class=\"datePickerContainer\" dojoAttachPoint=\"datePickerContainerNode\">\n\t<table cellspacing=\"0\" cellpadding=\"0\" class=\"calendarContainer\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<td class=\"monthWrapper\" valign=\"top\">\n\t\t\t\t\t<table class=\"monthContainer\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td class=\"monthCurve monthCurveTL\" valign=\"top\"></td>\n\t\t\t\t\t\t\t<td class=\"monthLabelContainer\" valign=\"top\">\n\t\t\t\t\t\t\t\t<span dojoAttachPoint=\"increaseWeekNode\" \n\t\t\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onIncrementWeek;\" \n\t\t\t\t\t\t\t\t\tclass=\"incrementControl increase\">\n\t\t\t\t\t\t\t\t\t<img src=\"${dojoWidgetModuleUri}templates/images/incrementMonth.png\" \n\t\t\t\t\t\t\t\t\talt=\"&darr;\" style=\"width:7px;height:5px;\" />\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span \n\t\t\t\t\t\t\t\t\tdojoAttachPoint=\"increaseMonthNode\" \n\t\t\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onIncrementMonth;\" class=\"incrementControl increase\">\n\t\t\t\t\t\t\t\t\t<img src=\"${dojoWidgetModuleUri}templates/images/incrementMonth.png\" \n\t\t\t\t\t\t\t\t\t\talt=\"&darr;\"  dojoAttachPoint=\"incrementMonthImageNode\">\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span \n\t\t\t\t\t\t\t\t\tdojoAttachPoint=\"decreaseWeekNode\" \n\t\t\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onIncrementWeek;\" \n\t\t\t\t\t\t\t\t\tclass=\"incrementControl decrease\">\n\t\t\t\t\t\t\t\t\t<img src=\"${dojoWidgetModuleUri}templates/images/decrementMonth.png\" alt=\"&uarr;\" style=\"width:7px;height:5px;\" />\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span \n\t\t\t\t\t\t\t\t\tdojoAttachPoint=\"decreaseMonthNode\" \n\t\t\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onIncrementMonth;\" class=\"incrementControl decrease\">\n\t\t\t\t\t\t\t\t\t<img src=\"${dojoWidgetModuleUri}templates/images/decrementMonth.png\" \n\t\t\t\t\t\t\t\t\t\talt=\"&uarr;\" dojoAttachPoint=\"decrementMonthImageNode\">\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span dojoAttachPoint=\"monthLabelNode\" class=\"month\"></span>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td class=\"monthCurve monthCurveTR\" valign=\"top\"></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td colspan=\"3\">\n\t\t\t\t\t<table class=\"calendarBodyContainer\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t<tr dojoAttachPoint=\"dayLabelsRow\">\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t<tbody dojoAttachPoint=\"calendarDatesContainerNode\" \n\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: _handleUiClick;\">\n\t\t\t\t\t\t\t<tr dojoAttachPoint=\"calendarWeekTemplate\">\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\t<tr>\n\t\t\t\t<td colspan=\"3\" class=\"yearWrapper\">\n\t\t\t\t\t<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" class=\"yearContainer\">\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td class=\"curveBL\" valign=\"top\"></td>\n\t\t\t\t\t\t\t<td valign=\"top\">\n\t\t\t\t\t\t\t\t<h3 class=\"yearLabel\">\n\t\t\t\t\t\t\t\t\t<span dojoAttachPoint=\"previousYearLabelNode\"\n\t\t\t\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onIncrementYear;\" class=\"previousYear\"></span>\n\t\t\t\t\t\t\t\t\t<span class=\"selectedYear\" dojoAttachPoint=\"currentYearLabelNode\"></span>\n\t\t\t\t\t\t\t\t\t<span dojoAttachPoint=\"nextYearLabelNode\" \n\t\t\t\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onIncrementYear;\" class=\"nextYear\"></span>\n\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td class=\"curveBR\" valign=\"top\"></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</tfoot>\n\t</table>\n</div>\n", templateCssString:".datePickerContainer {\n\twidth:164px; /* needed for proper user styling */\n}\n\n.calendarContainer {\n/*\tborder:1px solid #566f8f;*/\n}\n\n.calendarBodyContainer {\n\twidth:100%; /* needed for the explode effect (explain?) */\n\tbackground: #7591bc url(\"images/dpBg.gif\") top left repeat-x;\n}\n\n.calendarBodyContainer thead tr td {\n\tcolor:#293a4b;\n\tfont:bold 0.75em Helvetica, Arial, Verdana, sans-serif;\n\ttext-align:center;\n\tpadding:0.25em;\n\tbackground: url(\"images/dpHorizLine.gif\") bottom left repeat-x;\n}\n\n.calendarBodyContainer tbody tr td {\n\tcolor:#fff;\n\tfont:bold 0.7em Helvetica, Arial, Verdana, sans-serif;\n\ttext-align:center;\n\tpadding:0.4em;\n\tbackground: url(\"images/dpVertLine.gif\") top right repeat-y;\n\tcursor:pointer;\n\tcursor:hand;\n}\n\n\n.monthWrapper {\n\tpadding-bottom:2px;\n\tbackground: url(\"images/dpHorizLine.gif\") bottom left repeat-x;\n}\n\n.monthContainer {\n\twidth:100%;\n}\n\n.monthLabelContainer {\n\ttext-align:center;\n\tfont:bold 0.75em Helvetica, Arial, Verdana, sans-serif;\n\tbackground: url(\"images/dpMonthBg.png\") repeat-x top left !important;\n\tcolor:#293a4b;\n\tpadding:0.25em;\n}\n\n.monthCurve {\n\twidth:12px;\n}\n\n.monthCurveTL {\n\tbackground: url(\"images/dpCurveTL.png\") no-repeat top left !important;\n}\n\n.monthCurveTR {\n\t\tbackground: url(\"images/dpCurveTR.png\") no-repeat top right !important;\n}\n\n\n.yearWrapper {\n\tbackground: url(\"images/dpHorizLineFoot.gif\") top left repeat-x;\n\tpadding-top:2px;\n}\n\n.yearContainer {\n\twidth:100%;\n}\n\n.yearContainer td {\n\tbackground:url(\"images/dpYearBg.png\") top left repeat-x;\n}\n\n.yearContainer .yearLabel {\n\tmargin:0;\n\tpadding:0.45em 0 0.45em 0;\n\tcolor:#fff;\n\tfont:bold 0.75em Helvetica, Arial, Verdana, sans-serif;\n\ttext-align:center;\n}\n\n.curveBL {\n\tbackground: url(\"images/dpCurveBL.png\") bottom left no-repeat !important;\n\twidth:9px !important;\n\tpadding:0;\n\tmargin:0;\n}\n\n.curveBR {\n\tbackground: url(\"images/dpCurveBR.png\") bottom right no-repeat !important;\n\twidth:9px !important;\n\tpadding:0;\n\tmargin:0;\n}\n\n\n.previousMonth {\n\tbackground-color:#6782a8 !important;\n}\n\n.previousMonthDisabled {\n\tbackground-color:#a4a5a6 !important;\n\tcursor:default !important\n}\n.currentMonth {\n}\n\n.currentMonthDisabled {\n\tbackground-color:#bbbbbc !important;\n\tcursor:default !important\n}\n.nextMonth {\n\tbackground-color:#6782a8 !important;\n}\n.nextMonthDisabled {\n\tbackground-color:#a4a5a6 !important;\n\tcursor:default !important;\n}\n\n.currentDate {\n\ttext-decoration:underline;\n\tfont-style:italic;\n}\n\n.selectedDate {\n\tbackground-color:#fff !important;\n\tcolor:#6782a8 !important;\n}\n\n.yearLabel .selectedYear {\n\tpadding:0.2em;\n\tbackground-color:#9ec3fb !important;\n}\n\n.nextYear, .previousYear {\n\tcursor:pointer;cursor:hand;\n\tpadding:0;\n}\n\n.nextYear {\n\tmargin:0 0 0 0.55em;\n}\n\n.previousYear {\n\tmargin:0 0.55em 0 0;\n}\n\n.incrementControl {\n\tcursor:pointer;cursor:hand;\n\twidth:1em;\n}\n\n.increase {\n\tfloat:right;\n}\n\n.decrease {\n\tfloat:left;\n}\n\n.lastColumn {\n\tbackground-image:none !important;\n}\n\n\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/DatePicker.css"), postMixInProperties:function () {
+	dojo.widget.DatePicker.superclass.postMixInProperties.apply(this, arguments);
+	if (!this.weekStartsOn) {
+		this.weekStartsOn = dojo.date.getFirstDayOfWeek(this.lang);
+	}
+	this.today = new Date();
+	this.today.setHours(0, 0, 0, 0);
+	if (typeof (this.value) == "string" && this.value.toLowerCase() == "today") {
+		this.value = new Date();
+	} else {
+		if (this.value && (typeof this.value == "string") && (this.value.split("-").length > 2)) {
+			this.value = dojo.date.fromRfc3339(this.value);
+			this.value.setHours(0, 0, 0, 0);
 		}
 	}
-);
+}, fillInTemplate:function (args, frag) {
+	dojo.widget.DatePicker.superclass.fillInTemplate.apply(this, arguments);
+	var source = this.getFragNodeRef(frag);
+	dojo.html.copyStyle(this.domNode, source);
+	this.weekTemplate = dojo.dom.removeNode(this.calendarWeekTemplate);
+	this._preInitUI(this.value ? this.value : this.today, false, true);
+	var dayLabels = dojo.lang.unnest(dojo.date.getNames("days", this.dayWidth, "standAlone", this.lang));
+	if (this.weekStartsOn > 0) {
+		for (var i = 0; i < this.weekStartsOn; i++) {
+			dayLabels.push(dayLabels.shift());
+		}
+	}
+	var dayLabelNodes = this.dayLabelsRow.getElementsByTagName("td");
+	for (i = 0; i < 7; i++) {
+		dayLabelNodes.item(i).innerHTML = dayLabels[i];
+	}
+	if (this.value) {
+		this.setValue(this.value);
+	}
+}, getValue:function () {
+	return dojo.date.toRfc3339(new Date(this.value), "dateOnly");
+}, getDate:function () {
+	return this.value;
+}, setValue:function (rfcDate) {
+	this.setDate(rfcDate);
+}, setDate:function (dateObj) {
+	if (dateObj == "") {
+		this.value = "";
+		this._preInitUI(this.curMonth, false, true);
+	} else {
+		if (typeof dateObj == "string") {
+			this.value = dojo.date.fromRfc3339(dateObj);
+			this.value.setHours(0, 0, 0, 0);
+		} else {
+			this.value = new Date(dateObj);
+			this.value.setHours(0, 0, 0, 0);
+		}
+	}
+	if (this.selectedNode != null) {
+		dojo.html.removeClass(this.selectedNode, this.classNames.selectedDate);
+	}
+	if (this.clickedNode != null) {
+		dojo.debug("adding selectedDate");
+		dojo.html.addClass(this.clickedNode, this.classNames.selectedDate);
+		this.selectedNode = this.clickedNode;
+	} else {
+		this._preInitUI(this.value, false, true);
+	}
+	this.clickedNode = null;
+	this.onValueChanged(this.value);
+}, _preInitUI:function (dateObj, initFirst, initUI) {
+	if (typeof (this.startDate) == "string") {
+		this.startDate = dojo.date.fromRfc3339(this.startDate);
+	}
+	if (typeof (this.endDate) == "string") {
+		this.endDate = dojo.date.fromRfc3339(this.endDate);
+	}
+	this.startDate.setHours(0, 0, 0, 0);
+	this.endDate.setHours(24, 0, 0, -1);
+	if (dateObj < this.startDate || dateObj > this.endDate) {
+		dateObj = new Date((dateObj < this.startDate) ? this.startDate : this.endDate);
+	}
+	this.firstDay = this._initFirstDay(dateObj, initFirst);
+	this.selectedIsUsed = false;
+	this.currentIsUsed = false;
+	var nextDate = new Date(this.firstDay);
+	var tmpMonth = nextDate.getMonth();
+	this.curMonth = new Date(nextDate);
+	this.curMonth.setDate(nextDate.getDate() + 6);
+	this.curMonth.setDate(1);
+	if (this.displayWeeks == "" || this.adjustWeeks) {
+		this.adjustWeeks = true;
+		this.displayWeeks = Math.ceil((dojo.date.getDaysInMonth(this.curMonth) + this._getAdjustedDay(this.curMonth)) / 7);
+	}
+	var days = this.displayWeeks * 7;
+	if (dojo.date.diff(this.startDate, this.endDate, dojo.date.dateParts.DAY) < days) {
+		this.staticDisplay = true;
+		if (dojo.date.diff(nextDate, this.endDate, dojo.date.dateParts.DAY) > days) {
+			this._preInitUI(this.startDate, true, false);
+			nextDate = new Date(this.firstDay);
+		}
+		this.curMonth = new Date(nextDate);
+		this.curMonth.setDate(nextDate.getDate() + 6);
+		this.curMonth.setDate(1);
+		var curClass = (nextDate.getMonth() == this.curMonth.getMonth()) ? "current" : "previous";
+	}
+	if (initUI) {
+		this._initUI(days);
+	}
+}, _initUI:function (days) {
+	dojo.dom.removeChildren(this.calendarDatesContainerNode);
+	for (var i = 0; i < this.displayWeeks; i++) {
+		this.calendarDatesContainerNode.appendChild(this.weekTemplate.cloneNode(true));
+	}
+	var nextDate = new Date(this.firstDay);
+	this._setMonthLabel(this.curMonth.getMonth());
+	this._setYearLabels(this.curMonth.getFullYear());
+	var calendarNodes = this.calendarDatesContainerNode.getElementsByTagName("td");
+	var calendarRows = this.calendarDatesContainerNode.getElementsByTagName("tr");
+	var currentCalendarNode;
+	for (i = 0; i < days; i++) {
+		currentCalendarNode = calendarNodes.item(i);
+		currentCalendarNode.innerHTML = nextDate.getDate();
+		currentCalendarNode.setAttribute("djDateValue", nextDate.valueOf());
+		var curClass = (nextDate.getMonth() != this.curMonth.getMonth() && Number(nextDate) < Number(this.curMonth)) ? "previous" : (nextDate.getMonth() == this.curMonth.getMonth()) ? "current" : "next";
+		var mappedClass = curClass;
+		if (this._isDisabledDate(nextDate)) {
+			var classMap = {previous:"disabledPrevious", current:"disabledCurrent", next:"disabledNext"};
+			mappedClass = classMap[curClass];
+		}
+		dojo.html.setClass(currentCalendarNode, this._getDateClassName(nextDate, mappedClass));
+		if (dojo.html.hasClass(currentCalendarNode, this.classNames.selectedDate)) {
+			this.selectedNode = currentCalendarNode;
+		}
+		nextDate = dojo.date.add(nextDate, dojo.date.dateParts.DAY, 1);
+	}
+	this.lastDay = dojo.date.add(nextDate, dojo.date.dateParts.DAY, -1);
+	this._initControls();
+}, _initControls:function () {
+	var d = this.firstDay;
+	var d2 = this.lastDay;
+	var decWeek, incWeek, decMonth, incMonth, decYear, incYear;
+	decWeek = incWeek = decMonth = incMonth = decYear = incYear = !this.staticDisplay;
+	with (dojo.date.dateParts) {
+		var add = dojo.date.add;
+		if (decWeek && add(d, DAY, (-1 * (this._getAdjustedDay(d) + 1))) < this.startDate) {
+			decWeek = decMonth = decYear = false;
+		}
+		if (incWeek && d2 > this.endDate) {
+			incWeek = incMonth = incYear = false;
+		}
+		if (decMonth && add(d, DAY, -1) < this.startDate) {
+			decMonth = decYear = false;
+		}
+		if (incMonth && add(d2, DAY, 1) > this.endDate) {
+			incMonth = incYear = false;
+		}
+		if (decYear && add(d2, YEAR, -1) < this.startDate) {
+			decYear = false;
+		}
+		if (incYear && add(d, YEAR, 1) > this.endDate) {
+			incYear = false;
+		}
+	}
+	function enableControl(node, enabled) {
+		dojo.html.setVisibility(node, enabled ? "" : "hidden");
+	}
+	enableControl(this.decreaseWeekNode, decWeek);
+	enableControl(this.increaseWeekNode, incWeek);
+	enableControl(this.decreaseMonthNode, decMonth);
+	enableControl(this.increaseMonthNode, incMonth);
+	enableControl(this.previousYearLabelNode, decYear);
+	enableControl(this.nextYearLabelNode, incYear);
+}, _incrementWeek:function (evt) {
+	var d = new Date(this.firstDay);
+	switch (evt.target) {
+	  case this.increaseWeekNode.getElementsByTagName("img").item(0):
+	  case this.increaseWeekNode:
+		var tmpDate = dojo.date.add(d, dojo.date.dateParts.WEEK, 1);
+		if (tmpDate < this.endDate) {
+			d = dojo.date.add(d, dojo.date.dateParts.WEEK, 1);
+		}
+		break;
+	  case this.decreaseWeekNode.getElementsByTagName("img").item(0):
+	  case this.decreaseWeekNode:
+		if (d >= this.startDate) {
+			d = dojo.date.add(d, dojo.date.dateParts.WEEK, -1);
+		}
+		break;
+	}
+	this._preInitUI(d, true, true);
+}, _incrementMonth:function (evt) {
+	var d = new Date(this.curMonth);
+	var tmpDate = new Date(this.firstDay);
+	switch (evt.currentTarget) {
+	  case this.increaseMonthNode.getElementsByTagName("img").item(0):
+	  case this.increaseMonthNode:
+		tmpDate = dojo.date.add(tmpDate, dojo.date.dateParts.DAY, this.displayWeeks * 7);
+		if (tmpDate < this.endDate) {
+			d = dojo.date.add(d, dojo.date.dateParts.MONTH, 1);
+		} else {
+			var revertToEndDate = true;
+		}
+		break;
+	  case this.decreaseMonthNode.getElementsByTagName("img").item(0):
+	  case this.decreaseMonthNode:
+		if (tmpDate > this.startDate) {
+			d = dojo.date.add(d, dojo.date.dateParts.MONTH, -1);
+		} else {
+			var revertToStartDate = true;
+		}
+		break;
+	}
+	if (revertToStartDate) {
+		d = new Date(this.startDate);
+	} else {
+		if (revertToEndDate) {
+			d = new Date(this.endDate);
+		}
+	}
+	this._preInitUI(d, false, true);
+}, _incrementYear:function (evt) {
+	var year = this.curMonth.getFullYear();
+	var tmpDate = new Date(this.firstDay);
+	switch (evt.target) {
+	  case this.nextYearLabelNode:
+		tmpDate = dojo.date.add(tmpDate, dojo.date.dateParts.YEAR, 1);
+		if (tmpDate < this.endDate) {
+			year++;
+		} else {
+			var revertToEndDate = true;
+		}
+		break;
+	  case this.previousYearLabelNode:
+		tmpDate = dojo.date.add(tmpDate, dojo.date.dateParts.YEAR, -1);
+		if (tmpDate > this.startDate) {
+			year--;
+		} else {
+			var revertToStartDate = true;
+		}
+		break;
+	}
+	var d;
+	if (revertToStartDate) {
+		d = new Date(this.startDate);
+	} else {
+		if (revertToEndDate) {
+			d = new Date(this.endDate);
+		} else {
+			d = new Date(year, this.curMonth.getMonth(), 1);
+		}
+	}
+	this._preInitUI(d, false, true);
+}, onIncrementWeek:function (evt) {
+	evt.stopPropagation();
+	if (!this.staticDisplay) {
+		this._incrementWeek(evt);
+	}
+}, onIncrementMonth:function (evt) {
+	evt.stopPropagation();
+	if (!this.staticDisplay) {
+		this._incrementMonth(evt);
+	}
+}, onIncrementYear:function (evt) {
+	evt.stopPropagation();
+	if (!this.staticDisplay) {
+		this._incrementYear(evt);
+	}
+}, _setMonthLabel:function (monthIndex) {
+	this.monthLabelNode.innerHTML = dojo.date.getNames("months", "wide", "standAlone", this.lang)[monthIndex];
+}, _setYearLabels:function (year) {
+	var y = year - 1;
+	var that = this;
+	function f(n) {
+		that[n + "YearLabelNode"].innerHTML = dojo.date.format(new Date(y++, 0), {formatLength:"yearOnly", locale:that.lang});
+	}
+	f("previous");
+	f("current");
+	f("next");
+}, _getDateClassName:function (date, monthState) {
+	var currentClassName = this.classNames[monthState];
+	if ((!this.selectedIsUsed && this.value) && (Number(date) == Number(this.value))) {
+		currentClassName = this.classNames.selectedDate + " " + currentClassName;
+		this.selectedIsUsed = true;
+	}
+	if ((!this.currentIsUsed) && (Number(date) == Number(this.today))) {
+		currentClassName = currentClassName + " " + this.classNames.currentDate;
+		this.currentIsUsed = true;
+	}
+	return currentClassName;
+}, onClick:function (evt) {
+	dojo.event.browser.stopEvent(evt);
+}, _handleUiClick:function (evt) {
+	var eventTarget = evt.target;
+	if (eventTarget.nodeType != dojo.dom.ELEMENT_NODE) {
+		eventTarget = eventTarget.parentNode;
+	}
+	dojo.event.browser.stopEvent(evt);
+	this.selectedIsUsed = this.todayIsUsed = false;
+	if (dojo.html.hasClass(eventTarget, this.classNames["disabledPrevious"]) || dojo.html.hasClass(eventTarget, this.classNames["disabledCurrent"]) || dojo.html.hasClass(eventTarget, this.classNames["disabledNext"])) {
+		return;
+	}
+	this.clickedNode = eventTarget;
+	this.setDate(new Date(Number(dojo.html.getAttribute(eventTarget, "djDateValue"))));
+}, onValueChanged:function (date) {
+}, _isDisabledDate:function (dateObj) {
+	if (dateObj < this.startDate || dateObj > this.endDate) {
+		return true;
+	}
+	return this.isDisabledDate(dateObj, this.lang);
+}, isDisabledDate:function (dateObj, locale) {
+	return false;
+}, _initFirstDay:function (dateObj, adj) {
+	var d = new Date(dateObj);
+	if (!adj) {
+		d.setDate(1);
+	}
+	d.setDate(d.getDate() - this._getAdjustedDay(d, this.weekStartsOn));
+	d.setHours(0, 0, 0, 0);
+	return d;
+}, _getAdjustedDay:function (dateObj) {
+	var days = [0, 1, 2, 3, 4, 5, 6];
+	if (this.weekStartsOn > 0) {
+		for (var i = 0; i < this.weekStartsOn; i++) {
+			days.unshift(days.pop());
+		}
+	}
+	return days[dateObj.getDay()];
+}, destroy:function () {
+	dojo.widget.DatePicker.superclass.destroy.apply(this, arguments);
+	dojo.html.destroyNode(this.weekTemplate);
+}});
 
+
 __CPAN_FILE__ src/widget/RichText.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -41919,9 +26404,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
- /* -*- tab-width: 4 -*- */
 dojo.provide("dojo.widget.RichText");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.html.*");
 dojo.require("dojo.html.layout");
@@ -41930,1752 +26413,1153 @@
 dojo.require("dojo.string.extras");
 dojo.require("dojo.uri.Uri");
 dojo.require("dojo.Deferred");
-
-// used to save content
-if(dojo.hostenv.post_load_){
-	(function(){
-		var savetextarea = dojo.doc().createElement('textarea');
-		savetextarea.id = "dojo.widget.RichText.savedContent";
-		savetextarea.style = "display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;";
-		dojo.body().appendChild(savetextarea);
-	})();
-}else{
-	//dojo.body() is not available before onLoad is fired
-	try {
-		dojo.doc().write('<textarea id="dojo.widget.RichText.savedContent" ' +
-			'style="display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;"></textarea>');
-	}catch(e){ }
-}
-
-dojo.widget.defineWidget(
-	"dojo.widget.RichText",
-	dojo.widget.HtmlWidget,
-	function(){
-		// summary:
-		//		dojo.widget.RichText is the core of the WYSIWYG editor in dojo, which
-		//		provides the basic editing features. It also encapsulates the differences
-		//		of different js engines for various browsers
-
-		// contentPreFilters: Array
-		//		pre content filter function register array
-		this.contentPreFilters = [];
-
-		// contentPostFilters: Array
-		//		post content filter function register array
-		this.contentPostFilters = [];
-
-		// contentDomPreFilters: Array
-		//		pre content dom filter function register array
-		this.contentDomPreFilters = [];
-
-		// contentDomPostFilters: Array
-		//		post content dom filter function register array
-		this.contentDomPostFilters = [];
-
-		// editingAreaStyleSheets: Array
-		//		array to store all the stylesheets applied to the editing area
-		this.editingAreaStyleSheets=[];
-
-		if(dojo.render.html.moz){
-			this.contentPreFilters.push(this._fixContentForMoz);
+if (!djConfig["useXDomain"] || djConfig["allowXdRichTextSave"]) {
+	if (dojo.hostenv.post_load_) {
+		(function () {
+			var savetextarea = dojo.doc().createElement("textarea");
+			savetextarea.id = "dojo.widget.RichText.savedContent";
+			savetextarea.style = "display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;";
+			dojo.body().appendChild(savetextarea);
+		})();
+	} else {
+		try {
+			dojo.doc().write("<textarea id=\"dojo.widget.RichText.savedContent\" " + "style=\"display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;\"></textarea>");
 		}
-
-		this._keyHandlers = {};
-
-		if(dojo.Deferred){
-			this.onLoadDeferred = new dojo.Deferred();
+		catch (e) {
 		}
-	},
-	{
-		// inheritWidth: Boolean
-		//		whether to inherit the parent's width or simply use 100%
-		inheritWidth: false,
-
-		// focusOnLoad: Boolean
-		//		whether focusing into this instance of richtext when page onload
-		focusOnLoad: false,
-
-		// saveName: String
-		//		If a save name is specified the content is saved and restored when the user
-		//		leave this page can come back, or if the editor is not properly closed after
-		//		editing has started.
-		saveName: "",
-
-		// styleSheets: String
-		//		semicolon (";") separated list of css files for the editing area
-		styleSheets: "",
-
-		// _content: String
-		//		temporary content storage
-		_content: "",
-
-		// height: String
-		//		set height to fix the editor at a specific height, with scrolling
-		height: "",
-
-		// minHeight: String
-		//		The minimum height that the editor should have
-		minHeight: "1em",
-
-		// isClosed: Boolean
-		isClosed: true,
-
-		// isLoaded: Boolean
-		isLoaded: false,
-
-		// useActiveX: Boolean
-		//		whether to use the active-x object in IE
-		useActiveX: false,
-
-		// relativeImageUrls: Boolean
-		//		whether to use relative URLs for images - if this is enabled
-		//		images will be given absolute URLs when inside the editor but
-		//		will be changed to use relative URLs (to the current page) on save
-		relativeImageUrls: false,
-
-		// _SEPARATOR: String
-		//		used to concat contents from multiple textareas into a single string
-		_SEPARATOR: "@@**%%__RICHTEXTBOUNDRY__%%**@@",
-
-		// onLoadDeferred: dojo.Deferred
-		//		deferred that can be used to connect to the onLoad function. This
-		//		will only be set if dojo.Deferred is required
-		onLoadDeferred: null,
-
-	/* Init
-	 *******/
-
-		fillInTemplate: function(){
-			// summary: see dojo.widget.DomWidget
-			dojo.event.topic.publish("dojo.widget.RichText::init", this);
-			this.open();
-
-
-			// backwards compatibility, needs to be removed
-			dojo.event.connect(this, "onKeyPressed", this, "afterKeyPress");
-			dojo.event.connect(this, "onKeyPress", this, "keyPress");
-			dojo.event.connect(this, "onKeyDown", this, "keyDown");
-			dojo.event.connect(this, "onKeyUp", this, "keyUp");
-
-			this.setupDefaultShortcuts();
-		},
-
-		setupDefaultShortcuts: function(){
-			// summary: add some default key handlers
-			// description: 
-			// 		Overwrite this to setup your own handlers. The default
-			// 		implementation does not use Editor2 commands, but directly
-			//		executes the builtin commands within the underlying browser
-			//		support.
-			var ctrl = this.KEY_CTRL;
-			var exec = function (cmd, arg) {
-				return arguments.length == 1 ? function () { this.execCommand(cmd); } :
-					function () { this.execCommand(cmd, arg); }
-			}
-			this.addKeyHandler("b", ctrl, exec("bold"));
-			this.addKeyHandler("i", ctrl, exec("italic"));
-			this.addKeyHandler("u", ctrl, exec("underline"));
-			this.addKeyHandler("a", ctrl, exec("selectall"));
-			this.addKeyHandler("s", ctrl, function () { this.save(true); });
-
-			this.addKeyHandler("1", ctrl, exec("formatblock", "h1"));
-			this.addKeyHandler("2", ctrl, exec("formatblock", "h2"));
-			this.addKeyHandler("3", ctrl, exec("formatblock", "h3"));
-			this.addKeyHandler("4", ctrl, exec("formatblock", "h4"));
-
-			this.addKeyHandler("\\", ctrl, exec("insertunorderedlist"));
-			if(!dojo.render.html.ie){
-				this.addKeyHandler("Z", ctrl, exec("redo"));
-			}
-		},
-
-		// events: Array
-		//		 events which should be connected to the underlying editing area
-		events: ["onBlur", "onFocus", "onKeyPress", "onKeyDown", "onKeyUp", "onClick"],
-
-		/**
-		 * Transforms the node referenced in this.domNode into a rich text editing
-		 * node. This can result in the creation and replacement with an <iframe> if
-		 * designMode is used, an <object> and active-x component if inside of IE or
-		 * a reguler element if contentEditable is available.
-		 */
-		open: function (/*DomNode, optional*/element) {
-			// summary:
-			//		Transforms the node referenced in this.domNode into a rich text editing
-			//		node. This can result in the creation and replacement with an <iframe> if
-			//		designMode is used, an <object> and active-x component if inside of IE or
-			//		a reguler element if contentEditable is available.
-
-			if(this.onLoadDeferred.fired >= 0){
-				this.onLoadDeferred = new dojo.Deferred();
-			}
-
-			var h = dojo.render.html;
-			if (!this.isClosed) { this.close(); }
-			dojo.event.topic.publish("dojo.widget.RichText::open", this);
-
-			this._content = "";
-			if((arguments.length == 1)&&(element["nodeName"])){ this.domNode = element; } // else unchanged
-
-			if(	(this.domNode["nodeName"])&&
-				(this.domNode.nodeName.toLowerCase() == "textarea")){
-				this.textarea = this.domNode;
-				var html = dojo.string.trim(this.textarea.value);
-				this.domNode = dojo.doc().createElement("div");
-				dojo.html.copyStyle(this.domNode, this.textarea);
-				var tmpFunc = dojo.lang.hitch(this, function(){
-					//some browsers refuse to submit display=none textarea, so
-					//move the textarea out of screen instead
-					with(this.textarea.style){
-						display = "block";
-						position = "absolute";
-						left = top = "-1000px";
-
-						if(h.ie){ //nasty IE bug: abnormal formatting if overflow is not hidden
-							this.__overflow = overflow;
-							overflow = "hidden";
-						}
-					}
-				});
-				if(h.ie){
-					setTimeout(tmpFunc, 10);
-				}else{
-					tmpFunc();
+	}
+}
+dojo.widget.defineWidget("dojo.widget.RichText", dojo.widget.HtmlWidget, function () {
+	this.contentPreFilters = [];
+	this.contentPostFilters = [];
+	this.contentDomPreFilters = [];
+	this.contentDomPostFilters = [];
+	this.editingAreaStyleSheets = [];
+	if (dojo.render.html.moz) {
+		this.contentPreFilters.push(this._fixContentForMoz);
+	}
+	this._keyHandlers = {};
+	if (dojo.Deferred) {
+		this.onLoadDeferred = new dojo.Deferred();
+	}
+}, {inheritWidth:false, focusOnLoad:false, saveName:"", styleSheets:"", _content:"", height:"", minHeight:"1em", isClosed:true, isLoaded:false, useActiveX:false, relativeImageUrls:false, _SEPARATOR:"@@**%%__RICHTEXTBOUNDRY__%%**@@", onLoadDeferred:null, fillInTemplate:function () {
+	dojo.event.topic.publish("dojo.widget.RichText::init", this);
+	this.open();
+	dojo.event.connect(this, "onKeyPressed", this, "afterKeyPress");
+	dojo.event.connect(this, "onKeyPress", this, "keyPress");
+	dojo.event.connect(this, "onKeyDown", this, "keyDown");
+	dojo.event.connect(this, "onKeyUp", this, "keyUp");
+	this.setupDefaultShortcuts();
+}, setupDefaultShortcuts:function () {
+	var ctrl = this.KEY_CTRL;
+	var exec = function (cmd, arg) {
+		return arguments.length == 1 ? function () {
+			this.execCommand(cmd);
+		} : function () {
+			this.execCommand(cmd, arg);
+		};
+	};
+	this.addKeyHandler("b", ctrl, exec("bold"));
+	this.addKeyHandler("i", ctrl, exec("italic"));
+	this.addKeyHandler("u", ctrl, exec("underline"));
+	this.addKeyHandler("a", ctrl, exec("selectall"));
+	this.addKeyHandler("s", ctrl, function () {
+		this.save(true);
+	});
+	this.addKeyHandler("1", ctrl, exec("formatblock", "h1"));
+	this.addKeyHandler("2", ctrl, exec("formatblock", "h2"));
+	this.addKeyHandler("3", ctrl, exec("formatblock", "h3"));
+	this.addKeyHandler("4", ctrl, exec("formatblock", "h4"));
+	this.addKeyHandler("\\", ctrl, exec("insertunorderedlist"));
+	if (!dojo.render.html.ie) {
+		this.addKeyHandler("Z", ctrl, exec("redo"));
+	}
+}, events:["onBlur", "onFocus", "onKeyPress", "onKeyDown", "onKeyUp", "onClick"], open:function (element) {
+	if (this.onLoadDeferred.fired >= 0) {
+		this.onLoadDeferred = new dojo.Deferred();
+	}
+	var h = dojo.render.html;
+	if (!this.isClosed) {
+		this.close();
+	}
+	dojo.event.topic.publish("dojo.widget.RichText::open", this);
+	this._content = "";
+	if ((arguments.length == 1) && (element["nodeName"])) {
+		this.domNode = element;
+	}
+	if ((this.domNode["nodeName"]) && (this.domNode.nodeName.toLowerCase() == "textarea")) {
+		this.textarea = this.domNode;
+		var html = this._preFilterContent(this.textarea.value);
+		this.domNode = dojo.doc().createElement("div");
+		dojo.html.copyStyle(this.domNode, this.textarea);
+		var tmpFunc = dojo.lang.hitch(this, function () {
+			with (this.textarea.style) {
+				display = "block";
+				position = "absolute";
+				left = top = "-1000px";
+				if (h.ie) {
+					this.__overflow = overflow;
+					overflow = "hidden";
 				}
-				if(!h.safari){
-					// FIXME: VERY STRANGE safari 2.0.4 behavior here caused by
-					// moving the textarea. Often crashed the browser!!! Seems
-					// fixed on webkit nightlies.
-					dojo.html.insertBefore(this.domNode, this.textarea);
-				}
-				// this.domNode.innerHTML = html;
-
-				if(this.textarea.form){
-					dojo.event.connect('before', this.textarea.form, "onsubmit",
-						// FIXME: should we be calling close() here instead?
-						dojo.lang.hitch(this, function(){
-							this.textarea.value = this.getEditorContent();
-						})
-					);
-				}
-
-				// dojo plucks our original domNode from the document so we need
-				// to go back and put ourselves back in
-				var editor = this;
-				dojo.event.connect(this, "postCreate", function (){
-					dojo.html.insertAfter(editor.textarea, editor.domNode);
-				});
-			}else{
-				var html = this._preFilterContent(dojo.string.trim(this.domNode.innerHTML));
 			}
-			if(html == ""){ html = "&nbsp;"; }
-			var content = dojo.html.getContentBox(this.domNode);
-			this._oldHeight = content.height;
-			this._oldWidth = content.width;
-
-			this._firstChildContributingMargin = this._getContributingMargin(this.domNode, "top");
-			this._lastChildContributingMargin = this._getContributingMargin(this.domNode, "bottom");
-
-			this.savedContent = this.domNode.innerHTML;
-			this.domNode.innerHTML = '';
-
-			this.editingArea = dojo.doc().createElement("div");
-			this.domNode.appendChild(this.editingArea);
-
-			// If we're a list item we have to put in a blank line to force the
-			// bullet to nicely align at the top of text
-			if(	(this.domNode["nodeName"])&&
-				(this.domNode.nodeName == "LI")){
-				this.domNode.innerHTML = " <br>";
-			}
-
-			if(this.saveName != ""){
-				var saveTextarea = dojo.doc().getElementById("dojo.widget.RichText.savedContent");
-				if (saveTextarea.value != "") {
-					var datas = saveTextarea.value.split(this._SEPARATOR);
-					for (var i = 0; i < datas.length; i++) {
-						var data = datas[i].split(":");
-						if (data[0] == this.saveName) {
-							html = data[1];
-							datas.splice(i, 1);
-							break;
-						}
-					}
+		});
+		if (h.ie) {
+			setTimeout(tmpFunc, 10);
+		} else {
+			tmpFunc();
+		}
+		if (!h.safari) {
+			dojo.html.insertBefore(this.domNode, this.textarea);
+		}
+		if (this.textarea.form) {
+			dojo.event.connect("before", this.textarea.form, "onsubmit", dojo.lang.hitch(this, function () {
+				this.textarea.value = this.getEditorContent();
+			}));
+		}
+		var editor = this;
+		dojo.event.connect(this, "postCreate", function () {
+			dojo.html.insertAfter(editor.textarea, editor.domNode);
+		});
+	} else {
+		var html = this._preFilterContent(dojo.string.trim(this.domNode.innerHTML));
+	}
+	if (html == "") {
+		html = "&nbsp;";
+	}
+	var content = dojo.html.getContentBox(this.domNode);
+	this._oldHeight = content.height;
+	this._oldWidth = content.width;
+	this._firstChildContributingMargin = this._getContributingMargin(this.domNode, "top");
+	this._lastChildContributingMargin = this._getContributingMargin(this.domNode, "bottom");
+	this.savedContent = html;
+	this.domNode.innerHTML = "";
+	this.editingArea = dojo.doc().createElement("div");
+	this.domNode.appendChild(this.editingArea);
+	if ((this.domNode["nodeName"]) && (this.domNode.nodeName == "LI")) {
+		this.domNode.innerHTML = " <br>";
+	}
+	if (this.saveName != "" && (!djConfig["useXDomain"] || djConfig["allowXdRichTextSave"])) {
+		var saveTextarea = dojo.doc().getElementById("dojo.widget.RichText.savedContent");
+		if (saveTextarea.value != "") {
+			var datas = saveTextarea.value.split(this._SEPARATOR);
+			for (var i = 0; i < datas.length; i++) {
+				var data = datas[i].split(":");
+				if (data[0] == this.saveName) {
+					html = data[1];
+					datas.splice(i, 1);
+					break;
 				}
-				dojo.event.connect("before", window, "onunload", this, "_saveContent");
-				// dojo.event.connect(window, "onunload", this, "_saveContent");
 			}
-
-			if(h.ie70 && this.useActiveX){
-				dojo.debug("activeX in ie70 is not currently supported, useActiveX is ignored for now.");
-				this.useActiveX = false;
+		}
+		dojo.event.connect("before", window, "onunload", this, "_saveContent");
+	}
+	if (h.ie70 && this.useActiveX) {
+		dojo.debug("activeX in ie70 is not currently supported, useActiveX is ignored for now.");
+		this.useActiveX = false;
+	}
+	if (this.useActiveX && h.ie) {
+		var self = this;
+		setTimeout(function () {
+			self._drawObject(html);
+		}, 0);
+	} else {
+		if (h.ie || this._safariIsLeopard() || h.opera) {
+			this.iframe = dojo.doc().createElement("iframe");
+			this.iframe.src = "javascript:void(0)";
+			this.editorObject = this.iframe;
+			with (this.iframe.style) {
+				border = "0";
+				width = "100%";
 			}
-			// Safari's selections go all out of whack if we do it inline,
-			// so for now IE is our only hero
-			//if (typeof document.body.contentEditable != "undefined") {
-			if(this.useActiveX && h.ie){ // active-x
-				var self = this;
-				//if call _drawObject directly here, textarea replacement
-				//won't work: no content is shown. However, add a delay
-				//can workaround this. No clue why.
-				setTimeout(function(){self._drawObject(html);}, 0);
-			}else if(h.ie || this._safariIsLeopard() || h.opera){ // contentEditable, easy
-				this.iframe = dojo.doc().createElement( 'iframe' ) ;
-				this.iframe.src = 'javascript:void(0)';
-				this.editorObject = this.iframe;
-				with(this.iframe.style){
-					border = '0';
-					width = "100%";
-				}
-				this.iframe.frameBorder = 0;
-				this.editingArea.appendChild(this.iframe)
-				this.window = this.iframe.contentWindow;
-				this.document = this.window.document;
-				this.document.open();
-				this.document.write("<html><head><style>body{margin:0;padding:0;border:0;overflow:hidden;}</style></head><body><div></div></body></html>");
-				this.document.close();
-				this.editNode = this.document.body.firstChild;//document.createElement("div");
-				this.editNode.contentEditable = true;
-				with (this.iframe.style) {
-					if(h.ie70){
-						if(this.height){
-							height = this.height;
-						}
-						if(this.minHeight){
-							minHeight = this.minHeight;
-						}
-					}else{
-						height = this.height ? this.height : this.minHeight;
+			this.iframe.frameBorder = 0;
+			this.editingArea.appendChild(this.iframe);
+			this.window = this.iframe.contentWindow;
+			this.document = this.window.document;
+			this.document.open();
+			this.document.write("<html><head><style>body{margin:0;padding:0;border:0;overflow:hidden;}</style></head><body><div></div></body></html>");
+			this.document.close();
+			this.editNode = this.document.body.firstChild;
+			this.editNode.contentEditable = true;
+			with (this.iframe.style) {
+				if (h.ie70) {
+					if (this.height) {
+						height = this.height;
 					}
-				}
-
-				// FIXME: setting contentEditable on switches this element to
-				// IE's hasLayout mode, triggering weird margin collapsing
-				// behavior. It's particularly bad if the element you're editing
-				// contains childnodes that don't have margin: defined in local
-				// css rules. It would be nice if it was possible to hack around
-				// this. Sadly _firstChildContributingMargin and
-				// _lastChildContributingMargin don't work on IE unless all
-				// elements have margins set in CSS :-(
-
-				//if the normal way fails, we try the hard way to get the list
-				//do not use _cacheLocalBlockFormatNames here, as it will trigger security warning in IE7
-				//in the array below, ul can not come directly after ol, otherwise the queryCommandValue returns Normal for it
-				var formats = ['p', 'pre', 'address', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ol', 'div', 'ul'];
-				var localhtml = "";
-				for(var i in formats){
-					if(formats[i].charAt(1) != 'l'){
-						localhtml += "<"+formats[i]+"><span>content</span></"+formats[i]+">";
-					}else{
-						localhtml += "<"+formats[i]+"><li>content</li></"+formats[i]+">";
+					if (this.minHeight) {
+						minHeight = this.minHeight;
 					}
+				} else {
+					height = this.height ? this.height : this.minHeight;
 				}
-				//queryCommandValue returns empty if we hide editNode, so move it out of screen temporary
-				with(this.editNode.style){
-					position = "absolute";
-					left = "-2000px";
-					top = "-2000px";
+			}
+			var formats = ["p", "pre", "address", "h1", "h2", "h3", "h4", "h5", "h6", "ol", "div", "ul"];
+			var localhtml = "";
+			for (var i in formats) {
+				if (formats[i].charAt(1) != "l") {
+					localhtml += "<" + formats[i] + "><span>content</span></" + formats[i] + ">";
+				} else {
+					localhtml += "<" + formats[i] + "><li>content</li></" + formats[i] + ">";
 				}
-				this.editNode.innerHTML = localhtml;
-				var node = this.editNode.firstChild;
-				while(node){
-					dojo.withGlobal(this.window, "selectElement", dojo.html.selection, [node.firstChild]);
-					var nativename = node.tagName.toLowerCase();
-					this._local2NativeFormatNames[nativename] = this.queryCommandValue("formatblock");
-//						dojo.debug([nativename,this._local2NativeFormatNames[nativename]]);
-					this._native2LocalFormatNames[this._local2NativeFormatNames[nativename]] = nativename;
-					node = node.nextSibling;
-				}
-				with(this.editNode.style){
-					position = "";
-					left = "";
-					top = "";
-				}
-
-				this.editNode.innerHTML = html;
-				if(this.height){ this.document.body.style.overflowY="scroll"; }
-
-				dojo.lang.forEach(this.events, function(e){
-					dojo.event.connect(this.editNode, e.toLowerCase(), this, e);
-				}, this);
-
-				this.onLoad();
-			} else { // designMode in iframe
-				this._drawIframe(html);
-				this.editorObject = this.iframe;
 			}
-
-			// TODO: this is a guess at the default line-height, kinda works
-			if (this.domNode.nodeName == "LI") { this.domNode.lastChild.style.marginTop = "-1.2em"; }
-			dojo.html.addClass(this.domNode, "RichTextEditable");
-
-			this.isClosed = false;
-		},
-
-		_hasCollapseableMargin: function(/*DomNode*/element, /*String*/side) {
-			// summary:
-			//		check if an element has padding or borders on the given side
-			//		which would prevent it from collapsing margins
-			if (dojo.html.getPixelValue(element,
-										 'border-'+side+'-width',
-										 false)) {
-				return false;
-			} else if (dojo.html.getPixelValue(element,
-												'padding-'+side,
-												false)) {
-				return false;
-			} else {
-				return true;
+			with (this.editNode.style) {
+				position = "absolute";
+				left = "-2000px";
+				top = "-2000px";
 			}
-		},
-
-		_getContributingMargin:	function(/*DomNode*/element, /*String*/topOrBottom) {
-			// summary:
-			//		calculate how much margin this element and its first or last
-			//		child are contributing to the total margin between this element
-			//		and the adjacent node. CSS border collapsing makes this
-			//		necessary.
-
-			if (topOrBottom == "top") {
-				var siblingAttr = "previousSibling";
-				var childSiblingAttr = "nextSibling";
-				var childAttr = "firstChild";
-				var marginProp = "margin-top";
-				var siblingMarginProp = "margin-bottom";
-			} else {
-				var siblingAttr = "nextSibling";
-				var childSiblingAttr = "previousSibling";
-				var childAttr = "lastChild";
-				var marginProp = "margin-bottom";
-				var siblingMarginProp = "margin-top";
+			this.editNode.innerHTML = localhtml;
+			var node = this.editNode.firstChild;
+			while (node) {
+				dojo.withGlobal(this.window, "selectElement", dojo.html.selection, [node.firstChild]);
+				var nativename = node.tagName.toLowerCase();
+				this._local2NativeFormatNames[nativename] = this.queryCommandValue("formatblock");
+				this._native2LocalFormatNames[this._local2NativeFormatNames[nativename]] = nativename;
+				node = node.nextSibling;
 			}
-
-			var elementMargin = dojo.html.getPixelValue(element, marginProp, false);
-
-			function isSignificantNode(element) {
-				// see if an node is significant in the current context
-				// for calulating margins
-				return !(element.nodeType==3 && dojo.string.isBlank(element.data))
-					&& dojo.html.getStyle(element, "display") != "none"
-					&& !dojo.html.isPositionAbsolute(element);
+			with (this.editNode.style) {
+				position = "";
+				left = "";
+				top = "";
 			}
-
-			// walk throuh first/last children to find total collapsed margin size
-			var childMargin = 0;
-			var child = element[childAttr];
-			while (child) {
-				// skip over insignificant elements (whitespace, etc)
-				while ((!isSignificantNode(child)) && child[childSiblingAttr]) {
-					child = child[childSiblingAttr];
-				}
-
-				childMargin = Math.max(childMargin, dojo.html.getPixelValue(child, marginProp, false));
-				// stop if we hit a bordered/padded element
-				if (!this._hasCollapseableMargin(child, topOrBottom)) break;
-				child = child[childAttr];
+			this.editNode.innerHTML = html;
+			if (this.height) {
+				this.document.body.style.overflowY = "scroll";
 			}
-
-			// if this element has a border, return full child margin immediately
-			// as there won't be any margin collapsing
-			if (!this._hasCollapseableMargin(element, topOrBottom)){ return parseInt(childMargin); }
-
-			// find margin supplied by nearest sibling
-			var contextMargin = 0;
-			var sibling = element[siblingAttr];
-			while (sibling) {
-				if (isSignificantNode(sibling)) {
-					contextMargin = dojo.html.getPixelValue(sibling,
-															 siblingMarginProp,
-															 false);
-					break;
-				}
-				sibling = sibling[siblingAttr];
-			}
-			if (!sibling) { // no sibling, look at parent's margin instead
-				contextMargin = dojo.html.getPixelValue(element.parentNode,
-												marginProp, false);
-			}
-
-			if (childMargin > elementMargin) {
-				return parseInt(Math.max((childMargin-elementMargin)-contextMargin, 0));
+			dojo.lang.forEach(this.events, function (e) {
+				dojo.event.connect(this.editNode, e.toLowerCase(), this, e);
+			}, this);
+			this.onLoad();
+		} else {
+			this._drawIframe(html);
+			this.editorObject = this.iframe;
+		}
+	}
+	if (this.domNode.nodeName == "LI") {
+		this.domNode.lastChild.style.marginTop = "-1.2em";
+	}
+	dojo.html.addClass(this.domNode, "RichTextEditable");
+	this.isClosed = false;
+}, _hasCollapseableMargin:function (element, side) {
+	if (dojo.html.getPixelValue(element, "border-" + side + "-width", false)) {
+		return false;
+	} else {
+		if (dojo.html.getPixelValue(element, "padding-" + side, false)) {
+			return false;
+		} else {
+			return true;
+		}
+	}
+}, _getContributingMargin:function (element, topOrBottom) {
+	if (topOrBottom == "top") {
+		var siblingAttr = "previousSibling";
+		var childSiblingAttr = "nextSibling";
+		var childAttr = "firstChild";
+		var marginProp = "margin-top";
+		var siblingMarginProp = "margin-bottom";
+	} else {
+		var siblingAttr = "nextSibling";
+		var childSiblingAttr = "previousSibling";
+		var childAttr = "lastChild";
+		var marginProp = "margin-bottom";
+		var siblingMarginProp = "margin-top";
+	}
+	var elementMargin = dojo.html.getPixelValue(element, marginProp, false);
+	function isSignificantNode(element) {
+		return !(element.nodeType == 3 && dojo.string.isBlank(element.data)) && dojo.html.getStyle(element, "display") != "none" && !dojo.html.isPositionAbsolute(element);
+	}
+	var childMargin = 0;
+	var child = element[childAttr];
+	while (child) {
+		while ((!isSignificantNode(child)) && child[childSiblingAttr]) {
+			child = child[childSiblingAttr];
+		}
+		childMargin = Math.max(childMargin, dojo.html.getPixelValue(child, marginProp, false));
+		if (!this._hasCollapseableMargin(child, topOrBottom)) {
+			break;
+		}
+		child = child[childAttr];
+	}
+	if (!this._hasCollapseableMargin(element, topOrBottom)) {
+		return parseInt(childMargin);
+	}
+	var contextMargin = 0;
+	var sibling = element[siblingAttr];
+	while (sibling) {
+		if (isSignificantNode(sibling)) {
+			contextMargin = dojo.html.getPixelValue(sibling, siblingMarginProp, false);
+			break;
+		}
+		sibling = sibling[siblingAttr];
+	}
+	if (!sibling) {
+		contextMargin = dojo.html.getPixelValue(element.parentNode, marginProp, false);
+	}
+	if (childMargin > elementMargin) {
+		return parseInt(Math.max((childMargin - elementMargin) - contextMargin, 0));
+	} else {
+		return 0;
+	}
+}, _drawIframe:function (html) {
+	var oldMoz = Boolean(dojo.render.html.moz && (typeof window.XML == "undefined"));
+	if (!this.iframe) {
+		var currentDomain = (new dojo.uri.Uri(dojo.doc().location)).host;
+		this.iframe = dojo.doc().createElement("iframe");
+		with (this.iframe) {
+			style.border = "none";
+			style.lineHeight = "0";
+			style.verticalAlign = "bottom";
+			scrolling = this.height ? "auto" : "no";
+		}
+	}
+	if (djConfig["useXDomain"] && !djConfig["dojoRichTextFrameUrl"]) {
+		dojo.debug("dojo.widget.RichText: When using cross-domain Dojo builds," + " please save src/widget/templates/richtextframe.html to your domain and set djConfig.dojoRichTextFrameUrl" + " to the path on your domain to richtextframe.html");
+	}
+	this.iframe.src = (djConfig["dojoRichTextFrameUrl"] || dojo.uri.moduleUri("dojo.widget", "templates/richtextframe.html")) + ((dojo.doc().domain != currentDomain) ? ("#" + dojo.doc().domain) : "");
+	this.iframe.width = this.inheritWidth ? this._oldWidth : "100%";
+	if (this.height) {
+		this.iframe.style.height = this.height;
+	} else {
+		var height = this._oldHeight;
+		if (this._hasCollapseableMargin(this.domNode, "top")) {
+			height += this._firstChildContributingMargin;
+		}
+		if (this._hasCollapseableMargin(this.domNode, "bottom")) {
+			height += this._lastChildContributingMargin;
+		}
+		this.iframe.height = height;
+	}
+	var tmpContent = dojo.doc().createElement("div");
+	tmpContent.innerHTML = html;
+	this.editingArea.appendChild(tmpContent);
+	if (this.relativeImageUrls) {
+		var imgs = tmpContent.getElementsByTagName("img");
+		for (var i = 0; i < imgs.length; i++) {
+			imgs[i].src = (new dojo.uri.Uri(dojo.global().location, imgs[i].src)).toString();
+		}
+		html = tmpContent.innerHTML;
+	}
+	var firstChild = dojo.html.firstElement(tmpContent);
+	var lastChild = dojo.html.lastElement(tmpContent);
+	if (firstChild) {
+		firstChild.style.marginTop = this._firstChildContributingMargin + "px";
+	}
+	if (lastChild) {
+		lastChild.style.marginBottom = this._lastChildContributingMargin + "px";
+	}
+	this.editingArea.appendChild(this.iframe);
+	if (dojo.render.html.safari) {
+		this.iframe.src = this.iframe.src;
+	}
+	var _iframeInitialized = false;
+	var ifrFunc = dojo.lang.hitch(this, function () {
+		if (!_iframeInitialized) {
+			_iframeInitialized = true;
+		} else {
+			return;
+		}
+		if (!this.editNode) {
+			if (this.iframe.contentWindow) {
+				this.window = this.iframe.contentWindow;
+				this.document = this.iframe.contentWindow.document;
 			} else {
-				return 0;
-			}
-
-		},
-
-		_drawIframe: function (/*String*/html){
-			// summary:
-			//		Draws an iFrame using the existing one if one exists.
-			//		Used by Mozilla, Safari, and Opera
-
-			// detect firefox < 1.5, which has some iframe loading issues
-			var oldMoz = Boolean(dojo.render.html.moz && (
-									typeof window.XML == 'undefined'))
-
-			if(!this.iframe){
-				var currentDomain = (new dojo.uri.Uri(dojo.doc().location)).host;
-				this.iframe = dojo.doc().createElement("iframe");
-				// dojo.body().appendChild(this.iframe);
-				with(this.iframe){
-					style.border = "none";
-					style.lineHeight = "0"; // squash line height
-					style.verticalAlign = "bottom";
-					scrolling = this.height ? "auto" : "no";
+				if (this.iframe.contentDocument) {
+					this.window = this.iframe.contentDocument.window;
+					this.document = this.iframe.contentDocument;
 				}
 			}
-			// opera likes this to be outside the with block
-			this.iframe.src = dojo.uri.dojoUri("src/widget/templates/richtextframe.html") + ((dojo.doc().domain != currentDomain) ? ("#"+dojo.doc().domain) : "");
-			this.iframe.width = this.inheritWidth ? this._oldWidth : "100%";
-			if(this.height){
-				this.iframe.style.height = this.height;
-			}else{
-				var height = this._oldHeight;
-				if(this._hasCollapseableMargin(this.domNode, 'top')){
-					height += this._firstChildContributingMargin;
-				}
-				if(this._hasCollapseableMargin(this.domNode, 'bottom')){
-					height += this._lastChildContributingMargin;
-				}
-				this.iframe.height = height;
+			var getStyle = (function (domNode) {
+				return function (style) {
+					return dojo.html.getStyle(domNode, style);
+				};
+			})(this.domNode);
+			var font = getStyle("font-weight") + " " + getStyle("font-size") + " " + getStyle("font-family");
+			var lineHeight = "1.0";
+			var lineHeightStyle = dojo.html.getUnitValue(this.domNode, "line-height");
+			if (lineHeightStyle.value && lineHeightStyle.units == "") {
+				lineHeight = lineHeightStyle.value;
 			}
-
-			var tmpContent = dojo.doc().createElement('div');
-			tmpContent.innerHTML = html;
-			//append tmpContent to under the current domNode so that the margin
-			//calculation below is correct
-			this.editingArea.appendChild(tmpContent);
-
-			// make relative image urls absolute
-			if(this.relativeImageUrls){
-				var imgs = tmpContent.getElementsByTagName('img');
-				for(var i=0; i<imgs.length; i++){
-					imgs[i].src = (new dojo.uri.Uri(dojo.global().location, imgs[i].src)).toString();
-				}
-				html = tmpContent.innerHTML;
+			dojo.html.insertCssText("body,html{background:transparent;padding:0;margin:0;}" + "body{top:0;left:0;right:0;" + (((this.height) || (dojo.render.html.opera)) ? "" : "position:fixed;") + "font:" + font + ";" + "min-height:" + this.minHeight + ";" + "line-height:" + lineHeight + "}" + "p{margin: 1em 0 !important;}" + "body > *:first-child{padding-top:0 !important;margin-top:" + this._firstChildContributingMargin + "px !important;}" + "body > *:last-child{padding-bottom:0 !important;margin-bottom:" + this._lastChildContributingMargin + "px !important;}" + "li > ul:-moz-first-node, li > ol:-moz-first-node{padding-top:1.2em;}\n" + "li{min-height:1.2em;}" + "", this.document);
+			dojo.html.removeNode(tmpContent);
+			this.document.body.innerHTML = html;
+			if (oldMoz || dojo.render.html.safari) {
+				this.document.designMode = "on";
 			}
-
-			// fix margins on tmpContent
-			var firstChild = dojo.html.firstElement(tmpContent);
-			var lastChild = dojo.html.lastElement(tmpContent);
-			if(firstChild){
-				firstChild.style.marginTop = this._firstChildContributingMargin+"px";
+			this.onLoad();
+		} else {
+			dojo.html.removeNode(tmpContent);
+			this.editNode.innerHTML = html;
+			this.onDisplayChanged();
+		}
+	});
+	if (this.editNode) {
+		ifrFunc();
+	} else {
+		if (dojo.render.html.moz) {
+			this.iframe.onload = function () {
+				setTimeout(ifrFunc, 250);
+			};
+		} else {
+			this.iframe.onload = ifrFunc;
+		}
+	}
+}, _applyEditingAreaStyleSheets:function () {
+	var files = [];
+	if (this.styleSheets) {
+		files = this.styleSheets.split(";");
+		this.styleSheets = "";
+	}
+	files = files.concat(this.editingAreaStyleSheets);
+	this.editingAreaStyleSheets = [];
+	if (files.length > 0) {
+		for (var i = 0; i < files.length; i++) {
+			var url = files[i];
+			if (url) {
+				this.addStyleSheet(dojo.uri.dojoUri(url));
 			}
-			if(lastChild){
-				lastChild.style.marginBottom = this._lastChildContributingMargin+"px";
+		}
+	}
+}, addStyleSheet:function (uri) {
+	var url = uri.toString();
+	if (dojo.lang.find(this.editingAreaStyleSheets, url) > -1) {
+		dojo.debug("dojo.widget.RichText.addStyleSheet: Style sheet " + url + " is already applied to the editing area!");
+		return;
+	}
+	if (url.charAt(0) == "." || (url.charAt(0) != "/" && !uri.host)) {
+		url = (new dojo.uri.Uri(dojo.global().location, url)).toString();
+	}
+	this.editingAreaStyleSheets.push(url);
+	if (this.document.createStyleSheet) {
+		this.document.createStyleSheet(url);
+	} else {
+		var head = this.document.getElementsByTagName("head")[0];
+		var stylesheet = this.document.createElement("link");
+		with (stylesheet) {
+			rel = "stylesheet";
+			type = "text/css";
+			href = url;
+		}
+		head.appendChild(stylesheet);
+	}
+}, removeStyleSheet:function (uri) {
+	var url = uri.toString();
+	if (url.charAt(0) == "." || (url.charAt(0) != "/" && !uri.host)) {
+		url = (new dojo.uri.Uri(dojo.global().location, url)).toString();
+	}
+	var index = dojo.lang.find(this.editingAreaStyleSheets, url);
+	if (index == -1) {
+		dojo.debug("dojo.widget.RichText.removeStyleSheet: Style sheet " + url + " is not applied to the editing area so it can not be removed!");
+		return;
+	}
+	delete this.editingAreaStyleSheets[index];
+	var links = this.document.getElementsByTagName("link");
+	for (var i = 0; i < links.length; i++) {
+		if (links[i].href == url) {
+			if (dojo.render.html.ie) {
+				links[i].href = "";
 			}
-			//do we want to show the content before the editing area finish loading here?
-			//if external style sheets are used for the editing area, the appearance now
-			//and after loading of the editing area won't be the same (and padding/margin
-			//calculation above may not be accurate)
-//			tmpContent.style.display = "none";
-			this.editingArea.appendChild(this.iframe);
-			if(dojo.render.html.safari){
-				this.iframe.src = this.iframe.src;
+			dojo.html.removeNode(links[i]);
+			break;
+		}
+	}
+}, _drawObject:function (html) {
+	this.object = dojo.html.createExternalElement(dojo.doc(), "object");
+	with (this.object) {
+		classid = "clsid:2D360201-FFF5-11D1-8D03-00A0C959BC0A";
+		width = this.inheritWidth ? this._oldWidth : "100%";
+		style.height = this.height ? this.height : (this._oldHeight + "px");
+		Scrollbars = this.height ? true : false;
+		Appearance = this._activeX.appearance.flat;
+	}
+	this.editorObject = this.object;
+	this.editingArea.appendChild(this.object);
+	this.object.attachEvent("DocumentComplete", dojo.lang.hitch(this, "onLoad"));
+	dojo.lang.forEach(this.events, function (e) {
+		this.object.attachEvent(e.toLowerCase(), dojo.lang.hitch(this, e));
+	}, this);
+	this.object.DocumentHTML = "<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">" + "<html><title></title>" + "<style type=\"text/css\">" + "	body,html { padding: 0; margin: 0; }" + (this.height ? "" : "	body,  { overflow: hidden; }") + "</style>" + "<body><div>" + html + "<div></body></html>";
+	this._cacheLocalBlockFormatNames();
+}, _local2NativeFormatNames:{}, _native2LocalFormatNames:{}, _cacheLocalBlockFormatNames:function () {
+	if (!this._native2LocalFormatNames["p"]) {
+		var obj = this.object;
+		var error = false;
+		if (!obj) {
+			try {
+				obj = dojo.html.createExternalElement(dojo.doc(), "object");
+				obj.classid = "clsid:2D360201-FFF5-11D1-8D03-00A0C959BC0A";
+				dojo.body().appendChild(obj);
+				obj.DocumentHTML = "<html><head></head><body></body></html>";
 			}
-
-			var _iframeInitialized = false;
-
-			// now we wait for onload. Janky hack!
-			var ifrFunc = dojo.lang.hitch(this, function(){
-				if(!_iframeInitialized){
-					_iframeInitialized = true;
-				}else{ return; }
-				if(!this.editNode){
-					if(this.iframe.contentWindow){
-						this.window = this.iframe.contentWindow;
-						this.document = this.iframe.contentWindow.document
-					}else if(this.iframe.contentDocument){
-						// for opera
-						this.window = this.iframe.contentDocument.window;
-						this.document = this.iframe.contentDocument;
-					}
-
-					// curry the getStyle function
-					var getStyle = (function (domNode) { return function (style) {
-						return dojo.html.getStyle(domNode, style);
-					}; })(this.domNode);
-
-					var font =
-						getStyle('font-weight') + " " +
-						getStyle('font-size') + " " +
-						getStyle('font-family');
-
-					// line height is tricky - applying a units value will mess things up.
-					// if we can't get a non-units value, bail out.
-					var lineHeight = "1.0";
-					var lineHeightStyle = dojo.html.getUnitValue(this.domNode, 'line-height');
-					if (lineHeightStyle.value && lineHeightStyle.units=="") {
-						lineHeight = lineHeightStyle.value;
-					}
-
-					dojo.html.insertCssText(
-						'body,html{background:transparent;padding:0;margin:0;}' +
-						// TODO: left positioning will case contents to disappear out of view
-						//       if it gets too wide for the visible area
-						'body{top:0;left:0;right:0;' +
-						(((this.height)||(dojo.render.html.opera)) ? '' : 'position:fixed;') +
-						'font:' + font + ';' +
-						'min-height:' + this.minHeight + ';' +
-						'line-height:' + lineHeight + '}' +
-						'p{margin: 1em 0 !important;}' +
-						'body > *:first-child{padding-top:0 !important;margin-top:' + this._firstChildContributingMargin + 'px !important;}' + // FIXME: test firstChild nodeType
-						'body > *:last-child{padding-bottom:0 !important;margin-bottom:' + this._lastChildContributingMargin + 'px !important;}' +
-						'li > ul:-moz-first-node, li > ol:-moz-first-node{padding-top:1.2em;}\n' +
-						'li{min-height:1.2em;}' +
-						//'    p,ul,li { padding-top: 0; padding-bottom: 0; margin-top:0; margin-bottom: 0; }\n' +
-						'', this.document);
-
-					dojo.html.removeNode(tmpContent);
-					this.document.body.innerHTML = html;
-					if(oldMoz||dojo.render.html.safari){
-						this.document.designMode = "on";
-					}
-					this.onLoad();
-				}else{
-					dojo.html.removeNode(tmpContent);
-					this.editNode.innerHTML = html;
-					this.onDisplayChanged();
-				}
-			});
-
-			if(this.editNode){
-				ifrFunc(); // iframe already exists, just set content
-			}else if(dojo.render.html.moz){
-				// FIXME: if we put this on a delay, we get a height of 20px.
-				// Otherwise we get the correctly specified minHeight value.
-				this.iframe.onload = function(){
-					setTimeout(ifrFunc, 250);
-				}
-			}else{ // new mozillas, opera, safari
-				this.iframe.onload = ifrFunc;
+			catch (e) {
+				error = true;
 			}
-		},
-
-		_applyEditingAreaStyleSheets: function(){
-			// summary:
-			//		apply the specified css files in styleSheets
-			var files = [];
-			if(this.styleSheets){
-				files = this.styleSheets.split(';');
-				this.styleSheets = '';
-			}
-
-			//empty this.editingAreaStyleSheets here, as it will be filled in addStyleSheet
-			files = files.concat(this.editingAreaStyleSheets);
-			this.editingAreaStyleSheets = [];
-
-			if(files.length>0){
-				for(var i=0;i<files.length;i++){
-					var url = files[i];
-					if(url){
-						this.addStyleSheet(dojo.uri.dojoUri(url));
-	 				}
-	 			}
-			}
-		},
-
-		addStyleSheet: function(/*dojo.uri.Uri*/uri) {
-			// summary:
-			//		add an external stylesheet for the editing area
-			// uri:	a dojo.uri.Uri pointing to the url of the external css file
-			var url=uri.toString();
-			if(dojo.lang.find(this.editingAreaStyleSheets, url) > -1){
-				dojo.debug("dojo.widget.RichText.addStyleSheet: Style sheet "+url+" is already applied to the editing area!");
-				return;
-			}
-
-			//if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
-			if(url.charAt(0) == '.' || (url.charAt(0) != '/' && !uri.host)){
-				url = (new dojo.uri.Uri(dojo.global().location, url)).toString();
-			}
-
-			this.editingAreaStyleSheets.push(url);
-			if(this.document.createStyleSheet){ //IE
-				this.document.createStyleSheet(url);
-			}else{ //other browser
-				var head = this.document.getElementsByTagName("head")[0];
-				var stylesheet = this.document.createElement("link");
-				with(stylesheet){
-					rel="stylesheet";
-					type="text/css";
-					href=url;
+		}
+		try {
+			var oNamesParm = new ActiveXObject("DEGetBlockFmtNamesParam.DEGetBlockFmtNamesParam");
+			obj.ExecCommand(this._activeX.command["getblockformatnames"], 0, oNamesParm);
+			var vbNamesArray = new VBArray(oNamesParm.Names);
+			var localFormats = vbNamesArray.toArray();
+			var nativeFormats = ["p", "pre", "address", "h1", "h2", "h3", "h4", "h5", "h6", "ol", "ul", "", "", "", "", "div"];
+			for (var i = 0; i < nativeFormats.length; ++i) {
+				if (nativeFormats[i].length > 0) {
+					this._local2NativeFormatNames[localFormats[i]] = nativeFormats[i];
+					this._native2LocalFormatNames[nativeFormats[i]] = localFormats[i];
 				}
-				head.appendChild(stylesheet);
 			}
-		},
-
-		removeStyleSheet: function (/*dojo.uri.Uri*/uri) {
-			// summary:
-			//		remove an external stylesheet for the editing area
-			var url=uri.toString();
-			//if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
-			if(url.charAt(0) == '.' || (url.charAt(0) != '/' && !uri.host)){
-				url = (new dojo.uri.Uri(dojo.global().location, url)).toString();
+		}
+		catch (e) {
+			error = true;
+		}
+		if (obj && !this.object) {
+			dojo.body().removeChild(obj);
+		}
+	}
+	return !error;
+}, _isResized:function () {
+	return false;
+}, onLoad:function (e) {
+	this.isLoaded = true;
+	if (this.object) {
+		this.document = this.object.DOM;
+		this.window = this.document.parentWindow;
+		this.editNode = this.document.body.firstChild;
+		this.editingArea.style.height = this.height ? this.height : this.minHeight;
+		if (!this.height) {
+			this.connect(this, "onDisplayChanged", "_updateHeight");
+		}
+		this.window._frameElement = this.object;
+	} else {
+		if (this.iframe && !dojo.render.html.ie) {
+			this.editNode = this.document.body;
+			if (!this.height) {
+				this.connect(this, "onDisplayChanged", "_updateHeight");
 			}
-			var index = dojo.lang.find(this.editingAreaStyleSheets, url);
-			if(index == -1){
-				dojo.debug("dojo.widget.RichText.removeStyleSheet: Style sheet "+url+" is not applied to the editing area so it can not be removed!");
-				return;
+			try {
+				this.document.execCommand("useCSS", false, true);
+				this.document.execCommand("styleWithCSS", false, false);
 			}
-			delete this.editingAreaStyleSheets[index];
-
-			var links = this.document.getElementsByTagName("link");
-			for(var i=0;i<links.length;i++){
-				if(links[i].href == url){
-					if(dojo.render.html.ie){//we need to empty the href first, to get IE to remove the rendered styles
-						links[i].href="";
-					}
-					dojo.html.removeNode(links[i]);
-					break;
-				}
+			catch (e2) {
 			}
-		},
-
-		_drawObject: function (/*String*/html) {
-			// summary:
-			//		Draws an active x object, used by IE
-			this.object = dojo.html.createExternalElement(dojo.doc(), "object");
-
-			with (this.object) {
-				classid = "clsid:2D360201-FFF5-11D1-8D03-00A0C959BC0A";
-				width = this.inheritWidth ? this._oldWidth : "100%";
-				style.height = this.height ? this.height : (this._oldHeight+"px");
-				Scrollbars = this.height ? true : false;
-				Appearance = this._activeX.appearance.flat;
-			}
-			this.editorObject = this.object;
-			this.editingArea.appendChild(this.object);
-
-			this.object.attachEvent("DocumentComplete", dojo.lang.hitch(this, "onLoad"));
-			//DisplayChanged is fired too often even no change is made, so we ignore it
-			//and call onDisplayChanged manually in execCommand instead
-//			this.object.attachEvent("DisplayChanged", dojo.lang.hitch(this, "onDisplayChanged"));
-
-			dojo.lang.forEach(this.events, function(e){
-				this.object.attachEvent(e.toLowerCase(), dojo.lang.hitch(this, e));
-			}, this);
-
-			this.object.DocumentHTML = '<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">' +
-				'<html><title></title>' +
-				'<style type="text/css">' +
-				'    body,html { padding: 0; margin: 0; }' + //font: ' + font + '; }' +
-				(this.height ? '' : '    body,  { overflow: hidden; }') +
-				'</style>' +
-				//'<base href="' + dojo.global().location + '">' +
-				'<body><div>' + html + '<div></body></html>';
-
-			this._cacheLocalBlockFormatNames();
-		},
-
-		//static cache variables shared among all instance of this class
-		_local2NativeFormatNames: {},
-		_native2LocalFormatNames: {},
-		//in IE, names for blockformat is locale dependent, so we cache the values here
-		//we use activeX to obtain the list, if success or the names are already cached,
-		//return true
-		_cacheLocalBlockFormatNames: function(){
-			// summary:
-			//		in IE, names for blockformat is locale dependent, so we cache the values here
-			//		we use activeX to obtain the list, if success or the names are already cached,
-			//		return true
-			if(!this._native2LocalFormatNames['p']){
-				var obj = this.object;
-				var error = false;
-				if(!obj){
-					//create obj temporarily
-					try{
-						obj = dojo.html.createExternalElement(dojo.doc(), "object");
-						obj.classid = "clsid:2D360201-FFF5-11D1-8D03-00A0C959BC0A";
-						dojo.body().appendChild(obj);
-						obj.DocumentHTML = "<html><head></head><body></body></html>";
-					}catch(e){ error = true; }
-				}
-				try{
-					var oNamesParm = new ActiveXObject("DEGetBlockFmtNamesParam.DEGetBlockFmtNamesParam");
-					obj.ExecCommand(this._activeX.command['getblockformatnames'], 0, oNamesParm);
-					var vbNamesArray = new VBArray(oNamesParm.Names);
-					var localFormats = vbNamesArray.toArray();
-					var nativeFormats = ['p', 'pre', 'address', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ol', 'ul', '', '', '','','div'];
-					for(var i=0;i<nativeFormats.length;++i){
-						if(nativeFormats[i].length>0){
-							this._local2NativeFormatNames[localFormats[i]] = nativeFormats[i];
-							this._native2LocalFormatNames[nativeFormats[i]] = localFormats[i];
-						}
-					}
-				}catch(e){ error = true; }
-				if(obj && !this.object){
-					//delete the temporary obj
-					dojo.body().removeChild(obj);
-				}
-			}
-			return !error;
-		},
-	/* Event handlers
-	 *****************/
-
-		_isResized: function(){ return false; },
-
-		onLoad: function(e){
-			// summary: handler after the content of the document finishes loading
-			this.isLoaded = true;
-			if (this.object){
-				this.document = this.object.DOM;
-				this.window = this.document.parentWindow;
-				this.editNode = this.document.body.firstChild;
-				this.editingArea.style.height = this.height ? this.height : this.minHeight;
-				if(!this.height){
-					this.connect(this, "onDisplayChanged", "_updateHeight");
-				}
-				//pretend the object as an iframe, so that the context menu for the
-				//editor can be placed correctly when shown
-				this.window._frameElement = this.object;
-			}else if (this.iframe && !dojo.render.html.ie){
-				this.editNode = this.document.body;
-				if(!this.height){
-					this.connect(this, "onDisplayChanged", "_updateHeight");
-				}
-
-				try { // sanity check for Mozilla
-					this.document.execCommand("useCSS", false, true); // old moz call
-					this.document.execCommand("styleWithCSS", false, false); // new moz call
-					//this.document.execCommand("insertBrOnReturn", false, false); // new moz call
-				}catch(e2){ }
-
-				if (dojo.render.html.safari) {
-					/*
-					this.iframe.style.visiblity = "visible";
-					this.iframe.style.border = "1px solid black";
-					this.editNode.style.visiblity = "visible";
-					this.editNode.style.border = "1px solid black";
-					*/
-					// this.onDisplayChanged();
-					this.connect(this.editNode, "onblur", "onBlur");
-					this.connect(this.editNode, "onfocus", "onFocus");
-					this.connect(this.editNode, "onclick", "onFocus");
-
-					this.interval = setInterval(dojo.lang.hitch(this, "onDisplayChanged"), 750);
-					// dojo.raise("onload");
-					// dojo.debug(this.editNode.parentNode.parentNode.parentNode.nodeName);
-				} else if (dojo.render.html.mozilla || dojo.render.html.opera) {
+			if (dojo.render.html.safari) {
+				this.connect(this.editNode, "onblur", "onBlur");
+				this.connect(this.editNode, "onfocus", "onFocus");
+				this.connect(this.editNode, "onclick", "onFocus");
+				this.interval = setInterval(dojo.lang.hitch(this, "onDisplayChanged"), 750);
+			} else {
+				if (dojo.render.html.mozilla || dojo.render.html.opera) {
 					var doc = this.document;
 					var addListener = dojo.event.browser.addListener;
 					var self = this;
-					dojo.lang.forEach(this.events, function(e){
+					dojo.lang.forEach(this.events, function (e) {
 						var l = addListener(self.document, e.substr(2).toLowerCase(), dojo.lang.hitch(self, e));
-						if(e=="onBlur"){
-							// We need to unhook the blur event listener on close as we
-							// can encounter a garunteed crash in FF if another event is
-							// also fired
-							var unBlur = { unBlur: function(e){
-									dojo.event.browser.removeListener(doc, "blur", l);
-							} };
+						if (e == "onBlur") {
+							var unBlur = {unBlur:function (e) {
+								dojo.event.browser.removeListener(doc, "blur", l);
+							}};
 							dojo.event.connect("before", self, "close", unBlur, "unBlur");
 						}
 					});
 				}
-				// FIXME: when scrollbars appear/disappear this needs to be fired
-			}else if(dojo.render.html.ie){
-				// IE contentEditable
-				if(!this.height){
+			}
+		} else {
+			if (dojo.render.html.ie) {
+				if (!this.height) {
 					this.connect(this, "onDisplayChanged", "_updateHeight");
 				}
-				this.editNode.style.zoom = 1.0;
+				this.editNode.style.zoom = 1;
 			}
-
-			this._applyEditingAreaStyleSheets();
-
-			if(this.focusOnLoad){
-				this.focus();
+		}
+	}
+	this._applyEditingAreaStyleSheets();
+	if (this.focusOnLoad) {
+		this.focus();
+	}
+	this.onDisplayChanged(e);
+	if (this.onLoadDeferred) {
+		this.onLoadDeferred.callback(true);
+	}
+}, onKeyDown:function (e) {
+	if ((!e) && (this.object)) {
+		e = dojo.event.browser.fixEvent(this.window.event);
+	}
+	if ((dojo.render.html.ie) && (e.keyCode == e.KEY_TAB)) {
+		e.preventDefault();
+		e.stopPropagation();
+		this.execCommand((e.shiftKey ? "outdent" : "indent"));
+	} else {
+		if (dojo.render.html.ie) {
+			if ((65 <= e.keyCode) && (e.keyCode <= 90)) {
+				e.charCode = e.keyCode;
+				this.onKeyPress(e);
 			}
-			this.onDisplayChanged(e);
-			if(this.onLoadDeferred){
-				this.onLoadDeferred.callback(true);
-			}
-		},
-
-		onKeyDown: function(e){
-			// summary: Fired on keydown
-			if((!e)&&(this.object)){
-				e = dojo.event.browser.fixEvent(this.window.event);
-			}
-			// dojo.debug("onkeydown:", e.keyCode);
-			// we need this event at the moment to get the events from control keys
-			// such as the backspace. It might be possible to add this to Dojo, so that
-			// keyPress events can be emulated by the keyDown and keyUp detection.
-			if((dojo.render.html.ie)&&(e.keyCode == e.KEY_TAB)){
+		}
+	}
+}, onKeyUp:function (e) {
+	return;
+}, KEY_CTRL:1, onKeyPress:function (e) {
+	if ((!e) && (this.object)) {
+		e = dojo.event.browser.fixEvent(this.window.event);
+	}
+	var modifiers = e.ctrlKey ? this.KEY_CTRL : 0;
+	if (this._keyHandlers[e.key]) {
+		var handlers = this._keyHandlers[e.key], i = 0, handler;
+		while (handler = handlers[i++]) {
+			if (modifiers == handler.modifiers) {
 				e.preventDefault();
-				e.stopPropagation();
-				// FIXME: this is a poor-man's indent/outdent. It would be
-				// better if it added 4 "&nbsp;" chars in an undoable way.
-				// Unfortuantly pasteHTML does not prove to be undoable
-				this.execCommand((e.shiftKey ? "outdent" : "indent"));
-			}else if(dojo.render.html.ie){
-				if((65 <= e.keyCode)&&(e.keyCode <= 90)){
-					e.charCode = e.keyCode;
-					this.onKeyPress(e);
-				}
-				// dojo.debug(e.ctrlKey);
-				// dojo.debug(e.keyCode);
-				// dojo.debug(e.charCode);
-				// this.onKeyPress(e);
+				handler.handler.call(this);
+				break;
 			}
-		},
-
-		onKeyUp: function(e){
-			// summary: Fired on keyup
-			return;
-		},
-
-		KEY_CTRL: 1,
-
-		onKeyPress: function(e){
-			// summary: Fired on keypress
-			if((!e)&&(this.object)){
-				e = dojo.event.browser.fixEvent(this.window.event);
+		}
+	}
+	dojo.lang.setTimeout(this, this.onKeyPressed, 1, e);
+}, addKeyHandler:function (key, modifiers, handler) {
+	if (!(this._keyHandlers[key] instanceof Array)) {
+		this._keyHandlers[key] = [];
+	}
+	this._keyHandlers[key].push({modifiers:modifiers || 0, handler:handler});
+}, onKeyPressed:function (e) {
+	this.onDisplayChanged();
+}, onClick:function (e) {
+	this.onDisplayChanged(e);
+}, onBlur:function (e) {
+}, _initialFocus:true, onFocus:function (e) {
+	if ((dojo.render.html.mozilla) && (this._initialFocus)) {
+		this._initialFocus = false;
+		if (dojo.string.trim(this.editNode.innerHTML) == "&nbsp;") {
+			this.placeCursorAtStart();
+		}
+	}
+}, blur:function () {
+	if (this.iframe) {
+		this.window.blur();
+	} else {
+		if (this.object) {
+			this.document.body.blur();
+		} else {
+			if (this.editNode) {
+				this.editNode.blur();
 			}
-			// handle the various key events
-
-			var modifiers = e.ctrlKey ? this.KEY_CTRL : 0;
-
-			if (this._keyHandlers[e.key]) {
-				// dojo.debug("char:", e.key);
-				var handlers = this._keyHandlers[e.key], i = 0, handler;
-				while (handler = handlers[i++]) {
-					if (modifiers == handler.modifiers) {
-						e.preventDefault();
-						handler.handler.call(this);
-						break;
-					}
-				}
-			}
-
-			// function call after the character has been inserted
-			dojo.lang.setTimeout(this, this.onKeyPressed, 1, e);
-		},
-
-		addKeyHandler: function (/*String*/key, /*Int*/modifiers, /*Function*/handler) {
-			// summary: add a handler for a keyboard shortcut
-			if (!(this._keyHandlers[key] instanceof Array)) { this._keyHandlers[key] = []; }
-			this._keyHandlers[key].push({
-				modifiers: modifiers || 0,
-				handler: handler
-			});
-		},
-
-		onKeyPressed: function (e) {
-			// summary:
-			//		Fired after a keypress event has occured and it's action taken. This
-		 	//		is useful if action needs to be taken after text operations have finished
-
-			// Mozilla adds a single <p> with an embedded <br> when you hit enter once:
-			//   <p><br>\n</p>
-			// when you hit enter again it adds another <br> inside your enter
-			//   <p><br>\n<br>\n</p>
-			// and if you hit enter again it splits the <br>s over 2 <p>s
-			//   <p><br>\n</p>\n<p><br>\n</p>
-			// now this assumes that <p>s have double the line-height of <br>s to work
-			// and so we need to remove the <p>s to ensure the position of the cursor
-			// changes from the users perspective when they hit enter, as the second two
-			// html snippets render the same when margins are set to 0.
-
-			// TODO: doesn't really work; is this really needed?
-			//if (dojo.render.html.moz) {
-			//	for (var i = 0; i < this.document.getElementsByTagName("p").length; i++) {
-			//		var p = this.document.getElementsByTagName("p")[i];
-			//		if (p.innerHTML.match(/^<br>\s$/m)) {
-			//			while (p.hasChildNodes()) { p.parentNode.insertBefore(p.firstChild, p); }
-			//			p.parentNode.removeChild(p);
-			//		}
-			//	}
-			//}
-			this.onDisplayChanged(/*e*/); // can't pass in e
-		},
-
-		onClick: function(e){ this.onDisplayChanged(e); },
-		onBlur: function(e){ },
-		_initialFocus: true,
-		onFocus: function(e){
-			// summary: Fired on focus
-			if( (dojo.render.html.mozilla)&&(this._initialFocus) ){
-				this._initialFocus = false;
-				if(dojo.string.trim(this.editNode.innerHTML) == "&nbsp;"){
-					this.placeCursorAtStart();
-//					this.execCommand("selectall");
-//					this.window.getSelection().collapseToStart();
-				}
-			}
-			/*
-			// FIXME: attempted (but ultimately unworkable) solution for #2066
-			if(dojo.render.html.safari){
-				var sel = this.window.getSelection();
-				dojo.debug(dojo.dom.isDescendantOf(sel.focusNode, this.document.body));
-
-				var isLastNode = (sel.focusNode == this.document.body.lastChild);
-				if(!isLastNode){ return; }
-				var isText = (sel.focusNode.nodeType == 3); 
-				if(!isText){ return; }
-				var isLastChar = (sel.focusOffset == sel.focusNode.nodeValue.length);
-				if(!isLastChar){ return; }
-				dojo.debug(sel.focusOffset, sel.focusNode.nodeValue.length);
-				if(isLastNode && isText && isLastChar){
-					this.document.body.appendChild(this.document.createTextNode(" "));
-					this.document.body.appendChild(this.document.createElement("br"));
-					this.document.body.appendChild(this.document.createElement("p"));
-					this.document.body.appendChild(this.document.createElement("p"));
-					sel.collapse(sel.focusNode, sel.focusOffset-1);
-					sel.collapse(sel.focusNode, sel.focusOffset+1);
-				}
-			}
-			*/
-		},
-
-		blur: function () {
-			// summary: remove focus from this instance
-			if(this.iframe) { this.window.blur(); }
-			else if(this.object) { this.document.body.blur(); }
-			else if(this.editNode) { this.editNode.blur(); }
-		},
-
-		focus: function () {
-			// summary: move focus to this instance
-			if(this.iframe && !dojo.render.html.ie) { this.window.focus(); }
-			else if(this.object) { this.document.focus(); }
-			// editNode may be hidden in display:none div, lets just punt in this case
-			else if(this.editNode && this.editNode.focus) { this.editNode.focus(); }
-			else{
+		}
+	}
+}, focus:function () {
+	if (this.iframe && !dojo.render.html.ie) {
+		this.window.focus();
+	} else {
+		if (this.object) {
+			this.document.focus();
+		} else {
+			if (this.editNode && this.editNode.focus) {
+				this.editNode.focus();
+			} else {
 				dojo.debug("Have no idea how to focus into the editor!");
 			}
-		},
-
-		/** this event will be fired everytime the display context changes and the
-		 result needs to be reflected in the UI */
-		onDisplayChanged: function (e){ },
-
-
-	/* Formatting commands
-	 **********************/
-
-		// Object: IE's Active X codes: see http://www.computerbytesman.com/js/activex/dhtmledit.htm
-		_activeX: {
-			command: {
-				bold: 5000,
-				italic: 5023,
-				underline: 5048,
-
-				justifycenter: 5024,
-				justifyleft: 5025,
-				justifyright: 5026,
-
-				cut: 5003,
-				copy: 5002,
-				paste: 5032,
-				"delete": 5004,
-
-				undo: 5049,
-				redo: 5033,
-
-				removeformat: 5034,
-				selectall: 5035,
-				unlink: 5050,
-
-				indent: 5018,
-				outdent: 5031,
-
-				insertorderedlist: 5030,
-				insertunorderedlist: 5051,
-
-				// table commands
-				inserttable: 5022,
-				insertcell: 5019,
-				insertcol: 5020,
-				insertrow: 5021,
-				deletecells: 5005,
-				deletecols: 5006,
-				deleterows: 5007,
-				mergecells: 5029,
-				splitcell: 5047,
-
-				// the command need mapping, they don't translate directly
-				// to the contentEditable commands
-				setblockformat: 5043,
-				getblockformat: 5011,
-				getblockformatnames: 5012,
-				setfontname: 5044,
-				getfontname: 5013,
-				setfontsize: 5045,
-				getfontsize: 5014,
-				setbackcolor: 5042,
-				getbackcolor: 5010,
-				setforecolor: 5046,
-				getforecolor: 5015,
-
-				findtext: 5008,
-				font: 5009,
-				hyperlink: 5016,
-				image: 5017,
-
-				lockelement: 5027,
-				makeabsolute: 5028,
-				sendbackward: 5036,
-				bringforward: 5037,
-				sendbelowtext: 5038,
-				bringabovetext: 5039,
-				sendtoback: 5040,
-				bringtofront: 5041,
-
-				properties: 5052
-			},
-
-			ui: {
-				"default": 0,
-				prompt: 1,
-				noprompt: 2
-			},
-
-			status: {
-				notsupported: 0,
-				disabled: 1,
-				enabled: 3,
-				latched: 7,
-				ninched: 11
-			},
-
-			appearance: {
-				flat: 0,
-				inset: 1
-			},
-
-			state: {
-				unchecked: 0,
-				checked: 1,
-				gray: 2
+		}
+	}
+}, onDisplayChanged:function (e) {
+}, _activeX:{command:{bold:5000, italic:5023, underline:5048, justifycenter:5024, justifyleft:5025, justifyright:5026, cut:5003, copy:5002, paste:5032, "delete":5004, undo:5049, redo:5033, removeformat:5034, selectall:5035, unlink:5050, indent:5018, outdent:5031, insertorderedlist:5030, insertunorderedlist:5051, inserttable:5022, insertcell:5019, insertcol:5020, insertrow:5021, deletecells:5005, deletecols:5006, deleterows:5007, mergecells:5029, splitcell:5047, setblockformat:5043, getblockformat:5011, getblockformatnames:5012, setfontname:5044, getfontname:5013, setfontsize:5045, getfontsize:5014, setbackcolor:5042, getbackcolor:5010, setforecolor:5046, getforecolor:5015, findtext:5008, font:5009, hyperlink:5016, image:5017, lockelement:5027, makeabsolute:5028, sendbackward:5036, bringforward:5037, sendbelowtext:5038, bringabovetext:5039, sendtoback:5040, bringtofront:5041, properties:5052}, ui:{"default":0, prompt:1, noprompt:2}, status:{notsupported:0, disabled:1, enabled:3, latched:7, ninched:11}, appearance:{flat:0, inset:1}, state:{unchecked:0, checked:1, gray:2}}, _normalizeCommand:function (cmd) {
+	var drh = dojo.render.html;
+	var command = cmd.toLowerCase();
+	if (command == "formatblock") {
+		if (drh.safari) {
+			command = "heading";
+		}
+	} else {
+		if (this.object) {
+			switch (command) {
+			  case "createlink":
+				command = "hyperlink";
+				break;
+			  case "insertimage":
+				command = "image";
+				break;
 			}
-		},
-
-		_normalizeCommand: function (/*String*/cmd){
-			// summary:
-			//		Used as the advice function by dojo.event.connect to map our
-		 	//		normalized set of commands to those supported by the target
-		 	//		browser
-			var drh = dojo.render.html;
-
-			var command = cmd.toLowerCase();
-			if(command == "formatblock"){
-				if(drh.safari){ command = "heading"; }
-			}else if(this.object){
-				switch(command){
-					case "createlink":
-						command = "hyperlink";
-						break;
-					case "insertimage":
-						command = "image";
-						break;
-				}
-			}else if(command == "hilitecolor" && !drh.mozilla){
+		} else {
+			if (command == "hilitecolor" && !drh.mozilla) {
 				command = "backcolor";
 			}
-
-			return command;
-		},
-
-		_safariIsLeopard: function(){
-			var gt420 = false;
-			if(dojo.render.html.safari){
-				var tmp = dojo.render.html.UA.split("AppleWebKit/")[1];
-				var ver = parseFloat(tmp.split(" ")[0]);
-				if(ver >= 420){ gt420 = true; }
-			}
-			return gt420;
-		},
-
-		queryCommandAvailable: function (/*String*/command) {
-			// summary:
-			//		Tests whether a command is supported by the host. Clients SHOULD check
-			//		whether a command is supported before attempting to use it, behaviour
-			//		for unsupported commands is undefined.
-			// command: The command to test for
-			var ie = 1;
-			var mozilla = 1 << 1;
-			var safari = 1 << 2;
-			var opera = 1 << 3;
-			var safari420 = 1 << 4;
-
-			var gt420 = this._safariIsLeopard();
-
-			function isSupportedBy (browsers) {
-				return {
-					ie: Boolean(browsers & ie),
-					mozilla: Boolean(browsers & mozilla),
-					safari: Boolean(browsers & safari),
-					safari420: Boolean(browsers & safari420),
-					opera: Boolean(browsers & opera)
+		}
+	}
+	return command;
+}, _safariIsLeopard:function () {
+	var gt420 = false;
+	if (dojo.render.html.safari) {
+		var tmp = dojo.render.html.UA.split("AppleWebKit/")[1];
+		var ver = parseFloat(tmp.split(" ")[0]);
+		if (ver >= 420) {
+			gt420 = true;
+		}
+	}
+	return gt420;
+}, queryCommandAvailable:function (command) {
+	var ie = 1;
+	var mozilla = 1 << 1;
+	var safari = 1 << 2;
+	var opera = 1 << 3;
+	var safari420 = 1 << 4;
+	var gt420 = this._safariIsLeopard();
+	function isSupportedBy(browsers) {
+		return {ie:Boolean(browsers & ie), mozilla:Boolean(browsers & mozilla), safari:Boolean(browsers & safari), safari420:Boolean(browsers & safari420), opera:Boolean(browsers & opera)};
+	}
+	var supportedBy = null;
+	switch (command.toLowerCase()) {
+	  case "bold":
+	  case "italic":
+	  case "underline":
+	  case "subscript":
+	  case "superscript":
+	  case "fontname":
+	  case "fontsize":
+	  case "forecolor":
+	  case "hilitecolor":
+	  case "justifycenter":
+	  case "justifyfull":
+	  case "justifyleft":
+	  case "justifyright":
+	  case "delete":
+	  case "selectall":
+		supportedBy = isSupportedBy(mozilla | ie | safari | opera);
+		break;
+	  case "createlink":
+	  case "unlink":
+	  case "removeformat":
+	  case "inserthorizontalrule":
+	  case "insertimage":
+	  case "insertorderedlist":
+	  case "insertunorderedlist":
+	  case "indent":
+	  case "outdent":
+	  case "formatblock":
+	  case "inserthtml":
+	  case "undo":
+	  case "redo":
+	  case "strikethrough":
+		supportedBy = isSupportedBy(mozilla | ie | opera | safari420);
+		break;
+	  case "blockdirltr":
+	  case "blockdirrtl":
+	  case "dirltr":
+	  case "dirrtl":
+	  case "inlinedirltr":
+	  case "inlinedirrtl":
+		supportedBy = isSupportedBy(ie);
+		break;
+	  case "cut":
+	  case "copy":
+	  case "paste":
+		supportedBy = isSupportedBy(ie | mozilla | safari420);
+		break;
+	  case "inserttable":
+		supportedBy = isSupportedBy(mozilla | (this.object ? ie : 0));
+		break;
+	  case "insertcell":
+	  case "insertcol":
+	  case "insertrow":
+	  case "deletecells":
+	  case "deletecols":
+	  case "deleterows":
+	  case "mergecells":
+	  case "splitcell":
+		supportedBy = isSupportedBy(this.object ? ie : 0);
+		break;
+	  default:
+		return false;
+	}
+	return (dojo.render.html.ie && supportedBy.ie) || (dojo.render.html.mozilla && supportedBy.mozilla) || (dojo.render.html.safari && supportedBy.safari) || (gt420 && supportedBy.safari420) || (dojo.render.html.opera && supportedBy.opera);
+}, execCommand:function (command, argument) {
+	var returnValue;
+	this.focus();
+	command = this._normalizeCommand(command);
+	if (argument != undefined) {
+		if (command == "heading") {
+			throw new Error("unimplemented");
+		} else {
+			if (command == "formatblock") {
+				if (this.object) {
+					argument = this._native2LocalFormatNames[argument];
+				} else {
+					if (dojo.render.html.ie) {
+						argument = "<" + argument + ">";
+					}
 				}
 			}
-
-			var supportedBy = null;
-
-			switch (command.toLowerCase()) {
-				case "bold": case "italic": case "underline":
-				case "subscript": case "superscript":
-				case "fontname": case "fontsize":
-				case "forecolor": case "hilitecolor":
-				case "justifycenter": case "justifyfull": case "justifyleft":
-				case "justifyright": case "delete": case "selectall":
-					supportedBy = isSupportedBy(mozilla | ie | safari | opera);
-					break;
-
-				case "createlink": case "unlink": case "removeformat":
-				case "inserthorizontalrule": case "insertimage":
-				case "insertorderedlist": case "insertunorderedlist":
-				case "indent": case "outdent": case "formatblock":
-				case "inserthtml": case "undo": case "redo": case "strikethrough":
-					supportedBy = isSupportedBy(mozilla | ie | opera | safari420);
-					break;
-
-				case "blockdirltr": case "blockdirrtl":
-				case "dirltr": case "dirrtl":
-				case "inlinedirltr": case "inlinedirrtl":
-					supportedBy = isSupportedBy(ie);
-					break;
-				case "cut": case "copy": case "paste":
-					supportedBy = isSupportedBy( ie | mozilla | safari420);
-					break;
-
-				case "inserttable":
-					supportedBy = isSupportedBy(mozilla | (this.object ? ie : 0));
-					break;
-
-				case "insertcell": case "insertcol": case "insertrow":
-				case "deletecells": case "deletecols": case "deleterows":
-				case "mergecells": case "splitcell":
-					supportedBy = isSupportedBy(this.object ? ie : 0);
-					break;
-
-				default: return false;
+		}
+	}
+	if (this.object) {
+		switch (command) {
+		  case "hilitecolor":
+			command = "setbackcolor";
+			break;
+		  case "forecolor":
+		  case "backcolor":
+		  case "fontsize":
+		  case "fontname":
+			command = "set" + command;
+			break;
+		  case "formatblock":
+			command = "setblockformat";
+		}
+		if (command == "strikethrough") {
+			command = "inserthtml";
+			var range = this.document.selection.createRange();
+			if (!range.htmlText) {
+				return;
 			}
-
-			return (dojo.render.html.ie && supportedBy.ie) ||
-				(dojo.render.html.mozilla && supportedBy.mozilla) ||
-				(dojo.render.html.safari && supportedBy.safari) ||
-				(gt420 && supportedBy.safari420) ||
-				(dojo.render.html.opera && supportedBy.opera);  // Boolean return true if the command is supported, false otherwise
-		},
-
-		execCommand: function (/*String*/command, argument){
-			// summary: Executes a command in the Rich Text area
-			// command: The command to execute
-			// argument: An optional argument to the command
-			var returnValue;
-
-			//focus() is required for IE (none-activeX mode) to work
-			//In addition, focus() makes sure after the execution of
-			//the command, the editor receives the focus as expected
-			this.focus();
-
-			command = this._normalizeCommand(command);
-			if (argument != undefined) {
-				if(command == "heading") { throw new Error("unimplemented"); }
-				else if(command == "formatblock"){
-					if(this.object){ //IE activeX mode
-						argument = this._native2LocalFormatNames[argument];
-					}
-					else if(dojo.render.html.ie){ argument = '<'+argument+'>'; }
-				}
+			argument = range.htmlText.strike();
+		} else {
+			if (command == "inserthorizontalrule") {
+				command = "inserthtml";
+				argument = "<hr>";
 			}
-			if(this.object){
-				switch (command) {
-					case "hilitecolor":
-						command = "setbackcolor";
-						break;
-					case "forecolor":
-					case "backcolor":
-					case "fontsize":
-					case "fontname":
-						command = "set" + command;
-						break;
-					case "formatblock":
-						command = "setblockformat";
+		}
+		if (command == "inserthtml") {
+			var range = this.document.selection.createRange();
+			if (this.document.selection.type.toUpperCase() == "CONTROL") {
+				for (var i = 0; i < range.length; i++) {
+					range.item(i).outerHTML = argument;
 				}
-
-				if(command == "strikethrough"){
-					command = "inserthtml";
-					var range = this.document.selection.createRange();
-					if(!range.htmlText){
-						return;
-					}
-					argument=range.htmlText.strike();
-				}else if(command == "inserthorizontalrule"){
-					command = "inserthtml";
-					argument="<hr>";
-				}
-
-				if(command == "inserthtml"){
-					var range = this.document.selection.createRange();
-					if(this.document.selection.type.toUpperCase() == "CONTROL"){
-						//if selection is controlrange, no pasteHTML is available,
-						//we replace the outerHTML directly
-						for(var i=0;i<range.length;i++){
-							range.item(i).outerHTML = argument;
-						}
-					}else{
-						// on IE, we can use the pasteHTML method of the textRange object
-						// to get an undo-able innerHTML modification
-						range.pasteHTML(argument);
-						range.select();
-					}
-					returnValue = true;
-				}else if(arguments.length == 1){
-					returnValue = this.object.ExecCommand(this._activeX.command[command],
-						this._activeX.ui.noprompt);
-				}else{
-					returnValue = this.object.ExecCommand(this._activeX.command[command],
-						this._activeX.ui.noprompt, argument);
-				}
-			}else if(command == "inserthtml"){
-				if(dojo.render.html.ie){
-					//dojo.debug("inserthtml breaks the undo stack when not using the ActiveX version of the control!");
-					var insertRange = this.document.selection.createRange();
-					insertRange.pasteHTML(argument);
-					insertRange.select();
-					//insertRange.collapse(true);
-					return true;
-				}else{
-					return this.document.execCommand(command, false, argument);
-				}
-			/* */
-			// fix up unlink in Mozilla to unlink the link and not just the selection
-			}else if((command == "unlink")&&
-				(this.queryCommandEnabled("unlink"))&&
-				(dojo.render.html.mozilla)){
-				// grab selection
-				// Mozilla gets upset if we just store the range so we have to
-				// get the basic properties and recreate to save the selection
+			} else {
+				range.pasteHTML(argument);
+				range.select();
+			}
+			returnValue = true;
+		} else {
+			if (arguments.length == 1) {
+				returnValue = this.object.ExecCommand(this._activeX.command[command], this._activeX.ui.noprompt);
+			} else {
+				returnValue = this.object.ExecCommand(this._activeX.command[command], this._activeX.ui.noprompt, argument);
+			}
+		}
+	} else {
+		if (command == "inserthtml") {
+			if (dojo.render.html.ie) {
+				var insertRange = this.document.selection.createRange();
+				insertRange.pasteHTML(argument);
+				insertRange.select();
+				return true;
+			} else {
+				return this.document.execCommand(command, false, argument);
+			}
+		} else {
+			if ((command == "unlink") && (this.queryCommandEnabled("unlink")) && (dojo.render.html.mozilla)) {
 				var selection = this.window.getSelection();
 				var selectionRange = selection.getRangeAt(0);
 				var selectionStartContainer = selectionRange.startContainer;
 				var selectionStartOffset = selectionRange.startOffset;
 				var selectionEndContainer = selectionRange.endContainer;
 				var selectionEndOffset = selectionRange.endOffset;
-
-				// select our link and unlink
-				var a = dojo.withGlobal(this.window, "getAncestorElement", dojo.html.selection, ['a']);
+				var a = dojo.withGlobal(this.window, "getAncestorElement", dojo.html.selection, ["a"]);
 				dojo.withGlobal(this.window, "selectElement", dojo.html.selection, [a]);
-
 				returnValue = this.document.execCommand("unlink", false, null);
-
-				// restore original selection
 				var selectionRange = this.document.createRange();
 				selectionRange.setStart(selectionStartContainer, selectionStartOffset);
 				selectionRange.setEnd(selectionEndContainer, selectionEndOffset);
 				selection.removeAllRanges();
 				selection.addRange(selectionRange);
-
 				return returnValue;
-			}else if((command == "hilitecolor")&&(dojo.render.html.mozilla)){
-				// mozilla doesn't support hilitecolor properly when useCSS is
-				// set to false (bugzilla #279330)
-
-				this.document.execCommand("useCSS", false, false);
-				returnValue = this.document.execCommand(command, false, argument);
-				this.document.execCommand("useCSS", false, true);
-
-			}else if((dojo.render.html.ie)&&( (command == "backcolor")||(command == "forecolor") )){
-				// Tested under IE 6 XP2, no problem here, comment out
-				// IE weirdly collapses ranges when we exec these commands, so prevent it
-//				var tr = this.document.selection.createRange();
-				argument = arguments.length > 1 ? argument : null;
-				returnValue = this.document.execCommand(command, false, argument);
-
-				// timeout is workaround for weird IE behavior were the text
-				// selection gets correctly re-created, but subsequent input
-				// apparently isn't bound to it
-//				setTimeout(function(){tr.select();}, 1);
-			}else{
-				// dojo.debug("command:", command, "arg:", argument);
-
-				argument = arguments.length > 1 ? argument : null;
-//				if(dojo.render.html.moz){
-//					this.document = this.iframe.contentWindow.document
-//				}
-
-				if(argument || command!="createlink") {
+			} else {
+				if ((command == "hilitecolor") && (dojo.render.html.mozilla)) {
+					this.document.execCommand("useCSS", false, false);
 					returnValue = this.document.execCommand(command, false, argument);
-				}
-			}
-
-			this.onDisplayChanged();
-			return returnValue;
-		},
-
-		queryCommandEnabled: function(/*String*/command){
-			// summary: check whether a command is enabled or not
-			command = this._normalizeCommand(command);
-			if(this.object){
-				switch (command) {
-					case "hilitecolor":
-						command = "setbackcolor";
-						break;
-					case "forecolor":
-					case "backcolor":
-					case "fontsize":
-					case "fontname":
-						command = "set" + command;
-						break;
-					case "formatblock":
-						command = "setblockformat";
-						break;
-					//below are not natively supported commands, we fake them
-					case "strikethrough":
-						command = "bold"; //whenever bold is enabled, strikethrough should be so as well
-						break;
-					case "inserthorizontalrule":
-						return true;
-				}
-
-				if(typeof this._activeX.command[command] == "undefined"){ return false; }
-				var status = this.object.QueryStatus(this._activeX.command[command]);
-				return ((status != this._activeX.status.notsupported)&&
-					(status != this._activeX.status.disabled));
-			}else{
-				if(dojo.render.html.mozilla){
-					if(command == "unlink"){ // mozilla returns true always
-						return dojo.withGlobal(this.window, "hasAncestorElement", dojo.html.selection, ['a']);
-					} else if (command == "inserttable") {
-						return true;
+					this.document.execCommand("useCSS", false, true);
+				} else {
+					if ((dojo.render.html.ie) && ((command == "backcolor") || (command == "forecolor"))) {
+						argument = arguments.length > 1 ? argument : null;
+						returnValue = this.document.execCommand(command, false, argument);
+					} else {
+						argument = arguments.length > 1 ? argument : null;
+						if (argument || command != "createlink") {
+							returnValue = this.document.execCommand(command, false, argument);
+						}
 					}
 				}
-
-				// return this.document.queryCommandEnabled(command);
-				var elem = (dojo.render.html.ie) ? this.document.selection.createRange() : this.document;
-				return elem.queryCommandEnabled(command);
 			}
-		},
-
-		queryCommandState: function(command){
-			// summary: check the state of a given command
-			command = this._normalizeCommand(command);
-			if(this.object){
-				if(command == "forecolor"){
-					command = "setforecolor";
-				}else if(command == "backcolor"){
-					command = "setbackcolor";
-				}else if(command == "strikethrough"){
-					//check whether we are under a <strike>
-					return dojo.withGlobal(this.window, "hasAncestorElement", dojo.html.selection, ['strike']);
-				}else if(command == "inserthorizontalrule"){
-					return false;
+		}
+	}
+	this.onDisplayChanged();
+	return returnValue;
+}, queryCommandEnabled:function (command) {
+	command = this._normalizeCommand(command);
+	if (this.object) {
+		switch (command) {
+		  case "hilitecolor":
+			command = "setbackcolor";
+			break;
+		  case "forecolor":
+		  case "backcolor":
+		  case "fontsize":
+		  case "fontname":
+			command = "set" + command;
+			break;
+		  case "formatblock":
+			command = "setblockformat";
+			break;
+		  case "strikethrough":
+			command = "bold";
+			break;
+		  case "inserthorizontalrule":
+			return true;
+		}
+		if (typeof this._activeX.command[command] == "undefined") {
+			return false;
+		}
+		var status = this.object.QueryStatus(this._activeX.command[command]);
+		return ((status != this._activeX.status.notsupported) && (status != this._activeX.status.disabled));
+	} else {
+		if (dojo.render.html.mozilla) {
+			if (command == "unlink") {
+				return dojo.withGlobal(this.window, "hasAncestorElement", dojo.html.selection, ["a"]);
+			} else {
+				if (command == "inserttable") {
+					return true;
 				}
-
-				if(typeof this._activeX.command[command] == "undefined"){ return null; }
-				var status = this.object.QueryStatus(this._activeX.command[command]);
-				return ((status == this._activeX.status.latched)||
-					(status == this._activeX.status.ninched));
-			}else{
-				return this.document.queryCommandState(command);
 			}
-		},
-
-		queryCommandValue: function (command) {
-			// summary: check the value of a given command
-			command = this._normalizeCommand(command);
-			if (this.object) {
-				switch (command) {
-					case "forecolor":
-					case "backcolor":
-					case "fontsize":
-					case "fontname":
-						command = "get" + command;
-						return this.object.execCommand(
-							this._activeX.command[command],
-							this._activeX.ui.noprompt);
-					case "formatblock":
-						var retvalue = this.object.execCommand(
-							this._activeX.command["getblockformat"],
-							this._activeX.ui.noprompt);
-						if(retvalue){
-							return this._local2NativeFormatNames[retvalue];
-						}
-				}
+		}
+		var elem = (dojo.render.html.ie) ? this.document.selection.createRange() : this.document;
+		return elem.queryCommandEnabled(command);
+	}
+}, queryCommandState:function (command) {
+	command = this._normalizeCommand(command);
+	if (this.object) {
+		if (command == "forecolor") {
+			command = "setforecolor";
+		} else {
+			if (command == "backcolor") {
+				command = "setbackcolor";
 			} else {
-				if(dojo.render.html.ie && command == "formatblock"){
-					return this._local2NativeFormatNames[this.document.queryCommandValue(command)] || this.document.queryCommandValue(command);
+				if (command == "strikethrough") {
+					return dojo.withGlobal(this.window, "hasAncestorElement", dojo.html.selection, ["strike"]);
+				} else {
+					if (command == "inserthorizontalrule") {
+						return false;
+					}
 				}
-				return this.document.queryCommandValue(command);
 			}
-		},
-
-
-	/* Misc.
-	 ********/
-
-		placeCursorAtStart: function(){
-			// summary:
-			//		place the cursor at the start of the editing area
-			this.focus();
-			//see comments in placeCursorAtEnd
-			if(dojo.render.html.moz && this.editNode.firstChild &&
-				this.editNode.firstChild.nodeType != dojo.dom.TEXT_NODE){
-				dojo.withGlobal(this.window, "selectElementChildren", dojo.html.selection, [this.editNode.firstChild]);
-			}else{
-				dojo.withGlobal(this.window, "selectElementChildren", dojo.html.selection, [this.editNode]);
+		}
+		if (typeof this._activeX.command[command] == "undefined") {
+			return null;
+		}
+		var status = this.object.QueryStatus(this._activeX.command[command]);
+		return ((status == this._activeX.status.latched) || (status == this._activeX.status.ninched));
+	} else {
+		return this.document.queryCommandState(command);
+	}
+}, queryCommandValue:function (command) {
+	command = this._normalizeCommand(command);
+	if (this.object) {
+		switch (command) {
+		  case "forecolor":
+		  case "backcolor":
+		  case "fontsize":
+		  case "fontname":
+			command = "get" + command;
+			return this.object.execCommand(this._activeX.command[command], this._activeX.ui.noprompt);
+		  case "formatblock":
+			var retvalue = this.object.execCommand(this._activeX.command["getblockformat"], this._activeX.ui.noprompt);
+			if (retvalue) {
+				return this._local2NativeFormatNames[retvalue];
 			}
-			dojo.withGlobal(this.window, "collapse", dojo.html.selection, [true]);
-		},
-
-		placeCursorAtEnd: function(){
-			// summary:
-			//		place the cursor at the end of the editing area
-			this.focus();
-			//In mozilla, if last child is not a text node, we have to use selectElementChildren on this.editNode.lastChild
-			//otherwise the cursor would be placed at the end of the closing tag of this.editNode.lastChild
-			if(dojo.render.html.moz && this.editNode.lastChild &&
-				this.editNode.lastChild.nodeType != dojo.dom.TEXT_NODE){
-				dojo.withGlobal(this.window, "selectElementChildren", dojo.html.selection, [this.editNode.lastChild]);
-			}else{
-				dojo.withGlobal(this.window, "selectElementChildren", dojo.html.selection, [this.editNode]);
-			}
-			dojo.withGlobal(this.window, "collapse", dojo.html.selection, [false]);
-		},
-
-		replaceEditorContent: function(/*String*/html){
-			// summary:
-			//		this function set the content while trying to maintain the undo stack
-			html = this._preFilterContent(html);
-			if(this.isClosed){
-				this.domNode.innerHTML = html;
-			}else if(this.window && this.window.getSelection && !dojo.render.html.moz){ // Safari
-				// look ma! it's a totally f'd browser!
-				this.editNode.innerHTML = html;
-			}else if((this.window && this.window.getSelection) || (this.document && this.document.selection)){ // Moz/IE
+		}
+	} else {
+		if (dojo.render.html.ie && command == "formatblock") {
+			return this._local2NativeFormatNames[this.document.queryCommandValue(command)] || this.document.queryCommandValue(command);
+		}
+		return this.document.queryCommandValue(command);
+	}
+}, placeCursorAtStart:function () {
+	this.focus();
+	if (dojo.render.html.moz && this.editNode.firstChild && this.editNode.firstChild.nodeType != dojo.dom.TEXT_NODE) {
+		dojo.withGlobal(this.window, "selectElementChildren", dojo.html.selection, [this.editNode.firstChild]);
+	} else {
+		dojo.withGlobal(this.window, "selectElementChildren", dojo.html.selection, [this.editNode]);
+	}
+	dojo.withGlobal(this.window, "collapse", dojo.html.selection, [true]);
+}, placeCursorAtEnd:function () {
+	this.focus();
+	if (dojo.render.html.moz && this.editNode.lastChild && this.editNode.lastChild.nodeType != dojo.dom.TEXT_NODE) {
+		dojo.withGlobal(this.window, "selectElementChildren", dojo.html.selection, [this.editNode.lastChild]);
+	} else {
+		dojo.withGlobal(this.window, "selectElementChildren", dojo.html.selection, [this.editNode]);
+	}
+	dojo.withGlobal(this.window, "collapse", dojo.html.selection, [false]);
+}, replaceEditorContent:function (html) {
+	html = this._preFilterContent(html);
+	if (this.isClosed) {
+		this.domNode.innerHTML = html;
+	} else {
+		if (this.window && this.window.getSelection && !dojo.render.html.moz) {
+			this.editNode.innerHTML = html;
+		} else {
+			if ((this.window && this.window.getSelection) || (this.document && this.document.selection)) {
 				this.execCommand("selectall");
-				if(dojo.render.html.moz && !html){ html = "&nbsp;" }
+				if (dojo.render.html.moz && !html) {
+					html = "&nbsp;";
+				}
 				this.execCommand("inserthtml", html);
 			}
-		},
-
-		_preFilterContent: function(/*String*/html){
-			// summary:
-			//		filter the input before setting the content of the editing area
-			var ec = html;
-			dojo.lang.forEach(this.contentPreFilters, function(ef){
-				ec = ef(ec);
-			});
-			if(this.contentDomPreFilters.length>0){
-				var dom = dojo.doc().createElement('div');
-				dom.style.display = "none";
-				dojo.body().appendChild(dom);
-				dom.innerHTML = ec;
-				dojo.lang.forEach(this.contentDomPreFilters, function(ef){
-					dom = ef(dom);
-				});
-				ec = dom.innerHTML;
-				dojo.body().removeChild(dom);
+		}
+	}
+}, _preFilterContent:function (html) {
+	var ec = html;
+	dojo.lang.forEach(this.contentPreFilters, function (ef) {
+		ec = ef(ec);
+	});
+	if (this.contentDomPreFilters.length > 0) {
+		var dom = dojo.doc().createElement("div");
+		dom.style.display = "none";
+		dojo.body().appendChild(dom);
+		dom.innerHTML = ec;
+		dojo.lang.forEach(this.contentDomPreFilters, function (ef) {
+			dom = ef(dom);
+		});
+		ec = dom.innerHTML;
+		dojo.body().removeChild(dom);
+	}
+	return ec;
+}, _postFilterContent:function (html) {
+	var ec = html;
+	if (this.contentDomPostFilters.length > 0) {
+		var dom = this.document.createElement("div");
+		dom.innerHTML = ec;
+		dojo.lang.forEach(this.contentDomPostFilters, function (ef) {
+			dom = ef(dom);
+		});
+		ec = dom.innerHTML;
+	}
+	dojo.lang.forEach(this.contentPostFilters, function (ef) {
+		ec = ef(ec);
+	});
+	return ec;
+}, _lastHeight:0, _updateHeight:function () {
+	if (!this.isLoaded) {
+		return;
+	}
+	if (this.height) {
+		return;
+	}
+	var height = dojo.html.getBorderBox(this.editNode).height;
+	if (!height) {
+		height = dojo.html.getBorderBox(this.document.body).height;
+	}
+	if (height == 0) {
+		dojo.debug("Can not figure out the height of the editing area!");
+		return;
+	}
+	this._lastHeight = height;
+	this.editorObject.style.height = this._lastHeight + "px";
+	this.window.scrollTo(0, 0);
+}, _saveContent:function (e) {
+	var saveTextarea = dojo.doc().getElementById("dojo.widget.RichText.savedContent");
+	saveTextarea.value += this._SEPARATOR + this.saveName + ":" + this.getEditorContent();
+}, getEditorContent:function () {
+	var ec = "";
+	try {
+		ec = (this._content.length > 0) ? this._content : this.editNode.innerHTML;
+		if (dojo.string.trim(ec) == "&nbsp;") {
+			ec = "";
+		}
+	}
+	catch (e) {
+	}
+	if (dojo.render.html.ie && !this.object) {
+		var re = new RegExp("(?:<p>&nbsp;</p>[\n\r]*)+$", "i");
+		ec = ec.replace(re, "");
+	}
+	ec = this._postFilterContent(ec);
+	if (this.relativeImageUrls) {
+		var siteBase = dojo.global().location.protocol + "//" + dojo.global().location.host;
+		var pathBase = dojo.global().location.pathname;
+		if (pathBase.match(/\/$/)) {
+		} else {
+			var pathParts = pathBase.split("/");
+			if (pathParts.length) {
+				pathParts.pop();
 			}
-			return ec;
-		},
-		_postFilterContent: function(/*String*/html){
-			// summary:
-			//		filter the output after getting the content of the editing area
-			var ec = html;
-			if(this.contentDomPostFilters.length>0){
-				var dom = this.document.createElement('div');
-				dom.innerHTML = ec;
-				dojo.lang.forEach(this.contentDomPostFilters, function(ef){
-					dom = ef(dom);
-				});
-				ec = dom.innerHTML;
+			pathBase = pathParts.join("/") + "/";
+		}
+		var sameSite = new RegExp("(<img[^>]* src=[\"'])(" + siteBase + "(" + pathBase + ")?)", "ig");
+		ec = ec.replace(sameSite, "$1");
+	}
+	return ec;
+}, close:function (save, force) {
+	if (this.isClosed) {
+		return false;
+	}
+	if (arguments.length == 0) {
+		save = true;
+	}
+	this._content = this._postFilterContent(this.editNode.innerHTML);
+	var changed = (this.savedContent != this._content);
+	if (this.interval) {
+		clearInterval(this.interval);
+	}
+	if (dojo.render.html.ie && !this.object) {
+		dojo.event.browser.clean(this.editNode);
+	}
+	if (this.iframe) {
+		delete this.iframe;
+	}
+	if (this.textarea) {
+		with (this.textarea.style) {
+			position = "";
+			left = top = "";
+			if (dojo.render.html.ie) {
+				overflow = this.__overflow;
+				this.__overflow = null;
 			}
-			dojo.lang.forEach(this.contentPostFilters, function(ef){
-				ec = ef(ec);
-			});
-			return ec;
-		},
-
-		//Int: stored last time height
-		_lastHeight: 0,
-
-		_updateHeight: function(){
-			// summary:
-			//		Updates the height of the editor area to fit the contents.
-			if(!this.isLoaded){ return; }
-			if(this.height){ return; }
-
-			var height = dojo.html.getBorderBox(this.editNode).height;
-			//height maybe zero in some cases even though the content is not empty,
-			//we try the height of body instead
-			if(!height){
-				height = dojo.html.getBorderBox(this.document.body).height;
+		}
+		if (save) {
+			this.textarea.value = this._content;
+		} else {
+			this.textarea.value = this.savedContent;
+		}
+		dojo.html.removeNode(this.domNode);
+		this.domNode = this.textarea;
+	} else {
+		if (save) {
+			if (dojo.render.html.moz) {
+				var nc = dojo.doc().createElement("span");
+				this.domNode.appendChild(nc);
+				nc.innerHTML = this.editNode.innerHTML;
+			} else {
+				this.domNode.innerHTML = this._content;
 			}
-			if(height == 0){
-				dojo.debug("Can not figure out the height of the editing area!");
-				return; //prevent setting height to 0
-			}
-			this._lastHeight = height;
-			this.editorObject.style.height = this._lastHeight + "px";
-			this.window.scrollTo(0, 0);
-		},
-
-		_saveContent: function(e){
-			// summary:
-			//		Saves the content in an onunload event if the editor has not been closed
-			var saveTextarea = dojo.doc().getElementById("dojo.widget.RichText.savedContent");
-			saveTextarea.value += this._SEPARATOR + this.saveName + ":" + this.getEditorContent();
-		},
-
-		getEditorContent: function(){
-			// summary:
-			//		return the current content of the editing area (post filters are applied)
-			var ec = "";
-			try{
-				ec = (this._content.length > 0) ? this._content : this.editNode.innerHTML;
-				if(dojo.string.trim(ec) == "&nbsp;"){ ec = ""; }
-			}catch(e){ /* squelch */ }
-
-			if(dojo.render.html.ie && !this.object){
-				//removing appended <P>&nbsp;</P> for IE in none-activeX mode
-				var re = new RegExp("(?:<p>&nbsp;</p>[\n\r]*)+$", "i");
-				ec = ec.replace(re,"");
-			}
-
-			ec = this._postFilterContent(ec);
-
-			if (this.relativeImageUrls) {
-				// why use a regexp instead of dom? because IE is stupid
-				// and won't let us set img.src to a relative URL
-				// this comes after contentPostFilters because once content
-				// gets innerHTML'd img urls will be fully qualified
-				var siteBase = dojo.global().location.protocol + "//" + dojo.global().location.host;
-				var pathBase = dojo.global().location.pathname;
-				if (pathBase.match(/\/$/)) {
-					// ends with slash, match full path
-				} else {
-					// match parent path to find siblings
-					var pathParts = pathBase.split("/");
-					if (pathParts.length) {
-						pathParts.pop();
-					}
-					pathBase = pathParts.join("/") + "/";
-
-				}
-
-				var sameSite = new RegExp("(<img[^>]*\ src=[\"'])("+siteBase+"("+pathBase+")?)", "ig");
-				ec = ec.replace(sameSite, "$1");
-			}
-			return ec;
-		},
-
-		close: function(/*Boolean*/save, /*Boolean*/force){
-			// summary:
-			//		Kills the editor and optionally writes back the modified contents to the
-			//		element from which it originated.
-			// save:
-			//		Whether or not to save the changes. If false, the changes are discarded.
-			// force:
-			if(this.isClosed){return false; }
-
-			if (arguments.length == 0) { save = true; }
-			this._content = this._postFilterContent(this.editNode.innerHTML);
-			var changed = (this.savedContent != this._content);
-
-			// line height is squashed for iframes
-			// FIXME: why was this here? if (this.iframe){ this.domNode.style.lineHeight = null; }
-
-			if(this.interval){ clearInterval(this.interval); }
-
-			if(dojo.render.html.ie && !this.object){
-				dojo.event.browser.clean(this.editNode);
-			}
-
-			if (this.iframe) {
-				// FIXME: should keep iframe around for later re-use
-				delete this.iframe;
-			}
-
-			if(this.textarea){
-				with(this.textarea.style){
-					position = "";
-					left = top = "";
-					if(dojo.render.html.ie){
-						overflow = this.__overflow;
-						this.__overflow = null;
-					}
-				}
-				if(save){
-					this.textarea.value = this._content;
-				}else{
-					this.textarea.value = this.savedContent;
-				}
-				dojo.html.removeNode(this.domNode);
-				this.domNode = this.textarea;
-			}else{
-				if(save){
-					if(dojo.render.html.moz){
-						var nc = dojo.doc().createElement("span");
-						this.domNode.appendChild(nc);
-						nc.innerHTML = this.editNode.innerHTML;
-					}else{
-						this.domNode.innerHTML = this._content;
-					}
-				}else{
-					this.domNode.innerHTML = this.savedContent;
-				}
-			}
-
-			dojo.html.removeClass(this.domNode, "RichTextEditable");
-			this.isClosed = true;
-			this.isLoaded = false;
-			// FIXME: is this always the right thing to do?
-			delete this.editNode;
-
-			if(this.window._frameElement){
-				this.window._frameElement = null;
-			}
-
-			this.window = null;
-			this.document = null;
-			this.object = null;
-			this.editingArea = null;
-			this.editorObject = null;
-
-			return changed; // Boolean: whether the content has been modified
-		},
-
-		destroyRendering: function(){}, // stub!
-
-		destroy: function (){
-			this.destroyRendering();
-			if(!this.isClosed){ this.close(false); }
-
-			dojo.widget.RichText.superclass.destroy.call(this);
-		},
-
-		connect: function (targetObj, targetFunc, thisFunc) {
-			// summary: convenient method for dojo.event.connect
-			dojo.event.connect(targetObj, targetFunc, this, thisFunc);
-		},
-
-		disconnect: function (targetObj, targetFunc, thisFunc) {
-			// summary: convenient method for dojo.event.disconnect
-			dojo.event.disconnect(targetObj, targetFunc, this, thisFunc);
-		},
-
-		disconnectAllWithRoot: function (targetObj) {
-			dojo.deprecated("disconnectAllWithRoot", "is deprecated. No need to disconnect manually", "0.5");
-		},
-
-		_fixContentForMoz: function(html){
-			// summary:
-			//		Moz can not handle strong/em tags correctly, correct them here
-			html = html.replace(/<strong([ \>])/gi, '<b$1' );
-			html = html.replace(/<\/strong>/gi, '<\/b>' );
-			html = html.replace(/<em([ \>])/gi, '<i$1' );
-			html = html.replace(/<\/em>/gi, '<\/i>' );
-			return html;
+		} else {
+			this.domNode.innerHTML = this.savedContent;
 		}
 	}
-);
+	dojo.html.removeClass(this.domNode, "RichTextEditable");
+	this.isClosed = true;
+	this.isLoaded = false;
+	delete this.editNode;
+	if (this.window._frameElement) {
+		this.window._frameElement = null;
+	}
+	this.window = null;
+	this.document = null;
+	this.object = null;
+	this.editingArea = null;
+	this.editorObject = null;
+	return changed;
+}, destroyRendering:function () {
+}, destroy:function () {
+	this.destroyRendering();
+	if (!this.isClosed) {
+		this.close(false);
+	}
+	dojo.widget.RichText.superclass.destroy.call(this);
+}, connect:function (targetObj, targetFunc, thisFunc) {
+	dojo.event.connect(targetObj, targetFunc, this, thisFunc);
+}, disconnect:function (targetObj, targetFunc, thisFunc) {
+	dojo.event.disconnect(targetObj, targetFunc, this, thisFunc);
+}, disconnectAllWithRoot:function (targetObj) {
+	dojo.deprecated("disconnectAllWithRoot", "is deprecated. No need to disconnect manually", "0.5");
+}, _fixContentForMoz:function (html) {
+	html = html.replace(/<strong([ \>])/gi, "<b$1");
+	html = html.replace(/<\/strong>/gi, "</b>");
+	html = html.replace(/<em([ \>])/gi, "<i$1");
+	html = html.replace(/<\/em>/gi, "</i>");
+	return html;
+}});
 
+
 __CPAN_FILE__ src/widget/TreeContextMenu.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -43687,178 +27571,105 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
-
 dojo.provide("dojo.widget.TreeContextMenu");
-
 dojo.require("dojo.event.*");
 dojo.require("dojo.io.*");
 dojo.require("dojo.widget.Menu2");
-
-
-dojo.widget.defineWidget("dojo.widget.TreeContextMenu", dojo.widget.PopupMenu2, function() {
+dojo.widget.defineWidget("dojo.widget.TreeContextMenu", dojo.widget.PopupMenu2, function () {
 	this.listenedTrees = [];
-},
-{
-	open: function(x, y, parentMenu, explodeSrc){
-
-		var result = dojo.widget.PopupMenu2.prototype.open.apply(this, arguments);
-
-		/* publish many events here about structural changes */
-		dojo.event.topic.publish(this.eventNames.open, { menu:this });
-
-		return result;
-	},
-
-	listenTree: function(tree) {
-		/* add context menu to all nodes that exist already */
-		var nodes = tree.getDescendants();
-
-		for(var i=0; i<nodes.length; i++) {
-			if (!nodes[i].isTreeNode) continue;
-			this.bindDomNode(nodes[i].labelNode);
+}, {open:function (x, y, parentMenu, explodeSrc) {
+	var result = dojo.widget.PopupMenu2.prototype.open.apply(this, arguments);
+	dojo.event.topic.publish(this.eventNames.open, {menu:this});
+	return result;
+}, listenTree:function (tree) {
+	var nodes = tree.getDescendants();
+	for (var i = 0; i < nodes.length; i++) {
+		if (!nodes[i].isTreeNode) {
+			continue;
 		}
-
-
-		/* bind context menu to all nodes that will be created in the future (e.g loaded from server)*/
-		var _this = this;
-		dojo.event.topic.subscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
-		dojo.event.topic.subscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
-		dojo.event.topic.subscribe(tree.eventNames.moveTo, this, "onMoveTo");
-		dojo.event.topic.subscribe(tree.eventNames.removeNode, this, "onRemoveNode");
-		dojo.event.topic.subscribe(tree.eventNames.addChild, this, "onAddChild");
-		dojo.event.topic.subscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
-
-		this.listenedTrees.push(tree);
-
-	},
-
-	unlistenTree: function(tree) {
-		/* clear event listeners */
-
-		dojo.event.topic.unsubscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
-		dojo.event.topic.unsubscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
-		dojo.event.topic.unsubscribe(tree.eventNames.moveTo, this, "onMoveTo");
-		dojo.event.topic.unsubscribe(tree.eventNames.removeNode, this, "onRemoveNode");
-		dojo.event.topic.unsubscribe(tree.eventNames.addChild, this, "onAddChild");
-		dojo.event.topic.unsubscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
-
-		for(var i=0; i<this.listenedTrees.length; i++){
-           if(this.listenedTrees[i] === tree){
-                   this.listenedTrees.splice(i, 1);
-                   break;
-           }
+		this.bindDomNode(nodes[i].labelNode);
+	}
+	var _this = this;
+	dojo.event.topic.subscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
+	dojo.event.topic.subscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
+	dojo.event.topic.subscribe(tree.eventNames.moveTo, this, "onMoveTo");
+	dojo.event.topic.subscribe(tree.eventNames.removeNode, this, "onRemoveNode");
+	dojo.event.topic.subscribe(tree.eventNames.addChild, this, "onAddChild");
+	dojo.event.topic.subscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
+	this.listenedTrees.push(tree);
+}, unlistenTree:function (tree) {
+	dojo.event.topic.unsubscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
+	dojo.event.topic.unsubscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
+	dojo.event.topic.unsubscribe(tree.eventNames.moveTo, this, "onMoveTo");
+	dojo.event.topic.unsubscribe(tree.eventNames.removeNode, this, "onRemoveNode");
+	dojo.event.topic.unsubscribe(tree.eventNames.addChild, this, "onAddChild");
+	dojo.event.topic.unsubscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
+	for (var i = 0; i < this.listenedTrees.length; i++) {
+		if (this.listenedTrees[i] === tree) {
+			this.listenedTrees.splice(i, 1);
+			break;
 		}
-	},
-
-	onTreeDestroy: function(message) {
-		this.unlistenTree(message.source);
-	},
-
-	bindTreeNode: function(node) {
-		var _this = this;
-		//dojo.debug("bind to "+node);
-		dojo.lang.forEach(node.getDescendants(),
-			function(e) {_this.bindDomNode(e.labelNode); }
-		);
-	},
-
-
-	unBindTreeNode: function(node) {
-		var _this = this;
-		//dojo.debug("Unbind from "+node);
-		dojo.lang.forEach(node.getDescendants(),
-			function(e) {_this.unBindDomNode(e.labelNode); }
-		);
-	},
-
-	onCreateDOMNode: function(message) {
-		this.bindTreeNode(message.source);
-	},
-
-
-	onMoveFrom: function(message) {
-		if (!dojo.lang.inArray(this.listenedTrees, message.newTree)) {
-			this.unBindTreeNode(message.child);
-		}
-	},
-
-	onMoveTo: function(message) {
-		if (dojo.lang.inArray(this.listenedTrees, message.newTree)) {
-			this.bindTreeNode(message.child);
-		}
-	},
-
-	onRemoveNode: function(message) {
+	}
+}, onTreeDestroy:function (message) {
+	this.unlistenTree(message.source);
+}, bindTreeNode:function (node) {
+	var _this = this;
+	dojo.lang.forEach(node.getDescendants(), function (e) {
+		_this.bindDomNode(e.labelNode);
+	});
+}, unBindTreeNode:function (node) {
+	var _this = this;
+	dojo.lang.forEach(node.getDescendants(), function (e) {
+		_this.unBindDomNode(e.labelNode);
+	});
+}, onCreateDOMNode:function (message) {
+	this.bindTreeNode(message.source);
+}, onMoveFrom:function (message) {
+	if (!dojo.lang.inArray(this.listenedTrees, message.newTree)) {
 		this.unBindTreeNode(message.child);
-	},
-
-	onAddChild: function(message) {
-		if (message.domNodeInitialized) {
-			// dom node was there already => I did not process onNodeDomCreate
-			this.bindTreeNode(message.child);
-		}
 	}
-
-
-});
-
-dojo.widget.defineWidget("dojo.widget.TreeMenuItem", dojo.widget.MenuItem2, {
-	// treeActions menu item performs following actions (to be checked for permissions)
-	treeActions: "",
-
-	initialize: function(args, frag) {
-
-		this.treeActions = this.treeActions.split(",");
-		for(var i=0; i<this.treeActions.length; i++) {
-			this.treeActions[i] = this.treeActions[i].toUpperCase();
-		}
-
-	},
-
-	getTreeNode: function() {
-		var menu = this;
-
-		while (! (menu instanceof dojo.widget.TreeContextMenu) ) {
-			menu = menu.parent;
-		}
-
-		var source = menu.getTopOpenEvent().target;
-
-		while (!source.getAttribute('treeNode') && source.tagName != 'body') {
-			source = source.parentNode;
-		}
-		if (source.tagName == 'body') {
-			dojo.raise("treeNode not detected");
-		}
-		var treeNode = dojo.widget.manager.getWidgetById(source.getAttribute('treeNode'));
-
-		return treeNode;
-	},
-
-
-	menuOpen: function(message) {
-		var treeNode = this.getTreeNode();
-
-		this.setDisabled(false); // enable by default
-
-		var _this = this;
-		dojo.lang.forEach(_this.treeActions,
-			function(action) {
-				_this.setDisabled( treeNode.actionIsDisabled(action) );
-			}
-		);
-
-	},
-
-	toString: function() {
-		return "["+this.widgetType+" node "+this.getTreeNode()+"]";
+}, onMoveTo:function (message) {
+	if (dojo.lang.inArray(this.listenedTrees, message.newTree)) {
+		this.bindTreeNode(message.child);
 	}
+}, onRemoveNode:function (message) {
+	this.unBindTreeNode(message.child);
+}, onAddChild:function (message) {
+	if (message.domNodeInitialized) {
+		this.bindTreeNode(message.child);
+	}
+}});
+dojo.widget.defineWidget("dojo.widget.TreeMenuItem", dojo.widget.MenuItem2, {treeActions:"", initialize:function (args, frag) {
+	this.treeActions = this.treeActions.split(",");
+	for (var i = 0; i < this.treeActions.length; i++) {
+		this.treeActions[i] = this.treeActions[i].toUpperCase();
+	}
+}, getTreeNode:function () {
+	var menu = this;
+	while (!(menu instanceof dojo.widget.TreeContextMenu)) {
+		menu = menu.parent;
+	}
+	var source = menu.getTopOpenEvent().target;
+	while (!source.getAttribute("treeNode") && source.tagName != "body") {
+		source = source.parentNode;
+	}
+	if (source.tagName == "body") {
+		dojo.raise("treeNode not detected");
+	}
+	var treeNode = dojo.widget.manager.getWidgetById(source.getAttribute("treeNode"));
+	return treeNode;
+}, menuOpen:function (message) {
+	var treeNode = this.getTreeNode();
+	this.setDisabled(false);
+	var _this = this;
+	dojo.lang.forEach(_this.treeActions, function (action) {
+		_this.setDisabled(treeNode.actionIsDisabled(action));
+	});
+}, toString:function () {
+	return "[" + this.widgetType + " node " + this.getTreeNode() + "]";
+}});
 
-});
 
-
-
 __CPAN_FILE__ src/widget/Rounded.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -43872,708 +27683,522 @@
 
 dojo.provide("dojo.widget.Rounded");
 dojo.widget.tags.addParseTreeHandler("dojo:rounded");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.ContentPane");
 dojo.require("dojo.html.style");
 dojo.require("dojo.html.display");
 dojo.require("dojo.gfx.color");
-
 dojo.deprecated("dojo.widget.Rounded will be removed in version 0.5; you can now apply rounded corners to any block element using dojo.lfx.rounded.", "0.5");
-
-/*
- *	The following script is derived (with permission) from curvyCorners,
- *	written by Cameron Cooke (CLA on file) and was adapted to Dojo by Brian
- *	Lucas (CLA on file)
- */
-
-dojo.widget.defineWidget(
-	"dojo.widget.Rounded",
-	dojo.widget.ContentPane,
-{
-	isSafari: dojo.render.html.safari,
-
-	boxMargin: "50px", // margin outside rounded corner box
-	radius: 14, // radius of corners
-	domNode: "",
-	corners: "TR,TL,BR,BL", // corner string to render
-	antiAlias: true, // false to disable anti-aliasing
-
-	fillInTemplate: function(args, frag) {
-		dojo.widget.Rounded.superclass.fillInTemplate.call(this, args, frag);
-
-		dojo.html.insertCssFile(this.templateCssPath);
-
-		// Magic to automatically calculate the box height/width if not supplied
-		if (this.domNode.style.height<=0) {
-			var minHeight = (this.radius*1)+this.domNode.clientHeight;
-			this.domNode.style.height = minHeight+"px";
+dojo.widget.defineWidget("dojo.widget.Rounded", dojo.widget.ContentPane, {isSafari:dojo.render.html.safari, boxMargin:"50px", radius:14, domNode:"", corners:"TR,TL,BR,BL", antiAlias:true, fillInTemplate:function (args, frag) {
+	dojo.widget.Rounded.superclass.fillInTemplate.call(this, args, frag);
+	dojo.html.insertCssFile(this.templateCssPath);
+	if (this.domNode.style.height <= 0) {
+		var minHeight = (this.radius * 1) + this.domNode.clientHeight;
+		this.domNode.style.height = minHeight + "px";
+	}
+	if (this.domNode.style.width <= 0) {
+		var minWidth = (this.radius * 1) + this.domNode.clientWidth;
+		this.domNode.style.width = minWidth + "px";
+	}
+	var cornersAvailable = ["TR", "TL", "BR", "BL"];
+	var cornersPassed = this.corners.split(",");
+	this.settings = {antiAlias:this.antiAlias};
+	var setCorner = function (currentCorner) {
+		var val = currentCorner.toLowerCase();
+		if (dojo.lang.inArray(cornersPassed, currentCorner)) {
+			this.settings[val] = {radius:this.radius, enabled:true};
+		} else {
+			this.settings[val] = {radius:0};
 		}
-
-		if (this.domNode.style.width<=0) {
-			var minWidth = (this.radius*1)+this.domNode.clientWidth;
-			this.domNode.style.width = minWidth+"px";
-		}
-
-		var cornersAvailable = ["TR", "TL", "BR", "BL"];
-		var cornersPassed = this.corners.split(",");
-
-		this.settings = {
-			antiAlias: this.antiAlias
-		};
-
-		var setCorner = function(currentCorner) {
-			var val = currentCorner.toLowerCase();
-			if(dojo.lang.inArray(cornersPassed, currentCorner)) {
-				this.settings[val] = { radius: this.radius, enabled: true };
-			} else {
-				this.settings[val] = { radius: 0 }
+	};
+	dojo.lang.forEach(cornersAvailable, setCorner, this);
+	this.domNode.style.margin = this.boxMargin;
+	this.curvyCorners(this.settings);
+	this.applyCorners();
+}, curvyCorners:function (settings) {
+	this.box = this.domNode;
+	this.topContainer = null;
+	this.bottomContainer = null;
+	this.masterCorners = [];
+	var boxHeight = dojo.html.getStyle(this.box, "height");
+	if (boxHeight == "") {
+		boxHeight = "0px";
+	}
+	var boxWidth = dojo.html.getStyle(this.box, "width");
+	var borderWidth = dojo.html.getStyle(this.box, "borderTopWidth");
+	if (borderWidth == "") {
+		borderWidth = "0px";
+	}
+	var borderColour = dojo.html.getStyle(this.box, "borderTopColor");
+	if (borderWidth > 0) {
+		this.antiAlias = true;
+	}
+	var boxColour = dojo.html.getStyle(this.box, "backgroundColor");
+	var backgroundImage = dojo.html.getStyle(this.box, "backgroundImage");
+	var boxPosition = dojo.html.getStyle(this.box, "position");
+	this.boxHeight = parseInt(((boxHeight != "" && boxHeight != "auto" && boxHeight.indexOf("%") == -1) ? boxHeight.substring(0, boxHeight.indexOf("px")) : this.box.scrollHeight));
+	this.boxWidth = parseInt(((boxWidth != "" && boxWidth != "auto" && boxWidth.indexOf("%") == -1) ? boxWidth.substring(0, boxWidth.indexOf("px")) : this.box.scrollWidth));
+	this.borderWidth = parseInt(((borderWidth != "" && borderWidth.indexOf("px") !== -1) ? borderWidth.slice(0, borderWidth.indexOf("px")) : 0));
+	var test = new dojo.gfx.color.Color(boxColour);
+	this.boxColour = ((boxColour != "" && boxColour != "transparent") ? ((boxColour.substr(0, 3) == "rgb") ? this.rgb2Hex(boxColour) : boxColour) : "#ffffff");
+	this.borderColour = ((borderColour != "" && borderColour != "transparent" && this.borderWidth > 0) ? ((borderColour.substr(0, 3) == "rgb") ? this.rgb2Hex(borderColour) : borderColour) : this.boxColour);
+	this.borderString = this.borderWidth + "px" + " solid " + this.borderColour;
+	this.backgroundImage = ((backgroundImage != "none") ? backgroundImage : "");
+	if (boxPosition != "absolute") {
+		this.box.style.position = "relative";
+	}
+	this.applyCorners = function () {
+		for (var t = 0; t < 2; t++) {
+			switch (t) {
+			  case 0:
+				if (this.settings.tl.enabled || this.settings.tr.enabled) {
+					var newMainContainer = document.createElement("DIV");
+					with (newMainContainer.style) {
+						width = "100%";
+						fontSize = "1px";
+						overflow = "hidden";
+						position = "absolute";
+						paddingLeft = this.borderWidth + "px";
+						paddingRight = this.borderWidth + "px";
+						var topMaxRadius = Math.max(this.settings.tl ? this.settings.tl.radius : 0, this.settings.tr ? this.settings.tr.radius : 0);
+						height = topMaxRadius + "px";
+						top = 0 - topMaxRadius + "px";
+						left = 0 - this.borderWidth + "px";
+					}
+					this.topContainer = this.box.appendChild(newMainContainer);
+				}
+				break;
+			  case 1:
+				if (this.settings.bl.enabled || this.settings.br.enabled) {
+					var newMainContainer = document.createElement("DIV");
+					with (newMainContainer.style) {
+						width = "100%";
+						fontSize = "1px";
+						overflow = "hidden";
+						position = "absolute";
+						paddingLeft = this.borderWidth + "px";
+						paddingRight = this.borderWidth + "px";
+						var botMaxRadius = Math.max(this.settings.bl ? this.settings.bl.radius : 0, this.settings.br ? this.settings.br.radius : 0);
+						height = botMaxRadius + "px";
+						bottom = 0 - botMaxRadius + "px";
+						left = 0 - this.borderWidth + "px";
+					}
+					this.bottomContainer = this.box.appendChild(newMainContainer);
+				}
+				break;
 			}
 		}
-		dojo.lang.forEach(cornersAvailable, setCorner, this);
-
-		this.domNode.style.margin = this.boxMargin;
-		this.curvyCorners(this.settings);
-		this.applyCorners();
-	},
-
-	// ------------- curvyCorners OBJECT
-
-	curvyCorners: function(settings){	
-
-		// Setup Globals
-		this.box             = this.domNode;
-		this.topContainer    = null;
-		this.bottomContainer = null;
-		this.masterCorners   = [];
-
-		// Get box formatting details
-		var boxHeight       = dojo.html.getStyle(this.box, "height");
-		if(boxHeight=="") boxHeight="0px";
-		var boxWidth        = dojo.html.getStyle(this.box, "width");
-		var borderWidth     = dojo.html.getStyle(this.box, "borderTopWidth");
-		if(borderWidth=="") borderWidth="0px";
-		//alert(borderWidth);
-
-		var borderColour    = dojo.html.getStyle(this.box, "borderTopColor");
-		// Set to true if we have a border
-		if(borderWidth>0) this.antiAlias=true;
-
-		var boxColour       = dojo.html.getStyle(this.box, "backgroundColor");
-		var backgroundImage = dojo.html.getStyle(this.box, "backgroundImage");
-		var boxPosition     = dojo.html.getStyle(this.box, "position");
-
-		// Set formatting propertes
-		this.boxHeight       = parseInt(((boxHeight != "" && boxHeight != "auto" && boxHeight.indexOf("%") == -1)? boxHeight.substring(0, boxHeight.indexOf("px")) : this.box.scrollHeight));
-		this.boxWidth        = parseInt(((boxWidth != "" && boxWidth != "auto" && boxWidth.indexOf("%") == -1)? boxWidth.substring(0, boxWidth.indexOf("px")) : this.box.scrollWidth));
-		this.borderWidth     = parseInt(((borderWidth != "" && borderWidth.indexOf("px") !== -1)? borderWidth.slice(0, borderWidth.indexOf("px")) : 0));
-
-		// DEBUG ME?
-
-		//dojo.debug(this.rgb2Hex(boxColour));
-		var test  = new dojo.gfx.color.Color(boxColour);
-		//dojo.debug(test.toHex()); 
-
-		this.boxColour       = ((boxColour != "" && boxColour != "transparent")? ((boxColour.substr(0, 3) == "rgb")? this.rgb2Hex(boxColour) : boxColour) : "#ffffff");
-		this.borderColour    = ((borderColour != "" && borderColour != "transparent" && this.borderWidth > 0)? ((borderColour.substr(0, 3) == "rgb")? this.rgb2Hex(borderColour)  : borderColour) : this.boxColour);
-		this.borderString    = this.borderWidth + "px" + " solid " + this.borderColour;
-		this.backgroundImage = ((backgroundImage != "none")? backgroundImage : "");
-
-		// Make box relative if not already absolute
-		if(boxPosition != "absolute") this.box.style.position = "relative";
-
-		//This method creates the corners and
-		//applies them to the div element.
-
-		this.applyCorners = function() {
-			// Create top and bottom containers.
-			// These will be used as a parent for the corners and bars.
-			for(var t = 0; t < 2; t++) {
-			    switch(t) {
-			        // Top
-			        case 0:
-						// Only build top bar if a top corner is to be draw
-						if(this.settings.tl.enabled || this.settings.tr.enabled ) {
-							var newMainContainer = document.createElement("DIV");
-			
-							with(newMainContainer.style){
-								width    = "100%";
-								fontSize = "1px";
-								overflow = "hidden";
-								position = "absolute";
-								//backgroundColor = "#FFFFC4";
-								paddingLeft  = this.borderWidth + "px";
-								paddingRight = this.borderWidth + "px";
-								var topMaxRadius = Math.max(this.settings.tl ? this.settings.tl.radius : 0, this.settings.tr ? this.settings.tr.radius : 0);
-								height = topMaxRadius + "px";
-								top    = 0 - topMaxRadius + "px";
-								left   = 0 - this.borderWidth + "px";
-							}
-							
-							this.topContainer = this.box.appendChild(newMainContainer);
+		if (this.topContainer) {
+			this.box.style.borderTopWidth = "0px";
+		}
+		if (this.bottomContainer) {
+			this.box.style.borderBottomWidth = "0px";
+		}
+		var corners = ["tr", "tl", "br", "bl"];
+		for (var i in corners) {
+			var cc = corners[i];
+			if (!this.settings[cc]) {
+				if (((cc == "tr" || cc == "tl") && this.topContainer != null) || ((cc == "br" || cc == "bl") && this.bottomContainer != null)) {
+					var newCorner = document.createElement("DIV");
+					newCorner.style.position = "relative";
+					newCorner.style.fontSize = "1px";
+					newCorner.style.overflow = "hidden";
+					if (this.backgroundImage == "") {
+						newCorner.style.backgroundColor = this.boxColour;
+					} else {
+						newCorner.style.backgroundImage = this.backgroundImage;
+					}
+					switch (cc) {
+					  case "tl":
+						with (newCorner.style) {
+							height = topMaxRadius - this.borderWidth + "px";
+							marginRight = this.settings.tr.radius - (this.borderWidth * 2) + "px";
+							borderLeft = this.borderString;
+							borderTop = this.borderString;
+							left = -this.borderWidth + "px";
 						}
-			            break;
-	
-			        // Bottom
-			        case 1:      
-			            // Only build bottom bar if a top corner is to be draw
-			            if(this.settings.bl.enabled || this.settings.br.enabled) {
-							var newMainContainer = document.createElement("DIV");
-							with(newMainContainer.style){
-								width    = "100%";
-								fontSize = "1px";
-								overflow = "hidden";
-								position = "absolute";
-								//backgroundColor = "#FFFFC4";
-								paddingLeft  = this.borderWidth + "px";
-								paddingRight = this.borderWidth + "px";
-								var botMaxRadius = Math.max(this.settings.bl ? this.settings.bl.radius : 0, this.settings.br ? this.settings.br.radius : 0);
-								height  = botMaxRadius + "px";
-								bottom  =  0 - botMaxRadius + "px";
-								left    =  0 - this.borderWidth + "px";
-							}
-						this.bottomContainer = this.box.appendChild(newMainContainer);
-			            }
-		            break;
-			    }
-			}
-	
-			// Turn off current borders
-			if(this.topContainer) this.box.style.borderTopWidth = "0px";
-			if(this.bottomContainer) this.box.style.borderBottomWidth = "0px";
-	
-			// Create array of available corners
-			var corners = ["tr", "tl", "br", "bl"];
-		
-			//Loop for each corner
-	
-			for(var i in corners) {
-			    // Get current corner type from array
-			    var cc = corners[i];
-
-			    // Has the user requested the currentCorner be round?
-			    if(!this.settings[cc]) {
-			        // No
-			        if(((cc == "tr" || cc == "tl") && this.topContainer != null) || ((cc == "br" || cc == "bl") && this.bottomContainer != null)) {
-						// We need to create a filler div to fill the space upto the next horzontal corner.
-						var newCorner = document.createElement("DIV");
-		
-						// Setup corners properties
-						newCorner.style.position = "relative";
-						newCorner.style.fontSize = "1px";
-						newCorner.style.overflow = "hidden";
-		
-						// Add background image?
-						if(this.backgroundImage == "") {
-							newCorner.style.backgroundColor = this.boxColour;
-						} else {
-							newCorner.style.backgroundImage = this.backgroundImage;
+						break;
+					  case "tr":
+						with (newCorner.style) {
+							height = topMaxRadius - this.borderWidth + "px";
+							marginLeft = this.settings.tl.radius - (this.borderWidth * 2) + "px";
+							borderRight = this.borderString;
+							borderTop = this.borderString;
+							backgroundPosition = "-" + this.boxWidth + "px 0px";
+							left = this.borderWidth + "px";
 						}
-
-			            switch(cc) {
-							case "tl":
-								with(newCorner.style){
-									height      = topMaxRadius - this.borderWidth + "px";
-									marginRight = this.settings.tr.radius - (this.borderWidth*2) + "px";
-									borderLeft  = this.borderString;
-									borderTop   = this.borderString;
-									left         = -this.borderWidth + "px";
-								}
-							break;
-			
-							case "tr":
-								with(newCorner.style){
-									height      = topMaxRadius - this.borderWidth + "px";
-									marginLeft  = this.settings.tl.radius - (this.borderWidth*2) + "px";
-									borderRight = this.borderString;
-									borderTop   = this.borderString;
-									backgroundPosition  = "-" + this.boxWidth + "px 0px";
-									left         = this.borderWidth + "px";
-								}
-							break;
-	
-							case "bl":
-								with(newCorner.style){
-									height       = botMaxRadius - this.borderWidth + "px";
-									marginRight  = this.settings.br.radius - (this.borderWidth*2) + "px";
-									borderLeft   = this.borderString;
-									borderBottom = this.borderString;
-									left         = -this.borderWidth + "px";
-								}
-							break;
-			
-							case "br":
-								with(newCorner.style){
-									height       = botMaxRadius - this.borderWidth + "px";
-									marginLeft   = this.settings.bl.radius - (this.borderWidth*2) + "px";
-									borderRight  = this.borderString;
-									borderBottom = this.borderString;
-									left         = this.borderWidth + "px"
-								}
-							break;
-			            }
-			        }
-			    } else {
-			        /*
-			        PERFORMANCE NOTE:
-
-			        If more than one corner is requested and a corner has been already
-			        created for the same radius then that corner will be used as a master and cloned.
-			        The pixel bars will then be repositioned to form the new corner type.
-			        All new corners start as a bottom right corner.
-			        */
-			        if(this.masterCorners[this.settings[cc].radius]) {
-			            // Create clone of the master corner
-			            var newCorner = this.masterCorners[this.settings[cc].radius].cloneNode(true);
-			        } else {
-			            // Yes, we need to create a new corner
-			            var newCorner = document.createElement("DIV");
-						with(newCorner.style){
-							height = this.settings[cc].radius + "px";
-							width  = this.settings[cc].radius + "px";
-							position = "absolute";
-							fontSize = "1px";
-							overflow = "hidden";
+						break;
+					  case "bl":
+						with (newCorner.style) {
+							height = botMaxRadius - this.borderWidth + "px";
+							marginRight = this.settings.br.radius - (this.borderWidth * 2) + "px";
+							borderLeft = this.borderString;
+							borderBottom = this.borderString;
+							left = -this.borderWidth + "px";
 						}
-						// THE FOLLOWING BLOCK OF CODE CREATES A ROUNDED CORNER
-						// ---------------------------------------------------- TOP
-			
-						// Get border radius
-						var borderRadius = parseInt(this.settings[cc].radius - this.borderWidth);
-			
-						// Cycle the x-axis
-						for(var intx = 0, j = this.settings[cc].radius; intx < j; intx++) {
-							// Calculate the value of y1 which identifies the pixels inside the border
-							if((intx +1) >= borderRadius) {
-								var y1 = -1;
+						break;
+					  case "br":
+						with (newCorner.style) {
+							height = botMaxRadius - this.borderWidth + "px";
+							marginLeft = this.settings.bl.radius - (this.borderWidth * 2) + "px";
+							borderRight = this.borderString;
+							borderBottom = this.borderString;
+							left = this.borderWidth + "px";
+						}
+						break;
+					}
+				}
+			} else {
+				if (this.masterCorners[this.settings[cc].radius]) {
+					var newCorner = this.masterCorners[this.settings[cc].radius].cloneNode(true);
+				} else {
+					var newCorner = document.createElement("DIV");
+					with (newCorner.style) {
+						height = this.settings[cc].radius + "px";
+						width = this.settings[cc].radius + "px";
+						position = "absolute";
+						fontSize = "1px";
+						overflow = "hidden";
+					}
+					var borderRadius = parseInt(this.settings[cc].radius - this.borderWidth);
+					for (var intx = 0, j = this.settings[cc].radius; intx < j; intx++) {
+						if ((intx + 1) >= borderRadius) {
+							var y1 = -1;
+						} else {
+							var y1 = (Math.floor(Math.sqrt(Math.pow(borderRadius, 2) - Math.pow((intx + 1), 2))) - 1);
+						}
+						if (borderRadius != j) {
+							if ((intx) >= borderRadius) {
+								var y2 = -1;
 							} else {
-								var y1 = (Math.floor(Math.sqrt(Math.pow(borderRadius, 2) - Math.pow((intx+1), 2))) - 1);
+								var y2 = Math.ceil(Math.sqrt(Math.pow(borderRadius, 2) - Math.pow(intx, 2)));
 							}
-			
-							// Only calculate y2 and y3 if there is a border defined
-							if(borderRadius != j) {
-								if((intx) >= borderRadius) {
-									var y2 = -1;
-								} else {
-									var y2 = Math.ceil(Math.sqrt(Math.pow(borderRadius,2) - Math.pow(intx, 2)));
-								}
-			
-								if((intx+1) >= j) {
-									var y3 = -1;
-								} else {
-									var y3 = (Math.floor(Math.sqrt(Math.pow(j ,2) - Math.pow((intx+1), 2))) - 1);
-								}
-							}
-
-							// Calculate y4
-							if((intx) >= j) {
-								var y4 = -1;
+							if ((intx + 1) >= j) {
+								var y3 = -1;
 							} else {
-								var y4 = Math.ceil(Math.sqrt(Math.pow(j ,2) - Math.pow(intx, 2)));
+								var y3 = (Math.floor(Math.sqrt(Math.pow(j, 2) - Math.pow((intx + 1), 2))) - 1);
 							}
-
-							// Draw bar on inside of the border with foreground colour
-							if(y1 > -1) this.drawPixel(intx, 0, this.boxColour, 100, (y1+1), newCorner, -1, this.settings[cc].radius);
-	
-							// Only draw border/foreground antialiased pixels and border if there is a border defined
-							if(borderRadius != j) {
-								// Draw aa pixels?
-								if(this.antiAlias) {
-									// Cycle the y-axis
-									for(var inty = (y1 + 1); inty < y2; inty++) {
-										// For each of the pixels that need anti aliasing between the foreground and border colour draw single pixel divs
-										if(this.backgroundImage != "") {					
-											var borderFract = (this.pixelFraction(intx, inty, borderRadius) * 100);
-					
-											if (borderFract < 30) {
-												this.drawPixel(intx, inty, this.borderColour, 100, 1, newCorner, 0, this.settings[cc].radius);
-											} else {
-												this.drawPixel(intx, inty, this.borderColour, 100, 1, newCorner, -1, this.settings[cc].radius);
-											}
+						}
+						if ((intx) >= j) {
+							var y4 = -1;
+						} else {
+							var y4 = Math.ceil(Math.sqrt(Math.pow(j, 2) - Math.pow(intx, 2)));
+						}
+						if (y1 > -1) {
+							this.drawPixel(intx, 0, this.boxColour, 100, (y1 + 1), newCorner, -1, this.settings[cc].radius);
+						}
+						if (borderRadius != j) {
+							if (this.antiAlias) {
+								for (var inty = (y1 + 1); inty < y2; inty++) {
+									if (this.backgroundImage != "") {
+										var borderFract = (this.pixelFraction(intx, inty, borderRadius) * 100);
+										if (borderFract < 30) {
+											this.drawPixel(intx, inty, this.borderColour, 100, 1, newCorner, 0, this.settings[cc].radius);
 										} else {
-											var pixelcolour = dojo.gfx.color.blend(this.boxColour, this.borderColour, this.pixelFraction(intx, inty, borderRadius));
-											this.drawPixel(intx, inty, pixelcolour, 100, 1, newCorner, 0, this.settings[cc].radius);
+											this.drawPixel(intx, inty, this.borderColour, 100, 1, newCorner, -1, this.settings[cc].radius);
 										}
+									} else {
+										var pixelcolour = dojo.gfx.color.blend(this.boxColour, this.borderColour, this.pixelFraction(intx, inty, borderRadius));
+										this.drawPixel(intx, inty, pixelcolour, 100, 1, newCorner, 0, this.settings[cc].radius);
 									}
 								}
-
-								// Draw bar for the border
-								if(y3 >= y2) {
-									if (y1 == -1) {
-										y1 = 0;
-									}
-									this.drawPixel(intx, y2, this.borderColour, 100, (y3 - y2 + 1), newCorner, 0, this.settings[cc].radius);
-								}	
-								// Set the colour for the outside curve
-								var outsideColour = this.borderColour;
-							} else {
-								// Set the coour for the outside curve
-								var outsideColour = this.boxColour;
-								var y3 = y1;
 							}
-			
-							// Draw aa pixels?
-							if(this.antiAlias) {		
-								// Cycle the y-axis and draw the anti aliased pixels on the
-								// outside of the curve
-								for(var inty = (y3 + 1); inty < y4; inty++) {
-									// For each of the pixels that need anti aliasing between 
-									//the foreground/border colour & background draw single pixel divs
-									this.drawPixel(intx, inty, outsideColour, (this.pixelFraction(intx, inty , j) * 100), 1, newCorner, ((this.borderWidth > 0)? 0 : -1), this.settings[cc].radius);
+							if (y3 >= y2) {
+								if (y1 == -1) {
+									y1 = 0;
 								}
+								this.drawPixel(intx, y2, this.borderColour, 100, (y3 - y2 + 1), newCorner, 0, this.settings[cc].radius);
 							}
-			            }
-
-			            // END OF CORNER CREATION
-			            // ---------------------------------------------------- END
-
-			            // We now need to store the current corner in the masterConers array
-			            this.masterCorners[this.settings[cc].radius] = newCorner.cloneNode(true);
-			        }
-			
-					//Now we have a new corner we need to reposition all the pixels unless
-					//the current corner is the bottom right.
-			        if(cc != "br") {	
-						// Loop through all children (pixel bars)
-						for(var t = 0, k = newCorner.childNodes.length; t < k; t++) {
-							// Get current pixel bar
-							var pixelBar = newCorner.childNodes[t];
-	
-							// Get current top and left properties
-							var pixelBarTop    = parseInt(pixelBar.style.top.substring(0, pixelBar.style.top.indexOf("px")));
-							var pixelBarLeft   = parseInt(pixelBar.style.left.substring(0, pixelBar.style.left.indexOf("px")));
-							var pixelBarHeight = parseInt(pixelBar.style.height.substring(0, pixelBar.style.height.indexOf("px")));
-							
-							// Reposition pixels
-							if(cc == "tl" || cc == "bl") {
-								pixelBar.style.left = this.settings[cc].radius -pixelBarLeft -1 + "px"; // Left
+							var outsideColour = this.borderColour;
+						} else {
+							var outsideColour = this.boxColour;
+							var y3 = y1;
+						}
+						if (this.antiAlias) {
+							for (var inty = (y3 + 1); inty < y4; inty++) {
+								this.drawPixel(intx, inty, outsideColour, (this.pixelFraction(intx, inty, j) * 100), 1, newCorner, ((this.borderWidth > 0) ? 0 : -1), this.settings[cc].radius);
 							}
-							if(cc == "tr" || cc == "tl") {
-								pixelBar.style.top =  this.settings[cc].radius -pixelBarHeight -pixelBarTop + "px"; // Top
-							}
-							var value;
-					
-							switch(cc) {
-								case "tr":
-									value = (-1 *( Math.abs((this.boxWidth - this.settings[cc].radius + this.borderWidth) + pixelBarLeft) - (Math.abs(this.settings[cc].radius -pixelBarHeight -pixelBarTop - this.borderWidth))));
-									pixelBar.style.backgroundPosition  = value + "px";
-									
-								break;
-				
-								case "tl":
-									value = (-1 *( Math.abs((this.settings[cc].radius -pixelBarLeft -1)  - this.borderWidth) - (Math.abs(this.settings[cc].radius -pixelBarHeight -pixelBarTop - this.borderWidth))));
-									pixelBar.style.backgroundPosition  = value + "px";
-
-								break;
-				
-								case "bl":
-									value = (-1 *( Math.abs((this.settings[cc].radius -pixelBarLeft -1) - this.borderWidth) - (Math.abs((this.boxHeight + this.settings[cc].radius + pixelBarTop) -this.borderWidth))));
-									pixelBar.style.backgroundPosition  = value + "px";
-
-								break;
-							}
 						}
 					}
+					this.masterCorners[this.settings[cc].radius] = newCorner.cloneNode(true);
 				}
-				if(newCorner) {
-					// Position the container
-					switch(cc) {
-						case "tl":
-							if(newCorner.style.position == "absolute") newCorner.style.top  = "0px";
-							if(newCorner.style.position == "absolute") newCorner.style.left = "0px";
-							if(this.topContainer) this.topContainer.appendChild(newCorner);
-						break;
-
-						case "tr":
-							if(newCorner.style.position == "absolute") newCorner.style.top  = "0px";
-							if(newCorner.style.position == "absolute") newCorner.style.right = "0px";
-							if(this.topContainer) this.topContainer.appendChild(newCorner);
-						break;
-		
-						case "bl":
-							if(newCorner.style.position == "absolute") newCorner.style.bottom  = "0px";
-							if(newCorner.style.position == "absolute") newCorner.style.left = "0px";
-							if(this.bottomContainer) this.bottomContainer.appendChild(newCorner);
-						break;
-						
-						case "br":
-							if(newCorner.style.position == "absolute") newCorner.style.bottom = "0px";
-							if(newCorner.style.position == "absolute") newCorner.style.right = "0px";
-							if(this.bottomContainer) this.bottomContainer.appendChild(newCorner);
-						break;
+				if (cc != "br") {
+					for (var t = 0, k = newCorner.childNodes.length; t < k; t++) {
+						var pixelBar = newCorner.childNodes[t];
+						var pixelBarTop = parseInt(pixelBar.style.top.substring(0, pixelBar.style.top.indexOf("px")));
+						var pixelBarLeft = parseInt(pixelBar.style.left.substring(0, pixelBar.style.left.indexOf("px")));
+						var pixelBarHeight = parseInt(pixelBar.style.height.substring(0, pixelBar.style.height.indexOf("px")));
+						if (cc == "tl" || cc == "bl") {
+							pixelBar.style.left = this.settings[cc].radius - pixelBarLeft - 1 + "px";
+						}
+						if (cc == "tr" || cc == "tl") {
+							pixelBar.style.top = this.settings[cc].radius - pixelBarHeight - pixelBarTop + "px";
+						}
+						var value;
+						switch (cc) {
+						  case "tr":
+							value = (-1 * (Math.abs((this.boxWidth - this.settings[cc].radius + this.borderWidth) + pixelBarLeft) - (Math.abs(this.settings[cc].radius - pixelBarHeight - pixelBarTop - this.borderWidth))));
+							pixelBar.style.backgroundPosition = value + "px";
+							break;
+						  case "tl":
+							value = (-1 * (Math.abs((this.settings[cc].radius - pixelBarLeft - 1) - this.borderWidth) - (Math.abs(this.settings[cc].radius - pixelBarHeight - pixelBarTop - this.borderWidth))));
+							pixelBar.style.backgroundPosition = value + "px";
+							break;
+						  case "bl":
+							value = (-1 * (Math.abs((this.settings[cc].radius - pixelBarLeft - 1) - this.borderWidth) - (Math.abs((this.boxHeight + this.settings[cc].radius + pixelBarTop) - this.borderWidth))));
+							pixelBar.style.backgroundPosition = value + "px";
+							break;
+						}
 					}
 				}
 			}
-			//The last thing to do is draw the rest of the filler DIVs.
-			//We only need to create a filler DIVs when two corners have
-			//diffrent radiuses in either the top or bottom container.
-	
-			// Find out which corner has the biiger radius and get the difference amount
-			var radiusDiff = [];
-			radiusDiff["t"] = this.settings.tl.enabled && this.settings.tr.enabled ? Math.abs(this.settings.tl.radius - this.settings.tr.radius) : 0;
-			radiusDiff["b"] = this.settings.bl.enabled && this.settings.br.enabled ? Math.abs(this.settings.bl.radius - this.settings.br.radius) : 0;
-
-			for(var z in radiusDiff) {
-				if(radiusDiff[z]) {
-					// Get the type of corner that is the smaller one
-					var smallerCornerType = ((this.settings[z + "l"].radius < this.settings[z + "r"].radius)? z +"l" : z +"r");
-
-					// First we need to create a DIV for the space under the smaller corner
-					var newFiller = document.createElement("DIV");
-					with(newFiller.style) {
-						height = radiusDiff[z] + "px";
-						width  =  this.settings[smallerCornerType].radius+ "px"
-						position = "absolute";
-						fontSize = "1px";
-						overflow = "hidden";
-						backgroundColor = this.boxColour;
+			if (newCorner) {
+				switch (cc) {
+				  case "tl":
+					if (newCorner.style.position == "absolute") {
+						newCorner.style.top = "0px";
 					}
-
-					// Position filler
-					switch(smallerCornerType) {
-						case "tl":
-							with(newFiller.style) {
-								bottom = "0px";
-								left   = "0px";
-								borderLeft = this.borderString;
-							}
-							this.topContainer.appendChild(newFiller);
-						break;
-	
-						case "tr":
-							with(newFiller.style) {
-								bottom = "0px";
-								right  = "0px";
-								borderRight = this.borderString;
-							}
-							this.topContainer.appendChild(newFiller);
-						break;
-
-						case "bl":
-							with(newFiller.style) {
-								top    = "0px";
-								left   = "0px";
-								borderLeft = this.borderString;
-							}
-							this.bottomContainer.appendChild(newFiller);
-						break;
-
-						case "br":
-							with(newFiller.style) {
-								top    = "0px";
-								right  = "0px";
-								borderRight = this.borderString;
-							}
-							this.bottomContainer.appendChild(newFiller);
-						break;
+					if (newCorner.style.position == "absolute") {
+						newCorner.style.left = "0px";
 					}
-			    }
-
-				// Create the bar to fill the gap between each corner horizontally
-				var newFillerBar = document.createElement("DIV");
-				with(newFillerBar.style) {
-					position = "relative";
+					if (this.topContainer) {
+						this.topContainer.appendChild(newCorner);
+					}
+					break;
+				  case "tr":
+					if (newCorner.style.position == "absolute") {
+						newCorner.style.top = "0px";
+					}
+					if (newCorner.style.position == "absolute") {
+						newCorner.style.right = "0px";
+					}
+					if (this.topContainer) {
+						this.topContainer.appendChild(newCorner);
+					}
+					break;
+				  case "bl":
+					if (newCorner.style.position == "absolute") {
+						newCorner.style.bottom = "0px";
+					}
+					if (newCorner.style.position == "absolute") {
+						newCorner.style.left = "0px";
+					}
+					if (this.bottomContainer) {
+						this.bottomContainer.appendChild(newCorner);
+					}
+					break;
+				  case "br":
+					if (newCorner.style.position == "absolute") {
+						newCorner.style.bottom = "0px";
+					}
+					if (newCorner.style.position == "absolute") {
+						newCorner.style.right = "0px";
+					}
+					if (this.bottomContainer) {
+						this.bottomContainer.appendChild(newCorner);
+					}
+					break;
+				}
+			}
+		}
+		var radiusDiff = [];
+		radiusDiff["t"] = this.settings.tl.enabled && this.settings.tr.enabled ? Math.abs(this.settings.tl.radius - this.settings.tr.radius) : 0;
+		radiusDiff["b"] = this.settings.bl.enabled && this.settings.br.enabled ? Math.abs(this.settings.bl.radius - this.settings.br.radius) : 0;
+		for (var z in radiusDiff) {
+			if (radiusDiff[z]) {
+				var smallerCornerType = ((this.settings[z + "l"].radius < this.settings[z + "r"].radius) ? z + "l" : z + "r");
+				var newFiller = document.createElement("DIV");
+				with (newFiller.style) {
+					height = radiusDiff[z] + "px";
+					width = this.settings[smallerCornerType].radius + "px";
+					position = "absolute";
 					fontSize = "1px";
 					overflow = "hidden";
 					backgroundColor = this.boxColour;
 				}
-
-				switch(z) {
-					case "t":
-						// Top Bar
-						if(this.topContainer) {
-							with(newFillerBar.style) {
-								height      = topMaxRadius - this.borderWidth + "px";
-								marginLeft  = this.settings.tl.radius - this.borderWidth + "px";
-								marginRight = this.settings.tr.radius - this.borderWidth + "px";
-								borderTop   = this.borderString;
-							}
-						this.topContainer.appendChild(newFillerBar);
-						}
+				switch (smallerCornerType) {
+				  case "tl":
+					with (newFiller.style) {
+						bottom = "0px";
+						left = "0px";
+						borderLeft = this.borderString;
+					}
+					this.topContainer.appendChild(newFiller);
 					break;
-
-					case "b":
-						if(this.bottomContainer) {
-						// Bottom Bar
-						with(newFillerBar.style) {
-							height       = botMaxRadius - this.borderWidth + "px";
-							marginLeft   = this.settings.bl.radius - this.borderWidth + "px";
-							marginRight  = this.settings.br.radius - this.borderWidth + "px";
-							borderBottom = this.borderString;
-						}
-						this.bottomContainer.appendChild(newFillerBar);
+				  case "tr":
+					with (newFiller.style) {
+						bottom = "0px";
+						right = "0px";
+						borderRight = this.borderString;
 					}
+					this.topContainer.appendChild(newFiller);
 					break;
+				  case "bl":
+					with (newFiller.style) {
+						top = "0px";
+						left = "0px";
+						borderLeft = this.borderString;
+					}
+					this.bottomContainer.appendChild(newFiller);
+					break;
+				  case "br":
+					with (newFiller.style) {
+						top = "0px";
+						right = "0px";
+						borderRight = this.borderString;
+					}
+					this.bottomContainer.appendChild(newFiller);
+					break;
 				}
 			}
-		}
-
-		// This function draws the pixles
-		this.drawPixel = function(intx, inty, colour, transAmount, height, newCorner, image, cornerRadius) {
-			// Create pixel
-			var pixel = document.createElement("DIV");
-
-			
-			// Section doesn't like with (pixel.style) { DEBUG?
-			pixel.style.height   = height + "px";
-			pixel.style.width    = "1px";
-			pixel.style.position = "absolute";
-			pixel.style.fontSize = "1px";
-			pixel.style.overflow = "hidden";
-			
-			// Dont apply background image to border pixels
-			if(image == -1 && this.backgroundImage != "") {
-				pixel.style.backgroundImage = this.backgroundImage;
-				pixel.style.backgroundPosition  = "-" + (this.boxWidth - (cornerRadius - intx) + this.borderWidth) + "px -" + ((this.boxHeight + cornerRadius + inty) -this.borderWidth) + "px";
-			} else {
-				pixel.style.backgroundColor = colour;
+			var newFillerBar = document.createElement("DIV");
+			with (newFillerBar.style) {
+				position = "relative";
+				fontSize = "1px";
+				overflow = "hidden";
+				backgroundColor = this.boxColour;
 			}
-			
-			// Set opacity if the transparency is anything other than 100
-			if (transAmount != 100) {
-				dojo.html.setOpacity(pixel, transAmount);
+			switch (z) {
+			  case "t":
+				if (this.topContainer) {
+					with (newFillerBar.style) {
+						height = topMaxRadius - this.borderWidth + "px";
+						marginLeft = this.settings.tl.radius - this.borderWidth + "px";
+						marginRight = this.settings.tr.radius - this.borderWidth + "px";
+						borderTop = this.borderString;
+					}
+					this.topContainer.appendChild(newFillerBar);
+				}
+				break;
+			  case "b":
+				if (this.bottomContainer) {
+					with (newFillerBar.style) {
+						height = botMaxRadius - this.borderWidth + "px";
+						marginLeft = this.settings.bl.radius - this.borderWidth + "px";
+						marginRight = this.settings.br.radius - this.borderWidth + "px";
+						borderBottom = this.borderString;
+					}
+					this.bottomContainer.appendChild(newFillerBar);
+				}
+				break;
 			}
-			// Set the pixels position
-			pixel.style.top = inty + "px";
-			pixel.style.left = intx + "px";
-		
-			newCorner.appendChild(pixel);
 		}
-	},
-
-	//For a pixel cut by the line determines the fraction of the pixel on the 'inside' of the
-	//line.  Returns a number between 0 and 1
-	pixelFraction: function(x, y, r) {
-		var pixelfraction = 0;
-		
-		//determine the co-ordinates of the two points on the perimeter of the pixel that the
-		//circle crosses
-		
-		var xvalues = [];
-		var yvalues = [];
-		var point = 0;
-		var whatsides = "";
-
-		// x + 0 = Left
-		var intersect = Math.sqrt((Math.pow(r,2) - Math.pow(x,2)));
-
-		if ((intersect >= y) && (intersect < (y+1))) {
-			whatsides = "Left";
-			xvalues[point] = 0;
-			yvalues[point] = intersect - y;
-			point =  point + 1;
+	};
+	this.drawPixel = function (intx, inty, colour, transAmount, height, newCorner, image, cornerRadius) {
+		var pixel = document.createElement("DIV");
+		pixel.style.height = height + "px";
+		pixel.style.width = "1px";
+		pixel.style.position = "absolute";
+		pixel.style.fontSize = "1px";
+		pixel.style.overflow = "hidden";
+		if (image == -1 && this.backgroundImage != "") {
+			pixel.style.backgroundImage = this.backgroundImage;
+			pixel.style.backgroundPosition = "-" + (this.boxWidth - (cornerRadius - intx) + this.borderWidth) + "px -" + ((this.boxHeight + cornerRadius + inty) - this.borderWidth) + "px";
+		} else {
+			pixel.style.backgroundColor = colour;
 		}
-
-		// y + 1 = Top
-		var intersect = Math.sqrt((Math.pow(r,2) - Math.pow(y+1,2)));
-		
-		if ((intersect >= x) && (intersect < (x+1))) {
-			whatsides = whatsides + "Top";
-			xvalues[point] = intersect - x;
-			yvalues[point] = 1;
-			point = point + 1;
+		if (transAmount != 100) {
+			dojo.html.setOpacity(pixel, transAmount);
 		}
-		// x + 1 = Right
-		var intersect = Math.sqrt((Math.pow(r,2) - Math.pow(x+1,2)));
-
-		if ((intersect >= y) && (intersect < (y+1))) {
-			whatsides = whatsides + "Right";
-			xvalues[point] = 1;
-			yvalues[point] = intersect - y;
-			point =  point + 1;
+		pixel.style.top = inty + "px";
+		pixel.style.left = intx + "px";
+		newCorner.appendChild(pixel);
+	};
+}, pixelFraction:function (x, y, r) {
+	var pixelfraction = 0;
+	var xvalues = [];
+	var yvalues = [];
+	var point = 0;
+	var whatsides = "";
+	var intersect = Math.sqrt((Math.pow(r, 2) - Math.pow(x, 2)));
+	if ((intersect >= y) && (intersect < (y + 1))) {
+		whatsides = "Left";
+		xvalues[point] = 0;
+		yvalues[point] = intersect - y;
+		point = point + 1;
+	}
+	var intersect = Math.sqrt((Math.pow(r, 2) - Math.pow(y + 1, 2)));
+	if ((intersect >= x) && (intersect < (x + 1))) {
+		whatsides = whatsides + "Top";
+		xvalues[point] = intersect - x;
+		yvalues[point] = 1;
+		point = point + 1;
+	}
+	var intersect = Math.sqrt((Math.pow(r, 2) - Math.pow(x + 1, 2)));
+	if ((intersect >= y) && (intersect < (y + 1))) {
+		whatsides = whatsides + "Right";
+		xvalues[point] = 1;
+		yvalues[point] = intersect - y;
+		point = point + 1;
+	}
+	var intersect = Math.sqrt((Math.pow(r, 2) - Math.pow(y, 2)));
+	if ((intersect >= x) && (intersect < (x + 1))) {
+		whatsides = whatsides + "Bottom";
+		xvalues[point] = intersect - x;
+		yvalues[point] = 0;
+	}
+	switch (whatsides) {
+	  case "LeftRight":
+		pixelfraction = Math.min(yvalues[0], yvalues[1]) + ((Math.max(yvalues[0], yvalues[1]) - Math.min(yvalues[0], yvalues[1])) / 2);
+		break;
+	  case "TopRight":
+		pixelfraction = 1 - (((1 - xvalues[0]) * (1 - yvalues[1])) / 2);
+		break;
+	  case "TopBottom":
+		pixelfraction = Math.min(xvalues[0], xvalues[1]) + ((Math.max(xvalues[0], xvalues[1]) - Math.min(xvalues[0], xvalues[1])) / 2);
+		break;
+	  case "LeftBottom":
+		pixelfraction = (yvalues[0] * xvalues[1]) / 2;
+		break;
+	  default:
+		pixelfraction = 1;
+	}
+	return pixelfraction;
+}, rgb2Hex:function (rgbColour) {
+	try {
+		var rgbArray = this.rgb2Array(rgbColour);
+		var red = parseInt(rgbArray[0]);
+		var green = parseInt(rgbArray[1]);
+		var blue = parseInt(rgbArray[2]);
+		var hexColour = "#" + this.intToHex(red) + this.intToHex(green) + this.intToHex(blue);
+	}
+	catch (e) {
+		alert("There was an error converting the RGB value to Hexadecimal in function rgb2Hex");
+	}
+	return hexColour;
+}, intToHex:function (strNum) {
+	var base = strNum / 16;
+	var rem = strNum % 16;
+	var base = base - (rem / 16);
+	var baseS = this.makeHex(base);
+	var remS = this.makeHex(rem);
+	return baseS + "" + remS;
+}, makeHex:function (x) {
+	if ((x >= 0) && (x <= 9)) {
+		return x;
+	} else {
+		switch (x) {
+		  case 10:
+			return "A";
+		  case 11:
+			return "B";
+		  case 12:
+			return "C";
+		  case 13:
+			return "D";
+		  case 14:
+			return "E";
+		  case 15:
+			return "F";
 		}
-		// y + 0 = Bottom
-		var intersect = Math.sqrt((Math.pow(r,2) - Math.pow(y,2)));
-
-		if ((intersect >= x) && (intersect < (x+1))) {
-			whatsides = whatsides + "Bottom";
-			xvalues[point] = intersect - x;
-			yvalues[point] = 0;
-		}
-
-	    //depending on which sides of the perimeter of the pixel the circle crosses calculate the
-	    //fraction of the pixel inside the circle
-
-		switch (whatsides) {
-			case "LeftRight":
-				pixelfraction = Math.min(yvalues[0],yvalues[1]) + ((Math.max(yvalues[0],yvalues[1]) - Math.min(yvalues[0],yvalues[1]))/2);
-			break;
-			
-			case "TopRight":
-				pixelfraction = 1-(((1-xvalues[0])*(1-yvalues[1]))/2);
-			break;
-			
-			case "TopBottom":
-				pixelfraction = Math.min(xvalues[0],xvalues[1]) + ((Math.max(xvalues[0],xvalues[1]) - Math.min(xvalues[0],xvalues[1]))/2);
-			break;
-			
-			case "LeftBottom":
-				pixelfraction = (yvalues[0]*xvalues[1])/2;
-			break;
-			
-			default:
-				pixelfraction = 1;
-	    }
-	    return pixelfraction;
-	},
-
-	// This function converts CSS rgb(x, x, x) to hexadecimal
-	rgb2Hex: function (rgbColour) {
-		try{	
-			// Get array of RGB values
-			var rgbArray = this.rgb2Array(rgbColour);
-			
-			// Get RGB values
-			var red   = parseInt(rgbArray[0]);
-			var green = parseInt(rgbArray[1]);
-			var blue  = parseInt(rgbArray[2]);
-			
-			// Build hex colour code
-			var hexColour = "#" + this.intToHex(red) + this.intToHex(green) + this.intToHex(blue);
-		}
-		catch(e){ alert("There was an error converting the RGB value to Hexadecimal in function rgb2Hex");
-		}
-		return hexColour;
-	},
-
-	//Converts a number to hexadecimal format
-
-	intToHex: function (strNum) {
-		var base = strNum / 16;
-		var rem = strNum % 16;
-		var base = base - (rem / 16);
-		var baseS = this.makeHex(base);
-		var remS = this.makeHex(rem);
-		return baseS + '' + remS;
-	},
-	//gets the hex bits of a number
-
-	makeHex: function(x) {
-		if((x >= 0) && (x <= 9)) {
-			return x;
-		} else {
-			switch(x) {
-				case 10: return "A";
-				case 11: return "B";
-				case 12: return "C";
-				case 13: return "D";
-				case 14: return "E";
-				case 15: return "F";
-			}
-		}
-	},
-
-	// Returns an array of rbg values
-	rgb2Array: function(rgbColour) {
-		// Remove rgb()
-		var rgbValues = rgbColour.substring(4, rgbColour.indexOf(")"));
-	
-		// Split RGB into array
-		var rgbArray = rgbValues.split(", ");
-		return rgbArray;
 	}
-}); // end function
+}, rgb2Array:function (rgbColour) {
+	var rgbValues = rgbColour.substring(4, rgbColour.indexOf(")"));
+	var rgbArray = rgbValues.split(", ");
+	return rgbArray;
+}});
 
+
 __CPAN_FILE__ src/widget/IntegerTextbox.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -44586,68 +28211,36 @@
 */
 
 dojo.provide("dojo.widget.IntegerTextbox");
-
 dojo.require("dojo.widget.ValidationTextbox");
 dojo.require("dojo.validate.common");
-
-dojo.widget.defineWidget(
-	"dojo.widget.IntegerTextbox",
-	dojo.widget.ValidationTextbox,
-	{
-		// summary:
-		//		A subclass of ValidationTextbox.
-		//		Over-rides isValid/isInRange to test for integer input.
-		// signed: String
-		//		The leading plus-or-minus sign. Can be true or false, default is either.
-		/*=====
-		signed: "either",
-		// separator: "",
-		//		The character used as the thousands separator.  Default is no separator.
-		separator: "",
-		// min: Number
-		//		Minimum signed value.  Default is -Infinity
-		min: undefined,
-		// max: Number
-		//		Maximum signed value.  Default is +Infinity
-		max: undefined,
-		=====*/
-		mixInProperties: function(localProperties, frag){
-			// First initialize properties in super-class.
-			dojo.widget.IntegerTextbox.superclass.mixInProperties.apply(this, arguments);
-	
-			// Get properties from markup attributes, and assign to flags object.
-			if((localProperties.signed == "true")||
-				(localProperties.signed == "always")){
-				this.flags.signed = true;
-			}else if((localProperties.signed == "false")||
-					(localProperties.signed == "never")){
-				this.flags.signed = false;
-				this.flags.min = 0;
-			}else{
-				this.flags.signed = [ true, false ]; // optional
-			}
-			if(localProperties.separator){ 
-				this.flags.separator = localProperties.separator;
-			}
-			if(localProperties.min){ 
-				this.flags.min = parseInt(localProperties.min);
-			}
-			if(localProperties.max){ 
-				this.flags.max = parseInt(localProperties.max);
-			}
-		},
-
-		isValid: function(){
-			// summary: Over-ride for integer validation
-			return dojo.validate.isInteger(this.textbox.value, this.flags);
-		},
-		isInRange: function(){
-			// summary: Over-ride for integer validation
-			return dojo.validate.isInRange(this.textbox.value, this.flags);
+dojo.widget.defineWidget("dojo.widget.IntegerTextbox", dojo.widget.ValidationTextbox, {mixInProperties:function (localProperties, frag) {
+	dojo.widget.IntegerTextbox.superclass.mixInProperties.apply(this, arguments);
+	if ((localProperties.signed == "true") || (localProperties.signed == "always")) {
+		this.flags.signed = true;
+	} else {
+		if ((localProperties.signed == "false") || (localProperties.signed == "never")) {
+			this.flags.signed = false;
+			this.flags.min = 0;
+		} else {
+			this.flags.signed = [true, false];
 		}
 	}
-);
+	if (localProperties.separator) {
+		this.flags.separator = localProperties.separator;
+	}
+	if (localProperties.min) {
+		this.flags.min = parseInt(localProperties.min);
+	}
+	if (localProperties.max) {
+		this.flags.max = parseInt(localProperties.max);
+	}
+}, isValid:function () {
+	return dojo.validate.isInteger(this.textbox.value, this.flags);
+}, isInRange:function () {
+	return dojo.validate.isInRange(this.textbox.value, this.flags);
+}});
 
+
 __CPAN_FILE__ src/widget/Checkbox.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -44660,182 +28253,97 @@
 */
 
 dojo.provide("dojo.widget.Checkbox");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.event.*");
 dojo.require("dojo.html.style");
 dojo.require("dojo.html.selection");
-
-dojo.widget.defineWidget(
-	"dojo.widget.Checkbox",
-	dojo.widget.HtmlWidget,
-	{
-		// summary
-		//	Same as an HTML checkbox, but with fancy styling
-
-		templatePath: dojo.uri.dojoUri('src/widget/templates/Checkbox.html'),
-		templateCssPath: dojo.uri.dojoUri('src/widget/templates/Checkbox.css'),
-
-		// name: String
-		//	name used when submitting form; same as "name" attribute or plain HTML elements
-		name: "",
-
-		// id: String
-		//	id attached to the checkbox, used when submitting form
-		id: "",
-
-		// checked: Boolean
-		//	if true, checkbox is initially marked turned on;
-		//	in markup, specified as "checked='checked'" or just "checked"
-		checked: false,
-		
-		// tabIndex: Integer
-		//	order fields are traversed when user hits the tab key
-		tabIndex: "",
-
-		// value: Value
-		//	equivalent to value field on normal checkbox (if checked, the value is passed as
-		//	the value when form is submitted)
-		value: "on",
-
-		postMixInProperties: function(){
-			dojo.widget.Checkbox.superclass.postMixInProperties.apply(this, arguments);
-			
-			// set tabIndex="0" because if tabIndex=="" user won't be able to tab to the field
-			if(!this.disabled && this.tabIndex==""){ this.tabIndex="0"; }
-		},
-
-		fillInTemplate: function(){
-			this._setInfo();
-		},
-
-		postCreate: function(){
-			// find any associated label and create a labelled-by relationship
-			// assumes <label for="inputId">label text </label> rather than
-			// <label><input type="xyzzy">label text</label>
-			var notcon = true;
-			this.id = this.id !="" ? this.id : this.widgetId;
-			if(this.id != ""){
-				var labels = document.getElementsByTagName("label");
-				if (labels != null && labels.length > 0){
-					for(var i=0; i<labels.length; i++){
-						if (labels[i].htmlFor == this.id){
-							labels[i].id = (labels[i].htmlFor + "label");
-							this._connectEvents(labels[i]);
-							dojo.widget.wai.setAttr(this.domNode, "waiState", "labelledby", labels[i].id);
-							break;
-						}
-					}
+dojo.widget.defineWidget("dojo.widget.Checkbox", dojo.widget.HtmlWidget, {templateString:"<span style=\"display: inline-block;\" tabIndex=\"${this.tabIndex}\" waiRole=\"checkbox\" id=\"${this.id}\">\n\t<img dojoAttachPoint=\"imageNode\" class=\"dojoHtmlCheckbox\" src=\"${dojoWidgetModuleUri}templates/images/blank.gif\" alt=\"\" />\n\t<input type=\"checkbox\" name=\"${this.name}\" style=\"display: none\" value=\"${this.value}\"\n\t\tdojoAttachPoint=\"inputNode\">\n</span>\n", templateCssString:".dojoHtmlCheckbox {\n\tborder: 0px;\n\twidth: 16px;\n\theight: 16px;\n\tmargin: 2px;\n\tvertical-align: middle;\n}\n\n.dojoHtmlCheckboxOn {\n\tbackground: url(check.gif) 0px 0px;\n}\n.dojoHtmlCheckboxOff {\n\tbackground: url(check.gif) -16px 0px;\n}\n.dojoHtmlCheckboxDisabledOn {\n\tbackground: url(check.gif) -32px 0px;\n}\n.dojoHtmlCheckboxDisabledOff {\n\tbackground: url(check.gif) -48px 0px;\n}\n.dojoHtmlCheckboxOnHover {\n\tbackground: url(check.gif) -64px 0px;\n}\n.dojoHtmlCheckboxOffHover {\n\tbackground: url(check.gif) -80px 0px;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/Checkbox.css"), name:"", id:"", checked:false, tabIndex:"", value:"on", postMixInProperties:function () {
+	dojo.widget.Checkbox.superclass.postMixInProperties.apply(this, arguments);
+	if (!this.disabled && this.tabIndex == "") {
+		this.tabIndex = "0";
+	}
+}, fillInTemplate:function () {
+	this._setInfo();
+}, postCreate:function () {
+	var notcon = true;
+	this.id = this.id != "" ? this.id : this.widgetId;
+	if (this.id != "") {
+		var labels = document.getElementsByTagName("label");
+		if (labels != null && labels.length > 0) {
+			for (var i = 0; i < labels.length; i++) {
+				if (labels[i].htmlFor == this.id) {
+					labels[i].id = (labels[i].htmlFor + "label");
+					this._connectEvents(labels[i]);
+					dojo.widget.wai.setAttr(this.domNode, "waiState", "labelledby", labels[i].id);
+					break;
 				}
 			}
-			this._connectEvents(this.domNode);
-			// this is needed here for IE
-			this.inputNode.checked=this.checked;
-		},
-
-		_connectEvents: function(/*DomNode*/ node){
-			dojo.event.connect(node, "onmouseover", this, "mouseOver");
-			dojo.event.connect(node, "onmouseout", this, "mouseOut");
-			dojo.event.connect(node, "onkey", this, "onKey");
-			dojo.event.connect(node, "onclick", this, "_onClick");
-			dojo.html.disableSelection(node);
-		},
-
-		_onClick: function(/*Event*/ e){
-			if(this.disabled == false){
-				this.checked = !this.checked;
-				this._setInfo();
-			}
-			e.preventDefault();
-			e.stopPropagation();
-			this.onClick();
-		},
-
-		setValue: function(/*boolean*/ bool){
-			// summary: set the checkbox state
-			if(this.disabled == false){
-				this.checked = bool;
-				this._setInfo();
-			}
-		},
-
-		onClick: function(){
-			// summary: user overridable callback function for checkbox being clicked
-		},
-
-		onKey: function(/*Event*/ e){
-			// summary: callback when user hits a key
-			var k = dojo.event.browser.keys;
-			if(e.key == " "){
-	 			this._onClick(e);
-	 		}
-		},
-
-		mouseOver: function(/*Event*/ e){
-			// summary: callback when user moves mouse over checkbox
-			this._hover(e, true);
-		},
-
-		mouseOut: function(/*Event*/ e){
-			// summary: callback when user moves mouse off of checkbox
-			this._hover(e, false);
-		},
-
-		_hover: function(/*Event*/ e, /*Boolean*/ isOver){
-			if (this.disabled == false){
-				var state = this.checked ? "On" : "Off";
-				var style = "dojoHtmlCheckbox" + state + "Hover";
-				if (isOver){
-					dojo.html.addClass(this.imageNode, style);
-				}else{
-					dojo.html.removeClass(this.imageNode,style);
-				}
-			}
-		},
-
-		_setInfo: function(){
-			// summary:
-			//	set state of hidden checkbox node to correspond to displayed value.
-			//	also set CSS class string according to checked/unchecked and disabled/enabled state
-			var state = "dojoHtmlCheckbox" + (this.disabled ? "Disabled" : "") + (this.checked ? "On" : "Off");
-			dojo.html.setClass(this.imageNode, "dojoHtmlCheckbox " + state);
-			this.inputNode.checked = this.checked;
-			if(this.disabled){
-				this.inputNode.setAttribute("disabled",true);
-			}else{
-				this.inputNode.removeAttribute("disabled");
-			}
-			dojo.widget.wai.setAttr(this.domNode, "waiState", "checked", this.checked);
 		}
 	}
-);
-
-dojo.widget.defineWidget(
-	"dojo.widget.a11y.Checkbox",
-	dojo.widget.Checkbox,
-	{
-		// summary
-		//	variation on Checkbox widget to be display on monitors in high-contrast mode (that don't display CSS background images)
-
-		templatePath: dojo.uri.dojoUri('src/widget/templates/CheckboxA11y.html'),
-
-		fillInTemplate: function(){
-		},
-
-		postCreate: function(args, frag){
-			this.inputNode.checked=this.checked;
-			//only set disabled if true since FF interprets any value for disabled as true
-			if (this.disabled){
-				this.inputNode.setAttribute("disabled",true);
-			} 
-		},
-
-		_onClick: function(){
-			this.onClick();
+	this._connectEvents(this.domNode);
+	this.inputNode.checked = this.checked;
+}, _connectEvents:function (node) {
+	dojo.event.connect(node, "onmouseover", this, "mouseOver");
+	dojo.event.connect(node, "onmouseout", this, "mouseOut");
+	dojo.event.connect(node, "onkey", this, "onKey");
+	dojo.event.connect(node, "onclick", this, "_onClick");
+	dojo.html.disableSelection(node);
+}, _onClick:function (e) {
+	if (this.disabled == false) {
+		this.checked = !this.checked;
+		this._setInfo();
+	}
+	e.preventDefault();
+	e.stopPropagation();
+	this.onClick();
+}, setValue:function (bool) {
+	if (this.disabled == false) {
+		this.checked = bool;
+		this._setInfo();
+	}
+}, onClick:function () {
+}, onKey:function (e) {
+	var k = dojo.event.browser.keys;
+	if (e.key == " ") {
+		this._onClick(e);
+	}
+}, mouseOver:function (e) {
+	this._hover(e, true);
+}, mouseOut:function (e) {
+	this._hover(e, false);
+}, _hover:function (e, isOver) {
+	if (this.disabled == false) {
+		var state = this.checked ? "On" : "Off";
+		var style = "dojoHtmlCheckbox" + state + "Hover";
+		if (isOver) {
+			dojo.html.addClass(this.imageNode, style);
+		} else {
+			dojo.html.removeClass(this.imageNode, style);
 		}
 	}
-);
+}, _setInfo:function () {
+	var state = "dojoHtmlCheckbox" + (this.disabled ? "Disabled" : "") + (this.checked ? "On" : "Off");
+	dojo.html.setClass(this.imageNode, "dojoHtmlCheckbox " + state);
+	this.inputNode.checked = this.checked;
+	if (this.disabled) {
+		this.inputNode.setAttribute("disabled", true);
+	} else {
+		this.inputNode.removeAttribute("disabled");
+	}
+	dojo.widget.wai.setAttr(this.domNode, "waiState", "checked", this.checked);
+}});
+dojo.widget.defineWidget("dojo.widget.a11y.Checkbox", dojo.widget.Checkbox, {templateString:"<span class='dojoHtmlCheckbox'>\n\t<input type=\"checkbox\" name=\"${this.name}\" tabIndex=\"${this.tabIndex}\" id=\"${this.id}\" value=\"${this.value}\"\n\t\t dojoAttachEvent=\"onClick: _onClick;\" dojoAttachPoint=\"inputNode\"> \n</span>\n", fillInTemplate:function () {
+}, postCreate:function (args, frag) {
+	this.inputNode.checked = this.checked;
+	if (this.disabled) {
+		this.inputNode.setAttribute("disabled", true);
+	}
+}, _onClick:function () {
+	this.onClick();
+}});
+
+
 __CPAN_FILE__ src/widget/Editor.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -44847,531 +28355,385 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-/* TODO:
- * - font selector
- * - test, bug fix, more features :)
-*/
 dojo.provide("dojo.widget.Editor");
 dojo.deprecated("dojo.widget.Editor", "is replaced by dojo.widget.Editor2", "0.5");
-
 dojo.require("dojo.io.*");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.Toolbar");
 dojo.require("dojo.widget.RichText");
 dojo.require("dojo.widget.ColorPalette");
 dojo.require("dojo.string.extras");
-
 dojo.widget.tags.addParseTreeHandler("dojo:Editor");
-
-dojo.widget.Editor = function() {
+dojo.widget.Editor = function () {
 	dojo.widget.HtmlWidget.call(this);
 	this.contentFilters = [];
 	this._toolbars = [];
-}
-dojo.inherits(dojo.widget.Editor, dojo.widget.HtmlWidget);
-
-dojo.widget.Editor.itemGroups = {
-	textGroup: ["bold", "italic", "underline", "strikethrough"],
-	blockGroup: ["formatBlock", "fontName", "fontSize"],
-	justifyGroup: ["justifyleft", "justifycenter", "justifyright"],
-	commandGroup: ["save", "cancel"],
-	colorGroup: ["forecolor", "hilitecolor"],
-	listGroup: ["insertorderedlist", "insertunorderedlist"],
-	indentGroup: ["outdent", "indent"],
-	linkGroup: ["createlink", "insertimage", "inserthorizontalrule"]
 };
-
-dojo.widget.Editor.formatBlockValues = {
-	"Normal": "p",
-	"Main heading": "h2",
-	"Sub heading": "h3",
-	"Sub sub heading": "h4",
-	"Preformatted": "pre"
-};
-
-dojo.widget.Editor.fontNameValues = {
-	"Arial": "Arial, Helvetica, sans-serif",
-	"Verdana": "Verdana, sans-serif",
-	"Times New Roman": "Times New Roman, serif",
-	"Courier": "Courier New, monospace"
-};
-
-dojo.widget.Editor.fontSizeValues = {
-	"1 (8 pt)" : "1",
-	"2 (10 pt)": "2",
-	"3 (12 pt)": "3",
-	"4 (14 pt)": "4",
-	"5 (18 pt)": "5",
-	"6 (24 pt)": "6",
-	"7 (36 pt)": "7"
-};
-
-dojo.widget.Editor.defaultItems = [
-	"commandGroup", "|", "blockGroup", "|", "textGroup", "|", "colorGroup", "|", "justifyGroup", "|", "listGroup", "indentGroup", "|", "linkGroup"
-];
-
-// ones we support by default without asking the RichText component
-// NOTE: you shouldn't put buttons like bold, italic, etc in here
+dojo.inherits(dojo.widget.Editor, dojo.widget.HtmlWidget);
+dojo.widget.Editor.itemGroups = {textGroup:["bold", "italic", "underline", "strikethrough"], blockGroup:["formatBlock", "fontName", "fontSize"], justifyGroup:["justifyleft", "justifycenter", "justifyright"], commandGroup:["save", "cancel"], colorGroup:["forecolor", "hilitecolor"], listGroup:["insertorderedlist", "insertunorderedlist"], indentGroup:["outdent", "indent"], linkGroup:["createlink", "insertimage", "inserthorizontalrule"]};
+dojo.widget.Editor.formatBlockValues = {"Normal":"p", "Main heading":"h2", "Sub heading":"h3", "Sub sub heading":"h4", "Preformatted":"pre"};
+dojo.widget.Editor.fontNameValues = {"Arial":"Arial, Helvetica, sans-serif", "Verdana":"Verdana, sans-serif", "Times New Roman":"Times New Roman, serif", "Courier":"Courier New, monospace"};
+dojo.widget.Editor.fontSizeValues = {"1 (8 pt)":"1", "2 (10 pt)":"2", "3 (12 pt)":"3", "4 (14 pt)":"4", "5 (18 pt)":"5", "6 (24 pt)":"6", "7 (36 pt)":"7"};
+dojo.widget.Editor.defaultItems = ["commandGroup", "|", "blockGroup", "|", "textGroup", "|", "colorGroup", "|", "justifyGroup", "|", "listGroup", "indentGroup", "|", "linkGroup"];
 dojo.widget.Editor.supportedCommands = ["save", "cancel", "|", "-", "/", " "];
-
-dojo.lang.extend(dojo.widget.Editor, {
-	widgetType: "Editor",
-
-	saveUrl: "",
-	saveMethod: "post",
-	saveArgName: "editorContent",
-	closeOnSave: false,
-	items: dojo.widget.Editor.defaultItems,
-	formatBlockItems: dojo.lang.shallowCopy(dojo.widget.Editor.formatBlockValues),
-	fontNameItems: dojo.lang.shallowCopy(dojo.widget.Editor.fontNameValues),
-	fontSizeItems: dojo.lang.shallowCopy(dojo.widget.Editor.fontSizeValues),
-
-	// used to get the properties of an item if it is given as a string
-	getItemProperties: function(name) {
-		var props = {};
-		switch(name.toLowerCase()) {
-			case "bold":
-			case "italic":
-			case "underline":
-			case "strikethrough":
-				props.toggleItem = true;
-				break;
-
-			case "justifygroup":
-				props.defaultButton = "justifyleft";
-				props.preventDeselect = true;
-				props.buttonGroup = true;
-				break;
-
-			case "listgroup":
-				props.buttonGroup = true;
-				break;
-
-			case "save":
-			case "cancel":
-				props.label = dojo.string.capitalize(name);
-				break;
-
-			case "forecolor":
-			case "hilitecolor":
-				props.name = name;
-				props.toggleItem = true; // FIXME: they aren't exactly toggle items
-				props.icon = this.getCommandImage(name);
-				break;
-
-			case "formatblock":
-				props.name = "formatBlock";
-				props.values = this.formatBlockItems;
-				break;
-
-			case "fontname":
-				props.name = "fontName";
-				props.values = this.fontNameItems;
-
-			case "fontsize":
-				props.name = "fontSize";
-				props.values = this.fontSizeItems;
-		}
-		return props;
-	},
-
-	validateItems: true, // set to false to add items, regardless of support
-	focusOnLoad: true,
-	minHeight: "1em",
-
-	_richText: null, // RichText widget
-	_richTextType: "RichText",
-
-	_toolbarContainer: null, // ToolbarContainer widget
-	_toolbarContainerType: "ToolbarContainer",
-
-	_toolbars: [],
-	_toolbarType: "Toolbar",
-
-	_toolbarItemType: "ToolbarItem",
-
-	buildRendering: function(args, frag) {
-		// get the node from args/frag
-		var node = frag["dojo:"+this.widgetType.toLowerCase()]["nodeRef"];
-		var trt = dojo.widget.createWidget(this._richTextType, {
-			focusOnLoad: this.focusOnLoad,
-			minHeight: this.minHeight
-		}, node)
-		var _this = this;
-		// this appears to fix a weird timing bug on Safari
-		setTimeout(function(){
-			_this.setRichText(trt);
-
-			_this.initToolbar();
-
-			_this.fillInTemplate(args, frag);
-		}, 0);
-	},
-
-	setRichText: function(richText) {
-		if(this._richText && this._richText == richText) {
-			dojo.debug("Already set the richText to this richText!");
-			return;
-		}
-
-		if(this._richText && !this._richText.isClosed) {
-			dojo.debug("You are switching richTexts yet you haven't closed the current one. Losing reference!");
-		}
-		this._richText = richText;
-		dojo.event.connect(this._richText, "close", this, "onClose");
-		dojo.event.connect(this._richText, "onLoad", this, "onLoad");
-		dojo.event.connect(this._richText, "onDisplayChanged", this, "updateToolbar");
-		if(this._toolbarContainer) {
-			this._toolbarContainer.enable();
-			this.updateToolbar(true);
-		}
-	},
-
-	initToolbar: function() {
-		// var tic = new Date();
-		if(this._toolbarContainer) { return; } // only create it once
-		this._toolbarContainer = dojo.widget.createWidget(this._toolbarContainerType);
-		var tb = this.addToolbar();
-		var last = true;
-		for(var i = 0; i < this.items.length; i++) {
-			if(this.items[i] == "\n") { // new row
-				tb = this.addToolbar();
+dojo.lang.extend(dojo.widget.Editor, {widgetType:"Editor", saveUrl:"", saveMethod:"post", saveArgName:"editorContent", closeOnSave:false, items:dojo.widget.Editor.defaultItems, formatBlockItems:dojo.lang.shallowCopy(dojo.widget.Editor.formatBlockValues), fontNameItems:dojo.lang.shallowCopy(dojo.widget.Editor.fontNameValues), fontSizeItems:dojo.lang.shallowCopy(dojo.widget.Editor.fontSizeValues), getItemProperties:function (name) {
+	var props = {};
+	switch (name.toLowerCase()) {
+	  case "bold":
+	  case "italic":
+	  case "underline":
+	  case "strikethrough":
+		props.toggleItem = true;
+		break;
+	  case "justifygroup":
+		props.defaultButton = "justifyleft";
+		props.preventDeselect = true;
+		props.buttonGroup = true;
+		break;
+	  case "listgroup":
+		props.buttonGroup = true;
+		break;
+	  case "save":
+	  case "cancel":
+		props.label = dojo.string.capitalize(name);
+		break;
+	  case "forecolor":
+	  case "hilitecolor":
+		props.name = name;
+		props.toggleItem = true;
+		props.icon = this.getCommandImage(name);
+		break;
+	  case "formatblock":
+		props.name = "formatBlock";
+		props.values = this.formatBlockItems;
+		break;
+	  case "fontname":
+		props.name = "fontName";
+		props.values = this.fontNameItems;
+	  case "fontsize":
+		props.name = "fontSize";
+		props.values = this.fontSizeItems;
+	}
+	return props;
+}, validateItems:true, focusOnLoad:true, minHeight:"1em", _richText:null, _richTextType:"RichText", _toolbarContainer:null, _toolbarContainerType:"ToolbarContainer", _toolbars:[], _toolbarType:"Toolbar", _toolbarItemType:"ToolbarItem", buildRendering:function (args, frag) {
+	var node = frag["dojo:" + this.widgetType.toLowerCase()]["nodeRef"];
+	var trt = dojo.widget.createWidget(this._richTextType, {focusOnLoad:this.focusOnLoad, minHeight:this.minHeight}, node);
+	var _this = this;
+	setTimeout(function () {
+		_this.setRichText(trt);
+		_this.initToolbar();
+		_this.fillInTemplate(args, frag);
+	}, 0);
+}, setRichText:function (richText) {
+	if (this._richText && this._richText == richText) {
+		dojo.debug("Already set the richText to this richText!");
+		return;
+	}
+	if (this._richText && !this._richText.isClosed) {
+		dojo.debug("You are switching richTexts yet you haven't closed the current one. Losing reference!");
+	}
+	this._richText = richText;
+	dojo.event.connect(this._richText, "close", this, "onClose");
+	dojo.event.connect(this._richText, "onLoad", this, "onLoad");
+	dojo.event.connect(this._richText, "onDisplayChanged", this, "updateToolbar");
+	if (this._toolbarContainer) {
+		this._toolbarContainer.enable();
+		this.updateToolbar(true);
+	}
+}, initToolbar:function () {
+	if (this._toolbarContainer) {
+		return;
+	}
+	this._toolbarContainer = dojo.widget.createWidget(this._toolbarContainerType);
+	var tb = this.addToolbar();
+	var last = true;
+	for (var i = 0; i < this.items.length; i++) {
+		if (this.items[i] == "\n") {
+			tb = this.addToolbar();
+		} else {
+			if ((this.items[i] == "|") && (!last)) {
+				last = true;
 			} else {
-				if((this.items[i] == "|")&&(!last)){
-					last = true;
-				}else{
-					last = this.addItem(this.items[i], tb);
-				}
+				last = this.addItem(this.items[i], tb);
 			}
 		}
-		this.insertToolbar(this._toolbarContainer.domNode, this._richText.domNode);
-		// alert(new Date - tic);
-	},
-
-	// allow people to override this so they can make their own placement logic
-	insertToolbar: function(tbNode, richTextNode) {
-		dojo.html.insertBefore(tbNode, richTextNode);
-		//dojo.html.insertBefore(this._toolbarContainer.domNode, this._richText.domNode);
-	},
-
-	addToolbar: function(toolbar) {
-		this.initToolbar();
-		if(!(toolbar instanceof dojo.widget.Toolbar)) {
-			toolbar = dojo.widget.createWidget(this._toolbarType);
-		}
-		this._toolbarContainer.addChild(toolbar);
-		this._toolbars.push(toolbar);
-		return toolbar;
-	},
-
-	addItem: function(item, tb, dontValidate) {
-		if(!tb) { tb = this._toolbars[0]; }
-		var cmd = ((item)&&(!dojo.lang.isUndefined(item["getValue"]))) ?  cmd = item["getValue"](): item;
-
-		var groups = dojo.widget.Editor.itemGroups;
-		if(item instanceof dojo.widget.ToolbarItem) {
-			tb.addChild(item);
-		} else if(groups[cmd]) {
+	}
+	this.insertToolbar(this._toolbarContainer.domNode, this._richText.domNode);
+}, insertToolbar:function (tbNode, richTextNode) {
+	dojo.html.insertBefore(tbNode, richTextNode);
+}, addToolbar:function (toolbar) {
+	this.initToolbar();
+	if (!(toolbar instanceof dojo.widget.Toolbar)) {
+		toolbar = dojo.widget.createWidget(this._toolbarType);
+	}
+	this._toolbarContainer.addChild(toolbar);
+	this._toolbars.push(toolbar);
+	return toolbar;
+}, addItem:function (item, tb, dontValidate) {
+	if (!tb) {
+		tb = this._toolbars[0];
+	}
+	var cmd = ((item) && (!dojo.lang.isUndefined(item["getValue"]))) ? cmd = item["getValue"]() : item;
+	var groups = dojo.widget.Editor.itemGroups;
+	if (item instanceof dojo.widget.ToolbarItem) {
+		tb.addChild(item);
+	} else {
+		if (groups[cmd]) {
 			var group = groups[cmd];
 			var worked = true;
-			if(cmd == "justifyGroup" || cmd == "listGroup") {
+			if (cmd == "justifyGroup" || cmd == "listGroup") {
 				var btnGroup = [cmd];
-				for(var i = 0 ; i < group.length; i++) {
-					if(dontValidate || this.isSupportedCommand(group[i])) {
+				for (var i = 0; i < group.length; i++) {
+					if (dontValidate || this.isSupportedCommand(group[i])) {
 						btnGroup.push(this.getCommandImage(group[i]));
-					}else{
+					} else {
 						worked = false;
 					}
 				}
-				if(btnGroup.length){
-					/*
-					// the addChild interface is assinine. Work around it.
-					var tprops = this.getItemProperties(cmd);
-					var tmpGroup = dojo.widget.createWidget("ToolbarButtonGroup", tprops);
-					dojo.debug(btnGroup);
-					dojo.event.connect(tmpGroup, "onClick", this, "_action");
-					dojo.event.connect(tmpGroup, "onChangeSelect", this, "_action");
-					*/
+				if (btnGroup.length) {
 					var btn = tb.addChild(btnGroup, null, this.getItemProperties(cmd));
 					dojo.event.connect(btn, "onClick", this, "_action");
 					dojo.event.connect(btn, "onChangeSelect", this, "_action");
 				}
 				return worked;
 			} else {
-				for(var i = 0; i < group.length; i++) {
-					if(!this.addItem(group[i], tb)){
+				for (var i = 0; i < group.length; i++) {
+					if (!this.addItem(group[i], tb)) {
 						worked = false;
 					}
 				}
 				return worked;
 			}
 		} else {
-			if((!dontValidate)&&(!this.isSupportedCommand(cmd))){
+			if ((!dontValidate) && (!this.isSupportedCommand(cmd))) {
 				return false;
 			}
-			if(dontValidate || this.isSupportedCommand(cmd)) {
+			if (dontValidate || this.isSupportedCommand(cmd)) {
 				cmd = cmd.toLowerCase();
-				if(cmd == "formatblock") {
-					var select = dojo.widget.createWidget("ToolbarSelect", {
-						name: "formatBlock",
-						values: this.formatBlockItems
-					});
+				if (cmd == "formatblock") {
+					var select = dojo.widget.createWidget("ToolbarSelect", {name:"formatBlock", values:this.formatBlockItems});
 					tb.addChild(select);
 					var _this = this;
-					dojo.event.connect(select, "onSetValue", function(item, value) {
+					dojo.event.connect(select, "onSetValue", function (item, value) {
 						_this.onAction("formatBlock", value);
 					});
-				} else if(cmd == "fontname") {
-					var select = dojo.widget.createWidget("ToolbarSelect", {
-						name: "fontName",
-						values: this.fontNameItems
-					});
-					tb.addChild(select);
-					dojo.event.connect(select, "onSetValue", dojo.lang.hitch(this, function(item, value) {
-						this.onAction("fontName", value);
-					}));
-				} else if(cmd == "fontsize") {
-					var select = dojo.widget.createWidget("ToolbarSelect", {
-						name: "fontSize",
-						values: this.fontSizeItems
-					});
-					tb.addChild(select);
-					dojo.event.connect(select, "onSetValue", dojo.lang.hitch(this, function(item, value) {
-						this.onAction("fontSize", value);
-					}));
-				} else if(dojo.lang.inArray(cmd, ["forecolor", "hilitecolor"])) {
-					var btn = tb.addChild(dojo.widget.createWidget("ToolbarColorDialog", this.getItemProperties(cmd)));
-					dojo.event.connect(btn, "onSetValue", this, "_setValue");
 				} else {
-					var btn = tb.addChild(this.getCommandImage(cmd), null, this.getItemProperties(cmd));
-					if(cmd == "save"){
-						dojo.event.connect(btn, "onClick", this, "_save");
-					}else if(cmd == "cancel"){
-						dojo.event.connect(btn, "onClick", this, "_close");
+					if (cmd == "fontname") {
+						var select = dojo.widget.createWidget("ToolbarSelect", {name:"fontName", values:this.fontNameItems});
+						tb.addChild(select);
+						dojo.event.connect(select, "onSetValue", dojo.lang.hitch(this, function (item, value) {
+							this.onAction("fontName", value);
+						}));
 					} else {
-						dojo.event.connect(btn, "onClick", this, "_action");
-						dojo.event.connect(btn, "onChangeSelect", this, "_action");
+						if (cmd == "fontsize") {
+							var select = dojo.widget.createWidget("ToolbarSelect", {name:"fontSize", values:this.fontSizeItems});
+							tb.addChild(select);
+							dojo.event.connect(select, "onSetValue", dojo.lang.hitch(this, function (item, value) {
+								this.onAction("fontSize", value);
+							}));
+						} else {
+							if (dojo.lang.inArray(cmd, ["forecolor", "hilitecolor"])) {
+								var btn = tb.addChild(dojo.widget.createWidget("ToolbarColorDialog", this.getItemProperties(cmd)));
+								dojo.event.connect(btn, "onSetValue", this, "_setValue");
+							} else {
+								var btn = tb.addChild(this.getCommandImage(cmd), null, this.getItemProperties(cmd));
+								if (cmd == "save") {
+									dojo.event.connect(btn, "onClick", this, "_save");
+								} else {
+									if (cmd == "cancel") {
+										dojo.event.connect(btn, "onClick", this, "_close");
+									} else {
+										dojo.event.connect(btn, "onClick", this, "_action");
+										dojo.event.connect(btn, "onChangeSelect", this, "_action");
+									}
+								}
+							}
+						}
 					}
 				}
 			}
 		}
-		return true;
-	},
-
-	enableToolbar: function() {
-		if(this._toolbarContainer) {
-			this._toolbarContainer.domNode.style.display = "";
-			this._toolbarContainer.enable();
+	}
+	return true;
+}, enableToolbar:function () {
+	if (this._toolbarContainer) {
+		this._toolbarContainer.domNode.style.display = "";
+		this._toolbarContainer.enable();
+	}
+}, disableToolbar:function (hide) {
+	if (hide) {
+		if (this._toolbarContainer) {
+			this._toolbarContainer.domNode.style.display = "none";
 		}
-	},
-
-	disableToolbar: function(hide){
-		if(hide){
-			if(this._toolbarContainer){
-				this._toolbarContainer.domNode.style.display = "none";
-			}
-		}else{
-			if(this._toolbarContainer){
-				this._toolbarContainer.disable();
-			}
+	} else {
+		if (this._toolbarContainer) {
+			this._toolbarContainer.disable();
 		}
-	},
-
-	_updateToolbarLastRan: null,
-	_updateToolbarTimer: null,
-	_updateToolbarFrequency: 500,
-
-	updateToolbar: function(force) {
-		if(!this._toolbarContainer) { return; }
-
-		// keeps the toolbar from updating too frequently
-		// TODO: generalize this functionality?
-		var diff = new Date() - this._updateToolbarLastRan;
-		if(!force && this._updateToolbarLastRan && (diff < this._updateToolbarFrequency)) {
-			clearTimeout(this._updateToolbarTimer);
-			var _this = this;
-			this._updateToolbarTimer = setTimeout(function() {
-				_this.updateToolbar();
-			}, this._updateToolbarFrequency/2);
-			return;
-		} else {
-			this._updateToolbarLastRan = new Date();
+	}
+}, _updateToolbarLastRan:null, _updateToolbarTimer:null, _updateToolbarFrequency:500, updateToolbar:function (force) {
+	if (!this._toolbarContainer) {
+		return;
+	}
+	var diff = new Date() - this._updateToolbarLastRan;
+	if (!force && this._updateToolbarLastRan && (diff < this._updateToolbarFrequency)) {
+		clearTimeout(this._updateToolbarTimer);
+		var _this = this;
+		this._updateToolbarTimer = setTimeout(function () {
+			_this.updateToolbar();
+		}, this._updateToolbarFrequency / 2);
+		return;
+	} else {
+		this._updateToolbarLastRan = new Date();
+	}
+	var items = this._toolbarContainer.getItems();
+	for (var i = 0; i < items.length; i++) {
+		var item = items[i];
+		if (item instanceof dojo.widget.ToolbarSeparator) {
+			continue;
 		}
-		// end frequency checker
-
-		var items = this._toolbarContainer.getItems();
-		for(var i = 0; i < items.length; i++) {
-			var item = items[i];
-			if(item instanceof dojo.widget.ToolbarSeparator) { continue; }
-			var cmd = item._name;
-			if (cmd == "save" || cmd == "cancel") { continue; }
-			else if(cmd == "justifyGroup") {
+		var cmd = item._name;
+		if (cmd == "save" || cmd == "cancel") {
+			continue;
+		} else {
+			if (cmd == "justifyGroup") {
 				try {
-					if(!this._richText.queryCommandEnabled("justifyleft")) {
+					if (!this._richText.queryCommandEnabled("justifyleft")) {
 						item.disable(false, true);
 					} else {
 						item.enable(false, true);
 						var jitems = item.getItems();
-						for(var j = 0; j < jitems.length; j++) {
+						for (var j = 0; j < jitems.length; j++) {
 							var name = jitems[j]._name;
 							var value = this._richText.queryCommandValue(name);
-							if(typeof value == "boolean" && value) {
+							if (typeof value == "boolean" && value) {
 								value = name;
 								break;
-							} else if(typeof value == "string") {
-								value = "justify"+value;
 							} else {
-								value = null;
+								if (typeof value == "string") {
+									value = "justify" + value;
+								} else {
+									value = null;
+								}
 							}
 						}
-						if(!value) { value = "justifyleft"; } // TODO: query actual style
+						if (!value) {
+							value = "justifyleft";
+						}
 						item.setValue(value, false, true);
 					}
-				} catch(err) {}
-			} else if(cmd == "listGroup") {
-				var litems = item.getItems();
-				for(var j = 0; j < litems.length; j++) {
-					this.updateItem(litems[j]);
 				}
+				catch (err) {
+				}
 			} else {
-				this.updateItem(item);
+				if (cmd == "listGroup") {
+					var litems = item.getItems();
+					for (var j = 0; j < litems.length; j++) {
+						this.updateItem(litems[j]);
+					}
+				} else {
+					this.updateItem(item);
+				}
 			}
 		}
-	},
-
-	updateItem: function(item) {
+	}
+}, updateItem:function (item) {
+	try {
+		var cmd = item._name;
+		var enabled = this._richText.queryCommandEnabled(cmd);
+		item.setEnabled(enabled, false, true);
+		var active = this._richText.queryCommandState(cmd);
+		if (active && cmd == "underline") {
+			active = !this._richText.queryCommandEnabled("unlink");
+		}
+		item.setSelected(active, false, true);
+		return true;
+	}
+	catch (err) {
+		return false;
+	}
+}, supportedCommands:dojo.widget.Editor.supportedCommands.concat(), isSupportedCommand:function (cmd) {
+	var yes = dojo.lang.inArray(cmd, this.supportedCommands);
+	if (!yes) {
 		try {
-			var cmd = item._name;
-			var enabled = this._richText.queryCommandEnabled(cmd);
-			item.setEnabled(enabled, false, true);
-
-			var active = this._richText.queryCommandState(cmd);
-			if(active && cmd == "underline") {
-				// don't activate underlining if we are on a link
-				active = !this._richText.queryCommandEnabled("unlink");
-			}
-			item.setSelected(active, false, true);
-			return true;
-		} catch(err) {
-			return false;
+			var richText = this._richText || dojo.widget.HtmlRichText.prototype;
+			yes = richText.queryCommandAvailable(cmd);
 		}
-	},
-
-	supportedCommands: dojo.widget.Editor.supportedCommands.concat(),
-
-	isSupportedCommand: function(cmd) {
-		// FIXME: how do we check for ActiveX?
-		var yes = dojo.lang.inArray(cmd, this.supportedCommands);
-		if(!yes) {
-			try {
-				var richText = this._richText || dojo.widget.HtmlRichText.prototype;
-				yes = richText.queryCommandAvailable(cmd);
-			} catch(E) {}
+		catch (E) {
 		}
-		return yes;
-	},
-
-	getCommandImage: function(cmd) {
-		if(cmd == "|") {
-			return cmd;
+	}
+	return yes;
+}, getCommandImage:function (cmd) {
+	if (cmd == "|") {
+		return cmd;
+	} else {
+		return dojo.uri.moduleUri("dojo.widget", "templates/buttons/" + cmd + ".gif");
+	}
+}, _action:function (e) {
+	this._fire("onAction", e.getValue());
+}, _setValue:function (a, b) {
+	this._fire("onAction", a.getValue(), b);
+}, _save:function (e) {
+	if (!this._richText.isClosed) {
+		if (this.saveUrl.length) {
+			var content = {};
+			content[this.saveArgName] = this.getHtml();
+			dojo.io.bind({method:this.saveMethod, url:this.saveUrl, content:content});
 		} else {
-			return dojo.uri.dojoUri("src/widget/templates/buttons/" + cmd + ".gif");
+			dojo.debug("please set a saveUrl for the editor");
 		}
-	},
-
-	_action: function(e) {
-		this._fire("onAction", e.getValue());
-	},
-
-	_setValue: function(a, b) {
-		this._fire("onAction", a.getValue(), b);
-	},
-
-	_save: function(e){
-		// FIXME: how should this behave when there's a larger form in play?
-		if(!this._richText.isClosed){
-			if(this.saveUrl.length){
-				var content = {};
-				content[this.saveArgName] = this.getHtml();
-				dojo.io.bind({
-					method: this.saveMethod,
-					url: this.saveUrl,
-					content: content
-				});
-			}else{
-				dojo.debug("please set a saveUrl for the editor");
-			}
-			if(this.closeOnSave){
-				this._richText.close(e.getName().toLowerCase() == "save");
-			}
-		}
-	},
-
-	_close: function(e) {
-		if(!this._richText.isClosed) {
+		if (this.closeOnSave) {
 			this._richText.close(e.getName().toLowerCase() == "save");
 		}
-	},
-
-	onAction: function(cmd, value) {
-		switch(cmd) {
-			case "createlink":
-				if(!(value = prompt("Please enter the URL of the link:", "http://"))) {
-					return;
-				}
-				break;
-			case "insertimage":
-				if(!(value = prompt("Please enter the URL of the image:", "http://"))) {
-					return;
-				}
-				break;
+	}
+}, _close:function (e) {
+	if (!this._richText.isClosed) {
+		this._richText.close(e.getName().toLowerCase() == "save");
+	}
+}, onAction:function (cmd, value) {
+	switch (cmd) {
+	  case "createlink":
+		if (!(value = prompt("Please enter the URL of the link:", "http://"))) {
+			return;
 		}
-		this._richText.execCommand(cmd, value);
-	},
-
-	fillInTemplate: function(args, frag) {
-		// dojo.event.connect(this, "onResized", this._richText, "onResized");
-	},
-
-	_fire: function(eventName) {
-		if(dojo.lang.isFunction(this[eventName])) {
-			var args = [];
-			if(arguments.length == 1) {
-				args.push(this);
-			} else {
-				for(var i = 1; i < arguments.length; i++) {
-					args.push(arguments[i]);
-				}
-			}
-			this[eventName].apply(this, args);
+		break;
+	  case "insertimage":
+		if (!(value = prompt("Please enter the URL of the image:", "http://"))) {
+			return;
 		}
-	},
-
-	getHtml: function(){
-		this._richText.contentFilters = this._richText.contentFilters.concat(this.contentFilters);
-		return this._richText.getEditorContent();
-	},
-
-	getEditorContent: function(){
-		return this.getHtml();
-	},
-
-	onClose: function(save, hide){
-		this.disableToolbar(hide);
-		if(save) {
-			this._fire("onSave");
+		break;
+	}
+	this._richText.execCommand(cmd, value);
+}, fillInTemplate:function (args, frag) {
+}, _fire:function (eventName) {
+	if (dojo.lang.isFunction(this[eventName])) {
+		var args = [];
+		if (arguments.length == 1) {
+			args.push(this);
 		} else {
-			this._fire("onCancel");
+			for (var i = 1; i < arguments.length; i++) {
+				args.push(arguments[i]);
+			}
 		}
-	},
+		this[eventName].apply(this, args);
+	}
+}, getHtml:function () {
+	this._richText.contentFilters = this._richText.contentFilters.concat(this.contentFilters);
+	return this._richText.getEditorContent();
+}, getEditorContent:function () {
+	return this.getHtml();
+}, onClose:function (save, hide) {
+	this.disableToolbar(hide);
+	if (save) {
+		this._fire("onSave");
+	} else {
+		this._fire("onCancel");
+	}
+}, onLoad:function () {
+}, onSave:function () {
+}, onCancel:function () {
+}});
 
-	// events baby!
-	onLoad: function(){},
-	onSave: function(){},
-	onCancel: function(){}
-});
 
-
 __CPAN_FILE__ src/widget/PopupContainer.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -45384,7 +28746,6 @@
 */
 
 dojo.provide("dojo.widget.PopupContainer");
-
 dojo.require("dojo.html.style");
 dojo.require("dojo.html.layout");
 dojo.require("dojo.html.selection");
@@ -45392,464 +28753,284 @@
 dojo.require("dojo.event.*");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.HtmlWidget");
-
-dojo.declare(
-	"dojo.widget.PopupContainerBase",
-	null,
-	function(){
-		this.queueOnAnimationFinish = [];
-	},
-{
-	// summary:
-	//		PopupContainerBase is the mixin class which provide popup behaviors:
-	//		it can open in a given position x,y or around a given node.
-	//		In addition, it handles animation and IE bleed through workaround.
-	// description:
-	//		This class can not be used standalone: it should be mixed-in to a
-	//		dojo.widget.HtmlWidget. Use PopupContainer instead if you want a
-	//		a standalone popup widget
-
-	isContainer: true,
-	templateString: '<div dojoAttachPoint="containerNode" style="display:none;position:absolute;" class="dojoPopupContainer" ></div>',
-
-	// isShowingNow: Boolean: whether this popup is shown
-	isShowingNow: false,
-
-	// currentSubpopup: Widget: the shown sub popup if any
-	currentSubpopup: null,
-
-	// beginZIndex: Integer: the minimal popup zIndex
-	beginZIndex: 1000,
-
-	// parentPopup: Widget: parent popup widget
-	parentPopup: null,
-
-	// parent: Widget: the widget that caused me to be displayed; the logical parent.
-	parent: null,
-
-	// popupIndex: Integer: level of sub popup
-	popupIndex: 0,
-
-	// aroundBox: dojo.html.boxSizing: which bounding box to use for open aroundNode. By default use BORDER box of the aroundNode
-	aroundBox: dojo.html.boxSizing.BORDER_BOX,
-
-	// openedForWindow: Object: in which window the open() is triggered
-	openedForWindow: null,
-
-	processKey: function(/*Event*/evt){
-		// summary: key event handler
-		return false;
-	},
-
-	applyPopupBasicStyle: function(){
-		// summary: apply necessary css rules to the top domNode
-		// description:
-		//		this function should be called in sub class where a custom
-		//		templateString/templateStringPath is used (see Tooltip widget)
-		with(this.domNode.style){
-			display = 'none';
-			position = 'absolute';
+dojo.declare("dojo.widget.PopupContainerBase", null, function () {
+	this.queueOnAnimationFinish = [];
+}, {isShowingNow:false, currentSubpopup:null, beginZIndex:1000, parentPopup:null, parent:null, popupIndex:0, aroundBox:dojo.html.boxSizing.BORDER_BOX, openedForWindow:null, processKey:function (evt) {
+	return false;
+}, applyPopupBasicStyle:function () {
+	with (this.domNode.style) {
+		display = "none";
+		position = "absolute";
+	}
+}, aboutToShow:function () {
+}, open:function (x, y, parent, explodeSrc, orient, padding) {
+	if (this.isShowingNow) {
+		return;
+	}
+	if (this.animationInProgress) {
+		this.queueOnAnimationFinish.push(this.open, arguments);
+		return;
+	}
+	this.aboutToShow();
+	var around = false, node, aroundOrient;
+	if (typeof x == "object") {
+		node = x;
+		aroundOrient = explodeSrc;
+		explodeSrc = parent;
+		parent = y;
+		around = true;
+	}
+	this.parent = parent;
+	dojo.body().appendChild(this.domNode);
+	explodeSrc = explodeSrc || parent["domNode"] || [];
+	var parentPopup = null;
+	this.isTopLevel = true;
+	while (parent) {
+		if (parent !== this && (parent.setOpenedSubpopup != undefined && parent.applyPopupBasicStyle != undefined)) {
+			parentPopup = parent;
+			this.isTopLevel = false;
+			parentPopup.setOpenedSubpopup(this);
+			break;
 		}
-	},
-
-	aboutToShow: function() {
-		// summary: connect to this stub to modify the content of the popup
-	},
-
-	open: function(/*Integer*/x, /*Integer*/y, /*DomNode*/parent, /*Object*/explodeSrc, /*String?*/orient, /*Array?*/padding){
-		// summary:
-		//		Open the popup at position (x,y), relative to dojo.body()
-	 	//		Or open(node, parent, explodeSrc, aroundOrient) to open
-	 	//		around node
-		if (this.isShowingNow){ return; }
-
-		// if I click right button and menu is opened, then it gets 2 commands: close -> open
-		// so close enables animation and next "open" is put to queue to occur at new location
-		if(this.animationInProgress){
-			this.queueOnAnimationFinish.push(this.open, arguments);
-			return;
+		parent = parent.parent;
+	}
+	this.parentPopup = parentPopup;
+	this.popupIndex = parentPopup ? parentPopup.popupIndex + 1 : 1;
+	if (this.isTopLevel) {
+		var button = dojo.html.isNode(explodeSrc) ? explodeSrc : null;
+		dojo.widget.PopupManager.opened(this, button);
+	}
+	if (this.isTopLevel && !dojo.withGlobal(this.openedForWindow || dojo.global(), dojo.html.selection.isCollapsed)) {
+		this._bookmark = dojo.withGlobal(this.openedForWindow || dojo.global(), dojo.html.selection.getBookmark);
+	} else {
+		this._bookmark = null;
+	}
+	if (explodeSrc instanceof Array) {
+		explodeSrc = {left:explodeSrc[0], top:explodeSrc[1], width:0, height:0};
+	}
+	with (this.domNode.style) {
+		display = "";
+		zIndex = this.beginZIndex + this.popupIndex;
+	}
+	if (around) {
+		this.move(node, padding, aroundOrient);
+	} else {
+		this.move(x, y, padding, orient);
+	}
+	this.domNode.style.display = "none";
+	this.explodeSrc = explodeSrc;
+	this.show();
+	this.isShowingNow = true;
+}, move:function (x, y, padding, orient) {
+	var around = (typeof x == "object");
+	if (around) {
+		var aroundOrient = padding;
+		var node = x;
+		padding = y;
+		if (!aroundOrient) {
+			aroundOrient = {"BL":"TL", "TL":"BL"};
 		}
-
-		this.aboutToShow();
-
-		var around = false, node, aroundOrient;
-		if(typeof x == 'object'){
-			node = x;
-			aroundOrient = explodeSrc;
-			explodeSrc = parent;
-			parent = y;
-			around = true;
+		dojo.html.placeOnScreenAroundElement(this.domNode, node, padding, this.aroundBox, aroundOrient);
+	} else {
+		if (!orient) {
+			orient = "TL,TR,BL,BR";
 		}
-
-		// save this so that the focus can be returned
-		this.parent = parent;
-
-		// for unknown reasons even if the domNode is attached to the body in postCreate(),
-		// it's not attached here, so have to attach it here.
-		dojo.body().appendChild(this.domNode);
-
-		// if explodeSrc isn't specified then explode from my parent widget
-		explodeSrc = explodeSrc || parent["domNode"] || [];
-
-		//keep track of parent popup to decided whether this is a top level popup
-		var parentPopup = null;
-		this.isTopLevel = true;
-		while(parent){
-			if(parent !== this && (parent.setOpenedSubpopup != undefined && parent.applyPopupBasicStyle != undefined)){
-				parentPopup = parent;
-				this.isTopLevel = false;
-				parentPopup.setOpenedSubpopup(this);
-				break;
+		dojo.html.placeOnScreen(this.domNode, x, y, padding, true, orient);
+	}
+}, close:function (force) {
+	if (force) {
+		this.domNode.style.display = "none";
+	}
+	if (this.animationInProgress) {
+		this.queueOnAnimationFinish.push(this.close, []);
+		return;
+	}
+	this.closeSubpopup(force);
+	this.hide();
+	if (this.bgIframe) {
+		this.bgIframe.hide();
+		this.bgIframe.size({left:0, top:0, width:0, height:0});
+	}
+	if (this.isTopLevel) {
+		dojo.widget.PopupManager.closed(this);
+	}
+	this.isShowingNow = false;
+	if (this.parent) {
+		setTimeout(dojo.lang.hitch(this, function () {
+			try {
+				if (this.parent["focus"]) {
+					this.parent.focus();
+				} else {
+					this.parent.domNode.focus();
+				}
 			}
-			parent = parent.parent;
-		}
-
-		this.parentPopup = parentPopup;
-		this.popupIndex = parentPopup ? parentPopup.popupIndex + 1 : 1;
-
-		if(this.isTopLevel){
-			var button = dojo.html.isNode(explodeSrc) ? explodeSrc : null;
-			dojo.widget.PopupManager.opened(this, button);
-		}
-
-		//Store the current selection and restore it before the action for a menu item
-		//is executed. This is required as clicking on an menu item deselects current selection
-		if(this.isTopLevel && !dojo.withGlobal(this.openedForWindow||dojo.global(), dojo.html.selection.isCollapsed)){
-			this._bookmark = dojo.withGlobal(this.openedForWindow||dojo.global(), dojo.html.selection.getBookmark);
-		}else{
-			this._bookmark = null;
-		}
-
-		//convert explodeSrc from format [x, y] to
-		//{left: x, top: y, width: 0, height: 0} which is the new
-		//format required by dojo.html.toCoordinateObject
-		if(explodeSrc instanceof Array){
-			explodeSrc = {left: explodeSrc[0], top: explodeSrc[1], width: 0, height: 0};
-		}
-
-		// display temporarily, and move into position, then hide again
-		with(this.domNode.style){
-			display="";
-			zIndex = this.beginZIndex + this.popupIndex;
-		}
-
-		if(around){
-			this.move(node, padding, aroundOrient);
-		}else{
-			this.move(x, y, padding, orient);
-		}
-		this.domNode.style.display="none";
-
-		this.explodeSrc = explodeSrc;
-
-		// then use the user defined method to display it
-		this.show();
-
-		this.isShowingNow = true;
-	},
-
-	// TODOC: move(node, padding, aroundOrient) how to do this?
-	move: function(/*Int*/x, /*Int*/y, /*Integer?*/padding, /*String?*/orient){
-		// summary: calculate where to place the popup
-
-		var around = (typeof x == "object");
-		if(around){
-			var aroundOrient=padding;
-			var node=x;
-			padding=y;
-			if(!aroundOrient){ //By default, attempt to open above the aroundNode, or below
-				aroundOrient = {'BL': 'TL', 'TL': 'BL'};
+			catch (e) {
+				dojo.debug("No idea how to focus to parent", e);
 			}
-			dojo.html.placeOnScreenAroundElement(this.domNode, node, padding, this.aroundBox, aroundOrient);
-		}else{
-			if(!orient){ orient = 'TL,TR,BL,BR';}
-			dojo.html.placeOnScreen(this.domNode, x, y, padding, true, orient);
+		}), 10);
+	}
+	if (this._bookmark && dojo.withGlobal(this.openedForWindow || dojo.global(), dojo.html.selection.isCollapsed)) {
+		if (this.openedForWindow) {
+			this.openedForWindow.focus();
 		}
-	},
-
-	close: function(/*Boolean?*/force){
-		// summary: hide the popup
-		if(force){
-			this.domNode.style.display="none";
+		try {
+			dojo.withGlobal(this.openedForWindow || dojo.global(), "moveToBookmark", dojo.html.selection, [this._bookmark]);
 		}
-
-		// If we are in the process of opening the menu and we are asked to close it
-		if(this.animationInProgress){
-			this.queueOnAnimationFinish.push(this.close, []);
-			return;
+		catch (e) {
 		}
-
-		this.closeSubpopup(force);
-		this.hide();
-		if(this.bgIframe){
-			this.bgIframe.hide();
-			this.bgIframe.size({left: 0, top: 0, width: 0, height: 0});
+	}
+	this._bookmark = null;
+}, closeAll:function (force) {
+	if (this.parentPopup) {
+		this.parentPopup.closeAll(force);
+	} else {
+		this.close(force);
+	}
+}, setOpenedSubpopup:function (popup) {
+	this.currentSubpopup = popup;
+}, closeSubpopup:function (force) {
+	if (this.currentSubpopup == null) {
+		return;
+	}
+	this.currentSubpopup.close(force);
+	this.currentSubpopup = null;
+}, onShow:function () {
+	dojo.widget.PopupContainer.superclass.onShow.apply(this, arguments);
+	this.openedSize = {w:this.domNode.style.width, h:this.domNode.style.height};
+	if (dojo.render.html.ie) {
+		if (!this.bgIframe) {
+			this.bgIframe = new dojo.html.BackgroundIframe();
+			this.bgIframe.setZIndex(this.domNode);
 		}
-		if(this.isTopLevel){
-			dojo.widget.PopupManager.closed(this);
+		this.bgIframe.size(this.domNode);
+		this.bgIframe.show();
+	}
+	this.processQueue();
+}, processQueue:function () {
+	if (!this.queueOnAnimationFinish.length) {
+		return;
+	}
+	var func = this.queueOnAnimationFinish.shift();
+	var args = this.queueOnAnimationFinish.shift();
+	func.apply(this, args);
+}, onHide:function () {
+	dojo.widget.HtmlWidget.prototype.onHide.call(this);
+	if (this.openedSize) {
+		with (this.domNode.style) {
+			width = this.openedSize.w;
+			height = this.openedSize.h;
 		}
-		this.isShowingNow = false;
-		// return focus to the widget that opened the menu
-
-		if(this.parent){
-			setTimeout(
-				dojo.lang.hitch(this, 
-					function(){
-						try{
-							if(this.parent['focus']){
-								this.parent.focus();
-							}else{
-								this.parent.domNode.focus(); 
-							}
-						}catch(e){dojo.debug("No idea how to focus to parent", e);}
-					}
-				),
-				10
-			);
-		}
-
-
-		//do not need to restore if current selection is not empty
-		//(use keyboard to select a menu item)
-		if(this._bookmark && dojo.withGlobal(this.openedForWindow||dojo.global(), dojo.html.selection.isCollapsed)){
-			if(this.openedForWindow){
-				this.openedForWindow.focus()
-			}
-			try{
-				dojo.withGlobal(this.openedForWindow||dojo.global(), "moveToBookmark", dojo.html.selection, [this._bookmark]);
-			}catch(e){
-				/*squelch IE internal error, see http://trac.dojotoolkit.org/ticket/1984 */
-			}
-		}
-		this._bookmark = null;
-	},
-
-	closeAll: function(/*Boolean?*/force){
-		// summary: hide all popups including sub ones
-		if (this.parentPopup){
-			this.parentPopup.closeAll(force);
-		}else{
-			this.close(force);
-		}
-	},
-
-	setOpenedSubpopup: function(/*Widget*/popup) {
-		// summary: used by sub popup to set currentSubpopup in the parent popup
-		this.currentSubpopup = popup;
-	},
-
-	closeSubpopup: function(/*Boolean?*/force) {
-		// summary: close opened sub popup
-		if(this.currentSubpopup == null){ return; }
-
-		this.currentSubpopup.close(force);
-		this.currentSubpopup = null;
-	},
-
-	onShow: function() {
-		dojo.widget.PopupContainer.superclass.onShow.apply(this, arguments);
-		// With some animation (wipe), after close, the size of the domnode is 0
-		// and next time when shown, the open() function can not determine
-		// the correct place to popup, so we store the opened size here and
-		// set it after close (in function onHide())
-		this.openedSize={w: this.domNode.style.width, h: this.domNode.style.height};
-		// prevent IE bleed through
-		if(dojo.render.html.ie){
-			if(!this.bgIframe){
-				this.bgIframe = new dojo.html.BackgroundIframe();
-				this.bgIframe.setZIndex(this.domNode);
-			}
-
-			this.bgIframe.size(this.domNode);
-			this.bgIframe.show();
-		}
-		this.processQueue();
-	},
-
-	processQueue: function() {
-		// summary: do events from queue
-		if (!this.queueOnAnimationFinish.length) return;
-
-		var func = this.queueOnAnimationFinish.shift();
-		var args = this.queueOnAnimationFinish.shift();
-
-		func.apply(this, args);
-	},
-
-	onHide: function() {
-		dojo.widget.HtmlWidget.prototype.onHide.call(this);
-
-		//restore size of the domnode, see comment in
-		//function onShow()
-		if(this.openedSize){
-			with(this.domNode.style){
-				width=this.openedSize.w;
-				height=this.openedSize.h;
-			}
-		}
-
-		this.processQueue();
 	}
-});
-
-dojo.widget.defineWidget(
-	"dojo.widget.PopupContainer",
-	[dojo.widget.HtmlWidget, dojo.widget.PopupContainerBase], {
-		// summary: dojo.widget.PopupContainer is the widget version of dojo.widget.PopupContainerBase	
-	});
-
-
-dojo.widget.PopupManager = new function(){
-	// summary:
-	//		the popup manager makes sure we don't have several popups
-	//		open at once. the root popup in an opening sequence calls
-	//		opened(). when a root menu closes it calls closed(). then
-	//		everything works. lovely.
-
+	this.processQueue();
+}});
+dojo.widget.defineWidget("dojo.widget.PopupContainer", [dojo.widget.HtmlWidget, dojo.widget.PopupContainerBase], {isContainer:true, fillInTemplate:function () {
+	this.applyPopupBasicStyle();
+	dojo.widget.PopupContainer.superclass.fillInTemplate.apply(this, arguments);
+}});
+dojo.widget.PopupManager = new function () {
 	this.currentMenu = null;
-	this.currentButton = null;		// button that opened current menu (if any)
-	this.currentFocusMenu = null;	// the (sub)menu which receives key events
+	this.currentButton = null;
+	this.currentFocusMenu = null;
 	this.focusNode = null;
 	this.registeredWindows = [];
-
-	this.registerWin = function(/*Window*/win){
-		// summary: register a window so that when clicks/scroll in it, the popup can be closed automatically
-		if(!win.__PopupManagerRegistered)
-		{
-			dojo.event.connect(win.document, 'onmousedown', this, 'onClick');
+	this.registerWin = function (win) {
+		if (!win.__PopupManagerRegistered) {
+			dojo.event.connect(win.document, "onmousedown", this, "onClick");
 			dojo.event.connect(win, "onscroll", this, "onClick");
-			dojo.event.connect(win.document, "onkey", this, 'onKey');
+			dojo.event.connect(win.document, "onkey", this, "onKey");
 			win.__PopupManagerRegistered = true;
 			this.registeredWindows.push(win);
 		}
 	};
-
-	/*
-
-	*/
-	this.registerAllWindows = function(/*Window*/targetWindow){
-		// summary:
-		//		This function register all the iframes and the top window,
-		//		so that whereever the user clicks in the page, the popup
-		//		menu will be closed
-		//		In case you add an iframe after onload event, please call
-		//		dojo.widget.PopupManager.registerWin manually
-
-		//starting from window.top, clicking everywhere in this page
-		//should close popup menus
-		if(!targetWindow) { //see comment below
+	this.registerAllWindows = function (targetWindow) {
+		if (!targetWindow) {
 			targetWindow = dojo.html.getDocumentWindow(window.top && window.top.document || window.document);
 		}
-
 		this.registerWin(targetWindow);
-
-		for (var i = 0; i < targetWindow.frames.length; i++){
-			try{
-				//do not remove  dojo.html.getDocumentWindow, see comment in it
+		for (var i = 0; i < targetWindow.frames.length; i++) {
+			try {
 				var win = dojo.html.getDocumentWindow(targetWindow.frames[i].document);
-				if(win){
+				if (win) {
 					this.registerAllWindows(win);
 				}
-			}catch(e){ /* squelch error for cross domain iframes */ }
+			}
+			catch (e) {
+			}
 		}
 	};
-
-	this.unRegisterWin = function(/*Window*/win){
-		// summary: remove listeners on the registered window
-		if(win.__PopupManagerRegistered)
-		{
-			dojo.event.disconnect(win.document, 'onmousedown', this, 'onClick');
+	this.unRegisterWin = function (win) {
+		if (win.__PopupManagerRegistered) {
+			dojo.event.disconnect(win.document, "onmousedown", this, "onClick");
 			dojo.event.disconnect(win, "onscroll", this, "onClick");
-			dojo.event.disconnect(win.document, "onkey", this, 'onKey');
+			dojo.event.disconnect(win.document, "onkey", this, "onKey");
 			win.__PopupManagerRegistered = false;
 		}
 	};
-
-	this.unRegisterAllWindows = function(){
-		// summary: remove listeners on all the registered windows
-		for(var i=0;i<this.registeredWindows.length;++i){
+	this.unRegisterAllWindows = function () {
+		for (var i = 0; i < this.registeredWindows.length; ++i) {
 			this.unRegisterWin(this.registeredWindows[i]);
 		}
 		this.registeredWindows = [];
 	};
-
 	dojo.addOnLoad(this, "registerAllWindows");
 	dojo.addOnUnload(this, "unRegisterAllWindows");
-
-	this.closed = function(/*Widget*/menu){
-		// summary: notify the manager that menu is closed
-		if (this.currentMenu == menu){
+	this.closed = function (menu) {
+		if (this.currentMenu == menu) {
 			this.currentMenu = null;
 			this.currentButton = null;
 			this.currentFocusMenu = null;
 		}
 	};
-
-	this.opened = function(/*Widget*/menu, /*DomNode*/button){
-		// summary: sets the current opened popup
-		if (menu == this.currentMenu){ return; }
-
-		if (this.currentMenu){
+	this.opened = function (menu, button) {
+		if (menu == this.currentMenu) {
+			return;
+		}
+		if (this.currentMenu) {
 			this.currentMenu.close();
 		}
-
 		this.currentMenu = menu;
 		this.currentFocusMenu = menu;
 		this.currentButton = button;
 	};
-
-	this.setFocusedMenu = function(/*Widget*/menu){
-		// summary:
-		// 		Set the current focused popup, This is used by popups which supports keyboard navigation
+	this.setFocusedMenu = function (menu) {
 		this.currentFocusMenu = menu;
 	};
-
-	this.onKey = function(/*Event*/e){
-		if (!e.key) { return; }
-		if(!this.currentMenu || !this.currentMenu.isShowingNow){ return; }
-
+	this.onKey = function (e) {
+		if (!e.key) {
+			return;
+		}
+		if (!this.currentMenu || !this.currentMenu.isShowingNow) {
+			return;
+		}
 		var m = this.currentFocusMenu;
-		while (m){
-			if(m.processKey(e)){
+		while (m) {
+			if (m.processKey(e)) {
 				e.preventDefault();
 				e.stopPropagation();
 				break;
 			}
-			m = m.parentPopup;
+			m = m.parentPopup || m.parentMenu;
 		}
-	},
-
-	this.onClick = function(/*Event*/e){
-		if (!this.currentMenu){ return; }
-
+	}, this.onClick = function (e) {
+		if (!this.currentMenu) {
+			return;
+		}
 		var scrolloffset = dojo.html.getScroll().offset;
-
-		// starting from the base menu, perform a hit test
-		// and exit when one succeeds
-
 		var m = this.currentMenu;
-
-		while (m){
-			if(dojo.html.overElement(m.domNode, e) || dojo.html.isDescendantOf(e.target, m.domNode)){
+		while (m) {
+			if (dojo.html.overElement(m.domNode, e) || dojo.html.isDescendantOf(e.target, m.domNode)) {
 				return;
 			}
 			m = m.currentSubpopup;
 		}
-
-		// Also, if user clicked the button that opened this menu, then
-		// that button will send the menu a close() command, so this code
-		// shouldn't try to close the menu.  Closing twice messes up animation.
-		if (this.currentButton && dojo.html.overElement(this.currentButton, e)){
+		if (this.currentButton && dojo.html.overElement(this.currentButton, e)) {
 			return;
 		}
-
-		// the click didn't fall within the open menu tree
-		// so close it
-
-		this.currentMenu.close();
+		this.currentMenu.closeAll(true);
 	};
-}
+};
 
+
 __CPAN_FILE__ src/widget/Dialog.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -45862,7 +29043,6 @@
 */
 
 dojo.provide("dojo.widget.Dialog");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.ContentPane");
 dojo.require("dojo.event.*");
@@ -45870,431 +29050,287 @@
 dojo.require("dojo.html.layout");
 dojo.require("dojo.html.display");
 dojo.require("dojo.html.iframe");
-
-dojo.declare(
-	"dojo.widget.ModalDialogBase", 
-	null,
-	{
-		// summary
-		//	Mixin for widgets implementing a modal dialog
-
-		isContainer: true,
-
-		// focusElement: String
-		//	provide a focusable element or element id if you need to
-		//	work around FF's tendency to send focus into outer space on hide
-		focusElement: "",
-
-		// bgColor: String
-		//	color of viewport when displaying a dialog
-		bgColor: "black",
-		
-		// bgOpacity: Number
-		//	opacity (0~1) of viewport color (see bgColor attribute)
-		bgOpacity: 0.4,
-
-		// followScroll: Boolean
-		//	if true, readjusts the dialog (and dialog background) when the user moves the scrollbar
-		followScroll: true,
-
-		// closeOnBackgroundClick: Boolean
-		//	clicking anywhere on the background will close the dialog
-		closeOnBackgroundClick: false,
-
-		trapTabs: function(/*Event*/ e){
-			// summary
-			//	callback on focus
-			if(e.target == this.tabStartOuter) {
-				if(this._fromTrap) {
-					this.tabStart.focus();
-					this._fromTrap = false;
-				} else {
-					this._fromTrap = true;
+dojo.declare("dojo.widget.ModalDialogBase", null, {isContainer:true, focusElement:"", bgColor:"black", bgOpacity:0.4, followScroll:true, closeOnBackgroundClick:false, trapTabs:function (e) {
+	if (e.target == this.tabStartOuter) {
+		if (this._fromTrap) {
+			this.tabStart.focus();
+			this._fromTrap = false;
+		} else {
+			this._fromTrap = true;
+			this.tabEnd.focus();
+		}
+	} else {
+		if (e.target == this.tabStart) {
+			if (this._fromTrap) {
+				this._fromTrap = false;
+			} else {
+				this._fromTrap = true;
+				this.tabEnd.focus();
+			}
+		} else {
+			if (e.target == this.tabEndOuter) {
+				if (this._fromTrap) {
 					this.tabEnd.focus();
-				}
-			} else if (e.target == this.tabStart) {
-				if(this._fromTrap) {
 					this._fromTrap = false;
 				} else {
 					this._fromTrap = true;
-					this.tabEnd.focus();
-				}
-			} else if(e.target == this.tabEndOuter) {
-				if(this._fromTrap) {
-					this.tabEnd.focus();
-					this._fromTrap = false;
-				} else {
-					this._fromTrap = true;
 					this.tabStart.focus();
 				}
-			} else if(e.target == this.tabEnd) {
-				if(this._fromTrap) {
-					this._fromTrap = false;
-				} else {
-					this._fromTrap = true;
-					this.tabStart.focus();
-				}
-			}
-		},
-
-		clearTrap: function(/*Event*/ e) {
-			// summary
-			//	callback on blur
-			var _this = this;
-			setTimeout(function() {
-				_this._fromTrap = false;
-			}, 100);
-		},
-
-		postCreate: function() {
-			// summary
-			//	if the target mixin class already defined postCreate,
-			//	dojo.widget.ModalDialogBase.prototype.postCreate.call(this)
-			//	should be called in its postCreate()
-			with(this.domNode.style){
-				position = "absolute";
-				zIndex = 999;
-				display = "none";
-				overflow = "visible";
-			}
-			var b = dojo.body();
-			b.appendChild(this.domNode);
-
-			// make background (which sits behind the dialog but above the normal text)
-			this.bg = document.createElement("div");
-			this.bg.className = "dialogUnderlay";
-			with(this.bg.style){
-				position = "absolute";
-				left = top = "0px";
-				zIndex = 998;
-				display = "none";
-			}
-			b.appendChild(this.bg);
-			this.setBackgroundColor(this.bgColor);
-
-			this.bgIframe = new dojo.html.BackgroundIframe();
-            if(this.bgIframe.iframe){
-				with(this.bgIframe.iframe.style){
-					position = "absolute";
-					left = top = "0px";
-					zIndex = 90;
-					display = "none";
-				}
-			}
-
-			if(this.closeOnBackgroundClick){
-				dojo.event.kwConnect({srcObj: this.bg, srcFunc: "onclick",
-					adviceObj: this, adviceFunc: "onBackgroundClick", once: true});
-			}
-		},
-
-		uninitialize: function(){
-			this.bgIframe.remove();
-			dojo.html.removeNode(this.bg, true);
-		},
-
-		setBackgroundColor: function(/*String*/ color) {
-			// summary
-			//	changes background color specified by "bgColor" parameter
-			//	usage:
-			//		setBackgroundColor("black");
-			//		setBackgroundColor(0xff, 0xff, 0xff);
-			if(arguments.length >= 3) {
-				color = new dojo.gfx.color.Color(arguments[0], arguments[1], arguments[2]);
 			} else {
-				color = new dojo.gfx.color.Color(color);
-			}
-			this.bg.style.backgroundColor = color.toString();
-			return this.bgColor = color;	// String: the color
-		},
-
-		setBackgroundOpacity: function(/*Number*/ op) {
-			// summary
-			//	changes background opacity set by "bgOpacity" parameter
-			if(arguments.length == 0) { op = this.bgOpacity; }
-			dojo.html.setOpacity(this.bg, op);
-			try {
-				this.bgOpacity = dojo.html.getOpacity(this.bg);
-			} catch (e) {
-				this.bgOpacity = op;
-			}
-			return this.bgOpacity;	// Number: the opacity
-		},
-
-		_sizeBackground: function() {
-			if(this.bgOpacity > 0) {
-				
-				var viewport = dojo.html.getViewport();
-				var h = viewport.height;
-				var w = viewport.width;
-				with(this.bg.style){
-					width = w + "px";
-					height = h + "px";
-				}
-				var scroll_offset = dojo.html.getScroll().offset;
-				this.bg.style.top = scroll_offset.y + "px";
-				this.bg.style.left = scroll_offset.x + "px";
-				// process twice since the scroll bar may have been removed
-				// by the previous resizing
-				var viewport = dojo.html.getViewport();
-				if (viewport.width != w) { this.bg.style.width = viewport.width + "px"; }
-				if (viewport.height != h) { this.bg.style.height = viewport.height + "px"; }
-			}
-			this.bgIframe.size(this.bg);
-		},
-
-		_showBackground: function() {
-			if(this.bgOpacity > 0) {
-				this.bg.style.display = "block";
-			}
-			if(this.bgIframe.iframe){
-				this.bgIframe.iframe.style.display = "block";
-			}
-		},
-
-		placeModalDialog: function() {
-			// summary: position modal dialog in center of screen
-
-			var scroll_offset = dojo.html.getScroll().offset;
-			var viewport_size = dojo.html.getViewport();
-			
-			// find the size of the dialog (dialog needs to be showing to get the size)
-			var mb;
-			if(this.isShowing()){
-				mb = dojo.html.getMarginBox(this.domNode);
-			}else{
-				dojo.html.setVisibility(this.domNode, false);
-				dojo.html.show(this.domNode);
-				mb = dojo.html.getMarginBox(this.domNode);
-				dojo.html.hide(this.domNode);
-				dojo.html.setVisibility(this.domNode, true);
-			}
-			
-			var x = scroll_offset.x + (viewport_size.width - mb.width)/2;
-			var y = scroll_offset.y + (viewport_size.height - mb.height)/2;
-			with(this.domNode.style){
-				left = x + "px";
-				top = y + "px";
-			}
-		},
-
-		_onKey: function(/*Event*/ evt){
-			if (evt.key){
-				// see if the key is for the dialog
-				var node = evt.target;
-				while (node != null){
-					if (node == this.domNode){
-						return; // yes, so just let it go
+				if (e.target == this.tabEnd) {
+					if (this._fromTrap) {
+						this._fromTrap = false;
+					} else {
+						this._fromTrap = true;
+						this.tabStart.focus();
 					}
-					node = node.parentNode;
 				}
-				// this key is for the disabled document window
-				if (evt.key != evt.KEY_TAB){ // allow tabbing into the dialog for a11y
-					dojo.event.browser.stopEvent(evt);
-				// opera won't tab to a div
-				}else if (!dojo.render.html.opera){
-					try {
-						this.tabStart.focus(); 
-					} catch(e){}
-				}
 			}
-		},
-
-		showModalDialog: function() {
-			// summary
-			//	call this function in show() of subclass before calling superclass.show()
-			if (this.followScroll && !this._scrollConnected){
-				this._scrollConnected = true;
-				dojo.event.connect(window, "onscroll", this, "_onScroll");
-			}
-			dojo.event.connect(document.documentElement, "onkey", this, "_onKey");
-
-			this.placeModalDialog();
-			this.setBackgroundOpacity();
-			this._sizeBackground();
-			this._showBackground();
-			this._fromTrap = true; 
-
-			// set timeout to allow the browser to render dialog 
-			setTimeout(dojo.lang.hitch(this, function(){
-				try{
-					this.tabStart.focus();
-				}catch(e){}
-			}), 50);
-
-		},
-
-		hideModalDialog: function(){
-			// summary
-			//	call this function in hide() of subclass
-
-			// workaround for FF focus going into outer space
-			if (this.focusElement) {
-				dojo.byId(this.focusElement).focus(); 
-				dojo.byId(this.focusElement).blur();
-			}
-
-			this.bg.style.display = "none";
-			this.bg.style.width = this.bg.style.height = "1px";
-            if(this.bgIframe.iframe){
-				this.bgIframe.iframe.style.display = "none";
-			}
-
-			dojo.event.disconnect(document.documentElement, "onkey", this, "_onKey");
-			if (this._scrollConnected){
-				this._scrollConnected = false;
-				dojo.event.disconnect(window, "onscroll", this, "_onScroll");
-			}
-		},
-
-		_onScroll: function(){
-			var scroll_offset = dojo.html.getScroll().offset;
-			this.bg.style.top = scroll_offset.y + "px";
-			this.bg.style.left = scroll_offset.x + "px";
-			this.placeModalDialog();
-		},
-
-		checkSize: function() {
-			if(this.isShowing()){
-				this._sizeBackground();
-				this.placeModalDialog();
-				this.onResized();
-			}
-		},
-		
-		onBackgroundClick: function(){
-			// summary
-			//		Callback on background click.
-			//		Clicking anywhere on the background will close the dialog, but only
-			//		if the dialog doesn't have an explicit close button, and only if
-			//		the dialog doesn't have a blockDuration.
-			if(this.lifetime - this.timeRemaining >= this.blockDuration){ return; }
-			this.hide();
 		}
-	});
-
-dojo.widget.defineWidget(
-	"dojo.widget.Dialog",
-	[dojo.widget.ContentPane, dojo.widget.ModalDialogBase],
-	{
-		// summary
-		//	Pops up a modal dialog window, blocking access to the screen and also graying out the screen
-		//	Dialog is extended from ContentPane so it supports all the same parameters (href, etc.)
-
-		templatePath: dojo.uri.dojoUri("src/widget/templates/Dialog.html"),
-
-		// blockDuration: Integer
-		//	number of seconds for which the user cannot dismiss the dialog
-		blockDuration: 0,
-		
-		// lifetime: Integer
-		//	if set, this controls the number of seconds the dialog will be displayed before automatically disappearing
-		lifetime: 0,
-
-		// closeNode: String
-		//	Id of button or other dom node to click to close this dialog
-		closeNode: "",
-
-		postMixInProperties: function(){
-			dojo.widget.Dialog.superclass.postMixInProperties.apply(this, arguments);
-			if(this.closeNode){
-				this.setCloseControl(this.closeNode);
+	}
+}, clearTrap:function (e) {
+	var _this = this;
+	setTimeout(function () {
+		_this._fromTrap = false;
+	}, 100);
+}, postCreate:function () {
+	with (this.domNode.style) {
+		position = "absolute";
+		zIndex = 999;
+		display = "none";
+		overflow = "visible";
+	}
+	var b = dojo.body();
+	b.appendChild(this.domNode);
+	this.bg = document.createElement("div");
+	this.bg.className = "dialogUnderlay";
+	with (this.bg.style) {
+		position = "absolute";
+		left = top = "0px";
+		zIndex = 998;
+		display = "none";
+	}
+	b.appendChild(this.bg);
+	this.setBackgroundColor(this.bgColor);
+	this.bgIframe = new dojo.html.BackgroundIframe();
+	if (this.bgIframe.iframe) {
+		with (this.bgIframe.iframe.style) {
+			position = "absolute";
+			left = top = "0px";
+			zIndex = 90;
+			display = "none";
+		}
+	}
+	if (this.closeOnBackgroundClick) {
+		dojo.event.kwConnect({srcObj:this.bg, srcFunc:"onclick", adviceObj:this, adviceFunc:"onBackgroundClick", once:true});
+	}
+}, uninitialize:function () {
+	this.bgIframe.remove();
+	dojo.html.removeNode(this.bg, true);
+}, setBackgroundColor:function (color) {
+	if (arguments.length >= 3) {
+		color = new dojo.gfx.color.Color(arguments[0], arguments[1], arguments[2]);
+	} else {
+		color = new dojo.gfx.color.Color(color);
+	}
+	this.bg.style.backgroundColor = color.toString();
+	return this.bgColor = color;
+}, setBackgroundOpacity:function (op) {
+	if (arguments.length == 0) {
+		op = this.bgOpacity;
+	}
+	dojo.html.setOpacity(this.bg, op);
+	try {
+		this.bgOpacity = dojo.html.getOpacity(this.bg);
+	}
+	catch (e) {
+		this.bgOpacity = op;
+	}
+	return this.bgOpacity;
+}, _sizeBackground:function () {
+	if (this.bgOpacity > 0) {
+		var viewport = dojo.html.getViewport();
+		var h = viewport.height;
+		var w = viewport.width;
+		with (this.bg.style) {
+			width = w + "px";
+			height = h + "px";
+		}
+		var scroll_offset = dojo.html.getScroll().offset;
+		this.bg.style.top = scroll_offset.y + "px";
+		this.bg.style.left = scroll_offset.x + "px";
+		var viewport = dojo.html.getViewport();
+		if (viewport.width != w) {
+			this.bg.style.width = viewport.width + "px";
+		}
+		if (viewport.height != h) {
+			this.bg.style.height = viewport.height + "px";
+		}
+	}
+	this.bgIframe.size(this.bg);
+}, _showBackground:function () {
+	if (this.bgOpacity > 0) {
+		this.bg.style.display = "block";
+	}
+	if (this.bgIframe.iframe) {
+		this.bgIframe.iframe.style.display = "block";
+	}
+}, placeModalDialog:function () {
+	var scroll_offset = dojo.html.getScroll().offset;
+	var viewport_size = dojo.html.getViewport();
+	var mb;
+	if (this.isShowing()) {
+		mb = dojo.html.getMarginBox(this.domNode);
+	} else {
+		dojo.html.setVisibility(this.domNode, false);
+		dojo.html.show(this.domNode);
+		mb = dojo.html.getMarginBox(this.domNode);
+		dojo.html.hide(this.domNode);
+		dojo.html.setVisibility(this.domNode, true);
+	}
+	var x = scroll_offset.x + (viewport_size.width - mb.width) / 2;
+	var y = scroll_offset.y + (viewport_size.height - mb.height) / 2;
+	with (this.domNode.style) {
+		left = x + "px";
+		top = y + "px";
+	}
+}, _onKey:function (evt) {
+	if (evt.key) {
+		var node = evt.target;
+		while (node != null) {
+			if (node == this.domNode) {
+				return;
 			}
-		},
-
-		postCreate: function(){
-			dojo.widget.Dialog.superclass.postCreate.apply(this, arguments);
-			dojo.widget.ModalDialogBase.prototype.postCreate.apply(this, arguments);
-		},
-
-		show: function() {
-			if(this.lifetime){
-				this.timeRemaining = this.lifetime;
-				if(this.timerNode){
-					this.timerNode.innerHTML = Math.ceil(this.timeRemaining/1000);
+			node = node.parentNode;
+		}
+		if (evt.key != evt.KEY_TAB) {
+			dojo.event.browser.stopEvent(evt);
+		} else {
+			if (!dojo.render.html.opera) {
+				try {
+					this.tabStart.focus();
 				}
-				if(this.blockDuration && this.closeNode){
-					if(this.lifetime > this.blockDuration){
-						this.closeNode.style.visibility = "hidden";
-					}else{
-						this.closeNode.style.display = "none";
-					}
+				catch (e) {
 				}
-				if (this.timer) {
-					clearInterval(this.timer);
-				}
-				this.timer = setInterval(dojo.lang.hitch(this, "_onTick"), 100);
 			}
-
-			this.showModalDialog();
-			dojo.widget.Dialog.superclass.show.call(this);
-		},
-
-		onLoad: function(){
-			// when href is specified we need to reposition
-			// the dialog after the data is loaded
-			this.placeModalDialog();
-			dojo.widget.Dialog.superclass.onLoad.call(this);
-		},
-		
-		fillInTemplate: function(){
-			// dojo.event.connect(this.domNode, "onclick", this, "killEvent");
-		},
-
-		hide: function(){
-			this.hideModalDialog();
-			dojo.widget.Dialog.superclass.hide.call(this);
-
-			if(this.timer){
-				clearInterval(this.timer);
+		}
+	}
+}, showModalDialog:function () {
+	if (this.followScroll && !this._scrollConnected) {
+		this._scrollConnected = true;
+		dojo.event.connect(window, "onscroll", this, "_onScroll");
+	}
+	dojo.event.connect(document.documentElement, "onkey", this, "_onKey");
+	this.placeModalDialog();
+	this.setBackgroundOpacity();
+	this._sizeBackground();
+	this._showBackground();
+	this._fromTrap = true;
+	setTimeout(dojo.lang.hitch(this, function () {
+		try {
+			this.tabStart.focus();
+		}
+		catch (e) {
+		}
+	}), 50);
+}, hideModalDialog:function () {
+	if (this.focusElement) {
+		dojo.byId(this.focusElement).focus();
+		dojo.byId(this.focusElement).blur();
+	}
+	this.bg.style.display = "none";
+	this.bg.style.width = this.bg.style.height = "1px";
+	if (this.bgIframe.iframe) {
+		this.bgIframe.iframe.style.display = "none";
+	}
+	dojo.event.disconnect(document.documentElement, "onkey", this, "_onKey");
+	if (this._scrollConnected) {
+		this._scrollConnected = false;
+		dojo.event.disconnect(window, "onscroll", this, "_onScroll");
+	}
+}, _onScroll:function () {
+	var scroll_offset = dojo.html.getScroll().offset;
+	this.bg.style.top = scroll_offset.y + "px";
+	this.bg.style.left = scroll_offset.x + "px";
+	this.placeModalDialog();
+}, checkSize:function () {
+	if (this.isShowing()) {
+		this._sizeBackground();
+		this.placeModalDialog();
+		this.onResized();
+	}
+}, onBackgroundClick:function () {
+	if (this.lifetime - this.timeRemaining >= this.blockDuration) {
+		return;
+	}
+	this.hide();
+}});
+dojo.widget.defineWidget("dojo.widget.Dialog", [dojo.widget.ContentPane, dojo.widget.ModalDialogBase], {templateString:"<div id=\"${this.widgetId}\" class=\"dojoDialog\" dojoattachpoint=\"wrapper\">\n\t<span dojoattachpoint=\"tabStartOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\"\ttabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabStart\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<div dojoattachpoint=\"containerNode\" style=\"position: relative; z-index: 2;\"></div>\n\t<span dojoattachpoint=\"tabEnd\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabEndOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n</div>\n", blockDuration:0, lifetime:0, closeNode:"", postMixInProperties:function () {
+	dojo.widget.Dialog.superclass.postMixInProperties.apply(this, arguments);
+	if (this.closeNode) {
+		this.setCloseControl(this.closeNode);
+	}
+}, postCreate:function () {
+	dojo.widget.Dialog.superclass.postCreate.apply(this, arguments);
+	dojo.widget.ModalDialogBase.prototype.postCreate.apply(this, arguments);
+}, show:function () {
+	if (this.lifetime) {
+		this.timeRemaining = this.lifetime;
+		if (this.timerNode) {
+			this.timerNode.innerHTML = Math.ceil(this.timeRemaining / 1000);
+		}
+		if (this.blockDuration && this.closeNode) {
+			if (this.lifetime > this.blockDuration) {
+				this.closeNode.style.visibility = "hidden";
+			} else {
+				this.closeNode.style.display = "none";
 			}
-		},
-		
-		setTimerNode: function(node){
-			// summary
-			//	specify into which node to write the remaining # of seconds
-			// TODO: make this a parameter too
-			this.timerNode = node;
-		},
-
-		setCloseControl: function(/*String|DomNode*/ node) {
-			// summary
-			//	Specify which node is the close button for this dialog.
-			//	If no close node is specified then clicking anywhere on the screen will close the dialog.
-			this.closeNode = dojo.byId(node);
-			dojo.event.connect(this.closeNode, "onclick", this, "hide");
-		},
-
-		setShowControl: function(/*String|DomNode*/ node) {
-			// summary
-			//	when specified node is clicked, show this dialog
-			// TODO: make this a parameter too
-			node = dojo.byId(node);
-			dojo.event.connect(node, "onclick", this, "show");
-		},
-
-		_onTick: function(){
-			// summary
-			//	callback every second that the timer clicks
-			if(this.timer){
-				this.timeRemaining -= 100;
-				if(this.lifetime - this.timeRemaining >= this.blockDuration){
-					// TODO: this block of code is executing over and over again, rather than just once
-					if(this.closeNode){
-						this.closeNode.style.visibility = "visible";
-					}
-				}
-				if(!this.timeRemaining){
-					clearInterval(this.timer);
-					this.hide();
-				}else if(this.timerNode){
-					this.timerNode.innerHTML = Math.ceil(this.timeRemaining/1000);
-				}
+		}
+		if (this.timer) {
+			clearInterval(this.timer);
+		}
+		this.timer = setInterval(dojo.lang.hitch(this, "_onTick"), 100);
+	}
+	this.showModalDialog();
+	dojo.widget.Dialog.superclass.show.call(this);
+}, onLoad:function () {
+	this.placeModalDialog();
+	dojo.widget.Dialog.superclass.onLoad.call(this);
+}, fillInTemplate:function () {
+}, hide:function () {
+	this.hideModalDialog();
+	dojo.widget.Dialog.superclass.hide.call(this);
+	if (this.timer) {
+		clearInterval(this.timer);
+	}
+}, setTimerNode:function (node) {
+	this.timerNode = node;
+}, setCloseControl:function (node) {
+	this.closeNode = dojo.byId(node);
+	dojo.event.connect(this.closeNode, "onclick", this, "hide");
+}, setShowControl:function (node) {
+	node = dojo.byId(node);
+	dojo.event.connect(node, "onclick", this, "show");
+}, _onTick:function () {
+	if (this.timer) {
+		this.timeRemaining -= 100;
+		if (this.lifetime - this.timeRemaining >= this.blockDuration) {
+			if (this.closeNode) {
+				this.closeNode.style.visibility = "visible";
 			}
 		}
+		if (!this.timeRemaining) {
+			clearInterval(this.timer);
+			this.hide();
+		} else {
+			if (this.timerNode) {
+				this.timerNode.innerHTML = Math.ceil(this.timeRemaining / 1000);
+			}
+		}
 	}
-);
+}});
 
+
 __CPAN_FILE__ src/widget/InternetTextbox.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -46307,191 +29343,72 @@
 */
 
 dojo.provide("dojo.widget.InternetTextbox");
-
 dojo.require("dojo.widget.ValidationTextbox");
 dojo.require("dojo.validate.web");
-
-dojo.widget.defineWidget(
-	"dojo.widget.IpAddressTextbox",
-	dojo.widget.ValidationTextbox,
-	{
-		// summary:  A Textbox which tests for a valid IP address
-		// description:  Can specify formats for ipv4 or ipv6 as attributes in the markup.
-
-		// allowDottedDecimal: Boolean:
-		//		true or false, default is true.
-
-		// allowDottedHex:		Boolean:
-		//		 true or false, default is true.
-
-		// allowDottedOctal:	Boolean:
-		//		true or false, default is true.
-
-		// allowDecimal:		Boolean:
-		//		true or false, default is true.
-
-		// allowHex:			Boolean:
-		//		true or false, default is true.
-
-		// allowIPv6:			Boolean:
-		//		true or false, default is true.
-
-		// allowHybrid:			Boolean:
-		//		true or false, default is true.
-
-		mixInProperties: function(/*Object*/localProperties){
-			// summary: see dojo.widget.Widget
-
-			// First initialize properties in super-class.
-			dojo.widget.IpAddressTextbox.superclass.mixInProperties.apply(this, arguments);
-
-			// Get properties from markup attributes, and assign to flags object.
-			if(localProperties.allowdotteddecimal){ 
-				this.flags.allowDottedDecimal = (localProperties.allowdotteddecimal == "true");
-			}
-			if(localProperties.allowdottedhex){ 
-				this.flags.allowDottedHex = (localProperties.allowdottedhex == "true");
-			}
-			if(localProperties.allowdottedoctal){ 
-				this.flags.allowDottedOctal = (localProperties.allowdottedoctal == "true");
-			}
-			if(localProperties.allowdecimal){ 
-				this.flags.allowDecimal = (localProperties.allowdecimal == "true");
-			}
-			if(localProperties.allowhex){ 
-				this.flags.allowHex = (localProperties.allowhex == "true");
-			}
-			if(localProperties.allowipv6){ 
-				this.flags.allowIPv6 = (localProperties.allowipv6 == "true");
-			}
-			if(localProperties.allowhybrid){ 
-				this.flags.allowHybrid = (localProperties.allowhybrid == "true");
-			}
-		},
-
-		isValid: function(){ 
-			// summary: see dojo.widget.ValidationTextbox
-			return dojo.validate.isIpAddress(this.textbox.value, this.flags);
-		}
+dojo.widget.defineWidget("dojo.widget.IpAddressTextbox", dojo.widget.ValidationTextbox, {mixInProperties:function (localProperties) {
+	dojo.widget.IpAddressTextbox.superclass.mixInProperties.apply(this, arguments);
+	if (localProperties.allowdotteddecimal) {
+		this.flags.allowDottedDecimal = (localProperties.allowdotteddecimal == "true");
 	}
-);
-
-dojo.widget.defineWidget(
-	"dojo.widget.UrlTextbox",
-	dojo.widget.IpAddressTextbox,
-	{
-		// summary:
-		//		A Textbox which tests for a valid URL
-
-		// scheme: Boolean:
-		//		Can be true or false.  If omitted the scheme is optional.
-
-		// allowIP:	Boolean:
-		//		Allow an IP address for hostname.  Default is true.
-
-		// allowLocal: Boolean:
-		//		Allow the host to be "localhost".  Default is false.
-
-		// allowCC: Boolean:
-		//		Allow 2 letter country code domains.  Default is true.
-
-		// allowGeneric: Boolean:
-		//		Allow generic domains.  Can be true or false, default is true.
-
-		mixInProperties: function(/*Object*/localProperties){
-			// summary: see dojo.widget.Widget
-
-			// First initialize properties in super-class.
-			dojo.widget.UrlTextbox.superclass.mixInProperties.apply(this, arguments);
-
-			// Get properties from markup attributes, and assign to flags object.
-			if ( localProperties.scheme ) { 
-				this.flags.scheme = ( localProperties.scheme == "true" );
-			}
-			if ( localProperties.allowip ) { 
-				this.flags.allowIP = ( localProperties.allowip == "true" );
-			}
-			if ( localProperties.allowlocal ) { 
-				this.flags.allowLocal = ( localProperties.allowlocal == "true" );
-			}
-			if ( localProperties.allowcc ) { 
-				this.flags.allowCC = ( localProperties.allowcc == "true" );
-			}
-			if ( localProperties.allowgeneric ) { 
-				this.flags.allowGeneric = ( localProperties.allowgeneric == "true" );
-			}
-		},
-
-		isValid: function(){ 
-			// summary: see dojo.widget.ValidationTextbox
-			return dojo.validate.isUrl(this.textbox.value, this.flags);
-		}
+	if (localProperties.allowdottedhex) {
+		this.flags.allowDottedHex = (localProperties.allowdottedhex == "true");
 	}
-);
-
-//FIXME: DOC: need more consistent explanation on whether attributes are inherited from the parent.  Some make sense, some don't?
-
-dojo.widget.defineWidget(
-	"dojo.widget.EmailTextbox",
-	dojo.widget.UrlTextbox,
-	{
-		// summary:
-		//		A Textbox which tests for a valid email address
-		// description:
-		// 		Can use all markup attributes/properties of UrlTextbox except scheme.
-
-		// allowCruft: Boolean:
-		//		Allow address like <mailto:foo at yahoo.com>.  Default is false.
-
-		mixInProperties: function(/*Object*/localProperties){
-			// summary: see dojo.widget.Widget
-
-			// First initialize properties in super-class.
-			dojo.widget.EmailTextbox.superclass.mixInProperties.apply(this, arguments);
-	
-			// Get properties from markup attributes, and assign to flags object.
-			if(localProperties.allowcruft){ 
-				this.flags.allowCruft = (localProperties.allowcruft == "true");
-			}
-		},
-
-		isValid: function(){
-			// summary: see dojo.widget.ValidationTextbox
-			return dojo.validate.isEmailAddress(this.textbox.value, this.flags);
-		}
+	if (localProperties.allowdottedoctal) {
+		this.flags.allowDottedOctal = (localProperties.allowdottedoctal == "true");
 	}
-);
-
-//TODO: perhaps combine with EmailTextbox?
-dojo.widget.defineWidget(
-	"dojo.widget.EmailListTextbox",
-	dojo.widget.EmailTextbox,
-	{
-		// summary:  A Textbox which tests for a list of valid email addresses
-		//
-		// listSeparator:  String
-		//		The character used to separate email addresses.  
-		//		Default is ";", ",", "\n" or " "
-
-		mixInProperties: function(/*Object*/localProperties){
-			// summary: see dojo.widget.Widget
-
-			// First initialize properties in super-class.
-			dojo.widget.EmailListTextbox.superclass.mixInProperties.apply(this, arguments);
-	
-			// Get properties from markup attributes, and assign to flags object.
-			if(localProperties.listseparator){ 
-				this.flags.listSeparator = localProperties.listseparator;
-			}
-		},
-
-		isValid: function(){
-			// summary: see dojo.widget.ValidationTextbox
-			return dojo.validate.isEmailAddressList(this.textbox.value, this.flags);
-		}
+	if (localProperties.allowdecimal) {
+		this.flags.allowDecimal = (localProperties.allowdecimal == "true");
 	}
-);
+	if (localProperties.allowhex) {
+		this.flags.allowHex = (localProperties.allowhex == "true");
+	}
+	if (localProperties.allowipv6) {
+		this.flags.allowIPv6 = (localProperties.allowipv6 == "true");
+	}
+	if (localProperties.allowhybrid) {
+		this.flags.allowHybrid = (localProperties.allowhybrid == "true");
+	}
+}, isValid:function () {
+	return dojo.validate.isIpAddress(this.textbox.value, this.flags);
+}});
+dojo.widget.defineWidget("dojo.widget.UrlTextbox", dojo.widget.IpAddressTextbox, {mixInProperties:function (localProperties) {
+	dojo.widget.UrlTextbox.superclass.mixInProperties.apply(this, arguments);
+	if (localProperties.scheme) {
+		this.flags.scheme = (localProperties.scheme == "true");
+	}
+	if (localProperties.allowip) {
+		this.flags.allowIP = (localProperties.allowip == "true");
+	}
+	if (localProperties.allowlocal) {
+		this.flags.allowLocal = (localProperties.allowlocal == "true");
+	}
+	if (localProperties.allowcc) {
+		this.flags.allowCC = (localProperties.allowcc == "true");
+	}
+	if (localProperties.allowgeneric) {
+		this.flags.allowGeneric = (localProperties.allowgeneric == "true");
+	}
+}, isValid:function () {
+	return dojo.validate.isUrl(this.textbox.value, this.flags);
+}});
+dojo.widget.defineWidget("dojo.widget.EmailTextbox", dojo.widget.UrlTextbox, {mixInProperties:function (localProperties) {
+	dojo.widget.EmailTextbox.superclass.mixInProperties.apply(this, arguments);
+	if (localProperties.allowcruft) {
+		this.flags.allowCruft = (localProperties.allowcruft == "true");
+	}
+}, isValid:function () {
+	return dojo.validate.isEmailAddress(this.textbox.value, this.flags);
+}});
+dojo.widget.defineWidget("dojo.widget.EmailListTextbox", dojo.widget.EmailTextbox, {mixInProperties:function (localProperties) {
+	dojo.widget.EmailListTextbox.superclass.mixInProperties.apply(this, arguments);
+	if (localProperties.listseparator) {
+		this.flags.listSeparator = localProperties.listseparator;
+	}
+}, isValid:function () {
+	return dojo.validate.isEmailAddressList(this.textbox.value, this.flags);
+}});
 
+
 __CPAN_FILE__ src/widget/ColorPalette.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -46508,83 +29425,50 @@
 dojo.require("dojo.html.layout");
 dojo.require("dojo.html.display");
 dojo.require("dojo.html.selection");
-
-dojo.widget.defineWidget(
-	"dojo.widget.ColorPalette",
-	dojo.widget.HtmlWidget,
-{
-	// summary
-	//		Grid showing various colors, so the user pick a certain color
-	
-	// palette: String
-	//		Size of grid, either "7x10" or "3x4".
-	palette: "7x10",
-
-	_palettes: {
-		"7x10": [["fff", "fcc", "fc9", "ff9", "ffc", "9f9", "9ff", "cff", "ccf", "fcf"],
-			["ccc", "f66", "f96", "ff6", "ff3", "6f9", "3ff", "6ff", "99f", "f9f"],
-			["c0c0c0", "f00", "f90", "fc6", "ff0", "3f3", "6cc", "3cf", "66c", "c6c"],
-			["999", "c00", "f60", "fc3", "fc0", "3c0", "0cc", "36f", "63f", "c3c"],
-			["666", "900", "c60", "c93", "990", "090", "399", "33f", "60c", "939"],
-			["333", "600", "930", "963", "660", "060", "366", "009", "339", "636"],
-			["000", "300", "630", "633", "330", "030", "033", "006", "309", "303"]],
-
-		"3x4": [["ffffff"/*white*/, "00ff00"/*lime*/, "008000"/*green*/, "0000ff"/*blue*/],
-			["c0c0c0"/*silver*/, "ffff00"/*yellow*/, "ff00ff"/*fuchsia*/, "000080"/*navy*/],
-			["808080"/*gray*/, "ff0000"/*red*/, "800080"/*purple*/, "000000"/*black*/]]
-			//["00ffff"/*aqua*/, "808000"/*olive*/, "800000"/*maroon*/, "008080"/*teal*/]];
-	},
-
-	buildRendering: function () {
-		this.domNode = document.createElement("table");
-		dojo.html.disableSelection(this.domNode);
-		dojo.event.connect(this.domNode, "onmousedown", function (e) {
-			e.preventDefault();
-		});
-		with (this.domNode) { // set the table's properties
-			cellPadding = "0"; cellSpacing = "1"; border = "1";
-			style.backgroundColor = "white";
-		}
-		var colors = this._palettes[this.palette];
-		for (var i = 0; i < colors.length; i++) {
-			var tr = this.domNode.insertRow(-1);
-			for (var j = 0; j < colors[i].length; j++) {
-				if (colors[i][j].length == 3) {
-					colors[i][j] = colors[i][j].replace(/(.)(.)(.)/, "$1$1$2$2$3$3");
-				}
-
-				var td = tr.insertCell(-1);
-				with (td.style) {
-					backgroundColor = "#" + colors[i][j];
-					border = "1px solid gray";
-					width = height = "15px";
-					fontSize = "1px";
-				}
-
-				td.color = "#" + colors[i][j];
-
-				td.onmouseover = function (e) { this.style.borderColor = "white"; }
-				td.onmouseout = function (e) { this.style.borderColor = "gray"; }
-				dojo.event.connect(td, "onmousedown", this, "onClick");
-
-				td.innerHTML = "&nbsp;";
+dojo.widget.defineWidget("dojo.widget.ColorPalette", dojo.widget.HtmlWidget, {palette:"7x10", _palettes:{"7x10":[["fff", "fcc", "fc9", "ff9", "ffc", "9f9", "9ff", "cff", "ccf", "fcf"], ["ccc", "f66", "f96", "ff6", "ff3", "6f9", "3ff", "6ff", "99f", "f9f"], ["c0c0c0", "f00", "f90", "fc6", "ff0", "3f3", "6cc", "3cf", "66c", "c6c"], ["999", "c00", "f60", "fc3", "fc0", "3c0", "0cc", "36f", "63f", "c3c"], ["666", "900", "c60", "c93", "990", "090", "399", "33f", "60c", "939"], ["333", "600", "930", "963", "660", "060", "366", "009", "339", "636"], ["000", "300", "630", "633", "330", "030", "033", "006", "309", "303"]], "3x4":[["ffffff", "00ff00", "008000", "0000ff"], ["c0c0c0", "ffff00", "ff00ff", "000080"], ["808080", "ff0000", "800080", "000000"]]}, buildRendering:function () {
+	this.domNode = document.createElement("table");
+	dojo.html.disableSelection(this.domNode);
+	dojo.event.connect(this.domNode, "onmousedown", function (e) {
+		e.preventDefault();
+	});
+	with (this.domNode) {
+		cellPadding = "0";
+		cellSpacing = "1";
+		border = "1";
+		style.backgroundColor = "white";
+	}
+	var colors = this._palettes[this.palette];
+	for (var i = 0; i < colors.length; i++) {
+		var tr = this.domNode.insertRow(-1);
+		for (var j = 0; j < colors[i].length; j++) {
+			if (colors[i][j].length == 3) {
+				colors[i][j] = colors[i][j].replace(/(.)(.)(.)/, "$1$1$2$2$3$3");
 			}
+			var td = tr.insertCell(-1);
+			with (td.style) {
+				backgroundColor = "#" + colors[i][j];
+				border = "1px solid gray";
+				width = height = "15px";
+				fontSize = "1px";
+			}
+			td.color = "#" + colors[i][j];
+			td.onmouseover = function (e) {
+				this.style.borderColor = "white";
+			};
+			td.onmouseout = function (e) {
+				this.style.borderColor = "gray";
+			};
+			dojo.event.connect(td, "onmousedown", this, "onClick");
+			td.innerHTML = "&nbsp;";
 		}
-	},
-
-	onClick: function(/*Event*/ e) {
-		this.onColorSelect(e.currentTarget.color);
-		e.currentTarget.style.borderColor = "gray";
-	},
-
-	onColorSelect: function(color){
-		// summary:
-		//		Callback when a color is selected.
-		// color: String
-		//		Hex value corresponding to color.
 	}
-});
+}, onClick:function (e) {
+	this.onColorSelect(e.currentTarget.color);
+	e.currentTarget.style.borderColor = "gray";
+}, onColorSelect:function (color) {
+}});
 
+
 __CPAN_FILE__ src/widget/Wizard.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -46597,229 +29481,121 @@
 */
 
 dojo.provide("dojo.widget.Wizard");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.LayoutContainer");
 dojo.require("dojo.widget.ContentPane");
 dojo.require("dojo.event.*");
 dojo.require("dojo.html.style");
-
-// TODO: base this on PageContainer
-dojo.widget.defineWidget(
-	"dojo.widget.WizardContainer",
-	dojo.widget.LayoutContainer,
-{
-	// summary
-	//		A set of panels that display sequentially, typically notating a step-by-step
-	//		procedure like an install
-	
-	templatePath: dojo.uri.dojoUri("src/widget/templates/Wizard.html"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/Wizard.css"),
-
-	// selected: DomNode
-	//		Currently selected panel.  (Read-only)
-	selected: null,
-
-	// nextButtonLabel: String
-	//		Label for the "Next" button.
-	nextButtonLabel: "next",
-
-	// previousButtonLabel: String
-	//		Label for the "Previous" button.
-	previousButtonLabel: "previous",
-
-	// cancelButtonLabel: String
-	//		Label for the "Cancel" button.
-	cancelButtonLabel: "cancel",
-
-	// doneButtonLabel: String
-	//		Label for the "Done" button.
-	doneButtonLabel: "done",
-
-	// cancelButtonLabel: FunctionName
-	//		Name of function to call if user presses cancel button.
-	//		Cancel button is not displayed if function is not specified.
-	cancelFunction: "",
-
-	// hideDisabledButtons: Boolean
-	//		If true, disabled buttons are hidden; otherwise, they are assigned the
-	//		"WizardButtonDisabled" CSS class
-	hideDisabledButtons: false,
-
-	fillInTemplate: function(args, frag){
-		dojo.event.connect(this.nextButton, "onclick", this, "_onNextButtonClick");
-		dojo.event.connect(this.previousButton, "onclick", this, "_onPreviousButtonClick");
-		if (this.cancelFunction){
-			dojo.event.connect(this.cancelButton, "onclick", this.cancelFunction);
-		}else{
-			this.cancelButton.style.display = "none";
+dojo.widget.defineWidget("dojo.widget.WizardContainer", dojo.widget.LayoutContainer, {templateString:"<div class=\"WizardContainer\" dojoAttachPoint=\"wizardNode\">\n	<div class=\"WizardText\" dojoAttachPoint=\"wizardPanelContainerNode\">\n	</div>\n	<div class=\"WizardButtonHolder\" dojoAttachPoint=\"wizardControlContainerNode\">\n		<input class=\"WizardButton\" type=\"button\" dojoAttachPoint=\"previousButton\"/>\n		<input class=\"WizardButton\" type=\"button\" dojoAttachPoint=\"nextButton\"/>\n		<input class=\"WizardButton\" type=\"button\" dojoAttachPoint=\"doneButton\" style=\"display:none\"/>\n		<input class=\"WizardButton\" type=\"button\" dojoAttachPoint=\"cancelButton\"/>\n	</div>\n</div>\n", templateCssString:".WizardContainer {\n\tbackground: #EEEEEE;\n\tborder: #798EC5 1px solid;\n\tpadding: 2px;\n}\n\n.WizardTitle {\n\tcolor: #003366;\n\tpadding: 8px 5px 15px 2px;\n\tfont-weight: bold;\n\tfont-size: x-small;\n\tfont-style: normal;\n\tfont-family: Verdana, Arial, Helvetica;\n\ttext-align: left;\n}\n\n.WizardText {\n\tcolor: #000033;\n\tfont-weight: normal;\n\tfont-size: xx-small;\n\tfont-family: Verdana, Arial, Helvetica;\n\tpadding: 2 50; text-align: justify;\n}\n\n.WizardLightText {\n\tcolor: #666666;\n\tfont-weight: normal;\n\tfont-size: xx-small;\n\tfont-family: verdana, arial, helvetica;\n\tpadding: 2px 50px;\n\ttext-align: justify;\n}\n\n.WizardButtonHolder {\n\ttext-align: right;\n\tpadding: 10px 5px;\n}\n\n.WizardButton {\n\tcolor: #ffffff;\n\tbackground: #798EC5;\n\tfont-size: xx-small;\n\tfont-family: verdana, arial, helvetica, sans-serif;\n\tborder-right: #000000 1px solid;\n\tborder-bottom: #000000 1px solid;\n\tborder-left: #666666 1px solid;\n\tborder-top: #666666 1px solid;\n\tpadding-right: 4px;\n\tpadding-left: 4px;\n\ttext-decoration: none; height: 18px;\n}\n\n.WizardButton:hover {\n\tcursor: pointer;\n}\n\n.WizardButtonDisabled {\n\tcolor: #eeeeee;\n\tbackground-color: #999999;\n\tfont-size: xx-small;\n\tFONT-FAMILY: verdana, arial, helvetica, sans-serif;\n\tborder-right: #000000 1px solid;\n\tborder-bottom: #000000 1px solid;\n\tborder-left: #798EC5 1px solid;\n\tborder-top: #798EC5 1px solid;\n\tpadding-right: 4px;\n\tpadding-left: 4px;\n\ttext-decoration: none;\n\theight: 18px;\n}\n\n\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/Wizard.css"), selected:null, nextButtonLabel:"next", previousButtonLabel:"previous", cancelButtonLabel:"cancel", doneButtonLabel:"done", cancelFunction:"", hideDisabledButtons:false, fillInTemplate:function (args, frag) {
+	dojo.event.connect(this.nextButton, "onclick", this, "_onNextButtonClick");
+	dojo.event.connect(this.previousButton, "onclick", this, "_onPreviousButtonClick");
+	if (this.cancelFunction) {
+		dojo.event.connect(this.cancelButton, "onclick", this.cancelFunction);
+	} else {
+		this.cancelButton.style.display = "none";
+	}
+	dojo.event.connect(this.doneButton, "onclick", this, "done");
+	this.nextButton.value = this.nextButtonLabel;
+	this.previousButton.value = this.previousButtonLabel;
+	this.cancelButton.value = this.cancelButtonLabel;
+	this.doneButton.value = this.doneButtonLabel;
+}, _checkButtons:function () {
+	var lastStep = !this.hasNextPanel();
+	this.nextButton.disabled = lastStep;
+	this._setButtonClass(this.nextButton);
+	if (this.selected.doneFunction) {
+		this.doneButton.style.display = "";
+		if (lastStep) {
+			this.nextButton.style.display = "none";
 		}
-		dojo.event.connect(this.doneButton, "onclick", this, "done");
-		this.nextButton.value = this.nextButtonLabel;
-		this.previousButton.value = this.previousButtonLabel;
-		this.cancelButton.value = this.cancelButtonLabel;
-		this.doneButton.value = this.doneButtonLabel;
-	},
-
-	_checkButtons: function(){
-		var lastStep = !this.hasNextPanel();
-		this.nextButton.disabled = lastStep;
-		this._setButtonClass(this.nextButton);
-		if(this.selected.doneFunction){
-			this.doneButton.style.display = "";
-			// hide the next button if this is the last one and we have a done function
-			if(lastStep){
-				this.nextButton.style.display = "none";
-			}
-		}else{
-			this.doneButton.style.display = "none";
+	} else {
+		this.doneButton.style.display = "none";
+	}
+	this.previousButton.disabled = ((!this.hasPreviousPanel()) || (!this.selected.canGoBack));
+	this._setButtonClass(this.previousButton);
+}, _setButtonClass:function (button) {
+	if (!this.hideDisabledButtons) {
+		button.style.display = "";
+		dojo.html.setClass(button, button.disabled ? "WizardButtonDisabled" : "WizardButton");
+	} else {
+		button.style.display = button.disabled ? "none" : "";
+	}
+}, registerChild:function (panel, insertionIndex) {
+	dojo.widget.WizardContainer.superclass.registerChild.call(this, panel, insertionIndex);
+	this.wizardPanelContainerNode.appendChild(panel.domNode);
+	panel.hide();
+	if (!this.selected) {
+		this.onSelected(panel);
+	}
+	this._checkButtons();
+}, onSelected:function (panel) {
+	if (this.selected) {
+		if (this.selected._checkPass()) {
+			this.selected.hide();
+		} else {
+			return;
 		}
-		this.previousButton.disabled = ((!this.hasPreviousPanel()) || (!this.selected.canGoBack));
-		this._setButtonClass(this.previousButton);
-	},
-
-	_setButtonClass: function(button){
-		if(!this.hideDisabledButtons){
-			button.style.display = "";
-			dojo.html.setClass(button, button.disabled ? "WizardButtonDisabled" : "WizardButton");
-		}else{
-			button.style.display = button.disabled ? "none" : "";
+	}
+	panel.show();
+	this.selected = panel;
+}, getPanels:function () {
+	return this.getChildrenOfType("WizardPane", false);
+}, selectedIndex:function () {
+	if (this.selected) {
+		return dojo.lang.indexOf(this.getPanels(), this.selected);
+	}
+	return -1;
+}, _onNextButtonClick:function () {
+	var selectedIndex = this.selectedIndex();
+	if (selectedIndex > -1) {
+		var childPanels = this.getPanels();
+		if (childPanels[selectedIndex + 1]) {
+			this.onSelected(childPanels[selectedIndex + 1]);
 		}
-	},
-
-	registerChild: function(panel, insertionIndex){
-		dojo.widget.WizardContainer.superclass.registerChild.call(this, panel, insertionIndex);
-		this.wizardPanelContainerNode.appendChild(panel.domNode);
-		panel.hide();
-
-		if(!this.selected){
-			this.onSelected(panel);
+	}
+	this._checkButtons();
+}, _onPreviousButtonClick:function () {
+	var selectedIndex = this.selectedIndex();
+	if (selectedIndex > -1) {
+		var childPanels = this.getPanels();
+		if (childPanels[selectedIndex - 1]) {
+			this.onSelected(childPanels[selectedIndex - 1]);
 		}
-		this._checkButtons();
-	},
-
-	onSelected: function(/*WizardPanel*/ panel){
-		// summary: Callback when new panel is selected..  Deselect old panel and select new one
-		if(this.selected ){
-			if (this.selected._checkPass()) {
-				this.selected.hide();
-			} else {
-				return;
-			}
-		}
-		panel.show();
-		this.selected = panel;
-	},
-
-	getPanels: function() {
-		// summary: returns array of WizardPane children
-		return this.getChildrenOfType("WizardPane", false);		// WizardPane[]
-	},
-
-	selectedIndex: function() {
-		// summary: Returns index (into this.children[]) for currently selected child.
-		if (this.selected) {
-			return dojo.lang.indexOf(this.getPanels(), this.selected);	// Integer
-		}
-		return -1;
-	},
-
-	_onNextButtonClick: function() {
-		// summary: callback when next button is clicked
-		var selectedIndex = this.selectedIndex();
-		if ( selectedIndex > -1 ) {
-			var childPanels = this.getPanels();
-			if (childPanels[selectedIndex + 1]) {
-				this.onSelected(childPanels[selectedIndex + 1]);
-			}
-		}
-		this._checkButtons();
-	},
-
-	_onPreviousButtonClick: function() {
-		// summary: callback when previous button is clicked
-		var selectedIndex = this.selectedIndex();
-		if ( selectedIndex > -1 ) {
-			var childPanels = this.getPanels();
-			if (childPanels[selectedIndex - 1]) {
-				this.onSelected(childPanels[selectedIndex - 1]);
-			}
-		}
-		this._checkButtons();
-	},
-
-	hasNextPanel: function() {
-		// summary: Returns true if there's a another panel after the current panel
-		var selectedIndex = this.selectedIndex();
-		return (selectedIndex < (this.getPanels().length - 1));
-	},
-
-	hasPreviousPanel: function() {
-		// summary: Returns true if there's a panel before the current panel
-		var selectedIndex = this.selectedIndex();
-		return (selectedIndex > 0);
-	},
-
-	done: function() {
-		// summary: Finish the wizard's operation
-		this.selected.done();
 	}
-});
-
-dojo.widget.defineWidget(
-	"dojo.widget.WizardPane",
-	dojo.widget.ContentPane,
-{
-	// summary
-	//		a panel in a WizardContainer
-
-	// canGoBack: Boolean
-	//		If true, then can move back to a previous panel (by clicking the "Previous" button)
-	canGoBack: true,
-
-	// passFunction: String
-	//		Name of function that checks if it's OK to advance to the next panel.
-	//		If it's not OK (for example, mandatory field hasn't been entered), then
-	//		returns an error message (String) explaining the reason.
-	passFunction: "",
-	
-	// doneFunction: String
-	//		Name of function that is run if you press the "Done" button from this panel
-	doneFunction: "",
-
-	postMixInProperties: function(args, frag) {
-		if (this.passFunction) {
-			this.passFunction = dj_global[this.passFunction];
+	this._checkButtons();
+}, hasNextPanel:function () {
+	var selectedIndex = this.selectedIndex();
+	return (selectedIndex < (this.getPanels().length - 1));
+}, hasPreviousPanel:function () {
+	var selectedIndex = this.selectedIndex();
+	return (selectedIndex > 0);
+}, done:function () {
+	this.selected.done();
+}});
+dojo.widget.defineWidget("dojo.widget.WizardPane", dojo.widget.ContentPane, {canGoBack:true, passFunction:"", doneFunction:"", postMixInProperties:function (args, frag) {
+	if (this.passFunction) {
+		this.passFunction = dj_global[this.passFunction];
+	}
+	if (this.doneFunction) {
+		this.doneFunction = dj_global[this.doneFunction];
+	}
+	dojo.widget.WizardPane.superclass.postMixInProperties.apply(this, arguments);
+}, _checkPass:function () {
+	if (this.passFunction && dojo.lang.isFunction(this.passFunction)) {
+		var failMessage = this.passFunction();
+		if (failMessage) {
+			alert(failMessage);
+			return false;
 		}
-		if (this.doneFunction) {
-			this.doneFunction = dj_global[this.doneFunction];
-		}
-		dojo.widget.WizardPane.superclass.postMixInProperties.apply(this, arguments);
-	},
-
-	_checkPass: function() {
-		// summary:
-		//		Called when the user presses the "next" button.
-		//		Calls passFunction to see if it's OK to advance to next panel, and
-		//		if it isn't, then display error.
-		//		Returns true to advance, false to not advance.
-		if (this.passFunction && dojo.lang.isFunction(this.passFunction)) {
-			var failMessage = this.passFunction();
-			if (failMessage) {
-				alert(failMessage);
-				return false;
-			}
-		}
-		return true;
-	},
-
-	done: function() {
-		if (this.doneFunction && dojo.lang.isFunction(this.doneFunction)) {
-			this.doneFunction();
-		}
 	}
-});
+	return true;
+}, done:function () {
+	if (this.doneFunction && dojo.lang.isFunction(this.doneFunction)) {
+		this.doneFunction();
+	}
+}});
 
+
 __CPAN_FILE__ src/widget/Editor2.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -46832,804 +29608,406 @@
 */
 
 dojo.provide("dojo.widget.Editor2");
-
 dojo.require("dojo.io.*");
 dojo.require("dojo.widget.RichText");
 dojo.require("dojo.widget.Editor2Toolbar");
-
+dojo.require("dojo.uri.cache");
 dojo.widget.Editor2Manager = new dojo.widget.HandlerManager;
-dojo.lang.mixin(dojo.widget.Editor2Manager,
-{
-	// summary: Manager of current focused Editor2 Instance and available editor2 commands
-
-	_currentInstance: null,
-
-	// commandState: Object: state a command may be in
-	commandState: {Disabled: 0, Latched: 1, Enabled: 2},
-
-	getCurrentInstance: function(){
-		// summary: Return the current focused Editor2 instance
-		return this._currentInstance;
-	},
-	setCurrentInstance: function(/*Widget*/inst){
-		// summary: Set current focused Editor2 instance
-		this._currentInstance = inst;
-	},
-	getCommand: function(/*dojo.widget.Editor2*/editor,/*String*/name){
-		// summary: Return Editor2 command with the given name
-		// name: name of the command (case insensitive)
-		var oCommand;
-		name = name.toLowerCase();
-		for(var i=0;i<this._registeredHandlers.length;i++){
-			oCommand = this._registeredHandlers[i](editor, name);
-			if(oCommand){
-				return oCommand;
-			}
+dojo.lang.mixin(dojo.widget.Editor2Manager, {_currentInstance:null, commandState:{Disabled:0, Latched:1, Enabled:2}, getCurrentInstance:function () {
+	return this._currentInstance;
+}, setCurrentInstance:function (inst) {
+	this._currentInstance = inst;
+}, getCommand:function (editor, name) {
+	var oCommand;
+	name = name.toLowerCase();
+	for (var i = 0; i < this._registeredHandlers.length; i++) {
+		oCommand = this._registeredHandlers[i](editor, name);
+		if (oCommand) {
+			return oCommand;
 		}
-		switch(name){
-			case 'htmltoggle':
-				//Editor2 natively provide the htmltoggle functionalitity
-				//and it is treated as a builtin command
-				oCommand = new dojo.widget.Editor2BrowserCommand(editor, name);
-				break;
-			case 'formatblock':
-				oCommand = new dojo.widget.Editor2FormatBlockCommand(editor, name);
-				break;
-			case 'anchor':
-				oCommand = new dojo.widget.Editor2Command(editor, name);
-				break;
-
-			//dialog command
-			case 'createlink':
-				oCommand = new dojo.widget.Editor2DialogCommand(editor, name,
-						{contentFile: "dojo.widget.Editor2Plugin.CreateLinkDialog",
-							contentClass: "Editor2CreateLinkDialog",
-							title: "Insert/Edit Link", width: "300px", height: "200px"});
-				break;
-			case 'insertimage':
-				oCommand = new dojo.widget.Editor2DialogCommand(editor, name,
-						{contentFile: "dojo.widget.Editor2Plugin.InsertImageDialog",
-							contentClass: "Editor2InsertImageDialog",
-							title: "Insert/Edit Image", width: "400px", height: "270px"});
-				break;
-			// By default we assume that it is a builtin simple command.
-			default:
-				var curtInst = this.getCurrentInstance();
-				if((curtInst && curtInst.queryCommandAvailable(name)) ||
-					(!curtInst && dojo.widget.Editor2.prototype.queryCommandAvailable(name))){
-					oCommand = new dojo.widget.Editor2BrowserCommand(editor, name);
-				}else{
-					dojo.debug("dojo.widget.Editor2Manager.getCommand: Unknown command "+name);
-					return;
-				}
+	}
+	switch (name) {
+	  case "htmltoggle":
+		oCommand = new dojo.widget.Editor2BrowserCommand(editor, name);
+		break;
+	  case "formatblock":
+		oCommand = new dojo.widget.Editor2FormatBlockCommand(editor, name);
+		break;
+	  case "anchor":
+		oCommand = new dojo.widget.Editor2Command(editor, name);
+		break;
+	  case "createlink":
+		oCommand = new dojo.widget.Editor2DialogCommand(editor, name, {contentFile:"dojo.widget.Editor2Plugin.CreateLinkDialog", contentClass:"Editor2CreateLinkDialog", title:"Insert/Edit Link", width:"300px", height:"200px"});
+		break;
+	  case "insertimage":
+		oCommand = new dojo.widget.Editor2DialogCommand(editor, name, {contentFile:"dojo.widget.Editor2Plugin.InsertImageDialog", contentClass:"Editor2InsertImageDialog", title:"Insert/Edit Image", width:"400px", height:"270px"});
+		break;
+	  default:
+		var curtInst = this.getCurrentInstance();
+		if ((curtInst && curtInst.queryCommandAvailable(name)) || (!curtInst && dojo.widget.Editor2.prototype.queryCommandAvailable(name))) {
+			oCommand = new dojo.widget.Editor2BrowserCommand(editor, name);
+		} else {
+			dojo.debug("dojo.widget.Editor2Manager.getCommand: Unknown command " + name);
+			return;
 		}
-		return oCommand;
-	},
-	destroy: function(){
-		// summary: Cleaning up. This is called automatically on page unload.
-		this._currentInstance = null;
-		dojo.widget.HandlerManager.prototype.destroy.call(this);
 	}
-});
-
+	return oCommand;
+}, destroy:function () {
+	this._currentInstance = null;
+	dojo.widget.HandlerManager.prototype.destroy.call(this);
+}});
 dojo.addOnUnload(dojo.widget.Editor2Manager, "destroy");
-
-dojo.lang.declare("dojo.widget.Editor2Command",null,
-	function(editor,name){
-		// summary:
-		//		dojo.widget.Editor2Command is the base class for all commands in Editor2
-
-		this._editor = editor;
-		this._updateTime = 0;
-		this._name = name;
-	},
-{
-		_text: 'Unknown',
-		execute: function(para){
-			// summary: Execute the command. should be implemented in subclass
-			// description: this function should be re-implemented in subclass
-			dojo.unimplemented("dojo.widget.Editor2Command.execute");
-		},
-		getText: function(){
-			// summary: return the text name of this command
-			return this._text;
-		},
-		getState: function(){
-			// summary:
-			//		Return the state of the command. The default behavior is
-			//		to always return Enabled
-			return dojo.widget.Editor2Manager.commandState.Enabled;
-		},
-		destroy: function(){
-			// summary: Destructor
-		}
+dojo.lang.declare("dojo.widget.Editor2Command", null, function (editor, name) {
+	this._editor = editor;
+	this._updateTime = 0;
+	this._name = name;
+}, {_text:"Unknown", execute:function (para) {
+	dojo.unimplemented("dojo.widget.Editor2Command.execute");
+}, getText:function () {
+	return this._text;
+}, getState:function () {
+	return dojo.widget.Editor2Manager.commandState.Enabled;
+}, destroy:function () {
+}});
+dojo.widget.Editor2BrowserCommandNames = {"bold":"Bold", "copy":"Copy", "cut":"Cut", "Delete":"Delete", "indent":"Indent", "inserthorizontalrule":"Horizental Rule", "insertorderedlist":"Numbered List", "insertunorderedlist":"Bullet List", "italic":"Italic", "justifycenter":"Align Center", "justifyfull":"Justify", "justifyleft":"Align Left", "justifyright":"Align Right", "outdent":"Outdent", "paste":"Paste", "redo":"Redo", "removeformat":"Remove Format", "selectall":"Select All", "strikethrough":"Strikethrough", "subscript":"Subscript", "superscript":"Superscript", "underline":"Underline", "undo":"Undo", "unlink":"Remove Link", "createlink":"Create Link", "insertimage":"Insert Image", "htmltoggle":"HTML Source", "forecolor":"Foreground Color", "hilitecolor":"Background Color", "plainformatblock":"Paragraph Style", "formatblock":"Paragraph Style", "fontsize":"Font Size", "fontname":"Font Name"};
+dojo.lang.declare("dojo.widget.Editor2BrowserCommand", dojo.widget.Editor2Command, function (editor, name) {
+	var text = dojo.widget.Editor2BrowserCommandNames[name.toLowerCase()];
+	if (text) {
+		this._text = text;
 	}
-);
-
-dojo.widget.Editor2BrowserCommandNames={
-			'bold': 'Bold',
-			'copy': 'Copy',
-			'cut': 'Cut',
-			'Delete': 'Delete',
-			'indent': 'Indent',
-			'inserthorizontalrule': 'Horizental Rule',
-			'insertorderedlist': 'Numbered List',
-			'insertunorderedlist': 'Bullet List',
-			'italic': 'Italic',
-			'justifycenter': 'Align Center',
-			'justifyfull': 'Justify',
-			'justifyleft': 'Align Left',
-			'justifyright': 'Align Right',
-			'outdent': 'Outdent',
-			'paste': 'Paste',
-			'redo': 'Redo',
-			'removeformat': 'Remove Format',
-			'selectall': 'Select All',
-			'strikethrough': 'Strikethrough',
-			'subscript': 'Subscript',
-			'superscript': 'Superscript',
-			'underline': 'Underline',
-			'undo': 'Undo',
-			'unlink': 'Remove Link',
-			'createlink': 'Create Link',
-			'insertimage': 'Insert Image',
-			'htmltoggle': 'HTML Source',
-			'forecolor': 'Foreground Color',
-			'hilitecolor': 'Background Color',
-			'plainformatblock': 'Paragraph Style',
-			'formatblock': 'Paragraph Style',
-			'fontsize': 'Font Size',
-			'fontname': 'Font Name'//,
-//			'inserttable': 'Insert Table',
-//			'insertcell':
-//			'insertcol':
-//			'insertrow':
-//			'deletecells':
-//			'deletecols':
-//			'deleterows':
-//			'mergecells':
-//			'splitcell':
-//			'inserthtml':
-//			'blockdirltr':
-//			'blockdirrtl':
-//			'dirltr':
-//			'dirrtl':
-//			'inlinedirltr':
-//			'inlinedirrtl':
-}
-
-dojo.lang.declare("dojo.widget.Editor2BrowserCommand", dojo.widget.Editor2Command, 
-	function(editor,name){
-		// summary:
-		//		dojo.widget.Editor2BrowserCommand is the base class for all the browser built
-		//		in commands
-
-		var text = dojo.widget.Editor2BrowserCommandNames[name.toLowerCase()];
-		if(text){
-			this._text = text;
-		}
-	},
-{
-		execute: function(para){
-			this._editor.execCommand(this._name, para);
-		},
-		getState: function(){
-			if(this._editor._lastStateTimestamp > this._updateTime || this._state == undefined){
-				this._updateTime = this._editor._lastStateTimestamp;
-				try{
-					if(this._editor.queryCommandEnabled(this._name)){
-						if(this._editor.queryCommandState(this._name)){
-							this._state = dojo.widget.Editor2Manager.commandState.Latched;
-						}else{
-							this._state = dojo.widget.Editor2Manager.commandState.Enabled;
-						}
-					}else{
-						this._state = dojo.widget.Editor2Manager.commandState.Disabled;
-					}
-				}catch (e) {
-					//dojo.debug("exception when getting state for command "+this._name+": "+e);
+}, {execute:function (para) {
+	this._editor.execCommand(this._name, para);
+}, getState:function () {
+	if (this._editor._lastStateTimestamp > this._updateTime || this._state == undefined) {
+		this._updateTime = this._editor._lastStateTimestamp;
+		try {
+			if (this._editor.queryCommandEnabled(this._name)) {
+				if (this._editor.queryCommandState(this._name)) {
+					this._state = dojo.widget.Editor2Manager.commandState.Latched;
+				} else {
 					this._state = dojo.widget.Editor2Manager.commandState.Enabled;
 				}
+			} else {
+				this._state = dojo.widget.Editor2Manager.commandState.Disabled;
 			}
-			return this._state;
-		},
-		getValue: function(){
-			try{
-				return this._editor.queryCommandValue(this._name);
-			}catch(e){}
 		}
+		catch (e) {
+			this._state = dojo.widget.Editor2Manager.commandState.Enabled;
+		}
 	}
-);
-
-dojo.lang.declare("dojo.widget.Editor2FormatBlockCommand", dojo.widget.Editor2BrowserCommand, {
-		/* In none-ActiveX mode under IE, <p> and no <p> text can not be distinguished
-		getCurrentValue: function(){
-			var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-			if(!curInst){ return ''; }
-
-			var h = dojo.render.html;
-
-			// safari f's us for selection primitives
-			if(h.safari){ return ''; }
-
-			var selectedNode = (h.ie) ? curInst.document.selection.createRange().parentElement() : curInst.window.getSelection().anchorNode;
-			// make sure we actuall have an element
-			while((selectedNode)&&(selectedNode.nodeType != 1)){
-				selectedNode = selectedNode.parentNode;
-			}
-			if(!selectedNode){ return ''; }
-
-			var formats = ["p", "pre", "h1", "h2", "h3", "h4", "h5", "h6", "address"];
-			// gotta run some specialized updates for the various
-			// formatting options
-			var type = formats[dojo.lang.find(formats, selectedNode.nodeName.toLowerCase())];
-			while((selectedNode!=curInst.editNode)&&(!type)){
-				selectedNode = selectedNode.parentNode;
-				if(!selectedNode){ break; }
-				type = formats[dojo.lang.find(formats, selectedNode.nodeName.toLowerCase())];
-			}
-			if(!type){
-				type = "";
-			}
-			return type;
-		}*/
+	return this._state;
+}, getValue:function () {
+	try {
+		return this._editor.queryCommandValue(this._name);
 	}
-);
-
+	catch (e) {
+	}
+}});
+dojo.lang.declare("dojo.widget.Editor2FormatBlockCommand", dojo.widget.Editor2BrowserCommand, {});
 dojo.require("dojo.widget.FloatingPane");
-dojo.widget.defineWidget(
-	"dojo.widget.Editor2Dialog",
-	[dojo.widget.HtmlWidget, dojo.widget.FloatingPaneBase, dojo.widget.ModalDialogBase],
-	{
-		// summary:
-		//		Provides a Dialog which can be modal or normal for the Editor2.
-
-		templatePath: dojo.uri.dojoUri("src/widget/templates/Editor2/EditorDialog.html"),
-
-		// modal: Boolean: Whether this is a modal dialog. True by default.
-		modal: true,
-
-//		refreshOnShow: true, //for debug for now
-
-		// width: String: Width of the dialog. None by default.
-		width: "",
-
-		// height: String: Height of the dialog. None by default.
-		height: "",
-
-		// windowState: String: startup state of the dialog
-		windowState: "minimized",
-
-		displayCloseAction: true,
-
-		// contentFile: String
-		//	TODO
-		contentFile: "",
-		
-		// contentClass: String
-		//	TODO
-		contentClass: "",
-
-		fillInTemplate: function(args, frag){
-			this.fillInFloatingPaneTemplate(args, frag);
-			dojo.widget.Editor2Dialog.superclass.fillInTemplate.call(this, args, frag);
-		},
-		postCreate: function(){
-			if(this.contentFile){
-				dojo.require(this.contentFile);
+dojo.widget.defineWidget("dojo.widget.Editor2Dialog", [dojo.widget.HtmlWidget, dojo.widget.FloatingPaneBase, dojo.widget.ModalDialogBase], {templateString:"<div id=\"${this.widgetId}\" class=\"dojoFloatingPane\">\n\t<span dojoattachpoint=\"tabStartOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\"\ttabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabStart\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<div dojoAttachPoint=\"titleBar\" class=\"dojoFloatingPaneTitleBar\"  style=\"display:none\">\n\t  \t<img dojoAttachPoint=\"titleBarIcon\"  class=\"dojoFloatingPaneTitleBarIcon\">\n\t\t<div dojoAttachPoint=\"closeAction\" dojoAttachEvent=\"onClick:hide\"\n   \t  \t\tclass=\"dojoFloatingPaneCloseIcon\"></div>\n\t\t<div dojoAttachPoint=\"restoreAction\" dojoAttachEvent=\"onClick:restoreWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneRestoreIcon\"></div>\n\t\t<div dojoAttachPoint=\"maximizeAction\" dojoAttachEvent=\"onClick:maximizeWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneMaximizeIcon\"></div>\n\t\t<div dojoAttachPoint=\"minimizeAction\" dojoAttachEvent=\"onClick:minimizeWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneMinimizeIcon\"></div>\n\t  \t<div dojoAttachPoint=\"titleBarText\" class=\"dojoFloatingPaneTitleText\">${this.title}</div>\n\t</div>\n\n\t<div id=\"${this.widgetId}_container\" dojoAttachPoint=\"containerNode\" class=\"dojoFloatingPaneClient\"></div>\n\t<span dojoattachpoint=\"tabEnd\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabEndOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<div dojoAttachPoint=\"resizeBar\" class=\"dojoFloatingPaneResizebar\" style=\"display:none\"></div>\n</div>\n", modal:true, width:"", height:"", windowState:"minimized", displayCloseAction:true, contentFile:"", contentClass:"", fillInTemplate:function (args, frag) {
+	this.fillInFloatingPaneTemplate(args, frag);
+	dojo.widget.Editor2Dialog.superclass.fillInTemplate.call(this, args, frag);
+}, postCreate:function () {
+	if (this.contentFile) {
+		dojo.require(this.contentFile);
+	}
+	if (this.modal) {
+		dojo.widget.ModalDialogBase.prototype.postCreate.call(this);
+	} else {
+		with (this.domNode.style) {
+			zIndex = 999;
+			display = "none";
+		}
+	}
+	dojo.widget.FloatingPaneBase.prototype.postCreate.apply(this, arguments);
+	dojo.widget.Editor2Dialog.superclass.postCreate.call(this);
+	if (this.width && this.height) {
+		with (this.domNode.style) {
+			width = this.width;
+			height = this.height;
+		}
+	}
+}, createContent:function () {
+	if (!this.contentWidget && this.contentClass) {
+		this.contentWidget = dojo.widget.createWidget(this.contentClass);
+		this.addChild(this.contentWidget);
+	}
+}, show:function () {
+	if (!this.contentWidget) {
+		dojo.widget.Editor2Dialog.superclass.show.apply(this, arguments);
+		this.createContent();
+		dojo.widget.Editor2Dialog.superclass.hide.call(this);
+	}
+	if (!this.contentWidget || !this.contentWidget.loadContent()) {
+		return;
+	}
+	this.showFloatingPane();
+	dojo.widget.Editor2Dialog.superclass.show.apply(this, arguments);
+	if (this.modal) {
+		this.showModalDialog();
+	}
+	if (this.modal) {
+		this.bg.style.zIndex = this.domNode.style.zIndex - 1;
+	}
+}, onShow:function () {
+	dojo.widget.Editor2Dialog.superclass.onShow.call(this);
+	this.onFloatingPaneShow();
+}, closeWindow:function () {
+	this.hide();
+	dojo.widget.Editor2Dialog.superclass.closeWindow.apply(this, arguments);
+}, hide:function () {
+	if (this.modal) {
+		this.hideModalDialog();
+	}
+	dojo.widget.Editor2Dialog.superclass.hide.call(this);
+}, checkSize:function () {
+	if (this.isShowing()) {
+		if (this.modal) {
+			this._sizeBackground();
+		}
+		this.placeModalDialog();
+		this.onResized();
+	}
+}});
+dojo.widget.defineWidget("dojo.widget.Editor2DialogContent", dojo.widget.HtmlWidget, {widgetsInTemplate:true, loadContent:function () {
+	return true;
+}, cancel:function () {
+	this.parent.hide();
+}});
+dojo.lang.declare("dojo.widget.Editor2DialogCommand", dojo.widget.Editor2BrowserCommand, function (editor, name, dialogParas) {
+	this.dialogParas = dialogParas;
+}, {execute:function () {
+	if (!this.dialog) {
+		if (!this.dialogParas.contentFile || !this.dialogParas.contentClass) {
+			alert("contentFile and contentClass should be set for dojo.widget.Editor2DialogCommand.dialogParas!");
+			return;
+		}
+		this.dialog = dojo.widget.createWidget("Editor2Dialog", this.dialogParas);
+		dojo.body().appendChild(this.dialog.domNode);
+		dojo.event.connect(this, "destroy", this.dialog, "destroy");
+	}
+	this.dialog.show();
+}, getText:function () {
+	return this.dialogParas.title || dojo.widget.Editor2DialogCommand.superclass.getText.call(this);
+}});
+dojo.widget.Editor2ToolbarGroups = {};
+dojo.widget.defineWidget("dojo.widget.Editor2", dojo.widget.RichText, function () {
+	this._loadedCommands = {};
+}, {toolbarAlwaysVisible:false, toolbarWidget:null, scrollInterval:null, toolbarTemplatePath:dojo.uri.cache.set(dojo.uri.moduleUri("dojo.widget", "templates/EditorToolbarOneline.html"), "<div class=\"EditorToolbarDomNode EditorToolbarSmallBg\">\n\t<table cellpadding=\"1\" cellspacing=\"0\" border=\"0\">\n\t\t<tbody>\n\t\t\t<tr valign=\"top\" align=\"left\">\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"htmltoggle\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon\" \n\t\t\t\t\t\tstyle=\"background-image: none; width: 30px;\" >&lt;h&gt;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"copy\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Copy\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"paste\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Paste\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"undo\">\n\t\t\t\t\t\t<!-- FIXME: should we have the text \"undo\" here? -->\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Undo\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"redo\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Redo\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td isSpacer=\"true\">\n\t\t\t\t\t<span class=\"iconContainer\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Sep\"\tstyle=\"width: 5px; min-width: 5px;\"></span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"createlink\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Link\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"insertimage\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Image\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"inserthorizontalrule\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_HorizontalLine \">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"bold\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Bold\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"italic\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Italic\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"underline\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Underline\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"strikethrough\">\n\t\t\t\t\t\t<span \n\t\t\t\t\t\t\tclass=\"dojoE2TBIcon dojoE2TBIcon_StrikeThrough\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td isSpacer=\"true\">\n\t\t\t\t\t<span class=\"iconContainer\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Sep\" \n\t\t\t\t\t\t\tstyle=\"width: 5px; min-width: 5px;\"></span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"insertunorderedlist\">\n\t\t\t\t\t\t<span \n\t\t\t\t\t\t\tclass=\"dojoE2TBIcon dojoE2TBIcon_BulletedList\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"insertorderedlist\">\n\t\t\t\t\t\t<span \n\t\t\t\t\t\t\tclass=\"dojoE2TBIcon dojoE2TBIcon_NumberedList\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td isSpacer=\"true\">\n\t\t\t\t\t<span class=\"iconContainer\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Sep\" style=\"width: 5px; min-width: 5px;\"></span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"indent\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Indent\" \n\t\t\t\t\t\t\tunselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"outdent\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Outdent\" \n\t\t\t\t\t\t\tunselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td isSpacer=\"true\">\n\t\t\t\t\t<span class=\"iconContainer\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Sep\" style=\"width: 5px; min-width: 5px;\"></span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"forecolor\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_TextColor\" \n\t\t\t\t\t\t\tunselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"hilitecolor\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_BackgroundColor\" \n\t\t\t\t\t\t\tunselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td isSpacer=\"true\">\n\t\t\t\t\t<span class=\"iconContainer\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Sep\" style=\"width: 5px; min-width: 5px;\"></span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"justifyleft\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_LeftJustify\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"justifycenter\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_CenterJustify\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"justifyright\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_RightJustify\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"justifyfull\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_BlockJustify\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\t\n\t\t\t\t<td>\n\t\t\t\t\t<select class=\"dojoEditorToolbarItem\" dojoETItemName=\"plainformatblock\">\n\t\t\t\t\t\t<!-- FIXME: using \"p\" here inserts a paragraph in most cases! -->\n\t\t\t\t\t\t<option value=\"\">-- format --</option>\n\t\t\t\t\t\t<option value=\"p\">Normal</option>\n\t\t\t\t\t\t<option value=\"pre\">Fixed Font</option>\n\t\t\t\t\t\t<option value=\"h1\">Main Heading</option>\n\t\t\t\t\t\t<option value=\"h2\">Section Heading</option>\n\t\t\t\t\t\t<option value=\"h3\">Sub-Heading</option>\n\t\t\t\t\t\t<!-- <option value=\"blockquote\">Block Quote</option> -->\n\t\t\t\t\t</select>\n\t\t\t\t</td>\n\t\t\t\t<td><!-- uncomment to enable save button -->\n\t\t\t\t\t<!-- save -->\n\t\t\t\t\t<!--span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"save\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Save\">&nbsp;</span>\n\t\t\t\t\t</span-->\n\t\t\t\t</td>\n\t\t\t\t<td width=\"*\">&nbsp;</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n"), toolbarTemplateCssPath:null, toolbarPlaceHolder:"", _inSourceMode:false, _htmlEditNode:null, toolbarGroup:"", shareToolbar:false, contextMenuGroupSet:"", editorOnLoad:function () {
+	dojo.event.topic.publish("dojo.widget.Editor2::preLoadingToolbar", this);
+	if (this.toolbarAlwaysVisible) {
+		dojo.require("dojo.widget.Editor2Plugin.AlwaysShowToolbar");
+	}
+	if (this.toolbarWidget) {
+		this.toolbarWidget.show();
+		dojo.html.insertBefore(this.toolbarWidget.domNode, this.domNode.firstChild);
+	} else {
+		if (this.shareToolbar) {
+			dojo.deprecated("Editor2:shareToolbar is deprecated in favor of toolbarGroup", "0.5");
+			this.toolbarGroup = "defaultDojoToolbarGroup";
+		}
+		if (this.toolbarGroup) {
+			if (dojo.widget.Editor2ToolbarGroups[this.toolbarGroup]) {
+				this.toolbarWidget = dojo.widget.Editor2ToolbarGroups[this.toolbarGroup];
 			}
-			if(this.modal){
-				dojo.widget.ModalDialogBase.prototype.postCreate.call(this);
-			}else{
-				with(this.domNode.style) {
-					zIndex = 999;
-					display = "none";
-				}
+		}
+		if (!this.toolbarWidget) {
+			var tbOpts = {shareGroup:this.toolbarGroup, parent:this};
+			tbOpts.templateString = dojo.uri.cache.get(this.toolbarTemplatePath);
+			if (this.toolbarTemplateCssPath) {
+				tbOpts.templateCssPath = this.toolbarTemplateCssPath;
+				tbOpts.templateCssString = dojo.uri.cache.get(this.toolbarTemplateCssPath);
 			}
-			dojo.widget.FloatingPaneBase.prototype.postCreate.apply(this, arguments);
-			dojo.widget.Editor2Dialog.superclass.postCreate.call(this);
-			if(this.width && this.height){
-				with(this.domNode.style){
-					width = this.width;
-					height = this.height;
-				}
+			if (this.toolbarPlaceHolder) {
+				this.toolbarWidget = dojo.widget.createWidget("Editor2Toolbar", tbOpts, dojo.byId(this.toolbarPlaceHolder), "after");
+			} else {
+				this.toolbarWidget = dojo.widget.createWidget("Editor2Toolbar", tbOpts, this.domNode.firstChild, "before");
 			}
-		},
-		createContent: function(){
-			if(!this.contentWidget && this.contentClass){
-				this.contentWidget = dojo.widget.createWidget(this.contentClass);
-				this.addChild(this.contentWidget);
+			if (this.toolbarGroup) {
+				dojo.widget.Editor2ToolbarGroups[this.toolbarGroup] = this.toolbarWidget;
 			}
-		},
-		show: function(){
-			if(!this.contentWidget){
-				//buggy IE: if the dialog is hidden, the button widgets
-				//in the dialog can not be shown, so show it temporary (as the
-				//dialog may decide not to show it in loadContent() later)
-				dojo.widget.Editor2Dialog.superclass.show.apply(this, arguments);
-				this.createContent();
-				dojo.widget.Editor2Dialog.superclass.hide.call(this);
-			}
-
-			if(!this.contentWidget || !this.contentWidget.loadContent()){
-				return;
-			}
-			this.showFloatingPane();
-			dojo.widget.Editor2Dialog.superclass.show.apply(this, arguments);
-			if(this.modal){
-				this.showModalDialog();
-			}
-			if(this.modal){
-				//place the background div under this modal pane
-				this.bg.style.zIndex = this.domNode.style.zIndex-1;
-			}
-		},
-		onShow: function(){
-			dojo.widget.Editor2Dialog.superclass.onShow.call(this);
-			this.onFloatingPaneShow();
-		},
-		closeWindow: function(){
-			this.hide();
-			dojo.widget.Editor2Dialog.superclass.closeWindow.apply(this, arguments);
-		},
-		hide: function(){
-			if(this.modal){
-				this.hideModalDialog();
-			}
-			dojo.widget.Editor2Dialog.superclass.hide.call(this);
-		},
-		//modified from ModalDialogBase.checkSize to call _sizeBackground conditionally
-		checkSize: function(){
-			if(this.isShowing()){
-				if(this.modal){
-					this._sizeBackground();
-				}
-				this.placeModalDialog();
-				this.onResized();
-			}
+			dojo.event.connect(this, "close", this.toolbarWidget, "hide");
+			this.toolbarLoaded();
 		}
 	}
-);
-
-dojo.widget.defineWidget(
-	"dojo.widget.Editor2DialogContent",
-	dojo.widget.HtmlWidget,
-{
-	// summary:
-	//		dojo.widget.Editor2DialogContent is the actual content of a Editor2Dialog.
-	//		This class should be subclassed to provide the content.
-
-	widgetsInTemplate: true,
-
-	loadContent:function(){
-		// summary: Load the content. Called by Editor2Dialog when first shown
+	dojo.event.topic.registerPublisher("Editor2.clobberFocus", this, "clobberFocus");
+	dojo.event.topic.subscribe("Editor2.clobberFocus", this, "setBlur");
+	dojo.event.topic.publish("dojo.widget.Editor2::onLoad", this);
+}, toolbarLoaded:function () {
+}, registerLoadedPlugin:function (obj) {
+	if (!this.loadedPlugins) {
+		this.loadedPlugins = [];
+	}
+	this.loadedPlugins.push(obj);
+}, unregisterLoadedPlugin:function (obj) {
+	for (var i in this.loadedPlugins) {
+		if (this.loadedPlugins[i] === obj) {
+			delete this.loadedPlugins[i];
+			return;
+		}
+	}
+	dojo.debug("dojo.widget.Editor2.unregisterLoadedPlugin: unknow plugin object: " + obj);
+}, execCommand:function (command, argument) {
+	switch (command.toLowerCase()) {
+	  case "htmltoggle":
+		this.toggleHtmlEditing();
+		break;
+	  default:
+		dojo.widget.Editor2.superclass.execCommand.apply(this, arguments);
+	}
+}, queryCommandEnabled:function (command, argument) {
+	switch (command.toLowerCase()) {
+	  case "htmltoggle":
 		return true;
-	},
-	cancel: function(){
-		// summary: Default handler when cancel button is clicked.
-		this.parent.hide();
+	  default:
+		if (this._inSourceMode) {
+			return false;
+		}
+		return dojo.widget.Editor2.superclass.queryCommandEnabled.apply(this, arguments);
 	}
-});
-
-dojo.lang.declare("dojo.widget.Editor2DialogCommand", dojo.widget.Editor2BrowserCommand,
-	function(editor, name, dialogParas){
-		// summary:
-		//		Provides an easy way to popup a dialog when
-		//		the command is executed.
-		this.dialogParas = dialogParas;
-	},
-{
-	execute: function(){
-		if(!this.dialog){
-			if(!this.dialogParas.contentFile || !this.dialogParas.contentClass){
-				alert("contentFile and contentClass should be set for dojo.widget.Editor2DialogCommand.dialogParas!");
-				return;
-			}
-			this.dialog = dojo.widget.createWidget("Editor2Dialog", this.dialogParas);
-
-			dojo.body().appendChild(this.dialog.domNode);
-
-			dojo.event.connect(this, "destroy", this.dialog, "destroy");
+}, queryCommandState:function (command, argument) {
+	switch (command.toLowerCase()) {
+	  case "htmltoggle":
+		return this._inSourceMode;
+	  default:
+		return dojo.widget.Editor2.superclass.queryCommandState.apply(this, arguments);
+	}
+}, onClick:function (e) {
+	dojo.widget.Editor2.superclass.onClick.call(this, e);
+	if (dojo.widget.PopupManager) {
+		if (!e) {
+			e = this.window.event;
 		}
-		this.dialog.show();
-	},
-	getText: function(){
-		return this.dialogParas.title || dojo.widget.Editor2DialogCommand.superclass.getText.call(this);
+		dojo.widget.PopupManager.onClick(e);
 	}
-});
-
-dojo.widget.Editor2ToolbarGroups = {
-	// summary: keeping track of all available share toolbar groups
-};
-
-dojo.widget.defineWidget(
-	"dojo.widget.Editor2",
-	dojo.widget.RichText,
-	function(){
-		this._loadedCommands={};
-	},
-	{
-		// summary:
-		//		dojo.widget.Editor2 is the WYSIWYG editor in dojo with toolbar. It supports a plugin
-		//		framework which can be used to extend the functionalities of the editor, such as
-		//		adding a context menu, table operation etc.
-		// description:
-		//		Plugins are available using dojo's require syntax. Please find available built-in plugins
-		//		under src/widget/Editor2Plugin.
-
-//		// saveUrl: String: url to which save action should send content to
-//		saveUrl: "",
-//		// saveMethod: String: HTTP method for save (post or get)
-//		saveMethod: "post",
-//		saveArgName: "editorContent",
-//		closeOnSave: false,
-
-		// toolbarAlwaysVisible: Boolean: Whether the toolbar should scroll to keep it in the view
-		toolbarAlwaysVisible: false,
-
-//		htmlEditing: false,
-
-		toolbarWidget: null,
-		scrollInterval: null,
-
-		// toolbarTemplatePath: dojo.uri.Uri
-		//		to specify the template file for the toolbar
-		toolbarTemplatePath: dojo.uri.dojoUri("src/widget/templates/EditorToolbarOneline.html"),
-
-		// toolbarTemplateCssPath: dojo.uri.Uri
-		//		to specify the css file for the toolbar
-		toolbarTemplateCssPath: null,
-
-		// toolbarPlaceHolder: String
-		//		element id to specify where to attach the toolbar
-		toolbarPlaceHolder: '',
-
-//		toolbarTemplatePath: dojo.uri.dojoUri("src/widget/templates/Editor2/EditorToolbarFCKStyle.html"),
-//		toolbarTemplateCssPath: dojo.uri.dojoUri("src/widget/templates/Editor2/FCKDefault/EditorToolbarFCKStyle.css"),
-
-		_inSourceMode: false,
-		_htmlEditNode: null,
-
-		// toolbarGroup: String: 
-		//		This instance of editor will share the same toolbar with other editor with the same toolbarGroup. 
-		//		By default, toolbarGroup is empty and standalone toolbar is used for this instance.
-		toolbarGroup: '',
-
-		// shareToolbar: Boolean: Whether to share toolbar with other instances of Editor2. Deprecated in favor of toolbarGroup
-		shareToolbar: false,
-
-		// contextMenuGroupSet: String: specify which context menu set should be used for this instance. Include ContextMenu plugin to use this
-		contextMenuGroupSet: '',
-
-		editorOnLoad: function(){
-			// summary:
-			//		Create toolbar and other initialization routines. This is called after
-			//		the finish of the loading of document in the editing element
-//			dojo.profile.start("dojo.widget.Editor2::editorOnLoad");
-
-			dojo.event.topic.publish("dojo.widget.Editor2::preLoadingToolbar", this);
-			if(this.toolbarAlwaysVisible){
-				dojo.require("dojo.widget.Editor2Plugin.AlwaysShowToolbar");
+}, clobberFocus:function () {
+}, toggleHtmlEditing:function () {
+	if (this === dojo.widget.Editor2Manager.getCurrentInstance()) {
+		if (!this._inSourceMode) {
+			var html = this.getEditorContent();
+			this._inSourceMode = true;
+			if (!this._htmlEditNode) {
+				this._htmlEditNode = dojo.doc().createElement("textarea");
+				dojo.html.insertAfter(this._htmlEditNode, this.editorObject);
 			}
-
-			if(this.toolbarWidget){
-				this.toolbarWidget.show();
-				//re-add the toolbar to the new domNode (caused by open() on another element)
-				dojo.html.insertBefore(this.toolbarWidget.domNode, this.domNode.firstChild);
-			}else{
-				if(this.shareToolbar){
-					dojo.deprecated("Editor2:shareToolbar is deprecated in favor of toolbarGroup", "0.5");
-					this.toolbarGroup = 'defaultDojoToolbarGroup';
-				}
-				if(this.toolbarGroup){
-					if(dojo.widget.Editor2ToolbarGroups[this.toolbarGroup]){
-						this.toolbarWidget = dojo.widget.Editor2ToolbarGroups[this.toolbarGroup];
-					}
-				}
-				if(!this.toolbarWidget){
-						var tbOpts = {shareGroup: this.toolbarGroup, parent: this};
-						tbOpts.templatePath = this.toolbarTemplatePath;
-						if(this.toolbarTemplateCssPath){
-							tbOpts.templateCssPath = this.toolbarTemplateCssPath;
-						}
-						if(this.toolbarPlaceHolder){
-							this.toolbarWidget = dojo.widget.createWidget("Editor2Toolbar", tbOpts, dojo.byId(this.toolbarPlaceHolder), "after");
-						}else{
-							this.toolbarWidget = dojo.widget.createWidget("Editor2Toolbar", tbOpts, this.domNode.firstChild, "before");
-						}
-						if(this.toolbarGroup){
-							dojo.widget.Editor2ToolbarGroups[this.toolbarGroup] = this.toolbarWidget;
-						}
-						dojo.event.connect(this, "close", this.toolbarWidget, "hide");
-	
-						this.toolbarLoaded();
-				}
+			this._htmlEditNode.style.display = "";
+			this._htmlEditNode.style.width = "100%";
+			this._htmlEditNode.style.height = dojo.html.getBorderBox(this.editNode).height + "px";
+			this._htmlEditNode.value = html;
+			with (this.editorObject.style) {
+				position = "absolute";
+				left = "-2000px";
+				top = "-2000px";
 			}
-
-			dojo.event.topic.registerPublisher("Editor2.clobberFocus", this, "clobberFocus");
-			dojo.event.topic.subscribe("Editor2.clobberFocus", this, "setBlur");
-
-			dojo.event.topic.publish("dojo.widget.Editor2::onLoad", this);
-//			dojo.profile.end("dojo.widget.Editor2::editorOnLoad");
-		},
-
-		//event for plugins to use
-		toolbarLoaded: function(){
-			// summary:
-			//		Fired when the toolbar for this editor is created.
-			//		This event is for plugins to use
-		},
-
-		//TODO: provide a query mechanism about loaded plugins?
-		registerLoadedPlugin: function(/*Object*/obj){
-			// summary: Register a plugin which is loaded for this instance
-			if(!this.loadedPlugins){
-				this.loadedPlugins = [];
+		} else {
+			this._inSourceMode = false;
+			this._htmlEditNode.blur();
+			with (this.editorObject.style) {
+				position = "";
+				left = "";
+				top = "";
 			}
-			this.loadedPlugins.push(obj);
-		},
-		unregisterLoadedPlugin: function(/*Object*/obj){
-			// summary: Delete a loaded plugin for this instance
-			for(var i in this.loadedPlugins){
-				if(this.loadedPlugins[i] === obj){
-					delete this.loadedPlugins[i];
-					return;
-				}
-			}
-			dojo.debug("dojo.widget.Editor2.unregisterLoadedPlugin: unknow plugin object: "+obj);
-		},
-
-		//overload the original ones to provide extra commands
-		execCommand: function(/*String*/command, argument){
-			switch(command.toLowerCase()){
-				case 'htmltoggle':
-					this.toggleHtmlEditing();
-					break;
-				default:
-					dojo.widget.Editor2.superclass.execCommand.apply(this, arguments);
-			}
-		},
-		queryCommandEnabled: function(/*String*/command, argument){
-			switch(command.toLowerCase()){
-				case 'htmltoggle':
-					return true;
-				default:
-					if(this._inSourceMode){ return false;}
-					return dojo.widget.Editor2.superclass.queryCommandEnabled.apply(this, arguments);
-			}
-		},
-		queryCommandState: function(/*String*/command, argument){
-			switch(command.toLowerCase()){
-				case 'htmltoggle':
-					return this._inSourceMode;
-				default:
-					return dojo.widget.Editor2.superclass.queryCommandState.apply(this, arguments);
-			}
-		},
-
-		onClick: function(/*Event*/e){
-			dojo.widget.Editor2.superclass.onClick.call(this, e);
-			//if Popup is used, call dojo.widget.PopupManager.onClick
-			//manually when click in the editing area to close all
-			//open popups (dropdowns)
-			if(dojo.widget.PopupManager){
-				if(!e){ //IE
-					e = this.window.event;
-				}
-				dojo.widget.PopupManager.onClick(e);
-			}
-		},
-
-		clobberFocus: function(){
-			// summary: stub to signal other instances to clobber focus
-		},
-		toggleHtmlEditing: function(){
-			// summary: toggle between WYSIWYG mode and HTML source mode
-			if(this===dojo.widget.Editor2Manager.getCurrentInstance()){
-				if(!this._inSourceMode){
-					var html = this.getEditorContent();
-					this._inSourceMode = true;
-
-					if(!this._htmlEditNode){
-						this._htmlEditNode = dojo.doc().createElement("textarea");
-						dojo.html.insertAfter(this._htmlEditNode, this.editorObject);
-					}
-
-					this._htmlEditNode.style.display = "";
-					this._htmlEditNode.style.width = "100%";
-					this._htmlEditNode.style.height = dojo.html.getBorderBox(this.editNode).height+"px";
-					this._htmlEditNode.value = html;
-
-					//activeX object (IE) doesn't like to be hidden, so move it outside of screen instead
-					with(this.editorObject.style){
-						position = "absolute";
-						left = "-2000px";
-						top = "-2000px";
-					}
-				}else{
-					this._inSourceMode = false;
-
-					//In IE activeX mode, if _htmlEditNode is focused,
-					//when toggling, an error would occur, so unfocus it
-					this._htmlEditNode.blur();
-
-					with(this.editorObject.style){
-						position = "";
-						left = "";
-						top = "";
-					}
-					var html = this._htmlEditNode.value;
-
-					dojo.lang.setTimeout(this, "replaceEditorContent", 1, html);
-					this._htmlEditNode.style.display = "none";
-					this.focus();
-				}
-				this.onDisplayChanged(null, true);
-			}
-		},
-
-		setFocus: function(){
-			// summary: focus is set on this instance
-//			dojo.debug("setFocus: start "+this.widgetId);
-			if(dojo.widget.Editor2Manager.getCurrentInstance() === this){ return; }
-
-			this.clobberFocus();
-//			dojo.debug("setFocus:", this);
-			dojo.widget.Editor2Manager.setCurrentInstance(this);
-		},
-
-		setBlur: function(){
-			// summary: focus on this instance is lost
-//			 dojo.debug("setBlur:", this);
-			//dojo.event.disconnect(this.toolbarWidget, "exec", this, "execCommand");
-		},
-
-		saveSelection: function(){
-			// summary: save the current selection for restoring it
-			this._bookmark = null;
-			this._bookmark = dojo.withGlobal(this.window, dojo.html.selection.getBookmark);
-		},
-		restoreSelection: function(){
-			// summary: restore the last saved selection
-			if(this._bookmark){
-				this.focus(); //require for none-activeX IE
-				dojo.withGlobal(this.window, "moveToBookmark", dojo.html.selection, [this._bookmark]);
-				this._bookmark = null;
-			}else{
-				dojo.debug("restoreSelection: no saved selection is found!");
-			}
-		},
-
-		_updateToolbarLastRan: null,
-		_updateToolbarTimer: null,
-		_updateToolbarFrequency: 500,
-
-		updateToolbar: function(/*Boolean*/force){
-			// summary: update the associated toolbar of this Editor2
-			if((!this.isLoaded)||(!this.toolbarWidget)){ return; }
-
-			// keeps the toolbar from updating too frequently
-			// TODO: generalize this functionality?
-			var diff = new Date() - this._updateToolbarLastRan;
-			if( (!force)&&(this._updateToolbarLastRan)&&
-				((diff < this._updateToolbarFrequency)) ){
-
-				clearTimeout(this._updateToolbarTimer);
-				var _this = this;
-				this._updateToolbarTimer = setTimeout(function() {
-					_this.updateToolbar();
-				}, this._updateToolbarFrequency/2);
-				return;
-
-			}else{
-				this._updateToolbarLastRan = new Date();
-			}
-			// end frequency checker
-
-			//IE has the habit of generating events even when this editor is blurred, prevent this
-			if(dojo.widget.Editor2Manager.getCurrentInstance() !== this){ return; }
-
-			this.toolbarWidget.update();
-		},
-
-		destroy: function(/*Boolean*/finalize){
-			this._htmlEditNode = null;
-			dojo.event.disconnect(this, "close", this.toolbarWidget, "hide");
-			if(!finalize){
-				this.toolbarWidget.destroy();
-			}
-			dojo.widget.Editor2.superclass.destroy.call(this);
-		},
-
-		_lastStateTimestamp: 0,
-		onDisplayChanged: function(/*Object*/e, /*Boolean*/forceUpdate){
-			this._lastStateTimestamp = (new Date()).getTime();
-			dojo.widget.Editor2.superclass.onDisplayChanged.call(this,e);
-			this.updateToolbar(forceUpdate);
-		},
-
-		onLoad: function(){
-			try{
-				dojo.widget.Editor2.superclass.onLoad.call(this);
-			}catch(e){ // FIXME: debug why this is throwing errors in IE!
-				dojo.debug(e);
-			}
-			this.editorOnLoad();
-		},
-
-		onFocus: function(){
-			dojo.widget.Editor2.superclass.onFocus.call(this);
-			this.setFocus();
-		},
-
-		//overload to support source editing mode
-		getEditorContent: function(){
-			if(this._inSourceMode){
-				return this._htmlEditNode.value;
-			}
-			return dojo.widget.Editor2.superclass.getEditorContent.call(this);
-		},
-
-		replaceEditorContent: function(html){
-			if(this._inSourceMode){
-				this._htmlEditNode.value = html;
-				return;
-			}
-			dojo.widget.Editor2.superclass.replaceEditorContent.apply(this,arguments);
-		},
-		getCommand: function(/*String*/name){
-			// summary: return a command associated with this instance of editor
-			if(this._loadedCommands[name]){
-				return this._loadedCommands[name];
-			}
-			var cmd = dojo.widget.Editor2Manager.getCommand(this, name);
-			this._loadedCommands[name] = cmd;
-			return cmd;
-		},
-		// Array: Commands shortcuts. Each element can has up to 3 fields:
-		//		1. String: the name of the command
-		//		2. String Optional: the char for shortcut key, by default the first char from the command name is used
-		//		3. Int Optional: specify the modifier of the shortcut, by default ctrl is used
-		shortcuts: [['bold'],['italic'],['underline'],['selectall','a'],['insertunorderedlist','\\']],
-		setupDefaultShortcuts: function(){
-			// summary: setup default shortcuts using Editor2 commands
-			var exec = function(cmd){ return function(){ cmd.execute(); } };
-//			if(!dojo.render.html.ie){
-//				this.shortcuts.push(['redo','Z']);
-//			}
-			var self = this;
-			dojo.lang.forEach(this.shortcuts, function(item){
-				var cmd = self.getCommand(item[0]);
-				if(cmd){
-					self.addKeyHandler(item[1]?item[1]:item[0].charAt(0), item[2]==undefined?self.KEY_CTRL:item[2], exec(cmd));
-				}
-			});
-//			this.addKeyHandler("s", ctrl, function () { this.save(true); });
+			var html = this._htmlEditNode.value;
+			dojo.lang.setTimeout(this, "replaceEditorContent", 1, html);
+			this._htmlEditNode.style.display = "none";
+			this.focus();
 		}
-		/*,
-		// FIXME: probably not needed any more with new design, but need to verify
-		_save: function(e){
-			// FIXME: how should this behave when there's a larger form in play?
-			if(!this.isClosed){
-				dojo.debug("save attempt");
-				if(this.saveUrl.length){
-					var content = {};
-					content[this.saveArgName] = this.getEditorContent();
-					dojo.io.bind({
-						method: this.saveMethod,
-						url: this.saveUrl,
-						content: content
-					});
-				}else{
-					dojo.debug("please set a saveUrl for the editor");
-				}
-				if(this.closeOnSave){
-					this.close(e.getName().toLowerCase() == "save");
-				}
-			}
-		}*/
+		this.onDisplayChanged(null, true);
 	}
-);
+}, setFocus:function () {
+	if (dojo.widget.Editor2Manager.getCurrentInstance() === this) {
+		return;
+	}
+	this.clobberFocus();
+	dojo.widget.Editor2Manager.setCurrentInstance(this);
+}, setBlur:function () {
+}, saveSelection:function () {
+	this._bookmark = null;
+	this._bookmark = dojo.withGlobal(this.window, dojo.html.selection.getBookmark);
+}, restoreSelection:function () {
+	if (this._bookmark) {
+		this.focus();
+		dojo.withGlobal(this.window, "moveToBookmark", dojo.html.selection, [this._bookmark]);
+		this._bookmark = null;
+	} else {
+		dojo.debug("restoreSelection: no saved selection is found!");
+	}
+}, _updateToolbarLastRan:null, _updateToolbarTimer:null, _updateToolbarFrequency:500, updateToolbar:function (force) {
+	if ((!this.isLoaded) || (!this.toolbarWidget)) {
+		return;
+	}
+	var diff = new Date() - this._updateToolbarLastRan;
+	if ((!force) && (this._updateToolbarLastRan) && ((diff < this._updateToolbarFrequency))) {
+		clearTimeout(this._updateToolbarTimer);
+		var _this = this;
+		this._updateToolbarTimer = setTimeout(function () {
+			_this.updateToolbar();
+		}, this._updateToolbarFrequency / 2);
+		return;
+	} else {
+		this._updateToolbarLastRan = new Date();
+	}
+	if (dojo.widget.Editor2Manager.getCurrentInstance() !== this) {
+		return;
+	}
+	this.toolbarWidget.update();
+}, destroy:function (finalize) {
+	this._htmlEditNode = null;
+	dojo.event.disconnect(this, "close", this.toolbarWidget, "hide");
+	if (!finalize) {
+		this.toolbarWidget.destroy();
+	}
+	dojo.widget.Editor2.superclass.destroy.call(this);
+}, _lastStateTimestamp:0, onDisplayChanged:function (e, forceUpdate) {
+	this._lastStateTimestamp = (new Date()).getTime();
+	dojo.widget.Editor2.superclass.onDisplayChanged.call(this, e);
+	this.updateToolbar(forceUpdate);
+}, onLoad:function () {
+	try {
+		dojo.widget.Editor2.superclass.onLoad.call(this);
+	}
+	catch (e) {
+		dojo.debug(e);
+	}
+	this.editorOnLoad();
+}, onFocus:function () {
+	dojo.widget.Editor2.superclass.onFocus.call(this);
+	this.setFocus();
+}, getEditorContent:function () {
+	if (this._inSourceMode) {
+		return this._htmlEditNode.value;
+	}
+	return dojo.widget.Editor2.superclass.getEditorContent.call(this);
+}, replaceEditorContent:function (html) {
+	if (this._inSourceMode) {
+		this._htmlEditNode.value = html;
+		return;
+	}
+	dojo.widget.Editor2.superclass.replaceEditorContent.apply(this, arguments);
+}, getCommand:function (name) {
+	if (this._loadedCommands[name]) {
+		return this._loadedCommands[name];
+	}
+	var cmd = dojo.widget.Editor2Manager.getCommand(this, name);
+	this._loadedCommands[name] = cmd;
+	return cmd;
+}, shortcuts:[["bold"], ["italic"], ["underline"], ["selectall", "a"], ["insertunorderedlist", "\\"]], setupDefaultShortcuts:function () {
+	var exec = function (cmd) {
+		return function () {
+			cmd.execute();
+		};
+	};
+	var self = this;
+	dojo.lang.forEach(this.shortcuts, function (item) {
+		var cmd = self.getCommand(item[0]);
+		if (cmd) {
+			self.addKeyHandler(item[1] ? item[1] : item[0].charAt(0), item[2] == undefined ? self.KEY_CTRL : item[2], exec(cmd));
+		}
+	});
+}});
+
+
 __CPAN_FILE__ src/widget/TreeSelector.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -47641,176 +30019,97 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeSelector");
-
 dojo.require("dojo.widget.HtmlWidget");
-
-
-dojo.widget.defineWidget("dojo.widget.TreeSelector", dojo.widget.HtmlWidget, function() {
+dojo.widget.defineWidget("dojo.widget.TreeSelector", dojo.widget.HtmlWidget, function () {
 	this.eventNames = {};
-
 	this.listenedTrees = [];
-
-},
-{
-	widgetType: "TreeSelector",
-	selectedNode: null,
-
-	dieWithTree: false,
-
-	eventNamesDefault: {
-		select : "select",
-		destroy : "destroy",
-		deselect : "deselect",
-		dblselect: "dblselect" // select already selected node.. Edit or whatever
-	},
-
-	initialize: function() {
-
-		for(name in this.eventNamesDefault) {
-			if (dojo.lang.isUndefined(this.eventNames[name])) {
-				this.eventNames[name] = this.widgetId+"/"+this.eventNamesDefault[name];
-			}
+}, {widgetType:"TreeSelector", selectedNode:null, dieWithTree:false, eventNamesDefault:{select:"select", destroy:"destroy", deselect:"deselect", dblselect:"dblselect"}, initialize:function () {
+	for (name in this.eventNamesDefault) {
+		if (dojo.lang.isUndefined(this.eventNames[name])) {
+			this.eventNames[name] = this.widgetId + "/" + this.eventNamesDefault[name];
 		}
-
-	},
-
-
-	destroy: function() {
-		dojo.event.topic.publish(this.eventNames.destroy, { source: this } );
-
-		return dojo.widget.HtmlWidget.prototype.destroy.apply(this, arguments);
-	},
-
-
-	listenTree: function(tree) {
-		dojo.event.topic.subscribe(tree.eventNames.titleClick, this, "select");
-		dojo.event.topic.subscribe(tree.eventNames.iconClick, this, "select");
-		dojo.event.topic.subscribe(tree.eventNames.collapse, this, "onCollapse");
-		dojo.event.topic.subscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
-		dojo.event.topic.subscribe(tree.eventNames.removeNode, this, "onRemoveNode");
-		dojo.event.topic.subscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
-
-		/* remember all my trees to deselect when element is movedFrom them */
-		this.listenedTrees.push(tree);
-	},
-
-
-	unlistenTree: function(tree) {
-
-		dojo.event.topic.unsubscribe(tree.eventNames.titleClick, this, "select");
-		dojo.event.topic.unsubscribe(tree.eventNames.iconClick, this, "select");
-		dojo.event.topic.unsubscribe(tree.eventNames.collapse, this, "onCollapse");
-		dojo.event.topic.unsubscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
-		dojo.event.topic.unsubscribe(tree.eventNames.removeNode, this, "onRemoveNode");
-		dojo.event.topic.unsubscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
-
-
-		for(var i=0; i<this.listenedTrees.length; i++){
-           if(this.listenedTrees[i] === tree){
-                   this.listenedTrees.splice(i, 1);
-                   break;
-           }
+	}
+}, destroy:function () {
+	dojo.event.topic.publish(this.eventNames.destroy, {source:this});
+	return dojo.widget.HtmlWidget.prototype.destroy.apply(this, arguments);
+}, listenTree:function (tree) {
+	dojo.event.topic.subscribe(tree.eventNames.titleClick, this, "select");
+	dojo.event.topic.subscribe(tree.eventNames.iconClick, this, "select");
+	dojo.event.topic.subscribe(tree.eventNames.collapse, this, "onCollapse");
+	dojo.event.topic.subscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
+	dojo.event.topic.subscribe(tree.eventNames.removeNode, this, "onRemoveNode");
+	dojo.event.topic.subscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
+	this.listenedTrees.push(tree);
+}, unlistenTree:function (tree) {
+	dojo.event.topic.unsubscribe(tree.eventNames.titleClick, this, "select");
+	dojo.event.topic.unsubscribe(tree.eventNames.iconClick, this, "select");
+	dojo.event.topic.unsubscribe(tree.eventNames.collapse, this, "onCollapse");
+	dojo.event.topic.unsubscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
+	dojo.event.topic.unsubscribe(tree.eventNames.removeNode, this, "onRemoveNode");
+	dojo.event.topic.unsubscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
+	for (var i = 0; i < this.listenedTrees.length; i++) {
+		if (this.listenedTrees[i] === tree) {
+			this.listenedTrees.splice(i, 1);
+			break;
 		}
-	},
-
-
-	onTreeDestroy: function(message) {
-
-		this.unlistenTree(message.source);
-
-		if (this.dieWithTree) {
-			//dojo.debug("Killing myself "+this.widgetId);
-			this.destroy();
-			//dojo.debug("done");
-		}
-	},
-
-
-	// deselect node if parent is collapsed
-	onCollapse: function(message) {
-		if (!this.selectedNode) return;
-
-		var node = message.source;
-		var parent = this.selectedNode.parent;
-		while (parent !== node && parent.isTreeNode) {
-			parent = parent.parent;
-		}
-		if (parent.isTreeNode) {
+	}
+}, onTreeDestroy:function (message) {
+	this.unlistenTree(message.source);
+	if (this.dieWithTree) {
+		this.destroy();
+	}
+}, onCollapse:function (message) {
+	if (!this.selectedNode) {
+		return;
+	}
+	var node = message.source;
+	var parent = this.selectedNode.parent;
+	while (parent !== node && parent.isTreeNode) {
+		parent = parent.parent;
+	}
+	if (parent.isTreeNode) {
+		this.deselect();
+	}
+}, select:function (message) {
+	var node = message.source;
+	var e = message.event;
+	if (this.selectedNode === node) {
+		if (e.ctrlKey || e.shiftKey || e.metaKey) {
 			this.deselect();
-		}
-	},
-
-
-
-	select: function(message) {
-		var node = message.source;
-		var e = message.event;
-
-		if (this.selectedNode === node) {
-			if(e.ctrlKey || e.shiftKey || e.metaKey){
-				// If the node is currently selected, and they select it again while holding
-				// down a meta key, it deselects it
-				this.deselect();
-				return;
-			}
-			dojo.event.topic.publish(this.eventNames.dblselect, { node: node });
 			return;
 		}
-
-		if (this.selectedNode) {
-			this.deselect();
-		}
-
-		this.doSelect(node);
-
-		dojo.event.topic.publish(this.eventNames.select, {node: node} );
-	},
-
-	/**
-	 * Deselect node if target tree is out of our concern
-	 */
-	onMoveFrom: function(message) {
-		if (message.child !== this.selectedNode) {
-			return;
-		}
-
-		if (!dojo.lang.inArray(this.listenedTrees, message.newTree)) {
-			this.deselect();
-		}
-	},
-
-	onRemoveNode: function(message) {
-		if (message.child !== this.selectedNode) {
-			return;
-		}
-
+		dojo.event.topic.publish(this.eventNames.dblselect, {node:node});
+		return;
+	}
+	if (this.selectedNode) {
 		this.deselect();
-	},
-
-	doSelect: function(node){
-
-		node.markSelected();
-
-		this.selectedNode = node;
-	},
-
-	deselect: function(){
-
-		var node = this.selectedNode;
-
-		this.selectedNode = null;
-		node.unMarkSelected();
-		dojo.event.topic.publish(this.eventNames.deselect, {node: node} );
-
 	}
+	this.doSelect(node);
+	dojo.event.topic.publish(this.eventNames.select, {node:node});
+}, onMoveFrom:function (message) {
+	if (message.child !== this.selectedNode) {
+		return;
+	}
+	if (!dojo.lang.inArray(this.listenedTrees, message.newTree)) {
+		this.deselect();
+	}
+}, onRemoveNode:function (message) {
+	if (message.child !== this.selectedNode) {
+		return;
+	}
+	this.deselect();
+}, doSelect:function (node) {
+	node.markSelected();
+	this.selectedNode = node;
+}, deselect:function () {
+	var node = this.selectedNode;
+	this.selectedNode = null;
+	node.unMarkSelected();
+	dojo.event.topic.publish(this.eventNames.deselect, {node:node});
+}});
 
-});
 
-
-
-
 __CPAN_FILE__ src/widget/InlineEditBox.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -47823,7 +30122,6 @@
 */
 
 dojo.provide("dojo.widget.InlineEditBox");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.event.*");
 dojo.require("dojo.lfx.*");
@@ -47831,238 +30129,143 @@
 dojo.require("dojo.string");
 dojo.require("dojo.html.*");
 dojo.require("dojo.html.layout");
-
-dojo.widget.defineWidget(
-	"dojo.widget.InlineEditBox",
-	dojo.widget.HtmlWidget,
-	function(){
-		// summary
-		//		Given node is displayed as-is (for example, an <h1 dojoType="InlineEditBox">
-		//		is displayed as an <h1>, but when you click on it, it turns into an
-		//		<input> or <textarea>, and the user can edit the value.
-
-		// mutable objects need to be in constructor to give each instance its own copy
-		this.history = [];
-	},
-{
-	templatePath: dojo.uri.dojoUri("src/widget/templates/InlineEditBox.html"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/InlineEditBox.css"),
-
-	// mode: String
-	//		"text" is the default, and means that the node will convert it into a (single-line) <input>
-	//		when you click on it;
-	//		"textarea" means that the node will be converted into a multi-line <textarea> for editing.
-	mode: "text",
-	
-	// name: String
-	//		This is passed as the third argument to onSave().
-	name: "",
-
-	// minWidth:  Integer
-	//		Pixel minimum width of edit box
-	minWidth: 100,
-
-	// minHeight: Integer
-	//		Pixel minimum height of edit box, if it's a <textarea>
-	minHeight: 200,
-
-	// editing: Boolean
-	//		Is the node currently in edit mode?
-	editing: false,
-
-	// value: String
-	//		The text string displayed or edited.
-	//		Initial value can also be specified inline, like
-	//		<h1 dojoType="InlineEditBox">Hello world</h1>
-	value: "",
-
-	// deprecated
-	textValue: "",
-	defaultText: "",
-	
-	postMixInProperties: function(){
-		if(this.textValue){
-			dojo.deprecated("InlineEditBox: Use value parameter instead of textValue; will be removed in 0.5");
-			this.value=this.textValue;
-		}
-		if(this.defaultText){
-			dojo.deprecated("InlineEditBox: Use value parameter instead of defaultText; will be removed in 0.5");
-			this.value=this.defaultText;
-		}
-	},
-
-	onSave: function(newValue, oldValue, name){
-		// summary: Callback for when value is changed.
-	},
-	onUndo: function(value){
-		// summary: Callback for when editing is aborted (value reverts to pre-edit value).
-	},
-
-	postCreate: function(args, frag){
-		// put original node back in the document, and attach handlers
-		// which hide it and display the editor
-		// TODO: this has a number of issues including breaking programatic creation
-		this.editable = this.getFragNodeRef(frag);
-		dojo.html.insertAfter(this.editable, this.form);
-		dojo.event.connect(this.editable, "onmouseover", this, "onMouseOver");
-		dojo.event.connect(this.editable, "onmouseout", this, "onMouseOut");
-		dojo.event.connect(this.editable, "onclick", this, "_beginEdit");
-		
-		// get value and display it
-		if(this.value){
-			this.editable.innerHTML = this.value;
-			return;
+dojo.widget.defineWidget("dojo.widget.InlineEditBox", dojo.widget.HtmlWidget, function () {
+	this.history = [];
+}, {templateString:"<form class=\"inlineEditBox\" style=\"display: none\" dojoAttachPoint=\"form\" dojoAttachEvent=\"onSubmit:saveEdit; onReset:cancelEdit; onKeyUp: checkForValueChange;\">\n\t<input type=\"text\" dojoAttachPoint=\"text\" style=\"display: none;\" />\n\t<textarea dojoAttachPoint=\"textarea\" style=\"display: none;\"></textarea>\n\t<input type=\"submit\" value=\"Save\" dojoAttachPoint=\"submitButton\" />\n\t<input type=\"reset\" value=\"Cancel\" dojoAttachPoint=\"cancelButton\" />\n</form>\n", templateCssString:".editLabel {\n\tfont-size : small;\n\tpadding : 0 5px;\n\tdisplay : none;\n}\n\n.editableRegionDisabled {\n\tcursor : pointer;\n\t_cursor : hand;\n}\n\n.editableRegion {\n\tbackground-color : #ffc !important;\n\tcursor : pointer;\n\t_cursor : hand;\n}\n\n.editableRegion .editLabel {\n\tdisplay : inline;\n}\n\n.editableTextareaRegion .editLabel {\n\tdisplay : block;\n}\n\n.inlineEditBox {\n\t/*background-color : #ffc;*/\n\tdisplay : inline;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/InlineEditBox.css"), mode:"text", name:"", minWidth:100, minHeight:200, editing:false, value:"", textValue:"", defaultText:"", postMixInProperties:function () {
+	if (this.textValue) {
+		dojo.deprecated("InlineEditBox: Use value parameter instead of textValue; will be removed in 0.5");
+		this.value = this.textValue;
+	}
+	if (this.defaultText) {
+		dojo.deprecated("InlineEditBox: Use value parameter instead of defaultText; will be removed in 0.5");
+		this.value = this.defaultText;
+	}
+}, postCreate:function (args, frag) {
+	this.editable = this.getFragNodeRef(frag);
+	dojo.html.insertAfter(this.editable, this.form);
+	dojo.event.connect(this.editable, "onmouseover", this, "onMouseOver");
+	dojo.event.connect(this.editable, "onmouseout", this, "onMouseOut");
+	dojo.event.connect(this.editable, "onclick", this, "_beginEdit");
+	if (this.value) {
+		this.editable.innerHTML = this.value;
+		return;
+	} else {
+		this.value = dojo.string.trim(this.editable.innerHTML);
+		this.editable.innerHTML = this.value;
+	}
+}, onMouseOver:function () {
+	if (!this.editing) {
+		if (this.disabled) {
+			dojo.html.addClass(this.editable, "editableRegionDisabled");
 		} else {
-			this.value = dojo.string.trim(this.editable.innerHTML);
-			this.editable.innerHTML = this.value;
-		}
-	},
-	
-	onMouseOver: function(){
-		if(!this.editing){
-			if (this.disabled){
-				dojo.html.addClass(this.editable, "editableRegionDisabled");
-			} else {
-				dojo.html.addClass(this.editable, "editableRegion");
-				if(this.mode == "textarea"){
-					dojo.html.addClass(this.editable, "editableTextareaRegion");
-				}
+			dojo.html.addClass(this.editable, "editableRegion");
+			if (this.mode == "textarea") {
+				dojo.html.addClass(this.editable, "editableTextareaRegion");
 			}
 		}
-	},
-	
-	onMouseOut: function(){
-		if(!this.editing){
-			dojo.html.removeClass(this.editable, "editableRegion");
-			dojo.html.removeClass(this.editable, "editableTextareaRegion");
-			dojo.html.removeClass(this.editable, "editableRegionDisabled");
-		}
-	},
-
-	_beginEdit: function(e){
-		// summary
-		// 		When user clicks the text, then start editing.
-		// 		Hide the text and display the form instead.
-
-		if(this.editing || this.disabled){ return; }
-		this.onMouseOut();
-		this.editing = true;
-
-		// setup the form's <input> or <textarea> field, as specified by mode
-		var ee = this[this.mode.toLowerCase()];
-		ee.value = dojo.string.trim(this.value);
-		ee.style.fontSize = dojo.html.getStyle(this.editable, "font-size");
-		ee.style.fontWeight = dojo.html.getStyle(this.editable, "font-weight");
-		ee.style.fontStyle = dojo.html.getStyle(this.editable, "font-style");
-		var bb = dojo.html.getBorderBox(this.editable);
-		ee.style.width = Math.max(bb.width, this.minWidth) + "px";
-		if(this.mode.toLowerCase()=="textarea"){
-			ee.style.display = "block";
-			ee.style.height = Math.max(bb.height, this.minHeight) + "px";
-		} else {
-			ee.style.display = "";
-		}
-
-		// show the edit form and hide the read only version of the text
-		this.form.style.display = "";
-		this.editable.style.display = "none";
-
-		ee.focus();
-		ee.select();
-		this.submitButton.disabled = true;
-	},
-
-	saveEdit: function(e){
-		// summary: Callback when user presses "Save" button
-		e.preventDefault();
-		e.stopPropagation();
-		var ee = this[this.mode.toLowerCase()];
-		if((this.value != ee.value)&&
-			(dojo.string.trim(ee.value) != "")){
-			this.doFade = true;
-			this.history.push(this.value);
-			this.onSave(ee.value, this.value, this.name);
-			this.value = ee.value;
-			this.editable.innerHTML = "";
-			var textNode = document.createTextNode( this.value );
-			this.editable.appendChild( textNode );
-		}else{
-			this.doFade = false;
-		}
-		this._finishEdit(e);
-	},
-
-	cancelEdit: function(e){
-		// summary: Callback when user presses "Cancel" button
-		if(!this.editing){ return false; }
-		this.editing = false;
-		this.form.style.display="none";
-		this.editable.style.display = "";
-		return true;
-	},
-
-	_finishEdit: function(e){
-		if(!this.cancelEdit(e)){ return; }
-		if(this.doFade) {
-			dojo.lfx.highlight(this.editable, dojo.gfx.color.hex2rgb("#ffc"), 700).play(300);
-		}
+	}
+}, onMouseOut:function () {
+	if (!this.editing) {
+		dojo.html.removeClass(this.editable, "editableRegion");
+		dojo.html.removeClass(this.editable, "editableTextareaRegion");
+		dojo.html.removeClass(this.editable, "editableRegionDisabled");
+	}
+}, _beginEdit:function (e) {
+	if (this.editing || this.disabled) {
+		return;
+	}
+	this.onMouseOut();
+	this.editing = true;
+	var ee = this[this.mode.toLowerCase()];
+	ee.value = dojo.string.trim(this.value);
+	ee.style.fontSize = dojo.html.getStyle(this.editable, "font-size");
+	ee.style.fontWeight = dojo.html.getStyle(this.editable, "font-weight");
+	ee.style.fontStyle = dojo.html.getStyle(this.editable, "font-style");
+	var bb = dojo.html.getBorderBox(this.editable);
+	ee.style.width = Math.max(bb.width, this.minWidth) + "px";
+	if (this.mode.toLowerCase() == "textarea") {
+		ee.style.display = "block";
+		ee.style.height = Math.max(bb.height, this.minHeight) + "px";
+	} else {
+		ee.style.display = "";
+	}
+	this.form.style.display = "";
+	this.editable.style.display = "none";
+	ee.focus();
+	ee.select();
+	this.submitButton.disabled = true;
+}, saveEdit:function (e) {
+	e.preventDefault();
+	e.stopPropagation();
+	var ee = this[this.mode.toLowerCase()];
+	if ((this.value != ee.value) && (dojo.string.trim(ee.value) != "")) {
+		this.doFade = true;
+		this.history.push(this.value);
+		this.onSave(ee.value, this.value, this.name);
+		this.value = ee.value;
+		this.editable.innerHTML = "";
+		var textNode = document.createTextNode(this.value);
+		this.editable.appendChild(textNode);
+	} else {
 		this.doFade = false;
-	},
-	
-	setText: function(txt){
-		dojo.deprecated("setText() is deprecated, call setValue() instead, will be removed in 0.5");
-		this.setValue(txt);
-	},
-	
-	setValue: function(/*String*/ txt){
-		// sets the text without informing the server
-		txt = "" + txt;
-		var tt = dojo.string.trim(txt);
-		this.value = tt
-		this.editable.innerHTML = tt;
-	},
-
-	undo: function(){
-		// summary: Revert to previous value in history list.
-		if(this.history.length > 0){
-			var curValue = this.value;
-			var value = this.history.pop();
-			this.editable.innerHTML = value;
-			this.value = value;
-			this.onUndo(value);
-			this.onSave(value, curValue, this.name);
-		}
-	},
-
-	checkForValueChange: function(){
-		// summary
-		//		Callback when user changes input value.
-		//		Enable save button if the text value is different than the original value.
-		var ee = this[this.mode.toLowerCase()];
-		if((this.value != ee.value)&&
-			(dojo.string.trim(ee.value) != "")){
-			this.submitButton.disabled = false;
-		}
-	},
-	
-	disable: function(){
-		this.submitButton.disabled = true;
-		this.cancelButton.disabled = true;
-		var ee = this[this.mode.toLowerCase()];
-		ee.disabled = true;
-		dojo.widget.InlineEditBox.superclass.disable.apply(this, arguments);
-	},
-	
-	enable: function(){
-		this.checkForValueChange();
-		this.cancelButton.disabled = false;
-		var ee = this[this.mode.toLowerCase()];
-		ee.disabled = false;
-		
-		dojo.widget.InlineEditBox.superclass.enable.apply(this, arguments);
 	}
-});
+	this._finishEdit(e);
+}, _stopEditing:function () {
+	this.editing = false;
+	this.form.style.display = "none";
+	this.editable.style.display = "";
+	return true;
+}, cancelEdit:function (e) {
+	this._stopEditing();
+	this.onCancel();
+	return true;
+}, _finishEdit:function (e) {
+	this._stopEditing();
+	if (this.doFade) {
+		dojo.lfx.highlight(this.editable, dojo.gfx.color.hex2rgb("#ffc"), 700).play(300);
+	}
+	this.doFade = false;
+}, setText:function (txt) {
+	dojo.deprecated("setText() is deprecated, call setValue() instead, will be removed in 0.5");
+	this.setValue(txt);
+}, setValue:function (txt) {
+	txt = "" + txt;
+	var tt = dojo.string.trim(txt);
+	this.value = tt;
+	this.editable.innerHTML = tt;
+}, undo:function () {
+	if (this.history.length > 0) {
+		var curValue = this.value;
+		var value = this.history.pop();
+		this.editable.innerHTML = value;
+		this.value = value;
+		this.onUndo(value);
+		this.onSave(value, curValue, this.name);
+	}
+}, onChange:function (newValue, oldValue) {
+}, onSave:function (newValue, oldValue, name) {
+}, onCancel:function () {
+}, checkForValueChange:function () {
+	var ee = this[this.mode.toLowerCase()];
+	if ((this.value != ee.value) && (dojo.string.trim(ee.value) != "")) {
+		this.submitButton.disabled = false;
+	}
+	this.onChange(this.value, ee.value);
+}, disable:function () {
+	this.submitButton.disabled = true;
+	this.cancelButton.disabled = true;
+	var ee = this[this.mode.toLowerCase()];
+	ee.disabled = true;
+	dojo.widget.InlineEditBox.superclass.disable.apply(this, arguments);
+}, enable:function () {
+	this.checkForValueChange();
+	this.cancelButton.disabled = false;
+	var ee = this[this.mode.toLowerCase()];
+	ee.disabled = false;
+	dojo.widget.InlineEditBox.superclass.enable.apply(this, arguments);
+}});
 
+
 __CPAN_FILE__ src/widget/DateTextbox.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -48075,102 +30278,41 @@
 */
 
 dojo.provide("dojo.widget.DateTextbox");
-
 dojo.require("dojo.widget.ValidationTextbox");
 dojo.require("dojo.date.format");
 dojo.require("dojo.validate.datetime");
-
-// summary: A TextBox which tests for a valid date
-//TODO: combine date and time widgets?
-dojo.widget.defineWidget(
-	"dojo.widget.DateTextbox",
-	dojo.widget.ValidationTextbox,
-	{
-		// format: Deprecated. Style as described in v0.3 in dojo.validate.  Default is  "MM/DD/YYYY".
-
-		// displayFormat: String
-		//	optional pattern used format date.  Uses locale-specific format by default.  See dojo.date.format.
-		displayFormat: "",
-
-		// formatLength: String
-		//	alternate to displayFormat, to format date as short/medium/long.  see dojo.date.format
-		formatLength: "short",
-
-//TODO: add date, saveFormat attributes like DropdownDatePicker?
-
-		mixInProperties: function(/*Object*/localProperties){
-			// summary: see dojo.widget.Widget
-
-			// First initialize properties in super-class.
-			dojo.widget.DateTextbox.superclass.mixInProperties.apply(this, arguments);
-	
-			// Get properties from markup attributes, and assign to flags object.
-			if(localProperties.format){ 
-				this.flags.format = localProperties.format;
-			}
-		},
-
-		isValid: function(){ 
-			// summary: see dojo.widget.ValidationTextbox
-
-			if(this.flags.format){
-				dojo.deprecated("dojo.widget.DateTextbox", "format attribute is deprecated; use displayFormat or formatLength instead", "0.5");
-				return dojo.validate.isValidDate(this.textbox.value, this.flags.format);
-			}
-
-			return dojo.date.parse(this.textbox.value, {formatLength:this.formatLength, selector:'dateOnly', locale:this.lang, datePattern: this.displayFormat});
-		}
+dojo.widget.defineWidget("dojo.widget.DateTextbox", dojo.widget.ValidationTextbox, {displayFormat:"", formatLength:"short", mixInProperties:function (localProperties) {
+	dojo.widget.DateTextbox.superclass.mixInProperties.apply(this, arguments);
+	if (localProperties.format) {
+		this.flags.format = localProperties.format;
 	}
-);
-
-// summary: A TextBox which tests for a valid time
-dojo.widget.defineWidget(
-	"dojo.widget.TimeTextbox",
-	dojo.widget.ValidationTextbox,
-	{
-		// format: Deprecated. Described in v0.3 in dojo.validate.  Default is  "h:mm:ss t".
-		// amSymbol: Deprecated. Used with format. The symbol used for AM.  Default is "AM" or "am".
-		// pmSymbol: Deprecated. Used with format. The symbol used for PM.  Default is "PM" or "pm".
-
-		// displayFormat: String
-		//	optional pattern used format time.  Uses locale-specific format by default.  See dojo.time.format.
-		displayFormat: "",
-
-		// formatLength: String
-		//	alternate to displayFormat, to format time as short/medium/long.  see dojo.time.format
-		formatLength: "short",
-
-
-		mixInProperties: function(/*Object*/localProperties){
-			// summary: see dojo.widget.Widget
-
-			// First initialize properties in super-class.
-			dojo.widget.TimeTextbox.superclass.mixInProperties.apply(this, arguments);
-	
-			// Get properties from markup attributes, and assign to flags object.
-			if(localProperties.format){ 
-				this.flags.format = localProperties.format;
-			}
-			if(localProperties.amsymbol){ 
-				this.flags.amSymbol = localProperties.amsymbol;
-			}
-			if(localProperties.pmsymbol){ 
-				this.flags.pmSymbol = localProperties.pmsymbol;
-			}
-		},
-
-		isValid: function(){ 
-			// summary: see dojo.widget.ValidationTextbox
-			if(this.flags.format){
-				dojo.deprecated("dojo.widget.TimeTextbox", "format attribute is deprecated; use displayFormat or formatLength instead", "0.5");
-				return dojo.validate.isValidTime(this.textbox.value, this.flags);
-			}
-
-			return dojo.date.parse(this.textbox.value, {formatLength:this.formatLength, selector:'timeOnly', locale:this.lang, timePattern: this.displayFormat});
-		}
+}, isValid:function () {
+	if (this.flags.format) {
+		dojo.deprecated("dojo.widget.DateTextbox", "format attribute is deprecated; use displayFormat or formatLength instead", "0.5");
+		return dojo.validate.isValidDate(this.textbox.value, this.flags.format);
 	}
-);
+	return dojo.date.parse(this.textbox.value, {formatLength:this.formatLength, selector:"dateOnly", locale:this.lang, datePattern:this.displayFormat});
+}});
+dojo.widget.defineWidget("dojo.widget.TimeTextbox", dojo.widget.ValidationTextbox, {displayFormat:"", formatLength:"short", mixInProperties:function (localProperties) {
+	dojo.widget.TimeTextbox.superclass.mixInProperties.apply(this, arguments);
+	if (localProperties.format) {
+		this.flags.format = localProperties.format;
+	}
+	if (localProperties.amsymbol) {
+		this.flags.amSymbol = localProperties.amsymbol;
+	}
+	if (localProperties.pmsymbol) {
+		this.flags.pmSymbol = localProperties.pmsymbol;
+	}
+}, isValid:function () {
+	if (this.flags.format) {
+		dojo.deprecated("dojo.widget.TimeTextbox", "format attribute is deprecated; use displayFormat or formatLength instead", "0.5");
+		return dojo.validate.isValidTime(this.textbox.value, this.flags);
+	}
+	return dojo.date.parse(this.textbox.value, {formatLength:this.formatLength, selector:"timeOnly", locale:this.lang, timePattern:this.displayFormat});
+}});
 
+
 __CPAN_FILE__ src/widget/ResizeHandle.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -48183,101 +30325,62 @@
 */
 
 dojo.provide("dojo.widget.ResizeHandle");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.html.layout");
 dojo.require("dojo.event.*");
-
-dojo.widget.defineWidget(
-	"dojo.widget.ResizeHandle",
-	dojo.widget.HtmlWidget,
-{
-	// summary
-	//	The handle on the bottom-right corner of FloatingPane or other widgets that allows
-	//	the widget to be resized.
-	//	Typically not used directly.
-
-	// targetElmId: String
-	//	id of the Widget OR DomNode that I will size
-	targetElmId: '',
-
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/ResizeHandle.css"),
-	templateString: '<div class="dojoHtmlResizeHandle"><div></div></div>',
-
-	postCreate: function(){
-		dojo.event.connect(this.domNode, "onmousedown", this, "_beginSizing");
-	},
-
-	_beginSizing: function(/*Event*/ e){
-		if (this._isSizing){ return false; }
-
-		// get the target dom node to adjust.  targetElmId can refer to either a widget or a simple node
-		this.targetWidget = dojo.widget.byId(this.targetElmId);
-		this.targetDomNode = this.targetWidget ? this.targetWidget.domNode : dojo.byId(this.targetElmId);
-		if (!this.targetDomNode){ return; }
-
-		this._isSizing = true;
-		this.startPoint  = {'x':e.clientX, 'y':e.clientY};
-		var mb = dojo.html.getMarginBox(this.targetDomNode);
-		this.startSize  = {'w':mb.width, 'h':mb.height};
-
-		dojo.event.kwConnect({
-			srcObj: dojo.body(), 
-			srcFunc: "onmousemove",
-			targetObj: this,
-			targetFunc: "_changeSizing",
-			rate: 25
-		});
-		dojo.event.connect(dojo.body(), "onmouseup", this, "_endSizing");
-
-		e.preventDefault();
-	},
-
-	_changeSizing: function(/*Event*/ e){
-		// On IE, if you move the mouse above/to the left of the object being resized,
-		// sometimes clientX/Y aren't set, apparently.  Just ignore the event.
-		try{
-			if(!e.clientX  || !e.clientY){ return; }
-		}catch(e){
-			// sometimes you get an exception accessing above fields...
+dojo.widget.defineWidget("dojo.widget.ResizeHandle", dojo.widget.HtmlWidget, {targetElmId:"", templateCssString:".dojoHtmlResizeHandle {\n\tfloat: right;\n\tposition: absolute;\n\tright: 2px;\n\tbottom: 2px;\n\twidth: 13px;\n\theight: 13px;\n\tz-index: 20;\n\tcursor: nw-resize;\n\tbackground-image: url(grabCorner.gif);\n\tline-height: 0px;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/ResizeHandle.css"), templateString:"<div class=\"dojoHtmlResizeHandle\"><div></div></div>", postCreate:function () {
+	dojo.event.connect(this.domNode, "onmousedown", this, "_beginSizing");
+}, _beginSizing:function (e) {
+	if (this._isSizing) {
+		return false;
+	}
+	this.targetWidget = dojo.widget.byId(this.targetElmId);
+	this.targetDomNode = this.targetWidget ? this.targetWidget.domNode : dojo.byId(this.targetElmId);
+	if (!this.targetDomNode) {
+		return;
+	}
+	this._isSizing = true;
+	this.startPoint = {"x":e.clientX, "y":e.clientY};
+	var mb = dojo.html.getMarginBox(this.targetDomNode);
+	this.startSize = {"w":mb.width, "h":mb.height};
+	dojo.event.kwConnect({srcObj:dojo.body(), srcFunc:"onmousemove", targetObj:this, targetFunc:"_changeSizing", rate:25});
+	dojo.event.connect(dojo.body(), "onmouseup", this, "_endSizing");
+	e.preventDefault();
+}, _changeSizing:function (e) {
+	try {
+		if (!e.clientX || !e.clientY) {
 			return;
 		}
-		var dx = this.startPoint.x - e.clientX;
-		var dy = this.startPoint.y - e.clientY;
-		
-		var newW = this.startSize.w - dx;
-		var newH = this.startSize.h - dy;
-
-		// minimum size check
-		if (this.minSize) {
-			var mb = dojo.html.getMarginBox(this.targetDomNode);
-			if (newW < this.minSize.w) {
-				newW = mb.width;
-			}
-			if (newH < this.minSize.h) {
-				newH = mb.height;
-			}
+	}
+	catch (e) {
+		return;
+	}
+	var dx = this.startPoint.x - e.clientX;
+	var dy = this.startPoint.y - e.clientY;
+	var newW = this.startSize.w - dx;
+	var newH = this.startSize.h - dy;
+	if (this.minSize) {
+		var mb = dojo.html.getMarginBox(this.targetDomNode);
+		if (newW < this.minSize.w) {
+			newW = mb.width;
 		}
-		
-		if(this.targetWidget){
-			this.targetWidget.resizeTo(newW, newH);
-		}else{
-			dojo.html.setMarginBox(this.targetDomNode, { width: newW, height: newH});
+		if (newH < this.minSize.h) {
+			newH = mb.height;
 		}
-		
-		e.preventDefault();
-	},
-
-	_endSizing: function(/*Event*/ e){
-		dojo.event.disconnect(dojo.body(), "onmousemove", this, "_changeSizing");
-		dojo.event.disconnect(dojo.body(), "onmouseup", this, "_endSizing");
-
-		this._isSizing = false;
 	}
+	if (this.targetWidget) {
+		this.targetWidget.resizeTo(newW, newH);
+	} else {
+		dojo.html.setMarginBox(this.targetDomNode, {width:newW, height:newH});
+	}
+	e.preventDefault();
+}, _endSizing:function (e) {
+	dojo.event.disconnect(dojo.body(), "onmousemove", this, "_changeSizing");
+	dojo.event.disconnect(dojo.body(), "onmouseup", this, "_endSizing");
+	this._isSizing = false;
+}});
 
 
-});
-
 __CPAN_FILE__ src/widget/TreeNodeV3.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -48290,736 +30393,304 @@
 */
 
 dojo.provide("dojo.widget.TreeNodeV3");
-
 dojo.require("dojo.html.*");
 dojo.require("dojo.event.*");
 dojo.require("dojo.io.*");
 dojo.require("dojo.widget.TreeWithNode");
-
-dojo.widget.defineWidget(
-	"dojo.widget.TreeNodeV3",
-	[dojo.widget.HtmlWidget, dojo.widget.TreeWithNode],
-	function() {
-		this.actionsDisabled = [];
-	        this.object = {};
-	},
-{
-	tryLazyInit: true,
-
-	/*
-	 * Basic actions one can perform on nodes and, some(addchild) on trees
-	 */
-	actions: {
-		MOVE: "MOVE",
-    	DETACH: "DETACH",
-    	EDIT: "EDIT",
-    	ADDCHILD: "ADDCHILD",
-		SELECT: "SELECT"
-	},
-	
-	
-	labelClass: "",
-	contentClass: "",
-
-	expandNode: null,
-	labelNode: null,
-		
-    /**
-     *	can't call it nodeType cause of IE problems
-     */
-	nodeDocType: "",
-    selected: false,
-	
-	getnodeDocType: function() {
-		return this.nodeDocType;
-	},
-	
-	cloneProperties: ["actionsDisabled","tryLazyInit","nodeDocType","objectId","object",
-		   "title","isFolder","isExpanded","state"],
-	
-	
-	/**
-	 * copy cloneProperties with recursion into them
-	 * contains "copy constructor"
-	 */
-	clone: function(deep) {
-		var ret = new this.constructor();
-		
-		//dojo.debug("start cloning props "+this);
-		
-		for(var i=0; i<this.cloneProperties.length; i++) {
-			var prop = this.cloneProperties[i];
-			//dojo.debug("cloning "+prop+ ":" +this[prop]);
-			ret[prop] = dojo.lang.shallowCopy(this[prop], true);			
-		}
-		
-		if (this.tree.unsetFolderOnEmpty && !deep && this.isFolder) {
-			ret.isFolder = false;
-		}
-		
-		//dojo.debug("cloned props "+this);
-		
-		ret.toggleObj = this.toggleObj;
-		
-		dojo.widget.manager.add(ret);
-		
-		ret.tree = this.tree;
-		ret.buildRendering({},{});
-		ret.initialize({},{});
-				
-		if (deep && this.children.length) {
-			//dojo.debug("deeper copy start");
-			for(var i=0; i<this.children.length; i++) {
-				var child = this.children[i];
-				//dojo.debug("copy child "+child);
-				if (child.clone) {
-					ret.children.push(child.clone(deep));
-				} else {
-					ret.children.push(dojo.lang.shallowCopy(child, deep));
-				}
+dojo.widget.defineWidget("dojo.widget.TreeNodeV3", [dojo.widget.HtmlWidget, dojo.widget.TreeWithNode], function () {
+	this.actionsDisabled = [];
+	this.object = {};
+}, {tryLazyInit:true, actions:{MOVE:"MOVE", DETACH:"DETACH", EDIT:"EDIT", ADDCHILD:"ADDCHILD", SELECT:"SELECT"}, labelClass:"", contentClass:"", expandNode:null, labelNode:null, nodeDocType:"", selected:false, getnodeDocType:function () {
+	return this.nodeDocType;
+}, cloneProperties:["actionsDisabled", "tryLazyInit", "nodeDocType", "objectId", "object", "title", "isFolder", "isExpanded", "state"], clone:function (deep) {
+	var ret = new this.constructor();
+	for (var i = 0; i < this.cloneProperties.length; i++) {
+		var prop = this.cloneProperties[i];
+		ret[prop] = dojo.lang.shallowCopy(this[prop], true);
+	}
+	if (this.tree.unsetFolderOnEmpty && !deep && this.isFolder) {
+		ret.isFolder = false;
+	}
+	ret.toggleObj = this.toggleObj;
+	dojo.widget.manager.add(ret);
+	ret.tree = this.tree;
+	ret.buildRendering({}, {});
+	ret.initialize({}, {});
+	if (deep && this.children.length) {
+		for (var i = 0; i < this.children.length; i++) {
+			var child = this.children[i];
+			if (child.clone) {
+				ret.children.push(child.clone(deep));
+			} else {
+				ret.children.push(dojo.lang.shallowCopy(child, deep));
 			}
-			//dojo.debug("deeper copy end");
-			ret.setChildren();
 		}
-		
-		
-				
-		return ret;
-	},
-				
-			
-	markProcessing: function() {
-		this.markProcessingSavedClass = dojo.html.getClass(this.expandNode);
-		dojo.html.setClass(this.expandNode, this.tree.classPrefix+'ExpandLoading');			
-	},
-	
-	unmarkProcessing: function() {
-		dojo.html.setClass(this.expandNode, this.markProcessingSavedClass);			
-	},
-	
-	
-	
-	
-	/**
-	 * get information from args & parent, then build rendering
-	 */
-	buildRendering: function(args, fragment, parent) {
-		//dojo.debug("Build for "+args.toSource());
-		
-		if (args.tree) {
-			this.tree = dojo.lang.isString(args.tree) ? dojo.widget.manager.getWidgetById(args.tree) : args.tree;			
-		} else if (parent && parent.tree) {
+		ret.setChildren();
+	}
+	return ret;
+}, markProcessing:function () {
+	this.markProcessingSavedClass = dojo.html.getClass(this.expandNode);
+	dojo.html.setClass(this.expandNode, this.tree.classPrefix + "ExpandLoading");
+}, unmarkProcessing:function () {
+	dojo.html.setClass(this.expandNode, this.markProcessingSavedClass);
+}, buildRendering:function (args, fragment, parent) {
+	if (args.tree) {
+		this.tree = dojo.lang.isString(args.tree) ? dojo.widget.manager.getWidgetById(args.tree) : args.tree;
+	} else {
+		if (parent && parent.tree) {
 			this.tree = parent.tree;
-		} 
-		
-		if (!this.tree) {
-			dojo.raise("Can't evaluate tree from arguments or parent");
 		}
-		
-		
-		//dojo.profile.start("buildRendering - cloneNode");
-		
-		this.domNode = this.tree.nodeTemplate.cloneNode(true);
-		this.expandNode = this.domNode.firstChild;
-		this.contentNode = this.domNode.childNodes[1];
-		this.labelNode = this.contentNode.firstChild;
-		
-		if (this.labelClass) {
-			dojo.html.addClass(this.labelNode, this.labelClass);
-		}
-		
-		if (this.contentClass) {
-			dojo.html.addClass(this.contentNode, this.contentClass);
-		}
-		
-		
-		//dojo.profile.end("buildRendering - cloneNode");
-		
-		
-		this.domNode.widgetId = this.widgetId;
-		
-		//dojo.profile.start("buildRendering - innerHTML");
-		this.labelNode.innerHTML = this.title;
-		//dojo.profile.end("buildRendering - innerHTML");
-		
-	},
-	
-
-	isTreeNode: true,
-
-	
-	object: {},
-
-	title: "",
-	
-	isFolder: null, // set by widget depending on children/args
-
-	contentNode: null, // the item label
-	
-	expandClass: "",
-
-
-	isExpanded: false,
-	
-
-	containerNode: null,
-
-	
-	getInfo: function() {
-		// No title here (title may be widget)
-		var info = {
-			widgetId: this.widgetId,
-			objectId: this.objectId,
-			index: this.getParentIndex()
-		}
-
-		return info;
-	},
-	
-	setFolder: function() {
-		//dojo.debug("SetFolder in "+this);
+	}
+	if (!this.tree) {
+		dojo.raise("Can't evaluate tree from arguments or parent");
+	}
+	this.domNode = this.tree.nodeTemplate.cloneNode(true);
+	this.expandNode = this.domNode.firstChild;
+	this.contentNode = this.domNode.childNodes[1];
+	this.labelNode = this.contentNode.firstChild;
+	if (this.labelClass) {
+		dojo.html.addClass(this.labelNode, this.labelClass);
+	}
+	if (this.contentClass) {
+		dojo.html.addClass(this.contentNode, this.contentClass);
+	}
+	this.domNode.widgetId = this.widgetId;
+	this.labelNode.innerHTML = this.title;
+}, isTreeNode:true, object:{}, title:"", isFolder:null, contentNode:null, expandClass:"", isExpanded:false, containerNode:null, getInfo:function () {
+	var info = {widgetId:this.widgetId, objectId:this.objectId, index:this.getParentIndex()};
+	return info;
+}, setFolder:function () {
+	this.isFolder = true;
+	this.viewSetExpand();
+	if (!this.containerNode) {
+		this.viewAddContainer();
+	}
+	dojo.event.topic.publish(this.tree.eventNames.afterSetFolder, {source:this});
+}, initialize:function (args, frag, parent) {
+	if (args.isFolder) {
 		this.isFolder = true;
+	}
+	if (this.children.length || this.isFolder) {
+		this.setFolder();
+	} else {
 		this.viewSetExpand();
-		if (!this.containerNode) { // maybe this node was unfolderized and still has container
-			this.viewAddContainer(); // all folders have container.
-		}
-		//dojo.debug("publish "+this.tree.eventNames.setFolder);
-		dojo.event.topic.publish(this.tree.eventNames.afterSetFolder, { source: this });
-	},
-	
-	
-	
-	initialize: function(args, frag, parent) {
-		
-		//dojo.profile.start("initialize");
-		
-		/**
-		 * first we populate current widget from args,
-		 * then use its data to initialize
-		 * args may be empty, all data inside widget for copy constructor
-		 */
-		if (args.isFolder) {
-			this.isFolder = true;
-		}
-		
-		if (this.children.length || this.isFolder) {
-			//dojo.debug("children found");
-			//dojo.debug(this.children);
-			//dojo.debug("isFolder "+args.isFolder);
-			
-			// viewSetExpand for Folder is set here also
-			this.setFolder();			
-		} else {
-			// set expandicon for leaf 	
-			this.viewSetExpand();
-		}
-		
-		for(var i=0; i<this.actionsDisabled.length;i++) {
-			this.actionsDisabled[i] = this.actionsDisabled[i].toUpperCase();
-		}
-		//dojo.debug("publish "+this.tree.eventNames.changeTree);
-		
-		        
-
-		dojo.event.topic.publish(this.tree.eventNames.afterChangeTree, {oldTree:null, newTree:this.tree, node:this} );
-		
-		
-		//dojo.profile.end("initialize");
-		
-		//dojo.debug("initialize out "+this);
-		//dojo.debug(this+" parent "+parent);
-	},
-		
-	unsetFolder: function() {
-		this.isFolder = false;
-		this.viewSetExpand();		
-		dojo.event.topic.publish(this.tree.eventNames.afterUnsetFolder, { source: this });
-	},
-	
-	
-	insertNode: function(parent, index) {
-		
-		if (!index) index = 0;
-		//dojo.debug("insertNode "+this+" parent "+parent+" before "+index);
-		
-		if (index==0) {
-			dojo.html.prependChild(this.domNode, parent.containerNode);
-		} else {
-			dojo.html.insertAfter(this.domNode, parent.children[index-1].domNode);
-		}
-	},
-	
-	updateTree: function(newTree) {
-
-		if (this.tree === newTree) {
-			return;
-		}
-		
-		var oldTree = this.tree;
-		
-		
-		dojo.lang.forEach(this.getDescendants(),
-			function(elem) {			
-				elem.tree = newTree;			
-		});
-		
-		/**
-		 * UNTESTED
-		 * changes class prefix for all domnodes when moving between trees
-		 */
-		if (oldTree.classPrefix != newTree.classPrefix) {
-			var stack = [this.domNode]
-			var elem;
-			var reg = new RegExp("(^|\\s)"+oldTree.classPrefix, "g");
-			
-			while (elem = stack.pop()) {
-				for(var i=0; i<elem.childNodes.length; i++) {
-					var childNode = elem.childNodes[i]
-					if (childNode.nodeDocType != 1) continue;
-					// change prefix for classes
-					dojo.html.setClass(childNode, dojo.html.getClass(childNode).replace(reg, '$1'+newTree.classPrefix));
-					stack.push(childNode);
+	}
+	for (var i = 0; i < this.actionsDisabled.length; i++) {
+		this.actionsDisabled[i] = this.actionsDisabled[i].toUpperCase();
+	}
+	dojo.event.topic.publish(this.tree.eventNames.afterChangeTree, {oldTree:null, newTree:this.tree, node:this});
+}, unsetFolder:function () {
+	this.isFolder = false;
+	this.viewSetExpand();
+	dojo.event.topic.publish(this.tree.eventNames.afterUnsetFolder, {source:this});
+}, insertNode:function (parent, index) {
+	if (!index) {
+		index = 0;
+	}
+	if (index == 0) {
+		dojo.html.prependChild(this.domNode, parent.containerNode);
+	} else {
+		dojo.html.insertAfter(this.domNode, parent.children[index - 1].domNode);
+	}
+}, updateTree:function (newTree) {
+	if (this.tree === newTree) {
+		return;
+	}
+	var oldTree = this.tree;
+	dojo.lang.forEach(this.getDescendants(), function (elem) {
+		elem.tree = newTree;
+	});
+	if (oldTree.classPrefix != newTree.classPrefix) {
+		var stack = [this.domNode];
+		var elem;
+		var reg = new RegExp("(^|\\s)" + oldTree.classPrefix, "g");
+		while (elem = stack.pop()) {
+			for (var i = 0; i < elem.childNodes.length; i++) {
+				var childNode = elem.childNodes[i];
+				if (childNode.nodeDocType != 1) {
+					continue;
 				}
+				dojo.html.setClass(childNode, dojo.html.getClass(childNode).replace(reg, "$1" + newTree.classPrefix));
+				stack.push(childNode);
 			}
-			
 		}
-		
-		var message = {oldTree:oldTree, newTree:newTree, node:this}
-		
-		dojo.event.topic.publish(this.tree.eventNames.afterChangeTree, message );		
-		dojo.event.topic.publish(newTree.eventNames.afterChangeTree, message );
-			
-				
-	},
-	
-	
-	/**
-	 * called every time the widget is added with createWidget or created wia markup
-	 * from addChild -> registerChild or from postInitialize->registerChild
-	 * not called in batch procession
-	 * HTML & widget.createWidget only
-	 * Layout MUST be removed when node is detached
-	 * 
-	 */
-	addedTo: function(parent, index, dontPublishEvent) {
-		//dojo.profile.start("addedTo");
-		//dojo.debug(this + " addedTo "+parent+" index "+index);
-		//dojo.debug(parent.children);
-		//dojo.debug(parent.containerNode.innerHTML);
-		
-		//dojo.debug((new Error()).stack);
-					
-				
-		if (this.tree !== parent.tree) {
-			this.updateTree(parent.tree);
+	}
+	var message = {oldTree:oldTree, newTree:newTree, node:this};
+	dojo.event.topic.publish(this.tree.eventNames.afterChangeTree, message);
+	dojo.event.topic.publish(newTree.eventNames.afterChangeTree, message);
+}, addedTo:function (parent, index, dontPublishEvent) {
+	if (this.tree !== parent.tree) {
+		this.updateTree(parent.tree);
+	}
+	if (parent.isTreeNode) {
+		if (!parent.isFolder) {
+			parent.setFolder();
+			parent.state = parent.loadStates.LOADED;
 		}
-		
-		if (parent.isTreeNode) {
-			if (!parent.isFolder) {
-				//dojo.debug("folderize parent "+parent);
-				parent.setFolder();
-				parent.state = parent.loadStates.LOADED;
-			}
+	}
+	var siblingsCount = parent.children.length;
+	this.insertNode(parent, index);
+	this.viewAddLayout();
+	if (siblingsCount > 1) {
+		if (index == 0 && parent.children[1] instanceof dojo.widget.Widget) {
+			parent.children[1].viewUpdateLayout();
 		}
-		
-		
-		var siblingsCount = parent.children.length;
-		
-		// setFolder works BEFORE insertNode
-		this.insertNode(parent, index);
-		
-		
-		this.viewAddLayout();
-	
-		
-		//dojo.debug("siblings "+parent.children);
-		
-		if (siblingsCount > 1) {
-			if (index == 0 && parent.children[1] instanceof dojo.widget.Widget) {
-				parent.children[1].viewUpdateLayout();				
-			}
-			if (index == siblingsCount-1 && parent.children[siblingsCount-2] instanceof dojo.widget.Widget) {
-				parent.children[siblingsCount-2].viewUpdateLayout();			
-			}
-		} else if (parent.isTreeNode) {
-			// added as the first child
-			//dojo.debug("added as first");
+		if (index == siblingsCount - 1 && parent.children[siblingsCount - 2] instanceof dojo.widget.Widget) {
+			parent.children[siblingsCount - 2].viewUpdateLayout();
+		}
+	} else {
+		if (parent.isTreeNode) {
 			parent.viewSetHasChildren();
 		}
-		
-		if (!dontPublishEvent) {
-
-			var message = {
-				child: this,
-				index: index,
-				parent: parent
-			}
-				
-			dojo.event.topic.publish(this.tree.eventNames.afterAddChild, message);
-		}
-
-		//dojo.profile.end("addedTo");
-		
-				
-	},
-	
-	/**
-	 * Fast program-only hacky creation of widget
-	 * 	
-	 */
-	createSimple: function(args, parent) {
-		// I pass no args and ignore default controller
-		//dojo.profile.start(this.widgetType+" createSimple");
-		//dojo.profile.start(this.widgetType+" createSimple constructor");
-		if (args.tree) {
-			var tree = args.tree;
-		} else if (parent) {
+	}
+	if (!dontPublishEvent) {
+		var message = {child:this, index:index, parent:parent};
+		dojo.event.topic.publish(this.tree.eventNames.afterAddChild, message);
+	}
+}, createSimple:function (args, parent) {
+	if (args.tree) {
+		var tree = args.tree;
+	} else {
+		if (parent) {
 			var tree = parent.tree;
 		} else {
 			dojo.raise("createSimple: can't evaluate tree");
 		}
-		tree = dojo.widget.byId(tree);
-		
-		//dojo.debug(tree);
-		
-		var treeNode = new tree.defaultChildWidget(); 
-		//dojo.profile.end(this.widgetType+" createSimple constructor");
-		
-		//dojo.profile.start(this.widgetType+" createSimple mixin");		
-		for(var x in args){ // fastMixIn			
-			treeNode[x] = args[x];
+	}
+	tree = dojo.widget.byId(tree);
+	var treeNode = new tree.defaultChildWidget();
+	for (var x in args) {
+		treeNode[x] = args[x];
+	}
+	treeNode.toggleObj = dojo.lfx.toggle[treeNode.toggle.toLowerCase()] || dojo.lfx.toggle.plain;
+	dojo.widget.manager.add(treeNode);
+	treeNode.buildRendering(args, {}, parent);
+	treeNode.initialize(args, {}, parent);
+	if (treeNode.parent) {
+		delete dojo.widget.manager.topWidgets[treeNode.widgetId];
+	}
+	return treeNode;
+}, viewUpdateLayout:function () {
+	this.viewRemoveLayout();
+	this.viewAddLayout();
+}, viewAddContainer:function () {
+	this.containerNode = this.tree.containerNodeTemplate.cloneNode(true);
+	this.domNode.appendChild(this.containerNode);
+}, viewAddLayout:function () {
+	if (this.parent["isTree"]) {
+		dojo.html.setClass(this.domNode, dojo.html.getClass(this.domNode) + " " + this.tree.classPrefix + "IsRoot");
+	}
+	if (this.isLastChild()) {
+		dojo.html.setClass(this.domNode, dojo.html.getClass(this.domNode) + " " + this.tree.classPrefix + "IsLast");
+	}
+}, viewRemoveLayout:function () {
+	dojo.html.removeClass(this.domNode, this.tree.classPrefix + "IsRoot");
+	dojo.html.removeClass(this.domNode, this.tree.classPrefix + "IsLast");
+}, viewGetExpandClass:function () {
+	if (this.isFolder) {
+		return this.isExpanded ? "ExpandOpen" : "ExpandClosed";
+	} else {
+		return "ExpandLeaf";
+	}
+}, viewSetExpand:function () {
+	var expand = this.tree.classPrefix + this.viewGetExpandClass();
+	var reg = new RegExp("(^|\\s)" + this.tree.classPrefix + "Expand\\w+", "g");
+	dojo.html.setClass(this.domNode, dojo.html.getClass(this.domNode).replace(reg, "") + " " + expand);
+	this.viewSetHasChildrenAndExpand();
+}, viewGetChildrenClass:function () {
+	return "Children" + (this.children.length ? "Yes" : "No");
+}, viewSetHasChildren:function () {
+	var clazz = this.tree.classPrefix + this.viewGetChildrenClass();
+	var reg = new RegExp("(^|\\s)" + this.tree.classPrefix + "Children\\w+", "g");
+	dojo.html.setClass(this.domNode, dojo.html.getClass(this.domNode).replace(reg, "") + " " + clazz);
+	this.viewSetHasChildrenAndExpand();
+}, viewSetHasChildrenAndExpand:function () {
+	var clazz = this.tree.classPrefix + "State" + this.viewGetChildrenClass() + "-" + this.viewGetExpandClass();
+	var reg = new RegExp("(^|\\s)" + this.tree.classPrefix + "State[\\w-]+", "g");
+	dojo.html.setClass(this.domNode, dojo.html.getClass(this.domNode).replace(reg, "") + " " + clazz);
+}, viewUnfocus:function () {
+	dojo.html.removeClass(this.labelNode, this.tree.classPrefix + "LabelFocused");
+}, viewFocus:function () {
+	dojo.html.addClass(this.labelNode, this.tree.classPrefix + "LabelFocused");
+}, viewEmphasize:function () {
+	dojo.html.clearSelection(this.labelNode);
+	dojo.html.addClass(this.labelNode, this.tree.classPrefix + "NodeEmphasized");
+}, viewUnemphasize:function () {
+	dojo.html.removeClass(this.labelNode, this.tree.classPrefix + "NodeEmphasized");
+}, detach:function () {
+	if (!this.parent) {
+		return;
+	}
+	var parent = this.parent;
+	var index = this.getParentIndex();
+	this.doDetach.apply(this, arguments);
+	dojo.event.topic.publish(this.tree.eventNames.afterDetach, {child:this, parent:parent, index:index});
+}, doDetach:function () {
+	var parent = this.parent;
+	if (!parent) {
+		return;
+	}
+	var index = this.getParentIndex();
+	this.viewRemoveLayout();
+	dojo.widget.DomWidget.prototype.removeChild.call(parent, this);
+	var siblingsCount = parent.children.length;
+	if (siblingsCount > 0) {
+		if (index == 0) {
+			parent.children[0].viewUpdateLayout();
 		}
-		
-		
-		//dojo.profile.end(this.widgetType+" createSimple mixin");
-		
-				
-		// HtmlWidget.postMixIn 
-		treeNode.toggleObj = dojo.lfx.toggle[treeNode.toggle.toLowerCase()] || dojo.lfx.toggle.plain;
-
-		//dojo.profile.start(this.widgetType + " manager");
-		dojo.widget.manager.add(treeNode);
-		//dojo.profile.end(this.widgetType + " manager");
-		
-		//dojo.profile.start(this.widgetType + " buildRendering");
-		treeNode.buildRendering(args, {}, parent);		
-		//dojo.profile.end(this.widgetType + " buildRendering");
-		
-		treeNode.initialize(args, {}, parent);
-		
-		//dojo.profile.end(this.widgetType+"createSimple");
-		if (treeNode.parent) {
-			delete dojo.widget.manager.topWidgets[treeNode.widgetId];
+		if (index == siblingsCount) {
+			parent.children[siblingsCount - 1].viewUpdateLayout();
 		}
-		
-		return treeNode;
-	},
-	
-	
-	
-	// can override e.g for case of div with +- text inside
-	viewUpdateLayout: function() {
-		//dojo.profile.start("viewUpdateLayout");
-		//dojo.debug("UpdateLayout in "+this);
-
-		this.viewRemoveLayout();
-		this.viewAddLayout();
-		//dojo.profile.end("viewUpdateLayout");	
-	},
-	
-	
-	viewAddContainer: function() {
-		// make controller only if children exist
-		this.containerNode = this.tree.containerNodeTemplate.cloneNode(true);
-		this.domNode.appendChild(this.containerNode);
-	},
-	/*
-	viewRemoveContainer: function() {
-		// make controller only if children exist
-		this.domNode.removeChild(this.containerNode);
-		this.containerNode = null;
-	},
-	*/
-	
-	viewAddLayout: function() {
-		//dojo.profile.start("viewAddLayout");
-		//dojo.debug("viewAddLayout in "+this);
-		
-		if (this.parent["isTree"]) {
-			//dojo.debug("Parent isTree => add isTreeRoot");
-			
-			// use setClass, not addClass for speed
-			dojo.html.setClass(this.domNode, dojo.html.getClass(this.domNode) + ' '+this.tree.classPrefix+'IsRoot')
+	} else {
+		if (parent.isTreeNode) {
+			parent.viewSetHasChildren();
 		}
-		//dojo.debug(this.parent.children.length);
-		//dojo.debug(this.parent.children[this.parent.children.length-1]);
-		if (this.isLastChild()) {
-			//dojo.debug("Checked last node for "+this);
-			//dojo.debug("Parent last is "+this.parent.children[this.parent.children.length-1]);
-			//dojo.debug("last node => add isTreeLast for "+this);
-			dojo.html.setClass(this.domNode, dojo.html.getClass(this.domNode) + ' '+this.tree.classPrefix+'IsLast')			
-		}
-		//dojo.profile.end("viewAddLayout");
-		//dojo.debug("viewAddLayout out");
-		
-	},
-	
-	
-	viewRemoveLayout: function() {		
-		//dojo.debug("viewRemoveLayout in "+this);
-		//dojo.profile.start("viewRemoveLayout");
-		//dojo.debug((new Error()).stack);
-		dojo.html.removeClass(this.domNode, this.tree.classPrefix+"IsRoot");
-		dojo.html.removeClass(this.domNode, this.tree.classPrefix+"IsLast");
-		//dojo.profile.end("viewRemoveLayout");
-	},
-		
-	viewGetExpandClass: function() {
-		if (this.isFolder) {			
-			return this.isExpanded ? "ExpandOpen" : "ExpandClosed";
-		} else {
-			return "ExpandLeaf";
-		}
-	},
-	
-	viewSetExpand: function() {
-		//dojo.profile.start("viewSetExpand");
-		
-		//dojo.debug("viewSetExpand in "+this);
-		
-		var expand = this.tree.classPrefix+this.viewGetExpandClass();
-		var reg = new RegExp("(^|\\s)"+this.tree.classPrefix+"Expand\\w+",'g');			
-			
-		dojo.html.setClass(this.domNode, dojo.html.getClass(this.domNode).replace(reg,'') + ' '+expand);
-		
-		//dojo.debug(dojo.html.getClass(this.domNode))
-		//dojo.profile.end("viewSetExpand");
-		this.viewSetHasChildrenAndExpand();
-	},	
-
-	viewGetChildrenClass: function() {
-		return 'Children'+(this.children.length ? 'Yes' : 'No');
-	},
-	
-	viewSetHasChildren: function() {		
-		//dojo.debug(this+' '+this.children.length)
-		
-		var clazz = this.tree.classPrefix+this.viewGetChildrenClass();
-
-		var reg = new RegExp("(^|\\s)"+this.tree.classPrefix+"Children\\w+",'g');			
-		
-		dojo.html.setClass(this.domNode, dojo.html.getClass(this.domNode).replace(reg,'') + ' '+clazz);
-		
-		this.viewSetHasChildrenAndExpand();
-	},
-	
-	/**
-	 * set TreeStateChildrenYes-ExpandClosed pair
-	 * needed for IE, because IE reads only last class from .TreeChildrenYes.TreeExpandClosed pair
-	 */
-	viewSetHasChildrenAndExpand: function() {
-		var clazz = this.tree.classPrefix+'State'+this.viewGetChildrenClass()+'-'+this.viewGetExpandClass();
-		
-		var reg = new RegExp("(^|\\s)"+this.tree.classPrefix+"State[\\w-]+",'g');			
-		
-		dojo.html.setClass(this.domNode, dojo.html.getClass(this.domNode).replace(reg,'') + ' '+clazz);		
-	},
-		
-	viewUnfocus: function() {
-		dojo.html.removeClass(this.labelNode, this.tree.classPrefix+"LabelFocused");
-	},
-	
-	viewFocus: function() {
-		dojo.html.addClass(this.labelNode, this.tree.classPrefix+"LabelFocused");
-	},
-    
-    viewEmphasize: function() {
-        dojo.html.clearSelection(this.labelNode);
-        
-		dojo.html.addClass(this.labelNode, this.tree.classPrefix+'NodeEmphasized');
-    },
-    
-    viewUnemphasize: function() {
-        dojo.html.removeClass(this.labelNode, this.tree.classPrefix+'NodeEmphasized');
-    },
-	
-	
-// ================================ detach from parent ===================================
-
-	detach: function() {
-		if (!this.parent) return;
-
-		var parent = this.parent;
-		var index = this.getParentIndex();
-
-		this.doDetach.apply(this, arguments);
-
-		dojo.event.topic.publish(this.tree.eventNames.afterDetach,
-			{ child: this, parent: parent, index:index }
-		);
-		
-	},
-	
-
-	/* node does not leave tree */
-	doDetach: function() {
-		//dojo.debug("doDetach in "+this+" parent "+this.parent+" class "+dojo.html.getClass(this.domNode));
-				
-		var parent = this.parent;
-		
-		//dojo.debug(parent.containerNode.style.display)
-		
-		if (!parent) return;
-		
-		var index = this.getParentIndex();
-		
-		
-		this.viewRemoveLayout();
-		
-		dojo.widget.DomWidget.prototype.removeChild.call(parent, this);
-		
-		var siblingsCount = parent.children.length;
-		
-		//dojo.debug("siblingsCount "+siblingsCount);
-		
-		if (siblingsCount > 0) {
-			if (index == 0) {	// deleted first node => update new first
-				parent.children[0].viewUpdateLayout();		
-			}
-			if (index == siblingsCount) { // deleted last node
-				parent.children[siblingsCount-1].viewUpdateLayout();		
-			}
-		} else {
-			if (parent.isTreeNode) {
-				parent.viewSetHasChildren();
-			}
-		}
-				
-		if (this.tree.unsetFolderOnEmpty && !parent.children.length && parent.isTreeNode) {
-			parent.unsetFolder();
-		}		
-		
-		//dojo.debug(parent.containerNode.style.display)
-		
-		this.parent = null;
-	},
-	
-	
-	/**
-	 * publish destruction event so that controller may unregister/unlisten
-	 */
-	destroy: function() {
-		
-		dojo.event.topic.publish(this.tree.eventNames.beforeNodeDestroy, { source: this } );
-		
-		this.detach();		
-
-		return dojo.widget.HtmlWidget.prototype.destroy.apply(this, arguments);
-	},
-	
-	
-	expand: function(){
-        		
-		if (this.isExpanded) return;
-
-
-		//dojo.profile.start("expand "+this);
-		
-		//dojo.debug("expand in "+this);
-		
-		//dojo.profile.start("expand - lazy init "+this);
-		if (this.tryLazyInit) {
-			this.setChildren();
-			this.tryLazyInit = false;
-		}
-		
-		//dojo.profile.end("expand - lazy init "+this);
-		
-		
-		this.isExpanded = true;
-
-		this.viewSetExpand();
-
-		//dojo.profile.start("expand - showChildren "+this);
-		
-		/**
-		 * no matter if I have children or not. need to show/hide container anyway.
-		 * use case: empty folder is expanded => then child is added, container already shown all fine
-		 */
-		this.showChildren();
-		
-		//dojo.profile.end("expand - showChildren "+this);
-						
-		
-		//dojo.profile.end("expand "+this);
-	},
-
-
-	collapse: function(){
-						
-		if (!this.isExpanded) return;
-		
-		this.isExpanded = false;
-		
-		this.hideChildren();
-	},
-
-
-	hideChildren: function(){
-		this.tree.toggleObj.hide(
-			this.containerNode, this.tree.toggleDuration, this.explodeSrc, dojo.lang.hitch(this, "onHideChildren")
-		);
-	},
-
-
-	showChildren: function(){
-		//dojo.profile.start("showChildren"+this);
-        
-		this.tree.toggleObj.show(
-			this.containerNode, this.tree.toggleDuration, this.explodeSrc, dojo.lang.hitch(this, "onShowChildren")
-		);
-        
-		//dojo.profile.end("showChildren"+this);
-	},
-	 
-    
-    
-	onShowChildren: function() {
-        
-		//dojo.profile.start("onShowChildren"+this);
-        
-        this.onShow();
-        
-		//dojo.profile.end("onShowChildren"+this);
-        
-		dojo.event.topic.publish(this.tree.eventNames.afterExpand, {source: this} );		
-	},
-	
-	onHideChildren: function() {
-
-		this.viewSetExpand();
-		this.onHide();
-		dojo.event.topic.publish(this.tree.eventNames.afterCollapse, {source: this} );
-	},
-
-	/* Edit current node : change properties and update contents */
-	setTitle: function(title) {
-		var oldTitle = this.title;
-		
-		this.labelNode.innerHTML = this.title = title;
-				
-		dojo.event.topic.publish(this.tree.eventNames.afterSetTitle, { source: this, oldTitle:oldTitle });
-
-	},
-
-
-	toString: function() {
-		return '['+this.widgetType+', '+this.title+']';
 	}
+	if (this.tree.unsetFolderOnEmpty && !parent.children.length && parent.isTreeNode) {
+		parent.unsetFolder();
+	}
+	this.parent = null;
+}, destroy:function () {
+	dojo.event.topic.publish(this.tree.eventNames.beforeNodeDestroy, {source:this});
+	this.detach();
+	return dojo.widget.HtmlWidget.prototype.destroy.apply(this, arguments);
+}, expand:function () {
+	if (this.isExpanded) {
+		return;
+	}
+	if (this.tryLazyInit) {
+		this.setChildren();
+		this.tryLazyInit = false;
+	}
+	this.isExpanded = true;
+	this.viewSetExpand();
+	this.showChildren();
+}, collapse:function () {
+	if (!this.isExpanded) {
+		return;
+	}
+	this.isExpanded = false;
+	this.hideChildren();
+}, hideChildren:function () {
+	this.tree.toggleObj.hide(this.containerNode, this.tree.toggleDuration, this.explodeSrc, dojo.lang.hitch(this, "onHideChildren"));
+}, showChildren:function () {
+	this.tree.toggleObj.show(this.containerNode, this.tree.toggleDuration, this.explodeSrc, dojo.lang.hitch(this, "onShowChildren"));
+}, onShowChildren:function () {
+	this.onShow();
+	dojo.event.topic.publish(this.tree.eventNames.afterExpand, {source:this});
+}, onHideChildren:function () {
+	this.viewSetExpand();
+	this.onHide();
+	dojo.event.topic.publish(this.tree.eventNames.afterCollapse, {source:this});
+}, setTitle:function (title) {
+	var oldTitle = this.title;
+	this.labelNode.innerHTML = this.title = title;
+	dojo.event.topic.publish(this.tree.eventNames.afterSetTitle, {source:this, oldTitle:oldTitle});
+}, toString:function () {
+	return "[" + this.widgetType + ", " + this.title + "]";
+}});
 
 
-});
-
 __CPAN_FILE__ src/widget/DropdownTimePicker.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -49032,7 +30703,6 @@
 */
 
 dojo.provide("dojo.widget.DropdownTimePicker");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.DropdownContainer");
 dojo.require("dojo.widget.TimePicker");
@@ -49042,228 +30712,141 @@
 dojo.require("dojo.date.serialize");
 dojo.require("dojo.i18n.common");
 dojo.requireLocalization("dojo.widget", "DropdownTimePicker", null, "ROOT");
-
-dojo.widget.defineWidget(
-	"dojo.widget.DropdownTimePicker",
-	dojo.widget.DropdownContainer,
-	{
-		/*
-		summary: 
-			A form input for entering times with a pop-up dojo.widget.TimePicker to aid in selection
-		
-			description: 
-				This is TimePicker in a DropdownContainer, it supports all features of TimeePicker.
-		
-				It is possible to customize the user-visible formatting with either the formatLength or 
-				displayFormat attributes.  The value sent to the server is typically a locale-independent 
-				value in a hidden field as defined by the name attribute. RFC3339 representation is used 
-				by default, but other options are available with saveFormat.
-		
-			usage: 
-				var dtp = dojo.widget.createWidget("DropdownTimePicker", {},   
-				dojo.byId("DropdownTimePickerNode")); 
-		 	 
-				<input dojoType="DropdownTimePicker">
-		*/
-
-		// iconURL: URL
-		//	path of icon for button to display time picker widget
-		iconURL: dojo.uri.dojoUri("src/widget/templates/images/timeIcon.gif"),
-		
-		// formatLength: String
-		//	Type of formatting used for visual display, appropriate to locale (choice of long, short, medium or full)
-		//	See dojo.date.format for details.
-		formatLength: "short",
-
-		// displayFormat: String
-		//	A pattern used for the visual display of the formatted date.
-		//	Setting this overrides the default locale-specific settings as well as the formatLength
-		//	attribute.  See dojo.date.format for a reference which defines the formatting patterns.
-		displayFormat: "",
-
-		timeFormat: "", // deprecated, will be removed for 0.5
-
-//FIXME: need saveFormat attribute support
-		// saveFormat: String
-		//	Formatting scheme used when submitting the form element.  This formatting is used in a hidden
-		//  field (name) intended for server use, and is therefore typically locale-independent.
-		//  By default, uses rfc3339 style date formatting (rfc)
-		//	Use a pattern string like displayFormat or one of the following:
-		//	rfc|iso|posix|unix
-		saveFormat: "",
-
-		// value: String|Date
-		//	form value property in rfc3339 format. ex: 12:00
-		value: "",
-
-		// name: String
-		// 	name of the form element, used to create a hidden field by this name for form element submission.
-		name: "",
-
-		postMixInProperties: function() {
-			// summary: see dojo.widget.DomWidget
-			dojo.widget.DropdownTimePicker.superclass.postMixInProperties.apply(this, arguments);
-			var messages = dojo.i18n.getLocalization("dojo.widget", "DropdownTimePicker", this.lang);
-			this.iconAlt = messages.selectTime;
-
-			//FIXME: should this be if/else/else?
-			if(typeof(this.value)=='string'&&this.value.toLowerCase()=='today'){
-				this.value = new Date();
-			}
-			if(this.value && isNaN(this.value)){
-				var orig = this.value;
-				this.value = dojo.date.fromRfc3339(this.value);
-				if(!this.value){
-					var d = dojo.date.format(new Date(), { selector: "dateOnly", datePattern: "yyyy-MM-dd" });
-					var c = orig.split(":");
-					for(var i = 0; i < c.length; ++i){
-						if(c[i].length == 1) c[i] = "0" + c[i];
-					}
-					orig = c.join(":");
-					this.value = dojo.date.fromRfc3339(d + "T" + orig);
-					dojo.deprecated("dojo.widget.DropdownTimePicker", "time attributes must be passed in Rfc3339 format", "0.5");
+dojo.widget.defineWidget("dojo.widget.DropdownTimePicker", dojo.widget.DropdownContainer, {iconURL:dojo.uri.moduleUri("dojo.widget", "templates/images/timeIcon.gif"), formatLength:"short", displayFormat:"", timeFormat:"", saveFormat:"", value:"", name:"", postMixInProperties:function () {
+	dojo.widget.DropdownTimePicker.superclass.postMixInProperties.apply(this, arguments);
+	var messages = dojo.i18n.getLocalization("dojo.widget", "DropdownTimePicker", this.lang);
+	this.iconAlt = messages.selectTime;
+	if (typeof (this.value) == "string" && this.value.toLowerCase() == "today") {
+		this.value = new Date();
+	}
+	if (this.value && isNaN(this.value)) {
+		var orig = this.value;
+		this.value = dojo.date.fromRfc3339(this.value);
+		if (!this.value) {
+			var d = dojo.date.format(new Date(), {selector:"dateOnly", datePattern:"yyyy-MM-dd"});
+			var c = orig.split(":");
+			for (var i = 0; i < c.length; ++i) {
+				if (c[i].length == 1) {
+					c[i] = "0" + c[i];
 				}
 			}
-			if(this.value && !isNaN(this.value)){
-				this.value = new Date(this.value);
-			}
-		},
-
-		fillInTemplate: function(){
-			// summary: see dojo.widget.DomWidget
-
-			dojo.widget.DropdownTimePicker.superclass.fillInTemplate.apply(this, arguments);
-
-			var value = "";
-			if(this.value instanceof Date) {
-				value = this.value;
-			} else if(this.value) {
-				var orig = this.value;
-				var d = dojo.date.format(new Date(), { selector: "dateOnly", datePattern: "yyyy-MM-dd" });
-				var c = orig.split(":");
-				for(var i = 0; i < c.length; ++i){
-					if(c[i].length == 1) c[i] = "0" + c[i];
+			orig = c.join(":");
+			this.value = dojo.date.fromRfc3339(d + "T" + orig);
+			dojo.deprecated("dojo.widget.DropdownTimePicker", "time attributes must be passed in Rfc3339 format", "0.5");
+		}
+	}
+	if (this.value && !isNaN(this.value)) {
+		this.value = new Date(this.value);
+	}
+}, fillInTemplate:function () {
+	dojo.widget.DropdownTimePicker.superclass.fillInTemplate.apply(this, arguments);
+	var value = "";
+	if (this.value instanceof Date) {
+		value = this.value;
+	} else {
+		if (this.value) {
+			var orig = this.value;
+			var d = dojo.date.format(new Date(), {selector:"dateOnly", datePattern:"yyyy-MM-dd"});
+			var c = orig.split(":");
+			for (var i = 0; i < c.length; ++i) {
+				if (c[i].length == 1) {
+					c[i] = "0" + c[i];
 				}
-				orig = c.join(":");
-				value = dojo.date.fromRfc3339(d + "T" + orig);
 			}
-			
-			var tpArgs = { widgetContainerId: this.widgetId, lang: this.lang, value: value };
-			this.timePicker = dojo.widget.createWidget("TimePicker", tpArgs, this.containerNode, "child");
-			
-			dojo.event.connect(this.timePicker, "onValueChanged", this, "_updateText");
-			
-			if(this.value){
-				this._updateText();
-			}
-			this.containerNode.style.zIndex = this.zIndex;
-			this.containerNode.explodeClassName = "timeContainer";
-			this.valueNode.name = this.name;
-		},
-		
-		getValue: function(){
-			// summary: return current time in time-only portion of RFC 3339 format
-			return this.valueNode.value; /*String*/
-		},
-
-		getTime: function(){
-			// summary: return current time as a Date object
-			return this.timePicker.storedTime; /*Date*/
-		},
-
-		setValue: function(/*Date|String*/rfcDate){
-			//summary: set the current time from RFC 3339 formatted string or a date object, synonymous with setTime
-			this.setTime(rfcDate);
-		},
-
-		setTime: function(/*Date|String*/dateObj){
-			// summary: set the current time and update the UI
-			var value = "";
-			if(dateObj instanceof Date) {
-				value = dateObj;
-			} else if(this.value) {
-				var orig = this.value;
-				var d = dojo.date.format(new Date(), { selector: "dateOnly", datePattern: "yyyy-MM-dd" });
-				var c = orig.split(":");
-				for(var i = 0; i < c.length; ++i){
-					if(c[i].length == 1) c[i] = "0" + c[i];
+			orig = c.join(":");
+			value = dojo.date.fromRfc3339(d + "T" + orig);
+		}
+	}
+	var tpArgs = {widgetContainerId:this.widgetId, lang:this.lang, value:value};
+	this.timePicker = dojo.widget.createWidget("TimePicker", tpArgs, this.containerNode, "child");
+	dojo.event.connect(this.timePicker, "onValueChanged", this, "_updateText");
+	if (this.value) {
+		this._updateText();
+	}
+	this.containerNode.style.zIndex = this.zIndex;
+	this.containerNode.explodeClassName = "timeContainer";
+	this.valueNode.name = this.name;
+}, getValue:function () {
+	return this.valueNode.value;
+}, getTime:function () {
+	return this.timePicker.storedTime;
+}, setValue:function (rfcDate) {
+	this.setTime(rfcDate);
+}, setTime:function (dateObj) {
+	var value = "";
+	if (dateObj instanceof Date) {
+		value = dateObj;
+	} else {
+		if (this.value) {
+			var orig = this.value;
+			var d = dojo.date.format(new Date(), {selector:"dateOnly", datePattern:"yyyy-MM-dd"});
+			var c = orig.split(":");
+			for (var i = 0; i < c.length; ++i) {
+				if (c[i].length == 1) {
+					c[i] = "0" + c[i];
 				}
-				orig = c.join(":");
-				value = dojo.date.fromRfc3339(d + "T" + orig);
 			}
-
-			this.timePicker.setTime(value);
-			this._syncValueNode();
-		},
-	
-		_updateText: function(){
-			// summary: updates the <input> field according to the current value (ie, displays the formatted date)
-			if(this.timePicker.selectedTime.anyTime){
-				this.inputNode.value = "";
-			}else if(this.timeFormat){
-				dojo.deprecated("dojo.widget.DropdownTimePicker",
-				"Must use displayFormat attribute instead of timeFormat.  See dojo.date.format for specification.", "0.5");
-				this.inputNode.value = dojo.date.strftime(this.timePicker.time, this.timeFormat, this.lang);
-			}else{
-				this.inputNode.value = dojo.date.format(this.timePicker.time,
-					{formatLength:this.formatLength, timePattern:this.displayFormat, selector:'timeOnly', locale:this.lang});
+			orig = c.join(":");
+			value = dojo.date.fromRfc3339(d + "T" + orig);
+		}
+	}
+	this.timePicker.setTime(value);
+	this._syncValueNode();
+}, _updateText:function () {
+	if (this.timePicker.selectedTime.anyTime) {
+		this.inputNode.value = "";
+	} else {
+		if (this.timeFormat) {
+			dojo.deprecated("dojo.widget.DropdownTimePicker", "Must use displayFormat attribute instead of timeFormat.  See dojo.date.format for specification.", "0.5");
+			this.inputNode.value = dojo.date.strftime(this.timePicker.time, this.timeFormat, this.lang);
+		} else {
+			this.inputNode.value = dojo.date.format(this.timePicker.time, {formatLength:this.formatLength, timePattern:this.displayFormat, selector:"timeOnly", locale:this.lang});
+		}
+	}
+	this._syncValueNode();
+	this.onValueChanged(this.getTime());
+	this.hideContainer();
+}, onValueChanged:function (dateObj) {
+}, onInputChange:function () {
+	if (this.dateFormat) {
+		dojo.deprecated("dojo.widget.DropdownTimePicker", "Cannot parse user input.  Must use displayFormat attribute instead of dateFormat.  See dojo.date.format for specification.", "0.5");
+	} else {
+		var input = dojo.string.trim(this.inputNode.value);
+		if (input) {
+			var inputTime = dojo.date.parse(input, {formatLength:this.formatLength, timePattern:this.displayFormat, selector:"timeOnly", locale:this.lang});
+			if (inputTime) {
+				this.setTime(inputTime);
 			}
-			this._syncValueNode();
-			this.onValueChanged(this.getTime());
-			this.hideContainer();
-		},
-
-		onValueChanged: function(/*Date*/dateObj){
-			// summary: triggered when this.value is changed
-		},
-		
-		onInputChange: function(){
-			// summary: callback when user manually types a time into the <input> field
-			if(this.dateFormat){
-				dojo.deprecated("dojo.widget.DropdownTimePicker",
-				"Cannot parse user input.  Must use displayFormat attribute instead of dateFormat.  See dojo.date.format for specification.", "0.5");
-			}else{
-				var input = dojo.string.trim(this.inputNode.value);
-				if(input){
-					var inputTime = dojo.date.parse(input,
-							{formatLength:this.formatLength, timePattern:this.displayFormat, selector:'timeOnly', locale:this.lang});			
-					if(inputTime){
-						this.setTime(inputTime);
-					}
-				} else {
-					this.valueNode.value = input;
-				}
-			}
-			// If the time entered didn't parse, reset to the old time.  KISS, for now.
-			//TODO: usability?  should we provide more feedback somehow? an error notice?
-			// seems redundant to do this if the parse failed, but at least until we have validation,
-			// this will fix up the display of entries like 01/32/2006
-			if(input){ this._updateText(); }
-		},
-
-		_syncValueNode: function(){
-			var time = this.timePicker.time;
-			var value;
-			switch(this.saveFormat.toLowerCase()){
-				case "rfc": case "iso": case "":
-					value = dojo.date.toRfc3339(time, 'timeOnly');
-					break;
-				case "posix": case "unix":
-					value = Number(time);
-					break;
-				default:
-					value = dojo.date.format(time, {datePattern:this.saveFormat, selector:'timeOnly', locale:this.lang});
-			}
-			this.valueNode.value = value;
-		},
-		
-		destroy: function(/*Boolean*/finalize){
-			this.timePicker.destroy(finalize);
-			dojo.widget.DropdownTimePicker.superclass.destroy.apply(this, arguments);
+		} else {
+			this.valueNode.value = input;
 		}
 	}
-);
+	if (input) {
+		this._updateText();
+	}
+}, _syncValueNode:function () {
+	var time = this.timePicker.time;
+	var value;
+	switch (this.saveFormat.toLowerCase()) {
+	  case "rfc":
+	  case "iso":
+	  case "":
+		value = dojo.date.toRfc3339(time, "timeOnly");
+		break;
+	  case "posix":
+	  case "unix":
+		value = Number(time);
+		break;
+	  default:
+		value = dojo.date.format(time, {datePattern:this.saveFormat, selector:"timeOnly", locale:this.lang});
+	}
+	this.valueNode.value = value;
+}, destroy:function (finalize) {
+	this.timePicker.destroy(finalize);
+	dojo.widget.DropdownTimePicker.superclass.destroy.apply(this, arguments);
+}});
 
+
 __CPAN_FILE__ src/widget/Show.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -49276,7 +30859,6 @@
 */
 
 dojo.provide("dojo.widget.Show");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.uri.Uri");
@@ -49285,243 +30867,197 @@
 dojo.require("dojo.math.curves");
 dojo.require("dojo.lang.common");
 dojo.require("dojo.lang.func");
-
-dojo.widget.defineWidget(
-	"dojo.widget.Show",
-	dojo.widget.HtmlWidget,
-	function(){
-		this._slides=[];
-	},
-	{
-	isContainer: true,
-	_slide: -1,
-
-	body: null,
-	nav: null,
-	hider: null,
-	select: null,
-	option: null,
-	inNav: false,
-	debugPane: null,
-	noClick: false,
-	templatePath: dojo.uri.dojoUri("src/widget/templates/Show.html"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/Show.css"),
-	fillInTemplate: function(args, frag){
-		if(args.debugPane){
-			var dp = this.debugPane = dojo.widget.byId(args.debugPane);
-			dp.hide();
-			dojo.event.connect(dp, "closeWindow", dojo.lang.hitch(this, function(){ this.debugPane = false; }));
+dojo.widget.defineWidget("dojo.widget.Show", dojo.widget.HtmlWidget, function () {
+	this._slides = [];
+}, {isContainer:true, _slide:-1, body:null, nav:null, hider:null, select:null, option:null, inNav:false, debugPane:null, noClick:false, templateString:"<div class=\"dojoShow\">\n\t<div dojoAttachPoint=\"contentNode\"></div>\n\t<div class=\"dojoShowNav\" dojoAttachPoint=\"nav\">\n\t\t<div class=\"dojoShowHider\" dojoAttachPoint=\"hider\"></div>\n\t\t<span unselectable=\"on\" style=\"cursor: default;\" dojoAttachEvent=\"onClick:previousSlide\">&lt;</span>\n\t\t<select dojoAttachEvent=\"onClick:gotoSlideByEvent\" dojoAttachPoint=\"select\">\n\t\t\t<option dojoAttachPoint=\"option\">Title</option>\n\t\t</select>\n\t\t<span unselectable=\"on\" style=\"cursor: default;\" dojoAttachEvent=\"onClick:nextSlide\">&gt;</span>\n\t</div>\n</div>\n", templateCssString:"@media screen {\n\thtml, body {\n\t\tmargin: 0px;\n\t\tpadding: 0px;\n\t\twidth: 100%;\n\t}\n\th1 {\n\t\tfont-size: 50px;\n\t}\n\tp, li {\n\t\tfont-size: 30px;\n\t}\n\t.dojoShowNav {\n\t\tbackground: #369;\n\t\toverflow: hidden;\n\t\tposition: absolute;\n\t\theight: 5px;\n\t\tbottom: 0px;\n\t\tleft: 0px;\n\t\twidth: 100%;\n\t\ttext-align: center;\n\t}\n\t.dojoShowNav input {\n\t\tmargin: 0px;\n\t}\n\t.dojoShowHider {\n\t\theight: 5px;\n\t\toverflow: hidden;\n\t\twidth: 100%;\n\t}\n\t.dojoShowPrint {\n\t\tposition: absolute;\n\t\tleft: 5px;\n\t\ttop: 0px;\n\t}\n\t.dojoShow {\n\t\tdisplay: none;\n\t}\n}\n at media print {\n\t.dojoShow {\n\t\tdisplay: none !important;\n\t}\n\t.dojoShowPrint {\n\t\tdisplay: block !important;\n\t}\n\t.dojoShowPrintSlide {\n\t\tborder: 1px solid #aaa;\n\t\tpadding: 10px;\n\t\tmargin-bottom: 15px;\n\t}\n\t.dojoShowPrintSlide, ul {\n\tpage-break-inside: avoid;\n\t}\n\th1 {\n\t\tmargin-top: 0;\n\t\tpage-break-after: avoid;\n\t}\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/Show.css"), fillInTemplate:function (args, frag) {
+	if (args.debugPane) {
+		var dp = this.debugPane = dojo.widget.byId(args.debugPane);
+		dp.hide();
+		dojo.event.connect(dp, "closeWindow", dojo.lang.hitch(this, function () {
+			this.debugPane = false;
+		}));
+	}
+	var source = this.getFragNodeRef(frag);
+	this.sourceNode = dojo.body().appendChild(source.cloneNode(true));
+	for (var i = 0, child; child = this.sourceNode.childNodes[i]; i++) {
+		if (child.tagName && child.getAttribute("dojotype").toLowerCase() == "showslide") {
+			child.className = "dojoShowPrintSlide";
+			child.innerHTML = "<h1>" + child.title + "</h1>" + child.innerHTML;
 		}
-		var source = this.getFragNodeRef(frag);
-		this.sourceNode = dojo.body().appendChild(source.cloneNode(true));
-		for(var i = 0, child; child = this.sourceNode.childNodes[i]; i++){
-			if(child.tagName && child.getAttribute("dojotype").toLowerCase() == "showslide"){
-				child.className = "dojoShowPrintSlide";
-				child.innerHTML = "<h1>" + child.title + "</h1>" + child.innerHTML;
-			}
+	}
+	this.sourceNode.className = "dojoShowPrint";
+	this.sourceNode.style.display = "none";
+	dojo.event.connect(document, "onclick", this, "gotoSlideByEvent");
+	if (dojo.render.html.ie) {
+		dojo.event.connect(document, "onkeydown", this, "gotoSlideByEvent");
+	} else {
+		dojo.event.connect(document, "onkeypress", this, "gotoSlideByEvent");
+	}
+	dojo.event.connect(window, "onresize", this, "resizeWindow");
+	dojo.event.connect(this.nav, "onmousemove", this, "popUpNav");
+}, postCreate:function () {
+	this._slides = [];
+	for (var i = 0, child; child = this.children[i]; i++) {
+		if (child.widgetType == "ShowSlide") {
+			this._slides.push(child);
+			this.option.text = child.title + " (" + (i + 1) + ")";
+			this.option.parentNode.insertBefore(this.option.cloneNode(true), this.option);
 		}
-		this.sourceNode.className = "dojoShowPrint";
-		this.sourceNode.style.display = "none";
-		
-		dojo.event.connect(document, "onclick", this, "gotoSlideByEvent");
-		if(dojo.render.html.ie) {
-			dojo.event.connect(document,"onkeydown",this, "gotoSlideByEvent");
-		} else {
-			// while keydown works, keypress allows rapid successive key presses
-			// to be handled correctly
-			dojo.event.connect(document,"onkeypress",this, "gotoSlideByEvent");
-		}
-		dojo.event.connect(window, "onresize", this, "resizeWindow");
-		dojo.event.connect(this.nav, "onmousemove", this, "popUpNav");
-	},
-	postCreate: function(){
-		this._slides = [];
-		for(var i = 0, child; child = this.children[i]; i++){
-			if(child.widgetType == "ShowSlide"){
-				this._slides.push(child);
-				this.option.text = child.title+" ("+(i+1)+")";
-				this.option.parentNode.insertBefore(this.option.cloneNode(true), this.option);
+	}
+	this.option.parentNode.removeChild(this.option);
+	this.domNode.style.display = "block";
+	this.resizeWindow();
+	this.gotoSlide(0, true);
+	dojo.addOnLoad(dojo.lang.hitch(this, function () {
+		var th = window.location.hash;
+		if (th.length) {
+			var parts = ("" + window.location).split(this.widgetId + "_SlideNo_");
+			if (parts.length > 1) {
+				setTimeout(dojo.lang.hitch(this, function () {
+					this.gotoSlide(parseInt(parts[1]), true);
+				}), 300);
 			}
 		}
-		this.option.parentNode.removeChild(this.option);
-		this.domNode.style.display = "block";
-		this.resizeWindow();
-
-		this.gotoSlide(0, true);
-
-		// check to see if we're initialized from a particular slide
-		dojo.addOnLoad(dojo.lang.hitch(this, 
-			function(){
-				var th = window.location.hash;
-				if(th.length){
-					var parts = (""+window.location).split(this.widgetId+"_SlideNo_");
-					if(parts.length > 1){
-						setTimeout(dojo.lang.hitch(this, function(){
-							this.gotoSlide(parseInt(parts[1]), true);
-						}), 300);
-					}
-				}
-			})
-		);
-	},
-	gotoSlide: function(/*int*/ slide, /*Boolean*/preventSetHash){
-		if(slide == this._slide){
-			return;
-		}
-
-		if(!this._slides[slide]){
-			// slide: string
-			for(var i = 0, child; child = this._slides[i]; i++){
-				if(child.title == slide){
-					slide = i;
-					break;
-				}
+	}));
+}, gotoSlide:function (slide, preventSetHash) {
+	if (slide == this._slide) {
+		return;
+	}
+	if (!this._slides[slide]) {
+		for (var i = 0, child; child = this._slides[i]; i++) {
+			if (child.title == slide) {
+				slide = i;
+				break;
 			}
 		}
-		
-		if(!this._slides[slide]){
-			return;
+	}
+	if (!this._slides[slide]) {
+		return;
+	}
+	if (this.debugPane) {
+		if (this._slides[slide].debug) {
+			this.debugPane.show();
+		} else {
+			this.debugPane.hide();
 		}
-
-		if(this.debugPane){
-			if(this._slides[slide].debug){
-				this.debugPane.show();
-			}else{
-				this.debugPane.hide();
-			}
+	}
+	if (this._slide != -1) {
+		while (this._slides[this._slide].previousAction()) {
 		}
-		
-		if(this._slide != -1){
-			while(this._slides[this._slide].previousAction()){}
-		}
-
-		if(!preventSetHash){
-			window.location.href = "#"+this.widgetId+"_SlideNo_"+slide;
-		}
-		if(this._slides[this._slide]){
-			this._slides[this._slide].hide();
-		}
-		
-		this._slide = slide;
-		this.select.selectedIndex = slide;
-		var cn = this.contentNode;
-		while(cn.firstChild){ cn.removeChild(cn.firstChild); }
-		cn.appendChild(this._slides[slide].domNode);
-		this._slides[slide].show();
-	},
-	gotoSlideByEvent: function(/*Event*/ event){
-		var node = event.target;
-		var type = event.type;
-		if(type == "click"){
-			if(node.tagName == "OPTION" && node.parentNode == this.select){
-				this.gotoSlide(node.index);
-			}else if(node == this.select){
+	}
+	if (!preventSetHash) {
+		window.location.href = "#" + this.widgetId + "_SlideNo_" + slide;
+	}
+	if (this._slides[this._slide]) {
+		this._slides[this._slide].hide();
+	}
+	this._slide = slide;
+	this.select.selectedIndex = slide;
+	var cn = this.contentNode;
+	while (cn.firstChild) {
+		cn.removeChild(cn.firstChild);
+	}
+	cn.appendChild(this._slides[slide].domNode);
+	this._slides[slide].show();
+}, gotoSlideByEvent:function (event) {
+	var node = event.target;
+	var type = event.type;
+	if (type == "click") {
+		if (node.tagName == "OPTION" && node.parentNode == this.select) {
+			this.gotoSlide(node.index);
+		} else {
+			if (node == this.select) {
 				this.gotoSlide(node.selectedIndex);
-			}else{
+			} else {
 				this.nextSlide(event);
 			}
-		}else if (type=="keydown" || type=="keypress") {
+		}
+	} else {
+		if (type == "keydown" || type == "keypress") {
 			var key = event.keyCode;
 			var ch = event.charCode;
-			if(key == 63234 || key == 37){
+			if (key == 63234 || key == 37) {
 				this.previousSlide(event);
-			}else if(key == 63235 || key == 39 || ch == 32){
-				this.nextSlide(event);
+			} else {
+				if (key == 63235 || key == 39 || ch == 32) {
+					this.nextSlide(event);
+				}
 			}
 		}
-	},
-	nextSlide: function(/*Event?*/ event){
-		if(!this.stopEvent(event)){
-			return false;
+	}
+}, nextSlide:function (event) {
+	if (!this.stopEvent(event)) {
+		return false;
+	}
+	if (!this._slides[this._slide].nextAction(event)) {
+		if ((this._slide + 1) != this._slides.length) {
+			this.gotoSlide(this._slide + 1);
+			return true;
 		}
-		if(!this._slides[this._slide].nextAction(event)){
-			if((this._slide + 1) != this._slides.length){
-				this.gotoSlide(this._slide + 1);
-				return true; // boolean
-			}
-			return false; // boolean
+		return false;
+	}
+}, previousSlide:function (event) {
+	if (!this.stopEvent(event)) {
+		return false;
+	}
+	if (!this._slides[this._slide].previousAction(event)) {
+		if ((this._slide - 1) != -1) {
+			this.gotoSlide(this._slide - 1);
+			return true;
 		}
-	},
-	previousSlide: function(/*Event?*/ event){
-		if(!this.stopEvent(event)){
-			return false;
+		return false;
+	}
+}, stopEvent:function (ev) {
+	if (!ev) {
+		return true;
+	}
+	if (ev.type == "click" && (this._slides[this._slide].noClick || this.noClick)) {
+		return false;
+	}
+	var target = ev.target;
+	while (target != null) {
+		if (target == this.domNode) {
+			target = ev.target;
+			break;
 		}
-		if(!this._slides[this._slide].previousAction(event)){
-			if((this._slide - 1) != -1){
-				this.gotoSlide(this._slide - 1);
-				return true; // boolean
+		target = target.parentNode;
+	}
+	if (!dojo.dom.isDescendantOf(target, this.nav)) {
+		while (target && target != this.domNode) {
+			if (target.tagName == "A" || target.tagName == "INPUT" || target.tagName == "TEXTAREA" || target.tagName == "SELECT") {
+				return false;
 			}
-			return false; // boolean
-		}
-	},
-
-	stopEvent: function(/*Event*/ ev){
-		if(!ev){
-			return true;
-		}
-	
-		if (ev.type == "click" && (this._slides[this._slide].noClick || this.noClick)) {
-			return false;
-		}	
-		var target = ev.target;
-		// Check to see if the target is below the show domNode
-		while(target != null){
-			if(target == this.domNode){
-				target = ev.target;
-				break;
+			if (typeof target.onclick == "function" || typeof target.onkeypress == "function") {
+				return false;
 			}
 			target = target.parentNode;
 		}
-		// Now that we know it's below this widget's domNode, we bubble up until we get to our domNode
-		if(!dojo.dom.isDescendantOf(target, this.nav)){
-			while(target && target != this.domNode){
-				if(target.tagName == "A" || target.tagName == "INPUT" || target.tagName == "TEXTAREA" || target.tagName == "SELECT"){
-					return false;
-				}
-				if(typeof target.onclick == "function" || typeof target.onkeypress == "function"){
-					return false;
-				}
-				target = target.parentNode;
-			}
-		}
-		
-		if(window.event){
-			ev.returnValue = false;
-			ev.cancelBubble = true;
-		}else{
-			ev.preventDefault();
-			ev.stopPropagation();
-		}
-		
-		return true;
-	},
-	popUpNav: function(){
-		if(!this.inNav){
-			// dojo.widget.Show.node = this.nav;
-			dojo.lfx.propertyAnimation(this.nav, {
-				"height": { start: 5, end: 30 }
-			}, 250).play();
-		}
-		clearTimeout(this.inNav);
-		this.inNav = setTimeout(dojo.lang.hitch(this, "hideNav"), 2000);
-	},
-	hideNav: function(){
-		clearTimeout(this.inNav);
-		this.inNav = false;
-		// dojo.widget.Show.node = this.nav;
-		dojo.lfx.propertyAnimation(this.nav, {
-			"height": { start: 30, end: 5 }
-		}, 250).play();
-	},
-	resizeWindow: function(/*Event*/ ev){
-		dojo.body().style.height = "auto";
-		var h = Math.max(
-			document.documentElement.scrollHeight || dojo.body().scrollHeight,
-			dojo.html.getViewport().height);
-		dojo.body().style.height = h + "px";
 	}
-});
+	if (window.event) {
+		ev.returnValue = false;
+		ev.cancelBubble = true;
+	} else {
+		ev.preventDefault();
+		ev.stopPropagation();
+	}
+	return true;
+}, popUpNav:function () {
+	if (!this.inNav) {
+		dojo.lfx.propertyAnimation(this.nav, {"height":{start:5, end:30}}, 250).play();
+	}
+	clearTimeout(this.inNav);
+	this.inNav = setTimeout(dojo.lang.hitch(this, "hideNav"), 2000);
+}, hideNav:function () {
+	clearTimeout(this.inNav);
+	this.inNav = false;
+	dojo.lfx.propertyAnimation(this.nav, {"height":{start:30, end:5}}, 250).play();
+}, resizeWindow:function (ev) {
+	dojo.body().style.height = "auto";
+	var h = Math.max(document.documentElement.scrollHeight || dojo.body().scrollHeight, dojo.html.getViewport().height);
+	dojo.body().style.height = h + "px";
+}});
 
+
 __CPAN_FILE__ src/widget/LayoutContainer.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -49534,97 +31070,28 @@
 */
 
 dojo.provide("dojo.widget.LayoutContainer");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.html.layout");
+dojo.widget.defineWidget("dojo.widget.LayoutContainer", dojo.widget.HtmlWidget, {isContainer:true, layoutChildPriority:"top-bottom", postCreate:function () {
+	dojo.widget.html.layout(this.domNode, this.children, this.layoutChildPriority);
+}, addChild:function (child, overrideContainerNode, pos, ref, insertIndex) {
+	dojo.widget.LayoutContainer.superclass.addChild.call(this, child, overrideContainerNode, pos, ref, insertIndex);
+	dojo.widget.html.layout(this.domNode, this.children, this.layoutChildPriority);
+}, removeChild:function (pane) {
+	dojo.widget.LayoutContainer.superclass.removeChild.call(this, pane);
+	dojo.widget.html.layout(this.domNode, this.children, this.layoutChildPriority);
+}, onResized:function () {
+	dojo.widget.html.layout(this.domNode, this.children, this.layoutChildPriority);
+}, show:function () {
+	this.domNode.style.display = "";
+	this.checkSize();
+	this.domNode.style.display = "none";
+	this.domNode.style.visibility = "";
+	dojo.widget.LayoutContainer.superclass.show.call(this);
+}});
+dojo.lang.extend(dojo.widget.Widget, {layoutAlign:"none"});
 
-dojo.widget.defineWidget(
-	"dojo.widget.LayoutContainer",
-	dojo.widget.HtmlWidget,
-{
-	// summary
-	//	Provides Delphi-style panel layout semantics.
-	//
-	// details
-	//	A LayoutContainer is a box with a specified size (like style="width: 500px; height: 500px;"),
-	//	that contains children widgets marked with "layoutAlign" of "left", "right", "bottom", "top", and "client".
-	//	It takes it's children marked as left/top/bottom/right, and lays them out along the edges of the box,
-	//	and then it takes the child marked "client" and puts it into the remaining space in the middle.
-	//
-	//  Left/right positioning is similar to CSS's "float: left" and "float: right",
-	//	and top/bottom positioning would be similar to "float: top" and "float: bottom", if there were such
-	//	CSS.
-	//
-	//	Note that there can only be one client element, but there can be multiple left, right, top,
-	//	or bottom elements.
-	//
-	// usage
-	//	<style>
-	//		html, body{ height: 100%; width: 100%; }
-	//	</style>
-	//	<div dojoType="LayoutContainer" style="width: 100%; height: 100%">
-	//		<div dojoType="ContentPane" layoutAlign="top">header text</div>
-	//		<div dojoType="ContentPane" layoutAlign="left" style="width: 200px;">table of contents</div>
-	//		<div dojoType="ContentPane" layoutAlign="client">client area</div>
-	//	</div>
 
-	isContainer: true,
-
-	// layoutChildPriority: String
-	//	- If the value is "top-bottom", then LayoutContainer will first position the "top" and "bottom" aligned elements,
-	//	to and then put the left and right aligned elements in the remaining space, between the top and the bottom elements.
-	//	It aligns the client element at the very end, in the remaining space.
-	//
-	//	- If the value is "left-right", then it first positions the "left" and "right" elements, and then puts the
-	//	"top" and "bottom" elements in the remaining space, between the left and the right elements.
-	//	It aligns the client element at the very end, in the remaining space.
-	//
-	//	- If the value is "none", then it will lay out each child in the natural order the children occur in.
-	//	Basically each child is laid out into the "remaining space", where "remaining space" is initially
-	//	the content area of this widget, but is reduced to a smaller rectangle each time a child is added.
-	//	
-	layoutChildPriority: 'top-bottom',
-
-	postCreate: function(){
-		dojo.widget.html.layout(this.domNode, this.children, this.layoutChildPriority);
-	},
-
-	addChild: function(child, overrideContainerNode, pos, ref, insertIndex){
-		dojo.widget.LayoutContainer.superclass.addChild.call(this, child, overrideContainerNode, pos, ref, insertIndex);
-		dojo.widget.html.layout(this.domNode, this.children, this.layoutChildPriority);
-	},
-
-	removeChild: function(pane){
-		dojo.widget.LayoutContainer.superclass.removeChild.call(this,pane);
-		dojo.widget.html.layout(this.domNode, this.children, this.layoutChildPriority);
-	},
-
-	onResized: function(){
-		dojo.widget.html.layout(this.domNode, this.children, this.layoutChildPriority);
-	},
-
-	show: function(){
-		// If this node was created while display=="none" then it
-		// hasn't been laid out yet.  Do that now.
-		this.domNode.style.display="";
-		this.checkSize();
-		this.domNode.style.display="none";
-		this.domNode.style.visibility="";
-
-		dojo.widget.LayoutContainer.superclass.show.call(this);
-	}
-});
-
-// This argument can be specified for the children of a LayoutContainer.
-// Since any widget can be specified as a LayoutContainer child, mix it
-// into the base widget class.  (This is a hack, but it's effective.)
-dojo.lang.extend(dojo.widget.Widget, {
-	// layoutAlign: String
-	//		"none", "left", "right", "bottom", "top", and "client".
-	//		See the LayoutContainer description for details on this parameter.
-	layoutAlign: 'none'
-});
-
 __CPAN_FILE__ src/widget/ShowSlide.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -49637,7 +31104,6 @@
 */
 
 dojo.provide("dojo.widget.ShowSlide");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.lang.common");
 dojo.require("dojo.widget.HtmlWidget");
@@ -49646,216 +31112,187 @@
 dojo.require("dojo.html.layout");
 dojo.require("dojo.animation.Animation");
 dojo.require("dojo.gfx.color");
-
-dojo.widget.defineWidget(
-	"dojo.widget.ShowSlide",
-	dojo.widget.HtmlWidget,
-{
-	title: "",
-	_action: -1,
-	isContainer: true,
-	_components: {},
-	_actions: [],
-
-	gotoAction: function(/*int*/ action){
-		this._action = action;
-	},
-	_nextAction: function(/*Event?*/ event){
-		if((this._action + 1) != this._actions.length){
-			++this._action;
-			return true; // boolean
-		}
-		return false; // boolean
-	},
-	_previousAction: function(/*Event?*/ event){
-		if((this._action - 1) != -1){
-			--this._action;
-			return true; // boolean
-		}
-		return false; // boolean
-	},
-
-	htmlTitle: null,
-	debug: false,
-	noClick: false,
-	templatePath: dojo.uri.dojoUri("src/widget/templates/ShowSlide.html"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/ShowSlide.css"),
-	postCreate: function(){
-		this.htmlTitle.innerHTML = this.title;
-
-		var actions = this.getChildrenOfType("ShowAction", false);
-		var atypes = {};
-		dojo.lang.forEach(actions, function(act){ atypes[act.on] = true; });
-
-		this._components = {};
-		var cn = this.containerNode;
-		var nodes = dojo.render.html.ie ? cn.all : cn.getElementsByTagName('*');
-		dojo.lang.forEach(nodes, function(node){
-			var as = node.getAttribute("as");
-			if(as){
-				if(!this._components[as]){
-					this._components[as] = [];
-				}
-				this._components[as].push(node);
-				if(!atypes[as]){
-					var tmpAction = dojo.widget.createWidget("ShowAction", { on: as });
-					this.addChild(tmpAction);
-					atypes[as] = true;
-				}
+dojo.widget.defineWidget("dojo.widget.ShowSlide", dojo.widget.HtmlWidget, {title:"", _action:-1, isContainer:true, _components:{}, _actions:[], gotoAction:function (action) {
+	this._action = action;
+}, _nextAction:function (event) {
+	if ((this._action + 1) != this._actions.length) {
+		++this._action;
+		return true;
+	}
+	return false;
+}, _previousAction:function (event) {
+	if ((this._action - 1) != -1) {
+		--this._action;
+		return true;
+	}
+	return false;
+}, htmlTitle:null, debug:false, noClick:false, templateString:"<div class=\"dojoShowSlide\">\n\t<div class=\"dojoShowSlideTitle\">\n\t\t<h1 dojoAttachPoint=\"htmlTitle\">Title</h1>\n\t</div>\n\t<div class=\"dojoShowSlideBody\" dojoAttachPoint=\"containerNode\"></div>\n</div>\n", templateCssString:".dojoShowSlideTitle {\n\theight: 100px;\n\tbackground: #369;\n}\n.dojoShowSlideTitle h1 {\n\tmargin-top: 0;\n\tline-height: 100px;\n\tmargin-left: 30px;\n}\n.dojoShowSlideBody {\n\tmargin: 15px;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/ShowSlide.css"), postCreate:function () {
+	this.htmlTitle.innerHTML = this.title;
+	var actions = this.getChildrenOfType("ShowAction", false);
+	var atypes = {};
+	dojo.lang.forEach(actions, function (act) {
+		atypes[act.on] = true;
+	});
+	this._components = {};
+	var cn = this.containerNode;
+	var nodes = dojo.render.html.ie ? cn.all : cn.getElementsByTagName("*");
+	dojo.lang.forEach(nodes, function (node) {
+		var as = node.getAttribute("as");
+		if (as) {
+			if (!this._components[as]) {
+				this._components[as] = [];
 			}
-		}, this);
-
-		this._actions = [];
-		actions = this.getChildrenOfType("ShowAction", false);
-		dojo.lang.forEach(actions, function(child){
-			this._actions.push(child);
-			var components = this._components[child.on];
-			for(var j = 0, component; component = components[j]; j++){
-				if(child["action"] && (
-					(child.action != "remove")&&
-					(child.action != "fadeout")&&
-					(child.action != "wipeout")
-				) ){
-					this.hideComponent(component);
-				}
+			this._components[as].push(node);
+			if (!atypes[as]) {
+				var tmpAction = dojo.widget.createWidget("ShowAction", {on:as});
+				this.addChild(tmpAction);
+				atypes[as] = true;
 			}
-		}, this);
-	},
-
-	previousAction: function(/*Event?*/ event){
-		if(!this.parent.stopEvent(event)){
-			return false;
 		}
-
-		var action = this._actions[this._action];
-		if(!action){
-			return false;
+	}, this);
+	this._actions = [];
+	actions = this.getChildrenOfType("ShowAction", false);
+	dojo.lang.forEach(actions, function (child) {
+		this._actions.push(child);
+		var components = this._components[child.on];
+		for (var j = 0, component; component = components[j]; j++) {
+			if (child["action"] && ((child.action != "remove") && (child.action != "fadeout") && (child.action != "wipeout"))) {
+				this.hideComponent(component);
+			}
 		}
-
-		var on = action.on;
-		while(action.on == on){
-			var components = this._components[on];
-			for(var i = 0, component; component = components[i]; i++){
-				if(
-					(action.action == "remove")||
-					(action.action == "fadeout")||
-					(action.action == "wipeout")
-				){
-					if(component.style.display == "none"){
-						component.style.display = "";
-						component.style.visibility = "visible";
-						var exits = true;
-					}
-					dojo.html.setOpacity(component, 1);
-				}else if(action.action){
+	}, this);
+}, previousAction:function (event) {
+	if (!this.parent.stopEvent(event)) {
+		return false;
+	}
+	var action = this._actions[this._action];
+	if (!action) {
+		return false;
+	}
+	var on = action.on;
+	while (action.on == on) {
+		var components = this._components[on];
+		for (var i = 0, component; component = components[i]; i++) {
+			if ((action.action == "remove") || (action.action == "fadeout") || (action.action == "wipeout")) {
+				if (component.style.display == "none") {
+					component.style.display = "";
+					component.style.visibility = "visible";
+					var exits = true;
+				}
+				dojo.html.setOpacity(component, 1);
+			} else {
+				if (action.action) {
 					this.hideComponent(component);
 				}
 			}
-
-			--this._action;
-
-			if(exits){
-				return true;
-			}	
-
-			if(action.auto == "true"){
-				on = this._actions[this._action].on;
-			}
-
-			action = this._actions[this._action];
-			if(!action){
-				return false;
-			}
 		}
-		return true;
-	},
-	hideComponent: function(/*Node*/ component){
-		component.style.visibility = "hidden";
-		component.style.backgroundColor = "transparent";
-		var parent = component.parentNode;
-		if((parent)&&(parent.tagName.toLowerCase() == "li")){
-			parent.oldType = parent.style.listStyleType;
-			parent.style.listStyleType = "none";
+		--this._action;
+		if (exits) {
+			return true;
 		}
-	},
-	nextAction: function(/*Event?*/ event){
-		if(!this.parent.stopEvent(event)){
-			return false;
+		if (action.auto == "true") {
+			on = this._actions[this._action].on;
 		}
-
-		if(!this._nextAction(this)){
+		action = this._actions[this._action];
+		if (!action) {
 			return false;
 		}
-
-		var action = this._actions[this._action];
-		if(!action){
-			return false;
-		}
-		var tmpAction = action["action"];
-		
-		var components = this._components[action.on];
-		for(var i = 0, component; component = components[i]; i++){
-			if(tmpAction){
-				var duration = action.duration || 1000;
-				if((tmpAction == "fade")||(tmpAction == "fadeIn")){
-					dojo.html.setOpacity(component, 0);
-					dojo.lfx.html.fadeShow(component, duration).play(true);
-				}else if(tmpAction == "fadeout"){
+	}
+	return true;
+}, hideComponent:function (component) {
+	component.style.visibility = "hidden";
+	component.style.backgroundColor = "transparent";
+	var parent = component.parentNode;
+	if ((parent) && (parent.tagName.toLowerCase() == "li")) {
+		parent.oldType = parent.style.listStyleType;
+		parent.style.listStyleType = "none";
+	}
+}, nextAction:function (event) {
+	if (!this.parent.stopEvent(event)) {
+		return false;
+	}
+	if (!this._nextAction(this)) {
+		return false;
+	}
+	var action = this._actions[this._action];
+	if (!action) {
+		return false;
+	}
+	var tmpAction = action["action"];
+	var components = this._components[action.on];
+	for (var i = 0, component; component = components[i]; i++) {
+		if (tmpAction) {
+			var duration = action.duration || 1000;
+			if ((tmpAction == "fade") || (tmpAction == "fadeIn")) {
+				dojo.html.setOpacity(component, 0);
+				dojo.lfx.html.fadeShow(component, duration).play(true);
+			} else {
+				if (tmpAction == "fadeout") {
 					dojo.lfx.html.fadeHide(component, duration).play(true);
-				}else if(tmpAction == "fly"){
-					var width = dojo.html.getMarginBox(component).width;
-					var position = dojo.html.getAbsolutePosition(component);
-					// alert(position);
-					component.style.position = "relative";
-					component.style.left = -(width + position.x) + "px";
-					dojo.lfx.html.slideBy(component, { top: 0, left: (width + position.x)}, duration, -1, this.callWith).play(true);
-				}else if((tmpAction == "wipe")||(tmpAction == "wipein")){
-					dojo.lfx.html.wipeIn(component, duration).play();
-				}else if(tmpAction == "wipeout"){
-					dojo.lfx.html.wipeOut(component, duration).play();
-				}else if(tmpAction == "color"){
-					var from = new dojo.gfx.color.Color(action.from).toRgb();
-					var to = new dojo.gfx.color.Color(action.to).toRgb();
-					var anim = new dojo.animation.Animation(new dojo.math.curves.Line(from, to), duration, 0);
-					var node = component;
-					dojo.event.connect(anim, "onAnimate", function(e) {
-						node.style.color = "rgb(" + e.coordsAsInts().join(",") + ")";
-					});
-					anim.play(true);
-				}else if(tmpAction == "bgcolor"){
-					dojo.lfx.html.unhighlight(component, action.to, duration).play();
-				}else if(tmpAction == "remove"){
-					component.style.display = "none";
+				} else {
+					if (tmpAction == "fly") {
+						var width = dojo.html.getMarginBox(component).width;
+						var position = dojo.html.getAbsolutePosition(component);
+						component.style.position = "relative";
+						component.style.left = -(width + position.x) + "px";
+						dojo.lfx.html.slideBy(component, {top:0, left:(width + position.x)}, duration, -1, this.callWith).play(true);
+					} else {
+						if ((tmpAction == "wipe") || (tmpAction == "wipein")) {
+							dojo.lfx.html.wipeIn(component, duration).play();
+						} else {
+							if (tmpAction == "wipeout") {
+								dojo.lfx.html.wipeOut(component, duration).play();
+							} else {
+								if (tmpAction == "color") {
+									var from = new dojo.gfx.color.Color(action.from).toRgb();
+									var to = new dojo.gfx.color.Color(action.to).toRgb();
+									var anim = new dojo.animation.Animation(new dojo.math.curves.Line(from, to), duration, 0);
+									var node = component;
+									dojo.event.connect(anim, "onAnimate", function (e) {
+										node.style.color = "rgb(" + e.coordsAsInts().join(",") + ")";
+									});
+									anim.play(true);
+								} else {
+									if (tmpAction == "bgcolor") {
+										dojo.lfx.html.unhighlight(component, action.to, duration).play();
+									} else {
+										if (tmpAction == "remove") {
+											component.style.display = "none";
+										}
+									}
+								}
+							}
+						}
+					}
 				}
-
-				if(tmpAction == "hide"){
-					component.style.visibility = "hidden";
-				}else{
-					component.style.visibility = "visible";
-				}
 			}
+			if (tmpAction == "hide") {
+				component.style.visibility = "hidden";
+			} else {
+				component.style.visibility = "visible";
+			}
 		}
-		
-		action = this._actions[this._action + 1];
-		if(action && action.auto == "true"){
-			this.nextAction();
-		}
-
-		return true;
-	},
-	callWith: function(/*Node*/ node){
-		if(!node){ return; }
-		if(dojo.lang.isArray(node)){
-			dojo.lang.forEach(node, arguments.callee);
-			return;
-		}
-		var parent = node.parentNode;
-		if((parent)&&(parent.tagName.toLowerCase() == "li")){
-			parent.style.listStyleType = parent.oldType;
-		}
 	}
-});
+	action = this._actions[this._action + 1];
+	if (action && action.auto == "true") {
+		this.nextAction();
+	}
+	return true;
+}, callWith:function (node) {
+	if (!node) {
+		return;
+	}
+	if (dojo.lang.isArray(node)) {
+		dojo.lang.forEach(node, arguments.callee);
+		return;
+	}
+	var parent = node.parentNode;
+	if ((parent) && (parent.tagName.toLowerCase() == "li")) {
+		parent.style.listStyleType = parent.oldType;
+	}
+}});
 
+
 __CPAN_FILE__ src/widget/TreeBasicController.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -49867,281 +31304,149 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeBasicController");
-
 dojo.require("dojo.event.*");
-dojo.require("dojo.json")
+dojo.require("dojo.json");
 dojo.require("dojo.io.*");
-
-
-dojo.widget.defineWidget("dojo.widget.TreeBasicController", dojo.widget.HtmlWidget, {
-	widgetType: "TreeBasicController",
-
-	DNDController: "",
-
-	dieWithTree: false,
-
-	initialize: function(args, frag){
-
-		/* no DND by default for compatibility */
-		if (this.DNDController == "create") {
-			dojo.require("dojo.dnd.TreeDragAndDrop");
-			this.DNDController = new dojo.dnd.TreeDNDController(this);
-		}
-
-
-
-	},
-
-
-	/**
-	 * Binds controller to all tree events
-	*/
-	listenTree: function(tree) {
-		//dojo.debug("Event "+tree.eventNames.treeClick);
-		dojo.event.topic.subscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
-		dojo.event.topic.subscribe(tree.eventNames.treeClick, this, "onTreeClick");
-		dojo.event.topic.subscribe(tree.eventNames.treeCreate, this, "onTreeCreate");
-		dojo.event.topic.subscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
-
-		if (this.DNDController) {
-			this.DNDController.listenTree(tree);
-		}
-	},
-
-	unlistenTree: function(tree) {
-		dojo.event.topic.unsubscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
-		dojo.event.topic.unsubscribe(tree.eventNames.treeClick, this, "onTreeClick");
-		dojo.event.topic.unsubscribe(tree.eventNames.treeCreate, this, "onTreeCreate");
-		dojo.event.topic.unsubscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
-	},
-
-	onTreeDestroy: function(message) {
-		var tree = message.source;
-
-		this.unlistenTree(tree);
-
-		if (this.dieWithTree) {
-			//alert("Killing myself "+this.widgetId);
-			this.destroy();
-			//dojo.debug("done");
-		}
-	},
-
-	onCreateDOMNode: function(message) {
-
-		var node = message.source;
-
-
-		if (node.expandLevel > 0) {
-			this.expandToLevel(node, node.expandLevel);
-		}
-	},
-
-	// perform actions-initializers for tree
-	onTreeCreate: function(message) {
-		var tree = message.source;
-		var _this = this;
-		if (tree.expandLevel) {
-			dojo.lang.forEach(tree.children,
-				function(child) {
-					_this.expandToLevel(child, tree.expandLevel-1)
-				}
-			);
-		}
-	},
-
-	expandToLevel: function(node, level) {
-		if (level == 0) return;
-
-		var children = node.children;
-		var _this = this;
-
-		var handler = function(node, expandLevel) {
-			this.node = node;
-			this.expandLevel = expandLevel;
-			// recursively expand opened node
-			this.process = function() {
-				//dojo.debug("Process "+node+" level "+level);
-				for(var i=0; i<this.node.children.length; i++) {
-					var child = node.children[i];
-
-					_this.expandToLevel(child, this.expandLevel);
-				}
-			};
-		}
-
-		var h = new handler(node, level-1);
-
-
-		this.expand(node, false, h, h.process);
-
-	},
-
-
-
-
-	onTreeClick: function(message){
-		var node = message.source;
-
-		if(node.isLocked()) {
-			return false;
-		}
-
-		if (node.isExpanded){
-			this.collapse(node);
-		} else {
-			this.expand(node);
-		}
-	},
-
-	expand: function(node, sync, callObj, callFunc) {
-		node.expand();
-		if (callFunc) callFunc.apply(callObj, [node]);
-	},
-
-	collapse: function(node) {
-
-		node.collapse();
-	},
-
-// =============================== move ============================
-
-	/**
-	 * Checks whether it is ok to change parent of child to newParent
-	 * May incur type checks etc
-	 *
-	 * It should check only hierarchical possibility w/o index, etc
-	 * because in onDragOver event for Between DND mode we can't calculate index at once on onDragOVer.
-	 * index changes as client moves mouse up-down over the node
-	 */
-	canMove: function(child, newParent){
-
-		if (child.actionIsDisabled(child.actions.MOVE)) {
-			return false;
-		}
-
-		// if we move under same parent then no matter if ADDCHILD disabled for him
-		// but if we move to NEW parent then check if action is disabled for him
-		// also covers case for newParent being a non-folder in strict mode etc
-		if (child.parent !== newParent && newParent.actionIsDisabled(newParent.actions.ADDCHILD)) {
-			return false;
-		}
-
-		// Can't move parent under child. check whether new parent is child of "child".
-		var node = newParent;
-		while(node.isTreeNode) {
-			//dojo.debugShallow(node.title)
-			if (node === child) {
-				// parent of newParent is child
-				return false;
+dojo.widget.defineWidget("dojo.widget.TreeBasicController", dojo.widget.HtmlWidget, {widgetType:"TreeBasicController", DNDController:"", dieWithTree:false, initialize:function (args, frag) {
+	if (this.DNDController == "create") {
+		dojo.require("dojo.dnd.TreeDragAndDrop");
+		this.DNDController = new dojo.dnd.TreeDNDController(this);
+	}
+}, listenTree:function (tree) {
+	dojo.event.topic.subscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
+	dojo.event.topic.subscribe(tree.eventNames.treeClick, this, "onTreeClick");
+	dojo.event.topic.subscribe(tree.eventNames.treeCreate, this, "onTreeCreate");
+	dojo.event.topic.subscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
+	if (this.DNDController) {
+		this.DNDController.listenTree(tree);
+	}
+}, unlistenTree:function (tree) {
+	dojo.event.topic.unsubscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
+	dojo.event.topic.unsubscribe(tree.eventNames.treeClick, this, "onTreeClick");
+	dojo.event.topic.unsubscribe(tree.eventNames.treeCreate, this, "onTreeCreate");
+	dojo.event.topic.unsubscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
+}, onTreeDestroy:function (message) {
+	var tree = message.source;
+	this.unlistenTree(tree);
+	if (this.dieWithTree) {
+		this.destroy();
+	}
+}, onCreateDOMNode:function (message) {
+	var node = message.source;
+	if (node.expandLevel > 0) {
+		this.expandToLevel(node, node.expandLevel);
+	}
+}, onTreeCreate:function (message) {
+	var tree = message.source;
+	var _this = this;
+	if (tree.expandLevel) {
+		dojo.lang.forEach(tree.children, function (child) {
+			_this.expandToLevel(child, tree.expandLevel - 1);
+		});
+	}
+}, expandToLevel:function (node, level) {
+	if (level == 0) {
+		return;
+	}
+	var children = node.children;
+	var _this = this;
+	var handler = function (node, expandLevel) {
+		this.node = node;
+		this.expandLevel = expandLevel;
+		this.process = function () {
+			for (var i = 0; i < this.node.children.length; i++) {
+				var child = node.children[i];
+				_this.expandToLevel(child, this.expandLevel);
 			}
-			node = node.parent;
-		}
-
-		return true;
-	},
-
-
-	move: function(child, newParent, index) {
-
-		/* move sourceTreeNode to new parent */
-		if (!this.canMove(child, newParent)) {
+		};
+	};
+	var h = new handler(node, level - 1);
+	this.expand(node, false, h, h.process);
+}, onTreeClick:function (message) {
+	var node = message.source;
+	if (node.isLocked()) {
+		return false;
+	}
+	if (node.isExpanded) {
+		this.collapse(node);
+	} else {
+		this.expand(node);
+	}
+}, expand:function (node, sync, callObj, callFunc) {
+	node.expand();
+	if (callFunc) {
+		callFunc.apply(callObj, [node]);
+	}
+}, collapse:function (node) {
+	node.collapse();
+}, canMove:function (child, newParent) {
+	if (child.actionIsDisabled(child.actions.MOVE)) {
+		return false;
+	}
+	if (child.parent !== newParent && newParent.actionIsDisabled(newParent.actions.ADDCHILD)) {
+		return false;
+	}
+	var node = newParent;
+	while (node.isTreeNode) {
+		if (node === child) {
 			return false;
 		}
-
-		var result = this.doMove(child, newParent, index);
-
-		if (!result) return result;
-
-		if (newParent.isTreeNode) {
-			this.expand(newParent);
-		}
-
+		node = node.parent;
+	}
+	return true;
+}, move:function (child, newParent, index) {
+	if (!this.canMove(child, newParent)) {
+		return false;
+	}
+	var result = this.doMove(child, newParent, index);
+	if (!result) {
 		return result;
-	},
-
-	doMove: function(child, newParent, index) {
-		child.tree.move(child, newParent, index);
-
-		return true;
-	},
-
-// =============================== removeNode ============================
-
-
-	canRemoveNode: function(child) {
-		if (child.actionIsDisabled(child.actions.REMOVE)) {
-			return false;
-		}
-
-		return true;
-	},
-
-
-	removeNode: function(node, callObj, callFunc) {
-		if (!this.canRemoveNode(node)) {
-			return false;
-		}
-
-		return this.doRemoveNode(node, callObj, callFunc);
-	},
-
-
-	doRemoveNode: function(node, callObj, callFunc) {
-		node.tree.removeNode(node);
-
-		if (callFunc) {
-			callFunc.apply(dojo.lang.isUndefined(callObj) ? this : callObj, [node]);
-		}
-	},
-
-
-	// -----------------------------------------------------------------------------
-	//                             Create node stuff
-	// -----------------------------------------------------------------------------
-
-
-	canCreateChild: function(parent, index, data) {
-		if (parent.actionIsDisabled(parent.actions.ADDCHILD)) return false;
-
-		return true;
-	},
-
-
-	/* send data to server and add child from server */
-	/* data may contain an almost ready child, or anything else, suggested to server */
-	/*in RPC controllers server responds with child data to be inserted */
-	createChild: function(parent, index, data, callObj, callFunc) {
-		if (!this.canCreateChild(parent, index, data)) {
-			return false;
-		}
-
-		return this.doCreateChild.apply(this, arguments);
-	},
-
-	doCreateChild: function(parent, index, data, callObj, callFunc) {
-
-		var widgetType = data.widgetType ? data.widgetType : "TreeNode";
-
-		var newChild = dojo.widget.createWidget(widgetType, data);
-
-		parent.addChild(newChild, index);
-
-		this.expand(parent);
-
-		if (callFunc) {
-			callFunc.apply(callObj, [newChild]);
-		}
-
-		return newChild;
 	}
+	if (newParent.isTreeNode) {
+		this.expand(newParent);
+	}
+	return result;
+}, doMove:function (child, newParent, index) {
+	child.tree.move(child, newParent, index);
+	return true;
+}, canRemoveNode:function (child) {
+	if (child.actionIsDisabled(child.actions.REMOVE)) {
+		return false;
+	}
+	return true;
+}, removeNode:function (node, callObj, callFunc) {
+	if (!this.canRemoveNode(node)) {
+		return false;
+	}
+	return this.doRemoveNode(node, callObj, callFunc);
+}, doRemoveNode:function (node, callObj, callFunc) {
+	node.tree.removeNode(node);
+	if (callFunc) {
+		callFunc.apply(dojo.lang.isUndefined(callObj) ? this : callObj, [node]);
+	}
+}, canCreateChild:function (parent, index, data) {
+	if (parent.actionIsDisabled(parent.actions.ADDCHILD)) {
+		return false;
+	}
+	return true;
+}, createChild:function (parent, index, data, callObj, callFunc) {
+	if (!this.canCreateChild(parent, index, data)) {
+		return false;
+	}
+	return this.doCreateChild.apply(this, arguments);
+}, doCreateChild:function (parent, index, data, callObj, callFunc) {
+	var widgetType = data.widgetType ? data.widgetType : "TreeNode";
+	var newChild = dojo.widget.createWidget(widgetType, data);
+	parent.addChild(newChild, index);
+	this.expand(parent);
+	if (callFunc) {
+		callFunc.apply(callObj, [newChild]);
+	}
+	return newChild;
+}});
 
 
-
-});
-
 __CPAN_FILE__ src/widget/Spinner.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -50154,7 +31459,6 @@
 */
 
 dojo.provide("dojo.widget.Spinner");
-
 dojo.require("dojo.io.*");
 dojo.require("dojo.lfx.*");
 dojo.require("dojo.html.*");
@@ -50164,608 +31468,511 @@
 dojo.require("dojo.widget.IntegerTextbox");
 dojo.require("dojo.widget.RealNumberTextbox");
 dojo.require("dojo.widget.DateTextbox");
-
 dojo.require("dojo.experimental");
-
-dojo.declare(
-	"dojo.widget.Spinner",
-	null, 
-	{
-		// summary: Mixin for validation widgets with a spinner
-		// description: This class basically (conceptually) extends dojo.widget.ValidationTextbox.
-		//	It modifies the template to have up/down arrows, and provides related handling code.
-
-		_typamaticTimer: null,
-		_typamaticFunction: null,
-		_currentTimeout: this.defaultTimeout,
-		_eventCount: 0,
-
-		// defaultTimeout: Number
-		//      number of milliseconds before a held key or button becomes typematic
-		defaultTimeout: 500,
-
-		// timeoutChangeRate: Number
-		//      fraction of time used to change the typematic timer between events
-		//      1.0 means that each typematic event fires at defaultTimeout intervals
-		//      < 1.0 means that each typematic event fires at an increasing faster rate
-		timeoutChangeRate: 0.90,
-
-		templatePath: dojo.uri.dojoUri("src/widget/templates/Spinner.html"),
-		templateCssPath: dojo.uri.dojoUri("src/widget/templates/Spinner.css"),
-
-		// incrementSrc: String
-		//      up arrow graphic URL
-		incrementSrc: dojo.uri.dojoUri("src/widget/templates/images/spinnerIncrement.gif"),
-
-		// decrementSrc: String
-		//      down arrow graphic URL
-		decrementSrc: dojo.uri.dojoUri("src/widget/templates/images/spinnerDecrement.gif"),
-
-		// does the keyboard related stuff
-		_handleKeyEvents: function(/*Event*/ evt){
-			if(!evt.key){ return; }
-
-			if(!evt.ctrlKey && !evt.altKey){
-			        switch(evt.key){
-					case evt.KEY_DOWN_ARROW:
-						dojo.event.browser.stopEvent(evt);
-						this._downArrowPressed(evt);
-						return;
-					case evt.KEY_UP_ARROW:
-						dojo.event.browser.stopEvent(evt);
-						this._upArrowPressed(evt);
-						return;
-				}
-			}
-			this._eventCount++;
-		},
-
-		_onSpinnerKeyUp: function(/*Event*/ evt){
-			this._arrowReleased(evt);
-			this.onkeyup(evt);
-		},
-
-		// reset button size; this function is called when the input area has changed size
-		_resize: function(){
-			var inputSize = dojo.html.getBorderBox(this.textbox);
-			this.buttonSize = { width: inputSize.height / 2, height: inputSize.height / 2 };
-			if(this.upArrowNode){
-				dojo.html.setMarginBox(this.upArrowNode, this.buttonSize);
-				dojo.html.setMarginBox(this.downArrowNode, this.buttonSize);
-			}
-		},
-
-		_pressButton: function(/*DomNode*/ node){
-			node.style.borderWidth = "1px 0px 0px 1px";
-			node.style.borderStyle = "inset";
-		},
-
-		_releaseButton: function(/*DomNode*/ node){
-			node.style.borderWidth = "0px 1px 1px 0px";
-			node.style.borderStyle = "outset";
-		},
-
-		_arrowPressed: function(/*Event*/ evt, /*Number*/ direction){
-			var nodePressed = (direction == -1) ? this.downArrowNode : this.upArrowNode;
-			var nodeReleased = (direction == +1) ? this.downArrowNode : this.upArrowNode;
-			if(typeof evt != "number"){
-				if(this._typamaticTimer != null){
-					if(this._typamaticNode == nodePressed){
-						return;
-					}
-					dojo.lang.clearTimeout(this._typamaticTimer);
-				}
-				this._releaseButton(nodeReleased);
-				this._eventCount++;
-				this._typamaticTimer = null;
-				this._currentTimeout = this.defaultTimeout;
-
-			}else if (evt != this._eventCount){
-				this._releaseButton(nodePressed);
+dojo.declare("dojo.widget.Spinner", null, {_typamaticTimer:null, _typamaticFunction:null, _currentTimeout:this.defaultTimeout, _eventCount:0, defaultTimeout:500, timeoutChangeRate:0.9, templateString:"<span _=\"weird end tag formatting is to prevent whitespace from becoming &nbsp;\"\n\tstyle='float:${this.htmlfloat};'\n\t><table cellpadding=0 cellspacing=0 class=\"dojoSpinner\">\n\t\t<tr>\n\t\t\t<td\n\t\t\t\t><input\n\t\t\t\t\tdojoAttachPoint='textbox' type='${this.type}'\n\t\t\t\t\tdojoAttachEvent='onblur;onfocus;onkey:_handleKeyEvents;onKeyUp:_onSpinnerKeyUp;onresize:_resize'\n\t\t\t\t\tid='${this.widgetId}' name='${this.name}' size='${this.size}' maxlength='${this.maxlength}'\n\t\t\t\t\tvalue='${this.value}' class='${this.className}' autocomplete=\"off\"\n\t\t\t></td>\n\t\t\t<td\n\t\t\t\t><img dojoAttachPoint=\"upArrowNode\"\n\t\t\t\t\tdojoAttachEvent=\"onDblClick: _upArrowDoubleClicked;  onMouseDown: _upArrowPressed; onMouseUp: _arrowReleased; onMouseOut: _arrowReleased; onMouseMove: _discardEvent;\"\n\t\t\t\t\tsrc=\"${this.incrementSrc}\" style=\"width: ${this.buttonSize.width}px; height: ${this.buttonSize.height}px;\"\n\t\t\t\t><img dojoAttachPoint=\"downArrowNode\"\n\t\t\t\t\tdojoAttachEvent=\"onDblClick: _downArrowDoubleClicked;  onMouseDown: _downArrowPressed; onMouseUp: _arrowReleased; onMouseOut: _arrowReleased; onMouseMove: _discardEvent;\"\n\t\t\t\t\tsrc=\"${this.decrementSrc}\" style=\"width: ${this.buttonSize.width}px; height: ${this.buttonSize.height}px;\"\n\t\t\t></td>\n\t\t</tr>\n\t</table\n\t><span dojoAttachPoint='invalidSpan' class='${this.invalidClass}'>${this.messages.invalidMessage}</span\n\t><span dojoAttachPoint='missingSpan' class='${this.missingClass}'>${this.messages.missingMessage}</span\n\t><span dojoAttachPoint='rangeSpan' class='${this.rangeClass}'>${this.messages.rangeMessage}</span\n></span>\n", templateCssString:"/* inline the table holding the <input> and buttons (method varies by browser) */\n.ie .dojoSpinner, .safari .dojoSpinner {\n\tdisplay: inline;\n}\n\n.moz .dojoSpinner {\n\tdisplay: -moz-inline-box;\n}\n\n.opera .dojoSpinner {\n\tdisplay: inline-table;\n}\n\n/* generic stuff for the table */\n.dojoSpinner td {\n\tpadding:0px;\n\tmargin:0px;\n\tvertical-align: middle;\n}\ntable.dojoSpinner {\n\tborder:0px;\n\tborder-spacing:0px;\n\tline-height:0px;\n\tpadding:0px;\n\tmargin: 0px;\n\tvertical-align: middle;\n}\n\n/* the buttons */\n.dojoSpinner img {\n\tdisplay: block;\n\tborder-width:0px 1px 1px 0px;\n\tborder-style:outset;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/Spinner.css"), incrementSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/spinnerIncrement.gif"), decrementSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/spinnerDecrement.gif"), _handleKeyEvents:function (evt) {
+	if (!evt.key) {
+		return;
+	}
+	if (!evt.ctrlKey && !evt.altKey) {
+		switch (evt.key) {
+		  case evt.KEY_DOWN_ARROW:
+			dojo.event.browser.stopEvent(evt);
+			this._downArrowPressed(evt);
+			return;
+		  case evt.KEY_UP_ARROW:
+			dojo.event.browser.stopEvent(evt);
+			this._upArrowPressed(evt);
+			return;
+		}
+	}
+	this._eventCount++;
+}, _onSpinnerKeyUp:function (evt) {
+	this._arrowReleased(evt);
+	this.onkeyup(evt);
+}, _resize:function () {
+	var inputSize = dojo.html.getBorderBox(this.textbox);
+	this.buttonSize = {width:inputSize.height / 2, height:inputSize.height / 2};
+	if (this.upArrowNode) {
+		dojo.html.setMarginBox(this.upArrowNode, this.buttonSize);
+		dojo.html.setMarginBox(this.downArrowNode, this.buttonSize);
+	}
+}, _pressButton:function (node) {
+	node.style.borderWidth = "1px 0px 0px 1px";
+	node.style.borderStyle = "inset";
+}, _releaseButton:function (node) {
+	node.style.borderWidth = "0px 1px 1px 0px";
+	node.style.borderStyle = "outset";
+}, _arrowPressed:function (evt, direction) {
+	var nodePressed = (direction == -1) ? this.downArrowNode : this.upArrowNode;
+	var nodeReleased = (direction == +1) ? this.downArrowNode : this.upArrowNode;
+	if (typeof evt != "number") {
+		if (this._typamaticTimer != null) {
+			if (this._typamaticNode == nodePressed) {
 				return;
 			}
-			this._pressButton(nodePressed);
-			this._setCursorX(this.adjustValue(direction,this._getCursorX()));
-			this._typamaticNode = nodePressed;
-			this._typamaticTimer = dojo.lang.setTimeout(this, "_arrowPressed", this._currentTimeout, this._eventCount, direction);
-			this._currentTimeout = Math.round(this._currentTimeout * this.timeoutChangeRate);
-		},
-
-		_downArrowPressed: function(/*Event*/ evt){
-			return this._arrowPressed(evt,-1);
-		},
-
-		// IE sends these events when rapid clicking, mimic an extra single click
-		_downArrowDoubleClicked: function(/*Event*/ evt){
-			var rc = this._downArrowPressed(evt);
-			dojo.lang.setTimeout(this, "_arrowReleased", 50, null);
-			return rc;
-		},
-
-		_upArrowPressed: function(/*Event*/ evt){
-			return this._arrowPressed(evt,+1);
-		},
-
-		// IE sends these events when rapid clicking, mimic an extra single click
-		_upArrowDoubleClicked: function(/*Event*/ evt){
-			var rc = this._upArrowPressed(evt);
-			dojo.lang.setTimeout(this, "_arrowReleased", 50, null);
-			return rc;
-		},
-
-		_arrowReleased: function(/*Event*/ evt){
-			this.textbox.focus();
-			if(evt != null && typeof evt == "object" && evt.keyCode && evt.keyCode != null){
-				var keyCode = evt.keyCode;
-				var k = dojo.event.browser.keys;
-
-				switch(keyCode){
-					case k.KEY_DOWN_ARROW:
-					case k.KEY_UP_ARROW:
-						dojo.event.browser.stopEvent(evt);
-						break;
-				}
-			}
-			this._releaseButton(this.upArrowNode);
-			this._releaseButton(this.downArrowNode);
-			this._eventCount++;
-			if(this._typamaticTimer != null){
-				dojo.lang.clearTimeout(this._typamaticTimer);
-			}
-			this._typamaticTimer = null;
-			this._currentTimeout = this.defaultTimeout;
-		},
-
-		_mouseWheeled: function(/*Event*/ evt){
-			var scrollAmount = 0;
-			if(typeof evt.wheelDelta == 'number'){ // IE
-				scrollAmount = evt.wheelDelta;
-			}else if (typeof evt.detail == 'number'){ // Mozilla+Firefox
-				scrollAmount = -evt.detail;
-			}
-			if(scrollAmount > 0){
-				this._upArrowPressed(evt);
-				this._arrowReleased(evt);
-			}else if (scrollAmount < 0){
-				this._downArrowPressed(evt);
-				this._arrowReleased(evt);
-			}
-		},
-
-		_discardEvent: function(/*Event*/ evt){
+			dojo.lang.clearTimeout(this._typamaticTimer);
+		}
+		this._releaseButton(nodeReleased);
+		this._eventCount++;
+		this._typamaticTimer = null;
+		this._currentTimeout = this.defaultTimeout;
+	} else {
+		if (evt != this._eventCount) {
+			this._releaseButton(nodePressed);
+			return;
+		}
+	}
+	this._pressButton(nodePressed);
+	this._setCursorX(this.adjustValue(direction, this._getCursorX()));
+	this._typamaticNode = nodePressed;
+	this._typamaticTimer = dojo.lang.setTimeout(this, "_arrowPressed", this._currentTimeout, this._eventCount, direction);
+	this._currentTimeout = Math.round(this._currentTimeout * this.timeoutChangeRate);
+}, _downArrowPressed:function (evt) {
+	return this._arrowPressed(evt, -1);
+}, _downArrowDoubleClicked:function (evt) {
+	var rc = this._downArrowPressed(evt);
+	dojo.lang.setTimeout(this, "_arrowReleased", 50, null);
+	return rc;
+}, _upArrowPressed:function (evt) {
+	return this._arrowPressed(evt, +1);
+}, _upArrowDoubleClicked:function (evt) {
+	var rc = this._upArrowPressed(evt);
+	dojo.lang.setTimeout(this, "_arrowReleased", 50, null);
+	return rc;
+}, _arrowReleased:function (evt) {
+	this.textbox.focus();
+	if (evt != null && typeof evt == "object" && evt.keyCode && evt.keyCode != null) {
+		var keyCode = evt.keyCode;
+		var k = dojo.event.browser.keys;
+		switch (keyCode) {
+		  case k.KEY_DOWN_ARROW:
+		  case k.KEY_UP_ARROW:
 			dojo.event.browser.stopEvent(evt);
-		},
-
-		_getCursorX: function(){
-			var x = -1;
-			try{
-				this.textbox.focus();
-				if (typeof this.textbox.selectionEnd == "number"){
-					x = this.textbox.selectionEnd;
-				}else if (document.selection && document.selection.createRange){
-					var range = document.selection.createRange().duplicate();
-					if(range.parentElement() == this.textbox){
-						range.moveStart('textedit', -1);
-						x = range.text.length;
-					}
+			break;
+		}
+	}
+	this._releaseButton(this.upArrowNode);
+	this._releaseButton(this.downArrowNode);
+	this._eventCount++;
+	if (this._typamaticTimer != null) {
+		dojo.lang.clearTimeout(this._typamaticTimer);
+	}
+	this._typamaticTimer = null;
+	this._currentTimeout = this.defaultTimeout;
+}, _mouseWheeled:function (evt) {
+	var scrollAmount = 0;
+	if (typeof evt.wheelDelta == "number") {
+		scrollAmount = evt.wheelDelta;
+	} else {
+		if (typeof evt.detail == "number") {
+			scrollAmount = -evt.detail;
+		}
+	}
+	if (scrollAmount > 0) {
+		this._upArrowPressed(evt);
+		this._arrowReleased(evt);
+	} else {
+		if (scrollAmount < 0) {
+			this._downArrowPressed(evt);
+			this._arrowReleased(evt);
+		}
+	}
+}, _discardEvent:function (evt) {
+	dojo.event.browser.stopEvent(evt);
+}, _getCursorX:function () {
+	var x = -1;
+	try {
+		this.textbox.focus();
+		if (typeof this.textbox.selectionEnd == "number") {
+			x = this.textbox.selectionEnd;
+		} else {
+			if (document.selection && document.selection.createRange) {
+				var range = document.selection.createRange().duplicate();
+				if (range.parentElement() == this.textbox) {
+					range.moveStart("textedit", -1);
+					x = range.text.length;
 				}
-			}catch(e){ /* squelch! */ }
-			return x;
-		},
-
-		_setCursorX: function(/*Number*/ x){
-			try{
-				this.textbox.focus();
-				if(!x){ x = 0; }
-				if(typeof this.textbox.selectionEnd == "number"){
-				this.textbox.selectionEnd = x;
-				}else if(this.textbox.createTextRange){
+			}
+		}
+	}
+	catch (e) {
+	}
+	return x;
+}, _setCursorX:function (x) {
+	try {
+		this.textbox.focus();
+		if (!x) {
+			x = 0;
+		}
+		if (typeof this.textbox.selectionEnd == "number") {
+			this.textbox.selectionEnd = x;
+		} else {
+			if (this.textbox.createTextRange) {
 				var range = this.textbox.createTextRange();
 				range.collapse(true);
-				range.moveEnd('character', x);
-				range.moveStart('character', x);
+				range.moveEnd("character", x);
+				range.moveStart("character", x);
 				range.select();
-				}
-			}catch(e){ /* squelch! */ }
-		},
-
-		_spinnerPostMixInProperties: function(/*Object*/ args, /*Object*/ frag){
-			// summary: the widget's postMixInProperties() method should call this method
-
-			// set image size before instantiating template;
-			// changing it aftwards doesn't work on FF
-			var inputNode = this.getFragNodeRef(frag);
-			var inputSize = dojo.html.getBorderBox(inputNode);
-			this.buttonSize = { width: inputSize.height / 2 - 1, height: inputSize.height / 2 - 1};
-		},
-
-		_spinnerPostCreate: function(/*Object*/ args, /*Object*/ frag){
-			// summary: the widget's postCreate() method should call this method
-
-			// extra listeners
-			if(this.textbox.addEventListener){
-				// dojo.event.connect() doesn't seem to work with DOMMouseScroll
-				this.textbox.addEventListener('DOMMouseScroll', dojo.lang.hitch(this, "_mouseWheeled"), false); // Mozilla + Firefox + Netscape
-			}else{
-				dojo.event.connect(this.textbox, "onmousewheel", this, "_mouseWheeled"); // IE + Safari
 			}
-			//dojo.event.connect(window, "onchange", this, "_resize");
 		}
 	}
-);
-
-dojo.widget.defineWidget(
-	"dojo.widget.IntegerSpinner",
-	[dojo.widget.IntegerTextbox, dojo.widget.Spinner],
-{
-	// summary: an IntegerTextbox with +/- buttons
-
-	// delta: Number
-	//	increment amount
-	delta: "1",
-
-	postMixInProperties: function(/*Object*/ args, /*Object*/ frag){
-		dojo.widget.IntegerSpinner.superclass.postMixInProperties.apply(this, arguments);
-		this._spinnerPostMixInProperties(args, frag);
-	},
-
-	postCreate: function(/*Object*/ args, /*Object*/ frag){
-		dojo.widget.IntegerSpinner.superclass.postCreate.apply(this, arguments);
-		this._spinnerPostCreate(args, frag);
-	},
-
-	adjustValue: function(/*Number*/ direction, /*Number*/ x){
-		// sumary
-		//	spin the input field
-		//	direction < 0: spin down
-		//	direction > 0: spin up
-		//	direction = 0: revalidate existing value
-
-		var val = this.getValue().replace(/[^\-+\d]/g, "");
-		if(val.length == 0){ return; }
-
-		var num = Math.min(Math.max((parseInt(val)+(parseInt(this.delta) * direction)), (this.flags.min?this.flags.min:-Infinity)), (this.flags.max?this.flags.max:+Infinity));
-		val = num.toString();
-
-		if(num >= 0){
-			val = ((this.flags.signed == true)?'+':' ')+val; // make sure first char is a nondigit
+	catch (e) {
+	}
+}, _spinnerPostMixInProperties:function (args, frag) {
+	var inputNode = this.getFragNodeRef(frag);
+	var inputSize = dojo.html.getBorderBox(inputNode);
+	this.buttonSize = {width:inputSize.height / 2 - 1, height:inputSize.height / 2 - 1};
+}, _spinnerPostCreate:function (args, frag) {
+	if (this.textbox.addEventListener) {
+		this.textbox.addEventListener("DOMMouseScroll", dojo.lang.hitch(this, "_mouseWheeled"), false);
+	} else {
+		dojo.event.connect(this.textbox, "onmousewheel", this, "_mouseWheeled");
+	}
+}});
+dojo.widget.defineWidget("dojo.widget.IntegerSpinner", [dojo.widget.IntegerTextbox, dojo.widget.Spinner], {delta:"1", postMixInProperties:function (args, frag) {
+	dojo.widget.IntegerSpinner.superclass.postMixInProperties.apply(this, arguments);
+	this._spinnerPostMixInProperties(args, frag);
+}, postCreate:function (args, frag) {
+	dojo.widget.IntegerSpinner.superclass.postCreate.apply(this, arguments);
+	this._spinnerPostCreate(args, frag);
+}, adjustValue:function (direction, x) {
+	var val = this.getValue().replace(/[^\-+\d]/g, "");
+	if (val.length == 0) {
+		return;
+	}
+	var num = Math.min(Math.max((parseInt(val) + (parseInt(this.delta) * direction)), (this.flags.min ? this.flags.min : -Infinity)), (this.flags.max ? this.flags.max : +Infinity));
+	val = num.toString();
+	if (num >= 0) {
+		val = ((this.flags.signed == true) ? "+" : " ") + val;
+	}
+	if (this.flags.separator.length > 0) {
+		for (var i = val.length - 3; i > 1; i -= 3) {
+			val = val.substr(0, i) + this.flags.separator + val.substr(i);
 		}
-
-		if(this.flags.separator.length > 0){
-			for (var i=val.length-3; i > 1; i-=3){
-				val = val.substr(0,i)+this.flags.separator+val.substr(i);
-			}
+	}
+	if (val.substr(0, 1) == " ") {
+		val = val.substr(1);
+	}
+	this.setValue(val);
+	return val.length;
+}});
+dojo.widget.defineWidget("dojo.widget.RealNumberSpinner", [dojo.widget.RealNumberTextbox, dojo.widget.Spinner], function () {
+	dojo.experimental("dojo.widget.RealNumberSpinner");
+}, {delta:"1e1", postMixInProperties:function (args, frag) {
+	dojo.widget.RealNumberSpinner.superclass.postMixInProperties.apply(this, arguments);
+	this._spinnerPostMixInProperties(args, frag);
+}, postCreate:function (args, frag) {
+	dojo.widget.RealNumberSpinner.superclass.postCreate.apply(this, arguments);
+	this._spinnerPostCreate(args, frag);
+}, adjustValue:function (direction, x) {
+	var val = this.getValue().replace(/[^\-+\.eE\d]/g, "");
+	if (!val.length) {
+		return;
+	}
+	var num = parseFloat(val);
+	if (isNaN(num)) {
+		return;
+	}
+	var delta = this.delta.split(/[eE]/);
+	if (!delta.length) {
+		delta = [1, 1];
+	} else {
+		delta[0] = parseFloat(delta[0].replace(/[^\-+\.\d]/g, ""));
+		if (isNaN(delta[0])) {
+			delta[0] = 1;
 		}
-
-		if(val.substr(0,1) == ' '){ val = val.substr(1); } // remove space
-
-		this.setValue(val);
-
-		return val.length;
+		if (delta.length > 1) {
+			delta[1] = parseInt(delta[1]);
+		}
+		if (isNaN(delta[1])) {
+			delta[1] = 1;
+		}
 	}
-});
-
-dojo.widget.defineWidget(
-	"dojo.widget.RealNumberSpinner",
-	[dojo.widget.RealNumberTextbox, dojo.widget.Spinner],
-	function(){ dojo.experimental("dojo.widget.RealNumberSpinner"); },
-{
-	// summary
-	//	A RealNumberTextbox with +/- buttons
-
-	// delta: Number
-	//	amount that pushing a button changes the value?
-	delta: "1e1",
-
-	postMixInProperties: function(/*Object*/ args, /*Object*/ frag){
-		dojo.widget.RealNumberSpinner.superclass.postMixInProperties.apply(this, arguments);
-		this._spinnerPostMixInProperties(args, frag);
-	},
-
-	postCreate: function(/*Object*/ args, /*Object*/ frag){
-		dojo.widget.RealNumberSpinner.superclass.postCreate.apply(this, arguments);
-		this._spinnerPostCreate(args, frag);
-	},
-
-	adjustValue: function(/*Number*/ direction, /*Number*/ x){
-			var val = this.getValue().replace(/[^\-+\.eE\d]/g, "");
-			if(!val.length){ return; }
-
-			var num = parseFloat(val);
-			if(isNaN(num)){ return; }
-			var delta = this.delta.split(/[eE]/);
-			if(!delta.length){
-				delta = [1, 1];
-			}else{
-				delta[0] = parseFloat(delta[0].replace(/[^\-+\.\d]/g, ""));
-				if(isNaN(delta[0])){ delta[0] = 1; }
-				if(delta.length > 1){
-					delta[1] = parseInt(delta[1]);
-				}
-				if(isNaN(delta[1])){ delta[1] = 1; }
+	val = this.getValue().split(/[eE]/);
+	if (!val.length) {
+		return;
+	}
+	var numBase = parseFloat(val[0].replace(/[^\-+\.\d]/g, ""));
+	if (val.length == 1) {
+		var numExp = 0;
+	} else {
+		var numExp = parseInt(val[1].replace(/[^\-+\d]/g, ""));
+	}
+	if (x <= val[0].length) {
+		x = 0;
+		numBase += delta[0] * direction;
+	} else {
+		x = Number.MAX_VALUE;
+		numExp += delta[1] * direction;
+		if (this.flags.eSigned == false && numExp < 0) {
+			numExp = 0;
+		}
+	}
+	num = Math.min(Math.max((numBase * Math.pow(10, numExp)), (this.flags.min ? this.flags.min : -Infinity)), (this.flags.max ? this.flags.max : +Infinity));
+	if ((this.flags.exponent == true || (this.flags.exponent != false && x != 0)) && num.toExponential) {
+		if (isNaN(this.flags.places) || this.flags.places == Infinity) {
+			val = num.toExponential();
+		} else {
+			val = num.toExponential(this.flags.places);
+		}
+	} else {
+		if (num.toFixed && num.toPrecision) {
+			if (isNaN(this.flags.places) || this.flags.places == Infinity) {
+				val = num.toPrecision((1 / 3).toString().length - 1);
+			} else {
+				val = num.toFixed(this.flags.places);
 			}
-			val = this.getValue().split(/[eE]/);
-			if(!val.length){ return; }
-			var numBase = parseFloat(val[0].replace(/[^\-+\.\d]/g, ""));
-			if(val.length == 1){
-				var numExp = 0;
-			}else{
-				var numExp = parseInt(val[1].replace(/[^\-+\d]/g, ""));
-			}
-			if(x <= val[0].length){
-				x = 0;
-				numBase += delta[0] * direction;
-			}else{
-				x = Number.MAX_VALUE;
-				numExp += delta[1] * direction;
-				if(this.flags.eSigned == false && numExp < 0){
-					numExp = 0;
-				}
-			}
-			num = Math.min(Math.max((numBase * Math.pow(10,numExp)), (this.flags.min?this.flags.min:-Infinity)), (this.flags.max?this.flags.max:+Infinity));
-			if((this.flags.exponent == true || (this.flags.exponent != false && x != 0)) && num.toExponential){
-				if (isNaN(this.flags.places) || this.flags.places == Infinity){
-					val = num.toExponential();
-				}else{
-					val = num.toExponential(this.flags.places);
-				}
-			}else if(num.toFixed && num.toPrecision){
-				if(isNaN(this.flags.places) || this.flags.places == Infinity){
-					val = num.toPrecision((1/3).toString().length-1);
-				}else{
-					val = num.toFixed(this.flags.places);
-				}
-			}else{
-				val = num.toString();
-			}
-
-			if(num >= 0){
-				if(this.flags.signed == true){
-					val = '+' + val;
-				}
-			}
-			val = val.split(/[eE]/);
-			if(this.flags.separator.length > 0){
-				if(num >= 0 && val[0].substr(0,1) != '+'){
-					val[0] = ' ' + val[0]; // make sure first char is nondigit for easy algorithm
-				}
-				var i = val[0].lastIndexOf('.');
-				if(i >= 0){
-					i -= 3;
-				}else{
-					i = val[0].length-3;
-				}
-				for (; i > 1; i-=3){
-					val[0] = val[0].substr(0,i)+this.flags.separator+val[0].substr(i);
-				}
-				if(val[0].substr(0,1) == ' '){ val[0] = val[0].substr(1); } // remove space
-			}
-			if(val.length > 1){
-				if((this.flags.eSigned == true)&&(val[1].substr(0,1) != '+')){
-					val[1] = '+' + val[1];
-				}else if((!this.flags.eSigned)&&(val[1].substr(0,1) == '+')){
-					val[1] = val[1].substr(1);
-				}else if((!this.flags.eSigned)&&(val[1].substr(0,1) == '-')&&(num.toFixed && num.toPrecision)){
-					if(isNaN(this.flags.places)){
-						val[0] = num.toPrecision((1/3).toString().length-1);
-					}else{
+		} else {
+			val = num.toString();
+		}
+	}
+	if (num >= 0) {
+		if (this.flags.signed == true) {
+			val = "+" + val;
+		}
+	}
+	val = val.split(/[eE]/);
+	if (this.flags.separator.length > 0) {
+		if (num >= 0 && val[0].substr(0, 1) != "+") {
+			val[0] = " " + val[0];
+		}
+		var i = val[0].lastIndexOf(".");
+		if (i >= 0) {
+			i -= 3;
+		} else {
+			i = val[0].length - 3;
+		}
+		for (; i > 1; i -= 3) {
+			val[0] = val[0].substr(0, i) + this.flags.separator + val[0].substr(i);
+		}
+		if (val[0].substr(0, 1) == " ") {
+			val[0] = val[0].substr(1);
+		}
+	}
+	if (val.length > 1) {
+		if ((this.flags.eSigned == true) && (val[1].substr(0, 1) != "+")) {
+			val[1] = "+" + val[1];
+		} else {
+			if ((!this.flags.eSigned) && (val[1].substr(0, 1) == "+")) {
+				val[1] = val[1].substr(1);
+			} else {
+				if ((!this.flags.eSigned) && (val[1].substr(0, 1) == "-") && (num.toFixed && num.toPrecision)) {
+					if (isNaN(this.flags.places)) {
+						val[0] = num.toPrecision((1 / 3).toString().length - 1);
+					} else {
 						val[0] = num.toFixed(this.flags.places).toString();
 					}
 					val[1] = "0";
 				}
-				val[0] += 'e' + val[1];
 			}
-			this.setValue(val[0]);
-			if(x > val[0].length){ x = val[0].length; }
-			return x;
+		}
+		val[0] += "e" + val[1];
 	}
-});
-
-dojo.widget.defineWidget(
-	"dojo.widget.TimeSpinner",
-	[dojo.widget.TimeTextbox, dojo.widget.Spinner],
-	function(){ dojo.experimental("dojo.widget.TimeSpinner"); },
-{
-	postMixInProperties: function(/*Object*/ args, /*Object*/ frag){
-		dojo.widget.TimeSpinner.superclass.postMixInProperties.apply(this, arguments);
-		this._spinnerPostMixInProperties(args, frag);
-	},
-
-	postCreate: function(/*Object*/ args, /*Object*/ frag){
-		dojo.widget.TimeSpinner.superclass.postCreate.apply(this, arguments);
-		this._spinnerPostCreate(args, frag);
-	},
-
-	adjustValue: function(/*Number*/ direction, /*Number*/ x){
-	//FIXME: formatting should make use of dojo.date.format?
-		var val = this.getValue();
-		var format = (this.flags.format && this.flags.format.search(/[Hhmst]/) >= 0) ? this.flags.format : "hh:mm:ss t";
-		if(direction == 0 || !val.length || !this.isValid()){ return; }
-		if (!this.flags.amSymbol){
-			this.flags.amSymbol = "AM";
+	this.setValue(val[0]);
+	if (x > val[0].length) {
+		x = val[0].length;
+	}
+	return x;
+}});
+dojo.widget.defineWidget("dojo.widget.TimeSpinner", [dojo.widget.TimeTextbox, dojo.widget.Spinner], function () {
+	dojo.experimental("dojo.widget.TimeSpinner");
+}, {postMixInProperties:function (args, frag) {
+	dojo.widget.TimeSpinner.superclass.postMixInProperties.apply(this, arguments);
+	this._spinnerPostMixInProperties(args, frag);
+}, postCreate:function (args, frag) {
+	dojo.widget.TimeSpinner.superclass.postCreate.apply(this, arguments);
+	this._spinnerPostCreate(args, frag);
+}, adjustValue:function (direction, x) {
+	var val = this.getValue();
+	var format = (this.flags.format && this.flags.format.search(/[Hhmst]/) >= 0) ? this.flags.format : "hh:mm:ss t";
+	if (direction == 0 || !val.length || !this.isValid()) {
+		return;
+	}
+	if (!this.flags.amSymbol) {
+		this.flags.amSymbol = "AM";
+	}
+	if (!this.flags.pmSymbol) {
+		this.flags.pmSymbol = "PM";
+	}
+	var re = dojo.regexp.time(this.flags);
+	var qualifiers = format.replace(/H/g, "h").replace(/[^hmst]/g, "").replace(/([hmst])\1/g, "$1");
+	var hourPos = qualifiers.indexOf("h") + 1;
+	var minPos = qualifiers.indexOf("m") + 1;
+	var secPos = qualifiers.indexOf("s") + 1;
+	var ampmPos = qualifiers.indexOf("t") + 1;
+	var cursorFormat = format;
+	var ampm = "";
+	if (ampmPos > 0) {
+		ampm = val.replace(new RegExp(re), "$" + ampmPos);
+		cursorFormat = cursorFormat.replace(/t+/, ampm.replace(/./g, "t"));
+	}
+	var hour = 0;
+	var deltaHour = 1;
+	if (hourPos > 0) {
+		hour = val.replace(new RegExp(re), "$" + hourPos);
+		if (dojo.lang.isString(this.delta)) {
+			deltaHour = this.delta.replace(new RegExp(re), "$" + hourPos);
 		}
-		if (!this.flags.pmSymbol){
-			this.flags.pmSymbol = "PM";
+		if (isNaN(deltaHour)) {
+			deltaHour = 1;
+		} else {
+			deltaHour = parseInt(deltaHour);
 		}
-		var re = dojo.regexp.time(this.flags);
-		var qualifiers = format.replace(/H/g,"h").replace(/[^hmst]/g,"").replace(/([hmst])\1/g,"$1");
-		var hourPos = qualifiers.indexOf('h') + 1;
-		var minPos = qualifiers.indexOf('m') + 1;
-		var secPos = qualifiers.indexOf('s') + 1;
-		var ampmPos = qualifiers.indexOf('t') + 1;
-		// tweak format to match the incoming data exactly to help find where the cursor is
-		var cursorFormat = format;
-		var ampm = "";
-		if (ampmPos > 0){
-			ampm = val.replace(new RegExp(re),"$"+ampmPos);
-			cursorFormat = cursorFormat.replace(/t+/, ampm.replace(/./g,"t"));
+		if (hour.length == 2) {
+			cursorFormat = cursorFormat.replace(/([Hh])+/, "$1$1");
+		} else {
+			cursorFormat = cursorFormat.replace(/([Hh])+/, "$1");
 		}
-		var hour = 0;
-		var deltaHour = 1;
-		if (hourPos > 0){
-			hour = val.replace(new RegExp(re),"$"+hourPos);
-			if (dojo.lang.isString(this.delta)){
-				deltaHour = this.delta.replace(new RegExp(re),"$"+hourPos);
-			}
-			if (isNaN(deltaHour)){
-				deltaHour = 1;
-			} else {
-				deltaHour = parseInt(deltaHour);
-			}
-			if (hour.length == 2){
-				cursorFormat = cursorFormat.replace(/([Hh])+/, "$1$1");
-			} else {
-				cursorFormat = cursorFormat.replace(/([Hh])+/, "$1");
-			}
-			if (isNaN(hour)){
-				hour = 0;
-			} else {
-				hour = parseInt(hour.replace(/^0(\d)/,"$1"));
-			}
+		if (isNaN(hour)) {
+			hour = 0;
+		} else {
+			hour = parseInt(hour.replace(/^0(\d)/, "$1"));
 		}
-		var min = 0;
-		var deltaMin = 1;
-		if (minPos > 0){
-			min = val.replace(new RegExp(re),"$"+minPos);
-			if (dojo.lang.isString(this.delta)){
-				deltaMin = this.delta.replace(new RegExp(re),"$"+minPos);
-			}
-			if (isNaN(deltaMin)){
-				deltaMin = 1;
-			} else {
-				deltaMin = parseInt(deltaMin);
-			}
-			cursorFormat = cursorFormat.replace(/m+/, min.replace(/./g,"m"));
-			if (isNaN(min)){
-				min = 0;
-			} else {
-				min = parseInt(min.replace(/^0(\d)/,"$1"));
-			}
+	}
+	var min = 0;
+	var deltaMin = 1;
+	if (minPos > 0) {
+		min = val.replace(new RegExp(re), "$" + minPos);
+		if (dojo.lang.isString(this.delta)) {
+			deltaMin = this.delta.replace(new RegExp(re), "$" + minPos);
 		}
-		var sec = 0;
-		var deltaSec = 1;
-		if (secPos > 0){
-			sec = val.replace(new RegExp(re),"$"+secPos);
-			if (dojo.lang.isString(this.delta)){
-				deltaSec = this.delta.replace(new RegExp(re),"$"+secPos);
-			}
-			if (isNaN(deltaSec)){
-				deltaSec = 1;
-			} else {
-				deltaSec = parseInt(deltaSec);
-			}
-			cursorFormat = cursorFormat.replace(/s+/, sec.replace(/./g,"s"));
-			if (isNaN(sec)){
-				sec = 0;
-			} else {
-				sec = parseInt(sec.replace(/^0(\d)/,"$1"));
-			}
+		if (isNaN(deltaMin)) {
+			deltaMin = 1;
+		} else {
+			deltaMin = parseInt(deltaMin);
 		}
-		if (isNaN(x) || x >= cursorFormat.length){
-			x = cursorFormat.length-1;
+		cursorFormat = cursorFormat.replace(/m+/, min.replace(/./g, "m"));
+		if (isNaN(min)) {
+			min = 0;
+		} else {
+			min = parseInt(min.replace(/^0(\d)/, "$1"));
 		}
-		var cursorToken = cursorFormat.charAt(x);
-
-		switch(cursorToken){
-			case 't':
-				if (ampm == this.flags.amSymbol){
-					ampm = this.flags.pmSymbol;
-				}
-				else if (ampm == this.flags.pmSymbol){
-					ampm = this.flags.amSymbol;
-				}
-				break;
-			default:
-				if (hour >= 1 && hour < 12 && ampm == this.flags.pmSymbol){
-					hour += 12;
-				}
-				if (hour == 12 && ampm == this.flags.amSymbol){
-					hour = 0;
-				}
-				switch(cursorToken){
-					case 's':
-						sec += deltaSec * direction;
-						while (sec < 0){
-							min--;
-							sec += 60;
-						}
-						while (sec >= 60){
-							min++;
-							sec -= 60;
-						}
-					case 'm':
-						if (cursorToken == 'm'){
-							min += deltaMin * direction;
-						}
-						while (min < 0){
-							hour--;
-							min += 60;
-						}
-						while (min >= 60){
-							hour++;
-							min -= 60;
-						}
-					case 'h':
-					case 'H':
-						if (cursorToken == 'h' || cursorToken == 'H'){
-							hour += deltaHour * direction;
-						}
-						while (hour < 0){
-							hour += 24;
-						}
-						while (hour >= 24){
-							hour -= 24;
-						}
-						break;
-					default: // should never get here
-						return;
-				}
-				if (hour >= 12){
-					ampm = this.flags.pmSymbol;
-					if (format.indexOf('h') >= 0 && hour >= 13){
-						hour -= 12;
-					}
-				} else {
-					ampm = this.flags.amSymbol;
-					if (format.indexOf('h') >= 0 && hour == 0){
-						hour = 12;
-					}
-				}
+	}
+	var sec = 0;
+	var deltaSec = 1;
+	if (secPos > 0) {
+		sec = val.replace(new RegExp(re), "$" + secPos);
+		if (dojo.lang.isString(this.delta)) {
+			deltaSec = this.delta.replace(new RegExp(re), "$" + secPos);
 		}
-
-		cursorFormat = format;
-		if (hour >= 0 && hour < 10 && format.search(/[hH]{2}/) >= 0){
-			hour = "0" + hour.toString();
+		if (isNaN(deltaSec)) {
+			deltaSec = 1;
+		} else {
+			deltaSec = parseInt(deltaSec);
 		}
-		if (hour >= 10 && cursorFormat.search(/[hH]{2}/) < 0 ){
-			cursorFormat = cursorFormat.replace(/(h|H)/, "$1$1");
+		cursorFormat = cursorFormat.replace(/s+/, sec.replace(/./g, "s"));
+		if (isNaN(sec)) {
+			sec = 0;
+		} else {
+			sec = parseInt(sec.replace(/^0(\d)/, "$1"));
 		}
-		if (min >= 0 && min < 10 && cursorFormat.search(/mm/) >= 0){
-			min = "0" + min.toString();
+	}
+	if (isNaN(x) || x >= cursorFormat.length) {
+		x = cursorFormat.length - 1;
+	}
+	var cursorToken = cursorFormat.charAt(x);
+	switch (cursorToken) {
+	  case "t":
+		if (ampm == this.flags.amSymbol) {
+			ampm = this.flags.pmSymbol;
+		} else {
+			if (ampm == this.flags.pmSymbol) {
+				ampm = this.flags.amSymbol;
+			}
 		}
-		if (min >= 10 && cursorFormat.search(/mm/) < 0 ){
-			cursorFormat = cursorFormat.replace(/m/, "$1$1");
+		break;
+	  default:
+		if (hour >= 1 && hour < 12 && ampm == this.flags.pmSymbol) {
+			hour += 12;
 		}
-		if (sec >= 0 && sec < 10 && cursorFormat.search(/ss/) >= 0){
-			sec = "0" + sec.toString();
+		if (hour == 12 && ampm == this.flags.amSymbol) {
+			hour = 0;
 		}
-		if (sec >= 10 && cursorFormat.search(/ss/) < 0 ){
-			cursorFormat = cursorFormat.replace(/s/, "$1$1");
+		switch (cursorToken) {
+		  case "s":
+			sec += deltaSec * direction;
+			while (sec < 0) {
+				min--;
+				sec += 60;
+			}
+			while (sec >= 60) {
+				min++;
+				sec -= 60;
+			}
+		  case "m":
+			if (cursorToken == "m") {
+				min += deltaMin * direction;
+			}
+			while (min < 0) {
+				hour--;
+				min += 60;
+			}
+			while (min >= 60) {
+				hour++;
+				min -= 60;
+			}
+		  case "h":
+		  case "H":
+			if (cursorToken == "h" || cursorToken == "H") {
+				hour += deltaHour * direction;
+			}
+			while (hour < 0) {
+				hour += 24;
+			}
+			while (hour >= 24) {
+				hour -= 24;
+			}
+			break;
+		  default:
+			return;
 		}
-		x = cursorFormat.indexOf(cursorToken);
-		if (x == -1){
-			x = format.length;
+		if (hour >= 12) {
+			ampm = this.flags.pmSymbol;
+			if (format.indexOf("h") >= 0 && hour >= 13) {
+				hour -= 12;
+			}
+		} else {
+			ampm = this.flags.amSymbol;
+			if (format.indexOf("h") >= 0 && hour == 0) {
+				hour = 12;
+			}
 		}
-		format = format.replace(/[hH]+/, hour);
-		format = format.replace(/m+/, min);
-		format = format.replace(/s+/, sec);
-		format = format.replace(/t/, ampm);
-		this.setValue(format);
-		if(x > format.length){ x = format.length; }
-		return x;
 	}
-});
+	cursorFormat = format;
+	if (hour >= 0 && hour < 10 && format.search(/[hH]{2}/) >= 0) {
+		hour = "0" + hour.toString();
+	}
+	if (hour >= 10 && cursorFormat.search(/[hH]{2}/) < 0) {
+		cursorFormat = cursorFormat.replace(/(h|H)/, "$1$1");
+	}
+	if (min >= 0 && min < 10 && cursorFormat.search(/mm/) >= 0) {
+		min = "0" + min.toString();
+	}
+	if (min >= 10 && cursorFormat.search(/mm/) < 0) {
+		cursorFormat = cursorFormat.replace(/m/, "$1$1");
+	}
+	if (sec >= 0 && sec < 10 && cursorFormat.search(/ss/) >= 0) {
+		sec = "0" + sec.toString();
+	}
+	if (sec >= 10 && cursorFormat.search(/ss/) < 0) {
+		cursorFormat = cursorFormat.replace(/s/, "$1$1");
+	}
+	x = cursorFormat.indexOf(cursorToken);
+	if (x == -1) {
+		x = format.length;
+	}
+	format = format.replace(/[hH]+/, hour);
+	format = format.replace(/m+/, min);
+	format = format.replace(/s+/, sec);
+	format = format.replace(/t/, ampm);
+	this.setValue(format);
+	if (x > format.length) {
+		x = format.length;
+	}
+	return x;
+}});
 
+
 __CPAN_FILE__ src/widget/Parse.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -50780,333 +31987,219 @@
 dojo.provide("dojo.widget.Parse");
 dojo.require("dojo.widget.Manager");
 dojo.require("dojo.dom");
-
-//
-// dojoML parser should be moved out of 'widget', codifying the difference between a 'component'
-// and a 'widget'. A 'component' being anything that can be generated from a tag.
-//
-// a particular dojoML tag would be handled by a registered tagHandler with a hook for a default handler
-// if the widget system is loaded, a widget builder would be attach itself as the default handler
-// 
-// widget tags are no longer registered themselves:
-// they are now arbitrarily namespaced, so we cannot register them all, and the non-prefixed portions 
-// are no longer guaranteed unique 
-// 
-// therefore dojo.widget.tags should go with this parser code out of the widget module
-//
-
-dojo.widget.Parse = function(/*Object*/fragment){
+dojo.widget.Parse = function (fragment) {
 	this.propertySetsList = [];
 	this.fragment = fragment;
-
-	this.createComponents = function(/*Object*/frag, /*Object*/parentComp){
+	this.createComponents = function (frag, parentComp) {
 		var comps = [];
 		var built = false;
-		// if we have items to parse/create at this level, do it!
-		try{
-			if(frag && frag.tagName && (frag != frag.nodeRef)){
-				
-				// these are in fact, not ever for widgets per-se anymore, 
-				// but for other markup elements (aka components)
+		try {
+			if (frag && frag.tagName && (frag != frag.nodeRef)) {
 				var djTags = dojo.widget.tags;
-				
-				// we split so that you can declare multiple 
-				// non-destructive components from the same ctor node
 				var tna = String(frag.tagName).split(";");
-				for(var x=0; x<tna.length; x++){
+				for (var x = 0; x < tna.length; x++) {
 					var ltn = tna[x].replace(/^\s+|\s+$/g, "").toLowerCase();
-					// FIXME: unsure what this does
 					frag.tagName = ltn;
 					var ret;
-					if(djTags[ltn]){
+					if (djTags[ltn]) {
 						built = true;
 						ret = djTags[ltn](frag, this, parentComp, frag.index);
 						comps.push(ret);
-					}else{
-						// we require a namespace prefix, default to dojo:
-						if(ltn.indexOf(":") == -1){
-							ltn = "dojo:"+ltn;
+					} else {
+						if (ltn.indexOf(":") == -1) {
+							ltn = "dojo:" + ltn;
 						}
-						// FIXME: handling failure condition correctly?
-						// ret = djTags[ltn](frag, this, parentComp, frag.index);
 						ret = dojo.widget.buildWidgetFromParseTree(ltn, frag, this, parentComp, frag.index);
-						if(ret){
+						if (ret) {
 							built = true;
 							comps.push(ret);
 						}
 					}
 				}
 			}
-		}catch(e){
+		}
+		catch (e) {
 			dojo.debug("dojo.widget.Parse: error:", e);
-			// note, commenting out the next line is breaking several widgets for me
-			// throw e;
-			// IE is such a pain sometimes
 		}
-		// if there's a sub-frag, build widgets from that too
-		if(!built){
+		if (!built) {
 			comps = comps.concat(this.createSubComponents(frag, parentComp));
 		}
-		return comps; // Array
-	}
-
-	this.createSubComponents = function(/*Object*/fragment, /*Object*/parentComp){
-		// summary: recurses over a raw JavaScript object structure,
-		// and calls the corresponding handler for its normalized tagName if it exists
-
+		return comps;
+	};
+	this.createSubComponents = function (fragment, parentComp) {
 		var frag, comps = [];
-		for(var item in fragment){
+		for (var item in fragment) {
 			frag = fragment[item];
-			if(frag && typeof frag == "object"
-				&&(frag!=fragment.nodeRef)
-				&&(frag!=fragment.tagName)
-				&&(!dojo.dom.isNode(frag))){// needed in IE when we have event.connected to the domNode
+			if (frag && typeof frag == "object" && (frag != fragment.nodeRef) && (frag != fragment.tagName) && (!dojo.dom.isNode(frag))) {
 				comps = comps.concat(this.createComponents(frag, parentComp));
 			}
 		}
-		return comps; // Array
-	}
-
-	this.parsePropertySets = function(/*Object*/fragment){
-		// summary: checks the top level of a raw JavaScript object
-		//	structure for any propertySets.  It stores an array of references to 
-		//	propertySets that it finds.
+		return comps;
+	};
+	this.parsePropertySets = function (fragment) {
 		return [];
-		/*
-		var propertySets = [];
-		for(var item in fragment){
-			if((fragment[item]["tagName"] == "dojo:propertyset")){
-				propertySets.push(fragment[item]);
-			}
-		}
-		// FIXME: should we store these propertySets somewhere for later retrieval
-		this.propertySetsList.push(propertySets);
-		return propertySets;
-		*/
-	}
-
-	this.parseProperties = function(/*Object*/fragment){
-		// summary: parseProperties checks a raw JavaScript object structure for
-		//	properties, and returns a hash of properties that it finds.
+	};
+	this.parseProperties = function (fragment) {
 		var properties = {};
-		for(var item in fragment){
-			// FIXME: need to check for undefined?
-			// case: its a tagName or nodeRef
-			if((fragment[item] == fragment.tagName)||(fragment[item] == fragment.nodeRef)){
-				// do nothing
-			}else{
+		for (var item in fragment) {
+			if ((fragment[item] == fragment.tagName) || (fragment[item] == fragment.nodeRef)) {
+			} else {
 				var frag = fragment[item];
-				if(frag.tagName && dojo.widget.tags[frag.tagName.toLowerCase()]){
-					// TODO: it isn't a property or property set, it's a fragment, 
-					// so do something else
-					// FIXME: needs to be a better/stricter check
-					// TODO: handle xlink:href for external property sets
-				}else if(frag[0] && frag[0].value!="" && frag[0].value!=null){
-					try{
-						// FIXME: need to allow more than one provider
-						if(item.toLowerCase() == "dataprovider"){
-							var _this = this;
-							this.getDataProvider(_this, frag[0].value);
-							properties.dataProvider = this.dataProvider;
+				if (frag.tagName && dojo.widget.tags[frag.tagName.toLowerCase()]) {
+				} else {
+					if (frag[0] && frag[0].value != "" && frag[0].value != null) {
+						try {
+							if (item.toLowerCase() == "dataprovider") {
+								var _this = this;
+								this.getDataProvider(_this, frag[0].value);
+								properties.dataProvider = this.dataProvider;
+							}
+							properties[item] = frag[0].value;
+							var nestedProperties = this.parseProperties(frag);
+							for (var property in nestedProperties) {
+								properties[property] = nestedProperties[property];
+							}
 						}
-						properties[item] = frag[0].value;
-						var nestedProperties = this.parseProperties(frag);
-						// FIXME: this kind of copying is expensive and inefficient!
-						for(var property in nestedProperties){
-							properties[property] = nestedProperties[property];
+						catch (e) {
+							dojo.debug(e);
 						}
-					}catch(e){ dojo.debug(e); }
+					}
 				}
-				switch(item.toLowerCase()){
-				case "checked":
-				case "disabled":
-					if (typeof properties[item] != "boolean"){ 
+				switch (item.toLowerCase()) {
+				  case "checked":
+				  case "disabled":
+					if (typeof properties[item] != "boolean") {
 						properties[item] = true;
 					}
 					break;
 				}
-			} 
+			}
 		}
-		return properties; // Object
-	}
-
-	this.getDataProvider = function(/*Object*/objRef, /*String*/dataUrl){
-		// FIXME: this is currently sync.  To make this async, we made need to move 
-		//this step into the widget ctor, so that it is loaded when it is needed 
-		// to populate the widget
-		dojo.io.bind({
-			url: dataUrl,
-			load: function(type, evaldObj){
-				if(type=="load"){
-					objRef.dataProvider = evaldObj;
-				}
-			},
-			mimetype: "text/javascript",
-			sync: true
-		});
-	}
-
-	this.getPropertySetById = function(propertySetId){
-		// summary: returns the propertySet that matches the provided id
-		for(var x = 0; x < this.propertySetsList.length; x++){
-			if(propertySetId == this.propertySetsList[x]["id"][0].value){
+		return properties;
+	};
+	this.getDataProvider = function (objRef, dataUrl) {
+		dojo.io.bind({url:dataUrl, load:function (type, evaldObj) {
+			if (type == "load") {
+				objRef.dataProvider = evaldObj;
+			}
+		}, mimetype:"text/javascript", sync:true});
+	};
+	this.getPropertySetById = function (propertySetId) {
+		for (var x = 0; x < this.propertySetsList.length; x++) {
+			if (propertySetId == this.propertySetsList[x]["id"][0].value) {
 				return this.propertySetsList[x];
 			}
 		}
-		return ""; // String
-	}
-	
-	//FIXME: doesn't use the componentType param?
-	this.getPropertySetsByType = function(componentType){
-		// summary: returns the propertySet(s) that match(es) the
-	 	// provided componentClass
-
+		return "";
+	};
+	this.getPropertySetsByType = function (componentType) {
 		var propertySets = [];
-		for(var x=0; x < this.propertySetsList.length; x++){
+		for (var x = 0; x < this.propertySetsList.length; x++) {
 			var cpl = this.propertySetsList[x];
-			var cpcc = cpl.componentClass || cpl.componentType || null; //FIXME: is componentType supposed to be an indirect reference?
+			var cpcc = cpl.componentClass || cpl.componentType || null;
 			var propertySetId = this.propertySetsList[x]["id"][0].value;
-			if(cpcc && (propertySetId == cpcc[0].value)){
+			if (cpcc && (propertySetId == cpcc[0].value)) {
 				propertySets.push(cpl);
 			}
 		}
-		return propertySets; // Array
-	}
-
-	this.getPropertySets = function(/*Object*/fragment){
-		// summary: returns the propertySet for a given component fragment
-
+		return propertySets;
+	};
+	this.getPropertySets = function (fragment) {
 		var ppl = "dojo:propertyproviderlist";
 		var propertySets = [];
 		var tagname = fragment.tagName;
-		if(fragment[ppl]){ 
+		if (fragment[ppl]) {
 			var propertyProviderIds = fragment[ppl].value.split(" ");
-			// FIXME: should the propertyProviderList attribute contain #
-			// 		  syntax for reference to ids or not?
-			// FIXME: need a better test to see if this is local or external
-			// FIXME: doesn't handle nested propertySets, or propertySets that
-			// 		  just contain information about css documents, etc.
-			for(var propertySetId in propertyProviderIds){
-				if((propertySetId.indexOf("..")==-1)&&(propertySetId.indexOf("://")==-1)){
-					// get a reference to a propertySet within the current parsed structure
+			for (var propertySetId in propertyProviderIds) {
+				if ((propertySetId.indexOf("..") == -1) && (propertySetId.indexOf("://") == -1)) {
 					var propertySet = this.getPropertySetById(propertySetId);
-					if(propertySet != ""){
+					if (propertySet != "") {
 						propertySets.push(propertySet);
 					}
-				}else{
-					// FIXME: add code to parse and return a propertySet from
-					// another document
-					// alex: is this even necessaray? Do we care? If so, why?
+				} else {
 				}
 			}
 		}
-		// we put the typed ones first so that the parsed ones override when
-		// iteration happens.
-		return this.getPropertySetsByType(tagname).concat(propertySets); // Array
-	}
-
-	this.createComponentFromScript = function(/*Node*/nodeRef, /*String*/componentName, /*Object*/properties, /*String?*/ns){
-		// summary:
-		// nodeRef: the node to be replaced... in the future, we might want to add 
-		// an alternative way to specify an insertion point
-		// componentName: the expected dojo widget name, i.e. Button of ContextMenu
-		// properties: an object of name value pairs
-		// ns: the namespace of the widget.  Defaults to "dojo"
-
-		properties.fastMixIn = true;			
-		// FIXME: we pulled it apart and now we put it back together ... 
+		return this.getPropertySetsByType(tagname).concat(propertySets);
+	};
+	this.createComponentFromScript = function (nodeRef, componentName, properties, ns) {
+		properties.fastMixIn = true;
 		var ltn = (ns || "dojo") + ":" + componentName.toLowerCase();
-		if(dojo.widget.tags[ltn]){
-			return [dojo.widget.tags[ltn](properties, this, null, null, properties)]; // Array
+		if (dojo.widget.tags[ltn]) {
+			return [dojo.widget.tags[ltn](properties, this, null, null, properties)];
 		}
-		return [dojo.widget.buildWidgetFromParseTree(ltn, properties, this, null, null, properties)]; // Array
+		return [dojo.widget.buildWidgetFromParseTree(ltn, properties, this, null, null, properties)];
+	};
+};
+dojo.widget._parser_collection = {"dojo":new dojo.widget.Parse()};
+dojo.widget.getParser = function (name) {
+	if (!name) {
+		name = "dojo";
 	}
-}
-
-dojo.widget._parser_collection = {"dojo": new dojo.widget.Parse() };
-
-dojo.widget.getParser = function(/*String?*/name){
-	if(!name){ name = "dojo"; }
-	if(!this._parser_collection[name]){
+	if (!this._parser_collection[name]) {
 		this._parser_collection[name] = new dojo.widget.Parse();
 	}
 	return this._parser_collection[name];
-}
-
-dojo.widget.createWidget = function(/*String*/name, /*String*/props, /*Node*/refNode, /*String*/position){
-	// summary: Creates widget
-	// name: The name of the widget to create with optional namespace prefix,
-	//	e.g."ns:widget", namespace defaults to "dojo".
-	// props: Key-Value pairs of properties of the widget
-	// refNode: If the position argument is specified, this node is used as
-	//	a reference for inserting this node into a DOM tree; else
-	//	the widget becomes the domNode
-	// position: The position to insert this widget's node relative to the
-	//	refNode argument
-
+};
+dojo.widget.createWidget = function (name, props, refNode, position) {
 	var isNode = false;
 	var isNameStr = (typeof name == "string");
-	if(isNameStr){
+	if (isNameStr) {
 		var pos = name.indexOf(":");
-		var ns = (pos > -1) ? name.substring(0,pos) : "dojo";
-		if(pos > -1){ name = name.substring(pos+1); }
+		var ns = (pos > -1) ? name.substring(0, pos) : "dojo";
+		if (pos > -1) {
+			name = name.substring(pos + 1);
+		}
 		var lowerCaseName = name.toLowerCase();
 		var namespacedName = ns + ":" + lowerCaseName;
-		isNode = (dojo.byId(name) && !dojo.widget.tags[namespacedName]); 
+		isNode = (dojo.byId(name) && !dojo.widget.tags[namespacedName]);
 	}
-
-	if((arguments.length == 1) && (isNode || !isNameStr)){
-		// we got a DOM node 
-		var xp = new dojo.xml.Parse(); 
-		// FIXME: we should try to find the parent! 
-		var tn = isNode ? dojo.byId(name) : name; 
-		return dojo.widget.getParser().createComponents(xp.parseElement(tn, null, true))[0]; 
+	if ((arguments.length == 1) && (isNode || !isNameStr)) {
+		var xp = new dojo.xml.Parse();
+		var tn = isNode ? dojo.byId(name) : name;
+		return dojo.widget.getParser().createComponents(xp.parseElement(tn, null, true))[0];
 	}
-
-	function fromScript(placeKeeperNode, name, props, ns){
-		props[namespacedName] = { 
-			dojotype: [{value: lowerCaseName}],
-			nodeRef: placeKeeperNode,
-			fastMixIn: true
-		};
+	function fromScript(placeKeeperNode, name, props, ns) {
+		props[namespacedName] = {dojotype:[{value:lowerCaseName}], nodeRef:placeKeeperNode, fastMixIn:true};
 		props.ns = ns;
 		return dojo.widget.getParser().createComponentFromScript(placeKeeperNode, name, props, ns);
 	}
-
-	props = props||{};
+	props = props || {};
 	var notRef = false;
 	var tn = null;
 	var h = dojo.render.html.capable;
-	if(h){
+	if (h) {
 		tn = document.createElement("span");
 	}
-	if(!refNode){
+	if (!refNode) {
 		notRef = true;
 		refNode = tn;
-		if(h){
+		if (h) {
 			dojo.body().appendChild(refNode);
 		}
-	}else if(position){
-		dojo.dom.insertAtPosition(tn, refNode, position);
-	}else{ // otherwise don't replace, but build in-place
-		tn = refNode;
+	} else {
+		if (position) {
+			dojo.dom.insertAtPosition(tn, refNode, position);
+		} else {
+			tn = refNode;
+		}
 	}
 	var widgetArray = fromScript(tn, name.toLowerCase(), props, ns);
-	if(	(!widgetArray)||(!widgetArray[0])||
-		(typeof widgetArray[0].widgetType == "undefined") ){
+	if ((!widgetArray) || (!widgetArray[0]) || (typeof widgetArray[0].widgetType == "undefined")) {
 		throw new Error("createWidget: Creation of \"" + name + "\" widget failed.");
 	}
-	try{
-		if(notRef && widgetArray[0].domNode.parentNode){
+	try {
+		if (notRef && widgetArray[0].domNode.parentNode) {
 			widgetArray[0].domNode.parentNode.removeChild(widgetArray[0].domNode);
 		}
-	}catch(e){
-		/* squelch for Safari */
+	}
+	catch (e) {
 		dojo.debug(e);
 	}
-	return widgetArray[0]; // Widget
-}
+	return widgetArray[0];
+};
 
+
 __CPAN_FILE__ src/widget/RemoteTabController.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -51119,46 +32212,22 @@
 */
 
 dojo.provide("dojo.widget.RemoteTabController");
-
-//Summary
-//Remote Tab Controller widget.  Can be located independently of a tab
-//container and control the selection of its tabs
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.TabContainer");
 dojo.require("dojo.event.*");
-
 dojo.deprecated("dojo.widget.RemoteTabController is slated for removal in 0.5; use PageController or TabController instead.", "0.5");
-
-dojo.widget.defineWidget(
-    "dojo.widget.RemoteTabController",
-    dojo.widget.TabController,
-	{
-        templateCssPath: dojo.uri.dojoUri("src/widget/templates/RemoteTabControl.css"),
-		templateString: '<div dojoAttachPoint="domNode" wairole="tablist"></div>',
-
-		"class": "dojoRemoteTabController",
-
-		// String
-		//	ID of page container that I connect to
-		tabContainer: "",
-	
-		postMixInProperties: function(){
-			this.containerId = this.tabContainer;
-			dojo.widget.RemoteTabController.superclass.postMixInProperties.apply(this, arguments);
-		},
-			
-		fillInTemplate: function() {
-			dojo.html.addClass(this.domNode, this["class"]);  // "class" is a reserved word in JS
-
-			if (this.tabContainer) {
-				dojo.addOnLoad(dojo.lang.hitch(this, "setupTabs"));
-			}
-
-			dojo.widget.RemoteTabController.superclass.fillInTemplate.apply(this, arguments);
-		}
+dojo.widget.defineWidget("dojo.widget.RemoteTabController", dojo.widget.TabController, {templateCssString:".dojoRemoteTabController {\n\tposition: relative;\n}\n\n.dojoRemoteTab {\n\tposition : relative;\n\tfloat : left;\n\tpadding-left : 9px;\n\tborder-bottom : 1px solid #6290d2;\n\tbackground : url(images/tab_left.gif) no-repeat left top;\n\tcursor: pointer;\n\twhite-space: nowrap;\n\tz-index: 3;\n}\n\n.dojoRemoteTab div {\n\tdisplay : block;\n\tpadding : 4px 15px 4px 6px;\n\tbackground : url(images/tab_top_right.gif) no-repeat right top;\n\tcolor : #333;\n\tfont-size : 90%;\n}\n\n.dojoRemoteTabPaneClose {\n\tposition : absolute;\n\tbottom : 0px;\n\tright : 6px;\n\theight : 12px;\n\twidth : 12px;\n\tbackground : url(images/tab_close.gif) no-repeat right top;\n}\n\n.dojoRemoteTabPaneCloseHover {\n\tbackground-image : url(images/tab_close_h.gif);\n}\n\n.dojoRemoteTabClose {\n\tdisplay : inline-block;\n\theight : 12px;\n\twidth : 12px;\n\tpadding : 0 12px 0 0;\n\tmargin : 0 -10px 0 10px;\n\tbackground : url(images/tab_close.gif) no-repeat right top;\n\tcursor : default;\n}\n\n.dojoRemoteTabCloseHover {\n\tbackground-image : url(images/tab_close_h.gif);\n}\n\n.dojoRemoteTab.current {\n\tpadding-bottom : 1px;\n\tborder-bottom : 0;\n\tbackground-position : 0 -150px;\n}\n\n.dojoRemoteTab.current div {\n\tpadding-bottom : 5px;\n\tmargin-bottom : -1px;\n\tbackground-position : 100% -150px;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/RemoteTabControl.css"), templateString:"<div dojoAttachPoint=\"domNode\" wairole=\"tablist\"></div>", "class":"dojoRemoteTabController", tabContainer:"", postMixInProperties:function () {
+	this.containerId = this.tabContainer;
+	dojo.widget.RemoteTabController.superclass.postMixInProperties.apply(this, arguments);
+}, fillInTemplate:function () {
+	dojo.html.addClass(this.domNode, this["class"]);
+	if (this.tabContainer) {
+		dojo.addOnLoad(dojo.lang.hitch(this, "setupTabs"));
 	}
-);
+	dojo.widget.RemoteTabController.superclass.fillInTemplate.apply(this, arguments);
+}});
 
+
 __CPAN_FILE__ src/widget/Toolbar.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -51171,939 +32240,718 @@
 */
 
 dojo.provide("dojo.widget.Toolbar");
-
 dojo.require("dojo.widget.*");
 dojo.require("dojo.html.style");
-
-/* ToolbarContainer
- *******************/
-dojo.widget.defineWidget(
-	"dojo.widget.ToolbarContainer",
-	dojo.widget.HtmlWidget,
-{
-	isContainer: true,
-
-	templateString: '<div class="toolbarContainer" dojoAttachPoint="containerNode"></div>',
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/Toolbar.css"),
-
-	getItem: function(name) {
-		if(name instanceof dojo.widget.ToolbarItem) { return name; }
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.Toolbar) {
-				var item = child.getItem(name);
-				if(item) { return item; }
+dojo.widget.defineWidget("dojo.widget.ToolbarContainer", dojo.widget.HtmlWidget, {isContainer:true, templateString:"<div class=\"toolbarContainer\" dojoAttachPoint=\"containerNode\"></div>", templateCssString:".toolbarContainer {\n\tborder-bottom : 0;\n\tbackground-color : #def;\n\tcolor : ButtonText;\n\tfont : Menu;\n\tbackground-image: url(images/toolbar-bg.gif);\n}\n\n.toolbar {\n\tpadding : 2px 4px;\n\tmin-height : 26px;\n\t_height : 26px;\n}\n\n.toolbarItem {\n\tfloat : left;\n\tpadding : 1px 2px;\n\tmargin : 0 2px 1px 0;\n\tcursor : pointer;\n}\n\n.toolbarItem.selected, .toolbarItem.down {\n\tmargin : 1px 1px 0 1px;\n\tpadding : 0px 1px;\n\tborder : 1px solid #bbf;\n\tbackground-color : #fafaff;\n}\n\n.toolbarButton img {\n\tvertical-align : bottom;\n}\n\n.toolbarButton span {\n\tline-height : 16px;\n\tvertical-align : middle;\n}\n\n.toolbarButton.hover {\n\tpadding : 0px 1px;\n\tborder : 1px solid #99c;\n}\n\n.toolbarItem.disabled {\n\topacity : 0.3;\n\tfilter : alpha(opacity=30);\n\tcursor : default;\n}\n\n.toolbarSeparator {\n\tcursor : default;\n}\n\n.toolbarFlexibleSpace {\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/Toolbar.css"), getItem:function (name) {
+	if (name instanceof dojo.widget.ToolbarItem) {
+		return name;
+	}
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.Toolbar) {
+			var item = child.getItem(name);
+			if (item) {
+				return item;
 			}
 		}
-		return null;
-	},
-
-	getItems: function() {
-		var items = [];
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.Toolbar) {
-				items = items.concat(child.getItems());
-			}
+	}
+	return null;
+}, getItems:function () {
+	var items = [];
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.Toolbar) {
+			items = items.concat(child.getItems());
 		}
-		return items;
-	},
-
-	enable: function() {
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.Toolbar) {
-				child.enable.apply(child, arguments);
-			}
+	}
+	return items;
+}, enable:function () {
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.Toolbar) {
+			child.enable.apply(child, arguments);
 		}
-	},
-
-	disable: function() {
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.Toolbar) {
-				child.disable.apply(child, arguments);
-			}
+	}
+}, disable:function () {
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.Toolbar) {
+			child.disable.apply(child, arguments);
 		}
-	},
-
-	select: function(name) {
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.Toolbar) {
-				child.select(arguments);
-			}
+	}
+}, select:function (name) {
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.Toolbar) {
+			child.select(arguments);
 		}
-	},
-
-	deselect: function(name) {
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.Toolbar) {
-				child.deselect(arguments);
-			}
+	}
+}, deselect:function (name) {
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.Toolbar) {
+			child.deselect(arguments);
 		}
-	},
-
-	getItemsState: function() {
-		var values = {};
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.Toolbar) {
-				dojo.lang.mixin(values, child.getItemsState());
-			}
+	}
+}, getItemsState:function () {
+	var values = {};
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.Toolbar) {
+			dojo.lang.mixin(values, child.getItemsState());
 		}
-		return values;
-	},
-
-	getItemsActiveState: function() {
-		var values = {};
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.Toolbar) {
-				dojo.lang.mixin(values, child.getItemsActiveState());
-			}
+	}
+	return values;
+}, getItemsActiveState:function () {
+	var values = {};
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.Toolbar) {
+			dojo.lang.mixin(values, child.getItemsActiveState());
 		}
-		return values;
-	},
-
-	getItemsSelectedState: function() {
-		var values = {};
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.Toolbar) {
-				dojo.lang.mixin(values, child.getItemsSelectedState());
-			}
+	}
+	return values;
+}, getItemsSelectedState:function () {
+	var values = {};
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.Toolbar) {
+			dojo.lang.mixin(values, child.getItemsSelectedState());
 		}
-		return values;
 	}
-});
-
-/* Toolbar
- **********/
-
-dojo.widget.defineWidget(
-	"dojo.widget.Toolbar",
-	dojo.widget.HtmlWidget,
-{
-	isContainer: true,
-
-	templateString: '<div class="toolbar" dojoAttachPoint="containerNode" unselectable="on" dojoOnMouseover="_onmouseover" dojoOnMouseout="_onmouseout" dojoOnClick="_onclick" dojoOnMousedown="_onmousedown" dojoOnMouseup="_onmouseup"></div>',
-
-	// given a node, tries to find it's toolbar item
-	_getItem: function(node) {
-		var start = new Date();
-		var widget = null;
-		while(node && node != this.domNode) {
-			if(dojo.html.hasClass(node, "toolbarItem")) {
-				var widgets = dojo.widget.manager.getWidgetsByFilter(function(w) { return w.domNode == node; });
-				if(widgets.length == 1) {
-					widget = widgets[0];
-					break;
-				} else if(widgets.length > 1) {
+	return values;
+}});
+dojo.widget.defineWidget("dojo.widget.Toolbar", dojo.widget.HtmlWidget, {isContainer:true, templateString:"<div class=\"toolbar\" dojoAttachPoint=\"containerNode\" unselectable=\"on\" dojoOnMouseover=\"_onmouseover\" dojoOnMouseout=\"_onmouseout\" dojoOnClick=\"_onclick\" dojoOnMousedown=\"_onmousedown\" dojoOnMouseup=\"_onmouseup\"></div>", _getItem:function (node) {
+	var start = new Date();
+	var widget = null;
+	while (node && node != this.domNode) {
+		if (dojo.html.hasClass(node, "toolbarItem")) {
+			var widgets = dojo.widget.manager.getWidgetsByFilter(function (w) {
+				return w.domNode == node;
+			});
+			if (widgets.length == 1) {
+				widget = widgets[0];
+				break;
+			} else {
+				if (widgets.length > 1) {
 					dojo.raise("Toolbar._getItem: More than one widget matches the node");
 				}
 			}
-			node = node.parentNode;
 		}
-		return widget;
-	},
-
-	_onmouseover: function(e) {
-		var widget = this._getItem(e.target);
-		if(widget && widget._onmouseover) { widget._onmouseover(e); }
-	},
-
-	_onmouseout: function(e) {
-		var widget = this._getItem(e.target);
-		if(widget && widget._onmouseout) { widget._onmouseout(e); }
-	},
-
-	_onclick: function(e) {
-		var widget = this._getItem(e.target);
-		if(widget && widget._onclick){
-			widget._onclick(e);
+		node = node.parentNode;
+	}
+	return widget;
+}, _onmouseover:function (e) {
+	var widget = this._getItem(e.target);
+	if (widget && widget._onmouseover) {
+		widget._onmouseover(e);
+	}
+}, _onmouseout:function (e) {
+	var widget = this._getItem(e.target);
+	if (widget && widget._onmouseout) {
+		widget._onmouseout(e);
+	}
+}, _onclick:function (e) {
+	var widget = this._getItem(e.target);
+	if (widget && widget._onclick) {
+		widget._onclick(e);
+	}
+}, _onmousedown:function (e) {
+	var widget = this._getItem(e.target);
+	if (widget && widget._onmousedown) {
+		widget._onmousedown(e);
+	}
+}, _onmouseup:function (e) {
+	var widget = this._getItem(e.target);
+	if (widget && widget._onmouseup) {
+		widget._onmouseup(e);
+	}
+}, addChild:function (item, pos, props) {
+	var widget = dojo.widget.ToolbarItem.make(item, null, props);
+	var ret = dojo.widget.Toolbar.superclass.addChild.call(this, widget, null, pos, null);
+	return ret;
+}, push:function () {
+	for (var i = 0; i < arguments.length; i++) {
+		this.addChild(arguments[i]);
+	}
+}, getItem:function (name) {
+	if (name instanceof dojo.widget.ToolbarItem) {
+		return name;
+	}
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.ToolbarItem && child._name == name) {
+			return child;
 		}
-	},
-
-	_onmousedown: function(e) {
-		var widget = this._getItem(e.target);
-		if(widget && widget._onmousedown) { widget._onmousedown(e); }
-	},
-
-	_onmouseup: function(e) {
-		var widget = this._getItem(e.target);
-		if(widget && widget._onmouseup) { widget._onmouseup(e); }
-	},
-
-	addChild: function(item, pos, props) {
-		var widget = dojo.widget.ToolbarItem.make(item, null, props);
-		var ret = dojo.widget.Toolbar.superclass.addChild.call(this, widget, null, pos, null);
-		return ret;
-	},
-
-	push: function() {
-		for(var i = 0; i < arguments.length; i++) {
-			this.addChild(arguments[i]);
+	}
+	return null;
+}, getItems:function () {
+	var items = [];
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.ToolbarItem) {
+			items.push(child);
 		}
-	},
-
-	getItem: function(name) {
-		if(name instanceof dojo.widget.ToolbarItem) { return name; }
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem
-				&& child._name == name) { return child; }
+	}
+	return items;
+}, getItemsState:function () {
+	var values = {};
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.ToolbarItem) {
+			values[child._name] = {selected:child._selected, enabled:!child.disabled};
 		}
-		return null;
-	},
-
-	getItems: function() {
-		var items = [];
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem) {
-				items.push(child);
-			}
+	}
+	return values;
+}, getItemsActiveState:function () {
+	var values = this.getItemsState();
+	for (var item in values) {
+		values[item] = values[item].enabled;
+	}
+	return values;
+}, getItemsSelectedState:function () {
+	var values = this.getItemsState();
+	for (var item in values) {
+		values[item] = values[item].selected;
+	}
+	return values;
+}, enable:function () {
+	var items = arguments.length ? arguments : this.children;
+	for (var i = 0; i < items.length; i++) {
+		var child = this.getItem(items[i]);
+		if (child instanceof dojo.widget.ToolbarItem) {
+			child.enable(false, true);
 		}
-		return items;
-	},
-
-	getItemsState: function() {
-		var values = {};
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem) {
-				values[child._name] = {
-					selected: child._selected,
-					enabled: !child.disabled
-				};
-			}
+	}
+}, disable:function () {
+	var items = arguments.length ? arguments : this.children;
+	for (var i = 0; i < items.length; i++) {
+		var child = this.getItem(items[i]);
+		if (child instanceof dojo.widget.ToolbarItem) {
+			child.disable();
 		}
-		return values;
-	},
-
-	getItemsActiveState: function() {
-		var values = this.getItemsState();
-		for(var item in values) {
-			values[item] = values[item].enabled;
+	}
+}, select:function () {
+	for (var i = 0; i < arguments.length; i++) {
+		var name = arguments[i];
+		var item = this.getItem(name);
+		if (item) {
+			item.select();
 		}
-		return values;
-	},
-
-	getItemsSelectedState: function() {
-		var values = this.getItemsState();
-		for(var item in values) {
-			values[item] = values[item].selected;
+	}
+}, deselect:function () {
+	for (var i = 0; i < arguments.length; i++) {
+		var name = arguments[i];
+		var item = this.getItem(name);
+		if (item) {
+			item.disable();
 		}
-		return values;
-	},
-
-	enable: function() {
-		var items = arguments.length ? arguments : this.children;
-		for(var i = 0; i < items.length; i++) {
-			var child = this.getItem(items[i]);
-			if(child instanceof dojo.widget.ToolbarItem) {
-				child.enable(false, true);
+	}
+}, setValue:function () {
+	for (var i = 0; i < arguments.length; i += 2) {
+		var name = arguments[i], value = arguments[i + 1];
+		var item = this.getItem(name);
+		if (item) {
+			if (item instanceof dojo.widget.ToolbarItem) {
+				item.setValue(value);
 			}
 		}
-	},
-
-	disable: function() {
-		var items = arguments.length ? arguments : this.children;
-		for(var i = 0; i < items.length; i++) {
-			var child = this.getItem(items[i]);
-			if(child instanceof dojo.widget.ToolbarItem) {
-				child.disable();
-			}
+	}
+}});
+dojo.widget.defineWidget("dojo.widget.ToolbarItem", dojo.widget.HtmlWidget, {templateString:"<span unselectable=\"on\" class=\"toolbarItem\"></span>", _name:null, getName:function () {
+	return this._name;
+}, setName:function (value) {
+	return (this._name = value);
+}, getValue:function () {
+	return this.getName();
+}, setValue:function (value) {
+	return this.setName(value);
+}, _selected:false, isSelected:function () {
+	return this._selected;
+}, setSelected:function (is, force, preventEvent) {
+	if (!this._toggleItem && !force) {
+		return;
+	}
+	is = Boolean(is);
+	if (force || !this.disabled && this._selected != is) {
+		this._selected = is;
+		this.update();
+		if (!preventEvent) {
+			this._fireEvent(is ? "onSelect" : "onDeselect");
+			this._fireEvent("onChangeSelect");
 		}
-	},
-
-	select: function() {
-		for(var i = 0; i < arguments.length; i++) {
-			var name = arguments[i];
-			var item = this.getItem(name);
-			if(item) { item.select(); }
+	}
+}, select:function (force, preventEvent) {
+	return this.setSelected(true, force, preventEvent);
+}, deselect:function (force, preventEvent) {
+	return this.setSelected(false, force, preventEvent);
+}, _toggleItem:false, isToggleItem:function () {
+	return this._toggleItem;
+}, setToggleItem:function (value) {
+	this._toggleItem = Boolean(value);
+}, toggleSelected:function (force) {
+	return this.setSelected(!this._selected, force);
+}, isEnabled:function () {
+	return !this.disabled;
+}, setEnabled:function (is, force, preventEvent) {
+	is = Boolean(is);
+	if (force || this.disabled == is) {
+		this.disabled = !is;
+		this.update();
+		if (!preventEvent) {
+			this._fireEvent(this.disabled ? "onDisable" : "onEnable");
+			this._fireEvent("onChangeEnabled");
 		}
-	},
-
-	deselect: function() {
-		for(var i = 0; i < arguments.length; i++) {
-			var name = arguments[i];
-			var item = this.getItem(name);
-			if(item) { item.disable(); }
-		}
-	},
-
-	setValue: function() {
-		for(var i = 0; i < arguments.length; i += 2) {
-			var name = arguments[i], value = arguments[i+1];
-			var item = this.getItem(name);
-			if(item) {
-				if(item instanceof dojo.widget.ToolbarItem) {
-					item.setValue(value);
-				}
-			}
-		}
 	}
-});
-
-/* ToolbarItem hierarchy:
-	- ToolbarItem
-		- ToolbarButton
-		- ToolbarDialog
-			- ToolbarMenu
-		- ToolbarSeparator
-			- ToolbarSpace
-				- ToolbarFlexibleSpace
-*/
-
-
-/* ToolbarItem
- **************/
-dojo.widget.defineWidget(
-	"dojo.widget.ToolbarItem",
-	dojo.widget.HtmlWidget,
-{
-	templateString: '<span unselectable="on" class="toolbarItem"></span>',
-
-	_name: null,
-	getName: function() { return this._name; },
-	setName: function(value) { return (this._name = value); },
-	getValue: function() { return this.getName(); },
-	setValue: function(value) { return this.setName(value); },
-
-	_selected: false,
-	isSelected: function() { return this._selected; },
-	setSelected: function(is, force, preventEvent) {
-		if(!this._toggleItem && !force) { return; }
-		is = Boolean(is);
-		if(force || !this.disabled && this._selected != is) {
-			this._selected = is;
-			this.update();
-			if(!preventEvent) {
-				this._fireEvent(is ? "onSelect" : "onDeselect");
-				this._fireEvent("onChangeSelect");
-			}
+	return !this.disabled;
+}, enable:function (force, preventEvent) {
+	return this.setEnabled(true, force, preventEvent);
+}, disable:function (force, preventEvent) {
+	return this.setEnabled(false, force, preventEvent);
+}, toggleEnabled:function (force, preventEvent) {
+	return this.setEnabled(this.disabled, force, preventEvent);
+}, _icon:null, getIcon:function () {
+	return this._icon;
+}, setIcon:function (value) {
+	var icon = dojo.widget.Icon.make(value);
+	if (this._icon) {
+		this._icon.setIcon(icon);
+	} else {
+		this._icon = icon;
+	}
+	var iconNode = this._icon.getNode();
+	if (iconNode.parentNode != this.domNode) {
+		if (this.domNode.hasChildNodes()) {
+			this.domNode.insertBefore(iconNode, this.domNode.firstChild);
+		} else {
+			this.domNode.appendChild(iconNode);
 		}
-	},
-	select: function(force, preventEvent) {
-		return this.setSelected(true, force, preventEvent);
-	},
-	deselect: function(force, preventEvent) {
-		return this.setSelected(false, force, preventEvent);
-	},
-
-	_toggleItem: false,
-	isToggleItem: function() { return this._toggleItem; },
-	setToggleItem: function(value) { this._toggleItem = Boolean(value); },
-
-	toggleSelected: function(force) {
-		return this.setSelected(!this._selected, force);
-	},
-
-	isEnabled: function() { return !this.disabled; },
-	setEnabled: function(is, force, preventEvent) {
-		is = Boolean(is);
-		if(force || this.disabled == is) {
-			this.disabled = !is;
-			this.update();
-			if(!preventEvent) {
-				this._fireEvent(this.disabled ? "onDisable" : "onEnable");
-				this._fireEvent("onChangeEnabled");
-			}
-		}
-		return !this.disabled;
-	},
-	enable: function(force, preventEvent) {
-		return this.setEnabled(true, force, preventEvent);
-	},
-	disable: function(force, preventEvent) {
-		return this.setEnabled(false, force, preventEvent);
-	},
-	toggleEnabled: function(force, preventEvent) {
-		return this.setEnabled(this.disabled, force, preventEvent);
-	},
-
-	_icon: null,
-	getIcon: function() { return this._icon; },
-	setIcon: function(value) {
-		var icon = dojo.widget.Icon.make(value);
-		if(this._icon) {
-			this._icon.setIcon(icon);
+	}
+	return this._icon;
+}, _label:"", getLabel:function () {
+	return this._label;
+}, setLabel:function (value) {
+	var ret = (this._label = value);
+	if (!this.labelNode) {
+		this.labelNode = document.createElement("span");
+		this.domNode.appendChild(this.labelNode);
+	}
+	this.labelNode.innerHTML = "";
+	this.labelNode.appendChild(document.createTextNode(this._label));
+	this.update();
+	return ret;
+}, update:function () {
+	if (this.disabled) {
+		this._selected = false;
+		dojo.html.addClass(this.domNode, "disabled");
+		dojo.html.removeClass(this.domNode, "down");
+		dojo.html.removeClass(this.domNode, "hover");
+	} else {
+		dojo.html.removeClass(this.domNode, "disabled");
+		if (this._selected) {
+			dojo.html.addClass(this.domNode, "selected");
 		} else {
-			this._icon = icon;
+			dojo.html.removeClass(this.domNode, "selected");
 		}
-		var iconNode = this._icon.getNode();
-		if(iconNode.parentNode != this.domNode) {
-			if(this.domNode.hasChildNodes()) {
-				this.domNode.insertBefore(iconNode, this.domNode.firstChild);
-			} else {
-				this.domNode.appendChild(iconNode);
-			}
-		}
-		return this._icon;
-	},
-
-	// TODO: update the label node (this.labelNode?)
-	_label: "",
-	getLabel: function() { return this._label; },
-	setLabel: function(value) {
-		var ret = (this._label = value);
-		if(!this.labelNode) {
-			this.labelNode = document.createElement("span");
-			this.domNode.appendChild(this.labelNode);
-		}
-		this.labelNode.innerHTML = "";
-		this.labelNode.appendChild(document.createTextNode(this._label));
-		this.update();
-		return ret;
-	},
-
-	// fired from: setSelected, setEnabled, setLabel
-	update: function() {
-		if(this.disabled) {
-			this._selected = false;
-			dojo.html.addClass(this.domNode, "disabled");
-			dojo.html.removeClass(this.domNode, "down");
-			dojo.html.removeClass(this.domNode, "hover");
+	}
+	this._updateIcon();
+}, _updateIcon:function () {
+	if (this._icon) {
+		if (this.disabled) {
+			this._icon.disable();
 		} else {
-			dojo.html.removeClass(this.domNode, "disabled");
-			if(this._selected) {
-				dojo.html.addClass(this.domNode, "selected");
+			if (this._cssHover) {
+				this._icon.hover();
 			} else {
-				dojo.html.removeClass(this.domNode, "selected");
-			}
-		}
-		this._updateIcon();
-	},
-
-	_updateIcon: function() {
-		if(this._icon) {
-			if(this.disabled) {
-				this._icon.disable();
-			} else {
-				if(this._cssHover) {
-					this._icon.hover();
-				} else if(this._selected) {
+				if (this._selected) {
 					this._icon.select();
 				} else {
 					this._icon.enable();
 				}
 			}
 		}
-	},
-
-	_fireEvent: function(evt) {
-		if(typeof this[evt] == "function") {
-			var args = [this];
-			for(var i = 1; i < arguments.length; i++) {
-				args.push(arguments[i]);
-			}
-			this[evt].apply(this, args);
+	}
+}, _fireEvent:function (evt) {
+	if (typeof this[evt] == "function") {
+		var args = [this];
+		for (var i = 1; i < arguments.length; i++) {
+			args.push(arguments[i]);
 		}
-	},
-
-	_onmouseover: function(e) {
-		if(this.disabled) { return; }
-		dojo.html.addClass(this.domNode, "hover");
-		this._fireEvent("onMouseOver");
-	},
-
-	_onmouseout: function(e) {
-		dojo.html.removeClass(this.domNode, "hover");
-		dojo.html.removeClass(this.domNode, "down");
-		if(!this._selected) {
-			dojo.html.removeClass(this.domNode, "selected");
+		this[evt].apply(this, args);
+	}
+}, _onmouseover:function (e) {
+	if (this.disabled) {
+		return;
+	}
+	dojo.html.addClass(this.domNode, "hover");
+	this._fireEvent("onMouseOver");
+}, _onmouseout:function (e) {
+	dojo.html.removeClass(this.domNode, "hover");
+	dojo.html.removeClass(this.domNode, "down");
+	if (!this._selected) {
+		dojo.html.removeClass(this.domNode, "selected");
+	}
+	this._fireEvent("onMouseOut");
+}, _onclick:function (e) {
+	if (!this.disabled && !this._toggleItem) {
+		this._fireEvent("onClick");
+	}
+}, _onmousedown:function (e) {
+	if (e.preventDefault) {
+		e.preventDefault();
+	}
+	if (this.disabled) {
+		return;
+	}
+	dojo.html.addClass(this.domNode, "down");
+	if (this._toggleItem) {
+		if (this.parent.preventDeselect && this._selected) {
+			return;
 		}
-		this._fireEvent("onMouseOut");
-	},
-
-	_onclick: function(e) {
-		// dojo.debug("widget:", this.widgetType, ":", this.getName(), ", disabled:", this.disabled);
-		if(!this.disabled && !this._toggleItem) {
-			this._fireEvent("onClick");
-		}
-	},
-
-	_onmousedown: function(e) {
-		if(e.preventDefault) { e.preventDefault(); }
-		if(this.disabled) { return; }
-		dojo.html.addClass(this.domNode, "down");
-		if(this._toggleItem) {
-			if(this.parent.preventDeselect && this._selected) {
-				return;
-			}
-			this.toggleSelected();
-		}
-		this._fireEvent("onMouseDown");
-	},
-
-	_onmouseup: function(e) {
-		dojo.html.removeClass(this.domNode, "down");
-		this._fireEvent("onMouseUp");
-	},
-
-	onClick: function() { },
-	onMouseOver: function() { },
-	onMouseOut: function() { },
-	onMouseDown: function() { },
-	onMouseUp: function() { },
-
-	fillInTemplate: function(args, frag) {
-		if(args.name) { this._name = args.name; }
-		if(args.selected) { this.select(); }
-		if(args.disabled) { this.disable(); }
-		if(args.label) { this.setLabel(args.label); }
-		if(args.icon) { this.setIcon(args.icon); }
-		if(args.toggleitem||args.toggleItem) { this.setToggleItem(true); }
+		this.toggleSelected();
 	}
-});
-
-dojo.widget.ToolbarItem.make = function(wh, whIsType, props) {
+	this._fireEvent("onMouseDown");
+}, _onmouseup:function (e) {
+	dojo.html.removeClass(this.domNode, "down");
+	this._fireEvent("onMouseUp");
+}, onClick:function () {
+}, onMouseOver:function () {
+}, onMouseOut:function () {
+}, onMouseDown:function () {
+}, onMouseUp:function () {
+}, fillInTemplate:function (args, frag) {
+	if (args.name) {
+		this._name = args.name;
+	}
+	if (args.selected) {
+		this.select();
+	}
+	if (args.disabled) {
+		this.disable();
+	}
+	if (args.label) {
+		this.setLabel(args.label);
+	}
+	if (args.icon) {
+		this.setIcon(args.icon);
+	}
+	if (args.toggleitem || args.toggleItem) {
+		this.setToggleItem(true);
+	}
+}});
+dojo.widget.ToolbarItem.make = function (wh, whIsType, props) {
 	var item = null;
-
-	if(wh instanceof Array) {
+	if (wh instanceof Array) {
 		item = dojo.widget.createWidget("ToolbarButtonGroup", props);
 		item.setName(wh[0]);
-		for(var i = 1; i < wh.length; i++) {
+		for (var i = 1; i < wh.length; i++) {
 			item.addChild(wh[i]);
 		}
-	} else if(wh instanceof dojo.widget.ToolbarItem) {
-		item = wh;
-	} else if(wh instanceof dojo.uri.Uri) {
-		item = dojo.widget.createWidget("ToolbarButton",
-			dojo.lang.mixin(props||{}, {icon: new dojo.widget.Icon(wh.toString())}));
-	} else if(whIsType) {
-		item = dojo.widget.createWidget(wh, props);
-	} else if(typeof wh == "string" || wh instanceof String) {
-		switch(wh.charAt(0)) {
-			case "|":
-			case "-":
-			case "/":
-				item = dojo.widget.createWidget("ToolbarSeparator", props);
-				break;
-			case " ":
-				if(wh.length == 1) {
-					item = dojo.widget.createWidget("ToolbarSpace", props);
+	} else {
+		if (wh instanceof dojo.widget.ToolbarItem) {
+			item = wh;
+		} else {
+			if (wh instanceof dojo.uri.Uri) {
+				item = dojo.widget.createWidget("ToolbarButton", dojo.lang.mixin(props || {}, {icon:new dojo.widget.Icon(wh.toString())}));
+			} else {
+				if (whIsType) {
+					item = dojo.widget.createWidget(wh, props);
 				} else {
-					item = dojo.widget.createWidget("ToolbarFlexibleSpace", props);
+					if (typeof wh == "string" || wh instanceof String) {
+						switch (wh.charAt(0)) {
+						  case "|":
+						  case "-":
+						  case "/":
+							item = dojo.widget.createWidget("ToolbarSeparator", props);
+							break;
+						  case " ":
+							if (wh.length == 1) {
+								item = dojo.widget.createWidget("ToolbarSpace", props);
+							} else {
+								item = dojo.widget.createWidget("ToolbarFlexibleSpace", props);
+							}
+							break;
+						  default:
+							if (/\.(gif|jpg|jpeg|png)$/i.test(wh)) {
+								item = dojo.widget.createWidget("ToolbarButton", dojo.lang.mixin(props || {}, {icon:new dojo.widget.Icon(wh.toString())}));
+							} else {
+								item = dojo.widget.createWidget("ToolbarButton", dojo.lang.mixin(props || {}, {label:wh.toString()}));
+							}
+						}
+					} else {
+						if (wh && wh.tagName && /^img$/i.test(wh.tagName)) {
+							item = dojo.widget.createWidget("ToolbarButton", dojo.lang.mixin(props || {}, {icon:wh}));
+						} else {
+							item = dojo.widget.createWidget("ToolbarButton", dojo.lang.mixin(props || {}, {label:wh.toString()}));
+						}
+					}
 				}
-				break;
-			default:
-				if(/\.(gif|jpg|jpeg|png)$/i.test(wh)) {
-					item = dojo.widget.createWidget("ToolbarButton",
-						dojo.lang.mixin(props||{}, {icon: new dojo.widget.Icon(wh.toString())}));
-				} else {
-					item = dojo.widget.createWidget("ToolbarButton",
-						dojo.lang.mixin(props||{}, {label: wh.toString()}));
-				}
+			}
 		}
-	} else if(wh && wh.tagName && /^img$/i.test(wh.tagName)) {
-		item = dojo.widget.createWidget("ToolbarButton",
-			dojo.lang.mixin(props||{}, {icon: wh}));
-	} else {
-		item = dojo.widget.createWidget("ToolbarButton",
-			dojo.lang.mixin(props||{}, {label: wh.toString()}));
 	}
 	return item;
-}
-
-/* ToolbarButtonGroup
- *********************/
-dojo.widget.defineWidget(
-	"dojo.widget.ToolbarButtonGroup",
-	dojo.widget.ToolbarItem,
-{
-	isContainer: true,
-
-	templateString: '<span unselectable="on" class="toolbarButtonGroup" dojoAttachPoint="containerNode"></span>',
-
-	// if a button has the same name, it will be selected
-	// if this is set to a number, the button at that index will be selected
-	defaultButton: "",
-
-    postCreate: function() {
-        for (var i = 0; i < this.children.length; i++) {
-            this._injectChild(this.children[i]);
-        }
-    },
-
-	addChild: function(item, pos, props) {
-		var widget = dojo.widget.ToolbarItem.make(item, null, dojo.lang.mixin(props||{}, {toggleItem:true}));
-		var ret = dojo.widget.ToolbarButtonGroup.superclass.addChild.call(this, widget, null, pos, null);
-        this._injectChild(widget);
-        return ret;
-    },
-
-    _injectChild: function(widget) {
-        dojo.event.connect(widget, "onSelect", this, "onChildSelected");
-        dojo.event.connect(widget, "onDeselect", this, "onChildDeSelected");
-        if(widget._name == this.defaultButton
-			|| (typeof this.defaultButton == "number"
-			&& this.children.length-1 == this.defaultButton)) {
-			widget.select(false, true);
+};
+dojo.widget.defineWidget("dojo.widget.ToolbarButtonGroup", dojo.widget.ToolbarItem, {isContainer:true, templateString:"<span unselectable=\"on\" class=\"toolbarButtonGroup\" dojoAttachPoint=\"containerNode\"></span>", defaultButton:"", postCreate:function () {
+	for (var i = 0; i < this.children.length; i++) {
+		this._injectChild(this.children[i]);
+	}
+}, addChild:function (item, pos, props) {
+	var widget = dojo.widget.ToolbarItem.make(item, null, dojo.lang.mixin(props || {}, {toggleItem:true}));
+	var ret = dojo.widget.ToolbarButtonGroup.superclass.addChild.call(this, widget, null, pos, null);
+	this._injectChild(widget);
+	return ret;
+}, _injectChild:function (widget) {
+	dojo.event.connect(widget, "onSelect", this, "onChildSelected");
+	dojo.event.connect(widget, "onDeselect", this, "onChildDeSelected");
+	if (widget._name == this.defaultButton || (typeof this.defaultButton == "number" && this.children.length - 1 == this.defaultButton)) {
+		widget.select(false, true);
+	}
+}, getItem:function (name) {
+	if (name instanceof dojo.widget.ToolbarItem) {
+		return name;
+	}
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.ToolbarItem && child._name == name) {
+			return child;
 		}
-	},
-
-	getItem: function(name) {
-		if(name instanceof dojo.widget.ToolbarItem) { return name; }
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem
-				&& child._name == name) { return child; }
+	}
+	return null;
+}, getItems:function () {
+	var items = [];
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.ToolbarItem) {
+			items.push(child);
 		}
-		return null;
-	},
-
-	getItems: function() {
-		var items = [];
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem) {
-				items.push(child);
+	}
+	return items;
+}, onChildSelected:function (e) {
+	this.select(e._name);
+}, onChildDeSelected:function (e) {
+	this._fireEvent("onChangeSelect", this._value);
+}, enable:function (force, preventEvent) {
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.ToolbarItem) {
+			child.enable(force, preventEvent);
+			if (child._name == this._value) {
+				child.select(force, preventEvent);
 			}
 		}
-		return items;
-	},
-
-	onChildSelected: function(e) {
-		this.select(e._name);
-	},
-
-	onChildDeSelected: function(e) {
-		this._fireEvent("onChangeSelect", this._value);
-	},
-
-	enable: function(force, preventEvent) {
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem) {
-				child.enable(force, preventEvent);
-				if(child._name == this._value) {
-					child.select(force, preventEvent);
-				}
-			}
+	}
+}, disable:function (force, preventEvent) {
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.ToolbarItem) {
+			child.disable(force, preventEvent);
 		}
-	},
-
-	disable: function(force, preventEvent) {
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem) {
-				child.disable(force, preventEvent);
+	}
+}, _value:"", getValue:function () {
+	return this._value;
+}, select:function (name, force, preventEvent) {
+	for (var i = 0; i < this.children.length; i++) {
+		var child = this.children[i];
+		if (child instanceof dojo.widget.ToolbarItem) {
+			if (child._name == name) {
+				child.select(force, preventEvent);
+				this._value = name;
+			} else {
+				child.deselect(true, true);
 			}
 		}
-	},
-
-	_value: "",
-	getValue: function() { return this._value; },
-
-	select: function(name, force, preventEvent) {
-		for(var i = 0; i < this.children.length; i++) {
-			var child = this.children[i];
-			if(child instanceof dojo.widget.ToolbarItem) {
-				if(child._name == name) {
-					child.select(force, preventEvent);
-					this._value = name;
-				} else {
-					child.deselect(true, true);
-				}
-			}
-		}
-		if(!preventEvent) {
-			this._fireEvent("onSelect", this._value);
-			this._fireEvent("onChangeSelect", this._value);
-		}
-	},
-	setValue: this.select,
-
-	preventDeselect: false // if true, once you select one, you can't have none selected
-});
-
-/* ToolbarButton
- ***********************/
-dojo.widget.defineWidget(
-	"dojo.widget.ToolbarButton",
-	dojo.widget.ToolbarItem,
-{
-	fillInTemplate: function(args, frag) {
-		dojo.widget.ToolbarButton.superclass.fillInTemplate.call(this, args, frag);
-		dojo.html.addClass(this.domNode, "toolbarButton");
-		if(this._icon) {
-			this.setIcon(this._icon);
-		}
-		if(this._label) {
-			this.setLabel(this._label);
-		}
-
-		if(!this._name) {
-			if(this._label) {
-				this.setName(this._label);
-			} else if(this._icon) {
+	}
+	if (!preventEvent) {
+		this._fireEvent("onSelect", this._value);
+		this._fireEvent("onChangeSelect", this._value);
+	}
+}, setValue:this.select, preventDeselect:false});
+dojo.widget.defineWidget("dojo.widget.ToolbarButton", dojo.widget.ToolbarItem, {fillInTemplate:function (args, frag) {
+	dojo.widget.ToolbarButton.superclass.fillInTemplate.call(this, args, frag);
+	dojo.html.addClass(this.domNode, "toolbarButton");
+	if (this._icon) {
+		this.setIcon(this._icon);
+	}
+	if (this._label) {
+		this.setLabel(this._label);
+	}
+	if (!this._name) {
+		if (this._label) {
+			this.setName(this._label);
+		} else {
+			if (this._icon) {
 				var src = this._icon.getSrc("enabled").match(/[\/^]([^\.\/]+)\.(gif|jpg|jpeg|png)$/i);
-				if(src) { this.setName(src[1]); }
+				if (src) {
+					this.setName(src[1]);
+				}
 			} else {
 				this._name = this._widgetId;
 			}
 		}
 	}
-});
-
-/* ToolbarDialog
- **********************/
-dojo.widget.defineWidget(
-	"dojo.widget.ToolbarDialog",
-	dojo.widget.ToolbarButton,
-{
-	fillInTemplate: function (args, frag) {
-		dojo.widget.ToolbarDialog.superclass.fillInTemplate.call(this, args, frag);
-		dojo.event.connect(this, "onSelect", this, "showDialog");
-		dojo.event.connect(this, "onDeselect", this, "hideDialog");
-	},
-
-	showDialog: function (e) {
-		dojo.lang.setTimeout(dojo.event.connect, 1, document, "onmousedown", this, "deselect");
-	},
-
-	hideDialog: function (e) {
-		dojo.event.disconnect(document, "onmousedown", this, "deselect");
-	}
-
-});
-
-/* ToolbarMenu
- **********************/
-dojo.widget.defineWidget(
-	"dojo.widget.ToolbarMenu",
-	dojo.widget.ToolbarDialog,
-	{}
-);
-
-/* ToolbarMenuItem
- ******************/
-dojo.widget.ToolbarMenuItem = function() {
-}
-
-/* ToolbarSeparator
- **********************/
-dojo.widget.defineWidget(
-	"dojo.widget.ToolbarSeparator",
-	dojo.widget.ToolbarItem,
-{
-	templateString: '<span unselectable="on" class="toolbarItem toolbarSeparator"></span>',
-
-	defaultIconPath: new dojo.uri.dojoUri("src/widget/templates/buttons/sep.gif"),
-
-	fillInTemplate: function(args, frag, skip) {
-		dojo.widget.ToolbarSeparator.superclass.fillInTemplate.call(this, args, frag);
-		this._name = this.widgetId;
-		if(!skip) {
-			if(!this._icon) {
-				this.setIcon(this.defaultIconPath);
-			}
-			this.domNode.appendChild(this._icon.getNode());
+}});
+dojo.widget.defineWidget("dojo.widget.ToolbarDialog", dojo.widget.ToolbarButton, {fillInTemplate:function (args, frag) {
+	dojo.widget.ToolbarDialog.superclass.fillInTemplate.call(this, args, frag);
+	dojo.event.connect(this, "onSelect", this, "showDialog");
+	dojo.event.connect(this, "onDeselect", this, "hideDialog");
+}, showDialog:function (e) {
+	dojo.lang.setTimeout(dojo.event.connect, 1, document, "onmousedown", this, "deselect");
+}, hideDialog:function (e) {
+	dojo.event.disconnect(document, "onmousedown", this, "deselect");
+}});
+dojo.widget.defineWidget("dojo.widget.ToolbarMenu", dojo.widget.ToolbarDialog, {});
+dojo.widget.ToolbarMenuItem = function () {
+};
+dojo.widget.defineWidget("dojo.widget.ToolbarSeparator", dojo.widget.ToolbarItem, {templateString:"<span unselectable=\"on\" class=\"toolbarItem toolbarSeparator\"></span>", defaultIconPath:new dojo.uri.moduleUri("dojo.widget", "templates/buttons/sep.gif"), fillInTemplate:function (args, frag, skip) {
+	dojo.widget.ToolbarSeparator.superclass.fillInTemplate.call(this, args, frag);
+	this._name = this.widgetId;
+	if (!skip) {
+		if (!this._icon) {
+			this.setIcon(this.defaultIconPath);
 		}
-	},
-
-	// don't want events!
-	_onmouseover: null,
-    _onmouseout: null,
-    _onclick: null,
-    _onmousedown: null,
-    _onmouseup: null
-});
-
-/* ToolbarSpace
- **********************/
-dojo.widget.defineWidget(
-	"dojo.widget.ToolbarSpace",
-	dojo.widget.ToolbarSeparator,
-{
-	fillInTemplate: function(args, frag, skip) {
-		dojo.widget.ToolbarSpace.superclass.fillInTemplate.call(this, args, frag, true);
-		if(!skip) {
-			dojo.html.addClass(this.domNode, "toolbarSpace");
-		}
+		this.domNode.appendChild(this._icon.getNode());
 	}
-});
-
-/* ToolbarSelect
- ******************/
-
-dojo.widget.defineWidget(
-	"dojo.widget.ToolbarSelect",
-	dojo.widget.ToolbarItem,
-{
-	templateString: '<span class="toolbarItem toolbarSelect" unselectable="on"><select dojoAttachPoint="selectBox" dojoOnChange="changed"></select></span>',
-
-	fillInTemplate: function(args, frag) {
-		dojo.widget.ToolbarSelect.superclass.fillInTemplate.call(this, args, frag, true);
-		var keys = args.values;
-		var i = 0;
-		for(var val in keys) {
-			var opt = document.createElement("option");
-			opt.setAttribute("value", keys[val]);
-			opt.innerHTML = val;
-			this.selectBox.appendChild(opt);
-		}
-	},
-
-	changed: function(e) {
-		this._fireEvent("onSetValue", this.selectBox.value);
-	},
-
-	setEnabled: function(is, force, preventEvent) {
-		var ret = dojo.widget.ToolbarSelect.superclass.setEnabled.call(this, is, force, preventEvent);
-		this.selectBox.disabled = this.disabled;
-		return ret;
-	},
-
-	// don't want events!
-	_onmouseover: null,
-    _onmouseout: null,
-    _onclick: null,
-    _onmousedown: null,
-    _onmouseup: null
-});
-
-/* Icon
- *********/
-// arguments can be IMG nodes, Image() instances or URLs -- enabled is the only one required
-dojo.widget.Icon = function(enabled, disabled, hovered, selected){
-	if(!arguments.length){
-		// FIXME: should this be dojo.raise?
+}, _onmouseover:null, _onmouseout:null, _onclick:null, _onmousedown:null, _onmouseup:null});
+dojo.widget.defineWidget("dojo.widget.ToolbarSpace", dojo.widget.ToolbarSeparator, {fillInTemplate:function (args, frag, skip) {
+	dojo.widget.ToolbarSpace.superclass.fillInTemplate.call(this, args, frag, true);
+	if (!skip) {
+		dojo.html.addClass(this.domNode, "toolbarSpace");
+	}
+}});
+dojo.widget.defineWidget("dojo.widget.ToolbarSelect", dojo.widget.ToolbarItem, {templateString:"<span class=\"toolbarItem toolbarSelect\" unselectable=\"on\"><select dojoAttachPoint=\"selectBox\" dojoOnChange=\"changed\"></select></span>", fillInTemplate:function (args, frag) {
+	dojo.widget.ToolbarSelect.superclass.fillInTemplate.call(this, args, frag, true);
+	var keys = args.values;
+	var i = 0;
+	for (var val in keys) {
+		var opt = document.createElement("option");
+		opt.setAttribute("value", keys[val]);
+		opt.innerHTML = val;
+		this.selectBox.appendChild(opt);
+	}
+}, changed:function (e) {
+	this._fireEvent("onSetValue", this.selectBox.value);
+}, setEnabled:function (is, force, preventEvent) {
+	var ret = dojo.widget.ToolbarSelect.superclass.setEnabled.call(this, is, force, preventEvent);
+	this.selectBox.disabled = this.disabled;
+	return ret;
+}, _onmouseover:null, _onmouseout:null, _onclick:null, _onmousedown:null, _onmouseup:null});
+dojo.widget.Icon = function (enabled, disabled, hovered, selected) {
+	if (!arguments.length) {
 		throw new Error("Icon must have at least an enabled state");
 	}
 	var states = ["enabled", "disabled", "hovered", "selected"];
 	var currentState = "enabled";
 	var domNode = document.createElement("img");
-
-	this.getState = function(){ return currentState; }
-	this.setState = function(value){
-		if(dojo.lang.inArray(states, value)){
-			if(this[value]){
+	this.getState = function () {
+		return currentState;
+	};
+	this.setState = function (value) {
+		if (dojo.lang.inArray(states, value)) {
+			if (this[value]) {
 				currentState = value;
 				var img = this[currentState];
-				if ((dojo.render.html.ie55 || dojo.render.html.ie60) && img.src && img.src.match(/[.]png$/i) ) {
-					domNode.width = img.width||img.offsetWidth;
-					domNode.height = img.height||img.offsetHeight;
-					domNode.setAttribute("src", dojo.uri.dojoUri("src/widget/templates/images/blank.gif").uri);
-					domNode.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+img.src+"',sizingMethod='image')";
+				if ((dojo.render.html.ie55 || dojo.render.html.ie60) && img.src && img.src.match(/[.]png$/i)) {
+					domNode.width = img.width || img.offsetWidth;
+					domNode.height = img.height || img.offsetHeight;
+					domNode.setAttribute("src", dojo.uri.moduleUri("dojo.widget", "templates/images/blank.gif").uri);
+					domNode.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + img.src + "',sizingMethod='image')";
 				} else {
 					domNode.setAttribute("src", img.src);
 				}
 			}
-		}else{
+		} else {
 			throw new Error("Invalid state set on Icon (state: " + value + ")");
 		}
-	}
-
-	this.setSrc = function(state, value){
-		if(/^img$/i.test(value.tagName)){
+	};
+	this.setSrc = function (state, value) {
+		if (/^img$/i.test(value.tagName)) {
 			this[state] = value;
-		}else if(typeof value == "string" || value instanceof String
-			|| value instanceof dojo.uri.Uri){
-			this[state] = new Image();
-			this[state].src = value.toString();
+		} else {
+			if (typeof value == "string" || value instanceof String || value instanceof dojo.uri.Uri) {
+				this[state] = new Image();
+				this[state].src = value.toString();
+			}
 		}
 		return this[state];
-	}
-
-	this.setIcon = function(icon){
-		for(var i = 0; i < states.length; i++){
-			if(icon[states[i]]){
+	};
+	this.setIcon = function (icon) {
+		for (var i = 0; i < states.length; i++) {
+			if (icon[states[i]]) {
 				this.setSrc(states[i], icon[states[i]]);
 			}
 		}
 		this.update();
-	}
-
-	this.enable = function(){ this.setState("enabled"); }
-	this.disable = function(){ this.setState("disabled"); }
-	this.hover = function(){ this.setState("hovered"); }
-	this.select = function(){ this.setState("selected"); }
-
-	this.getSize = function(){
-		return {
-			width: domNode.width||domNode.offsetWidth,
-			height: domNode.height||domNode.offsetHeight
-		};
-	}
-
-	this.setSize = function(w, h){
+	};
+	this.enable = function () {
+		this.setState("enabled");
+	};
+	this.disable = function () {
+		this.setState("disabled");
+	};
+	this.hover = function () {
+		this.setState("hovered");
+	};
+	this.select = function () {
+		this.setState("selected");
+	};
+	this.getSize = function () {
+		return {width:domNode.width || domNode.offsetWidth, height:domNode.height || domNode.offsetHeight};
+	};
+	this.setSize = function (w, h) {
 		domNode.width = w;
 		domNode.height = h;
-		return { width: w, height: h };
-	}
-
-	this.getNode = function(){
+		return {width:w, height:h};
+	};
+	this.getNode = function () {
 		return domNode;
-	}
-
-	this.getSrc = function(state){
-		if(state){ return this[state].src; }
-		return domNode.src||"";
-	}
-
-	this.update = function(){
+	};
+	this.getSrc = function (state) {
+		if (state) {
+			return this[state].src;
+		}
+		return domNode.src || "";
+	};
+	this.update = function () {
 		this.setState(currentState);
-	}
-
-	for(var i = 0; i < states.length; i++){
+	};
+	for (var i = 0; i < states.length; i++) {
 		var arg = arguments[i];
 		var state = states[i];
 		this[state] = null;
-		if(!arg){ continue; }
+		if (!arg) {
+			continue;
+		}
 		this.setSrc(state, arg);
 	}
-
 	this.enable();
-}
-
-dojo.widget.Icon.make = function(a,b,c,d){
-	for(var i = 0; i < arguments.length; i++){
-		if(arguments[i] instanceof dojo.widget.Icon){
+};
+dojo.widget.Icon.make = function (a, b, c, d) {
+	for (var i = 0; i < arguments.length; i++) {
+		if (arguments[i] instanceof dojo.widget.Icon) {
 			return arguments[i];
 		}
 	}
+	return new dojo.widget.Icon(a, b, c, d);
+};
+dojo.widget.defineWidget("dojo.widget.ToolbarColorDialog", dojo.widget.ToolbarDialog, {palette:"7x10", fillInTemplate:function (args, frag) {
+	dojo.widget.ToolbarColorDialog.superclass.fillInTemplate.call(this, args, frag);
+	this.dialog = dojo.widget.createWidget("ColorPalette", {palette:this.palette});
+	this.dialog.domNode.style.position = "absolute";
+	dojo.event.connect(this.dialog, "onColorSelect", this, "_setValue");
+}, _setValue:function (color) {
+	this._value = color;
+	this._fireEvent("onSetValue", color);
+}, showDialog:function (e) {
+	dojo.widget.ToolbarColorDialog.superclass.showDialog.call(this, e);
+	var abs = dojo.html.getAbsolutePosition(this.domNode, true);
+	var y = abs.y + dojo.html.getBorderBox(this.domNode).height;
+	this.dialog.showAt(abs.x, y);
+}, hideDialog:function (e) {
+	dojo.widget.ToolbarColorDialog.superclass.hideDialog.call(this, e);
+	this.dialog.hide();
+}});
 
-	return new dojo.widget.Icon(a,b,c,d);
-}
 
-/* ToolbarColorDialog
- ******************/
-dojo.widget.defineWidget(
-	"dojo.widget.ToolbarColorDialog",
-	dojo.widget.ToolbarDialog,
-{
- 	palette: "7x10",
-
-	fillInTemplate: function (args, frag) {
-		dojo.widget.ToolbarColorDialog.superclass.fillInTemplate.call(this, args, frag);
-		this.dialog = dojo.widget.createWidget("ColorPalette", {palette: this.palette});
-		this.dialog.domNode.style.position = "absolute";
-
-		dojo.event.connect(this.dialog, "onColorSelect", this, "_setValue");
-	},
-
-	_setValue: function(color) {
-		this._value = color;
-		this._fireEvent("onSetValue", color);
-	},
-
-	showDialog: function (e) {
-		dojo.widget.ToolbarColorDialog.superclass.showDialog.call(this, e);
-		var abs = dojo.html.getAbsolutePosition(this.domNode, true);
-		var y = abs.y + dojo.html.getBorderBox(this.domNode).height;
-		this.dialog.showAt(abs.x, y);
-	},
-
-	hideDialog: function (e) {
-		dojo.widget.ToolbarColorDialog.superclass.hideDialog.call(this, e);
-		this.dialog.hide();
-	}
-});
 __CPAN_FILE__ src/widget/SvgButton.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -52115,138 +32963,94 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-// FIXME: not yet functional
-
 dojo.provide("dojo.widget.SvgButton");
-
 dojo.require("dojo.experimental");
 dojo.experimental("dojo.widget.SvgButton");
-
-dojo.widget.SvgButton = function(){
-	// FIXME: this is incomplete and doesn't work yet
-	// if DOMButton turns into a mixin, we should subclass Button instead and
-	// just mix in the DOMButton properties.
-
+dojo.widget.SvgButton = function () {
 	dojo.widget.DomButton.call(this);
 	dojo.widget.SvgWidget.call(this);
-
-	// FIXME: freaking implement this already!
-	this.onFoo = function(){ alert("bar"); }
-
+	this.onFoo = function () {
+		alert("bar");
+	};
 	this.label = "huzzah!";
-
-	this.setLabel = function(x, y, textSize, label, shape){
-		//var labelNode = this.domNode.ownerDocument.createTextNode(this.label);
-		//var textNode = this.domNode.ownerDocument.createElement("text");
+	this.setLabel = function (x, y, textSize, label, shape) {
 		var coords = dojo.widget.SvgButton.prototype.coordinates(x, y, textSize, label, shape);
 		var textString = "";
-		switch(shape) {
-			case "ellipse":
-				textString = "<text x='"+ coords[6] + "' y='"+ coords[7] + "'>"+ label + "</text>";
-				//textNode.setAttribute("x", coords[6]);
-				//textNode.setAttribute("y", coords[7]);
-				break;
-			case "rectangle":
-				//FIXME: implement
-				textString = "";
-				//textNode.setAttribute("x", coords[6]);
-				//textNode.setAttribute("y", coords[7]);
-				break;
-			case "circle":
-				//FIXME: implement
-				textString = "";
-				//textNode.setAttribute("x", coords[6]);
-				//textNode.setAttribute("y", coords[7]);
-				break;
+		switch (shape) {
+		  case "ellipse":
+			textString = "<text x='" + coords[6] + "' y='" + coords[7] + "'>" + label + "</text>";
+			break;
+		  case "rectangle":
+			textString = "";
+			break;
+		  case "circle":
+			textString = "";
+			break;
 		}
-		//textNode.appendChild(labelNode);
-		//this.domNode.appendChild(textNode);
 		return textString;
-		//alert(textNode.getComputedTextLength());
-	}
-
-	this.fillInTemplate = function(x, y, textSize, label, shape){
-		// the idea is to set the text to the appropriate place given its length
-		// and the template shape
-		
-		// FIXME: For now, assuming text sizes are integers in SVG units
+	};
+	this.fillInTemplate = function (x, y, textSize, label, shape) {
 		this.textSize = textSize || 12;
 		this.label = label;
-		// FIXEME: for now, I'm going to fake this... need to come up with a real way to 
-		// determine the actual width of the text, such as computedStyle
-		var textWidth = this.label.length*this.textSize ;
-		//this.setLabel();
-	}
-}
-
+		var textWidth = this.label.length * this.textSize;
+	};
+};
 dojo.inherits(dojo.widget.SvgButton, dojo.widget.DomButton);
-
-// FIXME
-dojo.widget.SvgButton.prototype.shapeString = function(x, y, textSize, label, shape) {
-	switch(shape) {
-		case "ellipse":
-			var coords = dojo.widget.SvgButton.prototype.coordinates(x, y, textSize, label, shape)
-			return "<ellipse cx='"+ coords[4]+"' cy='"+ coords[5]+"' rx='"+ coords[2]+"' ry='"+ coords[3]+"'/>";
-			break;
-		case "rect":
-			//FIXME: implement
-			return "";
-			//return "<rect x='110' y='45' width='70' height='30'/>";
-			break;
-		case "circle":
-			//FIXME: implement
-			return "";
-			//return "<circle cx='210' cy='60' r='23'/>";
-			break;
+dojo.widget.SvgButton.prototype.shapeString = function (x, y, textSize, label, shape) {
+	switch (shape) {
+	  case "ellipse":
+		var coords = dojo.widget.SvgButton.prototype.coordinates(x, y, textSize, label, shape);
+		return "<ellipse cx='" + coords[4] + "' cy='" + coords[5] + "' rx='" + coords[2] + "' ry='" + coords[3] + "'/>";
+		break;
+	  case "rect":
+		return "";
+		break;
+	  case "circle":
+		return "";
+		break;
 	}
-}
-
-dojo.widget.SvgButton.prototype.coordinates = function(x, y, textSize, label, shape) {
-	switch(shape) {
-		case "ellipse":
-			var buttonWidth = label.length*textSize;
-			var buttonHeight = textSize*2.5
-			var rx = buttonWidth/2;
-			var ry = buttonHeight/2;
-			var cx = rx + x;
-			var cy = ry + y;
-			var textX = cx - rx*textSize/25;
-			var textY = cy*1.1;
-			return [buttonWidth, buttonHeight, rx, ry, cx, cy, textX, textY];
-			break;
-		case "rectangle":
-			//FIXME: implement
-			return "";
-			break;
-		case "circle":
-			//FIXME: implement
-			return "";
-			break;
+};
+dojo.widget.SvgButton.prototype.coordinates = function (x, y, textSize, label, shape) {
+	switch (shape) {
+	  case "ellipse":
+		var buttonWidth = label.length * textSize;
+		var buttonHeight = textSize * 2.5;
+		var rx = buttonWidth / 2;
+		var ry = buttonHeight / 2;
+		var cx = rx + x;
+		var cy = ry + y;
+		var textX = cx - rx * textSize / 25;
+		var textY = cy * 1.1;
+		return [buttonWidth, buttonHeight, rx, ry, cx, cy, textX, textY];
+		break;
+	  case "rectangle":
+		return "";
+		break;
+	  case "circle":
+		return "";
+		break;
 	}
-}
-
-dojo.widget.SvgButton.prototype.labelString = function(x, y, textSize, label, shape){
+};
+dojo.widget.SvgButton.prototype.labelString = function (x, y, textSize, label, shape) {
 	var textString = "";
 	var coords = dojo.widget.SvgButton.prototype.coordinates(x, y, textSize, label, shape);
-	switch(shape) {
-		case "ellipse":
-			textString = "<text x='"+ coords[6] + "' y='"+ coords[7] + "'>"+ label + "</text>";
-			break;
-		case "rectangle":
-			//FIXME: implement
-			textString = "";
-			break;
-		case "circle":
-			//FIXME: implement
-			textString = "";
-			break;
+	switch (shape) {
+	  case "ellipse":
+		textString = "<text x='" + coords[6] + "' y='" + coords[7] + "'>" + label + "</text>";
+		break;
+	  case "rectangle":
+		textString = "";
+		break;
+	  case "circle":
+		textString = "";
+		break;
 	}
 	return textString;
-}
+};
+dojo.widget.SvgButton.prototype.templateString = function (x, y, textSize, label, shape) {
+	return "<g class='dojoButton' dojoAttachEvent='onClick; onMouseMove: onFoo;' dojoAttachPoint='labelNode'>" + dojo.widgets.SVGButton.prototype.shapeString(x, y, textSize, label, shape) + dojo.widget.SVGButton.prototype.labelString(x, y, textSize, label, shape) + "</g>";
+};
 
-dojo.widget.SvgButton.prototype.templateString = function(x, y, textSize, label, shape) {
-	return "<g class='dojoButton' dojoAttachEvent='onClick; onMouseMove: onFoo;' dojoAttachPoint='labelNode'>"+ dojo.widgets.SVGButton.prototype.shapeString(x, y, textSize, label, shape) + dojo.widget.SVGButton.prototype.labelString(x, y, textSize, label, shape) + "</g>";
-}
 
 __CPAN_FILE__ src/widget/TreeDndControllerV3.js
 /*
@@ -52259,136 +33063,65 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-
 dojo.provide("dojo.widget.TreeDndControllerV3");
-
 dojo.require("dojo.dnd.TreeDragAndDropV3");
 dojo.require("dojo.experimental");
-
 dojo.experimental("Tree drag'n'drop' has lots of problems/bugs, it requires dojo drag'n'drop overhaul to work, probably in 0.5");
-	
-dojo.widget.defineWidget(
-	"dojo.widget.TreeDndControllerV3",
-	[dojo.widget.HtmlWidget, dojo.widget.TreeCommon],
-	function() {
-		this.dragSources = {};
-		this.dropTargets = {};
-		this.listenedTrees = {};
-	},
-{
-	listenTreeEvents: ["afterChangeTree","beforeTreeDestroy", "afterAddChild"],
-	listenNodeFilter: function(elem) { return elem instanceof dojo.widget.Widget}, 
-	
-	initialize: function(args) {
-		this.treeController = dojo.lang.isString(args.controller) ? dojo.widget.byId(args.controller) : args.controller;
-		
-		if (!this.treeController) {
-			dojo.raise("treeController must be declared");
-		}
-		
-	},
-
-	onBeforeTreeDestroy: function(message) {
-		this.unlistenTree(message.source);
-	},
-	
-	// first Dnd registration happens in addChild
-	// because I have information about parent on this stage and can use it
-	// to check locking or other things
-	onAfterAddChild: function(message) {
-		//dojo.debug("Dnd addChild "+message.child);
-		this.listenNode(message.child);		
-	},
-
-
-	onAfterChangeTree: function(message) {
-		/* catch new nodes on afterAddChild, because I need parent */		
-		if (!message.oldTree) return;
-		
-		//dojo.debug("HERE");
-		
-		if (!message.newTree || !this.listenedTrees[message.newTree.widgetId]) {			
-			this.processDescendants(message.node, this.listenNodeFilter, this.unlistenNode);
-		}		
-		
-		if (!this.listenedTrees[message.oldTree.widgetId]) {
-			// we have new node
-			this.processDescendants(message.node, this.listenNodeFilter, this.listenNode);	
-		}
-		//dojo.profile.end("onTreeChange");
-	},
-	
-	
-	/**
-	 * Controller(node model) creates DndNodes because it passes itself to node for synchroneous drops processing
-	 * I can't process DnD with events cause an event can't return result success/false
-	*/
-	listenNode: function(node) {
-
-		//dojo.debug("listen dnd "+node);
-		//dojo.debug((new Error()).stack)
-		//dojo.profile.start("Dnd listenNode "+node);		
-		if (!node.tree.DndMode) return;
-		if (this.dragSources[node.widgetId] || this.dropTargets[node.widgetId]) return;
-
-	
-		/* I drag label, not domNode, because large domNodes are very slow to copy and large to drag */
-
-		var source = null;
-		var target = null;
-
-	
-		if (!node.actionIsDisabled(node.actions.MOVE)) {
-			//dojo.debug("reg source")
-			
-			//dojo.profile.start("Dnd source "+node);		
-			var source = this.makeDragSource(node);
-			//dojo.profile.end("Dnd source "+node);		
-
-			this.dragSources[node.widgetId] = source;
-		}
-
-		//dojo.profile.start("Dnd target "+node);		
-		//dojo.debug("reg target");
-		var target = this.makeDropTarget(node);
-		//dojo.profile.end("Dnd target "+node);		
-
-		this.dropTargets[node.widgetId] = target;
-
-		//dojo.profile.end("Dnd listenNode "+node);		
-
-
-	},
-	
-	/**
-	 * Factory method, override it to create special source
-	 */
-	makeDragSource: function(node) {
-		return new dojo.dnd.TreeDragSourceV3(node.contentNode, this, node.tree.widgetId, node);
-	},
-
-
-	/**
-	 * Factory method, override it to create special target
-	 */
-	makeDropTarget: function(node) {
-		 return new dojo.dnd.TreeDropTargetV3(node.contentNode, this.treeController, node.tree.DndAcceptTypes, node);
-	},
-
-	unlistenNode: function(node) {
-
-		if (this.dragSources[node.widgetId]) {
-			dojo.dnd.dragManager.unregisterDragSource(this.dragSources[node.widgetId]);
-			delete this.dragSources[node.widgetId];
-		}
-
-		if (this.dropTargets[node.widgetId]) {
-			dojo.dnd.dragManager.unregisterDropTarget(this.dropTargets[node.widgetId]);
-			delete this.dropTargets[node.widgetId];
-		}
+dojo.widget.defineWidget("dojo.widget.TreeDndControllerV3", [dojo.widget.HtmlWidget, dojo.widget.TreeCommon], function () {
+	this.dragSources = {};
+	this.dropTargets = {};
+	this.listenedTrees = {};
+}, {listenTreeEvents:["afterChangeTree", "beforeTreeDestroy", "afterAddChild"], listenNodeFilter:function (elem) {
+	return elem instanceof dojo.widget.Widget;
+}, initialize:function (args) {
+	this.treeController = dojo.lang.isString(args.controller) ? dojo.widget.byId(args.controller) : args.controller;
+	if (!this.treeController) {
+		dojo.raise("treeController must be declared");
 	}
+}, onBeforeTreeDestroy:function (message) {
+	this.unlistenTree(message.source);
+}, onAfterAddChild:function (message) {
+	this.listenNode(message.child);
+}, onAfterChangeTree:function (message) {
+	if (!message.oldTree) {
+		return;
+	}
+	if (!message.newTree || !this.listenedTrees[message.newTree.widgetId]) {
+		this.processDescendants(message.node, this.listenNodeFilter, this.unlistenNode);
+	}
+	if (!this.listenedTrees[message.oldTree.widgetId]) {
+		this.processDescendants(message.node, this.listenNodeFilter, this.listenNode);
+	}
+}, listenNode:function (node) {
+	if (!node.tree.DndMode) {
+		return;
+	}
+	if (this.dragSources[node.widgetId] || this.dropTargets[node.widgetId]) {
+		return;
+	}
+	var source = null;
+	var target = null;
+	if (!node.actionIsDisabled(node.actions.MOVE)) {
+		var source = this.makeDragSource(node);
+		this.dragSources[node.widgetId] = source;
+	}
+	var target = this.makeDropTarget(node);
+	this.dropTargets[node.widgetId] = target;
+}, makeDragSource:function (node) {
+	return new dojo.dnd.TreeDragSourceV3(node.contentNode, this, node.tree.widgetId, node);
+}, makeDropTarget:function (node) {
+	return new dojo.dnd.TreeDropTargetV3(node.contentNode, this.treeController, node.tree.DndAcceptTypes, node);
+}, unlistenNode:function (node) {
+	if (this.dragSources[node.widgetId]) {
+		dojo.dnd.dragManager.unregisterDragSource(this.dragSources[node.widgetId]);
+		delete this.dragSources[node.widgetId];
+	}
+	if (this.dropTargets[node.widgetId]) {
+		dojo.dnd.dragManager.unregisterDropTarget(this.dropTargets[node.widgetId]);
+		delete this.dropTargets[node.widgetId];
+	}
+}});
 
-});
 
 __CPAN_FILE__ src/widget/TimePicker.js
 /*
@@ -52409,390 +33142,265 @@
 dojo.require("dojo.date.format");
 dojo.require("dojo.dom");
 dojo.require("dojo.html.style");
-
 dojo.requireLocalization("dojo.i18n.calendar", "gregorian", null, "de,en,es,fi,fr,hu,ja,it,ko,nl,pt,sv,zh,pt-br,zh-cn,zh-hk,zh-tw,ROOT");
 dojo.requireLocalization("dojo.widget", "TimePicker", null, "ROOT");
-
-
-dojo.widget.defineWidget(
-	"dojo.widget.TimePicker",
-	dojo.widget.HtmlWidget,
-	function(){
-
-		/*
-		summary: 
-			Base class for a stand-alone TimePicker widget 
-			which makes it easy to select a time. 
-		description: 
-			A stand-alone TimePicker widget that makes it easy to select a time. 
-			It is designed to be used on its own, or inside of other widgets
-			(see dojo.widget.DropdownTimePicker) or other similar combination widgets. 
-		 	              
-			Times attributes passed in the `RFC 3339` format:
-			http://www.faqs.org/rfcs/rfc3339.html (2005-06-30T08:05:00-07:00)
-			so that they are serializable and locale-independent.
-		
-		usage: 
-			var timePicker = dojo.widget.createWidget("TimePicker", {},   
-			dojo.byId("timePickerNode")); 
-		 	 
-			<div dojoType="TimePicker"></div> 
-		*/
-	
-		// time: Date
-		//	selected time
-		this.time = "";
-		
-		// useDefaultTime: Boolean
-		//	set following flag to true if a default time should be set
-		this.useDefaultTime = false;
-		
-		// useDefaultMinutes: Boolean
-		//	set the following to true to set default minutes to current time, false to // use zero
-		this.useDefaultMinutes = false;
-		
-		// storedTime: String
-		//	rfc 3339 time
-		this.storedTime = "";
-		
-		// currentTime: Object
-		//	time currently selected in the UI, stored in hours, minutes, seconds in the format that will be actually displayed
-		this.currentTime = {};
-		
-		this.classNames = {
-		// summary:
-		//	stores a list of class names that may be overriden
-			selectedTime: "selectedItem"
-		};
-		
-		this.any = "any"; //FIXME: never used?
-		
-		// dom node indecies for selected hour, minute, amPm, and "any time option"
-		this.selectedTime = {
-			hour: "",
-			minute: "",
-			amPm: "",
-			anyTime: false
-		};
-
-		// minutes are ordered as follows: ["12", "6", "1", "7", "2", "8", "3", "9", "4", "10", "5", "11"]
-		this.hourIndexMap = ["", 2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 11, 0];
-		
-		// minutes are ordered as follows: ["00", "30", "05", "35", "10", "40", "15", "45", "20", "50", "25", "55"]
-		this.minuteIndexMap = [0, 2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 11];
-	},
-{
-	isContainer: false,
-	templatePath: dojo.uri.dojoUri("src/widget/templates/TimePicker.html"),
-	templateCssPath: dojo.uri.dojoUri("src/widget/templates/TimePicker.css"),
-
-	postMixInProperties: function(localProperties, frag) {
-		// summary: see dojo.widget.DomWidget
-		dojo.widget.TimePicker.superclass.postMixInProperties.apply(this, arguments);
-		this.calendar = dojo.i18n.getLocalization("dojo.i18n.calendar", "gregorian", this.lang); // "am","pm"
-		this.widgetStrings = dojo.i18n.getLocalization("dojo.widget", "TimePicker", this.lang); // "any"
-	},
-
-	fillInTemplate: function(args, frag){
-		// summary: see dojo.widget.DomWidget
-
-		// Copy style info from input node to output node
-		var source = this.getFragNodeRef(frag);
-		dojo.html.copyStyle(this.domNode, source);
-
-		if(args.value){
-			if(args.value instanceof Date){
-				this.storedTime = dojo.date.toRfc3339(args.value);
-			}else{
-				this.storedTime = args.value;
-			}
-		}		
-		
-		this.initData();
-		this.initUI();
-	},
-
-	initData: function() {
-		// FIXME: doesn't currently validate the time before trying to set it
-		// Determine the date/time from stored info, or by default don't 
-		//  have a set time
-		// FIXME: should normalize against whitespace on storedTime... for now 
-		// just a lame hack
-		if(this.storedTime.indexOf("T")!=-1 && this.storedTime.split("T")[1] && this.storedTime!=" " && this.storedTime.split("T")[1]!="any"){
-			this.time = dojo.widget.TimePicker.util.fromRfcDateTime(this.storedTime, this.useDefaultMinutes, this.selectedTime.anyTime);
-		}else if(this.useDefaultTime){
-			this.time = dojo.widget.TimePicker.util.fromRfcDateTime("", this.useDefaultMinutes, this.selectedTime.anyTime);
-		}else{
-			this.selectedTime.anyTime = true;
-			this.time = dojo.widget.TimePicker.util.fromRfcDateTime("", 0, 1);
-		}
-	},
-
-	initUI: function() {
-		// set UI to match the currently selected time
-		if(!this.selectedTime.anyTime && this.time) {
-			var amPmHour = dojo.widget.TimePicker.util.toAmPmHour(this.time.getHours());
-			var hour = amPmHour[0];
-			var isAm = amPmHour[1];
-			var minute = this.time.getMinutes();
-			var minuteIndex = parseInt(minute/5);
-			this.onSetSelectedHour(this.hourIndexMap[hour]);
-			this.onSetSelectedMinute(this.minuteIndexMap[minuteIndex]);
-			this.onSetSelectedAmPm(isAm);
+dojo.widget.defineWidget("dojo.widget.TimePicker", dojo.widget.HtmlWidget, function () {
+	this.time = "";
+	this.useDefaultTime = false;
+	this.useDefaultMinutes = false;
+	this.storedTime = "";
+	this.currentTime = {};
+	this.classNames = {selectedTime:"selectedItem"};
+	this.any = "any";
+	this.selectedTime = {hour:"", minute:"", amPm:"", anyTime:false};
+	this.hourIndexMap = ["", 2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 11, 0];
+	this.minuteIndexMap = [0, 2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 11];
+}, {isContainer:false, templateString:"<div class=\"timePickerContainer\" dojoAttachPoint=\"timePickerContainerNode\">\n\t<table class=\"timeContainer\" cellspacing=\"0\" >\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<td class=\"timeCorner cornerTopLeft\" valign=\"top\">&nbsp;</td>\n\t\t\t\t<td class=\"timeLabelContainer hourSelector\">${this.calendar.field-hour}</td>\n\t\t\t\t<td class=\"timeLabelContainer minutesHeading\">${this.calendar.field-minute}</td>\n\t\t\t\t<td class=\"timeCorner cornerTopRight\" valign=\"top\">&nbsp;</td>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td valign=\"top\" colspan=\"2\" class=\"hours\">\n\t\t\t\t\t<table align=\"center\">\n\t\t\t\t\t\t<tbody dojoAttachPoint=\"hourContainerNode\"  \n\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onSetSelectedHour;\">\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>12</td>\n\t\t\t\t\t\t\t\t<td>6</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>1</td>\n\t\t\t\t\t\t\t\t<td>7</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>2</td>\n\t\t\t\t\t\t\t\t<td>8</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>3</td>\n\t\t\t\t\t\t\t\t<td>9</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>4</td>\n\t\t\t\t\t\t\t\t<td>10</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>5</td>\n\t\t\t\t\t\t\t\t<td>11</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t\t<td valign=\"top\" class=\"minutes\" colspan=\"2\">\n\t\t\t\t\t<table align=\"center\">\n\t\t\t\t\t\t<tbody dojoAttachPoint=\"minuteContainerNode\" \n\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onSetSelectedMinute;\">\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>00</td>\n\t\t\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>05</td>\n\t\t\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>10</td>\n\t\t\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>15</td>\n\t\t\t\t\t\t\t\t<td>45</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t\t\t<td>50</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>25</td>\n\t\t\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td class=\"cornerBottomLeft\">&nbsp;</td>\n\t\t\t\t<td valign=\"top\" class=\"timeOptions\">\n\t\t\t\t\t<table class=\"amPmContainer\">\n\t\t\t\t\t\t<tbody dojoAttachPoint=\"amPmContainerNode\" \n\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onSetSelectedAmPm;\">\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td id=\"am\">${this.calendar.am}</td>\n\t\t\t\t\t\t\t\t<td id=\"pm\">${this.calendar.pm}</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t\t<td class=\"timeOptions\">\n\t\t\t\t\t<div dojoAttachPoint=\"anyTimeContainerNode\" \n\t\t\t\t\t\tdojoAttachEvent=\"onClick: onSetSelectedAnyTime;\" \n\t\t\t\t\t\tclass=\"anyTimeContainer\">${this.widgetStrings.any}</div>\n\t\t\t\t</td>\n\t\t\t\t<td class=\"cornerBottomRight\">&nbsp;</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n", templateCssString:"/*Time Picker */\n.timePickerContainer {\n\twidth:122px;\n\tfont-family:Tahoma, Myriad, Helvetica, Arial, Verdana, sans-serif;\n\tfont-size:16px;\n}\n\n.timeContainer {\n\tborder-collapse:collapse;\n\tborder-spacing:0;\n}\n\n.timeContainer thead {\n\tcolor:#293a4b;\n\tfont-size:0.9em;\n\tfont-weight:700;\n}\n\n.timeContainer thead td {\n\tpadding:0.25em;\n\tfont-size:0.80em;\n\tborder-bottom:1px solid #6782A8;\n}\n\n.timeCorner {\n\twidth:10px;\n}\n\n.cornerTopLeft {\n\tbackground: url(\"images/dpCurveTL.png\") top left no-repeat;\n}\n\n.cornerTopRight {\n\tbackground: url(\"images/dpCurveTR.png\") top right no-repeat;\n}\n\n.timeLabelContainer {\n\tbackground: url(\"images/dpMonthBg.png\") top left repeat-x;\n}\n\n.hours, .minutes, .timeBorder {\n\tbackground: #7591bc url(\"images/dpBg.gif\") top left repeat-x;\n\n}\n\n.hours td, .minutes td {\n\tpadding:0.2em;\n\ttext-align:center;\n\tfont-size:0.7em;\n\tfont-weight:bold;\n\tcursor:pointer;\n\tcursor:hand;\n\tcolor:#fff;\n}\n\n.minutes {\n\tborder-left:1px solid #f5d1db;\n}\n\n.hours {\n\tborder-right:1px solid #6782A8;\n}\n\n.hourSelector {\n\tborder-right:1px solid #6782A8;\n\tpadding:5px;\n\tpadding-right:10px;\n}\n\n.minutesSelector {\n\tpadding:5px;\n\tborder-left:1px solid #f5c7d4;\n\ttext-align:center;\n}\n\n.minutesHeading {\n\tpadding-left:9px !important;\n}\n\n.timeOptions {\n\tbackground-color:#F9C9D7;\n}\n\n.timeContainer .cornerBottomLeft, .timeContainer .cornerBottomRight, .timeContainer .timeOptions {\n\tborder-top:1px solid #6782A8;\n}\n\n.timeContainer .cornerBottomLeft {\n\tbackground: url(\"images/dpCurveBL.png\") bottom left no-repeat !important;\n\twidth:9px !important;\n\tpadding:0;\n\tmargin:0;\n}\n\n.timeContainer .cornerBottomRight {\n\tbackground: url(\"images/dpCurveBR.png\") bottom right no-repeat !important;\n\twidth:9px !important;\n\tpadding:0;\n\tmargin:0;\n}\n\n.timeOptions {\n\tcolor:#fff;\n\tbackground:url(\"images/dpYearBg.png\") top left repeat-x;\n\n}\n\n.selectedItem {\n\tbackground-color:#fff;\n\tcolor:#6782a8 !important;\n}\n\n.timeOptions .selectedItem {\n\tcolor:#fff !important;\n\tbackground-color:#9ec3fb !important;\n}\n\n.anyTimeContainer {\n\ttext-align:center;\n\tfont-weight:bold;\n\tfont-size:0.7em;\n\tpadding:0.1em;\n\tcursor:pointer;\n\tcursor:hand;\n\tcolor:#fff !important;\n}\n\n.amPmContainer {\n\twidth:100%;\n}\n\n.amPmContainer td {\n\ttext-align:center;\n\tfont-size:0.7em;\n\tfont-weight:bold;\n\tcursor:pointer;\n\tcursor:hand;\n\tcolor:#fff;\n}\n\n\n\n/*.timePickerContainer {\n\tmargin:1.75em 0 0.5em 0;\n\twidth:10em;\n\tfloat:left;\n}\n\n.timeContainer {\n\tborder-collapse:collapse;\n\tborder-spacing:0;\n}\n\n.timeContainer thead td{\n\tborder-bottom:1px solid #e6e6e6;\n\tpadding:0 0.4em 0.2em 0.4em;\n}\n\n.timeContainer td {\n\tfont-size:0.9em;\n\tpadding:0 0.25em 0 0.25em;\n\ttext-align:left;\n\tcursor:pointer;cursor:hand;\n}\n\n.timeContainer td.minutesHeading {\n\tborder-left:1px solid #e6e6e6;\n\tborder-right:1px solid #e6e6e6;\t\n}\n\n.timeContainer .minutes {\n\tborder-left:1px solid #e6e6e6;\n\tborder-right:1px solid #e6e6e6;\n}\n\n.selectedItem {\n\tbackground-color:#3a3a3a;\n\tcolor:#ffffff;\n}*/\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/TimePicker.css"), postMixInProperties:function (localProperties, frag) {
+	dojo.widget.TimePicker.superclass.postMixInProperties.apply(this, arguments);
+	this.calendar = dojo.i18n.getLocalization("dojo.i18n.calendar", "gregorian", this.lang);
+	this.widgetStrings = dojo.i18n.getLocalization("dojo.widget", "TimePicker", this.lang);
+}, fillInTemplate:function (args, frag) {
+	var source = this.getFragNodeRef(frag);
+	dojo.html.copyStyle(this.domNode, source);
+	if (args.value) {
+		if (args.value instanceof Date) {
+			this.storedTime = dojo.date.toRfc3339(args.value);
 		} else {
-			this.onSetSelectedAnyTime();
+			this.storedTime = args.value;
 		}
-	},
-	
-	setTime: function(date) {
-		//summary: set the current date and update the UI
-		if(date) {
-			this.selectedTime.anyTime = false;
-			this.setDateTime(dojo.date.toRfc3339(date));
+	}
+	this.initData();
+	this.initUI();
+}, initData:function () {
+	if (this.storedTime.indexOf("T") != -1 && this.storedTime.split("T")[1] && this.storedTime != " " && this.storedTime.split("T")[1] != "any") {
+		this.time = dojo.widget.TimePicker.util.fromRfcDateTime(this.storedTime, this.useDefaultMinutes, this.selectedTime.anyTime);
+	} else {
+		if (this.useDefaultTime) {
+			this.time = dojo.widget.TimePicker.util.fromRfcDateTime("", this.useDefaultMinutes, this.selectedTime.anyTime);
 		} else {
 			this.selectedTime.anyTime = true;
+			this.time = dojo.widget.TimePicker.util.fromRfcDateTime("", 0, 1);
 		}
-		this.initData();
+	}
+}, initUI:function () {
+	if (!this.selectedTime.anyTime && this.time) {
+		var amPmHour = dojo.widget.TimePicker.util.toAmPmHour(this.time.getHours());
+		var hour = amPmHour[0];
+		var isAm = amPmHour[1];
+		var minute = this.time.getMinutes();
+		var minuteIndex = parseInt(minute / 5);
+		this.onSetSelectedHour(this.hourIndexMap[hour]);
+		this.onSetSelectedMinute(this.minuteIndexMap[minuteIndex]);
+		this.onSetSelectedAmPm(isAm);
+	} else {
+		this.onSetSelectedAnyTime();
+	}
+}, setTime:function (date) {
+	if (date) {
+		this.selectedTime.anyTime = false;
+		this.setDateTime(dojo.date.toRfc3339(date));
+	} else {
+		this.selectedTime.anyTime = true;
+	}
+	this.initData();
+	this.initUI();
+}, setDateTime:function (rfcDate) {
+	this.storedTime = rfcDate;
+}, onClearSelectedHour:function (evt) {
+	this.clearSelectedHour();
+}, onClearSelectedMinute:function (evt) {
+	this.clearSelectedMinute();
+}, onClearSelectedAmPm:function (evt) {
+	this.clearSelectedAmPm();
+}, onClearSelectedAnyTime:function (evt) {
+	this.clearSelectedAnyTime();
+	if (this.selectedTime.anyTime) {
+		this.selectedTime.anyTime = false;
+		this.time = dojo.widget.TimePicker.util.fromRfcDateTime("", this.useDefaultMinutes);
 		this.initUI();
-	},
-
-	setDateTime: function(rfcDate) {
-		this.storedTime = rfcDate;
-	},
-	
-	onClearSelectedHour: function(evt) {
-		this.clearSelectedHour();
-	},
-
-	onClearSelectedMinute: function(evt) {
-		this.clearSelectedMinute();
-	},
-
-	onClearSelectedAmPm: function(evt) {
-		this.clearSelectedAmPm();
-	},
-
-	onClearSelectedAnyTime: function(evt) {
-		this.clearSelectedAnyTime();
-		if(this.selectedTime.anyTime) {
-			this.selectedTime.anyTime = false;
-			this.time = dojo.widget.TimePicker.util.fromRfcDateTime("", this.useDefaultMinutes);
-			this.initUI();
+	}
+}, clearSelectedHour:function () {
+	var hourNodes = this.hourContainerNode.getElementsByTagName("td");
+	for (var i = 0; i < hourNodes.length; i++) {
+		dojo.html.setClass(hourNodes.item(i), "");
+	}
+}, clearSelectedMinute:function () {
+	var minuteNodes = this.minuteContainerNode.getElementsByTagName("td");
+	for (var i = 0; i < minuteNodes.length; i++) {
+		dojo.html.setClass(minuteNodes.item(i), "");
+	}
+}, clearSelectedAmPm:function () {
+	var amPmNodes = this.amPmContainerNode.getElementsByTagName("td");
+	for (var i = 0; i < amPmNodes.length; i++) {
+		dojo.html.setClass(amPmNodes.item(i), "");
+	}
+}, clearSelectedAnyTime:function () {
+	dojo.html.setClass(this.anyTimeContainerNode, "anyTimeContainer");
+}, onSetSelectedHour:function (evt) {
+	this.onClearSelectedAnyTime();
+	this.onClearSelectedHour();
+	this.setSelectedHour(evt);
+	this.onSetTime();
+}, setSelectedHour:function (evt) {
+	if (evt && evt.target) {
+		if (evt.target.nodeType == dojo.dom.ELEMENT_NODE) {
+			var eventTarget = evt.target;
+		} else {
+			var eventTarget = evt.target.parentNode;
 		}
-	},
-
-	clearSelectedHour: function() {
-		var hourNodes = this.hourContainerNode.getElementsByTagName("td");
-		for (var i=0; i<hourNodes.length; i++) {
-			dojo.html.setClass(hourNodes.item(i), "");
-		}
-	},
-
-	clearSelectedMinute: function() {
-		var minuteNodes = this.minuteContainerNode.getElementsByTagName("td");
-		for (var i=0; i<minuteNodes.length; i++) {
-			dojo.html.setClass(minuteNodes.item(i), "");
-		}
-	},
-
-	clearSelectedAmPm: function() {
-		var amPmNodes = this.amPmContainerNode.getElementsByTagName("td");
-		for (var i=0; i<amPmNodes.length; i++) {
-			dojo.html.setClass(amPmNodes.item(i), "");
-		}
-	},
-
-	clearSelectedAnyTime: function() {
-		dojo.html.setClass(this.anyTimeContainerNode, "anyTimeContainer");
-	},
-
-	onSetSelectedHour: function(evt) {
-		this.onClearSelectedAnyTime();
-		this.onClearSelectedHour();
-		this.setSelectedHour(evt);
-		this.onSetTime();
-	},
-
-	setSelectedHour: function(evt) {
-		if(evt && evt.target) {
-			if(evt.target.nodeType == dojo.dom.ELEMENT_NODE) {
-				var eventTarget = evt.target;
-			} else {
-				var eventTarget = evt.target.parentNode;
-			}
-			dojo.event.browser.stopEvent(evt);
-			dojo.html.setClass(eventTarget, this.classNames.selectedTime);
-			this.selectedTime["hour"] = eventTarget.innerHTML;
-		} else if (!isNaN(evt)) {
+		dojo.event.browser.stopEvent(evt);
+		dojo.html.setClass(eventTarget, this.classNames.selectedTime);
+		this.selectedTime["hour"] = eventTarget.innerHTML;
+	} else {
+		if (!isNaN(evt)) {
 			var hourNodes = this.hourContainerNode.getElementsByTagName("td");
-			if(hourNodes.item(evt)) {
+			if (hourNodes.item(evt)) {
 				dojo.html.setClass(hourNodes.item(evt), this.classNames.selectedTime);
 				this.selectedTime["hour"] = hourNodes.item(evt).innerHTML;
 			}
 		}
-		this.selectedTime.anyTime = false;
-	},
-
-	onSetSelectedMinute: function(evt) {
-		this.onClearSelectedAnyTime();
-		this.onClearSelectedMinute();
-		this.setSelectedMinute(evt);
-		this.selectedTime.anyTime = false;
-		this.onSetTime();
-	},
-
-	setSelectedMinute: function(evt) {
-		if(evt && evt.target) {
-			if(evt.target.nodeType == dojo.dom.ELEMENT_NODE) {
-				var eventTarget = evt.target;
-			} else {
-				var eventTarget = evt.target.parentNode;
-			}
-			dojo.event.browser.stopEvent(evt);
-			dojo.html.setClass(eventTarget, this.classNames.selectedTime);
-			this.selectedTime["minute"] = eventTarget.innerHTML;
-		} else if (!isNaN(evt)) {
+	}
+	this.selectedTime.anyTime = false;
+}, onSetSelectedMinute:function (evt) {
+	this.onClearSelectedAnyTime();
+	this.onClearSelectedMinute();
+	this.setSelectedMinute(evt);
+	this.selectedTime.anyTime = false;
+	this.onSetTime();
+}, setSelectedMinute:function (evt) {
+	if (evt && evt.target) {
+		if (evt.target.nodeType == dojo.dom.ELEMENT_NODE) {
+			var eventTarget = evt.target;
+		} else {
+			var eventTarget = evt.target.parentNode;
+		}
+		dojo.event.browser.stopEvent(evt);
+		dojo.html.setClass(eventTarget, this.classNames.selectedTime);
+		this.selectedTime["minute"] = eventTarget.innerHTML;
+	} else {
+		if (!isNaN(evt)) {
 			var minuteNodes = this.minuteContainerNode.getElementsByTagName("td");
-			if(minuteNodes.item(evt)) {
+			if (minuteNodes.item(evt)) {
 				dojo.html.setClass(minuteNodes.item(evt), this.classNames.selectedTime);
 				this.selectedTime["minute"] = minuteNodes.item(evt).innerHTML;
 			}
 		}
-	},
-
-	onSetSelectedAmPm: function(evt) {
-		this.onClearSelectedAnyTime();
-		this.onClearSelectedAmPm();
-		this.setSelectedAmPm(evt);
-		this.selectedTime.anyTime = false;
-		this.onSetTime();
-	},
-
-	setSelectedAmPm: function(evt) {
-		var eventTarget = evt.target;
-		if(evt && eventTarget) {
-			if(eventTarget.nodeType != dojo.dom.ELEMENT_NODE) {
-				eventTarget = eventTarget.parentNode;
-			}
-			dojo.event.browser.stopEvent(evt);
-			this.selectedTime.amPm = eventTarget.id;
-			dojo.html.setClass(eventTarget, this.classNames.selectedTime);
-		} else {
-			evt = evt ? 0 : 1;
-			var amPmNodes = this.amPmContainerNode.getElementsByTagName("td");
-			if(amPmNodes.item(evt)) {
-				this.selectedTime.amPm = amPmNodes.item(evt).id;
-				dojo.html.setClass(amPmNodes.item(evt), this.classNames.selectedTime);
-			}
+	}
+}, onSetSelectedAmPm:function (evt) {
+	this.onClearSelectedAnyTime();
+	this.onClearSelectedAmPm();
+	this.setSelectedAmPm(evt);
+	this.selectedTime.anyTime = false;
+	this.onSetTime();
+}, setSelectedAmPm:function (evt) {
+	var eventTarget = evt.target;
+	if (evt && eventTarget) {
+		if (eventTarget.nodeType != dojo.dom.ELEMENT_NODE) {
+			eventTarget = eventTarget.parentNode;
 		}
-	},
-
-	onSetSelectedAnyTime: function(evt) {
-		this.onClearSelectedHour();
-		this.onClearSelectedMinute();
-		this.onClearSelectedAmPm();
-		this.setSelectedAnyTime();
-		this.onSetTime();
-	},
-
-	setSelectedAnyTime: function(evt) {
-		this.selectedTime.anyTime = true;
-		dojo.html.setClass(this.anyTimeContainerNode, this.classNames.selectedTime + " " + "anyTimeContainer");
-	},
-
-	onClick: function(evt) {
 		dojo.event.browser.stopEvent(evt);
-	},
-
-	onSetTime: function() {
-		if(this.selectedTime.anyTime) {
-			this.time = new Date();
-			var tempDateTime = dojo.widget.TimePicker.util.toRfcDateTime(this.time);
-			this.setDateTime(tempDateTime.split("T")[0]);
-		} else {
-			var hour = 12;
-			var minute = 0;
-			var isAm = false;
-			if(this.selectedTime["hour"]) {
-				hour = parseInt(this.selectedTime["hour"], 10);
-			}
-			if(this.selectedTime["minute"]) {
-				minute = parseInt(this.selectedTime["minute"], 10);
-			}
-			if(this.selectedTime["amPm"]) {
-				isAm = (this.selectedTime["amPm"].toLowerCase() == "am");
-			}
-			this.time = new Date();
-			this.time.setHours(dojo.widget.TimePicker.util.fromAmPmHour(hour, isAm));
-			this.time.setMinutes(minute);
-			this.setDateTime(dojo.widget.TimePicker.util.toRfcDateTime(this.time));
+		this.selectedTime.amPm = eventTarget.id;
+		dojo.html.setClass(eventTarget, this.classNames.selectedTime);
+	} else {
+		evt = evt ? 0 : 1;
+		var amPmNodes = this.amPmContainerNode.getElementsByTagName("td");
+		if (amPmNodes.item(evt)) {
+			this.selectedTime.amPm = amPmNodes.item(evt).id;
+			dojo.html.setClass(amPmNodes.item(evt), this.classNames.selectedTime);
 		}
-		this.onValueChanged(this.time);
-	},
-	
-	onValueChanged: function(/*Date*/date) {
-		//summary: the set date event handler
 	}
-});
-
-dojo.widget.TimePicker.util = new function() {
-	//summary: utility functions
-	
-	this.toRfcDateTime = function(jsDate) {
-		//summary: formats a Date object to RFC 3339 string
-		if(!jsDate) {
+}, onSetSelectedAnyTime:function (evt) {
+	this.onClearSelectedHour();
+	this.onClearSelectedMinute();
+	this.onClearSelectedAmPm();
+	this.setSelectedAnyTime();
+	this.onSetTime();
+}, setSelectedAnyTime:function (evt) {
+	this.selectedTime.anyTime = true;
+	dojo.html.setClass(this.anyTimeContainerNode, this.classNames.selectedTime + " " + "anyTimeContainer");
+}, onClick:function (evt) {
+	dojo.event.browser.stopEvent(evt);
+}, onSetTime:function () {
+	if (this.selectedTime.anyTime) {
+		this.time = new Date();
+		var tempDateTime = dojo.widget.TimePicker.util.toRfcDateTime(this.time);
+		this.setDateTime(tempDateTime.split("T")[0]);
+	} else {
+		var hour = 12;
+		var minute = 0;
+		var isAm = false;
+		if (this.selectedTime["hour"]) {
+			hour = parseInt(this.selectedTime["hour"], 10);
+		}
+		if (this.selectedTime["minute"]) {
+			minute = parseInt(this.selectedTime["minute"], 10);
+		}
+		if (this.selectedTime["amPm"]) {
+			isAm = (this.selectedTime["amPm"].toLowerCase() == "am");
+		}
+		this.time = new Date();
+		this.time.setHours(dojo.widget.TimePicker.util.fromAmPmHour(hour, isAm));
+		this.time.setMinutes(minute);
+		this.setDateTime(dojo.widget.TimePicker.util.toRfcDateTime(this.time));
+	}
+	this.onValueChanged(this.time);
+}, onValueChanged:function (date) {
+}});
+dojo.widget.TimePicker.util = new function () {
+	this.toRfcDateTime = function (jsDate) {
+		if (!jsDate) {
 			jsDate = new Date();
 		}
 		jsDate.setSeconds(0);
-		return dojo.date.strftime(jsDate, "%Y-%m-%dT%H:%M:00%z"); //FIXME: use dojo.date.toRfc3339 instead
-	}
-
-	this.fromRfcDateTime = function(rfcDate, useDefaultMinutes, isAnyTime) {
-		//summary: constructs a Date object from RFC 3339 string
+		return dojo.date.strftime(jsDate, "%Y-%m-%dT%H:%M:00%z");
+	};
+	this.fromRfcDateTime = function (rfcDate, useDefaultMinutes, isAnyTime) {
 		var tempDate = new Date();
-		if(!rfcDate || rfcDate.indexOf("T")==-1) {
-			if(useDefaultMinutes) {
-				tempDate.setMinutes(Math.floor(tempDate.getMinutes()/5)*5);
+		if (!rfcDate || rfcDate.indexOf("T") == -1) {
+			if (useDefaultMinutes) {
+				tempDate.setMinutes(Math.floor(tempDate.getMinutes() / 5) * 5);
 			} else {
 				tempDate.setMinutes(0);
 			}
 		} else {
 			var tempTime = rfcDate.split("T")[1].split(":");
-			// fullYear, month, date
 			var tempDate = new Date();
 			tempDate.setHours(tempTime[0]);
 			tempDate.setMinutes(tempTime[1]);
 		}
 		return tempDate;
-	}
-
-	this.toAmPmHour = function(hour) {
-		//summary: converts a 24-hour-based hour value to a 12-hour-based hour value, and an AM/PM flag
+	};
+	this.toAmPmHour = function (hour) {
 		var amPmHour = hour;
 		var isAm = true;
 		if (amPmHour == 0) {
 			amPmHour = 12;
-		} else if (amPmHour>12) {
-			amPmHour = amPmHour - 12;
-			isAm = false;
-		} else if (amPmHour == 12) {
-			isAm = false;
+		} else {
+			if (amPmHour > 12) {
+				amPmHour = amPmHour - 12;
+				isAm = false;
+			} else {
+				if (amPmHour == 12) {
+					isAm = false;
+				}
+			}
 		}
 		return [amPmHour, isAm];
-	}
-
-	this.fromAmPmHour = function(amPmHour, isAm) {
-		//summary: converts a 12-hour-based hour value and an AM/PM flag to a 24-hour-based hour value
+	};
+	this.fromAmPmHour = function (amPmHour, isAm) {
 		var hour = parseInt(amPmHour, 10);
-		if(isAm && hour == 12) {
+		if (isAm && hour == 12) {
 			hour = 0;
-		} else if (!isAm && hour<12) {
-			hour = hour + 12;
+		} else {
+			if (!isAm && hour < 12) {
+				hour = hour + 12;
+			}
 		}
 		return hour;
-	}
-}
+	};
+};
 
+
 __CPAN_FILE__ src/widget/SlideShow.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -52805,170 +33413,71 @@
 */
 
 dojo.provide("dojo.widget.SlideShow");
-
 dojo.require("dojo.event.*");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.lfx.*");
 dojo.require("dojo.html.display");
-
-
-dojo.widget.defineWidget(
-	"dojo.widget.SlideShow",
-	dojo.widget.HtmlWidget,
-	{
-		/*
-		summary
-			Takes a bunch of pictures and displays them one by one, like a slide show.
-		Usage
-			<img dojoType="SlideShow" 
-				imgUrls="images/1.jpg;images/2.jpg;images/3.jpg;images/4.jpg;images/5.jpg;images/6.jpg" 
-				imgUrlBase="/foo/bar/images/"
-				transitionInterval="700"
-				delay="7000" 
-				src="images/1.jpg"
-				imgWidth="400" imgHeight="300" />
-		*/
-
-		templatePath: dojo.uri.dojoUri("src/widget/templates/SlideShow.html"),
-		templateCssPath: dojo.uri.dojoUri("src/widget/templates/SlideShow.css"),
-
-		// imgUrls: String[]
-		//	List of images to use
-		//	Ex: "1.jpg;2.jpg;3.jpg"
-		imgUrls: [],
-		
-		// imgUrlBase: String
-		//	Path prefix to prepend to each file specified in imgUrls
-		//	Ex: "/foo/bar/images/"
-		imgUrlBase: "",
-
-		// delay: Integer
-		//	Number of milliseconds to display each image
-		delay: 4000,
-
-		// transitionInterval: Integer
-		//	Number of milliseconds to transition between pictures
-		transitionInterval: 2000,
-		
-		// imgWidth: Integer
-		//	Width of image in pixels
-		imgWidth: 800,
-		
-		// imgHeight: Integer
-		//	Height of image in pixels
-		imgHeight: 600,
-
-		// preventCache: Boolean
-		//	If true, download the image every time, rather than using cached version in browser
-		preventCache: false,
-		
-		// stopped: Boolean
-		//	is Animation paused?
-		stopped: false,
-
-		////// Properties
-		_urlsIdx: 0, 		// where in the images we are
-		_background: "img2", // what's in the bg
-		_foreground: "img1", // what's in the fg
-		fadeAnim: null, // references our animation
-
-		///////// our DOM nodes 
-		startStopButton: null,
-		img1: null,
-		img2: null,
-
-		postMixInProperties: function(){
-			this.width = this.imgWidth + "px";
-			this.height = this.imgHeight + "px";
-		},
-
-		fillInTemplate: function(){
-			// safari will cache the images and not fire an image onload event if
-			// there are only two images in the slideshow
-			if(dojo.render.html.safari && this.imgUrls.length == 2) {
-				this.preventCache = true;
-			}
-			dojo.html.setOpacity(this.img1, 0.9999);
-			dojo.html.setOpacity(this.img2, 0.9999);
-			if(this.imgUrls.length>1){
-				this.img2.src = this.imgUrlBase+this.imgUrls[this._urlsIdx++] + this._getUrlSuffix();
-				this._endTransition();
-			}else{
-				this.img1.src = this.imgUrlBase+this.imgUrls[this._urlsIdx++] + this._getUrlSuffix();
-			}
-		},
-
-		_getUrlSuffix: function() {
-			if(this.preventCache) {
-				return "?ts=" + (new Date()).getTime();
-			} else {
-				return "";
-			}
-		},
-		
-		togglePaused: function(){
-			// summary: pauses or restarts the slideshow
-			if(this.stopped){
-				this.stopped = false;
-				this._backgroundImageLoaded();
-				this.startStopButton.value= "pause";
-			}else{
-				this.stopped = true;
-				this.startStopButton.value= "play";
-			}
-		},
-
-		_backgroundImageLoaded: function(){
-			// start fading out the _foreground image
-			if(this.stopped){ return; }
-
-			// actually start the fadeOut effect
-			// NOTE: if we wanted to use other transition types, we'd set them up
-			// 		 here as well
-			if(this.fadeAnim) {
-				this.fadeAnim.stop();
-			}
-			this.fadeAnim = dojo.lfx.fadeOut(this[this._foreground], 
-				this.transitionInterval, null);
-			dojo.event.connect(this.fadeAnim,"onEnd",this,"_endTransition");
-			this.fadeAnim.play();
-		},
-
-		_endTransition: function(){
-			// move the _foreground image to the _background 
-			with(this[this._background].style){ zIndex = parseInt(zIndex)+1; }
-			with(this[this._foreground].style){ zIndex = parseInt(zIndex)-1; }
-
-			// fg/bg book-keeping
-			var tmp = this._foreground;
-			this._foreground = this._background;
-			this._background = tmp;
-			// keep on truckin
-			this._loadNextImage();
-		},
-
-		_loadNextImage: function(){
-			// summary
-			//	after specified delay,
-			//	load a new image in that container, and call _backgroundImageLoaded()
-			//	when it finishes loading
-			dojo.event.kwConnect({
-				srcObj: this[this._background],
-				srcFunc: "onload",
-				adviceObj: this,
-				adviceFunc: "_backgroundImageLoaded",
-				once: true, // kill old connections
-				delay: this.delay
-			});
-			dojo.html.setOpacity(this[this._background], 1.0);
-			this[this._background].src = this.imgUrlBase+this.imgUrls[this._urlsIdx++];
-			if(this._urlsIdx>(this.imgUrls.length-1)){
-				this._urlsIdx = 0;
-			}
-		}
+dojo.widget.defineWidget("dojo.widget.SlideShow", dojo.widget.HtmlWidget, {templateString:"<div style=\"position: relative; padding: 3px;\">\n\t\t<div>\n\t\t\t<input type=\"button\" value=\"pause\" \n\t\t\t\tdojoAttachPoint=\"startStopButton\"\n\t\t\t\tdojoAttachEvent=\"onClick: togglePaused;\">\n\t\t</div>\n\t\t<div style=\"position: relative; width: ${this.width}; height: ${this.height};\"\n\t\t\tdojoAttachPoint=\"imagesContainer\"\n\t\t\tdojoAttachEvent=\"onClick: togglePaused;\">\n\t\t\t<img dojoAttachPoint=\"img1\" class=\"slideShowImg\" \n\t\t\t\tstyle=\"z-index: 1; width: ${this.width}; height: ${this.height};\"  />\n\t\t\t<img dojoAttachPoint=\"img2\" class=\"slideShowImg\" \n\t\t\t\tstyle=\"z-index: 0; width: ${this.width}; height: ${this.height};\" />\n\t\t</div>\t\n</div>\n", templateCssString:".slideShowImg {\n\tposition: absolute;\n\tleft: 0px;\n\ttop: 0px; \n\tborder: 2px solid #4d4d4d;\n\tpadding: 0px;\n\tmargin: 0px;\n}\n\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/SlideShow.css"), imgUrls:[], imgUrlBase:"", delay:4000, transitionInterval:2000, imgWidth:800, imgHeight:600, preventCache:false, stopped:false, _urlsIdx:0, _background:"img2", _foreground:"img1", fadeAnim:null, startStopButton:null, img1:null, img2:null, postMixInProperties:function () {
+	this.width = this.imgWidth + "px";
+	this.height = this.imgHeight + "px";
+}, fillInTemplate:function () {
+	if (dojo.render.html.safari && this.imgUrls.length == 2) {
+		this.preventCache = true;
 	}
-);
+	dojo.html.setOpacity(this.img1, 0.9999);
+	dojo.html.setOpacity(this.img2, 0.9999);
+	if (this.imgUrls.length > 1) {
+		this.img2.src = this.imgUrlBase + this.imgUrls[this._urlsIdx++] + this._getUrlSuffix();
+		this._endTransition();
+	} else {
+		this.img1.src = this.imgUrlBase + this.imgUrls[this._urlsIdx++] + this._getUrlSuffix();
+	}
+}, _getUrlSuffix:function () {
+	if (this.preventCache) {
+		return "?ts=" + (new Date()).getTime();
+	} else {
+		return "";
+	}
+}, togglePaused:function () {
+	if (this.stopped) {
+		this.stopped = false;
+		this._backgroundImageLoaded();
+		this.startStopButton.value = "pause";
+	} else {
+		this.stopped = true;
+		this.startStopButton.value = "play";
+	}
+}, _backgroundImageLoaded:function () {
+	if (this.stopped) {
+		return;
+	}
+	if (this.fadeAnim) {
+		this.fadeAnim.stop();
+	}
+	this.fadeAnim = dojo.lfx.fadeOut(this[this._foreground], this.transitionInterval, null);
+	dojo.event.connect(this.fadeAnim, "onEnd", this, "_endTransition");
+	this.fadeAnim.play();
+}, _endTransition:function () {
+	with (this[this._background].style) {
+		zIndex = parseInt(zIndex) + 1;
+	}
+	with (this[this._foreground].style) {
+		zIndex = parseInt(zIndex) - 1;
+	}
+	var tmp = this._foreground;
+	this._foreground = this._background;
+	this._background = tmp;
+	this._loadNextImage();
+}, _loadNextImage:function () {
+	dojo.event.kwConnect({srcObj:this[this._background], srcFunc:"onload", adviceObj:this, adviceFunc:"_backgroundImageLoaded", once:true, delay:this.delay});
+	dojo.html.setOpacity(this[this._background], 1);
+	this[this._background].src = this.imgUrlBase + this.imgUrls[this._urlsIdx++];
+	if (this._urlsIdx > (this.imgUrls.length - 1)) {
+		this._urlsIdx = 0;
+	}
+}});
 
+
 __CPAN_FILE__ src/widget/SwtWidget.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -52981,62 +33490,48 @@
 */
 
 dojo.provide("dojo.widget.SwtWidget");
-
 dojo.require("dojo.experimental");
 dojo.experimental("dojo.widget.SwtWidget");
-
 dojo.require("dojo.event.*");
 dojo.require("dojo.widget.Widget");
 dojo.require("dojo.uri.*");
 dojo.require("dojo.lang.func");
 dojo.require("dojo.lang.extras");
-
-try{
+try {
 	importPackage(Packages.org.eclipse.swt.widgets);
-
-	dojo.declare("dojo.widget.SwtWidget", dojo.widget.Widget,
-		function() {
-			if((arguments.length>0)&&(typeof arguments[0] == "object")){
-				this.create(arguments[0]);
-			}
-		},
-	{
-		display: null,
-		shell: null,
-
-		show: function(){ },
-		hide: function(){ },
-
-		addChild: function(){ },
-		registerChild: function(){ },
-		addWidgetAsDirectChild: function(){ },
-		removeChild: function(){ },
-		destroyRendering: function(){ },
-		postInitialize: function(){ }
-	});
-
-	// initialize SWT runtime
-
+	dojo.declare("dojo.widget.SwtWidget", dojo.widget.Widget, function () {
+		if ((arguments.length > 0) && (typeof arguments[0] == "object")) {
+			this.create(arguments[0]);
+		}
+	}, {display:null, shell:null, show:function () {
+	}, hide:function () {
+	}, addChild:function () {
+	}, registerChild:function () {
+	}, addWidgetAsDirectChild:function () {
+	}, removeChild:function () {
+	}, destroyRendering:function () {
+	}, postInitialize:function () {
+	}});
 	dojo.widget.SwtWidget.prototype.display = new Display();
 	dojo.widget.SwtWidget.prototype.shell = new Shell(dojo.widget.SwtWidget.prototype.display);
-
-	dojo.widget.manager.startShell = function(){
+	dojo.widget.manager.startShell = function () {
 		var sh = dojo.widget.SwtWidget.prototype.shell;
 		var d = dojo.widget.SwtWidget.prototype.display;
 		sh.open();
-		while(!sh.isDisposed()){
+		while (!sh.isDisposed()) {
 			dojo.widget.manager.doNext();
-			if(!d.readAndDispatch()){
+			if (!d.readAndDispatch()) {
 				d.sleep();
 			}
 		}
 		d.dispose();
 	};
-}catch(e){
-	// seems we didn't have the SWT classes in the environment. Log it.
+}
+catch (e) {
 	dojo.debug("dojo.widget.SwtWidget not loaded. SWT classes not available");
 }
 
+
 __CPAN_DIR__ src/widget/html
 __CPAN_FILE__ src/widget/html/loader.js
 /*
@@ -53050,840 +33545,616 @@
 */
 
 dojo.provide("dojo.widget.html.loader");
-
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.io.*");
 dojo.require("dojo.lang.common");
 dojo.require("dojo.lang.extras");
-
 dojo.require("dojo.experimental");
 dojo.experimental("dojo.widget.html.loader");
-
-// as this is a singleton dojo.declare doesn't buy us anything here
-dojo.widget.html.loader = new (function(){
-	// summary:
-	// 	loading stuff moved out of contentpane to make it directly accessible by other widgets
-	this.toString = function(){ return "dojo.widget.html.loader"; }
+dojo.widget.html.loader = new (function () {
+	this.toString = function () {
+		return "dojo.widget.html.loader";
+	};
 	var _loader = this;
-
-	// back/forward tracking
-	dojo.addOnLoad(function(){
+	dojo.addOnLoad(function () {
 		dojo.experimental(_loader.toString());
 		var undo = dojo.evalObjPath("dojo.undo.browser");
-		if(djConfig["preventBackButtonFix"] && undo && !undo.initialState){
+		if (djConfig["preventBackButtonFix"] && undo && !undo.initialState) {
 			undo.setInitialState(new trackerObj);
 		}
 	});
-
 	var logger = {};
-	var trackerObj = function(id, data){
+	var trackerObj = function (id, data) {
 		this.id = id;
-		this.data = data
+		this.data = data;
 	};
-	trackerObj.prototype.handle = function(type){
-		if(typeof dojo == 'undefined'){ return; } // wtf? how can dojo become undef?
+	trackerObj.prototype.handle = function (type) {
+		if (typeof dojo == "undefined") {
+			return;
+		}
 		var wg = dojo.widget.byId(this.id);
-		if(wg){ wg.setContent(this.data, true); }
+		if (wg) {
+			wg.setContent(this.data, true);
+		}
 	};
-
-	this._log = function(widget, data){
-		// if a loader widget B is a child of loader widget A
-		// we need to destroy all of B's undo if we switch content
-		if(widget.trackHistory){
-			if(!logger[widget.widgetId]){
-				logger[widget.widgetId] = { childrenIds: [], stack:[data] };
-			}var children = logger[widget.widgetId].childrenIds;
-			while(children && children.length){
+	this._log = function (widget, data) {
+		if (widget.trackHistory) {
+			if (!logger[widget.widgetId]) {
+				logger[widget.widgetId] = {childrenIds:[], stack:[data]};
+			}
+			var children = logger[widget.widgetId].childrenIds;
+			while (children && children.length) {
 				delete logger[children.pop()];
 			}
-			for(var child in widget.children){
+			for (var child in widget.children) {
 				logger[widget.widgetId].childrenIds = child.widgetId;
 			}
 			dojo.undo.browser.addToHistory(new trackerObj(widget.widgetId, dojo.lang.shallowCopy(data, true)));
 		}
-	}
-
-	// shortCuts
+	};
 	var undef = dojo.lang.isUndefined;
 	var isFunc = dojo.lang.isFunction;
-
-
-
-	/************ private needed functions, no need to be part of widget API ***********/
-	// useful if user wants to prevent default behaviour ie: _setContent("Error...")
-	function handleDefaults(e, handler, useAlert){
-		if(!handler){ handler = "onContentError"; }
-		if(dojo.lang.isString(e)){ e = {_text: e}; }
-		if(!e._text){ e._text = e.toString(); }
-		e.toString = function(){ return this._text; };
-		if(typeof e.returnValue != "boolean"){
-			e.returnValue = true; 
+	function handleDefaults(e, handler, useAlert) {
+		if (!handler) {
+			handler = "onContentError";
 		}
-		if(typeof e.preventDefault != "function"){
-			e.preventDefault = function(){ this.returnValue = false; };
+		if (dojo.lang.isString(e)) {
+			e = {_text:e};
 		}
-		// call our handler
+		if (!e._text) {
+			e._text = e.toString();
+		}
+		e.toString = function () {
+			return this._text;
+		};
+		if (typeof e.returnValue != "boolean") {
+			e.returnValue = true;
+		}
+		if (typeof e.preventDefault != "function") {
+			e.preventDefault = function () {
+				this.returnValue = false;
+			};
+		}
 		this[handler](e);
-		if(e.returnValue){
-			if(useAlert){
+		if (e.returnValue) {
+			if (useAlert) {
 				alert(e.toString());
-			}else{
+			} else {
 				this.loader.callOnUnLoad.call(this, false);
 				this.onSetContent(e.toString());
 			}
 		}
-	};
-
-	// set up downloader, used by both scripts and content
+	}
 	function downloader(bindArgs) {
-		for(var x in this.bindArgs){
+		for (var x in this.bindArgs) {
 			bindArgs[x] = (undef(bindArgs[x]) ? this.bindArgs[x] : undefined);
 		}
 		var cache = this.cacheContent;
-		if(undef(bindArgs.useCache)){ bindArgs.useCache = cache; }
-		if(undef(bindArgs.preventCache)){ bindArgs.preventCache = !cache; }
-		if(undef(bindArgs.mimetype)){ bindArgs.mimetype = "text/html"; }
+		if (undef(bindArgs.useCache)) {
+			bindArgs.useCache = cache;
+		}
+		if (undef(bindArgs.preventCache)) {
+			bindArgs.preventCache = !cache;
+		}
+		if (undef(bindArgs.mimetype)) {
+			bindArgs.mimetype = "text/html";
+		}
 		this.loader.bindObj = dojo.io.bind(bindArgs);
-	};
-
-	// runs addOnLoad/addOnUnLoad functions
-	function stackRunner(st){
+	}
+	function stackRunner(st) {
 		var err = "", func = null;
 		var scope = this.scriptScope || dojo.global();
-		while(st.length){
+		while (st.length) {
 			func = st.shift();
-			try{
+			try {
 				func.call(scope);
-			}catch(e){
-				err += "\n"+func+" failed: "+e;
 			}
+			catch (e) {
+				err += "\n" + func + " failed: " + e;
+			}
 		}
-		if(err.length){
-			var name = (st== this.loader.addOnLoads) ? "addOnLoad" : "addOnUnLoad";
-			handleDefaults.call(this, name+" failure\n "+err, "onExecError", true);
+		if (err.length) {
+			var name = (st == this.loader.addOnLoads) ? "addOnLoad" : "addOnUnLoad";
+			handleDefaults.call(this, name + " failure\n " + err, "onExecError", true);
 		}
-	};
-
-	// push addOnLoad and addOnUnLoad functions onto stack
-	function stackPusher(st, obj, func){
-		if(typeof func == 'undefined') {
+	}
+	function stackPusher(st, obj, func) {
+		if (typeof func == "undefined") {
 			st.push(obj);
-		}else{
-			st.push(function(){ obj[func](); });
+		} else {
+			st.push(function () {
+				obj[func]();
+			});
 		}
-	};
-
-	// code saver, collects onLoad, onResized and isLoaded
-	function refreshed(){
+	}
+	function refreshed() {
 		this.onResized();
 		this.onLoad();
 		this.isLoaded = true;
-	};
-
-	// runs scripts and starts the content parser
-	function asyncParse(data){
-		if(this.executeScripts){
+	}
+	function asyncParse(data) {
+		if (this.executeScripts) {
 			this.onExecScript.call(this, data.scripts);
 		}
-		if(this.parseContent){
+		if (this.parseContent) {
 			this.onContentParse.call(this);
 		}
 		refreshed.call(this);
-	};
-
-	// run java function
-	function runHandler(){
-		//FIXME: current behaviour is to return false if handler is there; is that intended?
-		if(dojo.lang.isFunction(this.handler)) {
-			this.handler(this, this.containerNode||this.domNode);
+	}
+	function runHandler() {
+		if (dojo.lang.isFunction(this.handler)) {
+			this.handler(this, this.containerNode || this.domNode);
 			refreshed.call(this);
 			return false;
 		}
 		return true;
-	};
-
-	// divided up splitAndFixPaths in different parts
-	this.htmlContentBasicFix = function(/*string*/s, /*string||dojo.uri.Uri*/url){
-		// summary:
-		//	strips out <style, <link rel=stylesheet and <title tags
-		//	intended to take out tags that might cause DOM faults
+	}
+	this.htmlContentBasicFix = function (s, url) {
 		var titles = [], styles = [];
-		/************** <title> ***********/
-		// khtml can't attach a <style> or <title> node as child of body
 		var regex = /<title[^>]*>([\s\S]*?)<\/title>/i;
 		var match, attr;
-		while(match = regex.exec(s)){
+		while (match = regex.exec(s)) {
 			titles.push(match[1]);
 			s = s.substring(0, match.index) + s.substr(match.index + match[0].length);
-		};
-		/****************  cut out all <style> and <link rel="stylesheet" href=".."> **************/
+		}
 		regex = /(?:<(style)[^>]*>([\s\S]*?)<\/style>|<link ([^>]*rel=['"]?stylesheet['"]?[^>]*)>)/i;
-		while(match = regex.exec(s)){
-			if(match[1] && match[1].toLowerCase() == "style"){
-				styles.push(dojo.html.fixPathsInCssText(match[2],url));
-			}else if(attr = match[3].match(/href=(['"]?)([^'">]*)\1/i)){
-				styles.push({path: attr[2]});
+		while (match = regex.exec(s)) {
+			if (match[1] && match[1].toLowerCase() == "style") {
+				styles.push(dojo.html.fixPathsInCssText(match[2], url));
+			} else {
+				if (attr = match[3].match(/href=(['"]?)([^'">]*)\1/i)) {
+					styles.push({path:attr[2]});
+				}
 			}
 			s = s.substring(0, match.index) + s.substr(match.index + match[0].length);
-		};
-		return {'s': s, 'titles': titles, 'styles': styles};//object
+		}
+		return {"s":s, "titles":titles, "styles":styles};
 	};
-
-	this.htmlContentAdjustPaths = function(/*string*/s, /*string||dojo.uri.Uri*/url){
-		// summary:
-		//	adjusts relative paths in content to be relative to current page
+	this.htmlContentAdjustPaths = function (s, url) {
 		var tag = "", str = "", tagFix = "", path = "";
 		var attr = [], origPath = "", fix = "";
-
-		// attributepaths one tag can have multiple paths example:
-		// <input src="..." style="url(..)"/> or <a style="url(..)" href="..">
-		// strip out the tag and run fix on that.
-		// this guarantees that we won't run replace on another tag's attribute + it was easier do
 		var regexFindTag = /<[a-z][a-z0-9]*[^>]*\s(?:(?:src|href|style)=[^>])+[^>]*>/i;
 		var regexFindAttr = /\s(src|href|style)=(['"]?)([\w()\[\]\/.,\\'"-:;#=&?\s@]+?)\2/i;
-		// these are the supported protocols, all other is considered relative
 		var regexProtocols = /^(?:[#]|(?:(?:https?|ftps?|file|javascript|mailto|news):))/;
-
-		while(tag = regexFindTag.exec(s)){
+		while (tag = regexFindTag.exec(s)) {
 			str += s.substring(0, tag.index);
 			s = s.substring((tag.index + tag[0].length), s.length);
 			tag = tag[0];
-
-			// loop through attributes
-			tagFix = '';
-			while(attr = regexFindAttr.exec(tag)){
-				path = ""; origPath = attr[3];
-				switch(attr[1].toLowerCase()){
-					case "src":// falltrough
-					case "href":
-						if(regexProtocols.exec(origPath)){
-							path = origPath;
-						} else {
-							path = (new dojo.uri.Uri(url, origPath).toString());
-						}
-						break;
-					case "style":// style
-						path = dojo.html.fixPathsInCssText(origPath, url);
-						break;
-					default:
+			tagFix = "";
+			while (attr = regexFindAttr.exec(tag)) {
+				path = "";
+				origPath = attr[3];
+				switch (attr[1].toLowerCase()) {
+				  case "src":
+				  case "href":
+					if (regexProtocols.exec(origPath)) {
 						path = origPath;
+					} else {
+						path = (new dojo.uri.Uri(url, origPath).toString());
+					}
+					break;
+				  case "style":
+					path = dojo.html.fixPathsInCssText(origPath, url);
+					break;
+				  default:
+					path = origPath;
 				}
-
 				fix = " " + attr[1] + "=" + attr[2] + path + attr[2];
-
-				// slices up tag before next attribute check
 				tagFix += tag.substring(0, attr.index) + fix;
 				tag = tag.substring((attr.index + attr[0].length), tag.length);
 			}
 			str += tagFix + tag;
 		}
-		return str+s; // string
+		return str + s;
 	};
-
-
-	this.htmlContentScripts = function(/*string*/s, /*boolean*/collectScripts){
-		// summary:
-		// 	handles scripts and dojo .require(...) etc calls
-		// NOTE: we need to go through here even if we have executeScripts=false
-		//		 and if we have parseWidgets true 
+	this.htmlContentScripts = function (s, collectScripts) {
 		var scripts = [], requires = [], match = [];
 		var attr = "", tmp = null, tag = "", sc = "", str = "";
-		
-		/***************** cut out all <script> tags, push them into scripts array ***************/
 		var regex = /<script([^>]*)>([\s\S]*?)<\/script>/i;
 		var regexSrc = /src=(['"]?)([^"']*)\1/i;
 		var regexDojoJs = /.*(\bdojo\b\.js(?:\.uncompressed\.js)?)$/;
 		var regexInvalid = /(?:var )?\bdjConfig\b(?:[\s]*=[\s]*\{[^}]+\}|\.[\w]*[\s]*=[\s]*[^;\n]*)?;?|dojo\.hostenv\.writeIncludes\(\s*\);?/g;
 		var regexRequires = /dojo\.(?:(?:require(?:After)?(?:If)?)|(?:widget\.(?:manager\.)?registerWidgetPackage)|(?:(?:hostenv\.)?setModulePrefix)|defineNamespace)\((['"]).*?\1\)\s*;?/;
-
-		while(match = regex.exec(s)){
-			if(this.executeScripts && match[1]){
-				if(attr = regexSrc.exec(match[1])){
-					// remove a dojo.js or dojo.js.uncompressed.js from remoteScripts
-					// we declare all files named dojo.js as bad, regardless of path
-					if(regexDojoJs.exec(attr[2])){
-						dojo.debug("Security note! inhibit:"+attr[2]+" from  beeing loaded again.");
-					}else{
-						scripts.push({path: attr[2]});
+		while (match = regex.exec(s)) {
+			if (this.executeScripts && match[1]) {
+				if (attr = regexSrc.exec(match[1])) {
+					if (regexDojoJs.exec(attr[2])) {
+						dojo.debug("Security note! inhibit:" + attr[2] + " from  beeing loaded again.");
+					} else {
+						scripts.push({path:attr[2]});
 					}
 				}
 			}
-			if(match[2]){
-				// remove all invalid variables etc like djConfig and dojo.hostenv.writeIncludes()
+			if (match[2]) {
 				sc = match[2].replace(regexInvalid, "");
-				if(!sc){ continue; }
-
-				// cut out all dojo .require (...) calls, if we have execute 
-				// scripts false widgets don't get their require calls
-				// takes out possible widgetpackage registration as well
-				while(tmp = regexRequires.exec(sc)){
+				if (!sc) {
+					continue;
+				}
+				while (tmp = regexRequires.exec(sc)) {
 					requires.push(tmp[0]);
 					sc = sc.substring(0, tmp.index) + sc.substr(tmp.index + tmp[0].length);
 				}
-				if(collectScripts){
+				if (collectScripts) {
 					scripts.push(sc);
 				}
 			}
 			s = s.substr(0, match.index) + s.substr(match.index + match[0].length);
 		}
-		/******** scan for scriptScope in html eventHandlers 
-					and replace with link to this widget *********/
-		if(collectScripts){
+		if (collectScripts) {
 			var regex = /(<[a-zA-Z][a-zA-Z0-9]*\s[^>]*\S=(['"])[^>]*[^\.\]])scriptScope([^>]*>)/;
 			str = "";
-			while(tag = regex.exec(s)){
-				tmp = ((tag[2]=="'") ? '"': "'");
+			while (tag = regex.exec(s)) {
+				tmp = ((tag[2] == "'") ? "\"" : "'");
 				str += s.substring(0, tag.index);
-				s = s.substr(tag.index).replace(regex, "$1dojo.widget.byId("+ tmp + this.widgetId + tmp + ").scriptScope$3");
+				s = s.substr(tag.index).replace(regex, "$1dojo.widget.byId(" + tmp + this.widgetId + tmp + ").scriptScope$3");
 			}
 			s = str + s;
 		}
-		return {'s': s, 'requires': requires, 'scripts': scripts}; // object
+		return {"s":s, "requires":requires, "scripts":scripts};
 	};
-
-		
-	this.splitAndFixPaths = function(/*object*/args){
-		// summary:
-		//	pathfixes, require calls, css stuff and neccesary content clean
-		// args:
-		//	content 		string
-		//	url 			string? or dojo.uri.Uri that that pulled the content in, for path adjust
-		//	adjustPaths		boolean, if true adjust relative paths in content to match this page
-		//	collectScripts	boolean, if true it takes out all <script and <script src=.. tags and collects
-		//					 dojo.require calls in a separate array, useful for eval
-		//	collectRequires	boolean, if true and collectScripts is false it still collects scripts along with
-		//					 dojo.require calls
-		//	bodyExtract		boolean, if true only return content inside of the body tag
-
-		// return:			{xml: string,
-		//					styles: array, remote style get object {path: /*string*/url}
-		//					requires: array,
-		//					scripts: array, remote scripts get object {path: /*string*/url}
-		//					url: string}
-		if(!args.url) { args.url = "./"; } // point to this page if not set
-		// make sure back/forward buttons don't mess up url.
+	this.splitAndFixPaths = function (args) {
+		if (!args.url) {
+			args.url = "./";
+		}
 		url = new dojo.uri.Uri(location, args.url).toString();
-		var ret = {'xml': 	"",
-				'styles':	[],
-				'titles':	[],
-				'requires':	[],
-				'scripts':	[],
-				'url':		url };
-
-		if(args.content){ // make sure we don't run regexes on empty content
+		var ret = {"xml":"", "styles":[], "titles":[], "requires":[], "scripts":[], "url":url};
+		if (args.content) {
 			var tmp = null, content = args.content;
-			if(args.adjustPaths){
+			if (args.adjustPaths) {
 				content = _loader.htmlContentAdjustPaths.call(this, content, url);
 			}
-
 			tmp = _loader.htmlContentBasicFix.call(this, content, url);
 			content = tmp.s;
 			ret.styles = tmp.styles;
 			ret.titles = tmp.titles;
-
-			if(args.collectRequires || args.collectScripts){
+			if (args.collectRequires || args.collectScripts) {
 				tmp = _loader.htmlContentScripts.call(this, content, args.collectScripts);
 				content = tmp.s;
 				ret.requires = tmp.requires;
 				ret.scripts = tmp.scripts;
 			}
-
-			/********* extract content *********/
 			var match = [];
-			if(args.bodyExtract){
+			if (args.bodyExtract) {
 				match = content.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-				if(match) { content = match[1]; }
+				if (match) {
+					content = match[1];
+				}
 			}
 			ret.xml = content;
 		}
-		return ret;// object 
+		return ret;
 	};
-
-
-	// the all important startup function
-	this.hookUp = function(/*object*/args){
-		// summary:
-		// 	mixin or extend loader into a widget
-		// args:
-		//	widget: widget reference
-		//	mixin: boolean, default false
-		// 		if mixin true, it will only extend the current widget, not its prototype
+	this.hookUp = function (args) {
 		var widget = args.widget;
-		if(dojo.lang.isString(widget)){
-			if(args.mixin){	
-				dojo.raise(this.toString()+", cant use mixin when widget is a string");
-			 }
+		if (dojo.lang.isString(widget)) {
+			if (args.mixin) {
+				dojo.raise(this.toString() + ", cant use mixin when widget is a string");
+			}
 			widget = dojo.evalObjPath(widget);
 		}
-		if(!widget || !(widget instanceof dojo.widget.HtmlWidget)){
-			dojo.raise(this.toString()+" Widget isn't defined or isn't a HtmlWidget instance"); 
+		if (!widget || !(widget instanceof dojo.widget.HtmlWidget)) {
+			dojo.raise(this.toString() + " Widget isn't defined or isn't a HtmlWidget instance");
 		}
-		// make sure we don't mixin more than once
-		if(widget.loader && widget.setUrl){ return; }
-
-		// extend widget prototype or mixin this widget instance
+		if (widget.loader && widget.setUrl) {
+			return;
+		}
 		var widgetProto = (args.mixin) ? widget : widget.constructor.prototype;
-	
-		/********************************************
-		** per widgetImpl variables, mixin into widget 
-		********************************************/
-		// stuff it into a loader obj
-		widget.loader = {
-			isLoaded: false,
-			styleNodes:  [],
-			addOnLoads: [],
-			addOnUnLoads: [],
-			callOnUnLoad:(function(canCall){
-							return function(after){ this.abort();
-								if(canCall){ this.onUnLoad(); }
-								canCall = after;
-							};
-						})(false),
-			bindObj: null,
-			// to disconnect widget
-			unHook: (function(w, wg){
-				var oldProps = {
-					isContainer: w.isContainer,
-					adjustPats: w.adjustPaths,
-					href: w.href,
-					extractContent: w.extractContent,
-					parseContent: w.parseContent,
-					cacheContent: w.cacheContent,
-					bindArgs: w.bindArgs,
-					preload: w.preload,
-					refreshOnShow: w.refreshOnShow,
-					handler: w.handler,
-					trackHistory: w.trackHistory,
-					executeScripts: w.executeScripts,
-					scriptScope: w.scriptScope,
-					// functions
-					postCreate: w.postCreate,
-					show: w.show,
-					refresh: w.refresh,
-					loadContents: w.loadContents,
-					abort: w.abort,
-					destroy: w.destroy,
-					onLoad: w.onLoad,
-					onUnLoad: w.onUnLoad,
-					addOnLoad: w.addOnLoad,
-					addOnUnLoad: w.addOnUnLoad,
-					onDownloadStart: w.onDownloadStart,
-					onDownloadEnd: w.onDownloadEnd,
-					onDownloadError: w.onDownloadError,
-					onContentError: w.onContentError,
-					onExecError: w.onExecError,
-					onSetContent: w.onSetContent,
-					setUrl: w.setUrl,
-					setContent: w.setContent,
-					onContentParse: w.onContentParse,
-					onExecScript: w.onExecScript,
-					setHandler: w.setHandler
-				};
-				return function(){
-					if(wg.abort){ wg.abort(); }
-					// make sure we don't unhook prototype if there are more widgets of this type left
-					if((w != wg) && (dojo.widget.byType(wg.widgetType).length>1)){ return; }
-					for(var x in oldProps){
-						if(oldProps[x]===undefined){
-							delete w[x]; continue;
-						}
-						w[x] = oldProps[x];
+		widget.loader = {isLoaded:false, styleNodes:[], addOnLoads:[], addOnUnLoads:[], callOnUnLoad:(function (canCall) {
+			return function (after) {
+				this.abort();
+				if (canCall) {
+					this.onUnLoad();
+				}
+				canCall = after;
+			};
+		})(false), bindObj:null, unHook:(function (w, wg) {
+			var oldProps = {isContainer:w.isContainer, adjustPats:w.adjustPaths, href:w.href, extractContent:w.extractContent, parseContent:w.parseContent, cacheContent:w.cacheContent, bindArgs:w.bindArgs, preload:w.preload, refreshOnShow:w.refreshOnShow, handler:w.handler, trackHistory:w.trackHistory, executeScripts:w.executeScripts, scriptScope:w.scriptScope, postCreate:w.postCreate, show:w.show, refresh:w.refresh, loadContents:w.loadContents, abort:w.abort, destroy:w.destroy, onLoad:w.onLoad, onUnLoad:w.onUnLoad, addOnLoad:w.addOnLoad, addOnUnLoad:w.addOnUnLoad, onDownloadStart:w.onDownloadStart, onDownloadEnd:w.onDownloadEnd, onDownloadError:w.onDownloadError, onContentError:w.onContentError, onExecError:w.onExecError, onSetContent:w.onSetContent, setUrl:w.setUrl, setContent:w.setContent, onContentParse:w.onContentParse, onExecScript:w.onExecScript, setHandler:w.setHandler};
+			return function () {
+				if (wg.abort) {
+					wg.abort();
+				}
+				if ((w != wg) && (dojo.widget.byType(wg.widgetType).length > 1)) {
+					return;
+				}
+				for (var x in oldProps) {
+					if (oldProps[x] === undefined) {
+						delete w[x];
+						continue;
 					}
-					delete wg._loader_defined;
-					delete wg.loader;
-				};
-			})(widgetProto, widget)
-		};
-
-		// make sure we don't do this more than once per widget/widgetprototype
-		if(widgetProto._loader_defined || widget._loader_defined){ return; }		
-
-		/**************** private variables *********************/
-
-		// loading options, prototype parts of widget's mixin to prototype
-		dojo.mixin(widgetProto, {
-			// always set to a containerwidget
-			isContainer: true,
-			// fix relative paths in content to fit into this page
-			adjustPaths: 	undef(widgetProto.adjustPaths) ? true : widgetProto.adjustPaths,
-			// only usable on construction, use setUrl or setContent after that
-			href: 			undef(widgetProto.href) ? "" : widgetProto.href,
-			// extract visible content from inside of <body> .... </body>
-			extractContent: undef(widgetProto.extractContent) ? true : widgetProto.extractContent,
-			// construct all widgets that is in content
-			// FIXME: rename to parseWidgets?
-			parseContent: 	undef(widgetProto.parseContent) ? true : widgetProto.parseContent,
-			// use io binds javascript cache, or if false, prevent browsercache
-			cacheContent: 	undef(widgetProto.cacheContent) ? true : widgetProto.cacheContent,
-			// specify  specific  io.bind arguments such as transport and useCache
-			bindArgs:		undef(widgetProto.bindArgs) ? {} : widgetProto.bindArgs,
-			// force load even if widget isn't shown (lazyload setting)
-			preload: 		undef(widgetProto.preload) ? false : widgetProto.preload,
-			// reload content automatically onShow, use with cacheContent = flase
-			refreshOnShow:	undef(widgetProto.refreshOnShow) ? false : widgetProto.refreshOnShow,
-			// name of java function which should generate content
-			handler: 		undef(widgetProto.handler) ? "" : widgetProto.handler,
-			// if true scripts in content will be evaled after content is innerHTML'ed
-			executeScripts: undef(widgetProto.executeScripts) ? false : widgetProto.executeScripts,
-			// log contents (back/forward support)
-			trackHistory:	undef(widgetProto.tracHistory) ? false : widgetProto.trackHistory,
-			scriptScope: null // always overwrite
-		});
-
-		/****************************************************
-		******* public functions, becomes part of widget's API
-		*****************************************************/
-
-		/*********** Public functions that wigets cant overide **********/
-		// set up postCreate, call originalcode before our own
-		widgetProto.postCreate = (function(postCreate){
-			return function(){
-				if(widgetProto.constructor.superclass.postCreate != postCreate){
+					w[x] = oldProps[x];
+				}
+				delete wg._loader_defined;
+				delete wg.loader;
+			};
+		})(widgetProto, widget)};
+		if (widgetProto._loader_defined || widget._loader_defined) {
+			return;
+		}
+		dojo.mixin(widgetProto, {isContainer:true, adjustPaths:undef(widgetProto.adjustPaths) ? true : widgetProto.adjustPaths, href:undef(widgetProto.href) ? "" : widgetProto.href, extractContent:undef(widgetProto.extractContent) ? true : widgetProto.extractContent, parseContent:undef(widgetProto.parseContent) ? true : widgetProto.parseContent, cacheContent:undef(widgetProto.cacheContent) ? true : widgetProto.cacheContent, bindArgs:undef(widgetProto.bindArgs) ? {} : widgetProto.bindArgs, preload:undef(widgetProto.preload) ? false : widgetProto.preload, refreshOnShow:undef(widgetProto.refreshOnShow) ? false : widgetProto.refreshOnShow, handler:undef(widgetProto.handler) ? "" : widgetProto.handler, executeScripts:undef(widgetProto.executeScripts) ? false : widgetProto.executeScripts, trackHistory:undef(widgetProto.tracHistory) ? false : widgetProto.trackHistory, scriptScope:null});
+		widgetProto.postCreate = (function (postCreate) {
+			return function () {
+				if (widgetProto.constructor.superclass.postCreate != postCreate) {
 					postCreate.apply(this, arguments);
-				}else{
+				} else {
 					widgetProto.constructor.superclass.postCreate.apply(this, arguments);
 				}
-				if(this.handler!==""){ this.setHandler(this.handler); }
-				if(this.isShowing() || this.preload){ 
+				if (this.handler !== "") {
+					this.setHandler(this.handler);
+				}
+				if (this.isShowing() || this.preload) {
 					this.loadContents();
-					if(!this.href){ // back/forward save initial state
-						_loader._log(this,(this.domNode||this.containerNode).innerHTML);
+					if (!this.href) {
+						_loader._log(this, (this.domNode || this.containerNode).innerHTML);
 					}
 				}
-			}
+			};
 		})(widgetProto.postCreate);
-
-		// set up onShow listener, call original code after this block
-		widgetProto.show = (function(show){
-			return function(){
-				// if refreshOnShow is true, reload the contents every time; otherwise, load only the first time
-				if(this.refreshOnShow){
+		widgetProto.show = (function (show) {
+			return function () {
+				if (this.refreshOnShow) {
 					this.refresh();
-				}else{ 
+				} else {
 					this.loadContents();
 				}
-				if((widgetProto.constructor.superclass.show == show) || !isFunc(show)){
+				if ((widgetProto.constructor.superclass.show == show) || !isFunc(show)) {
 					widgetProto.constructor.superclass.show.apply(this, arguments);
-				}else{
+				} else {
 					show.apply(this, arguments);
 				}
 			};
 		})(widgetProto.show);
-
-		// destroy cleanups, original code in the middle
-		widgetProto.destroy = (function(destroy){
-			return function(destroy){
+		widgetProto.destroy = (function (destroy) {
+			return function (destroy) {
 				this.onUnLoad();
 				this.abort();
 				this.loader.unHook();
-				if((widgetProto.constructor.superclass.destroy != destroy) && isFunc(destroy)){
+				if ((widgetProto.constructor.superclass.destroy != destroy) && isFunc(destroy)) {
 					destroy.apply(this, arguments);
-				}else{
+				} else {
 					widgetProto.constructor.superclass.destroy.apply(this, arguments);
 				}
-			}
+			};
 		})(widgetProto.destroy);
-
-
-		/******* Public functions that widgets can overide *****/
-		// set up a refresh function
-		if(!widgetProto.refresh){
-			widgetProto.refresh = function(){
+		if (!widgetProto.refresh) {
+			widgetProto.refresh = function () {
 				this.loader.isLoaded = false;
 				this.loadContents();
 			};
 		}
-
-		// set up html loading contents
-		if(!widgetProto.loadContents){
-			widgetProto.loadContents = function(){
-				if(this.loader.isLoaded){ return; }
-				// javafunction
-				if(isFunc(this.handler)){
+		if (!widgetProto.loadContents) {
+			widgetProto.loadContents = function () {
+				if (this.loader.isLoaded) {
+					return;
+				}
+				if (isFunc(this.handler)) {
 					runHandler.call(this);
-				}else if(this.href !== ""){
-					handleDefaults.call(this, "Loading...", "onDownloadStart");
-					var self = this, url = this.href;
-					downloader.call(this, {
-						url: url,
-						load: function(type, data, xhr){
+				} else {
+					if (this.href !== "") {
+						handleDefaults.call(this, "Loading...", "onDownloadStart");
+						var self = this, url = this.href;
+						downloader.call(this, {url:url, load:function (type, data, xhr) {
 							self.onDownloadEnd.call(self, url, data);
-						},
-						error: function(type, err, xhr){
-							// XHR insnt a normal JS object, copy esentials
-							var e = {
-								responseText: xhr.responseText,
-								status: xhr.status,
-								statusText: xhr.statusText,
-								responseHeaders: (xhr.getAllResponseHeaders) ? xhr.getAllResponseHeaders():[],
-								_text: "Error loading '" + url + "' (" + xhr.status + " "+  xhr.statusText + ")"
-							};
+						}, error:function (type, err, xhr) {
+							var e = {responseText:xhr.responseText, status:xhr.status, statusText:xhr.statusText, responseHeaders:(xhr.getAllResponseHeaders) ? xhr.getAllResponseHeaders() : [], _text:"Error loading '" + url + "' (" + xhr.status + " " + xhr.statusText + ")"};
 							handleDefaults.call(self, e, "onDownloadError");
 							self.onLoad();
-						}
-					});
+						}});
+					}
 				}
 			};
 		}
-
-		// set up abort
-		if(!widgetProto.abort){
-			widgetProto.abort = function(){
-				if(!this.loader || !this.loader.bindObj || !this.loader.bindObj.abort){ return; }
+		if (!widgetProto.abort) {
+			widgetProto.abort = function () {
+				if (!this.loader || !this.loader.bindObj || !this.loader.bindObj.abort) {
+					return;
+				}
 				this.loader.bindObj.abort();
 				this.loader.bindObj = null;
 			};
 		}
-
-		// onLoad
-		if(!widgetProto.onLoad){
-			widgetProto.onLoad = function(){
+		if (!widgetProto.onLoad) {
+			widgetProto.onLoad = function () {
 				stackRunner.call(this, this.loader.addOnLoads);
 				this.loader.isLoaded = true;
 			};
 		}
-
-		// onUnLoad, original code in the middle
-		if(!widgetProto.onUnLoad){
-			widgetProto.onUnLoad = function(){
+		if (!widgetProto.onUnLoad) {
+			widgetProto.onUnLoad = function () {
 				stackRunner.call(this, this.loader.addOnUnLoads);
 				delete this.scriptScope;
-			}
+			};
 		}
-
-		// add to onLoad queue
-		if(!widgetProto.addOnLoad){
-			widgetProto.addOnLoad = function(obj, func){
+		if (!widgetProto.addOnLoad) {
+			widgetProto.addOnLoad = function (obj, func) {
 				stackPusher.call(this, this.loader.addOnLoads, obj, func);
 			};
 		}
-
-		// add to onUnLoad queue 
-		if(!widgetProto.addOnUnLoad){
-			widgetProto.addOnUnLoad = function(obj, func){
+		if (!widgetProto.addOnUnLoad) {
+			widgetProto.addOnUnLoad = function (obj, func) {
 				stackPusher.call(this, this.loader.addOnUnLoads, obj, func);
-			}
+			};
 		}
-
-		// script or java errors, preventDefault-able
-		if(!widgetProto.onExecError){
-			widgetProto.onExecError = function(){/*stub*/};
+		if (!widgetProto.onExecError) {
+			widgetProto.onExecError = function () {
+			};
 		}
-	
-		// called on DOM faults, require fault etc in content, preventDefault-able
-		if(!widgetProto.onContentError){
-			widgetProto.onContentError = function(){/*stub*/};
+		if (!widgetProto.onContentError) {
+			widgetProto.onContentError = function () {
+			};
 		}
-	
-		// called when download error occurs, preventDefault-able
-		if(!widgetProto.onDownloadError){
-			widgetProto.onDownloadError = function(){/*stub*/};
+		if (!widgetProto.onDownloadError) {
+			widgetProto.onDownloadError = function () {
+			};
 		}
-	
-		// called before download starts, preventDefault-able
-		if(!widgetProto.onDownloadStart){
-			widgetProto.onDownloadStart = function(onDownloadStart){/*stub*/};
+		if (!widgetProto.onDownloadStart) {
+			widgetProto.onDownloadStart = function (onDownloadStart) {
+			};
 		}
-	
-		// called when download is finished successfully
-		if(!widgetProto.onDownloadEnd){
-			widgetProto.onDownloadEnd = function(url, data){
-				var args =  {content: data,
-							url: url,
-							adjustPaths: this.adjustPaths,
-							collectScripts: this.executeScripts,
-							collectRequires: this.parseContent,
-							bodyExtract: this.extractContent };
+		if (!widgetProto.onDownloadEnd) {
+			widgetProto.onDownloadEnd = function (url, data) {
+				var args = {content:data, url:url, adjustPaths:this.adjustPaths, collectScripts:this.executeScripts, collectRequires:this.parseContent, bodyExtract:this.extractContent};
 				data = _loader.splitAndFixPaths.call(this, args);
 				this.setContent(data);
-			}
+			};
 		}
-
-		// previously called _setContent, widget defined onSetContent can modify content or cancel
-		if(!widgetProto.onSetContent){
-			widgetProto.onSetContent = function(cont){
+		if (!widgetProto.onSetContent) {
+			widgetProto.onSetContent = function (cont) {
 				this.destroyChildren();
-		
-				// remove old stylenodes from HEAD
 				var styleNodes = this.loader.styleNodes;
-				while(styleNodes.length){
+				while (styleNodes.length) {
 					var st = styleNodes.pop();
-					if(st && st.parentNode){
+					if (st && st.parentNode) {
 						st.parentNode.removeChild(st);
 					}
 				}
-		
 				var node = this.containerNode || this.domNode;
-				while(node.firstChild){
-					try{
+				while (node.firstChild) {
+					try {
 						dojo.event.browser.clean(node.firstChild);
-					}catch(e){}
+					}
+					catch (e) {
+					}
 					node.removeChild(node.firstChild);
 				}
-				try{
-					if(typeof cont != "string"){
+				try {
+					if (typeof cont != "string") {
 						node.appendChild(cont);
-					}else{
-						try{// hack to deal with domfaults, ie. appending div to tablenodes
+					} else {
+						try {
 							node.innerHTML = cont;
-						}catch(e){var tmp;
+						}
+						catch (e) {
+							var tmp;
 							(tmp = dojo.doc().createElement("div")).innerHTML = cont;
-							while(tmp.firstChild){
+							while (tmp.firstChild) {
 								node.appendChild(tmp.removeChild(tmp.firstChild));
 							}
 						}
 					}
-				}catch(e){
-					e._text = "Could'nt load content: "+e;
-					var useAlert = (this.loader._onSetContent_err == e._text); // make sure we don't loop
+				}
+				catch (e) {
+					e._text = "Could'nt load content: " + e;
+					var useAlert = (this.loader._onSetContent_err == e._text);
 					this.loader._onSetContent_err = e._text;
 					handleDefaults.call(this, e, "onContentError", useAlert);
 				}
 			};
 		}
-
-		if(!widgetProto.setUrl){
-			widgetProto.setUrl = function(url){
+		if (!widgetProto.setUrl) {
+			widgetProto.setUrl = function (url) {
 				this.href = url;
 				this.loader.isLoaded = false;
-				if ( this.preload || this.isShowing() ){
+				if (this.preload || this.isShowing()) {
 					this.loadContents();
 				}
-			}
+			};
 		}
-
-		if(!widgetProto.setContent){
-			widgetProto.setContent = function(data, dontLog){
+		if (!widgetProto.setContent) {
+			widgetProto.setContent = function (data, dontLog) {
 				this.loader.callOnUnLoad.call(this, true);
-		
-				if(!data||dojo.html.isNode(data)){
+				if (!data || dojo.html.isNode(data)) {
 					this.onSetContent(data);
 					refreshed.call(this);
-				}else{
-					// need to run splitAndFixPaths? ie. manually setting content
-					// adjustPaths is taken care of inside splitAndFixPaths
-					if(typeof data.xml != 'string'){
-						this.href = ""; // so we can refresh safely
-						var args =  {content: data,
-							url: this.href,
-							adjustPaths: this.adjustPaths,
-							collectScripts: this.executeScripts,
-							collectRequires: this.parseContent,
-							bodyExtract: this.extractContent };
-						data = _loader.splitAndFixPaths.call(this, args); 
-					}else if(data.url!="./"){
-						 this.url = data.url;// backbutton thing
+				} else {
+					if (typeof data.xml != "string") {
+						this.href = "";
+						var args = {content:data, url:this.href, adjustPaths:this.adjustPaths, collectScripts:this.executeScripts, collectRequires:this.parseContent, bodyExtract:this.extractContent};
+						data = _loader.splitAndFixPaths.call(this, args);
+					} else {
+						if (data.url != "./") {
+							this.url = data.url;
+						}
 					}
 					this.onSetContent(data.xml);
-	
-					// insert styles from content (in same order they came in)
-					for(var i = 0, styles = data.styles; i < styles.length; i++){
-						if(styles[i].path){
+					for (var i = 0, styles = data.styles; i < styles.length; i++) {
+						if (styles[i].path) {
 							this.loader.styleNodes.push(dojo.html.insertCssFile(styles[i].path));
-						}else{
+						} else {
 							this.loader.styleNodes.push(dojo.html.insertCssText(styles[i]));
 						}
 					}
-		
-					if(this.parseContent){
-						for(var i = 0, requires = data.requires; i < requires.length; i++){
-							try{
+					if (this.parseContent) {
+						for (var i = 0, requires = data.requires; i < requires.length; i++) {
+							try {
 								eval(requires[i]);
-							} catch(e){
-								e._text = "dojo.widget.html.loader.hookUp: error in package loading calls, "+(e.description||e);
+							}
+							catch (e) {
+								e._text = "dojo.widget.html.loader.hookUp: error in package loading calls, " + (e.description || e);
 								handleDefaults.call(this, e, "onContentError", true);
 							}
 						}
 					}
-					// need to allow async load, Xdomain uses it
-					// NOTE: on Xdomain loads this can break the sync thread of setContent
-					// 		if you you do any dojo. require(...) etc
-					if(dojo.hostenv.isXDomain && data.requires.length){
-						dojo.addOnLoad(function(){ 
+					if (dojo.hostenv.isXDomain && data.requires.length) {
+						dojo.addOnLoad(function () {
 							asyncParse.call(this, data);
-							if(!dontLog){
+							if (!dontLog) {
 								_loader._log(this, data);
 							}
-						});// this opens a thread need abort undo
+						});
 						dontLog = true;
-					}else{
+					} else {
 						asyncParse.call(this, data);
 					}
-				}if(!dontLog){
-// 					_loader._log(this, data);
 				}
+				if (!dontLog) {
+				}
 			};
 		}
-
-		if(!widgetProto.onContentParse){
-			widgetProto.onContentParse = function(){
+		if (!widgetProto.onContentParse) {
+			widgetProto.onContentParse = function () {
 				var node = this.containerNode || this.domNode;
 				var parser = new dojo.xml.Parse();
 				var frag = parser.parseElement(node, null, true);
 				dojo.widget.getParser().createSubComponents(frag, this);
 			};
 		}
-
-		// previously called _executeScripts
-		if(!widgetProto.onExecScript){
-			widgetProto.onExecScript = function(scripts){
-				// loop through the scripts in the order they came in
+		if (!widgetProto.onExecScript) {
+			widgetProto.onExecScript = function (scripts) {
 				var self = this, tmp = "", code = "";
-				for(var i = 0; i < scripts.length; i++){ // remotescript
-					if(scripts[i].path){
+				for (var i = 0; i < scripts.length; i++) {
+					if (scripts[i].path) {
 						var url = scripts[i].path;
-						downloader.call(this,{
-							'url': 		url,
-							'load': function(type, scriptStr){
-								(function(){tmp = scriptStr; scripts[i] = scriptStr;}).call(self);
-							},
-							'error': function(type, error){
-								error._text = type + " downloading remote script";
-								handleDefaults.call(self, error, "onExecError", true);
-							},
-							'mimetype': "text/plain",
-							'sync':     true
-						});
+						downloader.call(this, {"url":url, "load":function (type, scriptStr) {
+							(function () {
+								tmp = scriptStr;
+								scripts[i] = scriptStr;
+							}).call(self);
+						}, "error":function (type, error) {
+							error._text = type + " downloading remote script";
+							handleDefaults.call(self, error, "onExecError", true);
+						}, "mimetype":"text/plain", "sync":true});
 						code += tmp;
-					}else{
+					} else {
 						code += scripts[i];
 					}
 				}
-
-				try{
-					// initialize a new anonymous container for our script, don't make it part of this widget's scope chain
-					// instead send in a variable that points to this widget, useful to connect events to onLoad, onUnLoad etc..
+				try {
 					delete this.scriptScope;
-					this.scriptScope = new (new Function('_container_', code+'; return this;'))(self);
-				}catch(e){
-					e._text = "Error running scripts from content:\n"+(e.description||e.toString());
+					this.scriptScope = new (new Function("_container_", code + "; return this;"))(self);
+				}
+				catch (e) {
+					e._text = "Error running scripts from content:\n" + (e.description || e.toString());
 					handleDefaults.call(this, e, "onExecError", true);
 				}
 			};
 		}
-
-		// Generate content from given java function
-		if(!widgetProto.setHandler){
-			widgetProto.setHandler = function(handler) {
+		if (!widgetProto.setHandler) {
+			widgetProto.setHandler = function (handler) {
 				var fcn = dojo.lang.isFunction(handler) ? handler : window[handler];
-				if(!isFunc(fcn)) {
-					// FIXME: needs testing! somebody with java knowledge needs to try this
+				if (!isFunc(fcn)) {
 					handleDefaults.call(this, "Unable to set handler, '" + handler + "' not a function.", "onExecError", true);
 					return;
 				}
-				this.handler = function() {
+				this.handler = function () {
 					return fcn.apply(this, arguments);
 				};
 			};
 		}
-
-		// make sure we extend this widget only once
 		widgetProto._loader_defined = true;
 	};
-
-
 })();
 
+
 __CPAN_FILE__ src/widget/html/stabile.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -53896,206 +34167,120 @@
 */
 
 dojo.provide("dojo.widget.html.stabile");
-
-dojo.widget.html.stabile = {
-	// summary: Maintain state of widgets when user hits back/forward button
-
-	// Characters to quote in single-quoted regexprs
-	_sqQuotables: new RegExp("([\\\\'])", "g"),
-
-	// Current depth.
-	_depth: 0,
-
-	// Set to true when calling v.toString, to sniff for infinite
-	// recursion.
-	_recur: false,
-
-	// Levels of nesting of Array and object displays.
-	// If when >= depth, no display or array or object internals.
-	depthLimit: 2
-};
-
-//// PUBLIC METHODS
-
-dojo.widget.html.stabile.getState = function(id){
-	// summary
-	//	Get the state stored for the widget with the given ID, or undefined
-	//	if none.
-
+dojo.widget.html.stabile = {_sqQuotables:new RegExp("([\\\\'])", "g"), _depth:0, _recur:false, depthLimit:2};
+dojo.widget.html.stabile.getState = function (id) {
 	dojo.widget.html.stabile.setup();
 	return dojo.widget.html.stabile.widgetState[id];
-}
-
-dojo.widget.html.stabile.setState = function(id, state, isCommit){
-	// summary
-	//		Set the state stored for the widget with the given ID.  If isCommit
-	//		is true, commits all widget state to more stable storage.
-
+};
+dojo.widget.html.stabile.setState = function (id, state, isCommit) {
 	dojo.widget.html.stabile.setup();
 	dojo.widget.html.stabile.widgetState[id] = state;
-	if(isCommit){
+	if (isCommit) {
 		dojo.widget.html.stabile.commit(dojo.widget.html.stabile.widgetState);
 	}
-}
-
-dojo.widget.html.stabile.setup = function(){
-	// summary
-	//		Sets up widgetState: a hash keyed by widgetId, maps to an object
-	//		or array writable with "describe".  If there is data in the widget
-	//		storage area, use it, otherwise initialize an empty object.
-
-	if(!dojo.widget.html.stabile.widgetState){
+};
+dojo.widget.html.stabile.setup = function () {
+	if (!dojo.widget.html.stabile.widgetState) {
 		var text = dojo.widget.html.stabile._getStorage().value;
-		dojo.widget.html.stabile.widgetState = text ? dj_eval("("+text+")") : {};
+		dojo.widget.html.stabile.widgetState = text ? dj_eval("(" + text + ")") : {};
 	}
-}
-
-dojo.widget.html.stabile.commit = function(state){
-	// summary
-	//		Commits all widget state to more stable storage, so if the user
-	//		navigates away and returns, it can be restored.
-
+};
+dojo.widget.html.stabile.commit = function (state) {
 	dojo.widget.html.stabile._getStorage().value = dojo.widget.html.stabile.description(state);
-}
-
-dojo.widget.html.stabile.description = function(v, showAll){
-	// summary
-	//		Return a JSON "description string" for the given value.
-	//		Supports only core JavaScript types with literals, plus Date,
-	//		and cyclic structures are unsupported.
-	//		showAll defaults to false -- if true, this becomes a simple symbolic
-	//		object dumper, but you cannot "eval" the output.
-
-	// Save and later restore dojo.widget.html.stabile._depth;
+};
+dojo.widget.html.stabile.description = function (v, showAll) {
 	var depth = dojo.widget.html.stabile._depth;
-
-	var describeThis = function() {
-		 return this.description(this, true);
-	} 
-	
+	var describeThis = function () {
+		return this.description(this, true);
+	};
 	try {
-
-		if(v===void(0)){
+		if (v === void (0)) {
 			return "undefined";
 		}
-		if(v===null){
+		if (v === null) {
 			return "null";
 		}
-		if(typeof(v)=="boolean" || typeof(v)=="number"
-		    || v instanceof Boolean || v instanceof Number){
+		if (typeof (v) == "boolean" || typeof (v) == "number" || v instanceof Boolean || v instanceof Number) {
 			return v.toString();
 		}
-
-		if(typeof(v)=="string" || v instanceof String){
-			// Quote strings and their contents as required.
-			// Replacing by $& fails in IE 5.0
-			var v1 = v.replace(dojo.widget.html.stabile._sqQuotables, "\\$1"); 
+		if (typeof (v) == "string" || v instanceof String) {
+			var v1 = v.replace(dojo.widget.html.stabile._sqQuotables, "\\$1");
 			v1 = v1.replace(/\n/g, "\\n");
 			v1 = v1.replace(/\r/g, "\\r");
-			// Any other important special cases?
-			return "'"+v1+"'";
+			return "'" + v1 + "'";
 		}
-
-		if(v instanceof Date){
-			// Create a data constructor.
-			return "new Date("+d.getFullYear+","+d.getMonth()+","+d.getDate()+")";
+		if (v instanceof Date) {
+			return "new Date(" + d.getFullYear + "," + d.getMonth() + "," + d.getDate() + ")";
 		}
-
 		var d;
-		if(v instanceof Array || v.push){
-			// "push" test needed for KHTML/Safari, don't know why -cp
-
-			if(depth>=dojo.widget.html.stabile.depthLimit)
-			  return "[ ... ]";
-
+		if (v instanceof Array || v.push) {
+			if (depth >= dojo.widget.html.stabile.depthLimit) {
+				return "[ ... ]";
+			}
 			d = "[";
 			var first = true;
 			dojo.widget.html.stabile._depth++;
-			for(var i=0; i<v.length; i++){
-				// Skip functions and undefined values
-				// if(v[i]==undef || typeof(v[i])=="function")
-				//   continue;
-				if(first){
+			for (var i = 0; i < v.length; i++) {
+				if (first) {
 					first = false;
-				}else{
+				} else {
 					d += ",";
 				}
-				d+=arguments.callee(v[i], showAll);
+				d += arguments.callee(v[i], showAll);
 			}
-			return d+"]";
+			return d + "]";
 		}
-
-		if(v.constructor==Object
-		    || v.toString==describeThis){
-			if(depth>=dojo.widget.html.stabile.depthLimit)
-			  return "{ ... }";
-
-			// Instanceof Hash is good, or if we just use Objects,
-			// we can say v.constructor==Object.
-			// IE (5?) lacks hasOwnProperty, but perhaps objects do not always
-			// have prototypes??
-			if(typeof(v.hasOwnProperty)!="function" && v.prototype){
-				throw new Error("description: "+v+" not supported by script engine");
+		if (v.constructor == Object || v.toString == describeThis) {
+			if (depth >= dojo.widget.html.stabile.depthLimit) {
+				return "{ ... }";
 			}
+			if (typeof (v.hasOwnProperty) != "function" && v.prototype) {
+				throw new Error("description: " + v + " not supported by script engine");
+			}
 			var first = true;
 			d = "{";
 			dojo.widget.html.stabile._depth++;
-			for(var key in v){
-				// Skip values that are functions or undefined.
-				if(v[key]==void(0) || typeof(v[key])=="function")
+			for (var key in v) {
+				if (v[key] == void (0) || typeof (v[key]) == "function") {
 					continue;
-				if(first){
+				}
+				if (first) {
 					first = false;
-				}else{
+				} else {
 					d += ", ";
 				}
 				var kd = key;
-				// If the key is not a legal identifier, use its description.
-				// For strings this will quote the stirng.
-				if(!kd.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/)){
+				if (!kd.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/)) {
 					kd = arguments.callee(key, showAll);
 				}
-				d += kd+": "+arguments.callee(v[key], showAll);
+				d += kd + ": " + arguments.callee(v[key], showAll);
 			}
-			return d+"}";
+			return d + "}";
 		}
-
-		if(showAll){
-			if(dojo.widget.html.stabile._recur){
-				// Save the original definitions of toString;
+		if (showAll) {
+			if (dojo.widget.html.stabile._recur) {
 				var objectToString = Object.prototype.toString;
 				return objectToString.apply(v, []);
-			}else{
+			} else {
 				dojo.widget.html.stabile._recur = true;
 				return v.toString();
 			}
-		}else{
-			// log("Description? "+v.toString()+", "+typeof(v));
-			throw new Error("Unknown type: "+v);
+		} else {
+			throw new Error("Unknown type: " + v);
 			return "'unknown'";
 		}
-
-	} finally {
-		// Always restore the global current depth.
+	}
+	finally {
 		dojo.widget.html.stabile._depth = depth;
 	}
-
-}
-
-
-
-//// PRIVATE TO MODULE
-
-dojo.widget.html.stabile._getStorage = function(){
-	// summary
-	//	Gets an object (form field) with a read/write "value" property.
-
+};
+dojo.widget.html.stabile._getStorage = function () {
 	if (dojo.widget.html.stabile.dataField) {
 		return dojo.widget.html.stabile.dataField;
 	}
 	var form = document.forms._dojo_form;
-	return dojo.widget.html.stabile.dataField = form ? form.stabile : {value: ""};
-}
+	return dojo.widget.html.stabile.dataField = form ? form.stabile : {value:""};
+};
 
 
 __CPAN_FILE__ src/widget/html/layout.js
@@ -54110,128 +34295,87 @@
 */
 
 dojo.provide("dojo.widget.html.layout");
-
 dojo.require("dojo.lang.common");
 dojo.require("dojo.string.extras");
 dojo.require("dojo.html.style");
 dojo.require("dojo.html.layout");
-
-dojo.widget.html.layout = function(/*DomNode*/ container, /*Object[]*/ children, /*String*/ layoutPriority) {
-	/**
-	 * summary
-	 *		Layout a bunch of child dom nodes within a parent dom node
-	 * container:
-	 *		parent node
-	 * layoutPriority:
-	 *		"top-bottom" or "left-right"
-	 * children:
-	 *		an array like [ {domNode: foo, layoutAlign: "bottom" }, {domNode: bar, layoutAlign: "client"} ]
-	 */
-
+dojo.widget.html.layout = function (container, children, layoutPriority) {
 	dojo.html.addClass(container, "dojoLayoutContainer");
-
-	// Copy children array and remove elements w/out layout.
-	// Also record each child's position in the input array, for sorting purposes.
-	children = dojo.lang.filter(children, function(child, idx){
+	children = dojo.lang.filter(children, function (child, idx) {
 		child.idx = idx;
-		return dojo.lang.inArray(["top","bottom","left","right","client","flood"], child.layoutAlign)
+		return dojo.lang.inArray(["top", "bottom", "left", "right", "client", "flood"], child.layoutAlign);
 	});
-
-	// Order the children according to layoutPriority.
-	// Multiple children w/the same layoutPriority will be sorted by their position in the input array.
-	if(layoutPriority && layoutPriority!="none"){
-		var rank = function(child){
-			switch(child.layoutAlign){
-				case "flood":
-					return 1;
-				case "left":
-				case "right":
-					return (layoutPriority=="left-right") ? 2 : 3;
-				case "top":
-				case "bottom":
-					return (layoutPriority=="left-right") ? 3 : 2;
-				default:
-					return 4;
+	if (layoutPriority && layoutPriority != "none") {
+		var rank = function (child) {
+			switch (child.layoutAlign) {
+			  case "flood":
+				return 1;
+			  case "left":
+			  case "right":
+				return (layoutPriority == "left-right") ? 2 : 3;
+			  case "top":
+			  case "bottom":
+				return (layoutPriority == "left-right") ? 3 : 2;
+			  default:
+				return 4;
 			}
 		};
-		children.sort(function(a,b){
-			return (rank(a)-rank(b)) || (a.idx - b.idx);
+		children.sort(function (a, b) {
+			return (rank(a) - rank(b)) || (a.idx - b.idx);
 		});
 	}
-
-	// remaining space (blank area where nothing has been written)
-	var f={
-		top: dojo.html.getPixelValue(container, "padding-top", true),
-		left: dojo.html.getPixelValue(container, "padding-left", true)
-	};
+	var f = {top:dojo.html.getPixelValue(container, "padding-top", true), left:dojo.html.getPixelValue(container, "padding-left", true)};
 	dojo.lang.mixin(f, dojo.html.getContentBox(container));
-
-	// set positions/sizes
-	dojo.lang.forEach(children, function(child){
-		var elm=child.domNode;
-		var pos=child.layoutAlign;
-		// set elem to upper left corner of unused space; may move it later
-		with(elm.style){
-			left = f.left+"px";
-			top = f.top+"px";
+	dojo.lang.forEach(children, function (child) {
+		var elm = child.domNode;
+		var pos = child.layoutAlign;
+		with (elm.style) {
+			left = f.left + "px";
+			top = f.top + "px";
 			bottom = "auto";
 			right = "auto";
 		}
 		dojo.html.addClass(elm, "dojoAlign" + dojo.string.capitalize(pos));
-
-		// set size && adjust record of remaining space.
-		// note that setting the width of a <div> may affect it's height.
-		// TODO: same is true for widgets but need to implement API to support that
-		if ( (pos=="top")||(pos=="bottom") ) {
-			dojo.html.setMarginBox(elm, { width: f.width });
+		if ((pos == "top") || (pos == "bottom")) {
+			dojo.html.setMarginBox(elm, {width:f.width});
 			var h = dojo.html.getMarginBox(elm).height;
 			f.height -= h;
-			if(pos=="top"){
+			if (pos == "top") {
 				f.top += h;
-			}else{
+			} else {
 				elm.style.top = f.top + f.height + "px";
 			}
-			// TODO: for widgets I want to call resizeTo(), but I can't because
-			// I only want to set the width, and have the height determined
-			// dynamically.  (The thinner you make a div, the more height it consumes.)
-			if(child.onResized){
+			if (child.onResized) {
 				child.onResized();
 			}
-		}else if(pos=="left" || pos=="right"){
-			var w = dojo.html.getMarginBox(elm).width;
-
-			// TODO: I only want to set the height, not the width, but see bug#941 (FF),
-			// and also the resizeTo() function demands both height and width arguments
-			if(child.resizeTo){
-				child.resizeTo(w, f.height);
-			}else{
-				dojo.html.setMarginBox(elm, { width: w, height: f.height });
-			}	
-
-			f.width -= w;
-			if(pos=="left"){
-				f.left += w;
-			}else{
-				elm.style.left = f.left + f.width + "px";
+		} else {
+			if (pos == "left" || pos == "right") {
+				var w = dojo.html.getMarginBox(elm).width;
+				if (child.resizeTo) {
+					child.resizeTo(w, f.height);
+				} else {
+					dojo.html.setMarginBox(elm, {width:w, height:f.height});
+				}
+				f.width -= w;
+				if (pos == "left") {
+					f.left += w;
+				} else {
+					elm.style.left = f.left + f.width + "px";
+				}
+			} else {
+				if (pos == "flood" || pos == "client") {
+					if (child.resizeTo) {
+						child.resizeTo(f.width, f.height);
+					} else {
+						dojo.html.setMarginBox(elm, {width:f.width, height:f.height});
+					}
+				}
 			}
-		} else if(pos=="flood" || pos=="client"){
-			if(child.resizeTo){
-				child.resizeTo(f.width, f.height);
-			}else{
-				dojo.html.setMarginBox(elm, { width: f.width, height: f.height });
-			}
 		}
 	});
 };
+dojo.html.insertCssText(".dojoLayoutContainer{ position: relative; display: block; overflow: hidden; }\n" + "body .dojoAlignTop, body .dojoAlignBottom, body .dojoAlignLeft, body .dojoAlignRight { position: absolute; overflow: hidden; }\n" + "body .dojoAlignClient { position: absolute }\n" + ".dojoAlignClient { overflow: auto; }\n");
 
-// This is essential CSS to make layout work (it isn't "styling" CSS)
-// make sure that the position:absolute in dojoAlign* overrides other classes
-dojo.html.insertCssText(
-	".dojoLayoutContainer{ position: relative; display: block; overflow: hidden; }\n" +
-	"body .dojoAlignTop, body .dojoAlignBottom, body .dojoAlignLeft, body .dojoAlignRight { position: absolute; overflow: hidden; }\n" +
-	"body .dojoAlignClient { position: absolute }\n" +
-	".dojoAlignClient { overflow: auto; }\n"
-);
 
 __CPAN_DIR__ src/widget/Editor2Plugin
 __CPAN_FILE__ src/widget/Editor2Plugin/SimpleSignalCommands.js
@@ -54245,70 +34389,47 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-/*
- * This plugin adds save() and insertImage() to Editor2 widget, and two commands for each
- * of them. When the corresponding button is clicked in the toolbar, the added function in the
- * Editor2 widget is called. This mimics the original Editor2 behavior. If you want to have other
- * signals on the Editor2 widget, add them to dojo.widget.Editor2Plugin.SimpleSignalCommands.signals
- * NOTE: Please consider writing your own Editor2 plugin rather than using this backward compatible
- * plugin
- * ATTENTION: This plugin overwrites the new built-in insertImage dialog. (If this is not desired, set
- * dojo.widget.Editor2Plugin.SimpleSignalCommands.signals to not contain insertImage)
- */
-
-//uncomment this line to add save only (do not overwrite the new built-in insertImage dialog
-//this line should present before require dojo.widget.Editor2Plugin.SimpleSignalCommands
-//dojo.widget.Editor2Plugin['SimpleSignalCommands'] = {signals: ['save']};
-
 dojo.provide("dojo.widget.Editor2Plugin.SimpleSignalCommands");
-
 dojo.require("dojo.widget.Editor2");
-
-dojo.declare("dojo.widget.Editor2Plugin.SimpleSignalCommand", dojo.widget.Editor2Command,
-	function(editor, name){
-		if(dojo.widget.Editor2.prototype[name] == undefined){
-			dojo.widget.Editor2.prototype[name] = function(){ /*dojo.debug("Editor2::"+name);*/ };
-		}
-	},
-{
-	execute: function(){
-		this._editor[this._name]();
+dojo.declare("dojo.widget.Editor2Plugin.SimpleSignalCommand", dojo.widget.Editor2Command, function (editor, name) {
+	if (dojo.widget.Editor2.prototype[name] == undefined) {
+		dojo.widget.Editor2.prototype[name] = function () {
+		};
 	}
-});
-
-if(dojo.widget.Editor2Plugin['SimpleSignalCommands']){
-	dojo.widget.Editor2Plugin['_SimpleSignalCommands']=dojo.widget.Editor2Plugin['SimpleSignalCommands'];
+}, {execute:function () {
+	this._editor[this._name]();
+}});
+if (dojo.widget.Editor2Plugin["SimpleSignalCommands"]) {
+	dojo.widget.Editor2Plugin["_SimpleSignalCommands"] = dojo.widget.Editor2Plugin["SimpleSignalCommands"];
 }
-
-dojo.widget.Editor2Plugin.SimpleSignalCommands = {
-	signals: ['save', 'insertImage'],
-	Handler: function(name){
-		if(name.toLowerCase() == 'save'){
-			return new dojo.widget.Editor2ToolbarButton('Save');
-		}else if(name.toLowerCase() == 'insertimage'){
-			return new dojo.widget.Editor2ToolbarButton('InsertImage');
+dojo.widget.Editor2Plugin.SimpleSignalCommands = {signals:["save", "insertImage"], Handler:function (name) {
+	if (name.toLowerCase() == "save") {
+		return new dojo.widget.Editor2ToolbarButton("Save");
+	} else {
+		if (name.toLowerCase() == "insertimage") {
+			return new dojo.widget.Editor2ToolbarButton("InsertImage");
 		}
-	},
-	getCommand: function(editor, name){
-		var signal;
-		dojo.lang.every(this.signals,function(s){
-			if(s.toLowerCase() == name.toLowerCase()){
-				signal = s;
-				return false;
-			}
-			return true;
-		});
-		if(signal){
-			return new dojo.widget.Editor2Plugin.SimpleSignalCommand(editor, signal);
+	}
+}, getCommand:function (editor, name) {
+	var signal;
+	dojo.lang.every(this.signals, function (s) {
+		if (s.toLowerCase() == name.toLowerCase()) {
+			signal = s;
+			return false;
 		}
+		return true;
+	});
+	if (signal) {
+		return new dojo.widget.Editor2Plugin.SimpleSignalCommand(editor, signal);
 	}
-};
-
-if(dojo.widget.Editor2Plugin['_SimpleSignalCommands']){
-	dojo.lang.mixin(dojo.widget.Editor2Plugin.SimpleSignalCommands, dojo.widget.Editor2Plugin['_SimpleSignalCommands']);
+}};
+if (dojo.widget.Editor2Plugin["_SimpleSignalCommands"]) {
+	dojo.lang.mixin(dojo.widget.Editor2Plugin.SimpleSignalCommands, dojo.widget.Editor2Plugin["_SimpleSignalCommands"]);
 }
-dojo.widget.Editor2Manager.registerHandler(dojo.widget.Editor2Plugin.SimpleSignalCommands, 'getCommand');
+dojo.widget.Editor2Manager.registerHandler(dojo.widget.Editor2Plugin.SimpleSignalCommands, "getCommand");
 dojo.widget.Editor2ToolbarItemManager.registerHandler(dojo.widget.Editor2Plugin.SimpleSignalCommands.Handler);
+
+
 __CPAN_FILE__ src/widget/Editor2Plugin/FindReplaceDialog.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -54321,45 +34442,28 @@
 */
 
 dojo.provide("dojo.widget.Editor2Plugin.FindReplaceDialog");
-
-dojo.widget.defineWidget(
-	"dojo.widget.Editor2FindDialog",
-	dojo.widget.Editor2DialogContent,
-{
-	templatePath: dojo.uri.dojoUri("src/widget/templates/Editor2/Dialog/find.html"),
-
-	find: function(){
-		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-		var findcmd = curInst.getCommand('find');
-		var option = 0;
-	
-		if(this["find_option_casesens"].checked){
-			option |= findcmd.SearchOption.CaseSensitive;
-		}
-		if(this["find_option_backwards"].checked){
-			option |= findcmd.SearchOption.SearchBackwards;
-		}
-	
-		if(this["find_option_wholeword"].checked){
-			option |= findcmd.SearchOption.WholeWord;
-		}
-		findcmd.find(this["find_text"].value, option);
+dojo.widget.defineWidget("dojo.widget.Editor2FindDialog", dojo.widget.Editor2DialogContent, {templateString:"<table style=\"white-space: nowrap;\">\n<tr><td colspan='2'>Find: <input type=\"text\" dojoAttachPoint=\"find_text\" /></td></tr>\n<tr><td><input type=\"checkbox\" dojoType=\"CheckBox\" dojoAttachPoint=\"find_option_casesens\" />\n\t\t<label for=\"find_option_casesens\">Case Sensitive</label></td>\n\t\t\t<td><input type=\"checkbox\" dojoType=\"CheckBox\" dojoAttachPoint=\"find_option_backwards\" />\n\t\t<label for=\"find_option_backwards\">Search Backwards</label></td></tr>\n<tr><td style=\"display: none;\"><input type=\"checkbox\" dojoType=\"CheckBox\" dojoAttachPoint=\"find_option_wholeword\" />\n\t\t<label for=\"find_option_wholeword\">Whole Word</label></td>\n<tr><td colspan=\"1\">\n\t<table><tr>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:find'>Find</button></td>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Close</button></td>\n\t</tr></table>\n\t</td></tr>\n</table>\n", find:function () {
+	var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+	var findcmd = curInst.getCommand("find");
+	var option = 0;
+	if (this["find_option_casesens"].checked) {
+		option |= findcmd.SearchOption.CaseSensitive;
 	}
-});
+	if (this["find_option_backwards"].checked) {
+		option |= findcmd.SearchOption.SearchBackwards;
+	}
+	if (this["find_option_wholeword"].checked) {
+		option |= findcmd.SearchOption.WholeWord;
+	}
+	findcmd.find(this["find_text"].value, option);
+}});
+dojo.widget.defineWidget("dojo.widget.Editor2ReplaceDialog", dojo.widget.Editor2DialogContent, {templateString:"<table style=\"white-space: nowrap;\">\n<tr><td>Find: </td><td> <input type=\"text\" dojoAttachPoint=\"replace_text\" /></td></tr>\n<tr><td>Replace with: </td><td> <input type=\"text\" dojoAttachPoint=\"replace_text\" /></td></tr>\n<tr><td colspan='2'><table><tr><td><input type=\"checkbox\" dojoType=\"CheckBox\" dojoAttachPoint=\"replace_option_casesens\" id=\"dojo_replace_option_casesens\" />\n\t\t<label for=\"dojo_replace_option_casesens\">Case Sensitive</label></td>\n\t\t\t<td><input type=\"checkbox\" dojoType=\"CheckBox\" dojoAttachPoint=\"replace_option_backwards\" id=\"dojo_replace_option_backwards\" />\n\t\t<label for=\"dojo_replace_option_backwards\">Search Backwards</label></td></tr></table></td></tr>\n<tr><td colspan=2\">\n\t<table><tr>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:replace'>Replace</button></td>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:replaceAll'>Replace All</button></td>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Close</button></td>\n\t</tr></table>\n\t</td></tr>\n</table>\n", replace:function () {
+	alert("not implemented yet");
+}, replaceAll:function () {
+	alert("not implemented yet");
+}});
 
-dojo.widget.defineWidget(
-	"dojo.widget.Editor2ReplaceDialog",
-	dojo.widget.Editor2DialogContent,
-{
-	templatePath: dojo.uri.dojoUri("src/widget/templates/Editor2/Dialog/replace.html"),
 
-	replace: function(){
-		alert("not implemented yet");
-	},
-	replaceAll: function(){
-		alert("not implemented yet");
-	}
-});
 __CPAN_FILE__ src/widget/Editor2Plugin/InsertImageDialog.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -54372,59 +34476,49 @@
 */
 
 dojo.provide("dojo.widget.Editor2Plugin.InsertImageDialog");
-
-dojo.widget.defineWidget(
-	"dojo.widget.Editor2InsertImageDialog",
-	dojo.widget.Editor2DialogContent,
-{
-	templatePath: dojo.uri.dojoUri("src/widget/templates/Editor2/Dialog/insertimage.html"),
-
-	editableAttributes: ['src', 'alt', 'width', 'height', 'hspace', 'vspace', 'border', 'align'],
-	loadContent: function(){
-		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-		this.imageNode = dojo.withGlobal(curInst.window, "getSelectedElement", dojo.html.selection);
-		if(!this.imageNode){
-			this.imageNode = dojo.withGlobal(curInst.window, "getAncestorElement", dojo.html.selection, ['img']);
-		}
-		var imageAttributes = {};
-		this.extraAttribText = "";
-		if(this.imageNode){
-			var attrs = this.imageNode.attributes;
-			for(var i=0; i<attrs.length; i++) {
-				if(dojo.lang.find(this.editableAttributes, attrs[i].name.toLowerCase())>-1){
-					imageAttributes[attrs[i].name] = attrs[i].value;
-				}else{
-					this.extraAttribText += attrs[i].name + '="'+attrs[i].value+'" ';
-				}
+dojo.widget.defineWidget("dojo.widget.Editor2InsertImageDialog", dojo.widget.Editor2DialogContent, {templateString:"<table cellspacing=\"1\" cellpadding=\"1\" border=\"0\" width=\"100%\" height=\"100%\">\n\t<tr>\n\t\t<td>\n\t\t\t<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\" border=\"0\">\n\t\t\t\t<tr>\n\t\t\t\t\t<td width=\"100%\">\n\t\t\t\t\t\t<span>URL</span>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td style=\"display: none\" nowrap=\"nowrap\" rowspan=\"2\">\n\t\t\t\t\t\t<!--input id=\"btnBrowse\" onclick=\"BrowseServer();\" type=\"button\" value=\"Browse Server\"/-->\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td valign=\"top\">\n\t\t\t\t\t\t<input dojoAttachPoint=\"image_src\" style=\"width: 100%\" type=\"text\" />\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</td>\n\t</tr>\n\t<tr>\n\t\t<td>\n\t\t\t<span>Alternative Text</span><br />\n\t\t\t<input dojoAttachPoint=\"image_alt\" style=\"width: 100%\" type=\"text\" /><br />\n\t\t</td>\n\t</tr>\n\t<tr>\n\t\t<td valign=\"top\">\n\t\t\t<table><tr><td>\n\t\t\t\t\t\t<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td nowrap=\"nowrap\">\n\t\t\t\t\t\t\t\t\t<span>Width</span>&nbsp;</td>\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<input type=\"text\" size=\"3\" dojoAttachPoint=\"image_width\" /></td>\n\n\t\t\t\t\t\t\t\t<td rowspan=\"2\">\n\t\t\t\t\t\t\t\t\t<!--div id=\"btnLockSizes\" class=\"BtnLocked\" onmouseover=\"this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ) + ' BtnOver';\"\n\t\t\t\t\t\t\t\t\t\tonmouseout=\"this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' );\" title=\"Lock Sizes\"\n\t\t\t\t\t\t\t\t\t\tonclick=\"SwitchLock(this);\">\n\t\t\t\t\t\t\t\t\t</div-->\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<td rowspan=\"2\">\n\t\t\t\t\t\t\t\t\t<!--div id=\"btnResetSize\" class=\"BtnReset\" onmouseover=\"this.className='BtnReset BtnOver';\"\n\t\t\t\t\t\t\t\t\t\tonmouseout=\"this.className='BtnReset';\" title=\"Reset Size\" onclick=\"ResetSizes();\">\n\t\t\t\t\t\t\t\t\t</div-->\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td nowrap=\"nowrap\">\n\t\t\t\t\t\t\t\t\t<span>Height</span>&nbsp;</td>\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<input type=\"text\" size=\"3\" dojoAttachPoint=\"image_height\" /></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</td><td>\n\n\t\t\t\t\t\t<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n\t\t\t\t\t\t\t<tr>\n\n\t\t\t\t\t\t\t\t<td nowrap=\"nowrap\">\n\t\t\t\t\t\t\t\t\t<span >HSpace</span>&nbsp;</td>\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<input type=\"text\" size=\"2\" dojoAttachPoint=\"image_hspace\"/></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td nowrap=\"nowrap\">\n\t\t\t\t\t\t\t\t\t<span >VSpace</span>&nbsp;</td>\n\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<input type=\"text\" size=\"2\" dojoAttachPoint=\"image_vspace\" /></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</td></tr>\n\t\t\t\t\t<tr><td colspan=\"2\">\n\t\t\t\t\t\t<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td nowrap=\"nowrap\">\n\t\t\t\t\t\t\t\t\t<span>Border</span>&nbsp;</td>\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<input type=\"text\" size=\"2\" value=\"\" dojoAttachPoint=\"image_border\" /></td>\n\t\t\t\t\t\t\t\t<td>&nbsp;&nbsp;&nbsp;</td>\n\t\t\t\t\t\t\t\t<td nowrap=\"nowrap\">\n\t\t\t\t\t\t\t\t\t<span >Align</span>&nbsp;</td>\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<select dojoAttachPoint=\"image_align\">\n\n\t\t\t\t\t\t\t\t\t\t<option value=\"\" selected=\"selected\"></option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"left\">Left</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"absBottom\">Abs Bottom</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"absMiddle\">Abs Middle</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"baseline\">Baseline</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"bottom\">Bottom</option>\n\n\t\t\t\t\t\t\t\t\t\t<option value=\"middle\">Middle</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"right\">Right</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"textTop\">Text Top</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"top\">Top</option>\n\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</td>\n\t\t\t\t</tr></table>\n\t\t</td>\n\t</tr>\n\t<tr><td>\n\t\t<table><tr>\n\t\t<td><button dojoType='Button' dojoAttachEvent='onClick:ok'>OK</button></td>\n\t\t<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Cancel</button></td>\n\t\t</tr></table>\n\t</td></tr>\n</table>\n", editableAttributes:["src", "alt", "width", "height", "hspace", "vspace", "border", "align"], loadContent:function () {
+	var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+	this.imageNode = dojo.withGlobal(curInst.window, "getSelectedElement", dojo.html.selection);
+	if (!this.imageNode) {
+		this.imageNode = dojo.withGlobal(curInst.window, "getAncestorElement", dojo.html.selection, ["img"]);
+	}
+	var imageAttributes = {};
+	this.extraAttribText = "";
+	if (this.imageNode) {
+		var attrs = this.imageNode.attributes;
+		for (var i = 0; i < attrs.length; i++) {
+			if (dojo.lang.find(this.editableAttributes, attrs[i].name.toLowerCase()) > -1) {
+				imageAttributes[attrs[i].name] = attrs[i].value;
+			} else {
+				this.extraAttribText += attrs[i].name + "=\"" + attrs[i].value + "\" ";
 			}
 		}
-		for(var i=0; i<this.editableAttributes.length; ++i){
-			name = this.editableAttributes[i];
-			this["image_"+name].value = (imageAttributes[name] == undefined) ? "" : imageAttributes[name] ;
+	}
+	for (var i = 0; i < this.editableAttributes.length; ++i) {
+		name = this.editableAttributes[i];
+		this["image_" + name].value = (imageAttributes[name] == undefined) ? "" : imageAttributes[name];
+	}
+	return true;
+}, ok:function () {
+	var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+	var insertcmd = curInst.getCommand("inserthtml");
+	var option = 0;
+	var attstr = "";
+	for (var i = 0; i < this.editableAttributes.length; ++i) {
+		name = this.editableAttributes[i];
+		var value = this["image_" + name].value;
+		if (value.length > 0) {
+			attstr += name + "=\"" + value + "\" ";
 		}
-		return true;
-	},
-	ok: function(){
-		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-		var insertcmd = curInst.getCommand('inserthtml');
-		var option = 0;
+	}
+	if (this.imageNode) {
+		dojo.withGlobal(curInst.window, "selectElement", dojo.html.selection, [this.imageNode]);
+	}
+	insertcmd.execute("<img " + attstr + this.extraAttribText + "/>");
+	this.cancel();
+}});
 
-		var attstr='';
-		for(var i=0; i<this.editableAttributes.length; ++i){
-			name = this.editableAttributes[i];
-			var value = this["image_"+name].value;
-			if(value.length > 0){
-				attstr += name + '="'+value+'" ';
-			}
-		}
-		if(this.imageNode){
-			dojo.withGlobal(curInst.window, "selectElement", dojo.html.selection, [this.imageNode]);
-		}
-		insertcmd.execute('<img '+attstr+this.extraAttribText+'/>');
 
-		this.cancel();
-	}
-});
 __CPAN_FILE__ src/widget/Editor2Plugin/CreateLinkDialog.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -54437,73 +34531,57 @@
 */
 
 dojo.provide("dojo.widget.Editor2Plugin.CreateLinkDialog");
-
-dojo.widget.defineWidget(
-	"dojo.widget.Editor2CreateLinkDialog",
-	dojo.widget.Editor2DialogContent,
-{
-	templatePath: dojo.uri.dojoUri("src/widget/templates/Editor2/Dialog/createlink.html"),
-
-	editableAttributes: ['href', 'target', 'class'],
-	loadContent: function(){
-		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-
-		curInst.saveSelection(); //save selection (none-activeX IE)
-
-		this.linkNode = dojo.withGlobal(curInst.window, "getAncestorElement", dojo.html.selection, ['a']);
-		var linkAttributes = {};
-		this.extraAttribText = "";
-		if(this.linkNode){
-			var attrs = this.linkNode.attributes;
-			for(var i=0; i<attrs.length; i++) {
-				if(dojo.lang.find(this.editableAttributes, attrs[i].name.toLowerCase())>-1){
-					linkAttributes[attrs[i].name] = attrs[i].value;
-				}else{
-					//IE lists all attributes, even default ones, filter them
-					if(attrs[i].specified == undefined || attrs[i].specified){
-						this.extraAttribText += attrs[i].name + '="'+attrs[i].value+'" ';
-					}
+dojo.widget.defineWidget("dojo.widget.Editor2CreateLinkDialog", dojo.widget.Editor2DialogContent, {templateString:"<table>\n<tr><td>URL</td><td> <input type=\"text\" dojoAttachPoint=\"link_href\" name=\"dojo_createLink_href\"/></td></tr>\n<tr><td>Target </td><td><select dojoAttachPoint=\"link_target\">\n\t<option value=\"\">Self</option>\n\t<option value=\"_blank\">New Window</option>\n\t<option value=\"_top\">Top Window</option>\n\t</select></td></tr>\n<tr><td>Class </td><td><input type=\"text\" dojoAttachPoint=\"link_class\" /></td></tr>\n<tr><td colspan=\"2\">\n\t<table><tr>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:ok'>OK</button></td>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Cancel</button></td>\n\t</tr></table>\n\t</td></tr>\n</table>\n", editableAttributes:["href", "target", "class"], loadContent:function () {
+	var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+	curInst.saveSelection();
+	this.linkNode = dojo.withGlobal(curInst.window, "getAncestorElement", dojo.html.selection, ["a"]);
+	var linkAttributes = {};
+	this.extraAttribText = "";
+	if (this.linkNode) {
+		var attrs = this.linkNode.attributes;
+		for (var i = 0; i < attrs.length; i++) {
+			if (dojo.lang.find(this.editableAttributes, attrs[i].name.toLowerCase()) > -1) {
+				linkAttributes[attrs[i].name] = attrs[i].value;
+			} else {
+				if (attrs[i].specified == undefined || attrs[i].specified) {
+					this.extraAttribText += attrs[i].name + "=\"" + attrs[i].value + "\" ";
 				}
 			}
-		}else{
-			var html = dojo.withGlobal(curInst.window, "getSelectedText", dojo.html.selection);
-			if(html == null || html.length == 0){
-				alert("Please select some text to create a link.");
-				return false;//do not show the dialog
-			}
 		}
-
-		for(var i=0; i<this.editableAttributes.length; ++i){
-			name = this.editableAttributes[i];
-			this["link_"+name].value = (linkAttributes[name] == undefined) ? "" : linkAttributes[name] ;
+	} else {
+		var html = dojo.withGlobal(curInst.window, "getSelectedText", dojo.html.selection);
+		if (html == null || html.length == 0) {
+			alert("Please select some text to create a link.");
+			return false;
 		}
-		return true;
-	},
-	ok: function(){
-		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-		curInst.restoreSelection(); //restore previous selection, required for none-activeX IE
-
-		if(!this.linkNode){
-			var html = dojo.withGlobal(curInst.window, "getSelectedHtml", dojo.html.selection);
-		}else{
-			var html = this.linkNode.innerHTML;
-			dojo.withGlobal(curInst.window, "selectElement", dojo.html.selection, [this.linkNode]);
+	}
+	for (var i = 0; i < this.editableAttributes.length; ++i) {
+		name = this.editableAttributes[i];
+		this["link_" + name].value = (linkAttributes[name] == undefined) ? "" : linkAttributes[name];
+	}
+	return true;
+}, ok:function () {
+	var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+	curInst.restoreSelection();
+	if (!this.linkNode) {
+		var html = dojo.withGlobal(curInst.window, "getSelectedHtml", dojo.html.selection);
+	} else {
+		var html = this.linkNode.innerHTML;
+		dojo.withGlobal(curInst.window, "selectElement", dojo.html.selection, [this.linkNode]);
+	}
+	var attstr = "";
+	for (var i = 0; i < this.editableAttributes.length; ++i) {
+		name = this.editableAttributes[i];
+		var value = this["link_" + name].value;
+		if (value.length > 0) {
+			attstr += name + "=\"" + value + "\" ";
 		}
+	}
+	curInst.execCommand("inserthtml", "<a " + attstr + this.extraAttribText + ">" + html + "</a>");
+	this.cancel();
+}});
 
-		var attstr='';
-		for(var i=0; i<this.editableAttributes.length; ++i){
-			name = this.editableAttributes[i];
-			var value = this["link_"+name].value;
-			if(value.length > 0){
-				attstr += name + '="'+value+'" ';
-			}
-		}
 
-		curInst.execCommand('inserthtml', '<a '+attstr+this.extraAttribText+'>'+html+'</a>');
-
-		this.cancel();
-	}
-});
 __CPAN_FILE__ src/widget/Editor2Plugin/TableOperation.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -54516,154 +34594,114 @@
 */
 
 dojo.provide("dojo.widget.Editor2Plugin.TableOperation");
-
 dojo.require("dojo.widget.Editor2");
-
-//subscribe to dojo.widget.RichText::init, not onLoad because after onLoad
-//the stylesheets for the editing areas are already applied and the prefilters
-//are executed, so we have to insert our own trick before that point
-dojo.event.topic.subscribe("dojo.widget.RichText::init", function(editor){
-	if(dojo.render.html.ie){
-		//add/remove a class to a table with border=0 to show the border when loading/saving
+dojo.event.topic.subscribe("dojo.widget.RichText::init", function (editor) {
+	if (dojo.render.html.ie) {
 		editor.contentDomPreFilters.push(dojo.widget.Editor2Plugin.TableOperation.showIETableBorder);
 		editor.contentDomPostFilters.push(dojo.widget.Editor2Plugin.TableOperation.removeIEFakeClass);
 	}
-	//create a toggletableborder command for this editor so that tables without border can be seen
 	editor.getCommand("toggletableborder");
 });
-
-dojo.lang.declare("dojo.widget.Editor2Plugin.deleteTableCommand", dojo.widget.Editor2Command,
-{
-	execute: function(){
-		var table = dojo.withGlobal(this._editor.window, "getAncestorElement", dojo.html.selection, ['table']);
-		if(table){
-			dojo.withGlobal(this._editor.window, "selectElement", dojo.html.selection, [table]);
-			this._editor.execCommand("inserthtml", " "); //Moz does not like an empty string, so a space here instead
-		}
-	},
-	getState: function(){
-		if(this._editor._lastStateTimestamp > this._updateTime || this._state == undefined){
-			this._updateTime = this._editor._lastStateTimestamp;
-			var table = dojo.withGlobal(this._editor.window, "hasAncestorElement", dojo.html.selection, ['table']);
-			this._state = table ? dojo.widget.Editor2Manager.commandState.Enabled : dojo.widget.Editor2Manager.commandState.Disabled;
-		}
-		return this._state;
-	},
-	getText: function(){
-		return 'Delete Table';
+dojo.lang.declare("dojo.widget.Editor2Plugin.deleteTableCommand", dojo.widget.Editor2Command, {execute:function () {
+	var table = dojo.withGlobal(this._editor.window, "getAncestorElement", dojo.html.selection, ["table"]);
+	if (table) {
+		dojo.withGlobal(this._editor.window, "selectElement", dojo.html.selection, [table]);
+		this._editor.execCommand("inserthtml", " ");
 	}
-});
-
-dojo.lang.declare("dojo.widget.Editor2Plugin.toggleTableBorderCommand", dojo.widget.Editor2Command,
-	function(){
+}, getState:function () {
+	if (this._editor._lastStateTimestamp > this._updateTime || this._state == undefined) {
+		this._updateTime = this._editor._lastStateTimestamp;
+		var table = dojo.withGlobal(this._editor.window, "hasAncestorElement", dojo.html.selection, ["table"]);
+		this._state = table ? dojo.widget.Editor2Manager.commandState.Enabled : dojo.widget.Editor2Manager.commandState.Disabled;
+	}
+	return this._state;
+}, getText:function () {
+	return "Delete Table";
+}});
+dojo.lang.declare("dojo.widget.Editor2Plugin.toggleTableBorderCommand", dojo.widget.Editor2Command, function () {
+	this._showTableBorder = false;
+	dojo.event.connect(this._editor, "editorOnLoad", this, "execute");
+}, {execute:function () {
+	if (this._showTableBorder) {
 		this._showTableBorder = false;
-		dojo.event.connect(this._editor, "editorOnLoad", this, 'execute');
-	},
-{
-	execute: function(){
-		if(this._showTableBorder){
-			this._showTableBorder = false;
-			if(dojo.render.html.moz){
-				this._editor.removeStyleSheet(dojo.uri.dojoUri("src/widget/templates/Editor2/showtableborder_gecko.css"));
-			}else if(dojo.render.html.ie){
-				this._editor.removeStyleSheet(dojo.uri.dojoUri("src/widget/templates/Editor2/showtableborder_ie.css"));
+		if (dojo.render.html.moz) {
+			this._editor.removeStyleSheet(dojo.uri.moduleUri("dojo.widget", "templates/Editor2/showtableborder_gecko.css"));
+		} else {
+			if (dojo.render.html.ie) {
+				this._editor.removeStyleSheet(dojo.uri.moduleUri("dojo.widget", "templates/Editor2/showtableborder_ie.css"));
 			}
-		}else{
-			this._showTableBorder = true;
-			if(dojo.render.html.moz){
-				this._editor.addStyleSheet(dojo.uri.dojoUri("src/widget/templates/Editor2/showtableborder_gecko.css"));
-			}else if(dojo.render.html.ie){
-				this._editor.addStyleSheet(dojo.uri.dojoUri("src/widget/templates/Editor2/showtableborder_ie.css"));
+		}
+	} else {
+		this._showTableBorder = true;
+		if (dojo.render.html.moz) {
+			this._editor.addStyleSheet(dojo.uri.moduleUri("dojo.widget", "templates/Editor2/showtableborder_gecko.css"));
+		} else {
+			if (dojo.render.html.ie) {
+				this._editor.addStyleSheet(dojo.uri.moduleUri("dojo.widget", "templates/Editor2/showtableborder_ie.css"));
 			}
 		}
-		
-	},
-	getText: function(){
-		return 'Toggle Table Border';
-	},
-	getState: function(){
-		return this._showTableBorder ? dojo.widget.Editor2Manager.commandState.Latched : dojo.widget.Editor2Manager.commandState.Enabled;
 	}
-});
-
-dojo.widget.Editor2Plugin.TableOperation = {
-	getCommand: function(editor, name){
-		switch(name.toLowerCase()){
-			case 'toggletableborder':
-				return new dojo.widget.Editor2Plugin.toggleTableBorderCommand(editor, name);
-			case 'inserttable':
-				return new dojo.widget.Editor2DialogCommand(editor, 'inserttable',
-					{contentFile: "dojo.widget.Editor2Plugin.InsertTableDialog",
-					contentClass: "Editor2InsertTableDialog",
-					title: "Insert/Edit Table", width: "450px", height: "250px"})
-			case 'deletetable':
-				return new dojo.widget.Editor2Plugin.deleteTableCommand(editor, name);
-		}
-	},
-	getToolbarItem: function(name){
-		var name = name.toLowerCase();
-
-		var item;
-		switch(name){
-			case 'inserttable':
-			case 'toggletableborder':
-				item = new dojo.widget.Editor2ToolbarButton(name);
-		}
-
-		return item;
-	},
-	getContextMenuGroup: function(name, contextmenuplugin){
-		return new dojo.widget.Editor2Plugin.TableContextMenuGroup(contextmenuplugin);
-	},
-	showIETableBorder: function(dom){
-		var tables = dom.getElementsByTagName('table');
-		dojo.lang.forEach(tables, function(t){
-			dojo.html.addClass(t, "dojoShowIETableBorders");
-		});
-		return dom;
-	},
-	removeIEFakeClass: function(dom){
-		var tables = dom.getElementsByTagName('table');
-		dojo.lang.forEach(tables, function(t){
-			dojo.html.removeClass(t, "dojoShowIETableBorders");
-		});
-		return dom;
+}, getText:function () {
+	return "Toggle Table Border";
+}, getState:function () {
+	return this._showTableBorder ? dojo.widget.Editor2Manager.commandState.Latched : dojo.widget.Editor2Manager.commandState.Enabled;
+}});
+dojo.widget.Editor2Plugin.TableOperation = {getCommand:function (editor, name) {
+	switch (name.toLowerCase()) {
+	  case "toggletableborder":
+		return new dojo.widget.Editor2Plugin.toggleTableBorderCommand(editor, name);
+	  case "inserttable":
+		return new dojo.widget.Editor2DialogCommand(editor, "inserttable", {contentFile:"dojo.widget.Editor2Plugin.InsertTableDialog", contentClass:"Editor2InsertTableDialog", title:"Insert/Edit Table", width:"450px", height:"250px"});
+	  case "deletetable":
+		return new dojo.widget.Editor2Plugin.deleteTableCommand(editor, name);
 	}
-}
-
-//register commands: toggletableborder, inserttable, deletetable
+}, getToolbarItem:function (name) {
+	var name = name.toLowerCase();
+	var item;
+	switch (name) {
+	  case "inserttable":
+	  case "toggletableborder":
+		item = new dojo.widget.Editor2ToolbarButton(name);
+	}
+	return item;
+}, getContextMenuGroup:function (name, contextmenuplugin) {
+	return new dojo.widget.Editor2Plugin.TableContextMenuGroup(contextmenuplugin);
+}, showIETableBorder:function (dom) {
+	var tables = dom.getElementsByTagName("table");
+	dojo.lang.forEach(tables, function (t) {
+		dojo.html.addClass(t, "dojoShowIETableBorders");
+	});
+	return dom;
+}, removeIEFakeClass:function (dom) {
+	var tables = dom.getElementsByTagName("table");
+	dojo.lang.forEach(tables, function (t) {
+		dojo.html.removeClass(t, "dojoShowIETableBorders");
+	});
+	return dom;
+}};
 dojo.widget.Editor2Manager.registerHandler(dojo.widget.Editor2Plugin.TableOperation.getCommand);
-
-//register toggletableborder and inserttable as toolbar item
 dojo.widget.Editor2ToolbarItemManager.registerHandler(dojo.widget.Editor2Plugin.TableOperation.getToolbarItem);
-
-//add context menu support if dojo.widget.Editor2Plugin.ContextMenu is included before this plugin
-if(dojo.widget.Editor2Plugin.ContextMenuManager){
-	dojo.widget.Editor2Plugin.ContextMenuManager.registerGroup('Table', dojo.widget.Editor2Plugin.TableOperation.getContextMenuGroup);
-
-	dojo.declare("dojo.widget.Editor2Plugin.TableContextMenuGroup",
-		dojo.widget.Editor2Plugin.SimpleContextMenuGroup,
-	{
-		createItems: function(){
-			this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {caption: "Delete Table", command: 'deletetable'}));
-			this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {caption: "Table Property", command: 'inserttable', iconClass: "TB_Button_Icon TB_Button_Table"}));
-		},
-		checkVisibility: function(){
-			var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-			var table = dojo.withGlobal(curInst.window, "hasAncestorElement", dojo.html.selection, ['table']);
-
-			if(dojo.withGlobal(curInst.window, "hasAncestorElement", dojo.html.selection, ['table'])){
-				this.items[0].show();
-				this.items[1].show();
-				return true;
-			}else{
-				this.items[0].hide();
-				this.items[1].hide();
-				return false;
-			}
+if (dojo.widget.Editor2Plugin.ContextMenuManager) {
+	dojo.widget.Editor2Plugin.ContextMenuManager.registerGroup("Table", dojo.widget.Editor2Plugin.TableOperation.getContextMenuGroup);
+	dojo.declare("dojo.widget.Editor2Plugin.TableContextMenuGroup", dojo.widget.Editor2Plugin.SimpleContextMenuGroup, {createItems:function () {
+		this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {caption:"Delete Table", command:"deletetable"}));
+		this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {caption:"Table Property", command:"inserttable", iconClass:"TB_Button_Icon TB_Button_Table"}));
+	}, checkVisibility:function () {
+		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+		var table = dojo.withGlobal(curInst.window, "hasAncestorElement", dojo.html.selection, ["table"]);
+		if (dojo.withGlobal(curInst.window, "hasAncestorElement", dojo.html.selection, ["table"])) {
+			this.items[0].show();
+			this.items[1].show();
+			return true;
+		} else {
+			this.items[0].hide();
+			this.items[1].hide();
+			return false;
 		}
-	});
+	}});
 }
+
+
 __CPAN_FILE__ src/widget/Editor2Plugin/FindReplace.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -54676,79 +34714,55 @@
 */
 
 dojo.provide("dojo.widget.Editor2Plugin.FindReplace");
-
 dojo.require("dojo.widget.Editor2");
-
-//TODO replace, better GUI
-
-dojo.declare("dojo.widget.Editor2Plugin.FindCommand", dojo.widget.Editor2DialogCommand,{
-	SearchOption: {
-		CaseSensitive: 4,
-		SearchBackwards: 64,
-		WholeWord: 2,
-		WrapSearch: 128
-	},
-	find: function(text, option){
-		this._editor.focus();
-		if(window.find){ //moz
-			this._editor.window.find(text, 
-				option & this.SearchOption.CaseSensitive ? true : false,
-				option & this.SearchOption.SearchBackwards ? true : false,
-				option & this.SearchOption.WrapSearch ? true : false,
-				option & this.SearchOption.WholeWord ? true : false
-				);
-		}else if(dojo.body().createTextRange){ //IE
+dojo.declare("dojo.widget.Editor2Plugin.FindCommand", dojo.widget.Editor2DialogCommand, {SearchOption:{CaseSensitive:4, SearchBackwards:64, WholeWord:2, WrapSearch:128}, find:function (text, option) {
+	this._editor.focus();
+	if (window.find) {
+		this._editor.window.find(text, option & this.SearchOption.CaseSensitive ? true : false, option & this.SearchOption.SearchBackwards ? true : false, option & this.SearchOption.WrapSearch ? true : false, option & this.SearchOption.WholeWord ? true : false);
+	} else {
+		if (dojo.body().createTextRange) {
 			var range = this._editor.document.body.createTextRange();
-			var found = range.findText(text, (option&this.SearchOption.SearchBackwards)?1:-1, option );
-			if(found){
-				range.scrollIntoView() ;
-				range.select() ;
-			}else{
-				alert("Can not find "+text+" in the document");
+			var found = range.findText(text, (option & this.SearchOption.SearchBackwards) ? 1 : -1, option);
+			if (found) {
+				range.scrollIntoView();
+				range.select();
+			} else {
+				alert("Can not find " + text + " in the document");
 			}
-		}else{
+		} else {
 			alert("No idea how to search in this browser. Please submit patch if you know.");
 		}
-	},
-	getText: function(){
-		return 'Find';
 	}
-});
-
-dojo.widget.Editor2Plugin.FindReplace ={
-	getCommand: function(editor, name){
-		var name = name.toLowerCase();
-		var command;
-		if(name == 'find'){
-			command = new dojo.widget.Editor2Plugin.FindCommand(editor, 'find', 
-				{contentFile: "dojo.widget.Editor2Plugin.FindReplaceDialog", 
-				contentClass: "Editor2FindDialog",
-				title: "Find", width: "350px", height: "150px", modal: false});
-		}else if(name == 'replace') {
-			command = new dojo.widget.Editor2DialogCommand(editor, 'replace', 
-				{contentFile: "dojo.widget.Editor2Plugin.FindReplaceDialog", 
-				contentClass: "Editor2ReplaceDialog",
-				href: dojo.uri.dojoUri("src/widget/templates/Editor2/Dialog/replace.html"), 
-				title: "Replace", width: "350px", height: "200px", modal: false});
+}, getText:function () {
+	return "Find";
+}});
+dojo.widget.Editor2Plugin.FindReplace = {getCommand:function (editor, name) {
+	var name = name.toLowerCase();
+	var command;
+	if (name == "find") {
+		command = new dojo.widget.Editor2Plugin.FindCommand(editor, "find", {contentFile:"dojo.widget.Editor2Plugin.FindReplaceDialog", contentClass:"Editor2FindDialog", title:"Find", width:"350px", height:"150px", modal:false});
+	} else {
+		if (name == "replace") {
+			command = new dojo.widget.Editor2DialogCommand(editor, "replace", {contentFile:"dojo.widget.Editor2Plugin.FindReplaceDialog", contentClass:"Editor2ReplaceDialog", href:dojo.uri.cache.set(dojo.uri.moduleUri("dojo.widget", "templates/Editor2/Dialog/replace.html"), "<table style=\"white-space: nowrap;\">\n<tr><td>Find: </td><td> <input type=\"text\" dojoAttachPoint=\"replace_text\" /></td></tr>\n<tr><td>Replace with: </td><td> <input type=\"text\" dojoAttachPoint=\"replace_text\" /></td></tr>\n<tr><td colspan='2'><table><tr><td><input type=\"checkbox\" dojoType=\"CheckBox\" dojoAttachPoint=\"replace_option_casesens\" id=\"dojo_replace_option_casesens\" />\n\t\t<label for=\"dojo_replace_option_casesens\">Case Sensitive</label></td>\n\t\t\t<td><input type=\"checkbox\" dojoType=\"CheckBox\" dojoAttachPoint=\"replace_option_backwards\" id=\"dojo_replace_option_backwards\" />\n\t\t<label for=\"dojo_replace_option_backwards\">Search Backwards</label></td></tr></table></td></tr>\n<tr><td colspan=2\">\n\t<table><tr>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:replace'>Replace</button></td>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:replaceAll'>Replace All</button></td>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Close</button></td>\n\t</tr></table>\n\t</td></tr>\n</table>\n"), title:"Replace", width:"350px", height:"200px", modal:false});
 		}
-	
-		return command;
-	},
-	getToolbarItem: function(name){
-		var name = name.toLowerCase();
-	
-		var item;
-		if(name == 'replace'){
-			item = new dojo.widget.Editor2ToolbarButton('Replace');
-		}else if(name == 'find') {
-			item = new dojo.widget.Editor2ToolbarButton('Find');
+	}
+	return command;
+}, getToolbarItem:function (name) {
+	var name = name.toLowerCase();
+	var item;
+	if (name == "replace") {
+		item = new dojo.widget.Editor2ToolbarButton("Replace");
+	} else {
+		if (name == "find") {
+			item = new dojo.widget.Editor2ToolbarButton("Find");
 		}
-	
-		return item;
 	}
-}
+	return item;
+}};
 dojo.widget.Editor2Manager.registerHandler(dojo.widget.Editor2Plugin.FindReplace.getCommand);
 dojo.widget.Editor2ToolbarItemManager.registerHandler(dojo.widget.Editor2Plugin.FindReplace.getToolbarItem);
+
+
 __CPAN_FILE__ src/widget/Editor2Plugin/InsertTableDialog.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -54761,144 +34775,125 @@
 */
 
 dojo.provide("dojo.widget.Editor2Plugin.InsertTableDialog");
-
-dojo.widget.defineWidget(
-	"dojo.widget.Editor2InsertTableDialog",
-	dojo.widget.Editor2DialogContent,
-{
-	templatePath: dojo.uri.dojoUri("src/widget/templates/Editor2/Dialog/inserttable.html"),
-
-	editableAttributes: ['summary', 'height', 'cellspacing', 'cellpadding', 'border', 'align'],
-
-	loadContent: function(){
-		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-		curInst.saveSelection(); //save selection (none-activeX IE)
-		this.tableNode = dojo.withGlobal(curInst.window, "getSelectedElement", dojo.html.selection);
-		if(!this.tableNode || this.tableNode.tagName.toLowerCase() != 'table'){
-			this.tableNode = dojo.withGlobal(curInst.window, "getAncestorElement", dojo.html.selection, ['table']);
+dojo.widget.defineWidget("dojo.widget.Editor2InsertTableDialog", dojo.widget.Editor2DialogContent, {templateString:"<div>\n<table cellSpacing=\"1\" cellPadding=\"1\" width=\"100%\" border=\"0\">\n\t<tr>\n\t\t<td valign=\"top\">\n\t\t\t<table cellSpacing=\"0\" cellPadding=\"0\" border=\"0\">\n\t\t\t\t<tr>\n\n\t\t\t\t\t<td><span>Rows</span>:</td>\n\t\t\t\t\t<td>&nbsp;<input dojoAttachPoint=\"table_rows\" type=\"text\" maxLength=\"3\" size=\"2\" value=\"3\"></td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td><span>Columns</span>:</td>\n\t\t\t\t\t<td>&nbsp;<input dojoAttachPoint=\"table_cols\" type=\"text\" maxLength=\"2\" size=\"2\" value=\"2\"></td>\n\t\t\t\t</tr>\n\n\t\t\t\t<tr>\n\t\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td><span>Border size</span>:</td>\n\t\t\t\t\t<td>&nbsp;<INPUT dojoAttachPoint=\"table_border\" type=\"text\" maxLength=\"2\" size=\"2\" value=\"1\"></td>\n\t\t\t\t</tr>\n\n\t\t\t\t<tr>\n\t\t\t\t\t<td><span>Alignment</span>:</td>\n\t\t\t\t\t<td>&nbsp;<select dojoAttachPoint=\"table_align\">\n\t\t\t\t\t\t\t<option value=\"\" selected>&lt;Not set&gt;</option>\n\t\t\t\t\t\t\t<option value=\"left\">Left</option>\n\t\t\t\t\t\t\t<option value=\"center\">Center</option>\n\t\t\t\t\t\t\t<option value=\"right\">Right</option>\n\t\t\t\t\t\t</select></td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</td>\n\t\t<td>&nbsp;&nbsp;&nbsp;</td>\n\t\t<td align=\"right\" valign=\"top\">\n\t\t\t<table cellSpacing=\"0\" cellPadding=\"0\" border=\"0\">\n\t\t\t\t<tr>\n\t\t\t\t\t<td><span>Width</span>:</td>\n\t\t\t\t\t<td>&nbsp;<input dojoAttachPoint=\"table_width\" type=\"text\" maxLength=\"4\" size=\"3\"></td>\n\t\t\t\t\t<td>&nbsp;<select dojoAttachPoint=\"table_widthtype\">\n\t\t\t\t\t\t\t<option value=\"percent\" selected>percent</option>\n\t\t\t\t\t\t\t<option value=\"pixels\">pixels</option>\n\t\t\t\t\t\t</select></td>\n\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td><span>Height</span>:</td>\n\t\t\t\t\t<td>&nbsp;<INPUT dojoAttachPoint=\"table_height\" type=\"text\" maxLength=\"4\" size=\"3\"></td>\n\t\t\t\t\t<td>&nbsp;<span>pixels</span></td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td nowrap><span>Cell spacing</span>:</td>\n\t\t\t\t\t<td>&nbsp;<input dojoAttachPoint=\"table_cellspacing\" type=\"text\" maxLength=\"2\" size=\"2\" value=\"1\"></td>\n\t\t\t\t\t<td>&nbsp;</td>\n\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td nowrap><span>Cell padding</span>:</td>\n\t\t\t\t\t<td>&nbsp;<input dojoAttachPoint=\"table_cellpadding\" type=\"text\" maxLength=\"2\" size=\"2\" value=\"1\"></td>\n\t\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</td>\n\t</tr>\n</table>\n<table cellSpacing=\"0\" cellPadding=\"0\" width=\"100%\" border=\"0\">\n\t<tr>\n\t\t<td nowrap><span>Caption</span>:</td>\n\t\t<td>&nbsp;</td>\n\t\t<td width=\"100%\" nowrap>&nbsp;\n\t\t\t<input dojoAttachPoint=\"table_caption\" type=\"text\" style=\"WIDTH: 90%\"></td>\n\t</tr>\n\t<tr>\n\t\t<td nowrap><span>Summary</span>:</td>\n\t\t<td>&nbsp;</td>\n\t\t<td width=\"100%\" nowrap>&nbsp;\n\t\t\t<input dojoAttachPoint=\"table_summary\" type=\"text\" style=\"WIDTH: 90%\"></td>\n\t</tr>\n</table>\n<table><tr>\n<td><button dojoType='Button' dojoAttachEvent='onClick:ok'>Ok</button></td>\n<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Cancel</button></td>\n</tr></table>\n</div>\n", editableAttributes:["summary", "height", "cellspacing", "cellpadding", "border", "align"], loadContent:function () {
+	var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+	curInst.saveSelection();
+	this.tableNode = dojo.withGlobal(curInst.window, "getSelectedElement", dojo.html.selection);
+	if (!this.tableNode || this.tableNode.tagName.toLowerCase() != "table") {
+		this.tableNode = dojo.withGlobal(curInst.window, "getAncestorElement", dojo.html.selection, ["table"]);
+	}
+	var tableAttributes = {};
+	this.extraAttribText = "";
+	if (this.tableNode) {
+		this["table_rows"].value = this.tableNode.rows.length;
+		this["table_rows"].disabled = true;
+		this["table_cols"].value = this.tableNode.rows[0].cells.length;
+		this["table_cols"].disabled = true;
+		if (this.tableNode.caption) {
+			this["table_caption"].value = this.tableNode.caption.innerHTML;
+		} else {
+			this["table_caption"].value = "";
 		}
-
-		var tableAttributes = {};
-		this.extraAttribText = "";
-		if(this.tableNode){
-			this["table_rows"].value = this.tableNode.rows.length;
-			this["table_rows"].disabled = true;
-			this["table_cols"].value = this.tableNode.rows[0].cells.length;
-			this["table_cols"].disabled = true;
-
-			if (this.tableNode.caption){
-				this["table_caption"].value = this.tableNode.caption.innerHTML;
-			}else{
-				this["table_caption"].value = "";
+		var width = this.tableNode.style.width || this.tableNode.width;
+		if (width) {
+			this["table_width"].value = parseInt(width);
+			if (width.indexOf("%") > -1) {
+				this["table_widthtype"].value = "percent";
+			} else {
+				this["table_widthtype"].value = "pixels";
 			}
-
-			var width = this.tableNode.style.width || this.tableNode.width;
-			if(width){
-				this["table_width"].value = parseInt(width);
-				if (width.indexOf('%') > -1){
-					this["table_widthtype"].value = "percent";
-				}else{
-					this["table_widthtype"].value = "pixels";
-				}
-			}else{
-				this["table_width"].value = "100";
-			}
-
-			var height = this.tableNode.style.height || this.tableNode.height;
-			if(height){
-				this["table_height"].value = parseInt(width);
-			}else{
-				this["table_height"].value = "";
-			}
-
-			var attrs = this.tableNode.attributes;
-			for(var i=0; i<attrs.length; i++) {
-				if(dojo.lang.find(this.editableAttributes, attrs[i].name.toLowerCase())>-1){
-					tableAttributes[attrs[i].name] = attrs[i].value;
-				}else{
-					this.extraAttribText += attrs[i].name + '="'+attrs[i].value+'" ';
-				}
-			}
-		}else{
-			this["table_rows"].value = 3;
-			this["table_rows"].disabled = false;
-			this["table_cols"].value = 2;
-			this["table_cols"].disabled = false;
-			this["table_width"].value = 100;
-			this["table_widthtype"].value = "percent";
+		} else {
+			this["table_width"].value = "100";
+		}
+		var height = this.tableNode.style.height || this.tableNode.height;
+		if (height) {
+			this["table_height"].value = parseInt(width);
+		} else {
 			this["table_height"].value = "";
 		}
-
-		for(var i=0; i<this.editableAttributes.length; ++i){
-			name = this.editableAttributes[i];
-			this["table_"+name].value = (tableAttributes[name] == undefined) ? "" : tableAttributes[name];
-			if(name == 'height' && tableAttributes[name] != undefined){
-				this["table_"+name].value = tableAttributes[name];
+		var attrs = this.tableNode.attributes;
+		for (var i = 0; i < attrs.length; i++) {
+			if (dojo.lang.find(this.editableAttributes, attrs[i].name.toLowerCase()) > -1) {
+				tableAttributes[attrs[i].name] = attrs[i].value;
+			} else {
+				this.extraAttribText += attrs[i].name + "=\"" + attrs[i].value + "\" ";
 			}
 		}
-		return true;
-	},
-	ok: function(){
-		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-		var args = {};
-
-		args['rows'] = this["table_rows"].value;
-		args['cols'] = this["table_cols"].value;
-		args['caption'] = this["table_caption"].value;
-		args["tableattrs"] = "";
-		if(this["table_widthtype"].value == "percent"){
-			args["tableattrs"] += 'width="'+this["table_width"].value +'%" ';
-		}else{
-			args["tableattrs"] += 'width="'+this["table_width"].value +'px" ';
+	} else {
+		this["table_rows"].value = 3;
+		this["table_rows"].disabled = false;
+		this["table_cols"].value = 2;
+		this["table_cols"].disabled = false;
+		this["table_width"].value = 100;
+		this["table_widthtype"].value = "percent";
+		this["table_height"].value = "";
+	}
+	for (var i = 0; i < this.editableAttributes.length; ++i) {
+		name = this.editableAttributes[i];
+		this["table_" + name].value = (tableAttributes[name] == undefined) ? "" : tableAttributes[name];
+		if (name == "height" && tableAttributes[name] != undefined) {
+			this["table_" + name].value = tableAttributes[name];
 		}
-		for(var i=0; i<this.editableAttributes.length; ++i){
-			var name = this.editableAttributes[i];
-			var value = this["table_"+name].value;
-			if(value.length > 0){
-				args["tableattrs"] += name + '="'+value+'" ';
-			}
+	}
+	return true;
+}, ok:function () {
+	var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+	var args = {};
+	args["rows"] = this["table_rows"].value;
+	args["cols"] = this["table_cols"].value;
+	args["caption"] = this["table_caption"].value;
+	args["tableattrs"] = "";
+	if (this["table_widthtype"].value == "percent") {
+		args["tableattrs"] += "width=\"" + this["table_width"].value + "%\" ";
+	} else {
+		args["tableattrs"] += "width=\"" + this["table_width"].value + "px\" ";
+	}
+	for (var i = 0; i < this.editableAttributes.length; ++i) {
+		var name = this.editableAttributes[i];
+		var value = this["table_" + name].value;
+		if (value.length > 0) {
+			args["tableattrs"] += name + "=\"" + value + "\" ";
 		}
-
-		if(!args["tableattrs"]){
-			args["tableattrs"] = "";
+	}
+	if (!args["tableattrs"]) {
+		args["tableattrs"] = "";
+	}
+	if (dojo.render.html.ie && !this["table_border"].value) {
+		args["tableattrs"] += "class=\"dojoShowIETableBorders\" ";
+	}
+	var html = "<table " + args["tableattrs"] + ">";
+	if (args["caption"]) {
+		html += "<caption>" + args["caption"] + "</caption>";
+	}
+	var outertbody = "<tbody>";
+	if (this.tableNode) {
+		var tbody = this.tableNode.getElementsByTagName("tbody")[0];
+		outertbody = tbody.outerHTML;
+		if (!outertbody) {
+			var cnode = tbody.cloneNode(true);
+			var tmpnode = tbody.ownerDocument.createElement("div");
+			tmpnode.appendChild(cnode);
+			outertbody = tmpnode.innerHTML;
 		}
-
-		//show the border in IE by applying a custom class
-		if(dojo.render.html.ie && !this["table_border"].value){
-			args["tableattrs"] += 'class="dojoShowIETableBorders" ';
+		dojo.withGlobal(curInst.window, "selectElement", dojo.html.selection, [this.tableNode]);
+	} else {
+		var cols = "<tr>";
+		for (var i = 0; i < +args.cols; i++) {
+			cols += "<td></td>";
 		}
-
-		var html = "<table "+args["tableattrs"]+">";
-		if(args['caption']){
-			html += "<caption>"+args["caption"]+"</caption>";
+		cols += "</tr>";
+		for (var i = 0; i < args.rows; i++) {
+			outertbody += cols;
 		}
-		var outertbody = "<tbody>";
-		if(this.tableNode){
-			//retain the content
-			var tbody = this.tableNode.getElementsByTagName("tbody")[0];
-			outertbody = tbody.outerHTML;
-			if(!outertbody){
-				var cnode = tbody.cloneNode(true);
-				var tmpnode = tbody.ownerDocument.createElement("div");
-				tmpnode.appendChild(cnode);
-				outertbody = tmpnode.innerHTML;
-			}
-			//TODO: save current selection and restore it later
-			dojo.withGlobal(curInst.window, "selectElement", dojo.html.selection, [this.tableNode]);
-		}else{
-			var cols = "<tr>";
-			for (var i = 0; i < +args.cols; i++) { cols += "<td></td>"; }
-			cols += "</tr>";
-			for (var i = 0; i < args.rows; i++) { outertbody += cols; }
-			outertbody += "</tbody>";
-		}
-		html += outertbody+"</table>";
-		curInst.restoreSelection(); //restore previous selection, required for none-activeX IE
-		curInst.execCommand("inserthtml", html);
-
-		this.cancel();
+		outertbody += "</tbody>";
 	}
-});
+	html += outertbody + "</table>";
+	curInst.restoreSelection();
+	curInst.execCommand("inserthtml", html);
+	this.cancel();
+}});
+
+
 __CPAN_FILE__ src/widget/Editor2Plugin/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -54910,12 +34905,10 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: [ "dojo.widget.Editor2", 
-			 "dojo.widget.Editor2Toolbar"]
-});
+dojo.kwCompoundRequire({common:["dojo.widget.Editor2", "dojo.widget.Editor2Toolbar"]});
 dojo.provide("dojo.widget.Editor2Plugin.*");
 
+
 __CPAN_FILE__ src/widget/Editor2Plugin/ContextMenu.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -54928,273 +34921,197 @@
 */
 
 dojo.provide("dojo.widget.Editor2Plugin.ContextMenu");
-
-// summary: dojo.widget.Editor2Plugin.ContextMenu provides context menu for Editor2 widget
-// description:
-//		This plugin should be dojo.required-ed before all other plugins which
-//		support contextmenu, otherwise the menu for that plugin won't be shown
-//		For each Editor2, what will appear in its context menu can be set by changing
-//		Editor2.contextMenuGroupSet property (by default it is empty, which means use the
-//		default contextMenu). A contextMenuGroupSet has to be registered by calling
-//		dojo.widget.Editor2Plugin.ContextMenuManager.registerGroupSet()
-//		All Editor2 with the same contextMenuGroupSet will share the same ContextMenu
-
 dojo.require("dojo.widget.Menu2");
-
-dojo.event.topic.subscribe("dojo.widget.Editor2::onLoad", function(editor){
+dojo.event.topic.subscribe("dojo.widget.Editor2::onLoad", function (editor) {
 	dojo.widget.Editor2Plugin.ContextMenuManager.getContextMenu(editor);
-//	var p = new dojo.widget.Editor2Plugin.ContextMenu();
 });
-
-dojo.widget.Editor2Plugin.ContextMenuManager = {
-	menuGroups: ['Generic', 'Link', 'Anchor', 'Image', 'List', 'Table'],
-	_contextMenuGroupSets: {},
-	_registeredGroups: {},
-	_menus: {},
-	registerGroup: function(name, handler){
-		if(this._registeredGroups[name]){
-			alert("dojo.widget.Editor2Plugin.ContextMenuManager.registerGroup: menu group "+name+"is already registered. Ignored.");
-			return;
+dojo.widget.Editor2Plugin.ContextMenuManager = {menuGroups:["Generic", "Link", "Anchor", "Image", "List", "Table"], _contextMenuGroupSets:{}, _registeredGroups:{}, _menus:{}, registerGroup:function (name, handler) {
+	if (this._registeredGroups[name]) {
+		alert("dojo.widget.Editor2Plugin.ContextMenuManager.registerGroup: menu group " + name + "is already registered. Ignored.");
+		return;
+	}
+	this._registeredGroups[name] = handler;
+}, removeGroup:function (name) {
+	delete this._registeredGroups[name];
+}, getGroup:function (name, contextmenuplugin) {
+	if (this._registeredGroups[name]) {
+		var item = this._registeredGroups[name](name, contextmenuplugin);
+		if (item) {
+			return item;
 		}
-		this._registeredGroups[name] = handler;
-	},
-	removeGroup: function(name){
-		delete this._registeredGroups[name];
-	},
-	getGroup: function(name, contextmenuplugin){
-		if(this._registeredGroups[name]){
-			var item = this._registeredGroups[name](name, contextmenuplugin);
-			if(item){
-				return item;
-			}
+	}
+	switch (name) {
+	  case "Generic":
+	  case "Link":
+	  case "Image":
+		return new dojo.widget.Editor2Plugin[name + "ContextMenuGroup"](contextmenuplugin);
+	  case "Anchor":
+	  case "List":
+	}
+}, registerGroupSet:function (name, set) {
+	this._contextMenuGroupSets[name] = set;
+}, removeGroupSet:function (name) {
+	var set = this._contextMenuGroupSets[name];
+	delete this._contextMenuGroupSets[name];
+	return set;
+}, getContextMenu:function (editor) {
+	var set = editor.contextMenuGroupSet || "defaultDojoEditor2MenuGroupSet";
+	if (this._menus[set]) {
+		this._menus[set].bindEditor(editor);
+		return this._menus[set];
+	}
+	var gs = (editor.contextMenuGroupSet && this._contextMenuGroupSets[editor.contextMenuGroupSet]) || this.menuGroups;
+	var menu = new dojo.widget.Editor2Plugin.ContextMenu(editor, gs);
+	this._menus[set] = menu;
+	return menu;
+}};
+dojo.declare("dojo.widget.Editor2Plugin.ContextMenu", null, function (editor, gs) {
+	this.groups = [];
+	this.separators = [];
+	this.editor = editor;
+	this.editor.registerLoadedPlugin(this);
+	this.contextMenu = dojo.widget.createWidget("PopupMenu2", {});
+	dojo.body().appendChild(this.contextMenu.domNode);
+	this.bindEditor(this.editor);
+	dojo.event.connect(this.contextMenu, "aboutToShow", this, "aboutToShow");
+	dojo.event.connect(this.editor, "destroy", this, "destroy");
+	this.setup(gs);
+}, {bindEditor:function (editor) {
+	this.contextMenu.bindDomNode(editor.document.body);
+}, setup:function (gs) {
+	for (var i in gs) {
+		var g = dojo.widget.Editor2Plugin.ContextMenuManager.getGroup(gs[i], this);
+		if (g) {
+			this.groups.push(g);
 		}
-		switch(name){
-			case 'Generic':
-			case 'Link':
-			case 'Image':
-				return new dojo.widget.Editor2Plugin[name+"ContextMenuGroup"](contextmenuplugin);
-			//TODO
-			case 'Anchor':
-			case 'List':
-		}
-	},
-	registerGroupSet: function(/*String*/name, /*Array*/set){
-		// summary: register a group set
-		// name: name of the group set
-		// set: an array of groups, such as ['Generic','Link']
-		this._contextMenuGroupSets[name] = set;
-	},
-	removeGroupSet: function(name){
-		var set = this._contextMenuGroupSets[name];
-		delete this._contextMenuGroupSets[name];
-		return set;
-	},
-	getContextMenu: function(editor){
-		var set = editor.contextMenuGroupSet || 'defaultDojoEditor2MenuGroupSet';
-		if(this._menus[set]){
-			this._menus[set].bindEditor(editor);
-			return this._menus[set];
-		}
-
-		var gs = (editor.contextMenuGroupSet && this._contextMenuGroupSets[editor.contextMenuGroupSet]) || this.menuGroups;
-		var menu = new dojo.widget.Editor2Plugin.ContextMenu(editor, gs);
-		this._menus[set] = menu;
-		return menu;
 	}
-};
-
-dojo.declare("dojo.widget.Editor2Plugin.ContextMenu", null,
-	function(editor, gs){
-		this.groups = [];
-		this.separators = [];
-		this.editor = editor;
-		this.editor.registerLoadedPlugin(this);
-		this.contextMenu = dojo.widget.createWidget("PopupMenu2", {});
-		dojo.body().appendChild(this.contextMenu.domNode);
-		this.bindEditor(this.editor);
-
-		dojo.event.connect(this.contextMenu, "aboutToShow", this, "aboutToShow");
-		dojo.event.connect(this.editor, "destroy", this, "destroy");
-
-		this.setup(gs);
-	},
-	{
-	bindEditor: function(editor){
-		this.contextMenu.bindDomNode(editor.document.body);
-	},
-	setup: function(gs){
-		for(var i in gs){
-			var g = dojo.widget.Editor2Plugin.ContextMenuManager.getGroup(gs[i], this);
-			if(g){
-				this.groups.push(g);
-			}
+}, aboutToShow:function () {
+	var first = true;
+	for (var i in this.groups) {
+		if (i > 0 && this.separators.length != this.groups.length - 1) {
+			this.separators.push(dojo.widget.createWidget("MenuSeparator2", {}));
+			this.contextMenu.addChild(this.separators[this.separators.length - 1]);
 		}
-	},
-	aboutToShow: function(){
-		var first = true;
-		for(var i in this.groups){
-			if(i>0 && this.separators.length != this.groups.length-1){
-				this.separators.push(dojo.widget.createWidget("MenuSeparator2", {}));
-				this.contextMenu.addChild(this.separators[this.separators.length-1]);
-			}
-			if(this.groups[i].refresh()){
-				if(i>0){
-					if(first){
-						this.separators[i-1].hide();
-					}else{
-						this.separators[i-1].show();
-					}
+		if (this.groups[i].refresh()) {
+			if (i > 0) {
+				if (first) {
+					this.separators[i - 1].hide();
+				} else {
+					this.separators[i - 1].show();
 				}
-				if(first){ first = false; }
-			}else{
-				if(i>0){
-					this.separators[i-1].hide();
-				}
 			}
+			if (first) {
+				first = false;
+			}
+		} else {
+			if (i > 0) {
+				this.separators[i - 1].hide();
+			}
 		}
-	},
-	destroy: function(){
-		this.editor.unregisterLoadedPlugin(this);
-		delete this.groups;
-		delete this.separators;
-		this.contextMenu.destroy();
-		delete this.contextMenu;
 	}
-});
-
-dojo.widget.defineWidget(
-	"dojo.widget.Editor2ContextMenuItem",
-	dojo.widget.MenuItem2,
-{
-	command: '',
-	buildRendering: function(){
-		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-		this.caption = curInst.getCommand(this.command).getText();
-
-		dojo.widget.Editor2ContextMenuItem.superclass.buildRendering.apply(this, arguments);
-	},
-	onClick: function(){
-		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-		if(curInst){
-			var _command = curInst.getCommand(this.command);
-			if(_command){
-				_command.execute();
-			}
+}, destroy:function () {
+	this.editor.unregisterLoadedPlugin(this);
+	delete this.groups;
+	delete this.separators;
+	this.contextMenu.destroy();
+	delete this.contextMenu;
+}});
+dojo.widget.defineWidget("dojo.widget.Editor2ContextMenuItem", dojo.widget.MenuItem2, {command:"", buildRendering:function () {
+	var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+	this.caption = curInst.getCommand(this.command).getText();
+	dojo.widget.Editor2ContextMenuItem.superclass.buildRendering.apply(this, arguments);
+}, onClick:function () {
+	var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+	if (curInst) {
+		var _command = curInst.getCommand(this.command);
+		if (_command) {
+			_command.execute();
 		}
-	},
-	refresh: function(){
-		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-		if(curInst){
-			var _command = curInst.getCommand(this.command);
-			if(_command){
-				if(_command.getState() == dojo.widget.Editor2Manager.commandState.Disabled){
-					this.disable();
-					return false;
-				}else{
-					this.enable();
-					return true;
-				}
+	}
+}, refresh:function () {
+	var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+	if (curInst) {
+		var _command = curInst.getCommand(this.command);
+		if (_command) {
+			if (_command.getState() == dojo.widget.Editor2Manager.commandState.Disabled) {
+				this.disable();
+				return false;
+			} else {
+				this.enable();
+				return true;
 			}
 		}
-	},
-	//improve performance by skipping animation
-	hide: function(){
-		this.domNode.style.display = "none";
-	},
-	show: function(){
-		this.domNode.style.display = "";
 	}
-});
-dojo.declare("dojo.widget.Editor2Plugin.SimpleContextMenuGroup", null,
-	function(contextmenuplugin){
-		this.contextMenu = contextmenuplugin.contextMenu;
-		this.items = [];
-
-		dojo.event.connect(contextmenuplugin, "destroy", this, "destroy");
-	},
-	{
-	refresh: function(){
-		if(!this.items.length){
-			this.createItems();
-			for(var i in this.items){
-				this.contextMenu.addChild(this.items[i]);
-			}
+}, hide:function () {
+	this.domNode.style.display = "none";
+}, show:function () {
+	this.domNode.style.display = "";
+}});
+dojo.declare("dojo.widget.Editor2Plugin.SimpleContextMenuGroup", null, function (contextmenuplugin) {
+	this.contextMenu = contextmenuplugin.contextMenu;
+	this.items = [];
+	dojo.event.connect(contextmenuplugin, "destroy", this, "destroy");
+}, {refresh:function () {
+	if (!this.items.length) {
+		this.createItems();
+		for (var i in this.items) {
+			this.contextMenu.addChild(this.items[i]);
 		}
-
-		return this.checkVisibility();
-	},
-	destroy: function(){
-		this.contextmenu = null;
-		delete this.items;
-		delete this.contextMenu;
-	},
-	//implement this to fill in the menu items
-	createItems: function(){	},
-
-	//overload this to show/hide items
-	checkVisibility: function(){
-		var show = false;
-		for(var i in this.items){
-			show = show || this.items[i].refresh();
+	}
+	return this.checkVisibility();
+}, destroy:function () {
+	this.contextmenu = null;
+	delete this.items;
+	delete this.contextMenu;
+}, createItems:function () {
+}, checkVisibility:function () {
+	var show = false;
+	for (var i in this.items) {
+		show = show || this.items[i].refresh();
+	}
+	var action = show ? "show" : "hide";
+	for (var i in this.items) {
+		this.items[i][action]();
+	}
+	return show;
+}});
+dojo.declare("dojo.widget.Editor2Plugin.GenericContextMenuGroup", dojo.widget.Editor2Plugin.SimpleContextMenuGroup, {createItems:function () {
+	this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command:"cut", iconClass:"dojoE2TBIcon dojoE2TBIcon_Cut"}));
+	this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command:"copy", iconClass:"dojoE2TBIcon dojoE2TBIcon_Copy"}));
+	this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command:"paste", iconClass:"dojoE2TBIcon dojoE2TBIcon_Paste"}));
+}});
+dojo.declare("dojo.widget.Editor2Plugin.LinkContextMenuGroup", dojo.widget.Editor2Plugin.SimpleContextMenuGroup, {createItems:function () {
+	this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command:"createlink", iconClass:"dojoE2TBIcon dojoE2TBIcon_Link"}));
+	this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command:"unlink", iconClass:"dojoE2TBIcon dojoE2TBIcon_UnLink"}));
+}, checkVisibility:function () {
+	var show = this.items[1].refresh();
+	if (show) {
+		this.items[0].refresh();
+		for (var i in this.items) {
+			this.items[i].show();
 		}
-		var action = show ? "show" : "hide";
-		for(var i in this.items){
-			this.items[i][action]();
+	} else {
+		for (var i in this.items) {
+			this.items[i].hide();
 		}
-		return show;
 	}
-});
-dojo.declare("dojo.widget.Editor2Plugin.GenericContextMenuGroup",
-	dojo.widget.Editor2Plugin.SimpleContextMenuGroup,
-{
-	createItems: function(){
-		this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command: "cut", iconClass: "dojoE2TBIcon dojoE2TBIcon_Cut"}));
-		this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command: "copy", iconClass: "dojoE2TBIcon dojoE2TBIcon_Copy"}));
-		this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command: "paste", iconClass: "dojoE2TBIcon dojoE2TBIcon_Paste"}));
+	return show;
+}});
+dojo.declare("dojo.widget.Editor2Plugin.ImageContextMenuGroup", dojo.widget.Editor2Plugin.SimpleContextMenuGroup, {createItems:function () {
+	this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command:"insertimage", iconClass:"dojoE2TBIcon dojoE2TBIcon_Image"}));
+}, checkVisibility:function () {
+	var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
+	var img = dojo.withGlobal(curInst.window, "getSelectedElement", dojo.html.selection);
+	if (img && img.tagName.toLowerCase() == "img") {
+		this.items[0].show();
+		return true;
+	} else {
+		this.items[0].hide();
+		return false;
 	}
-});
-dojo.declare("dojo.widget.Editor2Plugin.LinkContextMenuGroup",
-	dojo.widget.Editor2Plugin.SimpleContextMenuGroup,
-{
-	createItems: function(){
-		this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command: 'createlink', iconClass: "dojoE2TBIcon dojoE2TBIcon_Link"}));
-		this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command: 'unlink', iconClass: "dojoE2TBIcon dojoE2TBIcon_UnLink"}));
-	},
-	checkVisibility: function(){
-		var show = this.items[1].refresh();
-		if(show){
-			this.items[0].refresh();
-			for(var i in this.items){
-				this.items[i].show();
-			}
-		}else{
-			for(var i in this.items){
-				this.items[i].hide();
-			}
-		}
+}});
 
-		return show;
-	}
-});
-dojo.declare("dojo.widget.Editor2Plugin.ImageContextMenuGroup",
-	dojo.widget.Editor2Plugin.SimpleContextMenuGroup,
-{
-	createItems: function(){
-		this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem", {command: 'insertimage', iconClass: "dojoE2TBIcon dojoE2TBIcon_Image"}));
-	},
-	checkVisibility: function(){
-		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-		var img = dojo.withGlobal(curInst.window, "getSelectedElement", dojo.html.selection);
 
-		if(img && img.tagName.toLowerCase() == 'img'){
-			this.items[0].show();
-			return true;
-		}else{
-			this.items[0].hide();
-			return false;
-		}
-	}
-});
 __CPAN_FILE__ src/widget/Editor2Plugin/ToolbarDndSupport.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -55206,64 +35123,41 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-/*TODO:
- * Add a command to toggle DnD support for a toolbar
- * Save/restore order of toolbar/item
- */
 dojo.provide("dojo.widget.Editor2Plugin.ToolbarDndSupport");
 dojo.require("dojo.dnd.*");
-
-dojo.event.topic.subscribe("dojo.widget.Editor2::preLoadingToolbar", function(editor){
+dojo.event.topic.subscribe("dojo.widget.Editor2::preLoadingToolbar", function (editor) {
 	dojo.dnd.dragManager.nestedTargets = true;
 	var p = new dojo.widget.Editor2Plugin.ToolbarDndSupport(editor);
 });
-
-dojo.declare("dojo.widget.Editor2Plugin.ToolbarDndSupport", null,{
-	lookForClass: "dojoEditorToolbarDnd TB_ToolbarSet TB_Toolbar",
-	initializer: function(editor){
-		this.editor = editor;
-		dojo.event.connect(this.editor, "toolbarLoaded", this, "setup");
-		this.editor.registerLoadedPlugin(this);
-	},
-
-	setup: function(){
-		dojo.event.disconnect(this.editor, "toolbarLoaded", this, "setup");
-		var tbw = this.editor.toolbarWidget;
-		dojo.event.connect("before", tbw, "destroy", this, "destroy");
-
-		var nodes = dojo.html.getElementsByClass(this.lookForClass, tbw.domNode, null, dojo.html.classMatchType.ContainsAny);
-		if(!nodes){
-			dojo.debug("dojo.widget.Editor2Plugin.ToolbarDndSupport: No dom node with class in "+this.lookForClass);
-			return;
+dojo.declare("dojo.widget.Editor2Plugin.ToolbarDndSupport", null, {lookForClass:"dojoEditorToolbarDnd TB_ToolbarSet TB_Toolbar", initializer:function (editor) {
+	this.editor = editor;
+	dojo.event.connect(this.editor, "toolbarLoaded", this, "setup");
+	this.editor.registerLoadedPlugin(this);
+}, setup:function () {
+	dojo.event.disconnect(this.editor, "toolbarLoaded", this, "setup");
+	var tbw = this.editor.toolbarWidget;
+	dojo.event.connect("before", tbw, "destroy", this, "destroy");
+	var nodes = dojo.html.getElementsByClass(this.lookForClass, tbw.domNode, null, dojo.html.classMatchType.ContainsAny);
+	if (!nodes) {
+		dojo.debug("dojo.widget.Editor2Plugin.ToolbarDndSupport: No dom node with class in " + this.lookForClass);
+		return;
+	}
+	for (var i = 0; i < nodes.length; i++) {
+		var node = nodes[i];
+		var droptarget = node.getAttribute("dojoETDropTarget");
+		if (droptarget) {
+			(new dojo.dnd.HtmlDropTarget(node, [droptarget + tbw.widgetId])).vertical = true;
 		}
-		for(var i=0; i<nodes.length; i++){
-			var node = nodes[i];
-			var droptarget = node.getAttribute("dojoETDropTarget");
-			if(droptarget){
-				(new dojo.dnd.HtmlDropTarget(node, [droptarget+tbw.widgetId])).vertical = true;
-			}
-			var dragsource = node.getAttribute("dojoETDragSource");
-			if(dragsource){
-				new dojo.dnd.HtmlDragSource(node, dragsource+tbw.widgetId);
-			}
+		var dragsource = node.getAttribute("dojoETDragSource");
+		if (dragsource) {
+			new dojo.dnd.HtmlDragSource(node, dragsource + tbw.widgetId);
 		}
-	},
-
-	destroy: function(){
-		this.editor.unregisterLoadedPlugin(this);
 	}
-});
+}, destroy:function () {
+	this.editor.unregisterLoadedPlugin(this);
+}});
 
-//let's have a command to enable DnD
-/*dojo.declare("dojo.widget.Editor2Plugin.ToolbarDndCommand", dojo.widget.Editor2Command,{
-	execute: function(text, option){
-		var curInst = dojo.widget.Editor2Manager.getCurrentInstance();
-		if(curInst){
-		}
-	},
-	getState: function(){	
-	}
-});*/
+
 __CPAN_FILE__ src/widget/Editor2Plugin/AlwaysShowToolbar.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -55276,140 +35170,112 @@
 */
 
 dojo.provide("dojo.widget.Editor2Plugin.AlwaysShowToolbar");
-
-//dojo.widget.Editor2Manager.registerPerInstancePlugin("dojo.widget.Editor2Plugin.AlwaysShowToolbar");
-
-dojo.event.topic.subscribe("dojo.widget.Editor2::onLoad", function(editor){
-	if(editor.toolbarAlwaysVisible){
+dojo.event.topic.subscribe("dojo.widget.Editor2::onLoad", function (editor) {
+	if (editor.toolbarAlwaysVisible) {
 		var p = new dojo.widget.Editor2Plugin.AlwaysShowToolbar(editor);
 	}
 });
-dojo.declare("dojo.widget.Editor2Plugin.AlwaysShowToolbar", null,
-	function(editor){
-		this.editor = editor;
-		this.editor.registerLoadedPlugin(this);
-		this.setup();
-	},
-	{
-	_scrollSetUp: false,
-	_fixEnabled: false,
-	_scrollThreshold: false,
-	_handleScroll: true,
-
-	setup: function(){
-		var tdn = this.editor.toolbarWidget;
-		if(!tdn.tbBgIframe){
-			tdn.tbBgIframe = new dojo.html.BackgroundIframe(tdn.domNode);
-			tdn.tbBgIframe.onResized();
-		}
-		this.scrollInterval = setInterval(dojo.lang.hitch(this, "globalOnScrollHandler"), 100);
-
-		dojo.event.connect("before", this.editor.toolbarWidget, "destroy", this, "destroy");
-	},
-
-	globalOnScrollHandler: function(){
-		var isIE = dojo.render.html.ie;
-		if(!this._handleScroll){ return; }
-		var dh = dojo.html;
-		var tdn = this.editor.toolbarWidget.domNode;
-		var db = dojo.body();
-
-		if(!this._scrollSetUp){
-			this._scrollSetUp = true;
-			var editorWidth =  dh.getMarginBox(this.editor.domNode).width; 
-			this._scrollThreshold = dh.abs(tdn, true).y;
-			// dojo.debug("threshold:", this._scrollThreshold);
-			if((isIE)&&(db)&&(dh.getStyle(db, "background-image")=="none")){
-				with(db.style){
-					backgroundImage = "url(" + dojo.uri.dojoUri("src/widget/templates/images/blank.gif") + ")";
-					backgroundAttachment = "fixed";
-				}
+dojo.declare("dojo.widget.Editor2Plugin.AlwaysShowToolbar", null, function (editor) {
+	this.editor = editor;
+	this.editor.registerLoadedPlugin(this);
+	this.setup();
+}, {_scrollSetUp:false, _fixEnabled:false, _scrollThreshold:false, _handleScroll:true, setup:function () {
+	var tdn = this.editor.toolbarWidget;
+	if (!tdn.tbBgIframe) {
+		tdn.tbBgIframe = new dojo.html.BackgroundIframe(tdn.domNode);
+		tdn.tbBgIframe.onResized();
+	}
+	this.scrollInterval = setInterval(dojo.lang.hitch(this, "globalOnScrollHandler"), 100);
+	dojo.event.connect("before", this.editor.toolbarWidget, "destroy", this, "destroy");
+}, globalOnScrollHandler:function () {
+	var isIE = dojo.render.html.ie;
+	if (!this._handleScroll) {
+		return;
+	}
+	var dh = dojo.html;
+	var tdn = this.editor.toolbarWidget.domNode;
+	var db = dojo.body();
+	if (!this._scrollSetUp) {
+		this._scrollSetUp = true;
+		var editorWidth = dh.getMarginBox(this.editor.domNode).width;
+		this._scrollThreshold = dh.abs(tdn, true).y;
+		if ((isIE) && (db) && (dh.getStyle(db, "background-image") == "none")) {
+			with (db.style) {
+				backgroundImage = "url(" + dojo.uri.moduleUri("dojo.widget", "templates/images/blank.gif") + ")";
+				backgroundAttachment = "fixed";
 			}
 		}
-
-		var scrollPos = (window["pageYOffset"]) ? window["pageYOffset"] : (document["documentElement"]||document["body"]).scrollTop;
-
-		// FIXME: need to have top and bottom thresholds so toolbar doesn't keep scrolling past the bottom
-		if(scrollPos > this._scrollThreshold){
-			// dojo.debug(scrollPos);
-			if(!this._fixEnabled){
-				var tdnbox = dojo.html.getMarginBox(tdn);
-				this.editor.editorObject.style.marginTop = tdnbox.height+"px";
-
-				if(isIE){
-					// FIXME: should we just use setBehvior() here instead?
-					tdn.style.left = dojo.html.abs(tdn, dojo.html.boxSizing.MARGIN_BOX).x;
-					if(tdn.previousSibling){
-						this._IEOriginalPos = ['after',tdn.previousSibling];
-					}else if(tdn.nextSibling){
-						this._IEOriginalPos = ['before',tdn.nextSibling];
-					}else{
-						this._IEOriginalPos = ['',tdn.parentNode];
+	}
+	var scrollPos = (window["pageYOffset"]) ? window["pageYOffset"] : (document["documentElement"] || document["body"]).scrollTop;
+	if (scrollPos > this._scrollThreshold) {
+		if (!this._fixEnabled) {
+			var tdnbox = dojo.html.getMarginBox(tdn);
+			this.editor.editorObject.style.marginTop = tdnbox.height + "px";
+			if (isIE) {
+				tdn.style.left = dojo.html.abs(tdn, dojo.html.boxSizing.MARGIN_BOX).x;
+				if (tdn.previousSibling) {
+					this._IEOriginalPos = ["after", tdn.previousSibling];
+				} else {
+					if (tdn.nextSibling) {
+						this._IEOriginalPos = ["before", tdn.nextSibling];
+					} else {
+						this._IEOriginalPos = ["", tdn.parentNode];
 					}
-					dojo.body().appendChild(tdn);
-
-					dojo.html.addClass(tdn, "IEFixedToolbar");
-				}else{
-					with(tdn.style){
-						position = "fixed";
-						top = "0px";
-					}
 				}
-
-				tdn.style.width = tdnbox.width + "px";
-				tdn.style.zIndex = 1000;
-				this._fixEnabled = true;
-			}
-			// if we're showing the floating toolbar, make sure that if
-			// we've scrolled past the bottom of the editor that we hide
-			// the toolbar for this instance of the editor.
-
-			// TODO: when we get multiple editor toolbar support working
-			// correctly, ensure that we check this against the scroll
-			// position of the bottom-most editor instance.
-			if(!dojo.render.html.safari){
-				// safari reports a bunch of things incorrectly here
-				var eHeight = (this.height) ? parseInt(this.editor.height) : this.editor._lastHeight;
-				if(scrollPos > (this._scrollThreshold+eHeight)){
-					tdn.style.display = "none";
-				}else{
-					tdn.style.display = "";
+				dojo.body().appendChild(tdn);
+				dojo.html.addClass(tdn, "IEFixedToolbar");
+			} else {
+				with (tdn.style) {
+					position = "fixed";
+					top = "0px";
 				}
 			}
-		}else if(this._fixEnabled){
+			tdn.style.width = tdnbox.width + "px";
+			tdn.style.zIndex = 1000;
+			this._fixEnabled = true;
+		}
+		if (!dojo.render.html.safari) {
+			var eHeight = (this.height) ? parseInt(this.editor.height) : this.editor._lastHeight;
+			if (scrollPos > (this._scrollThreshold + eHeight)) {
+				tdn.style.display = "none";
+			} else {
+				tdn.style.display = "";
+			}
+		}
+	} else {
+		if (this._fixEnabled) {
 			(this.editor.object || this.editor.iframe).style.marginTop = null;
-			with(tdn.style){
+			with (tdn.style) {
 				position = "";
 				top = "";
 				zIndex = "";
 				display = "";
 			}
-			if(isIE){
+			if (isIE) {
 				tdn.style.left = "";
 				dojo.html.removeClass(tdn, "IEFixedToolbar");
-				if(this._IEOriginalPos){
+				if (this._IEOriginalPos) {
 					dojo.html.insertAtPosition(tdn, this._IEOriginalPos[1], this._IEOriginalPos[0]);
 					this._IEOriginalPos = null;
-				}else{
-					dojo.html.insertBefore(tdn, this.editor.object||this.editor.iframe);
+				} else {
+					dojo.html.insertBefore(tdn, this.editor.object || this.editor.iframe);
 				}
 			}
 			tdn.style.width = "";
 			this._fixEnabled = false;
 		}
-	},
+	}
+}, destroy:function () {
+	this._IEOriginalPos = null;
+	this._handleScroll = false;
+	clearInterval(this.scrollInterval);
+	this.editor.unregisterLoadedPlugin(this);
+	if (dojo.render.html.ie) {
+		dojo.html.removeClass(this.editor.toolbarWidget.domNode, "IEFixedToolbar");
+	}
+}});
 
-	destroy: function(){
-		this._IEOriginalPos = null;
-		this._handleScroll = false;
-		clearInterval(this.scrollInterval);
-		this.editor.unregisterLoadedPlugin(this);
 
-		if(dojo.render.html.ie){
-			dojo.html.removeClass(this.editor.toolbarWidget.domNode, "IEFixedToolbar");
-		}
-	}
-});
 __CPAN_DIR__ src/widget/nls
 __CPAN_FILE__ src/widget/nls/DropdownDatePicker.js
 /*
@@ -55434,7 +35300,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"rangeMessage":"* This value is out of range.","invalidMessage":"* The value entered is not valid.","missingMessage":"* This value is required."})
+({"rangeMessage":"* This value is out of range.", "invalidMessage":"* The value entered is not valid.", "missingMessage":"* This value is required."})
 __CPAN_FILE__ src/widget/nls/DropdownTimePicker.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -55471,7 +35337,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"rangeMessage":"* 入力した数値は選択範囲外です。","invalidMessage":"* 入力したデータに該当するものがありません。","missingMessage":"* 入力が必須です。"})
+({"rangeMessage":"* \u5165\u529b\u3057\u305f\u6570\u5024\u306f\u9078\u629e\u7bc4\u56f2\u5916\u3067\u3059\u3002", "invalidMessage":"* \u5165\u529b\u3057\u305f\u30c7\u30fc\u30bf\u306b\u8a72\u5f53\u3059\u308b\u3082\u306e\u304c\u3042\u308a\u307e\u305b\u3093\u3002", "missingMessage":"* \u5165\u529b\u304c\u5fc5\u9808\u3067\u3059\u3002"})
 __CPAN_DIR__ src/widget/nls/zh-cn
 __CPAN_FILE__ src/widget/nls/zh-cn/validate.js
 /*
@@ -55484,7 +35350,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"rangeMessage":"* 输入数据超出值域。","invalidMessage":"* 非法的输入值。","missingMessage":"* 此值是必须的。"})
+({"rangeMessage":"* \u8f93\u5165\u6570\u636e\u8d85\u51fa\u503c\u57df\u3002", "invalidMessage":"* \u975e\u6cd5\u7684\u8f93\u5165\u503c\u3002", "missingMessage":"* \u6b64\u503c\u662f\u5fc5\u987b\u7684\u3002"})
 __CPAN_DIR__ src/widget/nls/fr
 __CPAN_FILE__ src/widget/nls/fr/validate.js
 /*
@@ -55497,7 +35363,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"rangeMessage":"* Cette valeur est hors limites.","invalidMessage":"* La valeur saisie est incorrecte.","missingMessage":"* Cette valeur est obligatoire."})
+({"rangeMessage":"* Cette valeur est hors limites.", "invalidMessage":"* La valeur saisie est incorrecte.", "missingMessage":"* Cette valeur est obligatoire."})
 __CPAN_DIR__ src/widget/demoEngine
 __CPAN_FILE__ src/widget/demoEngine/DemoNavigator.js
 /*
@@ -55518,177 +35384,121 @@
 dojo.require("dojo.io.*");
 dojo.require("dojo.lfx.*");
 dojo.require("dojo.lang.common");
-
-dojo.widget.defineWidget("my.widget.demoEngine.DemoNavigator", 
-	dojo.widget.HtmlWidget, 
-	{
-		templatePath: dojo.uri.dojoUri("src/widget/demoEngine/templates/DemoNavigator.html"),
-		templateCssPath: dojo.uri.dojoUri("src/widget/demoEngine/templates/DemoNavigator.css"),
-		postCreate: function() {
-			dojo.html.addClass(this.domNode,this.domNodeClass);
-			dojo.html.addClass(this.demoListWrapperNode,this.demoListWrapperClass);
-			dojo.html.addClass(this.demoListContainerNode,this.demoListContainerClass);
-
-			if (dojo.render.html.ie) {
-				dojo.debug("render ie");
-				dojo.html.hide(this.demoListWrapperNode); 
-			} else {
-				dojo.debug("render non-ie");
-				dojo.lfx.html.fadeHide(this.demoListWrapperNode, 0).play();	
-			}
-
-			this.getRegistry(this.demoRegistryUrl);
-
-			this.demoContainer = dojo.widget.createWidget("DemoContainer",{returnImage: this.returnImage},this.demoNode);
-			dojo.event.connect(this.demoContainer,"returnToDemos", this, "returnToDemos");
-			this.demoContainer.hide();
-		},
-
-		returnToDemos: function() {
-			this.demoContainer.hide();
-			if (dojo.render.html.ie) {
-				dojo.debug("render ie");
-				dojo.html.show(this.navigationContainer) ;
-			} else {	
-				dojo.debug("render non-ie");
-				dojo.lfx.html.fadeShow(this.navigationContainer,250).play();
-			}
-
-			//if (dojo.render.html.ie) {
-			//	dojo.html.setOpacity(this.navigationContainer);
-			//}
-
-			dojo.lang.forEach(this.categoriesChildren, dojo.lang.hitch(this, function(child){
-				child.checkSize();
-			}));
-
-			dojo.lang.forEach(this.demoListChildren, dojo.lang.hitch(this, function(child){
-				child.checkSize();
-			}));
-		},
-
-		show: function() {
-			//dojo.widget.demoEngine.DemoNavigator.superclass.show.call(this);
-			dojo.html.show(this.domNode);
-			dojo.html.setOpacity(this.domNode,1);
-			//dojo.html.setOpacity(this.navigationContainer);	
-			//dojo.html.show(this.navigationContainer);
-			dojo.html.setOpacity(this.navigationContainer,1);
-
-			dojo.lang.forEach(this.categoriesChildren, dojo.lang.hitch(this, function(child){
-				child.checkSize();
-			}));
-
-			dojo.lang.forEach(this.demoListChildren, dojo.lang.hitch(this, function(child){
-				child.checkSize();
-			}));
-		},
-		getRegistry: function(url) {
-			dojo.io.bind({
-				url: url,
-				load: dojo.lang.hitch(this,this.processRegistry),
-				mimetype: "text/json"
-			});
-		},
-
-		processRegistry: function(type,registry,e) {
-			dojo.debug("Processing Registry");
-			this.registry = registry;
-			dojo.lang.forEach(this.registry.navigation, dojo.lang.hitch(this,this.addCategory)); 
-		},
-
-		addCategory: function(category) {
-				var newCat = dojo.widget.createWidget("Button",{caption: category.name});
-
-				if(!dojo.lang.isObject(this.registry.categories)) {
-					this.registry.categories=function(){};
-				}
-
-				this.registry.categories[category.name] = category;
-				this.categoriesChildren.push(newCat);
-				this.categoriesButtonsNode.appendChild(newCat.domNode);	
-				newCat.domNode.categoryName = category.name;
-				dojo.event.connect(newCat,"onClick", this, "onSelectCategory");
-		},
-
-		addDemo: function(demoName) {
-			var demo = this.registry.definitions[demoName];
-
-			if (dojo.render.html.ie) {
-				dojo.html.show(this.demoListWrapperNode) 
-			} else {
-				dojo.lfx.html.fadeShow(this.demoListWrapperNode, 250).play();
-			}
-
-			var newDemo = dojo.widget.createWidget("DemoItem",{viewDemoImage: this.viewDemoImage, name: demoName, description: demo.description, thumbnail: demo.thumbnail});
-			this.demoListChildren.push(newDemo);
-			this.demoListContainerNode.appendChild(newDemo.domNode);	
-			dojo.event.connect(newDemo,"onSelectDemo",this,"onSelectDemo");
-		},
-
-		onSelectCategory: function(e) {
-			catName = e.currentTarget.categoryName;	
-			dojo.debug("Selected Category: " + catName);
-			//Remove current list of demos
-			dojo.lang.forEach(this.demoListChildren, function(child) {
-					child.destroy();
-			});
-			this.demoListChildren=[];
-
-			//add demos from this cat
-			dojo.lang.forEach(this.registry.categories[catName].demos, dojo.lang.hitch(this,function(demoName){
-				this.addDemo(demoName);
-			}));
-		},
-
-		onSelectDemo: function(e) {
-			//Attach to this to do something when a demo is selected
-			dojo.debug("Demo Selected: " + e.target.name);
-
-			if (dojo.render.html.ie) {
-				dojo.debug("render ie");
-				dojo.html.hide(this.navigationContainer) ;
-				this.demoContainer.show();
-				this.demoContainer.showDemo();
-			} else {
-				dojo.debug("render non-ie");
-				dojo.lfx.html.fadeHide(this.navigationContainer,250,null,dojo.lang.hitch(this, function() {
-					this.demoContainer.show();	
-					this.demoContainer.showDemo();
-				})).play();
-			}
-
-			this.demoContainer.loadDemo(this.registry.definitions[e.target.name].url);
-			this.demoContainer.setName(e.target.name);
-			this.demoContainer.setSummary(this.registry.definitions[e.target.name].description);
-		}
-		
-	},
-	"",
-	function() {
-		this.demoRegistryUrl="demoRegistry.json";
-		this.registry=function(){};
-
-		this.categoriesNode="";
-		this.categoriesButtonsNode="";
-		this.navigationContainer="";
-
-		this.domNodeClass="demoNavigator";
-
-		this.demoNode="";
-		this.demoContainer="";
-
-		this.demoListWrapperNode="";
-		this.demoListWrapperClass="demoNavigatorListWrapper";
-		this.demoListContainerClass="demoNavigatorListContainer";
-
-		this.returnImage="images/dojoDemos.gif";
-		this.viewDemoImage="images/viewDemo.png";
-		this.demoListChildren = [];
-		this.categoriesChildren = [];
+dojo.widget.defineWidget("my.widget.demoEngine.DemoNavigator", dojo.widget.HtmlWidget, {templateString:"<div dojoAttachPoint=\"domNode\">\n\t<table width=\"100%\" cellspacing=\"0\" cellpadding=\"5\">\n\t\t<tbody>\n\t\t\t<tr dojoAttachPoint=\"navigationContainer\">\n\t\t\t\t<td dojoAttachPoint=\"categoriesNode\" valign=\"top\" width=\"1%\">\n\t\t\t\t\t<h1>Categories</h1>\n\t\t\t\t\t<div dojoAttachPoint=\"categoriesButtonsNode\"></div>\n\t\t\t\t</td>\n\n\t\t\t\t<td dojoAttachPoint=\"demoListNode\" valign=\"top\">\n\t\t\t\t\t<div dojoAttachPoint=\"demoListWrapperNode\">\n\t\t\t\t\t\t<div dojoAttachPoint=\"demoListContainerNode\">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td colspan=\"2\">\n\t\t\t\t\t<div dojoAttachPoint=\"demoNode\"></div>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n", templateCssString:".demoNavigatorListWrapper {\n\tborder:1px solid #dcdbdb;\n\tbackground-color:#f8f8f8;\n\tpadding:2px;\n}\n\n.demoNavigatorListContainer {\n\tborder:1px solid #f0f0f0;\n\tbackground-color:#fff;\n\tpadding:1em;\n}\n\n.demoNavigator h1 {\n\tmargin-top: 0px;\n\tmargin-bottom: 10px;\n\tfont-size: 1.2em;\n\tborder-bottom:1px dotted #a9ccf5;\n}\n\n.demoNavigator .dojoButton {\n\tmargin-bottom: 5px;\n}\n\n.demoNavigator .dojoButton .dojoButtonContents {\n\tfont-size: 1.1em;\n\twidth: 100px;\n\tcolor: black;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "demoEngine/templates/DemoNavigator.css"), postCreate:function () {
+	dojo.html.addClass(this.domNode, this.domNodeClass);
+	dojo.html.addClass(this.demoListWrapperNode, this.demoListWrapperClass);
+	dojo.html.addClass(this.demoListContainerNode, this.demoListContainerClass);
+	if (dojo.render.html.ie) {
+		dojo.debug("render ie");
+		dojo.html.hide(this.demoListWrapperNode);
+	} else {
+		dojo.debug("render non-ie");
+		dojo.lfx.html.fadeHide(this.demoListWrapperNode, 0).play();
 	}
-);
+	this.getRegistry(this.demoRegistryUrl);
+	this.demoContainer = dojo.widget.createWidget("DemoContainer", {returnImage:this.returnImage}, this.demoNode);
+	dojo.event.connect(this.demoContainer, "returnToDemos", this, "returnToDemos");
+	this.demoContainer.hide();
+}, returnToDemos:function () {
+	this.demoContainer.hide();
+	if (dojo.render.html.ie) {
+		dojo.debug("render ie");
+		dojo.html.show(this.navigationContainer);
+	} else {
+		dojo.debug("render non-ie");
+		dojo.lfx.html.fadeShow(this.navigationContainer, 250).play();
+	}
+	dojo.lang.forEach(this.categoriesChildren, dojo.lang.hitch(this, function (child) {
+		child.checkSize();
+	}));
+	dojo.lang.forEach(this.demoListChildren, dojo.lang.hitch(this, function (child) {
+		child.checkSize();
+	}));
+}, show:function () {
+	dojo.html.show(this.domNode);
+	dojo.html.setOpacity(this.domNode, 1);
+	dojo.html.setOpacity(this.navigationContainer, 1);
+	dojo.lang.forEach(this.categoriesChildren, dojo.lang.hitch(this, function (child) {
+		child.checkSize();
+	}));
+	dojo.lang.forEach(this.demoListChildren, dojo.lang.hitch(this, function (child) {
+		child.checkSize();
+	}));
+}, getRegistry:function (url) {
+	dojo.io.bind({url:url, load:dojo.lang.hitch(this, this.processRegistry), mimetype:"text/json"});
+}, processRegistry:function (type, registry, e) {
+	dojo.debug("Processing Registry");
+	this.registry = registry;
+	dojo.lang.forEach(this.registry.navigation, dojo.lang.hitch(this, this.addCategory));
+}, addCategory:function (category) {
+	var newCat = dojo.widget.createWidget("Button", {caption:category.name});
+	if (!dojo.lang.isObject(this.registry.categories)) {
+		this.registry.categories = function () {
+		};
+	}
+	this.registry.categories[category.name] = category;
+	this.categoriesChildren.push(newCat);
+	this.categoriesButtonsNode.appendChild(newCat.domNode);
+	newCat.domNode.categoryName = category.name;
+	dojo.event.connect(newCat, "onClick", this, "onSelectCategory");
+}, addDemo:function (demoName) {
+	var demo = this.registry.definitions[demoName];
+	if (dojo.render.html.ie) {
+		dojo.html.show(this.demoListWrapperNode);
+	} else {
+		dojo.lfx.html.fadeShow(this.demoListWrapperNode, 250).play();
+	}
+	var newDemo = dojo.widget.createWidget("DemoItem", {viewDemoImage:this.viewDemoImage, name:demoName, description:demo.description, thumbnail:demo.thumbnail});
+	this.demoListChildren.push(newDemo);
+	this.demoListContainerNode.appendChild(newDemo.domNode);
+	dojo.event.connect(newDemo, "onSelectDemo", this, "onSelectDemo");
+}, onSelectCategory:function (e) {
+	catName = e.currentTarget.categoryName;
+	dojo.debug("Selected Category: " + catName);
+	dojo.lang.forEach(this.demoListChildren, function (child) {
+		child.destroy();
+	});
+	this.demoListChildren = [];
+	dojo.lang.forEach(this.registry.categories[catName].demos, dojo.lang.hitch(this, function (demoName) {
+		this.addDemo(demoName);
+	}));
+}, onSelectDemo:function (e) {
+	dojo.debug("Demo Selected: " + e.target.name);
+	if (dojo.render.html.ie) {
+		dojo.debug("render ie");
+		dojo.html.hide(this.navigationContainer);
+		this.demoContainer.show();
+		this.demoContainer.showDemo();
+	} else {
+		dojo.debug("render non-ie");
+		dojo.lfx.html.fadeHide(this.navigationContainer, 250, null, dojo.lang.hitch(this, function () {
+			this.demoContainer.show();
+			this.demoContainer.showDemo();
+		})).play();
+	}
+	this.demoContainer.loadDemo(this.registry.definitions[e.target.name].url);
+	this.demoContainer.setName(e.target.name);
+	this.demoContainer.setSummary(this.registry.definitions[e.target.name].description);
+}}, "", function () {
+	this.demoRegistryUrl = "demoRegistry.json";
+	this.registry = function () {
+	};
+	this.categoriesNode = "";
+	this.categoriesButtonsNode = "";
+	this.navigationContainer = "";
+	this.domNodeClass = "demoNavigator";
+	this.demoNode = "";
+	this.demoContainer = "";
+	this.demoListWrapperNode = "";
+	this.demoListWrapperClass = "demoNavigatorListWrapper";
+	this.demoListContainerClass = "demoNavigatorListContainer";
+	this.returnImage = "images/dojoDemos.gif";
+	this.viewDemoImage = "images/viewDemo.png";
+	this.demoListChildren = [];
+	this.categoriesChildren = [];
+});
 
+
 __CPAN_FILE__ src/widget/demoEngine/DemoContainer.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -55706,98 +35516,64 @@
 dojo.require("dojo.widget.demoEngine.DemoPane");
 dojo.require("dojo.widget.demoEngine.SourcePane");
 dojo.require("dojo.widget.TabContainer");
+dojo.widget.defineWidget("my.widget.demoEngine.DemoContainer", dojo.widget.HtmlWidget, {templateString:"<div dojoAttachPoint=\"domNode\">\n\t<table width=\"100%\" cellspacing=\"0\" cellpadding=\"5\">\n\t\t<tbody>\n\t\t\t<tr dojoAttachPoint=\"headerNode\">\n\t\t\t\t<td dojoAttachPoint=\"returnNode\" valign=\"middle\" width=\"1%\">\n\t\t\t\t\t<img dojoAttachPoint=\"returnImageNode\" dojoAttachEvent=\"onclick: returnToDemos\"/>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<h1 dojoAttachPoint=\"demoNameNode\"></h1>\n\t\t\t\t\t<p dojoAttachPoint=\"summaryNode\"></p>\n\t\t\t\t</td>\n\t\t\t\t<td dojoAttachPoint=\"tabControlNode\" valign=\"middle\" align=\"right\" nowrap>\n\t\t\t\t\t<span dojoAttachPoint=\"sourceButtonNode\" dojoAttachEvent=\"onclick: showSource\">source</span>\n\t\t\t\t\t<span dojoAttachPoint=\"demoButtonNode\" dojoAttachEvent=\"onclick: showDemo\">demo</span>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td colspan=\"3\">\n\t\t\t\t\t<div dojoAttachPoint=\"tabNode\">\n\t\t\t\t\t</div>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n", templateCssString:".demoContainer{\n\twidth: 100%;\n\theight: 100%;\n\tpadding: 0px;\n\tmargin: 0px;\n}\n\n.demoContainer .return {\n\tcursor: pointer;\n}\n\n.demoContainer span {\n\tmargin-right: 10px;\n\tcursor: pointer;\n}\n\n.demoContainer .selected {\n\tborder-bottom: 5px solid #95bfff;\n}\n\n.demoContainer table {\n\tbackground: #f5f5f5;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.demoContainerTabs {\n\twidth: 100%;\n\theight: 400px;\n}\n\n.demoContainerTabs .dojoTabLabels-top {\n\tdisplay: none;\n}\n\n.demoContainerTabs .dojoTabPaneWrapper {\n\tborder: 0px;\n}\n\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "demoEngine/templates/DemoContainer.css"), postCreate:function () {
+	dojo.html.addClass(this.domNode, this.domNodeClass);
+	dojo.html.addClass(this.tabNode, this.tabClass);
+	dojo.html.addClass(this.returnImageNode, this.returnClass);
+	this.returnImageNode.src = this.returnImage;
+	this.tabContainer = dojo.widget.createWidget("TabContainer", {}, this.tabNode);
+	this.demoTab = dojo.widget.createWidget("DemoPane", {});
+	this.tabContainer.addChild(this.demoTab);
+	this.sourceTab = dojo.widget.createWidget("SourcePane", {});
+	this.tabContainer.addChild(this.sourceTab);
+	dojo.html.setOpacity(this.domNode, 0);
+	dojo.html.hide(this.domNode);
+}, loadDemo:function (url) {
+	this.demoTab.setHref(url);
+	this.sourceTab.setHref(url);
+	this.showDemo();
+}, setName:function (name) {
+	dojo.html.removeChildren(this.demoNameNode);
+	this.demoNameNode.appendChild(document.createTextNode(name));
+}, setSummary:function (summary) {
+	dojo.html.removeChildren(this.summaryNode);
+	this.summaryNode.appendChild(document.createTextNode(summary));
+}, showSource:function () {
+	dojo.html.removeClass(this.demoButtonNode, this.selectedButtonClass);
+	dojo.html.addClass(this.sourceButtonNode, this.selectedButtonClass);
+	this.tabContainer.selectTab(this.sourceTab);
+}, showDemo:function () {
+	dojo.html.removeClass(this.sourceButtonNode, this.selectedButtonClass);
+	dojo.html.addClass(this.demoButtonNode, this.selectedButtonClass);
+	this.tabContainer.selectTab(this.demoTab);
+}, returnToDemos:function () {
+	dojo.debug("Return To Demos");
+}, show:function () {
+	dojo.html.setOpacity(this.domNode, 1);
+	dojo.html.show(this.domNode);
+	this.tabContainer.checkSize();
+}}, "", function () {
+	dojo.debug("DemoPane Init");
+	this.domNodeClass = "demoContainer";
+	this.tabContainer = "";
+	this.sourceTab = "";
+	this.demoTab = "";
+	this.headerNode = "";
+	this.returnNode = "";
+	this.returnImageNode = "";
+	this.returnImage = "images/dojoDemos.gif";
+	this.returnClass = "return";
+	this.summaryNode = "";
+	this.demoNameNode = "";
+	this.tabControlNode = "";
+	this.tabNode = "";
+	this.tabClass = "demoContainerTabs";
+	this.sourceButtonNode = "";
+	this.demoButtonNode = "";
+	this.selectedButtonClass = "selected";
+});
 
-dojo.widget.defineWidget("my.widget.demoEngine.DemoContainer", 
-	dojo.widget.HtmlWidget, 
-	{
-		templatePath: dojo.uri.dojoUri("src/widget/demoEngine/templates/DemoContainer.html"),
-		templateCssPath: dojo.uri.dojoUri("src/widget/demoEngine/templates/DemoContainer.css"),
-		postCreate: function() {
-			dojo.html.addClass(this.domNode,this.domNodeClass);
-			dojo.html.addClass(this.tabNode, this.tabClass);
-			dojo.html.addClass(this.returnImageNode, this.returnClass);
-			this.returnImageNode.src=this.returnImage;
 
-			this.tabContainer = dojo.widget.createWidget("TabContainer",{},this.tabNode);
-
-			this.demoTab = dojo.widget.createWidget("DemoPane",{});
-			this.tabContainer.addChild(this.demoTab);
-
-			this.sourceTab= dojo.widget.createWidget("SourcePane",{});
-			this.tabContainer.addChild(this.sourceTab);
-
-			dojo.html.setOpacity(this.domNode,0);
-			dojo.html.hide(this.domNode);
-		},
-
-		loadDemo: function(url) {
-			this.demoTab.setHref(url);
-			this.sourceTab.setHref(url);
-			this.showDemo();
-		},
-
-		setName: function(name) {
-			dojo.html.removeChildren(this.demoNameNode);
-			this.demoNameNode.appendChild(document.createTextNode(name));
-		},
-
-		setSummary: function(summary) {
-			dojo.html.removeChildren(this.summaryNode);
-			this.summaryNode.appendChild(document.createTextNode(summary));
-		},
-
-		showSource: function() {
-			dojo.html.removeClass(this.demoButtonNode,this.selectedButtonClass);
-			dojo.html.addClass(this.sourceButtonNode,this.selectedButtonClass);
-			this.tabContainer.selectTab(this.sourceTab);	
-		},
-
-		showDemo: function() {
-			dojo.html.removeClass(this.sourceButtonNode,this.selectedButtonClass);
-			dojo.html.addClass(this.demoButtonNode,this.selectedButtonClass);
-			this.tabContainer.selectTab(this.demoTab);
-		},
-
-		returnToDemos: function() {
-			dojo.debug("Return To Demos");
-		},
-
-		show: function() {
-			dojo.html.setOpacity(this.domNode,1);
-			dojo.html.show(this.domNode);
-			this.tabContainer.checkSize();
-		}
-	},
-	"",
-	function() {
-		dojo.debug("DemoPane Init");
-		this.domNodeClass="demoContainer";
-
-		this.tabContainer="";
-		this.sourceTab="";
-		this.demoTab="";
-
-		this.headerNode="";
-		this.returnNode="";
-	
-		this.returnImageNode="";
-		this.returnImage="images/dojoDemos.gif";
-		this.returnClass="return";
-		
-		this.summaryNode="";
-		this.demoNameNode="";
-		this.tabControlNode="";
-
-		this.tabNode="";
-		this.tabClass = "demoContainerTabs";
-
-		this.sourceButtonNode="";
-		this.demoButtonNode="";
-
-		this.selectedButtonClass="selected";
-	}
-);
-
 __CPAN_FILE__ src/widget/demoEngine/DemoItem.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -55812,65 +35588,44 @@
 dojo.provide("dojo.widget.demoEngine.DemoItem");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.HtmlWidget");
+dojo.widget.defineWidget("my.widget.demoEngine.DemoItem", dojo.widget.HtmlWidget, {templateString:"<div dojoAttachPoint=\"domNode\">\n\t<div dojoAttachPoint=\"summaryBoxNode\">\n\t\t<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">\n\t\t\t<tbody>\n\t\t\t\t<tr>\n\t\t\t\t\t<td dojoAttachPoint=\"screenshotTdNode\" valign=\"top\" width=\"1%\">\n\t\t\t\t\t\t<img dojoAttachPoint=\"thumbnailImageNode\" dojoAttachEvent=\"onclick: onSelectDemo\" />\n\t\t\t\t\t</td>\n\t\t\t\t\t<td dojoAttachPoint=\"summaryContainerNode\" valign=\"top\">\n\t\t\t\t\t\t<h1 dojoAttachPoint=\"nameNode\">\n\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t<div dojoAttachPoint=\"summaryNode\">\n\t\t\t\t\t\t\t<p dojoAttachPoint=\"descriptionNode\"></p>\n\t\t\t\t\t\t\t<div dojoAttachPoint=\"viewDemoLinkNode\"><img dojoAttachPoint=\"viewDemoImageNode\"/ dojoAttachEvent=\"onclick: onSelectDemo\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t</div>\n</div>\n", templateCssString:".demoItemSummaryBox {\n\tbackground: #efefef;\n\tborder:1px solid #dae3ee;\n}\n\n.demoItemScreenshot {\n\tpadding:0.65em;\n\twidth:175px;\n\tborder-right:1px solid #fafafa;\n\ttext-align:center;\n\tcursor: pointer;\n}\n\n.demoItemWrapper{\n\tmargin-bottom:1em;\n}\n\n.demoItemWrapper a:link, .demoItemWrapper a:visited {\n\tcolor:#a6238f;\n\ttext-decoration:none;\n}\n\n.demoItemSummaryContainer {\n\tborder-left:1px solid #ddd;\n}\n\n.demoItemSummaryContainer h1 {\n\tbackground-color:#e8e8e8;\n\tborder-bottom: 1px solid #e6e6e6;\n\tcolor:#738fb9;\n\tmargin:1px;\n\tpadding:0.5em;\n\tfont-family:\"Lucida Grande\", \"Tahoma\", serif;\n\tfont-size:1.25em;\n\tfont-weight:normal;\n}\n\n.demoItemSummaryContainer h1 .packageSummary {\n\tdisplay:block;\n\tcolor:#000;\n\tfont-size:10px;\n\tmargin-top:2px;\n}\n\n.demoItemSummaryContainer .demoItemSummary{\n\tpadding:1em;\n}\n\n.demoItemSummaryContainer .demoItemSummary p {\n\tfont-size:0.85em;\n\tpadding:0;\n\tmargin:0;\n}\n\n.demoItemView {\n\ttext-align:right;\n\tcursor: pointer;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "demoEngine/templates/DemoItem.css"), postCreate:function () {
+	dojo.html.addClass(this.domNode, this.domNodeClass);
+	dojo.html.addClass(this.summaryBoxNode, this.summaryBoxClass);
+	dojo.html.addClass(this.screenshotTdNode, this.screenshotTdClass);
+	dojo.html.addClass(this.summaryContainerNode, this.summaryContainerClass);
+	dojo.html.addClass(this.summaryNode, this.summaryClass);
+	dojo.html.addClass(this.viewDemoLinkNode, this.viewDemoLinkClass);
+	this.nameNode.appendChild(document.createTextNode(this.name));
+	this.descriptionNode.appendChild(document.createTextNode(this.description));
+	this.thumbnailImageNode.src = this.thumbnail;
+	this.thumbnailImageNode.name = this.name;
+	this.viewDemoImageNode.src = this.viewDemoImage;
+	this.viewDemoImageNode.name = this.name;
+}, onSelectDemo:function () {
+}}, "", function () {
+	this.demo = "";
+	this.domNodeClass = "demoItemWrapper";
+	this.summaryBoxNode = "";
+	this.summaryBoxClass = "demoItemSummaryBox";
+	this.nameNode = "";
+	this.thumbnailImageNode = "";
+	this.viewDemoImageNode = "";
+	this.screenshotTdNode = "";
+	this.screenshotTdClass = "demoItemScreenshot";
+	this.summaryContainerNode = "";
+	this.summaryContainerClass = "demoItemSummaryContainer";
+	this.summaryNode = "";
+	this.summaryClass = "demoItemSummary";
+	this.viewDemoLinkNode = "";
+	this.viewDemoLinkClass = "demoItemView";
+	this.descriptionNode = "";
+	this.name = "Some Demo";
+	this.description = "This is the description of this demo.";
+	this.thumbnail = "images/test_thumb.gif";
+	this.viewDemoImage = "images/viewDemo.png";
+});
 
-dojo.widget.defineWidget("my.widget.demoEngine.DemoItem", 
-	dojo.widget.HtmlWidget, 
-	{
-		templatePath: dojo.uri.dojoUri("src/widget/demoEngine/templates/DemoItem.html"),
-		templateCssPath: dojo.uri.dojoUri("src/widget/demoEngine/templates/DemoItem.css"),
-		postCreate: function() {
-			dojo.html.addClass(this.domNode,this.domNodeClass);
-			dojo.html.addClass(this.summaryBoxNode, this.summaryBoxClass);
-			dojo.html.addClass(this.screenshotTdNode, this.screenshotTdClass);
-			dojo.html.addClass(this.summaryContainerNode, this.summaryContainerClass);
-			dojo.html.addClass(this.summaryNode, this.summaryClass);
-			dojo.html.addClass(this.viewDemoLinkNode, this.viewDemoLinkClass);
 
-			this.nameNode.appendChild(document.createTextNode(this.name));
-			this.descriptionNode.appendChild(document.createTextNode(this.description));
-			this.thumbnailImageNode.src = this.thumbnail;
-			this.thumbnailImageNode.name=this.name;
-			this.viewDemoImageNode.src = this.viewDemoImage;
-			this.viewDemoImageNode.name=this.name;
-		},
-		onSelectDemo: function() {
-			//Attach to this to do something when a demo is selected
-		}
-	},
-	"",
-	function() {
-		this.demo = "";
-
-		this.domNodeClass="demoItemWrapper";
-
-		this.summaryBoxNode="";
-		this.summaryBoxClass="demoItemSummaryBox";
-
-		this.nameNode="";
-		this.thumbnailImageNode="";
-		this.viewDemoImageNode="";
-
-		this.screenshotTdNode="";
-		this.screenshotTdClass="demoItemScreenshot";
-
-		this.summaryContainerNode="";
-		this.summaryContainerClass="demoItemSummaryContainer";
-
-		this.summaryNode="";
-		this.summaryClass="demoItemSummary";
-
-		this.viewDemoLinkNode="";
-		this.viewDemoLinkClass="demoItemView";
-
-		this.descriptionNode="";
-
-		this.name="Some Demo";
-		this.description="This is the description of this demo.";
-		this.thumbnail="images/test_thumb.gif";
-		this.viewDemoImage="images/viewDemo.png";
-	}
-);
-
 __CPAN_FILE__ src/widget/demoEngine/SourcePane.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -55886,45 +35641,26 @@
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.io.*");
-
-dojo.widget.defineWidget("my.widget.demoEngine.SourcePane", 
-	dojo.widget.HtmlWidget, 
-	{
-		templatePath: dojo.uri.dojoUri("src/widget/demoEngine/templates/SourcePane.html"),
-		templateCssPath: dojo.uri.dojoUri("src/widget/demoEngine/templates/SourcePane.css"),
-		postCreate: function() {
-			dojo.html.addClass(this.domNode,this.domNodeClass);
-			dojo.debug("PostCreate");
-		},
-	
-		getSource: function() {
-			if (this.href) {
-				dojo.io.bind({
-					url: this.href,
-					load: dojo.lang.hitch(this, "fillInSource"),
-					mimetype: "text/plain"
-				});
-			}
-		},	
-
-		fillInSource: function(type, source, e) {
-			this.sourceNode.value=source;
-		},
-
-		setHref: function(url) {
-			this.href = url;
-			this.getSource();
-		}
-	},
-	"",
-	function() {
-		dojo.debug("SourcePane Init");
-		this.domNodeClass="sourcePane";
-		this.sourceNode = "";
-		this.href = "";
+dojo.widget.defineWidget("my.widget.demoEngine.SourcePane", dojo.widget.HtmlWidget, {templateString:"<div dojoAttachPoint=\"domNode\">\n\t<textarea dojoAttachPoint=\"sourceNode\" rows=\"100%\"></textarea>\n</div>\n", templateCssString:".sourcePane {\n\twidth: 100%;\n\theight: 100%;\n\tpadding: 0px;\n\tmargin: 0px;\n\toverflow: hidden;\n}\n\n.sourcePane textarea{\n\twidth: 100%;\n\theight: 100%;\n\tborder: 0px;\n\toverflow: auto;\n\tpadding: 0px;\n\tmargin:0px;\n}\n\n* html .sourcePane {\n\toverflow: auto;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "demoEngine/templates/SourcePane.css"), postCreate:function () {
+	dojo.html.addClass(this.domNode, this.domNodeClass);
+	dojo.debug("PostCreate");
+}, getSource:function () {
+	if (this.href) {
+		dojo.io.bind({url:this.href, load:dojo.lang.hitch(this, "fillInSource"), mimetype:"text/plain"});
 	}
-);
+}, fillInSource:function (type, source, e) {
+	this.sourceNode.value = source;
+}, setHref:function (url) {
+	this.href = url;
+	this.getSource();
+}}, "", function () {
+	dojo.debug("SourcePane Init");
+	this.domNodeClass = "sourcePane";
+	this.sourceNode = "";
+	this.href = "";
+});
 
+
 __CPAN_FILE__ src/widget/demoEngine/DemoPane.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -55939,38 +35675,25 @@
 dojo.provide("dojo.widget.demoEngine.DemoPane");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.HtmlWidget");
+dojo.widget.defineWidget("my.widget.demoEngine.DemoPane", dojo.widget.HtmlWidget, {templateString:"<div dojoAttachPoint=\"domNode\">\n\t<iframe dojoAttachPoint=\"demoNode\"></iframe>\n</div>\n", templateCssString:".demoPane {\n\twidth: 100%;\n\theight: 100%;\n\tpadding: 0px;\n\tmargin: 0px;\n\toverflow: hidden;\n}\n\n.demoPane iframe {\n\twidth: 100%;\n\theight: 100%;\n\tborder: 0px;\n\tborder: none;\n\toverflow: auto;\n\tpadding: 0px;\n\tmargin:0px;\n\tbackground: #ffffff;\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "demoEngine/templates/DemoPane.css"), postCreate:function () {
+	dojo.html.addClass(this.domNode, this.domNodeClass);
+	dojo.debug("PostCreate");
+	this._launchDemo();
+}, _launchDemo:function () {
+	dojo.debug("Launching Demo");
+	dojo.debug(this.demoNode);
+	this.demoNode.src = this.href;
+}, setHref:function (url) {
+	this.href = url;
+	this._launchDemo();
+}}, "", function () {
+	dojo.debug("DemoPane Init");
+	this.domNodeClass = "demoPane";
+	this.demoNode = "";
+	this.href = "";
+});
 
-dojo.widget.defineWidget("my.widget.demoEngine.DemoPane", 
-	dojo.widget.HtmlWidget, 
-	{
-		templatePath: dojo.uri.dojoUri("src/widget/demoEngine/templates/DemoPane.html"),
-		templateCssPath: dojo.uri.dojoUri("src/widget/demoEngine/templates/DemoPane.css"),
-		postCreate: function() {
-			dojo.html.addClass(this.domNode,this.domNodeClass);
-			dojo.debug("PostCreate");
-			this._launchDemo();
-		},
-		
-		_launchDemo: function() {
-			dojo.debug("Launching Demo");
-			dojo.debug(this.demoNode);
-			this.demoNode.src=this.href;
-		},
 
-		setHref: function(url) {
-			this.href = url;
-			this._launchDemo();
-		}
-	},
-	"",
-	function() {
-		dojo.debug("DemoPane Init");
-		this.domNodeClass="demoPane";
-		this.demoNode = "";
-		this.href = "";
-	}
-);
-
 __CPAN_FILE__ src/widget/demoEngine/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -55982,17 +35705,10 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	browser: [
-		"dojo.widget.demoEngine.DemoItem",
-		"dojo.widget.demoEngine.DemoNavigator",
-		"dojo.widget.demoEngine.DemoPane",
-		"dojo.widget.demoEngine.SourcePane",
-		"dojo.widget.demoEngine.DemoContainer"
-	]
-});
+dojo.kwCompoundRequire({browser:["dojo.widget.demoEngine.DemoItem", "dojo.widget.demoEngine.DemoNavigator", "dojo.widget.demoEngine.DemoPane", "dojo.widget.demoEngine.SourcePane", "dojo.widget.demoEngine.DemoContainer"]});
 dojo.provide("dojo.widget.demoEngine.*");
 
+
 __CPAN_DIR__ src/widget/demoEngine/templates
 __CPAN_FILE__ src/widget/demoEngine/templates/DemoContainer.html
 <div dojoAttachPoint="domNode">
@@ -56359,442 +36075,344 @@
 */
 
 dojo.provide("dojo.widget.svg.Chart");
-
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.widget.Chart");
 dojo.require("dojo.html.layout");
 dojo.require("dojo.math");
 dojo.require("dojo.svg");
 dojo.require("dojo.gfx.color");
-
 dojo.require("dojo.json");
-
-dojo.widget.defineWidget(
-	"dojo.widget.svg.Chart",
-	[dojo.widget.HtmlWidget, dojo.widget.Chart],
-	function(){
-		// summary: Creates a chart based on the passed data and plotter choice, using SVG.
-		// description:
-		//		Renders a basic chart set based on the chosen data source and plotter, using
-		//		SVG.  Note that a lot of the public properties are not meant to be altered,
-		//		and that some usable attributes passed with the HTML widget definition do not
-		//		correspond to equivilent properties that are used.
-		this.templatePath=null;
-		this.templateCssPath=null;
-		this._isInitialize=false;
-		this.hasData=false;
-		this.vectorNode=null;
-		this.plotArea=null;
-		this.dataGroup=null;
-		this.axisGroup=null;
-		this.properties={
-			height:0,	//	defaults, will resize to the domNode.
-			width:0,
-			defaultWidth:600,
-			defaultHeight:400,
-			plotType:null,
-			padding:{
-				top:10,
-				bottom:2,
-				left:60,
-				right:30
-			},
-			axes:{
-				x:{
-					plotAt:0,
-					label:"",
-					unitLabel:"",
-					unitType:Number,
-					nUnitsToShow:10,
-					range:{
-						min:0,
-						max:200
-					}
-				},
-				y:{
-					plotAt:0,
-					label:"",
-					unitLabel:"",
-					unitType:Number,
-					nUnitsToShow:10,
-					range:{
-						min:0,
-						max:200
-					}
+dojo.widget.defineWidget("dojo.widget.svg.Chart", [dojo.widget.HtmlWidget, dojo.widget.Chart], function () {
+	this.templatePath = null;
+	this.templateCssPath = null;
+	this._isInitialize = false;
+	this.hasData = false;
+	this.vectorNode = null;
+	this.plotArea = null;
+	this.dataGroup = null;
+	this.axisGroup = null;
+	this.properties = {height:0, width:0, defaultWidth:600, defaultHeight:400, plotType:null, padding:{top:10, bottom:2, left:60, right:30}, axes:{x:{plotAt:0, label:"", unitLabel:"", unitType:Number, nUnitsToShow:10, range:{min:0, max:200}}, y:{plotAt:0, label:"", unitLabel:"", unitType:Number, nUnitsToShow:10, range:{min:0, max:200}}}};
+}, {parseProperties:function (node) {
+	var bRangeX = false;
+	var bRangeY = false;
+	if (node.getAttribute("width")) {
+		this.properties.width = node.getAttribute("width");
+	}
+	if (node.getAttribute("height")) {
+		this.properties.height = node.getAttribute("height");
+	}
+	if (node.getAttribute("plotType")) {
+		this.properties.plotType = node.getAttribute("plotType");
+	}
+	if (node.getAttribute("padding")) {
+		if (node.getAttribute("padding").indexOf(",") > -1) {
+			var p = node.getAttribute("padding").split(",");
+		} else {
+			var p = node.getAttribute("padding").split(" ");
+		}
+		if (p.length == 1) {
+			var pad = parseFloat(p[0]);
+			this.properties.padding.top = pad;
+			this.properties.padding.right = pad;
+			this.properties.padding.bottom = pad;
+			this.properties.padding.left = pad;
+		} else {
+			if (p.length == 2) {
+				var padV = parseFloat(p[0]);
+				var padH = parseFloat(p[1]);
+				this.properties.padding.top = padV;
+				this.properties.padding.right = padH;
+				this.properties.padding.bottom = padV;
+				this.properties.padding.left = padH;
+			} else {
+				if (p.length == 4) {
+					this.properties.padding.top = parseFloat(p[0]);
+					this.properties.padding.right = parseFloat(p[1]);
+					this.properties.padding.bottom = parseFloat(p[2]);
+					this.properties.padding.left = parseFloat(p[3]);
 				}
 			}
-		};
-	},
-	{
-		parseProperties:function(/* HTMLElement */node){
-			//	summary
-			//	Parse the properties off the main tag
-			var bRangeX=false;
-			var bRangeY=false;
-			if (node.getAttribute("width")){ 
-				this.properties.width=node.getAttribute("width");
-			}
-			if (node.getAttribute("height")){
-				this.properties.height=node.getAttribute("height");
-			}
-			if (node.getAttribute("plotType")){
-				this.properties.plotType=node.getAttribute("plotType");
-			}
-			if (node.getAttribute("padding")){
-				if (node.getAttribute("padding").indexOf(",") > -1)
-					var p=node.getAttribute("padding").split(","); 
-				else var p=node.getAttribute("padding").split(" ");
-				if (p.length==1){
-					var pad=parseFloat(p[0]);
-					this.properties.padding.top=pad;
-					this.properties.padding.right=pad;
-					this.properties.padding.bottom=pad;
-					this.properties.padding.left=pad;
-				} else if(p.length==2){
-					var padV=parseFloat(p[0]);
-					var padH=parseFloat(p[1]);
-					this.properties.padding.top=padV;
-					this.properties.padding.right=padH;
-					this.properties.padding.bottom=padV;
-					this.properties.padding.left=padH;
-				} else if(p.length==4){
-					this.properties.padding.top=parseFloat(p[0]);
-					this.properties.padding.right=parseFloat(p[1]);
-					this.properties.padding.bottom=parseFloat(p[2]);
-					this.properties.padding.left=parseFloat(p[3]);
-				}
-			}
-			if (node.getAttribute("rangeX")){
-				var p=node.getAttribute("rangeX");
-				if (p.indexOf(",")>-1) p=p.split(",");
-				else p=p.split(" ");
-				this.properties.axes.x.range.min=parseFloat(p[0]);
-				this.properties.axes.x.range.max=parseFloat(p[1]);
-				bRangeX=true;
-			}
-			if (node.getAttribute("rangeY")){
-				var p=node.getAttribute("rangeY");
-				if (p.indexOf(",")>-1) p=p.split(",");
-				else p=p.split(" ");
-				this.properties.axes.y.range.min=parseFloat(p[0]);
-				this.properties.axes.y.range.max=parseFloat(p[1]);
-				bRangeY=true;
-			}
-			return { rangeX:bRangeX, rangeY:bRangeY };
-		},
-		setAxesPlot:function(/* HTMLElement */table){
-			//	summary
-			//	figure out where to plot the axes
-			if (table.getAttribute("axisAt")){
-				var p=table.getAttribute("axisAt");
-				if (p.indexOf(",")>-1) p=p.split(",");
-				else p=p.split(" ");
-				
-				//	x axis
-				if (!isNaN(parseFloat(p[0]))){
-					this.properties.axes.x.plotAt=parseFloat(p[0]);
-				} else if (p[0].toLowerCase()=="ymin"){
-					this.properties.axes.x.plotAt=this.properties.axes.y.range.min;
-				} else if (p[0].toLowerCase()=="ymax"){
-					this.properties.axes.x.plotAt=this.properties.axes.y.range.max;
-				}
-
-				// y axis
-				if (!isNaN(parseFloat(p[1]))){
-					this.properties.axes.y.plotAt=parseFloat(p[1]);
-				} else if (p[1].toLowerCase()=="xmin"){
-					this.properties.axes.y.plotAt=this.properties.axes.x.range.min;
-				} else if (p[1].toLowerCase()=="xmax"){
-					this.properties.axes.y.plotAt=this.properties.axes.x.range.max;
-				}
+		}
+	}
+	if (node.getAttribute("rangeX")) {
+		var p = node.getAttribute("rangeX");
+		if (p.indexOf(",") > -1) {
+			p = p.split(",");
+		} else {
+			p = p.split(" ");
+		}
+		this.properties.axes.x.range.min = parseFloat(p[0]);
+		this.properties.axes.x.range.max = parseFloat(p[1]);
+		bRangeX = true;
+	}
+	if (node.getAttribute("rangeY")) {
+		var p = node.getAttribute("rangeY");
+		if (p.indexOf(",") > -1) {
+			p = p.split(",");
+		} else {
+			p = p.split(" ");
+		}
+		this.properties.axes.y.range.min = parseFloat(p[0]);
+		this.properties.axes.y.range.max = parseFloat(p[1]);
+		bRangeY = true;
+	}
+	return {rangeX:bRangeX, rangeY:bRangeY};
+}, setAxesPlot:function (table) {
+	if (table.getAttribute("axisAt")) {
+		var p = table.getAttribute("axisAt");
+		if (p.indexOf(",") > -1) {
+			p = p.split(",");
+		} else {
+			p = p.split(" ");
+		}
+		if (!isNaN(parseFloat(p[0]))) {
+			this.properties.axes.x.plotAt = parseFloat(p[0]);
+		} else {
+			if (p[0].toLowerCase() == "ymin") {
+				this.properties.axes.x.plotAt = this.properties.axes.y.range.min;
 			} else {
-				this.properties.axes.x.plotAt=this.properties.axes.y.range.min;
-				this.properties.axes.y.plotAt=this.properties.axes.x.range.min;
-			}
-		},
-		drawVectorNode:function(){
-			//	summary
-			//	Draws the main canvas for the chart
-			dojo.svg.g.suspend();		
-			if(this.vectorNode) this.destroy();
-			this.vectorNode=document.createElementNS(dojo.svg.xmlns.svg, "svg");
-			this.vectorNode.setAttribute("width", this.properties.width);
-			this.vectorNode.setAttribute("height", this.properties.height);
-			dojo.svg.g.resume();
-		},
-		drawPlotArea:function(){
-			//	summary
-			//	Draws the plot area for the chart
-			dojo.svg.g.suspend();		
-			if(this.plotArea){
-				this.plotArea.parentNode.removeChild(this.plotArea);
-				this.plotArea=null;
-			}
-			var defs = document.createElementNS(dojo.svg.xmlns.svg, "defs");
-			var clip = document.createElementNS(dojo.svg.xmlns.svg, "clipPath");
-			clip.setAttribute("id","plotClip"+this.widgetId);
-			var rect = document.createElementNS(dojo.svg.xmlns.svg, "rect");		
-			rect.setAttribute("x", this.properties.padding.left);
-			rect.setAttribute("y", this.properties.padding.top);
-			rect.setAttribute("width", this.properties.width-this.properties.padding.left-this.properties.padding.right);
-			rect.setAttribute("height", this.properties.height-this.properties.padding.top-this.properties.padding.bottom);
-			clip.appendChild(rect);
-			defs.appendChild(clip);
-			this.vectorNode.appendChild(defs);
-
-			//	the plot background.
-			this.plotArea = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			this.vectorNode.appendChild(this.plotArea);
-			var rect = document.createElementNS(dojo.svg.xmlns.svg, "rect");		
-			rect.setAttribute("x", this.properties.padding.left);
-			rect.setAttribute("y", this.properties.padding.top);
-			rect.setAttribute("width", this.properties.width-this.properties.padding.left-this.properties.padding.right);
-			rect.setAttribute("height", this.properties.height-this.properties.padding.top-this.properties.padding.bottom);
-			rect.setAttribute("fill", "#fff");
-			this.plotArea.appendChild(rect);
-			dojo.svg.g.resume();
-		},
-		drawDataGroup:function(){
-			//	summary
-			//	Draws the data group for the chart
-			dojo.svg.g.suspend();		
-			if(this.dataGroup){
-				this.dataGroup.parentNode.removeChild(this.dataGroup);
-				this.dataGroup=null;
-			}
-			this.dataGroup = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			this.dataGroup.setAttribute("style","clip-path:url(#plotClip"+this.widgetId+");");
-			this.plotArea.appendChild(this.dataGroup);
-			dojo.svg.g.resume();
-		},
-		drawAxes:function(){
-			//	summary
-			//	Draws the axes for the chart
-			dojo.svg.g.suspend();		
-			if(this.axisGroup){
-				this.axisGroup.parentNode.removeChild(this.axisGroup);
-				this.axisGroup=null;
-			}
-			//	axis group
-			this.axisGroup = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			this.plotArea.appendChild(this.axisGroup);
-
-			//	x axis
-			var stroke=1;
-			var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
-			var y=dojo.widget.svg.Chart.Plotter.getY(this.properties.axes.x.plotAt, this);
-			line.setAttribute("y1", y);
-			line.setAttribute("y2", y);
-			line.setAttribute("x1",this.properties.padding.left-stroke);
-			line.setAttribute("x2",this.properties.width-this.properties.padding.right);
-			line.setAttribute("style","stroke:#000;stroke-width:"+stroke+";");
-			this.axisGroup.appendChild(line);
-			
-			//	x axis units.
-			//	(min and max)
-			var textSize=10;
-			var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
-			text.setAttribute("x", this.properties.padding.left);
-			text.setAttribute("y", this.properties.height-this.properties.padding.bottom+textSize+2);
-			text.setAttribute("style", "text-anchor:middle;font-size:"+textSize+"px;fill:#000;");
-			text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.x.range.min),2)));
-			this.axisGroup.appendChild(text);
-			
-			var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
-			text.setAttribute("x", this.properties.width-this.properties.padding.right-(textSize/2));
-			text.setAttribute("y", this.properties.height-this.properties.padding.bottom+textSize+2);
-			text.setAttribute("style", "text-anchor:middle;font-size:"+textSize+"px;fill:#000;");
-			text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.x.range.max),2)));
-			this.axisGroup.appendChild(text);	
-			
-			//	y axis
-			var line=document.createElementNS(dojo.svg.xmlns.svg, "line");
-			var x=dojo.widget.svg.Chart.Plotter.getX(this.properties.axes.y.plotAt, this);
-			line.setAttribute("x1", x);
-			line.setAttribute("x2", x);
-			line.setAttribute("y1", this.properties.padding.top);
-			line.setAttribute("y2", this.properties.height-this.properties.padding.bottom);
-			line.setAttribute("style", "stroke:#000;stroke-width:"+stroke+";");
-			this.axisGroup.appendChild(line);
-
-			//	y axis units
-			var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
-			text.setAttribute("x", this.properties.padding.left-4);
-			text.setAttribute("y", this.properties.height-this.properties.padding.bottom);
-			text.setAttribute("style", "text-anchor:end;font-size:"+textSize+"px;fill:#000;");
-			text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.y.range.min),2)));
-			this.axisGroup.appendChild(text);
-			
-			var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
-			text.setAttribute("x", this.properties.padding.left-4);
-			text.setAttribute("y", this.properties.padding.top+(textSize/2));
-			text.setAttribute("style", "text-anchor:end;font-size:"+textSize+"px;fill:#000;");
-			text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.y.range.max),2)));
-			this.axisGroup.appendChild(text);	
-			dojo.svg.g.resume();
-		},
-
-		init:function(){
-			//	summary
-			//	Initialize the chart
-			if(!this.properties.width || !this.properties.height){
-				var box=dojo.html.getContentBox(this.domNode);
-				if(!this.properties.width){
-					this.properties.width=(box.width<32)?this.properties.defaultWidth:box.width;
+				if (p[0].toLowerCase() == "ymax") {
+					this.properties.axes.x.plotAt = this.properties.axes.y.range.max;
 				}
-				if(!this.properties.height){
-					this.properties.height=(box.height<32)?this.properties.defaultHeight:box.height;
-				}
 			}
-
-			//	set up the chart; each is a method so that it can be selectively overridden.
-			this.drawVectorNode();
-			this.drawPlotArea();
-			this.drawDataGroup();
-			this.drawAxes();
-
-			//	this is last.
-			this.domNode.appendChild(this.vectorNode);
-			this.assignColors();
-			this._isInitialized=true;
-		},
-		destroy:function(){
-			//	summary
-			//	Node cleanup
-			while(this.domNode.childNodes.length>0){
-				this.domNode.removeChild(this.domNode.childNodes.item(0));
-			}
-			this.vectorNode=this.plotArea=this.dataGroup=this.axisGroup=null;
-		},
-		render:function(){
-			//	summary
-			//	Draws the data on the chart
-			dojo.svg.g.suspend();
-			
-			if (this.dataGroup){
-				while(this.dataGroup.childNodes.length>0){
-					this.dataGroup.removeChild(this.dataGroup.childNodes.item(0));
-				}
+		}
+		if (!isNaN(parseFloat(p[1]))) {
+			this.properties.axes.y.plotAt = parseFloat(p[1]);
+		} else {
+			if (p[1].toLowerCase() == "xmin") {
+				this.properties.axes.y.plotAt = this.properties.axes.x.range.min;
 			} else {
-				this.init();
-			}
-
-			//	plot it.
-			for(var i=0; i<this.series.length; i++){
-				dojo.widget.svg.Chart.Plotter.plot(this.series[i], this);
-			}
-			dojo.svg.g.resume();
-		},
-		postCreate:function(){
-			//	summary
-			//	Parse any data if included with the chart, and kick off the rendering.
-			var table=this.domNode.getElementsByTagName("table")[0];
-			if (table){
-				var ranges=this.parseProperties(table);
-				var bRangeX=false;
-				var bRangeY=false;
-			
-				//	fix the axes
-				var axisValues = this.parseData(table);
-				if(!bRangeX){
-					this.properties.axes.x.range={min:axisValues.x.min, max:axisValues.x.max};
+				if (p[1].toLowerCase() == "xmax") {
+					this.properties.axes.y.plotAt = this.properties.axes.x.range.max;
 				}
-				if(!bRangeY){
-					this.properties.axes.y.range={min:axisValues.y.min, max:axisValues.y.max};
-				}
-				this.setAxesPlot(table);
-
-				//	table values should be populated, now pop it off.
-				this.domNode.removeChild(table);
 			}
-			if(this.series.length>0){
-				this.render();
-			}
 		}
+	} else {
+		this.properties.axes.x.plotAt = this.properties.axes.y.range.min;
+		this.properties.axes.y.plotAt = this.properties.axes.x.range.min;
 	}
-);
-
-dojo.widget.svg.Chart.Plotter=new function(){
-	//	summary
-	//	Singleton for plotting series of data.
-	var self=this;
+}, drawVectorNode:function () {
+	dojo.svg.g.suspend();
+	if (this.vectorNode) {
+		this.destroy();
+	}
+	this.vectorNode = document.createElementNS(dojo.svg.xmlns.svg, "svg");
+	this.vectorNode.setAttribute("width", this.properties.width);
+	this.vectorNode.setAttribute("height", this.properties.height);
+	dojo.svg.g.resume();
+}, drawPlotArea:function () {
+	dojo.svg.g.suspend();
+	if (this.plotArea) {
+		this.plotArea.parentNode.removeChild(this.plotArea);
+		this.plotArea = null;
+	}
+	var defs = document.createElementNS(dojo.svg.xmlns.svg, "defs");
+	var clip = document.createElementNS(dojo.svg.xmlns.svg, "clipPath");
+	clip.setAttribute("id", "plotClip" + this.widgetId);
+	var rect = document.createElementNS(dojo.svg.xmlns.svg, "rect");
+	rect.setAttribute("x", this.properties.padding.left);
+	rect.setAttribute("y", this.properties.padding.top);
+	rect.setAttribute("width", this.properties.width - this.properties.padding.left - this.properties.padding.right);
+	rect.setAttribute("height", this.properties.height - this.properties.padding.top - this.properties.padding.bottom);
+	clip.appendChild(rect);
+	defs.appendChild(clip);
+	this.vectorNode.appendChild(defs);
+	this.plotArea = document.createElementNS(dojo.svg.xmlns.svg, "g");
+	this.vectorNode.appendChild(this.plotArea);
+	var rect = document.createElementNS(dojo.svg.xmlns.svg, "rect");
+	rect.setAttribute("x", this.properties.padding.left);
+	rect.setAttribute("y", this.properties.padding.top);
+	rect.setAttribute("width", this.properties.width - this.properties.padding.left - this.properties.padding.right);
+	rect.setAttribute("height", this.properties.height - this.properties.padding.top - this.properties.padding.bottom);
+	rect.setAttribute("fill", "#fff");
+	this.plotArea.appendChild(rect);
+	dojo.svg.g.resume();
+}, drawDataGroup:function () {
+	dojo.svg.g.suspend();
+	if (this.dataGroup) {
+		this.dataGroup.parentNode.removeChild(this.dataGroup);
+		this.dataGroup = null;
+	}
+	this.dataGroup = document.createElementNS(dojo.svg.xmlns.svg, "g");
+	this.dataGroup.setAttribute("style", "clip-path:url(#plotClip" + this.widgetId + ");");
+	this.plotArea.appendChild(this.dataGroup);
+	dojo.svg.g.resume();
+}, drawAxes:function () {
+	dojo.svg.g.suspend();
+	if (this.axisGroup) {
+		this.axisGroup.parentNode.removeChild(this.axisGroup);
+		this.axisGroup = null;
+	}
+	this.axisGroup = document.createElementNS(dojo.svg.xmlns.svg, "g");
+	this.plotArea.appendChild(this.axisGroup);
+	var stroke = 1;
+	var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
+	var y = dojo.widget.svg.Chart.Plotter.getY(this.properties.axes.x.plotAt, this);
+	line.setAttribute("y1", y);
+	line.setAttribute("y2", y);
+	line.setAttribute("x1", this.properties.padding.left - stroke);
+	line.setAttribute("x2", this.properties.width - this.properties.padding.right);
+	line.setAttribute("style", "stroke:#000;stroke-width:" + stroke + ";");
+	this.axisGroup.appendChild(line);
+	var textSize = 10;
+	var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
+	text.setAttribute("x", this.properties.padding.left);
+	text.setAttribute("y", this.properties.height - this.properties.padding.bottom + textSize + 2);
+	text.setAttribute("style", "text-anchor:middle;font-size:" + textSize + "px;fill:#000;");
+	text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.x.range.min), 2)));
+	this.axisGroup.appendChild(text);
+	var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
+	text.setAttribute("x", this.properties.width - this.properties.padding.right - (textSize / 2));
+	text.setAttribute("y", this.properties.height - this.properties.padding.bottom + textSize + 2);
+	text.setAttribute("style", "text-anchor:middle;font-size:" + textSize + "px;fill:#000;");
+	text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.x.range.max), 2)));
+	this.axisGroup.appendChild(text);
+	var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
+	var x = dojo.widget.svg.Chart.Plotter.getX(this.properties.axes.y.plotAt, this);
+	line.setAttribute("x1", x);
+	line.setAttribute("x2", x);
+	line.setAttribute("y1", this.properties.padding.top);
+	line.setAttribute("y2", this.properties.height - this.properties.padding.bottom);
+	line.setAttribute("style", "stroke:#000;stroke-width:" + stroke + ";");
+	this.axisGroup.appendChild(line);
+	var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
+	text.setAttribute("x", this.properties.padding.left - 4);
+	text.setAttribute("y", this.properties.height - this.properties.padding.bottom);
+	text.setAttribute("style", "text-anchor:end;font-size:" + textSize + "px;fill:#000;");
+	text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.y.range.min), 2)));
+	this.axisGroup.appendChild(text);
+	var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
+	text.setAttribute("x", this.properties.padding.left - 4);
+	text.setAttribute("y", this.properties.padding.top + (textSize / 2));
+	text.setAttribute("style", "text-anchor:end;font-size:" + textSize + "px;fill:#000;");
+	text.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.y.range.max), 2)));
+	this.axisGroup.appendChild(text);
+	dojo.svg.g.resume();
+}, init:function () {
+	if (!this.properties.width || !this.properties.height) {
+		var box = dojo.html.getContentBox(this.domNode);
+		if (!this.properties.width) {
+			this.properties.width = (box.width < 32) ? this.properties.defaultWidth : box.width;
+		}
+		if (!this.properties.height) {
+			this.properties.height = (box.height < 32) ? this.properties.defaultHeight : box.height;
+		}
+	}
+	this.drawVectorNode();
+	this.drawPlotArea();
+	this.drawDataGroup();
+	this.drawAxes();
+	this.domNode.appendChild(this.vectorNode);
+	this.assignColors();
+	this._isInitialized = true;
+}, destroy:function () {
+	while (this.domNode.childNodes.length > 0) {
+		this.domNode.removeChild(this.domNode.childNodes.item(0));
+	}
+	this.vectorNode = this.plotArea = this.dataGroup = this.axisGroup = null;
+}, render:function () {
+	dojo.svg.g.suspend();
+	if (this.dataGroup) {
+		while (this.dataGroup.childNodes.length > 0) {
+			this.dataGroup.removeChild(this.dataGroup.childNodes.item(0));
+		}
+	} else {
+		this.init();
+	}
+	for (var i = 0; i < this.series.length; i++) {
+		dojo.widget.svg.Chart.Plotter.plot(this.series[i], this);
+	}
+	dojo.svg.g.resume();
+}, postCreate:function () {
+	var table = this.domNode.getElementsByTagName("table")[0];
+	if (table) {
+		var ranges = this.parseProperties(table);
+		var bRangeX = false;
+		var bRangeY = false;
+		var axisValues = this.parseData(table);
+		if (!bRangeX) {
+			this.properties.axes.x.range = {min:axisValues.x.min, max:axisValues.x.max};
+		}
+		if (!bRangeY) {
+			this.properties.axes.y.range = {min:axisValues.y.min, max:axisValues.y.max};
+		}
+		this.setAxesPlot(table);
+		this.domNode.removeChild(table);
+	}
+	if (this.series.length > 0) {
+		this.render();
+	}
+}});
+dojo.widget.svg.Chart.Plotter = new function () {
+	var self = this;
 	var plotters = {};
-	var types=dojo.widget.Chart.PlotTypes;
-	
-	this.getX=function(/* string||number */value, /* dojo.widget.Chart */chart){
-		//	summary
-		//	Calculate the x coord on the passed chart for the passed value
-		var v=parseFloat(value);
-		var min=chart.properties.axes.x.range.min;
-		var max=chart.properties.axes.x.range.max;
-		var ofst=0-min;
-		min+=ofst; max+=ofst; v+=ofst;
-
-		var xmin=chart.properties.padding.left;
-		var xmax=chart.properties.width-chart.properties.padding.right;
-		var x=(v*((xmax-xmin)/max))+xmin;
-		return x;	// float
+	var types = dojo.widget.Chart.PlotTypes;
+	this.getX = function (value, chart) {
+		var v = parseFloat(value);
+		var min = chart.properties.axes.x.range.min;
+		var max = chart.properties.axes.x.range.max;
+		var ofst = 0 - min;
+		min += ofst;
+		max += ofst;
+		v += ofst;
+		var xmin = chart.properties.padding.left;
+		var xmax = chart.properties.width - chart.properties.padding.right;
+		var x = (v * ((xmax - xmin) / max)) + xmin;
+		return x;
 	};
-	this.getY=function(/* string||number */value, /* dojo.widget.Chart */chart){
-		//	summary
-		//	Calculate the y coord on the passed chart for the passed value
-		var v=parseFloat(value);
-		var max=chart.properties.axes.y.range.max;
-		var min=chart.properties.axes.y.range.min;
-		var ofst=0;
-		if(min<0)ofst+=Math.abs(min);
-		min+=ofst; max+=ofst; v+=ofst;
-		
-		var ymin=chart.properties.height-chart.properties.padding.bottom;
-		var ymax=chart.properties.padding.top;
-		var y=(((ymin-ymax)/(max-min))*(max-v))+ymax;
-		return y;	// float
+	this.getY = function (value, chart) {
+		var v = parseFloat(value);
+		var max = chart.properties.axes.y.range.max;
+		var min = chart.properties.axes.y.range.min;
+		var ofst = 0;
+		if (min < 0) {
+			ofst += Math.abs(min);
+		}
+		min += ofst;
+		max += ofst;
+		v += ofst;
+		var ymin = chart.properties.height - chart.properties.padding.bottom;
+		var ymax = chart.properties.padding.top;
+		var y = (((ymin - ymax) / (max - min)) * (max - v)) + ymax;
+		return y;
 	};
-
-	this.addPlotter=function(/* string */name, /* function */func){
-		//	summary
-		//	add a custom plotter function to this object.
-		plotters[name]=func;
+	this.addPlotter = function (name, func) {
+		plotters[name] = func;
 	};
-	this.plot=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
-		//	summary
-		//	plot the passed series.
-		if (series.values.length==0) return;	//	void
-		if (series.plotType && plotters[series.plotType]){
-			return plotters[series.plotType](series, chart);	//	void
+	this.plot = function (series, chart) {
+		if (series.values.length == 0) {
+			return;
 		}
-		else if (chart.plotType && plotters[chart.plotType]){
-			return plotters[chart.plotType](series, chart);		//	void
+		if (series.plotType && plotters[series.plotType]) {
+			return plotters[series.plotType](series, chart);
+		} else {
+			if (chart.plotType && plotters[chart.plotType]) {
+				return plotters[chart.plotType](series, chart);
+			}
 		}
 	};
-
-	//	plotting
-	plotters["bar"]=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
-		//	summary
-		//	plot the passed series as a set of bars.
-		var space=1;
+	plotters["bar"] = function (series, chart) {
+		var space = 1;
 		var lastW = 0;
-		for (var i=0; i<series.values.length; i++){
-			var x=self.getX(series.values[i].x, chart);
+		for (var i = 0; i < series.values.length; i++) {
+			var x = self.getX(series.values[i].x, chart);
 			var w;
-			if (i==series.values.length-1){
-				w=lastW;
-			} else{
-				w=self.getX(series.values[i+1].x, chart)-x-space;
-				lastW=w;
+			if (i == series.values.length - 1) {
+				w = lastW;
+			} else {
+				w = self.getX(series.values[i + 1].x, chart) - x - space;
+				lastW = w;
 			}
-			x-=(w/2);
-
-			var yA=self.getY(chart.properties.axes.x.plotAt, chart);
-			var y=self.getY(series.values[i].value, chart);
-			var h=Math.abs(yA-y);
-			if (parseFloat(series.values[i].value)<chart.properties.axes.x.plotAt){
-				var oy=yA;
-				yA=y;
-				y=oy;
+			x -= (w / 2);
+			var yA = self.getY(chart.properties.axes.x.plotAt, chart);
+			var y = self.getY(series.values[i].value, chart);
+			var h = Math.abs(yA - y);
+			if (parseFloat(series.values[i].value) < chart.properties.axes.x.plotAt) {
+				var oy = yA;
+				yA = y;
+				y = oy;
 			}
-
-			var bar=document.createElementNS(dojo.svg.xmlns.svg, "rect");
+			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
 			bar.setAttribute("fill", series.color);
 			bar.setAttribute("title", series.label + ": " + series.values[i].value);
 			bar.setAttribute("stroke-width", "0");
@@ -56806,10 +36424,8 @@
 			chart.dataGroup.appendChild(bar);
 		}
 	};
-	plotters["line"]=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
-		//	summary
-		//	plot the passed series as a line with tensioning
-		var tension=1.5;
+	plotters["line"] = function (series, chart) {
+		var tension = 1.5;
 		var line = document.createElementNS(dojo.svg.xmlns.svg, "path");
 		line.setAttribute("fill", "none");
 		line.setAttribute("stroke", series.color);
@@ -56817,35 +36433,31 @@
 		line.setAttribute("stroke-opacity", "0.85");
 		line.setAttribute("title", series.label);
 		chart.dataGroup.appendChild(line);
-
 		var path = [];
-		for (var i=0; i<series.values.length; i++){
-			var x = self.getX(series.values[i].x, chart)
+		for (var i = 0; i < series.values.length; i++) {
+			var x = self.getX(series.values[i].x, chart);
 			var y = self.getY(series.values[i].value, chart);
-
-			var dx = chart.properties.padding.left+1;
-			var dy = chart.properties.height-chart.properties.padding.bottom;
-			if (i>0){
-				dx=x-self.getX(series.values[i-1].x, chart);
-				dy=self.getY(series.values[i-1].value, chart);
+			var dx = chart.properties.padding.left + 1;
+			var dy = chart.properties.height - chart.properties.padding.bottom;
+			if (i > 0) {
+				dx = x - self.getX(series.values[i - 1].x, chart);
+				dy = self.getY(series.values[i - 1].value, chart);
 			}
-			
-			if (i==0) path.push("M");
-			else {
+			if (i == 0) {
+				path.push("M");
+			} else {
 				path.push("C");
-				var cx=x-(tension-1)*(dx/tension);
-				path.push(cx+","+dy);
-				cx=x-(dx/tension);
-				path.push(cx+","+y);
+				var cx = x - (tension - 1) * (dx / tension);
+				path.push(cx + "," + dy);
+				cx = x - (dx / tension);
+				path.push(cx + "," + y);
 			}
-			path.push(x+","+y);
+			path.push(x + "," + y);
 		}
 		line.setAttribute("d", path.join(" "));
 	};
-	plotters["area"]=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
-		//	summary
-		//	plot the passed series as an area with tensioning.
-		var tension=1.5;
+	plotters["area"] = function (series, chart) {
+		var tension = 1.5;
 		var line = document.createElementNS(dojo.svg.xmlns.svg, "path");
 		line.setAttribute("fill", series.color);
 		line.setAttribute("fill-opacity", "0.4");
@@ -56854,83 +36466,66 @@
 		line.setAttribute("stroke-opacity", "0.8");
 		line.setAttribute("title", series.label);
 		chart.dataGroup.appendChild(line);
-
 		var path = [];
-		for (var i=0; i<series.values.length; i++){
-			var x = self.getX(series.values[i].x, chart)
+		for (var i = 0; i < series.values.length; i++) {
+			var x = self.getX(series.values[i].x, chart);
 			var y = self.getY(series.values[i].value, chart);
-
-			var dx = chart.properties.padding.left+1;
-			var dy = chart.properties.height-chart.properties.padding.bottom;
-			if (i>0){
-				dx=x-self.getX(series.values[i-1].x, chart);
-				dy=self.getY(series.values[i-1].value, chart);
+			var dx = chart.properties.padding.left + 1;
+			var dy = chart.properties.height - chart.properties.padding.bottom;
+			if (i > 0) {
+				dx = x - self.getX(series.values[i - 1].x, chart);
+				dy = self.getY(series.values[i - 1].value, chart);
 			}
-			
-			if (i==0) path.push("M");
-			else {
+			if (i == 0) {
+				path.push("M");
+			} else {
 				path.push("C");
-				var cx=x-(tension-1)*(dx/tension);
-				path.push(cx+","+dy);
-				cx=x-(dx/tension);
-				path.push(cx+","+y);
+				var cx = x - (tension - 1) * (dx / tension);
+				path.push(cx + "," + dy);
+				cx = x - (dx / tension);
+				path.push(cx + "," + y);
 			}
-			path.push(x+","+y);
+			path.push(x + "," + y);
 		}
-		//	finish it off
 		path.push("L");
 		path.push(x + "," + self.getY(0, chart));
 		path.push("L");
 		path.push(self.getX(0, chart) + "," + self.getY(0, chart));
 		path.push("Z");
 		line.setAttribute("d", path.join(" "));
-	},
-	plotters["scatter"]=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
-		//	summary
-		//	plot the passed series as a scatter chart
-		var r=7;
-		for (var i=0; i<series.values.length; i++){
-			var x=self.getX(series.values[i].x, chart);
-			var y=self.getY(series.values[i].value, chart);
+	}, plotters["scatter"] = function (series, chart) {
+		var r = 7;
+		for (var i = 0; i < series.values.length; i++) {
+			var x = self.getX(series.values[i].x, chart);
+			var y = self.getY(series.values[i].value, chart);
 			var point = document.createElementNS(dojo.svg.xmlns.svg, "path");
 			point.setAttribute("fill", series.color);
 			point.setAttribute("stroke-width", "0");
 			point.setAttribute("title", series.label + ": " + series.values[i].value);
-			point.setAttribute("d",
-				"M " + x + "," + (y-r) + " " +
-				"Q " + x + "," + y + " " + (x+r) + "," + y + " " +
-				"Q " + x + "," + y + " " + x + "," + (y+r) + " " +
-				"Q " + x + "," + y + " " + (x-r) + "," + y + " " +
-				"Q " + x + "," + y + " " + x + "," + (y-r) + " " +
-				"Z"
-			);
+			point.setAttribute("d", "M " + x + "," + (y - r) + " " + "Q " + x + "," + y + " " + (x + r) + "," + y + " " + "Q " + x + "," + y + " " + x + "," + (y + r) + " " + "Q " + x + "," + y + " " + (x - r) + "," + y + " " + "Q " + x + "," + y + " " + x + "," + (y - r) + " " + "Z");
 			chart.dataGroup.appendChild(point);
 		}
 	};
-	plotters["bubble"]=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
-		//	summary
-		//	plot the passed series as a series of bubbles (scatter with 3rd dimension)
-		//	added param for series[n].value: size
-		var minR=1;
-		
-		//	do this off the x axis?
-		var min=chart.properties.axes.x.range.min;
-		var max=chart.properties.axes.x.range.max;
-		var ofst=0-min;
-		min+=ofst; max+=ofst;
-
-		var xmin=chart.properties.padding.left;
-		var xmax=chart.properties.width-chart.properties.padding.right;
-		var factor=(max-min)/(xmax-xmin)*25;
-		
-		for (var i=0; i<series.values.length; i++){
+	plotters["bubble"] = function (series, chart) {
+		var minR = 1;
+		var min = chart.properties.axes.x.range.min;
+		var max = chart.properties.axes.x.range.max;
+		var ofst = 0 - min;
+		min += ofst;
+		max += ofst;
+		var xmin = chart.properties.padding.left;
+		var xmax = chart.properties.width - chart.properties.padding.right;
+		var factor = (max - min) / (xmax - xmin) * 25;
+		for (var i = 0; i < series.values.length; i++) {
 			var size = series.values[i].size;
-			if (isNaN(parseFloat(size))) size=minR;
-			var point=document.createElementNS(dojo.svg.xmlns.svg, "circle");
+			if (isNaN(parseFloat(size))) {
+				size = minR;
+			}
+			var point = document.createElementNS(dojo.svg.xmlns.svg, "circle");
 			point.setAttribute("stroke-width", 0);
 			point.setAttribute("fill", series.color);
 			point.setAttribute("fill-opacity", "0.8");
-			point.setAttribute("r", (parseFloat(size)*factor)/2);
+			point.setAttribute("r", (parseFloat(size) * factor) / 2);
 			point.setAttribute("cx", self.getX(series.values[i].x, chart));
 			point.setAttribute("cy", self.getY(series.values[i].value, chart));
 			point.setAttribute("title", series.label + ": " + series.values[i].value + " (" + size + ")");
@@ -56939,6 +36534,7 @@
 	};
 }();
 
+
 __CPAN_DIR__ src/widget/templates
 __CPAN_FILE__ src/widget/templates/Slider.html
 <table _="weird end tag formatting is to prevent whitespace from becoming &nbsp;" 
@@ -57291,7 +36887,7 @@
 GIF89a	  Ä  ÿÿÿ000ÖÖÖWWWõõõóóóøøøÎÎÎØØØaaaéééyyyýýýððð222žžž¶¶¶:::………FFFúúú                                 !ù     ,    	   #  Äh6eŠRð¬ˆDŠ™ø2Bx“nÀ(ŽH! ;
 __CPAN_FILE__ src/widget/templates/Checkbox.html
 <span style="display: inline-block;" tabIndex="${this.tabIndex}" waiRole="checkbox" id="${this.id}">
-	<img dojoAttachPoint="imageNode" class="dojoHtmlCheckbox" src="${dojoRoot}src/widget/templates/images/blank.gif" alt="" />
+	<img dojoAttachPoint="imageNode" class="dojoHtmlCheckbox" src="${dojoWidgetModuleUri}templates/images/blank.gif" alt="" />
 	<input type="checkbox" name="${this.name}" style="display: none" value="${this.value}"
 		dojoAttachPoint="inputNode">
 </span>
@@ -58434,7 +38030,7 @@
 	<div dojoAttachPoint="rightPart" class="dojoButtonRightPart" style="position:absolute;top:0px;right:0px;"
 		dojoAttachEvent="onMouseOver:rightOver; onMouseOut:rightOut; onMouseDown:rightDown; onMouseUp:rightUp; onClick:rightClick;">
 		<img dojoAttachPoint="arrowBackgroundImage" style="position:absolute;top:0px;left:0px;z-index:1;">
-		<img src="${dojoRoot}src/widget/templates/images/whiteDownArrow.gif"
+		<img src="${dojoWidgetModuleUri}templates/images/whiteDownArrow.gif"
 		  		style="z-index:2;position:absolute;left:3px;top:50%;">
 		<img dojoAttachPoint="rightImage" style="position:absolute;top:0px;right:0px;">
 	</div>
@@ -58538,25 +38134,25 @@
 								<span dojoAttachPoint="increaseWeekNode" 
 									dojoAttachEvent="onClick: onIncrementWeek;" 
 									class="incrementControl increase">
-									<img src="${dojoRoot}src/widget/templates/images/incrementMonth.png" 
+									<img src="${dojoWidgetModuleUri}templates/images/incrementMonth.png" 
 									alt="&darr;" style="width:7px;height:5px;" />
 								</span>
 								<span 
 									dojoAttachPoint="increaseMonthNode" 
 									dojoAttachEvent="onClick: onIncrementMonth;" class="incrementControl increase">
-									<img src="${dojoRoot}src/widget/templates/images/incrementMonth.png" 
+									<img src="${dojoWidgetModuleUri}templates/images/incrementMonth.png" 
 										alt="&darr;"  dojoAttachPoint="incrementMonthImageNode">
 								</span>
 								<span 
 									dojoAttachPoint="decreaseWeekNode" 
 									dojoAttachEvent="onClick: onIncrementWeek;" 
 									class="incrementControl decrease">
-									<img src="${dojoRoot}src/widget/templates/images/decrementMonth.png" alt="&uarr;" style="width:7px;height:5px;" />
+									<img src="${dojoWidgetModuleUri}templates/images/decrementMonth.png" alt="&uarr;" style="width:7px;height:5px;" />
 								</span>
 								<span 
 									dojoAttachPoint="decreaseMonthNode" 
 									dojoAttachEvent="onClick: onIncrementMonth;" class="incrementControl decrease">
-									<img src="${dojoRoot}src/widget/templates/images/decrementMonth.png" 
+									<img src="${dojoWidgetModuleUri}templates/images/decrementMonth.png" 
 										alt="&uarr;" dojoAttachPoint="decrementMonthImageNode">
 								</span>
 								<span dojoAttachPoint="monthLabelNode" class="month"></span>
@@ -58620,7 +38216,6 @@
 			</tr>
 		</tfoot>
 	</table>
-	
 </div>
 
 __CPAN_FILE__ src/widget/templates/Textbox.html
@@ -59044,27 +38639,27 @@
 		dojoAttachPoint="decreaseWeekNode" 
 		dojoAttachEvent="onClick: onIncrementWeek;" 
 		class="incrementControl">
-		<img src="${dojoRoot}src/widget/templates/decrementWeek.gif" alt="&uarr;" />
+		<img src="${dojoWidgetModuleUri}templates/decrementWeek.gif" alt="&uarr;" />
 	</span>
 	-->
 	<span 
 		dojoAttachPoint="decreaseMonthNode" 
 		dojoAttachEvent="onClick: onIncrementMonth;" class="incrementControl">
-		<img src="${dojoRoot}src/widget/templates/decrementMonth.gif" 
+		<img src="${dojoWidgetModuleUri}templates/decrementMonth.gif" 
 			alt="&uarr;" dojoAttachPoint="decrementMonthImageNode">
 	</span>
 	<span dojoAttachPoint="monthLabelNode" class="month">July</span>
 	<span 
 		dojoAttachPoint="increaseMonthNode" 
 		dojoAttachEvent="onClick: onIncrementMonth;" class="incrementControl">
-		<img src="${dojoRoot}src/widget/templates/incrementMonth.gif" 
+		<img src="${dojoWidgetModuleUri}templates/incrementMonth.gif" 
 			alt="&darr;"  dojoAttachPoint="incrementMonthImageNode">
 	</span>
 	<!--
 		<span dojoAttachPoint="increaseWeekNode" 
 			dojoAttachEvent="onClick: onIncrementWeek;" 
 			class="incrementControl">
-			<img src="${dojoRoot}src/widget/templates/incrementWeek.gif" 
+			<img src="${dojoWidgetModuleUri}templates/incrementWeek.gif" 
 			alt="&darr;" />
 		</span>
 	-->
@@ -59611,17 +39206,12 @@
 }
 
 .dojoMenuBar2 {
-	/*position: relative;*/
 	background:#85aeec url(images/soriaBarBg.gif) repeat-x top left;
-	border-bottom:1px solid #6b9fec;
-	
-}
-
-.dojoMenuBar2Client {
+	/*border-bottom:1px solid #6b9fec;*/
 	padding: 1px;
 }
 
-.dojoMenuBarItem2 {
+.dojoMenuBar2 .dojoMenuItem2 {
 	white-space: nowrap;
 	font: menu;
 	margin: 0;
@@ -59629,21 +39219,17 @@
 	vertical-align: middle;
 	z-index: 1;
 	padding: 3px 8px;
-}
-
-.dojoMenuBarItem2 span {
-	margin: 0;
-	position: relative;
-	z-index: 2;
+	display: inline;/* needed in khtml to display correctly */
+	display: -moz-inline-box;/* needed in firefox */
 	cursor:pointer;
 	cursor:hand;
 }
 
-.dojoMenuBarItem2Hover {
+.dojoMenuBar2 .dojoMenuItem2Hover {
 	background-color:#d2e4fd;
 }
 
-.dojoMenuBarItem2Disabled span {
+.dojoMenuBar2 .dojoMenuItem2Disabled span {
 	color: #4f6582;
 }
 
@@ -60317,7 +39903,7 @@
 	font-style:italic;
 }
 
-.selectedItem {
+.selectedDate {
 	background-color:#fff !important;
 	color:#6782a8 !important;
 }
@@ -61573,639 +41159,521 @@
 */
 
 dojo.provide("dojo.widget.vml.Chart");
-
 dojo.require("dojo.widget.HtmlWidget");
 dojo.require("dojo.widget.Chart");
 dojo.require("dojo.math");
 dojo.require("dojo.html.layout");
 dojo.require("dojo.gfx.color");
-
-dojo.widget.defineWidget(
-	"dojo.widget.vml.Chart",
-	[dojo.widget.HtmlWidget, dojo.widget.Chart],
-	function(){
-		// summary: Creates a chart based on the passed data and plotter choice, using VML.
-		// description:
-		//		Renders a basic chart set based on the chosen data source and plotter, using
-		//		VML.  Note that a lot of the public properties are not meant to be altered,
-		//		and that some usable attributes passed with the HTML widget definition do not
-		//		correspond to equivilent properties that are used.
-		this.templatePath=null;
-		this.templateCssPath=null;
-		this._isInitialize=false;
-		this.hasData=false;
-		this.vectorNode=null;
-		this.plotArea=null;
-		this.dataGroup=null;
-		this.axisGroup=null;
-		this.properties={
-			height:0,	//	defaults, will resize to the domNode.
-			width:0,
-			defaultWidth:600,
-			defaultHeight:400,
-			plotType:null,
-			padding:{
-				top:10,
-				bottom:2,
-				left:60,
-				right:30
-			},
-			axes:{
-				x:{
-					plotAt:0,
-					label:"",
-					unitLabel:"",
-					unitType:Number,
-					nUnitsToShow:10,
-					range:{
-						min:0,
-						max:200
-					}
-				},
-				y:{
-					plotAt:0,
-					label:"",
-					unitLabel:"",
-					unitType:Number,
-					nUnitsToShow:10,
-					range:{
-						min:0,
-						max:200
-					}
+dojo.widget.defineWidget("dojo.widget.vml.Chart", [dojo.widget.HtmlWidget, dojo.widget.Chart], function () {
+	this.templatePath = null;
+	this.templateCssPath = null;
+	this._isInitialize = false;
+	this.hasData = false;
+	this.vectorNode = null;
+	this.plotArea = null;
+	this.dataGroup = null;
+	this.axisGroup = null;
+	this.properties = {height:0, width:0, defaultWidth:600, defaultHeight:400, plotType:null, padding:{top:10, bottom:2, left:60, right:30}, axes:{x:{plotAt:0, label:"", unitLabel:"", unitType:Number, nUnitsToShow:10, range:{min:0, max:200}}, y:{plotAt:0, label:"", unitLabel:"", unitType:Number, nUnitsToShow:10, range:{min:0, max:200}}}};
+}, {parseProperties:function (node) {
+	var bRangeX = false;
+	var bRangeY = false;
+	if (node.getAttribute("width")) {
+		this.properties.width = node.getAttribute("width");
+	}
+	if (node.getAttribute("height")) {
+		this.properties.height = node.getAttribute("height");
+	}
+	if (node.getAttribute("plotType")) {
+		this.properties.plotType = node.getAttribute("plotType");
+	}
+	if (node.getAttribute("padding")) {
+		if (node.getAttribute("padding").indexOf(",") > -1) {
+			var p = node.getAttribute("padding").split(",");
+		} else {
+			var p = node.getAttribute("padding").split(" ");
+		}
+		if (p.length == 1) {
+			var pad = parseFloat(p[0]);
+			this.properties.padding.top = pad;
+			this.properties.padding.right = pad;
+			this.properties.padding.bottom = pad;
+			this.properties.padding.left = pad;
+		} else {
+			if (p.length == 2) {
+				var padV = parseFloat(p[0]);
+				var padH = parseFloat(p[1]);
+				this.properties.padding.top = padV;
+				this.properties.padding.right = padH;
+				this.properties.padding.bottom = padV;
+				this.properties.padding.left = padH;
+			} else {
+				if (p.length == 4) {
+					this.properties.padding.top = parseFloat(p[0]);
+					this.properties.padding.right = parseFloat(p[1]);
+					this.properties.padding.bottom = parseFloat(p[2]);
+					this.properties.padding.left = parseFloat(p[3]);
 				}
 			}
-		};
-	},
-{
-	parseProperties:function(/* HTMLElement */node){
-		//	summary
-		//	Parse the properties off the main tag
-		var bRangeX=false;
-		var bRangeY=false;
-		if (node.getAttribute("width")){ 
-			this.properties.width=node.getAttribute("width");
 		}
-		if (node.getAttribute("height")){
-			this.properties.height=node.getAttribute("height");
+	}
+	if (node.getAttribute("rangeX")) {
+		var p = node.getAttribute("rangeX");
+		if (p.indexOf(",") > -1) {
+			p = p.split(",");
+		} else {
+			p = p.split(" ");
 		}
-		if (node.getAttribute("plotType")){
-			this.properties.plotType=node.getAttribute("plotType");
+		this.properties.axes.x.range.min = parseFloat(p[0]);
+		this.properties.axes.x.range.max = parseFloat(p[1]);
+		bRangeX = true;
+	}
+	if (node.getAttribute("rangeY")) {
+		var p = node.getAttribute("rangeY");
+		if (p.indexOf(",") > -1) {
+			p = p.split(",");
+		} else {
+			p = p.split(" ");
 		}
-		if (node.getAttribute("padding")){
-			if (node.getAttribute("padding").indexOf(",") > -1)
-				var p=node.getAttribute("padding").split(","); 
-			else var p=node.getAttribute("padding").split(" ");
-			if (p.length==1){
-				var pad=parseFloat(p[0]);
-				this.properties.padding.top=pad;
-				this.properties.padding.right=pad;
-				this.properties.padding.bottom=pad;
-				this.properties.padding.left=pad;
-			} else if(p.length==2){
-				var padV=parseFloat(p[0]);
-				var padH=parseFloat(p[1]);
-				this.properties.padding.top=padV;
-				this.properties.padding.right=padH;
-				this.properties.padding.bottom=padV;
-				this.properties.padding.left=padH;
-			} else if(p.length==4){
-				this.properties.padding.top=parseFloat(p[0]);
-				this.properties.padding.right=parseFloat(p[1]);
-				this.properties.padding.bottom=parseFloat(p[2]);
-				this.properties.padding.left=parseFloat(p[3]);
-			}
+		this.properties.axes.y.range.min = parseFloat(p[0]);
+		this.properties.axes.y.range.max = parseFloat(p[1]);
+		bRangeY = true;
+	}
+	return {rangeX:bRangeX, rangeY:bRangeY};
+}, setAxesPlot:function (table) {
+	if (table.getAttribute("axisAt")) {
+		var p = table.getAttribute("axisAt");
+		if (p.indexOf(",") > -1) {
+			p = p.split(",");
+		} else {
+			p = p.split(" ");
 		}
-		if (node.getAttribute("rangeX")){
-			var p=node.getAttribute("rangeX");
-			if (p.indexOf(",")>-1) p=p.split(",");
-			else p=p.split(" ");
-			this.properties.axes.x.range.min=parseFloat(p[0]);
-			this.properties.axes.x.range.max=parseFloat(p[1]);
-			bRangeX=true;
-		}
-		if (node.getAttribute("rangeY")){
-			var p=node.getAttribute("rangeY");
-			if (p.indexOf(",")>-1) p=p.split(",");
-			else p=p.split(" ");
-			this.properties.axes.y.range.min=parseFloat(p[0]);
-			this.properties.axes.y.range.max=parseFloat(p[1]);
-			bRangeY=true;
-		}
-		return { rangeX:bRangeX, rangeY:bRangeY };
-	},
-	setAxesPlot:function(/* HTMLElement */table){
-		//	summary
-		//	figure out where to plot the axes
-		if (table.getAttribute("axisAt")){
-			var p=table.getAttribute("axisAt");
-			if (p.indexOf(",")>-1) p=p.split(",");
-			else p=p.split(" ");
-			
-			//	x axis
-			if (!isNaN(parseFloat(p[0]))){
-				this.properties.axes.x.plotAt=parseFloat(p[0]);
-			} else if (p[0].toLowerCase()=="ymin"){
-				this.properties.axes.x.plotAt=this.properties.axes.y.range.min;
-			} else if (p[0].toLowerCase()=="ymax"){
-				this.properties.axes.x.plotAt=this.properties.axes.y.range.max;
-			}
-
-			// y axis
-			if (!isNaN(parseFloat(p[1]))){
-				this.properties.axes.y.plotAt=parseFloat(p[1]);
-			} else if (p[1].toLowerCase()=="xmin"){
-				this.properties.axes.y.plotAt=this.properties.axes.x.range.min;
-			} else if (p[1].toLowerCase()=="xmax"){
-				this.properties.axes.y.plotAt=this.properties.axes.x.range.max;
-			}
+		if (!isNaN(parseFloat(p[0]))) {
+			this.properties.axes.x.plotAt = parseFloat(p[0]);
 		} else {
-			this.properties.axes.x.plotAt=this.properties.axes.y.range.min;
-			this.properties.axes.y.plotAt=this.properties.axes.x.range.min;
+			if (p[0].toLowerCase() == "ymin") {
+				this.properties.axes.x.plotAt = this.properties.axes.y.range.min;
+			} else {
+				if (p[0].toLowerCase() == "ymax") {
+					this.properties.axes.x.plotAt = this.properties.axes.y.range.max;
+				}
+			}
 		}
-	},
-	drawVectorNode:function(){
-		//	summary
-		//	Draws the main canvas for the chart
-		if(this.vectorNode){ this.destroy(); }
-		this.vectorNode=document.createElement("div");
-		this.vectorNode.style.width=this.properties.width+"px";
-		this.vectorNode.style.height=this.properties.height+"px";
-		this.vectorNode.style.position="relative";
-		this.domNode.appendChild(this.vectorNode);
-	},
-	drawPlotArea:function(){
-		//	summary
-		//	Draws the plot area for the chart
-		var plotWidth=this.properties.width-this.properties.padding.left-this.properties.padding.right;
-		var plotHeight=this.properties.height-this.properties.padding.top-this.properties.padding.bottom;
-
-		if(this.plotArea){
-			this.plotArea.parentNode.removeChild(this.plotArea);
-			this.plotArea=null;
-		}
-		this.plotArea=document.createElement("div");
-		this.plotArea.style.position="absolute";
-		this.plotArea.style.backgroundColor="#fff";
-		this.plotArea.style.top=(this.properties.padding.top)-2+"px";
-		this.plotArea.style.left=(this.properties.padding.left-1)+"px";
-		this.plotArea.style.width=plotWidth+"px";
-		this.plotArea.style.height=plotHeight+"px";
-		this.plotArea.style.clip="rect(0 "+plotWidth+" "+plotHeight+" 0)";
-		this.vectorNode.appendChild(this.plotArea);
-	},
-	drawDataGroup:function(){
-		//	summary
-		//	Draws the data group for the chart
-		var plotWidth=this.properties.width-this.properties.padding.left-this.properties.padding.right;
-		var plotHeight=this.properties.height-this.properties.padding.top-this.properties.padding.bottom;
-
-		if(this.dataGroup){
-			this.dataGroup.parentNode.removeChild(this.dataGroup);
-			this.dataGroup=null;
-		}
-		this.dataGroup=document.createElement("div");
-		this.dataGroup.style.position="absolute";
-		this.dataGroup.setAttribute("title", "Data Group");
-		this.dataGroup.style.top="0px";
-		this.dataGroup.style.left="0px";
-		this.dataGroup.style.width=plotWidth+"px";
-		this.dataGroup.style.height=plotHeight+"px";
-		this.plotArea.appendChild(this.dataGroup);
-	},
-	drawAxes:function(){
-		//	summary
-		//	Draws the axes for the chart
-		var plotWidth=this.properties.width-this.properties.padding.left-this.properties.padding.right;
-		var plotHeight=this.properties.height-this.properties.padding.top-this.properties.padding.bottom;
-
-		if(this.axisGroup){
-			this.axisGroup.parentNode.removeChild(this.axisGroup);
-			this.axisGroup=null;
-		}
-		this.axisGroup=document.createElement("div");
-		this.axisGroup.style.position="absolute";
-		this.axisGroup.setAttribute("title", "Axis Group");
-		this.axisGroup.style.top="0px";
-		this.axisGroup.style.left="0px";
-		this.axisGroup.style.width=plotWidth+"px";
-		this.axisGroup.style.height=plotHeight+"px";
-		this.plotArea.appendChild(this.axisGroup);
-		var stroke=1;
-
-		//	x axis
-		var line=document.createElement("v:line");
-		var y=dojo.widget.vml.Chart.Plotter.getY(this.properties.axes.x.plotAt, this);
-		line.setAttribute("from", "0px,"+y+"px");
-		line.setAttribute("to", plotWidth+"px,"+y+"px");
-		line.style.position="absolute";
-		line.style.top="0px";
-		line.style.left="0px";
-		line.style.antialias="false";
-		line.setAttribute("strokecolor", "#666");
-		line.setAttribute("strokeweight", stroke*2+"px");
-		this.axisGroup.appendChild(line);
-
-		//	y axis
-		var line=document.createElement("v:line");
-		var x=dojo.widget.vml.Chart.Plotter.getX(this.properties.axes.y.plotAt, this);
-		line.setAttribute("from", x+"px,0px");
-		line.setAttribute("to", x+"px,"+plotHeight+"px");
-		line.style.position="absolute";
-		line.style.top="0px";
-		line.style.left="0px";
-		line.style.antialias="false";
-		line.setAttribute("strokecolor", "#666");
-		line.setAttribute("strokeweight", stroke*2+"px");
-		this.axisGroup.appendChild(line);
-		
-		//	labels
-		var size=10;
-
-		//	x axis labels.
-		var t=document.createElement("div");
-		t.style.position="absolute";
-		t.style.top=(this.properties.height-this.properties.padding.bottom)+"px";
-		t.style.left=this.properties.padding.left+"px";
-		t.style.fontFamily="sans-serif";
-		t.style.fontSize=size+"px";
-		t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.x.range.min),2);
-		this.vectorNode.appendChild(t);
-
-		t=document.createElement("div");
-		t.style.position="absolute";
-		t.style.top=(this.properties.height-this.properties.padding.bottom)+"px";
-		t.style.left=(this.properties.width-this.properties.padding.right-size)+"px";
-		t.style.fontFamily="sans-serif";
-		t.style.fontSize=size+"px";
-		t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.x.range.max),2);
-		this.vectorNode.appendChild(t);
-
-		//	y axis labels.
-		t=document.createElement("div");
-		t.style.position="absolute";
-		t.style.top=(size/2)+"px";
-		t.style.left="0px";
-		t.style.width=this.properties.padding.left + "px";
-		t.style.textAlign="right";
-		t.style.paddingRight="4px";
-		t.style.fontFamily="sans-serif";
-		t.style.fontSize=size+"px";
-		t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.y.range.max),2);
-		this.vectorNode.appendChild(t);
-		
-		t=document.createElement("div");
-		t.style.position="absolute";
-		t.style.top=(this.properties.height-this.properties.padding.bottom-size)+"px";
-		t.style.left="0px";
-		t.style.width=this.properties.padding.left + "px";
-		t.style.textAlign="right";
-		t.style.paddingRight="4px";
-		t.style.fontFamily="sans-serif";
-		t.style.fontSize=size+"px";
-		t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.y.range.min),2);
-		this.vectorNode.appendChild(t);
-	},
-	
-	init:function(){
-		//	summary
-		//	Initialize the chart
-		if(!this.properties.width || !this.properties.height){
-			var box=dojo.html.getContentBox(this.domNode);
-			if(!this.properties.width){
-				this.properties.width=(box.width<32)?this.properties.defaultWidth:box.width;
+		if (!isNaN(parseFloat(p[1]))) {
+			this.properties.axes.y.plotAt = parseFloat(p[1]);
+		} else {
+			if (p[1].toLowerCase() == "xmin") {
+				this.properties.axes.y.plotAt = this.properties.axes.x.range.min;
+			} else {
+				if (p[1].toLowerCase() == "xmax") {
+					this.properties.axes.y.plotAt = this.properties.axes.x.range.max;
+				}
 			}
-			if(!this.properties.height){
-				this.properties.height=(box.height<32)?this.properties.defaultHeight:box.height;
-			}
 		}
-
-		//	set up the chart; each is a method so that it can be selectively overridden.
-		this.drawVectorNode();
-		this.drawPlotArea();
-		this.drawDataGroup();
-		this.drawAxes();
-
-		//	this is last.
-		this.assignColors();
-		this._isInitialized=true;
-	},
-	destroy:function(){
-		//	summary
-		//	Node cleanup
-		while(this.domNode.childNodes.length>0){
-			this.domNode.removeChild(this.domNode.childNodes[0]);
+	} else {
+		this.properties.axes.x.plotAt = this.properties.axes.y.range.min;
+		this.properties.axes.y.plotAt = this.properties.axes.x.range.min;
+	}
+}, drawVectorNode:function () {
+	if (this.vectorNode) {
+		this.destroy();
+	}
+	this.vectorNode = document.createElement("div");
+	this.vectorNode.style.width = this.properties.width + "px";
+	this.vectorNode.style.height = this.properties.height + "px";
+	this.vectorNode.style.position = "relative";
+	this.domNode.appendChild(this.vectorNode);
+}, drawPlotArea:function () {
+	var plotWidth = this.properties.width - this.properties.padding.left - this.properties.padding.right;
+	var plotHeight = this.properties.height - this.properties.padding.top - this.properties.padding.bottom;
+	if (this.plotArea) {
+		this.plotArea.parentNode.removeChild(this.plotArea);
+		this.plotArea = null;
+	}
+	this.plotArea = document.createElement("div");
+	this.plotArea.style.position = "absolute";
+	this.plotArea.style.backgroundColor = "#fff";
+	this.plotArea.style.top = (this.properties.padding.top) - 2 + "px";
+	this.plotArea.style.left = (this.properties.padding.left - 1) + "px";
+	this.plotArea.style.width = plotWidth + "px";
+	this.plotArea.style.height = plotHeight + "px";
+	this.plotArea.style.clip = "rect(0 " + plotWidth + " " + plotHeight + " 0)";
+	this.vectorNode.appendChild(this.plotArea);
+}, drawDataGroup:function () {
+	var plotWidth = this.properties.width - this.properties.padding.left - this.properties.padding.right;
+	var plotHeight = this.properties.height - this.properties.padding.top - this.properties.padding.bottom;
+	if (this.dataGroup) {
+		this.dataGroup.parentNode.removeChild(this.dataGroup);
+		this.dataGroup = null;
+	}
+	this.dataGroup = document.createElement("div");
+	this.dataGroup.style.position = "absolute";
+	this.dataGroup.setAttribute("title", "Data Group");
+	this.dataGroup.style.top = "0px";
+	this.dataGroup.style.left = "0px";
+	this.dataGroup.style.width = plotWidth + "px";
+	this.dataGroup.style.height = plotHeight + "px";
+	this.plotArea.appendChild(this.dataGroup);
+}, drawAxes:function () {
+	var plotWidth = this.properties.width - this.properties.padding.left - this.properties.padding.right;
+	var plotHeight = this.properties.height - this.properties.padding.top - this.properties.padding.bottom;
+	if (this.axisGroup) {
+		this.axisGroup.parentNode.removeChild(this.axisGroup);
+		this.axisGroup = null;
+	}
+	this.axisGroup = document.createElement("div");
+	this.axisGroup.style.position = "absolute";
+	this.axisGroup.setAttribute("title", "Axis Group");
+	this.axisGroup.style.top = "0px";
+	this.axisGroup.style.left = "0px";
+	this.axisGroup.style.width = plotWidth + "px";
+	this.axisGroup.style.height = plotHeight + "px";
+	this.plotArea.appendChild(this.axisGroup);
+	var stroke = 1;
+	var line = document.createElement("v:line");
+	var y = dojo.widget.vml.Chart.Plotter.getY(this.properties.axes.x.plotAt, this);
+	line.setAttribute("from", "0px," + y + "px");
+	line.setAttribute("to", plotWidth + "px," + y + "px");
+	line.style.position = "absolute";
+	line.style.top = "0px";
+	line.style.left = "0px";
+	line.style.antialias = "false";
+	line.setAttribute("strokecolor", "#666");
+	line.setAttribute("strokeweight", stroke * 2 + "px");
+	this.axisGroup.appendChild(line);
+	var line = document.createElement("v:line");
+	var x = dojo.widget.vml.Chart.Plotter.getX(this.properties.axes.y.plotAt, this);
+	line.setAttribute("from", x + "px,0px");
+	line.setAttribute("to", x + "px," + plotHeight + "px");
+	line.style.position = "absolute";
+	line.style.top = "0px";
+	line.style.left = "0px";
+	line.style.antialias = "false";
+	line.setAttribute("strokecolor", "#666");
+	line.setAttribute("strokeweight", stroke * 2 + "px");
+	this.axisGroup.appendChild(line);
+	var size = 10;
+	var t = document.createElement("div");
+	t.style.position = "absolute";
+	t.style.top = (this.properties.height - this.properties.padding.bottom) + "px";
+	t.style.left = this.properties.padding.left + "px";
+	t.style.fontFamily = "sans-serif";
+	t.style.fontSize = size + "px";
+	t.innerHTML = dojo.math.round(parseFloat(this.properties.axes.x.range.min), 2);
+	this.vectorNode.appendChild(t);
+	t = document.createElement("div");
+	t.style.position = "absolute";
+	t.style.top = (this.properties.height - this.properties.padding.bottom) + "px";
+	t.style.left = (this.properties.width - this.properties.padding.right - size) + "px";
+	t.style.fontFamily = "sans-serif";
+	t.style.fontSize = size + "px";
+	t.innerHTML = dojo.math.round(parseFloat(this.properties.axes.x.range.max), 2);
+	this.vectorNode.appendChild(t);
+	t = document.createElement("div");
+	t.style.position = "absolute";
+	t.style.top = (size / 2) + "px";
+	t.style.left = "0px";
+	t.style.width = this.properties.padding.left + "px";
+	t.style.textAlign = "right";
+	t.style.paddingRight = "4px";
+	t.style.fontFamily = "sans-serif";
+	t.style.fontSize = size + "px";
+	t.innerHTML = dojo.math.round(parseFloat(this.properties.axes.y.range.max), 2);
+	this.vectorNode.appendChild(t);
+	t = document.createElement("div");
+	t.style.position = "absolute";
+	t.style.top = (this.properties.height - this.properties.padding.bottom - size) + "px";
+	t.style.left = "0px";
+	t.style.width = this.properties.padding.left + "px";
+	t.style.textAlign = "right";
+	t.style.paddingRight = "4px";
+	t.style.fontFamily = "sans-serif";
+	t.style.fontSize = size + "px";
+	t.innerHTML = dojo.math.round(parseFloat(this.properties.axes.y.range.min), 2);
+	this.vectorNode.appendChild(t);
+}, init:function () {
+	if (!this.properties.width || !this.properties.height) {
+		var box = dojo.html.getContentBox(this.domNode);
+		if (!this.properties.width) {
+			this.properties.width = (box.width < 32) ? this.properties.defaultWidth : box.width;
 		}
-		this.vectorNode=this.plotArea=this.dataGroup=this.axisGroup=null;
-	},
-	render:function(){
-		//	summary
-		//	Draws the data on the chart
-		if (this.dataGroup){
-			while(this.dataGroup.childNodes.length>0){
-				this.dataGroup.removeChild(this.dataGroup.childNodes[0]);
-			}
-		} else {
-			this.init();
+		if (!this.properties.height) {
+			this.properties.height = (box.height < 32) ? this.properties.defaultHeight : box.height;
 		}
-		for(var i=0; i<this.series.length; i++){
-			dojo.widget.vml.Chart.Plotter.plot(this.series[i], this);
+	}
+	this.drawVectorNode();
+	this.drawPlotArea();
+	this.drawDataGroup();
+	this.drawAxes();
+	this.assignColors();
+	this._isInitialized = true;
+}, destroy:function () {
+	while (this.domNode.childNodes.length > 0) {
+		this.domNode.removeChild(this.domNode.childNodes[0]);
+	}
+	this.vectorNode = this.plotArea = this.dataGroup = this.axisGroup = null;
+}, render:function () {
+	if (this.dataGroup) {
+		while (this.dataGroup.childNodes.length > 0) {
+			this.dataGroup.removeChild(this.dataGroup.childNodes[0]);
 		}
-	},
-	postCreate:function(){
-		//	summary
-		//	Parse any data if included with the chart, and kick off the rendering.
-		var table=this.domNode.getElementsByTagName("table")[0];
-		if (table){
-			var ranges=this.parseProperties(table);
-			var bRangeX=false;
-			var bRangeY=false;
-		
-			//	fix the axes
-			var axisValues = this.parseData(table);
-			if(!bRangeX){
-				this.properties.axes.x.range={min:axisValues.x.min, max:axisValues.x.max};
-			}
-			if(!bRangeY){
-				this.properties.axes.y.range={min:axisValues.y.min, max:axisValues.y.max};
-			}
-			this.setAxesPlot(table);
-
-			//	table values should be populated, now pop it off.
-			this.domNode.removeChild(table);
+	} else {
+		this.init();
+	}
+	for (var i = 0; i < this.series.length; i++) {
+		dojo.widget.vml.Chart.Plotter.plot(this.series[i], this);
+	}
+}, postCreate:function () {
+	var table = this.domNode.getElementsByTagName("table")[0];
+	if (table) {
+		var ranges = this.parseProperties(table);
+		var bRangeX = false;
+		var bRangeY = false;
+		var axisValues = this.parseData(table);
+		if (!bRangeX) {
+			this.properties.axes.x.range = {min:axisValues.x.min, max:axisValues.x.max};
 		}
-		if(this.series.length>0){
-			this.render();
+		if (!bRangeY) {
+			this.properties.axes.y.range = {min:axisValues.y.min, max:axisValues.y.max};
 		}
+		this.setAxesPlot(table);
+		this.domNode.removeChild(table);
 	}
-});
-
-dojo.widget.vml.Chart.Plotter=new function(){
-	//	summary
-	//	Singleton for plotting series of data.
-	var self=this;
+	if (this.series.length > 0) {
+		this.render();
+	}
+}});
+dojo.widget.vml.Chart.Plotter = new function () {
+	var self = this;
 	var plotters = {};
-	var types=dojo.widget.Chart.PlotTypes;
-	
-	this.getX=function(/* string||number */value, /* dojo.widget.Chart */chart){
-		//	summary
-		//	Calculate the x coord on the passed chart for the passed value
-		var v=parseFloat(value);
-		var min=chart.properties.axes.x.range.min;
-		var max=chart.properties.axes.x.range.max;
-		var ofst=0-min;
-		min+=ofst; max+=ofst; v+=ofst;
-
+	var types = dojo.widget.Chart.PlotTypes;
+	this.getX = function (value, chart) {
+		var v = parseFloat(value);
+		var min = chart.properties.axes.x.range.min;
+		var max = chart.properties.axes.x.range.max;
+		var ofst = 0 - min;
+		min += ofst;
+		max += ofst;
+		v += ofst;
 		var xmin = 0;
-		var xmax=chart.properties.width-chart.properties.padding.left-chart.properties.padding.right;
-		var x=(v*((xmax-xmin)/max))+xmin;
+		var xmax = chart.properties.width - chart.properties.padding.left - chart.properties.padding.right;
+		var x = (v * ((xmax - xmin) / max)) + xmin;
 		return x;
 	};
-	this.getY=function(/* string||number */value, /* dojo.widget.Chart */chart){
-		//	summary
-		//	Calculate the y coord on the passed chart for the passed value
-		var v=parseFloat(value);
-		var max=chart.properties.axes.y.range.max;
-		var min=chart.properties.axes.y.range.min;
-		var ofst=0;
-		if(min<0)ofst+=Math.abs(min);
-		min+=ofst; max+=ofst; v+=ofst;
-		
-		var ymin=chart.properties.height-chart.properties.padding.top-chart.properties.padding.bottom;
+	this.getY = function (value, chart) {
+		var v = parseFloat(value);
+		var max = chart.properties.axes.y.range.max;
+		var min = chart.properties.axes.y.range.min;
+		var ofst = 0;
+		if (min < 0) {
+			ofst += Math.abs(min);
+		}
+		min += ofst;
+		max += ofst;
+		v += ofst;
+		var ymin = chart.properties.height - chart.properties.padding.top - chart.properties.padding.bottom;
 		var ymax = 0;
-		var y=(((ymin-ymax)/(max-min))*(max-v))+ymax;
+		var y = (((ymin - ymax) / (max - min)) * (max - v)) + ymax;
 		return y;
 	};
-
-	this.addPlotter=function(/* string */name, /* function */func){
-		//	summary
-		//	add a custom plotter function to this object.
-		plotters[name]=func;
+	this.addPlotter = function (name, func) {
+		plotters[name] = func;
 	};
-	this.plot=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
-		//	summary
-		//	plot the passed series.
-		if (series.values.length==0) return;	//	void
-		if (series.plotType && plotters[series.plotType]){
-			return plotters[series.plotType](series, chart);	//	void
+	this.plot = function (series, chart) {
+		if (series.values.length == 0) {
+			return;
 		}
-		else if (chart.plotType && plotters[chart.plotType]){
-			return plotters[chart.plotType](series, chart);		//	void
+		if (series.plotType && plotters[series.plotType]) {
+			return plotters[series.plotType](series, chart);
+		} else {
+			if (chart.plotType && plotters[chart.plotType]) {
+				return plotters[chart.plotType](series, chart);
+			}
 		}
 	};
-
-	//	plotting
-	plotters["bar"]=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
-		//	summary
-		//	plot the passed series as a set of bars.
-		var space=1;
+	plotters["bar"] = function (series, chart) {
+		var space = 1;
 		var lastW = 0;
 		var ys = [];
-		var yAxis=self.getY(chart.properties.axes.x.plotAt, chart);
+		var yAxis = self.getY(chart.properties.axes.x.plotAt, chart);
 		var yA = yAxis;
-		for (var i=0; i<series.values.length; i++){
-			var x=self.getX(series.values[i].x, chart);
+		for (var i = 0; i < series.values.length; i++) {
+			var x = self.getX(series.values[i].x, chart);
 			var w;
-			if (i==series.values.length-1){
-				w=lastW;
-			} else{
-				w=self.getX(series.values[i+1].x, chart)-x-space;
-				lastW=w;
+			if (i == series.values.length - 1) {
+				w = lastW;
+			} else {
+				w = self.getX(series.values[i + 1].x, chart) - x - space;
+				lastW = w;
 			}
-			x-=(w/2);
-
-			var y=self.getY(series.values[i].value, chart);
-			var h=Math.abs(yA-y);
-			if (parseFloat(series.values[i].value) < chart.properties.axes.x.plotAt){
-				y=yA;
+			x -= (w / 2);
+			var y = self.getY(series.values[i].value, chart);
+			var h = Math.abs(yA - y);
+			if (parseFloat(series.values[i].value) < chart.properties.axes.x.plotAt) {
+				y = yA;
 			}
-
-			var bar=document.createElement("v:rect");
-			bar.style.position="absolute";
-			bar.style.top=y+"px";
-			bar.style.left=x+"px";
-			bar.style.width=w+"px";
-			bar.style.height=h+"px";
+			var bar = document.createElement("v:rect");
+			bar.style.position = "absolute";
+			bar.style.top = y + "px";
+			bar.style.left = x + "px";
+			bar.style.width = w + "px";
+			bar.style.height = h + "px";
 			bar.setAttribute("fillColor", series.color);
 			bar.setAttribute("stroked", "false");
-			bar.style.antialias="false";
+			bar.style.antialias = "false";
 			bar.setAttribute("title", series.label + " (" + i + "): " + series.values[i].value);
-			var fill=document.createElement("v:fill");
+			var fill = document.createElement("v:fill");
 			fill.setAttribute("opacity", "0.9");
 			bar.appendChild(fill);
 			chart.dataGroup.appendChild(bar);
 		}
-	};	
-	plotters["line"]=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
-		//	summary
-		//	plot the passed series as a line with tensioning
-		var tension=1.5;
-
-		var line=document.createElement("v:shape");
+	};
+	plotters["line"] = function (series, chart) {
+		var tension = 1.5;
+		var line = document.createElement("v:shape");
 		line.setAttribute("strokeweight", "2px");
 		line.setAttribute("strokecolor", series.color);
 		line.setAttribute("fillcolor", "none");
 		line.setAttribute("filled", "false");
 		line.setAttribute("title", series.label);
 		line.setAttribute("coordsize", chart.properties.width + "," + chart.properties.height);
-		line.style.position="absolute";
-		line.style.top="0px";
-		line.style.left="0px";
-		line.style.width= chart.properties.width+"px";
-		line.style.height=chart.properties.height+"px";
-		var stroke=document.createElement("v:stroke");
+		line.style.position = "absolute";
+		line.style.top = "0px";
+		line.style.left = "0px";
+		line.style.width = chart.properties.width + "px";
+		line.style.height = chart.properties.height + "px";
+		var stroke = document.createElement("v:stroke");
 		stroke.setAttribute("opacity", "0.85");
 		line.appendChild(stroke);
-
 		var path = [];
-		for (var i=0; i<series.values.length; i++){
+		for (var i = 0; i < series.values.length; i++) {
 			var x = Math.round(self.getX(series.values[i].x, chart));
 			var y = Math.round(self.getY(series.values[i].value, chart));
-
-			if (i==0){
+			if (i == 0) {
 				path.push("m");
-				path.push(x+","+y);
-			}else{
-				var lastx=Math.round(self.getX(series.values[i-1].x, chart));
-				var lasty=Math.round(self.getY(series.values[i-1].value, chart));
-				var dx=x-lastx;
-				var dy=y-lasty;
-				
+				path.push(x + "," + y);
+			} else {
+				var lastx = Math.round(self.getX(series.values[i - 1].x, chart));
+				var lasty = Math.round(self.getY(series.values[i - 1].value, chart));
+				var dx = x - lastx;
+				var dy = y - lasty;
 				path.push("c");
-				var cx=Math.round((x-(tension-1)*(dx/tension)));
-				path.push(cx+","+lasty);
-				cx=Math.round((x-(dx/tension)));
-				path.push(cx+","+y);
-				path.push(x+","+y);
+				var cx = Math.round((x - (tension - 1) * (dx / tension)));
+				path.push(cx + "," + lasty);
+				cx = Math.round((x - (dx / tension)));
+				path.push(cx + "," + y);
+				path.push(x + "," + y);
 			}
 		}
-		line.setAttribute("path", path.join(" ")+" e");
+		line.setAttribute("path", path.join(" ") + " e");
 		chart.dataGroup.appendChild(line);
 	};
-	plotters["area"]=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
-		//	summary
-		//	plot the passed series as an area with tensioning.
-		var tension=1.5;
-
-		var line=document.createElement("v:shape");
+	plotters["area"] = function (series, chart) {
+		var tension = 1.5;
+		var line = document.createElement("v:shape");
 		line.setAttribute("strokeweight", "1px");
 		line.setAttribute("strokecolor", series.color);
 		line.setAttribute("fillcolor", series.color);
 		line.setAttribute("title", series.label);
 		line.setAttribute("coordsize", chart.properties.width + "," + chart.properties.height);
-		line.style.position="absolute";
-		line.style.top="0px";
-		line.style.left="0px";
-		line.style.width= chart.properties.width+"px";
-		line.style.height=chart.properties.height+"px";
-		var stroke=document.createElement("v:stroke");
+		line.style.position = "absolute";
+		line.style.top = "0px";
+		line.style.left = "0px";
+		line.style.width = chart.properties.width + "px";
+		line.style.height = chart.properties.height + "px";
+		var stroke = document.createElement("v:stroke");
 		stroke.setAttribute("opacity", "0.8");
 		line.appendChild(stroke);
-		var fill=document.createElement("v:fill");
+		var fill = document.createElement("v:fill");
 		fill.setAttribute("opacity", "0.4");
 		line.appendChild(fill);
-
 		var path = [];
-		for (var i=0; i<series.values.length; i++){
+		for (var i = 0; i < series.values.length; i++) {
 			var x = Math.round(self.getX(series.values[i].x, chart));
 			var y = Math.round(self.getY(series.values[i].value, chart));
-
-			if (i==0){
+			if (i == 0) {
 				path.push("m");
-				path.push(x+","+y);
-			}else{
-				var lastx=Math.round(self.getX(series.values[i-1].x, chart));
-				var lasty=Math.round(self.getY(series.values[i-1].value, chart));
-				var dx=x-lastx;
-				var dy=y-lasty;
-				
+				path.push(x + "," + y);
+			} else {
+				var lastx = Math.round(self.getX(series.values[i - 1].x, chart));
+				var lasty = Math.round(self.getY(series.values[i - 1].value, chart));
+				var dx = x - lastx;
+				var dy = y - lasty;
 				path.push("c");
-				var cx=Math.round((x-(tension-1)*(dx/tension)));
-				path.push(cx+","+lasty);
-				cx=Math.round((x-(dx/tension)));
-				path.push(cx+","+y);
-				path.push(x+","+y);
+				var cx = Math.round((x - (tension - 1) * (dx / tension)));
+				path.push(cx + "," + lasty);
+				cx = Math.round((x - (dx / tension)));
+				path.push(cx + "," + y);
+				path.push(x + "," + y);
 			}
 		}
 		path.push("l");
 		path.push(x + "," + self.getY(0, chart));
 		path.push("l");
-		path.push(self.getX(0, chart) + "," + self.getY(0,chart));
-		line.setAttribute("path", path.join(" ")+" x e");
+		path.push(self.getX(0, chart) + "," + self.getY(0, chart));
+		line.setAttribute("path", path.join(" ") + " x e");
 		chart.dataGroup.appendChild(line);
 	};
-	plotters["scatter"]=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
-		//	summary
-		//	plot the passed series as a scatter chart
-		var r=6;
-		for (var i=0; i<series.values.length; i++){
-			var x=self.getX(series.values[i].x, chart);
-			var y=self.getY(series.values[i].value, chart);
-			var mod=r/2;
-
-			var point=document.createElement("v:rect");
+	plotters["scatter"] = function (series, chart) {
+		var r = 6;
+		for (var i = 0; i < series.values.length; i++) {
+			var x = self.getX(series.values[i].x, chart);
+			var y = self.getY(series.values[i].value, chart);
+			var mod = r / 2;
+			var point = document.createElement("v:rect");
 			point.setAttribute("fillcolor", series.color);
 			point.setAttribute("strokecolor", series.color);
 			point.setAttribute("title", series.label + ": " + series.values[i].value);
-			point.style.position="absolute";
-			point.style.rotation="45";
-			point.style.top=(y-mod)+"px";
-			point.style.left=(x-mod)+"px";
-			point.style.width=r+"px";
-			point.style.height=r+"px";
-			var fill=document.createElement("v:fill");
+			point.style.position = "absolute";
+			point.style.rotation = "45";
+			point.style.top = (y - mod) + "px";
+			point.style.left = (x - mod) + "px";
+			point.style.width = r + "px";
+			point.style.height = r + "px";
+			var fill = document.createElement("v:fill");
 			fill.setAttribute("opacity", "0.6");
 			point.appendChild(fill);
 			chart.dataGroup.appendChild(point);
 		}
-	};	
-	plotters["bubble"]=function(/* dojo.widget.Chart.DataSeries */series, /* dojo.widget.Chart */chart){
-		//	summary
-		//	plot the passed series as a series of bubbles (scatter with 3rd dimension)
-		//	added param for series[n].value: size
-		var minR=1;
-		
-		//	do this off the x axis?
-		var min=chart.properties.axes.x.range.min;
-		var max=chart.properties.axes.x.range.max;
-		var ofst=0-min;
-
-		min+=ofst; max+=ofst;
-		var xmin=chart.properties.padding.left;
-		var xmax=chart.properties.width-chart.properties.padding.right;
-		var factor=(max-min)/(xmax-xmin)*25;
-		
-		for (var i=0; i<series.values.length; i++){
+	};
+	plotters["bubble"] = function (series, chart) {
+		var minR = 1;
+		var min = chart.properties.axes.x.range.min;
+		var max = chart.properties.axes.x.range.max;
+		var ofst = 0 - min;
+		min += ofst;
+		max += ofst;
+		var xmin = chart.properties.padding.left;
+		var xmax = chart.properties.width - chart.properties.padding.right;
+		var factor = (max - min) / (xmax - xmin) * 25;
+		for (var i = 0; i < series.values.length; i++) {
 			var size = series.values[i].size;
-			if (isNaN(parseFloat(size))) size=minR;
-
-			var radius=(parseFloat(size)*factor)/2;
-			var diameter=radius * 2;
-			var cx=self.getX(series.values[i].x, chart);
-			var cy=self.getY(series.values[i].value, chart);
-
-			var top=cy-radius;
-			var left=cx-radius;
-
-			var point=document.createElement("v:oval");
+			if (isNaN(parseFloat(size))) {
+				size = minR;
+			}
+			var radius = (parseFloat(size) * factor) / 2;
+			var diameter = radius * 2;
+			var cx = self.getX(series.values[i].x, chart);
+			var cy = self.getY(series.values[i].value, chart);
+			var top = cy - radius;
+			var left = cx - radius;
+			var point = document.createElement("v:oval");
 			point.setAttribute("fillcolor", series.color);
 			point.setAttribute("title", series.label + ": " + series.values[i].value + " (" + size + ")");
 			point.setAttribute("stroked", "false");
-			point.style.position="absolute";
-			
-			point.style.top=top+"px";
-			point.style.left=left+"px";
-			point.style.width=diameter+"px";
-			point.style.height=diameter+"px";
-
-			var fill=document.createElement("v:fill");
+			point.style.position = "absolute";
+			point.style.top = top + "px";
+			point.style.left = left + "px";
+			point.style.width = diameter + "px";
+			point.style.height = diameter + "px";
+			var fill = document.createElement("v:fill");
 			fill.setAttribute("opacity", "0.8");
 			point.appendChild(fill);
-			
 			chart.dataGroup.appendChild(point);
 		}
 	};
 }();
 
+
 __CPAN_DIR__ src/lfx
 __CPAN_FILE__ src/lfx/Animation.js
 /*
@@ -62219,571 +41687,398 @@
 */
 
 dojo.provide("dojo.lfx.Animation");
-
 dojo.require("dojo.lang.func");
-
-/*
-	Animation package based on Dan Pupius' work: http://pupius.co.uk/js/Toolkit.Drawing.js
-*/
-dojo.lfx.Line = function(/*int*/ start, /*int*/ end){
-	// summary: dojo.lfx.Line is the object used to generate values
-	//			from a start value to an end value
+dojo.lfx.Line = function (start, end) {
 	this.start = start;
 	this.end = end;
-	if(dojo.lang.isArray(start)){
-		/* start: Array
-		   end: Array
-		   pId: a */
+	if (dojo.lang.isArray(start)) {
 		var diff = [];
-		dojo.lang.forEach(this.start, function(s,i){
+		dojo.lang.forEach(this.start, function (s, i) {
 			diff[i] = this.end[i] - s;
 		}, this);
-		
-		this.getValue = function(/*float*/ n){
+		this.getValue = function (n) {
 			var res = [];
-			dojo.lang.forEach(this.start, function(s, i){
+			dojo.lang.forEach(this.start, function (s, i) {
 				res[i] = (diff[i] * n) + s;
 			}, this);
-			return res; // Array
-		}
-	}else{
+			return res;
+		};
+	} else {
 		var diff = end - start;
-			
-		this.getValue = function(/*float*/ n){
-			//	summary: returns the point on the line
-			//	n: a floating point number greater than 0 and less than 1
-			return (diff * n) + this.start; // Decimal
-		}
+		this.getValue = function (n) {
+			return (diff * n) + this.start;
+		};
 	}
+};
+if ((dojo.render.html.khtml) && (!dojo.render.html.safari)) {
+	dojo.lfx.easeDefault = function (n) {
+		return (parseFloat("0.5") + ((Math.sin((n + parseFloat("1.5")) * Math.PI)) / 2));
+	};
+} else {
+	dojo.lfx.easeDefault = function (n) {
+		return (0.5 + ((Math.sin((n + 1.5) * Math.PI)) / 2));
+	};
 }
-
-dojo.lfx.easeDefault = function(/*Decimal?*/ n){
-	//	summary: Returns the point for point n on a sin wave.
-	if(dojo.render.html.khtml){
-		// the cool kids are obviously not using konqueror...
-		// found a very wierd bug in floats constants, 1.5 evals as 1
-		// seems somebody mixed up ints and floats in 3.5.4 ??
-		// FIXME: investigate more and post a KDE bug (Fredrik)
-		return (parseFloat("0.5")+((Math.sin( (n+parseFloat("1.5")) * Math.PI))/2));
-	}else{
-		return (0.5+((Math.sin( (n+1.5) * Math.PI))/2));
-	}
-}
-
-dojo.lfx.easeIn = function(/*Decimal?*/ n){
-	//	summary: returns the point on an easing curve
-	//	n: a floating point number greater than 0 and less than 1
+dojo.lfx.easeIn = function (n) {
 	return Math.pow(n, 3);
-}
-
-dojo.lfx.easeOut = function(/*Decimal?*/ n){
-	//	summary: returns the point on the line
-	//	n: a floating point number greater than 0 and less than 1
-	return ( 1 - Math.pow(1 - n, 3) );
-}
-
-dojo.lfx.easeInOut = function(/*Decimal?*/ n){
-	//	summary: returns the point on the line
-	//	n: a floating point number greater than 0 and less than 1
-	return ( (3 * Math.pow(n, 2)) - (2 * Math.pow(n, 3)) );
-}
-
-dojo.lfx.IAnimation = function(){
-	// summary: dojo.lfx.IAnimation is an interface that implements
-	//			commonly used functions of animation objects
-}
-dojo.lang.extend(dojo.lfx.IAnimation, {
-	// public properties
-	curve: null,
-	duration: 1000,
-	easing: null,
-	repeatCount: 0,
-	rate: 25,
-	
-	// events
-	handler: null,
-	beforeBegin: null,
-	onBegin: null,
-	onAnimate: null,
-	onEnd: null,
-	onPlay: null,
-	onPause: null,
-	onStop: null,
-	
-	// public methods
-	play: null,
-	pause: null,
-	stop: null,
-	
-	connect: function(/*Event*/ evt, /*Object*/ scope, /*Function*/ newFunc){
-		// summary: Convenience function.  Quickly connect to an event
-		//			of this object and save the old functions connected to it.
-		// evt: The name of the event to connect to.
-		// scope: the scope in which to run newFunc.
-		// newFunc: the function to run when evt is fired.
-		if(!newFunc){
-			/* scope: Function
-			   newFunc: null
-			   pId: f */
-			newFunc = scope;
-			scope = this;
-		}
-		newFunc = dojo.lang.hitch(scope, newFunc);
-		var oldFunc = this[evt]||function(){};
-		this[evt] = function(){
-			var ret = oldFunc.apply(this, arguments);
-			newFunc.apply(this, arguments);
-			return ret;
-		}
-		return this; // dojo.lfx.IAnimation
-	},
-
-	fire: function(/*Event*/ evt, /*Array*/ args){
-		// summary: Convenience function.  Fire event "evt" and pass it
-		//			the arguments specified in "args".
-		// evt: The event to fire.
-		// args: The arguments to pass to the event.
-		if(this[evt]){
-			this[evt].apply(this, (args||[]));
-		}
-		return this; // dojo.lfx.IAnimation
-	},
-	
-	repeat: function(/*int*/ count){
-		// summary: Set the repeat count of this object.
-		// count: How many times to repeat the animation.
-		this.repeatCount = count;
-		return this; // dojo.lfx.IAnimation
-	},
-
-	// private properties
-	_active: false,
-	_paused: false
-});
-
-dojo.lfx.Animation = function(	/*Object*/ handlers, 
-								/*int*/ duration, 
-								/*dojo.lfx.Line*/ curve, 
-								/*function*/ easing, 
-								/*int*/ repeatCount, 
-								/*int*/ rate){
-	//	summary
-	//		a generic animation object that fires callbacks into it's handlers
-	//		object at various states
-	//	handlers: { handler: Function?, onstart: Function?, onstop: Function?, onanimate: Function? }
+};
+dojo.lfx.easeOut = function (n) {
+	return (1 - Math.pow(1 - n, 3));
+};
+dojo.lfx.easeInOut = function (n) {
+	return ((3 * Math.pow(n, 2)) - (2 * Math.pow(n, 3)));
+};
+dojo.lfx.IAnimation = function () {
+};
+dojo.lang.extend(dojo.lfx.IAnimation, {curve:null, duration:1000, easing:null, repeatCount:0, rate:10, handler:null, beforeBegin:null, onBegin:null, onAnimate:null, onEnd:null, onPlay:null, onPause:null, onStop:null, play:null, pause:null, stop:null, connect:function (evt, scope, newFunc) {
+	if (!newFunc) {
+		newFunc = scope;
+		scope = this;
+	}
+	newFunc = dojo.lang.hitch(scope, newFunc);
+	var oldFunc = this[evt] || function () {
+	};
+	this[evt] = function () {
+		var ret = oldFunc.apply(this, arguments);
+		newFunc.apply(this, arguments);
+		return ret;
+	};
+	return this;
+}, fire:function (evt, args) {
+	if (this[evt]) {
+		this[evt].apply(this, (args || []));
+	}
+	return this;
+}, repeat:function (count) {
+	this.repeatCount = count;
+	return this;
+}, _active:false, _paused:false});
+dojo.lfx.Animation = function (handlers, duration, curve, easing, repeatCount, rate) {
 	dojo.lfx.IAnimation.call(this);
-	if(dojo.lang.isNumber(handlers)||(!handlers && duration.getValue)){
-		// no handlers argument:
+	if (dojo.lang.isNumber(handlers) || (!handlers && duration.getValue)) {
 		rate = repeatCount;
 		repeatCount = easing;
 		easing = curve;
 		curve = duration;
 		duration = handlers;
 		handlers = null;
-	}else if(handlers.getValue||dojo.lang.isArray(handlers)){
-		// no handlers or duration:
-		rate = easing;
-		repeatCount = curve;
-		easing = duration;
-		curve = handlers;
-		duration = null;
-		handlers = null;
+	} else {
+		if (handlers.getValue || dojo.lang.isArray(handlers)) {
+			rate = easing;
+			repeatCount = curve;
+			easing = duration;
+			curve = handlers;
+			duration = null;
+			handlers = null;
+		}
 	}
-	if(dojo.lang.isArray(curve)){
-		/* curve: Array
-		   pId: a */
+	if (dojo.lang.isArray(curve)) {
 		this.curve = new dojo.lfx.Line(curve[0], curve[1]);
-	}else{
+	} else {
 		this.curve = curve;
 	}
-	if(duration != null && duration > 0){ this.duration = duration; }
-	if(repeatCount){ this.repeatCount = repeatCount; }
-	if(rate){ this.rate = rate; }
-	if(handlers){
-		dojo.lang.forEach([
-				"handler", "beforeBegin", "onBegin", 
-				"onEnd", "onPlay", "onStop", "onAnimate"
-			], function(item){
-				if(handlers[item]){
-					this.connect(item, handlers[item]);
-				}
-			}, this);
+	if (duration != null && duration > 0) {
+		this.duration = duration;
 	}
-	if(easing && dojo.lang.isFunction(easing)){
-		this.easing=easing;
+	if (repeatCount) {
+		this.repeatCount = repeatCount;
 	}
-}
-dojo.inherits(dojo.lfx.Animation, dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Animation, {
-	// "private" properties
-	_startTime: null,
-	_endTime: null,
-	_timer: null,
-	_percent: 0,
-	_startRepeatCount: 0,
-
-	// public methods
-	play: function(/*int?*/ delay, /*bool?*/ gotoStart){
-		// summary: Start the animation.
-		// delay: How many milliseconds to delay before starting.
-		// gotoStart: If true, starts the animation from the beginning; otherwise,
-		//            starts it from its current position.
-		if(gotoStart){
-			clearTimeout(this._timer);
-			this._active = false;
-			this._paused = false;
-			this._percent = 0;
-		}else if(this._active && !this._paused){
-			return this; // dojo.lfx.Animation
-		}
-		
-		this.fire("handler", ["beforeBegin"]);
-		this.fire("beforeBegin");
-
-		if(delay > 0){
-			setTimeout(dojo.lang.hitch(this, function(){ this.play(null, gotoStart); }), delay);
-			return this; // dojo.lfx.Animation
-		}
-		
-		this._startTime = new Date().valueOf();
-		if(this._paused){
-			this._startTime -= (this.duration * this._percent / 100);
-		}
-		this._endTime = this._startTime + this.duration;
-
-		this._active = true;
-		this._paused = false;
-		
-		var step = this._percent / 100;
-		var value = this.curve.getValue(step);
-		if(this._percent == 0 ){
-			if(!this._startRepeatCount){
-				this._startRepeatCount = this.repeatCount;
+	if (rate) {
+		this.rate = rate;
+	}
+	if (handlers) {
+		dojo.lang.forEach(["handler", "beforeBegin", "onBegin", "onEnd", "onPlay", "onStop", "onAnimate"], function (item) {
+			if (handlers[item]) {
+				this.connect(item, handlers[item]);
 			}
-			this.fire("handler", ["begin", value]);
-			this.fire("onBegin", [value]);
-		}
-
-		this.fire("handler", ["play", value]);
-		this.fire("onPlay", [value]);
-
-		this._cycle();
-		return this; // dojo.lfx.Animation
-	},
-
-	pause: function(){
-		// summary: Pauses a running animation.
+		}, this);
+	}
+	if (easing && dojo.lang.isFunction(easing)) {
+		this.easing = easing;
+	}
+};
+dojo.inherits(dojo.lfx.Animation, dojo.lfx.IAnimation);
+dojo.lang.extend(dojo.lfx.Animation, {_startTime:null, _endTime:null, _timer:null, _percent:0, _startRepeatCount:0, play:function (delay, gotoStart) {
+	if (gotoStart) {
 		clearTimeout(this._timer);
-		if(!this._active){ return this; /*dojo.lfx.Animation*/}
-		this._paused = true;
-		var value = this.curve.getValue(this._percent / 100);
-		this.fire("handler", ["pause", value]);
-		this.fire("onPause", [value]);
-		return this; // dojo.lfx.Animation
-	},
-
-	gotoPercent: function(/*Decimal*/ pct, /*bool?*/ andPlay){
-		// summary: Sets the progress of the animation.
-		// pct: A percentage in decimal notation (between and including 0.0 and 1.0).
-		// andPlay: If true, play the animation after setting the progress.
-		clearTimeout(this._timer);
-		this._active = true;
-		this._paused = true;
-		this._percent = pct;
-		if(andPlay){ this.play(); }
-		return this; // dojo.lfx.Animation
-	},
-
-	stop: function(/*bool?*/ gotoEnd){
-		// summary: Stops a running animation.
-		// gotoEnd: If true, the animation will end.
-		clearTimeout(this._timer);
-		var step = this._percent / 100;
-		if(gotoEnd){
-			step = 1;
-		}
-		var value = this.curve.getValue(step);
-		this.fire("handler", ["stop", value]);
-		this.fire("onStop", [value]);
 		this._active = false;
 		this._paused = false;
-		return this; // dojo.lfx.Animation
-	},
-
-	status: function(){
-		// summary: Returns a string representation of the status of
-		//			the animation.
-		if(this._active){
-			return this._paused ? "paused" : "playing"; // String
-		}else{
-			return "stopped"; // String
+		this._percent = 0;
+	} else {
+		if (this._active && !this._paused) {
+			return this;
 		}
+	}
+	this.fire("handler", ["beforeBegin"]);
+	this.fire("beforeBegin");
+	if (delay > 0) {
+		setTimeout(dojo.lang.hitch(this, function () {
+			this.play(null, gotoStart);
+		}), delay);
 		return this;
-	},
-
-	// "private" methods
-	_cycle: function(){
-		clearTimeout(this._timer);
-		if(this._active){
-			var curr = new Date().valueOf();
-			var step = (curr - this._startTime) / (this._endTime - this._startTime);
-
-			if(step >= 1){
-				step = 1;
-				this._percent = 100;
-			}else{
-				this._percent = step * 100;
-			}
-			
-			// Perform easing
-			if((this.easing)&&(dojo.lang.isFunction(this.easing))){
-				step = this.easing(step);
-			}
-
-			var value = this.curve.getValue(step);
-			this.fire("handler", ["animate", value]);
-			this.fire("onAnimate", [value]);
-
-			if( step < 1 ){
-				this._timer = setTimeout(dojo.lang.hitch(this, "_cycle"), this.rate);
-			}else{
-				this._active = false;
-				this.fire("handler", ["end"]);
-				this.fire("onEnd");
-
-				if(this.repeatCount > 0){
-					this.repeatCount--;
+	}
+	this._startTime = new Date().valueOf();
+	if (this._paused) {
+		this._startTime -= (this.duration * this._percent / 100);
+	}
+	this._endTime = this._startTime + this.duration;
+	this._active = true;
+	this._paused = false;
+	var step = this._percent / 100;
+	var value = this.curve.getValue(step);
+	if (this._percent == 0) {
+		if (!this._startRepeatCount) {
+			this._startRepeatCount = this.repeatCount;
+		}
+		this.fire("handler", ["begin", value]);
+		this.fire("onBegin", [value]);
+	}
+	this.fire("handler", ["play", value]);
+	this.fire("onPlay", [value]);
+	this._cycle();
+	return this;
+}, pause:function () {
+	clearTimeout(this._timer);
+	if (!this._active) {
+		return this;
+	}
+	this._paused = true;
+	var value = this.curve.getValue(this._percent / 100);
+	this.fire("handler", ["pause", value]);
+	this.fire("onPause", [value]);
+	return this;
+}, gotoPercent:function (pct, andPlay) {
+	clearTimeout(this._timer);
+	this._active = true;
+	this._paused = true;
+	this._percent = pct;
+	if (andPlay) {
+		this.play();
+	}
+	return this;
+}, stop:function (gotoEnd) {
+	clearTimeout(this._timer);
+	var step = this._percent / 100;
+	if (gotoEnd) {
+		step = 1;
+	}
+	var value = this.curve.getValue(step);
+	this.fire("handler", ["stop", value]);
+	this.fire("onStop", [value]);
+	this._active = false;
+	this._paused = false;
+	return this;
+}, status:function () {
+	if (this._active) {
+		return this._paused ? "paused" : "playing";
+	} else {
+		return "stopped";
+	}
+	return this;
+}, _cycle:function () {
+	clearTimeout(this._timer);
+	if (this._active) {
+		var curr = new Date().valueOf();
+		var step = (curr - this._startTime) / (this._endTime - this._startTime);
+		if (step >= 1) {
+			step = 1;
+			this._percent = 100;
+		} else {
+			this._percent = step * 100;
+		}
+		if ((this.easing) && (dojo.lang.isFunction(this.easing))) {
+			step = this.easing(step);
+		}
+		var value = this.curve.getValue(step);
+		this.fire("handler", ["animate", value]);
+		this.fire("onAnimate", [value]);
+		if (step < 1) {
+			this._timer = setTimeout(dojo.lang.hitch(this, "_cycle"), this.rate);
+		} else {
+			this._active = false;
+			this.fire("handler", ["end"]);
+			this.fire("onEnd");
+			if (this.repeatCount > 0) {
+				this.repeatCount--;
+				this.play(null, true);
+			} else {
+				if (this.repeatCount == -1) {
 					this.play(null, true);
-				}else if(this.repeatCount == -1){
-					this.play(null, true);
-				}else{
-					if(this._startRepeatCount){
+				} else {
+					if (this._startRepeatCount) {
 						this.repeatCount = this._startRepeatCount;
 						this._startRepeatCount = 0;
 					}
 				}
 			}
 		}
-		return this; // dojo.lfx.Animation
 	}
-});
-
-dojo.lfx.Combine = function(/*dojo.lfx.IAnimation...*/ animations){
-	// summary: An animation object to play animations passed to it at the same time.
+	return this;
+}});
+dojo.lfx.Combine = function (animations) {
 	dojo.lfx.IAnimation.call(this);
 	this._anims = [];
 	this._animsEnded = 0;
-	
 	var anims = arguments;
-	if(anims.length == 1 && (dojo.lang.isArray(anims[0]) || dojo.lang.isArrayLike(anims[0]))){
-		/* animations: dojo.lfx.IAnimation[]
-		   pId: a */
+	if (anims.length == 1 && (dojo.lang.isArray(anims[0]) || dojo.lang.isArrayLike(anims[0]))) {
 		anims = anims[0];
 	}
-	
-	dojo.lang.forEach(anims, function(anim){
+	dojo.lang.forEach(anims, function (anim) {
 		this._anims.push(anim);
 		anim.connect("onEnd", dojo.lang.hitch(this, "_onAnimsEnded"));
 	}, this);
-}
+};
 dojo.inherits(dojo.lfx.Combine, dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Combine, {
-	// private members
-	_animsEnded: 0,
-	
-	// public methods
-	play: function(/*int?*/ delay, /*bool?*/ gotoStart){
-		// summary: Start the animations.
-		// delay: How many milliseconds to delay before starting.
-		// gotoStart: If true, starts the animations from the beginning; otherwise,
-		//            starts them from their current position.
-		if( !this._anims.length ){ return this; /*dojo.lfx.Combine*/}
-
-		this.fire("beforeBegin");
-
-		if(delay > 0){
-			setTimeout(dojo.lang.hitch(this, function(){ this.play(null, gotoStart); }), delay);
-			return this; // dojo.lfx.Combine
+dojo.lang.extend(dojo.lfx.Combine, {_animsEnded:0, play:function (delay, gotoStart) {
+	if (!this._anims.length) {
+		return this;
+	}
+	this.fire("beforeBegin");
+	if (delay > 0) {
+		setTimeout(dojo.lang.hitch(this, function () {
+			this.play(null, gotoStart);
+		}), delay);
+		return this;
+	}
+	if (gotoStart || this._anims[0].percent == 0) {
+		this.fire("onBegin");
+	}
+	this.fire("onPlay");
+	this._animsCall("play", null, gotoStart);
+	return this;
+}, pause:function () {
+	this.fire("onPause");
+	this._animsCall("pause");
+	return this;
+}, stop:function (gotoEnd) {
+	this.fire("onStop");
+	this._animsCall("stop", gotoEnd);
+	return this;
+}, _onAnimsEnded:function () {
+	this._animsEnded++;
+	if (this._animsEnded >= this._anims.length) {
+		this.fire("onEnd");
+	}
+	return this;
+}, _animsCall:function (funcName) {
+	var args = [];
+	if (arguments.length > 1) {
+		for (var i = 1; i < arguments.length; i++) {
+			args.push(arguments[i]);
 		}
-		
-		if(gotoStart || this._anims[0].percent == 0){
-			this.fire("onBegin");
-		}
-		this.fire("onPlay");
-		this._animsCall("play", null, gotoStart);
-		return this; // dojo.lfx.Combine
-	},
-	
-	pause: function(){
-		// summary: Pauses the running animations.
-		this.fire("onPause");
-		this._animsCall("pause"); 
-		return this; // dojo.lfx.Combine
-	},
-	
-	stop: function(/*bool?*/ gotoEnd){
-		// summary: Stops the running animations.
-		// gotoEnd: If true, the animations will end.
-		this.fire("onStop");
-		this._animsCall("stop", gotoEnd);
-		return this; // dojo.lfx.Combine
-	},
-	
-	// private methods
-	_onAnimsEnded: function(){
-		this._animsEnded++;
-		if(this._animsEnded >= this._anims.length){
-			this.fire("onEnd");
-		}
-		return this; // dojo.lfx.Combine
-	},
-	
-	_animsCall: function(/*String*/ funcName){
-		var args = [];
-		if(arguments.length > 1){
-			for(var i = 1 ; i < arguments.length ; i++){
-				args.push(arguments[i]);
-			}
-		}
-		var _this = this;
-		dojo.lang.forEach(this._anims, function(anim){
-			anim[funcName](args);
-		}, _this);
-		return this; // dojo.lfx.Combine
 	}
-});
-
-dojo.lfx.Chain = function(/*dojo.lfx.IAnimation...*/ animations) {
-	// summary: An animation object to play animations passed to it
-	//			one after another.
+	var _this = this;
+	dojo.lang.forEach(this._anims, function (anim) {
+		anim[funcName](args);
+	}, _this);
+	return this;
+}});
+dojo.lfx.Chain = function (animations) {
 	dojo.lfx.IAnimation.call(this);
 	this._anims = [];
 	this._currAnim = -1;
-	
 	var anims = arguments;
-	if(anims.length == 1 && (dojo.lang.isArray(anims[0]) || dojo.lang.isArrayLike(anims[0]))){
-		/* animations: dojo.lfx.IAnimation[]
-		   pId: a */
+	if (anims.length == 1 && (dojo.lang.isArray(anims[0]) || dojo.lang.isArrayLike(anims[0]))) {
 		anims = anims[0];
 	}
-	
 	var _this = this;
-	dojo.lang.forEach(anims, function(anim, i, anims_arr){
+	dojo.lang.forEach(anims, function (anim, i, anims_arr) {
 		this._anims.push(anim);
-		if(i < anims_arr.length - 1){
-			anim.connect("onEnd", dojo.lang.hitch(this, "_playNext") );
-		}else{
-			anim.connect("onEnd", dojo.lang.hitch(this, function(){ this.fire("onEnd"); }) );
+		if (i < anims_arr.length - 1) {
+			anim.connect("onEnd", dojo.lang.hitch(this, "_playNext"));
+		} else {
+			anim.connect("onEnd", dojo.lang.hitch(this, function () {
+				this.fire("onEnd");
+			}));
 		}
 	}, this);
-}
+};
 dojo.inherits(dojo.lfx.Chain, dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Chain, {
-	// private members
-	_currAnim: -1,
-	
-	// public methods
-	play: function(/*int?*/ delay, /*bool?*/ gotoStart){
-		// summary: Start the animation sequence.
-		// delay: How many milliseconds to delay before starting.
-		// gotoStart: If true, starts the sequence from the beginning; otherwise,
-		//            starts it from its current position.
-		if( !this._anims.length ) { return this; /*dojo.lfx.Chain*/}
-		if( gotoStart || !this._anims[this._currAnim] ) {
-			this._currAnim = 0;
+dojo.lang.extend(dojo.lfx.Chain, {_currAnim:-1, play:function (delay, gotoStart) {
+	if (!this._anims.length) {
+		return this;
+	}
+	if (gotoStart || !this._anims[this._currAnim]) {
+		this._currAnim = 0;
+	}
+	var currentAnimation = this._anims[this._currAnim];
+	this.fire("beforeBegin");
+	if (delay > 0) {
+		setTimeout(dojo.lang.hitch(this, function () {
+			this.play(null, gotoStart);
+		}), delay);
+		return this;
+	}
+	if (currentAnimation) {
+		if (this._currAnim == 0) {
+			this.fire("handler", ["begin", this._currAnim]);
+			this.fire("onBegin", [this._currAnim]);
 		}
-
-		var currentAnimation = this._anims[this._currAnim];
-
-		this.fire("beforeBegin");
-		if(delay > 0){
-			setTimeout(dojo.lang.hitch(this, function(){ this.play(null, gotoStart); }), delay);
-			return this; // dojo.lfx.Chain
+		this.fire("onPlay", [this._currAnim]);
+		currentAnimation.play(null, gotoStart);
+	}
+	return this;
+}, pause:function () {
+	if (this._anims[this._currAnim]) {
+		this._anims[this._currAnim].pause();
+		this.fire("onPause", [this._currAnim]);
+	}
+	return this;
+}, playPause:function () {
+	if (this._anims.length == 0) {
+		return this;
+	}
+	if (this._currAnim == -1) {
+		this._currAnim = 0;
+	}
+	var currAnim = this._anims[this._currAnim];
+	if (currAnim) {
+		if (!currAnim._active || currAnim._paused) {
+			this.play();
+		} else {
+			this.pause();
 		}
-		
-		if(currentAnimation){
-			if(this._currAnim == 0){
-				this.fire("handler", ["begin", this._currAnim]);
-				this.fire("onBegin", [this._currAnim]);
-			}
-			this.fire("onPlay", [this._currAnim]);
-			currentAnimation.play(null, gotoStart);
-		}
-		return this; // dojo.lfx.Chain
-	},
-	
-	pause: function(){
-		// summary: Pauses the running animation sequence.
-		if( this._anims[this._currAnim] ) {
-			this._anims[this._currAnim].pause();
-			this.fire("onPause", [this._currAnim]);
-		}
-		return this; // dojo.lfx.Chain
-	},
-	
-	playPause: function(){
-		// summary: If the animation sequence is playing, pause it; otherwise,
-		//			play it.
-		if(this._anims.length == 0){ return this; }
-		if(this._currAnim == -1){ this._currAnim = 0; }
-		var currAnim = this._anims[this._currAnim];
-		if( currAnim ) {
-			if( !currAnim._active || currAnim._paused ) {
-				this.play();
-			} else {
-				this.pause();
-			}
-		}
-		return this; // dojo.lfx.Chain
-	},
-	
-	stop: function(){
-		// summary: Stops the running animations.
-		var currAnim = this._anims[this._currAnim];
-		if(currAnim){
-			currAnim.stop();
-			this.fire("onStop", [this._currAnim]);
-		}
-		return currAnim; // dojo.lfx.IAnimation
-	},
-	
-	// private methods
-	_playNext: function(){
-		if( this._currAnim == -1 || this._anims.length == 0 ) { return this; }
-		this._currAnim++;
-		if( this._anims[this._currAnim] ){
-			this._anims[this._currAnim].play(null, true);
-		}
-		return this; // dojo.lfx.Chain
 	}
-});
-
-dojo.lfx.combine = function(/*dojo.lfx.IAnimation...*/ animations){
-	// summary: Convenience function.  Returns a dojo.lfx.Combine created
-	//			using the animations passed in.
+	return this;
+}, stop:function () {
+	var currAnim = this._anims[this._currAnim];
+	if (currAnim) {
+		currAnim.stop();
+		this.fire("onStop", [this._currAnim]);
+	}
+	return currAnim;
+}, _playNext:function () {
+	if (this._currAnim == -1 || this._anims.length == 0) {
+		return this;
+	}
+	this._currAnim++;
+	if (this._anims[this._currAnim]) {
+		this._anims[this._currAnim].play(null, true);
+	}
+	return this;
+}});
+dojo.lfx.combine = function (animations) {
 	var anims = arguments;
-	if(dojo.lang.isArray(arguments[0])){
-		/* animations: dojo.lfx.IAnimation[]
-		   pId: a */
+	if (dojo.lang.isArray(arguments[0])) {
 		anims = arguments[0];
 	}
-	if(anims.length == 1){ return anims[0]; }
-	return new dojo.lfx.Combine(anims); // dojo.lfx.Combine
-}
-
-dojo.lfx.chain = function(/*dojo.lfx.IAnimation...*/ animations){
-	// summary: Convenience function.  Returns a dojo.lfx.Chain created
-	//			using the animations passed in.
+	if (anims.length == 1) {
+		return anims[0];
+	}
+	return new dojo.lfx.Combine(anims);
+};
+dojo.lfx.chain = function (animations) {
 	var anims = arguments;
-	if(dojo.lang.isArray(arguments[0])){
-		/* animations: dojo.lfx.IAnimation[]
-		   pId: a */
+	if (dojo.lang.isArray(arguments[0])) {
 		anims = arguments[0];
 	}
-	if(anims.length == 1){ return anims[0]; }
-	return new dojo.lfx.Chain(anims); // dojo.lfx.Combine
-}
+	if (anims.length == 1) {
+		return anims[0];
+	}
+	return new dojo.lfx.Chain(anims);
+};
 
+
 __CPAN_FILE__ src/lfx/html.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -62796,744 +42091,503 @@
 */
 
 dojo.provide("dojo.lfx.html");
-
 dojo.require("dojo.gfx.color");
 dojo.require("dojo.lfx.Animation");
 dojo.require("dojo.lang.array");
 dojo.require("dojo.html.display");
 dojo.require("dojo.html.color");
 dojo.require("dojo.html.layout");
-
-dojo.lfx.html._byId = function(nodes){
-	if(!nodes){ return []; }
-	if(dojo.lang.isArrayLike(nodes)){
-		if(!nodes.alreadyChecked){
+dojo.lfx.html._byId = function (nodes) {
+	if (!nodes) {
+		return [];
+	}
+	if (dojo.lang.isArrayLike(nodes)) {
+		if (!nodes.alreadyChecked) {
 			var n = [];
-			dojo.lang.forEach(nodes, function(node){
+			dojo.lang.forEach(nodes, function (node) {
 				n.push(dojo.byId(node));
 			});
 			n.alreadyChecked = true;
 			return n;
-		}else{
+		} else {
 			return nodes;
 		}
-	}else{
+	} else {
 		var n = [];
 		n.push(dojo.byId(nodes));
 		n.alreadyChecked = true;
 		return n;
 	}
-}
-
-dojo.lfx.html.propertyAnimation = function(	/*DOMNode[]*/ nodes, 
-											/*Object[]*/ propertyMap, 
-											/*int*/ duration,
-											/*function*/ easing,
-											/*Object*/ handlers){
-	// summary: Returns an animation that will transition the properties of "nodes"
-	//			depending how they are defined in "propertyMap".
-	// nodes: An array of DOMNodes or one DOMNode.
-	// propertyMap: { property: String, start: Decimal?, end: Decimal?, units: String? }
-	//				An array of objects defining properties to change.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// handlers: { handler: Function?, onstart: Function?, onstop: Function?, onanimate: Function? }
+};
+dojo.lfx.html.propertyAnimation = function (nodes, propertyMap, duration, easing, handlers) {
 	nodes = dojo.lfx.html._byId(nodes);
-
-	var targs = {
-		"propertyMap": propertyMap,
-		"nodes": nodes,
-		"duration": duration,
-		"easing": easing||dojo.lfx.easeDefault
-	};
-	
-	var setEmUp = function(args){
-		if(args.nodes.length==1){
-			// FIXME: we're only supporting start-value filling when one node is
-			// passed
-			
+	var targs = {"propertyMap":propertyMap, "nodes":nodes, "duration":duration, "easing":easing || dojo.lfx.easeDefault};
+	var setEmUp = function (args) {
+		if (args.nodes.length == 1) {
 			var pm = args.propertyMap;
-			if(!dojo.lang.isArray(args.propertyMap)){
-				// it's stupid to have to pack an array with a set of objects
-				// when you can just pass in an object list
+			if (!dojo.lang.isArray(args.propertyMap)) {
 				var parr = [];
-				for(var pname in pm){
+				for (var pname in pm) {
 					pm[pname].property = pname;
 					parr.push(pm[pname]);
 				}
 				pm = args.propertyMap = parr;
 			}
-			dojo.lang.forEach(pm, function(prop){
-				if(dj_undef("start", prop)){
-					if(prop.property != "opacity"){
+			dojo.lang.forEach(pm, function (prop) {
+				if (dj_undef("start", prop)) {
+					if (prop.property != "opacity") {
 						prop.start = parseInt(dojo.html.getComputedStyle(args.nodes[0], prop.property));
-					}else{
+					} else {
 						prop.start = dojo.html.getOpacity(args.nodes[0]);
 					}
 				}
 			});
 		}
-	}
-
-	var coordsAsInts = function(coords){
+	};
+	var coordsAsInts = function (coords) {
 		var cints = [];
-		dojo.lang.forEach(coords, function(c){ 
+		dojo.lang.forEach(coords, function (c) {
 			cints.push(Math.round(c));
 		});
 		return cints;
-	}
-
-	var setStyle = function(n, style){
+	};
+	var setStyle = function (n, style) {
 		n = dojo.byId(n);
-		if(!n || !n.style){ return; }
-		for(var s in style){
-			try{
-				if(s == "opacity"){
+		if (!n || !n.style) {
+			return;
+		}
+		for (var s in style) {
+			try {
+				if (s == "opacity") {
 					dojo.html.setOpacity(n, style[s]);
-				}else{
-						n.style[s] = style[s];
+				} else {
+					n.style[s] = style[s];
 				}
-			}catch(e){ dojo.debug(e); }
+			}
+			catch (e) {
+				dojo.debug(e);
+			}
 		}
-	}
-
-	var propLine = function(properties){
+	};
+	var propLine = function (properties) {
 		this._properties = properties;
 		this.diffs = new Array(properties.length);
-		dojo.lang.forEach(properties, function(prop, i){
-			// calculate the end - start to optimize a bit
-			if(dojo.lang.isFunction(prop.start)){
+		dojo.lang.forEach(properties, function (prop, i) {
+			if (dojo.lang.isFunction(prop.start)) {
 				prop.start = prop.start(prop, i);
 			}
-			if(dojo.lang.isFunction(prop.end)){
+			if (dojo.lang.isFunction(prop.end)) {
 				prop.end = prop.end(prop, i);
 			}
-			if(dojo.lang.isArray(prop.start)){
-				// don't loop through the arrays
+			if (dojo.lang.isArray(prop.start)) {
 				this.diffs[i] = null;
-			}else if(prop.start instanceof dojo.gfx.color.Color){
-				// save these so we don't have to call toRgb() every getValue() call
-				prop.startRgb = prop.start.toRgb();
-				prop.endRgb = prop.end.toRgb();
-			}else{
-				this.diffs[i] = prop.end - prop.start;
+			} else {
+				if (prop.start instanceof dojo.gfx.color.Color) {
+					prop.startRgb = prop.start.toRgb();
+					prop.endRgb = prop.end.toRgb();
+				} else {
+					this.diffs[i] = prop.end - prop.start;
+				}
 			}
 		}, this);
-
-		this.getValue = function(n){
+		this.getValue = function (n) {
 			var ret = {};
-			dojo.lang.forEach(this._properties, function(prop, i){
+			dojo.lang.forEach(this._properties, function (prop, i) {
 				var value = null;
-				if(dojo.lang.isArray(prop.start)){
-					// FIXME: what to do here?
-				}else if(prop.start instanceof dojo.gfx.color.Color){
-					value = (prop.units||"rgb") + "(";
-					for(var j = 0 ; j < prop.startRgb.length ; j++){
-						value += Math.round(((prop.endRgb[j] - prop.startRgb[j]) * n) + prop.startRgb[j]) + (j < prop.startRgb.length - 1 ? "," : "");
+				if (dojo.lang.isArray(prop.start)) {
+				} else {
+					if (prop.start instanceof dojo.gfx.color.Color) {
+						value = (prop.units || "rgb") + "(";
+						for (var j = 0; j < prop.startRgb.length; j++) {
+							value += Math.round(((prop.endRgb[j] - prop.startRgb[j]) * n) + prop.startRgb[j]) + (j < prop.startRgb.length - 1 ? "," : "");
+						}
+						value += ")";
+					} else {
+						value = ((this.diffs[i]) * n) + prop.start + (prop.property != "opacity" ? prop.units || "px" : "");
 					}
-					value += ")";
-				}else{
-					value = ((this.diffs[i]) * n) + prop.start + (prop.property != "opacity" ? prop.units||"px" : "");
 				}
 				ret[dojo.html.toCamelCase(prop.property)] = value;
 			}, this);
 			return ret;
-		}
-	}
-	
-	var anim = new dojo.lfx.Animation({
-			beforeBegin: function(){ 
-				setEmUp(targs); 
-				anim.curve = new propLine(targs.propertyMap);
-			},
-			onAnimate: function(propValues){
-				dojo.lang.forEach(targs.nodes, function(node){
-					setStyle(node, propValues);
-				});
-			}
-		},
-		targs.duration, 
-		null,
-		targs.easing
-	);
-	if(handlers){
-		for(var x in handlers){
-			if(dojo.lang.isFunction(handlers[x])){
+		};
+	};
+	var anim = new dojo.lfx.Animation({beforeBegin:function () {
+		setEmUp(targs);
+		anim.curve = new propLine(targs.propertyMap);
+	}, onAnimate:function (propValues) {
+		dojo.lang.forEach(targs.nodes, function (node) {
+			setStyle(node, propValues);
+		});
+	}}, targs.duration, null, targs.easing);
+	if (handlers) {
+		for (var x in handlers) {
+			if (dojo.lang.isFunction(handlers[x])) {
 				anim.connect(x, anim, handlers[x]);
 			}
 		}
 	}
-	
-	return anim; // dojo.lfx.Animation
-}
-
-dojo.lfx.html._makeFadeable = function(nodes){
-	var makeFade = function(node){
-		if(dojo.render.html.ie){
-			// only set the zoom if the "tickle" value would be the same as the
-			// default
-			if( (node.style.zoom.length == 0) &&
-				(dojo.html.getStyle(node, "zoom") == "normal") ){
-				// make sure the node "hasLayout"
-				// NOTE: this has been tested with larger and smaller user-set text
-				// sizes and works fine
+	return anim;
+};
+dojo.lfx.html._makeFadeable = function (nodes) {
+	var makeFade = function (node) {
+		if (dojo.render.html.ie) {
+			if ((node.style.zoom.length == 0) && (dojo.html.getStyle(node, "zoom") == "normal")) {
 				node.style.zoom = "1";
-				// node.style.zoom = "normal";
 			}
-			// don't set the width to auto if it didn't already cascade that way.
-			// We don't want to f anyones designs
-			if(	(node.style.width.length == 0) &&
-				(dojo.html.getStyle(node, "width") == "auto") ){
+			if ((node.style.width.length == 0) && (dojo.html.getStyle(node, "width") == "auto")) {
 				node.style.width = "auto";
 			}
 		}
-	}
-	if(dojo.lang.isArrayLike(nodes)){
+	};
+	if (dojo.lang.isArrayLike(nodes)) {
 		dojo.lang.forEach(nodes, makeFade);
-	}else{
+	} else {
 		makeFade(nodes);
 	}
-}
-
-dojo.lfx.html.fade = function(/*DOMNode[]*/ nodes,
-							  /*Object*/values,
-							  /*int?*/ duration,
-							  /*Function?*/ easing,
-							  /*Function?*/ callback){
-	// summary:Returns an animation that will fade the "nodes" from the start to end values passed.
-	// nodes: An array of DOMNodes or one DOMNode.
-	// values: { start: Decimal?, end: Decimal? }
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
+};
+dojo.lfx.html.fade = function (nodes, values, duration, easing, callback) {
 	nodes = dojo.lfx.html._byId(nodes);
-	var props = { property: "opacity" };
-	if(!dj_undef("start", values)){
+	var props = {property:"opacity"};
+	if (!dj_undef("start", values)) {
 		props.start = values.start;
-	}else{
-		props.start = function(){ return dojo.html.getOpacity(nodes[0]); };
+	} else {
+		props.start = function () {
+			return dojo.html.getOpacity(nodes[0]);
+		};
 	}
-
-	if(!dj_undef("end", values)){
+	if (!dj_undef("end", values)) {
 		props.end = values.end;
-	}else{
+	} else {
 		dojo.raise("dojo.lfx.html.fade needs an end value");
 	}
-
-	var anim = dojo.lfx.propertyAnimation(nodes, [ props ], duration, easing);
-	anim.connect("beforeBegin", function(){
+	var anim = dojo.lfx.propertyAnimation(nodes, [props], duration, easing);
+	anim.connect("beforeBegin", function () {
 		dojo.lfx.html._makeFadeable(nodes);
 	});
-	if(callback){
-		anim.connect("onEnd", function(){ callback(nodes, anim); });
+	if (callback) {
+		anim.connect("onEnd", function () {
+			callback(nodes, anim);
+		});
 	}
-
-	return anim; // dojo.lfx.Animation
-}
-
-dojo.lfx.html.fadeIn = function(/*DOMNode[]*/ nodes, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will fade "nodes" from its current opacity to fully opaque.
-	// nodes: An array of DOMNodes or one DOMNode.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
-	return dojo.lfx.html.fade(nodes, { end: 1 }, duration, easing, callback); // dojo.lfx.Animation
-}
-
-dojo.lfx.html.fadeOut = function(/*DOMNode[]*/ nodes, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will fade "nodes" from its current opacity to fully transparent.
-	// nodes: An array of DOMNodes or one DOMNode.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.	
-	return dojo.lfx.html.fade(nodes, { end: 0 }, duration, easing, callback); // dojo.lfx.Animation
-}
-
-dojo.lfx.html.fadeShow = function(/*DOMNode[]*/ nodes, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will fade "nodes" from transparent to opaque and shows
-	//			"nodes" at the end if it is hidden.
-	// nodes: An array of DOMNodes or one DOMNode.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.	
-	nodes=dojo.lfx.html._byId(nodes);
-	dojo.lang.forEach(nodes, function(node){
-		dojo.html.setOpacity(node, 0.0);
+	return anim;
+};
+dojo.lfx.html.fadeIn = function (nodes, duration, easing, callback) {
+	return dojo.lfx.html.fade(nodes, {end:1}, duration, easing, callback);
+};
+dojo.lfx.html.fadeOut = function (nodes, duration, easing, callback) {
+	return dojo.lfx.html.fade(nodes, {end:0}, duration, easing, callback);
+};
+dojo.lfx.html.fadeShow = function (nodes, duration, easing, callback) {
+	nodes = dojo.lfx.html._byId(nodes);
+	dojo.lang.forEach(nodes, function (node) {
+		dojo.html.setOpacity(node, 0);
 	});
-
 	var anim = dojo.lfx.html.fadeIn(nodes, duration, easing, callback);
-	anim.connect("beforeBegin", function(){ 
-		if(dojo.lang.isArrayLike(nodes)){
+	anim.connect("beforeBegin", function () {
+		if (dojo.lang.isArrayLike(nodes)) {
 			dojo.lang.forEach(nodes, dojo.html.show);
-		}else{
+		} else {
 			dojo.html.show(nodes);
 		}
 	});
-
-	return anim; // dojo.lfx.Animation
-}
-
-dojo.lfx.html.fadeHide = function(/*DOMNode[]*/ nodes, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will fade "nodes" from its current opacity to opaque and hides
-	//			"nodes" at the end.
-	// nodes: An array of DOMNodes or one DOMNode.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
-	var anim = dojo.lfx.html.fadeOut(nodes, duration, easing, function(){
-		if(dojo.lang.isArrayLike(nodes)){
+	return anim;
+};
+dojo.lfx.html.fadeHide = function (nodes, duration, easing, callback) {
+	var anim = dojo.lfx.html.fadeOut(nodes, duration, easing, function () {
+		if (dojo.lang.isArrayLike(nodes)) {
 			dojo.lang.forEach(nodes, dojo.html.hide);
-		}else{
+		} else {
 			dojo.html.hide(nodes);
 		}
-		if(callback){ callback(nodes, anim); }
+		if (callback) {
+			callback(nodes, anim);
+		}
 	});
-	
-	return anim; // dojo.lfx.Animation
-}
-
-dojo.lfx.html.wipeIn = function(/*DOMNode[]*/ nodes, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will show and wipe in "nodes".
-	// nodes: An array of DOMNodes or one DOMNode.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
+	return anim;
+};
+dojo.lfx.html.wipeIn = function (nodes, duration, easing, callback) {
 	nodes = dojo.lfx.html._byId(nodes);
 	var anims = [];
-
-	dojo.lang.forEach(nodes, function(node){
-		var oprop = {  };	// old properties of node (before we mucked w/them)
-		
-		// get node height, either it's natural height or it's height specified via style or class attributes
-		// (for FF, the node has to be (temporarily) rendered to measure height)
-		// TODO: should this offscreen code be part of dojo.html, so that getBorderBox() works on hidden nodes?
+	dojo.lang.forEach(nodes, function (node) {
+		var oprop = {};
 		var origTop, origLeft, origPosition;
-		with(node.style){
-			origTop=top; origLeft=left; origPosition=position;
-			top="-9999px"; left="-9999px"; position="absolute";
-			display="";
+		with (node.style) {
+			origTop = top;
+			origLeft = left;
+			origPosition = position;
+			top = "-9999px";
+			left = "-9999px";
+			position = "absolute";
+			display = "";
 		}
-		var height = dojo.html.getBorderBox(node).height;
-		with(node.style){
-			top=origTop; left=origLeft; position=origPosition;
-			display="none";
+		var nodeHeight = dojo.html.getBorderBox(node).height;
+		with (node.style) {
+			top = origTop;
+			left = origLeft;
+			position = origPosition;
+			display = "none";
 		}
-
-		var anim = dojo.lfx.propertyAnimation(node,
-			{	"height": {
-					start: 1, // 0 causes IE to display the whole panel
-					end: function(){ return height; } 
-				}
-			}, 
-			duration, 
-			easing);
-	
-		anim.connect("beforeBegin", function(){
+		var anim = dojo.lfx.propertyAnimation(node, {"height":{start:1, end:function () {
+			return nodeHeight;
+		}}}, duration, easing);
+		anim.connect("beforeBegin", function () {
 			oprop.overflow = node.style.overflow;
 			oprop.height = node.style.height;
-			with(node.style){
+			with (node.style) {
 				overflow = "hidden";
-				height = "1px"; // 0 causes IE to display the whole panel
+				height = "1px";
 			}
 			dojo.html.show(node);
 		});
-		
-		anim.connect("onEnd", function(){ 
-			with(node.style){
+		anim.connect("onEnd", function () {
+			with (node.style) {
 				overflow = oprop.overflow;
 				height = oprop.height;
 			}
-			if(callback){ callback(node, anim); }
+			if (callback) {
+				callback(node, anim);
+			}
 		});
 		anims.push(anim);
 	});
-	
-	return dojo.lfx.combine(anims); // dojo.lfx.Combine
-}
-
-dojo.lfx.html.wipeOut = function(/*DOMNode[]*/ nodes, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will wipe out and hide "nodes".
-	// nodes: An array of DOMNodes or one DOMNode.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
+	return dojo.lfx.combine(anims);
+};
+dojo.lfx.html.wipeOut = function (nodes, duration, easing, callback) {
 	nodes = dojo.lfx.html._byId(nodes);
 	var anims = [];
-	
-	dojo.lang.forEach(nodes, function(node){
-		var oprop = {  };	// old properties of node (before we mucked w/them)
-		var anim = dojo.lfx.propertyAnimation(node,
-			{	"height": {
-					start: function(){ return dojo.html.getContentBox(node).height; },
-					end: 1 // 0 causes IE to display the whole panel
-				} 
-			},
-			duration,
-			easing,
-			{
-				"beforeBegin": function(){
-					oprop.overflow = node.style.overflow;
-					oprop.height = node.style.height;
-					with(node.style){
-						overflow = "hidden";
-					}
-					dojo.html.show(node);
-				},
-				
-				"onEnd": function(){ 
-					dojo.html.hide(node);
-					with(node.style){
-						overflow = oprop.overflow;
-						height = oprop.height;
-					}
-					if(callback){ callback(node, anim); }
-				}
+	dojo.lang.forEach(nodes, function (node) {
+		var oprop = {};
+		var anim = dojo.lfx.propertyAnimation(node, {"height":{start:function () {
+			return dojo.html.getContentBox(node).height;
+		}, end:1}}, duration, easing, {"beforeBegin":function () {
+			oprop.overflow = node.style.overflow;
+			oprop.height = node.style.height;
+			with (node.style) {
+				overflow = "hidden";
 			}
-		);
+			dojo.html.show(node);
+		}, "onEnd":function () {
+			dojo.html.hide(node);
+			with (node.style) {
+				overflow = oprop.overflow;
+				height = oprop.height;
+			}
+			if (callback) {
+				callback(node, anim);
+			}
+		}});
 		anims.push(anim);
 	});
-
-	return dojo.lfx.combine(anims); // dojo.lfx.Combine
-}
-
-dojo.lfx.html.slideTo = function(/*DOMNode*/ nodes,
-								 /*Object*/ coords,
-								 /*int?*/ duration,
-								 /*Function?*/ easing,
-								 /*Function?*/ callback){
-	// summary: Returns an animation that will slide "nodes" from its current position to
-	//			the position defined in "coords".
-	// nodes: An array of DOMNodes or one DOMNode.
-	// coords: { top: Decimal?, left: Decimal? }
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
+	return dojo.lfx.combine(anims);
+};
+dojo.lfx.html.slideTo = function (nodes, coords, duration, easing, callback) {
 	nodes = dojo.lfx.html._byId(nodes);
 	var anims = [];
 	var compute = dojo.html.getComputedStyle;
-	
-	if(dojo.lang.isArray(coords)){
-		/* coords: Array
-		   pId: a */
-		dojo.deprecated('dojo.lfx.html.slideTo(node, array)', 'use dojo.lfx.html.slideTo(node, {top: value, left: value});', '0.5');
-		coords = { top: coords[0], left: coords[1] };
+	if (dojo.lang.isArray(coords)) {
+		dojo.deprecated("dojo.lfx.html.slideTo(node, array)", "use dojo.lfx.html.slideTo(node, {top: value, left: value});", "0.5");
+		coords = {top:coords[0], left:coords[1]};
 	}
-	dojo.lang.forEach(nodes, function(node){
+	dojo.lang.forEach(nodes, function (node) {
 		var top = null;
 		var left = null;
-		
-		var init = (function(){
+		var init = (function () {
 			var innerNode = node;
-			return function(){
-				var pos = compute(innerNode, 'position');
-				top = (pos == 'absolute' ? node.offsetTop : parseInt(compute(node, 'top')) || 0);
-				left = (pos == 'absolute' ? node.offsetLeft : parseInt(compute(node, 'left')) || 0);
-
-				if (!dojo.lang.inArray(['absolute', 'relative'], pos)) {
+			return function () {
+				var pos = compute(innerNode, "position");
+				top = (pos == "absolute" ? node.offsetTop : parseInt(compute(node, "top")) || 0);
+				left = (pos == "absolute" ? node.offsetLeft : parseInt(compute(node, "left")) || 0);
+				if (!dojo.lang.inArray(["absolute", "relative"], pos)) {
 					var ret = dojo.html.abs(innerNode, true);
-					dojo.html.setStyleAttributes(innerNode, "position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
+					dojo.html.setStyleAttributes(innerNode, "position:absolute;top:" + ret.y + "px;left:" + ret.x + "px;");
 					top = ret.y;
 					left = ret.x;
 				}
-			}
+			};
 		})();
 		init();
-		
-		var anim = dojo.lfx.propertyAnimation(node,
-			{	"top": { start: top, end: (coords.top||0) },
-				"left": { start: left, end: (coords.left||0)  }
-			},
-			duration,
-			easing,
-			{ "beforeBegin": init }
-		);
-
-		if(callback){
-			anim.connect("onEnd", function(){ callback(nodes, anim); });
+		var anim = dojo.lfx.propertyAnimation(node, {"top":{start:top, end:(coords.top || 0)}, "left":{start:left, end:(coords.left || 0)}}, duration, easing, {"beforeBegin":init});
+		if (callback) {
+			anim.connect("onEnd", function () {
+				callback(nodes, anim);
+			});
 		}
-
 		anims.push(anim);
 	});
-	
-	return dojo.lfx.combine(anims); // dojo.lfx.Combine
-}
-
-dojo.lfx.html.slideBy = function(/*DOMNode*/ nodes, /*Object*/ coords, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will slide "nodes" from its current position
-	//			to its current position plus the numbers defined in "coords".
-	// nodes: An array of DOMNodes or one DOMNode.
-	// coords: { top: Decimal?, left: Decimal? }
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
+	return dojo.lfx.combine(anims);
+};
+dojo.lfx.html.slideBy = function (nodes, coords, duration, easing, callback) {
 	nodes = dojo.lfx.html._byId(nodes);
 	var anims = [];
 	var compute = dojo.html.getComputedStyle;
-
-	if(dojo.lang.isArray(coords)){
-		/* coords: Array
-		   pId: a */
-		dojo.deprecated('dojo.lfx.html.slideBy(node, array)', 'use dojo.lfx.html.slideBy(node, {top: value, left: value});', '0.5');
-		coords = { top: coords[0], left: coords[1] };
+	if (dojo.lang.isArray(coords)) {
+		dojo.deprecated("dojo.lfx.html.slideBy(node, array)", "use dojo.lfx.html.slideBy(node, {top: value, left: value});", "0.5");
+		coords = {top:coords[0], left:coords[1]};
 	}
-
-	dojo.lang.forEach(nodes, function(node){
+	dojo.lang.forEach(nodes, function (node) {
 		var top = null;
 		var left = null;
-		
-		var init = (function(){
+		var init = (function () {
 			var innerNode = node;
-			return function(){
-				var pos = compute(innerNode, 'position');
-				top = (pos == 'absolute' ? node.offsetTop : parseInt(compute(node, 'top')) || 0);
-				left = (pos == 'absolute' ? node.offsetLeft : parseInt(compute(node, 'left')) || 0);
-
-				if (!dojo.lang.inArray(['absolute', 'relative'], pos)) {
+			return function () {
+				var pos = compute(innerNode, "position");
+				top = (pos == "absolute" ? node.offsetTop : parseInt(compute(node, "top")) || 0);
+				left = (pos == "absolute" ? node.offsetLeft : parseInt(compute(node, "left")) || 0);
+				if (!dojo.lang.inArray(["absolute", "relative"], pos)) {
 					var ret = dojo.html.abs(innerNode, true);
-					dojo.html.setStyleAttributes(innerNode, "position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
+					dojo.html.setStyleAttributes(innerNode, "position:absolute;top:" + ret.y + "px;left:" + ret.x + "px;");
 					top = ret.y;
 					left = ret.x;
 				}
-			}
+			};
 		})();
 		init();
-		
-		var anim = dojo.lfx.propertyAnimation(node,
-			{
-				"top": { start: top, end: top+(coords.top||0) },
-				"left": { start: left, end: left+(coords.left||0) }
-			},
-			duration,
-			easing).connect("beforeBegin", init);
-
-		if(callback){
-			anim.connect("onEnd", function(){ callback(nodes, anim); });
+		var anim = dojo.lfx.propertyAnimation(node, {"top":{start:top, end:top + (coords.top || 0)}, "left":{start:left, end:left + (coords.left || 0)}}, duration, easing).connect("beforeBegin", init);
+		if (callback) {
+			anim.connect("onEnd", function () {
+				callback(nodes, anim);
+			});
 		}
-
 		anims.push(anim);
 	});
-
-	return dojo.lfx.combine(anims); // dojo.lfx.Combine
-}
-
-dojo.lfx.html.explode = function(/*DOMNode*/ start,
-								 /*DOMNode*/ endNode,
-								 /*int?*/ duration,
-								 /*Function?*/ easing,
-								 /*Function?*/ callback){
-	// summary: Returns an animation that will 
-	// start:
-	// endNode:
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
+	return dojo.lfx.combine(anims);
+};
+dojo.lfx.html.explode = function (start, endNode, duration, easing, callback) {
 	var h = dojo.html;
 	start = dojo.byId(start);
 	endNode = dojo.byId(endNode);
 	var startCoords = h.toCoordinateObject(start, true);
 	var outline = document.createElement("div");
 	h.copyStyle(outline, endNode);
-	if(endNode.explodeClassName){ outline.className = endNode.explodeClassName; }
-	with(outline.style){
+	if (endNode.explodeClassName) {
+		outline.className = endNode.explodeClassName;
+	}
+	with (outline.style) {
 		position = "absolute";
 		display = "none";
-		// border = "1px solid black";
 		var backgroundStyle = h.getStyle(start, "background-color");
 		backgroundColor = backgroundStyle ? backgroundStyle.toLowerCase() : "transparent";
 		backgroundColor = (backgroundColor == "transparent") ? "rgb(221, 221, 221)" : backgroundColor;
 	}
 	dojo.body().appendChild(outline);
-
-	with(endNode.style){
+	with (endNode.style) {
 		visibility = "hidden";
 		display = "block";
 	}
 	var endCoords = h.toCoordinateObject(endNode, true);
-	with(endNode.style){
+	with (endNode.style) {
 		display = "none";
 		visibility = "visible";
 	}
-
-	var props = { opacity: { start: 0.5, end: 1.0 } };
-	dojo.lang.forEach(["height", "width", "top", "left"], function(type){
-		props[type] = { start: startCoords[type], end: endCoords[type] }
+	var props = {opacity:{start:0.5, end:1}};
+	dojo.lang.forEach(["height", "width", "top", "left"], function (type) {
+		props[type] = {start:startCoords[type], end:endCoords[type]};
 	});
-	
-	var anim = new dojo.lfx.propertyAnimation(outline, 
-		props,
-		duration,
-		easing,
-		{
-			"beforeBegin": function(){
-				h.setDisplay(outline, "block");
-			},
-			"onEnd": function(){
-				h.setDisplay(endNode, "block");
-				outline.parentNode.removeChild(outline);
-			}
-		}
-	);
-
-	if(callback){
-		anim.connect("onEnd", function(){ callback(endNode, anim); });
+	var anim = new dojo.lfx.propertyAnimation(outline, props, duration, easing, {"beforeBegin":function () {
+		h.setDisplay(outline, "block");
+	}, "onEnd":function () {
+		h.setDisplay(endNode, "block");
+		outline.parentNode.removeChild(outline);
+	}});
+	if (callback) {
+		anim.connect("onEnd", function () {
+			callback(endNode, anim);
+		});
 	}
-	return anim; // dojo.lfx.Animation
-}
-
-dojo.lfx.html.implode = function(/*DOMNode*/ startNode,
-								 /*DOMNode*/ end,
-								 /*int?*/ duration,
-								 /*Function?*/ easing,
-								 /*Function?*/ callback){
-	// summary: Returns an animation that will 
-	// startNode:
-	// end:
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
+	return anim;
+};
+dojo.lfx.html.implode = function (startNode, end, duration, easing, callback) {
 	var h = dojo.html;
 	startNode = dojo.byId(startNode);
 	end = dojo.byId(end);
 	var startCoords = dojo.html.toCoordinateObject(startNode, true);
 	var endCoords = dojo.html.toCoordinateObject(end, true);
-
 	var outline = document.createElement("div");
 	dojo.html.copyStyle(outline, startNode);
-	if (startNode.explodeClassName) { outline.className = startNode.explodeClassName; }
+	if (startNode.explodeClassName) {
+		outline.className = startNode.explodeClassName;
+	}
 	dojo.html.setOpacity(outline, 0.3);
-	with(outline.style){
+	with (outline.style) {
 		position = "absolute";
 		display = "none";
 		backgroundColor = h.getStyle(startNode, "background-color").toLowerCase();
 	}
 	dojo.body().appendChild(outline);
-
-	var props = { opacity: { start: 1.0, end: 0.5 } };
-	dojo.lang.forEach(["height", "width", "top", "left"], function(type){
-		props[type] = { start: startCoords[type], end: endCoords[type] }
+	var props = {opacity:{start:1, end:0.5}};
+	dojo.lang.forEach(["height", "width", "top", "left"], function (type) {
+		props[type] = {start:startCoords[type], end:endCoords[type]};
 	});
-	
-	var anim = new dojo.lfx.propertyAnimation(outline,
-		props,
-		duration,
-		easing,
-		{
-			"beforeBegin": function(){
-				dojo.html.hide(startNode);
-				dojo.html.show(outline);
-			},
-			"onEnd": function(){
-				outline.parentNode.removeChild(outline);
-			}
-		}
-	);
-
-	if(callback){
-		anim.connect("onEnd", function(){ callback(startNode, anim); });
+	var anim = new dojo.lfx.propertyAnimation(outline, props, duration, easing, {"beforeBegin":function () {
+		dojo.html.hide(startNode);
+		dojo.html.show(outline);
+	}, "onEnd":function () {
+		outline.parentNode.removeChild(outline);
+	}});
+	if (callback) {
+		anim.connect("onEnd", function () {
+			callback(startNode, anim);
+		});
 	}
-	return anim; // dojo.lfx.Animation
-}
-
-dojo.lfx.html.highlight = function(/*DOMNode[]*/ nodes,
-								   /*dojo.gfx.color.Color*/ startColor,
-								   /*int?*/ duration,
-								   /*Function?*/ easing,
-								   /*Function?*/ callback){
-	// summary: Returns an animation that will set the background color
-	//			of "nodes" to startColor and transition it to "nodes"
-	//			original color.
-	// startColor: Color to transition from.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
+	return anim;
+};
+dojo.lfx.html.highlight = function (nodes, startColor, duration, easing, callback) {
 	nodes = dojo.lfx.html._byId(nodes);
 	var anims = [];
-
-	dojo.lang.forEach(nodes, function(node){
+	dojo.lang.forEach(nodes, function (node) {
 		var color = dojo.html.getBackgroundColor(node);
 		var bg = dojo.html.getStyle(node, "background-color").toLowerCase();
 		var bgImage = dojo.html.getStyle(node, "background-image");
 		var wasTransparent = (bg == "transparent" || bg == "rgba(0, 0, 0, 0)");
-		while(color.length > 3) { color.pop(); }
-
+		while (color.length > 3) {
+			color.pop();
+		}
 		var rgb = new dojo.gfx.color.Color(startColor);
 		var endRgb = new dojo.gfx.color.Color(color);
-
-		var anim = dojo.lfx.propertyAnimation(node, 
-			{ "background-color": { start: rgb, end: endRgb } }, 
-			duration, 
-			easing,
-			{
-				"beforeBegin": function(){ 
-					if(bgImage){
-						node.style.backgroundImage = "none";
-					}
-					node.style.backgroundColor = "rgb(" + rgb.toRgb().join(",") + ")";
-				},
-				"onEnd": function(){ 
-					if(bgImage){
-						node.style.backgroundImage = bgImage;
-					}
-					if(wasTransparent){
-						node.style.backgroundColor = "transparent";
-					}
-					if(callback){
-						callback(node, anim);
-					}
-				}
+		var anim = dojo.lfx.propertyAnimation(node, {"background-color":{start:rgb, end:endRgb}}, duration, easing, {"beforeBegin":function () {
+			if (bgImage) {
+				node.style.backgroundImage = "none";
 			}
-		);
-
+			node.style.backgroundColor = "rgb(" + rgb.toRgb().join(",") + ")";
+		}, "onEnd":function () {
+			if (bgImage) {
+				node.style.backgroundImage = bgImage;
+			}
+			if (wasTransparent) {
+				node.style.backgroundColor = "transparent";
+			}
+			if (callback) {
+				callback(node, anim);
+			}
+		}});
 		anims.push(anim);
 	});
-	return dojo.lfx.combine(anims); // dojo.lfx.Combine
-}
-
-dojo.lfx.html.unhighlight = function(/*DOMNode[]*/ nodes,
-									 /*dojo.gfx.color.Color*/ endColor,
-									 /*int?*/ duration,
-									 /*Function?*/ easing,
-									 /*Function?*/ callback){
-	// summary: Returns an animation that will transition "nodes" background color
-	//			from its current color to "endColor".
-	// endColor: Color to transition to.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
+	return dojo.lfx.combine(anims);
+};
+dojo.lfx.html.unhighlight = function (nodes, endColor, duration, easing, callback) {
 	nodes = dojo.lfx.html._byId(nodes);
 	var anims = [];
-
-	dojo.lang.forEach(nodes, function(node){
+	dojo.lang.forEach(nodes, function (node) {
 		var color = new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
 		var rgb = new dojo.gfx.color.Color(endColor);
-
 		var bgImage = dojo.html.getStyle(node, "background-image");
-		
-		var anim = dojo.lfx.propertyAnimation(node, 
-			{ "background-color": { start: color, end: rgb } },
-			duration, 
-			easing,
-			{
-				"beforeBegin": function(){ 
-					if(bgImage){
-						node.style.backgroundImage = "none";
-					}
-					node.style.backgroundColor = "rgb(" + color.toRgb().join(",") + ")";
-				},
-				"onEnd": function(){ 
-					if(callback){
-						callback(node, anim);
-					}
-				}
+		var anim = dojo.lfx.propertyAnimation(node, {"background-color":{start:color, end:rgb}}, duration, easing, {"beforeBegin":function () {
+			if (bgImage) {
+				node.style.backgroundImage = "none";
 			}
-		);
+			node.style.backgroundColor = "rgb(" + color.toRgb().join(",") + ")";
+		}, "onEnd":function () {
+			if (callback) {
+				callback(node, anim);
+			}
+		}});
 		anims.push(anim);
 	});
-	return dojo.lfx.combine(anims); // dojo.lfx.Combine
-}
-
+	return dojo.lfx.combine(anims);
+};
 dojo.lang.mixin(dojo.lfx, dojo.lfx.html);
 
+
 __CPAN_FILE__ src/lfx/rounded.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -63545,509 +42599,439 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.lfx.rounded");
-
-dojo.require("dojo.lang.common");
-dojo.require("dojo.html.common");
-dojo.require("dojo.html.style");
-dojo.require("dojo.html.display");
-dojo.require("dojo.html.layout");
-
-/*	Port of curvyCorners, by Cameron Cooke and Tim Hutchison.
- *	Original port done by Brian Lucas.
- *	Refactor and function by trt.
- */
-dojo.lfx.rounded = function(/* object */settings /* ... */){
-	//	summary
-	//	Creates a set of rounded corners based on settings.
-	var options={
-		validTags:settings.validTags || ["div"],					//	tags we can apply this to
-		autoPad:settings.autoPad!=null ? settings.autoPad : true,		//	automatically pad
-		antiAlias:settings.antiAlias!=null ? settings.antiAlias : true,	//	anti-alias corners
-		radii:{ 	//	corner radii
-			tl:(settings.tl && settings.tl.radius!=null) ? settings.tl.radius:5, 
-			tr:(settings.tr && settings.tr.radius!=null) ? settings.tr.radius:5, 
-			bl:(settings.bl && settings.bl.radius!=null) ? settings.bl.radius:5, 
-			br:(settings.br && settings.br.radius!=null) ? settings.br.radius:5 
-		}
-	};
-
-	//	get the node list to operate on.
-	var nodes;
-	if(typeof(arguments[1]) == "string"){
-		//	a CSS classname was passed, grab a node list.
-		nodes=dojo.html.getElementsByClass(arguments[1]);
-	} else if(dojo.lang.isArrayLike(arguments[1])){
-		//	we assume that the second argument is an array of nodes to apply this to.
-		nodes=arguments[1];
-		for(var i=0; i<nodes.length; i++){ nodes[i]=dojo.byId(nodes[i]); }
-	}
-	if(nodes.length == 0) return;	//	don't bother.
-
-	////////////////////////////////////////////////////////////////////
-	for(var i=0; i<nodes.length; i++){
-		dojo.lfx.rounded.applyCorners(options, nodes[i]);
-	}
-};
-
-//	can call this directly if one wants.
-dojo.lfx.rounded.applyCorners = function(/* object */options, /* HTMLElement */node){
-	//	summary
-	//	Rounds corners based on options to passed node.
-	var top = null;
-	var bottom = null;
-	var contentNode = null;
-	var fns=dojo.lfx.rounded._fns;
-
-	//	node details
-	var width = node.offsetWidth;
-	var height = node.offsetHeight;
-	var borderWidth = parseInt(dojo.html.getComputedStyle(node, "border-top-width"));
-	var borderColor = dojo.html.getComputedStyle(node, "border-top-color");
-	var color = dojo.html.getComputedStyle(node, "background-color");
-	var bgImage = dojo.html.getComputedStyle(node, "background-image");
-	var position = dojo.html.getComputedStyle(node, "position");
-	var padding = parseInt(dojo.html.getComputedStyle(node, "padding-top"));
-
-	//	formatting details
-	//	TODO: use Dojo equivilents for these if exists.
-	var format={
-		height : height,
-		width : width,
-		borderWidth : borderWidth,
-		color : fns.getRGB(color),
-		padding : padding,
-		borderColor : fns.getRGB(borderColor),
-		borderString : borderWidth + "px" + " solid " + fns.getRGB(borderColor),
-		bgImage : ((bgImage != "none")? bgImage : ""),
-		content : node.innerHTML
-	};
-
-	if(!dojo.html.isPositionAbsolute(node)){ node.style.position="relative"; }
-	node.style.padding="0px";
-	if(dojo.render.html.ie && width=="auto" && height=="auto"){ node.style.width="100%"; }
-	if(options.autoPad && format.padding>0){
-		node.innerHTML="";
-	}
-
-	var topHeight=Math.max(options.radii.tl, options.radii.tr);
-	var bottomHeight=Math.max(options.radii.bl, options.radii.br);
-
-	//	build the containers.
-	if(options.radii.tl || options.radii.tr){
-		top = document.createElement("div");
-		top.style.width="100%";
-		top.style.fontSize="1px";
-		top.style.overflow="hidden";
-		top.style.position="absolute";
-		top.style.paddingLeft=format.borderWidth+"px";
-		top.style.paddingRight=format.borderWidth+"px";
-		top.style.height=topHeight+"px";
-		top.style.top=(0-topHeight)+"px";
-		top.style.left=(0-format.borderWidth)+"px";
-		node.appendChild(top);
-	}
-	if(options.radii.bl || options.radii.br){	//	bottom
-		bottom = document.createElement("div");
-		bottom.style.width="100%";
-		bottom.style.fontSize="1px";
-		bottom.style.overflow="hidden";
-		bottom.style.position="absolute";
-		bottom.style.paddingLeft=format.borderWidth+"px";
-		bottom.style.paddingRight=format.borderWidth+"px";
-		bottom.style.height=bottomHeight+"px";
-		bottom.style.bottom=(0-bottomHeight)+"px";
-		bottom.style.left=(0-format.borderWidth)+"px";
-		node.appendChild(bottom);
-	}
-
-	//	turn off the borders
-	if(top){ node.style.borderTopWidth = "0px"; }
-	if(bottom){ node.style.borderBottomWidth = "0px"; }
-
-	//	do the corners
-	var corners = ["tr", "tl", "br", "bl"];
-	for(var i=0; i<corners.length; i++){
-		var cc=corners[i];
-		if(options.radii[cc]==0){
-			//	fill up the space with a div.
-			if((cc.charAt(0)=="t"&&top) || (cc.charAt(0)=="b"&&bottom)){
-				var corner=document.createElement("div");
-				corner.style.position="relative";
-				corner.style.fontSize="1px;";
-				corner.style.overflow="hidden";
-				if(format.bgImage==""){
-					corner.style.backgroundColor=format.color;
-				} else {
-					corner.style.backgroundImage=format.bgImage;
-				}
-				switch(cc){
-					case "tl":{
-						corner.style.height=topHeight-format.borderWidth+"px";
-						corner.style.marginRight=options.radii[cc]-(format.borderWidth*2)+"px";
-						corner.style.borderLeft=format.borderString;
-						corner.style.borderTop=format.borderString;
-						corner.style.left=-format.borderWidth+"px";
-						break;
-					}
-					case "tr":{
-						corner.style.height=topHeight-format.borderWidth+"px";
-						corner.style.marginLeft=options.radii[cc]-(format.borderWidth*2)+"px";
-						corner.style.borderRight=format.borderString;
-						corner.style.borderTop=format.borderString;
-						corner.style.backgroundPosition="-"+(topHeight-format.borderWidth)+"px 0px";
-						corner.style.left=format.borderWidth+"px";
-						break;
-					}
-					case "bl":{
-						corner.style.height=bottomHeight-format.borderWidth+"px";
-						corner.style.marginRight=options.radii[cc]-(format.borderWidth*2)+"px";
-						corner.style.borderLeft=format.borderString;
-						corner.style.borderBottom=format.borderString;
-						corner.style.left=format.borderWidth+"px";
-						corner.style.backgroundPosition="-"+format.borderWidth+"px -"+(format.height+(bottomHeight+format.borderWidth))+"px";
-						break;
-					}
-					case "br":{
-						corner.style.height=bottomHeight-format.borderWidth+"px";
-						corner.style.marginLeft=options.radii[cc]-(format.borderWidth*2)+"px";
-						corner.style.borderRight=format.borderString;
-						corner.style.borderBottom=format.borderString;
-						corner.style.left=format.borderWidth+"px";
-						corner.style.backgroundPosition="-"+(bottomHeight+format.borderWidth)+"px -"+(format.height+(bottomHeight+format.borderWidth))+"px";
-						break;
-					}
-				}
-			}
-		} else {
-			//	NB: this version will not do the caching they built into the
-			//		current version of curvyCorners.
-			var corner=document.createElement("div");
-			corner.style.height=options.radii[cc]+"px";
-			corner.style.width=options.radii[cc]+"px";
-			corner.style.position="absolute";
-			corner.style.fontSize="1px";
-			corner.style.overflow="hidden";
-
-			var borderRadius=Math.floor(options.radii[cc] - format.borderWidth);
-			for(var x=0, j=options.radii[cc]; x<j; x++){
-				//	figure out y coords
-				var y1=Math.floor(Math.sqrt(Math.pow(borderRadius,2)-Math.pow((x+1),2)))-1;
-				if((x+1) >= borderRadius){ var y1=-1; }
-				var y2=Math.ceil(Math.sqrt(Math.pow(borderRadius,2)-Math.pow(x,2)));
-				if(x >= borderRadius){ y2=-1; }
-				var y3=Math.floor(Math.sqrt(Math.pow(j,2)-Math.pow((x+1),2)))-1;
-				if((x+1) >= j){ y3=-1; }
-				var y4=Math.ceil(Math.sqrt(Math.pow(j, 2)-Math.pow(x, 2)));
-				if(x >= j){ y4=-1; }
-
-				//	start drawing
-				if(y1 > -1){
-					fns.draw(x, 0, format.color, 100, (y1+1), corner, -1, j, topHeight, format);
-				}
-
-				// cycle the y-axis
-				for(var y=(y1+1); y<y2; y++){
-					if(options.antiAlias){
-						if(format.bgImage != ""){
-							var fract=fns.fraction(x, y, borderRadius)*100;
-							if(fract < 30){
-								fns.draw(x, y, format.borderColor, 100, 1, corner, 0, options.radii[cc], topHeight, format);
-							} else {
-								fns.draw(x, y, format.borderColor, 100, 1, corner, -1, options.radii[cc], topHeight, format);
-							}
-						} else {
-							var clr=fns.blend(format.color, format.borderColor, fns.fraction(x, y, borderRadius));
-							fns.draw(x, y, clr, 100, 1, corner, 0, options.radii[cc], topHeight, format);
-						}
-					}
-				}
-
-				//	bar for the border
-				if(options.antiAlias){
-					if(y3 >= y2){
-						if(y2 == -1){ y2 = 0; }
-						fns.draw(x, y2, format.borderColor, 100, (y3-y2+1), corner, 0, 0, topHeight, format)
-					} else {
-						if(y3 >= y1){
-							fns.draw(x, (y1+1), format.borderColor, 100, (y3-y1), corner, 0, 0, topHeight, format);
-						}
-					}
-					for(var y=(y3+1); y<y4; y++){
-						fns.draw(x, y, format.borderColor, (fns.fraction(x, y, j)*100), 1, corner, (format.borderWidth>0 ? 0:-1), options.radii[cc], topHeight, format);
-					}
-				} else {
-					y3=y1;
-				}
-			}
-
-			//	reposition pixels if not the bottom right.
-			if(cc != "br"){
-				for(var t=0, k=corner.childNodes.length; t<k; t++){
-					var bar=corner.childNodes[t];
-					var barTop = parseInt(dojo.html.getComputedStyle(bar, "top"));
-					var barLeft = parseInt(dojo.html.getComputedStyle(bar, "left"));
-					var barHeight = parseInt(dojo.html.getComputedStyle(bar, "height"));
-
-					//	reposition.
-					if(cc.charAt(1)=="l"){ 
-						bar.style.left = (options.radii[cc]-barLeft-1)+"px"; 
-					}
-					if(cc=="tr"){
-						bar.style.top = (options.radii[cc]-barHeight-barTop)+"px";
-						bar.style.backgroundPosition="-"+Math.abs((format.width-options.radii[cc]+format.borderWidth)+barLeft)
-							+"px -"+Math.abs(options.radii[cc]-barHeight-barTop-format.borderWidth)+"px";
-					} else if (cc=="tl"){
-						bar.style.top = (options.radii[cc]-barHeight-barTop)+"px";
-						bar.style.backgroundPosition="-"+Math.abs((options.radii[cc]-barLeft-1)-format.borderWidth)
-							+"px -"+Math.abs(options.radii[cc]-barHeight-barTop-format.borderWidth)+"px";
-					} else {
-						bar.style.backgroundPosition="-"+Math.abs((options.radii[cc]+barLeft)+format.borderWidth)
-							+"px -"+Math.abs((format.height+options.radii[cc]+barTop)-format.borderWidth)+"px";
-					}
-				}
-			}
-		}
-
-		if(corner){
-			//	position the container.
-			var psn=[];
-			if(cc.charAt(0)=="t"){ psn.push("top"); }
-			else { psn.push("bottom"); }
-			if(cc.charAt(1)=="l"){ psn.push("left"); }
-			else { psn.push("right"); }
-			
-			if(corner.style.position=="absolute"){
-				for(var z=0; z<psn.length; z++){ corner.style[psn[z]]="0px"; }
-			}
-			
-			if(psn[0]=="top"){ 
-				if(top){ top.appendChild(corner); }
-			} else {
-				if(bottom){ bottom.appendChild(corner); }
-			}
-		}
-	}
-
-	//	draw fillers.
-	var diff={ 
-		t: Math.abs(options.radii.tl - options.radii.tr),
-		b: Math.abs(options.radii.bl - options.radii.br)
-	};
-	for(var z in diff){
-		var smaller=(options.radii[z+"l"]<options.radii[z+"r"] ? z+"l":z+"r");
-		var filler=document.createElement("div");
-		filler.style.height=diff[z]+"px";
-		filler.style.width=options.radii[smaller]+"px";
-		filler.style.position="absolute";
-		filler.style.fontSize="1px";
-		filler.style.overflow="hidden";
-		filler.style.backgroundColor=format.color;
-		switch(smaller){
-			case "tl":{
-				filler.style.bottom="0px";
-				filler.style.left="0px";
-				filler.style.borderLeft=format.borderString;
-				top.appendChild(filler);
-				break;
-			}
-			case "tr":{
-				filler.style.bottom="0px";
-				filler.style.right="0px";
-				filler.style.borderRight=format.borderString;
-				top.appendChild(filler);
-				break;
-			}
-			case "bl":{
-				filler.style.top="0px";
-				filler.style.left="0px";
-				filler.style.borderLeft=format.borderString;
-				bottom.appendChild(filler);
-				break;
-			}
-			case "br":{
-				filler.style.top="0px";
-				filler.style.right="0px";
-				filler.style.borderRight=format.borderString;
-				bottom.appendChild(filler);
-				break;
-			}
-		}
-
-		var fillBar=document.createElement("div");
-		fillBar.style.position="relative";
-		fillBar.style.fontSize="1px";
-		fillBar.style.overflow="hidden";
-		fillBar.style.backgroundColor=format.color;
-		fillBar.style.backgroundImage=format.bgImage;
-		if(z=="t"){
-			if(top){
-				if(options.radii.tl && options.radii.tr){
-					fillBar.style.height=(topHeight-format.borderWidth) + "px";
-					fillBar.style.marginLeft=(options.radii.tl-format.borderWidth)+"px";
-					fillBar.style.marginRight=(options.radii.tr-format.borderWidth)+"px";
-					fillBar.style.borderTop=format.borderString;
-					if(format.bgImage!=""){
-						fillBar.style.backgroundPosition="-"+(topHeight+format.borderWidth)+"px 0px";
-					}
-				}
-				top.appendChild(fillBar);
-			}
-		} else {
-			if(bottom){
-				if(options.radii.bl && options.radii.br){
-					fillBar.style.height=(bottomHeight-format.borderWidth) + "px";
-					fillBar.style.marginLeft=(options.radii.bl-format.borderWidth)+"px";
-					fillBar.style.marginRight=(options.radii.br-format.borderWidth)+"px";
-					fillBar.style.borderBottom=format.borderString;
-					if(format.bgImage!=""){
-						fillBar.style.backgroundPosition="-"+(bottomHeight+format.borderWidth)+"px -"
-							+ (format.height + (topHeight+format.borderWidth))+"px";
-					}
-				}
-				bottom.appendChild(fillBar);
-			}
-		}
-	}
-
-	//	finally, set up the padding.
-	if(options.autoPad && format.padding>0){
-		var content=document.createElement("div");
-		content.style.position="relative";
-		content.innerHTML=format.content;
-		content.className="autoPadDiv";
-		if(topHeight < format.padding){
-			content.style.paddingTop = Math.abs(topHeight-format.padding)+"px";
-		}
-		if(bottomHeight < format.padding){
-			content.style.paddingBottom = Math.abs(bottomHeight-format.padding)+"px";
-		}
-		content.style.paddingLeft=format.padding+"px";
-		content.style.paddingRight=format.padding+"px";
-		node.appendChild(content);
-	}
-};
-
-var count=0;
-
-//	helper methods.
-dojo.lfx.rounded._fns={
-	blend:function(clr1, clr2, frac){
-		var c1={
-			r:parseInt(clr1.substr(1,2),16),
-			g:parseInt(clr1.substr(3,2),16),
-			b:parseInt(clr1.substr(5,2),16)
-		};
-		var c2={
-			r:parseInt(clr2.substr(1,2),16),
-			g:parseInt(clr2.substr(3,2),16),
-			b:parseInt(clr2.substr(5,2),16)
-		};
-		if(frac>1||frac<0){ frac=1; }
-		var ret=[
-			Math.min(Math.max(Math.round((c1.r*frac)+(c2.r*(1-frac))),0),255),
-			Math.min(Math.max(Math.round((c1.g*frac)+(c2.g*(1-frac))),0),255),
-			Math.min(Math.max(Math.round((c1.b*frac)+(c2.b*(1-frac))),0),255)
-		];
-		for(var i=0; i<ret.length; i++){
-			var n=ret[i].toString(16);
-			if(n.length<2){ n="0"+n; }
-			ret[i]=n;
-		}
-		return "#"+ret.join("");
-	},
-	fraction:function(x, y, r){
-		var frac=0;
-		var xval=[];
-		var yval=[];
-		var point=0;
-		var whatsides="";
-
-		var intersect=Math.sqrt((Math.pow(r,2)-Math.pow(x,2)));
-		if(intersect >=y && intersect < (y+1)){
-			whatsides="Left";
-			xval[point]=0;
-			yval[point++]=intersect-y;
-		}
-
-		intersect=Math.sqrt((Math.pow(r,2)-Math.pow(y+1,2)));
-		if(intersect >=x && intersect < (x+1)){
-			whatsides += "Top";
-			xval[point]=intersect-x;
-			yval[point++]=1;
-		}
-		
-		intersect=Math.sqrt((Math.pow(r,2)-Math.pow(x+1,2)));
-		if(intersect >= y && intersect < (y+1)){
-			whatsides += "Right";
-			xval[point]=1;
-			yval[point++] = intersect-y;
-		}
-
-		intersect=Math.sqrt((Math.pow(r,2)-Math.pow(y,2)));
-		if(intersect >=x && intersect < (x+1)){
-			whatsides += "Bottom";
-			xval[point]=intersect-x;
-			yval[point]=1;
-		}
-
-		switch(whatsides){
-			case "LeftRight":
-				return Math.min(yval[0],yval[1]) + ((Math.max(yval[0],yval[1])-Math.min(yval[0],yval[1]))/2);
-			case "TopRight":
-				return 1-(((1-xval[0])*(1-yval[1]))/2);
-			case "TopBottom":
-				return Math.min(xval[0],xval[1]) + ((Math.max(xval[0],xval[1])-Math.min(xval[0],xval[1]))/2);
-			case "LeftBottom":
-				return (yval[0]*xval[1])/2;
-			default: return 1;
-		}
-	},
-	draw:function(x, y, color, opac, height, corner, image, radius, top, format){
-		var px=document.createElement("div");
-		px.style.height=height+"px"
-		px.style.width="1px";
-		px.style.position="absolute";
-		px.style.fontSize="1px";
-		px.style.overflow="hidden";
-		if(image==-1 && format.bgImage!=""){
-			px.style.backgroundImage=format.bgImage;
-			px.style.backgroundPosition="-"+(format.width-(radius-x)+format.borderWidth)
-				+"px -"+((format.height+top+y)-format.borderWidth)+"px";
-		} else { 
-			px.style.backgroundColor=color; 
-		}
-		if(opac!=100){ dojo.html.setOpacity(px, (opac/100)); }
-		px.style.top=y+"px";
-		px.style.left=x+"px";
-		corner.appendChild(px);
-	},
-	getRGB:function(clr){
-		var ret="#ffffff";
-		if(clr!="" && clr!="transparent"){
-			if(clr.substr(0,3)=="rgb"){
-				var t=clr.substring(4, clr.indexOf(")"));
-				t=t.split(",");
-				for(var i=0; i<t.length; i++){
-					var n=parseInt(t[i]).toString(16);
-					if(n.length<2){ n = "0"+n; }
-					t[i]=n;
-				}
-				ret = "#"+t.join("");
-			}
-			else if(clr.length==4){
-				ret = "#"+clr.substring(1,2)+clr.substring(1,2)
-					+ clr.substring(2,3)+clr.substring(2,3)
-					+ clr.substring(3,4)+clr.substring(3,4);
-			}
-			else {
-				ret = clr;
-			}
-		}
-		return ret;
-	}
-};
+dojo.provide("dojo.lfx.rounded");
+dojo.require("dojo.lang.common");
+dojo.require("dojo.html.common");
+dojo.require("dojo.html.style");
+dojo.require("dojo.html.display");
+dojo.require("dojo.html.layout");
+dojo.lfx.rounded = function (settings) {
+	var options = {validTags:settings.validTags || ["div"], autoPad:settings.autoPad != null ? settings.autoPad : true, antiAlias:settings.antiAlias != null ? settings.antiAlias : true, radii:{tl:(settings.tl && settings.tl.radius != null) ? settings.tl.radius : 5, tr:(settings.tr && settings.tr.radius != null) ? settings.tr.radius : 5, bl:(settings.bl && settings.bl.radius != null) ? settings.bl.radius : 5, br:(settings.br && settings.br.radius != null) ? settings.br.radius : 5}};
+	var nodes;
+	if (typeof (arguments[1]) == "string") {
+		nodes = dojo.html.getElementsByClass(arguments[1]);
+	} else {
+		if (dojo.lang.isArrayLike(arguments[1])) {
+			nodes = arguments[1];
+			for (var i = 0; i < nodes.length; i++) {
+				nodes[i] = dojo.byId(nodes[i]);
+			}
+		}
+	}
+	if (nodes.length == 0) {
+		return;
+	}
+	for (var i = 0; i < nodes.length; i++) {
+		dojo.lfx.rounded.applyCorners(options, nodes[i]);
+	}
+};
+dojo.lfx.rounded.applyCorners = function (options, node) {
+	var top = null;
+	var bottom = null;
+	var contentNode = null;
+	var fns = dojo.lfx.rounded._fns;
+	var width = node.offsetWidth;
+	var height = node.offsetHeight;
+	var borderWidth = parseInt(dojo.html.getComputedStyle(node, "border-top-width"));
+	var borderColor = dojo.html.getComputedStyle(node, "border-top-color");
+	var color = dojo.html.getComputedStyle(node, "background-color");
+	var bgImage = dojo.html.getComputedStyle(node, "background-image");
+	var position = dojo.html.getComputedStyle(node, "position");
+	var padding = parseInt(dojo.html.getComputedStyle(node, "padding-top"));
+	var format = {height:height, width:width, borderWidth:borderWidth, color:fns.getRGB(color), padding:padding, borderColor:fns.getRGB(borderColor), borderString:borderWidth + "px" + " solid " + fns.getRGB(borderColor), bgImage:((bgImage != "none") ? bgImage : ""), content:node.innerHTML};
+	if (!dojo.html.isPositionAbsolute(node)) {
+		node.style.position = "relative";
+	}
+	node.style.padding = "0px";
+	if (dojo.render.html.ie && width == "auto" && height == "auto") {
+		node.style.width = "100%";
+	}
+	if (options.autoPad && format.padding > 0) {
+		node.innerHTML = "";
+	}
+	var topHeight = Math.max(options.radii.tl, options.radii.tr);
+	var bottomHeight = Math.max(options.radii.bl, options.radii.br);
+	if (options.radii.tl || options.radii.tr) {
+		top = document.createElement("div");
+		top.style.width = "100%";
+		top.style.fontSize = "1px";
+		top.style.overflow = "hidden";
+		top.style.position = "absolute";
+		top.style.paddingLeft = format.borderWidth + "px";
+		top.style.paddingRight = format.borderWidth + "px";
+		top.style.height = topHeight + "px";
+		top.style.top = (0 - topHeight) + "px";
+		top.style.left = (0 - format.borderWidth) + "px";
+		node.appendChild(top);
+	}
+	if (options.radii.bl || options.radii.br) {
+		bottom = document.createElement("div");
+		bottom.style.width = "100%";
+		bottom.style.fontSize = "1px";
+		bottom.style.overflow = "hidden";
+		bottom.style.position = "absolute";
+		bottom.style.paddingLeft = format.borderWidth + "px";
+		bottom.style.paddingRight = format.borderWidth + "px";
+		bottom.style.height = bottomHeight + "px";
+		bottom.style.bottom = (0 - bottomHeight) + "px";
+		bottom.style.left = (0 - format.borderWidth) + "px";
+		node.appendChild(bottom);
+	}
+	if (top) {
+		node.style.borderTopWidth = "0px";
+	}
+	if (bottom) {
+		node.style.borderBottomWidth = "0px";
+	}
+	var corners = ["tr", "tl", "br", "bl"];
+	for (var i = 0; i < corners.length; i++) {
+		var cc = corners[i];
+		if (options.radii[cc] == 0) {
+			if ((cc.charAt(0) == "t" && top) || (cc.charAt(0) == "b" && bottom)) {
+				var corner = document.createElement("div");
+				corner.style.position = "relative";
+				corner.style.fontSize = "1px;";
+				corner.style.overflow = "hidden";
+				if (format.bgImage == "") {
+					corner.style.backgroundColor = format.color;
+				} else {
+					corner.style.backgroundImage = format.bgImage;
+				}
+				switch (cc) {
+				  case "tl":
+					corner.style.height = topHeight - format.borderWidth + "px";
+					corner.style.marginRight = options.radii[cc] - (format.borderWidth * 2) + "px";
+					corner.style.borderLeft = format.borderString;
+					corner.style.borderTop = format.borderString;
+					corner.style.left = -format.borderWidth + "px";
+					break;
+				  case "tr":
+					corner.style.height = topHeight - format.borderWidth + "px";
+					corner.style.marginLeft = options.radii[cc] - (format.borderWidth * 2) + "px";
+					corner.style.borderRight = format.borderString;
+					corner.style.borderTop = format.borderString;
+					corner.style.backgroundPosition = "-" + (topHeight - format.borderWidth) + "px 0px";
+					corner.style.left = format.borderWidth + "px";
+					break;
+				  case "bl":
+					corner.style.height = bottomHeight - format.borderWidth + "px";
+					corner.style.marginRight = options.radii[cc] - (format.borderWidth * 2) + "px";
+					corner.style.borderLeft = format.borderString;
+					corner.style.borderBottom = format.borderString;
+					corner.style.left = format.borderWidth + "px";
+					corner.style.backgroundPosition = "-" + format.borderWidth + "px -" + (format.height + (bottomHeight + format.borderWidth)) + "px";
+					break;
+				  case "br":
+					corner.style.height = bottomHeight - format.borderWidth + "px";
+					corner.style.marginLeft = options.radii[cc] - (format.borderWidth * 2) + "px";
+					corner.style.borderRight = format.borderString;
+					corner.style.borderBottom = format.borderString;
+					corner.style.left = format.borderWidth + "px";
+					corner.style.backgroundPosition = "-" + (bottomHeight + format.borderWidth) + "px -" + (format.height + (bottomHeight + format.borderWidth)) + "px";
+					break;
+				}
+			}
+		} else {
+			var corner = document.createElement("div");
+			corner.style.height = options.radii[cc] + "px";
+			corner.style.width = options.radii[cc] + "px";
+			corner.style.position = "absolute";
+			corner.style.fontSize = "1px";
+			corner.style.overflow = "hidden";
+			var borderRadius = Math.floor(options.radii[cc] - format.borderWidth);
+			for (var x = 0, j = options.radii[cc]; x < j; x++) {
+				var y1 = Math.floor(Math.sqrt(Math.pow(borderRadius, 2) - Math.pow((x + 1), 2))) - 1;
+				if ((x + 1) >= borderRadius) {
+					var y1 = -1;
+				}
+				var y2 = Math.ceil(Math.sqrt(Math.pow(borderRadius, 2) - Math.pow(x, 2)));
+				if (x >= borderRadius) {
+					y2 = -1;
+				}
+				var y3 = Math.floor(Math.sqrt(Math.pow(j, 2) - Math.pow((x + 1), 2))) - 1;
+				if ((x + 1) >= j) {
+					y3 = -1;
+				}
+				var y4 = Math.ceil(Math.sqrt(Math.pow(j, 2) - Math.pow(x, 2)));
+				if (x >= j) {
+					y4 = -1;
+				}
+				if (y1 > -1) {
+					fns.draw(x, 0, format.color, 100, (y1 + 1), corner, -1, j, topHeight, format);
+				}
+				for (var y = (y1 + 1); y < y2; y++) {
+					if (options.antiAlias) {
+						if (format.bgImage != "") {
+							var fract = fns.fraction(x, y, borderRadius) * 100;
+							if (fract < 30) {
+								fns.draw(x, y, format.borderColor, 100, 1, corner, 0, options.radii[cc], topHeight, format);
+							} else {
+								fns.draw(x, y, format.borderColor, 100, 1, corner, -1, options.radii[cc], topHeight, format);
+							}
+						} else {
+							var clr = fns.blend(format.color, format.borderColor, fns.fraction(x, y, borderRadius));
+							fns.draw(x, y, clr, 100, 1, corner, 0, options.radii[cc], topHeight, format);
+						}
+					}
+				}
+				if (options.antiAlias) {
+					if (y3 >= y2) {
+						if (y2 == -1) {
+							y2 = 0;
+						}
+						fns.draw(x, y2, format.borderColor, 100, (y3 - y2 + 1), corner, 0, 0, topHeight, format);
+					} else {
+						if (y3 >= y1) {
+							fns.draw(x, (y1 + 1), format.borderColor, 100, (y3 - y1), corner, 0, 0, topHeight, format);
+						}
+					}
+					for (var y = (y3 + 1); y < y4; y++) {
+						fns.draw(x, y, format.borderColor, (fns.fraction(x, y, j) * 100), 1, corner, (format.borderWidth > 0 ? 0 : -1), options.radii[cc], topHeight, format);
+					}
+				} else {
+					y3 = y1;
+				}
+			}
+			if (cc != "br") {
+				for (var t = 0, k = corner.childNodes.length; t < k; t++) {
+					var bar = corner.childNodes[t];
+					var barTop = parseInt(dojo.html.getComputedStyle(bar, "top"));
+					var barLeft = parseInt(dojo.html.getComputedStyle(bar, "left"));
+					var barHeight = parseInt(dojo.html.getComputedStyle(bar, "height"));
+					if (cc.charAt(1) == "l") {
+						bar.style.left = (options.radii[cc] - barLeft - 1) + "px";
+					}
+					if (cc == "tr") {
+						bar.style.top = (options.radii[cc] - barHeight - barTop) + "px";
+						bar.style.backgroundPosition = "-" + Math.abs((format.width - options.radii[cc] + format.borderWidth) + barLeft) + "px -" + Math.abs(options.radii[cc] - barHeight - barTop - format.borderWidth) + "px";
+					} else {
+						if (cc == "tl") {
+							bar.style.top = (options.radii[cc] - barHeight - barTop) + "px";
+							bar.style.backgroundPosition = "-" + Math.abs((options.radii[cc] - barLeft - 1) - format.borderWidth) + "px -" + Math.abs(options.radii[cc] - barHeight - barTop - format.borderWidth) + "px";
+						} else {
+							bar.style.backgroundPosition = "-" + Math.abs((options.radii[cc] + barLeft) + format.borderWidth) + "px -" + Math.abs((format.height + options.radii[cc] + barTop) - format.borderWidth) + "px";
+						}
+					}
+				}
+			}
+		}
+		if (corner) {
+			var psn = [];
+			if (cc.charAt(0) == "t") {
+				psn.push("top");
+			} else {
+				psn.push("bottom");
+			}
+			if (cc.charAt(1) == "l") {
+				psn.push("left");
+			} else {
+				psn.push("right");
+			}
+			if (corner.style.position == "absolute") {
+				for (var z = 0; z < psn.length; z++) {
+					corner.style[psn[z]] = "0px";
+				}
+			}
+			if (psn[0] == "top") {
+				if (top) {
+					top.appendChild(corner);
+				}
+			} else {
+				if (bottom) {
+					bottom.appendChild(corner);
+				}
+			}
+		}
+	}
+	var diff = {t:Math.abs(options.radii.tl - options.radii.tr), b:Math.abs(options.radii.bl - options.radii.br)};
+	for (var z in diff) {
+		var smaller = (options.radii[z + "l"] < options.radii[z + "r"] ? z + "l" : z + "r");
+		var filler = document.createElement("div");
+		filler.style.height = diff[z] + "px";
+		filler.style.width = options.radii[smaller] + "px";
+		filler.style.position = "absolute";
+		filler.style.fontSize = "1px";
+		filler.style.overflow = "hidden";
+		filler.style.backgroundColor = format.color;
+		switch (smaller) {
+		  case "tl":
+			filler.style.bottom = "0px";
+			filler.style.left = "0px";
+			filler.style.borderLeft = format.borderString;
+			top.appendChild(filler);
+			break;
+		  case "tr":
+			filler.style.bottom = "0px";
+			filler.style.right = "0px";
+			filler.style.borderRight = format.borderString;
+			top.appendChild(filler);
+			break;
+		  case "bl":
+			filler.style.top = "0px";
+			filler.style.left = "0px";
+			filler.style.borderLeft = format.borderString;
+			bottom.appendChild(filler);
+			break;
+		  case "br":
+			filler.style.top = "0px";
+			filler.style.right = "0px";
+			filler.style.borderRight = format.borderString;
+			bottom.appendChild(filler);
+			break;
+		}
+		var fillBar = document.createElement("div");
+		fillBar.style.position = "relative";
+		fillBar.style.fontSize = "1px";
+		fillBar.style.overflow = "hidden";
+		fillBar.style.backgroundColor = format.color;
+		fillBar.style.backgroundImage = format.bgImage;
+		if (z == "t") {
+			if (top) {
+				if (options.radii.tl && options.radii.tr) {
+					fillBar.style.height = (topHeight - format.borderWidth) + "px";
+					fillBar.style.marginLeft = (options.radii.tl - format.borderWidth) + "px";
+					fillBar.style.marginRight = (options.radii.tr - format.borderWidth) + "px";
+					fillBar.style.borderTop = format.borderString;
+					if (format.bgImage != "") {
+						fillBar.style.backgroundPosition = "-" + (topHeight + format.borderWidth) + "px 0px";
+					}
+				}
+				top.appendChild(fillBar);
+			}
+		} else {
+			if (bottom) {
+				if (options.radii.bl && options.radii.br) {
+					fillBar.style.height = (bottomHeight - format.borderWidth) + "px";
+					fillBar.style.marginLeft = (options.radii.bl - format.borderWidth) + "px";
+					fillBar.style.marginRight = (options.radii.br - format.borderWidth) + "px";
+					fillBar.style.borderBottom = format.borderString;
+					if (format.bgImage != "") {
+						fillBar.style.backgroundPosition = "-" + (bottomHeight + format.borderWidth) + "px -" + (format.height + (topHeight + format.borderWidth)) + "px";
+					}
+				}
+				bottom.appendChild(fillBar);
+			}
+		}
+	}
+	if (options.autoPad && format.padding > 0) {
+		var content = document.createElement("div");
+		content.style.position = "relative";
+		content.innerHTML = format.content;
+		content.className = "autoPadDiv";
+		if (topHeight < format.padding) {
+			content.style.paddingTop = Math.abs(topHeight - format.padding) + "px";
+		}
+		if (bottomHeight < format.padding) {
+			content.style.paddingBottom = Math.abs(bottomHeight - format.padding) + "px";
+		}
+		content.style.paddingLeft = format.padding + "px";
+		content.style.paddingRight = format.padding + "px";
+		node.appendChild(content);
+	}
+};
+var count = 0;
+dojo.lfx.rounded._fns = {blend:function (clr1, clr2, frac) {
+	var c1 = {r:parseInt(clr1.substr(1, 2), 16), g:parseInt(clr1.substr(3, 2), 16), b:parseInt(clr1.substr(5, 2), 16)};
+	var c2 = {r:parseInt(clr2.substr(1, 2), 16), g:parseInt(clr2.substr(3, 2), 16), b:parseInt(clr2.substr(5, 2), 16)};
+	if (frac > 1 || frac < 0) {
+		frac = 1;
+	}
+	var ret = [Math.min(Math.max(Math.round((c1.r * frac) + (c2.r * (1 - frac))), 0), 255), Math.min(Math.max(Math.round((c1.g * frac) + (c2.g * (1 - frac))), 0), 255), Math.min(Math.max(Math.round((c1.b * frac) + (c2.b * (1 - frac))), 0), 255)];
+	for (var i = 0; i < ret.length; i++) {
+		var n = ret[i].toString(16);
+		if (n.length < 2) {
+			n = "0" + n;
+		}
+		ret[i] = n;
+	}
+	return "#" + ret.join("");
+}, fraction:function (x, y, r) {
+	var frac = 0;
+	var xval = [];
+	var yval = [];
+	var point = 0;
+	var whatsides = "";
+	var intersect = Math.sqrt((Math.pow(r, 2) - Math.pow(x, 2)));
+	if (intersect >= y && intersect < (y + 1)) {
+		whatsides = "Left";
+		xval[point] = 0;
+		yval[point++] = intersect - y;
+	}
+	intersect = Math.sqrt((Math.pow(r, 2) - Math.pow(y + 1, 2)));
+	if (intersect >= x && intersect < (x + 1)) {
+		whatsides += "Top";
+		xval[point] = intersect - x;
+		yval[point++] = 1;
+	}
+	intersect = Math.sqrt((Math.pow(r, 2) - Math.pow(x + 1, 2)));
+	if (intersect >= y && intersect < (y + 1)) {
+		whatsides += "Right";
+		xval[point] = 1;
+		yval[point++] = intersect - y;
+	}
+	intersect = Math.sqrt((Math.pow(r, 2) - Math.pow(y, 2)));
+	if (intersect >= x && intersect < (x + 1)) {
+		whatsides += "Bottom";
+		xval[point] = intersect - x;
+		yval[point] = 1;
+	}
+	switch (whatsides) {
+	  case "LeftRight":
+		return Math.min(yval[0], yval[1]) + ((Math.max(yval[0], yval[1]) - Math.min(yval[0], yval[1])) / 2);
+	  case "TopRight":
+		return 1 - (((1 - xval[0]) * (1 - yval[1])) / 2);
+	  case "TopBottom":
+		return Math.min(xval[0], xval[1]) + ((Math.max(xval[0], xval[1]) - Math.min(xval[0], xval[1])) / 2);
+	  case "LeftBottom":
+		return (yval[0] * xval[1]) / 2;
+	  default:
+		return 1;
+	}
+}, draw:function (x, y, color, opac, height, corner, image, radius, top, format) {
+	var px = document.createElement("div");
+	px.style.height = height + "px";
+	px.style.width = "1px";
+	px.style.position = "absolute";
+	px.style.fontSize = "1px";
+	px.style.overflow = "hidden";
+	if (image == -1 && format.bgImage != "") {
+		px.style.backgroundImage = format.bgImage;
+		px.style.backgroundPosition = "-" + (format.width - (radius - x) + format.borderWidth) + "px -" + ((format.height + top + y) - format.borderWidth) + "px";
+	} else {
+		px.style.backgroundColor = color;
+	}
+	if (opac != 100) {
+		dojo.html.setOpacity(px, (opac / 100));
+	}
+	px.style.top = y + "px";
+	px.style.left = x + "px";
+	corner.appendChild(px);
+}, getRGB:function (clr) {
+	var ret = "#ffffff";
+	if (clr != "" && clr != "transparent") {
+		if (clr.substr(0, 3) == "rgb") {
+			var t = clr.substring(4, clr.indexOf(")"));
+			t = t.split(",");
+			for (var i = 0; i < t.length; i++) {
+				var n = parseInt(t[i]).toString(16);
+				if (n.length < 2) {
+					n = "0" + n;
+				}
+				t[i] = n;
+			}
+			ret = "#" + t.join("");
+		} else {
+			if (clr.length == 4) {
+				ret = "#" + clr.substring(1, 2) + clr.substring(1, 2) + clr.substring(2, 3) + clr.substring(2, 3) + clr.substring(3, 4) + clr.substring(3, 4);
+			} else {
+				ret = clr;
+			}
+		}
+	}
+	return ret;
+}};
 
+
 __CPAN_FILE__ src/lfx/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -64059,11 +43043,10 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	browser: ["dojo.lfx.html"],
-	dashboard: ["dojo.lfx.html"]
-});
+dojo.kwCompoundRequire({browser:["dojo.lfx.html"], dashboard:["dojo.lfx.html"]});
 dojo.provide("dojo.lfx.*");
+
+
 __CPAN_FILE__ src/lfx/shadow.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -64076,80 +43059,67 @@
 */
 
 dojo.provide("dojo.lfx.shadow");
-
 dojo.require("dojo.lang.common");
 dojo.require("dojo.uri.Uri");
-
-dojo.lfx.shadow = function(/* HTMLElement */node) {
-	//	summary
-	//	creates a shadow underneath node.
-	this.shadowPng = dojo.uri.dojoUri("src/html/images/shadow");
+dojo.lfx.shadow = function (node) {
+	this.shadowPng = dojo.uri.moduleUri("dojo.html", "images/shadow");
 	this.shadowThickness = 8;
 	this.shadowOffset = 15;
 	this.init(node);
-}
-
-dojo.extend(dojo.lfx.shadow, {
-	init: function(/* HTMLElement */node){
-		//	summary
-		//	Initializes the shadow.
-		this.node=node;
-
-		// make all the pieces of the shadow, and position/size them as much
-		// as possible (but a lot of the coordinates are set in sizeShadow
-		this.pieces={};
-		var x1 = -1 * this.shadowThickness;
-		var y0 = this.shadowOffset;
-		var y1 = this.shadowOffset + this.shadowThickness;
-		this._makePiece("tl", "top", y0, "left", x1);
-		this._makePiece("l", "top", y1, "left", x1, "scale");
-		this._makePiece("tr", "top", y0, "left", 0);
-		this._makePiece("r", "top", y1, "left", 0, "scale");
-		this._makePiece("bl", "top", 0, "left", x1);
-		this._makePiece("b", "top", 0, "left", 0, "crop");
-		this._makePiece("br", "top", 0, "left", 0);
-	},
-
-	_makePiece: function(name, vertAttach, vertCoord, horzAttach, horzCoord, sizing){
-		var img;
-		var url = this.shadowPng + name.toUpperCase() + ".png";
-		if(dojo.render.html.ie55 || dojo.render.html.ie60){
-			img=dojo.doc().createElement("div");
-			img.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+url+"'"+
-			(sizing?", sizingMethod='"+sizing+"'":"") + ")";
-		}else{
-			img=dojo.doc().createElement("img");
-			img.src=url;
-		}
-		img.style.position="absolute";
-		img.style[vertAttach]=vertCoord+"px";
-		img.style[horzAttach]=horzCoord+"px";
-		img.style.width=this.shadowThickness+"px";
-		img.style.height=this.shadowThickness+"px";
-		this.pieces[name]=img;
-		this.node.appendChild(img);
-	},
-
-	size: function(/* int */width, /* int */height){
-		//	summary
-		//	Resizes the shadow based on width and height.
-		var sideHeight = height - (this.shadowOffset+this.shadowThickness+1);
-		if (sideHeight < 0) { sideHeight = 0; }
-		if (height < 1) { height = 1; }
-		if (width < 1) { width = 1; }
-		with(this.pieces){
-			l.style.height = sideHeight+"px";
-			r.style.height = sideHeight+"px";
-			b.style.width = (width-1)+"px";
-			bl.style.top = (height-1)+"px";
-			b.style.top = (height-1)+"px";
-			br.style.top = (height-1)+"px";
-			tr.style.left = (width-1)+"px";
-			r.style.left = (width-1)+"px";
-			br.style.left = (width-1)+"px";
-		}
+};
+dojo.extend(dojo.lfx.shadow, {init:function (node) {
+	this.node = node;
+	this.pieces = {};
+	var x1 = -1 * this.shadowThickness;
+	var y0 = this.shadowOffset;
+	var y1 = this.shadowOffset + this.shadowThickness;
+	this._makePiece("tl", "top", y0, "left", x1);
+	this._makePiece("l", "top", y1, "left", x1, "scale");
+	this._makePiece("tr", "top", y0, "left", 0);
+	this._makePiece("r", "top", y1, "left", 0, "scale");
+	this._makePiece("bl", "top", 0, "left", x1);
+	this._makePiece("b", "top", 0, "left", 0, "crop");
+	this._makePiece("br", "top", 0, "left", 0);
+}, _makePiece:function (name, vertAttach, vertCoord, horzAttach, horzCoord, sizing) {
+	var img;
+	var url = this.shadowPng + name.toUpperCase() + ".png";
+	if (dojo.render.html.ie55 || dojo.render.html.ie60) {
+		img = dojo.doc().createElement("div");
+		img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + url + "'" + (sizing ? ", sizingMethod='" + sizing + "'" : "") + ")";
+	} else {
+		img = dojo.doc().createElement("img");
+		img.src = url;
 	}
-});
+	img.style.position = "absolute";
+	img.style[vertAttach] = vertCoord + "px";
+	img.style[horzAttach] = horzCoord + "px";
+	img.style.width = this.shadowThickness + "px";
+	img.style.height = this.shadowThickness + "px";
+	this.pieces[name] = img;
+	this.node.appendChild(img);
+}, size:function (width, height) {
+	var sideHeight = height - (this.shadowOffset + this.shadowThickness + 1);
+	if (sideHeight < 0) {
+		sideHeight = 0;
+	}
+	if (height < 1) {
+		height = 1;
+	}
+	if (width < 1) {
+		width = 1;
+	}
+	with (this.pieces) {
+		l.style.height = sideHeight + "px";
+		r.style.height = sideHeight + "px";
+		b.style.width = (width - 1) + "px";
+		bl.style.top = (height - 1) + "px";
+		b.style.top = (height - 1) + "px";
+		br.style.top = (height - 1) + "px";
+		tr.style.left = (width - 1) + "px";
+		r.style.left = (width - 1) + "px";
+		br.style.left = (width - 1) + "px";
+	}
+}});
 
 
 __CPAN_FILE__ src/lfx/toggle.js
@@ -64165,49 +43135,34 @@
 
 dojo.provide("dojo.lfx.toggle");
 dojo.require("dojo.lfx.*");
-
-dojo.lfx.toggle.plain = {
-	show: function(node, duration, easing, callback){
-		dojo.html.show(node);
-		if(dojo.lang.isFunction(callback)){ callback(); }
-	},
-	
-	hide: function(node, duration, easing, callback){
-		dojo.html.hide(node);
-		if(dojo.lang.isFunction(callback)){ callback(); }
+dojo.lfx.toggle.plain = {show:function (node, duration, easing, callback) {
+	dojo.html.show(node);
+	if (dojo.lang.isFunction(callback)) {
+		callback();
 	}
-}
-
-dojo.lfx.toggle.fade = {
-	show: function(node, duration, easing, callback){
-		dojo.lfx.fadeShow(node, duration, easing, callback).play();
-	},
-
-	hide: function(node, duration, easing, callback){
-		dojo.lfx.fadeHide(node, duration, easing, callback).play();
+}, hide:function (node, duration, easing, callback) {
+	dojo.html.hide(node);
+	if (dojo.lang.isFunction(callback)) {
+		callback();
 	}
-}
+}};
+dojo.lfx.toggle.fade = {show:function (node, duration, easing, callback) {
+	dojo.lfx.fadeShow(node, duration, easing, callback).play();
+}, hide:function (node, duration, easing, callback) {
+	dojo.lfx.fadeHide(node, duration, easing, callback).play();
+}};
+dojo.lfx.toggle.wipe = {show:function (node, duration, easing, callback) {
+	dojo.lfx.wipeIn(node, duration, easing, callback).play();
+}, hide:function (node, duration, easing, callback) {
+	dojo.lfx.wipeOut(node, duration, easing, callback).play();
+}};
+dojo.lfx.toggle.explode = {show:function (node, duration, easing, callback, explodeSrc) {
+	dojo.lfx.explode(explodeSrc || {x:0, y:0, width:0, height:0}, node, duration, easing, callback).play();
+}, hide:function (node, duration, easing, callback, explodeSrc) {
+	dojo.lfx.implode(node, explodeSrc || {x:0, y:0, width:0, height:0}, duration, easing, callback).play();
+}};
 
-dojo.lfx.toggle.wipe = {
-	show: function(node, duration, easing, callback){
-		dojo.lfx.wipeIn(node, duration, easing, callback).play();
-	},
 
-	hide: function(node, duration, easing, callback){
-		dojo.lfx.wipeOut(node, duration, easing, callback).play();
-	}
-}
-
-dojo.lfx.toggle.explode = {
-	show: function(node, duration, easing, callback, explodeSrc){
-		dojo.lfx.explode(explodeSrc||{x:0,y:0,width:0,height:0}, node, duration, easing, callback).play();
-	},
-
-	hide: function(node, duration, easing, callback, explodeSrc){
-		dojo.lfx.implode(node, explodeSrc||{x:0,y:0,width:0,height:0}, duration, easing, callback).play();
-	}
-}
-
 __CPAN_FILE__ src/lfx/extras.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -64220,144 +43175,74 @@
 */
 
 dojo.provide("dojo.lfx.extras");
-
 dojo.require("dojo.lfx.html");
 dojo.require("dojo.lfx.Animation");
-
-dojo.lfx.html.fadeWipeIn = function(/*DOMNode[]*/ nodes, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will fade "nodes" from its current
-	//			opacity to fully opaque while wiping it in.
-	// nodes: An array of DOMNodes or one DOMNode.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
+dojo.lfx.html.fadeWipeIn = function (nodes, duration, easing, callback) {
 	nodes = dojo.lfx.html._byId(nodes);
-	var anim = dojo.lfx.combine(
-		dojo.lfx.fadeIn(nodes, duration, easing),
-		dojo.lfx.wipeIn(nodes, duration, easing)
-	);
-	
-	if(callback){
-		anim.connect("onEnd", function(){
+	var anim = dojo.lfx.combine(dojo.lfx.fadeIn(nodes, duration, easing), dojo.lfx.wipeIn(nodes, duration, easing));
+	if (callback) {
+		anim.connect("onEnd", function () {
 			callback(nodes, anim);
 		});
 	}
-	
-	return anim; // dojo.lfx.Combine
-}
-
-dojo.lfx.html.fadeWipeOut = function(/*DOMNode[]*/ nodes, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will fade "nodes" from its current
-	//			opacity to fully transparent while wiping it out.
-	// nodes: An array of DOMNodes or one DOMNode.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
+	return anim;
+};
+dojo.lfx.html.fadeWipeOut = function (nodes, duration, easing, callback) {
 	nodes = dojo.lfx.html._byId(nodes);
-	var anim = dojo.lfx.combine(
-		dojo.lfx.fadeOut(nodes, duration, easing),
-		dojo.lfx.wipeOut(nodes, duration, easing)
-	);
-	
-	if(callback){
-		/* callback: Function
-		   pId: f */
-		anim.connect("onEnd", function(){
+	var anim = dojo.lfx.combine(dojo.lfx.fadeOut(nodes, duration, easing), dojo.lfx.wipeOut(nodes, duration, easing));
+	if (callback) {
+		anim.connect("onEnd", function () {
 			callback(nodes, anim);
 		});
 	}
-
-	return anim; // dojo.lfx.Combine
-}
-
-dojo.lfx.html.scale = function(/*DOMNode[]*/nodes,
-							   /*int*/ percentage,
-							   /*bool?*/ scaleContent,
-							   /*bool?*/ fromCenter,
-							   /*int?*/ duration,
-							   /*Function?*/ easing,
-							   /*Function?*/ callback){
-	// summary: Returns an animation that will scale "nodes" by "percentage".
-	// nodes: An array of DOMNodes or one DOMNode.
-	// percentage: A whole number representing the percentage to scale "nodes".
-	// scaleContent: If true, will scale the contents of "nodes".
-	// fromCenter: If true, will scale "nodes" from its center rather than the
-	//			   lower right corner.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
+	return anim;
+};
+dojo.lfx.html.scale = function (nodes, percentage, scaleContent, fromCenter, duration, easing, callback) {
 	nodes = dojo.lfx.html._byId(nodes);
 	var anims = [];
-
-	dojo.lang.forEach(nodes, function(node){
+	dojo.lang.forEach(nodes, function (node) {
 		var outer = dojo.html.getMarginBox(node);
-
-		var actualPct = percentage/100.0;
-		var props = [
-			{	property: "width",
-				start: outer.width,
-				end: outer.width * actualPct
-			},
-			{	property: "height",
-				start: outer.height,
-				end: outer.height * actualPct
-			}];
-		
-		if(scaleContent){
-			var fontSize = dojo.html.getStyle(node, 'font-size');
+		var actualPct = percentage / 100;
+		var props = [{property:"width", start:outer.width, end:outer.width * actualPct}, {property:"height", start:outer.height, end:outer.height * actualPct}];
+		if (scaleContent) {
+			var fontSize = dojo.html.getStyle(node, "font-size");
 			var fontSizeType = null;
-			if(!fontSize){
-				fontSize = parseFloat('100%');
-				fontSizeType = '%';
-			}else{
-				dojo.lang.some(['em','px','%'], function(item, index, arr){
-					if(fontSize.indexOf(item)>0){
+			if (!fontSize) {
+				fontSize = parseFloat("100%");
+				fontSizeType = "%";
+			} else {
+				dojo.lang.some(["em", "px", "%"], function (item, index, arr) {
+					if (fontSize.indexOf(item) > 0) {
 						fontSize = parseFloat(fontSize);
 						fontSizeType = item;
 						return true;
 					}
 				});
 			}
-			props.push({
-				property: "font-size",
-				start: fontSize,
-				end: fontSize * actualPct,
-				units: fontSizeType });
+			props.push({property:"font-size", start:fontSize, end:fontSize * actualPct, units:fontSizeType});
 		}
-		
-		if(fromCenter){
+		if (fromCenter) {
 			var positioning = dojo.html.getStyle(node, "position");
 			var originalTop = node.offsetTop;
 			var originalLeft = node.offsetLeft;
-			var endTop = ((outer.height * actualPct) - outer.height)/2;
-			var endLeft = ((outer.width * actualPct) - outer.width)/2;
-			props.push({
-				property: "top",
-				start: originalTop,
-				end: (positioning == "absolute" ? originalTop - endTop : (-1*endTop))
-			});
-			props.push({
-				property: "left",
-				start: originalLeft,
-				end: (positioning == "absolute" ? originalLeft - endLeft : (-1*endLeft))
-			});
+			var endTop = ((outer.height * actualPct) - outer.height) / 2;
+			var endLeft = ((outer.width * actualPct) - outer.width) / 2;
+			props.push({property:"top", start:originalTop, end:(positioning == "absolute" ? originalTop - endTop : (-1 * endTop))});
+			props.push({property:"left", start:originalLeft, end:(positioning == "absolute" ? originalLeft - endLeft : (-1 * endLeft))});
 		}
-		
 		var anim = dojo.lfx.propertyAnimation(node, props, duration, easing);
-		if(callback){
-			anim.connect("onEnd", function(){
+		if (callback) {
+			anim.connect("onEnd", function () {
 				callback(node, anim);
 			});
 		}
-
 		anims.push(anim);
 	});
-	
-	return dojo.lfx.combine(anims); // dojo.lfx.Combine
-}
-
+	return dojo.lfx.combine(anims);
+};
 dojo.lang.mixin(dojo.lfx, dojo.lfx.html);
 
+
 __CPAN_DIR__ src/i18n
 __CPAN_FILE__ src/i18n/common.js
 /*
@@ -64371,64 +43256,38 @@
 */
 
 dojo.provide("dojo.i18n.common");
-
-dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){
-//	summary:
-//		Returns an Object containing the localization for a given resource bundle
-//		in a package, matching the specified locale.
-//
-//	description:
-//		Returns a hash containing name/value pairs in its prototypesuch that values can be easily overridden.
-//		Throws an exception if the bundle is not found.
-//		Bundle must have already been loaded by dojo.requireLocalization() or by a build optimization step.
-//
-//	packageName: package which is associated with this resource
-//	bundleName: the base filename of the resource bundle (without the ".js" suffix)
-//	locale: the variant to load (optional).  By default, the locale defined by the
-//		host environment: dojo.locale
-
+dojo.i18n.getLocalization = function (packageName, bundleName, locale) {
 	dojo.hostenv.preloadLocalizations();
 	locale = dojo.hostenv.normalizeLocale(locale);
-
-	// look for nearest locale match
-	var elements = locale.split('-');
-	var module = [packageName,"nls",bundleName].join('.');
+	var elements = locale.split("-");
+	var module = [packageName, "nls", bundleName].join(".");
 	var bundle = dojo.hostenv.findModule(module, true);
-
 	var localization;
-	for(var i = elements.length; i > 0; i--){
-		var loc = elements.slice(0, i).join('_');
-		if(bundle[loc]){
+	for (var i = elements.length; i > 0; i--) {
+		var loc = elements.slice(0, i).join("_");
+		if (bundle[loc]) {
 			localization = bundle[loc];
 			break;
 		}
 	}
-	if(!localization){
+	if (!localization) {
 		localization = bundle.ROOT;
 	}
-
-	// make a singleton prototype so that the caller won't accidentally change the values globally
-	if(localization){
-		var clazz = function(){};
+	if (localization) {
+		var clazz = function () {
+		};
 		clazz.prototype = localization;
-		return new clazz(); // Object
+		return new clazz();
 	}
-
-	dojo.raise("Bundle not found: " + bundleName + " in " + packageName+" , locale=" + locale);
+	dojo.raise("Bundle not found: " + bundleName + " in " + packageName + " , locale=" + locale);
 };
-
-dojo.i18n.isLTR = function(/*String?*/locale){
-//	summary:
-//		Is the language read left-to-right?  Most exceptions are for middle eastern languages.
-//
-//	locale: a string representing the locale.  By default, the locale defined by the
-//		host environment: dojo.locale
-
-	var lang = dojo.hostenv.normalizeLocale(locale).split('-')[0];
-	var RTL = {ar:true,fa:true,he:true,ur:true,yi:true};
-	return !RTL[lang]; // Boolean
+dojo.i18n.isLTR = function (locale) {
+	var lang = dojo.hostenv.normalizeLocale(locale).split("-")[0];
+	var RTL = {ar:true, fa:true, he:true, ur:true, yi:true};
+	return !RTL[lang];
 };
 
+
 __CPAN_FILE__ src/i18n/currency.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -64441,285 +43300,132 @@
 */
 
 dojo.provide("dojo.i18n.currency");
-
 dojo.require("dojo.experimental");
 dojo.experimental("dojo.i18n.currency");
-
 dojo.require("dojo.regexp");
 dojo.require("dojo.i18n.common");
 dojo.require("dojo.i18n.number");
 dojo.require("dojo.lang.common");
-
-/**
-* Method to Format and validate a given number a monetary value
-*
-* @param Number value
-*	The number to be formatted and validated.
-* @param String iso the ISO 4217 currency code
-* @param Object flags
-*   flags.places The number of decimal places to be included in the formatted number
-* @param String locale the locale to determine formatting used.  By default, the locale defined by the
-*   host environment: dojo.locale
-* @return String
-* 	the formatted currency of type String if successful; Nan if an
-* 	invalid currency is provided or null if an unsupported locale value was provided.
-**/
-dojo.i18n.currency.format = function(value, iso, flags /*optional*/, locale /*optional*/){
+dojo.i18n.currency.format = function (value, iso, flags, locale) {
 	flags = (typeof flags == "object") ? flags : {};
-
 	var formatData = dojo.i18n.currency._mapToLocalizedFormatData(dojo.i18n.currency.FORMAT_TABLE, iso, locale);
-	if (typeof flags.places == "undefined") {flags.places = formatData.places;}
-	if (typeof flags.places == "undefined") {flags.places = 2;}
+	if (typeof flags.places == "undefined") {
+		flags.places = formatData.places;
+	}
+	if (typeof flags.places == "undefined") {
+		flags.places = 2;
+	}
 	flags.signed = false;
-
 	var result = dojo.i18n.number.format(value, flags, locale);
-
 	var sym = formatData.symbol;
-	if (formatData.adjSpace == "symbol"){ 
-		if (formatData.placement == "after"){
-			sym = " " + sym;// TODO: nbsp?
-		}else{
-			sym = sym + " ";// TODO: nbsp?
+	if (formatData.adjSpace == "symbol") {
+		if (formatData.placement == "after") {
+			sym = " " + sym;
+		} else {
+			sym = sym + " ";
 		}
 	}
-
-	if (value < 0){
-		if (formatData.signPlacement == "before"){
+	if (value < 0) {
+		if (formatData.signPlacement == "before") {
 			sym = "-" + sym;
-		}else if (formatData.signPlacement == "after"){
-			sym = sym + "-";
+		} else {
+			if (formatData.signPlacement == "after") {
+				sym = sym + "-";
+			}
 		}
 	}
-
-	var spc = (formatData.adjSpace == "number") ? " " : ""; // TODO: nbsp?
-	if (formatData.placement == "after"){
+	var spc = (formatData.adjSpace == "number") ? " " : "";
+	if (formatData.placement == "after") {
 		result = result + spc + sym;
-	}else{
+	} else {
 		result = sym + spc + result;
 	}
-
-	if (value < 0){
-		if (formatData.signPlacement == "around"){
+	if (value < 0) {
+		if (formatData.signPlacement == "around") {
 			result = "(" + result + ")";
-		}else if (formatData.signPlacement == "end"){
-			result = result + "-";
-		}else if (!formatData.signPlacement || formatData.signPlacement == "begin"){
-			result = "-" + result;
+		} else {
+			if (formatData.signPlacement == "end") {
+				result = result + "-";
+			} else {
+				if (!formatData.signPlacement || formatData.signPlacement == "begin") {
+					result = "-" + result;
+				}
+			}
 		}
 	}
-
 	return result;
 };
-
-/**
-* Method to convert a properly formatted monetary value to a primative numeric value.
-*
-* @param String value
-*	The int string to be convertted
-  @param String iso the ISO 4217 currency code
-* @param String locale the locale to determine formatting used.  By default, the locale defined by the
-*   host environment: dojo.locale
-* @param Object flags
-*   flags.validate true to check the string for strict adherence to the locale settings for separator, sign, etc.
-*     Default is true
-* @return Number
-* 	Returns a primative numeric value, Number.NaN if unable to convert to a number, or null if an unsupported locale is provided.
-**/
-dojo.i18n.currency.parse = function(value, iso, locale, flags /*optional*/){
-	if (typeof flags.validate == "undefined") {flags.validate = true;}
-
+dojo.i18n.currency.parse = function (value, iso, locale, flags) {
+	if (typeof flags.validate == "undefined") {
+		flags.validate = true;
+	}
 	if (flags.validate && !dojo.i18n.number.isCurrency(value, iso, locale, flags)) {
 		return Number.NaN;
 	}
-
-	var sign = (value.indexOf('-') != -1);
+	var sign = (value.indexOf("-") != -1);
 	var abs = abs.replace(/\-/, "");
-
 	var formatData = dojo.i18n.currency._mapToLocalizedFormatData(dojo.i18n.currency.FORMAT_TABLE, iso, locale);
 	abs = abs.replace(new RegExp("\\" + formatData.symbol), "");
-	//TODO: trim?
-
 	var number = dojo.i18n.number.parse(abs, locale, flags);
-	if (sign){number = number * -1;}
+	if (sign) {
+		number = number * -1;
+	}
 	return number;
 };
-
-/**
-  Validates whether a string denotes a monetary value. 
-
-  @param value  A string
-  @param iso the ISO 4217 currency code
-  @param locale the locale to determine formatting used.  By default, the locale defined by the
-    host environment: dojo.locale
-  @param flags  An object
-    flags.symbol  A currency symbol such as Yen "�", Pound "�", or the Euro sign "�".  
-        The default is specified by the iso code.  For more than one symbol use an array, e.g. ["$", ""], makes $ optional.
-        The empty array [] makes the default currency symbol optional.
-    flags.placement  The symbol can come "before" or "after".  The default is specified by the iso code.
-    flags.signed  The leading plus-or-minus sign.  Can be true, false, or [true, false].
-      Default is [true, false], (i.e. sign is optional).
-    flags.signPlacement  The sign can come "before" or "after" the symbol or "around" the whole expression
-    	with parenthesis, such as CAD: (123$).  The default is specified by the iso code.
-    flags.separator  The character used as the thousands separator. The default is specified by the locale.
-        The empty array [] makes the default separator optional.
-    flags.fractional  The appropriate number of decimal places for fractional currency (e.g. cents)
-      Can be true, false, or [true, false].  Default is [true, false], (i.e. cents are optional).
-    flags.places  The integer number of decimal places.
-      If not given, an amount appropriate to the iso code is used.
-    flags.fractional  The appropriate number of decimal places for fractional currency (e.g. cents)
-      Can be true, false, or [true, false].  Default is [true, false], (i.e. cents are optional).
-    flags.decimal  The character used for the decimal point.  The default is specified by the locale.
-  @return  true or false.
-*/
-dojo.i18n.currency.isCurrency = function(value, iso, locale /*optional*/, flags){
+dojo.i18n.currency.isCurrency = function (value, iso, locale, flags) {
 	flags = (typeof flags == "object") ? flags : {};
-
 	var numberFormatData = dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE, locale);
-	if (typeof flags.separator == "undefined") {flags.separator = numberFormatData[0];}
-	else if (dojo.lang.isArray(flags.separator) && flags.separator.length == 0){flags.separator = [numberFormatData[0],""];}
-	if (typeof flags.decimal == "undefined") {flags.decimal = numberFormatData[2];}
-	if (typeof flags.groupSize == "undefined") {flags.groupSize = numberFormatData[3];}
-	if (typeof flags.groupSize2 == "undefined") {flags.groupSize2 = numberFormatData[4];}
-
+	if (typeof flags.separator == "undefined") {
+		flags.separator = numberFormatData[0];
+	} else {
+		if (dojo.lang.isArray(flags.separator) && flags.separator.length == 0) {
+			flags.separator = [numberFormatData[0], ""];
+		}
+	}
+	if (typeof flags.decimal == "undefined") {
+		flags.decimal = numberFormatData[2];
+	}
+	if (typeof flags.groupSize == "undefined") {
+		flags.groupSize = numberFormatData[3];
+	}
+	if (typeof flags.groupSize2 == "undefined") {
+		flags.groupSize2 = numberFormatData[4];
+	}
 	var formatData = dojo.i18n.currency._mapToLocalizedFormatData(dojo.i18n.currency.FORMAT_TABLE, iso, locale);
-	if (typeof flags.places == "undefined") {flags.places = formatData.places;}
-	if (typeof flags.places == "undefined") {flags.places = 2;}
-	if (typeof flags.symbol == "undefined") {flags.symbol = formatData.symbol;}
-	else if (dojo.lang.isArray(flags.symbol) && flags.symbol.length == 0){flags.symbol = [formatData.symbol,""];}
-	if (typeof flags.placement == "undefined") {flags.placement = formatData.placement;}
-	//TODO more... or mixin?
-
+	if (typeof flags.places == "undefined") {
+		flags.places = formatData.places;
+	}
+	if (typeof flags.places == "undefined") {
+		flags.places = 2;
+	}
+	if (typeof flags.symbol == "undefined") {
+		flags.symbol = formatData.symbol;
+	} else {
+		if (dojo.lang.isArray(flags.symbol) && flags.symbol.length == 0) {
+			flags.symbol = [formatData.symbol, ""];
+		}
+	}
+	if (typeof flags.placement == "undefined") {
+		flags.placement = formatData.placement;
+	}
 	var re = new RegExp("^" + dojo.regexp.currency(flags) + "$");
-//dojo.debug(value+":"+dojo.regexp.currency(flags)+"="+re.test(value));
 	return re.test(value);
 };
-
-dojo.i18n.currency._mapToLocalizedFormatData = function(table, iso, locale /*optional*/){
+dojo.i18n.currency._mapToLocalizedFormatData = function (table, iso, locale) {
 	var formatData = dojo.i18n.currency.FORMAT_TABLE[iso];
-	if (!dojo.lang.isArray(formatData)){
+	if (!dojo.lang.isArray(formatData)) {
 		return formatData;
 	}
-
 	return dojo.i18n.number._mapToLocalizedFormatData(formatData[0], locale);
 };
-
-(function() {
-	var arabic = {symbol: "\u062C", placement: "after", htmlSymbol: "?"};
-	var euro = {symbol: "\u20AC", placement: "before", adjSpace: "symbol", htmlSymbol: "&euro;"};
-	var euroAfter = {symbol: "\u20AC", placement: "after", htmlSymbol: "&euro;"};
-
-//Q: Do European countries still use their old ISO symbols instead of just EUR?
-//Q: are signPlacement and currency symbol placement ISO-dependent or are they really locale-dependent?
-//TODO: htmlSymbol is for html entities, need images? (IBM: why? why can't we just use unicode everywhere?)
-//TODO: hide visibility of this table?
-//for html entities, need a image for arabic symbol "BHD" as "DZD", "EGP", "JOD", "KWD" "LBP", "MAD", "OMR", "QAR", "SAR", "SYP", "TND", "AED", "YER"
-//Note: html entities not used at the moment
-//placement: placement of currency symbol, before or after number
-//signPlacement: placement of negative sign, before or after symbol, or begin or end of expression, or around with parentheses
-// This table assumes defaults of
-//	places: 2, placement: "before", signPlacement: "begin", adjSpace: undefined, htmlSymbol: undefined]
-dojo.i18n.currency.FORMAT_TABLE = {
-	AED: {symbol: "\u062c", placement: "after"},
-	ARS: {symbol: "$", signPlacement: "after"},
-	//Old ATS: {symbol: "S", adjSpace: "symbol"},
-	ATS: {symbol: "\u20AC", adjSpace: "number", signPlacement: "after", htmlSymbol: "&euro;"}, 	//Austria using "EUR" // neg should read euro + sign + space + number
-	AUD: {symbol: "$"},
-	BOB: {symbol: "$b"},
-	BRL: {symbol: "R$", adjSpace: "symbol"},
-	//Old BEF: {symbol: "BF", placement: "after", adjSpace: "symbol"},
-	BEF: euroAfter,	//Belgium using "EUR"
-	//Old BHD: {symbol: "\u062C", signPlacement: "end", places: 3, htmlSymbol: "?"},
-	BHD: arabic,
-	//TODO: I'm suspicious that all the other entries have locale-specific data in them, too?
-	//Q: which attributes are iso-specific and which are locale specific?
-	CAD: [{
-			'*' : {symbol: "$"},
-			'fr-ca' : {symbol: "$", placement: "after", signPlacement: "around"}
-		}],
-	CHF: {symbol: "CHF", adjSpace: "symbol", signPlacement: "after"},
-	CLP: {symbol: "$"},
-	COP: {symbol: "$", signPlacement: "around"},
-	CNY: {symbol: "\u00A5", htmlSymbol: "&yen;"},
-	//// Costa Rica  - Spanish slashed C. need to find out the html entity image
-	CRC: {symbol: "\u20A1", signPlacement: "after", htmlSymbol: "?"},
-	// Czech Republic  - Czech //need image for html entities
-	CZK: {symbol: "Kc", adjSpace: "symbol", signPlacement: "after"},
-	DEM: euroAfter,
-	DKK: {symbol: "kr.", adjSpace: "symbol", signPlacement: "after"},
-	DOP: {symbol: "$"},
-	//for html entities, need a image, bidi, using "rtl", so from the link, symbol is suffix
-	//Old DZD: {symbol: "\u062C", signPlacement: "end", places: 3, htmlSymbol: "?"},
-	DZD: arabic,
-	//Ecuador using "USD"
-	ECS: {symbol: "$", signPlacement: "after"},
-	EGP: arabic,
-	//Old ESP: {symbol: "Pts", placement: "after", adjSpace: "symbol", places: 0},
-	ESP: euroAfter,	//spain using "EUR"
-	EUR: euro,
-	//Old FIM: {symbol: "mk", placement: "after", adjSpace: "symbol"},
-	FIM: euroAfter,	//Finland using "EUR"
-	//Old FRF: {symbol: "F", placement: "after", adjSpace: "symbol"},
-	FRF: euroAfter,	//France using "EUR"
-	GBP: {symbol: "\u00A3", htmlSymbol: "&pound;"},
-	GRD: {symbol: "\u20AC", signPlacement: "end", htmlSymbol: "&euro;"},
-	GTQ: {symbol: "Q", signPlacement: "after"},
-	//Hong Kong need "HK$" and "$". Now only support "HK$"
-	HKD: {symbol: "HK$"},
-	HNL: {symbol: "L.", signPlacement: "end"},
-	HUF: {symbol: "Ft", placement: "after", adjSpace: "symbol"},
-	//IEP: {symbol: "\u00A3", htmlSymbol: "&pound;"},
-	IEP: {symbol: "\u20AC", htmlSymbol: "&euro;"},	//ireland using "EUR" at the front.
-	//couldn't know what Israel - Hebrew symbol, some sites use "NIS", bidi, using "rtl", so from the link, symbol is suffix (IBM: huh?)
-	//ILS: {symbol: "\u05E9\u0022\u05D7", signPlacement: "end", htmlSymbol: "?"},
-	ILS: {symbol: "\u05E9\u0022\u05D7", placement: "after", htmlSymbol: "?"},
-	INR: {symbol: "Rs."},
-	//ITL: {symbol: "L", adjSpace: "symbol", signPlacement: "after", places: 0},
-	ITL: {symbol: "\u20AC", signPlacement: "after", htmlSymbol: "&euro;"},	//Italy using "EUR"
-	JOD: arabic,
-	JPY: {symbol: "\u00a5", places: 0, htmlSymbol: "&yen;"},
-	KRW: {symbol: "\u20A9", places: 0, htmlSymbol: "?"},
-	KWD: arabic,
-	LBP: arabic,
-	//Old LUF: {symbol: "LUF", placement: "after", adjSpace: "symbol"},
-	//for Luxembourg,using "EUR"
-	LUF: euroAfter,
-	MAD: arabic,
-	MXN: {symbol: "$", signPlacement: "around"},
-	NIO: {symbol: "C$", adjSpace: "symbol", signPlacement: "after"},
-	//Old NLG: {symbol: "f", adjSpace: "symbol", signPlacement: "end"},
-	//Netherlands, using "EUR"
-	NLG: {symbol: "\u20AC", signPlacement: "end", htmlSymbol: "&euro;"},
-	NOK: {symbol: "kr", adjSpace: "symbol", signPlacement: "after"},
-	NZD: {symbol: "$"},
-	OMR: arabic,
-	PAB: {symbol: "B/", adjSpace: "symbol", signPlacement: "after"},
-	PEN: {symbol: "S/", signPlacement: "after"},
-	//couldn't know what the symbol is from ibm link. (IBM: what does this mean?  Is the symbol 'z' wrong?)
-	PLN: {symbol: "z", placement: "after"},
-	//Old PTE: {symbol: "Esc.", placement: "after", adjSpace: "symbol", places: 0},
-	PTE: euroAfter,
-	PYG: {symbol: "Gs.", signPlacement: "after"},
-	QAR: arabic,
-	RUR: {symbol: "rub.", placement: "after"},
-	SAR: arabic,
-	SEK: {symbol: "kr", placement: "after", adjSpace: "symbol"},
-	SGD: {symbol: "$"},
-	//// El Salvador - Spanish slashed C. need to find out. (IBM: need to find out what?)
-	SVC: {symbol: "\u20A1", signPlacement: "after", adjSpace: "symbol"},
-	//for html entities, need a image
-	SYP: arabic,
-	TND: arabic,
-	TRL: {symbol: "TL", placement: "after"},
-	TWD: {symbol: "NT$"},
-	USD: {symbol: "$"},
-	UYU: {symbol: "$U", signplacement: "after", adjSpace: "symbol"},
-	VEB: {symbol: "Bs", signplacement: "after", adjSpace: "symbol"},
-	YER: arabic,
-	ZAR: {symbol: "R", signPlacement: "around"}
-};
-
+(function () {
+	var arabic = {symbol:"\u062c", placement:"after", htmlSymbol:"?"};
+	var euro = {symbol:"\u20ac", placement:"before", adjSpace:"symbol", htmlSymbol:"&euro;"};
+	var euroAfter = {symbol:"\u20ac", placement:"after", htmlSymbol:"&euro;"};
+	dojo.i18n.currency.FORMAT_TABLE = {AED:{symbol:"\u062c", placement:"after"}, ARS:{symbol:"$", signPlacement:"after"}, ATS:{symbol:"\u20ac", adjSpace:"number", signPlacement:"after", htmlSymbol:"&euro;"}, AUD:{symbol:"$"}, BOB:{symbol:"$b"}, BRL:{symbol:"R$", adjSpace:"symbol"}, BEF:euroAfter, BHD:arabic, CAD:[{"*":{symbol:"$"}, "fr-ca":{symbol:"$", placement:"after", signPlacement:"around"}}], CHF:{symbol:"CHF", adjSpace:"symbol", signPlacement:"after"}, CLP:{symbol:"$"}, COP:{symbol:"$", signPlacement:"around"}, CNY:{symbol:"\xa5", htmlSymbol:"&yen;"}, CRC:{symbol:"\u20a1", signPlacement:"after", htmlSymbol:"?"}, CZK:{symbol:"Kc", adjSpace:"symbol", signPlacement:"after"}, DEM:euroAfter, DKK:{symbol:"kr.", adjSpace:"symbol", signPlacement:"after"}, DOP:{symbol:"$"}, DZD:arabic, ECS:{symbol:"$", signPlacement:"after"}, EGP:arabic, ESP:euroAfter, EUR:euro, FIM:euroAfter, FRF:euroAfter, GBP:{symbol:"\xa3", htmlSymbol:"&pound;"}, GRD:{symbol:"\u20ac", signPlacement:"end", htmlSymbol:"&euro;"}, GTQ:{symbol:"Q", signPlacement:"after"}, HKD:{symbol:"HK$"}, HNL:{symbol:"L.", signPlacement:"end"}, HUF:{symbol:"Ft", placement:"after", adjSpace:"symbol"}, IEP:{symbol:"\u20ac", htmlSymbol:"&euro;"}, ILS:{symbol:"\u05e9\"\u05d7", placement:"after", htmlSymbol:"?"}, INR:{symbol:"Rs."}, ITL:{symbol:"\u20ac", signPlacement:"after", htmlSymbol:"&euro;"}, JOD:arabic, JPY:{symbol:"\xa5", places:0, htmlSymbol:"&yen;"}, KRW:{symbol:"\u20a9", places:0, htmlSymbol:"?"}, KWD:arabic, LBP:arabic, LUF:euroAfter, MAD:arabic, MXN:{symbol:"$", signPlacement:"around"}, NIO:{symbol:"C$", adjSpace:"symbol", signPlacement:"after"}, NLG:{symbol:"\u20ac", signPlacement:"end", htmlSymbol:"&euro;"}, NOK:{symbol:"kr", adjSpace:"symbol", signPlacement:"after"}, NZD:{symbol:"$"}, OMR:arabic, PAB:{symbol:"B/", adjSpace:"symbol", signPlacement:"after"}, PEN:{symbol:"S/", signPlacement:"after"}, PLN:{symbol:"z", placement:"after"}, PTE:euroAfter, PYG:{symbol:"Gs.", signPlacement:"after"}, QAR:arabic, RUR:{symbol:"rub.", placement:"after"}, SAR:arabic, SEK:{symbol:"kr", placement:"after", adjSpace:"symbol"}, SGD:{symbol:"$"}, SVC:{symbol:"\u20a1", signPlacement:"after", adjSpace:"symbol"}, SYP:arabic, TND:arabic, TRL:{symbol:"TL", placement:"after"}, TWD:{symbol:"NT$"}, USD:{symbol:"$"}, UYU:{symbol:"$U", signplacement:"after", adjSpace:"symbol"}, VEB:{symbol:"Bs", signplacement:"after", adjSpace:"symbol"}, YER:arabic, ZAR:{symbol:"R", signPlacement:"around"}};
 })();
 
+
 __CPAN_FILE__ src/i18n/number.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -64732,288 +43438,145 @@
 */
 
 dojo.provide("dojo.i18n.number");
-
 dojo.require("dojo.experimental");
 dojo.experimental("dojo.i18n.number");
-
 dojo.require("dojo.regexp");
 dojo.require("dojo.i18n.common");
 dojo.require("dojo.lang.common");
-
-/**
-* Method to Format and validate a given number
-*
-* @param Number value
-*	The number to be formatted and validated.
-* @param Object flags
-*   flags.places number of decimal places to show, default is 0 (cannot be Infinity)
-*   flags.round true to round the number, false to truncate
-* @param String locale
-*	The locale used to determine the number format.
-* @return String
-* 	the formatted number of type String if successful
-*   or null if an unsupported locale value was provided
-**/
-dojo.i18n.number.format = function(value, flags /*optional*/, locale /*optional*/){
+dojo.i18n.number.format = function (value, flags, locale) {
 	flags = (typeof flags == "object") ? flags : {};
-
 	var formatData = dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE, locale);
-	if (typeof flags.separator == "undefined") {flags.separator = formatData[1];}
-	if (typeof flags.decimal == "undefined") {flags.decimal = formatData[2];}
-	if (typeof flags.groupSize == "undefined") {flags.groupSize = formatData[3];}
-	if (typeof flags.groupSize2 == "undefined") {flags.groupSize2 = formatData[4];}
-	if (typeof flags.round == "undefined") {flags.round = true;}
-	if (typeof flags.signed == "undefined") {flags.signed = true;}
-
+	if (typeof flags.separator == "undefined") {
+		flags.separator = formatData[1];
+	}
+	if (typeof flags.decimal == "undefined") {
+		flags.decimal = formatData[2];
+	}
+	if (typeof flags.groupSize == "undefined") {
+		flags.groupSize = formatData[3];
+	}
+	if (typeof flags.groupSize2 == "undefined") {
+		flags.groupSize2 = formatData[4];
+	}
+	if (typeof flags.round == "undefined") {
+		flags.round = true;
+	}
+	if (typeof flags.signed == "undefined") {
+		flags.signed = true;
+	}
 	var output = (flags.signed && (value < 0)) ? "-" : "";
 	value = Math.abs(value);
 	var whole = String((((flags.places > 0) || !flags.round) ? Math.floor : Math.round)(value));
-
-	// Splits str into substrings of size count, starting from right to left.  Is there a more clever way to do this in JS?
-	function splitSubstrings(str, count){
-		for(var subs = []; str.length >= count; str = str.substr(0, str.length - count)){
+	function splitSubstrings(str, count) {
+		for (var subs = []; str.length >= count; str = str.substr(0, str.length - count)) {
 			subs.push(str.substr(-count));
 		}
-		if (str.length > 0){subs.push(str);}
+		if (str.length > 0) {
+			subs.push(str);
+		}
 		return subs.reverse();
 	}
-
-	if (flags.groupSize2 && (whole.length > flags.groupSize)){
+	if (flags.groupSize2 && (whole.length > flags.groupSize)) {
 		var groups = splitSubstrings(whole.substr(0, whole.length - flags.groupSize), flags.groupSize2);
 		groups.push(whole.substr(-flags.groupSize));
 		output = output + groups.join(flags.separator);
-	}else if (flags.groupSize){
-		output = output + splitSubstrings(whole, flags.groupSize).join(flags.separator);
-	}else{
-		output = output + whole;
+	} else {
+		if (flags.groupSize) {
+			output = output + splitSubstrings(whole, flags.groupSize).join(flags.separator);
+		} else {
+			output = output + whole;
+		}
 	}
-
-//TODO: what if flags.places is Infinity?
-	if (flags.places > 0){
-	//Q: Is it safe to convert to a string and split on ".", or might that be locale dependent?  Use Math for now.
+	if (flags.places > 0) {
 		var fract = value - Math.floor(value);
 		fract = (flags.round ? Math.round : Math.floor)(fract * Math.pow(10, flags.places));
 		output = output + flags.decimal + fract;
 	}
-
-//TODO: exp
-
 	return output;
 };
-
-/**
-* Method to convert a properly formatted int string to a primative numeric value.
-*
-* @param String value
-*	The int string to be convertted
-* @param string locale
-*	The locale used to convert the number string
-* @param Object flags
-*   flags.validate true to check the string for strict adherence to the locale settings for separator, sign, etc.
-*     Default is true
-* @return Number
-* 	Returns a value of type Number, Number.NaN if not a number, or null if locale is not supported.
-**/
-dojo.i18n.number.parse = function(value, locale /*optional*/, flags /*optional*/){
+dojo.i18n.number.parse = function (value, locale, flags) {
 	flags = (typeof flags == "object") ? flags : {};
-
 	var formatData = dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE, locale);
-	if (typeof flags.separator == "undefined") {flags.separator = formatData[1];}
-	if (typeof flags.decimal == "undefined") {flags.decimal = formatData[2];}
-	if (typeof flags.groupSize == "undefined") {flags.groupSize = formatData[3];}
-	if (typeof flags.groupSize2 == "undefined") {flags.groupSize2 = formatData[4];}
-	if (typeof flags.validate == "undefined") {flags.validate = true;}
-
+	if (typeof flags.separator == "undefined") {
+		flags.separator = formatData[1];
+	}
+	if (typeof flags.decimal == "undefined") {
+		flags.decimal = formatData[2];
+	}
+	if (typeof flags.groupSize == "undefined") {
+		flags.groupSize = formatData[3];
+	}
+	if (typeof flags.groupSize2 == "undefined") {
+		flags.groupSize2 = formatData[4];
+	}
+	if (typeof flags.validate == "undefined") {
+		flags.validate = true;
+	}
 	if (flags.validate && !dojo.i18n.number.isReal(value, locale, flags)) {
 		return Number.NaN;
 	}
-
 	var numbers = value.split(flags.decimal);
-	if (numbers.length > 2){return Number.NaN; }
+	if (numbers.length > 2) {
+		return Number.NaN;
+	}
 	var whole = Number(numbers[0].replace(new RegExp("\\" + flags.separator, "g"), ""));
-	var fract = (numbers.length == 1) ? 0 : Number(numbers[1]) / Math.pow(10, String(numbers[1]).length); // could also do Number(whole + "." + numbers[1]) if whole != NaN
-
-//TODO: exp
-
+	var fract = (numbers.length == 1) ? 0 : Number(numbers[1]) / Math.pow(10, String(numbers[1]).length);
 	return whole + fract;
 };
-
-/**
-  Validates whether a string is in an integer format. 
-
-  @param value  A string.
-  @param locale the locale to determine formatting used.  By default, the locale defined by the
-    host environment: dojo.locale
-  @param flags  An object.
-    flags.signed  The leading plus-or-minus sign.  Can be true, false, or [true, false].
-      Default is [true, false], (i.e. sign is optional).
-    flags.separator  The character used as the thousands separator.  Default is specified by the locale.
-      For more than one symbol use an array, e.g. [",", ""], makes ',' optional.
-      The empty array [] makes the default separator optional.   
-  @return  true or false.
-*/
-dojo.i18n.number.isInteger = function(value, locale /*optional*/, flags /*optional*/) {
+dojo.i18n.number.isInteger = function (value, locale, flags) {
 	flags = (typeof flags == "object") ? flags : {};
-
 	var formatData = dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE, locale);
-	if (typeof flags.separator == "undefined") {flags.separator = formatData[1];}
-	else if (dojo.lang.isArray(flags.separator) && flags.separator.length ===0){
-		flags.separator = [formatData[1],""];
+	if (typeof flags.separator == "undefined") {
+		flags.separator = formatData[1];
+	} else {
+		if (dojo.lang.isArray(flags.separator) && flags.separator.length === 0) {
+			flags.separator = [formatData[1], ""];
+		}
 	}
-	if (typeof flags.groupSize == "undefined") {flags.groupSize = formatData[3];}
-	if (typeof flags.groupSize2 == "undefined") {flags.groupSize2 = formatData[4];}
-
+	if (typeof flags.groupSize == "undefined") {
+		flags.groupSize = formatData[3];
+	}
+	if (typeof flags.groupSize2 == "undefined") {
+		flags.groupSize2 = formatData[4];
+	}
 	var re = new RegExp("^" + dojo.regexp.integer(flags) + "$");
 	return re.test(value);
 };
-
-/**
-  Validates whether a string is a real valued number. 
-  Format is the usual exponential notation.
-
-  @param value  A string.
-  @param locale the locale to determine formatting used.  By default, the locale defined by the
-    host environment: dojo.locale
-  @param flags  An object.
-    flags.places  The integer number of decimal places.
-      If not given, the decimal part is optional and the number of places is unlimited.
-    flags.decimal  The character used for the decimal point.  The default is specified by the locale.
-    flags.exponent  Express in exponential notation.  Can be true, false, or [true, false].
-      Default is [true, false], (i.e. the exponential part is optional).
-    flags.eSigned  The leading plus-or-minus sign on the exponent.  Can be true, false, 
-      or [true, false].  Default is [true, false], (i.e. sign is optional).
-    flags in regexp.integer can be applied.
-  @return  true or false.
-*/
-dojo.i18n.number.isReal = function(value, locale /*optional*/, flags /*optional*/) {
+dojo.i18n.number.isReal = function (value, locale, flags) {
 	flags = (typeof flags == "object") ? flags : {};
-
 	var formatData = dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE, locale);
-	if (typeof flags.separator == "undefined") {flags.separator = formatData[1];}
-	else if (dojo.lang.isArray(flags.separator) && flags.separator.length ===0){
-		flags.separator = [formatData[1],""];
+	if (typeof flags.separator == "undefined") {
+		flags.separator = formatData[1];
+	} else {
+		if (dojo.lang.isArray(flags.separator) && flags.separator.length === 0) {
+			flags.separator = [formatData[1], ""];
+		}
 	}
-	if (typeof flags.decimal == "undefined") {flags.decimal = formatData[2];}
-	if (typeof flags.groupSize == "undefined") {flags.groupSize = formatData[3];}
-	if (typeof flags.groupSize2 == "undefined") {flags.groupSize2 = formatData[4];}
-
+	if (typeof flags.decimal == "undefined") {
+		flags.decimal = formatData[2];
+	}
+	if (typeof flags.groupSize == "undefined") {
+		flags.groupSize = formatData[3];
+	}
+	if (typeof flags.groupSize2 == "undefined") {
+		flags.groupSize2 = formatData[4];
+	}
 	var re = new RegExp("^" + dojo.regexp.realNumber(flags) + "$");
 	return re.test(value);
 };
-
-//TODO: hide in a closure?
-//TODO: change to use hashes and mixins, rather than arrays
-//Q: fallback algorithm/how to structure table:
-// does it make sense to look by country code most of the time (wildcard match on
-// language, except where it's relevant) and provide default country when only
-// a language is given?
-(function() {
-
-dojo.i18n.number.FORMAT_TABLE = {
-	//0: thousand seperator for monetary, 1: thousand seperator for number, 2: decimal seperator, 3: group size, 4: second group size because of india
-	'ar-ae': ["","", ",", 1],
-	'ar-bh': ["","",",", 1],
-	'ar-dz': ["","",",", 1],
-	'ar-eg': ["","", ",", 1],
-	'ar-jo': ["","",",", 1],
-	'ar-kw': ["","", ",", 1],
-	'ar-lb': ["","", ",", 1],
-	'ar-ma': ["","", ",", 1],
-	'ar-om': ["","", ",", 1],
-	'ar-qa': ["","", ",", 1],
-	'ar-sa': ["","", ",", 1],
-	'ar-sy': ["","", ",", 1],
-	'ar-tn': ["","", ",", 1],
-	'ar-ye': ["","", ",", 1],
-	'cs-cz': [".",".", ",", 3],
-	'da-dk': [".",".", ",", 3],
-	'de-at': [".",".", ",", 3],
-	'de-de': [".",".", ",", 3],
-	'de-lu': [".",".", ",", 3],
-	//IBM JSL defect 51278. right now we have problem with single quote. //IBM: explain?
-	'de-ch': ["'","'", ".", 3], //Q: comma as decimal separator for currency??
-	//'de-ch': [".",".", ",", 3],
-	'el-gr': [".",".", ",", 3],
-	'en-au': [",",",", ".", 3],
-	'en-ca': [",",",", ".", 3],
-	'en-gb': [",",",", ".", 3],
-	'en-hk': [",",",", ".", 3],
-	'en-ie': [",",",", ".", 3],
-	'en-in': [",",",", ".", 3,2],//india-english, 1,23,456.78
-	'en-nz': [",",",", ".", 3],
-	'en-us': [",",",", ".", 3],
-	'en-za': [",",",", ".", 3],
-	
-	'es-ar': [".",".", ",", 3],
-	'es-bo': [".",".", ",", 3],
-	'es-cl': [".",".", ",", 3],
-	'es-co': [".",".", ",", 3],
-	'es-cr': [".",".", ",", 3],
-	'es-do': [".",".", ",", 3],
-	'es-ec': [".",".", ",", 3],
-	'es-es': [".",".", ",", 3],
-	'es-gt': [",",",", ".", 3],
-	'es-hn': [",",",", ".", 3],
-	'es-mx': [",",",", ".", 3],
-	'es-ni': [",",",", ".", 3],
-	'es-pa': [",",",", ".", 3],
-	'es-pe': [",",",", ".", 3],
-	'es-pr': [",",",", ".", 3],
-	'es-py': [".",".",",", 3],
-	'es-sv': [",", ",",".", 3],
-	'es-uy': [".",".",",", 3],
-	'es-ve': [".",".", ",", 3],
-	
-	'fi-fi': [" "," ", ",", 3],
-	
-	'fr-be': [".",".",",", 3],
-	'fr-ca': [" ", " ", ",", 3],
-	
-	'fr-ch': [" ", " ",".", 3],
-	
-	'fr-fr': [" "," ", ",", 3],
-	'fr-lu': [".",".", ",", 3],
-	
-	'he-il': [",",",", ".", 3],
-	
-	'hu-hu': [" ", " ",",", 3],
-	
-	'it-ch': [" "," ", ".", 3],
-	
-	'it-it': [".",".", ",", 3],
-	'ja-jp': [",",",", ".", 3],
-	'ko-kr': [",", ",",".", 3],
-	
-	'no-no': [".",".", ",", 3],
-	
-	'nl-be': [" "," ", ",", 3],
-	'nl-nl': [".",".", ",", 3],
-	'pl-pl': [".", ".",",", 3],
-	
-	'pt-br': [".",".", ",", 3],
-	'pt-pt': [".",".", "$", 3],
-	'ru-ru': [" ", " ",",", 3],
-	
-	'sv-se': ["."," ", ",", 3],
-	
-	'tr-tr': [".",".", ",", 3],
-	
-	'zh-cn': [",",",", ".", 3],
-	'zh-hk': [",",",",".", 3],
-	'zh-tw': [",", ",",".", 3],
-	'*': [",",",", ".", 3]
-};
+(function () {
+	dojo.i18n.number.FORMAT_TABLE = {"ar-ae":["", "", ",", 1], "ar-bh":["", "", ",", 1], "ar-dz":["", "", ",", 1], "ar-eg":["", "", ",", 1], "ar-jo":["", "", ",", 1], "ar-kw":["", "", ",", 1], "ar-lb":["", "", ",", 1], "ar-ma":["", "", ",", 1], "ar-om":["", "", ",", 1], "ar-qa":["", "", ",", 1], "ar-sa":["", "", ",", 1], "ar-sy":["", "", ",", 1], "ar-tn":["", "", ",", 1], "ar-ye":["", "", ",", 1], "cs-cz":[".", ".", ",", 3], "da-dk":[".", ".", ",", 3], "de-at":[".", ".", ",", 3], "de-de":[".", ".", ",", 3], "de-lu":[".", ".", ",", 3], "de-ch":["'", "'", ".", 3], "el-gr":[".", ".", ",", 3], "en-au":[",", ",", ".", 3], "en-ca":[",", ",", ".", 3], "en-gb":[",", ",", ".", 3], "en-hk":[",", ",", ".", 3], "en-ie":[",", ",", ".", 3], "en-in":[",", ",", ".", 3, 2], "en-nz":[",", ",", ".", 3], "en-us":[",", ",", ".", 3], "en-za":[",", ",", ".", 3], "es-ar":[".", ".", ",", 3], "es-bo":[".", ".", ",", 3], "es-cl":[".", ".", ",", 3], "es-co":[".", ".", ",", 3], "es-cr":[".", ".", ",", 3], "es-do":[".", ".", ",", 3], "es-ec":[".", ".", ",", 3], "es-es":[".", ".", ",", 3], "es-gt":[",", ",", ".", 3], "es-hn":[",", ",", ".", 3], "es-mx":[",", ",", ".", 3], "es-ni":[",", ",", ".", 3], "es-pa":[",", ",", ".", 3], "es-pe":[",", ",", ".", 3], "es-pr":[",", ",", ".", 3], "es-py":[".", ".", ",", 3], "es-sv":[",", ",", ".", 3], "es-uy":[".", ".", ",", 3], "es-ve":[".", ".", ",", 3], "fi-fi":[" ", " ", ",", 3], "fr-be":[".", ".", ",", 3], "fr-ca":[" ", " ", ",", 3], "fr-ch":[" ", " ", ".", 3], "fr-fr":[" ", " ", ",", 3], "fr-lu":[".", ".", ",", 3], "he-il":[",", ",", ".", 3], "hu-hu":[" ", " ", ",", 3], "it-ch":[" ", " ", ".", 3], "it-it":[".", ".", ",", 3], "ja-jp":[",", ",", ".", 3], "ko-kr":[",", ",", ".", 3], "no-no":[".", ".", ",", 3], "nl-be":[" ", " ", ",", 3], "nl-nl":[".", ".", ",", 3], "pl-pl":[".", ".", ",", 3], "pt-br":[".", ".", ",", 3], "pt-pt":[".", ".", "$", 3], "ru-ru":[" ", " ", ",", 3], "sv-se":[".", " ", ",", 3], "tr-tr":[".", ".", ",", 3], "zh-cn":[",", ",", ".", 3], "zh-hk":[",", ",", ".", 3], "zh-tw":[",", ",", ".", 3], "*":[",", ",", ".", 3]};
 })();
-
-dojo.i18n.number._mapToLocalizedFormatData = function(table, locale){
+dojo.i18n.number._mapToLocalizedFormatData = function (table, locale) {
 	locale = dojo.hostenv.normalizeLocale(locale);
-//TODO: most- to least-specific search? search by country code?
-//TODO: implement aliases to simplify and shorten tables
 	var data = table[locale];
-	if (typeof data == 'undefined'){data = table['*'];}
+	if (typeof data == "undefined") {
+		data = table["*"];
+	}
 	return data;
-}
+};
 
+
 __CPAN_DIR__ src/i18n/calendar
 __CPAN_DIR__ src/i18n/calendar/nls
 __CPAN_FILE__ src/i18n/calendar/nls/gregorianExtras.js
@@ -65047,7 +43610,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"field-weekday":"Day of the Week","dateFormat-medium":"yyyy MMM d","field-second":"Second","field-week":"Week","pm":"PM","timeFormat-full":"HH:mm:ss z","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"am":"AM","days-standAlone-narrow":["1","2","3","4","5","6","7"],"field-year":"Year","eras":["BCE","CE"],"field-minute":"Minute","timeFormat-medium":"HH:mm:ss","field-hour":"Hour","dateFormat-long":"yyyy MMMM d","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","dateFormat-short":"yy/MM/dd","months-format-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"field-era":"Era","timeFormat-short":"HH:mm","months-format-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-long":"HH:mm:ss z","days-format-wide":["1","2","3","4","5","6","7"],"dateFormat-full":"EEEE, yyyy MMMM dd","field-zone":"Zone","days-format-abbr":["1","2","3","4","5","6","7"]})
+({"field-weekday":"Day of the Week", "dateFormat-medium":"yyyy MMM d", "field-second":"Second", "field-week":"Week", "pm":"PM", "timeFormat-full":"HH:mm:ss z", "months-standAlone-narrow":["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "am":"AM", "days-standAlone-narrow":["1", "2", "3", "4", "5", "6", "7"], "field-year":"Year", "eras":["BCE", "CE"], "field-minute":"Minute", "timeFormat-medium":"HH:mm:ss", "field-hour":"Hour", "dateFormat-long":"yyyy MMMM d", "field-day":"Day", "field-dayperiod":"Dayperiod", "field-month":"Month", "dateFormat-short":"yy/MM/dd", "months-format-wide":["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "field-era":"Era", "timeFormat-short":"HH:mm", "months-format-abbr":["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "timeFormat-long":"HH:mm:ss z", "days-format-wide":["1", "2", "3", "4", "5", "6", "7"], "dateFormat-full":"EEEE, yyyy MMMM dd", "field-zone":"Zone", "days-format-abbr":["1", "2", "3", "4", "5", "6", "7"]})
 __CPAN_DIR__ src/i18n/calendar/nls/es
 __CPAN_FILE__ src/i18n/calendar/nls/es/gregorian.js
 /*
@@ -65060,7 +43623,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"field-weekday":"día de la semana","dateFormat-medium":"dd-MMM-yy","field-second":"segundo","field-week":"semana","pm":"p.m.","timeFormat-full":"HH'H'mm''ss\" z","months-standAlone-narrow":["E","F","M","A","M","J","J","A","S","O","N","D"],"am":"a.m.","days-standAlone-narrow":["D","L","M","M","J","V","S"],"field-year":"año","eras":["a.C.","d.C."],"field-minute":"minuto","field-hour":"hora","dateFormat-long":"d' de 'MMMM' de 'yyyy","field-day":"día","field-dayperiod":"periodo del día","field-month":"mes","dateFormat-short":"d/MM/yy","months-format-wide":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"field-era":"era","months-format-abbr":["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],"days-format-wide":["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],"dateFormat-full":"EEEE d' de 'MMMM' de 'yyyy","field-zone":"zona","days-format-abbr":["dom","lun","mar","mié","jue","vie","sáb"],"timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"})
+({"field-weekday":"d\xeda de la semana", "dateFormat-medium":"dd-MMM-yy", "field-second":"segundo", "field-week":"semana", "pm":"p.m.", "timeFormat-full":"HH'H'mm''ss\" z", "months-standAlone-narrow":["E", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "am":"a.m.", "days-standAlone-narrow":["D", "L", "M", "M", "J", "V", "S"], "field-year":"a\xf1o", "eras":["a.C.", "d.C."], "field-minute":"minuto", "field-hour":"hora", "dateFormat-long":"d' de 'MMMM' de 'yyyy", "field-day":"d\xeda", "field-dayperiod":"periodo del d\xeda", "field-month":"mes", "dateFormat-short":"d/MM/yy", "months-format-wide":["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"], "field-era":"era", "months-format-abbr":["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"], "days-format-wide":["domingo", "lunes", "martes", "mi\xe9rcoles", "jueves", "viernes", "s\xe1bado"], "dateFormat-full":"EEEE d' de 'MMMM' de 'yyyy", "field-zone":"zona", "days-format-abbr":["dom", "lun", "mar", "mi\xe9", "jue", "vie", "s\xe1b"], "timeFormat-medium":"HH:mm:ss", "timeFormat-short":"HH:mm", "timeFormat-long":"HH:mm:ss z"})
 __CPAN_DIR__ src/i18n/calendar/nls/de
 __CPAN_FILE__ src/i18n/calendar/nls/de/gregorian.js
 /*
@@ -65073,7 +43636,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"field-weekday":"Wochentag","dateFormat-medium":"dd.MM.yyyy","field-second":"Sekunde","field-week":"Woche","pm":"nachm.","timeFormat-full":"H:mm' Uhr 'z","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"am":"vorm.","days-standAlone-narrow":["S","M","D","M","D","F","S"],"field-year":"Jahr","eras":["v. Chr.","n. Chr."],"field-hour":"Stunde","dateFormat-long":"d. MMMM yyyy","field-day":"Tag","field-dayperiod":"Tageshälfte","field-month":"Monat","dateFormat-short":"dd.MM.yy","months-format-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"field-era":"Epoche","months-format-abbr":["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"days-format-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"dateFormat-full":"EEEE, d. MMMM yyyy","field-zone":"Zone","days-format-abbr":["So","Mo","Di","Mi","Do","Fr","Sa"],"field-minute":"Minute","timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"})
+({"field-weekday":"Wochentag", "dateFormat-medium":"dd.MM.yyyy", "field-second":"Sekunde", "field-week":"Woche", "pm":"nachm.", "timeFormat-full":"H:mm' Uhr 'z", "months-standAlone-narrow":["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "am":"vorm.", "days-standAlone-narrow":["S", "M", "D", "M", "D", "F", "S"], "field-year":"Jahr", "eras":["v. Chr.", "n. Chr."], "field-hour":"Stunde", "dateFormat-long":"d. MMMM yyyy", "field-day":"Tag", "field-dayperiod":"Tagesh\xe4lfte", "field-month":"Monat", "dateFormat-short":"dd.MM.yy", "months-format-wide":["Januar", "Februar", "M\xe4rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], "field-era":"Epoche", "months-format-abbr":["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], "days-format-wide":["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"], "dateFormat-full":"EEEE, d. MMMM yyyy", "field-zone":"Zone", "days-format-abbr":["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"], "field-minute":"Minute", "timeFormat-medium":"HH:mm:ss", "timeFormat-short":"HH:mm", "timeFormat-long":"HH:mm:ss z"})
 __CPAN_DIR__ src/i18n/calendar/nls/zh
 __CPAN_FILE__ src/i18n/calendar/nls/zh/gregorianExtras.js
 /*
@@ -65086,7 +43649,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"dateFormat-yearOnly":"yyyy'å¹´'"})
+({"dateFormat-yearOnly":"yyyy'\u5e74'"})
 __CPAN_FILE__ src/i18n/calendar/nls/zh/gregorian.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65098,7 +43661,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"days-standAlone-narrow":["日","一","二","三","四","五","六"],"eras":["公元前","公元"],"am":"上午","months-format-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"days-format-abbr":["周日","周一","周二","周三","周四","周五","周六"],"pm":"下午","months-format-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"months-standAlone-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"field-weekday":"Day of the Week","dateFormat-medium":"yyyy MMM d","field-second":"Second","field-week":"Week","timeFormat-full":"HH:mm:ss z","field-year":"Year","field-minute":"Minute","timeFormat-medium":"HH:mm:ss","field-hour":"Hour","dateFormat-long":"yyyy MMMM d","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","dateFormat-short":"yy/MM/dd","field-era":"Era","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z","dateFormat-full":"EEEE, yyyy MMMM dd","field-zone":"Zone"})
+({"days-standAlone-narrow":["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d"], "eras":["\u516c\u5143\u524d", "\u516c\u5143"], "am":"\u4e0a\u5348", "months-format-abbr":["\u4e00\u6708", "\u4e8c\u6708", "\u4e09\u6708", "\u56db\u6708", "\u4e94\u6708", "\u516d\u6708", "\u4e03\u6708", "\u516b\u6708", "\u4e5d\u6708", "\u5341\u6708", "\u5341\u4e00\u6708", "\u5341\u4e8c\u6708"], "days-format-abbr":["\u5468\u65e5", "\u5468\u4e00", "\u5468\u4e8c", "\u5468\u4e09", "\u5468\u56db", "\u5468\u4e94", "\u5468\u516d"], "pm":"\u4e0b\u5348", "months-format-wide":["\u4e00\u6708", "\u4e8c\u6708", "\u4e09\u6708", "\u56db\u6708", "\u4e94\u6708", "\u516d\u6708", "\u4e03\u6708", "\u516b\u6708", "\u4e5d\u6708", "\u5341\u6708", "\u5341\u4e00\u6708", "\u5341\u4e8c\u6708"], "months-standAlone-narrow":["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], "days-format-wide":["\u661f\u671f\u65e5", "\u661f\u671f\u4e00", "\u661f\u671f\u4e8c", "\u661f\u671f\u4e09", "\u661f\u671f\u56db", "\u661f\u671f\u4e94", "\u661f\u671f\u516d"], "field-weekday":"Day of the Week", "dateFormat-medium":"yyyy MMM d", "field-second":"Second", "field-week":"Week", "timeFormat-full":"HH:mm:ss z", "field-year":"Year", "field-minute":"Minute", "timeFormat-medium":"HH:mm:ss", "field-hour":"Hour", "dateFormat-long":"yyyy MMMM d", "field-day":"Day", "field-dayperiod":"Dayperiod", "field-month":"Month", "dateFormat-short":"yy/MM/dd", "field-era":"Era", "timeFormat-short":"HH:mm", "timeFormat-long":"HH:mm:ss z", "dateFormat-full":"EEEE, yyyy MMMM dd", "field-zone":"Zone"})
 __CPAN_DIR__ src/i18n/calendar/nls/ja
 __CPAN_FILE__ src/i18n/calendar/nls/ja/gregorianExtras.js
 /*
@@ -65111,7 +43674,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"dateFormat-yearOnly":"yyyyå¹´"})
+({"dateFormat-yearOnly":"yyyy\u5e74"})
 __CPAN_FILE__ src/i18n/calendar/nls/ja/gregorian.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65123,7 +43686,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"days-standAlone-narrow":["日","月","火","水","木","金","土"],"timeFormat-full":"H'時'mm'分'ss'秒'z","eras":["紀元前","西暦"],"timeFormat-medium":"H:mm:ss","dateFormat-medium":"yyyy/MM/dd","am":"午前","months-format-abbr":["1 月","2 月","3 月","4 月","5 月","6 月","7 月","8 月","9 月","10 月","11 月","12 月"],"dateFormat-full":"yyyy'年'M'月'd'日'EEEE","days-format-abbr":["日","月","火","水","木","金","土"],"timeFormat-long":"H:mm:ss:z","timeFormat-short":"H:mm","pm":"午後","months-format-wide":["1 月","2 月","3 月","4 月","5 月","6 月","7 月","8 月","9 月","10 月","11 月","12 月"],"dateFormat-long":"yyyy'年'M'月'd'日'","days-format-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"field-year":"Year","field-minute":"Minute","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","dateFormat-short":"yy/MM/dd","field-era":"Era","field-zone":"Zone"})
+({"days-standAlone-narrow":["\u65e5", "\u6708", "\u706b", "\u6c34", "\u6728", "\u91d1", "\u571f"], "timeFormat-full":"H'\u6642'mm'\u5206'ss'\u79d2'z", "eras":["\u7d00\u5143\u524d", "\u897f\u66a6"], "timeFormat-medium":"H:mm:ss", "dateFormat-medium":"yyyy/MM/dd", "am":"\u5348\u524d", "months-format-abbr":["1 \u6708", "2 \u6708", "3 \u6708", "4 \u6708", "5 \u6708", "6 \u6708", "7 \u6708", "8 \u6708", "9 \u6708", "10 \u6708", "11 \u6708", "12 \u6708"], "dateFormat-full":"yyyy'\u5e74'M'\u6708'd'\u65e5'EEEE", "days-format-abbr":["\u65e5", "\u6708", "\u706b", "\u6c34", "\u6728", "\u91d1", "\u571f"], "timeFormat-long":"H:mm:ss:z", "timeFormat-short":"H:mm", "pm":"\u5348\u5f8c", "months-format-wide":["1 \u6708", "2 \u6708", "3 \u6708", "4 \u6708", "5 \u6708", "6 \u6708", "7 \u6708", "8 \u6708", "9 \u6708", "10 \u6708", "11 \u6708", "12 \u6708"], "dateFormat-long":"yyyy'\u5e74'M'\u6708'd'\u65e5'", "days-format-wide":["\u65e5\u66dc\u65e5", "\u6708\u66dc\u65e5", "\u706b\u66dc\u65e5", "\u6c34\u66dc\u65e5", "\u6728\u66dc\u65e5", "\u91d1\u66dc\u65e5", "\u571f\u66dc\u65e5"], "field-weekday":"Day of the Week", "field-second":"Second", "field-week":"Week", "months-standAlone-narrow":["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "field-year":"Year", "field-minute":"Minute", "field-hour":"Hour", "field-day":"Day", "field-dayperiod":"Dayperiod", "field-month":"Month", "dateFormat-short":"yy/MM/dd", "field-era":"Era", "field-zone":"Zone"})
 __CPAN_DIR__ src/i18n/calendar/nls/fi
 __CPAN_FILE__ src/i18n/calendar/nls/fi/gregorian.js
 /*
@@ -65136,7 +43699,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"field-weekday":"viikonpäivä","dateFormat-medium":"d.M.yyyy","field-second":"sekunti","field-week":"viikko","pm":"ip.","timeFormat-full":"H.mm.ss v","months-standAlone-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"am":"ap.","days-standAlone-narrow":["S","M","T","K","T","P","L"],"field-year":"vuosi","eras":["eKr.","jKr."],"field-minute":"minuutti","timeFormat-medium":"H.mm.ss","field-hour":"tunti","dateFormat-long":"d. MMMM'ta 'yyyy","field-day":"päivä","field-dayperiod":"ap/ip-valinta","field-month":"kuukausi","dateFormat-short":"d.M.yyyy","months-format-wide":["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],"field-era":"aikakausi","timeFormat-short":"H.mm","months-format-abbr":["tammi","helmi","maalis","huhti","touko","kesä","heinä","elo","syys","loka","marras","joulu"],"timeFormat-long":"'klo 'H.mm.ss","days-format-wide":["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],"dateFormat-full":"EEEE'na 'd. MMMM'ta 'yyyy","field-zone":"aikavyöhyke","days-format-abbr":["su","ma","ti","ke","to","pe","la"]})
+({"field-weekday":"viikonp\xe4iv\xe4", "dateFormat-medium":"d.M.yyyy", "field-second":"sekunti", "field-week":"viikko", "pm":"ip.", "timeFormat-full":"H.mm.ss v", "months-standAlone-narrow":["T", "H", "M", "H", "T", "K", "H", "E", "S", "L", "M", "J"], "am":"ap.", "days-standAlone-narrow":["S", "M", "T", "K", "T", "P", "L"], "field-year":"vuosi", "eras":["eKr.", "jKr."], "field-minute":"minuutti", "timeFormat-medium":"H.mm.ss", "field-hour":"tunti", "dateFormat-long":"d. MMMM'ta 'yyyy", "field-day":"p\xe4iv\xe4", "field-dayperiod":"ap/ip-valinta", "field-month":"kuukausi", "dateFormat-short":"d.M.yyyy", "months-format-wide":["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kes\xe4kuu", "hein\xe4kuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"], "field-era":"aikakausi", "timeFormat-short":"H.mm", "months-format-abbr":["tammi", "helmi", "maalis", "huhti", "touko", "kes\xe4", "hein\xe4", "elo", "syys", "loka", "marras", "joulu"], "timeFormat-long":"'klo 'H.mm.ss", "days-format-wide":["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"], "dateFormat-full":"EEEE'na 'd. MMMM'ta 'yyyy", "field-zone":"aikavy\xf6hyke", "days-format-abbr":["su", "ma", "ti", "ke", "to", "pe", "la"]})
 __CPAN_DIR__ src/i18n/calendar/nls/zh-cn
 __CPAN_FILE__ src/i18n/calendar/nls/zh-cn/gregorian.js
 /*
@@ -65149,7 +43712,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"dateFormat-medium":"yyyy-M-d","field-second":"秒钟","field-week":"周","timeFormat-full":"ahh'时'mm'分'ss'秒' z","field-year":"年","field-minute":"分钟","timeFormat-medium":"ahh:mm:ss","field-hour":"小时","dateFormat-long":"yyyy'年'M'月'd'日'","field-day":"日","field-dayperiod":"上午/下午","field-month":"月","dateFormat-short":"yy-M-d","field-era":"时期","timeFormat-short":"ah:mm","timeFormat-long":"ahh'时'mm'分'ss'秒'","dateFormat-full":"yyyy'年'M'月'd'日'EEEE","field-weekday":"周天","field-zone":"区域","days-standAlone-narrow":["日","一","二","三","四","五","六"],"eras":["公元前","公元"],"am":"上午","months-format-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"days-format-abbr":["周日","周一","周二","周三","周四","周五","周六"],"pm":"下午","months-format-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"months-standAlone-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]})
+({"dateFormat-medium":"yyyy-M-d", "field-second":"\u79d2\u949f", "field-week":"\u5468", "timeFormat-full":"ahh'\u65f6'mm'\u5206'ss'\u79d2' z", "field-year":"\u5e74", "field-minute":"\u5206\u949f", "timeFormat-medium":"ahh:mm:ss", "field-hour":"\u5c0f\u65f6", "dateFormat-long":"yyyy'\u5e74'M'\u6708'd'\u65e5'", "field-day":"\u65e5", "field-dayperiod":"\u4e0a\u5348/\u4e0b\u5348", "field-month":"\u6708", "dateFormat-short":"yy-M-d", "field-era":"\u65f6\u671f", "timeFormat-short":"ah:mm", "timeFormat-long":"ahh'\u65f6'mm'\u5206'ss'\u79d2'", "dateFormat-full":"yyyy'\u5e74'M'\u6708'd'\u65e5'EEEE", "field-weekday":"\u5468\u5929", "field-zone":"\u533a\u57df", "days-standAlone-narrow":["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d"], "eras":["\u516c\u5143\u524d", "\u516c\u5143"], "am":"\u4e0a\u5348", "months-format-abbr":["\u4e00\u6708", "\u4e8c\u6708", "\u4e09\u6708", "\u56db\u6708", "\u4e94\u6708", "\u516d\u6708", "\u4e03\u6708", "\u516b\u6708", "\u4e5d\u6708", "\u5341\u6708", "\u5341\u4e00\u6708", "\u5341\u4e8c\u6708"], "days-format-abbr":["\u5468\u65e5", "\u5468\u4e00", "\u5468\u4e8c", "\u5468\u4e09", "\u5468\u56db", "\u5468\u4e94", "\u5468\u516d"], "pm":"\u4e0b\u5348", "months-format-wide":["\u4e00\u6708", "\u4e8c\u6708", "\u4e09\u6708", "\u56db\u6708", "\u4e94\u6708", "\u516d\u6708", "\u4e03\u6708", "\u516b\u6708", "\u4e5d\u6708", "\u5341\u6708", "\u5341\u4e00\u6708", "\u5341\u4e8c\u6708"], "months-standAlone-narrow":["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], "days-format-wide":["\u661f\u671f\u65e5", "\u661f\u671f\u4e00", "\u661f\u671f\u4e8c", "\u661f\u671f\u4e09", "\u661f\u671f\u56db", "\u661f\u671f\u4e94", "\u661f\u671f\u516d"]})
 __CPAN_DIR__ src/i18n/calendar/nls/ko
 __CPAN_FILE__ src/i18n/calendar/nls/ko/gregorian.js
 /*
@@ -65162,7 +43725,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"months-standAlone-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormat-long":"yyyy'년' M'월' d'일'","timeFormat-full":"a hh'시' mm'분' ss'초' z","eras":["기원전","서기"],"timeFormat-medium":"a hh'시' mm'분'","dateFormat-medium":"yyyy. MM. dd","am":"오전","months-format-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormat-full":"yyyy'년' M'월' d'일' EEEE","days-format-abbr":["일","월","화","수","목","금","토"],"timeFormat-long":"a hh'시' mm'분' ss'초'","timeFormat-short":"a hh'시' mm'분'","dateFormat-short":"yy. MM. dd","pm":"오후","months-format-wide":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"days-standAlone-narrow":["일","월","화","수","목","금","토"],"days-format-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","field-year":"Year","field-minute":"Minute","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","field-era":"Era","field-zone":"Zone"})
+({"months-standAlone-narrow":["1\uc6d4", "2\uc6d4", "3\uc6d4", "4\uc6d4", "5\uc6d4", "6\uc6d4", "7\uc6d4", "8\uc6d4", "9\uc6d4", "10\uc6d4", "11\uc6d4", "12\uc6d4"], "dateFormat-long":"yyyy'\ub144' M'\uc6d4' d'\uc77c'", "timeFormat-full":"a hh'\uc2dc' mm'\ubd84' ss'\ucd08' z", "eras":["\uae30\uc6d0\uc804", "\uc11c\uae30"], "timeFormat-medium":"a hh'\uc2dc' mm'\ubd84'", "dateFormat-medium":"yyyy. MM. dd", "am":"\uc624\uc804", "months-format-abbr":["1\uc6d4", "2\uc6d4", "3\uc6d4", "4\uc6d4", "5\uc6d4", "6\uc6d4", "7\uc6d4", "8\uc6d4", "9\uc6d4", "10\uc6d4", "11\uc6d4", "12\uc6d4"], "dateFormat-full":"yyyy'\ub144' M'\uc6d4' d'\uc77c' EEEE", "days-format-abbr":["\uc77c", "\uc6d4", "\ud654", "\uc218", "\ubaa9", "\uae08", "\ud1a0"], "timeFormat-long":"a hh'\uc2dc' mm'\ubd84' ss'\ucd08'", "timeFormat-short":"a hh'\uc2dc' mm'\ubd84'", "dateFormat-short":"yy. MM. dd", "pm":"\uc624\ud6c4", "months-format-wide":["1\uc6d4", "2\uc6d4", "3\uc6d4", "4\uc6d4", "5\uc6d4", "6\uc6d4", "7\uc6d4", "8\uc6d4", "9\uc6d4", "10\uc6d4", "11\uc6d4", "12\uc6d4"], "days-standAlone-narrow":["\uc77c", "\uc6d4", "\ud654", "\uc218", "\ubaa9", "\uae08", "\ud1a0"], "days-format-wide":["\uc77c\uc694\uc77c", "\uc6d4\uc694\uc77c", "\ud654\uc694\uc77c", "\uc218\uc694\uc77c", "\ubaa9\uc694\uc77c", "\uae08\uc694\uc77c", "\ud1a0\uc694\uc77c"], "field-weekday":"Day of the Week", "field-second":"Second", "field-week":"Week", "field-year":"Year", "field-minute":"Minute", "field-hour":"Hour", "field-day":"Day", "field-dayperiod":"Dayperiod", "field-month":"Month", "field-era":"Era", "field-zone":"Zone"})
 __CPAN_DIR__ src/i18n/calendar/nls/sv
 __CPAN_FILE__ src/i18n/calendar/nls/sv/gregorian.js
 /*
@@ -65175,7 +43738,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"field-weekday":"veckodag","dateFormat-medium":"d MMM yyyy","field-second":"sekund","field-week":"vecka","pm":"em","timeFormat-full":"'kl. 'HH.mm.ss z","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"am":"fm","days-standAlone-narrow":["S","M","T","O","T","F","L"],"field-year":"år","eras":["f.Kr.","e.Kr."],"field-minute":"minut","timeFormat-medium":"HH.mm.ss","field-hour":"timme","dateFormat-long":"EEEE d MMM yyyy","field-day":"dag","field-dayperiod":"dagsperiod","field-month":"månad","dateFormat-short":"yyyy-MM-dd","months-format-wide":["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],"field-era":"era","timeFormat-short":"HH.mm","months-format-abbr":["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],"timeFormat-long":"HH.mm.ss z","days-format-wide":["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],"dateFormat-full":"EEEE'en den' d MMMM yyyy","field-zone":"tidszon","days-format-abbr":["sö","må","ti","on","to","fr","lö"]})
+({"field-weekday":"veckodag", "dateFormat-medium":"d MMM yyyy", "field-second":"sekund", "field-week":"vecka", "pm":"em", "timeFormat-full":"'kl. 'HH.mm.ss z", "months-standAlone-narrow":["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "am":"fm", "days-standAlone-narrow":["S", "M", "T", "O", "T", "F", "L"], "field-year":"\xe5r", "eras":["f.Kr.", "e.Kr."], "field-minute":"minut", "timeFormat-medium":"HH.mm.ss", "field-hour":"timme", "dateFormat-long":"EEEE d MMM yyyy", "field-day":"dag", "field-dayperiod":"dagsperiod", "field-month":"m\xe5nad", "dateFormat-short":"yyyy-MM-dd", "months-format-wide":["januari", "februari", "mars", "april", "maj", "juni", "juli", "augusti", "september", "oktober", "november", "december"], "field-era":"era", "timeFormat-short":"HH.mm", "months-format-abbr":["jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"], "timeFormat-long":"HH.mm.ss z", "days-format-wide":["s\xf6ndag", "m\xe5ndag", "tisdag", "onsdag", "torsdag", "fredag", "l\xf6rdag"], "dateFormat-full":"EEEE'en den' d MMMM yyyy", "field-zone":"tidszon", "days-format-abbr":["s\xf6", "m\xe5", "ti", "on", "to", "fr", "l\xf6"]})
 __CPAN_DIR__ src/i18n/calendar/nls/en
 __CPAN_FILE__ src/i18n/calendar/nls/en/gregorian.js
 /*
@@ -65188,7 +43751,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormat-long":"MMMM d, yyyy","timeFormat-full":"h:mm:ss a v","eras":["BC","AD"],"timeFormat-medium":"h:mm:ss a","dateFormat-medium":"MMM d, yyyy","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dateFormat-full":"EEEE, MMMM d, yyyy","days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"timeFormat-long":"h:mm:ss a z","timeFormat-short":"h:mm a","dateFormat-short":"M/d/yy","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"days-standAlone-narrow":["S","M","T","W","T","F","S"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","pm":"PM","am":"AM","field-year":"Year","field-minute":"Minute","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","field-era":"Era","field-zone":"Zone"})
+({"months-standAlone-narrow":["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "dateFormat-long":"MMMM d, yyyy", "timeFormat-full":"h:mm:ss a v", "eras":["BC", "AD"], "timeFormat-medium":"h:mm:ss a", "dateFormat-medium":"MMM d, yyyy", "months-format-abbr":["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], "dateFormat-full":"EEEE, MMMM d, yyyy", "days-format-abbr":["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], "timeFormat-long":"h:mm:ss a z", "timeFormat-short":"h:mm a", "dateFormat-short":"M/d/yy", "months-format-wide":["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], "days-standAlone-narrow":["S", "M", "T", "W", "T", "F", "S"], "days-format-wide":["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], "field-weekday":"Day of the Week", "field-second":"Second", "field-week":"Week", "pm":"PM", "am":"AM", "field-year":"Year", "field-minute":"Minute", "field-hour":"Hour", "field-day":"Day", "field-dayperiod":"Dayperiod", "field-month":"Month", "field-era":"Era", "field-zone":"Zone"})
 __CPAN_DIR__ src/i18n/calendar/nls/zh-hk
 __CPAN_FILE__ src/i18n/calendar/nls/zh-hk/gregorian.js
 /*
@@ -65201,7 +43764,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"timeFormat-full":"ahh'時'mm'分'ss'秒' z","eras":["西元前","西元"],"timeFormat-medium":"a h:mm:ss","dateFormat-medium":"yyyy/M/d","dateFormat-full":"yyyy'年'M'月'd'日'EEEE","days-format-abbr":["週日","週一","週二","週三","週四","週五","週六"],"timeFormat-long":"ahh'時'mm'分'ss'秒'","timeFormat-short":"a h:mm","dateFormat-short":"yyyy/M/d","dateFormat-long":"yyyy'年'M'月'd'日'","days-standAlone-narrow":["日","一","二","三","四","五","六"],"am":"上午","months-format-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"pm":"下午","months-format-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"months-standAlone-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","field-year":"Year","field-minute":"Minute","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","field-era":"Era","field-zone":"Zone"})
+({"timeFormat-full":"ahh'\u6642'mm'\u5206'ss'\u79d2' z", "eras":["\u897f\u5143\u524d", "\u897f\u5143"], "timeFormat-medium":"a h:mm:ss", "dateFormat-medium":"yyyy/M/d", "dateFormat-full":"yyyy'\u5e74'M'\u6708'd'\u65e5'EEEE", "days-format-abbr":["\u9031\u65e5", "\u9031\u4e00", "\u9031\u4e8c", "\u9031\u4e09", "\u9031\u56db", "\u9031\u4e94", "\u9031\u516d"], "timeFormat-long":"ahh'\u6642'mm'\u5206'ss'\u79d2'", "timeFormat-short":"a h:mm", "dateFormat-short":"yyyy/M/d", "dateFormat-long":"yyyy'\u5e74'M'\u6708'd'\u65e5'", "days-standAlone-narrow":["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d"], "am":"\u4e0a\u5348", "months-format-abbr":["\u4e00\u6708", "\u4e8c\u6708", "\u4e09\u6708", "\u56db\u6708", "\u4e94\u6708", "\u516d\u6708", "\u4e03\u6708", "\u516b\u6708", "\u4e5d\u6708", "\u5341\u6708", "\u5341\u4e00\u6708", "\u5341\u4e8c\u6708"], "pm":"\u4e0b\u5348", "months-format-wide":["\u4e00\u6708", "\u4e8c\u6708", "\u4e09\u6708", "\u56db\u6708", "\u4e94\u6708", "\u516d\u6708", "\u4e03\u6708", "\u516b\u6708", "\u4e5d\u6708", "\u5341\u6708", "\u5341\u4e00\u6708", "\u5341\u4e8c\u6708"], "months-standAlone-narrow":["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], "days-format-wide":["\u661f\u671f\u65e5", "\u661f\u671f\u4e00", "\u661f\u671f\u4e8c", "\u661f\u671f\u4e09", "\u661f\u671f\u56db", "\u661f\u671f\u4e94", "\u661f\u671f\u516d"], "field-weekday":"Day of the Week", "field-second":"Second", "field-week":"Week", "field-year":"Year", "field-minute":"Minute", "field-hour":"Hour", "field-day":"Day", "field-dayperiod":"Dayperiod", "field-month":"Month", "field-era":"Era", "field-zone":"Zone"})
 __CPAN_DIR__ src/i18n/calendar/nls/zh-tw
 __CPAN_FILE__ src/i18n/calendar/nls/zh-tw/gregorian.js
 /*
@@ -65214,7 +43777,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"dateFormat-medium":"yyyy'年'M'月'd'日'","field-second":"秒","field-week":"週","timeFormat-full":"ahh'時'mm'分'ss'秒' z","eras":["西元前","西元"],"field-year":"年","field-minute":"分鐘","timeFormat-medium":"ahh:mm:ss","field-hour":"小時","dateFormat-long":"yyyy'年'M'月'd'日'","field-day":"整日","field-dayperiod":"日間","field-month":"月","dateFormat-short":"yy'年'M'月'd'日'","field-era":"年代","timeFormat-short":"ah:mm","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"timeFormat-long":"ahh'時'mm'分'ss'秒'","field-weekday":"週天","dateFormat-full":"yyyy'年'M'月'd'日'EEEE","field-zone":"區域","days-standAlone-narrow":["日","一","二","三","四","五","六"],"am":"上午","days-format-abbr":["周日","周一","周二","周三","周四","周五","周六"],"pm":"下午","months-format-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"months-standAlone-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]})
+({"dateFormat-medium":"yyyy'\u5e74'M'\u6708'd'\u65e5'", "field-second":"\u79d2", "field-week":"\u9031", "timeFormat-full":"ahh'\u6642'mm'\u5206'ss'\u79d2' z", "eras":["\u897f\u5143\u524d", "\u897f\u5143"], "field-year":"\u5e74", "field-minute":"\u5206\u9418", "timeFormat-medium":"ahh:mm:ss", "field-hour":"\u5c0f\u6642", "dateFormat-long":"yyyy'\u5e74'M'\u6708'd'\u65e5'", "field-day":"\u6574\u65e5", "field-dayperiod":"\u65e5\u9593", "field-month":"\u6708", "dateFormat-short":"yy'\u5e74'M'\u6708'd'\u65e5'", "field-era":"\u5e74\u4ee3", "timeFormat-short":"ah:mm", "months-format-abbr":["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], "timeFormat-long":"ahh'\u6642'mm'\u5206'ss'\u79d2'", "field-weekday":"\u9031\u5929", "dateFormat-full":"yyyy'\u5e74'M'\u6708'd'\u65e5'EEEE", "field-zone":"\u5340\u57df", "days-standAlone-narrow":["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d"], "am":"\u4e0a\u5348", "days-format-abbr":["\u5468\u65e5", "\u5468\u4e00", "\u5468\u4e8c", "\u5468\u4e09", "\u5468\u56db", "\u5468\u4e94", "\u5468\u516d"], "pm":"\u4e0b\u5348", "months-format-wide":["\u4e00\u6708", "\u4e8c\u6708", "\u4e09\u6708", "\u56db\u6708", "\u4e94\u6708", "\u516d\u6708", "\u4e03\u6708", "\u516b\u6708", "\u4e5d\u6708", "\u5341\u6708", "\u5341\u4e00\u6708", "\u5341\u4e8c\u6708"], "months-standAlone-narrow":["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], "days-format-wide":["\u661f\u671f\u65e5", "\u661f\u671f\u4e00", "\u661f\u671f\u4e8c", "\u661f\u671f\u4e09", "\u661f\u671f\u56db", "\u661f\u671f\u4e94", "\u661f\u671f\u516d"]})
 __CPAN_DIR__ src/i18n/calendar/nls/pt
 __CPAN_FILE__ src/i18n/calendar/nls/pt/gregorian.js
 /*
@@ -65227,7 +43790,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormat-long":"d' de 'MMMM' de 'yyyy","timeFormat-full":"HH'H'mm'm'ss's' z","eras":["a.C.","d.C."],"dateFormat-medium":"d/MMM/yyyy","months-format-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"dateFormat-full":"EEEE, d' de 'MMMM' de 'yyyy","days-format-abbr":["dom","seg","ter","qua","qui","sex","sáb"],"dateFormat-short":"dd-MM-yyyy","months-format-wide":["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"days-standAlone-narrow":["D","S","T","Q","Q","S","S"],"days-format-wide":["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","pm":"PM","am":"AM","field-year":"Year","field-minute":"Minute","timeFormat-medium":"HH:mm:ss","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","field-era":"Era","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z","field-zone":"Zone"})
+({"months-standAlone-narrow":["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "dateFormat-long":"d' de 'MMMM' de 'yyyy", "timeFormat-full":"HH'H'mm'm'ss's' z", "eras":["a.C.", "d.C."], "dateFormat-medium":"d/MMM/yyyy", "months-format-abbr":["jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez"], "dateFormat-full":"EEEE, d' de 'MMMM' de 'yyyy", "days-format-abbr":["dom", "seg", "ter", "qua", "qui", "sex", "s\xe1b"], "dateFormat-short":"dd-MM-yyyy", "months-format-wide":["janeiro", "fevereiro", "mar\xe7o", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"], "days-standAlone-narrow":["D", "S", "T", "Q", "Q", "S", "S"], "days-format-wide":["domingo", "segunda-feira", "ter\xe7a-feira", "quarta-feira", "quinta-feira", "sexta-feira", "s\xe1bado"], "field-weekday":"Day of the Week", "field-second":"Second", "field-week":"Week", "pm":"PM", "am":"AM", "field-year":"Year", "field-minute":"Minute", "timeFormat-medium":"HH:mm:ss", "field-hour":"Hour", "field-day":"Day", "field-dayperiod":"Dayperiod", "field-month":"Month", "field-era":"Era", "timeFormat-short":"HH:mm", "timeFormat-long":"HH:mm:ss z", "field-zone":"Zone"})
 __CPAN_DIR__ src/i18n/calendar/nls/it
 __CPAN_FILE__ src/i18n/calendar/nls/it/gregorian.js
 /*
@@ -65240,7 +43803,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"field-weekday":"giorno della settimana","dateFormat-medium":"dd/MMM/yy","field-second":"secondo","field-week":"settimana","pm":"p.","months-standAlone-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"am":"m.","days-standAlone-narrow":["D","L","M","M","G","V","S"],"field-year":"anno","eras":["aC","dC"],"field-minute":"minuto","field-hour":"ora","dateFormat-long":"dd MMMM yyyy","field-day":"giorno","field-dayperiod":"periodo del giorno","field-month":"mese","dateFormat-short":"dd/MM/yy","months-format-wide":["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],"field-era":"era","months-format-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"days-format-wide":["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"],"dateFormat-full":"EEEE d MMMM yyyy","field-zone":"zona","days-format-abbr":["dom","lun","mar","mer","gio","ven","sab"],"timeFormat-full":"HH:mm:ss z","timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"})
+({"field-weekday":"giorno della settimana", "dateFormat-medium":"dd/MMM/yy", "field-second":"secondo", "field-week":"settimana", "pm":"p.", "months-standAlone-narrow":["G", "F", "M", "A", "M", "G", "L", "A", "S", "O", "N", "D"], "am":"m.", "days-standAlone-narrow":["D", "L", "M", "M", "G", "V", "S"], "field-year":"anno", "eras":["aC", "dC"], "field-minute":"minuto", "field-hour":"ora", "dateFormat-long":"dd MMMM yyyy", "field-day":"giorno", "field-dayperiod":"periodo del giorno", "field-month":"mese", "dateFormat-short":"dd/MM/yy", "months-format-wide":["gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre"], "field-era":"era", "months-format-abbr":["gen", "feb", "mar", "apr", "mag", "giu", "lug", "ago", "set", "ott", "nov", "dic"], "days-format-wide":["domenica", "luned\xec", "marted\xec", "mercoled\xec", "gioved\xec", "venerd\xec", "sabato"], "dateFormat-full":"EEEE d MMMM yyyy", "field-zone":"zona", "days-format-abbr":["dom", "lun", "mar", "mer", "gio", "ven", "sab"], "timeFormat-full":"HH:mm:ss z", "timeFormat-medium":"HH:mm:ss", "timeFormat-short":"HH:mm", "timeFormat-long":"HH:mm:ss z"})
 __CPAN_DIR__ src/i18n/calendar/nls/hu
 __CPAN_FILE__ src/i18n/calendar/nls/hu/gregorian.js
 /*
@@ -65253,7 +43816,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"field-weekday":"hét napja","dateFormat-medium":"yyyy MMM d","field-second":"másodperc","field-week":"hét","pm":"d.u.","timeFormat-full":"h:mm:ss a v","months-standAlone-narrow":["J","F","M","Á","M","J","J","A","S","O","N","D"],"am":"d.e.","days-standAlone-narrow":["V","H","K","Sz","Cs","P","Sz"],"field-year":"év","eras":["k.e.","k.u."],"field-minute":"perc","timeFormat-medium":"h:mm:ss a","field-hour":"óra","dateFormat-long":"yyyy MMMM d","field-day":"nap","field-dayperiod":"napszak","field-month":"hónap","dateFormat-short":"yyyy-M-d","months-format-wide":["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],"field-era":"éra","timeFormat-short":"h:mm a","months-format-abbr":["jan","feb","már","apr","máj","jún","júl","aug","sze","okt","nov","dec"],"timeFormat-long":"h:mm:ss a z","days-format-wide":["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"],"dateFormat-full":"yyyy MMMM d, EEEE","field-zone":"zóna","days-format-abbr":["Va","Hé","Ke","Sze","Csü","Pé","Szo"]})
+({"field-weekday":"h\xe9t napja", "dateFormat-medium":"yyyy MMM d", "field-second":"m\xe1sodperc", "field-week":"h\xe9t", "pm":"d.u.", "timeFormat-full":"h:mm:ss a v", "months-standAlone-narrow":["J", "F", "M", "\xc1", "M", "J", "J", "A", "S", "O", "N", "D"], "am":"d.e.", "days-standAlone-narrow":["V", "H", "K", "Sz", "Cs", "P", "Sz"], "field-year":"\xe9v", "eras":["k.e.", "k.u."], "field-minute":"perc", "timeFormat-medium":"h:mm:ss a", "field-hour":"\xf3ra", "dateFormat-long":"yyyy MMMM d", "field-day":"nap", "field-dayperiod":"napszak", "field-month":"h\xf3nap", "dateFormat-short":"yyyy-M-d", "months-format-wide":["janu\xe1r", "febru\xe1r", "m\xe1rcius", "\xe1prilis", "m\xe1jus", "j\xfanius", "j\xfalius", "augusztus", "szeptember", "okt\xf3ber", "november", "december"], "field-era":"\xe9ra", "timeFormat-short":"h:mm a", "months-format-abbr":["jan", "feb", "m\xe1r", "apr", "m\xe1j", "j\xfan", "j\xfal", "aug", "sze", "okt", "nov", "dec"], "timeFormat-long":"h:mm:ss a z", "days-format-wide":["vas\xe1rnap", "h\xe9tf\u0151", "kedd", "szerda", "cs\xfct\xf6rt\xf6k", "p\xe9ntek", "szombat"], "dateFormat-full":"yyyy MMMM d, EEEE", "field-zone":"z\xf3na", "days-format-abbr":["Va", "H\xe9", "Ke", "Sze", "Cs\xfc", "P\xe9", "Szo"]})
 __CPAN_DIR__ src/i18n/calendar/nls/pt-br
 __CPAN_FILE__ src/i18n/calendar/nls/pt-br/gregorian.js
 /*
@@ -65266,7 +43829,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"field-hour":"Hora","field-dayperiod":"Período do dia","field-minute":"Minuto","timeFormat-full":"HH'h'mm'min'ss's' z","field-weekday":"Dia da semana","field-week":"Semana","field-second":"Segundo","dateFormat-medium":"dd/MM/yyyy","field-day":"Dia","timeFormat-long":"H'h'm'min's's' z","field-month":"Mês","field-year":"Ano","dateFormat-short":"dd/MM/yy","field-zone":"Fuso","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormat-long":"d' de 'MMMM' de 'yyyy","eras":["a.C.","d.C."],"months-format-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"dateFormat-full":"EEEE, d' de 'MMMM' de 'yyyy","days-format-abbr":["dom","seg","ter","qua","qui","sex","sáb"],"months-format-wide":["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"days-standAlone-narrow":["D","S","T","Q","Q","S","S"],"days-format-wide":["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],"pm":"PM","am":"AM","timeFormat-medium":"HH:mm:ss","field-era":"Era","timeFormat-short":"HH:mm"})
+({"field-hour":"Hora", "field-dayperiod":"Per\xedodo do dia", "field-minute":"Minuto", "timeFormat-full":"HH'h'mm'min'ss's' z", "field-weekday":"Dia da semana", "field-week":"Semana", "field-second":"Segundo", "dateFormat-medium":"dd/MM/yyyy", "field-day":"Dia", "timeFormat-long":"H'h'm'min's's' z", "field-month":"M\xeas", "field-year":"Ano", "dateFormat-short":"dd/MM/yy", "field-zone":"Fuso", "months-standAlone-narrow":["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "dateFormat-long":"d' de 'MMMM' de 'yyyy", "eras":["a.C.", "d.C."], "months-format-abbr":["jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez"], "dateFormat-full":"EEEE, d' de 'MMMM' de 'yyyy", "days-format-abbr":["dom", "seg", "ter", "qua", "qui", "sex", "s\xe1b"], "months-format-wide":["janeiro", "fevereiro", "mar\xe7o", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"], "days-standAlone-narrow":["D", "S", "T", "Q", "Q", "S", "S"], "days-format-wide":["domingo", "segunda-feira", "ter\xe7a-feira", "quarta-feira", "quinta-feira", "sexta-feira", "s\xe1bado"], "pm":"PM", "am":"AM", "timeFormat-medium":"HH:mm:ss", "field-era":"Era", "timeFormat-short":"HH:mm"})
 __CPAN_DIR__ src/i18n/calendar/nls/fr
 __CPAN_FILE__ src/i18n/calendar/nls/fr/gregorian.js
 /*
@@ -65279,7 +43842,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"field-weekday":"jour de la semaine","dateFormat-medium":"d MMM yy","field-second":"seconde","field-week":"semaine","pm":"ap. m.","timeFormat-full":"HH' h 'mm z","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"am":"matin","days-standAlone-narrow":["D","L","M","M","J","V","S"],"field-year":"année","eras":["av. J.-C.","apr. J.-C."],"field-minute":"minute","field-hour":"heure","dateFormat-long":"d MMMM yyyy","field-day":"jour","field-dayperiod":"période de la journée","field-month":"mois","dateFormat-short":"dd/MM/yy","months-format-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"field-era":"époque","months-format-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"days-format-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"dateFormat-full":"EEEE d MMMM yyyy","field-zone":"zone","days-format-abbr":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"})
+({"field-weekday":"jour de la semaine", "dateFormat-medium":"d MMM yy", "field-second":"seconde", "field-week":"semaine", "pm":"ap. m.", "timeFormat-full":"HH' h 'mm z", "months-standAlone-narrow":["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "am":"matin", "days-standAlone-narrow":["D", "L", "M", "M", "J", "V", "S"], "field-year":"ann\xe9e", "eras":["av. J.-C.", "apr. J.-C."], "field-minute":"minute", "field-hour":"heure", "dateFormat-long":"d MMMM yyyy", "field-day":"jour", "field-dayperiod":"p\xe9riode de la journ\xe9e", "field-month":"mois", "dateFormat-short":"dd/MM/yy", "months-format-wide":["janvier", "f\xe9vrier", "mars", "avril", "mai", "juin", "juillet", "ao\xfbt", "septembre", "octobre", "novembre", "d\xe9cembre"], "field-era":"\xe9poque", "months-format-abbr":["janv.", "f\xe9vr.", "mars", "avr.", "mai", "juin", "juil.", "ao\xfbt", "sept.", "oct.", "nov.", "d\xe9c."], "days-format-wide":["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"], "dateFormat-full":"EEEE d MMMM yyyy", "field-zone":"zone", "days-format-abbr":["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."], "timeFormat-medium":"HH:mm:ss", "timeFormat-short":"HH:mm", "timeFormat-long":"HH:mm:ss z"})
 __CPAN_DIR__ src/i18n/calendar/nls/nl
 __CPAN_FILE__ src/i18n/calendar/nls/nl/gregorian.js
 /*
@@ -65292,7 +43855,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"dateFormat-medium":"d MMM yyyy","field-second":"Seconde","timeFormat-full":"HH:mm:ss v","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"days-standAlone-narrow":["Z","M","D","W","D","V","Z"],"field-year":"Jaar","eras":["v. Chr.","n. Chr."],"field-minute":"Minuut","field-hour":"Uur","dateFormat-long":"d MMMM yyyy","field-day":"Dag","field-dayperiod":"Dagdeel","field-month":"Maand","dateFormat-short":"dd-MM-yy","months-format-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"field-era":"Tijdperk","months-format-abbr":["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],"days-format-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"dateFormat-full":"EEEE d MMMM yyyy","days-format-abbr":["zo","ma","di","wo","do","vr","za"],"field-weekday":"Dag van de week","field-week":"Week","pm":"PM","am":"AM","timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z","field-zone":"Zone"})
+({"dateFormat-medium":"d MMM yyyy", "field-second":"Seconde", "timeFormat-full":"HH:mm:ss v", "months-standAlone-narrow":["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "days-standAlone-narrow":["Z", "M", "D", "W", "D", "V", "Z"], "field-year":"Jaar", "eras":["v. Chr.", "n. Chr."], "field-minute":"Minuut", "field-hour":"Uur", "dateFormat-long":"d MMMM yyyy", "field-day":"Dag", "field-dayperiod":"Dagdeel", "field-month":"Maand", "dateFormat-short":"dd-MM-yy", "months-format-wide":["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"], "field-era":"Tijdperk", "months-format-abbr":["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"], "days-format-wide":["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"], "dateFormat-full":"EEEE d MMMM yyyy", "days-format-abbr":["zo", "ma", "di", "wo", "do", "vr", "za"], "field-weekday":"Dag van de week", "field-week":"Week", "pm":"PM", "am":"AM", "timeFormat-medium":"HH:mm:ss", "timeFormat-short":"HH:mm", "timeFormat-long":"HH:mm:ss z", "field-zone":"Zone"})
 __CPAN_DIR__ src/i18n/currency
 __CPAN_FILE__ src/i18n/currency/common.js
 /*
@@ -65306,285 +43869,132 @@
 */
 
 dojo.provide("dojo.i18n.currency.common");
-
 dojo.require("dojo.experimental");
 dojo.experimental("dojo.i18n.currency");
-
 dojo.require("dojo.regexp");
 dojo.require("dojo.i18n.common");
 dojo.require("dojo.i18n.number");
 dojo.require("dojo.lang.common");
-
-/**
-* Method to Format and validate a given number a monetary value
-*
-* @param Number value
-*	The number to be formatted and validated.
-* @param String iso the ISO 4217 currency code
-* @param Object flags
-*   flags.places The number of decimal places to be included in the formatted number
-* @param String locale the locale to determine formatting used.  By default, the locale defined by the
-*   host environment: dojo.locale
-* @return String
-* 	the formatted currency of type String if successful; Nan if an
-* 	invalid currency is provided or null if an unsupported locale value was provided.
-**/
-dojo.i18n.currency.format = function(value, iso, flags /*optional*/, locale /*optional*/){
+dojo.i18n.currency.format = function (value, iso, flags, locale) {
 	flags = (typeof flags == "object") ? flags : {};
-
 	var formatData = dojo.i18n.currency._mapToLocalizedFormatData(dojo.i18n.currency.FORMAT_TABLE, iso, locale);
-	if (typeof flags.places == "undefined") {flags.places = formatData.places;}
-	if (typeof flags.places == "undefined") {flags.places = 2;}
+	if (typeof flags.places == "undefined") {
+		flags.places = formatData.places;
+	}
+	if (typeof flags.places == "undefined") {
+		flags.places = 2;
+	}
 	flags.signed = false;
-
 	var result = dojo.i18n.number.format(value, flags, locale);
-
 	var sym = formatData.symbol;
-	if (formatData.adjSpace == "symbol"){ 
-		if (formatData.placement == "after"){
-			sym = " " + sym;// TODO: nbsp?
-		}else{
-			sym = sym + " ";// TODO: nbsp?
+	if (formatData.adjSpace == "symbol") {
+		if (formatData.placement == "after") {
+			sym = " " + sym;
+		} else {
+			sym = sym + " ";
 		}
 	}
-
-	if (value < 0){
-		if (formatData.signPlacement == "before"){
+	if (value < 0) {
+		if (formatData.signPlacement == "before") {
 			sym = "-" + sym;
-		}else if (formatData.signPlacement == "after"){
-			sym = sym + "-";
+		} else {
+			if (formatData.signPlacement == "after") {
+				sym = sym + "-";
+			}
 		}
 	}
-
-	var spc = (formatData.adjSpace == "number") ? " " : ""; // TODO: nbsp?
-	if (formatData.placement == "after"){
+	var spc = (formatData.adjSpace == "number") ? " " : "";
+	if (formatData.placement == "after") {
 		result = result + spc + sym;
-	}else{
+	} else {
 		result = sym + spc + result;
 	}
-
-	if (value < 0){
-		if (formatData.signPlacement == "around"){
+	if (value < 0) {
+		if (formatData.signPlacement == "around") {
 			result = "(" + result + ")";
-		}else if (formatData.signPlacement == "end"){
-			result = result + "-";
-		}else if (!formatData.signPlacement || formatData.signPlacement == "begin"){
-			result = "-" + result;
+		} else {
+			if (formatData.signPlacement == "end") {
+				result = result + "-";
+			} else {
+				if (!formatData.signPlacement || formatData.signPlacement == "begin") {
+					result = "-" + result;
+				}
+			}
 		}
 	}
-
 	return result;
 };
-
-/**
-* Method to convert a properly formatted monetary value to a primative numeric value.
-*
-* @param String value
-*	The int string to be convertted
-  @param String iso the ISO 4217 currency code
-* @param String locale the locale to determine formatting used.  By default, the locale defined by the
-*   host environment: dojo.locale
-* @param Object flags
-*   flags.validate true to check the string for strict adherence to the locale settings for separator, sign, etc.
-*     Default is true
-* @return Number
-* 	Returns a primative numeric value, Number.NaN if unable to convert to a number, or null if an unsupported locale is provided.
-**/
-dojo.i18n.currency.parse = function(value, iso, locale, flags /*optional*/){
-	if (typeof flags.validate == "undefined") {flags.validate = true;}
-
+dojo.i18n.currency.parse = function (value, iso, locale, flags) {
+	if (typeof flags.validate == "undefined") {
+		flags.validate = true;
+	}
 	if (flags.validate && !dojo.i18n.number.isCurrency(value, iso, locale, flags)) {
 		return Number.NaN;
 	}
-
-	var sign = (value.indexOf('-') != -1);
+	var sign = (value.indexOf("-") != -1);
 	var abs = abs.replace(/\-/, "");
-
 	var formatData = dojo.i18n.currency._mapToLocalizedFormatData(dojo.i18n.currency.FORMAT_TABLE, iso, locale);
 	abs = abs.replace(new RegExp("\\" + formatData.symbol), "");
-	//TODO: trim?
-
 	var number = dojo.i18n.number.parse(abs, locale, flags);
-	if (sign){number = number * -1;}
+	if (sign) {
+		number = number * -1;
+	}
 	return number;
 };
-
-/**
-  Validates whether a string denotes a monetary value. 
-
-  @param value  A string
-  @param iso the ISO 4217 currency code
-  @param locale the locale to determine formatting used.  By default, the locale defined by the
-    host environment: dojo.locale
-  @param flags  An object
-    flags.symbol  A currency symbol such as Yen "�", Pound "�", or the Euro sign "�".  
-        The default is specified by the iso code.  For more than one symbol use an array, e.g. ["$", ""], makes $ optional.
-        The empty array [] makes the default currency symbol optional.
-    flags.placement  The symbol can come "before" or "after".  The default is specified by the iso code.
-    flags.signed  The leading plus-or-minus sign.  Can be true, false, or [true, false].
-      Default is [true, false], (i.e. sign is optional).
-    flags.signPlacement  The sign can come "before" or "after" the symbol or "around" the whole expression
-    	with parenthesis, such as CAD: (123$).  The default is specified by the iso code.
-    flags.separator  The character used as the thousands separator. The default is specified by the locale.
-        The empty array [] makes the default separator optional.
-    flags.fractional  The appropriate number of decimal places for fractional currency (e.g. cents)
-      Can be true, false, or [true, false].  Default is [true, false], (i.e. cents are optional).
-    flags.places  The integer number of decimal places.
-      If not given, an amount appropriate to the iso code is used.
-    flags.fractional  The appropriate number of decimal places for fractional currency (e.g. cents)
-      Can be true, false, or [true, false].  Default is [true, false], (i.e. cents are optional).
-    flags.decimal  The character used for the decimal point.  The default is specified by the locale.
-  @return  true or false.
-*/
-dojo.i18n.currency.isCurrency = function(value, iso, locale /*optional*/, flags){
+dojo.i18n.currency.isCurrency = function (value, iso, locale, flags) {
 	flags = (typeof flags == "object") ? flags : {};
-
 	var numberFormatData = dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE, locale);
-	if (typeof flags.separator == "undefined") {flags.separator = numberFormatData[0];}
-	else if (dojo.lang.isArray(flags.separator) && flags.separator.length == 0){flags.separator = [numberFormatData[0],""];}
-	if (typeof flags.decimal == "undefined") {flags.decimal = numberFormatData[2];}
-	if (typeof flags.groupSize == "undefined") {flags.groupSize = numberFormatData[3];}
-	if (typeof flags.groupSize2 == "undefined") {flags.groupSize2 = numberFormatData[4];}
-
+	if (typeof flags.separator == "undefined") {
+		flags.separator = numberFormatData[0];
+	} else {
+		if (dojo.lang.isArray(flags.separator) && flags.separator.length == 0) {
+			flags.separator = [numberFormatData[0], ""];
+		}
+	}
+	if (typeof flags.decimal == "undefined") {
+		flags.decimal = numberFormatData[2];
+	}
+	if (typeof flags.groupSize == "undefined") {
+		flags.groupSize = numberFormatData[3];
+	}
+	if (typeof flags.groupSize2 == "undefined") {
+		flags.groupSize2 = numberFormatData[4];
+	}
 	var formatData = dojo.i18n.currency._mapToLocalizedFormatData(dojo.i18n.currency.FORMAT_TABLE, iso, locale);
-	if (typeof flags.places == "undefined") {flags.places = formatData.places;}
-	if (typeof flags.places == "undefined") {flags.places = 2;}
-	if (typeof flags.symbol == "undefined") {flags.symbol = formatData.symbol;}
-	else if (dojo.lang.isArray(flags.symbol) && flags.symbol.length == 0){flags.symbol = [formatData.symbol,""];}
-	if (typeof flags.placement == "undefined") {flags.placement = formatData.placement;}
-	//TODO more... or mixin?
-
+	if (typeof flags.places == "undefined") {
+		flags.places = formatData.places;
+	}
+	if (typeof flags.places == "undefined") {
+		flags.places = 2;
+	}
+	if (typeof flags.symbol == "undefined") {
+		flags.symbol = formatData.symbol;
+	} else {
+		if (dojo.lang.isArray(flags.symbol) && flags.symbol.length == 0) {
+			flags.symbol = [formatData.symbol, ""];
+		}
+	}
+	if (typeof flags.placement == "undefined") {
+		flags.placement = formatData.placement;
+	}
 	var re = new RegExp("^" + dojo.regexp.currency(flags) + "$");
-//dojo.debug(value+":"+dojo.regexp.currency(flags)+"="+re.test(value));
 	return re.test(value);
 };
-
-dojo.i18n.currency._mapToLocalizedFormatData = function(table, iso, locale /*optional*/){
+dojo.i18n.currency._mapToLocalizedFormatData = function (table, iso, locale) {
 	var formatData = dojo.i18n.currency.FORMAT_TABLE[iso];
-	if (!dojo.lang.isArray(formatData)){
+	if (!dojo.lang.isArray(formatData)) {
 		return formatData;
 	}
-
 	return dojo.i18n.number._mapToLocalizedFormatData(formatData[0], locale);
 };
-
-(function() {
-	var arabic = {symbol: "\u062C", placement: "after", htmlSymbol: "?"};
-	var euro = {symbol: "\u20AC", placement: "before", adjSpace: "symbol", htmlSymbol: "&euro;"};
-	var euroAfter = {symbol: "\u20AC", placement: "after", htmlSymbol: "&euro;"};
-
-//Q: Do European countries still use their old ISO symbols instead of just EUR?
-//Q: are signPlacement and currency symbol placement ISO-dependent or are they really locale-dependent?
-//TODO: htmlSymbol is for html entities, need images? (IBM: why? why can't we just use unicode everywhere?)
-//TODO: hide visibility of this table?
-//for html entities, need a image for arabic symbol "BHD" as "DZD", "EGP", "JOD", "KWD" "LBP", "MAD", "OMR", "QAR", "SAR", "SYP", "TND", "AED", "YER"
-//Note: html entities not used at the moment
-//placement: placement of currency symbol, before or after number
-//signPlacement: placement of negative sign, before or after symbol, or begin or end of expression, or around with parentheses
-// This table assumes defaults of
-//	places: 2, placement: "before", signPlacement: "begin", adjSpace: undefined, htmlSymbol: undefined]
-dojo.i18n.currency.FORMAT_TABLE = {
-	AED: {symbol: "\u062c", placement: "after"},
-	ARS: {symbol: "$", signPlacement: "after"},
-	//Old ATS: {symbol: "S", adjSpace: "symbol"},
-	ATS: {symbol: "\u20AC", adjSpace: "number", signPlacement: "after", htmlSymbol: "&euro;"}, 	//Austria using "EUR" // neg should read euro + sign + space + number
-	AUD: {symbol: "$"},
-	BOB: {symbol: "$b"},
-	BRL: {symbol: "R$", adjSpace: "symbol"},
-	//Old BEF: {symbol: "BF", placement: "after", adjSpace: "symbol"},
-	BEF: euroAfter,	//Belgium using "EUR"
-	//Old BHD: {symbol: "\u062C", signPlacement: "end", places: 3, htmlSymbol: "?"},
-	BHD: arabic,
-	//TODO: I'm suspicious that all the other entries have locale-specific data in them, too?
-	//Q: which attributes are iso-specific and which are locale specific?
-	CAD: [{
-			'*' : {symbol: "$"},
-			'fr-ca' : {symbol: "$", placement: "after", signPlacement: "around"}
-		}],
-	CHF: {symbol: "CHF", adjSpace: "symbol", signPlacement: "after"},
-	CLP: {symbol: "$"},
-	COP: {symbol: "$", signPlacement: "around"},
-	CNY: {symbol: "\u00A5", htmlSymbol: "&yen;"},
-	//// Costa Rica  - Spanish slashed C. need to find out the html entity image
-	CRC: {symbol: "\u20A1", signPlacement: "after", htmlSymbol: "?"},
-	// Czech Republic  - Czech //need image for html entities
-	CZK: {symbol: "Kc", adjSpace: "symbol", signPlacement: "after"},
-	DEM: euroAfter,
-	DKK: {symbol: "kr.", adjSpace: "symbol", signPlacement: "after"},
-	DOP: {symbol: "$"},
-	//for html entities, need a image, bidi, using "rtl", so from the link, symbol is suffix
-	//Old DZD: {symbol: "\u062C", signPlacement: "end", places: 3, htmlSymbol: "?"},
-	DZD: arabic,
-	//Ecuador using "USD"
-	ECS: {symbol: "$", signPlacement: "after"},
-	EGP: arabic,
-	//Old ESP: {symbol: "Pts", placement: "after", adjSpace: "symbol", places: 0},
-	ESP: euroAfter,	//spain using "EUR"
-	EUR: euro,
-	//Old FIM: {symbol: "mk", placement: "after", adjSpace: "symbol"},
-	FIM: euroAfter,	//Finland using "EUR"
-	//Old FRF: {symbol: "F", placement: "after", adjSpace: "symbol"},
-	FRF: euroAfter,	//France using "EUR"
-	GBP: {symbol: "\u00A3", htmlSymbol: "&pound;"},
-	GRD: {symbol: "\u20AC", signPlacement: "end", htmlSymbol: "&euro;"},
-	GTQ: {symbol: "Q", signPlacement: "after"},
-	//Hong Kong need "HK$" and "$". Now only support "HK$"
-	HKD: {symbol: "HK$"},
-	HNL: {symbol: "L.", signPlacement: "end"},
-	HUF: {symbol: "Ft", placement: "after", adjSpace: "symbol"},
-	//IEP: {symbol: "\u00A3", htmlSymbol: "&pound;"},
-	IEP: {symbol: "\u20AC", htmlSymbol: "&euro;"},	//ireland using "EUR" at the front.
-	//couldn't know what Israel - Hebrew symbol, some sites use "NIS", bidi, using "rtl", so from the link, symbol is suffix (IBM: huh?)
-	//ILS: {symbol: "\u05E9\u0022\u05D7", signPlacement: "end", htmlSymbol: "?"},
-	ILS: {symbol: "\u05E9\u0022\u05D7", placement: "after", htmlSymbol: "?"},
-	INR: {symbol: "Rs."},
-	//ITL: {symbol: "L", adjSpace: "symbol", signPlacement: "after", places: 0},
-	ITL: {symbol: "\u20AC", signPlacement: "after", htmlSymbol: "&euro;"},	//Italy using "EUR"
-	JOD: arabic,
-	JPY: {symbol: "\u00a5", places: 0, htmlSymbol: "&yen;"},
-	KRW: {symbol: "\u20A9", places: 0, htmlSymbol: "?"},
-	KWD: arabic,
-	LBP: arabic,
-	//Old LUF: {symbol: "LUF", placement: "after", adjSpace: "symbol"},
-	//for Luxembourg,using "EUR"
-	LUF: euroAfter,
-	MAD: arabic,
-	MXN: {symbol: "$", signPlacement: "around"},
-	NIO: {symbol: "C$", adjSpace: "symbol", signPlacement: "after"},
-	//Old NLG: {symbol: "f", adjSpace: "symbol", signPlacement: "end"},
-	//Netherlands, using "EUR"
-	NLG: {symbol: "\u20AC", signPlacement: "end", htmlSymbol: "&euro;"},
-	NOK: {symbol: "kr", adjSpace: "symbol", signPlacement: "after"},
-	NZD: {symbol: "$"},
-	OMR: arabic,
-	PAB: {symbol: "B/", adjSpace: "symbol", signPlacement: "after"},
-	PEN: {symbol: "S/", signPlacement: "after"},
-	//couldn't know what the symbol is from ibm link. (IBM: what does this mean?  Is the symbol 'z' wrong?)
-	PLN: {symbol: "z", placement: "after"},
-	//Old PTE: {symbol: "Esc.", placement: "after", adjSpace: "symbol", places: 0},
-	PTE: euroAfter,
-	PYG: {symbol: "Gs.", signPlacement: "after"},
-	QAR: arabic,
-	RUR: {symbol: "rub.", placement: "after"},
-	SAR: arabic,
-	SEK: {symbol: "kr", placement: "after", adjSpace: "symbol"},
-	SGD: {symbol: "$"},
-	//// El Salvador - Spanish slashed C. need to find out. (IBM: need to find out what?)
-	SVC: {symbol: "\u20A1", signPlacement: "after", adjSpace: "symbol"},
-	//for html entities, need a image
-	SYP: arabic,
-	TND: arabic,
-	TRL: {symbol: "TL", placement: "after"},
-	TWD: {symbol: "NT$"},
-	USD: {symbol: "$"},
-	UYU: {symbol: "$U", signplacement: "after", adjSpace: "symbol"},
-	VEB: {symbol: "Bs", signplacement: "after", adjSpace: "symbol"},
-	YER: arabic,
-	ZAR: {symbol: "R", signPlacement: "around"}
-};
-
+(function () {
+	var arabic = {symbol:"\u062c", placement:"after", htmlSymbol:"?"};
+	var euro = {symbol:"\u20ac", placement:"before", adjSpace:"symbol", htmlSymbol:"&euro;"};
+	var euroAfter = {symbol:"\u20ac", placement:"after", htmlSymbol:"&euro;"};
+	dojo.i18n.currency.FORMAT_TABLE = {AED:{symbol:"\u062c", placement:"after"}, ARS:{symbol:"$", signPlacement:"after"}, ATS:{symbol:"\u20ac", adjSpace:"number", signPlacement:"after", htmlSymbol:"&euro;"}, AUD:{symbol:"$"}, BOB:{symbol:"$b"}, BRL:{symbol:"R$", adjSpace:"symbol"}, BEF:euroAfter, BHD:arabic, CAD:[{"*":{symbol:"$"}, "fr-ca":{symbol:"$", placement:"after", signPlacement:"around"}}], CHF:{symbol:"CHF", adjSpace:"symbol", signPlacement:"after"}, CLP:{symbol:"$"}, COP:{symbol:"$", signPlacement:"around"}, CNY:{symbol:"\xa5", htmlSymbol:"&yen;"}, CRC:{symbol:"\u20a1", signPlacement:"after", htmlSymbol:"?"}, CZK:{symbol:"Kc", adjSpace:"symbol", signPlacement:"after"}, DEM:euroAfter, DKK:{symbol:"kr.", adjSpace:"symbol", signPlacement:"after"}, DOP:{symbol:"$"}, DZD:arabic, ECS:{symbol:"$", signPlacement:"after"}, EGP:arabic, ESP:euroAfter, EUR:euro, FIM:euroAfter, FRF:euroAfter, GBP:{symbol:"\xa3", htmlSymbol:"&pound;"}, GRD:{symbol:"\u20ac", signPlacement:"end", htmlSymbol:"&euro;"}, GTQ:{symbol:"Q", signPlacement:"after"}, HKD:{symbol:"HK$"}, HNL:{symbol:"L.", signPlacement:"end"}, HUF:{symbol:"Ft", placement:"after", adjSpace:"symbol"}, IEP:{symbol:"\u20ac", htmlSymbol:"&euro;"}, ILS:{symbol:"\u05e9\"\u05d7", placement:"after", htmlSymbol:"?"}, INR:{symbol:"Rs."}, ITL:{symbol:"\u20ac", signPlacement:"after", htmlSymbol:"&euro;"}, JOD:arabic, JPY:{symbol:"\xa5", places:0, htmlSymbol:"&yen;"}, KRW:{symbol:"\u20a9", places:0, htmlSymbol:"?"}, KWD:arabic, LBP:arabic, LUF:euroAfter, MAD:arabic, MXN:{symbol:"$", signPlacement:"around"}, NIO:{symbol:"C$", adjSpace:"symbol", signPlacement:"after"}, NLG:{symbol:"\u20ac", signPlacement:"end", htmlSymbol:"&euro;"}, NOK:{symbol:"kr", adjSpace:"symbol", signPlacement:"after"}, NZD:{symbol:"$"}, OMR:arabic, PAB:{symbol:"B/", adjSpace:"symbol", signPlacement:"after"}, PEN:{symbol:"S/", signPlacement:"after"}, PLN:{symbol:"z", placement:"after"}, PTE:euroAfter, PYG:{symbol:"Gs.", signPlacement:"after"}, QAR:arabic, RUR:{symbol:"rub.", placement:"after"}, SAR:arabic, SEK:{symbol:"kr", placement:"after", adjSpace:"symbol"}, SGD:{symbol:"$"}, SVC:{symbol:"\u20a1", signPlacement:"after", adjSpace:"symbol"}, SYP:arabic, TND:arabic, TRL:{symbol:"TL", placement:"after"}, TWD:{symbol:"NT$"}, USD:{symbol:"$"}, UYU:{symbol:"$U", signplacement:"after", adjSpace:"symbol"}, VEB:{symbol:"Bs", signplacement:"after", adjSpace:"symbol"}, YER:arabic, ZAR:{symbol:"R", signPlacement:"around"}};
 })();
 
+
 __CPAN_DIR__ src/i18n/currency/nls
 __CPAN_FILE__ src/i18n/currency/nls/JPY.js
 /*
@@ -65597,7 +44007,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"JPY","symbol":"Â¥"})
+({"displayName":"JPY", "symbol":"\xa5"})
 __CPAN_FILE__ src/i18n/currency/nls/GBP.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65609,7 +44019,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"GBP","symbol":"£"})
+({"displayName":"GBP", "symbol":"\xa3"})
 __CPAN_FILE__ src/i18n/currency/nls/README
 All files within this directory and subdirectories were manually derived from http://unicode.org/cldr
 
@@ -65629,7 +44039,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"ITL","symbol":"₤"})
+({"displayName":"ITL", "symbol":"\u20a4"})
 __CPAN_FILE__ src/i18n/currency/nls/USD.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65641,7 +44051,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"USD","symbol":"$"})
+({"displayName":"USD", "symbol":"$"})
 __CPAN_FILE__ src/i18n/currency/nls/INR.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65665,7 +44075,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"EUR","symbol":"€"})
+({"displayName":"EUR", "symbol":"\u20ac"})
 __CPAN_DIR__ src/i18n/currency/nls/ja
 __CPAN_FILE__ src/i18n/currency/nls/ja/JPY.js
 /*
@@ -65678,7 +44088,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"日本円","symbol":"¥"})
+({"displayName":"\u65e5\u672c\u5186", "symbol":"\uffe5"})
 __CPAN_FILE__ src/i18n/currency/nls/ja/GBP.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65690,7 +44100,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"英国ポンド","symbol":"£"})
+({"displayName":"\u82f1\u56fd\u30dd\u30f3\u30c9", "symbol":"\xa3"})
 __CPAN_FILE__ src/i18n/currency/nls/ja/ITL.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65702,7 +44112,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"イタリア リラ","symbol":"₤"})
+({"displayName":"\u30a4\u30bf\u30ea\u30a2 \u30ea\u30e9", "symbol":"\u20a4"})
 __CPAN_FILE__ src/i18n/currency/nls/ja/USD.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65714,7 +44124,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"米ドル","symbol":"$"})
+({"displayName":"\u7c73\u30c9\u30eb", "symbol":"$"})
 __CPAN_FILE__ src/i18n/currency/nls/ja/INR.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65726,7 +44136,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"インド ルピー","symbol":"INR"})
+({"displayName":"\u30a4\u30f3\u30c9 \u30eb\u30d4\u30fc", "symbol":"INR"})
 __CPAN_FILE__ src/i18n/currency/nls/ja/EUR.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65738,7 +44148,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"ユーロ","symbol":"€"})
+({"displayName":"\u30e6\u30fc\u30ed", "symbol":"\u20ac"})
 __CPAN_DIR__ src/i18n/currency/nls/en-us
 __CPAN_FILE__ src/i18n/currency/nls/en-us/USD.js
 /*
@@ -65751,7 +44161,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"symbol":"$","displayName":"US Dollar"})
+({"symbol":"$", "displayName":"US Dollar"})
 __CPAN_DIR__ src/i18n/currency/nls/en
 __CPAN_FILE__ src/i18n/currency/nls/en/JPY.js
 /*
@@ -65764,7 +44174,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"Japanese Yen","symbol":"Â¥"})
+({"displayName":"Japanese Yen", "symbol":"\xa5"})
 __CPAN_FILE__ src/i18n/currency/nls/en/GBP.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65776,7 +44186,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"British Pound Sterling","symbol":"£"})
+({"displayName":"British Pound Sterling", "symbol":"\xa3"})
 __CPAN_FILE__ src/i18n/currency/nls/en/ITL.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65788,7 +44198,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"Italian Lira","symbol":"₤"})
+({"displayName":"Italian Lira", "symbol":"\u20a4"})
 __CPAN_FILE__ src/i18n/currency/nls/en/USD.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65800,7 +44210,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"US Dollar","symbol":"US$"})
+({"displayName":"US Dollar", "symbol":"US$"})
 __CPAN_FILE__ src/i18n/currency/nls/en/INR.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65824,7 +44234,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"Euro","symbol":"€"})
+({"displayName":"Euro", "symbol":"\u20ac"})
 __CPAN_DIR__ src/i18n/currency/nls/hi
 __CPAN_FILE__ src/i18n/currency/nls/hi/JPY.js
 /*
@@ -65837,7 +44247,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"जापानी येन","symbol":"¥"})
+({"displayName":"\u091c\u093e\u092a\u093e\u0928\u0940 \u092f\u0947\u0928", "symbol":"\xa5"})
 __CPAN_FILE__ src/i18n/currency/nls/hi/GBP.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65849,7 +44259,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"ब्रितन का पौन्ड स्टर्लिग","symbol":"£"})
+({"displayName":"\u092c\u094d\u0930\u093f\u0924\u0928 \u0915\u093e \u092a\u094c\u0928\u094d\u0921 \u0938\u094d\u091f\u0930\u094d\u0932\u093f\u0917", "symbol":"\xa3"})
 __CPAN_FILE__ src/i18n/currency/nls/hi/ITL.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65861,7 +44271,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"इतली का लीरा","symbol":"₤"})
+({"displayName":"\u0907\u0924\u0932\u0940 \u0915\u093e \u0932\u0940\u0930\u093e", "symbol":"\u20a4"})
 __CPAN_FILE__ src/i18n/currency/nls/hi/USD.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65873,7 +44283,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"अमरीकी डालर","symbol":"$"})
+({"displayName":"\u0905\u092e\u0930\u0940\u0915\u0940 \u0921\u093e\u0932\u0930", "symbol":"$"})
 __CPAN_FILE__ src/i18n/currency/nls/hi/INR.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65885,7 +44295,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"भारतीय  रूपया","symbol":"रु."})
+({"displayName":"\u092d\u093e\u0930\u0924\u0940\u092f  \u0930\u0942\u092a\u092f\u093e", "symbol":"\u0930\u0941."})
 __CPAN_FILE__ src/i18n/currency/nls/hi/EUR.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -65897,7 +44307,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-({"displayName":"युरो","symbol":"€"})
+({"displayName":"\u092f\u0941\u0930\u094b", "symbol":"\u20ac"})
 __CPAN_DIR__ src/namespaces
 __CPAN_FILE__ src/namespaces/dojo.js
 /*
@@ -66092,14 +44502,13 @@
 dojo.provide("dojo.crypto.SHA256");
 dojo.require("dojo.crypto");
 dojo.require("dojo.experimental");
-
 dojo.experimental("dojo.crypto.SHA256");
-
-dojo.crypto.SHA256 = new function(){
-	this.compute=function(s){
+dojo.crypto.SHA256 = new function () {
+	this.compute = function (s) {
 	};
 }();
 
+
 __CPAN_FILE__ src/crypto/Rijndael.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -66114,20 +44523,16 @@
 dojo.provide("dojo.crypto.Rijndael");
 dojo.require("dojo.crypto");
 dojo.require("dojo.experimental");
-
 dojo.experimental("dojo.crypto.Rijndael");
-
-dojo.crypto.Rijndael = new function(){
-	this.encrypt=function(plaintext, key){
+dojo.crypto.Rijndael = new function () {
+	this.encrypt = function (plaintext, key) {
 	};
-	this.decrypt=function(ciphertext, key){
+	this.decrypt = function (ciphertext, key) {
 	};
 }();
 
-__CPAN_FILE__ src/crypto/MD5.js
-dojo.require("dojo.crypto");
-dojo.provide("dojo.crypto.MD5");
 
+__CPAN_FILE__ src/crypto/MD5.js
 /*	Return to a port of Paul Johnstone's MD5 implementation
  *	http://pajhome.org.uk/crypt/md5/index.html
  *
@@ -66141,190 +44546,194 @@
  *	All conversions are internalized (no dependencies)
  *	implemented getHMAC for message digest auth.
  */
-dojo.crypto.MD5 = new function(){
-	//	summary
-	//	object for creating digests using the MD5 algorithm
-	var chrsz=8;
-	var mask=(1<<chrsz)-1;
+
+dojo.require("dojo.crypto");
+dojo.provide("dojo.crypto.MD5");
+dojo.crypto.MD5 = new function () {
+	var chrsz = 8;
+	var mask = (1 << chrsz) - 1;
 	function toWord(s) {
-	  var wa=[];
-	  for(var i=0; i<s.length*chrsz; i+=chrsz)
-		wa[i>>5]|=(s.charCodeAt(i/chrsz)&mask)<<(i%32);
-	  return wa;
+		var wa = [];
+		for (var i = 0; i < s.length * chrsz; i += chrsz) {
+			wa[i >> 5] |= (s.charCodeAt(i / chrsz) & mask) << (i % 32);
+		}
+		return wa;
 	}
-	function toString(wa){
-		var s=[];
-		for(var i=0; i<wa.length*32; i+=chrsz)
-			s.push(String.fromCharCode((wa[i>>5]>>>(i%32))&mask));
+	function toString(wa) {
+		var s = [];
+		for (var i = 0; i < wa.length * 32; i += chrsz) {
+			s.push(String.fromCharCode((wa[i >> 5] >>> (i % 32)) & mask));
+		}
 		return s.join("");
 	}
 	function toHex(wa) {
-		var h="0123456789abcdef";
-		var s=[];
-		for(var i=0; i<wa.length*4; i++){
-			s.push(h.charAt((wa[i>>2]>>((i%4)*8+4))&0xF)+h.charAt((wa[i>>2]>>((i%4)*8))&0xF));
+		var h = "0123456789abcdef";
+		var s = [];
+		for (var i = 0; i < wa.length * 4; i++) {
+			s.push(h.charAt((wa[i >> 2] >> ((i % 4) * 8 + 4)) & 15) + h.charAt((wa[i >> 2] >> ((i % 4) * 8)) & 15));
 		}
 		return s.join("");
 	}
-	function toBase64(wa){
-		var p="=";
-		var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-		var s=[];
-		for(var i=0; i<wa.length*4; i+=3){
-			var t=(((wa[i>>2]>>8*(i%4))&0xFF)<<16)|(((wa[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)|((wa[i+2>>2]>>8*((i+2)%4))&0xFF);
-			for(var j=0; j<4; j++){
-				if(i*8+j*6>wa.length*32) s.push(p);
-				else s.push(tab.charAt((t>>6*(3-j))&0x3F));
+	function toBase64(wa) {
+		var p = "=";
+		var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+		var s = [];
+		for (var i = 0; i < wa.length * 4; i += 3) {
+			var t = (((wa[i >> 2] >> 8 * (i % 4)) & 255) << 16) | (((wa[i + 1 >> 2] >> 8 * ((i + 1) % 4)) & 255) << 8) | ((wa[i + 2 >> 2] >> 8 * ((i + 2) % 4)) & 255);
+			for (var j = 0; j < 4; j++) {
+				if (i * 8 + j * 6 > wa.length * 32) {
+					s.push(p);
+				} else {
+					s.push(tab.charAt((t >> 6 * (3 - j)) & 63));
+				}
 			}
 		}
 		return s.join("");
 	}
-	function add(x,y) {
-		var l=(x&0xFFFF)+(y&0xFFFF);
-		var m=(x>>16)+(y>>16)+(l>>16);
-		return (m<<16)|(l&0xFFFF);
+	function add(x, y) {
+		var l = (x & 65535) + (y & 65535);
+		var m = (x >> 16) + (y >> 16) + (l >> 16);
+		return (m << 16) | (l & 65535);
 	}
-	function R(n,c){ return (n<<c)|(n>>>(32-c)); }
-	function C(q,a,b,x,s,t){ return add(R(add(add(a,q),add(x,t)),s),b); }
-	function FF(a,b,c,d,x,s,t){ return C((b&c)|((~b)&d),a,b,x,s,t); }
-	function GG(a,b,c,d,x,s,t){ return C((b&d)|(c&(~d)),a,b,x,s,t); }
-	function HH(a,b,c,d,x,s,t){ return C(b^c^d,a,b,x,s,t); }
-	function II(a,b,c,d,x,s,t){ return C(c^(b|(~d)),a,b,x,s,t); }
-	function core(x,len){
-		x[len>>5]|=0x80<<((len)%32);
-		x[(((len+64)>>>9)<<4)+14]=len;
-		var a= 1732584193;
-		var b=-271733879;
-		var c=-1732584194;
-		var d= 271733878;
-		for(var i=0; i<x.length; i+=16){
-			var olda=a;
-			var oldb=b;
-			var oldc=c;
-			var oldd=d;
-
-			a=FF(a,b,c,d,x[i+ 0],7 ,-680876936);
-			d=FF(d,a,b,c,x[i+ 1],12,-389564586);
-			c=FF(c,d,a,b,x[i+ 2],17, 606105819);
-			b=FF(b,c,d,a,x[i+ 3],22,-1044525330);
-			a=FF(a,b,c,d,x[i+ 4],7 ,-176418897);
-			d=FF(d,a,b,c,x[i+ 5],12, 1200080426);
-			c=FF(c,d,a,b,x[i+ 6],17,-1473231341);
-			b=FF(b,c,d,a,x[i+ 7],22,-45705983);
-			a=FF(a,b,c,d,x[i+ 8],7 , 1770035416);
-			d=FF(d,a,b,c,x[i+ 9],12,-1958414417);
-			c=FF(c,d,a,b,x[i+10],17,-42063);
-			b=FF(b,c,d,a,x[i+11],22,-1990404162);
-			a=FF(a,b,c,d,x[i+12],7 , 1804603682);
-			d=FF(d,a,b,c,x[i+13],12,-40341101);
-			c=FF(c,d,a,b,x[i+14],17,-1502002290);
-			b=FF(b,c,d,a,x[i+15],22, 1236535329);
-
-			a=GG(a,b,c,d,x[i+ 1],5 ,-165796510);
-			d=GG(d,a,b,c,x[i+ 6],9 ,-1069501632);
-			c=GG(c,d,a,b,x[i+11],14, 643717713);
-			b=GG(b,c,d,a,x[i+ 0],20,-373897302);
-			a=GG(a,b,c,d,x[i+ 5],5 ,-701558691);
-			d=GG(d,a,b,c,x[i+10],9 , 38016083);
-			c=GG(c,d,a,b,x[i+15],14,-660478335);
-			b=GG(b,c,d,a,x[i+ 4],20,-405537848);
-			a=GG(a,b,c,d,x[i+ 9],5 , 568446438);
-			d=GG(d,a,b,c,x[i+14],9 ,-1019803690);
-			c=GG(c,d,a,b,x[i+ 3],14,-187363961);
-			b=GG(b,c,d,a,x[i+ 8],20, 1163531501);
-			a=GG(a,b,c,d,x[i+13],5 ,-1444681467);
-			d=GG(d,a,b,c,x[i+ 2],9 ,-51403784);
-			c=GG(c,d,a,b,x[i+ 7],14, 1735328473);
-			b=GG(b,c,d,a,x[i+12],20,-1926607734);
-
-			a=HH(a,b,c,d,x[i+ 5],4 ,-378558);
-			d=HH(d,a,b,c,x[i+ 8],11,-2022574463);
-			c=HH(c,d,a,b,x[i+11],16, 1839030562);
-			b=HH(b,c,d,a,x[i+14],23,-35309556);
-			a=HH(a,b,c,d,x[i+ 1],4 ,-1530992060);
-			d=HH(d,a,b,c,x[i+ 4],11, 1272893353);
-			c=HH(c,d,a,b,x[i+ 7],16,-155497632);
-			b=HH(b,c,d,a,x[i+10],23,-1094730640);
-			a=HH(a,b,c,d,x[i+13],4 , 681279174);
-			d=HH(d,a,b,c,x[i+ 0],11,-358537222);
-			c=HH(c,d,a,b,x[i+ 3],16,-722521979);
-			b=HH(b,c,d,a,x[i+ 6],23, 76029189);
-			a=HH(a,b,c,d,x[i+ 9],4 ,-640364487);
-			d=HH(d,a,b,c,x[i+12],11,-421815835);
-			c=HH(c,d,a,b,x[i+15],16, 530742520);
-			b=HH(b,c,d,a,x[i+ 2],23,-995338651);
-
-			a=II(a,b,c,d,x[i+ 0],6 ,-198630844);
-			d=II(d,a,b,c,x[i+ 7],10, 1126891415);
-			c=II(c,d,a,b,x[i+14],15,-1416354905);
-			b=II(b,c,d,a,x[i+ 5],21,-57434055);
-			a=II(a,b,c,d,x[i+12],6 , 1700485571);
-			d=II(d,a,b,c,x[i+ 3],10,-1894986606);
-			c=II(c,d,a,b,x[i+10],15,-1051523);
-			b=II(b,c,d,a,x[i+ 1],21,-2054922799);
-			a=II(a,b,c,d,x[i+ 8],6 , 1873313359);
-			d=II(d,a,b,c,x[i+15],10,-30611744);
-			c=II(c,d,a,b,x[i+ 6],15,-1560198380);
-			b=II(b,c,d,a,x[i+13],21, 1309151649);
-			a=II(a,b,c,d,x[i+ 4],6 ,-145523070);
-			d=II(d,a,b,c,x[i+11],10,-1120210379);
-			c=II(c,d,a,b,x[i+ 2],15, 718787259);
-			b=II(b,c,d,a,x[i+ 9],21,-343485551);
-
-			a = add(a,olda);
-			b = add(b,oldb);
-			c = add(c,oldc);
-			d = add(d,oldd);
+	function R(n, c) {
+		return (n << c) | (n >>> (32 - c));
+	}
+	function C(q, a, b, x, s, t) {
+		return add(R(add(add(a, q), add(x, t)), s), b);
+	}
+	function FF(a, b, c, d, x, s, t) {
+		return C((b & c) | ((~b) & d), a, b, x, s, t);
+	}
+	function GG(a, b, c, d, x, s, t) {
+		return C((b & d) | (c & (~d)), a, b, x, s, t);
+	}
+	function HH(a, b, c, d, x, s, t) {
+		return C(b ^ c ^ d, a, b, x, s, t);
+	}
+	function II(a, b, c, d, x, s, t) {
+		return C(c ^ (b | (~d)), a, b, x, s, t);
+	}
+	function core(x, len) {
+		x[len >> 5] |= 128 << ((len) % 32);
+		x[(((len + 64) >>> 9) << 4) + 14] = len;
+		var a = 1732584193;
+		var b = -271733879;
+		var c = -1732584194;
+		var d = 271733878;
+		for (var i = 0; i < x.length; i += 16) {
+			var olda = a;
+			var oldb = b;
+			var oldc = c;
+			var oldd = d;
+			a = FF(a, b, c, d, x[i + 0], 7, -680876936);
+			d = FF(d, a, b, c, x[i + 1], 12, -389564586);
+			c = FF(c, d, a, b, x[i + 2], 17, 606105819);
+			b = FF(b, c, d, a, x[i + 3], 22, -1044525330);
+			a = FF(a, b, c, d, x[i + 4], 7, -176418897);
+			d = FF(d, a, b, c, x[i + 5], 12, 1200080426);
+			c = FF(c, d, a, b, x[i + 6], 17, -1473231341);
+			b = FF(b, c, d, a, x[i + 7], 22, -45705983);
+			a = FF(a, b, c, d, x[i + 8], 7, 1770035416);
+			d = FF(d, a, b, c, x[i + 9], 12, -1958414417);
+			c = FF(c, d, a, b, x[i + 10], 17, -42063);
+			b = FF(b, c, d, a, x[i + 11], 22, -1990404162);
+			a = FF(a, b, c, d, x[i + 12], 7, 1804603682);
+			d = FF(d, a, b, c, x[i + 13], 12, -40341101);
+			c = FF(c, d, a, b, x[i + 14], 17, -1502002290);
+			b = FF(b, c, d, a, x[i + 15], 22, 1236535329);
+			a = GG(a, b, c, d, x[i + 1], 5, -165796510);
+			d = GG(d, a, b, c, x[i + 6], 9, -1069501632);
+			c = GG(c, d, a, b, x[i + 11], 14, 643717713);
+			b = GG(b, c, d, a, x[i + 0], 20, -373897302);
+			a = GG(a, b, c, d, x[i + 5], 5, -701558691);
+			d = GG(d, a, b, c, x[i + 10], 9, 38016083);
+			c = GG(c, d, a, b, x[i + 15], 14, -660478335);
+			b = GG(b, c, d, a, x[i + 4], 20, -405537848);
+			a = GG(a, b, c, d, x[i + 9], 5, 568446438);
+			d = GG(d, a, b, c, x[i + 14], 9, -1019803690);
+			c = GG(c, d, a, b, x[i + 3], 14, -187363961);
+			b = GG(b, c, d, a, x[i + 8], 20, 1163531501);
+			a = GG(a, b, c, d, x[i + 13], 5, -1444681467);
+			d = GG(d, a, b, c, x[i + 2], 9, -51403784);
+			c = GG(c, d, a, b, x[i + 7], 14, 1735328473);
+			b = GG(b, c, d, a, x[i + 12], 20, -1926607734);
+			a = HH(a, b, c, d, x[i + 5], 4, -378558);
+			d = HH(d, a, b, c, x[i + 8], 11, -2022574463);
+			c = HH(c, d, a, b, x[i + 11], 16, 1839030562);
+			b = HH(b, c, d, a, x[i + 14], 23, -35309556);
+			a = HH(a, b, c, d, x[i + 1], 4, -1530992060);
+			d = HH(d, a, b, c, x[i + 4], 11, 1272893353);
+			c = HH(c, d, a, b, x[i + 7], 16, -155497632);
+			b = HH(b, c, d, a, x[i + 10], 23, -1094730640);
+			a = HH(a, b, c, d, x[i + 13], 4, 681279174);
+			d = HH(d, a, b, c, x[i + 0], 11, -358537222);
+			c = HH(c, d, a, b, x[i + 3], 16, -722521979);
+			b = HH(b, c, d, a, x[i + 6], 23, 76029189);
+			a = HH(a, b, c, d, x[i + 9], 4, -640364487);
+			d = HH(d, a, b, c, x[i + 12], 11, -421815835);
+			c = HH(c, d, a, b, x[i + 15], 16, 530742520);
+			b = HH(b, c, d, a, x[i + 2], 23, -995338651);
+			a = II(a, b, c, d, x[i + 0], 6, -198630844);
+			d = II(d, a, b, c, x[i + 7], 10, 1126891415);
+			c = II(c, d, a, b, x[i + 14], 15, -1416354905);
+			b = II(b, c, d, a, x[i + 5], 21, -57434055);
+			a = II(a, b, c, d, x[i + 12], 6, 1700485571);
+			d = II(d, a, b, c, x[i + 3], 10, -1894986606);
+			c = II(c, d, a, b, x[i + 10], 15, -1051523);
+			b = II(b, c, d, a, x[i + 1], 21, -2054922799);
+			a = II(a, b, c, d, x[i + 8], 6, 1873313359);
+			d = II(d, a, b, c, x[i + 15], 10, -30611744);
+			c = II(c, d, a, b, x[i + 6], 15, -1560198380);
+			b = II(b, c, d, a, x[i + 13], 21, 1309151649);
+			a = II(a, b, c, d, x[i + 4], 6, -145523070);
+			d = II(d, a, b, c, x[i + 11], 10, -1120210379);
+			c = II(c, d, a, b, x[i + 2], 15, 718787259);
+			b = II(b, c, d, a, x[i + 9], 21, -343485551);
+			a = add(a, olda);
+			b = add(b, oldb);
+			c = add(c, oldc);
+			d = add(d, oldd);
 		}
-		return [a,b,c,d];
+		return [a, b, c, d];
 	}
-	function hmac(data,key){
-		var wa=toWord(key);
-		if(wa.length>16) wa=core(wa,key.length*chrsz);
-		var l=[], r=[];
-		for(var i=0; i<16; i++){
-			l[i]=wa[i]^0x36363636;
-			r[i]=wa[i]^0x5c5c5c5c;
+	function hmac(data, key) {
+		var wa = toWord(key);
+		if (wa.length > 16) {
+			wa = core(wa, key.length * chrsz);
 		}
-		var h=core(l.concat(toWord(data)),512+data.length*chrsz);
-		return core(r.concat(h),640);
+		var l = [], r = [];
+		for (var i = 0; i < 16; i++) {
+			l[i] = wa[i] ^ 909522486;
+			r[i] = wa[i] ^ 1549556828;
+		}
+		var h = core(l.concat(toWord(data)), 512 + data.length * chrsz);
+		return core(r.concat(h), 640);
 	}
-
-	//	Public functions
-	this.compute=function(/* string */data, /* dojo.crypto.outputTypes */outputType){
-		//	summary
-		//	computes the digest of data, and returns the result as a string of type outputType
-		var out=outputType||dojo.crypto.outputTypes.Base64;
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				return toHex(core(toWord(data),data.length*chrsz));	//	string
-			}
-			case dojo.crypto.outputTypes.String:{
-				return toString(core(toWord(data),data.length*chrsz));	//	string
-			}
-			default:{
-				return toBase64(core(toWord(data),data.length*chrsz));	//	string
-			}
+	this.compute = function (data, outputType) {
+		var out = outputType || dojo.crypto.outputTypes.Base64;
+		switch (out) {
+		  case dojo.crypto.outputTypes.Hex:
+			return toHex(core(toWord(data), data.length * chrsz));
+		  case dojo.crypto.outputTypes.String:
+			return toString(core(toWord(data), data.length * chrsz));
+		  default:
+			return toBase64(core(toWord(data), data.length * chrsz));
 		}
 	};
-	this.getHMAC=function(/* string */data, /* string */key, /* dojo.crypto.outputTypes */outputType){
-		//	summary
-		//	computes a digest of data using key, and returns the result as a string of outputType
-		var out=outputType||dojo.crypto.outputTypes.Base64;
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				return toHex(hmac(data,key));	//	string
-			}
-			case dojo.crypto.outputTypes.String:{
-				return toString(hmac(data,key));	//	string
-			}
-			default:{
-				return toBase64(hmac(data,key));	//	string
-			}
+	this.getHMAC = function (data, key, outputType) {
+		var out = outputType || dojo.crypto.outputTypes.Base64;
+		switch (out) {
+		  case dojo.crypto.outputTypes.Hex:
+			return toHex(hmac(data, key));
+		  case dojo.crypto.outputTypes.String:
+			return toString(hmac(data, key));
+		  default:
+			return toBase64(hmac(data, key));
 		}
 	};
 }();
 
+
 __CPAN_FILE__ src/crypto/Blowfish.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -66338,571 +44747,377 @@
 
 dojo.require("dojo.crypto");
 dojo.provide("dojo.crypto.Blowfish");
-
-/*	Blowfish
- *	Created based on the C# implementation by Marcus Hahn (http://www.hotpixel.net/)
- *	Unsigned math functions derived from Joe Gregorio's SecureSyndication GM script
- *	http://bitworking.org/projects/securesyndication/
- *	(Note that this is *not* an adaption of the above script)
- *
- *	version 1.0 
- *	TRT 
- *	2005-12-08
- */
-dojo.crypto.Blowfish = new function(){
-	//	summary
-	//	Object for doing Blowfish encryption/decryption.
-	var POW2=Math.pow(2,2);
-	var POW3=Math.pow(2,3);
-	var POW4=Math.pow(2,4);
-	var POW8=Math.pow(2,8);
-	var POW16=Math.pow(2,16);
-	var POW24=Math.pow(2,24);
-	var iv=null;	//	CBC mode initialization vector
-	var boxes={
-		p:[
-			0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, 
-			0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 
-			0x9216d5d9, 0x8979fb1b
-		],
-		s0:[
-			0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
-			0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
-			0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
-			0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
-			0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
-			0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
-			0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
-			0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
-			0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
-			0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
-			0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 
-			0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, 
-			0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 
-			0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
-			0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
-			0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
-			0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 
-			0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 
-			0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, 
-			0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 
-			0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
-			0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, 
-			0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
-			0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, 
-			0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
-			0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
-			0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
-			0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
-			0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
-			0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
-			0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
-			0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a
-		],
-		s1:[
-			0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
-			0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
-			0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
-			0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
-			0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
-			0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
-			0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
-			0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 
-			0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, 
-			0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
-			0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 
-			0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
-			0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, 
-			0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 
-			0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
-			0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 
-			0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
-			0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, 
-			0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
-			0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 
-			0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 
-			0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, 
-			0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
-			0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
-			0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, 
-			0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
-			0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
-			0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
-			0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
-			0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
-			0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
-			0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7
-		],
-		s2:[
-			0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
-			0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
-			0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
-			0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
-			0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
-			0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
-			0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
-			0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
-			0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
-			0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
-			0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
-			0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
-			0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
-			0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
-			0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
-			0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
-			0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
-			0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
-			0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
-			0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
-			0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, 
-			0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
-			0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
-			0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 
-			0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, 
-			0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 
-			0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, 
-			0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
-			0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
-			0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, 
-			0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
-			0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0
-		],
-		s3:[
-			0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
-			0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
-			0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, 
-			0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
-			0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 
-			0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, 
-			0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
-			0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 
-			0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, 
-			0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, 
-			0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
-			0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 
-			0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, 
-			0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 
-			0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
-			0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
-			0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 
-			0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
-			0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, 
-			0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 
-			0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, 
-			0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 
-			0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
-			0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, 
-			0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
-			0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 
-			0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 
-			0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, 
-			0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 
-			0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
-			0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
-			0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
-		]
-	}
-////////////////////////////////////////////////////////////////////////////
-	function add(x,y){
-		var sum=(x+y)&0xffffffff;
-		if (sum<0){
-			sum=-sum;
-			return (0x10000*((sum>>16)^0xffff))+(((sum&0xffff)^0xffff)+1);
+dojo.crypto.Blowfish = new function () {
+	var POW2 = Math.pow(2, 2);
+	var POW3 = Math.pow(2, 3);
+	var POW4 = Math.pow(2, 4);
+	var POW8 = Math.pow(2, 8);
+	var POW16 = Math.pow(2, 16);
+	var POW24 = Math.pow(2, 24);
+	var iv = null;
+	var boxes = {p:[608135816, 2242054355, 320440878, 57701188, 2752067618, 698298832, 137296536, 3964562569, 1160258022, 953160567, 3193202383, 887688300, 3232508343, 3380367581, 1065670069, 3041331479, 2450970073, 2306472731], s0:[3509652390, 2564797868, 805139163, 3491422135, 3101798381, 1780907670, 3128725573, 4046225305, 614570311, 3012652279, 134345442, 2240740374, 1667834072, 1901547113, 2757295779, 4103290238, 227898511, 1921955416, 1904987480, 2182433518, 2069144605, 3260701109, 2620446009, 720527379, 3318853667, 677414384, 3393288472, 3101374703, 2390351024, 1614419982, 1822297739, 2954791486, 3608508353, 3174124327, 2024746970, 1432378464, 3864339955, 2857741204, 1464375394, 1676153920, 1439316330, 715854006, 3033291828, 289532110, 2706671279, 2087905683, 3018724369, 1668267050, 732546397, 1947742710, 3462151702, 2609353502, 2950085171, 1814351708, 2050118529, 680887927, 999245976, 1800124847, 3300911131, 1713906067, 1641548236, 4213287313, 1216130144, 1575780402, 4018429277, 3917837745, 3693486850, 3949271944, 596196993, 3549867205, 258830323, 2213823033, 772490370, 2760122372, 1774776394, 2652871518, 566650946, 4142492826, 1728879713, 2882767088, 1783734482, 3629395816, 2517608232, 2874225571, 1861159788, 326777828, 3124490320, 2130389656, 2716951837, 967770486, 1724537150, 2185432712, 2364442137, 1164943284, 2105845187, 998989502, 3765401048, 2244026483, 1075463327, 1455516326, 1322494562, 910128902, 469688178, 1117454909, 936433444, 3490320968, 3675253459, 1240580251, 122909385, 2157517691, 634681816, 4142456567, 3825094682, 3061402683, 2540495037, 79693498, 3249098678, 1084186820, 1583128258, 426386531, 1761308591, 1047286709, 322548459, 995290223, 1845252383, 2603652396, 3431023940, 2942221577, 3202600964, 3727903485, 1712269319, 422464435, 3234572375, 1170764815, 3523960633, 3117677531, 1434042557, 442511882, 3600875718, 1076654713, 1738483198, 4213154764, 2393238008, 3677496056, 1014306527, 4251020053, 793779912, 2902807211, 842905082, 4246964064, 1395751752, 1040244610, 2656851899, 3396308128, 445077038, 3742853595, 3577915638, 679411651, 2892444358, 2354009459, 1767581616, 3150600392, 3791627101, 3102740896, 284835224, 4246832056, 1258075500, 768725851, 2589189241, 3069724005, 3532540348, 1274779536, 3789419226, 2764799539, 1660621633, 3471099624, 4011903706, 913787905, 3497959166, 737222580, 2514213453, 2928710040, 3937242737, 1804850592, 3499020752, 2949064160, 2386320175, 2390070455, 2415321851, 4061277028, 2290661394, 2416832540, 1336762016, 1754252060, 3520065937, 3014181293, 791618072, 3188594551, 3933548030, 2332172193, 3852520463, 3043980520, 413987798, 3465142937, 3030929376, 4245938359, 2093235073, 3534596313, 375366246, 2157278981, 2479649556, 555357303, 3870105701, 2008414854, 3344188149, 4221384143, 3956125452, 2067696032, 3594591187, 2921233993, 2428461, 544322398, 577241275, 1471733935, 610547355, 4027169054, 1432588573, 1507829418, 2025931657, 3646575487, 545086370, 48609733, 2200306550, 1653985193, 298326376, 1316178497, 3007786442, 2064951626, 458293330, 2589141269, 3591329599, 3164325604, 727753846, 2179363840, 146436021, 1461446943, 4069977195, 705550613, 3059967265, 3887724982, 4281599278, 3313849956, 1404054877, 2845806497, 146425753, 1854211946], s1:[1266315497, 3048417604, 3681880366, 3289982499, 2909710000, 1235738493, 2632868024, 2414719590, 3970600049, 1771706367, 1449415276, 3266420449, 422970021, 1963543593, 2690192192, 3826793022, 1062508698, 1531092325, 1804592342, 2583117782, 2714934279, 4024971509, 1294809318, 4028980673, 1289560198, 2221992742, 1669523910, 35572830, 157838143, 1052438473, 1016535060, 1802137761, 1753167236, 1386275462, 3080475397, 2857371447, 1040679964, 2145300060, 2390574316, 1461121720, 2956646967, 4031777805, 4028374788, 33600511, 2920084762, 1018524850, 629373528, 3691585981, 3515945977, 2091462646, 2486323059, 586499841, 988145025, 935516892, 3367335476, 2599673255, 2839830854, 265290510, 3972581182, 2759138881, 3795373465, 1005194799, 847297441, 406762289, 1314163512, 1332590856, 1866599683, 4127851711, 750260880, 613907577, 1450815602, 3165620655, 3734664991, 3650291728, 3012275730, 3704569646, 1427272223, 778793252, 1343938022, 2676280711, 2052605720, 1946737175, 3164576444, 3914038668, 3967478842, 3682934266, 1661551462, 3294938066, 4011595847, 840292616, 3712170807, 616741398, 312560963, 711312465, 1351876610, 322626781, 1910503582, 271666773, 2175563734, 1594956187, 70604529, 3617834859, 1007753275, 1495573769, 4069517037, 2549218298, 2663038764, 504708206, 2263041392, 3941167025, 2249088522, 1514023603, 1998579484, 1312622330, 694541497, 2582060303, 2151582166, 1382467621, 776784248, 2618340202, 3323268794, 2497899128, 2784771155, 503983604, 4076293799, 907881277, 423175695, 432175456, 1378068232, 4145222326, 3954048622, 3938656102, 3820766613, 2793130115, 2977904593, 26017576, 3274890735, 3194772133, 1700274565, 1756076034, 4006520079, 3677328699, 720338349, 1533947780, 354530856, 688349552, 3973924725, 1637815568, 332179504, 3949051286, 53804574, 2852348879, 3044236432, 1282449977, 3583942155, 3416972820, 4006381244, 1617046695, 2628476075, 3002303598, 1686838959, 431878346, 2686675385, 1700445008, 1080580658, 1009431731, 832498133, 3223435511, 2605976345, 2271191193, 2516031870, 1648197032, 4164389018, 2548247927, 300782431, 375919233, 238389289, 3353747414, 2531188641, 2019080857, 1475708069, 455242339, 2609103871, 448939670, 3451063019, 1395535956, 2413381860, 1841049896, 1491858159, 885456874, 4264095073, 4001119347, 1565136089, 3898914787, 1108368660, 540939232, 1173283510, 2745871338, 3681308437, 4207628240, 3343053890, 4016749493, 1699691293, 1103962373, 3625875870, 2256883143, 3830138730, 1031889488, 3479347698, 1535977030, 4236805024, 3251091107, 2132092099, 1774941330, 1199868427, 1452454533, 157007616, 2904115357, 342012276, 595725824, 1480756522, 206960106, 497939518, 591360097, 863170706, 2375253569, 3596610801, 1814182875, 2094937945, 3421402208, 1082520231, 3463918190, 2785509508, 435703966, 3908032597, 1641649973, 2842273706, 3305899714, 1510255612, 2148256476, 2655287854, 3276092548, 4258621189, 236887753, 3681803219, 274041037, 1734335097, 3815195456, 3317970021, 1899903192, 1026095262, 4050517792, 356393447, 2410691914, 3873677099, 3682840055], s2:[3913112168, 2491498743, 4132185628, 2489919796, 1091903735, 1979897079, 3170134830, 3567386728, 3557303409, 857797738, 1136121015, 1342202287, 507115054, 2535736646, 337727348, 3213592640, 1301675037, 2528481711, 1895095763, 1721773893, 3216771564, 62756741, 2142006736, 835421444, 2531993523, 1442658625, 3659876326, 2882144922, 676362277, 1392781812, 170690266, 3921047035, 1759253602, 3611846912, 1745797284, 664899054, 1329594018, 3901205900, 3045908486, 2062866102, 2865634940, 3543621612, 3464012697, 1080764994, 553557557, 3656615353, 3996768171, 991055499, 499776247, 1265440854, 648242737, 3940784050, 980351604, 3713745714, 1749149687, 3396870395, 4211799374, 3640570775, 1161844396, 3125318951, 1431517754, 545492359, 4268468663, 3499529547, 1437099964, 2702547544, 3433638243, 2581715763, 2787789398, 1060185593, 1593081372, 2418618748, 4260947970, 69676912, 2159744348, 86519011, 2512459080, 3838209314, 1220612927, 3339683548, 133810670, 1090789135, 1078426020, 1569222167, 845107691, 3583754449, 4072456591, 1091646820, 628848692, 1613405280, 3757631651, 526609435, 236106946, 48312990, 2942717905, 3402727701, 1797494240, 859738849, 992217954, 4005476642, 2243076622, 3870952857, 3732016268, 765654824, 3490871365, 2511836413, 1685915746, 3888969200, 1414112111, 2273134842, 3281911079, 4080962846, 172450625, 2569994100, 980381355, 4109958455, 2819808352, 2716589560, 2568741196, 3681446669, 3329971472, 1835478071, 660984891, 3704678404, 4045999559, 3422617507, 3040415634, 1762651403, 1719377915, 3470491036, 2693910283, 3642056355, 3138596744, 1364962596, 2073328063, 1983633131, 926494387, 3423689081, 2150032023, 4096667949, 1749200295, 3328846651, 309677260, 2016342300, 1779581495, 3079819751, 111262694, 1274766160, 443224088, 298511866, 1025883608, 3806446537, 1145181785, 168956806, 3641502830, 3584813610, 1689216846, 3666258015, 3200248200, 1692713982, 2646376535, 4042768518, 1618508792, 1610833997, 3523052358, 4130873264, 2001055236, 3610705100, 2202168115, 4028541809, 2961195399, 1006657119, 2006996926, 3186142756, 1430667929, 3210227297, 1314452623, 4074634658, 4101304120, 2273951170, 1399257539, 3367210612, 3027628629, 1190975929, 2062231137, 2333990788, 2221543033, 2438960610, 1181637006, 548689776, 2362791313, 3372408396, 3104550113, 3145860560, 296247880, 1970579870, 3078560182, 3769228297, 1714227617, 3291629107, 3898220290, 166772364, 1251581989, 493813264, 448347421, 195405023, 2709975567, 677966185, 3703036547, 1463355134, 2715995803, 1338867538, 1343315457, 2802222074, 2684532164, 233230375, 2599980071, 2000651841, 3277868038, 1638401717, 4028070440, 3237316320, 6314154, 819756386, 300326615, 590932579, 1405279636, 3267499572, 3150704214, 2428286686, 3959192993, 3461946742, 1862657033, 1266418056, 963775037, 2089974820, 2263052895, 1917689273, 448879540, 3550394620, 3981727096, 150775221, 3627908307, 1303187396, 508620638, 2975983352, 2726630617, 1817252668, 1876281319, 1457606340, 908771278, 3720792119, 3617206836, 2455994898, 1729034894, 1080033504], s3:[976866871, 3556439503, 2881648439, 1522871579, 1555064734, 1336096578, 3548522304, 2579274686, 3574697629, 3205460757, 3593280638, 3338716283, 3079412587, 564236357, 2993598910, 1781952180, 1464380207, 3163844217, 3332601554, 1699332808, 1393555694, 1183702653, 3581086237, 1288719814, 691649499, 2847557200, 2895455976, 3193889540, 2717570544, 1781354906, 1676643554, 2592534050, 3230253752, 1126444790, 2770207658, 2633158820, 2210423226, 2615765581, 2414155088, 3127139286, 673620729, 2805611233, 1269405062, 4015350505, 3341807571, 4149409754, 1057255273, 2012875353, 2162469141, 2276492801, 2601117357, 993977747, 3918593370, 2654263191, 753973209, 36408145, 2530585658, 25011837, 3520020182, 2088578344, 530523599, 2918365339, 1524020338, 1518925132, 3760827505, 3759777254, 1202760957, 3985898139, 3906192525, 674977740, 4174734889, 2031300136, 2019492241, 3983892565, 4153806404, 3822280332, 352677332, 2297720250, 60907813, 90501309, 3286998549, 1016092578, 2535922412, 2839152426, 457141659, 509813237, 4120667899, 652014361, 1966332200, 2975202805, 55981186, 2327461051, 676427537, 3255491064, 2882294119, 3433927263, 1307055953, 942726286, 933058658, 2468411793, 3933900994, 4215176142, 1361170020, 2001714738, 2830558078, 3274259782, 1222529897, 1679025792, 2729314320, 3714953764, 1770335741, 151462246, 3013232138, 1682292957, 1483529935, 471910574, 1539241949, 458788160, 3436315007, 1807016891, 3718408830, 978976581, 1043663428, 3165965781, 1927990952, 4200891579, 2372276910, 3208408903, 3533431907, 1412390302, 2931980059, 4132332400, 1947078029, 3881505623, 4168226417, 2941484381, 1077988104, 1320477388, 886195818, 18198404, 3786409000, 2509781533, 112762804, 3463356488, 1866414978, 891333506, 18488651, 661792760, 1628790961, 3885187036, 3141171499, 876946877, 2693282273, 1372485963, 791857591, 2686433993, 3759982718, 3167212022, 3472953795, 2716379847, 445679433, 3561995674, 3504004811, 3574258232, 54117162, 3331405415, 2381918588, 3769707343, 4154350007, 1140177722, 4074052095, 668550556, 3214352940, 367459370, 261225585, 2610173221, 4209349473, 3468074219, 3265815641, 314222801, 3066103646, 3808782860, 282218597, 3406013506, 3773591054, 379116347, 1285071038, 846784868, 2669647154, 3771962079, 3550491691, 2305946142, 453669953, 1268987020, 3317592352, 3279303384, 3744833421, 2610507566, 3859509063, 266596637, 3847019092, 517658769, 3462560207, 3443424879, 370717030, 4247526661, 2224018117, 4143653529, 4112773975, 2788324899, 2477274417, 1456262402, 2901442914, 1517677493, 1846949527, 2295493580, 3734397586, 2176403920, 1280348187, 1908823572, 3871786941, 846861322, 1172426758, 3287448474, 3383383037, 1655181056, 3139813346, 901632758, 1897031941, 2986607138, 3066810236, 3447102507, 1393639104, 373351379, 950779232, 625454576, 3124240540, 4148612726, 2007998917, 544563296, 2244738638, 2330496472, 2058025392, 1291430526, 424198748, 50039436, 29584100, 3605783033, 2429876329, 2791104160, 1057563949, 3255363231, 3075367218, 3463963227, 1469046755, 985887462]};
+	function add(x, y) {
+		var sum = (x + y) & 4294967295;
+		if (sum < 0) {
+			sum = -sum;
+			return (65536 * ((sum >> 16) ^ 65535)) + (((sum & 65535) ^ 65535) + 1);
 		}
 		return sum;
 	}
-	function split(x){
-		var r=x&0xffffffff;
-		if(r<0) {
-			r=-r;
-			return [((r&0xffff)^0xffff)+1,(r>>16)^0xffff];
+	function split(x) {
+		var r = x & 4294967295;
+		if (r < 0) {
+			r = -r;
+			return [((r & 65535) ^ 65535) + 1, (r >> 16) ^ 65535];
 		}
-		return [r&0xffff,(r>>16)];
+		return [r & 65535, (r >> 16)];
 	}
-	function xor(x,y){
-		var xs=split(x);
-		var ys=split(y);
-		return (0x10000*(xs[1]^ys[1]))+(xs[0]^ys[0]);
+	function xor(x, y) {
+		var xs = split(x);
+		var ys = split(y);
+		return (65536 * (xs[1] ^ ys[1])) + (xs[0] ^ ys[0]);
 	}
-	function $(v, box){
-		var d=v&0xff; v>>=8;
-		var c=v&0xff; v>>=8;
-		var b=v&0xff; v>>=8;
-		var a=v&0xff;
-		var r=add(box.s0[a],box.s1[b]);
-		r=xor(r,box.s2[c]);
-		return add(r,box.s3[d]);
+	function $(v, box) {
+		var d = v & 255;
+		v >>= 8;
+		var c = v & 255;
+		v >>= 8;
+		var b = v & 255;
+		v >>= 8;
+		var a = v & 255;
+		var r = add(box.s0[a], box.s1[b]);
+		r = xor(r, box.s2[c]);
+		return add(r, box.s3[d]);
 	}
-////////////////////////////////////////////////////////////////////////////
-	function eb(o, box){
-		var l=o.left;
-		var r=o.right;
-		l=xor(l,box.p[0]);
-		r=xor(r,xor($(l,box),box.p[1]));
-		l=xor(l,xor($(r,box),box.p[2]));
-		r=xor(r,xor($(l,box),box.p[3]));
-		l=xor(l,xor($(r,box),box.p[4]));
-		r=xor(r,xor($(l,box),box.p[5]));
-		l=xor(l,xor($(r,box),box.p[6]));
-		r=xor(r,xor($(l,box),box.p[7]));
-		l=xor(l,xor($(r,box),box.p[8]));
-		r=xor(r,xor($(l,box),box.p[9]));
-		l=xor(l,xor($(r,box),box.p[10]));
-		r=xor(r,xor($(l,box),box.p[11]));
-		l=xor(l,xor($(r,box),box.p[12]));
-		r=xor(r,xor($(l,box),box.p[13]));
-		l=xor(l,xor($(r,box),box.p[14]));
-		r=xor(r,xor($(l,box),box.p[15]));
-		l=xor(l,xor($(r,box),box.p[16]));
-		o.right=l;
-		o.left=xor(r,box.p[17]);
+	function eb(o, box) {
+		var l = o.left;
+		var r = o.right;
+		l = xor(l, box.p[0]);
+		r = xor(r, xor($(l, box), box.p[1]));
+		l = xor(l, xor($(r, box), box.p[2]));
+		r = xor(r, xor($(l, box), box.p[3]));
+		l = xor(l, xor($(r, box), box.p[4]));
+		r = xor(r, xor($(l, box), box.p[5]));
+		l = xor(l, xor($(r, box), box.p[6]));
+		r = xor(r, xor($(l, box), box.p[7]));
+		l = xor(l, xor($(r, box), box.p[8]));
+		r = xor(r, xor($(l, box), box.p[9]));
+		l = xor(l, xor($(r, box), box.p[10]));
+		r = xor(r, xor($(l, box), box.p[11]));
+		l = xor(l, xor($(r, box), box.p[12]));
+		r = xor(r, xor($(l, box), box.p[13]));
+		l = xor(l, xor($(r, box), box.p[14]));
+		r = xor(r, xor($(l, box), box.p[15]));
+		l = xor(l, xor($(r, box), box.p[16]));
+		o.right = l;
+		o.left = xor(r, box.p[17]);
 	}
-
-	function db(o, box){
-		var l=o.left;
-		var r=o.right;
-		l=xor(l,box.p[17]);
-		r=xor(r,xor($(l,box),box.p[16]));
-		l=xor(l,xor($(r,box),box.p[15]));
-		r=xor(r,xor($(l,box),box.p[14]));
-		l=xor(l,xor($(r,box),box.p[13]));
-		r=xor(r,xor($(l,box),box.p[12]));
-		l=xor(l,xor($(r,box),box.p[11]));
-		r=xor(r,xor($(l,box),box.p[10]));
-		l=xor(l,xor($(r,box),box.p[9]));
-		r=xor(r,xor($(l,box),box.p[8]));
-		l=xor(l,xor($(r,box),box.p[7]));
-		r=xor(r,xor($(l,box),box.p[6]));
-		l=xor(l,xor($(r,box),box.p[5]));
-		r=xor(r,xor($(l,box),box.p[4]));
-		l=xor(l,xor($(r,box),box.p[3]));
-		r=xor(r,xor($(l,box),box.p[2]));
-		l=xor(l,xor($(r,box),box.p[1]));
-		o.right=l;
-		o.left=xor(r,box.p[0]);
+	function db(o, box) {
+		var l = o.left;
+		var r = o.right;
+		l = xor(l, box.p[17]);
+		r = xor(r, xor($(l, box), box.p[16]));
+		l = xor(l, xor($(r, box), box.p[15]));
+		r = xor(r, xor($(l, box), box.p[14]));
+		l = xor(l, xor($(r, box), box.p[13]));
+		r = xor(r, xor($(l, box), box.p[12]));
+		l = xor(l, xor($(r, box), box.p[11]));
+		r = xor(r, xor($(l, box), box.p[10]));
+		l = xor(l, xor($(r, box), box.p[9]));
+		r = xor(r, xor($(l, box), box.p[8]));
+		l = xor(l, xor($(r, box), box.p[7]));
+		r = xor(r, xor($(l, box), box.p[6]));
+		l = xor(l, xor($(r, box), box.p[5]));
+		r = xor(r, xor($(l, box), box.p[4]));
+		l = xor(l, xor($(r, box), box.p[3]));
+		r = xor(r, xor($(l, box), box.p[2]));
+		l = xor(l, xor($(r, box), box.p[1]));
+		o.right = l;
+		o.left = xor(r, box.p[0]);
 	}
-
-	//	Note that we aren't caching contexts here; it might take a little longer
-	//	but we should be more secure this way.
-	function init(key){
-		var k=key;
-		if (typeof(k)=="string"){
-			var a=[];
-			for(var i=0; i<k.length; i++) 
-				a.push(k.charCodeAt(i)&0xff);
-			k=a;
+	function init(key) {
+		var k = key;
+		if (typeof (k) == "string") {
+			var a = [];
+			for (var i = 0; i < k.length; i++) {
+				a.push(k.charCodeAt(i) & 255);
+			}
+			k = a;
 		}
-		//	init the boxes
-		var box = { p:[], s0:[], s1:[], s2:[], s3:[] };
-		for(var i=0; i<boxes.p.length; i++) box.p.push(boxes.p[i]);
-		for(var i=0; i<boxes.s0.length; i++) box.s0.push(boxes.s0[i]);
-		for(var i=0; i<boxes.s1.length; i++) box.s1.push(boxes.s1[i]);
-		for(var i=0; i<boxes.s2.length; i++) box.s2.push(boxes.s2[i]);
-		for(var i=0; i<boxes.s3.length; i++) box.s3.push(boxes.s3[i]);
-
-		//	init p with the key
-		var pos=0;
-		var data=0;
-		for(var i=0; i < box.p.length; i++){
-			for (var j=0; j<4; j++){
-				data = (data*POW8) | k[pos];
-				if(++pos==k.length) pos=0;
+		var box = {p:[], s0:[], s1:[], s2:[], s3:[]};
+		for (var i = 0; i < boxes.p.length; i++) {
+			box.p.push(boxes.p[i]);
+		}
+		for (var i = 0; i < boxes.s0.length; i++) {
+			box.s0.push(boxes.s0[i]);
+		}
+		for (var i = 0; i < boxes.s1.length; i++) {
+			box.s1.push(boxes.s1[i]);
+		}
+		for (var i = 0; i < boxes.s2.length; i++) {
+			box.s2.push(boxes.s2[i]);
+		}
+		for (var i = 0; i < boxes.s3.length; i++) {
+			box.s3.push(boxes.s3[i]);
+		}
+		var pos = 0;
+		var data = 0;
+		for (var i = 0; i < box.p.length; i++) {
+			for (var j = 0; j < 4; j++) {
+				data = (data * POW8) | k[pos];
+				if (++pos == k.length) {
+					pos = 0;
+				}
 			}
 			box.p[i] = xor(box.p[i], data);
 		}
-
-		//	encrypt p and the s boxes
-		var res={ left:0, right:0 };
-		for(var i=0; i<box.p.length;){
+		var res = {left:0, right:0};
+		for (var i = 0; i < box.p.length; ) {
 			eb(res, box);
-			box.p[i++]=res.left;
-			box.p[i++]=res.right;
+			box.p[i++] = res.left;
+			box.p[i++] = res.right;
 		}
-		for (var i=0; i<4; i++){
-			for(var j=0; j<box["s"+i].length;){
+		for (var i = 0; i < 4; i++) {
+			for (var j = 0; j < box["s" + i].length; ) {
 				eb(res, box);
-				box["s"+i][j++]=res.left;
-				box["s"+i][j++]=res.right;
+				box["s" + i][j++] = res.left;
+				box["s" + i][j++] = res.right;
 			}
 		}
 		return box;
 	}
-
-////////////////////////////////////////////////////////////////////////////
-//	CONVERSION FUNCTIONS
-////////////////////////////////////////////////////////////////////////////
-	//	these operate on byte arrays, NOT word arrays.
-	function toBase64(ba){ 
-		var p="=";
-		var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-		var s=[];
-		var l=ba.length;
-		var rm=l%3;
-		var x=l-rm;
-		for (var i=0; i<x;){
-			var t=ba[i++]<<16|ba[i++]<<8|ba[i++];
-			s.push(tab.charAt((t>>>18)&0x3f)); 
-			s.push(tab.charAt((t>>>12)&0x3f));
-			s.push(tab.charAt((t>>>6)&0x3f));
-			s.push(tab.charAt(t&0x3f));
+	function toBase64(ba) {
+		var p = "=";
+		var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+		var s = [];
+		var l = ba.length;
+		var rm = l % 3;
+		var x = l - rm;
+		for (var i = 0; i < x; ) {
+			var t = ba[i++] << 16 | ba[i++] << 8 | ba[i++];
+			s.push(tab.charAt((t >>> 18) & 63));
+			s.push(tab.charAt((t >>> 12) & 63));
+			s.push(tab.charAt((t >>> 6) & 63));
+			s.push(tab.charAt(t & 63));
 		}
-		//	deal with trailers, based on patch from Peter Wood.
-		switch(rm){
-			case 2:{
-				var t=ba[i++]<<16|ba[i++]<<8;
-				s.push(tab.charAt((t>>>18)&0x3f));
-				s.push(tab.charAt((t>>>12)&0x3f));
-				s.push(tab.charAt((t>>>6)&0x3f));
-				s.push(p);
-				break;
-			}
-			case 1:{
-				var t=ba[i++]<<16;
-				s.push(tab.charAt((t>>>18)&0x3f));
-				s.push(tab.charAt((t>>>12)&0x3f));
-				s.push(p);
-				s.push(p);
-				break;
-			}
+		switch (rm) {
+		  case 2:
+			var t = ba[i++] << 16 | ba[i++] << 8;
+			s.push(tab.charAt((t >>> 18) & 63));
+			s.push(tab.charAt((t >>> 12) & 63));
+			s.push(tab.charAt((t >>> 6) & 63));
+			s.push(p);
+			break;
+		  case 1:
+			var t = ba[i++] << 16;
+			s.push(tab.charAt((t >>> 18) & 63));
+			s.push(tab.charAt((t >>> 12) & 63));
+			s.push(p);
+			s.push(p);
+			break;
 		}
 		return s.join("");
 	}
-	function fromBase64(str){
-		var s=str.split("");
-		var p="=";
-		var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-		var out=[];
-		var l=s.length;
-		while(s[--l]==p){ }
-		for (var i=0; i<l;){
-			var t=tab.indexOf(s[i++])<<18|tab.indexOf(s[i++])<<12|tab.indexOf(s[i++])<<6|tab.indexOf(s[i++]);
-			out.push((t>>>16)&0xff);
-			out.push((t>>>8)&0xff);
-			out.push(t&0xff);
+	function fromBase64(str) {
+		var s = str.split("");
+		var p = "=";
+		var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+		var out = [];
+		var l = s.length;
+		while (s[--l] == p) {
 		}
+		for (var i = 0; i < l; ) {
+			var t = tab.indexOf(s[i++]) << 18 | tab.indexOf(s[i++]) << 12 | tab.indexOf(s[i++]) << 6 | tab.indexOf(s[i++]);
+			out.push((t >>> 16) & 255);
+			out.push((t >>> 8) & 255);
+			out.push(t & 255);
+		}
 		return out;
 	}
-////////////////////////////////////////////////////////////////////////////
-//	PUBLIC FUNCTIONS
-//	0.2: Only supporting ECB mode for now.
-////////////////////////////////////////////////////////////////////////////
-	this.getIV=function(/* dojo.crypto.outputTypes? */ outputType){
-		//	summary
-		//	returns the initialization vector in the output format specified by outputType
-		var out=outputType||dojo.crypto.outputTypes.Base64;
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				var s=[];
-				for(var i=0; i<iv.length; i++)
-					s.push((iv[i]).toString(16));
-				return s.join("");		//	string
+	this.getIV = function (outputType) {
+		var out = outputType || dojo.crypto.outputTypes.Base64;
+		switch (out) {
+		  case dojo.crypto.outputTypes.Hex:
+			var s = [];
+			for (var i = 0; i < iv.length; i++) {
+				s.push((iv[i]).toString(16));
 			}
-			case dojo.crypto.outputTypes.String:{
-				return iv.join("");		//	string
+			return s.join("");
+		  case dojo.crypto.outputTypes.String:
+			return iv.join("");
+		  case dojo.crypto.outputTypes.Raw:
+			return iv;
+		  default:
+			return toBase64(iv);
+		}
+	};
+	this.setIV = function (data, inputType) {
+		var ip = inputType || dojo.crypto.outputTypes.Base64;
+		var ba = null;
+		switch (ip) {
+		  case dojo.crypto.outputTypes.String:
+			ba = [];
+			for (var i = 0; i < data.length; i++) {
+				ba.push(data.charCodeAt(i));
 			}
-			case dojo.crypto.outputTypes.Raw:{
-				return iv;				//	array
+			break;
+		  case dojo.crypto.outputTypes.Hex:
+			ba = [];
+			var i = 0;
+			while (i + 1 < data.length) {
+				ba.push(parseInt(data.substr(i, 2), 16));
+				i += 2;
 			}
-			default:{
-				return toBase64(iv); 	//	 string
-			}
+			break;
+		  case dojo.crypto.outputTypes.Raw:
+			ba = data;
+			break;
+		  default:
+			ba = fromBase64(data);
+			break;
 		}
+		iv = {};
+		iv.left = ba[0] * POW24 | ba[1] * POW16 | ba[2] * POW8 | ba[3];
+		iv.right = ba[4] * POW24 | ba[5] * POW16 | ba[6] * POW8 | ba[7];
 	};
-	this.setIV=function(/* string */data, /* dojo.crypto.outputTypes? */inputType){
-		//	summary
-		//	sets the initialization vector to data (as interpreted as inputType)
-		var ip=inputType||dojo.crypto.outputTypes.Base64;
-		var ba=null;
-		switch(ip){
-			case dojo.crypto.outputTypes.String:{
-				ba=[];
-				for (var i=0; i<data.length; i++){
-					ba.push(data.charCodeAt(i));
-				}
-				break;
+	this.encrypt = function (plaintext, key, ao) {
+		var out = dojo.crypto.outputTypes.Base64;
+		var mode = dojo.crypto.cipherModes.EBC;
+		if (ao) {
+			if (ao.outputType) {
+				out = ao.outputType;
 			}
-			case dojo.crypto.outputTypes.Hex:{
-				ba=[];
-				var i=0;
-				while (i+1<data.length){
-					ba.push(parseInt(data.substr(i,2),16));
-					i+=2;
-				}
-				break;
+			if (ao.cipherMode) {
+				mode = ao.cipherMode;
 			}
-			case dojo.crypto.outputTypes.Raw:{
-				ba=data;
-				break;
-			}
-			default:{
-				ba=fromBase64(data);
-				break;
-			}
 		}
-		//	make it a pair of words now
-		iv={};
-		iv.left=ba[0]*POW24|ba[1]*POW16|ba[2]*POW8|ba[3];
-		iv.right=ba[4]*POW24|ba[5]*POW16|ba[6]*POW8|ba[7];
-	}
-	this.encrypt = function(/* string */plaintext, /* string */key, /* object? */ao){
-		//	summary
-		//	encrypts plaintext using key; allows user to specify output type and cipher mode via keyword object "ao"
-		var out=dojo.crypto.outputTypes.Base64;
-		var mode=dojo.crypto.cipherModes.EBC;
-		if (ao){
-			if (ao.outputType) out=ao.outputType;
-			if (ao.cipherMode) mode=ao.cipherMode;
-		}
-
 		var bx = init(key);
-		var padding = 8-(plaintext.length&7);
-		for (var i=0; i<padding; i++) plaintext+=String.fromCharCode(padding);
-		var cipher=[];
-		var count=plaintext.length >> 3;
-		var pos=0;
-		var o={};
-		var isCBC=(mode==dojo.crypto.cipherModes.CBC);
-		var vector={left:iv.left||null, right:iv.right||null};
-		for(var i=0; i<count; i++){
-			o.left=plaintext.charCodeAt(pos)*POW24
-				|plaintext.charCodeAt(pos+1)*POW16
-				|plaintext.charCodeAt(pos+2)*POW8
-				|plaintext.charCodeAt(pos+3);
-			o.right=plaintext.charCodeAt(pos+4)*POW24
-				|plaintext.charCodeAt(pos+5)*POW16
-				|plaintext.charCodeAt(pos+6)*POW8
-				|plaintext.charCodeAt(pos+7);
-
-			if(isCBC){
-				o.left=xor(o.left, vector.left);
-				o.right=xor(o.right, vector.right);
+		var padding = 8 - (plaintext.length & 7);
+		for (var i = 0; i < padding; i++) {
+			plaintext += String.fromCharCode(padding);
+		}
+		var cipher = [];
+		var count = plaintext.length >> 3;
+		var pos = 0;
+		var o = {};
+		var isCBC = (mode == dojo.crypto.cipherModes.CBC);
+		var vector = {left:iv.left || null, right:iv.right || null};
+		for (var i = 0; i < count; i++) {
+			o.left = plaintext.charCodeAt(pos) * POW24 | plaintext.charCodeAt(pos + 1) * POW16 | plaintext.charCodeAt(pos + 2) * POW8 | plaintext.charCodeAt(pos + 3);
+			o.right = plaintext.charCodeAt(pos + 4) * POW24 | plaintext.charCodeAt(pos + 5) * POW16 | plaintext.charCodeAt(pos + 6) * POW8 | plaintext.charCodeAt(pos + 7);
+			if (isCBC) {
+				o.left = xor(o.left, vector.left);
+				o.right = xor(o.right, vector.right);
 			}
-
-			eb(o, bx);	//	encrypt the block
-
-			if(isCBC){
-				vector.left=o.left;
-				vector.right=o.right;dojo.crypto.outputTypes.Hex
+			eb(o, bx);
+			if (isCBC) {
+				vector.left = o.left;
+				vector.right = o.right;
+				dojo.crypto.outputTypes.Hex;
 			}
-
-			cipher.push((o.left>>24)&0xff); 
-			cipher.push((o.left>>16)&0xff); 
-			cipher.push((o.left>>8)&0xff);
-			cipher.push(o.left&0xff);
-			cipher.push((o.right>>24)&0xff); 
-			cipher.push((o.right>>16)&0xff); 
-			cipher.push((o.right>>8)&0xff);
-			cipher.push(o.right&0xff);
-			pos+=8;
+			cipher.push((o.left >> 24) & 255);
+			cipher.push((o.left >> 16) & 255);
+			cipher.push((o.left >> 8) & 255);
+			cipher.push(o.left & 255);
+			cipher.push((o.right >> 24) & 255);
+			cipher.push((o.right >> 16) & 255);
+			cipher.push((o.right >> 8) & 255);
+			cipher.push(o.right & 255);
+			pos += 8;
 		}
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				var s=[];
-				for(var i=0; i<cipher.length; i++)
-					s.push((cipher[i]).toString(16));
-				return s.join("");	//	string
+		switch (out) {
+		  case dojo.crypto.outputTypes.Hex:
+			var s = [];
+			for (var i = 0; i < cipher.length; i++) {
+				s.push((cipher[i]).toString(16));
 			}
-			case dojo.crypto.outputTypes.String:{
-				return cipher.join("");	//	string
+			return s.join("");
+		  case dojo.crypto.outputTypes.String:
+			return cipher.join("");
+		  case dojo.crypto.outputTypes.Raw:
+			return cipher;
+		  default:
+			return toBase64(cipher);
+		}
+	};
+	this.decrypt = function (ciphertext, key, ao) {
+		var ip = dojo.crypto.outputTypes.Base64;
+		var mode = dojo.crypto.cipherModes.EBC;
+		if (ao) {
+			if (ao.outputType) {
+				ip = ao.outputType;
 			}
-			case dojo.crypto.outputTypes.Raw:{
-				return cipher;	//	array
+			if (ao.cipherMode) {
+				mode = ao.cipherMode;
 			}
-			default:{
-				return toBase64(cipher);	//	string
-			}
 		}
-	};
-
-	this.decrypt = function(/* string */ciphertext, /* string */key, /* object? */ao){
-		//	summary
-		//	decrypts ciphertext using key; allows specification of how ciphertext is encoded via ao.
-		var ip=dojo.crypto.outputTypes.Base64;
-		var mode=dojo.crypto.cipherModes.EBC;
-		if (ao){
-			if (ao.outputType) ip=ao.outputType;
-			if (ao.cipherMode) mode=ao.cipherMode;
-		}
 		var bx = init(key);
-		var pt=[];
-	
-		var c=null;
-		switch(ip){
-			case dojo.crypto.outputTypes.Hex:{
-				c=[];
-				var i=0;
-				while (i+1<ciphertext.length){
-					c.push(parseInt(ciphertext.substr(i,2),16));
-					i+=2;
-				}
-				break;
+		var pt = [];
+		var c = null;
+		switch (ip) {
+		  case dojo.crypto.outputTypes.Hex:
+			c = [];
+			var i = 0;
+			while (i + 1 < ciphertext.length) {
+				c.push(parseInt(ciphertext.substr(i, 2), 16));
+				i += 2;
 			}
-			case dojo.crypto.outputTypes.String:{
-				c=[];
-				for (var i=0; i<ciphertext.length; i++){
-					c.push(ciphertext.charCodeAt(i));
-				}
-				break;
+			break;
+		  case dojo.crypto.outputTypes.String:
+			c = [];
+			for (var i = 0; i < ciphertext.length; i++) {
+				c.push(ciphertext.charCodeAt(i));
 			}
-			case dojo.crypto.outputTypes.Raw:{
-				c=ciphertext;	//	should be a byte array
-				break;
-			}
-			default:{
-				c=fromBase64(ciphertext);
-				break;
-			}
+			break;
+		  case dojo.crypto.outputTypes.Raw:
+			c = ciphertext;
+			break;
+		  default:
+			c = fromBase64(ciphertext);
+			break;
 		}
-
-		var count=c.length >> 3;
-		var pos=0;
-		var o={};
-		var isCBC=(mode==dojo.crypto.cipherModes.CBC);
-		var vector={left:iv.left||null, right:iv.right||null};
-		for(var i=0; i<count; i++){
-			o.left=c[pos]*POW24|c[pos+1]*POW16|c[pos+2]*POW8|c[pos+3];
-			o.right=c[pos+4]*POW24|c[pos+5]*POW16|c[pos+6]*POW8|c[pos+7];
-
-			if(isCBC){
-				var left=o.left;
-				var right=o.right;
+		var count = c.length >> 3;
+		var pos = 0;
+		var o = {};
+		var isCBC = (mode == dojo.crypto.cipherModes.CBC);
+		var vector = {left:iv.left || null, right:iv.right || null};
+		for (var i = 0; i < count; i++) {
+			o.left = c[pos] * POW24 | c[pos + 1] * POW16 | c[pos + 2] * POW8 | c[pos + 3];
+			o.right = c[pos + 4] * POW24 | c[pos + 5] * POW16 | c[pos + 6] * POW8 | c[pos + 7];
+			if (isCBC) {
+				var left = o.left;
+				var right = o.right;
 			}
-
-			db(o, bx);	//	decrypt the block
-
-			if(isCBC){
-				o.left=xor(o.left, vector.left);
-				o.right=xor(o.right, vector.right);
-				vector.left=left;
-				vector.right=right;
+			db(o, bx);
+			if (isCBC) {
+				o.left = xor(o.left, vector.left);
+				o.right = xor(o.right, vector.right);
+				vector.left = left;
+				vector.right = right;
 			}
-
-			pt.push((o.left>>24)&0xff);
-			pt.push((o.left>>16)&0xff);
-			pt.push((o.left>>8)&0xff);
-			pt.push(o.left&0xff);
-			pt.push((o.right>>24)&0xff);
-			pt.push((o.right>>16)&0xff);
-			pt.push((o.right>>8)&0xff);
-			pt.push(o.right&0xff);
-			pos+=8;
+			pt.push((o.left >> 24) & 255);
+			pt.push((o.left >> 16) & 255);
+			pt.push((o.left >> 8) & 255);
+			pt.push(o.left & 255);
+			pt.push((o.right >> 24) & 255);
+			pt.push((o.right >> 16) & 255);
+			pt.push((o.right >> 8) & 255);
+			pt.push(o.right & 255);
+			pos += 8;
 		}
-
-		//	check for padding, and remove.
-		if(pt[pt.length-1]==pt[pt.length-2]||pt[pt.length-1]==0x01){
-			var n=pt[pt.length-1];
-			pt.splice(pt.length-n, n);
+		if (pt[pt.length - 1] == pt[pt.length - 2] || pt[pt.length - 1] == 1) {
+			var n = pt[pt.length - 1];
+			pt.splice(pt.length - n, n);
 		}
-
-		//	convert to string
-		for(var i=0; i<pt.length; i++)
-			pt[i]=String.fromCharCode(pt[i]);
-		return pt.join("");		//	string
+		for (var i = 0; i < pt.length; i++) {
+			pt[i] = String.fromCharCode(pt[i]);
+		}
+		return pt.join("");
 	};
-
 	this.setIV("0000000000000000", dojo.crypto.outputTypes.Hex);
 }();
 
+
 __CPAN_FILE__ src/crypto/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -66914,19 +45129,11 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: [
-		"dojo.crypto",
-		"dojo.crypto.MD5"
-	]
-});
+dojo.kwCompoundRequire({common:["dojo.crypto", "dojo.crypto.MD5"]});
 dojo.provide("dojo.crypto.*");
 
-__CPAN_FILE__ src/crypto/SHA1.js
-dojo.require("dojo.crypto");
-dojo.provide("dojo.crypto.SHA1");
-dojo.require("dojo.experimental");
 
+__CPAN_FILE__ src/crypto/SHA1.js
 /*
  *	A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
  *	in FIPS PUB 180-1
@@ -66938,146 +45145,167 @@
  *
  *	Dojo port by Tom Trenka
  */
-dojo.experimental("dojo.crypto.SHA1");
 
-dojo.crypto.SHA1 = new function(){
-	var chrsz=8;
-	var mask=(1<<chrsz)-1;
+dojo.require("dojo.crypto");
+dojo.provide("dojo.crypto.SHA1");
+dojo.require("dojo.experimental");
+dojo.experimental("dojo.crypto.SHA1");
+dojo.crypto.SHA1 = new function () {
+	var chrsz = 8;
+	var mask = (1 << chrsz) - 1;
 	function toWord(s) {
-	  var wa=[];
-	  for(var i=0; i<s.length*chrsz; i+=chrsz)
-		wa[i>>5]|=(s.charCodeAt(i/chrsz)&mask)<<(i%32);
-	  return wa;
+		var wa = [];
+		for (var i = 0; i < s.length * chrsz; i += chrsz) {
+			wa[i >> 5] |= (s.charCodeAt(i / chrsz) & mask) << (i % 32);
+		}
+		return wa;
 	}
-	function toString(wa){
-		var s=[];
-		for(var i=0; i<wa.length*32; i+=chrsz)
-			s.push(String.fromCharCode((wa[i>>5]>>>(i%32))&mask));
+	function toString(wa) {
+		var s = [];
+		for (var i = 0; i < wa.length * 32; i += chrsz) {
+			s.push(String.fromCharCode((wa[i >> 5] >>> (i % 32)) & mask));
+		}
 		return s.join("");
 	}
 	function toHex(wa) {
-		var h="0123456789abcdef";
-		var s=[];
-		for(var i=0; i<wa.length*4; i++){
-			s.push(h.charAt((wa[i>>2]>>((i%4)*8+4))&0xF)+h.charAt((wa[i>>2]>>((i%4)*8))&0xF));
+		var h = "0123456789abcdef";
+		var s = [];
+		for (var i = 0; i < wa.length * 4; i++) {
+			s.push(h.charAt((wa[i >> 2] >> ((i % 4) * 8 + 4)) & 15) + h.charAt((wa[i >> 2] >> ((i % 4) * 8)) & 15));
 		}
 		return s.join("");
 	}
-	function toBase64(wa){
-		var p="=";
-		var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-		var s=[];
-		for(var i=0; i<wa.length*4; i+=3){
-			var t=(((wa[i>>2]>>8*(i%4))&0xFF)<<16)|(((wa[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)|((wa[i+2>>2]>>8*((i+2)%4))&0xFF);
-			for(var j=0; j<4; j++){
-				if(i*8+j*6>wa.length*32) s.push(p);
-				else s.push(tab.charAt((t>>6*(3-j))&0x3F));
+	function toBase64(wa) {
+		var p = "=";
+		var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+		var s = [];
+		for (var i = 0; i < wa.length * 4; i += 3) {
+			var t = (((wa[i >> 2] >> 8 * (i % 4)) & 255) << 16) | (((wa[i + 1 >> 2] >> 8 * ((i + 1) % 4)) & 255) << 8) | ((wa[i + 2 >> 2] >> 8 * ((i + 2) % 4)) & 255);
+			for (var j = 0; j < 4; j++) {
+				if (i * 8 + j * 6 > wa.length * 32) {
+					s.push(p);
+				} else {
+					s.push(tab.charAt((t >> 6 * (3 - j)) & 63));
+				}
 			}
 		}
 		return s.join("");
 	}
-
-	//	math
-	function add(x,y){
-		var l=(x&0xffff)+(y&0xffff);
-		var m=(x>>16)+(y>>16)+(l>>16);
-		return (m<<16)|(l&0xffff);
+	function add(x, y) {
+		var l = (x & 65535) + (y & 65535);
+		var m = (x >> 16) + (y >> 16) + (l >> 16);
+		return (m << 16) | (l & 65535);
 	}
-	function r(x,n){  return (x<<n)|(x>>>(32-n)); }
-	
-	//	SHA rounds
-	function f(u,v,w){ return ((u&v)|(~u&w)); }
-	function g(u,v,w){ return ((u&v)|(u&w)|(v&w)); }
-	function h(u,v,w){ return (u^v^w); }
-	
-	function fn(i,u,v,w){
-		if(i<20) return f(u,v,w);
-		if(i<40) return h(u,v,w);
-		if(i<60) return g(u,v,w);
-		return h(u,v,w);
+	function r(x, n) {
+		return (x << n) | (x >>> (32 - n));
 	}
-	function cnst(i){
-		if(i<20) return 1518500249;
-		if(i<40) return 1859775393;
-		if(i<60) return -1894007588;
+	function f(u, v, w) {
+		return ((u & v) | (~u & w));
+	}
+	function g(u, v, w) {
+		return ((u & v) | (u & w) | (v & w));
+	}
+	function h(u, v, w) {
+		return (u ^ v ^ w);
+	}
+	function fn(i, u, v, w) {
+		if (i < 20) {
+			return f(u, v, w);
+		}
+		if (i < 40) {
+			return h(u, v, w);
+		}
+		if (i < 60) {
+			return g(u, v, w);
+		}
+		return h(u, v, w);
+	}
+	function cnst(i) {
+		if (i < 20) {
+			return 1518500249;
+		}
+		if (i < 40) {
+			return 1859775393;
+		}
+		if (i < 60) {
+			return -1894007588;
+		}
 		return -899497514;
 	}
-
-	function core(x,len){
-		x[len>>5]|=0x80<<(24-len%32);
-		x[((len+64>>9)<<4)+15]=len;
-
-		var w=[];
-		var a= 1732584193;		//	0x67452301
-		var b=-271733879;		//	0xefcdab89
-		var c=-1732584194;		//	0x98badcfe
-		var d= 271733878;		//	0x10325476
-		var e=-1009589776;		//	0xc3d2e1f0
-		
-		for(var i=0; i<x.length; i+=16){
-			var olda=a;
-			var oldb=b;
-			var oldc=c;
-			var oldd=d;
-			var olde=e;
-
-			for(var j=0; j<80; j++){
-				if(j<16) w[j]=x[i+j];
-				else w[j]=r(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);
-				var t=add(add(r(a,5),fn(j,b,c,d)),add(add(e,w[j]),cnst(j)));
-				e=d; d=c; c=r(b,30); b=a; a=t;
+	function core(x, len) {
+		x[len >> 5] |= 128 << (24 - len % 32);
+		x[((len + 64 >> 9) << 4) + 15] = len;
+		var w = [];
+		var a = 1732584193;
+		var b = -271733879;
+		var c = -1732584194;
+		var d = 271733878;
+		var e = -1009589776;
+		for (var i = 0; i < x.length; i += 16) {
+			var olda = a;
+			var oldb = b;
+			var oldc = c;
+			var oldd = d;
+			var olde = e;
+			for (var j = 0; j < 80; j++) {
+				if (j < 16) {
+					w[j] = x[i + j];
+				} else {
+					w[j] = r(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
+				}
+				var t = add(add(r(a, 5), fn(j, b, c, d)), add(add(e, w[j]), cnst(j)));
+				e = d;
+				d = c;
+				c = r(b, 30);
+				b = a;
+				a = t;
 			}
-
-			a=add(a,olda);
-			b=add(b,oldb);
-			c=add(c,oldc);
-			d=add(d,oldd);
-			e=add(e,olde);
+			a = add(a, olda);
+			b = add(b, oldb);
+			c = add(c, oldc);
+			d = add(d, oldd);
+			e = add(e, olde);
 		}
-		return [a,b,c,d,e];
+		return [a, b, c, d, e];
 	}
-	function hmac(data,key){
-		var wa=toWord(key);
-		if(wa.length>16) wa=core(wa,key.length*chrsz);
-		var l=[], r=[];
-		for(var i=0; i<16; i++){
-			l[i]=wa[i]^0x36363636;
-			r[i]=wa[i]^0x5c5c5c5c;
+	function hmac(data, key) {
+		var wa = toWord(key);
+		if (wa.length > 16) {
+			wa = core(wa, key.length * chrsz);
 		}
-		var h=core(l.concat(toWord(data)),512+data.length*chrsz);
-		return core(r.concat(h),640);
+		var l = [], r = [];
+		for (var i = 0; i < 16; i++) {
+			l[i] = wa[i] ^ 909522486;
+			r[i] = wa[i] ^ 1549556828;
+		}
+		var h = core(l.concat(toWord(data)), 512 + data.length * chrsz);
+		return core(r.concat(h), 640);
 	}
-
-	this.compute=function(data,outputType){
-		var out=outputType||dojo.crypto.outputTypes.Base64;
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				return toHex(core(toWord(data),data.length*chrsz));
-			}
-			case dojo.crypto.outputTypes.String:{
-				return toString(core(toWord(data),data.length*chrsz));
-			}
-			default:{
-				return toBase64(core(toWord(data),data.length*chrsz));
-			}
+	this.compute = function (data, outputType) {
+		var out = outputType || dojo.crypto.outputTypes.Base64;
+		switch (out) {
+		  case dojo.crypto.outputTypes.Hex:
+			return toHex(core(toWord(data), data.length * chrsz));
+		  case dojo.crypto.outputTypes.String:
+			return toString(core(toWord(data), data.length * chrsz));
+		  default:
+			return toBase64(core(toWord(data), data.length * chrsz));
 		}
 	};
-	this.getHMAC=function(data,key,outputType){
-		var out=outputType||dojo.crypto.outputTypes.Base64;
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				return toHex(hmac(data,key));
-			}
-			case dojo.crypto.outputTypes.String:{
-				return toString(hmac(data,key));
-			}
-			default:{
-				return toBase64(hmac(data,key));
-			}
+	this.getHMAC = function (data, key, outputType) {
+		var out = outputType || dojo.crypto.outputTypes.Base64;
+		switch (out) {
+		  case dojo.crypto.outputTypes.Hex:
+			return toHex(hmac(data, key));
+		  case dojo.crypto.outputTypes.String:
+			return toString(hmac(data, key));
+		  default:
+			return toBase64(hmac(data, key));
 		}
 	};
 }();
 
+
 __CPAN_DIR__ src/cal
 __CPAN_FILE__ src/cal/textDirectory.js
 /*
@@ -67092,71 +45320,50 @@
 
 dojo.provide("dojo.cal.textDirectory");
 dojo.require("dojo.string");
-
-dojo.cal.textDirectory.Property = function(/*String*/line){
-// summary: parses a single line from an iCalendar text/directory file
-// and creates an object with four named values; name, group, params
-// and value. name, group and value are strings containing the original
-// tokens unaltered and values is an array containing name/value pairs
-// or a single name token packed into arrays.
-
-	// split into name/value pair
-	var left = dojo.string.trim(line.substring(0, line.indexOf(':')));
-	var right = dojo.string.trim(line.substr(line.indexOf(':') + 1));
-
-	// separate name and paramters	
-	var parameters = dojo.string.splitEscaped(left,';');
+dojo.cal.textDirectory.Property = function (line) {
+	var left = dojo.string.trim(line.substring(0, line.indexOf(":")));
+	var right = dojo.string.trim(line.substr(line.indexOf(":") + 1));
+	var parameters = dojo.string.splitEscaped(left, ";");
 	this.name = parameters[0];
 	parameters.splice(0, 1);
-
-	// parse paramters
 	this.params = [];
 	var arr;
-	for(var i = 0; i < parameters.length; i++){
+	for (var i = 0; i < parameters.length; i++) {
 		arr = parameters[i].split("=");
 		var key = dojo.string.trim(arr[0].toUpperCase());
-
-		if(arr.length == 1){ this.params.push([key]); continue; }
-
-		var values = dojo.string.splitEscaped(arr[1],',');
-		for(var j = 0; j < values.length; j++){
-			if(dojo.string.trim(values[j]) != ''){
+		if (arr.length == 1) {
+			this.params.push([key]);
+			continue;
+		}
+		var values = dojo.string.splitEscaped(arr[1], ",");
+		for (var j = 0; j < values.length; j++) {
+			if (dojo.string.trim(values[j]) != "") {
 				this.params.push([key, dojo.string.trim(values[j])]);
 			}
 		}
 	}
-
-	// separate group
-	if(this.name.indexOf('.') > 0){
-		arr = this.name.split('.');
+	if (this.name.indexOf(".") > 0) {
+		arr = this.name.split(".");
 		this.group = arr[0];
 		this.name = arr[1];
 	}
-
-	// don't do any parsing, leave to implementation
 	this.value = right;
-}
-
-
-dojo.cal.textDirectory.tokenise = function(/*String*/text){
-// summary: parses text into an array of properties.
-
-	// normlize to one property per line and parse
-	var nText = dojo.string.normalizeNewlines(text,"\n").
-		replace(/\n[ \t]/g, '').
-		replace(/\x00/g, '');
-
+};
+dojo.cal.textDirectory.tokenise = function (text) {
+	var nText = dojo.string.normalizeNewlines(text, "\n").replace(/\n[ \t]/g, "").replace(/\x00/g, "");
 	var lines = nText.split("\n");
 	var properties = [];
-
-	for(var i = 0; i < lines.length; i++){
-		if(dojo.string.trim(lines[i]) == ''){ continue; }
+	for (var i = 0; i < lines.length; i++) {
+		if (dojo.string.trim(lines[i]) == "") {
+			continue;
+		}
 		var prop = new dojo.cal.textDirectory.Property(lines[i]);
 		properties.push(prop);
 	}
-	return properties; // Array
-}
+	return properties;
+};
 
+
 __CPAN_FILE__ src/cal/iCalendar.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -67173,804 +45380,554 @@
 dojo.require("dojo.cal.textDirectory");
 dojo.require("dojo.date.common");
 dojo.require("dojo.date.serialize");
-
-
-dojo.cal.iCalendar.fromText =  function (/* string */text) {
-	// summary
-	// Parse text of an iCalendar and return an array of iCalendar objects
-
+dojo.cal.iCalendar.fromText = function (text) {
 	var properties = dojo.cal.textDirectory.tokenise(text);
 	var calendars = [];
-
-	//dojo.debug("Parsing iCal String");
 	for (var i = 0, begun = false; i < properties.length; i++) {
 		var prop = properties[i];
 		if (!begun) {
-			if (prop.name == 'BEGIN' && prop.value == 'VCALENDAR') {
+			if (prop.name == "BEGIN" && prop.value == "VCALENDAR") {
 				begun = true;
 				var calbody = [];
 			}
-		} else if (prop.name == 'END' && prop.value == 'VCALENDAR') {
-			calendars.push(new dojo.cal.iCalendar.VCalendar(calbody));
-			begun = false;
 		} else {
-			calbody.push(prop);
+			if (prop.name == "END" && prop.value == "VCALENDAR") {
+				calendars.push(new dojo.cal.iCalendar.VCalendar(calbody));
+				begun = false;
+			} else {
+				calbody.push(prop);
+			}
 		}
 	}
-	return /* array */calendars;
-}
-
-
-dojo.cal.iCalendar.Component = function (/* string */ body ) {
-	// summary
-	// A component is the basic container of all this stuff. 
-
+	return calendars;
+};
+dojo.cal.iCalendar.Component = function (body) {
 	if (!this.name) {
-		this.name = "COMPONENT"
+		this.name = "COMPONENT";
 	}
-
 	this.properties = [];
 	this.components = [];
-
 	if (body) {
-		for (var i = 0, context = ''; i < body.length; i++) {
-			if (context == '') {
-				if (body[i].name == 'BEGIN') {
+		for (var i = 0, context = ""; i < body.length; i++) {
+			if (context == "") {
+				if (body[i].name == "BEGIN") {
 					context = body[i].value;
 					var childprops = [];
 				} else {
 					this.addProperty(new dojo.cal.iCalendar.Property(body[i]));
 				}
-			} else if (body[i].name == 'END' && body[i].value == context) {
-				if (context=="VEVENT") {
-					this.addComponent(new dojo.cal.iCalendar.VEvent(childprops));
-				} else if (context=="VTIMEZONE") {
-					this.addComponent(new dojo.cal.iCalendar.VTimeZone(childprops));
-				} else if (context=="VTODO") {
-					this.addComponent(new dojo.cal.iCalendar.VTodo(childprops));
-				} else if (context=="VJOURNAL") {
-					this.addComponent(new dojo.cal.iCalendar.VJournal(childprops));
-				} else if (context=="VFREEBUSY") {
-					this.addComponent(new dojo.cal.iCalendar.VFreeBusy(childprops));
-				} else if (context=="STANDARD") {
-					this.addComponent(new dojo.cal.iCalendar.Standard(childprops));
-				} else if (context=="DAYLIGHT") {
-					this.addComponent(new dojo.cal.iCalendar.Daylight(childprops));
-				} else if (context=="VALARM") {
-					this.addComponent(new dojo.cal.iCalendar.VAlarm(childprops));
-				}else {
-					dojo.unimplemented("dojo.cal.iCalendar." + context);
-				}
-				context = '';
 			} else {
-				childprops.push(body[i]);
+				if (body[i].name == "END" && body[i].value == context) {
+					if (context == "VEVENT") {
+						this.addComponent(new dojo.cal.iCalendar.VEvent(childprops));
+					} else {
+						if (context == "VTIMEZONE") {
+							this.addComponent(new dojo.cal.iCalendar.VTimeZone(childprops));
+						} else {
+							if (context == "VTODO") {
+								this.addComponent(new dojo.cal.iCalendar.VTodo(childprops));
+							} else {
+								if (context == "VJOURNAL") {
+									this.addComponent(new dojo.cal.iCalendar.VJournal(childprops));
+								} else {
+									if (context == "VFREEBUSY") {
+										this.addComponent(new dojo.cal.iCalendar.VFreeBusy(childprops));
+									} else {
+										if (context == "STANDARD") {
+											this.addComponent(new dojo.cal.iCalendar.Standard(childprops));
+										} else {
+											if (context == "DAYLIGHT") {
+												this.addComponent(new dojo.cal.iCalendar.Daylight(childprops));
+											} else {
+												if (context == "VALARM") {
+													this.addComponent(new dojo.cal.iCalendar.VAlarm(childprops));
+												} else {
+													dojo.unimplemented("dojo.cal.iCalendar." + context);
+												}
+											}
+										}
+									}
+								}
+							}
+						}
+					}
+					context = "";
+				} else {
+					childprops.push(body[i]);
+				}
 			}
 		}
-
 		if (this._ValidProperties) {
 			this.postCreate();
 		}
 	}
-}
-
-dojo.extend(dojo.cal.iCalendar.Component, {
-
-	addProperty: function (prop) {
-		// summary
-		// push a new property onto a component.
-		this.properties.push(prop);
-		this[prop.name.toLowerCase()] = prop;
-	},
-
-	addComponent: function (prop) {
-		// summary
-		// add a component to this components list of children.
-		this.components.push(prop);
-	},
-
-	postCreate: function() {
-		for (var x=0; x<this._ValidProperties.length; x++) {
-			var evtProperty = this._ValidProperties[x];
-			var found = false;
-	
-			for (var y=0; y<this.properties.length; y++) {	
-				var prop = this.properties[y];
-				var propName = prop.name.toLowerCase();
-				if (dojo.lang.isArray(evtProperty)) {
-
-					var alreadySet = false;
-					for (var z=0; z<evtProperty.length; z++) {
-						var evtPropertyName = evtProperty[z].name.toLowerCase();
-						if((this[evtPropertyName])  && (evtPropertyName != propName )) {
-							alreadySet=true;
-						} 
+};
+dojo.extend(dojo.cal.iCalendar.Component, {addProperty:function (prop) {
+	this.properties.push(prop);
+	this[prop.name.toLowerCase()] = prop;
+}, addComponent:function (prop) {
+	this.components.push(prop);
+}, postCreate:function () {
+	for (var x = 0; x < this._ValidProperties.length; x++) {
+		var evtProperty = this._ValidProperties[x];
+		var found = false;
+		for (var y = 0; y < this.properties.length; y++) {
+			var prop = this.properties[y];
+			var propName = prop.name.toLowerCase();
+			if (dojo.lang.isArray(evtProperty)) {
+				var alreadySet = false;
+				for (var z = 0; z < evtProperty.length; z++) {
+					var evtPropertyName = evtProperty[z].name.toLowerCase();
+					if ((this[evtPropertyName]) && (evtPropertyName != propName)) {
+						alreadySet = true;
 					}
-					if (!alreadySet) {
+				}
+				if (!alreadySet) {
+					this[propName] = prop;
+				}
+			} else {
+				if (propName == evtProperty.name.toLowerCase()) {
+					found = true;
+					if (evtProperty.occurance == 1) {
 						this[propName] = prop;
-					}
-				} else {
-					if (propName == evtProperty.name.toLowerCase()) {
+					} else {
 						found = true;
-						if (evtProperty.occurance == 1){
-							this[propName] = prop;
-						} else {
-							found = true;
-							if (!dojo.lang.isArray(this[propName])) {
-							 	this[propName] = [];
-							}
-							this[propName].push(prop);
+						if (!dojo.lang.isArray(this[propName])) {
+							this[propName] = [];
 						}
+						this[propName].push(prop);
 					}
 				}
 			}
-
-			if (evtProperty.required && !found) {	
-				dojo.debug("iCalendar - " + this.name + ": Required Property not found: " + evtProperty.name);
-			}
 		}
-
-		// parse any rrules		
-		if (dojo.lang.isArray(this.rrule)) {
-			for(var x=0; x<this.rrule.length; x++) {
-				var rule = this.rrule[x].value;
-
-				//add a place to cache dates we have checked for recurrance
-				this.rrule[x].cache = function() {};
-				
-				var temp = rule.split(";");
-				for (var y=0; y<temp.length; y++) {
-					var pair = temp[y].split("=");
-					var key = pair[0].toLowerCase();
-					var val = pair[1];
-
-					if ((key == "freq") || (key=="interval") || (key=="until")) {
-						this.rrule[x][key]= val;
-					} else {
-						var valArray = val.split(",");
-						this.rrule[x][key] = valArray; 
-					}
-				}	
+		if (evtProperty.required && !found) {
+			dojo.debug("iCalendar - " + this.name + ": Required Property not found: " + evtProperty.name);
+		}
+	}
+	if (dojo.lang.isArray(this.rrule)) {
+		for (var x = 0; x < this.rrule.length; x++) {
+			var rule = this.rrule[x].value;
+			this.rrule[x].cache = function () {
+			};
+			var temp = rule.split(";");
+			for (var y = 0; y < temp.length; y++) {
+				var pair = temp[y].split("=");
+				var key = pair[0].toLowerCase();
+				var val = pair[1];
+				if ((key == "freq") || (key == "interval") || (key == "until")) {
+					this.rrule[x][key] = val;
+				} else {
+					var valArray = val.split(",");
+					this.rrule[x][key] = valArray;
+				}
 			}
-			this.recurring = true;
 		}
-
-	}, 
-
-	toString: function () {
-		// summary
-		// output a string representation of this component.
-		return "[iCalendar.Component; " + this.name + ", " + this.properties.length +
-			" properties, " + this.components.length + " components]";
+		this.recurring = true;
 	}
-});
-
+}, toString:function () {
+	return "[iCalendar.Component; " + this.name + ", " + this.properties.length + " properties, " + this.components.length + " components]";
+}});
 dojo.cal.iCalendar.Property = function (prop) {
-	// summary
-	// A single property of a component.
-
-	// unpack the values
 	this.name = prop.name;
 	this.group = prop.group;
 	this.params = prop.params;
 	this.value = prop.value;
-
-}
-
-dojo.extend(dojo.cal.iCalendar.Property, {
-	toString: function () {	
-		// summary
-		// output a string reprensentation of this component.
-		return "[iCalenday.Property; " + this.name + ": " + this.value + "]";
-	}
-});
-
-// This is just a little helper function for the Component Properties
+};
+dojo.extend(dojo.cal.iCalendar.Property, {toString:function () {
+	return "[iCalenday.Property; " + this.name + ": " + this.value + "]";
+}});
 var _P = function (n, oc, req) {
-	return {name: n, required: (req) ? true : false,
-		occurance: (oc == '*' || !oc) ? -1 : oc}
-}
-
-/*
- * VCALENDAR
- */
-
-dojo.cal.iCalendar.VCalendar = function (/* string */ calbody) {
-	// summary
-	// VCALENDAR Component
-
+	return {name:n, required:(req) ? true : false, occurance:(oc == "*" || !oc) ? -1 : oc};
+};
+dojo.cal.iCalendar.VCalendar = function (calbody) {
 	this.name = "VCALENDAR";
 	this.recurring = [];
-	this.nonRecurringEvents = function(){};
+	this.nonRecurringEvents = function () {
+	};
 	dojo.cal.iCalendar.Component.call(this, calbody);
-}
-
+};
 dojo.inherits(dojo.cal.iCalendar.VCalendar, dojo.cal.iCalendar.Component);
-
-dojo.extend(dojo.cal.iCalendar.VCalendar, {
-
-	addComponent: function (prop) {
-		// summary
-		// add component to the calenadar that makes it easy to pull them out again later.
-		this.components.push(prop);
-		if (prop.name.toLowerCase() == "vevent") {
-			if (prop.rrule) {
-				this.recurring.push(prop);
-			} else {
-				var startDate = prop.getDate();
-				var month = startDate.getMonth() + 1;
-				var dateString= month + "-" + startDate.getDate() + "-" + startDate.getFullYear();
-				if (!dojo.lang.isArray(this[dateString])) {
-					this.nonRecurringEvents[dateString] = [];
-				}
-				this.nonRecurringEvents[dateString].push(prop);
+dojo.extend(dojo.cal.iCalendar.VCalendar, {addComponent:function (prop) {
+	this.components.push(prop);
+	if (prop.name.toLowerCase() == "vevent") {
+		if (prop.rrule) {
+			this.recurring.push(prop);
+		} else {
+			var startDate = prop.getDate();
+			var month = startDate.getMonth() + 1;
+			var dateString = month + "-" + startDate.getDate() + "-" + startDate.getFullYear();
+			if (!dojo.lang.isArray(this[dateString])) {
+				this.nonRecurringEvents[dateString] = [];
 			}
+			this.nonRecurringEvents[dateString].push(prop);
 		}
-	},
-
-	preComputeRecurringEvents: function(until) {
-		var calculatedEvents = function(){};
-
-		for(var x=0; x<this.recurring.length; x++) {
-			var dates = this.recurring[x].getDates(until);
-			for (var y=0; y<dates.length;y++) {
-				var month = dates[y].getMonth() + 1;
-				var dateStr = month + "-" + dates[y].getDate() + "-" + dates[y].getFullYear();
-				if (!dojo.lang.isArray(calculatedEvents[dateStr])) {
-					calculatedEvents[dateStr] = [];
-				}
-
-				if (!dojo.lang.inArray(calculatedEvents[dateStr], this.recurring[x])) { 
-					calculatedEvents[dateStr].push(this.recurring[x]);
-				} 
+	}
+}, preComputeRecurringEvents:function (until) {
+	var calculatedEvents = function () {
+	};
+	for (var x = 0; x < this.recurring.length; x++) {
+		var dates = this.recurring[x].getDates(until);
+		for (var y = 0; y < dates.length; y++) {
+			var month = dates[y].getMonth() + 1;
+			var dateStr = month + "-" + dates[y].getDate() + "-" + dates[y].getFullYear();
+			if (!dojo.lang.isArray(calculatedEvents[dateStr])) {
+				calculatedEvents[dateStr] = [];
 			}
+			if (!dojo.lang.inArray(calculatedEvents[dateStr], this.recurring[x])) {
+				calculatedEvents[dateStr].push(this.recurring[x]);
+			}
 		}
-		this.recurringEvents = calculatedEvents;
-	
-	},
-
-	getEvents: function(/* Date */ date) {
-		// summary
-		// Gets all events occuring on a particular date
-		var events = [];
-		var recur = [];
-		var nonRecur = [];
-		var month = date.getMonth() + 1;
-		var dateStr= month + "-" + date.getDate() + "-" + date.getFullYear();
-		if (dojo.lang.isArray(this.nonRecurringEvents[dateStr])) {
-			nonRecur= this.nonRecurringEvents[dateStr];
-			dojo.debug("Number of nonRecurring Events: " + nonRecur.length);
-		} 
-		
-
-		if (dojo.lang.isArray(this.recurringEvents[dateStr])) {
-			recur= this.recurringEvents[dateStr];
-		} 
-
-		events = recur.concat(nonRecur);
-
-		if (events.length > 0) {
-			return events;
-		} 
-
-		return null;			
 	}
-});
-
-/*
- * STANDARD
- */
-
-var StandardProperties = [
-	_P("dtstart", 1, true), _P("tzoffsetto", 1, true), _P("tzoffsetfrom", 1, true),
-	_P("comment"), _P("rdate"), _P("rrule"), _P("tzname")
-];
-
-
-dojo.cal.iCalendar.Standard = function (/* string */ body) {
-	// summary
-	// STANDARD Component
-
+	this.recurringEvents = calculatedEvents;
+}, getEvents:function (date) {
+	var events = [];
+	var recur = [];
+	var nonRecur = [];
+	var month = date.getMonth() + 1;
+	var dateStr = month + "-" + date.getDate() + "-" + date.getFullYear();
+	if (dojo.lang.isArray(this.nonRecurringEvents[dateStr])) {
+		nonRecur = this.nonRecurringEvents[dateStr];
+		dojo.debug("Number of nonRecurring Events: " + nonRecur.length);
+	}
+	if (dojo.lang.isArray(this.recurringEvents[dateStr])) {
+		recur = this.recurringEvents[dateStr];
+	}
+	events = recur.concat(nonRecur);
+	if (events.length > 0) {
+		return events;
+	}
+	return null;
+}});
+var StandardProperties = [_P("dtstart", 1, true), _P("tzoffsetto", 1, true), _P("tzoffsetfrom", 1, true), _P("comment"), _P("rdate"), _P("rrule"), _P("tzname")];
+dojo.cal.iCalendar.Standard = function (body) {
 	this.name = "STANDARD";
 	this._ValidProperties = StandardProperties;
 	dojo.cal.iCalendar.Component.call(this, body);
-}
-
+};
 dojo.inherits(dojo.cal.iCalendar.Standard, dojo.cal.iCalendar.Component);
-
-/*
- * DAYLIGHT
- */
-
-var DaylightProperties = [
-	_P("dtstart", 1, true), _P("tzoffsetto", 1, true), _P("tzoffsetfrom", 1, true),
-	_P("comment"), _P("rdate"), _P("rrule"), _P("tzname")
-];
-
-dojo.cal.iCalendar.Daylight = function (/* string */ body) {
-	// summary
-	// Daylight Component
+var DaylightProperties = [_P("dtstart", 1, true), _P("tzoffsetto", 1, true), _P("tzoffsetfrom", 1, true), _P("comment"), _P("rdate"), _P("rrule"), _P("tzname")];
+dojo.cal.iCalendar.Daylight = function (body) {
 	this.name = "DAYLIGHT";
 	this._ValidProperties = DaylightProperties;
 	dojo.cal.iCalendar.Component.call(this, body);
-}
-
+};
 dojo.inherits(dojo.cal.iCalendar.Daylight, dojo.cal.iCalendar.Component);
-
-/*
- * VEVENT
- */
-
-var VEventProperties = [
-	// these can occur once only
-	_P("class", 1), _P("created", 1), _P("description", 1), _P("dtstart", 1),
-	_P("geo", 1), _P("last-mod", 1), _P("location", 1), _P("organizer", 1),
-	_P("priority", 1), _P("dtstamp", 1), _P("seq", 1), _P("status", 1),
-	_P("summary", 1), _P("transp", 1), _P("uid", 1), _P("url", 1), _P("recurid", 1),
-	// these two are exclusive
-	[_P("dtend", 1), _P("duration", 1)],
-	// these can occur many times over
-	_P("attach"), _P("attendee"), _P("categories"), _P("comment"), _P("contact"),
-	_P("exdate"), _P("exrule"), _P("rstatus"), _P("related"), _P("resources"),
-	_P("rdate"), _P("rrule")
-];
-
-dojo.cal.iCalendar.VEvent = function (/* string */ body) {
-	// summary 
-	// VEVENT Component
+var VEventProperties = [_P("class", 1), _P("created", 1), _P("description", 1), _P("dtstart", 1), _P("geo", 1), _P("last-mod", 1), _P("location", 1), _P("organizer", 1), _P("priority", 1), _P("dtstamp", 1), _P("seq", 1), _P("status", 1), _P("summary", 1), _P("transp", 1), _P("uid", 1), _P("url", 1), _P("recurid", 1), [_P("dtend", 1), _P("duration", 1)], _P("attach"), _P("attendee"), _P("categories"), _P("comment"), _P("contact"), _P("exdate"), _P("exrule"), _P("rstatus"), _P("related"), _P("resources"), _P("rdate"), _P("rrule")];
+dojo.cal.iCalendar.VEvent = function (body) {
 	this._ValidProperties = VEventProperties;
 	this.name = "VEVENT";
 	dojo.cal.iCalendar.Component.call(this, body);
 	this.recurring = false;
 	this.startDate = dojo.date.fromIso8601(this.dtstart.value);
-}
-
+};
 dojo.inherits(dojo.cal.iCalendar.VEvent, dojo.cal.iCalendar.Component);
-
-dojo.extend(dojo.cal.iCalendar.VEvent, {
-		getDates: function(until) {
-			var dtstart = this.getDate();
-
-			var recurranceSet = [];
-			var weekdays=["su","mo","tu","we","th","fr","sa"];
-			var order = { 
-				"daily": 1, "weekly": 2, "monthly": 3, "yearly": 4,
-				"byday": 1, "bymonthday": 1, "byweekno": 2, "bymonth": 3, "byyearday": 4};
-
-			// expand rrules into the recurrance 
-			for (var x=0; x<this.rrule.length; x++) {
-				var rrule = this.rrule[x];
-				var freq = rrule.freq.toLowerCase();
-				var interval = 1;
-
-				if (rrule.interval > interval) {
-					interval = rrule.interval;
+dojo.extend(dojo.cal.iCalendar.VEvent, {getDates:function (until) {
+	var dtstart = this.getDate();
+	var recurranceSet = [];
+	var weekdays = ["su", "mo", "tu", "we", "th", "fr", "sa"];
+	var order = {"daily":1, "weekly":2, "monthly":3, "yearly":4, "byday":1, "bymonthday":1, "byweekno":2, "bymonth":3, "byyearday":4};
+	for (var x = 0; x < this.rrule.length; x++) {
+		var rrule = this.rrule[x];
+		var freq = rrule.freq.toLowerCase();
+		var interval = 1;
+		if (rrule.interval > interval) {
+			interval = rrule.interval;
+		}
+		var set = [];
+		var freqInt = order[freq];
+		if (rrule.until) {
+			var tmpUntil = dojo.date.fromIso8601(rrule.until);
+		} else {
+			var tmpUntil = until;
+		}
+		if (tmpUntil > until) {
+			tmpUntil = until;
+		}
+		if (dtstart < tmpUntil) {
+			var expandingRules = function () {
+			};
+			var cullingRules = function () {
+			};
+			expandingRules.length = 0;
+			cullingRules.length = 0;
+			switch (freq) {
+			  case "yearly":
+				var nextDate = new Date(dtstart);
+				set.push(nextDate);
+				while (nextDate < tmpUntil) {
+					nextDate.setYear(nextDate.getFullYear() + interval);
+					tmpDate = new Date(nextDate);
+					if (tmpDate < tmpUntil) {
+						set.push(tmpDate);
+					}
 				}
-
-				var set = [];
-				var freqInt = order[freq];
-
-				if (rrule.until) {
-					var tmpUntil = dojo.date.fromIso8601(rrule.until);
-				} else {
-					var tmpUntil = until
+				break;
+			  case "monthly":
+				nextDate = new Date(dtstart);
+				set.push(nextDate);
+				while (nextDate < tmpUntil) {
+					nextDate.setMonth(nextDate.getMonth() + interval);
+					var tmpDate = new Date(nextDate);
+					if (tmpDate < tmpUntil) {
+						set.push(tmpDate);
+					}
 				}
-
-				if (tmpUntil > until) {
-					tmpUntil = until
+				break;
+			  case "weekly":
+				nextDate = new Date(dtstart);
+				set.push(nextDate);
+				while (nextDate < tmpUntil) {
+					nextDate.setDate(nextDate.getDate() + (7 * interval));
+					var tmpDate = new Date(nextDate);
+					if (tmpDate < tmpUntil) {
+						set.push(tmpDate);
+					}
 				}
-
-
-				if (dtstart<tmpUntil) {
-
-					var expandingRules = function(){};
-					var cullingRules = function(){};
-					expandingRules.length=0;
-					cullingRules.length =0;
-
-					switch(freq) {
-						case "yearly":
-							var nextDate = new Date(dtstart);
-							set.push(nextDate);
-							while(nextDate < tmpUntil) {
-								nextDate.setYear(nextDate.getFullYear()+interval);
-								tmpDate = new Date(nextDate);
-								if(tmpDate < tmpUntil) {
-									set.push(tmpDate);
+				break;
+			  case "daily":
+				nextDate = new Date(dtstart);
+				set.push(nextDate);
+				while (nextDate < tmpUntil) {
+					nextDate.setDate(nextDate.getDate() + interval);
+					var tmpDate = new Date(nextDate);
+					if (tmpDate < tmpUntil) {
+						set.push(tmpDate);
+					}
+				}
+				break;
+			}
+			if ((rrule["bymonth"]) && (order["bymonth"] < freqInt)) {
+				for (var z = 0; z < rrule["bymonth"].length; z++) {
+					if (z == 0) {
+						for (var zz = 0; zz < set.length; zz++) {
+							set[zz].setMonth(rrule["bymonth"][z] - 1);
+						}
+					} else {
+						var subset = [];
+						for (var zz = 0; zz < set.length; zz++) {
+							var newDate = new Date(set[zz]);
+							newDate.setMonth(rrule[z]);
+							subset.push(newDate);
+						}
+						tmp = set.concat(subset);
+						set = tmp;
+					}
+				}
+			}
+			if (rrule["byweekno"] && !rrule["bymonth"]) {
+				dojo.debug("TODO: no support for byweekno yet");
+			}
+			if (rrule["byyearday"] && !rrule["bymonth"] && !rrule["byweekno"]) {
+				if (rrule["byyearday"].length > 1) {
+					var regex = "([+-]?)([0-9]{1,3})";
+					for (var z = 1; x < rrule["byyearday"].length; z++) {
+						var regexResult = rrule["byyearday"][z].match(regex);
+						if (z == 1) {
+							for (var zz = 0; zz < set.length; zz++) {
+								if (regexResult[1] == "-") {
+									dojo.date.setDayOfYear(set[zz], 366 - regexResult[2]);
+								} else {
+									dojo.date.setDayOfYear(set[zz], regexResult[2]);
 								}
 							}
-							break;
-						case "monthly":
-							nextDate = new Date(dtstart);
-							set.push(nextDate);
-							while(nextDate < tmpUntil) {
-								nextDate.setMonth(nextDate.getMonth()+interval);
-								var tmpDate = new Date(nextDate);
-								if (tmpDate < tmpUntil) {
-									set.push(tmpDate);
+						} else {
+							var subset = [];
+							for (var zz = 0; zz < set.length; zz++) {
+								var newDate = new Date(set[zz]);
+								if (regexResult[1] == "-") {
+									dojo.date.setDayOfYear(newDate, 366 - regexResult[2]);
+								} else {
+									dojo.date.setDayOfYear(newDate, regexResult[2]);
 								}
+								subset.push(newDate);
 							}
-							break;
-						case "weekly":
-							nextDate = new Date(dtstart);
-							set.push(nextDate);
-							while(nextDate < tmpUntil) {
-								nextDate.setDate(nextDate.getDate()+(7*interval));
-								var tmpDate = new Date(nextDate);
-								if (tmpDate < tmpUntil) {
-									set.push(tmpDate);
-								}
-							}
-							break;	
-						case "daily":
-							nextDate = new Date(dtstart);
-							set.push(nextDate);
-							while(nextDate < tmpUntil) {
-								nextDate.setDate(nextDate.getDate()+interval);
-								var tmpDate = new Date(nextDate);
-								if (tmpDate < tmpUntil) {
-									set.push(tmpDate);
-								}
-							}
-							break;
-	
-					}
-
-					if ((rrule["bymonth"]) && (order["bymonth"]<freqInt))	{
-						for (var z=0; z<rrule["bymonth"].length; z++) {
-							if (z==0) {
-								for (var zz=0; zz < set.length; zz++) {
-									set[zz].setMonth(rrule["bymonth"][z]-1);
-								}
-							} else {
-								var subset=[];
-								for (var zz=0; zz < set.length; zz++) {
-									var newDate = new Date(set[zz]);
-									newDate.setMonth(rrule[z]);
-									subset.push(newDate);
-								}
-								tmp = set.concat(subset);
-								set = tmp;
-							}
+							tmp = set.concat(subset);
+							set = tmp;
 						}
 					}
-
-					
-					// while the spec doesn't prohibit it, it makes no sense to have a bymonth and a byweekno at the same time
-					// and if i'm wrong then i don't know how to apply that rule.  This is also documented elsewhere on the web
-					if (rrule["byweekno"] && !rrule["bymonth"]) {	
-						dojo.debug("TODO: no support for byweekno yet");
-					}
-
-
-					// while the spec doesn't prohibit it, it makes no sense to have a bymonth and a byweekno at the same time
-					// and if i'm wrong then i don't know how to apply that rule.  This is also documented elsewhere on the web
-					if (rrule["byyearday"] && !rrule["bymonth"] && !rrule["byweekno"] ) {	
-						if (rrule["byyearday"].length > 1) {
-							var regex = "([+-]?)([0-9]{1,3})";
-							for (var z=1; x<rrule["byyearday"].length; z++) {
-								var regexResult = rrule["byyearday"][z].match(regex);
-								if (z==1) {
-									for (var zz=0; zz < set.length; zz++) {
-										if (regexResult[1] == "-") {
-											dojo.date.setDayOfYear(set[zz],366-regexResult[2]);
-										} else {
-											dojo.date.setDayOfYear(set[zz],regexResult[2]);
-										}
+				}
+			}
+			if (rrule["bymonthday"] && (order["bymonthday"] < freqInt)) {
+				if (rrule["bymonthday"].length > 0) {
+					var regex = "([+-]?)([0-9]{1,3})";
+					for (var z = 0; z < rrule["bymonthday"].length; z++) {
+						var regexResult = rrule["bymonthday"][z].match(regex);
+						if (z == 0) {
+							for (var zz = 0; zz < set.length; zz++) {
+								if (regexResult[1] == "-") {
+									if (regexResult[2] < dojo.date.getDaysInMonth(set[zz])) {
+										set[zz].setDate(dojo.date.getDaysInMonth(set[zz]) - regexResult[2]);
 									}
-								}	else {
-									var subset=[];
-									for (var zz=0; zz < set.length; zz++) {
-										var newDate = new Date(set[zz]);
-										if (regexResult[1] == "-") {
-											dojo.date.setDayOfYear(newDate,366-regexResult[2]);
-										} else {
-											dojo.date.setDayOfYear(newDate,regexResult[2]);
-										}
-										subset.push(newDate);
+								} else {
+									if (regexResult[2] < dojo.date.getDaysInMonth(set[zz])) {
+										set[zz].setDate(regexResult[2]);
 									}
-									tmp = set.concat(subset);
-									set = tmp;
 								}
 							}
-						}
-					}
-
-					if (rrule["bymonthday"]  && (order["bymonthday"]<freqInt)) {	
-						if (rrule["bymonthday"].length > 0) {
-							var regex = "([+-]?)([0-9]{1,3})";
-							for (var z=0; z<rrule["bymonthday"].length; z++) {
-								var regexResult = rrule["bymonthday"][z].match(regex);
-								if (z==0) {
-									for (var zz=0; zz < set.length; zz++) {
-										if (regexResult[1] == "-") {
-											if (regexResult[2] < dojo.date.getDaysInMonth(set[zz])) {
-												set[zz].setDate(dojo.date.getDaysInMonth(set[zz]) - regexResult[2]);
-											}
-										} else {
-											if (regexResult[2] < dojo.date.getDaysInMonth(set[zz])) {
-												set[zz].setDate(regexResult[2]);
-											}
-										}
+						} else {
+							var subset = [];
+							for (var zz = 0; zz < set.length; zz++) {
+								var newDate = new Date(set[zz]);
+								if (regexResult[1] == "-") {
+									if (regexResult[2] < dojo.date.getDaysInMonth(set[zz])) {
+										newDate.setDate(dojo.date.getDaysInMonth(set[zz]) - regexResult[2]);
 									}
-								}	else {
-									var subset=[];
-									for (var zz=0; zz < set.length; zz++) {
-										var newDate = new Date(set[zz]);
-										if (regexResult[1] == "-") {
-											if (regexResult[2] < dojo.date.getDaysInMonth(set[zz])) {
-												newDate.setDate(dojo.date.getDaysInMonth(set[zz]) - regexResult[2]);
-											}
-										} else {
-											if (regexResult[2] < dojo.date.getDaysInMonth(set[zz])) {
-												newDate.setDate(regexResult[2]);
-											}
-										}
-										subset.push(newDate);
+								} else {
+									if (regexResult[2] < dojo.date.getDaysInMonth(set[zz])) {
+										newDate.setDate(regexResult[2]);
 									}
-									tmp = set.concat(subset);
-									set = tmp;
 								}
+								subset.push(newDate);
 							}
+							tmp = set.concat(subset);
+							set = tmp;
 						}
 					}
-
-					if (rrule["byday"]  && (order["byday"]<freqInt)) {	
-						if (rrule["bymonth"]) {
-							if (rrule["byday"].length > 0) {
-								var regex = "([+-]?)([0-9]{0,1}?)([A-Za-z]{1,2})";
-								for (var z=0; z<rrule["byday"].length; z++) {
-									var regexResult = rrule["byday"][z].match(regex);
-									var occurance = regexResult[2];
-									var day = regexResult[3].toLowerCase();
-
-
-									if (z==0) {
-										for (var zz=0; zz < set.length; zz++) {
-											if (regexResult[1] == "-") {
-												//find the nth to last occurance of date 
-												var numDaysFound = 0;
-												var lastDayOfMonth = dojo.date.getDaysInMonth(set[zz]);
-												var daysToSubtract = 1;
-												set[zz].setDate(lastDayOfMonth); 
+				}
+			}
+			if (rrule["byday"] && (order["byday"] < freqInt)) {
+				if (rrule["bymonth"]) {
+					if (rrule["byday"].length > 0) {
+						var regex = "([+-]?)([0-9]{0,1}?)([A-Za-z]{1,2})";
+						for (var z = 0; z < rrule["byday"].length; z++) {
+							var regexResult = rrule["byday"][z].match(regex);
+							var occurance = regexResult[2];
+							var day = regexResult[3].toLowerCase();
+							if (z == 0) {
+								for (var zz = 0; zz < set.length; zz++) {
+									if (regexResult[1] == "-") {
+										var numDaysFound = 0;
+										var lastDayOfMonth = dojo.date.getDaysInMonth(set[zz]);
+										var daysToSubtract = 1;
+										set[zz].setDate(lastDayOfMonth);
+										if (weekdays[set[zz].getDay()] == day) {
+											numDaysFound++;
+											daysToSubtract = 7;
+										}
+										daysToSubtract = 1;
+										while (numDaysFound < occurance) {
+											set[zz].setDate(set[zz].getDate() - daysToSubtract);
+											if (weekdays[set[zz].getDay()] == day) {
+												numDaysFound++;
+												daysToSubtract = 7;
+											}
+										}
+									} else {
+										if (occurance) {
+											var numDaysFound = 0;
+											set[zz].setDate(1);
+											var daysToAdd = 1;
+											if (weekdays[set[zz].getDay()] == day) {
+												numDaysFound++;
+												daysToAdd = 7;
+											}
+											while (numDaysFound < occurance) {
+												set[zz].setDate(set[zz].getDate() + daysToAdd);
 												if (weekdays[set[zz].getDay()] == day) {
 													numDaysFound++;
-													daysToSubtract=7;
+													daysToAdd = 7;
 												}
-												daysToSubtract = 1;
-												while (numDaysFound < occurance) {
-													set[zz].setDate(set[zz].getDate()-daysToSubtract);	
-													if (weekdays[set[zz].getDay()] == day) {
-														numDaysFound++;
-														daysToSubtract=7;	
+											}
+										} else {
+											var numDaysFound = 0;
+											var subset = [];
+											lastDayOfMonth = new Date(set[zz]);
+											var daysInMonth = dojo.date.getDaysInMonth(set[zz]);
+											lastDayOfMonth.setDate(daysInMonth);
+											set[zz].setDate(1);
+											if (weekdays[set[zz].getDay()] == day) {
+												numDaysFound++;
+											}
+											var tmpDate = new Date(set[zz]);
+											daysToAdd = 1;
+											while (tmpDate.getDate() < lastDayOfMonth) {
+												if (weekdays[tmpDate.getDay()] == day) {
+													numDaysFound++;
+													if (numDaysFound == 1) {
+														set[zz] = tmpDate;
+													} else {
+														subset.push(tmpDate);
+														tmpDate = new Date(tmpDate);
+														daysToAdd = 7;
+														tmpDate.setDate(tmpDate.getDate() + daysToAdd);
 													}
-												}
-											} else {
-												if (occurance) {
-													var numDaysFound=0;
-													set[zz].setDate(1);
-													var daysToAdd=1;
-
-													if(weekdays[set[zz].getDay()] == day) {
-														numDaysFound++;
-														daysToAdd=7;
-													}
-
-													while(numDaysFound < occurance) {
-														set[zz].setDate(set[zz].getDate()+daysToAdd);
-														if(weekdays[set[zz].getDay()] == day) {
-															numDaysFound++;
-															daysToAdd=7;
-														}
-													}
 												} else {
-													//we're gonna expand here to add a date for each of the specified days for each month
-													var numDaysFound=0;
-													var subset = [];
-
-													lastDayOfMonth = new Date(set[zz]);
-													var daysInMonth = dojo.date.getDaysInMonth(set[zz]);
-													lastDayOfMonth.setDate(daysInMonth);
-
-													set[zz].setDate(1);
-												
-													if (weekdays[set[zz].getDay()] == day) {
-														numDaysFound++;
-													}
-													var tmpDate = new Date(set[zz]);
-													daysToAdd = 1;
-													while(tmpDate.getDate() < lastDayOfMonth) {
-														if (weekdays[tmpDate.getDay()] == day) {
-															numDaysFound++;
-															if (numDaysFound==1) {
-																set[zz] = tmpDate;
-															} else {
-																subset.push(tmpDate);
-																tmpDate = new Date(tmpDate);
-																daysToAdd=7;	
-																tmpDate.setDate(tmpDate.getDate() + daysToAdd);
-															}
-														} else {
-															tmpDate.setDate(tmpDate.getDate() + daysToAdd);
-														}
-													}
-													var t = set.concat(subset);
-													set = t; 
+													tmpDate.setDate(tmpDate.getDate() + daysToAdd);
 												}
 											}
+											var t = set.concat(subset);
+											set = t;
 										}
-									}	else {
-										var subset=[];
-										for (var zz=0; zz < set.length; zz++) {
-											var newDate = new Date(set[zz]);
-											if (regexResult[1] == "-") {
-												if (regexResult[2] < dojo.date.getDaysInMonth(set[zz])) {
-													newDate.setDate(dojo.date.getDaysInMonth(set[zz]) - regexResult[2]);
-												}
-											} else {
-												if (regexResult[2] < dojo.date.getDaysInMonth(set[zz])) {
-													newDate.setDate(regexResult[2]);
-												}
-											}
-											subset.push(newDate);
+									}
+								}
+							} else {
+								var subset = [];
+								for (var zz = 0; zz < set.length; zz++) {
+									var newDate = new Date(set[zz]);
+									if (regexResult[1] == "-") {
+										if (regexResult[2] < dojo.date.getDaysInMonth(set[zz])) {
+											newDate.setDate(dojo.date.getDaysInMonth(set[zz]) - regexResult[2]);
 										}
-										tmp = set.concat(subset);
-										set = tmp;
+									} else {
+										if (regexResult[2] < dojo.date.getDaysInMonth(set[zz])) {
+											newDate.setDate(regexResult[2]);
+										}
 									}
+									subset.push(newDate);
 								}
+								tmp = set.concat(subset);
+								set = tmp;
 							}
-						} else {
-							dojo.debug("TODO: byday within a yearly rule without a bymonth");
 						}
 					}
-
-					dojo.debug("TODO: Process BYrules for units larger than frequency");
-			
-					//add this set of events to the complete recurranceSet	
-					var tmp = recurranceSet.concat(set);
-					recurranceSet = tmp;
+				} else {
+					dojo.debug("TODO: byday within a yearly rule without a bymonth");
 				}
 			}
-
-			// TODO: add rdates to the recurrance set here
-
-			// TODO: subtract exdates from the recurrance set here
-
-			//TODO:  subtract dates generated by exrules from recurranceSet here
-
-			recurranceSet.push(dtstart);
-			return recurranceSet;
-		},
-
-		getDate: function() {
-			return dojo.date.fromIso8601(this.dtstart.value);
+			dojo.debug("TODO: Process BYrules for units larger than frequency");
+			var tmp = recurranceSet.concat(set);
+			recurranceSet = tmp;
 		}
-});
-
-/*
- * VTIMEZONE
- */
-
-var VTimeZoneProperties = [
-	_P("tzid", 1, true), _P("last-mod", 1), _P("tzurl", 1)
-
-	// one of 'standardc' or 'daylightc' must occur
-	// and each may occur more than once.
-];
-
-dojo.cal.iCalendar.VTimeZone = function (/* string */ body) {
-	// summary
-	// VTIMEZONE Component
+	}
+	recurranceSet.push(dtstart);
+	return recurranceSet;
+}, getDate:function () {
+	return dojo.date.fromIso8601(this.dtstart.value);
+}});
+var VTimeZoneProperties = [_P("tzid", 1, true), _P("last-mod", 1), _P("tzurl", 1)];
+dojo.cal.iCalendar.VTimeZone = function (body) {
 	this.name = "VTIMEZONE";
 	this._ValidProperties = VTimeZoneProperties;
 	dojo.cal.iCalendar.Component.call(this, body);
-}
-
+};
 dojo.inherits(dojo.cal.iCalendar.VTimeZone, dojo.cal.iCalendar.Component);
-
-/*
- * VTODO
- */
-
-var VTodoProperties = [
-	// these can occur once only
-	_P("class", 1), _P("completed", 1), _P("created", 1), _P("description", 1),
-	_P("dtstart", 1), _P("geo", 1), _P("last-mod", 1), _P("location", 1),
-	_P("organizer", 1), _P("percent", 1), _P("priority", 1), _P("dtstamp", 1),
-	_P("seq", 1), _P("status", 1), _P("summary", 1), _P("uid", 1), _P("url", 1),
-	_P("recurid", 1),
-	// these two are exclusive
-	[_P("due", 1), _P("duration", 1)],
-	// these can occur many times over
-	_P("attach"), _P("attendee"), _P("categories"), _P("comment"), _P("contact"),
-	_P("exdate"), _P("exrule"), _P("rstatus"), _P("related"), _P("resources"),
-	_P("rdate"), _P("rrule")
-];
-
-dojo.cal.iCalendar.VTodo= function (/* string */ body) {
-	// summary
-	// VTODO Componenet
+var VTodoProperties = [_P("class", 1), _P("completed", 1), _P("created", 1), _P("description", 1), _P("dtstart", 1), _P("geo", 1), _P("last-mod", 1), _P("location", 1), _P("organizer", 1), _P("percent", 1), _P("priority", 1), _P("dtstamp", 1), _P("seq", 1), _P("status", 1), _P("summary", 1), _P("uid", 1), _P("url", 1), _P("recurid", 1), [_P("due", 1), _P("duration", 1)], _P("attach"), _P("attendee"), _P("categories"), _P("comment"), _P("contact"), _P("exdate"), _P("exrule"), _P("rstatus"), _P("related"), _P("resources"), _P("rdate"), _P("rrule")];
+dojo.cal.iCalendar.VTodo = function (body) {
 	this.name = "VTODO";
 	this._ValidProperties = VTodoProperties;
 	dojo.cal.iCalendar.Component.call(this, body);
-}
-
+};
 dojo.inherits(dojo.cal.iCalendar.VTodo, dojo.cal.iCalendar.Component);
-
-/*
- * VJOURNAL
- */
-
-var VJournalProperties = [
-	// these can occur once only
-	_P("class", 1), _P("created", 1), _P("description", 1), _P("dtstart", 1),
-	_P("last-mod", 1), _P("organizer", 1), _P("dtstamp", 1), _P("seq", 1),
-	_P("status", 1), _P("summary", 1), _P("uid", 1), _P("url", 1), _P("recurid", 1),
-	// these can occur many times over
-	_P("attach"), _P("attendee"), _P("categories"), _P("comment"), _P("contact"),
-	_P("exdate"), _P("exrule"), _P("related"), _P("rstatus"), _P("rdate"), _P("rrule")
-];
-
-dojo.cal.iCalendar.VJournal= function (/* string */ body) {
-	// summary
-	// VJOURNAL Component
+var VJournalProperties = [_P("class", 1), _P("created", 1), _P("description", 1), _P("dtstart", 1), _P("last-mod", 1), _P("organizer", 1), _P("dtstamp", 1), _P("seq", 1), _P("status", 1), _P("summary", 1), _P("uid", 1), _P("url", 1), _P("recurid", 1), _P("attach"), _P("attendee"), _P("categories"), _P("comment"), _P("contact"), _P("exdate"), _P("exrule"), _P("related"), _P("rstatus"), _P("rdate"), _P("rrule")];
+dojo.cal.iCalendar.VJournal = function (body) {
 	this.name = "VJOURNAL";
 	this._ValidProperties = VJournalProperties;
 	dojo.cal.iCalendar.Component.call(this, body);
-}
-
+};
 dojo.inherits(dojo.cal.iCalendar.VJournal, dojo.cal.iCalendar.Component);
-
-/*
- * VFREEBUSY
- */
-
-var VFreeBusyProperties = [
-	// these can occur once only
-	_P("contact"), _P("dtstart", 1), _P("dtend"), _P("duration"),
-	_P("organizer", 1), _P("dtstamp", 1), _P("uid", 1), _P("url", 1),
-	// these can occur many times over
-	_P("attendee"), _P("comment"), _P("freebusy"), _P("rstatus")
-];
-
-dojo.cal.iCalendar.VFreeBusy= function (/* string */ body) {
-	// summary
-	// VFREEBUSY Component
+var VFreeBusyProperties = [_P("contact"), _P("dtstart", 1), _P("dtend"), _P("duration"), _P("organizer", 1), _P("dtstamp", 1), _P("uid", 1), _P("url", 1), _P("attendee"), _P("comment"), _P("freebusy"), _P("rstatus")];
+dojo.cal.iCalendar.VFreeBusy = function (body) {
 	this.name = "VFREEBUSY";
 	this._ValidProperties = VFreeBusyProperties;
 	dojo.cal.iCalendar.Component.call(this, body);
-}
-
+};
 dojo.inherits(dojo.cal.iCalendar.VFreeBusy, dojo.cal.iCalendar.Component);
-
-/*
- * VALARM
- */
-
-var VAlarmProperties = [
-	[_P("action", 1, true), _P("trigger", 1, true), [_P("duration", 1), _P("repeat", 1)],
-	_P("attach", 1)],
-
-	[_P("action", 1, true), _P("description", 1, true), _P("trigger", 1, true),
-	[_P("duration", 1), _P("repeat", 1)]],
-
-	[_P("action", 1, true), _P("description", 1, true), _P("trigger", 1, true),
-	_P("summary", 1, true), _P("attendee", "*", true),
-	[_P("duration", 1), _P("repeat", 1)],
-	_P("attach", 1)],
-
-	[_P("action", 1, true), _P("attach", 1, true), _P("trigger", 1, true),
-	[_P("duration", 1), _P("repeat", 1)],
-	_P("description", 1)]
-];
-
-dojo.cal.iCalendar.VAlarm= function (/* string */ body) {
-	// summary
-	// VALARM Component
+var VAlarmProperties = [[_P("action", 1, true), _P("trigger", 1, true), [_P("duration", 1), _P("repeat", 1)], _P("attach", 1)], [_P("action", 1, true), _P("description", 1, true), _P("trigger", 1, true), [_P("duration", 1), _P("repeat", 1)]], [_P("action", 1, true), _P("description", 1, true), _P("trigger", 1, true), _P("summary", 1, true), _P("attendee", "*", true), [_P("duration", 1), _P("repeat", 1)], _P("attach", 1)], [_P("action", 1, true), _P("attach", 1, true), _P("trigger", 1, true), [_P("duration", 1), _P("repeat", 1)], _P("description", 1)]];
+dojo.cal.iCalendar.VAlarm = function (body) {
 	this.name = "VALARM";
 	this._ValidProperties = VAlarmProperties;
 	dojo.cal.iCalendar.Component.call(this, body);
-}
-
+};
 dojo.inherits(dojo.cal.iCalendar.VAlarm, dojo.cal.iCalendar.Component);
 
 
@@ -67987,492 +45944,310 @@
 */
 
 dojo.provide("dojo.date.common");
-
-
-/* Supplementary Date Functions
- *******************************/
-
-dojo.date.setDayOfYear = function(/*Date*/dateObject, /*Number*/dayOfYear){
-	// summary: sets dateObject according to day of the year (1..366)
+dojo.date.setDayOfYear = function (dateObject, dayOfYear) {
 	dateObject.setMonth(0);
 	dateObject.setDate(dayOfYear);
-	return dateObject; // Date
-}
-
-dojo.date.getDayOfYear = function(/*Date*/dateObject){
-	// summary: gets the day of the year as represented by dateObject
+	return dateObject;
+};
+dojo.date.getDayOfYear = function (dateObject) {
 	var fullYear = dateObject.getFullYear();
-	var lastDayOfPrevYear = new Date(fullYear-1, 11, 31);
-	return Math.floor((dateObject.getTime() -
-		lastDayOfPrevYear.getTime()) / 86400000); // Number
-}
-
-
-dojo.date.setWeekOfYear = function(/*Date*/dateObject, /*Number*/week, /*Number*/firstDay){
-	if(arguments.length == 1){ firstDay = 0; } // Sunday
+	var lastDayOfPrevYear = new Date(fullYear - 1, 11, 31);
+	return Math.floor((dateObject.getTime() - lastDayOfPrevYear.getTime()) / 86400000);
+};
+dojo.date.setWeekOfYear = function (dateObject, week, firstDay) {
+	if (arguments.length == 1) {
+		firstDay = 0;
+	}
 	dojo.unimplemented("dojo.date.setWeekOfYear");
-}
-
-dojo.date.getWeekOfYear = function(/*Date*/dateObject, /*Number*/firstDay){
-	if(arguments.length == 1){ firstDay = 0; } // Sunday
-
-	// work out the first day of the year corresponding to the week
+};
+dojo.date.getWeekOfYear = function (dateObject, firstDay) {
+	if (arguments.length == 1) {
+		firstDay = 0;
+	}
 	var firstDayOfYear = new Date(dateObject.getFullYear(), 0, 1);
 	var day = firstDayOfYear.getDay();
-	firstDayOfYear.setDate(firstDayOfYear.getDate() -
-			day + firstDay - (day > firstDay ? 7 : 0));
-
-	return Math.floor((dateObject.getTime() -
-		firstDayOfYear.getTime()) / 604800000);
-}
-
-dojo.date.setIsoWeekOfYear = function(/*Date*/dateObject, /*Number*/week, /*Number*/firstDay){
-	// summary: unimplemented
-	if (arguments.length == 1) { firstDay = 1; } // Monday
+	firstDayOfYear.setDate(firstDayOfYear.getDate() - day + firstDay - (day > firstDay ? 7 : 0));
+	return Math.floor((dateObject.getTime() - firstDayOfYear.getTime()) / 604800000);
+};
+dojo.date.setIsoWeekOfYear = function (dateObject, week, firstDay) {
+	if (arguments.length == 1) {
+		firstDay = 1;
+	}
 	dojo.unimplemented("dojo.date.setIsoWeekOfYear");
-}
-
-dojo.date.getIsoWeekOfYear = function(/*Date*/dateObject, /*Number*/firstDay) {
-	// summary: unimplemented
-	if (arguments.length == 1) { firstDay = 1; } // Monday
+};
+dojo.date.getIsoWeekOfYear = function (dateObject, firstDay) {
+	if (arguments.length == 1) {
+		firstDay = 1;
+	}
 	dojo.unimplemented("dojo.date.getIsoWeekOfYear");
-}
-
-
-/* Informational Functions
- **************************/
-
-//DEPRECATED: These timezone arrays will be deprecated in 0.5
-dojo.date.shortTimezones = ["IDLW", "BET", "HST", "MART", "AKST", "PST", "MST",
-	"CST", "EST", "AST", "NFT", "BST", "FST", "AT", "GMT", "CET", "EET", "MSK",
-	"IRT", "GST", "AFT", "AGTT", "IST", "NPT", "ALMT", "MMT", "JT", "AWST",
-	"JST", "ACST", "AEST", "LHST", "VUT", "NFT", "NZT", "CHAST", "PHOT",
-	"LINT"];
-dojo.date.timezoneOffsets = [-720, -660, -600, -570, -540, -480, -420, -360,
-	-300, -240, -210, -180, -120, -60, 0, 60, 120, 180, 210, 240, 270, 300,
-	330, 345, 360, 390, 420, 480, 540, 570, 600, 630, 660, 690, 720, 765, 780,
-	840];
-/*
-dojo.date.timezones = ["International Date Line West", "Bering Standard Time",
-	"Hawaiian Standard Time", "Marquesas Time", "Alaska Standard Time",
-	"Pacific Standard Time (USA)", "Mountain Standard Time",
-	"Central Standard Time (USA)", "Eastern Standard Time (USA)",
-	"Atlantic Standard Time", "Newfoundland Time", "Brazil Standard Time",
-	"Fernando de Noronha Standard Time (Brazil)", "Azores Time",
-	"Greenwich Mean Time", "Central Europe Time", "Eastern Europe Time",
-	"Moscow Time", "Iran Standard Time", "Gulf Standard Time",
-	"Afghanistan Time", "Aqtobe Time", "Indian Standard Time", "Nepal Time",
-	"Almaty Time", "Myanmar Time", "Java Time",
-	"Australian Western Standard Time", "Japan Standard Time",
-	"Australian Central Standard Time", "Lord Hove Standard Time (Australia)",
-	"Vanuata Time", "Norfolk Time (Australia)", "New Zealand Standard Time",
-	"Chatham Standard Time (New Zealand)", "Phoenix Islands Time (Kribati)",
-	"Line Islands Time (Kribati)"];
-*/
-
-dojo.date.getDaysInMonth = function(/*Date*/dateObject){
-	// summary: returns the number of days in the month used by dateObject
+};
+dojo.date.shortTimezones = ["IDLW", "BET", "HST", "MART", "AKST", "PST", "MST", "CST", "EST", "AST", "NFT", "BST", "FST", "AT", "GMT", "CET", "EET", "MSK", "IRT", "GST", "AFT", "AGTT", "IST", "NPT", "ALMT", "MMT", "JT", "AWST", "JST", "ACST", "AEST", "LHST", "VUT", "NFT", "NZT", "CHAST", "PHOT", "LINT"];
+dojo.date.timezoneOffsets = [-720, -660, -600, -570, -540, -480, -420, -360, -300, -240, -210, -180, -120, -60, 0, 60, 120, 180, 210, 240, 270, 300, 330, 345, 360, 390, 420, 480, 540, 570, 600, 630, 660, 690, 720, 765, 780, 840];
+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; } // Number
-	else { 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.
-
+	if (month == 1 && dojo.date.isLeapYear(dateObject)) {
+		return 29;
+	} else {
+		return days[month];
+	}
+};
+dojo.date.isLeapYear = function (dateObject) {
 	var year = dateObject.getFullYear();
-	return (year%400 == 0) ? true : (year%100 == 0) ? false : (year%4 == 0) ? true : false; // 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
+	return (year % 400 == 0) ? true : (year % 100 == 0) ? false : (year % 4 == 0) ? true : false;
+};
+dojo.date.getTimezoneName = function (dateObject) {
+	var str = dateObject.toString();
+	var tz = "";
 	var match;
-
-	// First look for something in parentheses -- fast lookup, no regex
-	var pos = str.indexOf('(');
+	var pos = str.indexOf("(");
 	if (pos > -1) {
 		pos++;
-		tz = str.substring(pos, str.indexOf(')'));
-	}
-	// If at first you don't succeed ...
-	else{
-		// 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
+		tz = str.substring(pos, str.indexOf(")"));
+	} else {
 		var pat = /([A-Z\/]+) \d{4}$/;
-		if((match = str.match(pat))) {
+		if ((match = str.match(pat))) {
 			tz = match[1];
-		}
-		// Some browsers (e.g. Safari) glue the TZ on the end
-		// of toLocaleString instead of putting it in toString
-		else{
+		} else {
 			str = dateObject.toLocaleString();
-			// Capital letters or slash -- end of string, 
-			// after space
 			pat = / ([A-Z\/]+)$/;
-			if((match = str.match(pat))) {
+			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
-}
-
-
-//FIXME: not localized
-dojo.date.getOrdinal = function(dateObject){
-	// summary: returns the appropriate suffix (English only) for the day of the month, e.g. 'st' for 1, 'nd' for 2, etc.)
+	return tz == "AM" || tz == "PM" ? "" : tz;
+};
+dojo.date.getOrdinal = function (dateObject) {
 	var date = dateObject.getDate();
-
-	if(date%100 != 11 && date%10 == 1){ return "st"; } // String
-	else if(date%100 != 12 && date%10 == 2){ return "nd"; } // String
-	else if(date%100 != 13 && date%10 == 3){ return "rd"; } // String
-	else{ return "th"; } // String
-}
-
-
-/* compare and add
- ******************/
-dojo.date.compareTypes={
-	// 	summary
-	//	bitmask for comparison operations.
-	DATE:1, TIME:2 
+	if (date % 100 != 11 && date % 10 == 1) {
+		return "st";
+	} else {
+		if (date % 100 != 12 && date % 10 == 2) {
+			return "nd";
+		} else {
+			if (date % 100 != 13 && date % 10 == 3) {
+				return "rd";
+			} else {
+				return "th";
+			}
+		}
+	}
 };
-dojo.date.compare=function(/* Date */ dateA, /* Date */ dateB, /* dojo.date.compareTypes */ options){
-	//	summary
-	//	Compare two date objects by date, time, or both.  Returns 0 if equal, positive if a > b, else negative.
-	var dA=dateA;
-	var dB=dateB||new Date();
-	var now=new Date();
-	//FIXME: shorten this code
-	with(dojo.date.compareTypes){
-		var opt=options||(DATE|TIME);
-		var d1=new Date(
-			(opt&DATE)?dA.getFullYear():now.getFullYear(), 
-			(opt&DATE)?dA.getMonth():now.getMonth(),
-			(opt&DATE)?dA.getDate():now.getDate(),
-			(opt&TIME)?dA.getHours():0,
-			(opt&TIME)?dA.getMinutes():0,
-			(opt&TIME)?dA.getSeconds():0
-		);
-		var d2=new Date(
-			(opt&DATE)?dB.getFullYear():now.getFullYear(),
-			(opt&DATE)?dB.getMonth():now.getMonth(),
-			(opt&DATE)?dB.getDate():now.getDate(),
-			(opt&TIME)?dB.getHours():0,
-			(opt&TIME)?dB.getMinutes():0,
-			(opt&TIME)?dB.getSeconds():0
-		);
+dojo.date.compareTypes = {DATE:1, TIME:2};
+dojo.date.compare = function (dateA, dateB, options) {
+	var dA = dateA;
+	var dB = dateB || new Date();
+	var now = new Date();
+	with (dojo.date.compareTypes) {
+		var opt = options || (DATE | TIME);
+		var d1 = new Date((opt & DATE) ? dA.getFullYear() : now.getFullYear(), (opt & DATE) ? dA.getMonth() : now.getMonth(), (opt & DATE) ? dA.getDate() : now.getDate(), (opt & TIME) ? dA.getHours() : 0, (opt & TIME) ? dA.getMinutes() : 0, (opt & TIME) ? dA.getSeconds() : 0);
+		var d2 = new Date((opt & DATE) ? dB.getFullYear() : now.getFullYear(), (opt & DATE) ? dB.getMonth() : now.getMonth(), (opt & DATE) ? dB.getDate() : now.getDate(), (opt & TIME) ? dB.getHours() : 0, (opt & TIME) ? dB.getMinutes() : 0, (opt & TIME) ? dB.getSeconds() : 0);
 	}
-	if(d1.valueOf()>d2.valueOf()){
-		return 1;	//	int
+	if (d1.valueOf() > d2.valueOf()) {
+		return 1;
 	}
-	if(d1.valueOf()<d2.valueOf()){
-		return -1;	//	int
+	if (d1.valueOf() < d2.valueOf()) {
+		return -1;
 	}
-	return 0;	//	int
-}
-
-dojo.date.dateParts={ 
-	//	summary
-	//	constants for use in dojo.date.add
-	YEAR:0, MONTH:1, DAY:2, HOUR:3, MINUTE:4, SECOND:5, MILLISECOND:6, QUARTER:7, WEEK:8, WEEKDAY:9
+	return 0;
 };
-
-dojo.date.add = function(/* Date */ dt, /* dojo.date.dateParts */ interv, /* int */ incr){
-//	summary:
-//		Add to a Date in intervals of different size, from milliseconds to years
-//
-//	dt:
-//		A Javascript Date object to start with
-//
-//	interv:
-//		A constant representing the interval, e.g. YEAR, MONTH, DAY.  See dojo.date.dateParts.
-//
-//	incr:
-//		How much to add to the date
-
-	if(typeof dt == 'number'){dt = new Date(dt);} // Allow timestamps
-//FIXME: what's the reason behind this?	incr = incr || 1;
-
-	function fixOvershoot(){
-		if (sum.getDate() < dt.getDate()){
+dojo.date.dateParts = {YEAR:0, MONTH:1, DAY:2, HOUR:3, MINUTE:4, SECOND:5, MILLISECOND:6, QUARTER:7, WEEK:8, WEEKDAY:9};
+dojo.date.add = function (dt, interv, incr) {
+	if (typeof dt == "number") {
+		dt = new Date(dt);
+	}
+	function fixOvershoot() {
+		if (sum.getDate() < dt.getDate()) {
 			sum.setDate(0);
 		}
 	}
-	
 	var sum = new Date(dt);
-
-	with(dojo.date.dateParts){
-		switch(interv){
-			case YEAR:
-				sum.setFullYear(dt.getFullYear()+incr);
-				// Keep increment/decrement from 2/29 out of March
-				fixOvershoot();
-				break;
-			case QUARTER:
-				// Naive quarter is just three months
-				incr*=3;
-				// fallthrough...
-			case MONTH:
-				sum.setMonth(dt.getMonth()+incr);
-				// Reset to last day of month if you overshoot
-				fixOvershoot();
-				break;
-			case WEEK:
-				incr*=7;
-				// fallthrough...
-			case DAY:
-				sum.setDate(dt.getDate() + incr);
-				break;
-			case WEEKDAY:
-				//FIXME: assumes Saturday/Sunday weekend, but even this is not fixed.  There are CLDR entries to localize this.
-				var dat = dt.getDate();
-				var weeks = 0;
-				var days = 0;
-				var strt = 0;
-				var trgt = 0;
-				var adj = 0;
-				// 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 mod = incr % 5;
-				if (mod == 0) {
-					days = (incr > 0) ? 5 : -5;
-					weeks = (incr > 0) ? ((incr-5)/5) : ((incr+5)/5);
-				}
-				else {
-					days = mod;
-					weeks = parseInt(incr/5);
-				}
-				// Get weekday value for orig date param
-				strt = dt.getDay();
-				// Orig date is Sat / positive incrementer
-				// Jump over Sun
-				if (strt == 6 && incr > 0) {
-					adj = 1;
-				}
-				// Orig date is Sun / negative incrementer
-				// Jump back over Sat
-				else if (strt == 0 && incr < 0) {
+	with (dojo.date.dateParts) {
+		switch (interv) {
+		  case YEAR:
+			sum.setFullYear(dt.getFullYear() + incr);
+			fixOvershoot();
+			break;
+		  case QUARTER:
+			incr *= 3;
+		  case MONTH:
+			sum.setMonth(dt.getMonth() + incr);
+			fixOvershoot();
+			break;
+		  case WEEK:
+			incr *= 7;
+		  case DAY:
+			sum.setDate(dt.getDate() + incr);
+			break;
+		  case WEEKDAY:
+			var dat = dt.getDate();
+			var weeks = 0;
+			var days = 0;
+			var strt = 0;
+			var trgt = 0;
+			var adj = 0;
+			var mod = incr % 5;
+			if (mod == 0) {
+				days = (incr > 0) ? 5 : -5;
+				weeks = (incr > 0) ? ((incr - 5) / 5) : ((incr + 5) / 5);
+			} else {
+				days = mod;
+				weeks = parseInt(incr / 5);
+			}
+			strt = dt.getDay();
+			if (strt == 6 && incr > 0) {
+				adj = 1;
+			} else {
+				if (strt == 0 && incr < 0) {
 					adj = -1;
 				}
-				// Get weekday val for the new date
-				trgt = (strt + days);
-				// New date is on Sat or Sun
-				if (trgt == 0 || trgt == 6) {
-					adj = (incr > 0) ? 2 : -2;
-				}
-				// Increment by number of weeks plus leftover days plus
-				// weekend adjustments
-				sum.setDate(dat + (7*weeks) + days + adj);
-				break;
-			case HOUR:
-				sum.setHours(sum.getHours()+incr);
-				break;
-			case MINUTE:
-				sum.setMinutes(sum.getMinutes()+incr);
-				break;
-			case SECOND:
-				sum.setSeconds(sum.getSeconds()+incr);
-				break;
-			case MILLISECOND:
-				sum.setMilliseconds(sum.getMilliseconds()+incr);
-				break;
-			default:
-				// Do nothing
-				break;
+			}
+			trgt = (strt + days);
+			if (trgt == 0 || trgt == 6) {
+				adj = (incr > 0) ? 2 : -2;
+			}
+			sum.setDate(dat + (7 * weeks) + days + adj);
+			break;
+		  case HOUR:
+			sum.setHours(sum.getHours() + incr);
+			break;
+		  case MINUTE:
+			sum.setMinutes(sum.getMinutes() + incr);
+			break;
+		  case SECOND:
+			sum.setSeconds(sum.getSeconds() + incr);
+			break;
+		  case MILLISECOND:
+			sum.setMilliseconds(sum.getMilliseconds() + incr);
+			break;
+		  default:
+			break;
 		}
 	}
-
-	return sum; // Date
+	return sum;
 };
-
-dojo.date.diff = function(/* Date */ dtA, /* Date */ dtB, /* dojo.date.dateParts */ interv){
-//	summary:
-//		Get the difference in a specific unit of time (e.g., number of months, weeks,
-//		days, etc.) between two dates.
-//
-//	dtA:
-//		A Javascript Date object
-//
-//	dtB:
-//		A Javascript Date object
-//
-//	interv:
-//		A constant representing the interval, e.g. YEAR, MONTH, DAY.  See dojo.date.dateParts.
-
-	// Accept timestamp input
-	if(typeof dtA == 'number'){dtA = new Date(dtA);}
-	if(typeof dtB == 'number'){dtB = new Date(dtB);}
+dojo.date.diff = function (dtA, dtB, interv) {
+	if (typeof dtA == "number") {
+		dtA = new Date(dtA);
+	}
+	if (typeof dtB == "number") {
+		dtB = new Date(dtB);
+	}
 	var yeaDiff = dtB.getFullYear() - dtA.getFullYear();
 	var monDiff = (dtB.getMonth() - dtA.getMonth()) + (yeaDiff * 12);
-	var msDiff = dtB.getTime() - dtA.getTime(); // Millisecs
-	var secDiff = msDiff/1000;
-	var minDiff = secDiff/60;
-	var houDiff = minDiff/60;
-	var dayDiff = houDiff/24;
-	var weeDiff = dayDiff/7;
-	var delta = 0; // Integer return value
-
-	with(dojo.date.dateParts){
-		switch(interv){
-			case YEAR:
-				delta = yeaDiff;
-				break;
-			case QUARTER:
-				var mA = dtA.getMonth();
-				var mB = dtB.getMonth();
-				// Figure out which quarter the months are in
-				var qA = Math.floor(mA/3) + 1;
-				var qB = Math.floor(mB/3) + 1;
-				// Add quarters for any year difference between the dates
-				qB += (yeaDiff * 4);
-				delta = qB - qA;
-				break;
-			case MONTH:
-				delta = monDiff;
-				break;
-			case WEEK:
-				// Truncate instead of rounding
-				// Don't use Math.floor -- value may be negative
-				delta = parseInt(weeDiff);
-				break;
-			case DAY:
-				delta = dayDiff;
-				break;
-			case WEEKDAY:
-				var days = Math.round(dayDiff);
-				var weeks = parseInt(days/7);
-				var mod = days % 7;
-
-				// Even number of weeks
-				if (mod == 0) {
-					days = weeks*5;
-				}
-				// Weeks plus spare change (< 7 days)
-				else {
-					var adj = 0;
-					var aDay = dtA.getDay();
-					var bDay = dtB.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(dtA);
-					dtMark.setDate(dtMark.getDate()+(weeks*7));
-					var dayMark = dtMark.getDay();
-					// Spare change days -- 6 or less
-					// ----------
-					// Positive diff
-					if (dayDiff > 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;
-								break;
-							default:
-								// Do nothing
-								break;
-						}
+	var msDiff = dtB.getTime() - dtA.getTime();
+	var secDiff = msDiff / 1000;
+	var minDiff = secDiff / 60;
+	var houDiff = minDiff / 60;
+	var dayDiff = houDiff / 24;
+	var weeDiff = dayDiff / 7;
+	var delta = 0;
+	with (dojo.date.dateParts) {
+		switch (interv) {
+		  case YEAR:
+			delta = yeaDiff;
+			break;
+		  case QUARTER:
+			var mA = dtA.getMonth();
+			var mB = dtB.getMonth();
+			var qA = Math.floor(mA / 3) + 1;
+			var qB = Math.floor(mB / 3) + 1;
+			qB += (yeaDiff * 4);
+			delta = qB - qA;
+			break;
+		  case MONTH:
+			delta = monDiff;
+			break;
+		  case WEEK:
+			delta = parseInt(weeDiff);
+			break;
+		  case DAY:
+			delta = dayDiff;
+			break;
+		  case WEEKDAY:
+			var days = Math.round(dayDiff);
+			var weeks = parseInt(days / 7);
+			var mod = days % 7;
+			if (mod == 0) {
+				days = weeks * 5;
+			} else {
+				var adj = 0;
+				var aDay = dtA.getDay();
+				var bDay = dtB.getDay();
+				weeks = parseInt(days / 7);
+				mod = days % 7;
+				var dtMark = new Date(dtA);
+				dtMark.setDate(dtMark.getDate() + (weeks * 7));
+				var dayMark = dtMark.getDay();
+				if (dayDiff > 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;
+						break;
+					  default:
+						break;
 					}
-					// Negative diff
-					else if (dayDiff < 0) {
+				} else {
+					if (dayDiff < 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;
-								break;
-							default:
-								// Do nothing
-								break;
+						  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;
+							break;
+						  default:
+							break;
 						}
 					}
-					days += adj;
-					days -= (weeks*2);
 				}
-				delta = days;
-
-				break;
-			case HOUR:
-				delta = houDiff;
-				break;
-			case MINUTE:
-				delta = minDiff;
-				break;
-			case SECOND:
-				delta = secDiff;
-				break;
-			case MILLISECOND:
-				delta = msDiff;
-				break;
-			default:
-				// Do nothing
-				break;
+				days += adj;
+				days -= (weeks * 2);
+			}
+			delta = days;
+			break;
+		  case HOUR:
+			delta = houDiff;
+			break;
+		  case MINUTE:
+			delta = minDiff;
+			break;
+		  case SECOND:
+			delta = secDiff;
+			break;
+		  case MILLISECOND:
+			delta = msDiff;
+			break;
+		  default:
+			break;
 		}
 	}
-
-	// Round for fractional values and DST leaps
-	return Math.round(delta); // Number (integer)
+	return Math.round(delta);
 };
 
+
 __CPAN_FILE__ src/date/serialize.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -68485,33 +46260,24 @@
 */
 
 dojo.provide("dojo.date.serialize");
-
 dojo.require("dojo.string.common");
-
-/* ISO 8601 Functions
- *********************/
-
-dojo.date.setIso8601 = function(/*Date*/dateObject, /*String*/formattedString){
-	// summary: sets a Date object based on an ISO 8601 formatted string (uses date and time)
+dojo.date.setIso8601 = function (dateObject, formattedString) {
 	var comps = (formattedString.indexOf("T") == -1) ? formattedString.split(" ") : formattedString.split("T");
 	dateObject = dojo.date.setIso8601Date(dateObject, comps[0]);
-	if(comps.length == 2){ dateObject = dojo.date.setIso8601Time(dateObject, comps[1]); }
-	return dateObject; /* Date or null */
+	if (comps.length == 2) {
+		dateObject = dojo.date.setIso8601Time(dateObject, comps[1]);
+	}
+	return dateObject;
 };
-
-dojo.date.fromIso8601 = function(/*String*/formattedString){
-	// summary: returns a Date object based on an ISO 8601 formatted string (uses date and time)
+dojo.date.fromIso8601 = function (formattedString) {
 	return dojo.date.setIso8601(new Date(0, 0), formattedString);
 };
-
-dojo.date.setIso8601Date = function(/*String*/dateObject, /*String*/formattedString){
-	// summary: sets a Date object based on an ISO 8601 formatted string (date only)
-	var regexp = "^([0-9]{4})((-?([0-9]{2})(-?([0-9]{2}))?)|" +
-			"(-?([0-9]{3}))|(-?W([0-9]{2})(-?([1-7]))?))?$";
+dojo.date.setIso8601Date = function (dateObject, formattedString) {
+	var regexp = "^([0-9]{4})((-?([0-9]{2})(-?([0-9]{2}))?)|" + "(-?([0-9]{3}))|(-?W([0-9]{2})(-?([1-7]))?))?$";
 	var d = formattedString.match(new RegExp(regexp));
-	if(!d){
+	if (!d) {
 		dojo.debug("invalid date string: " + formattedString);
-		return null; // null
+		return null;
 	}
 	var year = d[1];
 	var month = d[4];
@@ -68519,137 +46285,98 @@
 	var dayofyear = d[8];
 	var week = d[10];
 	var dayofweek = d[12] ? d[12] : 1;
-
 	dateObject.setFullYear(year);
-
-	if(dayofyear){
+	if (dayofyear) {
 		dateObject.setMonth(0);
 		dateObject.setDate(Number(dayofyear));
-	}
-	else if(week){
-		dateObject.setMonth(0);
-		dateObject.setDate(1);
-		var gd = dateObject.getDay();
-		var day =  gd ? gd : 7;
-		var offset = Number(dayofweek) + (7 * Number(week));
-		
-		if(day <= 4){ dateObject.setDate(offset + 1 - day); }
-		else{ dateObject.setDate(offset + 8 - day); }
-	} else{
-		if(month){
+	} else {
+		if (week) {
+			dateObject.setMonth(0);
 			dateObject.setDate(1);
-			dateObject.setMonth(month - 1); 
+			var gd = dateObject.getDay();
+			var day = gd ? gd : 7;
+			var offset = Number(dayofweek) + (7 * Number(week));
+			if (day <= 4) {
+				dateObject.setDate(offset + 1 - day);
+			} else {
+				dateObject.setDate(offset + 8 - day);
+			}
+		} else {
+			if (month) {
+				dateObject.setDate(1);
+				dateObject.setMonth(month - 1);
+			}
+			if (date) {
+				dateObject.setDate(date);
+			}
 		}
-		if(date){ dateObject.setDate(date); }
 	}
-	
-	return dateObject; // Date
+	return dateObject;
 };
-
-dojo.date.fromIso8601Date = function(/*String*/formattedString){
-	// summary: returns a Date object based on an ISO 8601 formatted string (date only)
+dojo.date.fromIso8601Date = function (formattedString) {
 	return dojo.date.setIso8601Date(new Date(0, 0), formattedString);
 };
-
-dojo.date.setIso8601Time = function(/*Date*/dateObject, /*String*/formattedString){
-	// summary: sets a Date object based on an ISO 8601 formatted string (time only)
-
-	// first strip timezone info from the end
+dojo.date.setIso8601Time = function (dateObject, formattedString) {
 	var timezone = "Z|(([-+])([0-9]{2})(:?([0-9]{2}))?)$";
 	var d = formattedString.match(new RegExp(timezone));
-
-	var offset = 0; // local time if no tz info
-	if(d){
-		if(d[0] != 'Z'){
+	var offset = 0;
+	if (d) {
+		if (d[0] != "Z") {
 			offset = (Number(d[3]) * 60) + Number(d[5]);
-			offset *= ((d[2] == '-') ? 1 : -1);
+			offset *= ((d[2] == "-") ? 1 : -1);
 		}
 		offset -= dateObject.getTimezoneOffset();
 		formattedString = formattedString.substr(0, formattedString.length - d[0].length);
 	}
-
-	// then work out the time
-	var regexp = "^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(\.([0-9]+))?)?)?$";
+	var regexp = "^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(.([0-9]+))?)?)?$";
 	d = formattedString.match(new RegExp(regexp));
-	if(!d){
+	if (!d) {
 		dojo.debug("invalid time string: " + formattedString);
-		return null; // null
+		return null;
 	}
 	var hours = d[1];
 	var mins = Number((d[3]) ? d[3] : 0);
 	var secs = (d[5]) ? d[5] : 0;
 	var ms = d[7] ? (Number("0." + d[7]) * 1000) : 0;
-
 	dateObject.setHours(hours);
 	dateObject.setMinutes(mins);
 	dateObject.setSeconds(secs);
 	dateObject.setMilliseconds(ms);
-
-	if(offset !== 0){
+	if (offset !== 0) {
 		dateObject.setTime(dateObject.getTime() + offset * 60000);
-	}	
-	return dateObject; // Date
+	}
+	return dateObject;
 };
-
-dojo.date.fromIso8601Time = function(/*String*/formattedString){
-	// summary: returns a Date object based on an ISO 8601 formatted string (date only)
+dojo.date.fromIso8601Time = function (formattedString) {
 	return dojo.date.setIso8601Time(new Date(0, 0), formattedString);
 };
-
-
-/* RFC-3339 Date Functions
- *************************/
-
-dojo.date.toRfc3339 = function(/*Date?*/dateObject, /*String?*/selector){
-//	summary:
-//		Format a JavaScript Date object as a string according to RFC 3339
-//
-//	dateObject:
-//		A JavaScript date, or the current date and time, by default
-//
-//	selector:
-//		"dateOnly" or "timeOnly" to format selected portions of the Date object.
-//		Date and time will be formatted by default.
-
-//FIXME: tolerate Number, string input?
-	if(!dateObject){
+dojo.date.toRfc3339 = function (dateObject, selector) {
+	if (!dateObject) {
 		dateObject = new Date();
 	}
-
 	var _ = dojo.string.pad;
 	var formattedDate = [];
-	if(selector != "timeOnly"){
-		var date = [_(dateObject.getFullYear(),4), _(dateObject.getMonth()+1,2), _(dateObject.getDate(),2)].join('-');
+	if (selector != "timeOnly") {
+		var date = [_(dateObject.getFullYear(), 4), _(dateObject.getMonth() + 1, 2), _(dateObject.getDate(), 2)].join("-");
 		formattedDate.push(date);
 	}
-	if(selector != "dateOnly"){
-		var time = [_(dateObject.getHours(),2), _(dateObject.getMinutes(),2), _(dateObject.getSeconds(),2)].join(':');
+	if (selector != "dateOnly") {
+		var time = [_(dateObject.getHours(), 2), _(dateObject.getMinutes(), 2), _(dateObject.getSeconds(), 2)].join(":");
 		var timezoneOffset = dateObject.getTimezoneOffset();
-		time += (timezoneOffset > 0 ? "-" : "+") + 
-					_(Math.floor(Math.abs(timezoneOffset)/60),2) + ":" +
-					_(Math.abs(timezoneOffset)%60,2);
+		time += (timezoneOffset > 0 ? "-" : "+") + _(Math.floor(Math.abs(timezoneOffset) / 60), 2) + ":" + _(Math.abs(timezoneOffset) % 60, 2);
 		formattedDate.push(time);
 	}
-	return formattedDate.join('T'); // String
+	return formattedDate.join("T");
 };
-
-dojo.date.fromRfc3339 = function(/*String*/rfcDate){
-//	summary:
-//		Create a JavaScript Date object from a string formatted according to RFC 3339
-//
-//	rfcDate:
-//		A string such as 2005-06-30T08:05:00-07:00
-//		"any" is also supported in place of a time.
-
-	// backwards compatible support for use of "any" instead of just not 
-	// including the time
-	if(rfcDate.indexOf("Tany")!=-1){
-		rfcDate = rfcDate.replace("Tany","");
+dojo.date.fromRfc3339 = function (rfcDate) {
+	if (rfcDate.indexOf("Tany") != -1) {
+		rfcDate = rfcDate.replace("Tany", "");
 	}
 	var dateObject = new Date();
-	return dojo.date.setIso8601(dateObject, rfcDate); // Date or null
+	return dojo.date.setIso8601(dateObject, rfcDate);
 };
 
+
 __CPAN_FILE__ src/date/supplemental.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -68662,72 +46389,41 @@
 */
 
 dojo.provide("dojo.date.supplemental");
-
-dojo.date.getFirstDayOfWeek = function(/*String?*/locale){
-// summary: Returns a zero-based index for first day of the week
-// description:
-//		Returns a zero-based index for first day of the week, as used by the local (Gregorian) calendar.
-//		e.g. Sunday (returns 0), or Monday (returns 1)
-
-	// from http://www.unicode.org/cldr/data/common/supplemental/supplementalData.xml:supplementalData/weekData/firstDay
-	var firstDay = {/*default is 1=Monday*/
-		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,
-		gb:0,
-		sy:4
-	};
-
+dojo.date.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, gb:0, sy:4};
 	locale = dojo.hostenv.normalizeLocale(locale);
 	var country = locale.split("-")[1];
 	var dow = firstDay[country];
-	return (typeof dow == 'undefined') ? 1 : dow; /*Number*/
+	return (typeof dow == "undefined") ? 1 : dow;
 };
-
-dojo.date.getWeekend = function(/*String?*/locale){
-// summary: Returns a hash containing the start and end days of the weekend
-// description:
-//		Returns a hash containing the start and end days of the weekend according to local custom using locale,
-//		or by default in the user's locale.
-//		e.g. {start:6, end:0}
-
-	// from http://www.unicode.org/cldr/data/common/supplemental/supplementalData.xml:supplementalData/weekData/weekend{Start,End}
-	var weekendStart = {/*default is 6=Saturday*/
-		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 = {/*default is 0=Sunday*/
-		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
-	};
-
+dojo.date.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};
 	locale = dojo.hostenv.normalizeLocale(locale);
 	var country = locale.split("-")[1];
 	var start = weekendStart[country];
 	var end = weekendEnd[country];
-	if(typeof start == 'undefined'){start=6;}
-	if(typeof end == 'undefined'){end=0;}
-	return {start:start, end:end}; /*Object {start,end}*/
+	if (typeof start == "undefined") {
+		start = 6;
+	}
+	if (typeof end == "undefined") {
+		end = 0;
+	}
+	return {start:start, end:end};
 };
-
-dojo.date.isWeekend = function(/*Date?*/dateObj, /*String?*/locale){
-// summary:
-//	Determines if the date falls on a weekend, according to local custom.
-
+dojo.date.isWeekend = function (dateObj, locale) {
 	var weekend = dojo.date.getWeekend(locale);
 	var day = (dateObj || new Date()).getDay();
-	if(weekend.end<weekend.start){
-		weekend.end+=7;
-		if(day<weekend.start){ day+=7; }
+	if (weekend.end < weekend.start) {
+		weekend.end += 7;
+		if (day < weekend.start) {
+			day += 7;
+		}
 	}
-	return day >= weekend.start && day <= weekend.end; // Boolean
+	return day >= weekend.start && day <= weekend.end;
 };
 
+
 __CPAN_FILE__ src/date/format.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -68740,7 +46436,6 @@
 */
 
 dojo.provide("dojo.date.format");
-
 dojo.require("dojo.date.common");
 dojo.require("dojo.date.supplemental");
 dojo.require("dojo.lang.array");
@@ -68748,910 +46443,700 @@
 dojo.require("dojo.lang.func");
 dojo.require("dojo.string.common");
 dojo.require("dojo.i18n.common");
-
-// Load the bundles containing localization information for
-// names and formats
 dojo.requireLocalization("dojo.i18n.calendar", "gregorian", null, "de,en,es,fi,fr,hu,ja,it,ko,nl,pt,sv,zh,pt-br,zh-cn,zh-hk,zh-tw,ROOT");
 dojo.requireLocalization("dojo.i18n.calendar", "gregorianExtras", null, "ja,zh,ROOT");
-
-//NOTE: Everything in this module assumes Gregorian calendars.
-// Other calendars will be implemented in separate modules.
-
-(function(){
-dojo.date.format = function(/*Date*/dateObject, /*Object?*/options){
-//
-// summary:
-//		Format a Date object as a String, using locale-specific settings.
-//
-// description:
-//		Create a string from a Date object using a known localized pattern.
-//		By default, this method formats both date and time from dateObject.
-//		Formatting patterns are chosen appropriate to the locale.  Different
-//		formatting lengths may be chosen, with "full" used by default.
-//		Custom patterns may be used or registered with translations using
-//		the addCustomBundle method.
-//		Formatting patterns are implemented using the syntax described at
-//		http://www.unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns
-//
-// dateObject:
-//		the date and/or time to be formatted.  If a time only is formatted,
-//		the values in the year, month, and day fields are irrelevant.  The
-//		opposite is true when formatting only dates.
-//
-// options: object {selector: string, formatLength: string, datePattern: string, timePattern: string, locale: string}
-//		selector- choice of timeOnly,dateOnly (default: date and time)
-//		formatLength- choice of long, short, medium or full (plus any custom additions).  Defaults to 'full'
-//		datePattern,timePattern- override pattern with this string
-//		am,pm- override strings for am/pm in times
-//		locale- override the locale used to determine formatting rules
-//
-
-	if(typeof options == "string"){
-		dojo.deprecated("dojo.date.format", "To format dates with POSIX-style strings, please use dojo.date.strftime instead", "0.5");
-		return dojo.date.strftime(dateObject, options);
-	}
-
-	// Format a pattern without literals
-	function formatPattern(dateObject, pattern){
-		return pattern.replace(/([a-z])\1*/ig, function(match){
-			var s;
-			var c = match.charAt(0);
-			var l = match.length;
-			var pad;
-			var widthList = ["abbr", "wide", "narrow"];
-			switch(c){
-				case 'G':
-					if(l>3){dojo.unimplemented("Era format not implemented");}
+(function () {
+	dojo.date.format = function (dateObject, options) {
+		if (typeof options == "string") {
+			dojo.deprecated("dojo.date.format", "To format dates with POSIX-style strings, please use dojo.date.strftime instead", "0.5");
+			return dojo.date.strftime(dateObject, options);
+		}
+		function formatPattern(dateObject, pattern) {
+			return pattern.replace(/([a-z])\1*/ig, function (match) {
+				var s;
+				var c = match.charAt(0);
+				var l = match.length;
+				var pad;
+				var widthList = ["abbr", "wide", "narrow"];
+				switch (c) {
+				  case "G":
+					if (l > 3) {
+						dojo.unimplemented("Era format not implemented");
+					}
 					s = info.eras[dateObject.getFullYear() < 0 ? 1 : 0];
 					break;
-				case 'y':
+				  case "y":
 					s = dateObject.getFullYear();
-					switch(l){
-						case 1:
-							break;
-						case 2:
-							s = String(s).substr(-2);
-							break;
-						default:
-							pad = true;
+					switch (l) {
+					  case 1:
+						break;
+					  case 2:
+						s = String(s).substr(-2);
+						break;
+					  default:
+						pad = true;
 					}
 					break;
-				case 'Q':
-				case 'q':
-					s = Math.ceil((dateObject.getMonth()+1)/3);
-					switch(l){
-						case 1: case 2:
-							pad = true;
-							break;
-						case 3:
-						case 4:
-							dojo.unimplemented("Quarter format not implemented");
+				  case "Q":
+				  case "q":
+					s = Math.ceil((dateObject.getMonth() + 1) / 3);
+					switch (l) {
+					  case 1:
+					  case 2:
+						pad = true;
+						break;
+					  case 3:
+					  case 4:
+						dojo.unimplemented("Quarter format not implemented");
 					}
 					break;
-				case 'M':
-				case 'L':
+				  case "M":
+				  case "L":
 					var m = dateObject.getMonth();
 					var width;
-					switch(l){
-						case 1: case 2:
-							s = m+1; pad = true;
-							break;
-						case 3: case 4: case 5:
-							width = widthList[l-3];
-							break;
+					switch (l) {
+					  case 1:
+					  case 2:
+						s = m + 1;
+						pad = true;
+						break;
+					  case 3:
+					  case 4:
+					  case 5:
+						width = widthList[l - 3];
+						break;
 					}
-					if(width){
+					if (width) {
 						var type = (c == "L") ? "standalone" : "format";
-						var prop = ["months",type,width].join("-");
+						var prop = ["months", type, width].join("-");
 						s = info[prop][m];
 					}
 					break;
-				case 'w':
+				  case "w":
 					var firstDay = 0;
-					s = dojo.date.getWeekOfYear(dateObject, firstDay); pad = true;
+					s = dojo.date.getWeekOfYear(dateObject, firstDay);
+					pad = true;
 					break;
-				case 'd':
-					s = dateObject.getDate(); pad = true;
+				  case "d":
+					s = dateObject.getDate();
+					pad = true;
 					break;
-				case 'D':
-					s = dojo.date.getDayOfYear(dateObject); pad = true;
+				  case "D":
+					s = dojo.date.getDayOfYear(dateObject);
+					pad = true;
 					break;
-				case 'E':
-				case 'e':
-				case 'c': // REVIEW: don't see this in the spec?
+				  case "E":
+				  case "e":
+				  case "c":
 					var d = dateObject.getDay();
 					var width;
-					switch(l){
-						case 1: case 2:
-							if(c == 'e'){
-								var first = dojo.date.getFirstDayOfWeek(options.locale);
-								d = (d-first+7)%7;
-							}
-							if(c != 'c'){
-								s = d+1; pad = true;
-								break;
-							}
-							// else fallthrough...
-						case 3: case 4: case 5:
-							width = widthList[l-3];
+					switch (l) {
+					  case 1:
+					  case 2:
+						if (c == "e") {
+							var first = dojo.date.getFirstDayOfWeek(options.locale);
+							d = (d - first + 7) % 7;
+						}
+						if (c != "c") {
+							s = d + 1;
+							pad = true;
 							break;
+						}
+					  case 3:
+					  case 4:
+					  case 5:
+						width = widthList[l - 3];
+						break;
 					}
-					if(width){
+					if (width) {
 						var type = (c == "c") ? "standalone" : "format";
-						var prop = ["days",type,width].join("-");
+						var prop = ["days", type, width].join("-");
 						s = info[prop][d];
 					}
 					break;
-				case 'a':
-					var timePeriod = (dateObject.getHours() < 12) ? 'am' : 'pm';
+				  case "a":
+					var timePeriod = (dateObject.getHours() < 12) ? "am" : "pm";
 					s = info[timePeriod];
 					break;
-				case 'h':
-				case 'H':
-				case 'K':
-				case 'k':
+				  case "h":
+				  case "H":
+				  case "K":
+				  case "k":
 					var h = dateObject.getHours();
-					// strange choices in the date format make it impossible to write this succinctly
 					switch (c) {
-						case 'h': // 1-12
-							s = (h % 12) || 12;
-							break;
-						case 'H': // 0-23
-							s = h;
-							break;
-						case 'K': // 0-11
-							s = (h % 12);
-							break;
-						case 'k': // 1-24
-							s = h || 24;
-							break;
+					  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;
+				  case "m":
+					s = dateObject.getMinutes();
+					pad = true;
 					break;
-				case 's':
-					s = dateObject.getSeconds(); pad = true;
+				  case "s":
+					s = dateObject.getSeconds();
+					pad = true;
 					break;
-				case 'S':
-					s = Math.round(dateObject.getMilliseconds() * Math.pow(10, l-3));
+				  case "S":
+					s = Math.round(dateObject.getMilliseconds() * Math.pow(10, l - 3));
 					break;
-				case 'v': // FIXME: don't know what this is. seems to be same as z?
-				case 'z':
-					// We only have one timezone to offer; the one from the browser
+				  case "v":
+				  case "z":
 					s = dojo.date.getTimezoneName(dateObject);
-					if(s){break;}
-					l=4;
-					// fallthrough... use GMT if tz not available
-				case 'Z':
+					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){
+					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;
-				case 'Y':
-				case 'u':
-				case 'W':
-				case 'F':
-				case 'g':
-				case 'A':
-					dojo.debug(match+" modifier not yet implemented");
+				  case "Y":
+				  case "u":
+				  case "W":
+				  case "F":
+				  case "g":
+				  case "A":
+					dojo.debug(match + " modifier not yet implemented");
 					s = "?";
 					break;
-				default:
-					dojo.raise("dojo.date.format: invalid pattern char: "+pattern);
+				  default:
+					dojo.raise("dojo.date.format: invalid pattern char: " + pattern);
+				}
+				if (pad) {
+					s = dojo.string.pad(s, l);
+				}
+				return s;
+			});
+		}
+		options = options || {};
+		var locale = dojo.hostenv.normalizeLocale(options.locale);
+		var formatLength = options.formatLength || "full";
+		var info = dojo.date._getGregorianBundle(locale);
+		var str = [];
+		var sauce = dojo.lang.curry(this, formatPattern, dateObject);
+		if (options.selector != "timeOnly") {
+			var datePattern = options.datePattern || info["dateFormat-" + formatLength];
+			if (datePattern) {
+				str.push(_processPattern(datePattern, sauce));
 			}
-			if(pad){ s = dojo.string.pad(s, l); }
-			return s;
-		});
-	}
-
-	options = options || {};
-
-	var locale = dojo.hostenv.normalizeLocale(options.locale);
-	var formatLength = options.formatLength || 'full';
-	var info = dojo.date._getGregorianBundle(locale);
-	var str = [];
-	var sauce = dojo.lang.curry(this, formatPattern, dateObject);
-	if(options.selector != "timeOnly"){
-		var datePattern = options.datePattern || info["dateFormat-"+formatLength];
-		if(datePattern){str.push(_processPattern(datePattern, sauce));}
-	}
-	if(options.selector != "dateOnly"){
-		var timePattern = options.timePattern || info["timeFormat-"+formatLength];
-		if(timePattern){str.push(_processPattern(timePattern, sauce));}
-	}
-	var result = str.join(" "); //TODO: use locale-specific pattern to assemble date + time
-	return result; /*String*/
-};
-
-dojo.date.parse = function(/*String*/value, /*Object?*/options){
-//
-// summary:
-//		Convert a properly formatted string to a primitive Date object,
-//		using locale-specific settings.
-//
-// description:
-//		Create a Date object from a string using a known localized pattern.
-//		By default, this method parses looking for both date and time in the string.
-//		Formatting patterns are chosen appropriate to the locale.  Different
-//		formatting lengths may be chosen, with "full" used by default.
-//		Custom patterns may be used or registered with translations using
-//		the addCustomBundle method.
-//		Formatting patterns are implemented using the syntax described at
-//		http://www.unicode.org/reports/tr35/#Date_Format_Patterns
-//
-// value:
-//		A string representation of a date
-//
-// options: object {selector: string, formatLength: string, datePattern: string, timePattern: string, locale: string, strict: boolean}
-//		selector- choice of timeOnly, dateOnly, dateTime (default: dateOnly)
-//		formatLength- choice of long, short, medium or full (plus any custom additions).  Defaults to 'full'
-//		datePattern,timePattern- override pattern with this string
-//		am,pm- override strings for am/pm in times
-//		locale- override the locale used to determine formatting rules
-//		strict- strict parsing, off by default
-//
-
-	options = options || {};
-	var locale = dojo.hostenv.normalizeLocale(options.locale);
-	var info = dojo.date._getGregorianBundle(locale);
-	var formatLength = options.formatLength || 'full';
-	if(!options.selector){ options.selector = 'dateOnly'; }
-	var datePattern = options.datePattern || info["dateFormat-" + formatLength];
-	var timePattern = options.timePattern || info["timeFormat-" + formatLength];
-
-	var pattern;
-	if(options.selector == 'dateOnly'){
-		pattern = datePattern;
-	}
-	else if(options.selector == 'timeOnly'){
-		pattern = timePattern;
-	}else if(options.selector == 'dateTime'){
-		pattern = datePattern + ' ' + timePattern; //TODO: use locale-specific pattern to assemble date + time
-	}else{
-		var msg = "dojo.date.parse: Unknown selector param passed: '" + options.selector + "'.";
-		msg += " Defaulting to date pattern.";
-		dojo.debug(msg);
-		pattern = datePattern;
-	}
-
-	var groups = [];
-	var dateREString = _processPattern(pattern, dojo.lang.curry(this, _buildDateTimeRE, groups, info, options));
-	var dateRE = new RegExp("^" + dateREString + "$");
-
-	var match = dateRE.exec(value);
-	if(!match){
-		return null;
-	}
-
-	var widthList = ['abbr', 'wide', 'narrow'];
-	//1972 is a leap year.  We want to avoid Feb 29 rolling over into Mar 1,
-	//in the cases where the year is parsed after the month and day.
-	var result = new Date(1972, 0);
-	var expected = {};
-	for(var i=1; i<match.length; i++){
-		var grp=groups[i-1];
-		var l=grp.length;
-		var v=match[i];
-		switch(grp.charAt(0)){
-			case 'y':
-				if(l != 2){
-					//interpret year literally, so '5' would be 5 A.D.
+		}
+		if (options.selector != "dateOnly") {
+			var timePattern = options.timePattern || info["timeFormat-" + formatLength];
+			if (timePattern) {
+				str.push(_processPattern(timePattern, sauce));
+			}
+		}
+		var result = str.join(" ");
+		return result;
+	};
+	dojo.date.parse = function (value, options) {
+		options = options || {};
+		var locale = dojo.hostenv.normalizeLocale(options.locale);
+		var info = dojo.date._getGregorianBundle(locale);
+		var formatLength = options.formatLength || "full";
+		if (!options.selector) {
+			options.selector = "dateOnly";
+		}
+		var datePattern = options.datePattern || info["dateFormat-" + formatLength];
+		var timePattern = options.timePattern || info["timeFormat-" + formatLength];
+		var pattern;
+		if (options.selector == "dateOnly") {
+			pattern = datePattern;
+		} else {
+			if (options.selector == "timeOnly") {
+				pattern = timePattern;
+			} else {
+				if (options.selector == "dateTime") {
+					pattern = datePattern + " " + timePattern;
+				} else {
+					var msg = "dojo.date.parse: Unknown selector param passed: '" + options.selector + "'.";
+					msg += " Defaulting to date pattern.";
+					dojo.debug(msg);
+					pattern = datePattern;
+				}
+			}
+		}
+		var groups = [];
+		var dateREString = _processPattern(pattern, dojo.lang.curry(this, _buildDateTimeRE, groups, info, options));
+		var dateRE = new RegExp("^" + dateREString + "$");
+		var match = dateRE.exec(value);
+		if (!match) {
+			return null;
+		}
+		var widthList = ["abbr", "wide", "narrow"];
+		var result = new Date(1972, 0);
+		var expected = {};
+		for (var i = 1; i < match.length; i++) {
+			var grp = groups[i - 1];
+			var l = grp.length;
+			var v = match[i];
+			switch (grp.charAt(0)) {
+			  case "y":
+				if (l != 2) {
 					result.setFullYear(v);
 					expected.year = v;
-				}else{
-					if(v<100){
+				} else {
+					if (v < 100) {
 						v = Number(v);
-						//choose century to apply, according to a sliding window
-						//of 80 years before and 20 years after present year
-						var year = '' + new Date().getFullYear();
+						var year = "" + new Date().getFullYear();
 						var century = year.substring(0, 2) * 100;
 						var yearPart = Number(year.substring(2, 4));
 						var cutoff = Math.min(yearPart + 20, 99);
 						var num = (v < cutoff) ? century + v : century - 100 + v;
 						result.setFullYear(num);
 						expected.year = num;
-					}else{
-						//we expected 2 digits and got more...
-						if(options.strict){
+					} else {
+						if (options.strict) {
 							return null;
 						}
-						//interpret literally, so '150' would be 150 A.D.
-						//also tolerate '1950', if 'yyyy' input passed to 'yy' format
 						result.setFullYear(v);
 						expected.year = v;
 					}
 				}
 				break;
-			case 'M':
-				if (l>2) {
-					if(!options.strict){
-						//Tolerate abbreviating period in month part
-						v = v.replace(/\./g,'');
-						//Case-insensitive
+			  case "M":
+				if (l > 2) {
+					if (!options.strict) {
+						v = v.replace(/\./g, "");
 						v = v.toLowerCase();
 					}
-					var months = info['months-format-' + widthList[l-3]].concat();
-					for (var j=0; j<months.length; j++){
-						if(!options.strict){
-							//Case-insensitive
+					var months = info["months-format-" + widthList[l - 3]].concat();
+					for (var j = 0; j < months.length; j++) {
+						if (!options.strict) {
 							months[j] = months[j].toLowerCase();
 						}
-						if(v == months[j]){
+						if (v == months[j]) {
 							result.setMonth(j);
 							expected.month = j;
 							break;
 						}
 					}
-					if(j==months.length){
+					if (j == months.length) {
 						dojo.debug("dojo.date.parse: Could not parse month name: '" + v + "'.");
 						return null;
 					}
-				}else{
-					result.setMonth(v-1);
-					expected.month = v-1;
+				} else {
+					result.setMonth(v - 1);
+					expected.month = v - 1;
 				}
 				break;
-			case 'E':
-			case 'e':
-				if(!options.strict){
-					//Case-insensitive
+			  case "E":
+			  case "e":
+				if (!options.strict) {
 					v = v.toLowerCase();
 				}
-				var days = info['days-format-' + widthList[l-3]].concat();
-				for (var j=0; j<days.length; j++){
-					if(!options.strict){
-						//Case-insensitive
+				var days = info["days-format-" + widthList[l - 3]].concat();
+				for (var j = 0; j < days.length; j++) {
+					if (!options.strict) {
 						days[j] = days[j].toLowerCase();
 					}
-					if(v == days[j]){
-						//TODO: not sure what to actually do with this input,
-						//in terms of setting something on the Date obj...?
-						//without more context, can't affect the actual date
+					if (v == days[j]) {
 						break;
 					}
 				}
-				if(j==days.length){
+				if (j == days.length) {
 					dojo.debug("dojo.date.parse: Could not parse weekday name: '" + v + "'.");
 					return null;
 				}
-				break;	
-			case 'd':
+				break;
+			  case "d":
 				result.setDate(v);
 				expected.date = v;
 				break;
-			case 'a': //am/pm
+			  case "a":
 				var am = options.am || info.am;
 				var pm = options.pm || info.pm;
-				if(!options.strict){
-					v = v.replace(/\./g,'').toLowerCase();
-					am = am.replace(/\./g,'').toLowerCase();
-					pm = pm.replace(/\./g,'').toLowerCase();
+				if (!options.strict) {
+					v = v.replace(/\./g, "").toLowerCase();
+					am = am.replace(/\./g, "").toLowerCase();
+					pm = pm.replace(/\./g, "").toLowerCase();
 				}
-				if(options.strict && v != am && v != pm){
+				if (options.strict && v != am && v != pm) {
 					dojo.debug("dojo.date.parse: Could not parse am/pm part.");
 					return null;
 				}
 				var hours = result.getHours();
-				if(v == pm && hours < 12){
-					result.setHours(hours + 12); //e.g., 3pm -> 15
-				} else if(v == am && hours == 12){
-					result.setHours(0); //12am -> 0
+				if (v == pm && hours < 12) {
+					result.setHours(hours + 12);
+				} else {
+					if (v == am && hours == 12) {
+						result.setHours(0);
+					}
 				}
 				break;
-			case 'K': //hour (1-24)
-				if(v==24){v=0;}
-				// fallthrough...
-			case 'h': //hour (1-12)
-			case 'H': //hour (0-23)
-			case 'k': //hour (0-11)
-				//TODO: strict bounds checking, padding
-				if(v>23){
+			  case "K":
+				if (v == 24) {
+					v = 0;
+				}
+			  case "h":
+			  case "H":
+			  case "k":
+				if (v > 23) {
 					dojo.debug("dojo.date.parse: Illegal hours value");
 					return null;
 				}
-
-				//in the 12-hour case, adjusting for am/pm requires the 'a' part
-				//which for now we will assume always comes after the 'h' part
 				result.setHours(v);
 				break;
-			case 'm': //minutes
+			  case "m":
 				result.setMinutes(v);
 				break;
-			case 's': //seconds
+			  case "s":
 				result.setSeconds(v);
 				break;
-			case 'S': //milliseconds
+			  case "S":
 				result.setMilliseconds(v);
 				break;
-			default:
+			  default:
 				dojo.unimplemented("dojo.date.parse: unsupported pattern char=" + grp.charAt(0));
+			}
 		}
-	}
-
-	//validate parse date fields versus input date fields
-	if(expected.year && result.getFullYear() != expected.year){
-		dojo.debug("Parsed year: '" + result.getFullYear() + "' did not match input year: '" + expected.year + "'.");
-		return null;
-	}
-	if(expected.month && result.getMonth() != expected.month){
-		dojo.debug("Parsed month: '" + result.getMonth() + "' did not match input month: '" + expected.month + "'.");
-		return null;
-	}
-	if(expected.date && result.getDate() != expected.date){
-		dojo.debug("Parsed day of month: '" + result.getDate() + "' did not match input day of month: '" + expected.date + "'.");
-		return null;
-	}
-
-	//TODO: implement a getWeekday() method in order to test 
-	//validity of input strings containing 'EEE' or 'EEEE'...
-
-	return result; /*Date*/
-};
-
-function _processPattern(pattern, applyPattern, applyLiteral, applyAll){
-	// Process a pattern with literals in it
-	// Break up on single quotes, treat every other one as a literal, except '' which becomes '
-	var identity = function(x){return x;};
-	applyPattern = applyPattern || identity;
-	applyLiteral = applyLiteral || identity;
-	applyAll = applyAll || identity;
-
-	//split on single quotes (which escape literals in date format strings) 
-	//but preserve escaped single quotes (e.g., o''clock)
-	var chunks = pattern.match(/(''|[^'])+/g); 
-	var literal = false;
-
-	for(var i=0; i<chunks.length; i++){
-		if(!chunks[i]){
-			chunks[i]='';
-		} else {
-			chunks[i]=(literal ? applyLiteral : applyPattern)(chunks[i]);
-			literal = !literal;
+		if (expected.year && result.getFullYear() != expected.year) {
+			dojo.debug("Parsed year: '" + result.getFullYear() + "' did not match input year: '" + expected.year + "'.");
+			return null;
 		}
+		if (expected.month && result.getMonth() != expected.month) {
+			dojo.debug("Parsed month: '" + result.getMonth() + "' did not match input month: '" + expected.month + "'.");
+			return null;
+		}
+		if (expected.date && result.getDate() != expected.date) {
+			dojo.debug("Parsed day of month: '" + result.getDate() + "' did not match input day of month: '" + expected.date + "'.");
+			return null;
+		}
+		return result;
+	};
+	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;
+		for (var i = 0; i < chunks.length; i++) {
+			if (!chunks[i]) {
+				chunks[i] = "";
+			} else {
+				chunks[i] = (literal ? applyLiteral : applyPattern)(chunks[i]);
+				literal = !literal;
+			}
+		}
+		return applyAll(chunks.join(""));
 	}
-	return applyAll(chunks.join(''));
-}
-
-function _buildDateTimeRE(groups, info, options, pattern){
-	return pattern.replace(/([a-z])\1*/ig, function(match){
-		// Build a simple regexp without parenthesis, which would ruin the match list
-		var s;
-		var c = match.charAt(0);
-		var l = match.length;
-		switch(c){
-			case 'y':
-				s = '\\d' + ((l==2) ? '{2,4}' : '+');
+	function _buildDateTimeRE(groups, info, options, pattern) {
+		return pattern.replace(/([a-z])\1*/ig, function (match) {
+			var s;
+			var c = match.charAt(0);
+			var l = match.length;
+			switch (c) {
+			  case "y":
+				s = "\\d" + ((l == 2) ? "{2,4}" : "+");
 				break;
-			case 'M':
-				s = (l>2) ? '\\S+' : '\\d{1,2}';
+			  case "M":
+				s = (l > 2) ? "\\S+" : "\\d{1,2}";
 				break;
-			case 'd':
-				s = '\\d{1,2}';
+			  case "d":
+				s = "\\d{1,2}";
 				break;
-		    case 'E':
-				s = '\\S+';
+			  case "E":
+				s = "\\S+";
 				break;
-			case 'h': 
-			case 'H': 
-			case 'K': 
-			case 'k':
-				s = '\\d{1,2}';
+			  case "h":
+			  case "H":
+			  case "K":
+			  case "k":
+				s = "\\d{1,2}";
 				break;
-			case 'm':
-			case 's':
-				s = '[0-5]\\d';
+			  case "m":
+			  case "s":
+				s = "[0-5]\\d";
 				break;
-			case 'S':
-				s = '\\d{1,3}';
+			  case "S":
+				s = "\\d{1,3}";
 				break;
-			case 'a':
-				var am = options.am || info.am || 'AM';
-				var pm = options.pm || info.pm || 'PM';
-				if(options.strict){
-					s = am + '|' + pm;
-				}else{
+			  case "a":
+				var am = options.am || info.am || "AM";
+				var pm = options.pm || info.pm || "PM";
+				if (options.strict) {
+					s = am + "|" + pm;
+				} else {
 					s = am;
-					s += (am != am.toLowerCase()) ? '|' + am.toLowerCase() : '';
-					s += '|';
-					s += (pm != pm.toLowerCase()) ? pm + '|' + pm.toLowerCase() : pm;
+					s += (am != am.toLowerCase()) ? "|" + am.toLowerCase() : "";
+					s += "|";
+					s += (pm != pm.toLowerCase()) ? pm + "|" + pm.toLowerCase() : pm;
 				}
 				break;
-			default:
+			  default:
 				dojo.unimplemented("parse of date format, pattern=" + pattern);
-		}
-
-		if(groups){ groups.push(match); }
-
-//FIXME: replace whitespace within final regexp with more flexible whitespace match instead?
-		//tolerate whitespace
-		return '\\s*(' + s + ')\\s*';
-	});
-}
+			}
+			if (groups) {
+				groups.push(match);
+			}
+			return "\\s*(" + s + ")\\s*";
+		});
+	}
 })();
-
-//TODO: try to common strftime and format code somehow?
-
-dojo.date.strftime = function(/*Date*/dateObject, /*String*/format, /*String?*/locale){
-//
-// summary:
-//		Formats the date object using the specifications of the POSIX strftime function
-//
-// description:
-//		see <http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html>
-
-	// zero pad
+dojo.date.strftime = function (dateObject, format, locale) {
 	var padChar = null;
-	function _(s, n){
+	function _(s, n) {
 		return dojo.string.pad(s, n || 2, padChar || "0");
 	}
-
 	var info = dojo.date._getGregorianBundle(locale);
-
-	function $(property){
-		switch (property){
-			case "a": // abbreviated weekday name according to the current locale
-				return dojo.date.getDayShortName(dateObject, locale);
-
-			case "A": // full weekday name according to the current locale
-				return dojo.date.getDayName(dateObject, locale);
-
-			case "b":
-			case "h": // abbreviated month name according to the current locale
-				return dojo.date.getMonthShortName(dateObject, locale);
-				
-			case "B": // full month name according to the current locale
-				return dojo.date.getMonthName(dateObject, locale);
-				
-			case "c": // preferred date and time representation for the current
-				      // locale
-				return dojo.date.format(dateObject, {locale: locale});
-
-			case "C": // century number (the year divided by 100 and truncated
-				      // to an integer, range 00 to 99)
-				return _(Math.floor(dateObject.getFullYear()/100));
-				
-			case "d": // day of the month as a decimal number (range 01 to 31)
-				return _(dateObject.getDate());
-				
-			case "D": // same as %m/%d/%y
-				return $("m") + "/" + $("d") + "/" + $("y");
-					
-			case "e": // day of the month as a decimal number, a single digit is
-				      // preceded by a space (range ' 1' to '31')
-				if(padChar == null){ padChar = " "; }
-				return _(dateObject.getDate());
-			
-			case "f": // month as a decimal number, a single digit is
-							// preceded by a space (range ' 1' to '12')
-				if(padChar == null){ padChar = " "; }
-				return _(dateObject.getMonth()+1);				
-			
-			case "g": // like %G, but without the century.
-				break;
-			
-			case "G": // The 4-digit year corresponding to the ISO week number
-				      // (see %V).  This has the same format and value as %Y,
-				      // except that if the ISO week number belongs to the
-				      // previous or next year, that year is used instead.
-				dojo.unimplemented("unimplemented modifier 'G'");
-				break;
-			
-			case "F": // same as %Y-%m-%d
-				return $("Y") + "-" + $("m") + "-" + $("d");
-				
-			case "H": // hour as a decimal number using a 24-hour clock (range
-				      // 00 to 23)
-				return _(dateObject.getHours());
-				
-			case "I": // hour as a decimal number using a 12-hour clock (range
-				      // 01 to 12)
-				return _(dateObject.getHours() % 12 || 12);
-				
-			case "j": // day of the year as a decimal number (range 001 to 366)
-				return _(dojo.date.getDayOfYear(dateObject), 3);
-				
-			case "k": // Hour as a decimal number using a 24-hour clock (range
-					  // 0 to 23 (space-padded))
-				if (padChar == null) { padChar = " "; }
-				return _(dateObject.getHours());
-
-			case "l": // Hour as a decimal number using a 12-hour clock (range
-					  // 1 to 12 (space-padded))
-				if (padChar == null) { padChar = " "; }
-				return _(dateObject.getHours() % 12 || 12);
-			
-			case "m": // month as a decimal number (range 01 to 12)
-				return _(dateObject.getMonth() + 1);
-				
-			case "M": // minute as a decimal number
-				return _(dateObject.getMinutes());
-			
-			case "n":
-				return "\n";
-
-			case "p": // either `am' or `pm' according to the given time value,
-				      // or the corresponding strings for the current locale
-				return info[dateObject.getHours() < 12 ? "am" : "pm"];
-				
-			case "r": // time in a.m. and p.m. notation
-				return $("I") + ":" + $("M") + ":" + $("S") + " " + $("p");
-				
-			case "R": // time in 24 hour notation
-				return $("H") + ":" + $("M");
-				
-			case "S": // second as a decimal number
-				return _(dateObject.getSeconds());
-
-			case "t":
-				return "\t";
-
-			case "T": // current time, equal to %H:%M:%S
-				return $("H") + ":" + $("M") + ":" + $("S");
-				
-			case "u": // weekday as a decimal number [1,7], with 1 representing
-				      // Monday
-				return String(dateObject.getDay() || 7);
-				
-			case "U": // week number of the current year as a decimal number,
-				      // starting with the first Sunday as the first day of the
-				      // first week
-				return _(dojo.date.getWeekOfYear(dateObject));
-
-			case "V": // week number of the year (Monday as the first day of the
-				      // week) as a decimal number [01,53]. If the week containing
-				      // 1 January has four or more days in the new year, then it 
-				      // is considered week 1. Otherwise, it is the last week of 
-				      // the previous year, and the next week is week 1.
-				return _(dojo.date.getIsoWeekOfYear(dateObject));
-				
-			case "W": // week number of the current year as a decimal number,
-				      // starting with the first Monday as the first day of the
-				      // first week
-				return _(dojo.date.getWeekOfYear(dateObject, 1));
-				
-			case "w": // day of the week as a decimal, Sunday being 0
-				return String(dateObject.getDay());
-
-			case "x": // preferred date representation for the current locale
-				      // without the time
-				return dojo.date.format(dateObject, {selector:'dateOnly', locale:locale});
-
-			case "X": // preferred time representation for the current locale
-				      // without the date
-				return dojo.date.format(dateObject, {selector:'timeOnly', locale:locale});
-
-			case "y": // year as a decimal number without a century (range 00 to
-				      // 99)
-				return _(dateObject.getFullYear()%100);
-				
-			case "Y": // year as a decimal number including the century
-				return String(dateObject.getFullYear());
-			
-			case "z": // time zone or name or abbreviation
-				var timezoneOffset = dateObject.getTimezoneOffset();
-				return (timezoneOffset > 0 ? "-" : "+") + 
-					_(Math.floor(Math.abs(timezoneOffset)/60)) + ":" +
-					_(Math.abs(timezoneOffset)%60);
-
-			case "Z": // time zone or name or abbreviation
-				return dojo.date.getTimezoneName(dateObject);
-			
-			case "%":
-				return "%";
+	function $(property) {
+		switch (property) {
+		  case "a":
+			return dojo.date.getDayShortName(dateObject, locale);
+		  case "A":
+			return dojo.date.getDayName(dateObject, locale);
+		  case "b":
+		  case "h":
+			return dojo.date.getMonthShortName(dateObject, locale);
+		  case "B":
+			return dojo.date.getMonthName(dateObject, locale);
+		  case "c":
+			return dojo.date.format(dateObject, {locale:locale});
+		  case "C":
+			return _(Math.floor(dateObject.getFullYear() / 100));
+		  case "d":
+			return _(dateObject.getDate());
+		  case "D":
+			return $("m") + "/" + $("d") + "/" + $("y");
+		  case "e":
+			if (padChar == null) {
+				padChar = " ";
+			}
+			return _(dateObject.getDate());
+		  case "f":
+			if (padChar == null) {
+				padChar = " ";
+			}
+			return _(dateObject.getMonth() + 1);
+		  case "g":
+			break;
+		  case "G":
+			dojo.unimplemented("unimplemented modifier 'G'");
+			break;
+		  case "F":
+			return $("Y") + "-" + $("m") + "-" + $("d");
+		  case "H":
+			return _(dateObject.getHours());
+		  case "I":
+			return _(dateObject.getHours() % 12 || 12);
+		  case "j":
+			return _(dojo.date.getDayOfYear(dateObject), 3);
+		  case "k":
+			if (padChar == null) {
+				padChar = " ";
+			}
+			return _(dateObject.getHours());
+		  case "l":
+			if (padChar == null) {
+				padChar = " ";
+			}
+			return _(dateObject.getHours() % 12 || 12);
+		  case "m":
+			return _(dateObject.getMonth() + 1);
+		  case "M":
+			return _(dateObject.getMinutes());
+		  case "n":
+			return "\n";
+		  case "p":
+			return info[dateObject.getHours() < 12 ? "am" : "pm"];
+		  case "r":
+			return $("I") + ":" + $("M") + ":" + $("S") + " " + $("p");
+		  case "R":
+			return $("H") + ":" + $("M");
+		  case "S":
+			return _(dateObject.getSeconds());
+		  case "t":
+			return "\t";
+		  case "T":
+			return $("H") + ":" + $("M") + ":" + $("S");
+		  case "u":
+			return String(dateObject.getDay() || 7);
+		  case "U":
+			return _(dojo.date.getWeekOfYear(dateObject));
+		  case "V":
+			return _(dojo.date.getIsoWeekOfYear(dateObject));
+		  case "W":
+			return _(dojo.date.getWeekOfYear(dateObject, 1));
+		  case "w":
+			return String(dateObject.getDay());
+		  case "x":
+			return dojo.date.format(dateObject, {selector:"dateOnly", locale:locale});
+		  case "X":
+			return dojo.date.format(dateObject, {selector:"timeOnly", locale:locale});
+		  case "y":
+			return _(dateObject.getFullYear() % 100);
+		  case "Y":
+			return String(dateObject.getFullYear());
+		  case "z":
+			var timezoneOffset = dateObject.getTimezoneOffset();
+			return (timezoneOffset > 0 ? "-" : "+") + _(Math.floor(Math.abs(timezoneOffset) / 60)) + ":" + _(Math.abs(timezoneOffset) % 60);
+		  case "Z":
+			return dojo.date.getTimezoneName(dateObject);
+		  case "%":
+			return "%";
 		}
 	}
-
-	// parse the formatting string and construct the resulting string
 	var string = "";
 	var i = 0;
 	var index = 0;
 	var switchCase = null;
-	while ((index = format.indexOf("%", i)) != -1){
+	while ((index = format.indexOf("%", i)) != -1) {
 		string += format.substring(i, index++);
-		
-		// inspect modifier flag
 		switch (format.charAt(index++)) {
-			case "_": // Pad a numeric result string with spaces.
-				padChar = " "; break;
-			case "-": // Do not pad a numeric result string.
-				padChar = ""; break;
-			case "0": // Pad a numeric result string with zeros.
-				padChar = "0"; break;
-			case "^": // Convert characters in result string to uppercase.
-				switchCase = "upper"; break;
-			case "*": // Convert characters in result string to lowercase
-				switchCase = "lower"; break;
-			case "#": // Swap the case of the result string.
-				switchCase = "swap"; break;
-			default: // no modifier flag so decrement the index
-				padChar = null; index--; break;
+		  case "_":
+			padChar = " ";
+			break;
+		  case "-":
+			padChar = "";
+			break;
+		  case "0":
+			padChar = "0";
+			break;
+		  case "^":
+			switchCase = "upper";
+			break;
+		  case "*":
+			switchCase = "lower";
+			break;
+		  case "#":
+			switchCase = "swap";
+			break;
+		  default:
+			padChar = null;
+			index--;
+			break;
 		}
-
-		// toggle case if a flag is set
 		var property = $(format.charAt(index++));
-		switch (switchCase){
-			case "upper":
-				property = property.toUpperCase();
-				break;
-			case "lower":
-				property = property.toLowerCase();
-				break;
-			case "swap": // Upper to lower, and versey-vicea
-				var compareString = property.toLowerCase();
-				var swapString = '';
-				var j = 0;
-				var ch = '';
-				while (j < property.length){
-					ch = property.charAt(j);
-					swapString += (ch == compareString.charAt(j)) ?
-						ch.toUpperCase() : ch.toLowerCase();
-					j++;
-				}
-				property = swapString;
-				break;
-			default:
-				break;
+		switch (switchCase) {
+		  case "upper":
+			property = property.toUpperCase();
+			break;
+		  case "lower":
+			property = property.toLowerCase();
+			break;
+		  case "swap":
+			var compareString = property.toLowerCase();
+			var swapString = "";
+			var j = 0;
+			var ch = "";
+			while (j < property.length) {
+				ch = property.charAt(j);
+				swapString += (ch == compareString.charAt(j)) ? ch.toUpperCase() : ch.toLowerCase();
+				j++;
+			}
+			property = swapString;
+			break;
+		  default:
+			break;
 		}
 		switchCase = null;
-		
 		string += property;
 		i = index;
 	}
 	string += format.substring(i);
-	
-	return string; // String
+	return string;
 };
-
-(function(){
-var _customFormats = [];
-dojo.date.addCustomFormats = function(/*String*/packageName, /*String*/bundleName){
-//
-// summary:
-//		Add a reference to a bundle containing localized custom formats to be
-//		used by date/time formatting and parsing routines.
-//
-// description:
-//		The user may add custom localized formats where the bundle has properties following the
-//		same naming convention used by dojo for the CLDR data: dateFormat-xxxx / timeFormat-xxxx
-//		The pattern string should match the format used by the CLDR.
-//		See dojo.date.format for details.
-//		The resources must be loaded by dojo.requireLocalization() prior to use
-
-	_customFormats.push({pkg:packageName,name:bundleName});
-};
-
-dojo.date._getGregorianBundle = function(/*String*/locale){
-	var gregorian = {};
-	dojo.lang.forEach(_customFormats, function(desc){
-		var bundle = dojo.i18n.getLocalization(desc.pkg, desc.name, locale);
-		gregorian = dojo.lang.mixin(gregorian, bundle);
-	}, this);
-	return gregorian; /*Object*/
-};
+(function () {
+	var _customFormats = [];
+	dojo.date.addCustomFormats = function (packageName, bundleName) {
+		_customFormats.push({pkg:packageName, name:bundleName});
+	};
+	dojo.date._getGregorianBundle = function (locale) {
+		var gregorian = {};
+		dojo.lang.forEach(_customFormats, function (desc) {
+			var bundle = dojo.i18n.getLocalization(desc.pkg, desc.name, locale);
+			gregorian = dojo.lang.mixin(gregorian, bundle);
+		}, this);
+		return gregorian;
+	};
 })();
-
-dojo.date.addCustomFormats("dojo.i18n.calendar","gregorian");
-dojo.date.addCustomFormats("dojo.i18n.calendar","gregorianExtras");
-
-dojo.date.getNames = function(/*String*/item, /*String*/type, /*String?*/use, /*String?*/locale){
-//
-// summary:
-//		Used to get localized strings for day or month names.
-//
-// item: 'months' || 'days'
-// type: 'wide' || 'narrow' || 'abbr' (e.g. "Monday", "Mon", or "M" respectively, in English)
-// use: 'standAlone' || 'format' (default)
-// locale: override locale used to find the names
-
+dojo.date.addCustomFormats("dojo.i18n.calendar", "gregorian");
+dojo.date.addCustomFormats("dojo.i18n.calendar", "gregorianExtras");
+dojo.date.getNames = function (item, type, use, locale) {
 	var label;
 	var lookup = dojo.date._getGregorianBundle(locale);
 	var props = [item, use, type];
-	if(use == 'standAlone'){
-		label = lookup[props.join('-')];
+	if (use == "standAlone") {
+		label = lookup[props.join("-")];
 	}
-	props[1] = 'format';
-
-	// return by copy so changes won't be made accidentally to the in-memory model
-	return (label || lookup[props.join('-')]).concat(); /*Array*/
+	props[1] = "format";
+	return (label || lookup[props.join("-")]).concat();
 };
-
-// Convenience methods
-
-dojo.date.getDayName = function(/*Date*/dateObject, /*String?*/locale){
-// summary: gets the full localized day of the week corresponding to the date object
-	return dojo.date.getNames('days', 'wide', 'format', locale)[dateObject.getDay()]; /*String*/
+dojo.date.getDayName = function (dateObject, locale) {
+	return dojo.date.getNames("days", "wide", "format", locale)[dateObject.getDay()];
 };
-
-dojo.date.getDayShortName = function(/*Date*/dateObject, /*String?*/locale){
-// summary: gets the abbreviated localized day of the week corresponding to the date object
-	return dojo.date.getNames('days', 'abbr', 'format', locale)[dateObject.getDay()]; /*String*/
+dojo.date.getDayShortName = function (dateObject, locale) {
+	return dojo.date.getNames("days", "abbr", "format", locale)[dateObject.getDay()];
 };
-
-dojo.date.getMonthName = function(/*Date*/dateObject, /*String?*/locale){
-// summary: gets the full localized month name corresponding to the date object
-	return dojo.date.getNames('months', 'wide', 'format', locale)[dateObject.getMonth()]; /*String*/
+dojo.date.getMonthName = function (dateObject, locale) {
+	return dojo.date.getNames("months", "wide", "format", locale)[dateObject.getMonth()];
 };
-
-dojo.date.getMonthShortName = function(/*Date*/dateObject, /*String?*/locale){
-// summary: gets the abbreviated localized month name corresponding to the date object
-	return dojo.date.getNames('months', 'abbr', 'format', locale)[dateObject.getMonth()]; /*String*/
+dojo.date.getMonthShortName = function (dateObject, locale) {
+	return dojo.date.getNames("months", "abbr", "format", locale)[dateObject.getMonth()];
 };
-
-//FIXME: not localized
-dojo.date.toRelativeString = function(/*Date*/dateObject){
-// summary:
-//	Returns an description in English of the date relative to the current date.  Note: this is not localized yet.  English only.
-//
-// description: Example returns:
-//	 - "1 minute ago"
-//	 - "4 minutes ago"
-//	 - "Yesterday"
-//	 - "2 days ago"
-
+dojo.date.toRelativeString = function (dateObject) {
 	var now = new Date();
 	var diff = (now - dateObject) / 1000;
 	var end = " ago";
 	var future = false;
-	if(diff < 0){
+	if (diff < 0) {
 		future = true;
 		end = " from now";
 		diff = -diff;
 	}
-
-	if(diff < 60){
+	if (diff < 60) {
 		diff = Math.round(diff);
 		return diff + " second" + (diff == 1 ? "" : "s") + end;
 	}
-	if(diff < 60*60){
-		diff = Math.round(diff/60);
+	if (diff < 60 * 60) {
+		diff = Math.round(diff / 60);
 		return diff + " minute" + (diff == 1 ? "" : "s") + end;
 	}
-	if(diff < 60*60*24){
-		diff = Math.round(diff/3600);
+	if (diff < 60 * 60 * 24) {
+		diff = Math.round(diff / 3600);
 		return diff + " hour" + (diff == 1 ? "" : "s") + end;
 	}
-	if(diff < 60*60*24*7){
-		diff = Math.round(diff/(3600*24));
-		if(diff == 1){
+	if (diff < 60 * 60 * 24 * 7) {
+		diff = Math.round(diff / (3600 * 24));
+		if (diff == 1) {
 			return future ? "Tomorrow" : "Yesterday";
-		}else{
+		} else {
 			return diff + " days" + end;
 		}
 	}
-	return dojo.date.format(dateObject); // String
+	return dojo.date.format(dateObject);
 };
-
-//FIXME: SQL methods can probably be moved to a different module without i18n deps
-
-dojo.date.toSql = function(/*Date*/dateObject, /*Boolean?*/noTime){
-// summary:
-//	Convert a Date to a SQL string
-// noTime: whether to ignore the time portion of the Date.  Defaults to false.
-
-	return dojo.date.strftime(dateObject, "%F" + !noTime ? " %T" : ""); // String
+dojo.date.toSql = function (dateObject, noTime) {
+	return dojo.date.strftime(dateObject, "%F" + !noTime ? " %T" : "");
 };
-
-dojo.date.fromSql = function(/*String*/sqlDate){
-// summary:
-//	Convert a SQL date string to a JavaScript Date object
-
+dojo.date.fromSql = function (sqlDate) {
 	var parts = sqlDate.split(/[\- :]/g);
-	while(parts.length < 6){
+	while (parts.length < 6) {
 		parts.push(0);
 	}
-	return new Date(parts[0], (parseInt(parts[1],10)-1), parts[2], parts[3], parts[4], parts[5]); // Date
+	return new Date(parts[0], (parseInt(parts[1], 10) - 1), parts[2], parts[3], parts[4], parts[5]);
 };
 
+
 __CPAN_DIR__ src/undo
 __CPAN_FILE__ src/undo/browser.js
 /*
@@ -69666,317 +47151,196 @@
 
 dojo.provide("dojo.undo.browser");
 dojo.require("dojo.io.common");
-
-try{
-	if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-		document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+'iframe_history.html')+"'></iframe>");
+try {
+	if ((!djConfig["preventBackButtonFix"]) && (!dojo.hostenv.post_load_)) {
+		document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='" + (djConfig["dojoIframeHistoryUrl"] || dojo.hostenv.getBaseScriptUri() + "iframe_history.html") + "'></iframe>");
 	}
-}catch(e){/* squelch */}
-
-if(dojo.render.html.opera){
+}
+catch (e) {
+}
+if (dojo.render.html.opera) {
 	dojo.debug("Opera is not supported with dojo.undo.browser, so back/forward detection will not work.");
 }
-
-dojo.undo.browser = {
-	initialHref: (!dj_undef("window")) ? window.location.href : "",
-	initialHash: (!dj_undef("window")) ? window.location.hash : "",
-
-	moveForward: false,
-	historyStack: [],
-	forwardStack: [],
-	historyIframe: null,
-	bookmarkAnchor: null,
-	locationTimer: null,
-
-	/**
-	 * 
-	 */
-	setInitialState: function(/*Object*/args){
-		//summary: Sets the state object and back callback for the very first page that is loaded.
-		//description: It is recommended that you call this method as part of an event listener that is registered via
-		//dojo.addOnLoad().
-		//args: Object
-		//		See the addToHistory() function for the list of valid args properties.
-		this.initialState = this._createState(this.initialHref, args, this.initialHash);
-	},
-
-	//FIXME: Would like to support arbitrary back/forward jumps. Have to rework iframeLoaded among other things.
-	//FIXME: is there a slight race condition in moz using change URL with the timer check and when
-	//       the hash gets set? I think I have seen a back/forward call in quick succession, but not consistent.
-	addToHistory: function(args){
-		//summary: adds a state object (args) to the history list. You must set
-		//djConfig.preventBackButtonFix = false to use dojo.undo.browser.
-
-		//args: Object
-		//		args can have the following properties:
-		//		To support getting back button notifications, the object argument should implement a
-		//		function called either "back", "backButton", or "handle". The string "back" will be
-		//		passed as the first and only argument to this callback.
-		//		- To support getting forward button notifications, the object argument should implement a
-		//		function called either "forward", "forwardButton", or "handle". The string "forward" will be
-		//		passed as the first and only argument to this callback.
-		//		- If you want the browser location string to change, define "changeUrl" on the object. If the
-		//		value of "changeUrl" is true, then a unique number will be appended to the URL as a fragment
-		//		identifier (http://some.domain.com/path#uniquenumber). If it is any other value that does
-		//		not evaluate to false, that value will be used as the fragment identifier. For example,
-		//		if changeUrl: 'page1', then the URL will look like: http://some.domain.com/path#page1
-	 	//		Full example:
-		//		dojo.undo.browser.addToHistory({
-		//		  back: function() { alert('back pressed'); },
-		//		  forward: function() { alert('forward pressed'); },
-		//		  changeUrl: true
-		//		});
-		//
-		//	BROWSER NOTES:
-		//  Safari 1.2: 
-		//	back button "works" fine, however it's not possible to actually
-		//	DETECT that you've moved backwards by inspecting window.location.
-		//	Unless there is some other means of locating.
-		//	FIXME: perhaps we can poll on history.length?
-		//	Safari 2.0.3+ (and probably 1.3.2+):
-		//	works fine, except when changeUrl is used. When changeUrl is used,
-		//	Safari jumps all the way back to whatever page was shown before
-		//	the page that uses dojo.undo.browser support.
-		//	IE 5.5 SP2:
-		//	back button behavior is macro. It does not move back to the
-		//	previous hash value, but to the last full page load. This suggests
-		//	that the iframe is the correct way to capture the back button in
-		//	these cases.
-		//	Don't test this page using local disk for MSIE. MSIE will not create 
-		//	a history list for iframe_history.html if served from a file: URL. 
-		//	The XML served back from the XHR tests will also not be properly 
-		//	created if served from local disk. Serve the test pages from a web 
-		//	server to test in that browser.
-		//	IE 6.0:
-		//	same behavior as IE 5.5 SP2
-		//	Firefox 1.0+:
-		//	the back button will return us to the previous hash on the same
-		//	page, thereby not requiring an iframe hack, although we do then
-		//	need to run a timer to detect inter-page movement.
-
-		//If addToHistory is called, then that means we prune the
-		//forward stack -- the user went back, then wanted to
-		//start a new forward path.
-		this.forwardStack = []; 
-
-		var hash = null;
-		var url = null;
-		if(!this.historyIframe){
-			this.historyIframe = window.frames["djhistory"];
+dojo.undo.browser = {initialHref:(!dj_undef("window")) ? window.location.href : "", initialHash:(!dj_undef("window")) ? window.location.hash : "", moveForward:false, historyStack:[], forwardStack:[], historyIframe:null, bookmarkAnchor:null, locationTimer:null, setInitialState:function (args) {
+	this.initialState = this._createState(this.initialHref, args, this.initialHash);
+}, addToHistory:function (args) {
+	this.forwardStack = [];
+	var hash = null;
+	var url = null;
+	if (!this.historyIframe) {
+		if (djConfig["useXDomain"] && !djConfig["dojoIframeHistoryUrl"]) {
+			dojo.debug("dojo.undo.browser: When using cross-domain Dojo builds," + " please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl" + " to the path on your domain to iframe_history.html");
 		}
-		if(!this.bookmarkAnchor){
-			this.bookmarkAnchor = document.createElement("a");
-			dojo.body().appendChild(this.bookmarkAnchor);
-			this.bookmarkAnchor.style.display = "none";
-		}
-		if(args["changeUrl"]){
-			hash = "#"+ ((args["changeUrl"]!==true) ? args["changeUrl"] : (new Date()).getTime());
-			
-			//If the current hash matches the new one, just replace the history object with
-			//this new one. It doesn't make sense to track different state objects for the same
-			//logical URL. This matches the browser behavior of only putting in one history
-			//item no matter how many times you click on the same #hash link, at least in Firefox
-			//and Safari, and there is no reliable way in those browsers to know if a #hash link
-			//has been clicked on multiple times. So making this the standard behavior in all browsers
-			//so that dojo.undo.browser's behavior is the same in all browsers.
-			if(this.historyStack.length == 0 && this.initialState.urlHash == hash){
-				this.initialState = this._createState(url, args, hash);
-				return;
-			}else if(this.historyStack.length > 0 && this.historyStack[this.historyStack.length - 1].urlHash == hash){
+		this.historyIframe = window.frames["djhistory"];
+	}
+	if (!this.bookmarkAnchor) {
+		this.bookmarkAnchor = document.createElement("a");
+		dojo.body().appendChild(this.bookmarkAnchor);
+		this.bookmarkAnchor.style.display = "none";
+	}
+	if (args["changeUrl"]) {
+		hash = "#" + ((args["changeUrl"] !== true) ? args["changeUrl"] : (new Date()).getTime());
+		if (this.historyStack.length == 0 && this.initialState.urlHash == hash) {
+			this.initialState = this._createState(url, args, hash);
+			return;
+		} else {
+			if (this.historyStack.length > 0 && this.historyStack[this.historyStack.length - 1].urlHash == hash) {
 				this.historyStack[this.historyStack.length - 1] = this._createState(url, args, hash);
 				return;
 			}
-
-			this.changingUrl = true;
-			setTimeout("window.location.href = '"+hash+"'; dojo.undo.browser.changingUrl = false;", 1);
-			this.bookmarkAnchor.href = hash;
-			
-			if(dojo.render.html.ie){
-				url = this._loadIframeHistory();
-
-				var oldCB = args["back"]||args["backButton"]||args["handle"];
-
-				//The function takes handleName as a parameter, in case the
-				//callback we are overriding was "handle". In that case,
-				//we will need to pass the handle name to handle.
-				var tcb = function(handleName){
-					if(window.location.hash != ""){
-						setTimeout("window.location.href = '"+hash+"';", 1);
-					}
-					//Use apply to set "this" to args, and to try to avoid memory leaks.
-					oldCB.apply(this, [handleName]);
+		}
+		this.changingUrl = true;
+		setTimeout("window.location.href = '" + hash + "'; dojo.undo.browser.changingUrl = false;", 1);
+		this.bookmarkAnchor.href = hash;
+		if (dojo.render.html.ie) {
+			url = this._loadIframeHistory();
+			var oldCB = args["back"] || args["backButton"] || args["handle"];
+			var tcb = function (handleName) {
+				if (window.location.hash != "") {
+					setTimeout("window.location.href = '" + hash + "';", 1);
 				}
-		
-				//Set interceptor function in the right place.
-				if(args["back"]){
-					args.back = tcb;
-				}else if(args["backButton"]){
+				oldCB.apply(this, [handleName]);
+			};
+			if (args["back"]) {
+				args.back = tcb;
+			} else {
+				if (args["backButton"]) {
 					args.backButton = tcb;
-				}else if(args["handle"]){
-					args.handle = tcb;
-				}
-		
-				var oldFW = args["forward"]||args["forwardButton"]||args["handle"];
-		
-				//The function takes handleName as a parameter, in case the
-				//callback we are overriding was "handle". In that case,
-				//we will need to pass the handle name to handle.
-				var tfw = function(handleName){
-					if(window.location.hash != ""){
-						window.location.href = hash;
+				} else {
+					if (args["handle"]) {
+						args.handle = tcb;
 					}
-					if(oldFW){ // we might not actually have one
-						//Use apply to set "this" to args, and to try to avoid memory leaks.
-						oldFW.apply(this, [handleName]);
-					}
 				}
-
-				//Set interceptor function in the right place.
-				if(args["forward"]){
-					args.forward = tfw;
-				}else if(args["forwardButton"]){
+			}
+			var oldFW = args["forward"] || args["forwardButton"] || args["handle"];
+			var tfw = function (handleName) {
+				if (window.location.hash != "") {
+					window.location.href = hash;
+				}
+				if (oldFW) {
+					oldFW.apply(this, [handleName]);
+				}
+			};
+			if (args["forward"]) {
+				args.forward = tfw;
+			} else {
+				if (args["forwardButton"]) {
 					args.forwardButton = tfw;
-				}else if(args["handle"]){
-					args.handle = tfw;
+				} else {
+					if (args["handle"]) {
+						args.handle = tfw;
+					}
 				}
-
-			}else if(dojo.render.html.moz){
-				// start the timer
-				if(!this.locationTimer){
+			}
+		} else {
+			if (dojo.render.html.moz) {
+				if (!this.locationTimer) {
 					this.locationTimer = setInterval("dojo.undo.browser.checkLocation();", 200);
 				}
 			}
-		}else{
-			url = this._loadIframeHistory();
 		}
-
-		this.historyStack.push(this._createState(url, args, hash));
-	},
-
-	checkLocation: function(){
-		//summary: private method. Do not call this directly.
-		if (!this.changingUrl){
-			var hsl = this.historyStack.length;
-
-			if((window.location.hash == this.initialHash||window.location.href == this.initialHref)&&(hsl == 1)){
-				// FIXME: could this ever be a forward button?
-				// we can't clear it because we still need to check for forwards. Ugg.
-				// clearInterval(this.locationTimer);
-				this.handleBackButton();
+	} else {
+		url = this._loadIframeHistory();
+	}
+	this.historyStack.push(this._createState(url, args, hash));
+}, checkLocation:function () {
+	if (!this.changingUrl) {
+		var hsl = this.historyStack.length;
+		if ((window.location.hash == this.initialHash || window.location.href == this.initialHref) && (hsl == 1)) {
+			this.handleBackButton();
+			return;
+		}
+		if (this.forwardStack.length > 0) {
+			if (this.forwardStack[this.forwardStack.length - 1].urlHash == window.location.hash) {
+				this.handleForwardButton();
 				return;
 			}
-			
-			// first check to see if we could have gone forward. We always halt on
-			// a no-hash item.
-			if(this.forwardStack.length > 0){
-				if(this.forwardStack[this.forwardStack.length-1].urlHash == window.location.hash){
-					this.handleForwardButton();
-					return;
-				}
-			}
-	
-			// ok, that didn't work, try someplace back in the history stack
-			if((hsl >= 2)&&(this.historyStack[hsl-2])){
-				if(this.historyStack[hsl-2].urlHash==window.location.hash){
-					this.handleBackButton();
-					return;
-				}
-			}
 		}
-	},
-
-	iframeLoaded: function(evt, ifrLoc){
-		//summary: private method. Do not call this directly.
-		if(!dojo.render.html.opera){
-			var query = this._getUrlQuery(ifrLoc.href);
-			if(query == null){ 
-				// alert("iframeLoaded");
-				// we hit the end of the history, so we should go back
-				if(this.historyStack.length == 1){
-					this.handleBackButton();
-				}
+		if ((hsl >= 2) && (this.historyStack[hsl - 2])) {
+			if (this.historyStack[hsl - 2].urlHash == window.location.hash) {
+				this.handleBackButton();
 				return;
 			}
-			if(this.moveForward){
-				// we were expecting it, so it's not either a forward or backward movement
-				this.moveForward = false;
-				return;
-			}
-	
-			//Check the back stack first, since it is more likely.
-			//Note that only one step back or forward is supported.
-			if(this.historyStack.length >= 2 && query == this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
+		}
+	}
+}, iframeLoaded:function (evt, ifrLoc) {
+	if (!dojo.render.html.opera) {
+		var query = this._getUrlQuery(ifrLoc.href);
+		if (query == null) {
+			if (this.historyStack.length == 1) {
 				this.handleBackButton();
 			}
-			else if(this.forwardStack.length > 0 && query == this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
+			return;
+		}
+		if (this.moveForward) {
+			this.moveForward = false;
+			return;
+		}
+		if (this.historyStack.length >= 2 && query == this._getUrlQuery(this.historyStack[this.historyStack.length - 2].url)) {
+			this.handleBackButton();
+		} else {
+			if (this.forwardStack.length > 0 && query == this._getUrlQuery(this.forwardStack[this.forwardStack.length - 1].url)) {
 				this.handleForwardButton();
 			}
 		}
-	},
-
-	handleBackButton: function(){
-		//summary: private method. Do not call this directly.
-
-		//The "current" page is always at the top of the history stack.
-		var current = this.historyStack.pop();
-		if(!current){ return; }
-		var last = this.historyStack[this.historyStack.length-1];
-		if(!last && this.historyStack.length == 0){
-			last = this.initialState;
-		}
-		if (last){
-			if(last.kwArgs["back"]){
-				last.kwArgs["back"]();
-			}else if(last.kwArgs["backButton"]){
+	}
+}, handleBackButton:function () {
+	var current = this.historyStack.pop();
+	if (!current) {
+		return;
+	}
+	var last = this.historyStack[this.historyStack.length - 1];
+	if (!last && this.historyStack.length == 0) {
+		last = this.initialState;
+	}
+	if (last) {
+		if (last.kwArgs["back"]) {
+			last.kwArgs["back"]();
+		} else {
+			if (last.kwArgs["backButton"]) {
 				last.kwArgs["backButton"]();
-			}else if(last.kwArgs["handle"]){
-				last.kwArgs.handle("back");
+			} else {
+				if (last.kwArgs["handle"]) {
+					last.kwArgs.handle("back");
+				}
 			}
 		}
-		this.forwardStack.push(current);
-	},
-
-	handleForwardButton: function(){
-		//summary: private method. Do not call this directly.
-
-		var last = this.forwardStack.pop();
-		if(!last){ return; }
-		if(last.kwArgs["forward"]){
-			last.kwArgs.forward();
-		}else if(last.kwArgs["forwardButton"]){
+	}
+	this.forwardStack.push(current);
+}, handleForwardButton:function () {
+	var last = this.forwardStack.pop();
+	if (!last) {
+		return;
+	}
+	if (last.kwArgs["forward"]) {
+		last.kwArgs.forward();
+	} else {
+		if (last.kwArgs["forwardButton"]) {
 			last.kwArgs.forwardButton();
-		}else if(last.kwArgs["handle"]){
-			last.kwArgs.handle("forward");
+		} else {
+			if (last.kwArgs["handle"]) {
+				last.kwArgs.handle("forward");
+			}
 		}
-		this.historyStack.push(last);
-	},
-
-	_createState: function(url, args, hash){
-		//summary: private method. Do not call this directly.
-
-		return {"url": url, "kwArgs": args, "urlHash": hash};	//Object
-	},
-
-	_getUrlQuery: function(url){
-		//summary: private method. Do not call this directly.
-		var segments = url.split("?");
-		if (segments.length < 2){
-			return null; //null
-		}
-		else{
-			return segments[1]; //String
-		}
-	},
-	
-	_loadIframeHistory: function(){
-		//summary: private method. Do not call this directly.
-		var url = dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
-		this.moveForward = true;
-		dojo.io.setIFrameSrc(this.historyIframe, url, false);	
-		return url; //String
 	}
-}
+	this.historyStack.push(last);
+}, _createState:function (url, args, hash) {
+	return {"url":url, "kwArgs":args, "urlHash":hash};
+}, _getUrlQuery:function (url) {
+	var segments = url.split("?");
+	if (segments.length < 2) {
+		return null;
+	} else {
+		return segments[1];
+	}
+}, _loadIframeHistory:function () {
+	var url = (djConfig["dojoIframeHistoryUrl"] || dojo.hostenv.getBaseScriptUri() + "iframe_history.html") + "?" + (new Date()).getTime();
+	this.moveForward = true;
+	dojo.io.setIFrameSrc(this.historyIframe, url, false);
+	return url;
+}};
 
+
 __CPAN_FILE__ src/undo/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -69991,6 +47355,7 @@
 dojo.require("dojo.undo.Manager");
 dojo.provide("dojo.undo.*");
 
+
 __CPAN_FILE__ src/undo/Manager.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -70004,249 +47369,143 @@
 
 dojo.provide("dojo.undo.Manager");
 dojo.require("dojo.lang.common");
-
-dojo.undo.Manager = function(/*dojo.undo.Manager Object */parent) {
-	//summary: Constructor for a dojo.undo.Manager object.
+dojo.undo.Manager = function (parent) {
 	this.clear();
 	this._parent = parent;
 };
-dojo.extend(dojo.undo.Manager, {
-	_parent: null,
-	_undoStack: null,
-	_redoStack: null,
-	_currentManager: null,
-
-	canUndo: false,
-	canRedo: false,
-
-	isUndoing: false,
-	isRedoing: false,
-
-	onUndo: function(/*Object*/manager, /*Object*/item) {
-		//summary: An event that fires when undo is called.
-		//It allows you to hook in and update your code (UI?) as necessary.
-
-		//manager: Object: the dojo.undo.Manager instance.
-		//item: Object: The object stored by the undo stack. It has the following properties:
-		//		undo: Function: the undo function for this item in the stack.
-		//		redo: Function: the redo function for this item in the stack. May be null.
-		//		description: String: description of this item. May be null.
-	},
-	onRedo: function(/*Object*/manager, /*Object*/item) {
-		//summary: An event that fires when redo is called.
-		//It allows you to hook in and update your code (UI?) as necessary.
-
-		//manager: Object: the dojo.undo.Manager instance.
-		//item: Object: The object stored by the redo stack. It has the following properties:
-		//		undo: Function: the undo function for this item in the stack.
-		//		redo: Function: the redo function for this item in the stack. May be null.
-		//		description: String: description of this item. May be null.
-	},
-
-	onUndoAny: function(/*Object*/manager, /*Object*/item) {
-		//summary: An event that fires when *any* undo action is done, 
-		//which means you'll have one for every item
-		//in a transaction. This is usually only useful for debugging.
-		//See notes for onUndo for info on the function parameters.
-	},
-	
-	onRedoAny: function(/*Object*/manager, /*Object*/item) {
-		//summary: An event that fires when *any* redo action is done, 
-		//which means you'll have one for every item
-		//in a transaction. This is usually only useful for debugging.
-		//See notes for onRedo for info on the function parameters.
-	},
-
-	_updateStatus: function() {
-		//summary: Private method used to set some internal state.
-		this.canUndo = this._undoStack.length > 0;
-		this.canRedo = this._redoStack.length > 0;
-	},
-
-	clear: function() {
-		//summary: Clears this instance of dojo.undo.Manager.
-		this._undoStack = [];
-		this._redoStack = [];
-		this._currentManager = this;
-
-		this.isUndoing = false;
-		this.isRedoing = false;
-
-		this._updateStatus();
-	},
-
-	undo: function() {
-		//summary: Call this method to go one place back in the undo
-		//stack. Returns true if the manager successfully completed
-		//the undo step.
-		if(!this.canUndo) { return false; /*boolean*/}
-
-		this.endAllTransactions();
-
-		this.isUndoing = true;
-		var top = this._undoStack.pop();
-		if(top instanceof dojo.undo.Manager){
-			top.undoAll();
-		}else{
-			top.undo();
+dojo.extend(dojo.undo.Manager, {_parent:null, _undoStack:null, _redoStack:null, _currentManager:null, canUndo:false, canRedo:false, isUndoing:false, isRedoing:false, onUndo:function (manager, item) {
+}, onRedo:function (manager, item) {
+}, onUndoAny:function (manager, item) {
+}, onRedoAny:function (manager, item) {
+}, _updateStatus:function () {
+	this.canUndo = this._undoStack.length > 0;
+	this.canRedo = this._redoStack.length > 0;
+}, clear:function () {
+	this._undoStack = [];
+	this._redoStack = [];
+	this._currentManager = this;
+	this.isUndoing = false;
+	this.isRedoing = false;
+	this._updateStatus();
+}, undo:function () {
+	if (!this.canUndo) {
+		return false;
+	}
+	this.endAllTransactions();
+	this.isUndoing = true;
+	var top = this._undoStack.pop();
+	if (top instanceof dojo.undo.Manager) {
+		top.undoAll();
+	} else {
+		top.undo();
+	}
+	if (top.redo) {
+		this._redoStack.push(top);
+	}
+	this.isUndoing = false;
+	this._updateStatus();
+	this.onUndo(this, top);
+	if (!(top instanceof dojo.undo.Manager)) {
+		this.getTop().onUndoAny(this, top);
+	}
+	return true;
+}, redo:function () {
+	if (!this.canRedo) {
+		return false;
+	}
+	this.isRedoing = true;
+	var top = this._redoStack.pop();
+	if (top instanceof dojo.undo.Manager) {
+		top.redoAll();
+	} else {
+		top.redo();
+	}
+	this._undoStack.push(top);
+	this.isRedoing = false;
+	this._updateStatus();
+	this.onRedo(this, top);
+	if (!(top instanceof dojo.undo.Manager)) {
+		this.getTop().onRedoAny(this, top);
+	}
+	return true;
+}, undoAll:function () {
+	while (this._undoStack.length > 0) {
+		this.undo();
+	}
+}, redoAll:function () {
+	while (this._redoStack.length > 0) {
+		this.redo();
+	}
+}, push:function (undo, redo, description) {
+	if (!undo) {
+		return;
+	}
+	if (this._currentManager == this) {
+		this._undoStack.push({undo:undo, redo:redo, description:description});
+	} else {
+		this._currentManager.push.apply(this._currentManager, arguments);
+	}
+	this._redoStack = [];
+	this._updateStatus();
+}, concat:function (manager) {
+	if (!manager) {
+		return;
+	}
+	if (this._currentManager == this) {
+		for (var x = 0; x < manager._undoStack.length; x++) {
+			this._undoStack.push(manager._undoStack[x]);
 		}
-		if(top.redo){
-			this._redoStack.push(top);
+		if (manager._undoStack.length > 0) {
+			this._redoStack = [];
 		}
-		this.isUndoing = false;
-
 		this._updateStatus();
-		this.onUndo(this, top);
-		if(!(top instanceof dojo.undo.Manager)) {
-			this.getTop().onUndoAny(this, top);
-		}
-		return true; //boolean
-	},
-
-	redo: function() {
-		//summary: Call this method to go one place forward in the redo
-		//stack. Returns true if the manager successfully completed
-		//the redo step.
-		if(!this.canRedo){ return false; /*boolean*/}
-
-		this.isRedoing = true;
-		var top = this._redoStack.pop();
-		if(top instanceof dojo.undo.Manager) {
-			top.redoAll();
-		}else{
-			top.redo();
-		}
-		this._undoStack.push(top);
-		this.isRedoing = false;
-
-		this._updateStatus();
-		this.onRedo(this, top);
-		if(!(top instanceof dojo.undo.Manager)){
-			this.getTop().onRedoAny(this, top);
-		}
-		return true; //boolean
-	},
-
-	undoAll: function() {
-		//summary: Call undo as many times as it takes to get all the
-		//way through the undo stack.
-		while(this._undoStack.length > 0) {
-			this.undo();
-		}
-	},
-
-	redoAll: function() {
-		//summary: Call redo as many times as it takes to get all the
-		//way through the redo stack.
-		while(this._redoStack.length > 0) {
-			this.redo();
-		}
-	},
-
-	push: function(/*Function*/undo, /*Function?*/redo, /*String?*/description) {
-		//summary: add something to the undo manager.
-		if(!undo) { return; }
-
-		if(this._currentManager == this) {
-			this._undoStack.push({
-				undo: undo,
-				redo: redo,
-				description: description
-			});
-		} else {
-			this._currentManager.push.apply(this._currentManager, arguments);
-		}
-		// adding a new undo-able item clears out the redo stack
-		this._redoStack = [];
-		this._updateStatus();
-	},
-
-	concat: function(/*Object*/manager) {
-		//summary: Adds all undo and redo stack items to another dojo.undo.Manager
-		//instance.
-		if ( !manager ) { return; }
-
-		if (this._currentManager == this ) {
-			for(var x=0; x < manager._undoStack.length; x++) {
-				this._undoStack.push(manager._undoStack[x]);
-			}
-			// adding a new undo-able item clears out the redo stack
-			if (manager._undoStack.length > 0) {
-				this._redoStack = [];
-			}
-			this._updateStatus();
-		} else {
-			this._currentManager.concat.apply(this._currentManager, arguments);
-		}
-	},
-
-	beginTransaction: function(/*String?*/description) {
-		//summary: All undo/redo items added via
-		//push() after this call is made but before endTransaction() is called are
-		//treated as one item in the undo and redo stacks. When undo() or redo() is
-		//called then undo/redo is called on all of the items in the transaction.
-		//Transactions can be nested.
-		if(this._currentManager == this) {
-			var mgr = new dojo.undo.Manager(this);
-			mgr.description = description ? description : "";
-			this._undoStack.push(mgr);
-			this._currentManager = mgr;
-			return mgr;
-		} else {
-			//for nested transactions need to make sure the top level _currentManager is set
-			this._currentManager = this._currentManager.beginTransaction.apply(this._currentManager, arguments);
-		}
-	},
-
-	endTransaction: function(flatten /* optional */) {
-		//summary: Ends a transaction started by beginTransaction(). See beginTransaction()
-		//for details.
-		
-		//flatten: boolean: If true, adds the current transaction to the parent's
-		//undo stack.
-	
-		if(this._currentManager == this) {
-			if(this._parent) {
-				this._parent._currentManager = this._parent;
-				// don't leave empty transactions hangin' around
-				if(this._undoStack.length == 0 || flatten) {
-					var idx = dojo.lang.find(this._parent._undoStack, this);
-					if (idx >= 0) {
-						this._parent._undoStack.splice(idx, 1);
-						//add the current transaction to parents undo stack
-						if (flatten) {
-							for(var x=0; x < this._undoStack.length; x++){
-								this._parent._undoStack.splice(idx++, 0, this._undoStack[x]);
-							}
-							this._updateStatus();
+	} else {
+		this._currentManager.concat.apply(this._currentManager, arguments);
+	}
+}, beginTransaction:function (description) {
+	if (this._currentManager == this) {
+		var mgr = new dojo.undo.Manager(this);
+		mgr.description = description ? description : "";
+		this._undoStack.push(mgr);
+		this._currentManager = mgr;
+		return mgr;
+	} else {
+		this._currentManager = this._currentManager.beginTransaction.apply(this._currentManager, arguments);
+	}
+}, endTransaction:function (flatten) {
+	if (this._currentManager == this) {
+		if (this._parent) {
+			this._parent._currentManager = this._parent;
+			if (this._undoStack.length == 0 || flatten) {
+				var idx = dojo.lang.find(this._parent._undoStack, this);
+				if (idx >= 0) {
+					this._parent._undoStack.splice(idx, 1);
+					if (flatten) {
+						for (var x = 0; x < this._undoStack.length; x++) {
+							this._parent._undoStack.splice(idx++, 0, this._undoStack[x]);
 						}
+						this._updateStatus();
 					}
 				}
-				return this._parent;
 			}
-		} else {
-			//for nested transactions need to make sure the top level _currentManager is set
-			this._currentManager = this._currentManager.endTransaction.apply(this._currentManager, arguments);
+			return this._parent;
 		}
-	},
-
-	endAllTransactions: function() {
-		//summary: Ends all nested transactions.
-		while(this._currentManager != this) {
-			this.endTransaction();
-		}
-	},
-
-	getTop: function() {
-		//summary: Finds the top parent of an undo manager.
-		if(this._parent) {
-			return this._parent.getTop();
-		} else {
-			return this;
-		}
+	} else {
+		this._currentManager = this._currentManager.endTransaction.apply(this._currentManager, arguments);
 	}
-});
+}, endAllTransactions:function () {
+	while (this._currentManager != this) {
+		this.endTransaction();
+	}
+}, getTop:function () {
+	if (this._parent) {
+		return this._parent.getTop();
+	} else {
+		return this;
+	}
+}});
 
+
 __CPAN_DIR__ src/flash
 __CPAN_DIR__ src/flash/flash8
 __CPAN_FILE__ src/flash/flash8/ExpressInstall.as
@@ -70837,280 +48096,170 @@
 */
 
 dojo.provide("dojo.lang.array");
-
 dojo.require("dojo.lang.common");
-
-// FIXME: Is this worthless since you can do: if(name in obj)
-// is this the right place for this?
-
-dojo.lang.mixin(dojo.lang, {
-	has: function(/*Object*/obj, /*String*/name){
-		// summary: is there a property with the passed name in obj?
-		try{
-			return typeof obj[name] != "undefined"; // Boolean
-		}catch(e){ return false; } // Boolean
-	},
-
-	isEmpty: function(/*Object*/obj){
-		// summary:
-		//		can be used to determine if the passed object is "empty". In
-		//		the case of array-like objects, the length, property is
-		//		examined, but for other types of objects iteration is used to
-		//		examine the iterable "surface area" to determine if any
-		//		non-prototypal properties have been assigned. This iteration is
-		//		prototype-extension safe.
-		if(dojo.lang.isObject(obj)){
-			var tmp = {};
-			var count = 0;
-			for(var x in obj){
-				if(obj[x] && (!tmp[x])){
-					count++;
-					break;
-				} 
+dojo.lang.mixin(dojo.lang, {has:function (obj, name) {
+	try {
+		return typeof obj[name] != "undefined";
+	}
+	catch (e) {
+		return false;
+	}
+}, isEmpty:function (obj) {
+	if (dojo.lang.isObject(obj)) {
+		var tmp = {};
+		var count = 0;
+		for (var x in obj) {
+			if (obj[x] && (!tmp[x])) {
+				count++;
+				break;
 			}
-			return count == 0; // boolean
-		}else if(dojo.lang.isArrayLike(obj) || dojo.lang.isString(obj)){
-			return obj.length == 0; // boolean
 		}
-	},
-
-	map: function(/*Array*/arr, /*Object|Function*/obj, /*Function?*/unary_func){
-		// summary:
-		//		returns a new array constituded from the return values of
-		//		passing each element of arr into unary_func. The obj parameter
-		//		may be passed to enable the passed function to be called in
-		//		that scope. In environments that support JavaScript 1.6, this
-		//		function is a passthrough to the built-in map() function
-		//		provided by Array instances. For details on this, see:
-		// 			http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:map
-		// examples:
-		//		dojo.lang.map([1, 2, 3, 4], function(item){ return item+1 });
-		//		// returns [2, 3, 4, 5]
-		var isString = dojo.lang.isString(arr);
-		if(isString){
-			// arr: String
-			arr = arr.split("");
+		return count == 0;
+	} else {
+		if (dojo.lang.isArrayLike(obj) || dojo.lang.isString(obj)) {
+			return obj.length == 0;
 		}
-		if(dojo.lang.isFunction(obj)&&(!unary_func)){
-			unary_func = obj;
-			obj = dj_global;
-		}else if(dojo.lang.isFunction(obj) && unary_func){
-			// ff 1.5 compat
+	}
+}, map:function (arr, obj, unary_func) {
+	var isString = dojo.lang.isString(arr);
+	if (isString) {
+		arr = arr.split("");
+	}
+	if (dojo.lang.isFunction(obj) && (!unary_func)) {
+		unary_func = obj;
+		obj = dj_global;
+	} else {
+		if (dojo.lang.isFunction(obj) && unary_func) {
 			var tmpObj = obj;
 			obj = unary_func;
 			unary_func = tmpObj;
 		}
-		if(Array.map){
-			var outArr = Array.map(arr, unary_func, obj);
-		}else{
-			var outArr = [];
-			for(var i=0;i<arr.length;++i){
-				outArr.push(unary_func.call(obj, arr[i]));
-			}
+	}
+	if (Array.map) {
+		var outArr = Array.map(arr, unary_func, obj);
+	} else {
+		var outArr = [];
+		for (var i = 0; i < arr.length; ++i) {
+			outArr.push(unary_func.call(obj, arr[i]));
 		}
-		if(isString) {
-			return outArr.join(""); // String
-		} else {
-			return outArr; // Array
-		}
-	},
-
-	reduce: function(/*Array*/arr, initialValue, /*Object|Function*/obj, /*Function*/binary_func){
-		// summary:
-		// 		similar to Python's builtin reduce() function. The result of
-		// 		the previous computation is passed as the first argument to
-		// 		binary_func along with the next value from arr. The result of
-		// 		this call is used along with the subsequent value from arr, and
-		// 		this continues until arr is exhausted. The return value is the
-		// 		last result. The "obj" and "initialValue" parameters may be
-		// 		safely omitted and the order of obj and binary_func may be
-		// 		reversed. The default order of the obj and binary_func argument
-		// 		will probably be reversed in a future release, and this call
-		// 		order is supported today.
-		// examples:
-		//		dojo.lang.reduce([1, 2, 3, 4], function(last, next){ return last+next});
-		//		returns 10
-		var reducedValue = initialValue;
-		if(arguments.length == 1){
-			dojo.debug("dojo.lang.reduce called with too few arguments!");
-			return false;
-		}else if(arguments.length == 2){
-			binary_func = initialValue;
-			reducedValue = arr.shift();
-		}else if(arguments.lenght == 3){
-			if(dojo.lang.isFunction(obj)){
+	}
+	if (isString) {
+		return outArr.join("");
+	} else {
+		return outArr;
+	}
+}, reduce:function (arr, initialValue, obj, binary_func) {
+	var reducedValue = initialValue;
+	if (arguments.length == 2) {
+		binary_func = initialValue;
+		reducedValue = arr[0];
+		arr = arr.slice(1);
+	} else {
+		if (arguments.length == 3) {
+			if (dojo.lang.isFunction(obj)) {
 				binary_func = obj;
 				obj = null;
 			}
-		}else{
-			// un-fsck the default order
-			// FIXME:
-			//		could be wrong for some strange function object cases. Not
-			//		sure how to test for them.
-			if(dojo.lang.isFunction(obj)){
+		} else {
+			if (dojo.lang.isFunction(obj)) {
 				var tmp = binary_func;
 				binary_func = obj;
 				obj = tmp;
 			}
 		}
-
-		var ob = obj ? obj : dj_global;
-		dojo.lang.map(arr, 
-			function(val){
-				reducedValue = binary_func.call(ob, reducedValue, val);
-			}
-		);
-		return reducedValue;
-	},
-
-	forEach: function(/*Array*/anArray, /*Function*/callback, /*Object?*/thisObject){
-		// summary:
-		//		for every item in anArray, call callback with that item as its
-		//		only parameter. Return values are ignored. This funciton
-		//		corresponds (and wraps) the JavaScript 1.6 forEach method. For
-		//		more details, see:
-		//			http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:forEach
-		if(dojo.lang.isString(anArray)){
-			// anArray: String
-			anArray = anArray.split(""); 
+	}
+	var ob = obj || dj_global;
+	dojo.lang.map(arr, function (val) {
+		reducedValue = binary_func.call(ob, reducedValue, val);
+	});
+	return reducedValue;
+}, forEach:function (anArray, callback, thisObject) {
+	if (dojo.lang.isString(anArray)) {
+		anArray = anArray.split("");
+	}
+	if (Array.forEach) {
+		Array.forEach(anArray, callback, thisObject);
+	} else {
+		if (!thisObject) {
+			thisObject = dj_global;
 		}
-		if(Array.forEach){
-			Array.forEach(anArray, callback, thisObject);
-		}else{
-			// FIXME: there are several ways of handilng thisObject. Is dj_global always the default context?
-			if(!thisObject){
-				thisObject=dj_global;
-			}
-			for(var i=0,l=anArray.length; i<l; i++){ 
-				callback.call(thisObject, anArray[i], i, anArray);
-			}
+		for (var i = 0, l = anArray.length; i < l; i++) {
+			callback.call(thisObject, anArray[i], i, anArray);
 		}
-	},
-
-	_everyOrSome: function(/*Boolean*/every, /*Array*/arr, /*Function*/callback, /*Object?*/thisObject){
-		if(dojo.lang.isString(arr)){ 
-			//arr: String
-			arr = arr.split(""); 
+	}
+}, _everyOrSome:function (every, arr, callback, thisObject) {
+	if (dojo.lang.isString(arr)) {
+		arr = arr.split("");
+	}
+	if (Array.every) {
+		return Array[every ? "every" : "some"](arr, callback, thisObject);
+	} else {
+		if (!thisObject) {
+			thisObject = dj_global;
 		}
-		if(Array.every){
-			return Array[ every ? "every" : "some" ](arr, callback, thisObject);
-		}else{
-			if(!thisObject){
-				thisObject = dj_global;
-			}
-			for(var i=0,l=arr.length; i<l; i++){
-				var result = callback.call(thisObject, arr[i], i, arr);
-				if(every && !result){
-					return false; // Boolean
-				}else if((!every)&&(result)){
-					return true; // Boolean
+		for (var i = 0, l = arr.length; i < l; i++) {
+			var result = callback.call(thisObject, arr[i], i, arr);
+			if (every && !result) {
+				return false;
+			} else {
+				if ((!every) && (result)) {
+					return true;
 				}
 			}
-			return Boolean(every); // Boolean
 		}
-	},
-
-	every: function(/*Array*/arr, /*Function*/callback, /*Object?*/thisObject){
-		// summary:
-		//		determines whether or not every item in the array satisfies the
-		//		condition implemented by callback. thisObject may be used to
-		//		scope the call to callback. The function signature is derived
-		//		from the JavaScript 1.6 Array.every() function. More
-		//		information on this can be found here:
-		//			http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:every
-		// examples:
-		//		dojo.lang.every([1, 2, 3, 4], function(item){ return item>1; });
-		//		// returns false
-		//		dojo.lang.every([1, 2, 3, 4], function(item){ return item>0; });
-		//		// returns true 
-		return this._everyOrSome(true, arr, callback, thisObject); // Boolean
-	},
-
-	some: function(/*Array*/arr, /*Function*/callback, /*Object?*/thisObject){
-		// summary:
-		//		determines whether or not any item in the array satisfies the
-		//		condition implemented by callback. thisObject may be used to
-		//		scope the call to callback. The function signature is derived
-		//		from the JavaScript 1.6 Array.some() function. More
-		//		information on this can be found here:
-		//			http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:some
-		// examples:
-		//		dojo.lang.some([1, 2, 3, 4], function(item){ return item>1; });
-		//		// returns true
-		//		dojo.lang.some([1, 2, 3, 4], function(item){ return item<1; });
-		//		// returns false
-		return this._everyOrSome(false, arr, callback, thisObject); // Boolean
-	},
-
-	filter: function(/*Array*/arr, /*Function*/callback, /*Object?*/thisObject){
-		// summary:
-		//		returns a new Array with those items from arr that match the
-		//		condition implemented by callback.thisObject may be used to
-		//		scope the call to callback. The function signature is derived
-		//		from the JavaScript 1.6 Array.filter() function, although
-		//		special accomidation is made in our implementation for strings.
-		//		More information on the JS 1.6 API can be found here:
-		//			http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:filter
-		// examples:
-		//		dojo.lang.some([1, 2, 3, 4], function(item){ return item>1; });
-		//		// returns [2, 3, 4]
-		var isString = dojo.lang.isString(arr);
-		if(isString){ /*arr: String*/arr = arr.split(""); }
-		var outArr;
-		if(Array.filter){
-			outArr = Array.filter(arr, callback, thisObject);
-		}else{
-			if(!thisObject){
-				if(arguments.length >= 3){ dojo.raise("thisObject doesn't exist!"); }
-				thisObject = dj_global;
+		return Boolean(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);
+}, filter:function (arr, callback, thisObject) {
+	var isString = dojo.lang.isString(arr);
+	if (isString) {
+		arr = arr.split("");
+	}
+	var outArr;
+	if (Array.filter) {
+		outArr = Array.filter(arr, callback, thisObject);
+	} else {
+		if (!thisObject) {
+			if (arguments.length >= 3) {
+				dojo.raise("thisObject doesn't exist!");
 			}
-
-			outArr = [];
-			for(var i = 0; i < arr.length; i++){
-				if(callback.call(thisObject, arr[i], i, arr)){
-					outArr.push(arr[i]);
-				}
+			thisObject = dj_global;
+		}
+		outArr = [];
+		for (var i = 0; i < arr.length; i++) {
+			if (callback.call(thisObject, arr[i], i, arr)) {
+				outArr.push(arr[i]);
 			}
 		}
-		if(isString){
-			return outArr.join(""); // String
+	}
+	if (isString) {
+		return outArr.join("");
+	} else {
+		return outArr;
+	}
+}, unnest:function () {
+	var out = [];
+	for (var i = 0; i < arguments.length; i++) {
+		if (dojo.lang.isArrayLike(arguments[i])) {
+			var add = dojo.lang.unnest.apply(this, arguments[i]);
+			out = out.concat(add);
 		} else {
-			return outArr; // Array
+			out.push(arguments[i]);
 		}
-	},
-
-	unnest: function(/* ... */){
-		// summary:
-		//		Creates a 1-D array out of all the arguments passed,
-		//		unravelling any array-like objects in the process
-		// usage:
-		//		unnest(1, 2, 3) ==> [1, 2, 3]
-		//		unnest(1, [2, [3], [[[4]]]]) ==> [1, 2, 3, 4]
-
-		var out = [];
-		for(var i = 0; i < arguments.length; i++){
-			if(dojo.lang.isArrayLike(arguments[i])){
-				var add = dojo.lang.unnest.apply(this, arguments[i]);
-				out = out.concat(add);
-			}else{
-				out.push(arguments[i]);
-			}
-		}
-		return out; // Array
-	},
-
-	toArray: function(/*Object*/arrayLike, /*Number*/startOffset){
-		// summary:
-		//		Converts an array-like object (i.e. arguments, DOMCollection)
-		//		to an array. Returns a new Array object.
-		var array = [];
-		for(var i = startOffset||0; i < arrayLike.length; i++){
-			array.push(arrayLike[i]);
-		}
-		return array; // Array
 	}
-});
+	return out;
+}, toArray:function (arrayLike, startOffset) {
+	var array = [];
+	for (var i = startOffset || 0; i < arrayLike.length; i++) {
+		array.push(arrayLike[i]);
+	}
+	return array;
+}});
 
+
 __CPAN_FILE__ src/lang/assert.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -71123,112 +48272,53 @@
 */
 
 dojo.provide("dojo.lang.assert");
-
 dojo.require("dojo.lang.common");
 dojo.require("dojo.lang.array");
 dojo.require("dojo.lang.type");
-
-dojo.lang.assert = function(/* boolean */ booleanValue, /* string? */ message){
-	/* summary: 
-	 *   Throws an exception if the assertion fails.
-	 * description: 
-	 *   If the asserted condition is true, this method does nothing. If the
-	 *   condition is false, we throw an error with a error message. 
-	 * booleanValue: Must be true for the assertion to succeed.
-	 * message: A string describing the assertion.
-	 */
-
-	 // throws: Throws an Error if 'booleanValue' is false.
-	 if(!booleanValue){
-		var errorMessage = "An assert statement failed.\n" +
-			"The method dojo.lang.assert() was called with a 'false' value.\n";
-		if(message){
+dojo.lang.assert = function (booleanValue, message) {
+	if (!booleanValue) {
+		var errorMessage = "An assert statement failed.\n" + "The method dojo.lang.assert() was called with a 'false' value.\n";
+		if (message) {
 			errorMessage += "Here's the assert message:\n" + message + "\n";
 		}
-		// Use throw instead of dojo.raise, until bug #264 is fixed:
-		// dojo.raise(errorMessage);
 		throw new Error(errorMessage);
 	}
-}
-
-dojo.lang.assertType = function(/* anything */ value, /* misc. */ type, /* object? */ keywordParameters){
-	/* summary: 
-	 *   Throws an exception if 'value' is not of type 'type'
-	 * description: 
-	 *   Given a value and a data type, this method checks the type of the value
-	 *   to make sure it matches the data type, and throws an exception if there
-	 *   is a mismatch.
-	 * value: Any literal value or object instance.
-	 * type: A class of object, or a literal type, or the string name of a type, or an array with a list of types.
-	 * keywordParameters: {optional: boolean}
-	 */
-	 
-	/* examples: 
-	 *   dojo.lang.assertType("foo", String);
-	 *   dojo.lang.assertType(12345, Number);
-	 *   dojo.lang.assertType(false, Boolean);
-	 *   dojo.lang.assertType([6, 8], Array);
-	 *   dojo.lang.assertType(dojo.lang.assertType, Function);
-	 *   dojo.lang.assertType({foo: "bar"}, Object);
-	 *   dojo.lang.assertType(new Date(), Date);
-	 *   dojo.lang.assertType(null, Array, {optional: true});
-	 * throws: Throws an Error if 'value' is not of type 'type'.
-	 */
+};
+dojo.lang.assertType = function (value, type, keywordParameters) {
 	if (dojo.lang.isString(keywordParameters)) {
-		dojo.deprecated('dojo.lang.assertType(value, type, "message")', 'use dojo.lang.assertType(value, type) instead', "0.5");
+		dojo.deprecated("dojo.lang.assertType(value, type, \"message\")", "use dojo.lang.assertType(value, type) instead", "0.5");
 	}
-	if(!dojo.lang.isOfType(value, type, keywordParameters)){
-		if(!dojo.lang.assertType._errorMessage){
+	if (!dojo.lang.isOfType(value, type, keywordParameters)) {
+		if (!dojo.lang.assertType._errorMessage) {
 			dojo.lang.assertType._errorMessage = "Type mismatch: dojo.lang.assertType() failed.";
 		}
 		dojo.lang.assert(false, dojo.lang.assertType._errorMessage);
 	}
-}
-
-dojo.lang.assertValidKeywords = function(/* object */ object, /* array */ expectedProperties, /* string? */ message){
-	/* summary: 
-	 *   Throws an exception 'object' has any properties other than the 'expectedProperties'.
-	 * description: 
-	 *   Given an anonymous object and a list of expected property names, this
-	 *   method check to make sure the object does not have any properties
-	 *   that aren't on the list of expected properties, and throws an Error
-	 *   if there are unexpected properties. This is useful for doing error
-	 *   checking on keyword arguments, to make sure there aren't typos.
-	 * object: An anonymous object.
-	 * expectedProperties: An array of strings (or an object with all the expected properties).
-	 * message: A message describing the assertion.
-	 */
-	 
-	/* examples: 
-	 *   dojo.lang.assertValidKeywords({a: 1, b: 2}, ["a", "b"]);
-	 *   dojo.lang.assertValidKeywords({a: 1, b: 2}, ["a", "b", "c"]);
-	 *   dojo.lang.assertValidKeywords({foo: "iggy"}, ["foo"]);
-	 *   dojo.lang.assertValidKeywords({foo: "iggy"}, ["foo", "bar"]);
-	 *   dojo.lang.assertValidKeywords({foo: "iggy"}, {foo: null, bar: null});
-	 * throws: Throws an Error if 'object' has unexpected properties.
-	 */
+};
+dojo.lang.assertValidKeywords = function (object, expectedProperties, message) {
 	var key;
-	if(!message){
-		if(!dojo.lang.assertValidKeywords._errorMessage){
+	if (!message) {
+		if (!dojo.lang.assertValidKeywords._errorMessage) {
 			dojo.lang.assertValidKeywords._errorMessage = "In dojo.lang.assertValidKeywords(), found invalid keyword:";
 		}
 		message = dojo.lang.assertValidKeywords._errorMessage;
 	}
-	if(dojo.lang.isArray(expectedProperties)){
-		for(key in object){
-			if(!dojo.lang.inArray(expectedProperties, key)){
+	if (dojo.lang.isArray(expectedProperties)) {
+		for (key in object) {
+			if (!dojo.lang.inArray(expectedProperties, key)) {
 				dojo.lang.assert(false, message + " " + key);
 			}
 		}
-	}else{
-		for(key in object){
-			if(!(key in expectedProperties)){
+	} else {
+		for (key in object) {
+			if (!(key in expectedProperties)) {
 				dojo.lang.assert(false, message + " " + key);
 			}
 		}
 	}
-}
+};
 
+
 __CPAN_FILE__ src/lang/common.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -71241,98 +48331,54 @@
 */
 
 dojo.provide("dojo.lang.common");
-
-dojo.lang.inherits = function(/*Function*/subclass, /*Function*/superclass){
-	// summary: Set up inheritance between two classes.
-	if(!dojo.lang.isFunction(superclass)){ 
-		dojo.raise("dojo.inherits: superclass argument ["+superclass+"] must be a function (subclass: ["+subclass+"']");
+dojo.lang.inherits = function (subclass, superclass) {
+	if (!dojo.lang.isFunction(superclass)) {
+		dojo.raise("dojo.inherits: superclass argument [" + superclass + "] must be a function (subclass: [" + subclass + "']");
 	}
 	subclass.prototype = new superclass();
 	subclass.prototype.constructor = subclass;
 	subclass.superclass = superclass.prototype;
-	// DEPRECATED: super is a reserved word, use 'superclass'
-	subclass['super'] = superclass.prototype;
-}
-
-dojo.lang._mixin = function(/*Object*/ obj, /*Object*/ props){
-	// summary:
-	//		Adds all properties and methods of props to obj. This addition is
-	//		"prototype extension safe", so that instances of objects will not
-	//		pass along prototype defaults.
+	subclass["super"] = superclass.prototype;
+};
+dojo.lang._mixin = function (obj, props) {
 	var tobj = {};
-	for(var x in props){
-		// the "tobj" condition avoid copying properties in "props"
-		// inherited from Object.prototype.  For example, if obj has a custom
-		// toString() method, don't overwrite it with the toString() method
-		// that props inherited from Object.protoype
-		if((typeof tobj[x] == "undefined") || (tobj[x] != props[x])){
+	for (var x in props) {
+		if ((typeof tobj[x] == "undefined") || (tobj[x] != props[x])) {
 			obj[x] = props[x];
 		}
 	}
-	// IE doesn't recognize custom toStrings in for..in
-	if(dojo.render.html.ie 
-		&& (typeof(props["toString"]) == "function")
-		&& (props["toString"] != obj["toString"])
-		&& (props["toString"] != tobj["toString"]))
-	{
+	if (dojo.render.html.ie && (typeof (props["toString"]) == "function") && (props["toString"] != obj["toString"]) && (props["toString"] != tobj["toString"])) {
 		obj.toString = props.toString;
 	}
-	return obj; // Object
-}
-
-dojo.lang.mixin = function(/*Object*/obj, /*Object...*/props){
-	// summary:	Adds all properties and methods of props to obj. 
-	for(var i=1, l=arguments.length; i<l; i++){
+	return obj;
+};
+dojo.lang.mixin = function (obj, props) {
+	for (var i = 1, l = arguments.length; i < l; i++) {
 		dojo.lang._mixin(obj, arguments[i]);
 	}
-	return obj; // Object
-}
-
-dojo.lang.extend = function(/*Object*/ constructor, /*Object...*/ props){
-	// summary:
-	//		Adds all properties and methods of props to constructor's
-	//		prototype, making them available to all instances created with
-	//		constructor.
-	for(var i=1, l=arguments.length; i<l; i++){
+	return obj;
+};
+dojo.lang.extend = function (constructor, props) {
+	for (var i = 1, l = arguments.length; i < l; i++) {
 		dojo.lang._mixin(constructor.prototype, arguments[i]);
 	}
-	return constructor; // Object
-}
-
-// Promote to dojo module
+	return constructor;
+};
 dojo.inherits = dojo.lang.inherits;
-//dojo.lang._mixin = dojo.lang._mixin;
 dojo.mixin = dojo.lang.mixin;
 dojo.extend = dojo.lang.extend;
-
-dojo.lang.find = function(	/*Array*/		array, 
-							/*Object*/		value,
-							/*Boolean?*/	identity,
-							/*Boolean?*/	findLast){
-	// summary:	
-	//		Return the index of value in array, returning -1 if not found.
-	// array: just what you think
-	// value: the value to locate
-	// identity: 
-	//		If true, matches with identity comparison (===). If false, uses
-	//		normal comparison (==).
-	// findLast: 
-	//		If true, returns index of last instance of value.
-	// examples:
-	//		find(array, value[, identity [findLast]]) // recommended
- 	//		find(value, array[, identity [findLast]]) // deprecated
-							
-	// support both (array, value) and (value, array)
-	if(!dojo.lang.isArrayLike(array) && dojo.lang.isArrayLike(value)) {
-		dojo.deprecated('dojo.lang.find(value, array)', 'use dojo.lang.find(array, value) instead', "0.5");
+dojo.lang.find = function (array, value, identity, findLast) {
+	if (!dojo.lang.isArrayLike(array) && dojo.lang.isArrayLike(value)) {
+		dojo.deprecated("dojo.lang.find(value, array)", "use dojo.lang.find(array, value) instead", "0.5");
 		var temp = array;
 		array = value;
 		value = temp;
 	}
 	var isString = dojo.lang.isString(array);
-	if(isString) { array = array.split(""); }
-
-	if(findLast) {
+	if (isString) {
+		array = array.split("");
+	}
+	if (findLast) {
 		var step = -1;
 		var i = array.length - 1;
 		var end = -1;
@@ -71341,149 +48387,94 @@
 		var i = 0;
 		var end = array.length;
 	}
-	if(identity){
-		while(i != end) {
-			if(array[i] === value){ return i; }
+	if (identity) {
+		while (i != end) {
+			if (array[i] === value) {
+				return i;
+			}
 			i += step;
 		}
-	}else{
-		while(i != end) {
-			if(array[i] == value){ return i; }
+	} else {
+		while (i != end) {
+			if (array[i] == value) {
+				return i;
+			}
 			i += step;
 		}
 	}
-	return -1;	// number
-}
-
+	return -1;
+};
 dojo.lang.indexOf = dojo.lang.find;
-
-dojo.lang.findLast = function(/*Array*/array, /*Object*/value, /*boolean?*/identity){
-	// summary:
-	//		Return index of last occurance of value in array, returning -1 if
-	//		not found. This is a shortcut for dojo.lang.find() with a true
-	//		value for its "findLast" parameter.
-	// identity:
-	//		If true, matches with identity comparison (===). If false, uses
-	//		normal comparison (==).
-	return dojo.lang.find(array, value, identity, true); // number
-}
-
+dojo.lang.findLast = function (array, value, identity) {
+	return dojo.lang.find(array, value, identity, true);
+};
 dojo.lang.lastIndexOf = dojo.lang.findLast;
-
-dojo.lang.inArray = function(array /*Array*/, value /*Object*/){
-	// summary:	Return true if value is present in array.
-	return dojo.lang.find(array, value) > -1; // boolean
-}
-
-/**
- * Partial implmentation of is* functions from
- * http://www.crockford.com/javascript/recommend.html
- * NOTE: some of these may not be the best thing to use in all situations
- * as they aren't part of core JS and therefore can't work in every case.
- * See WARNING messages inline for tips.
- *
- * The following is* functions are fairly "safe"
- */
-
-dojo.lang.isObject = function(/*anything*/ it){
-	// summary:	Return true if it is an Object, Array or Function.
-	if(typeof it == "undefined"){ return false; }
-	return (typeof it == "object" || it === null || dojo.lang.isArray(it) || dojo.lang.isFunction(it)); // Boolean
-}
-
-dojo.lang.isArray = function(/*anything*/ it){
-	// summary:	Return true if it is an Array.
-	return (it && it instanceof Array || typeof it == "array"); // Boolean
-}
-
-dojo.lang.isArrayLike = function(/*anything*/ it){
-	// summary:	
-	//		Return true if it can be used as an array (i.e. is an object with
-	//		an integer length property).
-	if((!it)||(dojo.lang.isUndefined(it))){ return false; }
-	if(dojo.lang.isString(it)){ return false; }
-	if(dojo.lang.isFunction(it)){ return false; } // keeps out built-in constructors (Number, String, ...) which have length properties
-	if(dojo.lang.isArray(it)){ return true; }
-	// form node itself is ArrayLike, but not always iterable. Use form.elements instead.
-	if((it.tagName)&&(it.tagName.toLowerCase()=='form')){ return false; }
-	if(dojo.lang.isNumber(it.length) && isFinite(it.length)){ return true; }
-	return false; // Boolean
-}
-
-dojo.lang.isFunction = function(/*anything*/ it){
-	// summary:	Return true if it is a Function.
-	return (it instanceof Function || typeof it == "function"); // Boolean
+dojo.lang.inArray = function (array, value) {
+	return dojo.lang.find(array, value) > -1;
 };
-
-(function(){
-	// webkit treats NodeList as a function, which is bad
-	if((dojo.render.html.capable)&&(dojo.render.html["safari"])){
-		dojo.lang.isFunction = function(/*anything*/ it){
-			if((typeof(it) == "function") && (it == "[object NodeList]")) { return false; }
-			return (it instanceof Function || typeof it == "function"); // Boolean
-		}
+dojo.lang.isObject = function (it) {
+	if (typeof it == "undefined") {
+		return false;
 	}
+	return (typeof it == "object" || it === null || dojo.lang.isArray(it) || dojo.lang.isFunction(it));
+};
+dojo.lang.isArray = function (it) {
+	return (it && it instanceof Array || typeof it == "array");
+};
+dojo.lang.isArrayLike = function (it) {
+	if ((!it) || (dojo.lang.isUndefined(it))) {
+		return false;
+	}
+	if (dojo.lang.isString(it)) {
+		return false;
+	}
+	if (dojo.lang.isFunction(it)) {
+		return false;
+	}
+	if (dojo.lang.isArray(it)) {
+		return true;
+	}
+	if ((it.tagName) && (it.tagName.toLowerCase() == "form")) {
+		return false;
+	}
+	if (dojo.lang.isNumber(it.length) && isFinite(it.length)) {
+		return true;
+	}
+	return false;
+};
+dojo.lang.isFunction = function (it) {
+	return (it instanceof Function || typeof it == "function");
+};
+(function () {
+	if ((dojo.render.html.capable) && (dojo.render.html["safari"])) {
+		dojo.lang.isFunction = function (it) {
+			if ((typeof (it) == "function") && (it == "[object NodeList]")) {
+				return false;
+			}
+			return (it instanceof Function || typeof it == "function");
+		};
+	}
 })();
-
-dojo.lang.isString = function(/*anything*/ it){
-	// summary:	Return true if it is a String.
+dojo.lang.isString = function (it) {
 	return (typeof it == "string" || it instanceof String);
-}
+};
+dojo.lang.isAlien = function (it) {
+	if (!it) {
+		return false;
+	}
+	return !dojo.lang.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it));
+};
+dojo.lang.isBoolean = function (it) {
+	return (it instanceof Boolean || typeof it == "boolean");
+};
+dojo.lang.isNumber = function (it) {
+	return (it instanceof Number || typeof it == "number");
+};
+dojo.lang.isUndefined = function (it) {
+	return ((typeof (it) == "undefined") && (it == undefined));
+};
 
-dojo.lang.isAlien = function(/*anything*/ it){
-	// summary: Return true if it is not a built-in function. False if not.
-	if(!it){ return false; }
-	return !dojo.lang.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean
-}
 
-dojo.lang.isBoolean = function(/*anything*/ it){
-	// summary:	Return true if it is a Boolean.
-	return (it instanceof Boolean || typeof it == "boolean"); // Boolean
-}
-
-/**
- * The following is***() functions are somewhat "unsafe". Fortunately,
- * there are workarounds the the language provides and are mentioned
- * in the WARNING messages.
- *
- */
-dojo.lang.isNumber = function(/*anything*/ it){
-	// summary:	Return true if it is a number.
-	// description: 
-	//		WARNING - In most cases, isNaN(it) is sufficient to determine whether or not
-	// 		something is a number or can be used as such. For example, a number or string
-	// 		can be used interchangably when accessing array items (array["1"] is the same as
-	// 		array[1]) and isNaN will return false for both values ("1" and 1). However,
-	// 		isNumber("1")  will return false, which is generally not too useful.
-	// 		Also, isNumber(NaN) returns true, again, this isn't generally useful, but there
-	// 		are corner cases (like when you want to make sure that two things are really
-	// 		the same type of thing). That is really where isNumber "shines".
-	//
-	// Recommendation - Use isNaN(it) when possible
-	
-	return (it instanceof Number || typeof it == "number"); // Boolean
-}
-
-/*
- * FIXME: Should isUndefined go away since it is error prone?
- */
-dojo.lang.isUndefined = function(/*anything*/ it){
-	// summary: Return true if it is not defined.
-	// description: 
-	//		WARNING - In some cases, isUndefined will not behave as you
-	// 		might expect. If you do isUndefined(foo) and there is no earlier
-	// 		reference to foo, an error will be thrown before isUndefined is
-	// 		called. It behaves correctly if you scope yor object first, i.e.
-	// 		isUndefined(foo.bar) where foo is an object and bar isn't a
-	// 		property of the object.
-	//
-	// Recommendation - Use typeof foo == "undefined" when possible
-
-	return ((typeof(it) == "undefined")&&(it == undefined)); // Boolean
-}
-
-// end Crockford functions
-
 __CPAN_FILE__ src/lang/func.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -71497,226 +48488,120 @@
 
 dojo.provide("dojo.lang.func");
 dojo.require("dojo.lang.common");
-
-dojo.lang.hitch = function(/*Object*/thisObject, /*Function|String*/method){
-	// summary: 
-	//		Returns a function that will only ever execute in the a given scope
-	//		(thisObject). This allows for easy use of object member functions
-	//		in callbacks and other places in which the "this" keyword may
-	//		otherwise not reference the expected scope. Note that the order of
-	//		arguments may be reversed in a future version.
-	// thisObject: the scope to run the method in
-	// method:
-	//		a function to be "bound" to thisObject or the name of the method in
-	//		thisObject to be used as the basis for the binding
-	// usage:
-	//		dojo.lang.hitch(foo, "bar")(); // runs foo.bar() in the scope of foo
-	//		dojo.lang.hitch(foo, myFunction); // returns a function that runs myFunction in the scope of foo
-
-	// FIXME:
-	//		should this be extended to "fixate" arguments in a manner similar
-	//		to dojo.lang.curry, but without the default execution of curry()?
-	var fcn = (dojo.lang.isString(method) ? thisObject[method] : method) || function(){};
-	return function(){
-		return fcn.apply(thisObject, arguments); // Function
+dojo.lang.hitch = function (thisObject, method) {
+	var fcn = (dojo.lang.isString(method) ? thisObject[method] : method) || function () {
 	};
-}
-
+	return function () {
+		return fcn.apply(thisObject, arguments);
+	};
+};
 dojo.lang.anonCtr = 0;
 dojo.lang.anon = {};
-
-dojo.lang.nameAnonFunc = function(/*Function*/anonFuncPtr, /*Object*/thisObj, /*Boolean*/searchForNames){
-	// summary:
-	//		Creates a reference to anonFuncPtr in thisObj with a completely
-	//		unique name. The new name is returned as a String.  If
-	//		searchForNames is true, an effort will be made to locate an
-	//		existing reference to anonFuncPtr in thisObj, and if one is found,
-	//		the existing name will be returned instead. The default is for
-	//		searchForNames to be false.
-	var nso = (thisObj|| dojo.lang.anon);
-	if( (searchForNames) ||
-		((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"] == true)) ){
-		for(var x in nso){
-			try{
-				if(nso[x] === anonFuncPtr){
+dojo.lang.nameAnonFunc = function (anonFuncPtr, thisObj, searchForNames) {
+	var nso = (thisObj || dojo.lang.anon);
+	if ((searchForNames) || ((dj_global["djConfig"]) && (djConfig["slowAnonFuncLookups"] == true))) {
+		for (var x in nso) {
+			try {
+				if (nso[x] === anonFuncPtr) {
 					return x;
 				}
-			}catch(e){} // window.external fails in IE embedded in Eclipse (Eclipse bug #151165)
+			}
+			catch (e) {
+			}
 		}
 	}
-	var ret = "__"+dojo.lang.anonCtr++;
-	while(typeof nso[ret] != "undefined"){
-		ret = "__"+dojo.lang.anonCtr++;
+	var ret = "__" + dojo.lang.anonCtr++;
+	while (typeof nso[ret] != "undefined") {
+		ret = "__" + dojo.lang.anonCtr++;
 	}
 	nso[ret] = anonFuncPtr;
-	return ret; // String
-}
-
-dojo.lang.forward = function(funcName){
-	// summary:
-	// 		Returns a function that forwards a method call to
-	// 		this.funcName(...).  Unlike dojo.lang.hitch(), the "this" scope is
-	// 		not fixed on a single object. Ported from MochiKit.
-	return function(){
+	return ret;
+};
+dojo.lang.forward = function (funcName) {
+	return function () {
 		return this[funcName].apply(this, arguments);
-	}; // Function
-}
-
-dojo.lang.curry = function(thisObj, func /* args ... */){
-	// summary:
-	//		similar to the curry() method found in many functional programming
-	//		environments, this function returns an "argument accumulator"
-	//		function, bound to a particular scope, and "primed" with a variable
-	//		number of arguments. The curry method is unique in that it returns
-	//		a function that may return other "partial" function which can be
-	//		called repeatedly. New functions are returned until the arity of
-	//		the original function is reached, at which point the underlying
-	//		function (func) is called in the scope thisObj with all of the
-	//		accumulated arguments (plus any extras) in positional order.
-	// examples:
-	//		assuming a function defined like this:
-	//			var foo = {
-	//				bar: function(arg1, arg2, arg3){
-	//					dojo.debug.apply(dojo, arguments);
-	//				}
-	//			};
-	//		
-	//		dojo.lang.curry() can be used most simply in this way:
-	//		
-	//			tmp = dojo.lang.curry(foo, foo.bar, "arg one", "thinger");
-	//			tmp("blah", "this is superfluous");
-	//			// debugs: "arg one thinger blah this is superfluous"
-	//			tmp("blah");
-	//			// debugs: "arg one thinger blah"
-	//			tmp();
-	//			// returns a function exactly like tmp that expects one argument
-	//
-	//		other intermittent functions could be created until the 3
-	//		positional arguments are filled:
-	//
-	//			tmp = dojo.lang.curry(foo, foo.bar, "arg one");
-	//			tmp2 = tmp("arg two");
-	//			tmp2("blah blah");
-	//			// debugs: "arg one arg two blah blah"
-	//			tmp2("oy");
-	//			// debugs: "arg one arg two oy"
-	//
-	//		curry() can also be used to call the function if enough arguments
-	//		are passed in the initial invocation:
-	//
-	//			dojo.lang.curry(foo, foo.bar, "one", "two", "three", "four");
-	//			// debugs: "one two three four"
-	//			dojo.lang.curry(foo, foo.bar, "one", "two", "three");
-	//			// debugs: "one two three"
-
-
-	// FIXME: the order of func and thisObj should be changed!!!
+	};
+};
+dojo.lang.curry = function (thisObj, func) {
 	var outerArgs = [];
-	thisObj = thisObj||dj_global;
-	if(dojo.lang.isString(func)){
+	thisObj = thisObj || dj_global;
+	if (dojo.lang.isString(func)) {
 		func = thisObj[func];
 	}
-	for(var x=2; x<arguments.length; x++){
+	for (var x = 2; x < arguments.length; x++) {
 		outerArgs.push(arguments[x]);
 	}
-	// since the event system replaces the original function with a new
-	// join-point runner with an arity of 0, we check to see if it's left us
-	// any clues about the original arity in lieu of the function's actual
-	// length property
-	var ecount = (func["__preJoinArity"]||func.length) - outerArgs.length;
-	// borrowed from svend tofte
-	function gather(nextArgs, innerArgs, expected){
+	var ecount = (func["__preJoinArity"] || func.length) - outerArgs.length;
+	function gather(nextArgs, innerArgs, expected) {
 		var texpected = expected;
-		var totalArgs = innerArgs.slice(0); // copy
-		for(var x=0; x<nextArgs.length; x++){
+		var totalArgs = innerArgs.slice(0);
+		for (var x = 0; x < nextArgs.length; x++) {
 			totalArgs.push(nextArgs[x]);
 		}
-		// check the list of provided nextArgs to see if it, plus the
-		// number of innerArgs already supplied, meets the total
-		// expected.
-		expected = expected-nextArgs.length;
-		if(expected<=0){
+		expected = expected - nextArgs.length;
+		if (expected <= 0) {
 			var res = func.apply(thisObj, totalArgs);
 			expected = texpected;
 			return res;
-		}else{
-			return function(){
-				return gather(arguments,// check to see if we've been run
-										// with enough args
-							totalArgs,	// a copy
-							expected);	// how many more do we need to run?;
+		} else {
+			return function () {
+				return gather(arguments, totalArgs, expected);
 			};
 		}
 	}
 	return gather([], outerArgs, ecount);
-}
-
-dojo.lang.curryArguments = function(/*Object*/thisObj, /*Function*/func, /*Array*/args, /*Integer, optional*/offset){
-	// summary:
-	//		similar to dojo.lang.curry(), except that a list of arguments to
-	//		start the curry with may be provided as an array instead of as
-	//		positional arguments. An offset may be specified from the 0 index
-	//		to skip some elements in args.
+};
+dojo.lang.curryArguments = function (thisObj, func, args, offset) {
 	var targs = [];
-	var x = offset||0;
-	for(x=offset; x<args.length; x++){
-		targs.push(args[x]); // ensure that it's an arr
+	var x = offset || 0;
+	for (x = offset; x < args.length; x++) {
+		targs.push(args[x]);
 	}
 	return dojo.lang.curry.apply(dojo.lang, [thisObj, func].concat(targs));
-}
-
-dojo.lang.tryThese = function(/*...*/){
-	// summary:
-	//		executes each function argument in turn, returning the return value
-	//		from the first one which does not throw an exception in execution.
-	//		Any number of functions may be passed.
-	for(var x=0; x<arguments.length; x++){
-		try{
-			if(typeof arguments[x] == "function"){
+};
+dojo.lang.tryThese = function () {
+	for (var x = 0; x < arguments.length; x++) {
+		try {
+			if (typeof arguments[x] == "function") {
 				var ret = (arguments[x]());
-				if(ret){
+				if (ret) {
 					return ret;
 				}
 			}
-		}catch(e){
+		}
+		catch (e) {
 			dojo.debug(e);
 		}
 	}
-}
-
-dojo.lang.delayThese = function(/*Array*/farr, /*Function, optional*/cb, /*Integer*/delay, /*Function, optional*/onend){
-	// summary:
-	//		executes a series of functions contained in farr, but spaces out
-	//		calls to each function by the millisecond delay provided. If cb is
-	//		provided, it will be called directly after each item in farr is
-	//		called and if onend is passed, it will be called when all items
-	//		have completed executing.
-
-	/**
-	 * alternate: (array funcArray, function callback, function onend)
-	 * alternate: (array funcArray, function callback)
-	 * alternate: (array funcArray)
-	 */
-	if(!farr.length){ 
-		if(typeof onend == "function"){
+};
+dojo.lang.delayThese = function (farr, cb, delay, onend) {
+	if (!farr.length) {
+		if (typeof onend == "function") {
 			onend();
 		}
 		return;
 	}
-	if((typeof delay == "undefined")&&(typeof cb == "number")){
+	if ((typeof delay == "undefined") && (typeof cb == "number")) {
 		delay = cb;
-		cb = function(){};
-	}else if(!cb){
-		cb = function(){};
-		if(!delay){ delay = 0; }
+		cb = function () {
+		};
+	} else {
+		if (!cb) {
+			cb = function () {
+			};
+			if (!delay) {
+				delay = 0;
+			}
+		}
 	}
-	setTimeout(function(){
+	setTimeout(function () {
 		(farr.shift())();
 		cb();
 		dojo.lang.delayThese(farr, cb, delay, onend);
 	}, delay);
-}
+};
 
+
 __CPAN_FILE__ src/lang/type.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -71730,240 +48615,138 @@
 
 dojo.provide("dojo.lang.type");
 dojo.require("dojo.lang.common");
-
-dojo.lang.whatAmI = function(value) {
+dojo.lang.whatAmI = function (value) {
 	dojo.deprecated("dojo.lang.whatAmI", "use dojo.lang.getType instead", "0.5");
 	return dojo.lang.getType(value);
-}
+};
 dojo.lang.whatAmI.custom = {};
-
-dojo.lang.getType = function(/* anything */ value){
-	// summary: Attempts to determine what type value is.
-	// value: Any literal value or object instance.
-	try{
-		if(dojo.lang.isArray(value)){ 
-			return "array";	//	string 
+dojo.lang.getType = function (value) {
+	try {
+		if (dojo.lang.isArray(value)) {
+			return "array";
 		}
-		if(dojo.lang.isFunction(value)){ 
-			return "function";	//	string 
+		if (dojo.lang.isFunction(value)) {
+			return "function";
 		}
-		if(dojo.lang.isString(value)){ 
-			return "string";	//	string 
+		if (dojo.lang.isString(value)) {
+			return "string";
 		}
-		if(dojo.lang.isNumber(value)){ 
-			return "number";	//	string 
+		if (dojo.lang.isNumber(value)) {
+			return "number";
 		}
-		if(dojo.lang.isBoolean(value)){ 
-			return "boolean";	//	string 
+		if (dojo.lang.isBoolean(value)) {
+			return "boolean";
 		}
-		if(dojo.lang.isAlien(value)){ 
-			return "alien";	//	string 
+		if (dojo.lang.isAlien(value)) {
+			return "alien";
 		}
-		if(dojo.lang.isUndefined(value)){ 
-			return "undefined";	//	string 
+		if (dojo.lang.isUndefined(value)) {
+			return "undefined";
 		}
-		// FIXME: should this go first?
-		for(var name in dojo.lang.whatAmI.custom){
-			if(dojo.lang.whatAmI.custom[name](value)){
-				return name;	//	string
+		for (var name in dojo.lang.whatAmI.custom) {
+			if (dojo.lang.whatAmI.custom[name](value)) {
+				return name;
 			}
 		}
-		if(dojo.lang.isObject(value)){ 
-			return "object";	//	string 
+		if (dojo.lang.isObject(value)) {
+			return "object";
 		}
-	}catch(e){}
-	return "unknown";	//	string
-}
-
-dojo.lang.isNumeric = function(/* anything */ value){
-	// summary:
-	//		Returns true if value can be interpreted as a number
-	// value: Any literal value or object instance.
-	// examples: 
-	//		dojo.lang.isNumeric(3);                 // returns true
-	//		dojo.lang.isNumeric("3");               // returns true
-	//		dojo.lang.isNumeric(new Number(3));     // returns true
-	//		dojo.lang.isNumeric(new String("3"));   // returns true
-	//
-	//		dojo.lang.isNumeric(3/0);               // returns false
-	//		dojo.lang.isNumeric("foo");             // returns false
-	//		dojo.lang.isNumeric(new Number("foo")); // returns false
-	//		dojo.lang.isNumeric(false);             // returns false
-	//		dojo.lang.isNumeric(true);              // returns false
-	return (!isNaN(value) 
-		&& isFinite(value) 
-		&& (value != null) 
-		&& !dojo.lang.isBoolean(value) 
-		&& !dojo.lang.isArray(value) 
-		&& !/^\s*$/.test(value)
-	);	//	boolean
-}
-
-dojo.lang.isBuiltIn = function(/* anything */ value){
-	// summary:
-	//		Returns true if value is of a type provided by core JavaScript
-	// description: 
-	//		Returns true for any literal, and for any object that is an
-	//		instance of a built-in type like String, Number, Boolean, Array,
-	//		Function, or Error.  
-	// value: Any literal value or object instance.
-	
-	return (dojo.lang.isArray(value)
-		|| dojo.lang.isFunction(value)	
-		|| dojo.lang.isString(value)
-		|| dojo.lang.isNumber(value)
-		|| dojo.lang.isBoolean(value)
-		|| (value == null)
-		|| (value instanceof Error)
-		|| (typeof value == "error") 
-	);	//	boolean
-}
-
-dojo.lang.isPureObject = function(/* anything */ value){
-	// summary:
-	//		Returns true for any value where the value of value.constructor ==
-	//		Object
-	// description: 
-	//		Returns true for any literal, and for any object that is an
-	//		instance of a built-in type like String, Number, Boolean, Array,
-	//		Function, or Error.
-	// value:
-	//		Any literal value or object instance.
-	// examples: 
-	//		dojo.lang.isPureObject(new Object()); // returns true
-	//		dojo.lang.isPureObject({a: 1, b: 2}); // returns true
-	//
-	//		dojo.lang.isPureObject(new Date());   // returns false
-	//		dojo.lang.isPureObject([11, 2, 3]);   // returns false
-	return ((value != null) 
-		&& dojo.lang.isObject(value) 
-		&& value.constructor == Object
-	);	//	boolean
-}
-
-dojo.lang.isOfType = function(/* anything */ value, /* function */ type, /* object? */ keywordParameters) {
-	/* summary:
-	 *	 Returns true if 'value' is of type 'type'
-	 * description: 
-	 *	 Given a value and a datatype, this method returns true if the
-	 *	 type of the value matches the datatype. The datatype parameter
-	 *	 can be an array of datatypes, in which case the method returns
-	 *	 true if the type of the value matches any of the datatypes.
-	 * value: Any literal value or object instance.
-	 * type: A class of object, or a literal type, or the string name of a type, or an array with a list of types.
-	 * keywordParameters: {optional: boolean}
-	 */
-	 
-	/* examples: 
-	 *   dojo.lang.isOfType("foo", String);                // returns true
-	 *   dojo.lang.isOfType(12345, Number);                // returns true
-	 *   dojo.lang.isOfType(false, Boolean);               // returns true
-	 *   dojo.lang.isOfType([6, 8], Array);                // returns true
-	 *   dojo.lang.isOfType(dojo.lang.isOfType, Function); // returns true
-	 *   dojo.lang.isOfType({foo: "bar"}, Object);         // returns true
-	 *   dojo.lang.isOfType(new Date(), Date);             // returns true
-	 *
-	 *   dojo.lang.isOfType("foo", "string");                // returns true
-	 *   dojo.lang.isOfType(12345, "number");                // returns true
-	 *   dojo.lang.isOfType(false, "boolean");               // returns true
-	 *   dojo.lang.isOfType([6, 8], "array");                // returns true
-	 *   dojo.lang.isOfType(dojo.lang.isOfType, "function"); // returns true
-	 *   dojo.lang.isOfType({foo: "bar"}, "object");         // returns true
-	 *   dojo.lang.isOfType(xxxxx, "undefined");             // returns true
-	 *   dojo.lang.isOfType(null, "null");                   // returns true
-	 *
-	 *   dojo.lang.isOfType("foo", [Number, String, Boolean]); // returns true
-	 *   dojo.lang.isOfType(12345, [Number, String, Boolean]); // returns true
-	 *   dojo.lang.isOfType(false, [Number, String, Boolean]); // returns true
-	 *
-	 *   dojo.lang.isOfType(null, Date, {optional: true} );    // returns true	// description: 
-	 */
+	}
+	catch (e) {
+	}
+	return "unknown";
+};
+dojo.lang.isNumeric = function (value) {
+	return (!isNaN(value) && isFinite(value) && (value != null) && !dojo.lang.isBoolean(value) && !dojo.lang.isArray(value) && !/^\s*$/.test(value));
+};
+dojo.lang.isBuiltIn = function (value) {
+	return (dojo.lang.isArray(value) || dojo.lang.isFunction(value) || dojo.lang.isString(value) || dojo.lang.isNumber(value) || dojo.lang.isBoolean(value) || (value == null) || (value instanceof Error) || (typeof value == "error"));
+};
+dojo.lang.isPureObject = function (value) {
+	return ((value != null) && dojo.lang.isObject(value) && value.constructor == Object);
+};
+dojo.lang.isOfType = function (value, type, keywordParameters) {
 	var optional = false;
-	if(keywordParameters){
+	if (keywordParameters) {
 		optional = keywordParameters["optional"];
 	}
-	if(optional && ((value === null) || dojo.lang.isUndefined(value))){
-		return true;	//	boolean
+	if (optional && ((value === null) || dojo.lang.isUndefined(value))) {
+		return true;
 	}
-	if(dojo.lang.isArray(type)){
+	if (dojo.lang.isArray(type)) {
 		var arrayOfTypes = type;
-		for(var i in arrayOfTypes){
+		for (var i in arrayOfTypes) {
 			var aType = arrayOfTypes[i];
-			if(dojo.lang.isOfType(value, aType)){
-				return true; 	//	boolean
+			if (dojo.lang.isOfType(value, aType)) {
+				return true;
 			}
 		}
-		return false;	//	boolean
-	}else{
-		if(dojo.lang.isString(type)){
+		return false;
+	} else {
+		if (dojo.lang.isString(type)) {
 			type = type.toLowerCase();
 		}
 		switch (type) {
-			case Array:
-			case "array":
-				return dojo.lang.isArray(value);	//	boolean
-			case Function:
-			case "function":
-				return dojo.lang.isFunction(value);	//	boolean
-			case String:
-			case "string":
-				return dojo.lang.isString(value);	//	boolean
-			case Number:
-			case "number":
-				return dojo.lang.isNumber(value);	//	boolean
-			case "numeric":
-				return dojo.lang.isNumeric(value);	//	boolean
-			case Boolean:
-			case "boolean":
-				return dojo.lang.isBoolean(value);	//	boolean
-			case Object:
-			case "object":
-				return dojo.lang.isObject(value);	//	boolean
-			case "pureobject":
-				return dojo.lang.isPureObject(value);	//	boolean
-			case "builtin":
-				return dojo.lang.isBuiltIn(value);	//	boolean
-			case "alien":
-				return dojo.lang.isAlien(value);	//	boolean
-			case "undefined":
-				return dojo.lang.isUndefined(value);	//	boolean
-			case null:
-			case "null":
-				return (value === null);	//	boolean
-			case "optional":
-				dojo.deprecated('dojo.lang.isOfType(value, [type, "optional"])', 'use dojo.lang.isOfType(value, type, {optional: true} ) instead', "0.5");
-				return ((value === null) || dojo.lang.isUndefined(value));	//	boolean
-			default:
-				if(dojo.lang.isFunction(type)){
-					return (value instanceof type);	//	boolean
-				}else{
-					dojo.raise("dojo.lang.isOfType() was passed an invalid type");
-				}
+		  case Array:
+		  case "array":
+			return dojo.lang.isArray(value);
+		  case Function:
+		  case "function":
+			return dojo.lang.isFunction(value);
+		  case String:
+		  case "string":
+			return dojo.lang.isString(value);
+		  case Number:
+		  case "number":
+			return dojo.lang.isNumber(value);
+		  case "numeric":
+			return dojo.lang.isNumeric(value);
+		  case Boolean:
+		  case "boolean":
+			return dojo.lang.isBoolean(value);
+		  case Object:
+		  case "object":
+			return dojo.lang.isObject(value);
+		  case "pureobject":
+			return dojo.lang.isPureObject(value);
+		  case "builtin":
+			return dojo.lang.isBuiltIn(value);
+		  case "alien":
+			return dojo.lang.isAlien(value);
+		  case "undefined":
+			return dojo.lang.isUndefined(value);
+		  case null:
+		  case "null":
+			return (value === null);
+		  case "optional":
+			dojo.deprecated("dojo.lang.isOfType(value, [type, \"optional\"])", "use dojo.lang.isOfType(value, type, {optional: true} ) instead", "0.5");
+			return ((value === null) || dojo.lang.isUndefined(value));
+		  default:
+			if (dojo.lang.isFunction(type)) {
+				return (value instanceof type);
+			} else {
+				dojo.raise("dojo.lang.isOfType() was passed an invalid type");
+			}
 		}
 	}
 	dojo.raise("If we get here, it means a bug was introduced above.");
-}
+};
+dojo.lang.getObject = function (str) {
+	var parts = str.split("."), i = 0, obj = dj_global;
+	do {
+		obj = obj[parts[i++]];
+	} while (i < parts.length && obj);
+	return (obj != dj_global) ? obj : null;
+};
+dojo.lang.doesObjectExist = function (str) {
+	var parts = str.split("."), i = 0, obj = dj_global;
+	do {
+		obj = obj[parts[i++]];
+	} while (i < parts.length && obj);
+	return (obj && obj != dj_global);
+};
 
-dojo.lang.getObject=function(/* String */ str){
-	// summary:
-	//   Will return an object, if it exists, based on the name in the passed string.
-	var parts=str.split("."), i=0, obj=dj_global; 
-	do{ 
-		obj=obj[parts[i++]]; 
-	}while(i<parts.length&&obj); 
-	return (obj!=dj_global)?obj:null;	//	Object
-}
 
-dojo.lang.doesObjectExist=function(/* String */ str){
-	// summary:
-	//   Check to see if object [str] exists, based on the passed string.
-	var parts=str.split("."), i=0, obj=dj_global; 
-	do{ 
-		obj=obj[parts[i++]]; 
-	}while(i<parts.length&&obj); 
-	return (obj&&obj!=dj_global);	//	boolean
-}
-
 __CPAN_FILE__ src/lang/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -71975,20 +48758,10 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: [
-		"dojo.lang.common",
-		"dojo.lang.assert",
-		"dojo.lang.array",
-		"dojo.lang.type",
-		"dojo.lang.func",
-		"dojo.lang.extras",
-		"dojo.lang.repr",
-		"dojo.lang.declare"
-	]
-});
+dojo.kwCompoundRequire({common:["dojo.lang.common", "dojo.lang.assert", "dojo.lang.array", "dojo.lang.type", "dojo.lang.func", "dojo.lang.extras", "dojo.lang.repr", "dojo.lang.declare"]});
 dojo.provide("dojo.lang.*");
 
+
 __CPAN_FILE__ src/lang/repr.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -72001,81 +48774,62 @@
 */
 
 dojo.provide("dojo.lang.repr");
-
 dojo.require("dojo.lang.common");
 dojo.require("dojo.AdapterRegistry");
 dojo.require("dojo.string.extras");
-
 dojo.lang.reprRegistry = new dojo.AdapterRegistry();
-dojo.lang.registerRepr = function(/*String*/name, /*Function*/check, /*Function*/wrap, /*Boolean?*/override){
-	// summary:
-	//	Register a repr function.  repr functions should take
-	//	one argument and return a string representation of it
-	//	suitable for developers, primarily used when debugging.
-	//
-	//	If override is given, it is used as the highest priority
-	//	repr, otherwise it will be used as the lowest.
-
+dojo.lang.registerRepr = function (name, check, wrap, override) {
 	dojo.lang.reprRegistry.register(name, check, wrap, override);
 };
-
-dojo.lang.repr = function(/*Object*/obj){
-	// summary: Return a "programmer representation" for an object
-	// description: returns a string representation of an object suitable for developers, primarily used when debugging
-
-	if(typeof(obj) == "undefined"){
-		// obj: undefined
-		return "undefined"; // String
-	}else if(obj === null){
-		// obj: null
-		return "null"; // String
+dojo.lang.repr = function (obj) {
+	if (typeof (obj) == "undefined") {
+		return "undefined";
+	} else {
+		if (obj === null) {
+			return "null";
+		}
 	}
-
-	try{
-		if(typeof(obj["__repr__"]) == 'function'){
+	try {
+		if (typeof (obj["__repr__"]) == "function") {
 			return obj["__repr__"]();
-		}else if((typeof(obj["repr"]) == 'function')&&(obj.repr != arguments.callee)){
-			return obj["repr"]();
+		} else {
+			if ((typeof (obj["repr"]) == "function") && (obj.repr != arguments.callee)) {
+				return obj["repr"]();
+			}
 		}
 		return dojo.lang.reprRegistry.match(obj);
-	}catch(e){
-		if(typeof(obj.NAME) == 'string' && (
-				obj.toString == Function.prototype.toString ||
-				obj.toString == Object.prototype.toString
-			)){
-			return obj.NAME; // String
+	}
+	catch (e) {
+		if (typeof (obj.NAME) == "string" && (obj.toString == Function.prototype.toString || obj.toString == Object.prototype.toString)) {
+			return obj.NAME;
 		}
 	}
-
-	if(typeof(obj) == "function"){
-		// obj: Function
+	if (typeof (obj) == "function") {
 		obj = (obj + "").replace(/^\s+/, "");
 		var idx = obj.indexOf("{");
-		if(idx != -1){
+		if (idx != -1) {
 			obj = obj.substr(0, idx) + "{...}";
 		}
 	}
-	return obj + ""; // String
-}
-
-dojo.lang.reprArrayLike = function(/*Array*/arr){
-	// summary: Maps each element of arr to dojo.lang.repr and provides output in an array-like format
-	// description: returns an array-like string representation of the provided array suitable for developers, primarily used when debugging
-	try{
+	return obj + "";
+};
+dojo.lang.reprArrayLike = function (arr) {
+	try {
 		var na = dojo.lang.map(arr, dojo.lang.repr);
-		return "[" + na.join(", ") + "]"; // String
-	}catch(e){ }
+		return "[" + na.join(", ") + "]";
+	}
+	catch (e) {
+	}
 };
-
-(function(){
+(function () {
 	var m = dojo.lang;
 	m.registerRepr("arrayLike", m.isArrayLike, m.reprArrayLike);
 	m.registerRepr("string", m.isString, m.reprString);
 	m.registerRepr("numbers", m.isNumber, m.reprNumber);
 	m.registerRepr("boolean", m.isBoolean, m.reprNumber);
-	// m.registerRepr("numbers", m.typeMatcher("number", "boolean"), m.reprNumber);
 })();
 
+
 __CPAN_FILE__ src/lang/extras.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -72088,139 +48842,90 @@
 */
 
 dojo.provide("dojo.lang.extras");
-
 dojo.require("dojo.lang.common");
-
-dojo.lang.setTimeout = function(/*Function*/func, /*int*/delay /*, ...*/){
-	// summary:
-	//		Sets a timeout in milliseconds to execute a function in a given
-	//		context with optional arguments.
-	// usage:
-	//		dojo.lang.setTimeout(Object context, function func, number delay[, arg1[, ...]]);
-	//		dojo.lang.setTimeout(function func, number delay[, arg1[, ...]]);
-
+dojo.lang.setTimeout = function (func, delay) {
 	var context = window, argsStart = 2;
-	if(!dojo.lang.isFunction(func)){
+	if (!dojo.lang.isFunction(func)) {
 		context = func;
 		func = delay;
 		delay = arguments[2];
 		argsStart++;
 	}
-
-	if(dojo.lang.isString(func)){
+	if (dojo.lang.isString(func)) {
 		func = context[func];
 	}
-	
 	var args = [];
-	for (var i = argsStart; i < arguments.length; i++){
+	for (var i = argsStart; i < arguments.length; i++) {
 		args.push(arguments[i]);
 	}
-	return dojo.global().setTimeout(function(){ func.apply(context, args); }, delay); // int
-}
-
-dojo.lang.clearTimeout = function(/*int*/timer){
-	// summary: clears timer by number from the execution queue
-
-	// FIXME:
-	//		why do we have this function? It's not portable outside of browser
-	//		environments and it's a stupid wrapper on something that browsers
-	//		provide anyway.
+	return dojo.global().setTimeout(function () {
+		func.apply(context, args);
+	}, delay);
+};
+dojo.lang.clearTimeout = function (timer) {
 	dojo.global().clearTimeout(timer);
-}
-
-dojo.lang.getNameInObj = function(/*Object*/ns, /*unknown*/item){
-	// summary: 
-	//		looks for a value in the object ns with a value matching item and
-	//		returns the property name
-	// ns: if null, dj_global is used
-	// item: value to return a name for
-	if(!ns){ ns = dj_global; }
-
-	for(var x in ns){
-		if(ns[x] === item){
-			return new String(x); // String
+};
+dojo.lang.getNameInObj = function (ns, item) {
+	if (!ns) {
+		ns = dj_global;
+	}
+	for (var x in ns) {
+		if (ns[x] === item) {
+			return new String(x);
 		}
 	}
-	return null; // null
-}
-
-dojo.lang.shallowCopy = function(/*Object*/obj, /*Boolean?*/deep){
-	// summary:
-	//		copies object obj one level deep, or full depth if deep is true
-	var i, ret;	
-
-	if(obj === null){ /*obj: null*/ return null; } // null
-	
-	if(dojo.lang.isObject(obj)){
-		// obj: Object	
+	return null;
+};
+dojo.lang.shallowCopy = function (obj, deep) {
+	var i, ret;
+	if (obj === null) {
+		return null;
+	}
+	if (dojo.lang.isObject(obj)) {
 		ret = new obj.constructor();
-		for(i in obj){
-			if(dojo.lang.isUndefined(ret[i])){
+		for (i in obj) {
+			if (dojo.lang.isUndefined(ret[i])) {
 				ret[i] = deep ? dojo.lang.shallowCopy(obj[i], deep) : obj[i];
 			}
 		}
-	}else if(dojo.lang.isArray(obj)){
-		// obj: Array
-		ret = [];
-		for(i=0; i<obj.length; i++){
-			ret[i] = deep ? dojo.lang.shallowCopy(obj[i], deep) : obj[i];
+	} else {
+		if (dojo.lang.isArray(obj)) {
+			ret = [];
+			for (i = 0; i < obj.length; i++) {
+				ret[i] = deep ? dojo.lang.shallowCopy(obj[i], deep) : obj[i];
+			}
+		} else {
+			ret = obj;
 		}
-	}else{
-		// obj: Object
-		ret = obj;
 	}
-
-	return ret; // Object
-}
-
-dojo.lang.firstValued = function(/* ... */){
-	// summary: Return the first argument that isn't undefined
-
-	for(var i = 0; i < arguments.length; i++){
-		if(typeof arguments[i] != "undefined"){
-			return arguments[i]; // Object
+	return ret;
+};
+dojo.lang.firstValued = function () {
+	for (var i = 0; i < arguments.length; i++) {
+		if (typeof arguments[i] != "undefined") {
+			return arguments[i];
 		}
 	}
-	return undefined; // undefined
-}
-
-dojo.lang.getObjPathValue = function(/*String*/objpath, /*Object?*/context, /*Boolean?*/create){
-	// summary:
-	//		Gets a value from a reference specified as a string descriptor,
-	//		(e.g. "A.B") in the given context.
-	// context: if not specified, dj_global is used
-	// create: if true, undefined objects in the path are created.
-	with(dojo.parseObjPath(objpath, context, create)){
-		return dojo.evalProp(prop, obj, create); // Object
+	return undefined;
+};
+dojo.lang.getObjPathValue = function (objpath, context, create) {
+	with (dojo.parseObjPath(objpath, context, create)) {
+		return dojo.evalProp(prop, obj, create);
 	}
-}
-
-dojo.lang.setObjPathValue = function(/*String*/objpath, /*anything*/value, /*Object?*/context, /*Boolean?*/create){
-	// summary:
-	//		Sets a value on a reference specified as a string descriptor.
-	//		(e.g. "A.B") in the given context. This is similar to straight
-	//		assignment, except that the object structure in question can
-	//		optionally be created if it does not exist.
-	//	context: if not specified, dj_global is used
-	//	create: if true, undefined objects in the path are created.
-
-	// FIXME: why is this function valuable? It should be scheduled for
-	// removal on the grounds that dojo.parseObjPath does most of it's work and
-	// is more straightforward and has fewer dependencies. Also, the order of
-	// arguments is bone-headed. "context" should clearly come after "create".
-	// *sigh*
+};
+dojo.lang.setObjPathValue = function (objpath, value, context, create) {
 	dojo.deprecated("dojo.lang.setObjPathValue", "use dojo.parseObjPath and the '=' operator", "0.6");
-
-	if(arguments.length < 4){
+	if (arguments.length < 4) {
 		create = true;
 	}
-	with(dojo.parseObjPath(objpath, context, create)){
-		if(obj && (create || (prop in obj))){
+	with (dojo.parseObjPath(objpath, context, create)) {
+		if (obj && (create || (prop in obj))) {
 			obj[prop] = value;
 		}
 	}
-}
+};
 
+
 __CPAN_FILE__ src/lang/declare.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -72233,164 +48938,103 @@
 */
 
 dojo.provide("dojo.lang.declare");
-
 dojo.require("dojo.lang.common");
 dojo.require("dojo.lang.extras");
-
-dojo.lang.declare = function(	/*String*/ className, 
-								/*Function|Array*/ superclass, 
-								/*Function?*/ init, 
-								/*Object|Array*/ props){
-	/*
-	 *	summary: Create a feature-rich constructor with a compact notation
-	 *	className: the name of the constructor (loosely, a "class")
-	 * 	superclass:
-	 *		may be a Function, or an Array of Functions. If "superclass" is an
-	 *		array, the first element is used as the prototypical ancestor and
-	 *		any following Functions become mixin ancestors.
-	 *	init: an initializer function
-	 *	props:
-	 *		an object (or array of objects) whose properties are copied to the
-	 *		created prototype
-	 *	description:
-	 *		Create a constructor using a compact notation for inheritance and
-	 *		prototype extension. "superclass" argument may be a Function, or an
-	 *		array of Functions. 
-	 *
-	 *		If "superclass" is an array, the first element is used as the
-	 *		prototypical ancestor and any following Functions become mixin
-	 *		ancestors. 
-	 * 
-	 *		All "superclass(es)" must be Functions (not mere Objects).
-	 *
-	 *		Using mixin ancestors provides a type of multiple inheritance.
-	 *		Mixin ancestors prototypical properties are copied to the subclass,
-	 *		and any inializater/constructor is invoked. 
-	 *
-	 *		Properties of object "props" are copied to the constructor
-	 *		prototype. If "props" is an array, properties of each object in the
-	 *		array are copied to the constructor prototype.
-	 *
-	 *		name of the class ("className" argument) is stored in
-	 *		"declaredClass" property
-	 * 
-	 *		Initializer functions are called when an object is instantiated
-	 *		from this constructor.
-	 * 
-	 *		Aliased as "dojo.declare"
-	 *
-	 * Usage:
-	 *
-	 *		dojo.declare("my.classes.bar", my.classes.foo,
-	 *			function(){
-	 *				// initialization function
-	 *				this.myComplicatedObject = new ReallyComplicatedObject(); 
-	 *			},
-	 *			{ // properties to be added to the class prototype
-	 *				someValue: 2,
-	 *				someMethod: function(){ 
-	 *					doStuff(); 
-	 *				}
-	 *			}
-	 *		);
-	 *
-	 */
-	if((dojo.lang.isFunction(props))||((!props)&&(!dojo.lang.isFunction(init)))){ 
-		// parameter juggling to support omitting init param (also allows
-		// reordering init and props arguments)
+dojo.lang.declare = function (className, superclass, init, props) {
+	if ((dojo.lang.isFunction(props)) || ((!props) && (!dojo.lang.isFunction(init)))) {
 		var temp = props;
 		props = init;
 		init = temp;
-	}	
-	var mixins = [ ];
-	if(dojo.lang.isArray(superclass)){
+	}
+	var mixins = [];
+	if (dojo.lang.isArray(superclass)) {
 		mixins = superclass;
 		superclass = mixins.shift();
 	}
-	if(!init){
+	if (!init) {
 		init = dojo.evalObjPath(className, false);
-		if((init)&&(!dojo.lang.isFunction(init))){ init = null };
+		if ((init) && (!dojo.lang.isFunction(init))) {
+			init = null;
+		}
 	}
 	var ctor = dojo.lang.declare._makeConstructor();
 	var scp = (superclass ? superclass.prototype : null);
-	if(scp){
+	if (scp) {
 		scp.prototyping = true;
 		ctor.prototype = new superclass();
-		scp.prototyping = false; 
+		scp.prototyping = false;
 	}
 	ctor.superclass = scp;
 	ctor.mixins = mixins;
-	for(var i=0,l=mixins.length; i<l; i++){
+	for (var i = 0, l = mixins.length; i < l; i++) {
 		dojo.lang.extend(ctor, mixins[i].prototype);
 	}
 	ctor.prototype.initializer = null;
 	ctor.prototype.declaredClass = className;
-	if(dojo.lang.isArray(props)){
+	if (dojo.lang.isArray(props)) {
 		dojo.lang.extend.apply(dojo.lang, [ctor].concat(props));
-	}else{
-		dojo.lang.extend(ctor, (props)||{});
+	} else {
+		dojo.lang.extend(ctor, (props) || {});
 	}
 	dojo.lang.extend(ctor, dojo.lang.declare._common);
 	ctor.prototype.constructor = ctor;
-	ctor.prototype.initializer = (ctor.prototype.initializer)||(init)||(function(){});
+	ctor.prototype.initializer = (ctor.prototype.initializer) || (init) || (function () {
+	});
 	var created = dojo.parseObjPath(className, null, true);
 	created.obj[created.prop] = ctor;
-	return ctor; // Function
-}
-
-dojo.lang.declare._makeConstructor = function(){
-	return function(){ 
-		// get the generational context (which object [or prototype] should be constructed)
+	return ctor;
+};
+dojo.lang.declare._makeConstructor = function () {
+	return function () {
 		var self = this._getPropContext();
 		var s = self.constructor.superclass;
-		if((s)&&(s.constructor)){
-			if(s.constructor==arguments.callee){
-				// if this constructor is invoked directly (my.ancestor.call(this))
+		if ((s) && (s.constructor)) {
+			if (s.constructor == arguments.callee) {
 				this._inherited("constructor", arguments);
-			}else{
+			} else {
 				this._contextMethod(s, "constructor", arguments);
 			}
 		}
-		var ms = (self.constructor.mixins)||([]);
-		for(var i=0, m; (m=ms[i]); i++) {
-			(((m.prototype)&&(m.prototype.initializer))||(m)).apply(this, arguments);
+		var ms = (self.constructor.mixins) || ([]);
+		for (var i = 0, m; (m = ms[i]); i++) {
+			(((m.prototype) && (m.prototype.initializer)) || (m)).apply(this, arguments);
 		}
-		if((!this.prototyping)&&(self.initializer)){
+		if ((!this.prototyping) && (self.initializer)) {
 			self.initializer.apply(this, arguments);
 		}
+	};
+};
+dojo.lang.declare._common = {_getPropContext:function () {
+	return (this.___proto || this);
+}, _contextMethod:function (ptype, method, args) {
+	var result, stack = this.___proto;
+	this.___proto = ptype;
+	try {
+		result = ptype[method].apply(this, (args || []));
 	}
-}
-
-dojo.lang.declare._common = {
-	_getPropContext: function(){ return (this.___proto||this); },
-	// caches ptype context and calls method on it
-	_contextMethod: function(ptype, method, args){
-		var result, stack = this.___proto;
-		this.___proto = ptype;
-		try { result = ptype[method].apply(this,(args||[])); }
-		catch(e) { throw e; }	
-		finally { this.___proto = stack; }
-		return result;
-	},
-	_inherited: function(prop, args){
-		// summary:
-		//		Searches backward thru prototype chain to find nearest
-		//		ancestral instance of prop. Internal use only.
-		var p = this._getPropContext();
-		do{
-			if((!p.constructor)||(!p.constructor.superclass)){ return; }
-			p = p.constructor.superclass;
-		}while(!(prop in p));
-		return (dojo.lang.isFunction(p[prop]) ? this._contextMethod(p, prop, args) : p[prop]);
-	},
-	inherited: function(prop, args){
-		dojo.deprecated("'inherited' method is dangerous, do not up-call! 'inherited' is slated for removal in 0.5; name your super class (or use superclass property) instead.", "0.5");
-		this._inherited(prop, args);
+	catch (e) {
+		throw e;
 	}
-}
-
+	finally {
+		this.___proto = stack;
+	}
+	return result;
+}, _inherited:function (prop, args) {
+	var p = this._getPropContext();
+	do {
+		if ((!p.constructor) || (!p.constructor.superclass)) {
+			return;
+		}
+		p = p.constructor.superclass;
+	} while (!(prop in p));
+	return (dojo.lang.isFunction(p[prop]) ? this._contextMethod(p, prop, args) : p[prop]);
+}, inherited:function (prop, args) {
+	dojo.deprecated("'inherited' method is dangerous, do not up-call! 'inherited' is slated for removal in 0.5; name your super class (or use superclass property) instead.", "0.5");
+	this._inherited(prop, args);
+}};
 dojo.declare = dojo.lang.declare;
 
+
 __CPAN_DIR__ src/lang/timing
 __CPAN_FILE__ src/lang/timing/Timer.js
 /*
@@ -72405,59 +49049,37 @@
 
 dojo.provide("dojo.lang.timing.Timer");
 dojo.require("dojo.lang.func");
-
-dojo.lang.timing.Timer = function(/*int*/ interval){
-	// summary: Timer object executes an "onTick()" method repeatedly at a specified interval. 
-	//			repeatedly at a given interval.
-	// interval: Interval between function calls, in milliseconds.
+dojo.lang.timing.Timer = function (interval) {
 	this.timer = null;
 	this.isRunning = false;
 	this.interval = interval;
-
 	this.onStart = null;
 	this.onStop = null;
 };
-
-dojo.extend(dojo.lang.timing.Timer, {
-	onTick : function(){
-		// summary: Method called every time the interval passes.  Override to do something useful.
-	},
-		
-	setInterval : function(interval){
-		// summary: Reset the interval of a timer, whether running or not.
-		// interval: New interval, in milliseconds.
-		if (this.isRunning){
-			dj_global.clearInterval(this.timer);
-		}
-		this.interval = interval;
-		if (this.isRunning){
-			this.timer = dj_global.setInterval(dojo.lang.hitch(this, "onTick"), this.interval);
-		}
-	},
-	
-	start : function(){
-		// summary: Start the timer ticking.
-		// description: Calls the "onStart()" handler, if defined.
-		// 				Note that the onTick() function is not called right away, 
-		//				only after first interval passes.
-		if (typeof this.onStart == "function"){
-			this.onStart();
-		}
-		this.isRunning = true;
-		this.timer = dj_global.setInterval(dojo.lang.hitch(this, "onTick"), this.interval);
-	},
-	
-	stop : function(){
-		// summary: Stop the timer.
-		// description: Calls the "onStop()" handler, if defined.
-		if (typeof this.onStop == "function"){
-			this.onStop();
-		}
-		this.isRunning = false;
+dojo.extend(dojo.lang.timing.Timer, {onTick:function () {
+}, setInterval:function (interval) {
+	if (this.isRunning) {
 		dj_global.clearInterval(this.timer);
 	}
-});
+	this.interval = interval;
+	if (this.isRunning) {
+		this.timer = dj_global.setInterval(dojo.lang.hitch(this, "onTick"), this.interval);
+	}
+}, start:function () {
+	if (typeof this.onStart == "function") {
+		this.onStart();
+	}
+	this.isRunning = true;
+	this.timer = dj_global.setInterval(dojo.lang.hitch(this, "onTick"), this.interval);
+}, stop:function () {
+	if (typeof this.onStop == "function") {
+		this.onStop();
+	}
+	this.isRunning = false;
+	dj_global.clearInterval(this.timer);
+}});
 
+
 __CPAN_FILE__ src/lang/timing/Streamer.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -72471,94 +49093,60 @@
 
 dojo.provide("dojo.lang.timing.Streamer");
 dojo.require("dojo.lang.timing.Timer");
-
-dojo.lang.timing.Streamer = function(
-	/* function */input, 
-	/* function */output, 
-	/* int */interval, 
-	/* int */minimum,
-	/* array */initialData
-){
-	//	summary
-	//	Streamer will take an input function that pushes N datapoints into a
-	//		queue, and will pass the next point in that queue out to an
-	//		output function at the passed interval; this way you can emulate
-	//		a constant buffered stream of data.
-	//	input: the function executed when the internal queue reaches minimumSize
-	//	output: the function executed on internal tick
-	//	interval: the interval in ms at which the output function is fired.
-	//	minimum: the minimum number of elements in the internal queue.
-
+dojo.lang.timing.Streamer = function (input, output, interval, minimum, initialData) {
 	var self = this;
 	var queue = [];
-
-	//	public properties
 	this.interval = interval || 1000;
-	this.minimumSize = minimum || 10;	//	latency usually == interval * minimumSize
-	this.inputFunction = input || function(q){ };
-	this.outputFunction = output || function(point){ };
-
-	//	more setup
+	this.minimumSize = minimum || 10;
+	this.inputFunction = input || function (q) {
+	};
+	this.outputFunction = output || function (point) {
+	};
 	var timer = new dojo.lang.timing.Timer(this.interval);
-	var tick = function(){
+	var tick = function () {
 		self.onTick(self);
-
-		if(queue.length < self.minimumSize){
+		if (queue.length < self.minimumSize) {
 			self.inputFunction(queue);
 		}
-
 		var obj = queue.shift();
-		while(typeof(obj) == "undefined" && queue.length > 0){
+		while (typeof (obj) == "undefined" && queue.length > 0) {
 			obj = queue.shift();
 		}
-		
-		//	check to see if the input function needs to be fired
-		//	stop before firing the output function
-		//	TODO: relegate this to the output function?
-		if(typeof(obj) == "undefined"){
+		if (typeof (obj) == "undefined") {
 			self.stop();
 			return;
 		}
-
-		//	call the output function.
 		self.outputFunction(obj);
 	};
-
-	this.setInterval = function(/* int */ms){
-		//	summary
-		//	sets the interval in milliseconds of the internal timer
+	this.setInterval = function (ms) {
 		this.interval = ms;
 		timer.setInterval(ms);
 	};
-
-	this.onTick = function(/* dojo.lang.timing.Streamer */obj){ };
-	// wrap the timer functions so that we can connect to them if needed.
-	this.start = function(){
-		//	summary
-		//	starts the Streamer
-		if(typeof(this.inputFunction) == "function" && typeof(this.outputFunction) == "function"){
+	this.onTick = function (obj) {
+	};
+	this.start = function () {
+		if (typeof (this.inputFunction) == "function" && typeof (this.outputFunction) == "function") {
 			timer.start();
 			return;
 		}
 		dojo.raise("You cannot start a Streamer without an input and an output function.");
 	};
-	this.onStart = function(){ };
-	this.stop = function(){
-		//	summary
-		//	stops the Streamer
+	this.onStart = function () {
+	};
+	this.stop = function () {
 		timer.stop();
 	};
-	this.onStop = function(){ };
-
-	//	finish initialization
+	this.onStop = function () {
+	};
 	timer.onTick = this.tick;
 	timer.onStart = this.onStart;
 	timer.onStop = this.onStop;
-	if(initialData){
+	if (initialData) {
 		queue.concat(initialData);
 	}
 };
 
+
 __CPAN_FILE__ src/lang/timing/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -72572,6 +49160,7 @@
 
 dojo.provide("dojo.lang.timing.*");
 
+
 __CPAN_DIR__ src/data
 __CPAN_FILE__ src/data/OpmlStore.js
 /*
@@ -72589,216 +49178,156 @@
 dojo.require("dojo.data.core.Result");
 dojo.require("dojo.lang.assert");
 dojo.require("dojo.json");
-
 dojo.require("dojo.experimental");
 dojo.experimental("dojo.data.OpmlStore");
-// FIXME: The OpmlStore works in Firefox but does not yet work in IE.
-
-dojo.declare("dojo.data.OpmlStore", dojo.data.core.Read, {
-	/* summary:
-	 *   The OpmlStore implements the dojo.data.core.Read API.  
-	 */
-	 
-	/* examples:
-	 *   var opmlStore = new dojo.data.OpmlStore({url:"geography.opml"});
-	 *   var opmlStore = new dojo.data.OpmlStore({url:"http://example.com/geography.opml"});
-	 */
-	initializer: function(/* object */ keywordParameters) {
-		// keywordParameters: {url: String}
-		this._arrayOfTopLevelItems = [];
-		this._metadataNodes = null;
-		this._loadFinished = false;
-		this._opmlFileUrl = keywordParameters["url"];
-	},
-	
-	_assertIsItem: function(/* item */ item) {
-		if (!this.isItem(item)) { 
-			throw new Error("dojo.data.OpmlStore: a function was passed an item argument that was not an item");
+dojo.declare("dojo.data.OpmlStore", dojo.data.core.Read, {initializer:function (keywordParameters) {
+	this._arrayOfTopLevelItems = [];
+	this._metadataNodes = null;
+	this._loadFinished = false;
+	this._opmlFileUrl = keywordParameters["url"];
+}, _assertIsItem:function (item) {
+	if (!this.isItem(item)) {
+		throw new Error("dojo.data.OpmlStore: a function was passed an item argument that was not an item");
+	}
+}, _removeChildNodesThatAreNotElementNodes:function (node, recursive) {
+	var childNodes = node.childNodes;
+	if (childNodes.length == 0) {
+		return;
+	}
+	var nodesToRemove = [];
+	var i, childNode;
+	for (i = 0; i < childNodes.length; ++i) {
+		childNode = childNodes[i];
+		if (childNode.nodeType != Node.ELEMENT_NODE) {
+			nodesToRemove.push(childNode);
 		}
-	},
-	
-	_removeChildNodesThatAreNotElementNodes: function(/* node */ node, /* boolean */ recursive) {
-		var childNodes = node.childNodes;
-		if (childNodes.length == 0) {
-			return;
-		}
-		var nodesToRemove = [];
-		var i, childNode;
+	}
+	for (i = 0; i < nodesToRemove.length; ++i) {
+		childNode = nodesToRemove[i];
+		node.removeChild(childNode);
+	}
+	if (recursive) {
 		for (i = 0; i < childNodes.length; ++i) {
 			childNode = childNodes[i];
-			if (childNode.nodeType != Node.ELEMENT_NODE) { 
-				nodesToRemove.push(childNode); 
-			}
-		};
-		// dojo.debug('trim: ' + childNodes.length + ' total, ' + nodesToRemove.length + ' junk');
-		for (i = 0; i < nodesToRemove.length; ++i) {
-			childNode = nodesToRemove[i];
-			node.removeChild(childNode);
+			this._removeChildNodesThatAreNotElementNodes(childNode, recursive);
 		}
-		// dojo.debug('trim: ' + childNodes.length + ' remaining');
-		if (recursive) {
-			for (i = 0; i < childNodes.length; ++i) {
-				childNode = childNodes[i];
-				this._removeChildNodesThatAreNotElementNodes(childNode, recursive);
-			}
+	}
+}, _processRawXmlTree:function (rawXmlTree) {
+	var headNodes = rawXmlTree.getElementsByTagName("head");
+	var headNode = headNodes[0];
+	this._removeChildNodesThatAreNotElementNodes(headNode);
+	this._metadataNodes = headNode.childNodes;
+	var bodyNodes = rawXmlTree.getElementsByTagName("body");
+	var bodyNode = bodyNodes[0];
+	this._removeChildNodesThatAreNotElementNodes(bodyNode, true);
+	var bodyChildNodes = bodyNodes[0].childNodes;
+	for (var i = 0; i < bodyChildNodes.length; ++i) {
+		var node = bodyChildNodes[i];
+		if (node.tagName == "outline") {
+			this._arrayOfTopLevelItems.push(node);
 		}
-	},
-	
-	_processRawXmlTree: function(/* xmlDoc */ rawXmlTree) {
-		var headNodes = rawXmlTree.getElementsByTagName('head');
-		var headNode = headNodes[0];
-		this._removeChildNodesThatAreNotElementNodes(headNode);
-		this._metadataNodes = headNode.childNodes;
-		var bodyNodes = rawXmlTree.getElementsByTagName('body');
-		var bodyNode = bodyNodes[0];
-		this._removeChildNodesThatAreNotElementNodes(bodyNode, true);
-		
-		var bodyChildNodes = bodyNodes[0].childNodes;
-		for (var i = 0; i < bodyChildNodes.length; ++i) {
-			var node = bodyChildNodes[i];
-			if (node.tagName == 'outline') {
-				this._arrayOfTopLevelItems.push(node);
-			}
+	}
+}, get:function (item, attribute, defaultValue) {
+	this._assertIsItem(item);
+	if (attribute == "children") {
+		return (item.firstChild || defaultValue);
+	} else {
+		var value = item.getAttribute(attribute);
+		value = (value != undefined) ? value : defaultValue;
+		return value;
+	}
+}, getValues:function (item, attribute) {
+	this._assertIsItem(item);
+	if (attribute == "children") {
+		var array = [];
+		for (var i = 0; i < item.childNodes.length; ++i) {
+			array.push(item.childNodes[i]);
 		}
-	},
-	
-	get: function(/* item */ item, /* attribute || attribute-name-string */ attribute, /* value? */ defaultValue) {
-		// summary: See dojo.data.core.Read.get()
-		this._assertIsItem(item);
-		if (attribute == 'children') {
-			return (item.firstChild || defaultValue);
-		} else {
-			var value = item.getAttribute(attribute);
-			value = (value != undefined) ? value : defaultValue;
-			return value;
+		return array;
+	} else {
+		return [item.getAttribute(attribute)];
+	}
+}, getAttributes:function (item) {
+	this._assertIsItem(item);
+	var attributes = [];
+	var xmlNode = item;
+	var xmlAttributes = xmlNode.attributes;
+	for (var i = 0; i < xmlAttributes.length; ++i) {
+		var xmlAttribute = xmlAttributes.item(i);
+		attributes.push(xmlAttribute.nodeName);
+	}
+	if (xmlNode.childNodes.length > 0) {
+		attributes.push("children");
+	}
+	return attributes;
+}, hasAttribute:function (item, attribute) {
+	return (this.getValues(item, attribute).length > 0);
+}, containsValue:function (item, attribute, value) {
+	var values = this.getValues(item, attribute);
+	for (var i = 0; i < values.length; ++i) {
+		var possibleValue = values[i];
+		if (value == possibleValue) {
+			return true;
 		}
-	},
-		
-	getValues: function(/* item */ item, /* attribute || attribute-name-string */ attribute) {
-		// summary: See dojo.data.core.Read.getValues()
-		this._assertIsItem(item);
-		if (attribute == 'children') {
-			var array = [];
-			for (var i = 0; i < item.childNodes.length; ++i) {
-				array.push(item.childNodes[i]);
+	}
+	return false;
+}, isItem:function (something) {
+	return (something && something.nodeType == Node.ELEMENT_NODE && something.tagName == "outline");
+}, isItemAvailable:function (something) {
+	return this.isItem(something);
+}, find:function (keywordArgs) {
+	var result = null;
+	if (keywordArgs instanceof dojo.data.core.Result) {
+		result = keywordArgs;
+		result.store = this;
+	} else {
+		result = new dojo.data.core.Result(keywordArgs, this);
+	}
+	var self = this;
+	var bindHandler = function (type, data, evt) {
+		var scope = result.scope || dj_global;
+		if (type == "load") {
+			self._processRawXmlTree(data);
+			if (result.saveResult) {
+				result.items = self._arrayOfTopLevelItems;
 			}
-			return array; // Array
-			// return item.childNodes; // FIXME: this isn't really an Array
-		} else {
-			return [item.getAttribute(attribute)]; // Array
-		}
-	},
-		
-	getAttributes: function(/* item */ item) {
-		// summary: See dojo.data.core.Read.getAttributes()
-		this._assertIsItem(item);
-		var attributes = [];
-		var xmlNode = item;
-		var xmlAttributes = xmlNode.attributes;
-		for (var i = 0; i < xmlAttributes.length; ++i) {
-			var xmlAttribute = xmlAttributes.item(i);
-			attributes.push(xmlAttribute.nodeName);
-		}
-		if (xmlNode.childNodes.length > 0) {
-			attributes.push('children');
-		}
-		return attributes; // array
-	},
-	
-	hasAttribute: function(/* item */ item, /* attribute || attribute-name-string */ attribute) {
-		// summary: See dojo.data.core.Read.hasAttribute()
-		return (this.getValues(item, attribute).length > 0);
-	},
-	
-	containsValue: function(/* item */ item, /* attribute || attribute-name-string */ attribute, /* anything */ value) {
-		// summary: See dojo.data.core.Read.containsValue()
-		var values = this.getValues(item, attribute);
-		for (var i = 0; i < values.length; ++i) {
-			var possibleValue = values[i];
-			if (value == possibleValue) {
-				return true;
+			if (result.onbegin) {
+				result.onbegin.call(scope, result);
 			}
-		}
-		return false; // boolean
-	},
-		
-	isItem: function(/* anything */ something) {
-		return (something && 
-				something.nodeType == Node.ELEMENT_NODE && 
-				something.tagName == 'outline'); // boolean
-	},
-	
-	isItemAvailable: function(/* anything */ something) {
-		return this.isItem(something);
-	},
-	
-	find: function(/* object? || dojo.data.core.Result */ keywordArgs) {
-		// summary: See dojo.data.core.Read.find()
-		var result = null;
-		if (keywordArgs instanceof dojo.data.core.Result) {
-			result = keywordArgs;
-			result.store = this;
-		} else {
-			result = new dojo.data.core.Result(keywordArgs, this);
-		}
-		var self = this;
-		var bindHandler = function(type, data, evt) {
-			var scope = result.scope || dj_global;
-			if (type == "load") {
-				self._processRawXmlTree(data);
-				if (result.saveResult) {
-					result.items = self._arrayOfTopLevelItems;
+			for (var i = 0; i < self._arrayOfTopLevelItems.length; i++) {
+				var item = self._arrayOfTopLevelItems[i];
+				if (result.onnext && !result._aborted) {
+					result.onnext.call(scope, item, result);
 				}
-				if (result.onbegin) {
-					result.onbegin.call(scope, result);
-				}
-				for (var i=0; i < self._arrayOfTopLevelItems.length; i++) {
-					var item = self._arrayOfTopLevelItems[i];
-					if (result.onnext && !result._aborted) {
-						result.onnext.call(scope, item, result);
-					}
-				}
-				if (result.oncompleted && !result._aborted) {
-					result.oncompleted.call(scope, result);
-				}
-			} else if(type == "error" || type == 'timeout') {
-				// todo: how to handle timeout?
+			}
+			if (result.oncompleted && !result._aborted) {
+				result.oncompleted.call(scope, result);
+			}
+		} else {
+			if (type == "error" || type == "timeout") {
 				var errorObject = data;
-				// dojo.debug("error in dojo.data.OpmlStore.find(): " + dojo.json.serialize(errorObject));
 				if (result.onerror) {
 					result.onerror.call(scope, data);
 				}
 			}
-		};
-		
-		if (!this._loadFinished) {
-			if (this._opmlFileUrl) {
-				var bindRequest = dojo.io.bind({
-					url: this._opmlFileUrl, // "playlist.opml",
-					handle: bindHandler,
-					mimetype: "text/xml",
-					sync: (result.sync || false) });
-				result._abortFunc = bindRequest.abort;
-			}
 		}
-		return result; // dojo.data.csv.Result
-	},
-	
-	getIdentity: function(/* item */ item) {
-		// summary: See dojo.data.core.Read.getIdentity()
-		dojo.unimplemented('dojo.data.OpmlStore.getIdentity()');
-		return null;
-	},
-	
-	findByIdentity: function(/* string */ identity) {
-		// summary: See dojo.data.core.Read.findByIdentity()
-		dojo.unimplemented('dojo.data.OpmlStore.findByIdentity()');
-		return null;
+	};
+	if (!this._loadFinished) {
+		if (this._opmlFileUrl) {
+			var bindRequest = dojo.io.bind({url:this._opmlFileUrl, handle:bindHandler, mimetype:"text/xml", sync:(result.sync || false)});
+			result._abortFunc = bindRequest.abort;
+		}
 	}
-});
+	return result;
+}, getIdentity:function (item) {
+	dojo.unimplemented("dojo.data.OpmlStore.getIdentity()");
+	return null;
+}, findByIdentity:function (identity) {
+	dojo.unimplemented("dojo.data.OpmlStore.findByIdentity()");
+	return null;
+}});
 
 
-
 __CPAN_FILE__ src/data/YahooStore.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -72814,44 +49343,33 @@
 dojo.require("dojo.data.core.RemoteStore");
 dojo.require("dojo.lang.declare");
 dojo.require("dojo.io.ScriptSrcIO");
-
-dojo.declare("dojo.data.YahooStore", dojo.data.core.RemoteStore, {
-	/* Summary:
-	 *	  The YahooStore implements the dojo.data.core.Read API. 
-	 */	
-	_setupQueryRequest: function(result, requestKw) { 
-		var start = 1;
-		var count = 1;
-		if (result) {
-			start = result.start || start;
-			count = result.count || count;
-		}
-		var sourceUrl = "http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=dojo&language=en&query=" + 
-				result.query + "&start=" + start + "&results=" + count + "&output=json";
-		requestKw.url = sourceUrl;
-		requestKw.transport = "ScriptSrcTransport";
-		requestKw.mimetype = "text/json";
-		requestKw.jsonParamName = 'callback';
-	},
-		 
-	_resultToQueryMetadata: function(json) { 
-		return json.ResultSet; 
-	},
-	
-	_resultToQueryData: function(json) {
-		var data = {}
-		for (var i = 0; i < json.ResultSet.totalResultsReturned; ++i) {
-			var record = json.ResultSet.Result[i];
-			var item = {};
-			item["Url"] = [record.Url];
-			item["Title"] = [record.Title];
-			item["Summary"] =[ record.Summary];
-			var arrayIndex = (json.ResultSet.firstResultPosition - 1) + i;
-			data[ arrayIndex.toString() ] = item;
-		}
-		return data;
+dojo.declare("dojo.data.YahooStore", dojo.data.core.RemoteStore, {_setupQueryRequest:function (result, requestKw) {
+	var start = 1;
+	var count = 1;
+	if (result) {
+		start = result.start || start;
+		count = result.count || count;
 	}
-});
+	var sourceUrl = "http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=dojo&language=en&query=" + result.query + "&start=" + start + "&results=" + count + "&output=json";
+	requestKw.url = sourceUrl;
+	requestKw.transport = "ScriptSrcTransport";
+	requestKw.mimetype = "text/json";
+	requestKw.jsonParamName = "callback";
+}, _resultToQueryMetadata:function (json) {
+	return json.ResultSet;
+}, _resultToQueryData:function (json) {
+	var data = {};
+	for (var i = 0; i < json.ResultSet.totalResultsReturned; ++i) {
+		var record = json.ResultSet.Result[i];
+		var item = {};
+		item["Url"] = [record.Url];
+		item["Title"] = [record.Title];
+		item["Summary"] = [record.Summary];
+		var arrayIndex = (json.ResultSet.firstResultPosition - 1) + i;
+		data[arrayIndex.toString()] = item;
+	}
+	return data;
+}});
 
 
 __CPAN_FILE__ src/data/RdfStore.js
@@ -72870,284 +49388,175 @@
 dojo.require("dojo.lang.declare");
 dojo.require("dojo.data.core.RemoteStore");
 dojo.require("dojo.experimental");
-
-/* summary:
- * RdfStore provides a dojo.data Store for querying and updating a server 
- * that supports the SPARQL Query Result JSON format.
- * (see http://www.w3.org/TR/rdf-sparql-json-res/)
- * 
- * It also maps RDF datatypes to Javascript objects.
- * 
- * RdfStore makes following assumptions about the Result JSON:
- * (1) The result always contains 3 bound variables named "s","p", and "o", 
- *     and each result binding is treated as an RDF statement.
- * (2) When saving changes to the store, the JSON "results" object will also 
- *     contain a "deleted" key whose value is a list of deleted RDF resources.
- *
- */
-
-dojo.data.RdfDatatypeSerializer = function(/* JavaScript type */type, /* function */convertFunc, /* RDF datatype URI */uri) {
-	/* summary:
-	This class serializes a javascript object into a RDF datatype literal.
-	*/
+dojo.data.RdfDatatypeSerializer = function (type, convertFunc, uri) {
 	this.type = type;
 	this._converter = convertFunc;
 	this.uri = uri;
-	this.serialize = function(value) { 
-		return this._converter.call(value, value); 
+	this.serialize = function (value) {
+		return this._converter.call(value, value);
 	};
-}
-
-dojo.declare("dojo.data.RdfStore", dojo.data.core.RemoteStore, {
-
-	_datatypeMap: {
-		//map datatype strings to constructor function
-		literal: function(value) { 
-			var literal = value.value;
-			if (value["xml:lang"]) {
-				literal.lang = value["xml:lang"];
-			}
-			return literal;
-		},
-		
-		uri: function(value) { 
-			return { id: value.value }; 
-		},
-		
-		bnode: function(value) { 
-			return { id: '_:' + value.value }; 
-		},
-
-		'http://www.w3.org/2001/XMLSchema#int': function(value) { 
-			return parseInt(value.value); 
-		},
-		'http://www.w3.org/2001/XMLSchema#integer': function(value) { 
-			return parseInt(value.value);
-		},
-		'http://www.w3.org/2001/XMLSchema#long': function(value) { 
-			return parseInt(value.value);
-		},
-		'http://www.w3.org/2001/XMLSchema#float': function(value) { 
-			return parseFloat(value.value);
-		},
-		'http://www.w3.org/2001/XMLSchema#double': function(value) { 
-			return parseFloat(value.value);
-		},
-		'http://www.w3.org/2001/XMLSchema#boolean': function(value) { 
-			return !value || value == "false" || value == "0" ? false : true; 
+};
+dojo.declare("dojo.data.RdfStore", dojo.data.core.RemoteStore, {_datatypeMap:{literal:function (value) {
+	var literal = value.value;
+	if (value["xml:lang"]) {
+		literal.lang = value["xml:lang"];
+	}
+	return literal;
+}, uri:function (value) {
+	return {id:value.value};
+}, bnode:function (value) {
+	return {id:"_:" + value.value};
+}, "http://www.w3.org/2001/XMLSchema#int":function (value) {
+	return parseInt(value.value);
+}, "http://www.w3.org/2001/XMLSchema#integer":function (value) {
+	return parseInt(value.value);
+}, "http://www.w3.org/2001/XMLSchema#long":function (value) {
+	return parseInt(value.value);
+}, "http://www.w3.org/2001/XMLSchema#float":function (value) {
+	return parseFloat(value.value);
+}, "http://www.w3.org/2001/XMLSchema#double":function (value) {
+	return parseFloat(value.value);
+}, "http://www.w3.org/2001/XMLSchema#boolean":function (value) {
+	return !value || value == "false" || value == "0" ? false : true;
+}}, _datatypeSerializers:[new dojo.data.RdfDatatypeSerializer(Number, Number.toString, "http://www.w3.org/2001/XMLSchema#float"), new dojo.data.RdfDatatypeSerializer(Boolean, Boolean.toString, "http://www.w3.org/2001/XMLSchema#boolean")], _findDatatypeSerializer:function (value) {
+	var length = this._datatypeSerializers.length;
+	for (var i = 0; i < length; i++) {
+		var datatype = this._datatypeSerializers[i];
+		if (value instanceof datatype.type) {
+			return datatype;
 		}
-		//todo: more datatypes: 
-		//integer subtypes, string types, XMLiteral
-		//,'http://www.w3.org/2001/XMLSchema#... : function(value) { return parseInt(value.value); }
-	},
-
-	_datatypeSerializers: [
-		new dojo.data.RdfDatatypeSerializer(Number, Number.toString, 'http://www.w3.org/2001/XMLSchema#float'), 
-		new dojo.data.RdfDatatypeSerializer(Boolean, Boolean.toString, 'http://www.w3.org/2001/XMLSchema#boolean')
-	],
-	
-	_findDatatypeSerializer: function(value) {
-		var length = this._datatypeSerializers.length;
-		for (var i = 0; i < length; i++) {
-			var datatype = this._datatypeSerializers[i];
-			if (value instanceof datatype.type) {
-				return datatype;
-			}
+	}
+}, _toRDFValue:function (value) {
+	var rdfvalue = {};
+	if (value.id) {
+		if (value.id.slice(0, 2) == "_:") {
+			rdfvalue.type = "bnode";
+			rdfvalue.value = value.id.substring(2);
+		} else {
+			rdfvalue.type = "uri";
+			rdfvalue.value = value.id;
 		}
-	},
-
-	_toRDFValue: function(value) {
-		//convert values to rdf json format
-		//(from http://www.w3.org/TR/2006/NOTE-rdf-sparql-json-res-20061004/)
-
-		var rdfvalue = {};
-		if (value.id) {
-			if (value.id.slice(0, 2) == '_:') {
-				rdfvalue.type = 'bnode';
-				rdfvalue.value = value.id.substring(2);
-			} else {
-				rdfvalue.type = 'uri';
-				rdfvalue.value = value.id;
-			}
-		} else if (typeof value == "string" || value instanceof String) {
-			rdfvalue.type = 'literal';
+	} else {
+		if (typeof value == "string" || value instanceof String) {
+			rdfvalue.type = "literal";
 			rdfvalue.value = value;
-			if (value.lang)
+			if (value.lang) {
 				rdfvalue["xml:lang"] = value.lang;
+			}
 		} else {
-			if (typeof value == "number")
+			if (typeof value == "number") {
 				value = new Number(value);
-			else if (typeof value == "boolean")
-				value = new Boolean(value);
-				
+			} else {
+				if (typeof value == "boolean") {
+					value = new Boolean(value);
+				}
+			}
 			var datatype = this._findDatatypeSerializer(value);
 			if (datatype) {
-				rdfvalue = {
-					"type": "typed-literal",
-					"datatype": datatype.uri,
-					"value": value.toString()
-					//todo: datatype.serialize(value) causes
-					//Error: Function.prototype.toString called on incompatible number
-				};
+				rdfvalue = {"type":"typed-literal", "datatype":datatype.uri, "value":value.toString()};
 			} else {
-				//treat it as a string 
-				//todo: warn?
-				rdfvalue = { 
-					"type": "literal", 
-				 	"value": value.toString() };
+				rdfvalue = {"type":"literal", "value":value.toString()};
 			}
 		}
-		return rdfvalue;
-	},
-	
-	_setupSaveRequest: function(saveKeywordArgs, requestKw) { 
-		 /*
-		 This function prepares the save request by populating requestKw, 
-		 an associative array that will be passed to dojo.io.bind.
-		 */
-		
-		//see http://www.w3.org/TR/rdf-sparql-json-res/
-		var rdfResult = { "head":  {'vars': ['s','p','o']}, 
-						 "results": {'bindings': []} };
-
-		var resources = [];
-		for (var key in this._deleted) {
-			resources.push(key);
-		}
-		rdfResult.results.deleted = resources;
-		
-		for (key in this._changed) {
-			var subject = this._toRDFValue(this.getIdentity(key))
-			
-			var attributes = this._changed[key];
-			for (var attr in attributes) {
-				var predicate = {type:'uri', value: attr};
-				
-				var values = attributes[attr];
-				if (!values.length)
-					continue;
-				var rdfvalues = [];
-				for (var i = 0; i < values.length; i++) {
-					var rdfvalue = this._toRDFValue(values[i]);
-					rdfResult.results.bindings.push(
-						{s: subject, p: predicate, o: rdfvalue});
-				}
+	}
+	return rdfvalue;
+}, _setupSaveRequest:function (saveKeywordArgs, requestKw) {
+	var rdfResult = {"head":{"vars":["s", "p", "o"]}, "results":{"bindings":[]}};
+	var resources = [];
+	for (var key in this._deleted) {
+		resources.push(key);
+	}
+	rdfResult.results.deleted = resources;
+	for (key in this._changed) {
+		var subject = this._toRDFValue(this.getIdentity(key));
+		var attributes = this._changed[key];
+		for (var attr in attributes) {
+			var predicate = {type:"uri", value:attr};
+			var values = attributes[attr];
+			if (!values.length) {
+				continue;
 			}
-		}
-		
-		var oldRegistry = dojo.json.jsonRegistry;
-		dojo.json.jsonRegistry = this._jsonRegistry;
-		var jsonString = dojo.json.serialize(rdfResult);
-		dojo.json.jsonRegistry = oldRegistry;
-		
-		//dojo.debug('save json' , jsonString);
-		
-		requestKw.postContent = jsonString;
-	},
-	
-	_resultToQueryMetadata: function(json) {
-		return json.head;
-	},
-	
-	_resultToQueryData: function(json) { 
-		//assume s, p, o bindings
-		var items = {};
-		var stmts = json.results.bindings;
-		for (var i = 0; i < stmts.length; i++) {
-			var stmt = stmts[i];
-			//assert stmt.s && stmt.p && stmt.o;
-			var subject = stmt.s.value;
-			if (stmt.s.type == 'bnode') {
-				subject = '_:' + subject;
+			var rdfvalues = [];
+			for (var i = 0; i < values.length; i++) {
+				var rdfvalue = this._toRDFValue(values[i]);
+				rdfResult.results.bindings.push({s:subject, p:predicate, o:rdfvalue});
 			}
-			//else { assert stmt.s.type == 'uri';} 
-			var attributes = data[subject];
-			if (!attributes) {
-				attributes = {};
-				data[stmt.s] = attributes;
-			}
-			var attr = attributes[stmt.p.value];
-			if (!attr) {
-				attributes[stmt.p.value] = [stmt.o];
-			} else {
-				attr.push(stmt.o);
-			}
 		}
-		return items;
 	}
-});
-
-dojo.declare("dojo.data.RhizomeStore", dojo.data.RdfStore, {
-	/* summary:
-	 *   RhizomeStore is a subclass of RdfStore that works with
-	 *   the Rhizome semantic wiki (see http://www.liminalzone.org)
-	 *   Rhizome understands the RemoteStore's "native" json format
-	 *   so it doesn't need to convert it to the SPARQL Query Result format.
-	 */
-
-	initializer: function(kwArgs) {
-		this._serverQueryUrl = kwArgs.baseUrl + 'search?view=json&searchType=RxPath&search=';
-		this._serverSaveUrl = kwArgs.baseUrl + 'save-metadata';
-	},
-
-	_resultToQueryMetadata: function(json) {
-		return json;
-	},
-	
-	_resultToQueryData: function(json) { 
-		//dojo.debug( 'resultjson ' + dojo.json.serialize(json) );
-		return json;
-	},
-	
-	_setupSaveRequest: function(saveKeywordArgs, requestKw) { 
-		 /*
-		 This function prepares the save request by populating requestKw, 
-		 an associative array that will be passed to dojo.io.bind.
-		 */
-		requestKw.url = this._serverSaveUrl;
-		requestKw.method = 'post';
-		requestKw.mimetype = "text/plain";
-		
-		var resources = [];
-		for (var key in this._deleted) {
+	var oldRegistry = dojo.json.jsonRegistry;
+	dojo.json.jsonRegistry = this._jsonRegistry;
+	var jsonString = dojo.json.serialize(rdfResult);
+	dojo.json.jsonRegistry = oldRegistry;
+	requestKw.postContent = jsonString;
+}, _resultToQueryMetadata:function (json) {
+	return json.head;
+}, _resultToQueryData:function (json) {
+	var items = {};
+	var stmts = json.results.bindings;
+	for (var i = 0; i < stmts.length; i++) {
+		var stmt = stmts[i];
+		var subject = stmt.s.value;
+		if (stmt.s.type == "bnode") {
+			subject = "_:" + subject;
+		}
+		var attributes = data[subject];
+		if (!attributes) {
+			attributes = {};
+			data[stmt.s] = attributes;
+		}
+		var attr = attributes[stmt.p.value];
+		if (!attr) {
+			attributes[stmt.p.value] = [stmt.o];
+		} else {
+			attr.push(stmt.o);
+		}
+	}
+	return items;
+}});
+dojo.declare("dojo.data.RhizomeStore", dojo.data.RdfStore, {initializer:function (kwArgs) {
+	this._serverQueryUrl = kwArgs.baseUrl + "search?view=json&searchType=RxPath&search=";
+	this._serverSaveUrl = kwArgs.baseUrl + "save-metadata";
+}, _resultToQueryMetadata:function (json) {
+	return json;
+}, _resultToQueryData:function (json) {
+	return json;
+}, _setupSaveRequest:function (saveKeywordArgs, requestKw) {
+	requestKw.url = this._serverSaveUrl;
+	requestKw.method = "post";
+	requestKw.mimetype = "text/plain";
+	var resources = [];
+	for (var key in this._deleted) {
+		resources.push(key);
+	}
+	var changes = {};
+	for (key in this._changed) {
+		if (!this._added[key]) {
 			resources.push(key);
 		}
-
-		var changes = {};
-		for (key in this._changed) {
-			if (!this._added[key]) { //don't put new resources in this list
-				resources.push(key);
+		var attributes = this._changed[key];
+		var rdfattributes = {};
+		for (var attr in attributes) {
+			var values = attributes[attr];
+			if (!values.length) {
+				continue;
 			}
-			
-			var attributes = this._changed[key];
-			var rdfattributes = {};
-			for (var attr in attributes) {
-				var values = attributes[attr];
-				if (!values.length)
-					continue;
-				var rdfvalues = [];
-				for (var i = 0; i < values.length; i++) {
-					var rdfvalue = this._toRDFValue(values[i]);
-					rdfvalues.push(rdfvalue);
-				}
-				rdfattributes[attr] = rdfvalues;
+			var rdfvalues = [];
+			for (var i = 0; i < values.length; i++) {
+				var rdfvalue = this._toRDFValue(values[i]);
+				rdfvalues.push(rdfvalue);
 			}
-			changes[key] = rdfattributes;
+			rdfattributes[attr] = rdfvalues;
 		}
-		
-		var oldRegistry = dojo.json.jsonRegistry;
-		dojo.json.jsonRegistry = this._jsonRegistry;
-		var jsonString = dojo.json.serialize(changes);
-		dojo.json.jsonRegistry = oldRegistry;
-		
-		requestKw.content = {
-			rdfFormat: 'json',
-			resource: resources,
-			metadata: jsonString
-		};
+		changes[key] = rdfattributes;
 	}
-});
+	var oldRegistry = dojo.json.jsonRegistry;
+	dojo.json.jsonRegistry = this._jsonRegistry;
+	var jsonString = dojo.json.serialize(changes);
+	dojo.json.jsonRegistry = oldRegistry;
+	requestKw.content = {rdfFormat:"json", resource:resources, metadata:jsonString};
+}});
 
+
 __CPAN_FILE__ src/data/CsvStore.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -73162,201 +49571,107 @@
 dojo.provide("dojo.data.CsvStore");
 dojo.require("dojo.data.core.RemoteStore");
 dojo.require("dojo.lang.assert");
-
-dojo.declare("dojo.data.CsvStore", dojo.data.core.RemoteStore, {
-	/* summary:
-	 *   The CsvStore subclasses dojo.data.core.RemoteStore to implement
-	 *   the dojo.data.core.Read API.  
-	 */
-	
-	/* examples:
-	 *   var csvStore = new dojo.data.CsvStore({queryUrl:"movies.csv");
-	 *   var csvStore = new dojo.data.CsvStore({url:"http://example.com/movies.csv");
-	 */
-	_setupQueryRequest: function(/* dojo.data.core.Result */ result, /* object */ requestKw) { 
-		// summary: See dojo.data.core.RemoteStore._setupQueryRequest()
-		var serverQueryUrl = this._serverQueryUrl ? this._serverQueryUrl : "";
-		var queryUrl = result.query ? result.query : "";
-		requestKw.url = serverQueryUrl + queryUrl;
-		requestKw.method = 'get';
-	},
-	
-	_resultToQueryData: function(/* varies */ serverResponseData) {
-		// summary: See dojo.data.core.RemoteStore._resultToQueryData()
-		var csvFileContentString = serverResponseData;
-		var arrayOfArrays = this._getArrayOfArraysFromCsvFileContents(csvFileContentString);
-		var arrayOfObjects = this._getArrayOfObjectsFromArrayOfArrays(arrayOfArrays);
-        var remoteStoreData = this._getRemoteStoreDataFromArrayOfObjects(arrayOfObjects);
-		return remoteStoreData;
-	},
-	
-	_setupSaveRequest: function(/* object */ saveKeywordArgs, /* object */ requestKw) {
-		// summary: See dojo.data.core.RemoteStore._setupSaveRequest()
-		// description: NOT IMPLEMENTED -- CsvStore is a read-only store
-	},
-	
-	// -------------------------------------------------------------------
-	// Private methods
-	_getArrayOfArraysFromCsvFileContents: function(/* string */ csvFileContents) {
-		/* summary:
-		 *   Parses a string of CSV records into a nested array structure.
-		 * description:
-		 *   Given a string containing CSV records, this method parses
-		 *   the string and returns a data structure containing the parsed
-		 *   content.  The data structure we return is an array of length
-		 *   R, where R is the number of rows (lines) in the CSV data.  The 
-		 *   return array contains one sub-array for each CSV line, and each 
-		 *   sub-array contains C string values, where C is the number of 
-		 *   columns in the CSV data.
-		 */
-		 
-		/* example:
-		 *   For example, given this CSV string as input:
-		 *     "Title, Year, Producer \n Alien, 1979, Ridley Scott \n Blade Runner, 1982, Ridley Scott"
-		 *   We will return this data structure:
-		 *     [["Title", "Year", "Producer"]
-		 *      ["Alien", "1979", "Ridley Scott"],  
-		 *      ["Blade Runner", "1982", "Ridley Scott"]]
-		 */
-		dojo.lang.assertType(csvFileContents, String);
-		
-		var lineEndingCharacters = new RegExp("\r\n|\n|\r");
-		var leadingWhiteSpaceCharacters = new RegExp("^\\s+",'g');
-		var trailingWhiteSpaceCharacters = new RegExp("\\s+$",'g');
-		var doubleQuotes = new RegExp('""','g');
-		var arrayOfOutputRecords = [];
-		
-		var arrayOfInputLines = csvFileContents.split(lineEndingCharacters);
-		for (var i in arrayOfInputLines) {
-			var singleLine = arrayOfInputLines[i];
-			if (singleLine.length > 0) {
-				var listOfFields = singleLine.split(',');
-				var j = 0;
-				while (j < listOfFields.length) {
-					var space_field_space = listOfFields[j];
-					var field_space = space_field_space.replace(leadingWhiteSpaceCharacters, ''); // trim leading whitespace
-					var field = field_space.replace(trailingWhiteSpaceCharacters, ''); // trim trailing whitespace
-					var firstChar = field.charAt(0);
-					var lastChar = field.charAt(field.length - 1);
-					var secondToLastChar = field.charAt(field.length - 2);
-					var thirdToLastChar = field.charAt(field.length - 3);
-					if ((firstChar == '"') && 
-							((lastChar != '"') || 
-							 ((lastChar == '"') && (secondToLastChar == '"') && (thirdToLastChar != '"')) )) {
-						if (j+1 === listOfFields.length) {
-							// alert("The last field in record " + i + " is corrupted:\n" + field);
-							return null;
-						}
-						var nextField = listOfFields[j+1];
-						listOfFields[j] = field_space + ',' + nextField;
-						listOfFields.splice(j+1, 1); // delete element [j+1] from the list
-					} else {
-						if ((firstChar == '"') && (lastChar == '"')) {
-							field = field.slice(1, (field.length - 1)); // trim the " characters off the ends
-							field = field.replace(doubleQuotes, '"');   // replace "" with "
-						}
-						listOfFields[j] = field;
-						j += 1;
+dojo.declare("dojo.data.CsvStore", dojo.data.core.RemoteStore, {_setupQueryRequest:function (result, requestKw) {
+	var serverQueryUrl = this._serverQueryUrl ? this._serverQueryUrl : "";
+	var queryUrl = result.query ? result.query : "";
+	requestKw.url = serverQueryUrl + queryUrl;
+	requestKw.method = "get";
+}, _resultToQueryData:function (serverResponseData) {
+	var csvFileContentString = serverResponseData;
+	var arrayOfArrays = this._getArrayOfArraysFromCsvFileContents(csvFileContentString);
+	var arrayOfObjects = this._getArrayOfObjectsFromArrayOfArrays(arrayOfArrays);
+	var remoteStoreData = this._getRemoteStoreDataFromArrayOfObjects(arrayOfObjects);
+	return remoteStoreData;
+}, _setupSaveRequest:function (saveKeywordArgs, requestKw) {
+}, _getArrayOfArraysFromCsvFileContents:function (csvFileContents) {
+	dojo.lang.assertType(csvFileContents, String);
+	var lineEndingCharacters = new RegExp("\r\n|\n|\r");
+	var leadingWhiteSpaceCharacters = new RegExp("^\\s+", "g");
+	var trailingWhiteSpaceCharacters = new RegExp("\\s+$", "g");
+	var doubleQuotes = new RegExp("\"\"", "g");
+	var arrayOfOutputRecords = [];
+	var arrayOfInputLines = csvFileContents.split(lineEndingCharacters);
+	for (var i in arrayOfInputLines) {
+		var singleLine = arrayOfInputLines[i];
+		if (singleLine.length > 0) {
+			var listOfFields = singleLine.split(",");
+			var j = 0;
+			while (j < listOfFields.length) {
+				var space_field_space = listOfFields[j];
+				var field_space = space_field_space.replace(leadingWhiteSpaceCharacters, "");
+				var field = field_space.replace(trailingWhiteSpaceCharacters, "");
+				var firstChar = field.charAt(0);
+				var lastChar = field.charAt(field.length - 1);
+				var secondToLastChar = field.charAt(field.length - 2);
+				var thirdToLastChar = field.charAt(field.length - 3);
+				if ((firstChar == "\"") && ((lastChar != "\"") || ((lastChar == "\"") && (secondToLastChar == "\"") && (thirdToLastChar != "\"")))) {
+					if (j + 1 === listOfFields.length) {
+						return null;
 					}
+					var nextField = listOfFields[j + 1];
+					listOfFields[j] = field_space + "," + nextField;
+					listOfFields.splice(j + 1, 1);
+				} else {
+					if ((firstChar == "\"") && (lastChar == "\"")) {
+						field = field.slice(1, (field.length - 1));
+						field = field.replace(doubleQuotes, "\"");
+					}
+					listOfFields[j] = field;
+					j += 1;
 				}
-				arrayOfOutputRecords.push(listOfFields);
 			}
+			arrayOfOutputRecords.push(listOfFields);
 		}
-		return arrayOfOutputRecords; // Array
-	},
-
-	_getArrayOfObjectsFromArrayOfArrays: function(/* array[] */ arrayOfArrays) {
-		/* summary:
-		 *   Converts a nested array structure into an array of keyword objects.
-		 */
-		 
-		/* example:
-		 *   For example, given this as input:
-		 *     [["Title", "Year", "Producer"]
-		 *      ["Alien", "1979", "Ridley Scott"],  
-		 *      ["Blade Runner", "1982", "Ridley Scott"]]
-		 *   We will return this as output:
-		 *     [{"Title":"Alien", "Year":"1979", "Producer":"Ridley Scott"},
-		 *      {"Title":"Blade Runner", "Year":"1982", "Producer":"Ridley Scott"}]
-		 */
-		dojo.lang.assertType(arrayOfArrays, Array);
-		var arrayOfItems = [];
-		if (arrayOfArrays.length > 1) {
-			var arrayOfKeys = arrayOfArrays[0];
-			for (var i = 1; i < arrayOfArrays.length; ++i) {
-				var row = arrayOfArrays[i];
-				var item = {};
-				for (var j in row) {
-					var value = row[j];
-					var key = arrayOfKeys[j];
-					item[key] = value;
-				}
-				arrayOfItems.push(item);
+	}
+	return arrayOfOutputRecords;
+}, _getArrayOfObjectsFromArrayOfArrays:function (arrayOfArrays) {
+	dojo.lang.assertType(arrayOfArrays, Array);
+	var arrayOfItems = [];
+	if (arrayOfArrays.length > 1) {
+		var arrayOfKeys = arrayOfArrays[0];
+		for (var i = 1; i < arrayOfArrays.length; ++i) {
+			var row = arrayOfArrays[i];
+			var item = {};
+			for (var j in row) {
+				var value = row[j];
+				var key = arrayOfKeys[j];
+				item[key] = value;
 			}
+			arrayOfItems.push(item);
 		}
-		return arrayOfItems; // Array
-	},
-	
-	_getRemoteStoreDataFromArrayOfObjects: function(/* object[] */ arrayOfObjects) {
-		/* summary:
-		 *   Converts an array of keyword objects in the internal record data 
-		 *    structure used by RemoteStore.
-		 */
-
-		/* example:
-		 *   For example, given this as input:
-		 *     [{"Title":"Alien", "Year":"1979", "Producer":"Ridley Scott"},
-		 *      {"Title":"Blade Runner", "Year":"1982", "Producer":"Ridley Scott"}]
-		 *   We will return this as output:
-		 *     { "1": {"Title":["Alien"], "Year":["1979"], "Producer":["Ridley Scott"]},
-		 *       "2": {"Title":["Blade Runner"], "Year":["1982"], "Producer":["Ridley Scott"]}
-		 *     }
-		 */
-		dojo.lang.assertType(arrayOfObjects, Array);
-		var output = {};
-		for (var i = 0; i < arrayOfObjects.length; ++i) {
-			var object = arrayOfObjects[i];
-			for (var key in object) {
-				var value = object[key]; // {"Title":"Alien"} --> "Alien"
-				object[key] = [value];   // {"Title":["Alien"]}
-			}
-			output[i] = object;
+	}
+	return arrayOfItems;
+}, _getRemoteStoreDataFromArrayOfObjects:function (arrayOfObjects) {
+	dojo.lang.assertType(arrayOfObjects, Array);
+	var output = {};
+	for (var i = 0; i < arrayOfObjects.length; ++i) {
+		var object = arrayOfObjects[i];
+		for (var key in object) {
+			var value = object[key];
+			object[key] = [value];
 		}
-		return output; // Object
-	},
-
-	// CsvStore implements the dojo.data.core.Read API, but does not yet  
-	// implements the dojo.data.core.Write API.  CsvStore extends RemoteStore,
-	// and RemoteStore does implement the Write API, so we need to explicitly
-	// mark those Write API methods as being unimplemented.
-	newItem: function(/* object? */ attributes, /* object? */ keywordArgs) {
-		dojo.unimplemented('dojo.data.CsvStore.newItem');
-	},
-	deleteItem: function(/* item */ item) {
-		dojo.unimplemented('dojo.data.CsvStore.deleteItem');
-	},
-	setValues: function(/* item */ item, /* attribute || string */ attribute, /* array */ values) {
-		dojo.unimplemented('dojo.data.CsvStore.setValues');
-	},
-	set: function(/* item */ item, /* attribute || string */ attribute, /* almost anything */ value) {
-		dojo.unimplemented('dojo.data.CsvStore.set');
-	},
-	unsetAttribute: function(/* item */ item, /* attribute || string */ attribute) {
-		dojo.unimplemented('dojo.data.CsvStore.unsetAttribute');
-	},
-	save: function(/* object? */ keywordArgs) {
-		dojo.unimplemented('dojo.data.CsvStore.save');
-	},
-	revert: function() {
-		dojo.unimplemented('dojo.data.CsvStore.revert');
-	},
-	isDirty: function(/*item?*/ item) {
-		dojo.unimplemented('dojo.data.CsvStore.isDirty');
+		output[i] = object;
 	}
+	return output;
+}, newItem:function (attributes, keywordArgs) {
+	dojo.unimplemented("dojo.data.CsvStore.newItem");
+}, deleteItem:function (item) {
+	dojo.unimplemented("dojo.data.CsvStore.deleteItem");
+}, setValues:function (item, attribute, values) {
+	dojo.unimplemented("dojo.data.CsvStore.setValues");
+}, set:function (item, attribute, value) {
+	dojo.unimplemented("dojo.data.CsvStore.set");
+}, unsetAttribute:function (item, attribute) {
+	dojo.unimplemented("dojo.data.CsvStore.unsetAttribute");
+}, save:function (keywordArgs) {
+	dojo.unimplemented("dojo.data.CsvStore.save");
+}, revert:function () {
+	dojo.unimplemented("dojo.data.CsvStore.revert");
+}, isDirty:function (item) {
+	dojo.unimplemented("dojo.data.CsvStore.isDirty");
+}});
 
-});
 
-
 __CPAN_DIR__ src/data/core
 __CPAN_FILE__ src/data/core/Read.js
 /*
@@ -73373,314 +49688,46 @@
 dojo.require("dojo.data.core.Result");
 dojo.require("dojo.lang.declare");
 dojo.require("dojo.experimental");
-
-/* summary:
- *   This is an abstract API that data provider implementations conform to.  
- *   This file defines methods signatures and intentionally leaves all the
- *   methods unimplemented.
- */
 dojo.experimental("dojo.data.core.Read");
- 
-dojo.declare("dojo.data.core.Read", null, {
-	get: function(/* item */ item, /* attribute || attribute-name-string */ attribute, /* value? */ defaultValue) {
-		/* summary:
-		 *   Returns a single attribute value.
-		 *   Returns defaultValue if *item* does not have a value for *attribute*.
-		 *   Returns null if null was explicitly set as the attribute value.
-		 *   Returns undefined if the item does not have a value for the given 
-		 *   attribute, or if the item does not have the attribute. 
-		 * description:
-		 *   Saying that an "item x does not have a value for an attribute y"
-		 *   is identical to saying that an "item x does not have attribute y". 
-		 *   It is an oxymoron to say "that attribute is present but has no values" 
-		 *   or "the item has that attribute but does not have any attribute values".
-		 *   If store.hasAttribute(item, attribute) returns false, then
-		 *   store.get(item, attribute) will return undefined.
-		 */
-		 
-		/* exceptions:
-		 *   Conforming implementations should throw an exception if *item* is not
-		 *   an item, or *attribute* is neither an attribute object or a string.
-		 * examples:
-		 *   var darthVader = store.get(lukeSkywalker, "father");
-		 */
-		dojo.unimplemented('dojo.data.core.Read.get');
-		var attributeValue = null;
-		return attributeValue; // a literal, an item, null, or undefined (never an array)
-	},
-	
-	getValues: function(/* item */ item, /* attribute || attribute-name-string */ attribute) {
-		/* summary:
-		 *   This getValues() method works just like the get() method, but getValues()
-		 *   always returns an array rather than a single attribute value.  The array
-		 *   may be empty, may contain a single attribute value, or may contain many
-		 *   attribute values.
-		 *   If the item does not have a value for the given attribute, then getValues()
-		 *   will return an empty array: [].  (So, if store.hasAttribute(item, attribute)
-		 *   returns false, then store.getValues(item, attribute) will return [].)
-		 */
-		 
-		/* exceptions:
-		 *   Throws an exception if *item* is not an item, or *attribute* is neither an 
-		 *   attribute object or a string.
-		 * examples:
-		 *   var friendsOfLuke = store.get(lukeSkywalker, "friends");
-		 */
-		dojo.unimplemented('dojo.data.core.Read.getValues');
-		var array = null;
-		return array; // an array that may contain literals and items
-	},
-	
-	getAttributes: function(/* item */ item) {
-		/* summary:
-		 *   Returns an array with all the attributes that this item has.  This
-		 *   method will always return an array; if the item has no attributes
-		 *   at all, getAttributes() will return an empty array: [].
-		 */
-		 
-		/* exceptions:
-		 *   Throws an exception if *item* is not an item. 
-		 * examples:
-		 *   var array = store.getAttributes(kermit);
-		 */
-		dojo.unimplemented('dojo.data.core.Read.getAttributes');
-		var array = null;
-		return array; // array
-	},
-	
-	hasAttribute: function(/* item */ item, /* attribute || attribute-name-string */ attribute) {
-		/* summary:
-		 *   Returns true if the given *item* has a value for the given *attribute*.
-		 */
-		 
-		/* exceptions:
-		 *   Throws an exception if *item* is not an item, or *attribute* is neither an 
-		 *   attribute object or a string.
-		 * examples:
-		 *   var trueOrFalse = store.hasAttribute(kermit, "color");
-		 */
-		dojo.unimplemented('dojo.data.core.Read.hasAttribute');
-		return false; // boolean
-	},
-	
-	containsValue: function(/* item */ item, /* attribute || attribute-name-string */ attribute, /* anything */ value) {
-		/* summary:
-		 *   Returns true if the given *value* is one of the values that getValue()
-		 *   would return.
-		 */
-		 
-		/* exceptions:
-		 *   Throws an exception if *item* is not an item, or *attribute* is neither an 
-		 *   attribute object or a string.
-		 * examples:
-		 *   var trueOrFalse = store.containsValue(kermit, "color", "green");
-		 */
-		dojo.unimplemented('dojo.data.core.Read.containsValue');
-		return false; // boolean
-	},
-	
-	isItem: function(/* anything */ something) {
-		/* summary:
-		 *   Returns true if *something* is an item.  Returns false if *something*
-		 *   is a literal or is any object other than an item.
-		 */
-		 
-		/* examples:
-		 *   var yes = store.isItem(store.newItem());
-		 *   var no  = store.isItem("green");
-		 */
-		dojo.unimplemented('dojo.data.core.Read.isItem');
-		return false; // boolean
-	},
-	
-	isItemAvailable: function(/* anything */ something) {
-		/* summary:
-		 *   Returns false if isItem(something) is false.  Returns false if
-		 *   if isItem(something) is true but the the item is not yet available
-		 *   in local memory (for example, if the item has not yet been fully
-		 *   loaded from the server).
-		 */
-		 
-		/* examples:
-		 *   var yes = store.isItemAvailable(store.newItem());
-		 *   var no  = store.isItemAvailable("green");
-		 */
-		dojo.unimplemented('dojo.data.core.Read.isItemAvailable');
-		return false; // boolean
-	},
-	
-	find: function(/* object? || dojo.data.core.Result */ keywordArgs) {
-		/* summary:
-		 *   Given a query, this method executes the query and makes the
-		 *   results available as data items.
-		 * description:
-		 *   A Result object will always be returned, even if the result set
-		 *   is empty.  A Result object will always be returned immediately.
-		 *   By default the Result object will be fully populated with result
-		 *   items as soon as it is created (synchronously).  The caller may 
-		 *   request that the find() operation be executed asynchronously, in
-		 *   which case the Result object will be returned immediately but 
-		 *   will not yet be populated with result items.  
-		 *   For more info about the Result API, see dojo.data.core.Result
-		 * keywordArgs:
-		 *   The keywordArgs parameter may either be an instance of 
-		 *   dojo.data.core.Result or may be a simple anonymous object
-		 *   that may contain any of the following:
-		 *   { query: query-string or query-object,
-		 *     sync: Boolean,
-		 *     saveResult: Boolean,
-		 *     onbegin: Function,
-		 *     onnext: Function,
-		 *     oncompleted: Function,
-		 *     onerror: Function,
-		 *     scope: object
-		 *     }
-		 *   All implementations should accept keywordArgs objects with any of
-		 *   the 7 standard properties: query, sync, saveResult, onnext, oncompleted, 
-		 *   onerror, and scope.  Some implementations may accept additional 
-		 *   properties in the keywordArgs object as valid parameters, such as 
-		 *   {maxResults:100} or {includeOutliers:true}.		 
-		 * The *query* parameter.
-		 *   The query may be optional in some data store implementations.
-		 *   The dojo.data.core.Read API does not specify the syntax or semantics
-		 *   of the query itself -- each different data store implementation
-		 *   may have its own notion of what a query should look like.
-		 *   In most implementations the query will probably be a string, but
-		 *   in some implementations the query might be a Date, or a number,
-		 *   or some complex keyword parameter object.  The dojo.data.core.Read
-		 *   API is completely agnostic about what the query actually is.
-		 * The *sync* parameter.
-		 *   The sync parameter specifies whether the find operation is asynchronous 
-		 *   or not, with {sync:false} for asynchronous finds operations and 
-		 *   {sync:true} for synchronous find operations.  If no sync parameter
-		 *   is specified, the default is {sync:true}.
-		 * The *saveResult* parameter.
-		 *   If saveResult is true, then the find call will return a Result
-		 *   object that includes a property called *items*, and *items* will
-		 *   contain an array of the items found by the query.  If no saveResult
-		 *   parameter is specified and no onnext Function is set, the default 
-		 *   saveResult value will be {saveResult:true}.  If no saveResult
-		 *   parameter is specified but an onnext Function is set, the default 
-		 *   saveResult value will be {saveResult:false}.  
-		 * The *onbegin* parameter.
-		 *   If an onbegin callback function is provided, the callback function
-		 *   will be called just once, before the first onnext callback is called.
-		 *   The onbegin callback function will be passed a single argument:
-		 *   the Result object.  The onbegin callback will be called even if 
-		 *   query returns zero items.
-		 * The *onnext* parameter.
-		 *   If an onnext callback function is provided, the callback function
-		 *   will be called as each item in the result is received. The callback 
-		 *   function will be passed two arguments: the item itself, and the
-		 *   Result object.
-		 * The *oncompleted* parameter.
-		 *   If an oncompleted callback function is provided, the callback function
-		 *   will be called just once, after the last onnext callback is called.
-		 *   The oncompleted callback function will be passed a single argument:
-		 *   the Result object.  The oncompleted callback will be called even if 
-		 *   query returns zero items.
-		 * The *onerror* parameter.
-		 *   If an onerror callback function is provided, the callback function
-		 *   will be called if there is any sort of error while attempting to
-		 *   execute the query..
-		 *   The onerror callback function will be passed two arguments:
-		 *   an Error object and the Result object.
-		 * The *scope* parameter.
-		 *   If a scope object is provided, all of the callback function (onnext, 
-		 *   oncompleted, onerror) will be invoked in the context of the scope
-		 *   object.  In the body of the callback function, the value of the "this"
-		 *   keyword will be the scope object.   If no scope object is provided,
-		 *   the callback functions will be called in the context of dj_global.  
-		 *   For example, onnext.call(scope, item, result) vs. 
-		 *   onnext.call(dj_global, item, result)
-		 * returns:
-		 *   The find() method will return an instance of dojo.data.core.Result
-		 *   (or an object that extends dojo.data.core.Result or conforms to the
-		 *   dojo.data.core.Result API).  If the find() method was passed an
-		 *   instance of dojo.data.core.Result as an argument, the same instance
-		 *   will be returned.  If the find() method was passed a simple 
-		 *   keywordArgs object, like {sync:true}, then the properties in the
-		 *   keywordArgs object will be copied into the Result object that 
-		 *   find() returns.  The Result object will also have additional 
-		 *   properties when it is returned.  The result.store property will 
-		 *   have a pointer to the datastore object that find() is a method of.
-		 *   The result.length will be -1 if the find() operation has not 
-		 *   finished or if there was an error; if the find() operation
-		 *   finishes successfully, result.length will be the number of items
-		 *   that were found.  If the saveResult property was set to true, or
-		 *   if no onnext callback was set, the result.item property will 
-		 *   contain an array of data items.  The result.resultMetadata property 
-		 *   will contain an additional metaData that was returned by the query
-		 *   along with the data items.  For example, if the query returned a
-		 *   list of 500 houses for sales, the resultMetadata property might
-		 *   contain the average asking price of the houses, or info about 
-		 *   how long the query took to execute.
-		 */
-		
-		/* exceptions:
-		 *   Throws an exception if the query is not valid, or if the query
-		 *   is required but was not supplied.
-		 * examples:
-		 *   var result = store.find({query:"all books"});
-		 *   var result = store.find();
-		 *   var result = store.find({query:"foo/bar", sync:true});
-		 *   var result = store.find({query:"foo/bar", sync:false, onnext:callback});
-		 *   var result = store.find({query:{author:"King"}, maxResults:100});
-		 */
-		dojo.unimplemented('dojo.data.core.Read.find');
-		var result = null; // new dojo.data.core.Result().
-		return result; // a dojo.data.core.Result object
-	},
-	
-	getIdentity: function(/* item */ item) {
-		/* summary:
-		 *   Returns a unique identifer for an item.  The return value will be
-		 *   either a string or something that has a toString() method (such as,
-		 *   for example, a dojo.uuid.Uuid object).
-		 * description:
-		 * ISSUE - 
-		 *   Should we move this method out of dojo.data.core.Read, and put it somewhere
-		 *   else, like maybe dojo.data.core.Identity?
-		 */
-		 
-		/* exceptions:
-		 *   Conforming implementations may throw an exception or return null if
-		 *   item is not an item.
-		 * examples:
-		 *   var itemId = store.getIdentity(kermit);
-		 *   assert(kermit === store.findByIdentity(store.getIdentity(kermit)));
-		 */
-		dojo.unimplemented('dojo.data.core.Read.getIdentity');
-		var itemIdentifyString = null;
-		return itemIdentifyString; // string
-	},
-	
-	findByIdentity: function(/* string */ identity) {
-		/* summary:
-		 *   Given the identity of an item, this method returns the item that has 
-		 *   that identity.  Conforming implementations should return null if there 
-		 *   is no item with the given identity.  Implementations of findByIdentity() 
-		 *   may sometimes return an item from a local cache and may sometimes 
-		 *   fetch an item from a remote server, in which case the call to 
-		 *   findByIdentity() will block until the findByIdentity() implementation 
-		 *   has the item to return.
-		 * description:
-		 * FIXME - 
-		 *   In our meeting on 2006-10-03 we resolved to move the findByIdentity()
-		 *   method out of the Read.js API and into the Identity.js API, as soon
-		 *   as we have an Identity.js API.
-		 */
-		 
-		/* examples:
-		 *   var alaska = store.getByIdentity("AK");
-		 *   assert("AK" == store.getIdentity(store.getByIdentity("AK")));
-		 */
-		dojo.unimplemented('dojo.data.core.Read.getByIdentity');
-		var item = null;
-		return item; // item
-	}
-});
+dojo.declare("dojo.data.core.Read", null, {get:function (item, attribute, defaultValue) {
+	dojo.unimplemented("dojo.data.core.Read.get");
+	var attributeValue = null;
+	return attributeValue;
+}, getValues:function (item, attribute) {
+	dojo.unimplemented("dojo.data.core.Read.getValues");
+	var array = null;
+	return array;
+}, getAttributes:function (item) {
+	dojo.unimplemented("dojo.data.core.Read.getAttributes");
+	var array = null;
+	return array;
+}, hasAttribute:function (item, attribute) {
+	dojo.unimplemented("dojo.data.core.Read.hasAttribute");
+	return false;
+}, containsValue:function (item, attribute, value) {
+	dojo.unimplemented("dojo.data.core.Read.containsValue");
+	return false;
+}, isItem:function (something) {
+	dojo.unimplemented("dojo.data.core.Read.isItem");
+	return false;
+}, isItemAvailable:function (something) {
+	dojo.unimplemented("dojo.data.core.Read.isItemAvailable");
+	return false;
+}, find:function (keywordArgs) {
+	dojo.unimplemented("dojo.data.core.Read.find");
+	var result = null;
+	return result;
+}, getIdentity:function (item) {
+	dojo.unimplemented("dojo.data.core.Read.getIdentity");
+	var itemIdentifyString = null;
+	return itemIdentifyString;
+}, findByIdentity:function (identity) {
+	dojo.unimplemented("dojo.data.core.Read.getByIdentity");
+	var item = null;
+	return item;
+}});
 
+
 __CPAN_FILE__ src/data/core/RemoteStore.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -73701,578 +49748,340 @@
 dojo.require("dojo.lang.declare");
 dojo.require("dojo.json");
 dojo.require("dojo.io.*");
-
-/* summary:
- *   RemoteStore is an implemention the dojo.data.core.Read and Write APIs. 
- *   It is designed to serve as a base class for dojo.data stores which interact 
- *   with stateless web services that can querying and modifying record-oriented 
- *   data.  Its features include asynchronous and synchronous querying and saving; 
- *   caching of queries; transactions; and datatype mapping.
- */
-
-/**************************************************************************
-  Classes derived from RemoteStore should implement the following three 
-  methods, which are each described in the documentation below:
-    _setupQueryRequest(result, requestKw) 
-    _resultToQueryData(responseData) 
-    _setupSaveRequest(saveKeywordArgs, requestKw)
-  
-  Data Consistency Guarantees
-  
-  * if two references to the same item are obtained (e.g. from two different query results) any changes to one item will be reflected in the other item reference.
-  * If an item has changed on the server and the item is retrieved via a new query, any previously obtained references to the item will (silently) reflect these new values.
-  * However, any uncommitted changes will not be "overwritten".
-  * If server queries are made while there are uncommitted changes, no attempt is made to evaluate whether the modifications would change the query result, e.g. add any uncommitted new items that match the query.
-  * However, uncomitted deleted items are removed from the query result.
-  * The transaction isolation level is equivalent to JDBC's "Read Committed":
-    each store instance is treated as separate transaction; since there is no row or table locking so nonrepeatable and phantom reads are possible.
-  
-  Memory Usage
-  
-  Because Javascript doesn't support weak references or user-defined finalize methods, there is a tradeoff between data consistency and memory usage.
-  In order to implement the above consistency guarantees (and to provide caching), RemoteStore remembers all the queries and items retrieved. 
-  To reduce memory consumption, use the method forgetResults(query);
-  
-  Store assumptions
-  
-  RemoteStore makes some assumptions about the nature of the remote store, things may break if these aren't true:
-  * that the items contained in a query response include all the attributes of the item (e.g. all the columns of a row).   
-    (to fix: changes need to record add and removes and fix self._data[key] = [ attributeDict, refCount]; )
-  * the query result may contain references to items that are not available to the client; use isItem() to test for the presence of the item.
-  * that modification to an item's attributes won't change it's primary key.
-  
-**************************************************************************/
-
-/* dojo.data API issues to resolve:
- * save should returns a Deferred, might want to add keyword argument with 'sync' 
- */
-
 dojo.experimental("dojo.data.core.RemoteStore");
-
-dojo.lang.declare("dojo.data.core.RemoteStore", [dojo.data.core.Read, dojo.data.core.Write], {
-
-	_datatypeMap: {
-		//map datatype strings to constructor function
-	},
-
-	//set to customize json serialization
-	_jsonRegistry: dojo.json.jsonRegistry,
-
-	initializer: function(/* object */ kwArgs) {
-		if (!kwArgs) {
-			kwArgs = {};
-		}
-		this._serverQueryUrl = kwArgs.queryUrl || "";
-		this._serverSaveUrl = kwArgs.saveUrl || "";
-				
-		this._deleted = {}; // deleted items {id: 1}	
-		this._changed = {}; // {id: {attr: [new values]}} // [] if attribute is removed
-		this._added = {};   // {id: 1} list of added items
-		this._results = {}; // {query: [ id1, ]};	// todo: make MRUDict of queries
-		/* data is a dictionary that conforms to this format: 
-		  { id-string: { attribute-string: [ value1, value2 ] } }
-		  where value is either an atomic JSON data type or 
-		  { 'id': string } for references to items
-		  or 
-		  { 'type': 'name', 'value': 'value' } for user-defined datatypes
-		*/ 
-		this._data = {}; // {id: [values, refcount]} // todo: handle refcount
-		this._numItems = 0;
-	},
-	
-	_setupQueryRequest: function(/* dojo.data.core.Result */ result, /* object */ requestKw) { 
-		/* summary:
-		 *   Classes derived from RemoteStore should override this method to
-		 *   provide their own implementations.
-		 *   This function prepares the query request by populating requestKw, 
-		 *   an associative array that will be passed to dojo.io.bind.
-		 */
-		result.query = result.query || "";
-		requestKw.url = this._serverQueryUrl + encodeURIComponent(result.query);
-		requestKw.method = 'get';
-		requestKw.mimetype = "text/json";
-	},
-
-	_resultToQueryMetadata: function(/* varies */ serverResponseData) { 
-		/* summary:
-		 *   Classes derived from RemoteStore should override this method to
-		 *   provide their own implementations.
-		 *   Converts the server response data into the resultMetadata object
-		 *   that will be returned to the caller.
-		 * returns:
-		 *   This simple default implementation just returns the entire raw
-		 *   serverResponseData, allowing the caller complete access to the 
-		 *   raw response data and metadata.
-		 */
-		return serverResponseData; 
-	},
-		
-	_resultToQueryData: function(/* varies */ serverResponseData) {
-		/* summary:
-		 *   Classes derived from RemoteStore should override this method to
-		 *   provide their own implementations.
-		 *   Converts the server response data into the internal data structure 
-		 *   used by RemoteStore.  
-		 * returns:
-		 *   The RemoteStore implementation requires _resultToQueryData() to 
-		 *   return an object that looks like:
-		 *   {item1-identifier-string: { 
-		 *   	attribute1-string: [ value1, value2, ... ], 
-		 *   	attribute2-string: [ value3, value4, ... ], 
-		 *   	...
-		 *   	},
-		 *    item2-identifier-string: { 
-		 *   	attribute1-string: [ value10, value11, ... ], 
-		 *   	attribute2-string: [ value12, value13, ... ], 
-		 *   	...
-		 *   	}
-		 *   }
-		 *   where value is either an atomic JSON data type or 
-		 *     {'id': string } for references to items
-		 *   or 
-		 *    {'type': 'name', 'value': 'value' } for user-defined datatypes
-		 * data:
-		 *   This simple default implementation assumes that the *serverResponseData* 
-		 *   argument is an object that looks like:
-		 *     { data:{ ... }, format:'format identifier', other metadata }
-		 *   
-		 */
-		return serverResponseData.data;
-	},
-
-	_remoteToLocalValues: function(/* object */ attributes) {
-		for (var key in attributes) {
-			 var values = attributes[key];
-			 for (var i = 0; i < values.length; i++) {
-				var value = values[i];
-				var type = value.datatype || value.type;
-				if (type) {
-					// todo: better error handling?
-					var localValue = value.value;
-					if (this._datatypeMap[type]) 
-						localValue = this._datatypeMap[type](value);							
-					values[i] = localValue;
+dojo.lang.declare("dojo.data.core.RemoteStore", [dojo.data.core.Read, dojo.data.core.Write], {_datatypeMap:{}, _jsonRegistry:dojo.json.jsonRegistry, initializer:function (kwArgs) {
+	if (!kwArgs) {
+		kwArgs = {};
+	}
+	this._serverQueryUrl = kwArgs.queryUrl || "";
+	this._serverSaveUrl = kwArgs.saveUrl || "";
+	this._deleted = {};
+	this._changed = {};
+	this._added = {};
+	this._results = {};
+	this._data = {};
+	this._numItems = 0;
+}, _setupQueryRequest:function (result, requestKw) {
+	result.query = result.query || "";
+	requestKw.url = this._serverQueryUrl + encodeURIComponent(result.query);
+	requestKw.method = "get";
+	requestKw.mimetype = "text/json";
+}, _resultToQueryMetadata:function (serverResponseData) {
+	return serverResponseData;
+}, _resultToQueryData:function (serverResponseData) {
+	return serverResponseData.data;
+}, _remoteToLocalValues:function (attributes) {
+	for (var key in attributes) {
+		var values = attributes[key];
+		for (var i = 0; i < values.length; i++) {
+			var value = values[i];
+			var type = value.datatype || value.type;
+			if (type) {
+				var localValue = value.value;
+				if (this._datatypeMap[type]) {
+					localValue = this._datatypeMap[type](value);
 				}
+				values[i] = localValue;
 			}
 		}
-		return attributes; // object (attributes argument, modified in-place)
-	},
-
-	_queryToQueryKey: function(query) {
-		/* summary:
-		 *   Convert the query to a string that uniquely represents this query. 
-		 *   (Used by the query cache.)
-		 */
-		if (typeof query == "string")
-			return query;
-		else
-			return dojo.json.serialize(query);
-	},
-
-	_assertIsItem: function(/* item */ item) {
-		if (!this.isItem(item)) { 
-			throw new Error("dojo.data.RemoteStore: a function was passed an item argument that was not an item");
+	}
+	return attributes;
+}, _queryToQueryKey:function (query) {
+	if (typeof query == "string") {
+		return query;
+	} else {
+		return dojo.json.serialize(query);
+	}
+}, _assertIsItem:function (item) {
+	if (!this.isItem(item)) {
+		throw new Error("dojo.data.RemoteStore: a function was passed an item argument that was not an item");
+	}
+}, get:function (item, attribute, defaultValue) {
+	var valueArray = this.getValues(item, attribute);
+	if (valueArray.length == 0) {
+		return defaultValue;
+	}
+	return valueArray[0];
+}, getValues:function (item, attribute) {
+	var itemIdentity = this.getIdentity(item);
+	this._assertIsItem(itemIdentity);
+	var changes = this._changed[itemIdentity];
+	if (changes) {
+		var newvalues = changes[attribute];
+		if (newvalues !== undefined) {
+			return newvalues;
+		} else {
+			return [];
 		}
-	},
-	
-	get: function(/* item */ item, /* attribute || string */ attribute, /* value? */ defaultValue) {
-		// summary: See dojo.data.core.Read.get()
-		var valueArray = this.getValues(item, attribute);
-		if (valueArray.length == 0) {
-			return defaultValue;
+	}
+	return this._data[itemIdentity][0][attribute];
+}, getAttributes:function (item) {
+	var itemIdentity = this.getIdentity(item);
+	if (!itemIdentity) {
+		return undefined;
+	}
+	var atts = [];
+	var attrDict = this._data[itemIdentity][0];
+	for (var att in attrDict) {
+		atts.push(att);
+	}
+	return atts;
+}, hasAttribute:function (item, attribute) {
+	var valueArray = this.getValues(item, attribute);
+	return valueArray.length ? true : false;
+}, containsValue:function (item, attribute, value) {
+	var valueArray = this.getValues(item, attribute);
+	for (var i = 0; i < valueArray.length; i++) {
+		if (valueArray[i] == value) {
+			return true;
 		}
-		return valueArray[0];  // value
-	},
-
-	getValues: function(/* item */ item, /* attribute || string */ attribute) {				
-		// summary: See dojo.data.core.Read.getValues()
-		var itemIdentity = this.getIdentity(item);
-		this._assertIsItem(itemIdentity);
-		var changes = this._changed[itemIdentity];
-		if (changes) {
-			var newvalues = changes[attribute]; 
-			if (newvalues !== undefined) {
-				return newvalues;  // Array
+	}
+	return false;
+}, isItem:function (something) {
+	if (!something) {
+		return false;
+	}
+	var itemIdentity = something;
+	if (this._deleted[itemIdentity]) {
+		return false;
+	}
+	if (this._data[itemIdentity]) {
+		return true;
+	}
+	if (this._added[itemIdentity]) {
+		return true;
+	}
+	return false;
+}, find:function (keywordArgs) {
+	var result = null;
+	if (keywordArgs instanceof dojo.data.core.Result) {
+		result = keywordArgs;
+		result.store = this;
+	} else {
+		result = new dojo.data.core.Result(keywordArgs, this);
+	}
+	var query = result.query;
+	var self = this;
+	var bindfunc = function (type, data, evt) {
+		var scope = result.scope || dj_global;
+		if (type == "load") {
+			result.resultMetadata = self._resultToQueryMetadata(data);
+			var dataDict = self._resultToQueryData(data);
+			if (result.onbegin) {
+				result.onbegin.call(scope, result);
 			}
-			else {
-				return []; // Array
-			}
-		}
-		// return item.atts[attribute];
-		return this._data[itemIdentity][0][attribute]; // Array
-	},
-
-	getAttributes: function(/* item */ item) {	
-		// summary: See dojo.data.core.Read.getAttributes()
-		var itemIdentity = this.getIdentity(item);
-		if (!itemIdentity) 
-			return undefined; //todo: raise exception
-
-		var atts = [];
-		//var attrDict = item.attrs;
-		var attrDict = this._data[itemIdentity][0];
-		for (var att in attrDict) {
-			atts.push(att);
-		}
-		return atts; // Array
-	},
-	
-	hasAttribute: function(/* item */ item, /* attribute || string */ attribute) {
-		// summary: See dojo.data.core.Read.hasAttribute()
-		var valueArray = this.getValues(item, attribute);
-		return valueArray.length ? true : false; // Boolean
-	},
-
-	containsValue: function(/* item */ item, /* attribute || string */ attribute, /* value */ value) {
-		// summary: See dojo.data.core.Read.containsValue()
-		var valueArray = this.getValues(item, attribute);
-		for (var i=0; i < valueArray.length; i++) {	
-			if (valueArray[i] == value) {
-				return true; // Boolean
-			}
-		}
-		return false; // Boolean
-	},
-		
-	isItem: function(/* anything */ something) {
-		// summary: See dojo.data.core.Read.isItem()
-		if (!something) { return false; }
-		var itemIdentity = something;
-		// var id = something.id ? something.id : something; 
-		// if (!id) { return false; }
-		if (this._deleted[itemIdentity]) { return false; } //todo: do this?
-		if (this._data[itemIdentity]) { return true; } 
-		if (this._added[itemIdentity]) { return true; }
-		return false; // Boolean
-	},
-
-	find: function(/* object? || dojo.data.core.Result */ keywordArgs) {
-		// summary: See dojo.data.core.Read.find()
-		/* description:
-		 *   In addition to the keywordArgs parameters described in the
-		 *   dojo.data.core.Read.find() documentation, the keywordArgs for
-		 *   the RemoteStore find() method may include a bindArgs parameter,
-		 *   which the RemoteStore will pass to dojo.io.bind when it sends 
-		 *   the query.  The bindArgs parameter should be a keyword argument 
-		 *   object, as described in the dojo.io.bind documentation.
-		 */
-		var result = null;
-		if (keywordArgs instanceof dojo.data.core.Result) {
-			result = keywordArgs;
-			result.store = this;
-		} else {
-			result = new dojo.data.core.Result(keywordArgs, this);
-		}
-		var query = result.query;
-		
-		//todo: use this._results to implement caching
-		var self = this;
-		var bindfunc = function(type, data, evt) {
-			var scope = result.scope || dj_global;
-			if(type == "load") {	
-				//dojo.debug("loaded 1 " + dojo.json.serialize(data) );
-				result.resultMetadata = self._resultToQueryMetadata(data);
-				var dataDict = self._resultToQueryData(data); 
-				//dojo.debug("loaded 2 " + dojo.json.serialize(dataDict) );
-				if (result.onbegin) {
-					result.onbegin.call(scope, result);
+			var count = 0;
+			var resultData = [];
+			var newItemCount = 0;
+			for (var key in dataDict) {
+				if (result._aborted) {
+					break;
 				}
-				var count = 0;
-				var resultData = []; 
-				var newItemCount = 0;
-				for (var key in dataDict) {
-					if (result._aborted)  {
-						break;
+				if (!self._deleted[key]) {
+					var values = dataDict[key];
+					var attributeDict = self._remoteToLocalValues(values);
+					var existingValue = self._data[key];
+					var refCount = 1;
+					if (existingValue) {
+						refCount = ++existingValue[1];
+					} else {
+						newItemCount++;
 					}
-					if (!self._deleted[key]) { //skip deleted items
-						//todo if in _added, remove from _added
-						var values = dataDict[key];										
-						var attributeDict = self._remoteToLocalValues(values);
-						var existingValue = self._data[key];
-						var refCount = 1;
-						if (existingValue) {
-							refCount = ++existingValue[1]; //increment ref count
-						} else {
-							newItemCount++;
-						}
-						//note: if the item already exists, we replace the item with latest set of attributes
-						//this assumes queries always return complete records
-						self._data[key] = [ attributeDict, refCount]; 
-						resultData.push(key);
-						count++; 
-						if (result.onnext) {
-							result.onnext.call(scope, key, result);
-						}
-					}									
+					self._data[key] = [attributeDict, refCount];
+					resultData.push(key);
+					count++;
+					if (result.onnext) {
+						result.onnext.call(scope, key, result);
+					}
 				}
-				self._results[self._queryToQueryKey(query)] = resultData; 
-				self._numItems += newItemCount;
-
-				result.length = count;
-				if (result.saveResult) {
-					result.items = resultData;
-				}
-				if (!result._aborted && result.oncompleted) {
-					result.oncompleted.call(scope, result);
-				}
-			} else if(type == "error" || type == 'timeout') {
-				// here, "data" is our error object
-				//todo: how to handle timeout?
+			}
+			self._results[self._queryToQueryKey(query)] = resultData;
+			self._numItems += newItemCount;
+			result.length = count;
+			if (result.saveResult) {
+				result.items = resultData;
+			}
+			if (!result._aborted && result.oncompleted) {
+				result.oncompleted.call(scope, result);
+			}
+		} else {
+			if (type == "error" || type == "timeout") {
 				dojo.debug("find error: " + dojo.json.serialize(data));
 				if (result.onerror) {
 					result.onerror.call(scope, data);
 				}
 			}
-		};
-
-		var bindKw = keywordArgs.bindArgs || {};
-		bindKw.sync = result.sync;
-		bindKw.handle = bindfunc;
-
-		this._setupQueryRequest(result, bindKw);
-		var request = dojo.io.bind(bindKw);
-		//todo: error if not bind success
-		//dojo.debug( "bind success " + request.bindSuccess);
-		result._abortFunc = request.abort;	 
-		return result; 
-	},
-
-	getIdentity: function(item) {
-		// summary: See dojo.data.core.Read.getIdentity()
-		if (!this.isItem(item)) {
-			return null;
 		}
-		return (item.id ? item.id : item); // Identity
-	},
-
-/*
-	findByIdentity: function(id) {
-		var item = this._latestData[id];
-		var idQuery = "/" + "*[.='"+id+"']";
-		//if (!item) item = this.find(idQuery, {async=0}); //todo: support bind(async=0)
-		if (item)
-			return new _Item(id, item, this); 
+	};
+	var bindKw = keywordArgs.bindArgs || {};
+	bindKw.sync = result.sync;
+	bindKw.handle = bindfunc;
+	this._setupQueryRequest(result, bindKw);
+	var request = dojo.io.bind(bindKw);
+	result._abortFunc = request.abort;
+	return result;
+}, getIdentity:function (item) {
+	if (!this.isItem(item)) {
 		return null;
-	},
-*/
-
-/****
-Write API
-***/
-	newItem: function(/* object? */ attributes, /* object? */ keywordArgs) {
-		var itemIdentity = keywordArgs['identity'];
-		if (this._deleted[itemIdentity]) {
-			delete this._deleted[itemIdentity];
-		} else {
-			this._added[itemIdentity] = 1;
-			//todo? this._numItems++; ?? but its not in this._data
+	}
+	return (item.id ? item.id : item);
+}, newItem:function (attributes, keywordArgs) {
+	var itemIdentity = keywordArgs["identity"];
+	if (this._deleted[itemIdentity]) {
+		delete this._deleted[itemIdentity];
+	} else {
+		this._added[itemIdentity] = 1;
+	}
+	if (attributes) {
+		for (var attribute in attributes) {
+			var valueOrArrayOfValues = attributes[attribute];
+			if (dojo.lang.isArray(valueOrArrayOfValues)) {
+				this.setValues(itemIdentity, attribute, valueOrArrayOfValues);
+			} else {
+				this.set(itemIdentity, attribute, valueOrArrayOfValues);
+			}
 		}
-		if (attributes) {
-			// FIXME:
-			for (var attribute in attributes) {
-				var valueOrArrayOfValues = attributes[attribute];
-				if (dojo.lang.isArray(valueOrArrayOfValues)) {
-					this.setValues(itemIdentity, attribute, valueOrArrayOfValues);
+	}
+	return {id:itemIdentity};
+}, deleteItem:function (item) {
+	var identity = this.getIdentity(item);
+	if (!identity) {
+		return false;
+	}
+	if (this._added[identity]) {
+		delete this._added[identity];
+	} else {
+		this._deleted[identity] = 1;
+	}
+	if (this._changed[identity]) {
+		delete this._changed[identity];
+	}
+	return true;
+}, setValues:function (item, attribute, values) {
+	var identity = this.getIdentity(item);
+	if (!identity) {
+		return undefined;
+	}
+	var changes = this._changed[identity];
+	if (!changes) {
+		changes = {};
+		this._changed[identity] = changes;
+	}
+	changes[attribute] = values;
+	return true;
+}, set:function (item, attribute, value) {
+	return this.setValues(item, attribute, [value]);
+}, unsetAttribute:function (item, attribute) {
+	return this.setValues(item, attribute, []);
+}, _initChanges:function () {
+	this._deleted = {};
+	this._changed = {};
+	this._added = {};
+}, _setupSaveRequest:function (saveKeywordArgs, requestKw) {
+	requestKw.url = this._serverSaveUrl;
+	requestKw.method = "post";
+	requestKw.mimetype = "text/plain";
+	var deleted = [];
+	for (var key in this._deleted) {
+		deleted.push(key);
+	}
+	var saveStruct = {"changed":this._changed, "deleted":deleted};
+	var oldRegistry = dojo.json.jsonRegistry;
+	dojo.json.jsonRegistry = this._jsonRegistry;
+	var jsonString = dojo.json.serialize(saveStruct);
+	dojo.json.jsonRegistry = oldRegistry;
+	requestKw.postContent = jsonString;
+}, save:function (keywordArgs) {
+	keywordArgs = keywordArgs || {};
+	var result = new dojo.Deferred();
+	var self = this;
+	var bindfunc = function (type, data, evt) {
+		if (type == "load") {
+			if (result.fired == 1) {
+				return;
+			}
+			var key = null;
+			for (key in self._added) {
+				if (!self._data[key]) {
+					self._data[key] = [{}, 1];
+				}
+			}
+			for (key in self._changed) {
+				var existing = self._data[key];
+				var changes = self._changed[key];
+				if (existing) {
+					existing[0] = changes;
 				} else {
-					this.set(itemIdentity, attribute, valueOrArrayOfValues);
+					self._data[key] = [changes, 1];
 				}
 			}
-		}
-		return { id: itemIdentity };
-	},
-		
-	deleteItem: function(/* item */ item) {
-		var identity = this.getIdentity(item);
-		if (!identity) {
-			return false;
-		}
-		
-		if (this._added[identity]) {
-			delete this._added[identity];
+			for (key in self._deleted) {
+				if (self._data[key]) {
+					delete self._data[key];
+				}
+			}
+			self._initChanges();
+			result.callback(true);
 		} else {
-			this._deleted[identity] = 1; 
-			//todo? this._numItems--; ?? but its still in this._data
+			if (type == "error" || type == "timeout") {
+				result.errback(data);
+			}
 		}
-			
-		if (this._changed[identity]) {
-			delete this._changed[identity];	
+	};
+	var bindKw = {sync:keywordArgs["sync"], handle:bindfunc};
+	this._setupSaveRequest(keywordArgs, bindKw);
+	var request = dojo.io.bind(bindKw);
+	result.canceller = function (deferred) {
+		request.abort();
+	};
+	return result;
+}, revert:function () {
+	this._initChanges();
+	return true;
+}, isDirty:function (item) {
+	if (item) {
+		var identity = item.id || item;
+		return this._deleted[identity] || this._changed[identity];
+	} else {
+		var key = null;
+		for (key in this._changed) {
+			return true;
 		}
-		return true; 
-	},
-	
-	setValues: function(/* item */ item, /* attribute || string */ attribute, /* array */ values) {
-		var identity = this.getIdentity(item);
-		if (!identity) {
-			return undefined; //todo: raise exception
+		for (key in this._deleted) {
+			return true;
 		}
-
-		var changes = this._changed[identity];
-		if (!changes) {
-			changes = {}
-			this._changed[identity] = changes;
-		} 					
-		changes[attribute] = values;
-		return true; // boolean
-	},
-
-	set: function(/* item */ item, /* attribute || string */ attribute, /* almost anything */ value) {
-		return this.setValues(item, attribute, [value]); 
-	},
-
-	unsetAttribute: function(/* item */ item, /* attribute || string */ attribute) {
-		return this.setValues(item, attribute, []); 
-	},
-
-	_initChanges: function() {
-		this._deleted = {}; 
-		this._changed = {};
-		this._added = {}; 
-	},
-
-	_setupSaveRequest: function(saveKeywordArgs, requestKw) { 
-		/* summary:
-		 *   This function prepares the save request by populating requestKw, 
-		 *   an associative array that will be passed to dojo.io.bind.
-		 */
-		requestKw.url = this._serverSaveUrl;
-		requestKw.method = 'post';
-		requestKw.mimetype = "text/plain";
-		var deleted = [];
-		for (var key in this._deleted) {
-			deleted.push(key);
+		for (key in this._added) {
+			return true;
 		}
-		//don't need _added in saveStruct, changed covers that info	 
-		var saveStruct = {'changed': this._changed, 'deleted': deleted };
-		var oldRegistry = dojo.json.jsonRegistry;
-		dojo.json.jsonRegistry = this._jsonRegistry;
-		var jsonString = dojo.json.serialize(saveStruct);
-		dojo.json.jsonRegistry = oldRegistry;
-		requestKw.postContent = jsonString;
-	},
-
-	save: function(/* object? */ keywordArgs) {
-		/* summary:
-		 *   Saves all the changes that have been made.
-		 * keywordArgs:
-		 *   The optional keywordArgs parameter may contain 'sync' to specify 
-		 *   whether the save operation is asynchronous or not.  The default is 
-		 *   asynchronous.  
-		 * examples: 
-		 *   store.save();
-		 *   store.save({sync:true});
-		 *   store.save({sync:false});
-		 */
-		keywordArgs = keywordArgs || {};
-		var result = new dojo.Deferred();			 
-		var self = this;
-
-		var bindfunc = function(type, data, evt) {			
-			if(type == "load"){ 
-				if (result.fired == 1) {
-					//it seems that mysteriously "load" sometime 
-					//gets called after "error"
-					//so check if an error has already occurred 
-					//and stop if it has 
-					return;
-				}
-				//update this._data upon save
-				var key = null;
-				for (key in self._added) {
-					if (!self._data[key])
-					self._data[key] = [{} , 1];
-				}
-				for (key in self._changed) {
-					var existing = self._data[key];
-					var changes = self._changed[key];
-					if (existing) {
-						existing[0] = changes;
-					} else {
-						self._data[key] = [changes, 1];
-					}
-				}
-				for (key in self._deleted) {
-					if (self._data[key]) {
-						delete self._data[key];
-					}
-				}
-				self._initChanges(); 
-				result.callback(true); //todo: what result to pass?
-			} else if(type == "error" || type == 'timeout'){
-				result.errback(data); //todo: how to handle timeout
-			}	
-		};
-				
-		var bindKw = { sync: keywordArgs["sync"], handle: bindfunc };
-		this._setupSaveRequest(keywordArgs, bindKw);
-		var request = dojo.io.bind(bindKw);
-		result.canceller = function(deferred) { request.abort(); };
-				
-		return result; 
-	},
-		 
-	revert: function() {
-		this._initChanges(); 
-		return true;
-	},
-
-	isDirty: function(/*item?*/ item) {
-		if (item) {
-			// return true if this item is dirty
-			var identity = item.id || item;
-			return this._deleted[identity] || this._changed[identity];
+		return false;
+	}
+}, createReference:function (idstring) {
+	return {id:idstring};
+}, getSize:function () {
+	return this._numItems;
+}, forgetResults:function (query) {
+	var queryKey = this._queryToQueryKey(query);
+	var results = this._results[queryKey];
+	if (!results) {
+		return false;
+	}
+	var removed = 0;
+	for (var i = 0; i < results.length; i++) {
+		var key = results[i];
+		var existingValue = this._data[key];
+		if (existingValue[1] <= 1) {
+			delete this._data[key];
+			removed++;
 		} else {
-			// return true if any item is dirty
-			var key = null;
-			for (key in this._changed) {
-				return true;
-			}
-			for (key in this._deleted) {
-				return true;
-			}
-			for (key in this._added) {
-				return true;
-			}
-
-			return false;
+			existingValue[1] = --existingValue[1];
 		}
-	},
+	}
+	delete this._results[queryKey];
+	this._numItems -= removed;
+	return true;
+}});
 
-/**
-additional public methods
-*/
-	createReference: function(idstring) {
-		return { id : idstring };
-	},
 
-	getSize: function() { 
-		return this._numItems; 
-	},
-		
-	forgetResults: function(query) {
-		var queryKey = this._queryToQueryKey(query);
-		var results = this._results[queryKey];
-		if (!results) return false;
-
-		var removed = 0;
-		for (var i = 0; i < results.length; i++) {
-			var key = results[i];
-			var existingValue = this._data[key];
-			if (existingValue[1] <= 1) {
-				delete this._data[key];
-				removed++;
-			}
-			else
-				existingValue[1] = --existingValue[1];
-		}
-		delete this._results[queryKey];
-		this._numItems -= removed;
-		return true;
-	} 
-});
-
-
-
-
 __CPAN_FILE__ src/data/core/Write.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -74288,162 +50097,35 @@
 dojo.require("dojo.data.core.Read");
 dojo.require("dojo.lang.declare");
 dojo.require("dojo.experimental");
-
-/* summary:
- *   This is an abstract API that data provider implementations conform to.  
- *   This file defines methods signatures and intentionally leaves all the
- *   methods unimplemented.
- */
 dojo.experimental("dojo.data.core.Write");
- 
-dojo.declare("dojo.data.core.Write", dojo.data.core.Read, {
-	newItem: function(/* object? */ keywordArgs) {
-		/* summary:
-		 *   Returns a newly created item.  Sets the attributes of the new
-		 *   item based on the *keywordArgs* provided.
-		 */
-		 
-		/* exceptions:
-		 *   Throws an exception if *keywordArgs* is a string or a number or
-		 *   anything other than a simple anonymous object.
-		 * examples:
-		 *   var kermit = store.newItem({name: "Kermit", color:[blue, green]});
-		 */
-		var newItem;
-		dojo.unimplemented('dojo.data.core.Write.newItem');
-		return newItem; // item
-	},
-	
-	deleteItem: function(/* item */ item) {
-		/* summary:
-		 *   Deletes an item from the store.
-		 */
-		 
-		/* exceptions:
-		 *   Throws an exception if the argument *item* is not an item 
-		 *   (if store.isItem(item) returns false).
-		 * examples:
-		 *   var success = store.deleteItem(kermit);
-		 */
-		dojo.unimplemented('dojo.data.core.Write.deleteItem');
-		return false; // boolean
-	},
-	
-	set: function(/* item */ item, /* attribute || string */ attribute, /* almost anything */ value) {
-		/* summary:
-		 *   Sets the value of an attribute on an item.
-		 *   Replaces any previous value or values.
-		 */
-		 
-		/* exceptions:
-		 *   Throws an exception if *item* is not an item, or if *attribute*
-		 *   is neither an attribute object or a string.
-		 *   Throws an exception if *value* is undefined.
-		 * examples:
-		 *   var success = store.set(kermit, "color", "green");
-		 */
-		dojo.unimplemented('dojo.data.core.Write.set');
-		return false; // boolean
-	},
-	
-	setValues: function(/* item */ item, /* attribute || string */ attribute, /* array */ values) {
-		/* summary:
-		 *   Adds each value in the *values* array as a value of the given
-		 *   attribute on the given item.
-		 *   Replaces any previous value or values.
-		 *   Calling store.setValues(x, y, []) (with *values* as an empty array) has
-		 *   the same effect as calling store.clear(x, y).
-		 */
-		 
-		/* exceptions:
-		 *   Throws an exception if *values* is not an array, if *item* is not an
-		 *   item, or if *attribute* is neither an attribute object or a string.
-		 * examples:
-		 *   var success = store.setValues(kermit, "color", ["green", "aqua"]);
-		 *   success = store.setValues(kermit, "color", []);
-		 *   if (success) {assert(!store.hasAttribute(kermit, "color"));}
-		 */
-		dojo.unimplemented('dojo.data.core.Write.setValues');
-		return false; // boolean
-	},
-	
-	unsetAttribute: function(/* item */ item, /* attribute || string */ attribute) {
-		/* summary:
-		 *   Deletes all the values of an attribute on an item.
-		 */
-		 
-		/* exceptions:
-		 *   Throws an exception if *item* is not an item, or if *attribute*
-		 *   is neither an attribute object or a string.
-		 * examples:
-		 *   var success = store.unsetAttribute(kermit, "color");
-		 *   if (success) {assert(!store.hasAttribute(kermit, "color"));}
-		 */
-		dojo.unimplemented('dojo.data.core.Write.clear');
-		return false; // boolean
-	},
-	
-	save: function() {
-		/* summary:
-		 *   Saves to the server all the changes that have been made locally.
-		 *   The save operation may take some time.  By default the save will
-		 *   be done synchronously, before the call returns.  The caller may
-		 *   be request an asynchronous save by passing {async: true}.
-		 *   If the caller requests an asynchronous save, the data store may do
-		 *   either a synchronous or asynchronous save, whichever it prefers.
-		 *   Different data store implementations may take additional optional
-		 *   parameters.
-		 * description:
-		 * ISSUE - 
-		 *   Should the async save take a callback, like this:
-		 *     store.save({sync: false, onComplete: callback});
-		 *   Or should the async save return a Deferred, like this:
-		 *     var deferred = store.save({sync: false});
-		 *     deferred.addCallbacks(successCallback, errorCallback);
-		 *   Or should save() return boolean, like this:
-		 *     var success = store.save();
-		 */
-		 
-		/* examples:
-		 *   var success = store.save();
-		 *   var success = store.save({sync: false});
-		 */
-		dojo.unimplemented('dojo.data.core.Write.save');
-		return false; // boolean
-	},
-	
-	revert: function() {
-		/* summary:
-		 *   Discards any unsaved changes.
-		 */
-		 
-		/* examples:
-		 *   var success = store.revert();
-		 */
-		dojo.unimplemented('dojo.data.core.Write.revert');
-		return false; // boolean
-	},
-	
-	isDirty: function(/* item? */ item) {
-		/* summary:
-		 *   Given an item, isDirty() returns true if the item has been modified 
-		 *   since the last save().  If isDirty() is called with no *item* argument,  
-		 *   then this method returns true if any item has been modified since
-		 *   the last save().
-		 */
-		 
-		/* exceptions:
-		 *   Throws an exception if isDirty() is passed an argument and the
-		 *   argument is not an item.
-		 * examples:
-		 *   var trueOrFalse = store.isDirty(kermit); // true if kermit is dirty
-		 *   var trueOrFalse = store.isDirty();       // true if any item is dirty
-		 */
-		dojo.unimplemented('dojo.data.core.Write.isDirty');
-		return false; // boolean
-	}
-});
+dojo.declare("dojo.data.core.Write", dojo.data.core.Read, {newItem:function (keywordArgs) {
+	var newItem;
+	dojo.unimplemented("dojo.data.core.Write.newItem");
+	return newItem;
+}, deleteItem:function (item) {
+	dojo.unimplemented("dojo.data.core.Write.deleteItem");
+	return false;
+}, set:function (item, attribute, value) {
+	dojo.unimplemented("dojo.data.core.Write.set");
+	return false;
+}, setValues:function (item, attribute, values) {
+	dojo.unimplemented("dojo.data.core.Write.setValues");
+	return false;
+}, unsetAttribute:function (item, attribute) {
+	dojo.unimplemented("dojo.data.core.Write.clear");
+	return false;
+}, save:function () {
+	dojo.unimplemented("dojo.data.core.Write.save");
+	return false;
+}, revert:function () {
+	dojo.unimplemented("dojo.data.core.Write.revert");
+	return false;
+}, isDirty:function (item) {
+	dojo.unimplemented("dojo.data.core.Write.isDirty");
+	return false;
+}});
 
+
 __CPAN_FILE__ src/data/core/Result.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -74458,52 +50140,28 @@
 dojo.provide("dojo.data.core.Result");
 dojo.require("dojo.lang.declare");
 dojo.require("dojo.experimental");
-
-/* summary:
- *	 Instances of dojo.data.core.Result are returned by the find() method
- *	 of datastores that implement the dojo.data.core.Read API.  For more
- *   documentation, see the find() method on dojo.data.core.Read.
- */
 dojo.experimental("dojo.data.core.Result");
-
-dojo.declare("dojo.data.core.Result", null, {
-	initializer: function(/* object */ keywordArgs, /* dojo.data.core.Read */ store) {
-		this.fromKwArgs(keywordArgs || {});
-		this.items = null;
-		this.resultMetadata = null;
-		this.length = -1; // -1 until completion 
-		this.store = store;
-		
-		this._aborted = false;
-		this._abortFunc = null;
-	},
-
-	/* Whether the request should be made synchronously. 
-	 * We default to true if there's no {sync:false} property in the keywordArgs 
-	 * in the initializer for a given instance of dojo.data.core.Result.
-	 */
-	sync: true,
-		
-	//timeout: function(type){ }, todo: support this
-	//timeoutSeconds: 0, todo: support this
-		
-	// the abort method needs to be filled in by the transport that accepts the
-	// bind() request
-	abort: function() {
-		this._aborted = true;
-		if (this._abortFunc) {
-			this._abortFunc();
-		}
-	},
-	
-	fromKwArgs: function(/* object */ kwArgs) {
-		if (typeof kwArgs.saveResult == "undefined") {
-			this.saveResult = kwArgs.onnext ? false : true;
-		}
-		dojo.lang.mixin(this, kwArgs);
+dojo.declare("dojo.data.core.Result", null, {initializer:function (keywordArgs, store) {
+	this.fromKwArgs(keywordArgs || {});
+	this.items = null;
+	this.resultMetadata = null;
+	this.length = -1;
+	this.store = store;
+	this._aborted = false;
+	this._abortFunc = null;
+}, sync:true, abort:function () {
+	this._aborted = true;
+	if (this._abortFunc) {
+		this._abortFunc();
 	}
-});
+}, fromKwArgs:function (kwArgs) {
+	if (typeof kwArgs.saveResult == "undefined") {
+		this.saveResult = kwArgs.onnext ? false : true;
+	}
+	dojo.lang.mixin(this, kwArgs);
+}});
 
+
 __CPAN_DIR__ src/data/old
 __CPAN_FILE__ src/data/old/to_do.txt
 Existing Features
@@ -74568,44 +50226,14 @@
 dojo.require("dojo.data.old.Value");
 dojo.require("dojo.lang.common");
 dojo.require("dojo.lang.assert");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.old.Item = function(/* dojo.data.old.provider.Base */ dataProvider) {
-	/**
-	 * summary:
-	 * An Item has attributes and attribute values, sort of like 
-	 * a record in a database, or a 'struct' in C.  Instances of
-	 * the Item class know how to store and retrieve their
-	 * attribute values.
-	 */
-	dojo.lang.assertType(dataProvider, dojo.data.old.provider.Base, {optional: true});
+dojo.data.old.Item = function (dataProvider) {
+	dojo.lang.assertType(dataProvider, dojo.data.old.provider.Base, {optional:true});
 	dojo.data.old.Observable.call(this);
 	this._dataProvider = dataProvider;
 	this._dictionaryOfAttributeValues = {};
 };
 dojo.inherits(dojo.data.old.Item, dojo.data.old.Observable);
-
-// -------------------------------------------------------------------
-// Public class methods
-// -------------------------------------------------------------------
-dojo.data.old.Item.compare = function(/* dojo.data.old.Item */ itemOne, /* dojo.data.old.Item */ itemTwo) {
-	/**
-	 * summary:
-	 * Given two Items to compare, this method returns 0, 1, or -1.
-	 * This method is designed to be used by sorting routines, like
-	 * the JavaScript built-in Array sort() method.
-	 * 
-	 * Example:
-	 * <pre>
-	 *   var a = dataProvider.newItem("kermit");
-	 *   var b = dataProvider.newItem("elmo");
-	 *   var c = dataProvider.newItem("grover");
-	 *   var array = new Array(a, b, c);
-	 *   array.sort(dojo.data.old.Item.compare);
-	 * </pre>
-	 */
+dojo.data.old.Item.compare = function (itemOne, itemTwo) {
 	dojo.lang.assertType(itemOne, dojo.data.old.Item);
 	if (!dojo.lang.isOfType(itemTwo, dojo.data.old.Item)) {
 		return -1;
@@ -74617,7 +50245,7 @@
 		var attributeArrayTwo = itemTwo.getAttributes();
 		if (attributeArrayOne.length != attributeArrayTwo.length) {
 			if (attributeArrayOne.length > attributeArrayTwo.length) {
-				return 1; 
+				return 1;
 			} else {
 				return -1;
 			}
@@ -74632,7 +50260,7 @@
 			}
 			if (arrayOfValuesOne.length != arrayOfValuesTwo.length) {
 				if (arrayOfValuesOne.length > arrayOfValuesTwo.length) {
-					return 1; 
+					return 1;
 				} else {
 					return -1;
 				}
@@ -74647,20 +50275,13 @@
 		}
 	} else {
 		if (nameOne > nameTwo) {
-			return 1; 
+			return 1;
 		} else {
-			return -1;  // 0, 1, or -1
+			return -1;
 		}
 	}
 };
-
-// -------------------------------------------------------------------
-// Public instance methods
-// -------------------------------------------------------------------
-dojo.data.old.Item.prototype.toString = function() {
-	/**
-	 * Returns a simple string representation of the item.
-	 */
+dojo.data.old.Item.prototype.toString = function () {
 	var arrayOfStrings = [];
 	var attributes = this.getAttributes();
 	for (var i in attributes) {
@@ -74670,109 +50291,77 @@
 		if (arrayOfValues.length == 1) {
 			valueString = arrayOfValues[0];
 		} else {
-			valueString = '[';
-			valueString += arrayOfValues.join(', ');
-			valueString += ']';
+			valueString = "[";
+			valueString += arrayOfValues.join(", ");
+			valueString += "]";
 		}
-		arrayOfStrings.push('  ' + attribute + ': ' + valueString);
+		arrayOfStrings.push("  " + attribute + ": " + valueString);
 	}
-	var returnString = '{ ';
-	returnString += arrayOfStrings.join(',\n');
-	returnString += ' }';
-	return returnString; // string
+	var returnString = "{ ";
+	returnString += arrayOfStrings.join(",\n");
+	returnString += " }";
+	return returnString;
 };
-
-dojo.data.old.Item.prototype.compare = function(/* dojo.data.old.Item */ otherItem) {
-	/**
-	 * summary: Compares this Item to another Item, and returns 0, 1, or -1.
-	 */ 
-	return dojo.data.old.Item.compare(this, otherItem); // 0, 1, or -1
+dojo.data.old.Item.prototype.compare = function (otherItem) {
+	return dojo.data.old.Item.compare(this, otherItem);
 };
-
-dojo.data.old.Item.prototype.isEqual = function(/* dojo.data.old.Item */ otherItem) {
-	/**
-	 * summary: Returns true if this Item is equal to the otherItem, or false otherwise.
-	 */
-	return (this.compare(otherItem) == 0); // boolean
+dojo.data.old.Item.prototype.isEqual = function (otherItem) {
+	return (this.compare(otherItem) == 0);
 };
-
-dojo.data.old.Item.prototype.getName = function() {
-	return this.get('name');
+dojo.data.old.Item.prototype.getName = function () {
+	return this.get("name");
 };
-
-dojo.data.old.Item.prototype.get = function(/* string or dojo.data.old.Attribute */ attributeId) {
-	/**
-	 * summary: Returns a single literal value, like "foo" or 33.
-	 */ 
-	// dojo.lang.assertType(attributeId, [String, dojo.data.old.Attribute]);
+dojo.data.old.Item.prototype.get = function (attributeId) {
 	var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId];
 	if (dojo.lang.isUndefined(literalOrValueOrArray)) {
-		return null; // null
+		return null;
 	}
 	if (literalOrValueOrArray instanceof dojo.data.old.Value) {
-		return literalOrValueOrArray.getValue(); // literal
+		return literalOrValueOrArray.getValue();
 	}
 	if (dojo.lang.isArray(literalOrValueOrArray)) {
 		var dojoDataValue = literalOrValueOrArray[0];
-		return dojoDataValue.getValue(); // literal
+		return dojoDataValue.getValue();
 	}
-	return literalOrValueOrArray; // literal
+	return literalOrValueOrArray;
 };
-
-dojo.data.old.Item.prototype.getValue = function(/* string or dojo.data.old.Attribute */ attributeId) {
-	/**
-	 * summary: Returns a single instance of dojo.data.old.Value.
-	 */ 
-	// dojo.lang.assertType(attributeId, [String, dojo.data.old.Attribute]);
+dojo.data.old.Item.prototype.getValue = function (attributeId) {
 	var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId];
 	if (dojo.lang.isUndefined(literalOrValueOrArray)) {
-		return null; // null
+		return null;
 	}
 	if (literalOrValueOrArray instanceof dojo.data.old.Value) {
-		return literalOrValueOrArray; // dojo.data.old.Value
+		return literalOrValueOrArray;
 	}
 	if (dojo.lang.isArray(literalOrValueOrArray)) {
 		var dojoDataValue = literalOrValueOrArray[0];
-		return dojoDataValue; // dojo.data.old.Value
+		return dojoDataValue;
 	}
 	var literal = literalOrValueOrArray;
 	dojoDataValue = new dojo.data.old.Value(literal);
 	this._dictionaryOfAttributeValues[attributeId] = dojoDataValue;
-	return dojoDataValue; // dojo.data.old.Value
+	return dojoDataValue;
 };
-
-dojo.data.old.Item.prototype.getValues = function(/* string or dojo.data.old.Attribute */ attributeId) {
-	/**
-	 * summary: Returns an array of dojo.data.old.Value objects.
-	 */ 
-	// dojo.lang.assertType(attributeId, [String, dojo.data.old.Attribute]);
+dojo.data.old.Item.prototype.getValues = function (attributeId) {
 	var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId];
 	if (dojo.lang.isUndefined(literalOrValueOrArray)) {
-		return null; // null
+		return null;
 	}
 	if (literalOrValueOrArray instanceof dojo.data.old.Value) {
 		var array = [literalOrValueOrArray];
 		this._dictionaryOfAttributeValues[attributeId] = array;
-		return array; // Array
+		return array;
 	}
 	if (dojo.lang.isArray(literalOrValueOrArray)) {
-		return literalOrValueOrArray; // Array
+		return literalOrValueOrArray;
 	}
 	var literal = literalOrValueOrArray;
 	var dojoDataValue = new dojo.data.old.Value(literal);
 	array = [dojoDataValue];
 	this._dictionaryOfAttributeValues[attributeId] = array;
-	return array; // Array
+	return array;
 };
-
-dojo.data.old.Item.prototype.load = function(/* string or dojo.data.old.Attribute */ attributeId, /* anything */ value) {
-	/**
-	 * summary: 
-	 * Used for loading an attribute value into an item when
-	 * the item is first being loaded into memory from some
-	 * data store (such as a file).
-	 */ 
-	// dojo.lang.assertType(attributeId, [String, dojo.data.old.Attribute]);
+dojo.data.old.Item.prototype.load = function (attributeId, value) {
 	this._dataProvider.registerAttribute(attributeId);
 	var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId];
 	if (dojo.lang.isUndefined(literalOrValueOrArray)) {
@@ -74796,40 +50385,19 @@
 	array = [dojoDataValue, value];
 	this._dictionaryOfAttributeValues[attributeId] = array;
 };
-
-dojo.data.old.Item.prototype.set = function(/* string or dojo.data.old.Attribute */ attributeId, /* anything */ value) {
-	/**
-	 * summary: 
-	 * Used for setting an attribute value as a result of a
-	 * user action.
-	 */ 
-	// dojo.lang.assertType(attributeId, [String, dojo.data.old.Attribute]);
+dojo.data.old.Item.prototype.set = function (attributeId, value) {
 	this._dataProvider.registerAttribute(attributeId);
 	this._dictionaryOfAttributeValues[attributeId] = value;
 	this._dataProvider.noteChange(this, attributeId, value);
 };
-
-dojo.data.old.Item.prototype.setValue = function(/* string or dojo.data.old.Attribute */ attributeId, /* dojo.data.old.Value */ value) {
+dojo.data.old.Item.prototype.setValue = function (attributeId, value) {
 	this.set(attributeId, value);
 };
-
-dojo.data.old.Item.prototype.addValue = function(/* string or dojo.data.old.Attribute */ attributeId, /* anything */ value) {
-	/**
-	 * summary: 
-	 * Used for adding an attribute value as a result of a
-	 * user action.
-	 */ 
+dojo.data.old.Item.prototype.addValue = function (attributeId, value) {
 	this.load(attributeId, value);
 	this._dataProvider.noteChange(this, attributeId, value);
 };
-
-dojo.data.old.Item.prototype.setValues = function(/* string or dojo.data.old.Attribute */ attributeId, /* Array */ arrayOfValues) {
-	/**
-	 * summary: 
-	 * Used for setting an array of attribute values as a result of a
-	 * user action.
-	 */
-	// dojo.lang.assertType(attributeId, [String, dojo.data.old.Attribute]);
+dojo.data.old.Item.prototype.setValues = function (attributeId, arrayOfValues) {
 	dojo.lang.assertType(arrayOfValues, Array);
 	this._dataProvider.registerAttribute(attributeId);
 	var finalArray = [];
@@ -74843,44 +50411,28 @@
 		this._dataProvider.noteChange(this, attributeId, value);
 	}
 };
-
-dojo.data.old.Item.prototype.getAttributes = function() {
-	/**
-	 * summary: 
-	 * Returns an array containing all of the attributes for which
-	 * this item has attribute values.
-	 */ 
+dojo.data.old.Item.prototype.getAttributes = function () {
 	var arrayOfAttributes = [];
 	for (var key in this._dictionaryOfAttributeValues) {
 		arrayOfAttributes.push(this._dataProvider.getAttribute(key));
 	}
-	return arrayOfAttributes; // Array
+	return arrayOfAttributes;
 };
-
-dojo.data.old.Item.prototype.hasAttribute = function(/* string or dojo.data.old.Attribute */ attributeId) {
-	/**
-	 * summary: Returns true if the given attribute of the item has been assigned any value.
-	 */ 
-	// dojo.lang.assertType(attributeId, [String, dojo.data.old.Attribute]);
-	return (attributeId in this._dictionaryOfAttributeValues); // boolean
+dojo.data.old.Item.prototype.hasAttribute = function (attributeId) {
+	return (attributeId in this._dictionaryOfAttributeValues);
 };
-
-dojo.data.old.Item.prototype.hasAttributeValue = function(/* string or dojo.data.old.Attribute */ attributeId, /* anything */ value) {
-	/**
-	 * summary: Returns true if the given attribute of the item has been assigned the given value.
-	 */ 
+dojo.data.old.Item.prototype.hasAttributeValue = function (attributeId, value) {
 	var arrayOfValues = this.getValues(attributeId);
 	for (var i in arrayOfValues) {
 		var candidateValue = arrayOfValues[i];
 		if (candidateValue.isEqual(value)) {
-			return true; // boolean
+			return true;
 		}
 	}
-	return false; // boolean
+	return false;
 };
 
 
-
 __CPAN_FILE__ src/data/old/Type.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -74894,20 +50446,12 @@
 
 dojo.provide("dojo.data.old.Type");
 dojo.require("dojo.data.old.Item");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.old.Type = function(/* dojo.data.old.provider.Base */ dataProvider) {
-	/**
-	 * summary:
-	 * A Type represents a type of value, like Text, Number, Picture,
-	 * or Varchar.
-	 */
+dojo.data.old.Type = function (dataProvider) {
 	dojo.data.old.Item.call(this, dataProvider);
 };
 dojo.inherits(dojo.data.old.Type, dojo.data.old.Item);
 
+
 __CPAN_FILE__ src/data/old/ResultSet.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -74922,19 +50466,9 @@
 dojo.provide("dojo.data.old.ResultSet");
 dojo.require("dojo.lang.assert");
 dojo.require("dojo.collections.Collections");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.old.ResultSet = function(/* dojo.data.old.provider.Base */ dataProvider, /* Array */ arrayOfItems) {
-	/**
-	 * summary:
-	 * A ResultSet holds a collection of Items.  A data provider
-	 * returns a ResultSet in reponse to a query.
-	 * (The name "Result Set" comes from the MySQL terminology.)
-	 */
-	dojo.lang.assertType(dataProvider, dojo.data.old.provider.Base, {optional: true});
-	dojo.lang.assertType(arrayOfItems, Array, {optional: true});
+dojo.data.old.ResultSet = function (dataProvider, arrayOfItems) {
+	dojo.lang.assertType(dataProvider, dojo.data.old.provider.Base, {optional:true});
+	dojo.lang.assertType(arrayOfItems, Array, {optional:true});
 	dojo.data.old.Observable.call(this);
 	this._dataProvider = dataProvider;
 	this._arrayOfItems = [];
@@ -74943,42 +50477,33 @@
 	}
 };
 dojo.inherits(dojo.data.old.ResultSet, dojo.data.old.Observable);
-
-// -------------------------------------------------------------------
-// Public instance methods
-// -------------------------------------------------------------------
-dojo.data.old.ResultSet.prototype.toString = function() {
-	var returnString = this._arrayOfItems.join(', ');
-	return returnString; // string
+dojo.data.old.ResultSet.prototype.toString = function () {
+	var returnString = this._arrayOfItems.join(", ");
+	return returnString;
 };
-
-dojo.data.old.ResultSet.prototype.toArray = function() {
-	return this._arrayOfItems; // Array
+dojo.data.old.ResultSet.prototype.toArray = function () {
+	return this._arrayOfItems;
 };
-
-dojo.data.old.ResultSet.prototype.getIterator = function() {
+dojo.data.old.ResultSet.prototype.getIterator = function () {
 	return new dojo.collections.Iterator(this._arrayOfItems);
 };
-
-dojo.data.old.ResultSet.prototype.getLength = function() {
-	return this._arrayOfItems.length; // integer
+dojo.data.old.ResultSet.prototype.getLength = function () {
+	return this._arrayOfItems.length;
 };
-
-dojo.data.old.ResultSet.prototype.getItemAt = function(/* numeric */ index) {
+dojo.data.old.ResultSet.prototype.getItemAt = function (index) {
 	return this._arrayOfItems[index];
 };
-
-dojo.data.old.ResultSet.prototype.indexOf = function(/* dojo.data.old.Item */ item) {
-	return dojo.lang.indexOf(this._arrayOfItems, item); // integer
+dojo.data.old.ResultSet.prototype.indexOf = function (item) {
+	return dojo.lang.indexOf(this._arrayOfItems, item);
 };
-
-dojo.data.old.ResultSet.prototype.contains = function(/* dojo.data.old.Item */ item) {
-	return dojo.lang.inArray(this._arrayOfItems, item); // boolean
+dojo.data.old.ResultSet.prototype.contains = function (item) {
+	return dojo.lang.inArray(this._arrayOfItems, item);
 };
-
-dojo.data.old.ResultSet.prototype.getDataProvider = function() {
-	return this._dataProvider; // dojo.data.old.provider.Base
+dojo.data.old.ResultSet.prototype.getDataProvider = function () {
+	return this._dataProvider;
 };
+
+
 __CPAN_FILE__ src/data/old/Attribute.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -74993,56 +50518,27 @@
 dojo.provide("dojo.data.old.Attribute");
 dojo.require("dojo.data.old.Item");
 dojo.require("dojo.lang.assert");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.old.Attribute = function(/* dojo.data.old.provider.Base */ dataProvider, /* string */ attributeId) {
-	/**
-	 * summary:
-	 * An Attribute object represents something like a column in 
-	 * a relational database.
-	 */
-	dojo.lang.assertType(dataProvider, dojo.data.old.provider.Base, {optional: true});
+dojo.data.old.Attribute = function (dataProvider, attributeId) {
+	dojo.lang.assertType(dataProvider, dojo.data.old.provider.Base, {optional:true});
 	dojo.lang.assertType(attributeId, String);
 	dojo.data.old.Item.call(this, dataProvider);
 	this._attributeId = attributeId;
 };
 dojo.inherits(dojo.data.old.Attribute, dojo.data.old.Item);
-
-// -------------------------------------------------------------------
-// Public instance methods
-// -------------------------------------------------------------------
-dojo.data.old.Attribute.prototype.toString = function() {
-	return this._attributeId; // string
+dojo.data.old.Attribute.prototype.toString = function () {
+	return this._attributeId;
 };
-
-dojo.data.old.Attribute.prototype.getAttributeId = function() {
-	/**
-	 * summary: 
-	 * Returns the string token that uniquely identifies this
-	 * attribute within the context of a data provider.
-	 * For a data provider that accesses relational databases,
-	 * typical attributeIds might be tokens like "name", "age", 
-	 * "ssn", or "dept_key".
-	 */ 
-	return this._attributeId; // string
+dojo.data.old.Attribute.prototype.getAttributeId = function () {
+	return this._attributeId;
 };
-
-dojo.data.old.Attribute.prototype.getType = function() {
-	/**
-	 * summary: Returns the data type of the values of this attribute.
-	 */ 
-	return this.get('type'); // dojo.data.old.Type or null
+dojo.data.old.Attribute.prototype.getType = function () {
+	return this.get("type");
 };
-
-dojo.data.old.Attribute.prototype.setType = function(/* dojo.data.old.Type or null */ type) {
-	/**
-	 * summary: Sets the data type for this attribute.
-	 */ 
-	this.set('type', type);
+dojo.data.old.Attribute.prototype.setType = function (type) {
+	this.set("type", type);
 };
 
+
 __CPAN_FILE__ src/data/old/Kind.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -75056,23 +50552,12 @@
 
 dojo.provide("dojo.data.old.Kind");
 dojo.require("dojo.data.old.Item");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.old.Kind = function(/* dojo.data.old.provider.Base */ dataProvider) {
-	/**
-	 * summary:
-	 * A Kind represents a kind of item.  In the dojo data model
-	 * the item Snoopy might belong to the 'kind' Dog, where in
-	 * a Java program the object Snoopy would belong to the 'class'
-	 * Dog, and in MySQL the record for Snoopy would be in the 
-	 * table Dog.
-	 */
+dojo.data.old.Kind = function (dataProvider) {
 	dojo.data.old.Item.call(this, dataProvider);
 };
 dojo.inherits(dojo.data.old.Kind, dojo.data.old.Item);
 
+
 __CPAN_FILE__ src/data/old/Observable.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -75087,21 +50572,9 @@
 dojo.provide("dojo.data.old.Observable");
 dojo.require("dojo.lang.common");
 dojo.require("dojo.lang.assert");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.old.Observable = function() {
+dojo.data.old.Observable = function () {
 };
-
-// -------------------------------------------------------------------
-// Public instance methods
-// -------------------------------------------------------------------
-dojo.data.old.Observable.prototype.addObserver = function(/* object */ observer) {
-	/**
-	 * summary: Registers an object as an observer of this item,
-	 * so that the object will be notified when the item changes.
-	 */ 
+dojo.data.old.Observable.prototype.addObserver = function (observer) {
 	dojo.lang.assertType(observer, Object);
 	dojo.lang.assertType(observer.observedObjectHasChanged, Function);
 	if (!this._arrayOfObservers) {
@@ -75111,12 +50584,7 @@
 		this._arrayOfObservers.push(observer);
 	}
 };
-
-dojo.data.old.Observable.prototype.removeObserver = function(/* object */ observer) {
-	/**
-	 * summary: Removes the observer registration for a previously
-	 * registered object.
-	 */ 
+dojo.data.old.Observable.prototype.removeObserver = function (observer) {
 	if (!this._arrayOfObservers) {
 		return;
 	}
@@ -75125,12 +50593,8 @@
 		this._arrayOfObservers.splice(index, 1);
 	}
 };
-
-dojo.data.old.Observable.prototype.getObservers = function() {
-	/**
-	 * summary: Returns an array with all the observers of this item.
-	 */ 
-	return this._arrayOfObservers; // Array or undefined
+dojo.data.old.Observable.prototype.getObservers = function () {
+	return this._arrayOfObservers;
 };
 
 
@@ -75147,50 +50611,28 @@
 
 dojo.provide("dojo.data.old.Value");
 dojo.require("dojo.lang.assert");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.old.Value = function(/* anything */ value) {
-	/**
-	 * summary:
-	 * A Value represents a simple literal value (like "foo" or 334),
-	 * or a reference value (a pointer to an Item).
-	 */
+dojo.data.old.Value = function (value) {
 	this._value = value;
 	this._type = null;
 };
-
-// -------------------------------------------------------------------
-// Public instance methods
-// -------------------------------------------------------------------
-dojo.data.old.Value.prototype.toString = function() {
-	return this._value.toString(); // string
+dojo.data.old.Value.prototype.toString = function () {
+	return this._value.toString();
 };
-
-dojo.data.old.Value.prototype.getValue = function() {
-	/**
-	 * summary: Returns the value itself.
-	 */ 
-	return this._value; // anything
+dojo.data.old.Value.prototype.getValue = function () {
+	return this._value;
 };
-
-dojo.data.old.Value.prototype.getType = function() {
-	/**
-	 * summary: Returns the data type of the value.
-	 */ 
-	dojo.unimplemented('dojo.data.old.Value.prototype.getType');
-	return this._type; // dojo.data.old.Type
+dojo.data.old.Value.prototype.getType = function () {
+	dojo.unimplemented("dojo.data.old.Value.prototype.getType");
+	return this._type;
 };
-
-dojo.data.old.Value.prototype.compare = function() {
-	dojo.unimplemented('dojo.data.old.Value.prototype.compare');
+dojo.data.old.Value.prototype.compare = function () {
+	dojo.unimplemented("dojo.data.old.Value.prototype.compare");
 };
-
-dojo.data.old.Value.prototype.isEqual = function() {
-	dojo.unimplemented('dojo.data.old.Value.prototype.isEqual');
+dojo.data.old.Value.prototype.isEqual = function () {
+	dojo.unimplemented("dojo.data.old.Value.prototype.isEqual");
 };
 
+
 __CPAN_FILE__ src/data/old/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -75203,15 +50645,8 @@
 */
 
 dojo.require("dojo.experimental");
-
 dojo.experimental("dojo.data.old.*");
-dojo.kwCompoundRequire({
-	common: [
-		"dojo.data.old.Item",
-		"dojo.data.old.ResultSet",
-		"dojo.data.old.provider.FlatFile"
-	]
-});
+dojo.kwCompoundRequire({common:["dojo.data.old.Item", "dojo.data.old.ResultSet", "dojo.data.old.provider.FlatFile"]});
 dojo.provide("dojo.data.old.*");
 
 
@@ -75229,22 +50664,12 @@
 
 dojo.provide("dojo.data.old.provider.MySql");
 dojo.require("dojo.data.old.provider.Base");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.old.provider.MySql = function() {
-	/**
-	 * summary:
-	 * A MySql Data Provider knows how to connect to a MySQL database
-	 * on a server and and make the content records available as 
-	 * dojo.data.old.Items.
-	 */
-	dojo.unimplemented('dojo.data.old.provider.MySql');
+dojo.data.old.provider.MySql = function () {
+	dojo.unimplemented("dojo.data.old.provider.MySql");
 };
-
 dojo.inherits(dojo.data.old.provider.MySql, dojo.data.old.provider.Base);
 
+
 __CPAN_FILE__ src/data/old/provider/Delicious.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -75259,79 +50684,25 @@
 dojo.provide("dojo.data.old.provider.Delicious");
 dojo.require("dojo.data.old.provider.FlatFile");
 dojo.require("dojo.data.old.format.Json");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.old.provider.Delicious = function() {
-	/**
-	 * summary:
-	 * The Delicious Data Provider can be used to take data from
-	 * del.icio.us and make it available as dojo.data.old.Items
-	 * In order to use the Delicious Data Provider, you need 
-	 * to have loaded a script tag that looks like this:
-	 * <script type="text/javascript" src="http://del.icio.us/feeds/json/gumption?count=8"></script>
-	 */
+dojo.data.old.provider.Delicious = function () {
 	dojo.data.old.provider.FlatFile.call(this);
-	// Delicious = null;
 	if (Delicious && Delicious.posts) {
 		dojo.data.old.format.Json.loadDataProviderFromArrayOfJsonData(this, Delicious.posts);
 	} else {
-		// document.write("<script type='text/javascript'>dojo.data.old.provider.Delicious._fetchComplete()</script>");		
-		/*
-		document.write("<script type='text/javascript'>alert('boo!');</script>");		
-		document.write("<script type='text/javascript'>var foo = 'not dojo'; alert('dojo == ' + foo);</script>");		
-		document.write("<script type='text/javascript'>var foo = fetchComplete; alert('dojo == ' + foo);</script>");		
-		fetchComplete();
-		*/
-		// dojo.debug("Delicious line 29: constructor");
 	}
-	var u = this.registerAttribute('u');
-	var d = this.registerAttribute('d');
-	var t = this.registerAttribute('t');
-	
-	u.load('name', 'Bookmark');
-	d.load('name', 'Description');
-	t.load('name', 'Tags');
-	
-	u.load('type', 'String');
-	d.load('type', 'String');
-	t.load('type', 'String');
+	var u = this.registerAttribute("u");
+	var d = this.registerAttribute("d");
+	var t = this.registerAttribute("t");
+	u.load("name", "Bookmark");
+	d.load("name", "Description");
+	t.load("name", "Tags");
+	u.load("type", "String");
+	d.load("type", "String");
+	t.load("type", "String");
 };
 dojo.inherits(dojo.data.old.provider.Delicious, dojo.data.old.provider.FlatFile);
 
-/********************************************************************
- * FIXME: the rest of this is work in progress
- *
- 
-dojo.data.old.provider.Delicious.prototype.getNewItemToLoad = function() {
-	var newItem = this._newItem();
-	this._currentArray.push(newItem);
-	return newItem; // dojo.data.old.Item
-};
 
-dojo.data.old.provider.Delicious.prototype.fetchArray = function(query) {
-	if (!query) {	
-		query = "gumption";
-	}
-	this._currentArray = [];
-	alert("Delicious line 60: loadDataProviderFromArrayOfJsonData");
-	alert("Delicious line 61: " + dojo);
-		var sourceUrl = "http://del.icio.us/feeds/json/" + query + "?count=8";
-		document.write("<script type='text/javascript' src='" + sourceUrl + "'></script>");
-		document.write("<script type='text/javascript'>alert('line 63: ' + Delicious.posts[0].u);</script>");		
-		document.write("<script type='text/javascript'>callMe();</script>");		
-	alert("line 66");
-	dojo.data.old.format.Json.loadDataProviderFromArrayOfJsonData(this, Delicious.posts);
-	return this._currentArray; // Array
-};
-
-callMe = function() {
-	alert("callMe!");
-};
-
-*/
-
 __CPAN_FILE__ src/data/old/provider/FlatFile.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -75351,26 +50722,16 @@
 dojo.require("dojo.data.old.format.Json");
 dojo.require("dojo.data.old.format.Csv");
 dojo.require("dojo.lang.assert");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.old.provider.FlatFile = function(/* keywords */ keywordParameters) {
-	/**
-	 * summary:
-	 * A Json Data Provider knows how to read in simple JSON data
-	 * tables and make their contents accessable as Items.
-	 */
-	dojo.lang.assertType(keywordParameters, "pureobject", {optional: true});
+dojo.data.old.provider.FlatFile = function (keywordParameters) {
+	dojo.lang.assertType(keywordParameters, "pureobject", {optional:true});
 	dojo.data.old.provider.Base.call(this);
 	this._arrayOfItems = [];
 	this._resultSet = null;
 	this._dictionaryOfAttributes = {};
-
 	if (keywordParameters) {
 		var jsonObjects = keywordParameters["jsonObjects"];
-		var jsonString  = keywordParameters["jsonString"];
-		var fileUrl     = keywordParameters["url"];
+		var jsonString = keywordParameters["jsonString"];
+		var fileUrl = keywordParameters["url"];
 		if (jsonObjects) {
 			dojo.data.old.format.Json.loadDataProviderFromArrayOfJsonData(this, jsonObjects);
 		}
@@ -75378,7 +50739,7 @@
 			dojo.data.old.format.Json.loadDataProviderFromFileContents(this, jsonString);
 		}
 		if (fileUrl) {
-			var arrayOfParts = fileUrl.split('.');
+			var arrayOfParts = fileUrl.split(".");
 			var lastPart = arrayOfParts[(arrayOfParts.length - 1)];
 			var formatParser = null;
 			if (lastPart == "json") {
@@ -75397,25 +50758,10 @@
 	}
 };
 dojo.inherits(dojo.data.old.provider.FlatFile, dojo.data.old.provider.Base);
-
-// -------------------------------------------------------------------
-// Public instance methods
-// -------------------------------------------------------------------
-dojo.data.old.provider.FlatFile.prototype.getProviderCapabilities = function(/* string */ keyword) {
-	dojo.lang.assertType(keyword, String, {optional: true});
+dojo.data.old.provider.FlatFile.prototype.getProviderCapabilities = function (keyword) {
+	dojo.lang.assertType(keyword, String, {optional:true});
 	if (!this._ourCapabilities) {
-		this._ourCapabilities = {
-			transactions: false,
-			undo: false,
-			login: false,
-			versioning: false,
-			anonymousRead: true,
-			anonymousWrite: false,
-			permissions: false,
-			queries: false,
-			strongTyping: false,
-			datatypes: [String, Date, Number]
-		};
+		this._ourCapabilities = {transactions:false, undo:false, login:false, versioning:false, anonymousRead:true, anonymousWrite:false, permissions:false, queries:false, strongTyping:false, datatypes:[String, Date, Number]};
 	}
 	if (keyword) {
 		return this._ourCapabilities[keyword];
@@ -75423,67 +50769,50 @@
 		return this._ourCapabilities;
 	}
 };
-
-dojo.data.old.provider.FlatFile.prototype.registerAttribute = function(/* string or dojo.data.old.Attribute */ attributeId) {
+dojo.data.old.provider.FlatFile.prototype.registerAttribute = function (attributeId) {
 	var registeredAttribute = this.getAttribute(attributeId);
 	if (!registeredAttribute) {
 		var newAttribute = new dojo.data.old.Attribute(this, attributeId);
 		this._dictionaryOfAttributes[attributeId] = newAttribute;
 		registeredAttribute = newAttribute;
 	}
-	return registeredAttribute; // dojo.data.old.Attribute
+	return registeredAttribute;
 };
-
-dojo.data.old.provider.FlatFile.prototype.getAttribute = function(/* string or dojo.data.old.Attribute */ attributeId) {
+dojo.data.old.provider.FlatFile.prototype.getAttribute = function (attributeId) {
 	var attribute = (this._dictionaryOfAttributes[attributeId] || null);
-	return attribute; // dojo.data.old.Attribute or null
+	return attribute;
 };
-
-dojo.data.old.provider.FlatFile.prototype.getAttributes = function() {
+dojo.data.old.provider.FlatFile.prototype.getAttributes = function () {
 	var arrayOfAttributes = [];
 	for (var key in this._dictionaryOfAttributes) {
 		var attribute = this._dictionaryOfAttributes[key];
 		arrayOfAttributes.push(attribute);
 	}
-	return arrayOfAttributes; // Array
+	return arrayOfAttributes;
 };
-
-dojo.data.old.provider.FlatFile.prototype.fetchArray = function(query) {
-	/**
-	 * summary: Returns an Array containing all of the Items.
-	 */ 
-	return this._arrayOfItems; // Array
+dojo.data.old.provider.FlatFile.prototype.fetchArray = function (query) {
+	return this._arrayOfItems;
 };
-
-dojo.data.old.provider.FlatFile.prototype.fetchResultSet = function(query) {
-	/**
-	 * summary: Returns a ResultSet containing all of the Items.
-	 */ 
+dojo.data.old.provider.FlatFile.prototype.fetchResultSet = function (query) {
 	if (!this._resultSet) {
 		this._resultSet = new dojo.data.old.ResultSet(this, this.fetchArray(query));
 	}
-	return this._resultSet; // dojo.data.old.ResultSet
+	return this._resultSet;
 };
-
-// -------------------------------------------------------------------
-// Private instance methods
-// -------------------------------------------------------------------
-dojo.data.old.provider.FlatFile.prototype._newItem = function() {
+dojo.data.old.provider.FlatFile.prototype._newItem = function () {
 	var item = new dojo.data.old.Item(this);
 	this._arrayOfItems.push(item);
-	return item; // dojo.data.old.Item
+	return item;
 };
-
-dojo.data.old.provider.FlatFile.prototype._newAttribute = function(/* String */ attributeId) {
+dojo.data.old.provider.FlatFile.prototype._newAttribute = function (attributeId) {
 	dojo.lang.assertType(attributeId, String);
 	dojo.lang.assert(this.getAttribute(attributeId) === null);
 	var attribute = new dojo.data.old.Attribute(this, attributeId);
 	this._dictionaryOfAttributes[attributeId] = attribute;
-	return attribute; // dojo.data.old.Attribute
+	return attribute;
 };
-
-dojo.data.old.provider.Base.prototype._getResultSets = function() {
-	return [this._resultSet]; // Array
+dojo.data.old.provider.Base.prototype._getResultSets = function () {
+	return [this._resultSet];
 };
 
 
@@ -75500,19 +50829,9 @@
 
 dojo.provide("dojo.data.old.provider.JotSpot");
 dojo.require("dojo.data.old.provider.Base");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.old.provider.JotSpot = function() {
-	/**
-	 * summary:
-	 * A JotSpot Data Provider knows how to read data from a JotSpot data 
-	 * store and make the contents accessable as dojo.data.old.Items.
-	 */
-	dojo.unimplemented('dojo.data.old.provider.JotSpot');
+dojo.data.old.provider.JotSpot = function () {
+	dojo.unimplemented("dojo.data.old.provider.JotSpot");
 };
-
 dojo.inherits(dojo.data.old.provider.JotSpot, dojo.data.old.provider.Base);
 
 
@@ -75529,106 +50848,63 @@
 
 dojo.provide("dojo.data.old.provider.Base");
 dojo.require("dojo.lang.assert");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.old.provider.Base = function() {
-	/**
-	 * summary:
-	 * A Data Provider serves as a connection to some data source,
-	 * like a relational database.  This data provider Base class
-	 * serves as an abstract superclass for other data provider
-	 * classes.
-	 */
+dojo.data.old.provider.Base = function () {
 	this._countOfNestedTransactions = 0;
 	this._changesInCurrentTransaction = null;
 };
-
-// -------------------------------------------------------------------
-// Public instance methods
-// -------------------------------------------------------------------
-dojo.data.old.provider.Base.prototype.beginTransaction = function() {
-	/**
-	 * Marks the beginning of a transaction.
-	 *
-	 * Each time you call beginTransaction() you open a new transaction, 
-	 * which you need to close later using endTransaction().  Transactions
-	 * may be nested, but the beginTransaction and endTransaction calls
-	 * always need to come in pairs.
-	 */
+dojo.data.old.provider.Base.prototype.beginTransaction = function () {
 	if (this._countOfNestedTransactions === 0) {
 		this._changesInCurrentTransaction = [];
 	}
 	this._countOfNestedTransactions += 1;
 };
-
-dojo.data.old.provider.Base.prototype.endTransaction = function() {
-	/**
-	 * Marks the end of a transaction.
-	 */
+dojo.data.old.provider.Base.prototype.endTransaction = function () {
 	this._countOfNestedTransactions -= 1;
 	dojo.lang.assert(this._countOfNestedTransactions >= 0);
-
 	if (this._countOfNestedTransactions === 0) {
 		var listOfChangesMade = this._saveChanges();
 		this._changesInCurrentTransaction = null;
 		if (listOfChangesMade.length > 0) {
-			// dojo.debug("endTransaction: " + listOfChangesMade.length + " changes made");
 			this._notifyObserversOfChanges(listOfChangesMade);
 		}
 	}
 };
-
-dojo.data.old.provider.Base.prototype.getNewItemToLoad = function() {
-	return this._newItem(); // dojo.data.old.Item
+dojo.data.old.provider.Base.prototype.getNewItemToLoad = function () {
+	return this._newItem();
 };
-
-dojo.data.old.provider.Base.prototype.newItem = function(/* string */ itemName) {
-	/**
-	 * Creates a new item.
-	 */
-	dojo.lang.assertType(itemName, String, {optional: true});
+dojo.data.old.provider.Base.prototype.newItem = function (itemName) {
+	dojo.lang.assertType(itemName, String, {optional:true});
 	var item = this._newItem();
 	if (itemName) {
-		item.set('name', itemName);
+		item.set("name", itemName);
 	}
-	return item; // dojo.data.old.Item
+	return item;
 };
-
-dojo.data.old.provider.Base.prototype.newAttribute = function(/* string */ attributeId) {
-	/**
-	 * Creates a new attribute.
-	 */
-	dojo.lang.assertType(attributeId, String, {optional: true});
+dojo.data.old.provider.Base.prototype.newAttribute = function (attributeId) {
+	dojo.lang.assertType(attributeId, String, {optional:true});
 	var attribute = this._newAttribute(attributeId);
-	return attribute; // dojo.data.old.Attribute
+	return attribute;
 };
-
-dojo.data.old.provider.Base.prototype.getAttribute = function(/* string */ attributeId) {
-	dojo.unimplemented('dojo.data.old.provider.Base');
+dojo.data.old.provider.Base.prototype.getAttribute = function (attributeId) {
+	dojo.unimplemented("dojo.data.old.provider.Base");
 	var attribute;
-	return attribute; // dojo.data.old.Attribute
+	return attribute;
 };
-
-dojo.data.old.provider.Base.prototype.getAttributes = function() {
-	dojo.unimplemented('dojo.data.old.provider.Base');
-	return this._arrayOfAttributes; // Array
+dojo.data.old.provider.Base.prototype.getAttributes = function () {
+	dojo.unimplemented("dojo.data.old.provider.Base");
+	return this._arrayOfAttributes;
 };
-
-dojo.data.old.provider.Base.prototype.fetchArray = function() {
-	dojo.unimplemented('dojo.data.old.provider.Base');
-	return []; // Array
+dojo.data.old.provider.Base.prototype.fetchArray = function () {
+	dojo.unimplemented("dojo.data.old.provider.Base");
+	return [];
 };
-
-dojo.data.old.provider.Base.prototype.fetchResultSet = function() {
-	dojo.unimplemented('dojo.data.old.provider.Base');
+dojo.data.old.provider.Base.prototype.fetchResultSet = function () {
+	dojo.unimplemented("dojo.data.old.provider.Base");
 	var resultSet;
-	return resultSet; // dojo.data.old.ResultSet
+	return resultSet;
 };
-
-dojo.data.old.provider.Base.prototype.noteChange = function(/* dojo.data.old.Item */ item, /* string or dojo.data.old.Attribute */ attribute, /* anything */ value) {
-	var change = {item: item, attribute: attribute, value: value};
+dojo.data.old.provider.Base.prototype.noteChange = function (item, attribute, value) {
+	var change = {item:item, attribute:attribute, value:value};
 	if (this._countOfNestedTransactions === 0) {
 		this.beginTransaction();
 		this._changesInCurrentTransaction.push(change);
@@ -75637,44 +50913,27 @@
 		this._changesInCurrentTransaction.push(change);
 	}
 };
-
-dojo.data.old.provider.Base.prototype.addItemObserver = function(/* dojo.data.old.Item */ item, /* object */ observer) {
-	/**
-	 * summary: Registers an object as an observer of an item,
-	 * so that the object will be notified when the item changes.
-	 */
+dojo.data.old.provider.Base.prototype.addItemObserver = function (item, observer) {
 	dojo.lang.assertType(item, dojo.data.old.Item);
 	item.addObserver(observer);
 };
-
-dojo.data.old.provider.Base.prototype.removeItemObserver = function(/* dojo.data.old.Item */ item, /* object */ observer) {
-	/**
-	 * summary: Removes the observer registration for a previously
-	 * registered object.
-	 */ 
+dojo.data.old.provider.Base.prototype.removeItemObserver = function (item, observer) {
 	dojo.lang.assertType(item, dojo.data.old.Item);
 	item.removeObserver(observer);
 };
-
-// -------------------------------------------------------------------
-// Private instance methods
-// -------------------------------------------------------------------
-dojo.data.old.provider.Base.prototype._newItem = function() {
+dojo.data.old.provider.Base.prototype._newItem = function () {
 	var item = new dojo.data.old.Item(this);
-	return item; // dojo.data.old.Item
+	return item;
 };
-
-dojo.data.old.provider.Base.prototype._newAttribute = function(/* String */ attributeId) {
+dojo.data.old.provider.Base.prototype._newAttribute = function (attributeId) {
 	var attribute = new dojo.data.old.Attribute(this);
-	return attribute; // dojo.data.old.Attribute
+	return attribute;
 };
-
-dojo.data.old.provider.Base.prototype._saveChanges = function() {
+dojo.data.old.provider.Base.prototype._saveChanges = function () {
 	var arrayOfChangesMade = this._changesInCurrentTransaction;
-	return arrayOfChangesMade; // Array
+	return arrayOfChangesMade;
 };
-
-dojo.data.old.provider.Base.prototype._notifyObserversOfChanges = function(/* Array */ arrayOfChanges) {
+dojo.data.old.provider.Base.prototype._notifyObserversOfChanges = function (arrayOfChanges) {
 	var arrayOfResultSets = this._getResultSets();
 	for (var i in arrayOfChanges) {
 		var change = arrayOfChanges[i];
@@ -75694,10 +50953,9 @@
 		}
 	}
 };
-
-dojo.data.old.provider.Base.prototype._getResultSets = function() {
-	dojo.unimplemented('dojo.data.old.provider.Base');
-	return []; // Array
+dojo.data.old.provider.Base.prototype._getResultSets = function () {
+	dojo.unimplemented("dojo.data.old.provider.Base");
+	return [];
 };
 
 
@@ -75715,21 +50973,15 @@
 
 dojo.provide("dojo.data.old.format.Json");
 dojo.require("dojo.lang.assert");
-
-dojo.data.old.format.Json = new function() {
-
-	// -------------------------------------------------------------------
-	// Public functions
-	// -------------------------------------------------------------------
-	this.loadDataProviderFromFileContents = function(/* dojo.data.old.provider.Base */ dataProvider, /* string */ jsonFileContents) {
+dojo.data.old.format.Json = new function () {
+	this.loadDataProviderFromFileContents = function (dataProvider, jsonFileContents) {
 		dojo.lang.assertType(dataProvider, dojo.data.old.provider.Base);
 		dojo.lang.assertType(jsonFileContents, String);
 		var arrayOfJsonData = eval("(" + jsonFileContents + ")");
 		this.loadDataProviderFromArrayOfJsonData(dataProvider, arrayOfJsonData);
 	};
-	
-	this.loadDataProviderFromArrayOfJsonData = function(/* dojo.data.old.provider.Base */ dataProvider, /* Array */ arrayOfJsonData) {
-		dojo.lang.assertType(arrayOfJsonData, Array, {optional: true});
+	this.loadDataProviderFromArrayOfJsonData = function (dataProvider, arrayOfJsonData) {
+		dojo.lang.assertType(arrayOfJsonData, Array, {optional:true});
 		if (arrayOfJsonData && (arrayOfJsonData.length > 0)) {
 			var firstRow = arrayOfJsonData[0];
 			dojo.lang.assertType(firstRow, [Array, "pureobject"]);
@@ -75741,27 +50993,12 @@
 			}
 		}
 	};
-
-	this.getJsonStringFromResultSet = function(/* dojo.data.old.ResultSet */ resultSet) {
-		dojo.unimplemented('dojo.data.old.format.Json.getJsonStringFromResultSet');
+	this.getJsonStringFromResultSet = function (resultSet) {
+		dojo.unimplemented("dojo.data.old.format.Json.getJsonStringFromResultSet");
 		var jsonString = null;
-		return jsonString; // String
+		return jsonString;
 	};
-
-	// -------------------------------------------------------------------
-	// Private functions
-	// -------------------------------------------------------------------
-	function _loadDataProviderFromArrayOfArrays(/* dojo.data.old.provider.Base */ dataProvider, /* Array */ arrayOfJsonData) {
-		/** 
-		 * Example: 
-		 * var arrayOfJsonStates = [
-		 * 	 [ "abbr",  "population",  "name" ]
-		 * 	 [  "WA",     5894121,      "Washington"    ],
-		 * 	 [  "WV",     1808344,      "West Virginia" ],
-		 * 	 [  "WI",     5453896,      "Wisconsin"     ],
-		 *   [  "WY",      493782,      "Wyoming"       ] ];
-		 * this._loadFromArrayOfArrays(arrayOfJsonStates);
-		 */
+	function _loadDataProviderFromArrayOfArrays(dataProvider, arrayOfJsonData) {
 		var arrayOfKeys = arrayOfJsonData[0];
 		for (var i = 1; i < arrayOfJsonData.length; ++i) {
 			var row = arrayOfJsonData[i];
@@ -75773,18 +51010,7 @@
 			}
 		}
 	}
-
-	function _loadDataProviderFromArrayOfObjects(/* dojo.data.old.provider.Base */ dataProvider, /* Array */ arrayOfJsonData) {
-		/** 
-		 * Example: 
-		 * var arrayOfJsonStates = [
-		 * 	 { abbr: "WA", name: "Washington" },
-		 * 	 { abbr: "WV", name: "West Virginia" },
-		 * 	 { abbr: "WI", name: "Wisconsin", song: "On, Wisconsin!" },
-		 * 	 { abbr: "WY", name: "Wyoming", cities: ["Lander", "Cheyenne", "Laramie"] } ];
-		 * this._loadFromArrayOfArrays(arrayOfJsonStates);
-		 */
-		// dojo.debug("_loadDataProviderFromArrayOfObjects");
+	function _loadDataProviderFromArrayOfObjects(dataProvider, arrayOfJsonData) {
 		for (var i in arrayOfJsonData) {
 			var row = arrayOfJsonData[i];
 			var item = dataProvider.getNewItemToLoad();
@@ -75795,7 +51021,6 @@
 					for (var j in arrayOfValues) {
 						value = arrayOfValues[j];
 						item.load(key, value);
-						// dojo.debug("loaded: " + key + " = " + value); 
 					}
 				} else {
 					item.load(key, value);
@@ -75803,7 +51028,6 @@
 			}
 		}
 	}
-	
 }();
 
 
@@ -75820,70 +51044,39 @@
 
 dojo.provide("dojo.data.old.format.Csv");
 dojo.require("dojo.lang.assert");
-
-
-dojo.data.old.format.Csv = new function() {
-
-	// -------------------------------------------------------------------
-	// Public functions
-	// -------------------------------------------------------------------
-	this.getArrayStructureFromCsvFileContents = function(/* string */ csvFileContents) {
-		/**
-		 * Given a string containing CSV records, this method parses
-		 * the string and returns a data structure containing the parsed
-		 * content.  The data structure we return is an array of length
-		 * R, where R is the number of rows (lines) in the CSV data.  The 
-		 * return array contains one sub-array for each CSV line, and each 
-		 * sub-array contains C string values, where C is the number of 
-		 * columns in the CSV data.
-		 * 
-		 * For example, given this CSV string as input:
-		 * <pre>
-		 *   "Title, Year, Producer \n Alien, 1979, Ridley Scott \n Blade Runner, 1982, Ridley Scott"
-		 * </pre>
-		 * We will return this data structure:
-		 * <pre>
-		 *   [["Title", "Year", "Producer"]
-		 *    ["Alien", "1979", "Ridley Scott"],  
-		 *    ["Blade Runner", "1982", "Ridley Scott"]]
-		 * </pre>
-		 */
+dojo.data.old.format.Csv = new function () {
+	this.getArrayStructureFromCsvFileContents = function (csvFileContents) {
 		dojo.lang.assertType(csvFileContents, String);
-		
 		var lineEndingCharacters = new RegExp("\r\n|\n|\r");
-		var leadingWhiteSpaceCharacters = new RegExp("^\\s+",'g');
-		var trailingWhiteSpaceCharacters = new RegExp("\\s+$",'g');
-		var doubleQuotes = new RegExp('""','g');
+		var leadingWhiteSpaceCharacters = new RegExp("^\\s+", "g");
+		var trailingWhiteSpaceCharacters = new RegExp("\\s+$", "g");
+		var doubleQuotes = new RegExp("\"\"", "g");
 		var arrayOfOutputRecords = [];
-		
 		var arrayOfInputLines = csvFileContents.split(lineEndingCharacters);
 		for (var i in arrayOfInputLines) {
 			var singleLine = arrayOfInputLines[i];
 			if (singleLine.length > 0) {
-				var listOfFields = singleLine.split(',');
+				var listOfFields = singleLine.split(",");
 				var j = 0;
 				while (j < listOfFields.length) {
 					var space_field_space = listOfFields[j];
-					var field_space = space_field_space.replace(leadingWhiteSpaceCharacters, ''); // trim leading whitespace
-					var field = field_space.replace(trailingWhiteSpaceCharacters, ''); // trim trailing whitespace
+					var field_space = space_field_space.replace(leadingWhiteSpaceCharacters, "");
+					var field = field_space.replace(trailingWhiteSpaceCharacters, "");
 					var firstChar = field.charAt(0);
 					var lastChar = field.charAt(field.length - 1);
 					var secondToLastChar = field.charAt(field.length - 2);
 					var thirdToLastChar = field.charAt(field.length - 3);
-					if ((firstChar == '"') && 
-							((lastChar != '"') || 
-							 ((lastChar == '"') && (secondToLastChar == '"') && (thirdToLastChar != '"')) )) {
-						if (j+1 === listOfFields.length) {
-							// alert("The last field in record " + i + " is corrupted:\n" + field);
+					if ((firstChar == "\"") && ((lastChar != "\"") || ((lastChar == "\"") && (secondToLastChar == "\"") && (thirdToLastChar != "\"")))) {
+						if (j + 1 === listOfFields.length) {
 							return null;
 						}
-						var nextField = listOfFields[j+1];
-						listOfFields[j] = field_space + ',' + nextField;
-						listOfFields.splice(j+1, 1); // delete element [j+1] from the list
+						var nextField = listOfFields[j + 1];
+						listOfFields[j] = field_space + "," + nextField;
+						listOfFields.splice(j + 1, 1);
 					} else {
-						if ((firstChar == '"') && (lastChar == '"')) {
-							field = field.slice(1, (field.length - 1)); // trim the " characters off the ends
-							field = field.replace(doubleQuotes, '"');   // replace "" with "
+						if ((firstChar == "\"") && (lastChar == "\"")) {
+							field = field.slice(1, (field.length - 1));
+							field = field.replace(doubleQuotes, "\"");
 						}
 						listOfFields[j] = field;
 						j += 1;
@@ -75892,10 +51085,9 @@
 				arrayOfOutputRecords.push(listOfFields);
 			}
 		}
-		return arrayOfOutputRecords; // Array
+		return arrayOfOutputRecords;
 	};
-
-	this.loadDataProviderFromFileContents = function(/* dojo.data.old.provider.Base */ dataProvider, /* string */ csvFileContents) {
+	this.loadDataProviderFromFileContents = function (dataProvider, csvFileContents) {
 		dojo.lang.assertType(dataProvider, dojo.data.old.provider.Base);
 		dojo.lang.assertType(csvFileContents, String);
 		var arrayOfArrays = this.getArrayStructureFromCsvFileContents(csvFileContents);
@@ -75912,15 +51104,14 @@
 			}
 		}
 	};
-	
-	this.getCsvStringFromResultSet = function(/* dojo.data.old.ResultSet */ resultSet) {
-		dojo.unimplemented('dojo.data.old.format.Csv.getCsvStringFromResultSet');
+	this.getCsvStringFromResultSet = function (resultSet) {
+		dojo.unimplemented("dojo.data.old.format.Csv.getCsvStringFromResultSet");
 		var csvString = null;
-		return csvString; // String
+		return csvString;
 	};
-	
 }();
 
+
 __CPAN_DIR__ src/storage
 __CPAN_FILE__ src/storage/browser.js
 /*
@@ -75934,359 +51125,544 @@
 */
 
 dojo.provide("dojo.storage.browser");
-
 dojo.require("dojo.storage");
 dojo.require("dojo.flash");
 dojo.require("dojo.json");
 dojo.require("dojo.uri.*");
-
-
-
-dojo.storage.browser.WhatWGStorageProvider = function(){
-	// summary:
-	//		Storage provider that uses WHAT Working Group features in Firefox 2 
-	//		to achieve permanent storage.
-	// description: 
-	//		The WHAT WG storage API is documented at 
-	//		http://www.whatwg.org/specs/web-apps/current-work/#scs-client-side
-	//
-	//		You can disable this storage provider with the following djConfig
-	//		variable:
-	//		var djConfig = { disableWhatWGStorage: true };
-	//		
-	//		Authors of this storage provider-	
-	//			JB Boisseau, jb.boisseau at eutech-ssii.com
-	//			Brad Neuberg, bkn3 at columbia.edu 
-}
-
-dojo.inherits(dojo.storage.browser.WhatWGStorageProvider, dojo.storage);
-
-// instance methods and properties
-dojo.lang.extend(dojo.storage.browser.WhatWGStorageProvider, {
-	namespace: "default",
-	initialized: false,
-	
-	_domain: null,
-	_available: null,
-	_statusHandler: null,
-	
-	initialize: function(){
-		if(djConfig["disableWhatWGStorage"] == true){
-			return;
+dojo.storage.browser.FileStorageProvider = function () {
+};
+dojo.inherits(dojo.storage.browser.FileStorageProvider, dojo.storage);
+dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME = "__dojoAllKeys";
+dojo.storage.browser.FileStorageProvider._APPLET_ID = "__dojoFileJavaObj";
+dojo.lang.extend(dojo.storage.browser.FileStorageProvider, {namespace:"default", initialized:false, _available:null, _statusHandler:null, _keyIndex:new Array(), initialize:function () {
+	if (djConfig["disableFileStorage"] == true) {
+		return;
+	}
+	this._loadKeyIndex();
+	this.initialized = true;
+	dojo.storage.manager.loaded();
+}, isAvailable:function () {
+	this._available = false;
+	var protocol = window.location.protocol;
+	if (protocol.indexOf("file") != -1 || protocol.indexOf("chrome") != -1) {
+		this._available = this._isAvailableXPCOM();
+		if (this._available == false) {
+			this._available = this._isAvailableActiveX();
 		}
-		
-		// get current domain
-		this._domain = location.hostname;
-		
-		// indicate that this storage provider is now loaded
-		this.initialized = true;
-		dojo.storage.manager.loaded();	
-	},
-	
-	isAvailable: function(){
-		try{
-			var myStorage = globalStorage[location.hostname];
-		}catch(e){
-			this._available = false;
-			return this._available;
+	}
+	return this._available;
+}, put:function (key, value, resultsHandler) {
+	if (this.isValidKey(key) == false) {
+		dojo.raise("Invalid key given: " + key);
+	}
+	this._statusHandler = resultsHandler;
+	try {
+		this._save(key, value);
+		resultsHandler.call(null, dojo.storage.SUCCESS, key);
+	}
+	catch (e) {
+		this._statusHandler.call(null, dojo.storage.FAILED, key, e.toString());
+	}
+}, get:function (key) {
+	if (this.isValidKey(key) == false) {
+		dojo.raise("Invalid key given: " + key);
+	}
+	var results = this._load(key);
+	return results;
+}, getKeys:function () {
+	return this._keyIndex;
+}, hasKey:function (key) {
+	if (this.isValidKey(key) == false) {
+		dojo.raise("Invalid key given: " + key);
+	}
+	this._loadKeyIndex();
+	var exists = false;
+	for (var i = 0; i < this._keyIndex.length; i++) {
+		if (this._keyIndex[i] == key) {
+			exists = true;
 		}
-		
-		this._available = true;	
-		return this._available;
-	},
-
-	put: function(key, value, resultsHandler){
-		if(this.isValidKey(key) == false){
-			dojo.raise("Invalid key given: " + key);
-		}			
-		
-		this._statusHandler = resultsHandler;
-		
-		// serialize the value;
-		// handle strings differently so they have better performance
-		if(dojo.lang.isString(value)){
-			value = "string:" + value;
-		}else{
-			value = dojo.json.serialize(value);
+	}
+	return exists;
+}, clear:function () {
+	this._loadKeyIndex();
+	var keyIndex = new Array();
+	for (var i = 0; i < this._keyIndex.length; i++) {
+		keyIndex[keyIndex.length] = new String(this._keyIndex[i]);
+	}
+	for (var i = 0; i < keyIndex.length; i++) {
+		this.remove(keyIndex[i]);
+	}
+}, remove:function (key) {
+	if (this.isValidKey(key) == false) {
+		dojo.raise("Invalid key given: " + key);
+	}
+	this._loadKeyIndex();
+	for (var i = 0; i < this._keyIndex.length; i++) {
+		if (this._keyIndex[i] == key) {
+			this._keyIndex.splice(i, 1);
+			break;
 		}
-		
-		// register for successful storage events
-		window.addEventListener("storage", function(evt){
-			// indicate we succeeded
-			resultsHandler.call(null, dojo.storage.SUCCESS, key);
-		}, false);
-		
-		// try to store the value	
-		try{
-			var myStorage = globalStorage[this._domain];
-			myStorage.setItem(key,value);
-		}catch(e){
-			// indicate we failed
-			this._statusHandler.call(null, dojo.storage.FAILED, 
-									key, e.toString());
+	}
+	this._save(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME, this._keyIndex, false);
+	var fullPath = this._getPagePath() + key + ".txt";
+	if (this._isAvailableXPCOM()) {
+		this._removeXPCOM(fullPath);
+	} else {
+		if (this._isAvailableActiveX()) {
+			this._removeActiveX(fullPath);
 		}
-	},
-
-	get: function(key){
-		if(this.isValidKey(key) == false){
-			dojo.raise("Invalid key given: " + key);
+	}
+}, isPermanent:function () {
+	return true;
+}, getMaximumSize:function () {
+	return dojo.storage.SIZE_NO_LIMIT;
+}, hasSettingsUI:function () {
+	return false;
+}, showSettingsUI:function () {
+	dojo.raise(this.getType() + " does not support a storage settings user-interface");
+}, hideSettingsUI:function () {
+	dojo.raise(this.getType() + " does not support a storage settings user-interface");
+}, getType:function () {
+	return "dojo.storage.browser.FileStorageProvider";
+}, _save:function (key, value, updateKeyIndex) {
+	if (typeof updateKeyIndex == "undefined") {
+		updateKeyIndex = true;
+	}
+	if (dojo.lang.isString(value) == false) {
+		value = dojo.json.serialize(value);
+		value = "/* JavaScript */\n" + value + "\n\n";
+	}
+	var fullPath = this._getPagePath() + key + ".txt";
+	if (this._isAvailableXPCOM()) {
+		this._saveFileXPCOM(fullPath, value);
+	} else {
+		if (this._isAvailableActiveX()) {
+			this._saveFileActiveX(fullPath, value);
 		}
-		
-		var myStorage = globalStorage[this._domain];
-		
-		var results = myStorage.getItem(key);
-
-		if(results == null){
-			return null;
+	}
+	if (updateKeyIndex) {
+		this._updateKeyIndex(key);
+	}
+}, _load:function (key) {
+	var fullPath = this._getPagePath() + key + ".txt";
+	var results = null;
+	if (this._isAvailableXPCOM()) {
+		results = this._loadFileXPCOM(fullPath);
+	} else {
+		if (this._isAvailableActiveX()) {
+			results = this._loadFileActiveX(fullPath);
+		} else {
+			if (this._isAvailableJava()) {
+				results = this._loadFileJava(fullPath);
+			}
 		}
-	
-		results = results.value;
-		
-		// destringify the content back into a 
-		// real JavaScript object;
-		// handle strings differently so they have better performance
-		if(!dojo.lang.isUndefined(results) && results != null 
-			 && /^string:/.test(results)){
-			results = results.substring("string:".length);
-		}else{
-			results = dojo.json.evalJson(results);
+	}
+	if (results == null) {
+		return null;
+	}
+	if (!dojo.lang.isUndefined(results) && results != null && /^\/\* JavaScript \*\//.test(results)) {
+		results = dojo.json.evalJson(results);
+	}
+	return results;
+}, _updateKeyIndex:function (key) {
+	this._loadKeyIndex();
+	var alreadyAdded = false;
+	for (var i = 0; i < this._keyIndex.length; i++) {
+		if (this._keyIndex[i] == key) {
+			alreadyAdded = true;
+			break;
 		}
-		
-		return results;
-	},
-
-	getKeys: function(){
-		var myStorage = globalStorage[this._domain];
-		var keysArray = new Array();
-		for(i=0; i<myStorage.length;i++){
-			keysArray[i] = myStorage.key(i);
+	}
+	if (alreadyAdded == false) {
+		this._keyIndex[this._keyIndex.length] = key;
+	}
+	this._save(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME, this._keyIndex, false);
+}, _loadKeyIndex:function () {
+	var indexContents = this._load(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME);
+	if (indexContents == null) {
+		this._keyIndex = new Array();
+	} else {
+		this._keyIndex = indexContents;
+	}
+}, _saveFileXPCOM:function (filename, value) {
+	try {
+		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+		var f = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+		f.initWithPath(filename);
+		var ouputStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
+		ouputStream.init(f, 32 | 4 | 8, 256 + 128, null);
+		ouputStream.write(value, value.length);
+		ouputStream.close();
+	}
+	catch (e) {
+		var msg = e.toString();
+		if (e.name && e.message) {
+			msg = e.name + ": " + e.message;
 		}
-		
-		return keysArray;
-	},
-
-	clear: function(){
-		var myStorage = globalStorage[this._domain];
-		var keys = new Array();
-		for(var i = 0; i < myStorage.length; i++){
-			keys[keys.length] = myStorage.key(i);
+		dojo.raise("dojo.storage.browser.FileStorageProvider._saveFileXPCOM(): " + msg);
+	}
+}, _loadFileXPCOM:function (filename) {
+	try {
+		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+		var f = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+		f.initWithPath(filename);
+		if (f.exists() == false) {
+			return null;
 		}
-		
-		for(var i = 0; i < keys.length; i++){
-			myStorage.removeItem(keys[i]);
+		var inp = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
+		inp.init(f, 1, 4, null);
+		var inputStream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
+		inputStream.init(inp);
+		var results = inputStream.read(inputStream.available());
+		return results;
+	}
+	catch (e) {
+		var msg = e.toString();
+		if (e.name && e.message) {
+			msg = e.name + ": " + e.message;
 		}
-	},
-	
-	remove: function(key){
-		var myStorage = globalStorage[this._domain];
-		myStorage.removeItem(key);
-	},
-	
-	isPermanent: function(){
-		return true;
-	},
-
-	getMaximumSize: function(){
-		return dojo.storage.SIZE_NO_LIMIT;
-	},
-
-	hasSettingsUI: function(){
-		return false;
-	},
-	
-	showSettingsUI: function(){
-		dojo.raise(this.getType() + " does not support a storage settings user-interface");
-	},
-	
-	hideSettingsUI: function(){
-		dojo.raise(this.getType() + " does not support a storage settings user-interface");
-	},
-	
-	getType: function(){
-		return "dojo.storage.browser.WhatWGStorageProvider";
+		dojo.raise("dojo.storage.browser.FileStorageProvider._loadFileXPCOM(): " + msg);
 	}
-});
-
-
-
-
-dojo.storage.browser.FlashStorageProvider = function(){
-	// summary: Storage provider that uses features in Flash to achieve permanent storage
-	// description:
-	//		Authors of this storage provider-
-	//			Brad Neuberg, bkn3 at columbia.edu	
-}
-
-dojo.inherits(dojo.storage.browser.FlashStorageProvider, dojo.storage);
-
-// instance methods and properties
-dojo.lang.extend(dojo.storage.browser.FlashStorageProvider, {
-	namespace: "default",
-	initialized: false,
-	_available: null,
-	_statusHandler: null,
-	
-	initialize: function(){
-		if(djConfig["disableFlashStorage"] == true){
-			return;
+	return null;
+}, _saveFileActiveX:function (filename, value) {
+	try {
+		var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
+		var f = fileSystem.OpenTextFile(filename, 2, true);
+		f.Write(value);
+		f.Close();
+	}
+	catch (e) {
+		var msg = e.toString();
+		if (e.name && e.message) {
+			msg = e.name + ": " + e.message;
 		}
-		
-		// initialize our Flash
-		var loadedListener = function(){
-			dojo.storage._flashLoaded();
+		dojo.raise("dojo.storage.browser.FileStorageProvider._saveFileActiveX(): " + msg);
+	}
+}, _loadFileActiveX:function (filename) {
+	try {
+		var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
+		if (fileSystem.FileExists(filename) == false) {
+			return null;
 		}
-		dojo.flash.addLoadedListener(loadedListener);
-		var swfloc6 = dojo.uri.dojoUri("Storage_version6.swf").toString();
-		var swfloc8 = dojo.uri.dojoUri("Storage_version8.swf").toString();
-		dojo.flash.setSwf({flash6: swfloc6, flash8: swfloc8, visible: false});
-	},
-	
-	isAvailable: function(){
-		if(djConfig["disableFlashStorage"] == true){
-			this._available = false;
-		}else{
-			this._available = true;
+		var f = fileSystem.OpenTextFile(filename, 1);
+		var results = f.ReadAll();
+		f.Close();
+		return results;
+	}
+	catch (e) {
+		var msg = e.toString();
+		if (e.name && e.message) {
+			msg = e.name + ": " + e.message;
 		}
-		
-		return this._available;
-	},
-
-	put: function(key, value, resultsHandler){
-		if(this.isValidKey(key) == false){
-			dojo.raise("Invalid key given: " + key);
+		dojo.raise("dojo.storage.browser.FileStorageProvider._loadFileActiveX(): " + msg);
+	}
+}, _saveFileJava:function (filename, value) {
+	try {
+		var applet = dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID);
+		applet.save(filename, value);
+	}
+	catch (e) {
+		var msg = e.toString();
+		if (e.name && e.message) {
+			msg = e.name + ": " + e.message;
 		}
-			
-		this._statusHandler = resultsHandler;
-		
-		// serialize the value;
-		// handle strings differently so they have better performance
-		if(dojo.lang.isString(value)){
-			value = "string:" + value;
-		}else{
-			value = dojo.json.serialize(value);
+		dojo.raise("dojo.storage.browser.FileStorageProvider._saveFileJava(): " + msg);
+	}
+}, _loadFileJava:function (filename) {
+	try {
+		var applet = dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID);
+		var results = applet.load(filename);
+		return results;
+	}
+	catch (e) {
+		var msg = e.toString();
+		if (e.name && e.message) {
+			msg = e.name + ": " + e.message;
 		}
-		
-		dojo.flash.comm.put(key, value, this.namespace);
-	},
-
-	get: function(key){
-		if(this.isValidKey(key) == false){
-			dojo.raise("Invalid key given: " + key);
+		dojo.raise("dojo.storage.browser.FileStorageProvider._loadFileJava(): " + msg);
+	}
+}, _isAvailableActiveX:function () {
+	try {
+		if (window.ActiveXObject) {
+			var fileSystem = new window.ActiveXObject("Scripting.FileSystemObject");
+			return true;
 		}
-		
-		var results = dojo.flash.comm.get(key, this.namespace);
-
-		if(results == ""){
-			return null;
+	}
+	catch (e) {
+		dojo.debug(e);
+	}
+	return false;
+}, _isAvailableXPCOM:function () {
+	try {
+		if (window.Components) {
+			netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+			Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+			return true;
 		}
-    
-		// destringify the content back into a 
-		// real JavaScript object;
-		// handle strings differently so they have better performance
-		if(!dojo.lang.isUndefined(results) && results != null 
-			 && /^string:/.test(results)){
-			results = results.substring("string:".length);
-		}else{
-			results = dojo.json.evalJson(results);
+	}
+	catch (e) {
+		dojo.debug(e);
+	}
+	return false;
+}, _isAvailableJava:function () {
+	try {
+		if (dojo.render.html.safari == true || dojo.render.html.opera == true()) {
+			if (navigator.javaEnabled() == true) {
+				return true;
+			}
 		}
-    
-		return results;
-	},
-
-	getKeys: function(){
-		var results = dojo.flash.comm.getKeys(this.namespace);
-		
-		if(results == ""){
-			return [];
+	}
+	catch (e) {
+		dojo.debug(e);
+	}
+	return false;
+}, _getPagePath:function () {
+	var path = window.location.pathname;
+	if (/\.html?$/i.test(path)) {
+		path = path.replace(/(?:\/|\\)?[^\.\/\\]*\.html?$/, "");
+	}
+	if (/^\/?[a-z]+\:/i.test(path)) {
+		path = path.replace(/^\/?/, "");
+		path = path.replace(/\//g, "\\");
+	} else {
+		if (/^[\/\\]{2,3}[^\/]/.test(path)) {
+			path = path.replace(/^[\/\\]{2,3}/, "");
+			path = path.replace(/\//g, "\\");
+			path = "\\\\" + path;
 		}
-
-		// the results are returned comma seperated; split them
-		return results.split(",");
-	},
-
-	clear: function(){
-		dojo.flash.comm.clear(this.namespace);
-	},
-	
-	remove: function(key){
-		// summary: 
-		//		Note- This one method is not implemented on the
-		// 		FlashStorageProvider yet
-		
-		dojo.unimplemented("dojo.storage.browser.FlashStorageProvider.remove");
-	},
-	
-	isPermanent: function(){
-		return true;
-	},
-
-	getMaximumSize: function(){
-		return dojo.storage.SIZE_NO_LIMIT;
-	},
-
-	hasSettingsUI: function(){
-		return true;
-	},
-
-	showSettingsUI: function(){
-		dojo.flash.comm.showSettings();
-		dojo.flash.obj.setVisible(true);
-		dojo.flash.obj.center();
-	},
-
-	hideSettingsUI: function(){
-		// hide the dialog
-		dojo.flash.obj.setVisible(false);
-		
-		// call anyone who wants to know the dialog is
-		// now hidden
-		if(dojo.storage.onHideSettingsUI != null &&
-			!dojo.lang.isUndefined(dojo.storage.onHideSettingsUI)){
-			dojo.storage.onHideSettingsUI.call(null);	
+	}
+	if (/\/$/.test(path) == false && /\\$/.test(path) == false) {
+		if (/\//.test(path)) {
+			path += "/";
+		} else {
+			path += "\\";
 		}
-	},
-	
-	getType: function(){
-		return "dojo.storage.browser.FlashStorageProvider";
-	},
-	
-	/** Called when the Flash is finished loading. */
-	_flashLoaded: function(){
-		this._initialized = true;
-
-		// indicate that this storage provider is now loaded
-		dojo.storage.manager.loaded();
-	},
-	
-	//	Called if the storage system needs to tell us about the status
-	//	of a put() request. 
-	_onStatus: function(statusResult, key){
-		var ds = dojo.storage;
-		var dfo = dojo.flash.obj;
-		
-		if(statusResult == ds.PENDING){
-			dfo.center();
-			dfo.setVisible(true);
-		}else{
-			dfo.setVisible(false);
+	}
+	path = unescape(path);
+	return path;
+}, _removeXPCOM:function (filename) {
+	try {
+		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+		var f = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+		f.initWithPath(filename);
+		if (f.exists() == false || f.isDirectory()) {
+			return;
 		}
-		
-		if((!dj_undef("_statusHandler", ds))&&(ds._statusHandler != null)){
-			ds._statusHandler.call(null, statusResult, key);		
+		if (f.isFile()) {
+			f.remove(false);
 		}
 	}
-});
-
-// register the existence of our storage providers
-dojo.storage.manager.register("dojo.storage.browser.WhatWGStorageProvider",
-								new dojo.storage.browser.WhatWGStorageProvider());
-dojo.storage.manager.register("dojo.storage.browser.FlashStorageProvider",
-								new dojo.storage.browser.FlashStorageProvider());
-
-// now that we are loaded and registered tell the storage manager to initialize
-// itself
+	catch (e) {
+		dojo.raise("dojo.storage.browser.FileStorageProvider.remove(): " + e.toString());
+	}
+}, _removeActiveX:function (filename) {
+	try {
+		var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
+		fileSystem.DeleteFile(filename);
+	}
+	catch (e) {
+		dojo.raise("dojo.storage.browser.FileStorageProvider.remove(): " + e.toString());
+	}
+}, _removeJava:function (filename) {
+	try {
+		var applet = dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID);
+		applet.remove(filename);
+	}
+	catch (e) {
+		var msg = e.toString();
+		if (e.name && e.message) {
+			msg = e.name + ": " + e.message;
+		}
+		dojo.raise("dojo.storage.browser.FileStorageProvider._removeJava(): " + msg);
+	}
+}, _writeApplet:function () {
+	var archive = dojo.uri.moduleUri("dojo", "../DojoFileStorageProvider.jar").toString();
+	var tag = "<applet " + "id='" + dojo.storage.browser.FileStorageProvider._APPLET_ID + "' " + "style='position: absolute; top: -500px; left: -500px; width: 1px; height: 1px;' " + "code='DojoFileStorageProvider.class' " + "archive='" + archive + "' " + "width='1' " + "height='1' " + ">" + "</applet>";
+	document.writeln(tag);
+}});
+dojo.storage.browser.WhatWGStorageProvider = function () {
+};
+dojo.inherits(dojo.storage.browser.WhatWGStorageProvider, dojo.storage);
+dojo.lang.extend(dojo.storage.browser.WhatWGStorageProvider, {namespace:"default", initialized:false, _domain:null, _available:null, _statusHandler:null, initialize:function () {
+	if (djConfig["disableWhatWGStorage"] == true) {
+		return;
+	}
+	this._domain = location.hostname;
+	this.initialized = true;
+	dojo.storage.manager.loaded();
+}, isAvailable:function () {
+	try {
+		var myStorage = globalStorage[location.hostname];
+	}
+	catch (e) {
+		this._available = false;
+		return this._available;
+	}
+	this._available = true;
+	return this._available;
+}, put:function (key, value, resultsHandler) {
+	if (this.isValidKey(key) == false) {
+		dojo.raise("Invalid key given: " + key);
+	}
+	this._statusHandler = resultsHandler;
+	if (dojo.lang.isString(value)) {
+		value = "string:" + value;
+	} else {
+		value = dojo.json.serialize(value);
+	}
+	window.addEventListener("storage", function (evt) {
+		resultsHandler.call(null, dojo.storage.SUCCESS, key);
+	}, false);
+	try {
+		var myStorage = globalStorage[this._domain];
+		myStorage.setItem(key, value);
+	}
+	catch (e) {
+		this._statusHandler.call(null, dojo.storage.FAILED, key, e.toString());
+	}
+}, get:function (key) {
+	if (this.isValidKey(key) == false) {
+		dojo.raise("Invalid key given: " + key);
+	}
+	var myStorage = globalStorage[this._domain];
+	var results = myStorage.getItem(key);
+	if (results == null) {
+		return null;
+	}
+	results = results.value;
+	if (!dojo.lang.isUndefined(results) && results != null && /^string:/.test(results)) {
+		results = results.substring("string:".length);
+	} else {
+		results = dojo.json.evalJson(results);
+	}
+	return results;
+}, getKeys:function () {
+	var myStorage = globalStorage[this._domain];
+	var keysArray = new Array();
+	for (i = 0; i < myStorage.length; i++) {
+		keysArray[i] = myStorage.key(i);
+	}
+	return keysArray;
+}, clear:function () {
+	var myStorage = globalStorage[this._domain];
+	var keys = new Array();
+	for (var i = 0; i < myStorage.length; i++) {
+		keys[keys.length] = myStorage.key(i);
+	}
+	for (var i = 0; i < keys.length; i++) {
+		myStorage.removeItem(keys[i]);
+	}
+}, remove:function (key) {
+	var myStorage = globalStorage[this._domain];
+	myStorage.removeItem(key);
+}, isPermanent:function () {
+	return true;
+}, getMaximumSize:function () {
+	return dojo.storage.SIZE_NO_LIMIT;
+}, hasSettingsUI:function () {
+	return false;
+}, showSettingsUI:function () {
+	dojo.raise(this.getType() + " does not support a storage settings user-interface");
+}, hideSettingsUI:function () {
+	dojo.raise(this.getType() + " does not support a storage settings user-interface");
+}, getType:function () {
+	return "dojo.storage.browser.WhatWGProvider";
+}});
+dojo.storage.browser.FlashStorageProvider = function () {
+};
+dojo.inherits(dojo.storage.browser.FlashStorageProvider, dojo.storage);
+dojo.lang.extend(dojo.storage.browser.FlashStorageProvider, {namespace:"default", initialized:false, _available:null, _statusHandler:null, initialize:function () {
+	if (djConfig["disableFlashStorage"] == true) {
+		return;
+	}
+	var loadedListener = function () {
+		dojo.storage._flashLoaded();
+	};
+	dojo.flash.addLoadedListener(loadedListener);
+	var swfloc6 = dojo.uri.moduleUri("dojo", "../Storage_version6.swf").toString();
+	var swfloc8 = dojo.uri.moduleUri("dojo", "../Storage_version8.swf").toString();
+	dojo.flash.setSwf({flash6:swfloc6, flash8:swfloc8, visible:false});
+}, isAvailable:function () {
+	if (djConfig["disableFlashStorage"] == true) {
+		this._available = false;
+	} else {
+		this._available = true;
+	}
+	return this._available;
+}, put:function (key, value, resultsHandler) {
+	if (this.isValidKey(key) == false) {
+		dojo.raise("Invalid key given: " + key);
+	}
+	this._statusHandler = resultsHandler;
+	if (dojo.lang.isString(value)) {
+		value = "string:" + value;
+	} else {
+		value = dojo.json.serialize(value);
+	}
+	dojo.flash.comm.put(key, value, this.namespace);
+}, get:function (key) {
+	if (this.isValidKey(key) == false) {
+		dojo.raise("Invalid key given: " + key);
+	}
+	var results = dojo.flash.comm.get(key, this.namespace);
+	if (results == "") {
+		return null;
+	}
+	if (!dojo.lang.isUndefined(results) && results != null && /^string:/.test(results)) {
+		results = results.substring("string:".length);
+	} else {
+		results = dojo.json.evalJson(results);
+	}
+	return results;
+}, getKeys:function () {
+	var results = dojo.flash.comm.getKeys(this.namespace);
+	if (results == "") {
+		return [];
+	}
+	return results.split(",");
+}, clear:function () {
+	dojo.flash.comm.clear(this.namespace);
+}, remove:function (key) {
+	dojo.unimplemented("dojo.storage.browser.FlashStorageProvider.remove");
+}, isPermanent:function () {
+	return true;
+}, getMaximumSize:function () {
+	return dojo.storage.SIZE_NO_LIMIT;
+}, hasSettingsUI:function () {
+	return true;
+}, showSettingsUI:function () {
+	dojo.flash.comm.showSettings();
+	dojo.flash.obj.setVisible(true);
+	dojo.flash.obj.center();
+}, hideSettingsUI:function () {
+	dojo.flash.obj.setVisible(false);
+	if (dojo.storage.onHideSettingsUI != null && !dojo.lang.isUndefined(dojo.storage.onHideSettingsUI)) {
+		dojo.storage.onHideSettingsUI.call(null);
+	}
+}, getType:function () {
+	return "dojo.storage.browser.FlashStorageProvider";
+}, _flashLoaded:function () {
+	this._initialized = true;
+	dojo.storage.manager.loaded();
+}, _onStatus:function (statusResult, key) {
+	var ds = dojo.storage;
+	var dfo = dojo.flash.obj;
+	if (statusResult == ds.PENDING) {
+		dfo.center();
+		dfo.setVisible(true);
+	} else {
+		dfo.setVisible(false);
+	}
+	if ((!dj_undef("_statusHandler", ds)) && (ds._statusHandler != null)) {
+		ds._statusHandler.call(null, statusResult, key);
+	}
+}});
+dojo.storage.manager.register("dojo.storage.browser.FileStorageProvider", new dojo.storage.browser.FileStorageProvider());
+dojo.storage.manager.register("dojo.storage.browser.WhatWGStorageProvider", new dojo.storage.browser.WhatWGStorageProvider());
+dojo.storage.manager.register("dojo.storage.browser.FlashStorageProvider", new dojo.storage.browser.FlashStorageProvider());
 dojo.storage.manager.initialize();
 
+
 __CPAN_FILE__ src/storage/storage_dialog.fla
 ÐÏࡱá                >  þÿ	                                þÿÿÿ       	   
           ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿR o o t   E n t r y                                               ÿÿÿÿÿÿÿÿ   pª|YªrσRASH              °™ !eÆ   À      C o n t e n t s                                                   ÿÿÿÿÿÿÿÿÿÿÿÿ                                       {j     P a g e   1                                                       ÿÿÿÿÿÿÿÿÿÿÿÿ                                        ¿      M e d i a   1                                                          ÿÿÿÿ                                    þÿÿÿ        þÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿýÿÿÿýÿÿÿýÿÿÿ
            B                       þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿR o o t   E n t r y                                               ÿÿÿÿÿÿÿÿ   pª|YªrσRASH              °:73ºdÆ   À      C o n t e n t s                                                   ÿÿÿÿÿÿÿÿÿÿÿÿ                                       {j     P a g e   1                                                       ÿÿÿÿÿÿÿÿÿÿÿÿ                                        ¿      M e d i a   1                                                          ÿÿÿÿ                                    þÿÿÿ        ÿÿÿÿÿÿÿÿþÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                     þÿÿÿ                      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~      €                   	  
@@ -79134,10 +54510,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: ["dojo.storage"],
-	browser: ["dojo.storage.browser"]
-});
+dojo.kwCompoundRequire({common:["dojo.storage"], browser:["dojo.storage.browser"]});
 dojo.provide("dojo.storage.*");
 
 
@@ -79289,6 +54662,88 @@
 }
 
 
+__CPAN_DIR__ src/storage/java
+__CPAN_FILE__ src/storage/java/DojoFileStorageProvider.class
+Êþº¾  - b
+  : ;
+  : < =
+  >
+  ?
+  @
+  A
+  B
+  C D E F
+  G
+ 
 H
+  H
+  I
+  B J
+  >
+  K
+  L
+  M
+  N O P <init> ()V Code LineNumberTable LocalVariableTable this LDojoFileStorageProvider; load &(Ljava/lang/String;)Ljava/lang/String; filePath Ljava/lang/String; results Ljava/lang/StringBuffer; reader Ljava/io/BufferedReader; line 
+Exceptions Q R save '(Ljava/lang/String;Ljava/lang/String;)V content writer Ljava/io/PrintWriter; remove (Ljava/lang/String;)V f Ljava/io/File; 
+SourceFile DojoFileStorageProvider.java   java/lang/StringBuffer java/io/BufferedReader java/io/FileReader  5  S T U V W X  Y U java/io/PrintWriter java/io/BufferedWriter java/io/FileWriter  Z  [ \ 5 java/io/File ] ^ _ ^ ` ^ a ^ DojoFileStorageProvider java/lang/Object java/io/IOException java/io/FileNotFoundException (Ljava/io/Reader;)V readLine ()Ljava/lang/String; append ,(Ljava/lang/String;)Ljava/lang/StringBuffer; close toString (Ljava/lang/String;Z)V (Ljava/io/Writer;)V print exists ()Z isDirectory isFile delete !               /     *· ±                     ! "    # $     ¦     8» Y· M» Y» Y+· · N:-¶ Y:Æ 
,¶ 	W§ÿï-¶ 
+,¶ °       "           %  ,  /  3      4    8 ! "     8 % &   0 ' (     ) *    + &  ,     - .  / 0     v     "» Y» 
Y» Y+· · · N-,¶ -¶ ±           "  %  ' ! (     *    " ! "     " % &    " 1 &   
+ 2 3  ,     - .  4 5     ~     ,» Y+· M,¶ ™ 
+,¶ ™ ±,¶ ™ ,¶ ™ ,¶ W±           , 	 .  /  2 & 3 + 5          , ! "     , % &  	 # 6 7  ,     - .  8    9
+__CPAN_FILE__ src/storage/java/DojoFileStorageProvider.java
+/**
+	This is a simple class that can load, save, and remove 
+	files from the native file system. It is needed by Safari and Opera
+	for the dojo.storage.browser.FileStorageProvider, since both of
+	these platforms have no native way to talk to the file system
+	for file:// URLs. Safari supports LiveConnect, but only for talking
+	to an applet, not for generic scripting by JavaScript, so we must
+	have an applet.
+
+	@author Brad Neuberg, bkn3 at columbia.edu
+*/
+
+import java.io.*;
+import java.util.*;
+
+public class DojoFileStorageProvider{
+	public String load(String filePath) 
+			throws IOException, FileNotFoundException{
+		StringBuffer results = new StringBuffer();
+		BufferedReader reader = new BufferedReader(
+					new FileReader(filePath));	
+		String line = null;
+		while((line = reader.readLine()) != null){
+			results.append(line);
+		}
+
+		reader.close();
+
+		return results.toString();
+	}
+
+	public void save(String filePath, String content) 
+			throws IOException, FileNotFoundException{
+		PrintWriter writer = new PrintWriter(
+					new BufferedWriter(
+						new FileWriter(filePath, false)));
+		writer.print(content);
+
+		writer.close();
+	}
+
+	public void remove(String filePath)
+			throws IOException, FileNotFoundException{
+		File f = new File(filePath);
+
+		if(f.exists() == false || f.isDirectory()){
+			return;
+		}
+
+		if(f.exists() && f.isFile()){
+			f.delete();
+		}
+	}
+}
+
 __CPAN_DIR__ src/io
 __CPAN_FILE__ src/io/xip_server.html
 <!--
@@ -79458,8 +54913,15 @@
 		var resIndex = 0;
 
 		while((resData.length - resIndex) + urlLength > xipUrlLimit){
-			xipResponseParts.push(resData.substring(resIndex, resIndex + partLength));
-			resIndex += partLength;
+			var part = resData.substring(resIndex, resIndex + partLength);
+			//Safari will do some extra hex escaping unless we keep the original hex
+			//escaping complete.
+			var percentIndex = part.lastIndexOf("%");
+			if(percentIndex == part.length - 1 || percentIndex == part.length - 2){
+				part = part.substring(0, percentIndex);
+			}
+			xipResponseParts.push(part);
+			resIndex += part.length;
 		}
 		xipResponseParts.push(resData.substring(resIndex, resData.length));
 		
@@ -79675,675 +55137,488 @@
 */
 
 dojo.provide("dojo.io.BrowserIO");
-
 dojo.require("dojo.io.common");
 dojo.require("dojo.lang.array");
 dojo.require("dojo.lang.func");
 dojo.require("dojo.string.extras");
 dojo.require("dojo.dom");
 dojo.require("dojo.undo.browser");
-
-if(!dj_undef("window")) {
-
-dojo.io.checkChildrenForFile = function(/*DOMNode*/node){
-	//summary: Checks any child nodes of node for an input type="file" element.
-	var hasFile = false;
-	var inputs = node.getElementsByTagName("input");
-	dojo.lang.forEach(inputs, function(input){
-		if(hasFile){ return; }
-		if(input.getAttribute("type")=="file"){
-			hasFile = true;
+if (!dj_undef("window")) {
+	dojo.io.checkChildrenForFile = function (node) {
+		var hasFile = false;
+		var inputs = node.getElementsByTagName("input");
+		dojo.lang.forEach(inputs, function (input) {
+			if (hasFile) {
+				return;
+			}
+			if (input.getAttribute("type") == "file") {
+				hasFile = true;
+			}
+		});
+		return hasFile;
+	};
+	dojo.io.formHasFile = function (formNode) {
+		return dojo.io.checkChildrenForFile(formNode);
+	};
+	dojo.io.updateNode = function (node, urlOrArgs) {
+		node = dojo.byId(node);
+		var args = urlOrArgs;
+		if (dojo.lang.isString(urlOrArgs)) {
+			args = {url:urlOrArgs};
 		}
-	});
-	return hasFile; //boolean
-}
-
-dojo.io.formHasFile = function(/*DOMNode*/formNode){
-	//summary: Just calls dojo.io.checkChildrenForFile().
-	return dojo.io.checkChildrenForFile(formNode); //boolean
-}
-
-dojo.io.updateNode = function(/*DOMNode*/node, /*String or Object*/urlOrArgs){
-	//summary: Updates a DOMnode with the result of a dojo.io.bind() call.
-	//node: DOMNode
-	//urlOrArgs: String or Object
-	//		Either a String that has an URL, or an object containing dojo.io.bind()
-	//		arguments.
-	node = dojo.byId(node);
-	var args = urlOrArgs;
-	if(dojo.lang.isString(urlOrArgs)){
-		args = { url: urlOrArgs };
-	}
-	args.mimetype = "text/html";
-	args.load = function(t, d, e){
-		while(node.firstChild){
-			dojo.dom.destroyNode(node.firstChild);
-		}
-		node.innerHTML = d;
+		args.mimetype = "text/html";
+		args.load = function (t, d, e) {
+			while (node.firstChild) {
+				dojo.dom.destroyNode(node.firstChild);
+			}
+			node.innerHTML = d;
+		};
+		dojo.io.bind(args);
 	};
-	dojo.io.bind(args);
-}
-
-dojo.io.formFilter = function(/*DOMNode*/node) {
-	//summary: Returns true if the node is an input element that is enabled, has
-	//a name, and whose type is one of the following values: ["file", "submit", "image", "reset", "button"]
-	var type = (node.type||"").toLowerCase();
-	return !node.disabled && node.name
-		&& !dojo.lang.inArray(["file", "submit", "image", "reset", "button"], type); //boolean
-}
-
-// TODO: Move to htmlUtils
-dojo.io.encodeForm = function(/*DOMNode*/formNode, /*String?*/encoding, /*Function?*/formFilter){
-	//summary: Converts the names and values of form elements into an URL-encoded
-	//string (name=value&name=value...).
-	//formNode: DOMNode
-	//encoding: String?
-	//		The encoding to use for the values. Specify a string that starts with
-	//		"utf" (for instance, "utf8"), to use encodeURIComponent() as the encoding
-	//		function. Otherwise, dojo.string.encodeAscii will be used.
-	//formFilter: Function?
-	//	A function used to filter out form elements. The element node will be passed
-	//	to the formFilter function, and a boolean result is expected (true indicating
-	//	indicating that the element should have its name/value included in the output).
-	//	If no formFilter is specified, then dojo.io.formFilter() will be used.
-	if((!formNode)||(!formNode.tagName)||(!formNode.tagName.toLowerCase() == "form")){
-		dojo.raise("Attempted to encode a non-form element.");
-	}
-	if(!formFilter) { formFilter = dojo.io.formFilter; }
-	var enc = /utf/i.test(encoding||"") ? encodeURIComponent : dojo.string.encodeAscii;
-	var values = [];
-
-	for(var i = 0; i < formNode.elements.length; i++){
-		var elm = formNode.elements[i];
-		if(!elm || elm.tagName.toLowerCase() == "fieldset" || !formFilter(elm)) { continue; }
-		var name = enc(elm.name);
-		var type = elm.type.toLowerCase();
-
-		if(type == "select-multiple"){
-			for(var j = 0; j < elm.options.length; j++){
-				if(elm.options[j].selected) {
-					values.push(name + "=" + enc(elm.options[j].value));
+	dojo.io.formFilter = function (node) {
+		var type = (node.type || "").toLowerCase();
+		return !node.disabled && node.name && !dojo.lang.inArray(["file", "submit", "image", "reset", "button"], type);
+	};
+	dojo.io.encodeForm = function (formNode, encoding, formFilter) {
+		if ((!formNode) || (!formNode.tagName) || (!formNode.tagName.toLowerCase() == "form")) {
+			dojo.raise("Attempted to encode a non-form element.");
+		}
+		if (!formFilter) {
+			formFilter = dojo.io.formFilter;
+		}
+		var enc = /utf/i.test(encoding || "") ? encodeURIComponent : dojo.string.encodeAscii;
+		var values = [];
+		for (var i = 0; i < formNode.elements.length; i++) {
+			var elm = formNode.elements[i];
+			if (!elm || elm.tagName.toLowerCase() == "fieldset" || !formFilter(elm)) {
+				continue;
+			}
+			var name = enc(elm.name);
+			var type = elm.type.toLowerCase();
+			if (type == "select-multiple") {
+				for (var j = 0; j < elm.options.length; j++) {
+					if (elm.options[j].selected) {
+						values.push(name + "=" + enc(elm.options[j].value));
+					}
 				}
+			} else {
+				if (dojo.lang.inArray(["radio", "checkbox"], type)) {
+					if (elm.checked) {
+						values.push(name + "=" + enc(elm.value));
+					}
+				} else {
+					values.push(name + "=" + enc(elm.value));
+				}
 			}
-		}else if(dojo.lang.inArray(["radio", "checkbox"], type)){
-			if(elm.checked){
-				values.push(name + "=" + enc(elm.value));
+		}
+		var inputs = formNode.getElementsByTagName("input");
+		for (var i = 0; i < inputs.length; i++) {
+			var input = inputs[i];
+			if (input.type.toLowerCase() == "image" && input.form == formNode && formFilter(input)) {
+				var name = enc(input.name);
+				values.push(name + "=" + enc(input.value));
+				values.push(name + ".x=0");
+				values.push(name + ".y=0");
 			}
-		}else{
-			values.push(name + "=" + enc(elm.value));
 		}
-	}
-
-	// now collect input type="image", which doesn't show up in the elements array
-	var inputs = formNode.getElementsByTagName("input");
-	for(var i = 0; i < inputs.length; i++) {
-		var input = inputs[i];
-		if(input.type.toLowerCase() == "image" && input.form == formNode
-			&& formFilter(input)) {
-			var name = enc(input.name);
-			values.push(name + "=" + enc(input.value));
-			values.push(name + ".x=0");
-			values.push(name + ".y=0");
+		return values.join("&") + "&";
+	};
+	dojo.io.FormBind = function (args) {
+		this.bindArgs = {};
+		if (args && args.formNode) {
+			this.init(args);
+		} else {
+			if (args) {
+				this.init({formNode:args});
+			}
 		}
-	}
-	return values.join("&") + "&"; //String
-}
-
-dojo.io.FormBind = function(/*DOMNode or Object*/args) {
-	//summary: constructor for a dojo.io.FormBind object. See the Dojo Book for
-	//some information on usage: http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book23
-	//args: DOMNode or Object
-	//		args can either be the DOMNode for a form element, or an object containing
-	//		dojo.io.bind() arguments, one of which should be formNode with the value of
-	//		a form element DOMNode.
-	this.bindArgs = {};
-
-	if(args && args.formNode) {
-		this.init(args);
-	} else if(args) {
-		this.init({formNode: args});
-	}
-}
-dojo.lang.extend(dojo.io.FormBind, {
-	form: null,
-
-	bindArgs: null,
-
-	clickedButton: null,
-
-	init: function(/*DOMNode or Object*/args) {
-		//summary: Internal function called by the dojo.io.FormBind() constructor
-		//do not call this method directly.
+	};
+	dojo.lang.extend(dojo.io.FormBind, {form:null, bindArgs:null, clickedButton:null, init:function (args) {
 		var form = dojo.byId(args.formNode);
-
-		if(!form || !form.tagName || form.tagName.toLowerCase() != "form") {
+		if (!form || !form.tagName || form.tagName.toLowerCase() != "form") {
 			throw new Error("FormBind: Couldn't apply, invalid form");
-		} else if(this.form == form) {
-			return;
-		} else if(this.form) {
-			throw new Error("FormBind: Already applied to a form");
+		} else {
+			if (this.form == form) {
+				return;
+			} else {
+				if (this.form) {
+					throw new Error("FormBind: Already applied to a form");
+				}
+			}
 		}
-
 		dojo.lang.mixin(this.bindArgs, args);
 		this.form = form;
-
 		this.connect(form, "onsubmit", "submit");
-
-		for(var i = 0; i < form.elements.length; i++) {
+		for (var i = 0; i < form.elements.length; i++) {
 			var node = form.elements[i];
-			if(node && node.type && dojo.lang.inArray(["submit", "button"], node.type.toLowerCase())) {
+			if (node && node.type && dojo.lang.inArray(["submit", "button"], node.type.toLowerCase())) {
 				this.connect(node, "onclick", "click");
 			}
 		}
-
 		var inputs = form.getElementsByTagName("input");
-		for(var i = 0; i < inputs.length; i++) {
+		for (var i = 0; i < inputs.length; i++) {
 			var input = inputs[i];
-			if(input.type.toLowerCase() == "image" && input.form == form) {
+			if (input.type.toLowerCase() == "image" && input.form == form) {
 				this.connect(input, "onclick", "click");
 			}
 		}
-	},
-
-	onSubmit: function(/*DOMNode*/form) {
-		//summary: Function used to verify that the form is OK to submit.
-		//Override this function if you want specific form validation done.
-		return true; //boolean
-	},
-
-	submit: function(/*Event*/e) {
-		//summary: internal function that is connected as a listener to the
-		//form's onsubmit event.
+	}, onSubmit:function (form) {
+		return true;
+	}, submit:function (e) {
 		e.preventDefault();
-		if(this.onSubmit(this.form)) {
-			dojo.io.bind(dojo.lang.mixin(this.bindArgs, {
-				formFilter: dojo.lang.hitch(this, "formFilter")
-			}));
+		if (this.onSubmit(this.form)) {
+			dojo.io.bind(dojo.lang.mixin(this.bindArgs, {formFilter:dojo.lang.hitch(this, "formFilter")}));
 		}
-	},
-
-	click: function(/*Event*/e) {
-		//summary: internal method that is connected as a listener to the
-		//form's elements whose click event can submit a form.
+	}, click:function (e) {
 		var node = e.currentTarget;
-		if(node.disabled) { return; }
+		if (node.disabled) {
+			return;
+		}
 		this.clickedButton = node;
-	},
-
-	formFilter: function(/*DOMNode*/node) {
-		//summary: internal function used to know which form element values to include
-		//		in the dojo.io.bind() request.
-		var type = (node.type||"").toLowerCase();
+	}, formFilter:function (node) {
+		var type = (node.type || "").toLowerCase();
 		var accept = false;
-		if(node.disabled || !node.name) {
+		if (node.disabled || !node.name) {
 			accept = false;
-		} else if(dojo.lang.inArray(["submit", "button", "image"], type)) {
-			if(!this.clickedButton) { this.clickedButton = node; }
-			accept = node == this.clickedButton;
 		} else {
-			accept = !dojo.lang.inArray(["file", "submit", "reset", "button"], type);
+			if (dojo.lang.inArray(["submit", "button", "image"], type)) {
+				if (!this.clickedButton) {
+					this.clickedButton = node;
+				}
+				accept = node == this.clickedButton;
+			} else {
+				accept = !dojo.lang.inArray(["file", "submit", "reset", "button"], type);
+			}
 		}
-		return accept; //boolean
-	},
-
-	// in case you don't have dojo.event.* pulled in
-	connect: function(/*Object*/srcObj, /*Function*/srcFcn, /*Function*/targetFcn) {
-		//summary: internal function used to connect event listeners to form elements
-		//that trigger events. Used in case dojo.event is not loaded.
-		if(dojo.evalObjPath("dojo.event.connect")) {
+		return accept;
+	}, connect:function (srcObj, srcFcn, targetFcn) {
+		if (dojo.evalObjPath("dojo.event.connect")) {
 			dojo.event.connect(srcObj, srcFcn, this, targetFcn);
 		} else {
 			var fcn = dojo.lang.hitch(this, targetFcn);
-			srcObj[srcFcn] = function(e) {
-				if(!e) { e = window.event; }
-				if(!e.currentTarget) { e.currentTarget = e.srcElement; }
-				if(!e.preventDefault) { e.preventDefault = function() { window.event.returnValue = false; } }
+			srcObj[srcFcn] = function (e) {
+				if (!e) {
+					e = window.event;
+				}
+				if (!e.currentTarget) {
+					e.currentTarget = e.srcElement;
+				}
+				if (!e.preventDefault) {
+					e.preventDefault = function () {
+						window.event.returnValue = false;
+					};
+				}
 				fcn(e);
-			}
+			};
 		}
-	}
-});
-
-dojo.io.XMLHTTPTransport = new function(){
-	//summary: The object that implements the dojo.io.bind transport for XMLHttpRequest.
-	var _this = this;
-
-	var _cache = {}; // FIXME: make this public? do we even need to?
-	this.useCache = false; // if this is true, we'll cache unless kwArgs.useCache = false
-	this.preventCache = false; // if this is true, we'll always force GET requests to cache
-
-	// FIXME: Should this even be a function? or do we just hard code it in the next 2 functions?
-	function getCacheKey(url, query, method) {
-		return url + "|" + query + "|" + method.toLowerCase();
-	}
-
-	function addToCache(url, query, method, http) {
-		_cache[getCacheKey(url, query, method)] = http;
-	}
-
-	function getFromCache(url, query, method) {
-		return _cache[getCacheKey(url, query, method)];
-	}
-
-	this.clearCache = function() {
-		_cache = {};
-	}
-
-	// moved successful load stuff here
-	function doLoad(kwArgs, http, url, query, useCache) {
-		if(	((http.status>=200)&&(http.status<300))|| 	// allow any 2XX response code
-			(http.status==304)|| 						// get it out of the cache
-			(location.protocol=="file:" && (http.status==0 || http.status==undefined))||
-			(location.protocol=="chrome:" && (http.status==0 || http.status==undefined))
-		){
-			var ret;
-			if(kwArgs.method.toLowerCase() == "head"){
-				var headers = http.getAllResponseHeaders();
-				ret = {};
-				ret.toString = function(){ return headers; }
-				var values = headers.split(/[\r\n]+/g);
-				for(var i = 0; i < values.length; i++) {
-					var pair = values[i].match(/^([^:]+)\s*:\s*(.+)$/i);
-					if(pair) {
-						ret[pair[1]] = pair[2];
+	}});
+	dojo.io.XMLHTTPTransport = new function () {
+		var _this = this;
+		var _cache = {};
+		this.useCache = false;
+		this.preventCache = false;
+		function getCacheKey(url, query, method) {
+			return url + "|" + query + "|" + method.toLowerCase();
+		}
+		function addToCache(url, query, method, http) {
+			_cache[getCacheKey(url, query, method)] = http;
+		}
+		function getFromCache(url, query, method) {
+			return _cache[getCacheKey(url, query, method)];
+		}
+		this.clearCache = function () {
+			_cache = {};
+		};
+		function doLoad(kwArgs, http, url, query, useCache) {
+			if (((http.status >= 200) && (http.status < 300)) || (http.status == 304) || (location.protocol == "file:" && (http.status == 0 || http.status == undefined)) || (location.protocol == "chrome:" && (http.status == 0 || http.status == undefined))) {
+				var ret;
+				if (kwArgs.method.toLowerCase() == "head") {
+					var headers = http.getAllResponseHeaders();
+					ret = {};
+					ret.toString = function () {
+						return headers;
+					};
+					var values = headers.split(/[\r\n]+/g);
+					for (var i = 0; i < values.length; i++) {
+						var pair = values[i].match(/^([^:]+)\s*:\s*(.+)$/i);
+						if (pair) {
+							ret[pair[1]] = pair[2];
+						}
 					}
+				} else {
+					if (kwArgs.mimetype == "text/javascript") {
+						try {
+							ret = dj_eval(http.responseText);
+						}
+						catch (e) {
+							dojo.debug(e);
+							dojo.debug(http.responseText);
+							ret = null;
+						}
+					} else {
+						if (kwArgs.mimetype == "text/json" || kwArgs.mimetype == "application/json") {
+							try {
+								ret = dj_eval("(" + http.responseText + ")");
+							}
+							catch (e) {
+								dojo.debug(e);
+								dojo.debug(http.responseText);
+								ret = false;
+							}
+						} else {
+							if ((kwArgs.mimetype == "application/xml") || (kwArgs.mimetype == "text/xml")) {
+								ret = http.responseXML;
+								if (!ret || typeof ret == "string" || !http.getResponseHeader("Content-Type")) {
+									ret = dojo.dom.createDocumentFromText(http.responseText);
+								}
+							} else {
+								ret = http.responseText;
+							}
+						}
+					}
 				}
-			}else if(kwArgs.mimetype == "text/javascript"){
-				try{
-					ret = dj_eval(http.responseText);
-				}catch(e){
-					dojo.debug(e);
-					dojo.debug(http.responseText);
-					ret = null;
+				if (useCache) {
+					addToCache(url, query, kwArgs.method, http);
 				}
-			}else if(kwArgs.mimetype == "text/json" || kwArgs.mimetype == "application/json"){
-				try{
-					ret = dj_eval("("+http.responseText+")");
-				}catch(e){
-					dojo.debug(e);
-					dojo.debug(http.responseText);
-					ret = false;
-				}
-			}else if((kwArgs.mimetype == "application/xml")||
-						(kwArgs.mimetype == "text/xml")){
-				ret = http.responseXML;
-				if(!ret || typeof ret == "string" || !http.getResponseHeader("Content-Type")) {
-					ret = dojo.dom.createDocumentFromText(http.responseText);
-				}
-			}else{
-				ret = http.responseText;
+				kwArgs[(typeof kwArgs.load == "function") ? "load" : "handle"]("load", ret, http, kwArgs);
+			} else {
+				var errObj = new dojo.io.Error("XMLHttpTransport Error: " + http.status + " " + http.statusText);
+				kwArgs[(typeof kwArgs.error == "function") ? "error" : "handle"]("error", errObj, http, kwArgs);
 			}
-
-			if(useCache){ // only cache successful responses
-				addToCache(url, query, kwArgs.method, http);
-			}
-			kwArgs[(typeof kwArgs.load == "function") ? "load" : "handle"]("load", ret, http, kwArgs);
-		}else{
-			var errObj = new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-			kwArgs[(typeof kwArgs.error == "function") ? "error" : "handle"]("error", errObj, http, kwArgs);
 		}
-	}
-
-	// set headers (note: Content-Type will get overriden if kwArgs.contentType is set)
-	function setHeaders(http, kwArgs){
-		if(kwArgs["headers"]) {
-			for(var header in kwArgs["headers"]) {
-				if(header.toLowerCase() == "content-type" && !kwArgs["contentType"]) {
-					kwArgs["contentType"] = kwArgs["headers"][header];
-				} else {
-					http.setRequestHeader(header, kwArgs["headers"][header]);
+		function setHeaders(http, kwArgs) {
+			if (kwArgs["headers"]) {
+				for (var header in kwArgs["headers"]) {
+					if (header.toLowerCase() == "content-type" && !kwArgs["contentType"]) {
+						kwArgs["contentType"] = kwArgs["headers"][header];
+					} else {
+						http.setRequestHeader(header, kwArgs["headers"][header]);
+					}
 				}
 			}
 		}
-	}
-
-	this.inFlight = [];
-	this.inFlightTimer = null;
-
-	this.startWatchingInFlight = function(){
-		//summary: internal method used to trigger a timer to watch all inflight
-		//XMLHttpRequests.
-		if(!this.inFlightTimer){
-			// setInterval broken in mozilla x86_64 in some circumstances, see
-			// https://bugzilla.mozilla.org/show_bug.cgi?id=344439
-			// using setTimeout instead
-			this.inFlightTimer = setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();", 10);
-		}
-	}
-
-	this.watchInFlight = function(){
-		//summary: internal method that checks each inflight XMLHttpRequest to see
-		//if it has completed or if the timeout situation applies.
-		var now = null;
-		// make sure sync calls stay thread safe, if this callback is called during a sync call
-		// and this results in another sync call before the first sync call ends the browser hangs
-		if(!dojo.hostenv._blockAsync && !_this._blockAsync){
-			for(var x=this.inFlight.length-1; x>=0; x--){
-				try{
-					var tif = this.inFlight[x];
-					if(!tif || tif.http._aborted || !tif.http.readyState){
-						this.inFlight.splice(x, 1); continue; 
-					}
-					if(4==tif.http.readyState){
-						// remove it so we can clean refs
-						this.inFlight.splice(x, 1);
-						doLoad(tif.req, tif.http, tif.url, tif.query, tif.useCache);
-					}else if (tif.startTime){
-						//See if this is a timeout case.
-						if(!now){
-							now = (new Date()).getTime();
+		this.inFlight = [];
+		this.inFlightTimer = null;
+		this.startWatchingInFlight = function () {
+			if (!this.inFlightTimer) {
+				this.inFlightTimer = setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();", 10);
+			}
+		};
+		this.watchInFlight = function () {
+			var now = null;
+			if (!dojo.hostenv._blockAsync && !_this._blockAsync) {
+				for (var x = this.inFlight.length - 1; x >= 0; x--) {
+					try {
+						var tif = this.inFlight[x];
+						if (!tif || tif.http._aborted || !tif.http.readyState) {
+							this.inFlight.splice(x, 1);
+							continue;
 						}
-						if(tif.startTime + (tif.req.timeoutSeconds * 1000) < now){
-							//Stop the request.
-							if(typeof tif.http.abort == "function"){
-								tif.http.abort();
-							}
-		
-							// remove it so we can clean refs
+						if (4 == tif.http.readyState) {
 							this.inFlight.splice(x, 1);
-							tif.req[(typeof tif.req.timeout == "function") ? "timeout" : "handle"]("timeout", null, tif.http, tif.req);
+							doLoad(tif.req, tif.http, tif.url, tif.query, tif.useCache);
+						} else {
+							if (tif.startTime) {
+								if (!now) {
+									now = (new Date()).getTime();
+								}
+								if (tif.startTime + (tif.req.timeoutSeconds * 1000) < now) {
+									if (typeof tif.http.abort == "function") {
+										tif.http.abort();
+									}
+									this.inFlight.splice(x, 1);
+									tif.req[(typeof tif.req.timeout == "function") ? "timeout" : "handle"]("timeout", null, tif.http, tif.req);
+								}
+							}
 						}
 					}
-				}catch(e){
-					try{
-						var errObj = new dojo.io.Error("XMLHttpTransport.watchInFlight Error: " + e);
-						tif.req[(typeof tif.req.error == "function") ? "error" : "handle"]("error", errObj, tif.http, tif.req);
-					}catch(e2){
-						dojo.debug("XMLHttpTransport error callback failed: " + e2);
+					catch (e) {
+						try {
+							var errObj = new dojo.io.Error("XMLHttpTransport.watchInFlight Error: " + e);
+							tif.req[(typeof tif.req.error == "function") ? "error" : "handle"]("error", errObj, tif.http, tif.req);
+						}
+						catch (e2) {
+							dojo.debug("XMLHttpTransport error callback failed: " + e2);
+						}
 					}
 				}
 			}
-		}
-
-		clearTimeout(this.inFlightTimer);
-		if(this.inFlight.length == 0){
-			this.inFlightTimer = null;
-			return;
-		}
-		this.inFlightTimer = setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();", 10);
-	}
-
-	var hasXmlHttp = dojo.hostenv.getXmlhttpObject() ? true : false;
-	this.canHandle = function(/*dojo.io.Request*/kwArgs){
-		//summary: Tells dojo.io.bind() if this is a good transport to
-		//use for the particular type of request. This type of transport cannot
-		//handle forms that have an input type="file" element.
-
-		// FIXME: we need to determine when form values need to be
-		// multi-part mime encoded and avoid using this transport for those
-		// requests.
-		return hasXmlHttp
-			&& dojo.lang.inArray(["text/plain", "text/html", "application/xml", "text/xml", "text/javascript", "text/json", "application/json"], (kwArgs["mimetype"].toLowerCase()||""))
-			&& !( kwArgs["formNode"] && dojo.io.formHasFile(kwArgs["formNode"]) ); //boolean
-	}
-
-	this.multipartBoundary = "45309FFF-BD65-4d50-99C9-36986896A96F";	// unique guid as a boundary value for multipart posts
-
-	this.bind = function(/*dojo.io.Request*/kwArgs){
-		//summary: function that sends the request to the server.
-
-		//This function will attach an abort() function to the kwArgs dojo.io.Request object,
-		//so if you need to abort the request, you can call that method on the request object.
-		//The following are acceptable properties in kwArgs (in addition to the
-		//normal dojo.io.Request object properties).
-		//url: String: URL the server URL to use for the request.
-		//method: String: the HTTP method to use (GET, POST, etc...).
-		//mimetype: Specifies what format the result data should be given to the load/handle callback. Valid values are:
-		//		text/javascript, text/json, application/json, application/xml, text/xml. Any other mimetype will give back a text
-		//		string.
-		//transport: String: specify "XMLHTTPTransport" to force the use of this XMLHttpRequest transport.
-		//headers: Object: The object property names and values will be sent as HTTP request header
-		//		names and values.
-		//sendTransport: boolean: If true, then dojo.transport=xmlhttp will be added to the request.
-		//encoding: String: The type of encoding to use when dealing with the content kwArgs property.
-		//content: Object: The content object is converted into a name=value&name=value string, by
-		//		using dojo.io.argsFromMap(). The encoding kwArgs property is passed to dojo.io.argsFromMap()
-		//		for use in encoding the names and values. The resulting string is added to the request.
-		//formNode: DOMNode: a form element node. This should not normally be used. Use new dojo.io.FormBind() instead.
-		//		If formNode is used, then the names and values of the form elements will be converted
-		//		to a name=value&name=value string and added to the request. The encoding kwArgs property is used
-		//		to encode the names and values.
-		//postContent: String: Raw name=value&name=value string to be included as part of the request.
-		//back or backButton: Function: A function to be called if the back button is pressed. If this kwArgs property
-		//		is used, then back button support via dojo.undo.browser will be used. See notes for dojo.undo.browser on usage.
-		//		You need to set djConfig.preventBackButtonFix = false to enable back button support.
-		//changeUrl: boolean or String: Used as part of back button support. See notes for dojo.undo.browser on usage.
-		//user: String: The user name. Used in conjuction with password. Passed to XMLHttpRequest.open().
-		//password: String: The user's password. Used in conjuction with user. Passed to XMLHttpRequest.open().
-		//file: Object or Array of Objects: an object simulating a file to be uploaded. file objects should have the following properties:
-		//		name or fileName: the name of the file
-		//		contentType: the MIME content type for the file.
-		//		content: the actual content of the file.
-		//multipart: boolean: indicates whether this should be a multipart mime request. If kwArgs.file exists, then this
-		//		property is set to true automatically.
-		//sync: boolean: if true, then a synchronous XMLHttpRequest call is done,
-		//		if false (the default), then an asynchronous call is used.
-		//preventCache: boolean: If true, then a cache busting parameter is added to the request URL.
-		//		default value is false.
-		//useCache: boolean: If true, then XMLHttpTransport will keep an internal cache of the server
-		//		response and use that response if a similar request is done again.
-		//		A similar request is one that has the same URL, query string and HTTP method value.
-		//		default is false.
-		if(!kwArgs["url"]){
-			// are we performing a history action?
-			if( !kwArgs["formNode"]
-				&& (kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"] || kwArgs["watchForURL"])
-				&& (!djConfig.preventBackButtonFix)) {
-        dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request",
-        				"Use dojo.undo.browser.addToHistory() instead.", "0.4");
-				dojo.undo.browser.addToHistory(kwArgs);
-				return true;
+			clearTimeout(this.inFlightTimer);
+			if (this.inFlight.length == 0) {
+				this.inFlightTimer = null;
+				return;
 			}
-		}
-
-		// build this first for cache purposes
-		var url = kwArgs.url;
-		var query = "";
-		if(kwArgs["formNode"]){
-			var ta = kwArgs.formNode.getAttribute("action");
-			if((ta)&&(!kwArgs["url"])){ url = ta; }
-			var tp = kwArgs.formNode.getAttribute("method");
-			if((tp)&&(!kwArgs["method"])){ kwArgs.method = tp; }
-			query += dojo.io.encodeForm(kwArgs.formNode, kwArgs.encoding, kwArgs["formFilter"]);
-		}
-
-		if(url.indexOf("#") > -1) {
-			dojo.debug("Warning: dojo.io.bind: stripping hash values from url:", url);
-			url = url.split("#")[0];
-		}
-
-		if(kwArgs["file"]){
-			// force post for file transfer
-			kwArgs.method = "post";
-		}
-
-		if(!kwArgs["method"]){
-			kwArgs.method = "get";
-		}
-
-		// guess the multipart value
-		if(kwArgs.method.toLowerCase() == "get"){
-			// GET cannot use multipart
-			kwArgs.multipart = false;
-		}else{
-			if(kwArgs["file"]){
-				// enforce multipart when sending files
-				kwArgs.multipart = true;
-			}else if(!kwArgs["multipart"]){
-				// default 
-				kwArgs.multipart = false;
+			this.inFlightTimer = setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();", 10);
+		};
+		var hasXmlHttp = dojo.hostenv.getXmlhttpObject() ? true : false;
+		this.canHandle = function (kwArgs) {
+			return hasXmlHttp && dojo.lang.inArray(["text/plain", "text/html", "application/xml", "text/xml", "text/javascript", "text/json", "application/json"], (kwArgs["mimetype"].toLowerCase() || "")) && !(kwArgs["formNode"] && dojo.io.formHasFile(kwArgs["formNode"]));
+		};
+		this.multipartBoundary = "45309FFF-BD65-4d50-99C9-36986896A96F";
+		this.bind = function (kwArgs) {
+			if (!kwArgs["url"]) {
+				if (!kwArgs["formNode"] && (kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"] || kwArgs["watchForURL"]) && (!djConfig.preventBackButtonFix)) {
+					dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request", "Use dojo.undo.browser.addToHistory() instead.", "0.4");
+					dojo.undo.browser.addToHistory(kwArgs);
+					return true;
+				}
 			}
-		}
-
-		if(kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"]){
-			dojo.undo.browser.addToHistory(kwArgs);
-		}
-
-		var content = kwArgs["content"] || {};
-
-		if(kwArgs.sendTransport) {
-			content["dojo.transport"] = "xmlhttp";
-		}
-
-		do { // break-block
-			if(kwArgs.postContent){
-				query = kwArgs.postContent;
-				break;
+			var url = kwArgs.url;
+			var query = "";
+			if (kwArgs["formNode"]) {
+				var ta = kwArgs.formNode.getAttribute("action");
+				if ((ta) && (!kwArgs["url"])) {
+					url = ta;
+				}
+				var tp = kwArgs.formNode.getAttribute("method");
+				if ((tp) && (!kwArgs["method"])) {
+					kwArgs.method = tp;
+				}
+				query += dojo.io.encodeForm(kwArgs.formNode, kwArgs.encoding, kwArgs["formFilter"]);
 			}
-
-			if(content) {
-				query += dojo.io.argsFromMap(content, kwArgs.encoding);
+			if (url.indexOf("#") > -1) {
+				dojo.debug("Warning: dojo.io.bind: stripping hash values from url:", url);
+				url = url.split("#")[0];
 			}
-			
-			if(kwArgs.method.toLowerCase() == "get" || !kwArgs.multipart){
-				break;
+			if (kwArgs["file"]) {
+				kwArgs.method = "post";
 			}
-
-			var	t = [];
-			if(query.length){
-				var q = query.split("&");
-				for(var i = 0; i < q.length; ++i){
-					if(q[i].length){
-						var p = q[i].split("=");
-						t.push(	"--" + this.multipartBoundary,
-								"Content-Disposition: form-data; name=\"" + p[0] + "\"", 
-								"",
-								p[1]);
-					}
-				}
+			if (!kwArgs["method"]) {
+				kwArgs.method = "get";
 			}
-
-			if(kwArgs.file){
-				if(dojo.lang.isArray(kwArgs.file)){
-					for(var i = 0; i < kwArgs.file.length; ++i){
-						var o = kwArgs.file[i];
-						t.push(	"--" + this.multipartBoundary,
-								"Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"",
-								"Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"),
-								"",
-								o.content);
+			if (kwArgs.method.toLowerCase() == "get") {
+				kwArgs.multipart = false;
+			} else {
+				if (kwArgs["file"]) {
+					kwArgs.multipart = true;
+				} else {
+					if (!kwArgs["multipart"]) {
+						kwArgs.multipart = false;
 					}
-				}else{
-					var o = kwArgs.file;
-					t.push(	"--" + this.multipartBoundary,
-							"Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"",
-							"Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"),
-							"",
-							o.content);
 				}
 			}
-
-			if(t.length){
-				t.push("--"+this.multipartBoundary+"--", "");
-				query = t.join("\r\n");
+			if (kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"]) {
+				dojo.undo.browser.addToHistory(kwArgs);
 			}
-		}while(false);
-
-		// kwArgs.Connection = "close";
-
-		var async = kwArgs["sync"] ? false : true;
-
-		var preventCache = kwArgs["preventCache"] ||
-			(this.preventCache == true && kwArgs["preventCache"] != false);
-		var useCache = kwArgs["useCache"] == true ||
-			(this.useCache == true && kwArgs["useCache"] != false );
-
-		// preventCache is browser-level (add query string junk), useCache
-		// is for the local cache. If we say preventCache, then don't attempt
-		// to look in the cache, but if useCache is true, we still want to cache
-		// the response
-		if(!preventCache && useCache){
-			var cachedHttp = getFromCache(url, query, kwArgs.method);
-			if(cachedHttp){
-				doLoad(kwArgs, cachedHttp, url, query, false);
-				return;
+			var content = kwArgs["content"] || {};
+			if (kwArgs.sendTransport) {
+				content["dojo.transport"] = "xmlhttp";
 			}
-		}
-
-		// much of this is from getText, but reproduced here because we need
-		// more flexibility
-		var http = dojo.hostenv.getXmlhttpObject(kwArgs);	
-		var received = false;
-
-		// build a handler function that calls back to the handler obj
-		if(async){
-			var startTime = 
-			// FIXME: setting up this callback handler leaks on IE!!!
-			this.inFlight.push({
-				"req":		kwArgs,
-				"http":		http,
-				"url":	 	url,
-				"query":	query,
-				"useCache":	useCache,
-				"startTime": kwArgs.timeoutSeconds ? (new Date()).getTime() : 0
-			});
-			this.startWatchingInFlight();
-		}else{
-			// block async callbacks until sync is in, needed in khtml, others?
-			_this._blockAsync = true;
-		}
-
-		if(kwArgs.method.toLowerCase() == "post"){
-			// FIXME: need to hack in more flexible Content-Type setting here!
-			if (!kwArgs.user) {
-				http.open("POST", url, async);
-			}else{
-        http.open("POST", url, async, kwArgs.user, kwArgs.password);
-			}
-			setHeaders(http, kwArgs);
-			http.setRequestHeader("Content-Type", kwArgs.multipart ? ("multipart/form-data; boundary=" + this.multipartBoundary) : 
-				(kwArgs.contentType || "application/x-www-form-urlencoded"));
-			try{
-				http.send(query);
-			}catch(e){
-				if(typeof http.abort == "function"){
-					http.abort();
+			do {
+				if (kwArgs.postContent) {
+					query = kwArgs.postContent;
+					break;
 				}
-				doLoad(kwArgs, {status: 404}, url, query, useCache);
+				if (content) {
+					query += dojo.io.argsFromMap(content, kwArgs.encoding);
+				}
+				if (kwArgs.method.toLowerCase() == "get" || !kwArgs.multipart) {
+					break;
+				}
+				var t = [];
+				if (query.length) {
+					var q = query.split("&");
+					for (var i = 0; i < q.length; ++i) {
+						if (q[i].length) {
+							var p = q[i].split("=");
+							t.push("--" + this.multipartBoundary, "Content-Disposition: form-data; name=\"" + p[0] + "\"", "", p[1]);
+						}
+					}
+				}
+				if (kwArgs.file) {
+					if (dojo.lang.isArray(kwArgs.file)) {
+						for (var i = 0; i < kwArgs.file.length; ++i) {
+							var o = kwArgs.file[i];
+							t.push("--" + this.multipartBoundary, "Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"", "Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"), "", o.content);
+						}
+					} else {
+						var o = kwArgs.file;
+						t.push("--" + this.multipartBoundary, "Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"", "Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"), "", o.content);
+					}
+				}
+				if (t.length) {
+					t.push("--" + this.multipartBoundary + "--", "");
+					query = t.join("\r\n");
+				}
+			} while (false);
+			var async = kwArgs["sync"] ? false : true;
+			var preventCache = kwArgs["preventCache"] || (this.preventCache == true && kwArgs["preventCache"] != false);
+			var useCache = kwArgs["useCache"] == true || (this.useCache == true && kwArgs["useCache"] != false);
+			if (!preventCache && useCache) {
+				var cachedHttp = getFromCache(url, query, kwArgs.method);
+				if (cachedHttp) {
+					doLoad(kwArgs, cachedHttp, url, query, false);
+					return;
+				}
 			}
-		}else{
-			var tmpUrl = url;
-			if(query != "") {
-				tmpUrl += (tmpUrl.indexOf("?") > -1 ? "&" : "?") + query;
+			var http = dojo.hostenv.getXmlhttpObject(kwArgs);
+			var received = false;
+			if (async) {
+				var startTime = this.inFlight.push({"req":kwArgs, "http":http, "url":url, "query":query, "useCache":useCache, "startTime":kwArgs.timeoutSeconds ? (new Date()).getTime() : 0});
+				this.startWatchingInFlight();
+			} else {
+				_this._blockAsync = true;
 			}
-			if(preventCache) {
-				tmpUrl += (dojo.string.endsWithAny(tmpUrl, "?", "&")
-					? "" : (tmpUrl.indexOf("?") > -1 ? "&" : "?")) + "dojo.preventCache=" + new Date().valueOf();
+			if (kwArgs.method.toLowerCase() == "post") {
+				if (!kwArgs.user) {
+					http.open("POST", url, async);
+				} else {
+					http.open("POST", url, async, kwArgs.user, kwArgs.password);
+				}
+				setHeaders(http, kwArgs);
+				http.setRequestHeader("Content-Type", kwArgs.multipart ? ("multipart/form-data; boundary=" + this.multipartBoundary) : (kwArgs.contentType || "application/x-www-form-urlencoded"));
+				try {
+					http.send(query);
+				}
+				catch (e) {
+					if (typeof http.abort == "function") {
+						http.abort();
+					}
+					doLoad(kwArgs, {status:404}, url, query, useCache);
+				}
+			} else {
+				var tmpUrl = url;
+				if (query != "") {
+					tmpUrl += (tmpUrl.indexOf("?") > -1 ? "&" : "?") + query;
+				}
+				if (preventCache) {
+					tmpUrl += (dojo.string.endsWithAny(tmpUrl, "?", "&") ? "" : (tmpUrl.indexOf("?") > -1 ? "&" : "?")) + "dojo.preventCache=" + new Date().valueOf();
+				}
+				if (!kwArgs.user) {
+					http.open(kwArgs.method.toUpperCase(), tmpUrl, async);
+				} else {
+					http.open(kwArgs.method.toUpperCase(), tmpUrl, async, kwArgs.user, kwArgs.password);
+				}
+				setHeaders(http, kwArgs);
+				try {
+					http.send(null);
+				}
+				catch (e) {
+					if (typeof http.abort == "function") {
+						http.abort();
+					}
+					doLoad(kwArgs, {status:404}, url, query, useCache);
+				}
 			}
-			if (!kwArgs.user) {
-				http.open(kwArgs.method.toUpperCase(), tmpUrl, async);
-			}else{
-				http.open(kwArgs.method.toUpperCase(), tmpUrl, async, kwArgs.user, kwArgs.password);
+			if (!async) {
+				doLoad(kwArgs, http, url, query, useCache);
+				_this._blockAsync = false;
 			}
-			setHeaders(http, kwArgs);
-			try {
-				http.send(null);
-			}catch(e)	{
-				if(typeof http.abort == "function"){
-					http.abort();
+			kwArgs.abort = function () {
+				try {
+					http._aborted = true;
 				}
-				doLoad(kwArgs, {status: 404}, url, query, useCache);
-			}
-		}
-
-		if( !async ) {
-			doLoad(kwArgs, http, url, query, useCache);
-			_this._blockAsync = false;
-		}
-
-		kwArgs.abort = function(){
-			try{// khtml doesent reset readyState on abort, need this workaround
-				http._aborted = true; 
-			}catch(e){/*squelsh*/}
-			return http.abort();
-		}
-
-		return;
-	}
-	dojo.io.transports.addTransport("XMLHTTPTransport");
+				catch (e) {
+				}
+				return http.abort();
+			};
+			return;
+		};
+		dojo.io.transports.addTransport("XMLHTTPTransport");
+	};
 }
 
-}
+
 __CPAN_FILE__ src/io/common.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -80358,511 +55633,212 @@
 dojo.provide("dojo.io.common");
 dojo.require("dojo.string");
 dojo.require("dojo.lang.extras");
-
-/******************************************************************************
- *	Notes about dojo.io design:
- *	
- *	The dojo.io.* package has the unenviable task of making a lot of different
- *	types of I/O feel natural, despite a universal lack of good (or even
- *	reasonable!) I/O capability in the host environment. So lets pin this down
- *	a little bit further.
- *
- *	Rhino:
- *		perhaps the best situation anywhere. Access to Java classes allows you
- *		to do anything one might want in terms of I/O, both synchronously and
- *		async. Can open TCP sockets and perform low-latency client/server
- *		interactions. HTTP transport is available through Java HTTP client and
- *		server classes. Wish it were always this easy.
- *
- *	xpcshell:
- *		XPCOM for I/O.
- *
- *	spidermonkey:
- *		S.O.L.
- *
- *	Browsers:
- *		Browsers generally do not provide any useable filesystem access. We are
- *		therefore limited to HTTP for moving information to and from Dojo
- *		instances living in a browser.
- *
- *		XMLHTTP:
- *			Sync or async, allows reading of arbitrary text files (including
- *			JS, which can then be eval()'d), writing requires server
- *			cooperation and is limited to HTTP mechanisms (POST and GET).
- *
- *		<iframe> hacks:
- *			iframe document hacks allow browsers to communicate asynchronously
- *			with a server via HTTP POST and GET operations. With significant
- *			effort and server cooperation, low-latency data transit between
- *			client and server can be acheived via iframe mechanisms (repubsub).
- *
- *		SVG:
- *			Adobe's SVG viewer implements helpful primitives for XML-based
- *			requests, but receipt of arbitrary text data seems unlikely w/o
- *			<![CDATA[]]> sections.
- *
- *
- *	A discussion between Dylan, Mark, Tom, and Alex helped to lay down a lot
- *	the IO API interface. A transcript of it can be found at:
- *		http://dojotoolkit.org/viewcvs/viewcvs.py/documents/irc/irc_io_api_log.txt?rev=307&view=auto
- *	
- *	Also referenced in the design of the API was the DOM 3 L&S spec:
- *		http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/load-save.html
- ******************************************************************************/
-
-// a map of the available transport options. Transports should add themselves
-// by calling add(name)
 dojo.io.transports = [];
-dojo.io.hdlrFuncNames = [ "load", "error", "timeout" ]; // we're omitting a progress() event for now
-
-dojo.io.Request = function(/*String*/ url, /*String*/ mimetype, /*String*/ transport, /*String or Boolean*/ changeUrl){
-// summary:
-//		Constructs a Request object that is used by dojo.io.bind().
-// description:
-//		dojo.io.bind() will create one of these for you if
-//		you call dojo.io.bind() with an plain object containing the bind parameters.
-//		This method can either take the arguments specified, or an Object containing all of the parameters that you
-//		want to use to create the dojo.io.Request (similar to how dojo.io.bind() is called.
-//		The named parameters to this constructor represent the minimum set of parameters need
-	if((arguments.length == 1)&&(arguments[0].constructor == Object)){
+dojo.io.hdlrFuncNames = ["load", "error", "timeout"];
+dojo.io.Request = function (url, mimetype, transport, changeUrl) {
+	if ((arguments.length == 1) && (arguments[0].constructor == Object)) {
 		this.fromKwArgs(arguments[0]);
-	}else{
+	} else {
 		this.url = url;
-		if(mimetype){ this.mimetype = mimetype; }
-		if(transport){ this.transport = transport; }
-		if(arguments.length >= 4){ this.changeUrl = changeUrl; }
+		if (mimetype) {
+			this.mimetype = mimetype;
+		}
+		if (transport) {
+			this.transport = transport;
+		}
+		if (arguments.length >= 4) {
+			this.changeUrl = changeUrl;
+		}
 	}
-}
-
-dojo.lang.extend(dojo.io.Request, {
-
-	/** The URL to hit */
-	url: "",
-	
-	/** The mime type used to interrpret the response body */
-	mimetype: "text/plain",
-	
-	/** The HTTP method to use */
-	method: "GET",
-	
-	/** An Object containing key-value pairs to be included with the request */
-	content: undefined, // Object
-	
-	/** The transport medium to use */
-	transport: undefined, // String
-	
-	/** If defined the URL of the page is physically changed */
-	changeUrl: undefined, // String
-	
-	/** A form node to use in the request */
-	formNode: undefined, // HTMLFormElement
-	
-	/** Whether the request should be made synchronously */
-	sync: false,
-	
-	bindSuccess: false,
-
-	/** Cache/look for the request in the cache before attempting to request?
-	 *  NOTE: this isn't a browser cache, this is internal and would only cache in-page
-	 */
-	useCache: false,
-
-	/** Prevent the browser from caching this by adding a query string argument to the URL */
-	preventCache: false,
-	
-	// events stuff
-	load: function(/*String*/type, /*Object*/data, /*Object*/transportImplementation, /*Object*/kwArgs){
-		// summary:
-		//		Called on successful completion of a bind.
-		//		type: String
-		//				A string with value "load"
-		//		data: Object
-		//				The object representing the result of the bind. The actual structure
-		//				of the data object will depend on the mimetype that was given to bind
-		//				in the bind arguments.
-		//		transportImplementation: Object
-		//				The object that implements a particular transport. Structure is depedent
-		//				on the transport. For XMLHTTPTransport (dojo.io.BrowserIO), it will be the
-		//				XMLHttpRequest object from the browser.
-		//		kwArgs: Object
-		//				Object that contains the request parameters that were given to the
-		//				bind call. Useful for storing and retrieving state from when bind
-		//				was called.
-	},
-	error: function(/*String*/type, /*Object*/error, /*Object*/transportImplementation, /*Object*/kwArgs){
-		// summary:
-		//		Called when there is an error with a bind.
-		//		type: String
-		//				A string with value "error"
-		//		error: Object
-		//				The error object. Should be a dojo.io.Error object, but not guaranteed.
-		//		transportImplementation: Object
-		//				The object that implements a particular transport. Structure is depedent
-		//				on the transport. For XMLHTTPTransport (dojo.io.BrowserIO), it will be the
-		//				XMLHttpRequest object from the browser.
-		//		kwArgs: Object
-		//				Object that contains the request parameters that were given to the
-		//				bind call. Useful for storing and retrieving state from when bind
-		//				was called.
-	},
-	timeout: function(/*String*/type, /*Object*/empty, /*Object*/transportImplementation, /*Object*/kwArgs){
-		// summary:
-		//		Called when there is an error with a bind. Only implemented in certain transports at this time.
-		//		type: String
-		//				A string with value "timeout"
-		//		empty: Object
-		//				Should be null. Just a spacer argument so that load, error, timeout and handle have the
-		//				same signatures.
-		//		transportImplementation: Object
-		//				The object that implements a particular transport. Structure is depedent
-		//				on the transport. For XMLHTTPTransport (dojo.io.BrowserIO), it will be the
-		//				XMLHttpRequest object from the browser. May be null for the timeout case for
-		//				some transports.
-		//		kwArgs: Object
-		//				Object that contains the request parameters that were given to the
-		//				bind call. Useful for storing and retrieving state from when bind
-		//				was called.
-	},
-	handle: function(/*String*/type, /*Object*/data, /*Object*/transportImplementation, /*Object*/kwArgs){
-		// summary:
-		//		The handle method can be defined instead of defining separate load, error and timeout
-		//		callbacks.
-		//		type: String
-		//				A string with the type of callback: "load", "error", or "timeout".
-		//		data: Object
-		//				See the above callbacks for what this parameter could be.
-		//		transportImplementation: Object
-		//				The object that implements a particular transport. Structure is depedent
-		//				on the transport. For XMLHTTPTransport (dojo.io.BrowserIO), it will be the
-		//				XMLHttpRequest object from the browser.
-		//		kwArgs: Object
-		//				Object that contains the request parameters that were given to the
-		//				bind call. Useful for storing and retrieving state from when bind
-		//				was called.	
-	},
-
-	//FIXME: change IframeIO.js to use timeouts?
-	// The number of seconds to wait until firing a timeout callback.
-	// If it is zero, that means, don't do a timeout check.
-	timeoutSeconds: 0,
-	
-	// the abort method needs to be filled in by the transport that accepts the
-	// bind() request
-	abort: function(){ },
-	
-	// backButton: function(){ },
-	// forwardButton: function(){ },
-
-	fromKwArgs: function(/*Object*/ kwArgs){
-		// summary:
-		//		Creates a dojo.io.Request from a simple object (kwArgs object).
-
-		// normalize args
-		if(kwArgs["url"]){ kwArgs.url = kwArgs.url.toString(); }
-		if(kwArgs["formNode"]) { kwArgs.formNode = dojo.byId(kwArgs.formNode); }
-		if(!kwArgs["method"] && kwArgs["formNode"] && kwArgs["formNode"].method) {
-			kwArgs.method = kwArgs["formNode"].method;
+};
+dojo.lang.extend(dojo.io.Request, {url:"", mimetype:"text/plain", method:"GET", content:undefined, transport:undefined, changeUrl:undefined, formNode:undefined, sync:false, bindSuccess:false, useCache:false, preventCache:false, load:function (type, data, transportImplementation, kwArgs) {
+}, error:function (type, error, transportImplementation, kwArgs) {
+}, timeout:function (type, empty, transportImplementation, kwArgs) {
+}, handle:function (type, data, transportImplementation, kwArgs) {
+}, timeoutSeconds:0, abort:function () {
+}, fromKwArgs:function (kwArgs) {
+	if (kwArgs["url"]) {
+		kwArgs.url = kwArgs.url.toString();
+	}
+	if (kwArgs["formNode"]) {
+		kwArgs.formNode = dojo.byId(kwArgs.formNode);
+	}
+	if (!kwArgs["method"] && kwArgs["formNode"] && kwArgs["formNode"].method) {
+		kwArgs.method = kwArgs["formNode"].method;
+	}
+	if (!kwArgs["handle"] && kwArgs["handler"]) {
+		kwArgs.handle = kwArgs.handler;
+	}
+	if (!kwArgs["load"] && kwArgs["loaded"]) {
+		kwArgs.load = kwArgs.loaded;
+	}
+	if (!kwArgs["changeUrl"] && kwArgs["changeURL"]) {
+		kwArgs.changeUrl = kwArgs.changeURL;
+	}
+	kwArgs.encoding = dojo.lang.firstValued(kwArgs["encoding"], djConfig["bindEncoding"], "");
+	kwArgs.sendTransport = dojo.lang.firstValued(kwArgs["sendTransport"], djConfig["ioSendTransport"], false);
+	var isFunction = dojo.lang.isFunction;
+	for (var x = 0; x < dojo.io.hdlrFuncNames.length; x++) {
+		var fn = dojo.io.hdlrFuncNames[x];
+		if (kwArgs[fn] && isFunction(kwArgs[fn])) {
+			continue;
 		}
-		
-		// backwards compatibility
-		if(!kwArgs["handle"] && kwArgs["handler"]){ kwArgs.handle = kwArgs.handler; }
-		if(!kwArgs["load"] && kwArgs["loaded"]){ kwArgs.load = kwArgs.loaded; }
-		if(!kwArgs["changeUrl"] && kwArgs["changeURL"]) { kwArgs.changeUrl = kwArgs.changeURL; }
-
-		// encoding fun!
-		kwArgs.encoding = dojo.lang.firstValued(kwArgs["encoding"], djConfig["bindEncoding"], "");
-
-		kwArgs.sendTransport = dojo.lang.firstValued(kwArgs["sendTransport"], djConfig["ioSendTransport"], false);
-
-		var isFunction = dojo.lang.isFunction;
-		for(var x=0; x<dojo.io.hdlrFuncNames.length; x++){
-			var fn = dojo.io.hdlrFuncNames[x];
-			if(kwArgs[fn] && isFunction(kwArgs[fn])){ continue; }
-			if(kwArgs["handle"] && isFunction(kwArgs["handle"])){
-				kwArgs[fn] = kwArgs.handle;
-			}
-			// handler is aliased above, shouldn't need this check
-			/* else if(dojo.lang.isObject(kwArgs.handler)){
-				if(isFunction(kwArgs.handler[fn])){
-					kwArgs[fn] = kwArgs.handler[fn]||kwArgs.handler["handle"]||function(){};
-				}
-			}*/
+		if (kwArgs["handle"] && isFunction(kwArgs["handle"])) {
+			kwArgs[fn] = kwArgs.handle;
 		}
-		dojo.lang.mixin(this, kwArgs);
 	}
-
-});
-
-dojo.io.Error = function(/*String*/ msg, /*String*/ type, /*Number*/num){
-	// summary:
-	//		Constructs an object representing a bind error.
+	dojo.lang.mixin(this, kwArgs);
+}});
+dojo.io.Error = function (msg, type, num) {
 	this.message = msg;
-	this.type =  type || "unknown"; // must be one of "io", "parse", "unknown"
-	this.number = num || 0; // per-substrate error number, not normalized
-}
-
-dojo.io.transports.addTransport = function(/*String*/name){
-	// summary:
-	//		Used to register transports that can support bind calls.
+	this.type = type || "unknown";
+	this.number = num || 0;
+};
+dojo.io.transports.addTransport = function (name) {
 	this.push(name);
-	// FIXME: do we need to handle things that aren't direct children of the
-	// dojo.io module? (say, dojo.io.foo.fooTransport?)
 	this[name] = dojo.io[name];
-}
-
-// binding interface, the various implementations register their capabilities
-// and the bind() method dispatches
-dojo.io.bind = function(/*dojo.io.Request or Object*/request){
-	// summary:
-	//		Binding interface for IO. Loading different IO transports, like
-	//		dojo.io.BrowserIO or dojo.io.IframeIO, will register with bind
-	//		to handle particular types of bind calls.
-	//		request: Object
-	//				Object containing bind arguments. This object is converted to
-	//				a dojo.io.Request object, and that request object is the return
-	//				value for this method.
-	if(!(request instanceof dojo.io.Request)){
-		try{
+};
+dojo.io.bind = function (request) {
+	if (!(request instanceof dojo.io.Request)) {
+		try {
 			request = new dojo.io.Request(request);
-		}catch(e){ dojo.debug(e); }
+		}
+		catch (e) {
+			dojo.debug(e);
+		}
 	}
-
-	// if the request asks for a particular implementation, use it
 	var tsName = "";
-	if(request["transport"]){
+	if (request["transport"]) {
 		tsName = request["transport"];
-		if(!this[tsName]){
-			dojo.io.sendBindError(request, "No dojo.io.bind() transport with name '"
-				+ request["transport"] + "'.");
-			return request; //dojo.io.Request
+		if (!this[tsName]) {
+			dojo.io.sendBindError(request, "No dojo.io.bind() transport with name '" + request["transport"] + "'.");
+			return request;
 		}
-		if(!this[tsName].canHandle(request)){
-			dojo.io.sendBindError(request, "dojo.io.bind() transport with name '"
-				+ request["transport"] + "' cannot handle this type of request.");
-			return request;	//dojo.io.Request
+		if (!this[tsName].canHandle(request)) {
+			dojo.io.sendBindError(request, "dojo.io.bind() transport with name '" + request["transport"] + "' cannot handle this type of request.");
+			return request;
 		}
-	}else{
-		// otherwise we do our best to auto-detect what available transports
-		// will handle 
-		for(var x=0; x<dojo.io.transports.length; x++){
+	} else {
+		for (var x = 0; x < dojo.io.transports.length; x++) {
 			var tmp = dojo.io.transports[x];
-			if((this[tmp])&&(this[tmp].canHandle(request))){
+			if ((this[tmp]) && (this[tmp].canHandle(request))) {
 				tsName = tmp;
 				break;
 			}
 		}
-		if(tsName == ""){
-			dojo.io.sendBindError(request, "None of the loaded transports for dojo.io.bind()"
-				+ " can handle the request.");
-			return request; //dojo.io.Request
+		if (tsName == "") {
+			dojo.io.sendBindError(request, "None of the loaded transports for dojo.io.bind()" + " can handle the request.");
+			return request;
 		}
 	}
 	this[tsName].bind(request);
 	request.bindSuccess = true;
-	return request; //dojo.io.Request
-}
-
-dojo.io.sendBindError = function(/* Object */request, /* String */message){
-	// summary:
-	//		Used internally by dojo.io.bind() to return/raise a bind error.
-
-	//Need to be careful since not all hostenvs support setTimeout.
-	if((typeof request.error == "function" || typeof request.handle == "function")
-		&& (typeof setTimeout == "function" || typeof setTimeout == "object")){
+	return request;
+};
+dojo.io.sendBindError = function (request, message) {
+	if ((typeof request.error == "function" || typeof request.handle == "function") && (typeof setTimeout == "function" || typeof setTimeout == "object")) {
 		var errorObject = new dojo.io.Error(message);
-		setTimeout(function(){
+		setTimeout(function () {
 			request[(typeof request.error == "function") ? "error" : "handle"]("error", errorObject, null, request);
 		}, 50);
-	}else{
+	} else {
 		dojo.raise(message);
 	}
-}
-
-dojo.io.queueBind = function(/*dojo.io.Request or Object*/request){
-	// summary:
-	//		queueBind will use dojo.io.bind() but guarantee that only one bind
-	//		call is handled at a time.
-	// description:
-	//		If queueBind is called while a bind call
-	//		is in process, it will queue up the other calls to bind and call them
-	//		in order as bind calls complete.
-	//		request: Object
-	//			Same sort of request object as used for dojo.io.bind().
-	if(!(request instanceof dojo.io.Request)){
-		try{
+};
+dojo.io.queueBind = function (request) {
+	if (!(request instanceof dojo.io.Request)) {
+		try {
 			request = new dojo.io.Request(request);
-		}catch(e){ dojo.debug(e); }
+		}
+		catch (e) {
+			dojo.debug(e);
+		}
 	}
-
-	// make sure we get called if/when we get a response
 	var oldLoad = request.load;
-	request.load = function(){
+	request.load = function () {
 		dojo.io._queueBindInFlight = false;
 		var ret = oldLoad.apply(this, arguments);
 		dojo.io._dispatchNextQueueBind();
 		return ret;
-	}
-
+	};
 	var oldErr = request.error;
-	request.error = function(){
+	request.error = function () {
 		dojo.io._queueBindInFlight = false;
 		var ret = oldErr.apply(this, arguments);
 		dojo.io._dispatchNextQueueBind();
 		return ret;
-	}
-
+	};
 	dojo.io._bindQueue.push(request);
 	dojo.io._dispatchNextQueueBind();
-	return request; //dojo.io.Request
-}
-
-dojo.io._dispatchNextQueueBind = function(){
-	// summary:
-	//	Private method used by dojo.io.queueBind().
-	if(!dojo.io._queueBindInFlight){
+	return request;
+};
+dojo.io._dispatchNextQueueBind = function () {
+	if (!dojo.io._queueBindInFlight) {
 		dojo.io._queueBindInFlight = true;
-		if(dojo.io._bindQueue.length > 0){
+		if (dojo.io._bindQueue.length > 0) {
 			dojo.io.bind(dojo.io._bindQueue.shift());
-		}else{
+		} else {
 			dojo.io._queueBindInFlight = false;
 		}
 	}
-}
+};
 dojo.io._bindQueue = [];
 dojo.io._queueBindInFlight = false;
-
-dojo.io.argsFromMap = function(/*Object*/map, /*String?*/encoding, /*String?*/last){
-	// summary:
-	//		Converts name/values pairs in the map object to an URL-encoded string
-	//		with format of name1=value1&name2=value2...
-	//		map: Object
-	//			Object that has the contains the names and values.
-	//		encoding: String?
-	//			String to specify how to encode the name and value. If the encoding string
-	//			contains "utf" (case-insensitive), then encodeURIComponent is used. Otherwise
-	//			dojo.string.encodeAscii is used.
-	//		last: String?
-	//			The last parameter in the list. Helps with final string formatting?
-	var enc = /utf/i.test(encoding||"") ? encodeURIComponent : dojo.string.encodeAscii;
+dojo.io.argsFromMap = function (map, encoding, last) {
+	var enc = /utf/i.test(encoding || "") ? encodeURIComponent : dojo.string.encodeAscii;
 	var mapped = [];
 	var control = new Object();
-	for(var name in map){
-		var domap = function(elt){
-			var val = enc(name)+"="+enc(elt);
+	for (var name in map) {
+		var domap = function (elt) {
+			var val = enc(name) + "=" + enc(elt);
 			mapped[(last == name) ? "push" : "unshift"](val);
-		}
-		if(!control[name]){
+		};
+		if (!control[name]) {
 			var value = map[name];
-			// FIXME: should be isArrayLike?
-			if (dojo.lang.isArray(value)){
+			if (dojo.lang.isArray(value)) {
 				dojo.lang.forEach(value, domap);
-			}else{
+			} else {
 				domap(value);
 			}
 		}
 	}
-	return mapped.join("&"); //String
-}
-
-dojo.io.setIFrameSrc = function(/*DOMNode*/ iframe, /*String*/ src, /*Boolean*/ replace){
-	//summary:
-	//		Sets the URL that is loaded in an IFrame. The replace parameter indicates whether
-	//		location.replace() should be used when changing the location of the iframe.
-	try{
+	return mapped.join("&");
+};
+dojo.io.setIFrameSrc = function (iframe, src, replace) {
+	try {
 		var r = dojo.render.html;
-		// dojo.debug(iframe);
-		if(!replace){
-			if(r.safari){
+		if (!replace) {
+			if (r.safari) {
 				iframe.location = src;
-			}else{
+			} else {
 				frames[iframe.name].location = src;
 			}
-		}else{
-			// Fun with DOM 0 incompatibilities!
+		} else {
 			var idoc;
-			if(r.ie){
+			if (r.ie) {
 				idoc = iframe.contentWindow.document;
-			}else if(r.safari){
-				idoc = iframe.document;
-			}else{ //  if(r.moz){
-				idoc = iframe.contentWindow;
+			} else {
+				if (r.safari) {
+					idoc = iframe.document;
+				} else {
+					idoc = iframe.contentWindow;
+				}
 			}
-
-			//For Safari (at least 2.0.3) and Opera, if the iframe
-			//has just been created but it doesn't have content
-			//yet, then iframe.document may be null. In that case,
-			//use iframe.location and return.
-			if(!idoc){
+			if (!idoc) {
 				iframe.location = src;
 				return;
-			}else{
+			} else {
 				idoc.location.replace(src);
 			}
 		}
-	}catch(e){ 
-		dojo.debug(e); 
-		dojo.debug("setIFrameSrc: "+e); 
 	}
-}
-
-/*
-dojo.io.sampleTranport = new function(){
-	this.canHandle = function(kwArgs){
-		// canHandle just tells dojo.io.bind() if this is a good transport to
-		// use for the particular type of request.
-		if(	
-			(
-				(kwArgs["mimetype"] == "text/plain") ||
-				(kwArgs["mimetype"] == "text/html") ||
-				(kwArgs["mimetype"] == "text/javascript")
-			)&&(
-				(kwArgs["method"] == "get") ||
-				( (kwArgs["method"] == "post") && (!kwArgs["formNode"]) )
-			)
-		){
-			return true;
-		}
-
-		return false;
+	catch (e) {
+		dojo.debug(e);
+		dojo.debug("setIFrameSrc: " + e);
 	}
+};
 
-	this.bind = function(kwArgs){
-		var hdlrObj = {};
 
-		// set up a handler object
-		for(var x=0; x<dojo.io.hdlrFuncNames.length; x++){
-			var fn = dojo.io.hdlrFuncNames[x];
-			if(typeof kwArgs.handler == "object"){
-				if(typeof kwArgs.handler[fn] == "function"){
-					hdlrObj[fn] = kwArgs.handler[fn]||kwArgs.handler["handle"];
-				}
-			}else if(typeof kwArgs[fn] == "function"){
-				hdlrObj[fn] = kwArgs[fn];
-			}else{
-				hdlrObj[fn] = kwArgs["handle"]||function(){};
-			}
-		}
-
-		// build a handler function that calls back to the handler obj
-		var hdlrFunc = function(evt){
-			if(evt.type == "onload"){
-				hdlrObj.load("load", evt.data, evt);
-			}else if(evt.type == "onerr"){
-				var errObj = new dojo.io.Error("sampleTransport Error: "+evt.msg);
-				hdlrObj.error("error", errObj);
-			}
-		}
-
-		// the sample transport would attach the hdlrFunc() when sending the
-		// request down the pipe at this point
-		var tgtURL = kwArgs.url+"?"+dojo.io.argsFromMap(kwArgs.content);
-		// sampleTransport.sendRequest(tgtURL, hdlrFunc);
-	}
-
-	dojo.io.transports.addTransport("sampleTranport");
-}
-*/
-
 __CPAN_FILE__ src/io/cometd.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -80874,43 +55850,24 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.require("dojo.io.common"); // io/common.js provides setIFrameSrc and the IO module
+dojo.require("dojo.io.common");
 dojo.provide("dojo.io.cometd");
 dojo.require("dojo.AdapterRegistry");
 dojo.require("dojo.json");
-dojo.require("dojo.io.BrowserIO"); // we need XHR for the handshake, etc.
-// FIXME: determine if we can use XMLHTTP to make x-domain posts despite not
-//        being able to hear back about the result
+dojo.require("dojo.io.BrowserIO");
 dojo.require("dojo.io.IframeIO");
-dojo.require("dojo.io.ScriptSrcIO"); // for x-domain long polling
-dojo.require("dojo.io.cookie"); // for peering
+dojo.require("dojo.io.ScriptSrcIO");
+dojo.require("dojo.io.cookie");
 dojo.require("dojo.event.*");
 dojo.require("dojo.lang.common");
 dojo.require("dojo.lang.func");
-
-/*
- * this file defines Comet protocol client. Actual message transport is
- * deferred to one of several connection type implementations. The default is a
- * forever-frame implementation. A single global object named "cometd" is
- * used to mediate for these connection types in order to provide a stable
- * interface.
- */
-
-// TODO: the auth handling in this file is a *mess*. It should probably live in
-// the cometd object with the ability to mix in or call down to an auth-handler
-// object, the prototypical variant of which is a no-op
-
-cometd = new function(){
-
+cometd = new function () {
 	this.initialized = false;
 	this.connected = false;
-
 	this.connectionTypes = new dojo.AdapterRegistry(true);
-
 	this.version = 0.1;
 	this.minimumVersion = 0.1;
 	this.clientId = null;
-
 	this._isXD = false;
 	this.handshakeReturn = null;
 	this.currentTransport = null;
@@ -80918,67 +55875,36 @@
 	this.lastMessage = null;
 	this.globalTopicChannels = {};
 	this.backlog = [];
-
-	this.tunnelInit = function(childLocation, childDomain){
-		// placeholder
-	}
-
-	this.tunnelCollapse = function(){
+	this.tunnelInit = function (childLocation, childDomain) {
+	};
+	this.tunnelCollapse = function () {
 		dojo.debug("tunnel collapsed!");
-		// placeholder
-	}
-
-	this.init = function(props, root, bargs){
-		// FIXME: if the root isn't from the same host, we should automatically
-		// try to select an XD-capable transport
-		props = props||{};
-		// go ask the short bus server what we can support
+	};
+	this.init = function (props, root, bargs) {
+		props = props || {};
 		props.version = this.version;
 		props.minimumVersion = this.minimumVersion;
 		props.channel = "/meta/handshake";
-		// FIXME: do we just assume that the props knows
-		// everything we care about WRT to auth? Should we be trying to
-		// call back into it for subsequent auth actions? Should we fire
-		// local auth functions to ask for/get auth data?
-
-		// FIXME: what about ScriptSrcIO for x-domain comet?
-		this.url = root||djConfig["cometdRoot"];
-		if(!this.url){
+		this.url = root || djConfig["cometdRoot"];
+		if (!this.url) {
 			dojo.debug("no cometd root specified in djConfig and no root passed");
 			return;
 		}
-		
-		// FIXME: we need to select a way to handle JSONP-style stuff
-		// generically here. We already know if the server is gonna be on
-		// another domain (or can know it), so we should select appropriate
-		// negotiation methods here as well as in final transport type
-		// selection.
-		var bindArgs = {
-			url: this.url,
-			method: "POST",
-			mimetype: "text/json",
-			load: dojo.lang.hitch(this, "finishInit"),
-			content: { "message": dojo.json.serialize([props]) }
-		};
-
-		// borrowed from dojo.uri.Uri in lieu of fixed host and port properties
-        var regexp = "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
-		var r = (""+window.location).match(new RegExp(regexp));
-		if(r[4]){
+		var bindArgs = {url:this.url, method:"POST", mimetype:"text/json", load:dojo.lang.hitch(this, "finishInit"), content:{"message":dojo.json.serialize([props])}};
+		var regexp = "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
+		var r = ("" + window.location).match(new RegExp(regexp));
+		if (r[4]) {
 			var tmp = r[4].split(":");
 			var thisHost = tmp[0];
-			var thisPort = tmp[1]||"80"; // FIXME: match 443
-
+			var thisPort = tmp[1] || "80";
 			r = this.url.match(new RegExp(regexp));
-			if(r[4]){
+			if (r[4]) {
 				tmp = r[4].split(":");
 				var urlHost = tmp[0];
-				var urlPort = tmp[1]||"80";
-				if(	(urlHost != thisHost)||
-					(urlPort != thisPort) ){
+				var urlPort = tmp[1] || "80";
+				if ((urlHost != thisHost) || (urlPort != thisPort)) {
 					dojo.debug(thisHost, urlHost);
 					dojo.debug(thisPort, urlPort);
-
 					this._isXD = true;
 					bindArgs.transport = "ScriptSrcTransport";
 					bindArgs.jsonParamName = "jsonp";
@@ -80986,292 +55912,130 @@
 				}
 			}
 		}
-		if(bargs){
+		if (bargs) {
 			dojo.lang.mixin(bindArgs, bargs);
 		}
 		return dojo.io.bind(bindArgs);
-	}
-
-	this.finishInit = function(type, data, evt, request){
+	};
+	this.finishInit = function (type, data, evt, request) {
 		data = data[0];
 		this.handshakeReturn = data;
-		// pick a transport
-		if(data["authSuccessful"] == false){
+		if (data["authSuccessful"] == false) {
 			dojo.debug("cometd authentication failed");
 			return;
 		}
-		if(data.version < this.minimumVersion){
+		if (data.version < this.minimumVersion) {
 			dojo.debug("cometd protocol version mismatch. We wanted", this.minimumVersion, "but got", data.version);
 			return;
 		}
-		this.currentTransport = this.connectionTypes.match(
-			data.supportedConnectionTypes,
-			data.version,
-			this._isXD
-		);
+		this.currentTransport = this.connectionTypes.match(data.supportedConnectionTypes, data.version, this._isXD);
 		this.currentTransport.version = data.version;
 		this.clientId = data.clientId;
 		this.tunnelInit = dojo.lang.hitch(this.currentTransport, "tunnelInit");
 		this.tunnelCollapse = dojo.lang.hitch(this.currentTransport, "tunnelCollapse");
 		this.initialized = true;
 		this.currentTransport.startup(data);
-		while(this.backlog.length != 0){
+		while (this.backlog.length != 0) {
 			var cur = this.backlog.shift();
 			var fn = cur.shift();
 			this[fn].apply(this, cur);
 		}
-	}
-
-	this._getRandStr = function(){
+	};
+	this._getRandStr = function () {
 		return Math.random().toString().substring(2, 10);
-	}
-
-	// public API functions called by cometd or by the transport classes
-	this.deliver = function(messages){
+	};
+	this.deliver = function (messages) {
 		dojo.lang.forEach(messages, this._deliver, this);
-	}
-
-	this._deliver = function(message){
-		// dipatch events along the specified path
-		if(!message["channel"]){
+	};
+	this._deliver = function (message) {
+		if (!message["channel"]) {
 			dojo.debug("cometd error: no channel for message!");
 			return;
 		}
-		if(!this.currentTransport){
+		if (!this.currentTransport) {
 			this.backlog.push(["deliver", message]);
 			return;
 		}
 		this.lastMessage = message;
-		// check to see if we got a /meta channel message that we care about
-		if(	(message.channel.length > 5)&&
-			(message.channel.substr(0, 5) == "/meta")){
-			// check for various meta topic actions that we need to respond to
-			switch(message.channel){
-				case "/meta/subscribe":
-					if(!message.successful){
-						dojo.debug("cometd subscription error for channel", message.channel, ":", message.error);
-						return;
-					}
-					this.subscribed(message.subscription, message);
-					break;
-				case "/meta/unsubscribe":
-					if(!message.successful){
-						dojo.debug("cometd unsubscription error for channel", message.channel, ":", message.error);
-						return;
-					}
-					this.unsubscribed(message.subscription, message);
-					break;
+		if ((message.channel.length > 5) && (message.channel.substr(0, 5) == "/meta")) {
+			switch (message.channel) {
+			  case "/meta/subscribe":
+				if (!message.successful) {
+					dojo.debug("cometd subscription error for channel", message.channel, ":", message.error);
+					return;
+				}
+				this.subscribed(message.subscription, message);
+				break;
+			  case "/meta/unsubscribe":
+				if (!message.successful) {
+					dojo.debug("cometd unsubscription error for channel", message.channel, ":", message.error);
+					return;
+				}
+				this.unsubscribed(message.subscription, message);
+				break;
 			}
 		}
-		// send the message down for processing by the transport
 		this.currentTransport.deliver(message);
-
-		// dispatch the message to any locally subscribed listeners
-		var tname = (this.globalTopicChannels[message.channel]) ? message.channel : "/cometd"+message.channel;
-		dojo.event.topic.publish(tname, message);
-	}
-
-	this.disconnect = function(){
-		if(!this.currentTransport){
+		if (message.data) {
+			var tname = (this.globalTopicChannels[message.channel]) ? message.channel : "/cometd" + message.channel;
+			dojo.event.topic.publish(tname, message);
+		}
+	};
+	this.disconnect = function () {
+		if (!this.currentTransport) {
 			dojo.debug("no current transport to disconnect from");
 			return;
 		}
 		this.currentTransport.disconnect();
-	}
-
-	// public API functions called by end users
-	this.publish = function(/*string*/channel, /*object*/data, /*object*/properties){
-		// summary: 
-		//		publishes the passed message to the cometd server for delivery
-		//		on the specified topic
-		// channel:
-		//		the destination channel for the message
-		// data:
-		//		a JSON object containing the message "payload"
-		// properties:
-		//		Optional. Other meta-data to be mixed into the top-level of the
-		//		message
-		if(!this.currentTransport){
+	};
+	this.publish = function (channel, data, properties) {
+		if (!this.currentTransport) {
 			this.backlog.push(["publish", channel, data, properties]);
 			return;
 		}
-		var message = {
-			data: data,
-			channel: channel
-		};
-		if(properties){
+		var message = {data:data, channel:channel};
+		if (properties) {
 			dojo.lang.mixin(message, properties);
 		}
 		return this.currentTransport.sendMessage(message);
-	}
-
-	this.subscribe = function(	/*string*/				channel, 
-								/*boolean, optional*/	useLocalTopics, 
-								/*object, optional*/	objOrFunc, 
-								/*string, optional*/	funcName){ // return: boolean
-		// summary:
-		//		inform the server of this client's interest in channel
-		// channel:
-		//		name of the cometd channel to subscribe to
-		// useLocalTopics:
-		//		Determines if up a local event topic subscription to the passed
-		//		function using the channel name that was passed is constructed,
-		//		or if the topic name will be prefixed with some other
-		//		identifier for local message distribution. Setting this to
-		//		"true" is a good way to hook up server-sent message delivery to
-		//		pre-existing local topics.
-		// objOrFunc:
-		//		an object scope for funcName or the name or reference to a
-		//		function to be called when messages are delivered to the
-		//		channel
-		// funcName:
-		//		the second half of the objOrFunc/funcName pair for identifying
-		//		a callback function to notifiy upon channel message delivery
-		if(!this.currentTransport){
+	};
+	this.subscribe = function (channel, useLocalTopics, objOrFunc, funcName) {
+		if (!this.currentTransport) {
 			this.backlog.push(["subscribe", channel, useLocalTopics, objOrFunc, funcName]);
 			return;
 		}
-		if(objOrFunc){
-			var tname = (useLocalTopics) ? channel : "/cometd"+channel;
-			if(useLocalTopics){
+		if (objOrFunc) {
+			var tname = (useLocalTopics) ? channel : "/cometd" + channel;
+			if (useLocalTopics) {
 				this.globalTopicChannels[channel] = true;
 			}
 			dojo.event.topic.subscribe(tname, objOrFunc, funcName);
 		}
-		// FIXME: would we handle queuing of the subscription if not connected?
-		// Or should the transport object?
-		return this.currentTransport.sendMessage({
-			channel: "/meta/subscribe",
-			subscription: channel
-		});
-	}
-
-	this.subscribed = function(	/*string*/				channel, 
-								/*obj*/					message){
+		return this.currentTransport.sendMessage({channel:"/meta/subscribe", subscription:channel});
+	};
+	this.subscribed = function (channel, message) {
 		dojo.debug(channel);
 		dojo.debugShallow(message);
-	}
-
-	this.unsubscribe = function(/*string*/				channel, 
-								/*boolean, optional*/	useLocalTopics, 
-								/*object, optional*/	objOrFunc, 
-								/*string, optional*/	funcName){ // return: boolean
-		// summary:
-		//		inform the server of this client's disinterest in channel
-		// channel:
-		//		name of the cometd channel to subscribe to
-		// useLocalTopics:
-		//		Determines if up a local event topic subscription to the passed
-		//		function using the channel name that was passed is destroyed,
-		//		or if the topic name will be prefixed with some other
-		//		identifier for stopping message distribution.
-		// objOrFunc:
-		//		an object scope for funcName or the name or reference to a
-		//		function to be called when messages are delivered to the
-		//		channel
-		// funcName:
-		//		the second half of the objOrFunc/funcName pair for identifying
-		if(!this.currentTransport){
+	};
+	this.unsubscribe = function (channel, useLocalTopics, objOrFunc, funcName) {
+		if (!this.currentTransport) {
 			this.backlog.push(["unsubscribe", channel, useLocalTopics, objOrFunc, funcName]);
 			return;
 		}
-		//		a callback function to notifiy upon channel message delivery
-		if(objOrFunc){
-			// FIXME: should actual local topic unsubscription be delayed for
-			// successful unsubcribe notices from the other end? (guessing "no")
-			// FIXME: if useLocalTopics is false, should we go ahead and
-			// destroy the local topic?
-			var tname = (useLocalTopics) ? channel : "/cometd"+channel;
+		if (objOrFunc) {
+			var tname = (useLocalTopics) ? channel : "/cometd" + channel;
 			dojo.event.topic.unsubscribe(tname, objOrFunc, funcName);
 		}
-		return this.currentTransport.sendMessage({
-			channel: "/meta/unsubscribe",
-			subscription: channel
-		});
-	}
-
-	this.unsubscribed = function(/*string*/				channel, 
-								/*obj*/					message){
+		return this.currentTransport.sendMessage({channel:"/meta/unsubscribe", subscription:channel});
+	};
+	this.unsubscribed = function (channel, message) {
 		dojo.debug(channel);
 		dojo.debugShallow(message);
-	}
-
-	// FIXME: add an "addPublisher" function
-
-}
-
-/*
-transport objects MUST expose the following methods:
-	- check
-	- startup
-	- sendMessage
-	- deliver
-	- disconnect
-optional, standard but transport dependent methods are:
-	- tunnelCollapse
-	- tunnelInit
-
-Transports SHOULD be namespaced under the cometd object and transports MUST
-register themselves with cometd.connectionTypes
-
-here's a stub transport defintion:
-
-cometd.blahTransport = new function(){
+	};
+};
+cometd.iframeTransport = new function () {
 	this.connected = false;
 	this.connectionId = null;
-	this.authToken = null;
-	this.lastTimestamp = null;
-	this.lastId = null;
-
-	this.check = function(types, version, xdomain){
-		// summary:
-		//		determines whether or not this transport is suitable given a
-		//		list of transport types that the server supports
-		return dojo.lang.inArray(types, "blah");
-	}
-
-	this.startup = function(){
-		if(this.connected){ return; }
-		// FIXME: fill in startup routine here
-		this.connected = true;
-	}
-
-	this.sendMessage = function(message){
-		// FIXME: fill in message sending logic
-	}
-
-	this.deliver = function(message){
-		if(message["timestamp"]){
-			this.lastTimestamp = message.timestamp;
-		}
-		if(message["id"]){
-			this.lastId = message.id;
-		}
-		if(	(message.channel.length > 5)&&
-			(message.channel.substr(0, 5) == "/meta")){
-			// check for various meta topic actions that we need to respond to
-			// switch(message.channel){
-			// 	case "/meta/connect":
-			//		// FIXME: fill in logic here
-			//		break;
-			//	// case ...: ...
-			//	}
-		}
-	}
-
-	this.disconnect = function(){
-		if(!this.connected){ return; }
-		// FIXME: fill in shutdown routine here
-		this.connected = false;
-	}
-}
-cometd.connectionTypes.register("blah", cometd.blahTransport.check, cometd.blahTransport);
-*/
-
-cometd.iframeTransport = new function(){
-	this.connected = false;
-	this.connectionId = null;
-
 	this.rcvNode = null;
 	this.rcvNodeName = "";
 	this.phonyForm = null;
@@ -81279,131 +56043,91 @@
 	this.lastTimestamp = null;
 	this.lastId = null;
 	this.backlog = [];
-
-	this.check = function(types, version, xdomain){
-		return ((!xdomain)&&
-				(!dojo.render.html.safari)&&
-				(dojo.lang.inArray(types, "iframe")));
-	}
-
-	this.tunnelInit = function(){
-		// we've gotten our initialization document back in the iframe, so
-		// now open up a connection and start passing data!
-		this.postToIframe({
-			message: dojo.json.serialize([
-				{
-					channel:	"/meta/connect",
-					clientId:	cometd.clientId,
-					connectionType: "iframe"
-					// FIXME: auth not passed here!
-					// "authToken": this.authToken
-				}
-			])
-		});
-	}
-
-	this.tunnelCollapse = function(){
-		if(this.connected){
-			// try to restart the tunnel
+	this.check = function (types, version, xdomain) {
+		return ((!xdomain) && (!dojo.render.html.safari) && (dojo.lang.inArray(types, "iframe")));
+	};
+	this.tunnelInit = function () {
+		this.postToIframe({message:dojo.json.serialize([{channel:"/meta/connect", clientId:cometd.clientId, connectionType:"iframe"}])});
+	};
+	this.tunnelCollapse = function () {
+		if (this.connected) {
 			this.connected = false;
-
-			this.postToIframe({
-				message: dojo.json.serialize([
-					{
-						channel:	"/meta/reconnect",
-						clientId:	cometd.clientId,
-						connectionId:	this.connectionId,
-						timestamp:	this.lastTimestamp,
-						id:			this.lastId
-						// FIXME: no authToken provision!
-					}
-				])
-			});
+			this.postToIframe({message:dojo.json.serialize([{channel:"/meta/reconnect", clientId:cometd.clientId, connectionId:this.connectionId, timestamp:this.lastTimestamp, id:this.lastId}])});
 		}
-	}
-
-	this.deliver = function(message){
-		// handle delivery details that this transport particularly cares
-		// about. Most functions of should be handled by the main cometd object
-		// with only transport-specific details and state being tracked here.
-		if(message["timestamp"]){
+	};
+	this.deliver = function (message) {
+		if (message["timestamp"]) {
 			this.lastTimestamp = message.timestamp;
 		}
-		if(message["id"]){
+		if (message["id"]) {
 			this.lastId = message.id;
 		}
-		// check to see if we got a /meta channel message that we care about
-		if(	(message.channel.length > 5)&&
-			(message.channel.substr(0, 5) == "/meta")){
-			// check for various meta topic actions that we need to respond to
-			switch(message.channel){
-				case "/meta/connect":
-					if(!message.successful){
-						dojo.debug("cometd connection error:", message.error);
-						return;
-					}
-					this.connectionId = message.connectionId;
-					this.connected = true;
-					this.processBacklog();
-					break;
-				case "/meta/reconnect":
-					if(!message.successful){
-						dojo.debug("cometd reconnection error:", message.error);
-						return;
-					}
-					this.connected = true;
-					break;
-				case "/meta/subscribe":
-					if(!message.successful){
-						dojo.debug("cometd subscription error for channel", message.channel, ":", message.error);
-						return;
-					}
-					// this.subscribed(message.channel);
-					dojo.debug(message.channel);
-					break;
+		if ((message.channel.length > 5) && (message.channel.substr(0, 5) == "/meta")) {
+			switch (message.channel) {
+			  case "/meta/connect":
+				if (!message.successful) {
+					dojo.debug("cometd connection error:", message.error);
+					return;
+				}
+				this.connectionId = message.connectionId;
+				this.connected = true;
+				this.processBacklog();
+				break;
+			  case "/meta/reconnect":
+				if (!message.successful) {
+					dojo.debug("cometd reconnection error:", message.error);
+					return;
+				}
+				this.connected = true;
+				break;
+			  case "/meta/subscribe":
+				if (!message.successful) {
+					dojo.debug("cometd subscription error for channel", message.channel, ":", message.error);
+					return;
+				}
+				dojo.debug(message.channel);
+				break;
 			}
 		}
-	}
-
-	this.widenDomain = function(domainStr){
-		// allow us to make reqests to the TLD
-		var cd = domainStr||document.domain;
-		if(cd.indexOf(".")==-1){ return; } // probably file:/// or localhost
+	};
+	this.widenDomain = function (domainStr) {
+		var cd = domainStr || document.domain;
+		if (cd.indexOf(".") == -1) {
+			return;
+		}
 		var dps = cd.split(".");
-		if(dps.length<=2){ return; } // probably file:/// or an RFC 1918 address
-		dps = dps.slice(dps.length-2);
+		if (dps.length <= 2) {
+			return;
+		}
+		dps = dps.slice(dps.length - 2);
 		document.domain = dps.join(".");
 		return document.domain;
-	}
-
-	this.postToIframe = function(content, url){
-		if(!this.phonyForm){
-			if(dojo.render.html.ie){
+	};
+	this.postToIframe = function (content, url) {
+		if (!this.phonyForm) {
+			if (dojo.render.html.ie) {
 				this.phonyForm = document.createElement("<form enctype='application/x-www-form-urlencoded' method='POST' style='display: none;'>");
 				dojo.body().appendChild(this.phonyForm);
-			}else{
+			} else {
 				this.phonyForm = document.createElement("form");
-				this.phonyForm.style.display = "none"; // FIXME: will this still work?
+				this.phonyForm.style.display = "none";
 				dojo.body().appendChild(this.phonyForm);
 				this.phonyForm.enctype = "application/x-www-form-urlencoded";
 				this.phonyForm.method = "POST";
 			}
 		}
-
-		this.phonyForm.action = url||cometd.url;
+		this.phonyForm.action = url || cometd.url;
 		this.phonyForm.target = this.rcvNodeName;
 		this.phonyForm.setAttribute("target", this.rcvNodeName);
-
-		while(this.phonyForm.firstChild){
+		while (this.phonyForm.firstChild) {
 			this.phonyForm.removeChild(this.phonyForm.firstChild);
 		}
-
-		for(var x in content){
+		for (var x in content) {
 			var tn;
-			if(dojo.render.html.ie){
-				tn = document.createElement("<input type='hidden' name='"+x+"' value='"+content[x]+"'>");
+			if (dojo.render.html.ie) {
+				tn = document.createElement("<input type='hidden' name='" + x + "' value='" + content[x] + "'>");
 				this.phonyForm.appendChild(tn);
-			}else{
+			} else {
 				tn = document.createElement("input");
 				this.phonyForm.appendChild(tn);
 				tn.type = "hidden";
@@ -81412,388 +56136,239 @@
 			}
 		}
 		this.phonyForm.submit();
-	}
-
-	this.processBacklog = function(){
-		while(this.backlog.length > 0){
+	};
+	this.processBacklog = function () {
+		while (this.backlog.length > 0) {
 			this.sendMessage(this.backlog.shift(), true);
 		}
-	}
-
-	this.sendMessage = function(message, bypassBacklog){
-		// FIXME: what about auth fields?
-		if((bypassBacklog)||(this.connected)){
+	};
+	this.sendMessage = function (message, bypassBacklog) {
+		if ((bypassBacklog) || (this.connected)) {
 			message.connectionId = this.connectionId;
 			message.clientId = cometd.clientId;
-			var bindArgs = {
-				url: cometd.url||djConfig["cometdRoot"],
-				method: "POST",
-				mimetype: "text/json",
-				// FIXME: we should be able to do better than this given that we're sending an array!
-				content: { message: dojo.json.serialize([ message ]) }
-			};
+			var bindArgs = {url:cometd.url || djConfig["cometdRoot"], method:"POST", mimetype:"text/json", content:{message:dojo.json.serialize([message])}};
 			return dojo.io.bind(bindArgs);
-		}else{
+		} else {
 			this.backlog.push(message);
 		}
-	}
-
-	this.startup = function(handshakeData){
+	};
+	this.startup = function (handshakeData) {
 		dojo.debug("startup!");
 		dojo.debug(dojo.json.serialize(handshakeData));
-
-		if(this.connected){ return; }
-
-		// this.widenDomain();
-
-		// NOTE: we require the server to cooperate by hosting
-		// cometdInit.html at the designated endpoint
-		this.rcvNodeName = "cometdRcv_"+cometd._getRandStr();
-		// the "forever frame" approach
-
-		var initUrl = cometd.url+"/?tunnelInit=iframe"; // &domain="+document.domain;
-		if(false && dojo.render.html.ie){ // FIXME: DISALBED FOR NOW
-			// use the "htmlfile hack" to prevent the background click junk
+		if (this.connected) {
+			return;
+		}
+		this.rcvNodeName = "cometdRcv_" + cometd._getRandStr();
+		var initUrl = cometd.url + "/?tunnelInit=iframe";
+		if (false && dojo.render.html.ie) {
 			this.rcvNode = new ActiveXObject("htmlfile");
 			this.rcvNode.open();
 			this.rcvNode.write("<html>");
-			this.rcvNode.write("<script>document.domain = '"+document.domain+"'");
+			this.rcvNode.write("<script>document.domain = '" + document.domain + "'");
 			this.rcvNode.write("</html>");
 			this.rcvNode.close();
-
 			var ifrDiv = this.rcvNode.createElement("div");
 			this.rcvNode.appendChild(ifrDiv);
 			this.rcvNode.parentWindow.dojo = dojo;
-			ifrDiv.innerHTML = "<iframe src='"+initUrl+"'></iframe>"
-		}else{
+			ifrDiv.innerHTML = "<iframe src='" + initUrl + "'></iframe>";
+		} else {
 			this.rcvNode = dojo.io.createIFrame(this.rcvNodeName, "", initUrl);
-			// dojo.io.setIFrameSrc(this.rcvNode, initUrl);
-			// we're still waiting on the iframe to call back up to use and
-			// advertise that it's been initialized via tunnelInit
 		}
-	}
-}
-
-cometd.mimeReplaceTransport = new function(){
+	};
+};
+cometd.mimeReplaceTransport = new function () {
 	this.connected = false;
 	this.connectionId = null;
 	this.xhr = null;
-
 	this.authToken = null;
 	this.lastTimestamp = null;
 	this.lastId = null;
 	this.backlog = [];
-
-	this.check = function(types, version, xdomain){
-		return ((!xdomain)&&
-				(dojo.render.html.mozilla)&& // seems only Moz really supports this right now = (
-				(dojo.lang.inArray(types, "mime-message-block")));
-	}
-
-	this.tunnelInit = function(){
-		if(this.connected){ return; }
-		// FIXME: open up the connection here
-		this.openTunnelWith({
-			message: dojo.json.serialize([
-				{
-					channel:	"/meta/connect",
-					clientId:	cometd.clientId,
-					connectionType: "mime-message-block"
-					// FIXME: auth not passed here!
-					// "authToken": this.authToken
-				}
-			])
-		});
+	this.check = function (types, version, xdomain) {
+		return ((!xdomain) && (dojo.render.html.mozilla) && (dojo.lang.inArray(types, "mime-message-block")));
+	};
+	this.tunnelInit = function () {
+		if (this.connected) {
+			return;
+		}
+		this.openTunnelWith({message:dojo.json.serialize([{channel:"/meta/connect", clientId:cometd.clientId, connectionType:"mime-message-block"}])});
 		this.connected = true;
-	}
-
-	this.tunnelCollapse = function(){
-		if(this.connected){
-			// try to restart the tunnel
+	};
+	this.tunnelCollapse = function () {
+		if (this.connected) {
 			this.connected = false;
-			this.openTunnelWith({
-				message: dojo.json.serialize([
-					{
-						channel:	"/meta/reconnect",
-						clientId:	cometd.clientId,
-						connectionId:	this.connectionId,
-						timestamp:	this.lastTimestamp,
-						id:			this.lastId
-						// FIXME: no authToken provision!
-					}
-				])
-			});
+			this.openTunnelWith({message:dojo.json.serialize([{channel:"/meta/reconnect", clientId:cometd.clientId, connectionId:this.connectionId, timestamp:this.lastTimestamp, id:this.lastId}])});
 		}
-	}
-
+	};
 	this.deliver = cometd.iframeTransport.deliver;
-	// the logic appears to be the same
-
-	this.handleOnLoad = function(resp){
+	this.handleOnLoad = function (resp) {
 		cometd.deliver(dojo.json.evalJson(this.xhr.responseText));
-	}
-
-	this.openTunnelWith = function(content, url){
-		// set up the XHR object and register the multipart callbacks
+	};
+	this.openTunnelWith = function (content, url) {
 		this.xhr = dojo.hostenv.getXmlhttpObject();
-		this.xhr.multipart = true; // FIXME: do Opera and Safari support this flag?
-		if(dojo.render.html.mozilla){
+		this.xhr.multipart = true;
+		if (dojo.render.html.mozilla) {
 			this.xhr.addEventListener("load", dojo.lang.hitch(this, "handleOnLoad"), false);
-		}else if(dojo.render.html.safari){
-			// Blah. WebKit doesn't actually populate responseText and/or responseXML. Useless.
-			dojo.debug("Webkit is broken with multipart responses over XHR = (");
-			this.xhr.onreadystatechange = dojo.lang.hitch(this, "handleOnLoad");
-		}else{
-			this.xhr.onload = dojo.lang.hitch(this, "handleOnLoad");
+		} else {
+			if (dojo.render.html.safari) {
+				dojo.debug("Webkit is broken with multipart responses over XHR = (");
+				this.xhr.onreadystatechange = dojo.lang.hitch(this, "handleOnLoad");
+			} else {
+				this.xhr.onload = dojo.lang.hitch(this, "handleOnLoad");
+			}
 		}
-		this.xhr.open("POST", (url||cometd.url), true); // async post
+		this.xhr.open("POST", (url || cometd.url), true);
 		this.xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
 		dojo.debug(dojo.json.serialize(content));
 		this.xhr.send(dojo.io.argsFromMap(content, "utf8"));
-	}
-
-	this.processBacklog = function(){
-		while(this.backlog.length > 0){
+	};
+	this.processBacklog = function () {
+		while (this.backlog.length > 0) {
 			this.sendMessage(this.backlog.shift(), true);
 		}
-	}
-
-	this.sendMessage = function(message, bypassBacklog){
-		// FIXME: what about auth fields?
-		if((bypassBacklog)||(this.connected)){
+	};
+	this.sendMessage = function (message, bypassBacklog) {
+		if ((bypassBacklog) || (this.connected)) {
 			message.connectionId = this.connectionId;
 			message.clientId = cometd.clientId;
-			var bindArgs = {
-				url: cometd.url||djConfig["cometdRoot"],
-				method: "POST",
-				mimetype: "text/json",
-				content: { message: dojo.json.serialize([ message ]) }
-			};
+			var bindArgs = {url:cometd.url || djConfig["cometdRoot"], method:"POST", mimetype:"text/json", content:{message:dojo.json.serialize([message])}};
 			return dojo.io.bind(bindArgs);
-		}else{
+		} else {
 			this.backlog.push(message);
 		}
-	}
-
-	this.startup = function(handshakeData){
+	};
+	this.startup = function (handshakeData) {
 		dojo.debugShallow(handshakeData);
-		if(this.connected){ return; }
+		if (this.connected) {
+			return;
+		}
 		this.tunnelInit();
-	}
-}
-
-cometd.longPollTransport = new function(){
+	};
+};
+cometd.longPollTransport = new function () {
 	this.connected = false;
 	this.connectionId = null;
-
 	this.authToken = null;
 	this.lastTimestamp = null;
 	this.lastId = null;
 	this.backlog = [];
-
-	this.check = function(types, version, xdomain){
-		return ((!xdomain)&&(dojo.lang.inArray(types, "long-polling")));
-	}
-
-	this.tunnelInit = function(){
-		if(this.connected){ return; }
-		// FIXME: open up the connection here
-		this.openTunnelWith({
-			message: dojo.json.serialize([
-				{
-					channel:	"/meta/connect",
-					clientId:	cometd.clientId,
-					connectionType: "long-polling"
-					// FIXME: auth not passed here!
-					// "authToken": this.authToken
-				}
-			])
-		});
+	this.check = function (types, version, xdomain) {
+		return ((!xdomain) && (dojo.lang.inArray(types, "long-polling")));
+	};
+	this.tunnelInit = function () {
+		if (this.connected) {
+			return;
+		}
+		this.openTunnelWith({message:dojo.json.serialize([{channel:"/meta/connect", clientId:cometd.clientId, connectionType:"long-polling"}])});
 		this.connected = true;
-	}
-
-	this.tunnelCollapse = function(){
-		if(!this.connected){
-			// try to restart the tunnel
+	};
+	this.tunnelCollapse = function () {
+		if (!this.connected) {
 			this.connected = false;
 			dojo.debug("clientId:", cometd.clientId);
-			this.openTunnelWith({
-				message: dojo.json.serialize([
-					{
-						channel:	"/meta/reconnect",
-						connectionType: "long-polling",
-						clientId:	cometd.clientId,
-						connectionId:	this.connectionId,
-						timestamp:	this.lastTimestamp,
-						id:			this.lastId
-						// FIXME: no authToken provision!
-					}
-				])
-			});
+			this.openTunnelWith({message:dojo.json.serialize([{channel:"/meta/reconnect", connectionType:"long-polling", clientId:cometd.clientId, connectionId:this.connectionId, timestamp:this.lastTimestamp, id:this.lastId}])});
 		}
-	}
-
+	};
 	this.deliver = cometd.iframeTransport.deliver;
-	// the logic appears to be the same
-
-	this.openTunnelWith = function(content, url){
-		dojo.io.bind({
-			url: (url||cometd.url),
-			method: "post",
-			content: content,
-			mimetype: "text/json",
-			load: dojo.lang.hitch(this, function(type, data, evt, args){
-				// dojo.debug(evt.responseText);
-				cometd.deliver(data);
-				this.connected = false;
-				this.tunnelCollapse();
-			}),
-			error: function(){ dojo.debug("tunnel opening failed"); }
-		});
+	this.openTunnelWith = function (content, url) {
+		dojo.io.bind({url:(url || cometd.url), method:"post", content:content, mimetype:"text/json", load:dojo.lang.hitch(this, function (type, data, evt, args) {
+			cometd.deliver(data);
+			this.connected = false;
+			this.tunnelCollapse();
+		}), error:function () {
+			dojo.debug("tunnel opening failed");
+		}});
 		this.connected = true;
-	}
-
-	this.processBacklog = function(){
-		while(this.backlog.length > 0){
+	};
+	this.processBacklog = function () {
+		while (this.backlog.length > 0) {
 			this.sendMessage(this.backlog.shift(), true);
 		}
-	}
-
-	this.sendMessage = function(message, bypassBacklog){
-		// FIXME: what about auth fields?
-		if((bypassBacklog)||(this.connected)){
+	};
+	this.sendMessage = function (message, bypassBacklog) {
+		if ((bypassBacklog) || (this.connected)) {
 			message.connectionId = this.connectionId;
 			message.clientId = cometd.clientId;
-			var bindArgs = {
-				url: cometd.url||djConfig["cometdRoot"],
-				method: "post",
-				mimetype: "text/json",
-				content: { message: dojo.json.serialize([ message ]) }
-			};
+			var bindArgs = {url:cometd.url || djConfig["cometdRoot"], method:"post", mimetype:"text/json", content:{message:dojo.json.serialize([message])}, load:dojo.lang.hitch(this, function (type, data, evt, args) {
+				cometd.deliver(data);
+			})};
 			return dojo.io.bind(bindArgs);
-		}else{
+		} else {
 			this.backlog.push(message);
 		}
-	}
-
-	this.startup = function(handshakeData){
-		if(this.connected){ return; }
+	};
+	this.startup = function (handshakeData) {
+		if (this.connected) {
+			return;
+		}
 		this.tunnelInit();
-	}
-}
-
-cometd.callbackPollTransport = new function(){
+	};
+};
+cometd.callbackPollTransport = new function () {
 	this.connected = false;
 	this.connectionId = null;
-
 	this.authToken = null;
 	this.lastTimestamp = null;
 	this.lastId = null;
 	this.backlog = [];
-
-	this.check = function(types, version, xdomain){
-		// we handle x-domain!
+	this.check = function (types, version, xdomain) {
 		return dojo.lang.inArray(types, "callback-polling");
-	}
-
-	this.tunnelInit = function(){
-		if(this.connected){ return; }
-		// FIXME: open up the connection here
-		this.openTunnelWith({
-			message: dojo.json.serialize([
-				{
-					channel:	"/meta/connect",
-					clientId:	cometd.clientId,
-					connectionType: "callback-polling"
-					// FIXME: auth not passed here!
-					// "authToken": this.authToken
-				}
-			])
-		});
+	};
+	this.tunnelInit = function () {
+		if (this.connected) {
+			return;
+		}
+		this.openTunnelWith({message:dojo.json.serialize([{channel:"/meta/connect", clientId:cometd.clientId, connectionType:"callback-polling"}])});
 		this.connected = true;
-	}
-
-	this.tunnelCollapse = function(){
-		if(!this.connected){
-			// try to restart the tunnel
+	};
+	this.tunnelCollapse = function () {
+		if (!this.connected) {
 			this.connected = false;
-			this.openTunnelWith({
-				message: dojo.json.serialize([
-					{
-						channel:	"/meta/reconnect",
-						connectionType: "long-polling",
-						clientId:	cometd.clientId,
-						connectionId:	this.connectionId,
-						timestamp:	this.lastTimestamp,
-						id:			this.lastId
-						// FIXME: no authToken provision!
-					}
-				])
-			});
+			this.openTunnelWith({message:dojo.json.serialize([{channel:"/meta/reconnect", connectionType:"long-polling", clientId:cometd.clientId, connectionId:this.connectionId, timestamp:this.lastTimestamp, id:this.lastId}])});
 		}
-	}
-
+	};
 	this.deliver = cometd.iframeTransport.deliver;
-	// the logic appears to be the same
-
-	this.openTunnelWith = function(content, url){
-		// create a <script> element to generate the request
-		var req = dojo.io.bind({
-			url: (url||cometd.url),
-			content: content,
-			mimetype: "text/json",
-			transport: "ScriptSrcTransport",
-			jsonParamName: "jsonp",
-			load: dojo.lang.hitch(this, function(type, data, evt, args){
-				dojo.debug(dojo.json.serialize(data));
-				cometd.deliver(data);
-				this.connected = false;
-				this.tunnelCollapse();
-			}),
-			error: function(){ dojo.debug("tunnel opening failed"); }
-		});
+	this.openTunnelWith = function (content, url) {
+		var req = dojo.io.bind({url:(url || cometd.url), content:content, mimetype:"text/json", transport:"ScriptSrcTransport", jsonParamName:"jsonp", load:dojo.lang.hitch(this, function (type, data, evt, args) {
+			cometd.deliver(data);
+			this.connected = false;
+			this.tunnelCollapse();
+		}), error:function () {
+			dojo.debug("tunnel opening failed");
+		}});
 		this.connected = true;
-	}
-
-	this.processBacklog = function(){
-		while(this.backlog.length > 0){
+	};
+	this.processBacklog = function () {
+		while (this.backlog.length > 0) {
 			this.sendMessage(this.backlog.shift(), true);
 		}
-	}
-
-	this.sendMessage = function(message, bypassBacklog){
-		// FIXME: what about auth fields?
-		if((bypassBacklog)||(this.connected)){
+	};
+	this.sendMessage = function (message, bypassBacklog) {
+		if ((bypassBacklog) || (this.connected)) {
 			message.connectionId = this.connectionId;
 			message.clientId = cometd.clientId;
-			var bindArgs = {
-				url: cometd.url||djConfig["cometdRoot"],
-				mimetype: "text/json",
-				transport: "ScriptSrcTransport",
-				jsonParamName: "jsonp",
-				content: { message: dojo.json.serialize([ message ]) }
-			};
+			var bindArgs = {url:cometd.url || djConfig["cometdRoot"], mimetype:"text/json", transport:"ScriptSrcTransport", jsonParamName:"jsonp", content:{message:dojo.json.serialize([message])}, load:dojo.lang.hitch(this, function (type, data, evt, args) {
+				cometd.deliver(data);
+			}), };
 			return dojo.io.bind(bindArgs);
-		}else{
+		} else {
 			this.backlog.push(message);
 		}
-	}
-
-	this.startup = function(handshakeData){
-		if(this.connected){ return; }
+	};
+	this.startup = function (handshakeData) {
+		if (this.connected) {
+			return;
+		}
 		this.tunnelInit();
-	}
-}
-
+	};
+};
 cometd.connectionTypes.register("mime-message-block", cometd.mimeReplaceTransport.check, cometd.mimeReplaceTransport);
 cometd.connectionTypes.register("long-polling", cometd.longPollTransport.check, cometd.longPollTransport);
 cometd.connectionTypes.register("callback-polling", cometd.callbackPollTransport.check, cometd.callbackPollTransport);
 cometd.connectionTypes.register("iframe", cometd.iframeTransport.check, cometd.iframeTransport);
-
-// FIXME: need to implement fallback-polling, IE XML block
-
 dojo.io.cometd = cometd;
 
+
 __CPAN_FILE__ src/io/XhrIframeProxy.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -81806,170 +56381,101 @@
 */
 
 dojo.provide("dojo.io.XhrIframeProxy");
-
 dojo.require("dojo.experimental");
 dojo.experimental("dojo.io.XhrIframeProxy");
-
 dojo.require("dojo.io.IframeIO");
 dojo.require("dojo.dom");
 dojo.require("dojo.uri.Uri");
-
-dojo.io.XhrIframeProxy = {
-	//summary: Object that implements the iframe handling for XMLHttpRequest
-	//IFrame Proxying.
-	//description: Do not use this object directly. See the Dojo Book page
-	//on XMLHttpRequest IFrame Proxying:
-	//http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book75
-	//Usage of XHR IFrame Proxying does not work from local disk in Safari.
-
-	xipClientUrl: djConfig["xipClientUrl"] || dojo.uri.dojoUri("src/io/xip_client.html"),
-
-	_state: {},
-	_stateIdCounter: 0,
-
-	needFrameRecursion: function(){
-		return (true == dojo.render.html.ie70);
-	},
-
-	send: function(facade){		
-		var stateId = "XhrIframeProxy" + (this._stateIdCounter++);
-		facade._stateId = stateId;
-
-
-		var frameUrl = this.xipClientUrl + "#0:init:id=" + stateId + "&server=" 
-			+ encodeURIComponent(facade._ifpServerUrl) + "&fr=false";
-		if(this.needFrameRecursion()){
-			//IE7 hack. Need to load server URL, and have that load the xip_client.html.
-			//Also, this server URL needs to different from the one eventually loaded by xip_client.html
-			//Otherwise, IE7 will not load it. Funky.
-			var fullClientUrl = window.location.href.substring(0, window.location.href.lastIndexOf("/") + 1);
-			fullClientUrl += this.xipClientUrl;
-		
-			var serverUrl = facade._ifpServerUrl
-				+ (facade._ifpServerUrl.indexOf("?") == -1 ? "?" : "&") + "dojo.fr=1";
-
-			frameUrl = serverUrl + "#0:init:id=" + stateId + "&client=" 
-				+ encodeURIComponent(fullClientUrl) + "&fr=" + this.needFrameRecursion(); //fr is for Frame Recursion
+dojo.io.XhrIframeProxy = {xipClientUrl:djConfig["xipClientUrl"] || dojo.uri.moduleUri("dojo.io", "xip_client.html"), _state:{}, _stateIdCounter:0, needFrameRecursion:function () {
+	return (true == dojo.render.html.ie70);
+}, send:function (facade) {
+	var stateId = "XhrIframeProxy" + (this._stateIdCounter++);
+	facade._stateId = stateId;
+	var frameUrl = this.xipClientUrl + "#0:init:id=" + stateId + "&server=" + encodeURIComponent(facade._ifpServerUrl) + "&fr=false";
+	if (this.needFrameRecursion()) {
+		var fullClientUrl = window.location.href;
+		if ((this.xipClientUrl + "").charAt(0) == "/") {
+			var endIndex = fullClientUrl.indexOf("://");
+			endIndex = fullClientUrl.indexOf("/", endIndex + 1);
+			fullClientUrl = fullClientUrl.substring(0, endIndex);
+		} else {
+			fullClientUrl = fullClientUrl.substring(0, fullClientUrl.lastIndexOf("/") + 1);
 		}
-
-		this._state[stateId] = {
-			facade: facade,
-			stateId: stateId,
-			clientFrame: dojo.io.createIFrame(stateId, "", frameUrl)
-		};
-		
-		return stateId;
-	},
-	
-	receive: function(/*String*/stateId, /*String*/urlEncodedData){
-		/* urlEncodedData should have the following params:
-				- responseHeaders
-				- status
-				- statusText
-				- responseText
-		*/
-		//Decode response data.
-		var response = {};
-		var nvPairs = urlEncodedData.split("&");
-		for(var i = 0; i < nvPairs.length; i++){
-			if(nvPairs[i]){
-				var nameValue = nvPairs[i].split("=");
-				response[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
-			}
+		fullClientUrl += this.xipClientUrl;
+		var serverUrl = facade._ifpServerUrl + (facade._ifpServerUrl.indexOf("?") == -1 ? "?" : "&") + "dojo.fr=1";
+		frameUrl = serverUrl + "#0:init:id=" + stateId + "&client=" + encodeURIComponent(fullClientUrl) + "&fr=" + this.needFrameRecursion();
+	}
+	this._state[stateId] = {facade:facade, stateId:stateId, clientFrame:dojo.io.createIFrame(stateId, "", frameUrl)};
+	return stateId;
+}, receive:function (stateId, urlEncodedData) {
+	var response = {};
+	var nvPairs = urlEncodedData.split("&");
+	for (var i = 0; i < nvPairs.length; i++) {
+		if (nvPairs[i]) {
+			var nameValue = nvPairs[i].split("=");
+			response[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
 		}
-
-		//Set data on facade object.
-		var state = this._state[stateId];
-		var facade = state.facade;
-
-		facade._setResponseHeaders(response.responseHeaders);
-		if(response.status == 0 || response.status){
-			facade.status = parseInt(response.status, 10);
+	}
+	var state = this._state[stateId];
+	var facade = state.facade;
+	facade._setResponseHeaders(response.responseHeaders);
+	if (response.status == 0 || response.status) {
+		facade.status = parseInt(response.status, 10);
+	}
+	if (response.statusText) {
+		facade.statusText = response.statusText;
+	}
+	if (response.responseText) {
+		facade.responseText = response.responseText;
+		var contentType = facade.getResponseHeader("Content-Type");
+		if (contentType && (contentType == "application/xml" || contentType == "text/xml")) {
+			facade.responseXML = dojo.dom.createDocumentFromText(response.responseText, contentType);
 		}
-		if(response.statusText){
-			facade.statusText = response.statusText;
-		}
-		if(response.responseText){
-			facade.responseText = response.responseText;
-			
-			//Fix responseXML.
-			var contentType = facade.getResponseHeader("Content-Type");
-			if(contentType && (contentType == "application/xml" || contentType == "text/xml")){
-				facade.responseXML = dojo.dom.createDocumentFromText(response.responseText, contentType);
-			}
-		}
-		facade.readyState = 4;
-		
-		this.destroyState(stateId);
-	},
-
-	clientFrameLoaded: function(/*String*/stateId){
-		var state = this._state[stateId];
-		var facade = state.facade;
-
-		if(this.needFrameRecursion()){
-			var clientWindow = window.open("", state.stateId + "_clientEndPoint");
-		}else{
-			var clientWindow = state.clientFrame.contentWindow;
-		}
-
-		var reqHeaders = [];
-		for(var param in facade._requestHeaders){
-			reqHeaders.push(param + ": " + facade._requestHeaders[param]);
-		}
-		
-		var requestData = {
-			uri: facade._uri
-		};
-		if(reqHeaders.length > 0){
-			requestData.requestHeaders = reqHeaders.join("\r\n");		
-		}
-		if(facade._method){
-			requestData.method = facade._method;
-		}
-		if(facade._bodyData){
-			requestData.data = facade._bodyData;
-		}
-
-		clientWindow.send(dojo.io.argsFromMap(requestData, "utf8"));
-	},
-	
-	destroyState: function(/*String*/stateId){
-		var state = this._state[stateId];
-		if(state){
-			delete this._state[stateId];
-			var parentNode = state.clientFrame.parentNode;
-			parentNode.removeChild(state.clientFrame);
-			state.clientFrame = null;
-			state = null;
-		}
-	},
-
-	createFacade: function(){
-		if(arguments && arguments[0] && arguments[0]["iframeProxyUrl"]){
-			return new dojo.io.XhrIframeFacade(arguments[0]["iframeProxyUrl"]);
-		}else{
-			return dojo.io.XhrIframeProxy.oldGetXmlhttpObject.apply(dojo.hostenv, arguments);
-		}
 	}
-}
-
-//Replace the normal XHR factory with the proxy one.
+	facade.readyState = 4;
+	this.destroyState(stateId);
+}, clientFrameLoaded:function (stateId) {
+	var state = this._state[stateId];
+	var facade = state.facade;
+	if (this.needFrameRecursion()) {
+		var clientWindow = window.open("", state.stateId + "_clientEndPoint");
+	} else {
+		var clientWindow = state.clientFrame.contentWindow;
+	}
+	var reqHeaders = [];
+	for (var param in facade._requestHeaders) {
+		reqHeaders.push(param + ": " + facade._requestHeaders[param]);
+	}
+	var requestData = {uri:facade._uri};
+	if (reqHeaders.length > 0) {
+		requestData.requestHeaders = reqHeaders.join("\r\n");
+	}
+	if (facade._method) {
+		requestData.method = facade._method;
+	}
+	if (facade._bodyData) {
+		requestData.data = facade._bodyData;
+	}
+	clientWindow.send(dojo.io.argsFromMap(requestData, "utf8"));
+}, destroyState:function (stateId) {
+	var state = this._state[stateId];
+	if (state) {
+		delete this._state[stateId];
+		var parentNode = state.clientFrame.parentNode;
+		parentNode.removeChild(state.clientFrame);
+		state.clientFrame = null;
+		state = null;
+	}
+}, createFacade:function () {
+	if (arguments && arguments[0] && arguments[0]["iframeProxyUrl"]) {
+		return new dojo.io.XhrIframeFacade(arguments[0]["iframeProxyUrl"]);
+	} else {
+		return dojo.io.XhrIframeProxy.oldGetXmlhttpObject.apply(dojo.hostenv, arguments);
+	}
+}};
 dojo.io.XhrIframeProxy.oldGetXmlhttpObject = dojo.hostenv.getXmlhttpObject;
 dojo.hostenv.getXmlhttpObject = dojo.io.XhrIframeProxy.createFacade;
-
-/**
-	Using this a reference: http://www.w3.org/TR/XMLHttpRequest/
-
-	Does not implement the onreadystate callback since dojo.io.BrowserIO does
-	not use it.
-*/
-dojo.io.XhrIframeFacade = function(ifpServerUrl){
-	//summary: XMLHttpRequest facade object used by dojo.io.XhrIframeProxy.
-	
-	//description: Do not use this object directly. See the Dojo Book page
-	//on XMLHttpRequest IFrame Proxying:
-	//http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book75
+dojo.io.XhrIframeFacade = function (ifpServerUrl) {
 	this._requestHeaders = {};
 	this._allResponseHeaders = null;
 	this._responseHeaders = {};
@@ -81981,60 +56487,40 @@
 	this.status = null;
 	this.statusText = null;
 	this.readyState = 0;
-	
 	this._ifpServerUrl = ifpServerUrl;
 	this._stateId = null;
-}
-
-dojo.lang.extend(dojo.io.XhrIframeFacade, {
-	//The open method does not properly reset since Dojo does not reuse XHR objects.
-	open: function(/*String*/method, /*String*/uri){
-		this._method = method;
-		this._uri = uri;
-
-		this.readyState = 1;
-	},
-	
-	setRequestHeader: function(/*String*/header, /*String*/value){
-		this._requestHeaders[header] = value;
-	},
-	
-	send: function(/*String*/stringData){
-		this._bodyData = stringData;
-		
-		this._stateId = dojo.io.XhrIframeProxy.send(this);
-		
-		this.readyState = 2;
-	},
-	abort: function(){
-		dojo.io.XhrIframeProxy.destroyState(this._stateId);
-	},
-	
-	getAllResponseHeaders: function(){
-		return this._allResponseHeaders; //String
-	},
-	
-	getResponseHeader: function(/*String*/header){
-		return this._responseHeaders[header]; //String
-	},
-	
-	_setResponseHeaders: function(/*String*/allHeaders){
-		if(allHeaders){
-			this._allResponseHeaders = allHeaders;
-			
-			//Make sure ther are now CR characters in the headers.
-			allHeaders = allHeaders.replace(/\r/g, "");
-			var nvPairs = allHeaders.split("\n");
-			for(var i = 0; i < nvPairs.length; i++){
-				if(nvPairs[i]){
-					var nameValue = nvPairs[i].split(": ");
-					this._responseHeaders[nameValue[0]] = nameValue[1];
-				}
+};
+dojo.lang.extend(dojo.io.XhrIframeFacade, {open:function (method, uri) {
+	this._method = method;
+	this._uri = uri;
+	this.readyState = 1;
+}, setRequestHeader:function (header, value) {
+	this._requestHeaders[header] = value;
+}, send:function (stringData) {
+	this._bodyData = stringData;
+	this._stateId = dojo.io.XhrIframeProxy.send(this);
+	this.readyState = 2;
+}, abort:function () {
+	dojo.io.XhrIframeProxy.destroyState(this._stateId);
+}, getAllResponseHeaders:function () {
+	return this._allResponseHeaders;
+}, getResponseHeader:function (header) {
+	return this._responseHeaders[header];
+}, _setResponseHeaders:function (allHeaders) {
+	if (allHeaders) {
+		this._allResponseHeaders = allHeaders;
+		allHeaders = allHeaders.replace(/\r/g, "");
+		var nvPairs = allHeaders.split("\n");
+		for (var i = 0; i < nvPairs.length; i++) {
+			if (nvPairs[i]) {
+				var nameValue = nvPairs[i].split(": ");
+				this._responseHeaders[nameValue[0]] = nameValue[1];
 			}
 		}
 	}
-});
+}});
 
+
 __CPAN_FILE__ src/io/RhinoIO.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -82047,167 +56533,109 @@
 */
 
 dojo.provide("dojo.io.RhinoIO");
-
 dojo.require("dojo.io.common");
 dojo.require("dojo.lang.func");
 dojo.require("dojo.lang.array");
 dojo.require("dojo.string.extras");
-
-dojo.io.RhinoHTTPTransport = new function(){
-		this.canHandle = function(/*dojo.io.Request*/req){
-			//summary: Tells dojo.io.bind() if this is a good transport to
-			//use for the particular type of request. This type of transport can
-			//only be used inside the Rhino JavaScript engine.
-
-			// We have to limit to text types because Rhino doesnt support 
-			// a W3C dom implementation out of the box.  In the future we 
-			// should provide some kind of hook to inject your own, because
-			// in all my projects I use XML for Script to provide a W3C DOM.
-			if(dojo.lang.find(["text/plain", "text/html", "text/xml", "text/javascript", "text/json", "application/json"],
-				(req.mimetype.toLowerCase() || "")) < 0){
-				return false;
-			}
-			
-			// We only handle http requests!  Unfortunately, because the method is 
-			// protected, I can't directly create a java.net.HttpURLConnection, so
-			// this is the only way to test.
-			if(req.url.substr(0, 7) != "http://"){
-				return false;
-			}
-			
-			return true;
+dojo.io.RhinoHTTPTransport = new function () {
+	this.canHandle = function (req) {
+		if (dojo.lang.find(["text/plain", "text/html", "text/xml", "text/javascript", "text/json", "application/json"], (req.mimetype.toLowerCase() || "")) < 0) {
+			return false;
 		}
-
-		function doLoad(req, conn){
-			var ret;
-			if (req.method.toLowerCase() == "head"){
-				// TODO: return the headers
-			}else{
-				var stream = conn.getContent();
-				var reader = new java.io.BufferedReader(new java.io.InputStreamReader(stream));
-
-				// read line-by-line because why not?
-				var text = "";
-				var line = null;
-				while((line = reader.readLine()) != null){
-					text += line;
+		if (req.url.substr(0, 7) != "http://") {
+			return false;
+		}
+		return true;
+	};
+	function doLoad(req, conn) {
+		var ret;
+		if (req.method.toLowerCase() == "head") {
+		} else {
+			var stream = conn.getContent();
+			var reader = new java.io.BufferedReader(new java.io.InputStreamReader(stream));
+			var text = "";
+			var line = null;
+			while ((line = reader.readLine()) != null) {
+				text += line;
+			}
+			if (req.mimetype == "text/javascript") {
+				try {
+					ret = dj_eval(text);
 				}
-
-				if(req.mimetype == "text/javascript"){
-					try{
-						ret = dj_eval(text);
-					}catch(e){
-						dojo.debug(e);
-						dojo.debug(text);
-						ret = null;
+				catch (e) {
+					dojo.debug(e);
+					dojo.debug(text);
+					ret = null;
+				}
+			} else {
+				if (req.mimetype == "text/json" || req.mimetype == "application/json") {
+					try {
+						ret = dj_eval("(" + text + ")");
 					}
-				}else if(req.mimetype == "text/json" || req.mimetype == "application/json"){
-					try{
-						ret = dj_eval("("+text+")");
-					}catch(e){
+					catch (e) {
 						dojo.debug(e);
 						dojo.debug(text);
 						ret = false;
 					}
-				}else{
+				} else {
 					ret = text;
 				}
 			}
-
-			req.load("load", ret, req);
 		}
-		
-		function connect(req){
-			var content = req.content || {};
-			var query;
-	
-			if (req.sendTransport){
-				content["dojo.transport"] = "rhinohttp";
-			}
-	
-			if(req.postContent){
-				query = req.postContent;
-			}else{
-				query = dojo.io.argsFromMap(content, req.encoding);
-			}
-	
-			var url_text = req.url;
-			if(req.method.toLowerCase() == "get" && query != ""){
-				url_text = url_text + "?" + query;
-			}
-			
-			var url  = new java.net.URL(url_text);
-			var conn = url.openConnection();
-			
-			//
-			// configure the connection
-			//
-			
-			conn.setRequestMethod(req.method.toUpperCase());
-			
-			if(req.headers){
-				for(var header in req.headers){
-					if(header.toLowerCase() == "content-type" && !req.contentType){
-						req.contentType = req.headers[header];
-					}else{
-						conn.setRequestProperty(header, req.headers[header]);
-					}
+		req.load("load", ret, req);
+	}
+	function connect(req) {
+		var content = req.content || {};
+		var query;
+		if (req.sendTransport) {
+			content["dojo.transport"] = "rhinohttp";
+		}
+		if (req.postContent) {
+			query = req.postContent;
+		} else {
+			query = dojo.io.argsFromMap(content, req.encoding);
+		}
+		var url_text = req.url;
+		if (req.method.toLowerCase() == "get" && query != "") {
+			url_text = url_text + "?" + query;
+		}
+		var url = new java.net.URL(url_text);
+		var conn = url.openConnection();
+		conn.setRequestMethod(req.method.toUpperCase());
+		if (req.headers) {
+			for (var header in req.headers) {
+				if (header.toLowerCase() == "content-type" && !req.contentType) {
+					req.contentType = req.headers[header];
+				} else {
+					conn.setRequestProperty(header, req.headers[header]);
 				}
 			}
-			if(req.contentType){
-				conn.setRequestProperty("Content-Type", req.contentType);
-			}
-
-			if(req.method.toLowerCase() == "post"){
-				conn.setDoOutput(true);
-
-				// write the post data
-				var output_stream = conn.getOutputStream();
-				var byte_array = (new java.lang.String(query)).getBytes();
-				output_stream.write(byte_array, 0, byte_array.length);
-			}
-			
-			// do it to it!
-			conn.connect();
-
-			// perform the load
-			doLoad(req, conn);
 		}
-		
-		this.bind = function(req){
-			//summary: function that sends the request to the server.
-
-			//The following are acceptable properties in kwArgs (in addition to the
-			//normal dojo.io.Request object properties).
-			//url: String: URL the server URL to use for the request.
-			//method: String: the HTTP method to use (GET, POST, etc...).
-			//mimetype: Specifies what format the result data should be given to the load/handle callback. Values of
-			//		text/javascript, text/json, and application/json will cause the transport
-			//		to evaluate the response as JavaScript/JSON. Any other mimetype will give back a text
-			//		string.
-			//transport: String: specify "RhinoHTTPTransport" to force the use of this transport.
-			//sync: boolean: if true, then a synchronous XMLHttpRequest call is done,
-			//		if false (the default), then an asynchronous call is used.
-			//headers: Object: The object property names and values will be sent as HTTP request header
-			//		names and values.
-			//encoding: String: The type of encoding to use when dealing with the content kwArgs property.
-			//content: Object: The content object is converted into a name=value&name=value string, by
-			//		using dojo.io.argsFromMap(). The encoding kwArgs property is passed to dojo.io.argsFromMap()
-			//		for use in encoding the names and values. The resulting string is added to the request.
-			//postContent: String: Raw name=value&name=value string to be included as part of the request.
-
-			var async = req["sync"] ? false : true;
-			if (async){
-				setTimeout(dojo.lang.hitch(this, function(){
-					connect(req);
-				}), 1);
-			} else {
+		if (req.contentType) {
+			conn.setRequestProperty("Content-Type", req.contentType);
+		}
+		if (req.method.toLowerCase() == "post") {
+			conn.setDoOutput(true);
+			var output_stream = conn.getOutputStream();
+			var byte_array = (new java.lang.String(query)).getBytes();
+			output_stream.write(byte_array, 0, byte_array.length);
+		}
+		conn.connect();
+		doLoad(req, conn);
+	}
+	this.bind = function (req) {
+		var async = req["sync"] ? false : true;
+		if (async) {
+			setTimeout(dojo.lang.hitch(this, function () {
 				connect(req);
-			}
+			}), 1);
+		} else {
+			connect(req);
 		}
+	};
+	dojo.io.transports.addTransport("RhinoHTTPTransport");
+};
 
-		dojo.io.transports.addTransport("RhinoHTTPTransport");
-}
 
 __CPAN_FILE__ src/io/__package__.js
 /*
@@ -82220,14 +56648,10 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: ["dojo.io.common"],
-	rhino: ["dojo.io.RhinoIO"],
-	browser: ["dojo.io.BrowserIO", "dojo.io.cookie"],
-	dashboard: ["dojo.io.BrowserIO", "dojo.io.cookie"]
-});
+dojo.kwCompoundRequire({common:["dojo.io.common"], rhino:["dojo.io.RhinoIO"], browser:["dojo.io.BrowserIO", "dojo.io.cookie"], dashboard:["dojo.io.BrowserIO", "dojo.io.cookie"]});
 dojo.provide("dojo.io.*");
 
+
 __CPAN_FILE__ src/io/ScriptSrcIO.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -82242,463 +56666,309 @@
 dojo.provide("dojo.io.ScriptSrcIO");
 dojo.require("dojo.io.BrowserIO");
 dojo.require("dojo.undo.browser");
-
-//FIXME: should constantParams be JS object?
-//FIXME: check dojo.io calls. Can we move the BrowserIO defined calls somewhere
-//       else so that we don't depend on BrowserIO at all? The dependent calls
-//       have to do with dealing with forms and making query params from JS object.
-/**
- * See test_ScriptSrcIO.html for usage information.
- * Notes:
- * - The watchInFlight timer is set to 100 ms instead of 10ms (which is what BrowserIO.js uses).
- */
-dojo.io.ScriptSrcTransport = new function(){
-	this.preventCache = false; // if this is true, we'll always force GET requests to not cache
-	this.maxUrlLength = 1000; //Used to calculate if script request should be multipart.
+dojo.io.ScriptSrcTransport = new function () {
+	this.preventCache = false;
+	this.maxUrlLength = 1000;
 	this.inFlightTimer = null;
-
-	this.DsrStatusCodes = {
-		Continue: 100,
-		Ok: 200,
-		Error: 500
-	};
-
-	this.startWatchingInFlight = function(){
-		//summary: Internal method to start the process of watching for in-flight requests.
-		if(!this.inFlightTimer){
+	this.DsrStatusCodes = {Continue:100, Ok:200, Error:500};
+	this.startWatchingInFlight = function () {
+		if (!this.inFlightTimer) {
 			this.inFlightTimer = setInterval("dojo.io.ScriptSrcTransport.watchInFlight();", 100);
 		}
-	}
-
-	this.watchInFlight = function(){
-		//summary: Internal method to watch for in-flight requests.
+	};
+	this.watchInFlight = function () {
 		var totalCount = 0;
 		var doneCount = 0;
-		for(var param in this._state){
+		for (var param in this._state) {
 			totalCount++;
 			var currentState = this._state[param];
-			if(currentState.isDone){
+			if (currentState.isDone) {
 				doneCount++;
 				delete this._state[param];
-			}else if(!currentState.isFinishing){
-				var listener = currentState.kwArgs;
-				try{
-					if(currentState.checkString && eval("typeof(" + currentState.checkString + ") != 'undefined'")){
-						currentState.isFinishing = true;
-						this._finish(currentState, "load");
-						doneCount++;
-						delete this._state[param];
-					}else if(listener.timeoutSeconds && listener.timeout){
-						if(currentState.startTime + (listener.timeoutSeconds * 1000) < (new Date()).getTime()){
+			} else {
+				if (!currentState.isFinishing) {
+					var listener = currentState.kwArgs;
+					try {
+						if (currentState.checkString && eval("typeof(" + currentState.checkString + ") != 'undefined'")) {
 							currentState.isFinishing = true;
-							this._finish(currentState, "timeout");
+							this._finish(currentState, "load");
 							doneCount++;
 							delete this._state[param];
+						} else {
+							if (listener.timeoutSeconds && listener.timeout) {
+								if (currentState.startTime + (listener.timeoutSeconds * 1000) < (new Date()).getTime()) {
+									currentState.isFinishing = true;
+									this._finish(currentState, "timeout");
+									doneCount++;
+									delete this._state[param];
+								}
+							} else {
+								if (!listener.timeoutSeconds) {
+									doneCount++;
+								}
+							}
 						}
-					}else if(!listener.timeoutSeconds){
-						//Increment the done count if no timeout is specified, so
-						//that we turn off the timer if all that is left in the state
-						//list are things we can't clean up because they fail without
-						//getting a callback.
-						doneCount++;
 					}
-				}catch(e){
-					currentState.isFinishing = true;
-					this._finish(currentState, "error", {status: this.DsrStatusCodes.Error, response: e});
+					catch (e) {
+						currentState.isFinishing = true;
+						this._finish(currentState, "error", {status:this.DsrStatusCodes.Error, response:e});
+					}
 				}
 			}
 		}
-	
-		if(doneCount >= totalCount){
+		if (doneCount >= totalCount) {
 			clearInterval(this.inFlightTimer);
 			this.inFlightTimer = null;
 		}
-	}
-
-	this.canHandle = function(/*dojo.io.Request*/kwArgs){
-		//summary: Tells dojo.io.bind() if this is a good transport to
-		//use for the particular type of request. This type of transport can only
-		//handle responses that are JavaScript or JSON that is passed to a JavaScript
-		//callback. It can only do asynchronous binds, is limited to GET HTTP method
-		//requests, and cannot handle formNodes. However, it has the advantage of being
-		//able to do cross-domain requests.
-
-		return dojo.lang.inArray(["text/javascript", "text/json", "application/json"], (kwArgs["mimetype"].toLowerCase()))
-			&& (kwArgs["method"].toLowerCase() == "get")
-			&& !(kwArgs["formNode"] && dojo.io.formHasFile(kwArgs["formNode"]))
-			&& (!kwArgs["sync"] || kwArgs["sync"] == false)
-			&& !kwArgs["file"]
-			&& !kwArgs["multipart"];
-	}
-
-	this.removeScripts = function(){
-		//summary: Removes any script tags from the DOM that may have been added by ScriptSrcTransport.
-		//description: Be careful though, by removing them from the script, you may invalidate some
-		//script objects that were defined by the js file that was pulled in as the
-		//src of the script tag. Test carefully if you decide to call this method.
-		//In MSIE 6 (and probably 5.x), if you remove the script element while 
-		//part of the response script is still executing, the browser might crash.
+	};
+	this.canHandle = function (kwArgs) {
+		return dojo.lang.inArray(["text/javascript", "text/json", "application/json"], (kwArgs["mimetype"].toLowerCase())) && (kwArgs["method"].toLowerCase() == "get") && !(kwArgs["formNode"] && dojo.io.formHasFile(kwArgs["formNode"])) && (!kwArgs["sync"] || kwArgs["sync"] == false) && !kwArgs["file"] && !kwArgs["multipart"];
+	};
+	this.removeScripts = function () {
 		var scripts = document.getElementsByTagName("script");
-		for(var i = 0; scripts && i < scripts.length; i++){
+		for (var i = 0; scripts && i < scripts.length; i++) {
 			var scriptTag = scripts[i];
-			if(scriptTag.className == "ScriptSrcTransport"){
+			if (scriptTag.className == "ScriptSrcTransport") {
 				var parent = scriptTag.parentNode;
 				parent.removeChild(scriptTag);
-				i--; //Set the index back one since we removed an item.
+				i--;
 			}
 		}
-	}
-
-	this.bind = function(/*dojo.io.Request*/kwArgs){
-		//summary: function that sends the request to the server.
-		//description: See the Dojo Book page on this transport for a full
-		//description of supported kwArgs properties and usage:
-		//http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book25
-
-		//START duplication from BrowserIO.js (some changes made)
+	};
+	this.bind = function (kwArgs) {
 		var url = kwArgs.url;
 		var query = "";
-		
-		if(kwArgs["formNode"]){
+		if (kwArgs["formNode"]) {
 			var ta = kwArgs.formNode.getAttribute("action");
-			if((ta)&&(!kwArgs["url"])){ url = ta; }
+			if ((ta) && (!kwArgs["url"])) {
+				url = ta;
+			}
 			var tp = kwArgs.formNode.getAttribute("method");
-			if((tp)&&(!kwArgs["method"])){ kwArgs.method = tp; }
+			if ((tp) && (!kwArgs["method"])) {
+				kwArgs.method = tp;
+			}
 			query += dojo.io.encodeForm(kwArgs.formNode, kwArgs.encoding, kwArgs["formFilter"]);
 		}
-
-		if(url.indexOf("#") > -1) {
+		if (url.indexOf("#") > -1) {
 			dojo.debug("Warning: dojo.io.bind: stripping hash values from url:", url);
 			url = url.split("#")[0];
 		}
-
-		//Break off the domain/path of the URL.
 		var urlParts = url.split("?");
-		if(urlParts && urlParts.length == 2){
+		if (urlParts && urlParts.length == 2) {
 			url = urlParts[0];
 			query += (query ? "&" : "") + urlParts[1];
 		}
-
-		if(kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"]){
+		if (kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"]) {
 			dojo.undo.browser.addToHistory(kwArgs);
 		}
-
-		//Create an ID for the request.
 		var id = kwArgs["apiId"] ? kwArgs["apiId"] : "id" + this._counter++;
-
-		//Fill out any other content pieces.
 		var content = kwArgs["content"];
 		var jsonpName = kwArgs.jsonParamName;
-		if(kwArgs.sendTransport || jsonpName) {
-			if (!content){
+		if (kwArgs.sendTransport || jsonpName) {
+			if (!content) {
 				content = {};
 			}
-			if(kwArgs.sendTransport){
+			if (kwArgs.sendTransport) {
 				content["dojo.transport"] = "scriptsrc";
 			}
-
-			if(jsonpName){
+			if (jsonpName) {
 				content[jsonpName] = "dojo.io.ScriptSrcTransport._state." + id + ".jsonpCall";
 			}
 		}
-
-		if(kwArgs.postContent){
+		if (kwArgs.postContent) {
 			query = kwArgs.postContent;
-		}else if(content){
-			query += ((query) ? "&" : "") + dojo.io.argsFromMap(content, kwArgs.encoding, jsonpName);
+		} else {
+			if (content) {
+				query += ((query) ? "&" : "") + dojo.io.argsFromMap(content, kwArgs.encoding, jsonpName);
+			}
 		}
-		//END duplication from BrowserIO.js
-
-		//START DSR
-
-		//If an apiId is specified, then we want to make sure useRequestId is true.
-		if(kwArgs["apiId"]){
+		if (kwArgs["apiId"]) {
 			kwArgs["useRequestId"] = true;
 		}
-
-		//Set up the state for this request.
-		var state = {
-			"id": id,
-			"idParam": "_dsrid=" + id,
-			"url": url,
-			"query": query,
-			"kwArgs": kwArgs,
-			"startTime": (new Date()).getTime(),
-			"isFinishing": false
-		};
-
-		if(!url){
-			//Error. An URL is needed.
-			this._finish(state, "error", {status: this.DsrStatusCodes.Error, statusText: "url.none"});
+		var state = {"id":id, "idParam":"_dsrid=" + id, "url":url, "query":query, "kwArgs":kwArgs, "startTime":(new Date()).getTime(), "isFinishing":false};
+		if (!url) {
+			this._finish(state, "error", {status:this.DsrStatusCodes.Error, statusText:"url.none"});
 			return;
 		}
-
-		//If this is a jsonp request, intercept the jsonp callback
-		if(content && content[jsonpName]){
+		if (content && content[jsonpName]) {
 			state.jsonp = content[jsonpName];
-			state.jsonpCall = function(data){
-				if(data["Error"]||data["error"]){
-					if(dojo["json"] && dojo["json"]["serialize"]){
+			state.jsonpCall = function (data) {
+				if (data["Error"] || data["error"]) {
+					if (dojo["json"] && dojo["json"]["serialize"]) {
 						dojo.debug(dojo.json.serialize(data));
 					}
 					dojo.io.ScriptSrcTransport._finish(this, "error", data);
-				}else{
+				} else {
 					dojo.io.ScriptSrcTransport._finish(this, "load", data);
 				}
 			};
 		}
-
-		//Only store the request state on the state tracking object if a callback
-		//is expected or if polling on a checkString will be done.
-		if(kwArgs["useRequestId"] || kwArgs["checkString"] || state["jsonp"]){
+		if (kwArgs["useRequestId"] || kwArgs["checkString"] || state["jsonp"]) {
 			this._state[id] = state;
 		}
-
-		//A checkstring is a string that if evaled will not be undefined once the
-		//script src loads. Used as an alternative to depending on a callback from
-		//the script file. If this is set, then multipart is not assumed to be used,
-		//since multipart requires a specific callback. With checkString we will be doing
-		//polling.
-		if(kwArgs["checkString"]){
+		if (kwArgs["checkString"]) {
 			state.checkString = kwArgs["checkString"];
 		}
-
-		//Constant params are parameters that should always be sent with each
-		//part of a multipart URL.
 		state.constantParams = (kwArgs["constantParams"] == null ? "" : kwArgs["constantParams"]);
-	
-		if(kwArgs["preventCache"] ||
-			(this.preventCache == true && kwArgs["preventCache"] != false)){
+		if (kwArgs["preventCache"] || (this.preventCache == true && kwArgs["preventCache"] != false)) {
 			state.nocacheParam = "dojo.preventCache=" + new Date().valueOf();
-		}else{
+		} else {
 			state.nocacheParam = "";
 		}
-
-		//Get total length URL, if we were to do it as one URL.
-		//Add some padding, extra & separators.
-		var urlLength = state.url.length + state.query.length + state.constantParams.length 
-				+ state.nocacheParam.length + this._extraPaddingLength;
-
-		if(kwArgs["useRequestId"]){
+		var urlLength = state.url.length + state.query.length + state.constantParams.length + state.nocacheParam.length + this._extraPaddingLength;
+		if (kwArgs["useRequestId"]) {
 			urlLength += state.idParam.length;
 		}
-		
-		if(!kwArgs["checkString"] && kwArgs["useRequestId"] 
-			&& !state["jsonp"] && !kwArgs["forceSingleRequest"]
-			&& urlLength > this.maxUrlLength){
-			if(url > this.maxUrlLength){
-				//Error. The URL domain and path are too long. We can't
-				//segment that, so return an error.
-				this._finish(state, "error", {status: this.DsrStatusCodes.Error, statusText: "url.tooBig"});
+		if (!kwArgs["checkString"] && kwArgs["useRequestId"] && !state["jsonp"] && !kwArgs["forceSingleRequest"] && urlLength > this.maxUrlLength) {
+			if (url > this.maxUrlLength) {
+				this._finish(state, "error", {status:this.DsrStatusCodes.Error, statusText:"url.tooBig"});
 				return;
-			}else{
-				//Start the multiple requests.
+			} else {
 				this._multiAttach(state, 1);
 			}
-		}else{
-			//Send one URL.
+		} else {
 			var queryParams = [state.constantParams, state.nocacheParam, state.query];
-			if(kwArgs["useRequestId"] && !state["jsonp"]){
+			if (kwArgs["useRequestId"] && !state["jsonp"]) {
 				queryParams.unshift(state.idParam);
 			}
 			var finalUrl = this._buildUrl(state.url, queryParams);
-
-			//Track the final URL in case we need to use that instead of api ID when receiving
-			//the load callback.
 			state.finalUrl = finalUrl;
-			
 			this._attach(state.id, finalUrl);
 		}
-		//END DSR
-
 		this.startWatchingInFlight();
-	}
-	
-	//Private properties/methods
+	};
 	this._counter = 1;
 	this._state = {};
 	this._extraPaddingLength = 16;
-
-	//Is there a dojo function for this already?
-	this._buildUrl = function(url, nameValueArray){
+	this._buildUrl = function (url, nameValueArray) {
 		var finalUrl = url;
 		var joiner = "?";
-		for(var i = 0; i < nameValueArray.length; i++){
-			if(nameValueArray[i]){
+		for (var i = 0; i < nameValueArray.length; i++) {
+			if (nameValueArray[i]) {
 				finalUrl += joiner + nameValueArray[i];
 				joiner = "&";
 			}
 		}
-
 		return finalUrl;
-	}
-
-	this._attach = function(id, url){
-		//Attach the script to the DOM.
+	};
+	this._attach = function (id, url) {
 		var element = document.createElement("script");
 		element.type = "text/javascript";
 		element.src = url;
 		element.id = id;
 		element.className = "ScriptSrcTransport";
 		document.getElementsByTagName("head")[0].appendChild(element);
-	}
-
-	this._multiAttach = function(state, part){
-		//Check to make sure we still have a query to send up. This is mostly
-		//a protection from a goof on the server side when it sends a part OK
-		//response instead of a final response.
-		if(state.query == null){
-			this._finish(state, "error", {status: this.DsrStatusCodes.Error, statusText: "query.null"});
+	};
+	this._multiAttach = function (state, part) {
+		if (state.query == null) {
+			this._finish(state, "error", {status:this.DsrStatusCodes.Error, statusText:"query.null"});
 			return;
 		}
-
-		if(!state.constantParams){
+		if (!state.constantParams) {
 			state.constantParams = "";
 		}
-
-		//How much of the query can we take?
-		//Add a padding constant to account for _part and a couple extra amperstands.
-		//Also add space for id since we'll need it now.
-		var queryMax = this.maxUrlLength - state.idParam.length
-					 - state.constantParams.length - state.url.length
-					 - state.nocacheParam.length - this._extraPaddingLength;
-		
-		//Figure out if this is the last part.
+		var queryMax = this.maxUrlLength - state.idParam.length - state.constantParams.length - state.url.length - state.nocacheParam.length - this._extraPaddingLength;
 		var isDone = state.query.length < queryMax;
-	
-		//Break up the query string if necessary.
 		var currentQuery;
-		if(isDone){
+		if (isDone) {
 			currentQuery = state.query;
 			state.query = null;
-		}else{
-			//Find the & or = nearest the max url length.
+		} else {
 			var ampEnd = state.query.lastIndexOf("&", queryMax - 1);
 			var eqEnd = state.query.lastIndexOf("=", queryMax - 1);
-
-			//See if & is closer, or if = is right at the edge,
-			//which means we should put it on the next URL.
-			if(ampEnd > eqEnd || eqEnd == queryMax - 1){
-				//& is nearer the end. So just chop off from there.
+			if (ampEnd > eqEnd || eqEnd == queryMax - 1) {
 				currentQuery = state.query.substring(0, ampEnd);
-				state.query = state.query.substring(ampEnd + 1, state.query.length) //strip off amperstand with the + 1.
-			}else{
-				//= is nearer the end. Take the max amount possible. 
+				state.query = state.query.substring(ampEnd + 1, state.query.length);
+			} else {
 				currentQuery = state.query.substring(0, queryMax);
-			 
-				//Find the last query name in the currentQuery so we can prepend it to
-				//ampEnd. Could be -1 (not there), so account for that.
 				var queryName = currentQuery.substring((ampEnd == -1 ? 0 : ampEnd + 1), eqEnd);
 				state.query = queryName + "=" + state.query.substring(queryMax, state.query.length);
 			}
 		}
-		
-		//Now send a part of the script
 		var queryParams = [currentQuery, state.idParam, state.constantParams, state.nocacheParam];
-		if(!isDone){
+		if (!isDone) {
 			queryParams.push("_part=" + part);
 		}
-
 		var url = this._buildUrl(state.url, queryParams);
-
 		this._attach(state.id + "_" + part, url);
-	}
-
-	this._finish = function(state, callback, event){
-		if(callback != "partOk" && !state.kwArgs[callback] && !state.kwArgs["handle"]){
-			//Ignore "partOk" because that is an internal callback.
-			if(callback == "error"){
+	};
+	this._finish = function (state, callback, event) {
+		if (callback != "partOk" && !state.kwArgs[callback] && !state.kwArgs["handle"]) {
+			if (callback == "error") {
 				state.isDone = true;
 				throw event;
 			}
-		}else{
-			switch(callback){
-				case "load":
-					var response = event ? event.response : null;
-					if(!response){
-						response = event;
-					}
-					state.kwArgs[(typeof state.kwArgs.load == "function") ? "load" : "handle"]("load", response, event, state.kwArgs);
-					state.isDone = true;
-					break;
-				case "partOk":
-					var part = parseInt(event.response.part, 10) + 1;
-					//Update the constant params, if any.
-					if(event.response.constantParams){
-						state.constantParams = event.response.constantParams;
-					}
-					this._multiAttach(state, part);
-					state.isDone = false;
-					break;
-				case "error":
-					state.kwArgs[(typeof state.kwArgs.error == "function") ? "error" : "handle"]("error", event.response, event, state.kwArgs);
-					state.isDone = true;
-					break;
-				default:
-					state.kwArgs[(typeof state.kwArgs[callback] == "function") ? callback : "handle"](callback, event, event, state.kwArgs);
-					state.isDone = true;
+		} else {
+			switch (callback) {
+			  case "load":
+				var response = event ? event.response : null;
+				if (!response) {
+					response = event;
+				}
+				state.kwArgs[(typeof state.kwArgs.load == "function") ? "load" : "handle"]("load", response, event, state.kwArgs);
+				state.isDone = true;
+				break;
+			  case "partOk":
+				var part = parseInt(event.response.part, 10) + 1;
+				if (event.response.constantParams) {
+					state.constantParams = event.response.constantParams;
+				}
+				this._multiAttach(state, part);
+				state.isDone = false;
+				break;
+			  case "error":
+				state.kwArgs[(typeof state.kwArgs.error == "function") ? "error" : "handle"]("error", event.response, event, state.kwArgs);
+				state.isDone = true;
+				break;
+			  default:
+				state.kwArgs[(typeof state.kwArgs[callback] == "function") ? callback : "handle"](callback, event, event, state.kwArgs);
+				state.isDone = true;
 			}
 		}
-	}
-
+	};
 	dojo.io.transports.addTransport("ScriptSrcTransport");
-}
-
-//Define callback handler.
-window.onscriptload = function(event){
+};
+window.onscriptload = function (event) {
 	var state = null;
 	var transport = dojo.io.ScriptSrcTransport;
-	
-	//Find the matching state object for event ID.
-	if(transport._state[event.id]){
+	if (transport._state[event.id]) {
 		state = transport._state[event.id];
-	}else{
-		//The ID did not match directly to an entry in the state list.
-		//Try searching the state objects for a matching original URL.
+	} else {
 		var tempState;
-		for(var param in transport._state){
+		for (var param in transport._state) {
 			tempState = transport._state[param];
-			if(tempState.finalUrl && tempState.finalUrl == event.id){
+			if (tempState.finalUrl && tempState.finalUrl == event.id) {
 				state = tempState;
 				break;
 			}
 		}
-
-		//If no matching original URL is found, then use the URL that was actually used
-		//in the SCRIPT SRC attribute.
-		if(state == null){
+		if (state == null) {
 			var scripts = document.getElementsByTagName("script");
-			for(var i = 0; scripts && i < scripts.length; i++){
+			for (var i = 0; scripts && i < scripts.length; i++) {
 				var scriptTag = scripts[i];
-				if(scriptTag.getAttribute("class") == "ScriptSrcTransport"
-					&& scriptTag.src == event.id){
+				if (scriptTag.getAttribute("class") == "ScriptSrcTransport" && scriptTag.src == event.id) {
 					state = transport._state[scriptTag.id];
 					break;
 				}
 			}
 		}
-		
-		//If state is still null, then throw an error.
-		if(state == null){
+		if (state == null) {
 			throw "No matching state for onscriptload event.id: " + event.id;
 		}
 	}
-
 	var callbackName = "error";
-	switch(event.status){
-		case dojo.io.ScriptSrcTransport.DsrStatusCodes.Continue:
-			//A part of a multipart request.
-			callbackName = "partOk";
-			break;
-		case dojo.io.ScriptSrcTransport.DsrStatusCodes.Ok:
-			//Successful reponse.
-			callbackName = "load";
-			break;
+	switch (event.status) {
+	  case dojo.io.ScriptSrcTransport.DsrStatusCodes.Continue:
+		callbackName = "partOk";
+		break;
+	  case dojo.io.ScriptSrcTransport.DsrStatusCodes.Ok:
+		callbackName = "load";
+		break;
 	}
-
 	transport._finish(state, callbackName, event);
 };
 
+
 __CPAN_FILE__ src/io/cookie.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -82711,196 +56981,140 @@
 */
 
 dojo.provide("dojo.io.cookie");
-
-dojo.io.cookie.setCookie = function(/*String*/name, /*String*/value, 
-									/*Number?*/days, /*String?*/path, 
-									/*String?*/domain, /*boolean?*/secure){
-	//summary: sets a cookie.
+dojo.io.cookie.setCookie = function (name, value, days, path, domain, secure) {
 	var expires = -1;
-	if((typeof days == "number")&&(days >= 0)){
+	if ((typeof days == "number") && (days >= 0)) {
 		var d = new Date();
-		d.setTime(d.getTime()+(days*24*60*60*1000));
+		d.setTime(d.getTime() + (days * 24 * 60 * 60 * 1000));
 		expires = d.toGMTString();
 	}
 	value = escape(value);
-	document.cookie = name + "=" + value + ";"
-		+ (expires != -1 ? " expires=" + expires + ";" : "")
-		+ (path ? "path=" + path : "")
-		+ (domain ? "; domain=" + domain : "")
-		+ (secure ? "; secure" : "");
-}
-
+	document.cookie = name + "=" + value + ";" + (expires != -1 ? " expires=" + expires + ";" : "") + (path ? "path=" + path : "") + (domain ? "; domain=" + domain : "") + (secure ? "; secure" : "");
+};
 dojo.io.cookie.set = dojo.io.cookie.setCookie;
-
-dojo.io.cookie.getCookie = function(/*String*/name){
-	//summary: Gets a cookie with the given name.
-
-	// FIXME: Which cookie should we return?
-	//        If there are cookies set for different sub domains in the current
-	//        scope there could be more than one cookie with the same name.
-	//        I think taking the last one in the list takes the one from the
-	//        deepest subdomain, which is what we're doing here.
-	var idx = document.cookie.lastIndexOf(name+'=');
-	if(idx == -1) { return null; }
-	var value = document.cookie.substring(idx+name.length+1);
-	var end = value.indexOf(';');
-	if(end == -1) { end = value.length; }
+dojo.io.cookie.getCookie = function (name) {
+	var idx = document.cookie.lastIndexOf(name + "=");
+	if (idx == -1) {
+		return null;
+	}
+	var value = document.cookie.substring(idx + name.length + 1);
+	var end = value.indexOf(";");
+	if (end == -1) {
+		end = value.length;
+	}
 	value = value.substring(0, end);
 	value = unescape(value);
-	return value; //String
-}
-
+	return value;
+};
 dojo.io.cookie.get = dojo.io.cookie.getCookie;
-
-dojo.io.cookie.deleteCookie = function(/*String*/name){
-	//summary: Deletes a cookie with the given name.
+dojo.io.cookie.deleteCookie = function (name) {
 	dojo.io.cookie.setCookie(name, "-", 0);
-}
-
-dojo.io.cookie.setObjectCookie = function(	/*String*/name, /*Object*/obj, 
-											/*Number?*/days, /*String?*/path, 
-											/*String?*/domain, /*boolean?*/secure, 
-											/*boolean?*/clearCurrent){
-	//summary: Takes an object, serializes it to a cookie value, and either
-	//sets a cookie with the serialized value.
-	//description: If clearCurrent is true, then any current cookie value
-	//for this object will be replaced with the the new serialized object value.
-	//If clearCurrent is false, then the existing cookie value will be modified
-	//with any changes from the new object value.
-	//Objects must be simple name/value pairs where the value is either a string
-	//or a number. Any other value will be ignored.
-	if(arguments.length == 5){ // for backwards compat
+};
+dojo.io.cookie.setObjectCookie = function (name, obj, days, path, domain, secure, clearCurrent) {
+	if (arguments.length == 5) {
 		clearCurrent = domain;
 		domain = null;
 		secure = null;
 	}
 	var pairs = [], cookie, value = "";
-	if(!clearCurrent){
+	if (!clearCurrent) {
 		cookie = dojo.io.cookie.getObjectCookie(name);
 	}
-	if(days >= 0){
-		if(!cookie){ cookie = {}; }
-		for(var prop in obj){
-			if(obj[prop] == null){
+	if (days >= 0) {
+		if (!cookie) {
+			cookie = {};
+		}
+		for (var prop in obj) {
+			if (obj[prop] == null) {
 				delete cookie[prop];
-			}else if((typeof obj[prop] == "string")||(typeof obj[prop] == "number")){
-				cookie[prop] = obj[prop];
+			} else {
+				if ((typeof obj[prop] == "string") || (typeof obj[prop] == "number")) {
+					cookie[prop] = obj[prop];
+				}
 			}
 		}
 		prop = null;
-		for(var prop in cookie){
+		for (var prop in cookie) {
 			pairs.push(escape(prop) + "=" + escape(cookie[prop]));
 		}
 		value = pairs.join("&");
 	}
 	dojo.io.cookie.setCookie(name, value, days, path, domain, secure);
-}
-
-dojo.io.cookie.getObjectCookie = function(/*String*/name){
-	//summary: Gets an object value for the given cookie name. The complement of
-	//dojo.io.cookie.setObjectCookie().
+};
+dojo.io.cookie.getObjectCookie = function (name) {
 	var values = null, cookie = dojo.io.cookie.getCookie(name);
-	if(cookie){
+	if (cookie) {
 		values = {};
 		var pairs = cookie.split("&");
-		for(var i = 0; i < pairs.length; i++){
+		for (var i = 0; i < pairs.length; i++) {
 			var pair = pairs[i].split("=");
 			var value = pair[1];
-			if( isNaN(value) ){ value = unescape(pair[1]); }
-			values[ unescape(pair[0]) ] = value;
+			if (isNaN(value)) {
+				value = unescape(pair[1]);
+			}
+			values[unescape(pair[0])] = value;
 		}
 	}
 	return values;
-}
-
-dojo.io.cookie.isSupported = function(){
-	//summary: Tests the browser to see if cookies are enabled.
-	if(typeof navigator.cookieEnabled != "boolean"){
-		dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__",
-			"CookiesAllowed", 90, null);
+};
+dojo.io.cookie.isSupported = function () {
+	if (typeof navigator.cookieEnabled != "boolean") {
+		dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__", "CookiesAllowed", 90, null);
 		var cookieVal = dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
 		navigator.cookieEnabled = (cookieVal == "CookiesAllowed");
-		if(navigator.cookieEnabled){
-			// FIXME: should we leave this around?
+		if (navigator.cookieEnabled) {
 			this.deleteCookie("__TestingYourBrowserForCookieSupport__");
 		}
 	}
-	return navigator.cookieEnabled; //boolean
+	return navigator.cookieEnabled;
+};
+if (!dojo.io.cookies) {
+	dojo.io.cookies = dojo.io.cookie;
 }
 
-// need to leave this in for backwards-compat from 0.1 for when it gets pulled in by dojo.io.*
-if(!dojo.io.cookies){ dojo.io.cookies = dojo.io.cookie; }
 
 __CPAN_FILE__ src/io/RepubsubIO.js
-//	Copyright (c) 2004 Friendster Inc., Licensed under the Academic Free
-//	License version 2.0 or later 
+/*
+	Copyright (c) 2004-2006, 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/community/licensing.shtml
+*/
+
+
+
 dojo.require("dojo.event.*");
 dojo.require("dojo.io.BrowserIO");
-
 dojo.provide("dojo.io.RepubsubIO");
-
-dojo.io.repubsubTranport = new function(){
+dojo.io.repubsubTranport = new function () {
 	var rps = dojo.io.repubsub;
-	this.canHandle = function(/*dojo.io.Request*/kwArgs){
-		//summary: Tells dojo.io.bind() if this is a good transport to
-		//use for the particular type of request. This is a legacy transport
-		//and should not be used unless you are dealing with repubsub.
-		//Consider a comet transport instead.
-		if((kwArgs["mimetype"] == "text/javascript")&&(kwArgs["method"] == "repubsub")){
+	this.canHandle = function (kwArgs) {
+		if ((kwArgs["mimetype"] == "text/javascript") && (kwArgs["method"] == "repubsub")) {
 			return true;
 		}
 		return false;
-	}
-
-	this.bind = function(/*dojo.io.Request*/kwArgs){
-		//summary: This is a legacy transport and should not be used unless you are dealing with repubsub.
-		//Consider a comet transport instead.
-		if(!rps.isInitialized){
-			// open up our tunnel, queue up requests anyway
+	};
+	this.bind = function (kwArgs) {
+		if (!rps.isInitialized) {
 			rps.init();
 		}
-		// FIXME: we need to turn this into a topic subscription
-		// var tgtURL = kwArgs.url+"?"+dojo.io.argsFromMap(kwArgs.content);
-		// sampleTransport.sendRequest(tgtURL, hdlrFunc);
-
-		// a normal "bind()" call in a request-response transport layer is
-		// something that (usually) encodes most of it's payload with the
-		// request. Multi-event systems like repubsub are a bit more complex,
-		// and repubsub in particular distinguishes the publish and subscribe
-		// portions of thep rocess with different method calls to handle each.
-		// Therefore, a "bind" in the sense of repubsub must first determine if
-		// we have an open subscription to a channel provided by the server,
-		// and then "publish" the request payload if there is any. We therefore
-		// must take care not to incorrectly or too agressively register or
-		// file event handlers which are provided with the kwArgs method.
-
-		// NOTE: we ONLY pay attention to those event handlers that are
-		// registered with the bind request that subscribes to the channel. If
-		// event handlers are provided with subsequent requests, we might in
-		// the future support some additive or replacement syntax, but for now
-		// they get dropped on the floor.
-
-		// NOTE: in this case, url MUST be the "topic" to which we
-		// subscribe/publish for this channel
-		if(!rps.topics[kwArgs.url]){
-			kwArgs.rpsLoad = function(evt){
+		if (!rps.topics[kwArgs.url]) {
+			kwArgs.rpsLoad = function (evt) {
 				kwArgs.load("load", evt);
-			}
+			};
 			rps.subscribe(kwArgs.url, kwArgs, "rpsLoad");
 		}
-
-		if(kwArgs["content"]){
-			// what we wanted to send
+		if (kwArgs["content"]) {
 			var cEvt = dojo.io.repubsubEvent.initFromProperties(kwArgs.content);
 			rps.publish(kwArgs.url, cEvt);
 		}
-	}
-
+	};
 	dojo.io.transports.addTransport("repubsubTranport");
-}
-
-dojo.io.repubsub = new function(){
+};
+dojo.io.repubsub = new function () {
 	this.initDoc = "init.html";
 	this.isInitialized = false;
 	this.subscriptionBacklog = [];
@@ -82917,442 +57131,287 @@
 	this.backlog = [];
 	this.tunnelInitCount = 0;
 	this.tunnelFrameKey = "tunnel_frame";
-	this.serverBaseURL = location.protocol+"//"+location.host+location.pathname;
+	this.serverBaseURL = location.protocol + "//" + location.host + location.pathname;
 	this.logBacklog = [];
-	this.getRandStr = function(){
+	this.getRandStr = function () {
 		return Math.random().toString().substring(2, 10);
-	}
+	};
 	this.userid = "guest";
 	this.tunnelID = this.getRandStr();
 	this.attachPathList = [];
-	this.topics = []; // list of topics we have listeners to
-
-	// actually, now that I think about it a little bit more, it would sure be
-	// useful to parse out the <script> src attributes. We're looking for
-	// something with a "do_method=lib", since that's what would have included
-	// us in the first place (in the common case).
-	this.parseGetStr = function(){
+	this.topics = [];
+	this.parseGetStr = function () {
 		var baseUrl = document.location.toString();
 		var params = baseUrl.split("?", 2);
-		if(params.length > 1){
+		if (params.length > 1) {
 			var paramStr = params[1];
 			var pairs = paramStr.split("&");
 			var opts = [];
-			for(var x in pairs){
+			for (var x in pairs) {
 				var sp = pairs[x].split("=");
-				// FIXME: is this eval dangerous?
-				try{
-					opts[sp[0]]=eval(sp[1]);
-				}catch(e){
-					opts[sp[0]]=sp[1];
+				try {
+					opts[sp[0]] = eval(sp[1]);
 				}
+				catch (e) {
+					opts[sp[0]] = sp[1];
+				}
 			}
 			return opts;
-		}else{
+		} else {
 			return [];
 		}
-	}
-
-	// parse URL params and use them as default vals
+	};
 	var getOpts = this.parseGetStr();
-	for(var x in getOpts){
-		// FIXME: should I be checking for undefined here before setting? Does
-		//        that buy me anything?
+	for (var x in getOpts) {
 		this[x] = getOpts[x];
 	}
-
-	if(!this["tunnelURI"]){
-		this.tunnelURI = [	"/who/", escape(this.userid), "/s/", 
-							this.getRandStr(), "/kn_journal"].join("");
-		// this.tunnelURI = this.absoluteTopicURI(this.tunnelURI);
+	if (!this["tunnelURI"]) {
+		this.tunnelURI = ["/who/", escape(this.userid), "/s/", this.getRandStr(), "/kn_journal"].join("");
 	}
-
-	/*
-	if (self.kn_tunnelID) kn.tunnelID = self.kn_tunnelID; // the server says
-	if (kn._argv.kn_tunnelID) kn.tunnelID = kn._argv.kn_tunnelID; // the url says
-	*/
-
-	// check the options object if it exists and use its properties as an
-	// over-ride
-	if(window["repubsubOpts"]||window["rpsOpts"]){
-		var optObj = window["repubsubOpts"]||window["rpsOpts"];
-		for(var x in optObj){
-			this[x] = optObj[x]; // copy the option object properties
+	if (window["repubsubOpts"] || window["rpsOpts"]) {
+		var optObj = window["repubsubOpts"] || window["rpsOpts"];
+		for (var x in optObj) {
+			this[x] = optObj[x];
 		}
 	}
-
-	// things that get called directly from our iframe to inform us of events
-	this.tunnelCloseCallback = function(){
-		// when we get this callback, we should immediately attempt to re-start
-		// our tunnel connection
-		dojo.io.setIFrameSrc(this.rcvNode, this.initDoc+"?callback=repubsub.rcvNodeReady&domain="+document.domain);
-	}
-
-	this.receiveEventFromTunnel = function(evt, srcWindow){
-		// we should never be getting events from windows we didn't create
-		// NOTE: events sourced from the local window are also supported for
-		// 		 debugging purposes
-
-		// any event object MUST have a an "elements" property
-		if(!evt["elements"]){
+	this.tunnelCloseCallback = function () {
+		dojo.io.setIFrameSrc(this.rcvNode, this.initDoc + "?callback=repubsub.rcvNodeReady&domain=" + document.domain);
+	};
+	this.receiveEventFromTunnel = function (evt, srcWindow) {
+		if (!evt["elements"]) {
 			this.log("bailing! event received without elements!", "error");
 			return;
 		}
-
-		// if the event passes some minimal sanity tests, we need to attempt to
-		// dispatch it!
-
-		// first, it seems we have to munge the event object a bit
 		var e = {};
-		for(var i=0; i<evt.elements.length; i++){
+		for (var i = 0; i < evt.elements.length; i++) {
 			var ee = evt.elements[i];
-			e[ee.name||ee.nameU] = (ee.value||ee.valueU);
-			// FIXME: need to enable this only in some extreme debugging mode!
-			this.log("[event]: "+(ee.name||ee.nameU)+": "+e[ee.name||ee.nameU]);
+			e[ee.name || ee.nameU] = (ee.value || ee.valueU);
+			this.log("[event]: " + (ee.name || ee.nameU) + ": " + e[ee.name || ee.nameU]);
 		}
-
-		// NOTE: the previous version of this library put a bunch of code here
-		// to manage state that tried to make sure that we never, ever, lost
-		// any info about an event. If we unload RIGHT HERE, I don't think it's
-		// going to make a huge difference one way or another. Time will tell.
-
-		// and with THAT out of the way, dispatch it!
 		this.dispatch(e);
-
-		// TODO: remove the script block that created the event obj to save
-		// memory, etc.
-	}
-
-	this.widenDomain = function(domainStr){
-		// the purpose of this is to set the most liberal domain policy
-		// available
-		var cd = domainStr||document.domain;
-		if(cd.indexOf(".")==-1){ return; } // probably file:/// or localhost
+	};
+	this.widenDomain = function (domainStr) {
+		var cd = domainStr || document.domain;
+		if (cd.indexOf(".") == -1) {
+			return;
+		}
 		var dps = cd.split(".");
-		if(dps.length<=2){ return; } // probably file:/// or an RFC 1918 address
-		dps = dps.slice(dps.length-2);
+		if (dps.length <= 2) {
+			return;
+		}
+		dps = dps.slice(dps.length - 2);
 		document.domain = dps.join(".");
-	}
-
-	// FIXME: parseCookie and setCookie should be methods that are more broadly
-	// available. Perhaps in htmlUtils?
-
-	this.parseCookie = function(){
+	};
+	this.parseCookie = function () {
 		var cs = document.cookie;
 		var keypairs = cs.split(";");
-		for(var x=0; x<keypairs.length; x++){
+		for (var x = 0; x < keypairs.length; x++) {
 			keypairs[x] = keypairs[x].split("=");
-			if(x!=keypairs.length-1){ cs+=";"; }
+			if (x != keypairs.length - 1) {
+				cs += ";";
+			}
 		}
 		return keypairs;
-	}
-
-	this.setCookie = function(keypairs, clobber){
-		// NOTE: we want to only ever set session cookies, so never provide an
-		// 		 expires date
-		if((clobber)&&(clobber==true)){ document.cookie = ""; }
+	};
+	this.setCookie = function (keypairs, clobber) {
+		if ((clobber) && (clobber == true)) {
+			document.cookie = "";
+		}
 		var cs = "";
-		for(var x=0; x<keypairs.length; x++){
-			cs += keypairs[x][0]+"="+keypairs[x][1];
-			if(x!=keypairs.length-1){ cs+=";"; }
+		for (var x = 0; x < keypairs.length; x++) {
+			cs += keypairs[x][0] + "=" + keypairs[x][1];
+			if (x != keypairs.length - 1) {
+				cs += ";";
+			}
 		}
 		document.cookie = cs;
-	}
-
-	// FIXME: need to replace w/ dojo.log.*
-	this.log = function(str, lvl){
-		if(!this.debug){ return; } // we of course only care if we're in debug mode
-		while(this.logBacklog.length>0){
-			if(!this.canLog){ break; }
+	};
+	this.log = function (str, lvl) {
+		if (!this.debug) {
+			return;
+		}
+		while (this.logBacklog.length > 0) {
+			if (!this.canLog) {
+				break;
+			}
 			var blo = this.logBacklog.shift();
-			this.writeLog("["+blo[0]+"]: "+blo[1], blo[2]);
+			this.writeLog("[" + blo[0] + "]: " + blo[1], blo[2]);
 		}
 		this.writeLog(str, lvl);
-	}
-
-	this.writeLog = function(str, lvl){
-		dojo.debug(((new Date()).toLocaleTimeString())+": "+str);
-	}
-
-	this.init = function(){
+	};
+	this.writeLog = function (str, lvl) {
+		dojo.debug(((new Date()).toLocaleTimeString()) + ": " + str);
+	};
+	this.init = function () {
 		this.widenDomain();
-		// this.findPeers();
 		this.openTunnel();
 		this.isInitialized = true;
-		// FIXME: this seems like entirely the wrong place to replay the backlog
-		while(this.subscriptionBacklog.length){
+		while (this.subscriptionBacklog.length) {
 			this.subscribe.apply(this, this.subscriptionBacklog.shift());
 		}
-	}
-
-	this.clobber = function(){
-		if(this.rcvNode){
-			this.setCookie( [
-					[this.tunnelFrameKey,"closed"],
-					["path","/"]
-				], false 
-			);
+	};
+	this.clobber = function () {
+		if (this.rcvNode) {
+			this.setCookie([[this.tunnelFrameKey, "closed"], ["path", "/"]], false);
 		}
-	}
-
-	this.openTunnel = function(){
-		// We create two iframes here:
-
-		// one for getting data
-		this.rcvNodeName = "rcvIFrame_"+this.getRandStr();
-		// set cookie that can be used to find the receiving iframe
-		this.setCookie( [
-				[this.tunnelFrameKey,this.rcvNodeName],
-				["path","/"]
-			], false
-		);
-
+	};
+	this.openTunnel = function () {
+		this.rcvNodeName = "rcvIFrame_" + this.getRandStr();
+		this.setCookie([[this.tunnelFrameKey, this.rcvNodeName], ["path", "/"]], false);
 		this.rcvNode = dojo.io.createIFrame(this.rcvNodeName);
-		// FIXME: set the src attribute here to the initialization URL
-		dojo.io.setIFrameSrc(this.rcvNode, this.initDoc+"?callback=repubsub.rcvNodeReady&domain="+document.domain);
-
-		// the other for posting data in reply
-
-		this.sndNodeName = "sndIFrame_"+this.getRandStr();
+		dojo.io.setIFrameSrc(this.rcvNode, this.initDoc + "?callback=repubsub.rcvNodeReady&domain=" + document.domain);
+		this.sndNodeName = "sndIFrame_" + this.getRandStr();
 		this.sndNode = dojo.io.createIFrame(this.sndNodeName);
-		// FIXME: set the src attribute here to the initialization URL
-		dojo.io.setIFrameSrc(this.sndNode, this.initDoc+"?callback=repubsub.sndNodeReady&domain="+document.domain);
-
-	}
-
-	this.rcvNodeReady = function(){
-		// FIXME: why is this sequence number needed? Why isn't the UID gen
-		// 		  function enough?
-        var statusURI = [this.tunnelURI, '/kn_status/', this.getRandStr(), '_', 
-						 String(this.tunnelInitCount++)].join(""); 
-            // (kn._seqNum++); // FIXME: !!!!
-		// this.canRcv = true;
+		dojo.io.setIFrameSrc(this.sndNode, this.initDoc + "?callback=repubsub.sndNodeReady&domain=" + document.domain);
+	};
+	this.rcvNodeReady = function () {
+		var statusURI = [this.tunnelURI, "/kn_status/", this.getRandStr(), "_", String(this.tunnelInitCount++)].join("");
 		this.log("rcvNodeReady");
-		// FIXME: initialize receiver and request the base topic
-		// dojo.io.setIFrameSrc(this.rcvNode, this.serverBaseURL+"/kn?do_method=blank");
-		var initURIArr = [	this.serverBaseURL, "/kn?kn_from=", escape(this.tunnelURI),
-							"&kn_id=", escape(this.tunnelID), "&kn_status_from=", 
-							escape(statusURI)];
-		// FIXME: does the above really need a kn_response_flush? won't the
-		// 		  server already know? If not, what good is it anyway?
+		var initURIArr = [this.serverBaseURL, "/kn?kn_from=", escape(this.tunnelURI), "&kn_id=", escape(this.tunnelID), "&kn_status_from=", escape(statusURI)];
 		dojo.io.setIFrameSrc(this.rcvNode, initURIArr.join(""));
-
-		// setup a status path listener, but don't tell the server about it,
-		// since it already knows we're itnerested in our own tunnel status
 		this.subscribe(statusURI, this, "statusListener", true);
-
 		this.log(initURIArr.join(""));
-	}
-
-	this.sndNodeReady = function(){
+	};
+	this.sndNodeReady = function () {
 		this.canSnd = true;
 		this.log("sndNodeReady");
 		this.log(this.backlog.length);
-		// FIXME: handle any pent-up send commands
-		if(this.backlog.length > 0){
+		if (this.backlog.length > 0) {
 			this.dequeueEvent();
 		}
-	}
-
-	this.statusListener = function(evt){
+	};
+	this.statusListener = function (evt) {
 		this.log("status listener called");
 		this.log(evt.status, "info");
-	}
-
-	// this handles local event propigation
-	this.dispatch = function(evt){
-		// figure out what topic it came from
-		if(evt["to"]||evt["kn_routed_from"]){
-			var rf = evt["to"]||evt["kn_routed_from"];
-			// split off the base server URL
+	};
+	this.dispatch = function (evt) {
+		if (evt["to"] || evt["kn_routed_from"]) {
+			var rf = evt["to"] || evt["kn_routed_from"];
 			var topic = rf.split(this.serverBaseURL, 2)[1];
-			if(!topic){
-				// FIXME: how do we recover when we don't get a sane "from"? Do
-				// we try to route to it anyway?
+			if (!topic) {
 				topic = rf;
 			}
-			this.log("[topic] "+topic);
-			if(topic.length>3){
-				if(topic.slice(0, 3)=="/kn"){
+			this.log("[topic] " + topic);
+			if (topic.length > 3) {
+				if (topic.slice(0, 3) == "/kn") {
 					topic = topic.slice(3);
 				}
 			}
-			if(this.attachPathList[topic]){
+			if (this.attachPathList[topic]) {
 				this.attachPathList[topic](evt);
 			}
 		}
-	}
-
-	this.subscribe = function(	topic /* kn_from in the old terminilogy */, 
-								toObj, toFunc, dontTellServer){
-		if(!this.isInitialized){
+	};
+	this.subscribe = function (topic, toObj, toFunc, dontTellServer) {
+		if (!this.isInitialized) {
 			this.subscriptionBacklog.push([topic, toObj, toFunc, dontTellServer]);
 			return;
 		}
-		if(!this.attachPathList[topic]){
-			this.attachPathList[topic] = function(){ return true; }
-			this.log("subscribing to: "+topic);
+		if (!this.attachPathList[topic]) {
+			this.attachPathList[topic] = function () {
+				return true;
+			};
+			this.log("subscribing to: " + topic);
 			this.topics.push(topic);
 		}
 		var revt = new dojo.io.repubsubEvent(this.tunnelURI, topic, "route");
-		var rstr = [this.serverBaseURL+"/kn", revt.toGetString()].join("");
-		dojo.event.kwConnect({
-			once: true,
-			srcObj: this.attachPathList, 
-			srcFunc: topic, 
-			adviceObj: toObj, 
-			adviceFunc: toFunc
-		});
-		// NOTE: the above is a local mapping, if we're not the leader, we
-		// 		 should connect our mapping to the topic handler of the peer
-		// 		 leader, this ensures that not matter what happens to the
-		// 		 leader, we don't really loose our heads if/when the leader
-		// 		 goes away.
-		if(!this.rcvNode){ /* this should be an error! */ }
-		if(dontTellServer){
+		var rstr = [this.serverBaseURL + "/kn", revt.toGetString()].join("");
+		dojo.event.kwConnect({once:true, srcObj:this.attachPathList, srcFunc:topic, adviceObj:toObj, adviceFunc:toFunc});
+		if (!this.rcvNode) {
+		}
+		if (dontTellServer) {
 			return;
 		}
-		this.log("sending subscription to: "+topic);
-		// create a subscription event object and give it all the props we need
-		// to updates on the specified topic
-
-		// FIXME: we should only enqueue if this is our first subscription!
+		this.log("sending subscription to: " + topic);
 		this.sendTopicSubToServer(topic, rstr);
-	}
-
-	this.sendTopicSubToServer = function(topic, str){
-		if(!this.attachPathList[topic]["subscriptions"]){
+	};
+	this.sendTopicSubToServer = function (topic, str) {
+		if (!this.attachPathList[topic]["subscriptions"]) {
 			this.enqueueEventStr(str);
 			this.attachPathList[topic].subscriptions = 0;
 		}
 		this.attachPathList[topic].subscriptions++;
-	}
-
-	this.unSubscribe = function(topic, toObj, toFunc){
-		// first, locally disconnect
-		dojo.event.kwDisconnect({
-			srcObj: this.attachPathList, 
-			srcFunc: topic, 
-			adviceObj: toObj, 
-			adviceFunc: toFunc
-		});
-		
-		// FIXME: figure out if there are any remaining listeners to the topic,
-		// 		  and if not, inform the server of our desire not to be
-		// 		  notified of updates to the topic
-	}
-
-	// the "publish" method is really a misnomer, since it really means "take
-	// this event and send it to the server". Note that the "dispatch" method
-	// handles local event promigulation, and therefore we emulate both sides
-	// of a real event router without having to swallow all of the complexity.
-	this.publish = function(topic, event){
+	};
+	this.unSubscribe = function (topic, toObj, toFunc) {
+		dojo.event.kwDisconnect({srcObj:this.attachPathList, srcFunc:topic, adviceObj:toObj, adviceFunc:toFunc});
+	};
+	this.publish = function (topic, event) {
 		var evt = dojo.io.repubsubEvent.initFromProperties(event);
-		// FIXME: need to make sure we have from and to set correctly
-		// 		  before we serialize and send off to the great blue
-		// 		  younder.
 		evt.to = topic;
-		// evt.from = this.tunnelURI;
-
 		var evtURLParts = [];
-		evtURLParts.push(this.serverBaseURL+"/kn");
-
-		// serialize the event to a string and then post it to the correct
-		// topic
+		evtURLParts.push(this.serverBaseURL + "/kn");
 		evtURLParts.push(evt.toGetString());
 		this.enqueueEventStr(evtURLParts.join(""));
-	}
-
-	this.enqueueEventStr = function(evtStr){
+	};
+	this.enqueueEventStr = function (evtStr) {
 		this.log("enqueueEventStr");
 		this.backlog.push(evtStr);
 		this.dequeueEvent();
-	}
-
-	this.dequeueEvent = function(force){
+	};
+	this.dequeueEvent = function (force) {
 		this.log("dequeueEvent");
-		if(this.backlog.length <= 0){ return; }
-		if((this.canSnd)||(force)){
-			dojo.io.setIFrameSrc(this.sndNode, this.backlog.shift()+"&callback=repubsub.sndNodeReady");
+		if (this.backlog.length <= 0) {
+			return;
+		}
+		if ((this.canSnd) || (force)) {
+			dojo.io.setIFrameSrc(this.sndNode, this.backlog.shift() + "&callback=repubsub.sndNodeReady");
 			this.canSnd = false;
-		}else{
+		} else {
 			this.log("sndNode not available yet!", "debug");
 		}
-	}
-}
-
-dojo.io.repubsubEvent = function(to, from, method, id, routeURI, payload, dispname, uid){
+	};
+};
+dojo.io.repubsubEvent = function (to, from, method, id, routeURI, payload, dispname, uid) {
 	this.to = to;
 	this.from = from;
-	this.method = method||"route";
-	this.id = id||repubsub.getRandStr();
+	this.method = method || "route";
+	this.id = id || repubsub.getRandStr();
 	this.uri = routeURI;
-	this.displayname = dispname||repubsub.displayname;
-	this.userid = uid||repubsub.userid;
-	this.payload = payload||"";
+	this.displayname = dispname || repubsub.displayname;
+	this.userid = uid || repubsub.userid;
+	this.payload = payload || "";
 	this.flushChars = 4096;
-
-	this.initFromProperties = function(evt){
-		if(evt.constructor = dojo.io.repubsubEvent){ 
-			for(var x in evt){
+	this.initFromProperties = function (evt) {
+		if (evt.constructor = dojo.io.repubsubEvent) {
+			for (var x in evt) {
 				this[x] = evt[x];
 			}
-		}else{
-			// we want to copy all the properties of the evt object, and transform
-			// those that are "stock" properties of dojo.io.repubsubEvent. All others should
-			// be copied as-is
-			for(var x in evt){
-				if(typeof this.forwardPropertiesMap[x] == "string"){
+		} else {
+			for (var x in evt) {
+				if (typeof this.forwardPropertiesMap[x] == "string") {
 					this[this.forwardPropertiesMap[x]] = evt[x];
-				}else{
+				} else {
 					this[x] = evt[x];
 				}
 			}
 		}
-	}
-
-	this.toGetString = function(noQmark){
-		var qs = [ ((noQmark) ? "" : "?") ];
-		for(var x=0; x<this.properties.length; x++){
+	};
+	this.toGetString = function (noQmark) {
+		var qs = [((noQmark) ? "" : "?")];
+		for (var x = 0; x < this.properties.length; x++) {
 			var tp = this.properties[x];
-			if(this[tp[0]]){
-				qs.push(tp[1]+"="+encodeURIComponent(String(this[tp[0]])));
+			if (this[tp[0]]) {
+				qs.push(tp[1] + "=" + encodeURIComponent(String(this[tp[0]])));
 			}
-			// FIXME: we need to be able to serialize non-stock properties!!!
 		}
 		return qs.join("&");
-	}
-
-}
-
-dojo.io.repubsubEvent.prototype.properties = [["from", "kn_from"], ["to", "kn_to"], 
-									["method", "do_method"], ["id", "kn_id"], 
-									["uri", "kn_uri"], 
-									["displayname", "kn_displayname"], 
-									["userid", "kn_userid"], 
-									["payload", "kn_payload"],
-									["flushChars", "kn_response_flush"],
-									["responseFormat", "kn_response_format"] ];
-
-// maps properties from their old names to their new names...
+	};
+};
+dojo.io.repubsubEvent.prototype.properties = [["from", "kn_from"], ["to", "kn_to"], ["method", "do_method"], ["id", "kn_id"], ["uri", "kn_uri"], ["displayname", "kn_displayname"], ["userid", "kn_userid"], ["payload", "kn_payload"], ["flushChars", "kn_response_flush"], ["responseFormat", "kn_response_format"]];
 dojo.io.repubsubEvent.prototype.forwardPropertiesMap = {};
-// ...and vice versa...
 dojo.io.repubsubEvent.prototype.reversePropertiesMap = {};
-
-// and we then populate them both from the properties list
-for(var x=0; x<dojo.io.repubsubEvent.prototype.properties.length; x++){
+for (var x = 0; x < dojo.io.repubsubEvent.prototype.properties.length; x++) {
 	var tp = dojo.io.repubsubEvent.prototype.properties[x];
 	dojo.io.repubsubEvent.prototype.reversePropertiesMap[tp[0]] = tp[1];
 	dojo.io.repubsubEvent.prototype.forwardPropertiesMap[tp[1]] = tp[0];
 }
-// static version of initFromProperties, creates new event and object and
-// returns it after init
-dojo.io.repubsubEvent.initFromProperties = function(evt){
+dojo.io.repubsubEvent.initFromProperties = function (evt) {
 	var eventObj = new dojo.io.repubsubEvent();
 	eventObj.initFromProperties(evt);
 	return eventObj;
-}
+};
 
+
 __CPAN_FILE__ src/io/IframeIO.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -83367,91 +57426,71 @@
 dojo.provide("dojo.io.IframeIO");
 dojo.require("dojo.io.BrowserIO");
 dojo.require("dojo.uri.*");
-
-// FIXME: is it possible to use the Google htmlfile hack to prevent the
-// background click with this transport?
-
-dojo.io.createIFrame = function(/*String*/fname, /*String*/onloadstr, /*String?*/uri){
-	//summary: Creates a hidden iframe in the page. Used mostly for data transports.
-	//fname: String
-	//		The name of the iframe. Used for the name attribute on the iframe.
-	//onloadstr: String
-	//		A string of Javascript that will be executed when the content in the iframe loads.
-	//uri: String
-	//		The value of the src attribute on the iframe element. If a value is not
-	//		given, then iframe_history.html will be used.
-	if(window[fname]){ return window[fname]; }
-	if(window.frames[fname]){ return window.frames[fname]; }
+dojo.io.createIFrame = function (fname, onloadstr, uri) {
+	if (window[fname]) {
+		return window[fname];
+	}
+	if (window.frames[fname]) {
+		return window.frames[fname];
+	}
 	var r = dojo.render.html;
 	var cframe = null;
-	var turi = uri||dojo.uri.dojoUri("iframe_history.html?noInit=true");
-	var ifrstr = ((r.ie)&&(dojo.render.os.win)) ? '<iframe name="'+fname+'" src="'+turi+'" onload="'+onloadstr+'">' : 'iframe';
+	var turi = uri;
+	if (!turi) {
+		if (djConfig["useXDomain"] && !djConfig["dojoIframeHistoryUrl"]) {
+			dojo.debug("dojo.io.createIFrame: When using cross-domain Dojo builds," + " please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl" + " to the path on your domain to iframe_history.html");
+		}
+		turi = (djConfig["dojoIframeHistoryUrl"] || dojo.uri.moduleUri("dojo", "../iframe_history.html")) + "#noInit=true";
+	}
+	var ifrstr = ((r.ie) && (dojo.render.os.win)) ? "<iframe name=\"" + fname + "\" src=\"" + turi + "\" onload=\"" + onloadstr + "\">" : "iframe";
 	cframe = document.createElement(ifrstr);
-	with(cframe){
+	with (cframe) {
 		name = fname;
 		setAttribute("name", fname);
 		id = fname;
 	}
 	dojo.body().appendChild(cframe);
 	window[fname] = cframe;
-
-	with(cframe.style){
-		if(!r.safari){
-			//We can't change the src in Safari 2.0.3 if absolute position. Bizarro.
+	with (cframe.style) {
+		if (!r.safari) {
 			position = "absolute";
 		}
 		left = top = "0px";
 		height = width = "1px";
 		visibility = "hidden";
-		/*
-		if(djConfig.isDebug){
-			position = "relative";
-			height = "300px";
-			width = "600px";
-			visibility = "visible";
-		}
-		*/
 	}
-
-	if(!r.ie){
+	if (!r.ie) {
 		dojo.io.setIFrameSrc(cframe, turi, true);
 		cframe.onload = new Function(onloadstr);
 	}
-	
 	return cframe;
-}
-
-dojo.io.IframeTransport = new function(){
-	//summary: The object that implements the dojo.io.bind transport that
-	//uses an iframe to communicate to the server.
+};
+dojo.io.IframeTransport = new function () {
 	var _this = this;
 	this.currentRequest = null;
 	this.requestQueue = [];
 	this.iframeName = "dojoIoIframe";
-
-	this.fireNextRequest = function(){
-		//summary: Internal method used to fire the next request in the bind queue.
-		try{
-			if((this.currentRequest)||(this.requestQueue.length == 0)){ return; }
-			// dojo.debug("fireNextRequest");
+	this.fireNextRequest = function () {
+		try {
+			if ((this.currentRequest) || (this.requestQueue.length == 0)) {
+				return;
+			}
 			var cr = this.currentRequest = this.requestQueue.shift();
 			cr._contentToClean = [];
 			var fn = cr["formNode"];
 			var content = cr["content"] || {};
-			if(cr.sendTransport) {
+			if (cr.sendTransport) {
 				content["dojo.transport"] = "iframe";
 			}
-			if(fn){
-				if(content){
-					// if we have things in content, we need to add them to the form
-					// before submission
-					for(var x in content){
-						if(!fn[x]){
+			if (fn) {
+				if (content) {
+					for (var x in content) {
+						if (!fn[x]) {
 							var tn;
-							if(dojo.render.html.ie){
-								tn = document.createElement("<input type='hidden' name='"+x+"' value='"+content[x]+"'>");
+							if (dojo.render.html.ie) {
+								tn = document.createElement("<input type='hidden' name='" + x + "' value='" + content[x] + "'>");
 								fn.appendChild(tn);
-							}else{
+							} else {
 								tn = document.createElement("input");
 								fn.appendChild(tn);
 								tn.type = "hidden";
@@ -83459,200 +57498,134 @@
 								tn.value = content[x];
 							}
 							cr._contentToClean.push(x);
-						}else{
+						} else {
 							fn[x].value = content[x];
 						}
 					}
 				}
-				if(cr["url"]){
+				if (cr["url"]) {
 					cr._originalAction = fn.getAttribute("action");
 					fn.setAttribute("action", cr.url);
 				}
-				if(!fn.getAttribute("method")){
+				if (!fn.getAttribute("method")) {
 					fn.setAttribute("method", (cr["method"]) ? cr["method"] : "post");
 				}
 				cr._originalTarget = fn.getAttribute("target");
 				fn.setAttribute("target", this.iframeName);
 				fn.target = this.iframeName;
 				fn.submit();
-			}else{
-				// otherwise we post a GET string by changing URL location for the
-				// iframe
+			} else {
 				var query = dojo.io.argsFromMap(this.currentRequest.content);
 				var tmpUrl = cr.url + (cr.url.indexOf("?") > -1 ? "&" : "?") + query;
 				dojo.io.setIFrameSrc(this.iframe, tmpUrl, true);
 			}
-		}catch(e){
+		}
+		catch (e) {
 			this.iframeOnload(e);
 		}
-	}
-
-	this.canHandle = function(/*dojo.io.Request*/kwArgs){
-		//summary: Tells dojo.io.bind() if this is a good transport to
-		//use for the particular type of request.
-		//description: This type of transport cannot
-		//handle text/xml or application/xml return types, is limited to GET
-		//or POST requests, and cannot do synchronous binds.
-		return (
-			(
-				dojo.lang.inArray([	"text/plain", "text/html", "text/javascript", "text/json", "application/json"], kwArgs["mimetype"])
-			)&&(
-				dojo.lang.inArray(["post", "get"], kwArgs["method"].toLowerCase())
-			)&&(
-				// never handle a sync request
-				!  ((kwArgs["sync"])&&(kwArgs["sync"] == true))
-			)
-		); //boolean
-	}
-
-	this.bind = function(/*dojo.io.Request*/kwArgs){
-		//summary: function that sends the request to the server.
-
-		//This transport can only process one bind request at a time, so if bind is called
-		//multiple times, it will queue up the calls and only process one at a time.
-		//The following are acceptable properties in kwArgs (in addition to the
-		//normal dojo.io.Request object properties).
-		//url: String: URL the server URL to use for the request.
-		//transport: String: specify "IframeTransport" to force the use of this transport.
-		//sendTransport: boolean: If true, then dojo.transport=iframe will be added to the request.
-		//formNode: DOMNode: a form element node. The form elements' names and values will be used in
-		//		the request. This makes it possible to upload files using this transport.
-		//method: String: the HTTP method to use. Must be GET or POST. Default is POST.
-		//mimetype: Specifies what format the result data should be given to the load/handle callback. Valid values are:
-		//		text/plain, text/html, text/javascript, text/json, application/json. IMPORTANT: For all values EXCEPT text/html,
-		//		The server response should be an HTML file with a textarea element. The response data should be inside the textarea
-		//		element. Using an HTML document the only reliable, cross-browser way this transport can know
-		//		when the response has loaded. For the text/html mimetype, just return a normal HTML document.
-		//content: Object: If a formNode is one of the other kwArgs properties, then the content
-		//		object properties become hidden form form elements. For instance, a content
-		//		object of {name1 : "value1"} is converted to a hidden form element with a name
-		//		of "name1" and a value of "value1". If there is not a formNode property, then
-		//		the content object is converted into a name=value&name=value string, by
-		//		using dojo.io.argsFromMap(). No encoding is passed to that method, so the
-		//		names and values will be encoded using dojo.string.encodeAscii().
-		if(!this["iframe"]){ this.setUpIframe(); }
+	};
+	this.canHandle = function (kwArgs) {
+		return ((dojo.lang.inArray(["text/plain", "text/html", "text/javascript", "text/json", "application/json"], kwArgs["mimetype"])) && (dojo.lang.inArray(["post", "get"], kwArgs["method"].toLowerCase())) && (!((kwArgs["sync"]) && (kwArgs["sync"] == true))));
+	};
+	this.bind = function (kwArgs) {
+		if (!this["iframe"]) {
+			this.setUpIframe();
+		}
 		this.requestQueue.push(kwArgs);
 		this.fireNextRequest();
 		return;
-	}
-
-	this.setUpIframe = function(){
-
-		// NOTE: IE 5.0 and earlier Mozilla's don't support an onload event for
-		//       iframes. OTOH, we don't care.
+	};
+	this.setUpIframe = function () {
 		this.iframe = dojo.io.createIFrame(this.iframeName, "dojo.io.IframeTransport.iframeOnload();");
-	}
-
-	this.iframeOnload = function(errorObject /* Object */){
-		if(!_this.currentRequest){
+	};
+	this.iframeOnload = function (errorObject) {
+		if (!_this.currentRequest) {
 			_this.fireNextRequest();
 			return;
 		}
-
 		var req = _this.currentRequest;
-
-		if(req.formNode){
-			// remove all the hidden content inputs
+		if (req.formNode) {
 			var toClean = req._contentToClean;
-			for(var i = 0; i < toClean.length; i++) {
+			for (var i = 0; i < toClean.length; i++) {
 				var key = toClean[i];
-				if(dojo.render.html.safari){
-					//In Safari (at least 2.0.3), can't use formNode[key] syntax to find the node,
-					//for nodes that were dynamically added.
+				if (dojo.render.html.safari) {
 					var fNode = req.formNode;
-					for(var j = 0; j < fNode.childNodes.length; j++){
+					for (var j = 0; j < fNode.childNodes.length; j++) {
 						var chNode = fNode.childNodes[j];
-						if(chNode.name == key){
+						if (chNode.name == key) {
 							var pNode = chNode.parentNode;
 							pNode.removeChild(chNode);
 							break;
 						}
 					}
-				}else{
+				} else {
 					var input = req.formNode[key];
 					req.formNode.removeChild(input);
 					req.formNode[key] = null;
 				}
 			}
-	
-			// restore original action + target
-			if(req["_originalAction"]){
+			if (req["_originalAction"]) {
 				req.formNode.setAttribute("action", req._originalAction);
 			}
-			if(req["_originalTarget"]){
+			if (req["_originalTarget"]) {
 				req.formNode.setAttribute("target", req._originalTarget);
 				req.formNode.target = req._originalTarget;
 			}
 		}
-
-		var contentDoc = function(iframe_el){
-			var doc = iframe_el.contentDocument || // W3
-				(
-					(iframe_el.contentWindow)&&(iframe_el.contentWindow.document)
-				) ||  // IE
-				(
-					(iframe_el.name)&&(document.frames[iframe_el.name])&&
-					(document.frames[iframe_el.name].document)
-				) || null;
+		var contentDoc = function (iframe_el) {
+			var doc = iframe_el.contentDocument || ((iframe_el.contentWindow) && (iframe_el.contentWindow.document)) || ((iframe_el.name) && (document.frames[iframe_el.name]) && (document.frames[iframe_el.name].document)) || null;
 			return doc;
 		};
-
 		var value;
 		var success = false;
-
-		if (errorObject){
-				this._callError(req, "IframeTransport Request Error: " + errorObject);
-		}else{
+		if (errorObject) {
+			this._callError(req, "IframeTransport Request Error: " + errorObject);
+		} else {
 			var ifd = contentDoc(_this.iframe);
-			// handle successful returns
-			// FIXME: how do we determine success for iframes? Is there an equiv of
-			// the "status" property?
-	
-			try{
+			try {
 				var cmt = req.mimetype;
-				if((cmt == "text/javascript")||(cmt == "text/json")||(cmt == "application/json")){
-					// FIXME: not sure what to do here? try to pull some evalulable
-					// text from a textarea or cdata section? 
-					// how should we set up the contract for that?
+				if ((cmt == "text/javascript") || (cmt == "text/json") || (cmt == "application/json")) {
 					var js = ifd.getElementsByTagName("textarea")[0].value;
-					if(cmt == "text/json" || cmt == "application/json") { js = "(" + js + ")"; }
+					if (cmt == "text/json" || cmt == "application/json") {
+						js = "(" + js + ")";
+					}
 					value = dj_eval(js);
-				}else if(cmt == "text/html"){
-					value = ifd;
-				}else{ // text/plain
-					value = ifd.getElementsByTagName("textarea")[0].value;
+				} else {
+					if (cmt == "text/html") {
+						value = ifd;
+					} else {
+						value = ifd.getElementsByTagName("textarea")[0].value;
+					}
 				}
 				success = true;
-			}catch(e){ 
-				// looks like we didn't get what we wanted!
+			}
+			catch (e) {
 				this._callError(req, "IframeTransport Error: " + e);
 			}
 		}
-
-		// don't want to mix load function errors with processing errors, thus
-		// a separate try..catch
 		try {
-			if(success && dojo.lang.isFunction(req["load"])){
+			if (success && dojo.lang.isFunction(req["load"])) {
 				req.load("load", value, req);
 			}
-		} catch(e) {
+		}
+		catch (e) {
 			throw e;
-		} finally {
+		}
+		finally {
 			_this.currentRequest = null;
 			_this.fireNextRequest();
 		}
-	}
-	
-	this._callError = function(req /* Object */, message /* String */){
+	};
+	this._callError = function (req, message) {
 		var errObj = new dojo.io.Error(message);
-		if(dojo.lang.isFunction(req["error"])){
+		if (dojo.lang.isFunction(req["error"])) {
 			req.error("error", errObj, req);
 		}
-	}
-
+	};
 	dojo.io.transports.addTransport("IframeTransport");
-}
+};
 
+
 __CPAN_FILE__ src/io/xip_client.html
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
@@ -83799,8 +57772,15 @@
 		var reqIndex = 0;
 
 		while((reqData.length - reqIndex) + urlLength > xipUrlLimit){
-			xipRequestParts.push(reqData.substring(reqIndex, reqIndex + partLength));
-			reqIndex += partLength;
+			var part = reqData.substring(reqIndex, reqIndex + partLength);
+			//Safari will do some extra hex escaping unless we keep the original hex
+			//escaping complete.
+			var percentIndex = part.lastIndexOf("%");
+			if(percentIndex == part.length - 1 || percentIndex == part.length - 2){
+				part = part.substring(0, percentIndex);
+			}
+			xipRequestParts.push(part);
+			reqIndex += part.length;
 		}
 		xipRequestParts.push(reqData.substring(reqIndex, reqData.length));
 		
@@ -83921,100 +57901,77 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.charting.Plot");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.charting.Axis");
-dojo.require("dojo.charting.Series");
-
-dojo.charting.RenderPlotSeries = { Singly:"single", Grouped:"grouped" };
-
-dojo.charting.Plot = function(
-	/* dojo.charting.Axis? */xaxis, 
-	/* dojo.charting.Axis? */yaxis, 
-	/* dojo.charting.Series[]? */series
-){
-	//	summary
-	//	Creates a new instance of a Plot (X/Y Axis + n Series).
-	var id = "dojo-charting-plot-"+dojo.charting.Plot.count++;
-	this.getId=function(){ return id; };
-	this.setId=function(key){ id = key; };
-	this.axisX = null;
-	this.axisY = null;
-	this.series = [];
-	this.dataNode = null;
-
-	//	for bar charts, pie charts and stacked charts, change to Grouped.
-	this.renderType = dojo.charting.RenderPlotSeries.Singly;
-	if(xaxis){
-		this.setAxis(xaxis,"x");
-	}
-	if(yaxis){
-		this.setAxis(yaxis,"y");
-	}
-	if(series){
-		for(var i=0; i<series.length; i++){ this.addSeries(series[i]); }
-	}
-}
-dojo.charting.Plot.count=0;
-
-dojo.extend(dojo.charting.Plot, {
-	addSeries: function(
-		/* dojo.charting.Series || object */series,
-		/* function? */plotter
-	){
-		//	summary
-		//	Add a new Series to this plot.  Can take the form of a Series, or an object
-		//	of the form { series, plotter }
-		if(series.plotter){
-			this.series.push(series);
-		} else {
-			this.series.push({
-				data: series,
-				plotter: plotter || dojo.charting.Plotters["Default"]
-			});
-		}
-	},
-	setAxis: function(/* dojo.charting.Axis */axis, /* string */which){
-		//	summary
-		//	Set the axis on which plane.
-		if(which.toLowerCase()=="x"){ this.axisX = axis; }
-		else if(which.toLowerCase()=="y"){ this.axisY = axis; }
-	},
-	getRanges: function(){
-		//	summary
-		//	set the ranges on these axes.
-		var xmin, xmax, ymin, ymax;
-		xmin=ymin=Number.MAX_VALUE;
-		xmax=ymax=Number.MIN_VALUE;
-		for(var i=0; i<this.series.length; i++){
-			var values = this.series[i].data.evaluate();	//	full data range.
-			for(var j=0; j<values.length; j++){
-				var comp=values[j];
-				xmin=Math.min(comp.x, xmin);
-				ymin=Math.min(comp.y, ymin);
-				xmax=Math.max(comp.x, xmax);
-				ymax=Math.max(comp.y, ymax);
-			}
-		}
-		return {
-			x:{ upper: xmax, lower:xmin },
-			y:{ upper: ymax, lower:ymin },
-			toString:function(){
-				return "[ x:"+xmax+" - "+xmin+", y:"+ymax+" - "+ymin+"]";
-			}
-		};	//	object
-	},
-	destroy: function(){
-		//	summary
-		//	Clean out any existing DOM node references.
-		var node=this.dataNode;
-		while(node && node.childNodes && node.childNodes.length > 0){
-			node.removeChild(node.childNodes[0]);
-		}
-		this.dataNode=null;
-	}
-});
+dojo.provide("dojo.charting.Plot");
+dojo.require("dojo.lang.common");
+dojo.require("dojo.charting.Axis");
+dojo.require("dojo.charting.Series");
+dojo.charting.RenderPlotSeries = {Singly:"single", Grouped:"grouped"};
+dojo.charting.Plot = function (xaxis, yaxis, series) {
+	var id = "dojo-charting-plot-" + dojo.charting.Plot.count++;
+	this.getId = function () {
+		return id;
+	};
+	this.setId = function (key) {
+		id = key;
+	};
+	this.axisX = null;
+	this.axisY = null;
+	this.series = [];
+	this.dataNode = null;
+	this.renderType = dojo.charting.RenderPlotSeries.Singly;
+	if (xaxis) {
+		this.setAxis(xaxis, "x");
+	}
+	if (yaxis) {
+		this.setAxis(yaxis, "y");
+	}
+	if (series) {
+		for (var i = 0; i < series.length; i++) {
+			this.addSeries(series[i]);
+		}
+	}
+};
+dojo.charting.Plot.count = 0;
+dojo.extend(dojo.charting.Plot, {addSeries:function (series, plotter) {
+	if (series.plotter) {
+		this.series.push(series);
+	} else {
+		this.series.push({data:series, plotter:plotter || dojo.charting.Plotters["Default"]});
+	}
+}, setAxis:function (axis, which) {
+	if (which.toLowerCase() == "x") {
+		this.axisX = axis;
+	} else {
+		if (which.toLowerCase() == "y") {
+			this.axisY = axis;
+		}
+	}
+}, getRanges:function () {
+	var xmin, xmax, ymin, ymax;
+	xmin = ymin = Number.MAX_VALUE;
+	xmax = ymax = Number.MIN_VALUE;
+	for (var i = 0; i < this.series.length; i++) {
+		var values = this.series[i].data.evaluate();
+		for (var j = 0; j < values.length; j++) {
+			var comp = values[j];
+			xmin = Math.min(comp.x, xmin);
+			ymin = Math.min(comp.y, ymin);
+			xmax = Math.max(comp.x, xmax);
+			ymax = Math.max(comp.y, ymax);
+		}
+	}
+	return {x:{upper:xmax, lower:xmin}, y:{upper:ymax, lower:ymin}, toString:function () {
+		return "[ x:" + xmax + " - " + xmin + ", y:" + ymax + " - " + ymin + "]";
+	}};
+}, destroy:function () {
+	var node = this.dataNode;
+	while (node && node.childNodes && node.childNodes.length > 0) {
+		node.removeChild(node.childNodes[0]);
+	}
+	this.dataNode = null;
+}});
 
+
 __CPAN_FILE__ src/charting/README.txt
 Dojo Charting Engine
 =========================================================================
@@ -84073,192 +58030,132 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.charting.PlotArea");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.gfx.color");
-dojo.require("dojo.gfx.color.hsl");
-dojo.require("dojo.charting.Plot");
-
-dojo.charting.PlotArea = function(){
-	//	summary
-	//	Creates a new PlotArea for drawing onto a Chart.
-	var id="dojo-charting-plotarea-"+dojo.charting.PlotArea.count++;
-	this.getId=function(){ return id; };
-	this.setId=function(key){ id = key; };
-	this.areaType = "standard"; 	//	standard || radar
-	this.plots = [];	//	plots that will be drawn on this area
-
-	this.size={ width:600, height:400 };
-	this.padding={ top:10, right:10, bottom:20, left:20 };
-
-	//	drawing node references.
-	this.nodes = {
-		main:null,
-		area:null,
-		background: null,
-		axes: null,
-		plots: null
-	};
-
-	//	this is preset for a limited color range (green to purple), 
-	//	anticipating a max of 32 series on this plot area.
-	//	if you need more flexibility, override these numbers.
-	this._color = { h: 140, s: 120, l: 120, step: 27 };
-};
-dojo.charting.PlotArea.count = 0;
-
-dojo.extend(dojo.charting.PlotArea, {
-	nextColor: function(){
-		//	summary
-		//	Advances the internal HSV cursor and returns the next generated color.
-		var rgb=dojo.gfx.color.hsl2rgb(this._color.h, this._color.s, this._color.l);
-		this._color.h = (this._color.h + this._color.step)%360;
-		while(this._color.h < 140){ 
-			this._color.h += this._color.step; 
-		}
-		return dojo.gfx.color.rgb2hex(rgb[0], rgb[1], rgb[2]);	//	string
-	},
-	getArea:function(){
-		//	summary
-		//	Return an object describing the coordinates of the available area to plot on.
-		return {
-			left: this.padding.left,
-			right: this.size.width - this.padding.right,
-			top: this.padding.top,
-			bottom: this.size.height - this.padding.bottom,
-			toString:function(){ 
-				var a=[ this.top, this.right, this.bottom, this.left ];
-				return "["+a.join()+"]";
-			}
-		};	//	object
-	},
-	getAxes: function(){
-		//	summary
-		//	get the unique axes for this plot area.
-		var axes={};
-		for(var i=0; i<this.plots.length; i++){
-			var plot=this.plots[i];
-			axes[plot.axisX.getId()] = {
-				axis: plot.axisX,
-				drawAgainst: plot.axisY,
-				plot: plot,
-				plane: "x"
-			};
-			axes[plot.axisY.getId()] = {
-				axis: plot.axisY,
-				drawAgainst: plot.axisX,
-				plot: plot,
-				plane: "y"
-			};
-		}
-		return axes;	//	object 
-	},
-	getLegendInfo: function(){
-		//	summary
-		//	return an array describing all data series on this plot area.
-		var a=[];
-		for(var i=0; i<this.plots.length; i++){
-			for(var j=0; j<this.plots[i].series.length; j++){
-				var data = this.plots[i].series[j].data;
-				a.push({ label:data.label, color:data.color });
-			}
-		}
-		return a;	//	array
-	},
-	setAxesRanges: function(){
-		//	summary
-		//	Find and set the ranges on all axes on this plotArea.
-		//	We do this because plots may have axes in common; if you
-		//	want to use this, make sure you do it *before* initialization.
-		var ranges={};
-		var axes={};
-		for(var i=0; i<this.plots.length; i++){
-			var plot = this.plots[i];
-			var ranges=plot.getRanges();
-			var x=ranges.x;
-			var y=ranges.y;
-			var ax, ay;
-			if(!axes[plot.axisX.getId()]){
-				axes[plot.axisX.getId()]=plot.axisX;
-				ranges[plot.axisX.getId()]={upper: x.upper, lower:x.lower};
-			}
-			ax=ranges[plot.axisX.getId()];
-			ax.upper=Math.max(ax.upper, x.upper);
-			ax.lower=Math.min(ax.lower, x.lower);
-
-			if(!axes[plot.axisY.getId()]){
-				axes[plot.axisY.getId()]=plot.axisY;
-				ranges[plot.axisY.getId()]={upper: y.upper, lower:y.lower};
-			}
-			ay=ranges[plot.axisY.getId()];
-			ay.upper=Math.max(ay.upper, y.upper);
-			ay.lower=Math.min(ay.lower, y.lower);
-		}
-		
-		//	now that we have all the max/min ranges, set the axes
-		for(var p in axes){
-			axes[p].range=ranges[p];
-		}
-	},
-
-	render: function(/* object? */kwArgs, /* function? */applyToData){
-		//	summary
-		//	Render this plotArea.  Optional kwArgs are the same as that taken for Series.evaluate;
-		//	applyToData is a callback function used by plotters for customization.
-		if(!this.nodes.main
-			|| !this.nodes.area 
-			|| !this.nodes.background 
-			|| !this.nodes.plots 
-			|| !this.nodes.axes
-		){ this.initialize(); }
-
-		//	plot it.
-		for(var i=0; i<this.plots.length; i++){
-			var plot=this.plots[i];
-			this.nodes.plots.removeChild(plot.dataNode);
-			var target = this.initializePlot(plot);
-			switch(plot.renderType){
-				case dojo.charting.RenderPlotSeries.Grouped:	{
-					// ALWAYS plot using the first plotter, ignore any others.
-					if(plot.series[0]){
-						target.appendChild(plot.series[0].plotter(this, plot, kwArgs, applyToData));
-					}
-					break;
-				}
-				case dojo.charting.RenderPlotSeries.Singly:
-				default: {
-					for(var j=0; j<plot.series.length; j++){
-						var series = plot.series[j];
-						var data = series.data.evaluate(kwArgs);
-						target.appendChild(series.plotter(data, this, plot, applyToData));
-					}
-				}
-			}
-			this.nodes.plots.appendChild(target);
-		}
-	},
-	destroy: function(){
-		//	summary
-		//	Clean out any existing DOM references.
-		for(var i=0; i<this.plots.length; i++){
-			this.plots[i].destroy();
-		};
-		//	clean out any child nodes.
-		for(var p in this.nodes){
-			var node=this.nodes[p];
-			if(!node) continue;
-			if(!node.childNodes) continue;
-			while(node.childNodes.length > 0){ 
-				node.removeChild(node.childNodes[0]); 
-			}
-			this.nodes[p]=null;
-		}
-	}
-});
-
-dojo.requireIf(dojo.render.svg.capable, "dojo.charting.svg.PlotArea");
-dojo.requireIf(dojo.render.vml.capable, "dojo.charting.vml.PlotArea");
+dojo.provide("dojo.charting.PlotArea");
+dojo.require("dojo.lang.common");
+dojo.require("dojo.gfx.color");
+dojo.require("dojo.gfx.color.hsl");
+dojo.require("dojo.charting.Plot");
+dojo.charting.PlotArea = function () {
+	var id = "dojo-charting-plotarea-" + dojo.charting.PlotArea.count++;
+	this.getId = function () {
+		return id;
+	};
+	this.setId = function (key) {
+		id = key;
+	};
+	this.areaType = "standard";
+	this.plots = [];
+	this.size = {width:600, height:400};
+	this.padding = {top:10, right:10, bottom:20, left:20};
+	this.nodes = {main:null, area:null, background:null, axes:null, plots:null};
+	this._color = {h:140, s:120, l:120, step:27};
+};
+dojo.charting.PlotArea.count = 0;
+dojo.extend(dojo.charting.PlotArea, {nextColor:function () {
+	var rgb = dojo.gfx.color.hsl2rgb(this._color.h, this._color.s, this._color.l);
+	this._color.h = (this._color.h + this._color.step) % 360;
+	while (this._color.h < 140) {
+		this._color.h += this._color.step;
+	}
+	return dojo.gfx.color.rgb2hex(rgb[0], rgb[1], rgb[2]);
+}, getArea:function () {
+	return {left:this.padding.left, right:this.size.width - this.padding.right, top:this.padding.top, bottom:this.size.height - this.padding.bottom, toString:function () {
+		var a = [this.top, this.right, this.bottom, this.left];
+		return "[" + a.join() + "]";
+	}};
+}, getAxes:function () {
+	var axes = {};
+	for (var i = 0; i < this.plots.length; i++) {
+		var plot = this.plots[i];
+		axes[plot.axisX.getId()] = {axis:plot.axisX, drawAgainst:plot.axisY, plot:plot, plane:"x"};
+		axes[plot.axisY.getId()] = {axis:plot.axisY, drawAgainst:plot.axisX, plot:plot, plane:"y"};
+	}
+	return axes;
+}, getLegendInfo:function () {
+	var a = [];
+	for (var i = 0; i < this.plots.length; i++) {
+		for (var j = 0; j < this.plots[i].series.length; j++) {
+			var data = this.plots[i].series[j].data;
+			a.push({label:data.label, color:data.color});
+		}
+	}
+	return a;
+}, setAxesRanges:function () {
+	var ranges = {};
+	var axes = {};
+	for (var i = 0; i < this.plots.length; i++) {
+		var plot = this.plots[i];
+		var ranges = plot.getRanges();
+		var x = ranges.x;
+		var y = ranges.y;
+		var ax, ay;
+		if (!axes[plot.axisX.getId()]) {
+			axes[plot.axisX.getId()] = plot.axisX;
+			ranges[plot.axisX.getId()] = {upper:x.upper, lower:x.lower};
+		}
+		ax = ranges[plot.axisX.getId()];
+		ax.upper = Math.max(ax.upper, x.upper);
+		ax.lower = Math.min(ax.lower, x.lower);
+		if (!axes[plot.axisY.getId()]) {
+			axes[plot.axisY.getId()] = plot.axisY;
+			ranges[plot.axisY.getId()] = {upper:y.upper, lower:y.lower};
+		}
+		ay = ranges[plot.axisY.getId()];
+		ay.upper = Math.max(ay.upper, y.upper);
+		ay.lower = Math.min(ay.lower, y.lower);
+	}
+	for (var p in axes) {
+		axes[p].range = ranges[p];
+	}
+}, render:function (kwArgs, applyToData) {
+	if (!this.nodes.main || !this.nodes.area || !this.nodes.background || !this.nodes.plots || !this.nodes.axes) {
+		this.initialize();
+	}
+	this.resize();
+	for (var i = 0; i < this.plots.length; i++) {
+		var plot = this.plots[i];
+		if (plot.dataNode) {
+			this.nodes.plots.removeChild(plot.dataNode);
+		}
+		var target = this.initializePlot(plot);
+		switch (plot.renderType) {
+		  case dojo.charting.RenderPlotSeries.Grouped:
+			if (plot.series[0]) {
+				target.appendChild(plot.series[0].plotter(this, plot, kwArgs, applyToData));
+			}
+			break;
+		  case dojo.charting.RenderPlotSeries.Singly:
+		  default:
+			for (var j = 0; j < plot.series.length; j++) {
+				var series = plot.series[j];
+				var data = series.data.evaluate(kwArgs);
+				target.appendChild(series.plotter(data, this, plot, applyToData));
+			}
+		}
+		this.nodes.plots.appendChild(target);
+	}
+}, destroy:function () {
+	for (var i = 0; i < this.plots.length; i++) {
+		this.plots[i].destroy();
+	}
+	for (var p in this.nodes) {
+		var node = this.nodes[p];
+		if (!node) {
+			continue;
+		}
+		if (!node.childNodes) {
+			continue;
+		}
+		while (node.childNodes.length > 0) {
+			node.removeChild(node.childNodes[0]);
+		}
+		this.nodes[p] = null;
+	}
+}});
+dojo.requireIf(dojo.render.svg.capable, "dojo.charting.svg.PlotArea");
+dojo.requireIf(dojo.render.vml.capable, "dojo.charting.vml.PlotArea");
 
+
 __CPAN_FILE__ src/charting/Series.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -84270,212 +58167,189 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.charting.Series");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.charting.Plotters");
-
-dojo.charting.Series = function(/* object? */kwArgs){
-	//	summary
-	//	Create an instance of data series for plotting.
-	var args = kwArgs || { length:1 };
-	this.dataSource = args.dataSource || null;
-	this.bindings = { };
-	this.color = args.color;
-	this.label = args.label;
-
-	if(args.bindings){
-		for(var p in args.bindings){
-			this.addBinding(p, args.bindings[p]);
-		}
-	}
-};
-
-dojo.extend(dojo.charting.Series, {
-	bind:function(/* dojo.collections.Store */src, /* object */bindings){
-		//	summary
-		//	Bind this series to src, with bindings.
-		this.dataSource = src;
-		this.bindings = bindings;
-	},
-	addBinding:function(/* string */name, /* string */binding){
-		//	summary
-		//	Bind to field "binding" using "name".
-		this.bindings[name] = binding;
-	},
-	evaluate:function(/* object? */kwArgs){
-		//	summary
-		//	Evaluate all bindings and return an array of objects describing the bind.
-		var ret = [];
-		var a = this.dataSource.getData();
-		var l = a.length;
-		var start = 0;
-		var end = l;
-		
-		/*	Allow for ranges.  Can be done in one of two ways:
-		 *	1. { from, to } as 0-based indices
-		 *	2. { length } as num of data points to get; a negative
-		 *		value will start from the end of the data set.
-		 *	No kwArg object means the full data set will be evaluated
-		 *		and returned.
-		 */
-		if(kwArgs){
-			if(kwArgs.from){ 
-				start = Math.max(kwArgs.from,0);
-				if(kwArgs.to){ 
-					end = Math.min(kwArgs.to, end);
-				}
-			}
-			else if(kwArgs.length){
-				if(kwArgs.length < 0){
-					//	length points from end
-					start = Math.max((end + length),0);
-				} else {
-					end = Math.min((start + length), end);
-				}
-			}
-		}
-
-		for(var i=start; i<end; i++){
-			var o = { src: a[i], series: this };
-			for(var p in this.bindings){
-				o[p] = this.dataSource.getField(a[i], this.bindings[p]);
-			}
-			ret.push(o);
-		}
-
-		//	sort by the x axis, if available.
-		if(typeof(ret[0].x) != "undefined"){
-			ret.sort(function(a,b){
-				if(a.x > b.x) return 1;
-				if(a.x < b.x) return -1;
-				return 0;
-			});
-		}
-		return ret;	//	array
-	},
-
-	//	trends
-	trends:{
-		createRange: function(/* array */values, /* int */len){
-			//	summary
-			//	Creates the data range used for all trends.
-			var idx = values.length-1;
-			var length = (len||values.length);
-			return { "index": idx, "length": length, "start":Math.max(idx-length,0) };	//	object
-		},
-
-		mean: function(/* array */values, /* int */len){
-			//	summary
-			//	Returns the mean or average over the set of values.
-			var range = this.createRange(values, len);
-			if(range.index<0){ return 0; }
-			var total = 0;
-			var count = 0;
-			for(var i=range.index; i>=range.start; i--){
-				total += values[i].y; 
-				count++;
-			}
-			total /= Math.max(count,1);
-			return total;	//	float
-		},
-
-		variance: function(/* array */values,/* int */len){
-			//	summary
-			//	Returns the variance of the set of values.
-			var range = this.createRange(values,len);
-			if(range.index < 0){ return 0; }
-			var total = 0;
-			var square = 0;
-			var count = 0;
-			for(var i=range.index; i>=range.start; i--){
-				total += values[i].y;
-				square += Math.pow(values[i].y, 2);
-				count++;
-			}
-			return (square/count)-Math.pow(total/count,2);	//	float
-		},
-
-		standardDeviation: function(/* array */values, /* int */len){
-			//	summary
-			//	Returns the standard deviation of the set of values.
-			return Math.sqrt(this.getVariance(values, len));	//	float
-		},
-
-		max: function(/* array */values, /* int */len){
-			//	summary
-			//	Returns the max number in the set of values.
-			var range = this.createRange(values, len);
-			if(range.index < 0){ return 0; }
-			var max = Number.MIN_VALUE;
-			for (var i=range.index; i>=range.start; i--){
-				max = Math.max(values[i].y,max);
-			}
-			return max;	//	float
-		},
-
-		min: function(/* array */values, /* int */len){
-			//	summary
-			//	Returns the lowest number in the set of values.
-			var range=this.createRange(values, len);
-			if(range.index < 0){ return 0; }
-			var min = Number.MAX_VALUE;
-			for(var i=range.index; i>=range.start; i--){
-				min = Math.min(values[i].y, min);
-			}
-			return min;	//	float
-		},
-
-		median: function(/* array */values, /* int */len){
-			//	summary
-			//	Returns the median in the set of values (number closest to the middle of a sorted set).
-			var range = this.createRange(values, len);
-			if(range.index<0){ return 0; }
-			var a = [];
-			for (var i=range.index; i>=range.start; i--){
-				var b=false;
-				for(var j=0; j<a.length; j++){
-					if(values[i].y == a[j]){
-						b = true;
-						break;
-					}
-				}
-				if(!b){ 
-					a.push(values[i].y); 
-				}
-			}
-			a.sort();
-			if(a.length > 0){ 
-				return a[Math.ceil(a.length / 2)]; 	//	float
-			}
-			return 0;	//	float
-		},
-
-		mode: function(/* array */values, /* int */len){
-			//	summary
-			//	Returns the mode in the set of values
-			var range=this.createRange(values, len);
-			if(range.index<0){ return 0; }
-			var o = {};
-			var ret = 0
-			var median = Number.MIN_VALUE;
-			for(var i=range.index; i>=range.start; i--){
-				if (!o[values[i].y]){
-					o[values[i].y] = 1;
-				} else { 
-					o[values[i].y]++;
-				}
-			}
-			for(var p in o){
-				if(median < o[p]){ 
-					median = o[p]; 
-					ret=p; 
-				}
-			}
-			return ret;
-		}
-	}
-});
+dojo.provide("dojo.charting.Series");
+dojo.require("dojo.lang.common");
+dojo.require("dojo.charting.Plotters");
+dojo.charting.Series = function (kwArgs) {
+	var args = kwArgs || {length:1};
+	this.dataSource = args.dataSource || null;
+	this.bindings = {};
+	this.color = args.color;
+	this.label = args.label;
+	if (args.bindings) {
+		for (var p in args.bindings) {
+			this.addBinding(p, args.bindings[p]);
+		}
+	}
+};
+dojo.extend(dojo.charting.Series, {bind:function (src, bindings) {
+	this.dataSource = src;
+	this.bindings = bindings;
+}, addBinding:function (name, binding) {
+	this.bindings[name] = binding;
+}, evaluate:function (kwArgs) {
+	var ret = [];
+	var a = this.dataSource.getData();
+	var l = a.length;
+	var start = 0;
+	var end = l;
+	if (kwArgs) {
+		if (kwArgs.between) {
+			for (var i = 0; i < l; i++) {
+				var fld = this.dataSource.getField(a[i], kwArgs.between.field);
+				if (fld >= kwArgs.between.low && fld <= kwArgs.between.high) {
+					var o = {src:a[i], series:this};
+					for (var p in this.bindings) {
+						o[p] = this.dataSource.getField(a[i], this.bindings[p]);
+					}
+					ret.push(o);
+				}
+			}
+		} else {
+			if (kwArgs.from || kwArgs.length) {
+				if (kwArgs.from) {
+					start = Math.max(kwArgs.from, 0);
+					if (kwArgs.to) {
+						end = Math.min(kwArgs.to, end);
+					}
+				} else {
+					if (kwArgs.length < 0) {
+						start = Math.max((end + length), 0);
+					} else {
+						end = Math.min((start + length), end);
+					}
+				}
+				for (var i = start; i < end; i++) {
+					var o = {src:a[i], series:this};
+					for (var p in this.bindings) {
+						o[p] = this.dataSource.getField(a[i], this.bindings[p]);
+					}
+					ret.push(o);
+				}
+			}
+		}
+	} else {
+		for (var i = start; i < end; i++) {
+			var o = {src:a[i], series:this};
+			for (var p in this.bindings) {
+				o[p] = this.dataSource.getField(a[i], this.bindings[p]);
+			}
+			ret.push(o);
+		}
+	}
+	if (ret.length > 0 && typeof (ret[0].x) != "undefined") {
+		ret.sort(function (a, b) {
+			if (a.x > b.x) {
+				return 1;
+			}
+			if (a.x < b.x) {
+				return -1;
+			}
+			return 0;
+		});
+	}
+	return ret;
+}, trends:{createRange:function (values, len) {
+	var idx = values.length - 1;
+	var length = (len || values.length);
+	return {"index":idx, "length":length, "start":Math.max(idx - length, 0)};
+}, mean:function (values, len) {
+	var range = this.createRange(values, len);
+	if (range.index < 0) {
+		return 0;
+	}
+	var total = 0;
+	var count = 0;
+	for (var i = range.index; i >= range.start; i--) {
+		total += values[i].y;
+		count++;
+	}
+	total /= Math.max(count, 1);
+	return total;
+}, variance:function (values, len) {
+	var range = this.createRange(values, len);
+	if (range.index < 0) {
+		return 0;
+	}
+	var total = 0;
+	var square = 0;
+	var count = 0;
+	for (var i = range.index; i >= range.start; i--) {
+		total += values[i].y;
+		square += Math.pow(values[i].y, 2);
+		count++;
+	}
+	return (square / count) - Math.pow(total / count, 2);
+}, standardDeviation:function (values, len) {
+	return Math.sqrt(this.getVariance(values, len));
+}, max:function (values, len) {
+	var range = this.createRange(values, len);
+	if (range.index < 0) {
+		return 0;
+	}
+	var max = Number.MIN_VALUE;
+	for (var i = range.index; i >= range.start; i--) {
+		max = Math.max(values[i].y, max);
+	}
+	return max;
+}, min:function (values, len) {
+	var range = this.createRange(values, len);
+	if (range.index < 0) {
+		return 0;
+	}
+	var min = Number.MAX_VALUE;
+	for (var i = range.index; i >= range.start; i--) {
+		min = Math.min(values[i].y, min);
+	}
+	return min;
+}, median:function (values, len) {
+	var range = this.createRange(values, len);
+	if (range.index < 0) {
+		return 0;
+	}
+	var a = [];
+	for (var i = range.index; i >= range.start; i--) {
+		var b = false;
+		for (var j = 0; j < a.length; j++) {
+			if (values[i].y == a[j]) {
+				b = true;
+				break;
+			}
+		}
+		if (!b) {
+			a.push(values[i].y);
+		}
+	}
+	a.sort();
+	if (a.length > 0) {
+		return a[Math.ceil(a.length / 2)];
+	}
+	return 0;
+}, mode:function (values, len) {
+	var range = this.createRange(values, len);
+	if (range.index < 0) {
+		return 0;
+	}
+	var o = {};
+	var ret = 0;
+	var median = Number.MIN_VALUE;
+	for (var i = range.index; i >= range.start; i--) {
+		if (!o[values[i].y]) {
+			o[values[i].y] = 1;
+		} else {
+			o[values[i].y]++;
+		}
+	}
+	for (var p in o) {
+		if (median < o[p]) {
+			median = o[p];
+			ret = p;
+		}
+	}
+	return ret;
+}}});
 
+
 __CPAN_FILE__ src/charting/Chart.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -84487,82 +58361,59 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.charting.Chart");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.charting.PlotArea");
-
-dojo.charting.Chart = function(
-	/* HTMLElement? */node, 
-	/* string? */title, 
-	/* string? */description
-){
-	//	summary
-	//	Create the basic Chart object.
-	this.node = node || null;
-	this.title = title || "Chart";			//	pure string.
-	this.description = description || "";	//	HTML is allowed.
-	this.plotAreas = [];
-};
-
-dojo.extend(dojo.charting.Chart, {
-	//	methods
-	addPlotArea: function(/* object */obj, /* bool? */doRender){
-		//	summary
-		//	Add a PlotArea to this chart; object should be in the
-		//	form of: { plotArea, (x, y) or (top, left) }
-		if(obj.x!=null && obj.left==null){ obj.left = obj.x; }
-		if(obj.y!=null && obj.top==null){ obj.top = obj.y; }
-		this.plotAreas.push(obj);
-		if(doRender){ this.render(); }
-	},
-	
-	//	events
-	onInitialize:function(chart){ },
-	onRender:function(chart){ },
-	onDestroy:function(chart){ },
-
-	//	standard build methods
-	initialize: function(){
-		//	summary
-		//	Initialize the Chart by rendering it.
-		if(!this.node){ 
-			dojo.raise("dojo.charting.Chart.initialize: there must be a root node defined for the Chart."); 
-		}
-		this.destroy();
-		this.render();
-		this.onInitialize(this);
-	},
-	render:function(){
-		//	summary
-		//	Render the chart in its entirety.
-		if(this.node.style.position != "absolute"){
-			this.node.style.position = "relative";
-		}
-		for(var i=0; i<this.plotAreas.length; i++){
-			var area = this.plotAreas[i].plotArea;
-			var node = area.initialize();
-			node.style.position = "absolute";
-			node.style.top = this.plotAreas[i].top + "px";
-			node.style.left = this.plotAreas[i].left + "px";
-			this.node.appendChild(node);
-			area.render();
-		}
-	},
-	destroy: function(){
-		//	summary
-		//	Destroy any nodes that have maintained references.
-
-		//	kill any existing plotAreas
-		for(var i=0; i<this.plotAreas.length; i++){
-			this.plotAreas[i].plotArea.destroy();
-		};
-		//	clean out any child nodes.
-		while(this.node && this.node.childNodes && this.node.childNodes.length > 0){ 
-			this.node.removeChild(this.node.childNodes[0]); 
-		}
-	}
-});
+dojo.provide("dojo.charting.Chart");
+dojo.require("dojo.lang.common");
+dojo.require("dojo.charting.PlotArea");
+dojo.charting.Chart = function (node, title, description) {
+	this.node = node || null;
+	this.title = title || "Chart";
+	this.description = description || "";
+	this.plotAreas = [];
+};
+dojo.extend(dojo.charting.Chart, {addPlotArea:function (obj, doRender) {
+	if (obj.x != null && obj.left == null) {
+		obj.left = obj.x;
+	}
+	if (obj.y != null && obj.top == null) {
+		obj.top = obj.y;
+	}
+	this.plotAreas.push(obj);
+	if (doRender) {
+		this.render();
+	}
+}, onInitialize:function (chart) {
+}, onRender:function (chart) {
+}, onDestroy:function (chart) {
+}, initialize:function () {
+	if (!this.node) {
+		dojo.raise("dojo.charting.Chart.initialize: there must be a root node defined for the Chart.");
+	}
+	this.destroy();
+	this.render();
+	this.onInitialize(this);
+}, render:function () {
+	if (this.node.style.position != "absolute") {
+		this.node.style.position = "relative";
+	}
+	for (var i = 0; i < this.plotAreas.length; i++) {
+		var area = this.plotAreas[i].plotArea;
+		var node = area.initialize();
+		node.style.position = "absolute";
+		node.style.top = this.plotAreas[i].top + "px";
+		node.style.left = this.plotAreas[i].left + "px";
+		this.node.appendChild(node);
+		area.render();
+	}
+}, destroy:function () {
+	for (var i = 0; i < this.plotAreas.length; i++) {
+		this.plotAreas[i].plotArea.destroy();
+	}
+	while (this.node && this.node.childNodes && this.node.childNodes.length > 0) {
+		this.node.removeChild(this.node.childNodes[0]);
+	}
+}});
 
+
 __CPAN_FILE__ src/charting/Plotters.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -84574,16 +58425,11 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.charting.Plotters");
-
-/*	
- *	Plotters is the placeholder; what will happen is that the proper renderer types
- *	will be mixed into this object (as opposed to creating a new one).
- */
-
-dojo.requireIf(dojo.render.svg.capable, "dojo.charting.svg.Plotters");
-dojo.requireIf(dojo.render.vml.capable, "dojo.charting.vml.Plotters");
+dojo.provide("dojo.charting.Plotters");
+dojo.requireIf(dojo.render.svg.capable, "dojo.charting.svg.Plotters");
+dojo.requireIf(dojo.render.vml.capable, "dojo.charting.vml.Plotters");
 
+
 __CPAN_FILE__ src/charting/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -84595,8 +58441,9 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.charting.*");
+dojo.provide("dojo.charting.*");
 
+
 __CPAN_FILE__ src/charting/Axis.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -84608,143 +58455,127 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.charting.Axis");
-dojo.require("dojo.lang.common");
-
-dojo.charting.Axis = function(/* string? */label, /* string? */scale, /* array? */labels){
-	var id = "dojo-charting-axis-"+dojo.charting.Axis.count++;
-	this.getId=function(){ return id; };
-	this.setId=function(key){ id = key; };
-	this.scale = scale || "linear";		//	linear || log
-	this.label = label || "";
-	this.showLabel = true;		//	show axis label.
-	this.showLabels = true;		//	show interval ticks.
-	this.showLines = false;		//	if you want lines over the range of the plot area
-	this.showTicks = false;		//	if you want tick marks on the axis.
-	this.range = { upper : 0, lower : 0 };	//	range of individual axis.
-	this.origin = "min"; 			//	this can be any number, "min" or "max". min/max is translated on init.
-
-	this.labels = labels || [];
-	this._labels = [];	//	what we really use to draw things.
-	this.nodes={ main: null, axis: null, label: null, labels: null, lines: null, ticks: null };
-};
-dojo.charting.Axis.count = 0;
-
-dojo.extend(dojo.charting.Axis, {
-	//	TODO: implement log scaling.
-	getCoord: function(
-		/* float */val, 
-		/* dojo.charting.PlotArea */plotArea, 
-		/* dojo.charting.Plot */plot
-	){
-		//	summary
-		//	returns the coordinate of val based on this axis range, plot area and plot.
-		val = parseFloat(val, 10);
-		var area = plotArea.getArea();
-		if(plot.axisX == this){
-			var offset = 0 - this.range.lower;
-			var min = this.range.lower + offset;	//	FIXME: check this.
-			var max = this.range.upper + offset;
-			val += offset;
-			return (val*((area.right-area.left)/max))+area.left;	//	float
-		} else {
-			var max = this.range.upper;
-			var min = this.range.lower;
-			var offset = 0;
-			if(min<0){
-				offset += Math.abs(min);
-			}
-			max += offset; min += offset; val += offset;
-			var pmin = area.bottom;
-			var pmax = area.top;
-			return (((pmin-pmax)/(max-min))*(max-val))+pmax;
-		}
-	},
-	initializeOrigin: function(drawAgainst, plane){
-		//	figure out the origin value.
-		if(isNaN(this.origin)){
-			if(this.origin.toLowerCase() == "max"){ 
-				this.origin = drawAgainst.range[(plane=="y")?"upper":"lower"]; 
-			}
-			else if (this.origin.toLowerCase() == "min"){ 
-				this.origin = drawAgainst.range[(plane=="y")?"lower":"upper"]; 
-			}
-			else { this.origin=0; }
-		}
-	},
-	initializeLabels: function(){
-		//	Translate the labels if needed.
-		if(this.labels.length == 0){
-			this.showLabels = false;
-			this.showLines = false;
-			this.showTicks = false;
-		} else {
-			if(this.labels[0].label && this.labels[0].value != null){
-				for(var i=0; i<this.labels.length; i++){
-					this._labels.push(this.labels[i]);
-				}
-			}
-			else if(!isNaN(this.labels[0])){
-				for(var i=0; i<this.labels.length; i++){
-					this._labels.push({ label: this.labels[i], value: this.labels[i] });
-				}
-			}
-			else {
-				// clone me
-				var a = [];
-				for(var i=0; i<this.labels.length; i++){
-					a.push(this.labels[i]);
-				}
-
-				//	do the bottom one.
-				var s=a.shift();
-				this._labels.push({ label: s, value: this.range.lower });
-
-				//	do the top one.
-				if(a.length>0){
-					var s=a.pop();
-					this._labels.push({ label: s, value: this.range.upper });
-				}
-				//	do the rest.
-				if(a.length>0){
-					var range = this.range.upper - this.range.lower;
-					var step = range / (this.labels.length-1);
-					for(var i=1; i<=a.length; i++){
-						this._labels.push({
-							label: a[i-1],
-							value: this.range.lower+(step*i)
-						});
-					}
-				}
-			}
-		}
-	},
-	initialize: function(plotArea, plot, drawAgainst, plane){
-		//	summary
-		//	Initialize the passed axis descriptor.  Note that this should always
-		//	be the result of plotArea.getAxes, and not the axis directly!
-		this.destroy();
-		this.initializeOrigin(drawAgainst, plane);
-		this.initializeLabels();
-		var node = this.render(plotArea, plot, drawAgainst, plane);
-		return node;
-	},
-	destroy: function(){
-		for(var p in this.nodes){
-			while(this.nodes[p] && this.nodes[p].childNodes.length > 0){
-				this.nodes[p].removeChild(this.nodes[p].childNodes[0]);
-			}
-			if(this.nodes[p] && this.nodes[p].parentNode){
-				this.nodes[p].parentNode.removeChild(this.nodes[p]);
-			}
-			this.nodes[p] = null;
-		}
-	}
-});
-
-dojo.requireIf(dojo.render.svg.capable, "dojo.charting.svg.Axis");
-dojo.requireIf(dojo.render.vml.capable, "dojo.charting.vml.Axis");
+dojo.provide("dojo.charting.Axis");
+dojo.require("dojo.lang.common");
+dojo.charting.Axis = function (label, scale, labels) {
+	var id = "dojo-charting-axis-" + dojo.charting.Axis.count++;
+	this.getId = function () {
+		return id;
+	};
+	this.setId = function (key) {
+		id = key;
+	};
+	this.scale = scale || "linear";
+	this.label = label || "";
+	this.showLabel = true;
+	this.showLabels = true;
+	this.showLines = false;
+	this.showTicks = false;
+	this.range = {upper:100, lower:0};
+	this.origin = "min";
+	this._origin = null;
+	this.labels = labels || [];
+	this._labels = [];
+	this.nodes = {main:null, axis:null, label:null, labels:null, lines:null, ticks:null};
+	this._rerender = false;
+};
+dojo.charting.Axis.count = 0;
+dojo.extend(dojo.charting.Axis, {getCoord:function (val, plotArea, plot) {
+	val = parseFloat(val, 10);
+	var area = plotArea.getArea();
+	if (plot.axisX == this) {
+		var offset = 0 - this.range.lower;
+		var min = this.range.lower + offset;
+		var max = this.range.upper + offset;
+		val += offset;
+		return (val * ((area.right - area.left) / max)) + area.left;
+	} else {
+		var max = this.range.upper;
+		var min = this.range.lower;
+		var offset = 0;
+		if (min < 0) {
+			offset += Math.abs(min);
+		}
+		max += offset;
+		min += offset;
+		val += offset;
+		var pmin = area.bottom;
+		var pmax = area.top;
+		return (((pmin - pmax) / (max - min)) * (max - val)) + pmax;
+	}
+}, initializeOrigin:function (drawAgainst, plane) {
+	if (this._origin == null) {
+		this._origin = this.origin;
+	}
+	if (isNaN(this._origin)) {
+		if (this._origin.toLowerCase() == "max") {
+			this.origin = drawAgainst.range[(plane == "y") ? "upper" : "lower"];
+		} else {
+			if (this._origin.toLowerCase() == "min") {
+				this.origin = drawAgainst.range[(plane == "y") ? "lower" : "upper"];
+			} else {
+				this.origin = 0;
+			}
+		}
+	}
+}, initializeLabels:function () {
+	this._labels = [];
+	if (this.labels.length == 0) {
+		this.showLabels = false;
+		this.showLines = false;
+		this.showTicks = false;
+	} else {
+		if (this.labels[0].label && this.labels[0].value != null) {
+			for (var i = 0; i < this.labels.length; i++) {
+				this._labels.push(this.labels[i]);
+			}
+		} else {
+			if (!isNaN(this.labels[0])) {
+				for (var i = 0; i < this.labels.length; i++) {
+					this._labels.push({label:this.labels[i], value:this.labels[i]});
+				}
+			} else {
+				var a = [];
+				for (var i = 0; i < this.labels.length; i++) {
+					a.push(this.labels[i]);
+				}
+				var s = a.shift();
+				this._labels.push({label:s, value:this.range.lower});
+				if (a.length > 0) {
+					var s = a.pop();
+					this._labels.push({label:s, value:this.range.upper});
+				}
+				if (a.length > 0) {
+					var range = this.range.upper - this.range.lower;
+					var step = range / (this.labels.length - 1);
+					for (var i = 1; i <= a.length; i++) {
+						this._labels.push({label:a[i - 1], value:this.range.lower + (step * i)});
+					}
+				}
+			}
+		}
+	}
+}, initialize:function (plotArea, plot, drawAgainst, plane) {
+	this.destroy();
+	this.initializeOrigin(drawAgainst, plane);
+	this.initializeLabels();
+	var node = this.render(plotArea, plot, drawAgainst, plane);
+	return node;
+}, destroy:function () {
+	for (var p in this.nodes) {
+		while (this.nodes[p] && this.nodes[p].childNodes.length > 0) {
+			this.nodes[p].removeChild(this.nodes[p].childNodes[0]);
+		}
+		if (this.nodes[p] && this.nodes[p].parentNode) {
+			this.nodes[p].parentNode.removeChild(this.nodes[p]);
+		}
+		this.nodes[p] = null;
+	}
+}});
+dojo.requireIf(dojo.render.svg.capable, "dojo.charting.svg.Axis");
+dojo.requireIf(dojo.render.vml.capable, "dojo.charting.vml.Axis");
 
+
 __CPAN_DIR__ src/charting/svg
 __CPAN_FILE__ src/charting/svg/PlotArea.js
 /*
@@ -84757,78 +58588,72 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.charting.svg.PlotArea");
-dojo.require("dojo.lang.common");
-
-if(dojo.render.svg.capable){
-	dojo.require("dojo.svg");
-	dojo.extend(dojo.charting.PlotArea, {
-		initializePlot: function(plot){
-			//	summary
-			//	Initialize the plot node for data rendering.
-			plot.destroy();
-			plot.dataNode = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			plot.dataNode.setAttribute("id", plot.getId());
-			return plot.dataNode;	//	SVGGElement
-		},
-		initialize: function(){
-			//	summary
-			//	Initialize the PlotArea.
-		
-			this.destroy();	//	kill everything first.
-			
-			//	start with the background
-			this.nodes.main = document.createElement("div");
-
-			this.nodes.area = document.createElementNS(dojo.svg.xmlns.svg, "svg");
-			this.nodes.area.setAttribute("id", this.getId());
-			this.nodes.area.setAttribute("width", this.size.width);
-			this.nodes.area.setAttribute("height", this.size.height);
-			this.nodes.main.appendChild(this.nodes.area);
-
-			var area=this.getArea();
-			var defs = document.createElementNS(dojo.svg.xmlns.svg, "defs");
-			var clip = document.createElementNS(dojo.svg.xmlns.svg, "clipPath");
-			clip.setAttribute("id",this.getId()+"-clip");
-			var rect = document.createElementNS(dojo.svg.xmlns.svg, "rect");		
-			rect.setAttribute("x", area.left);
-			rect.setAttribute("y", area.top);
-			rect.setAttribute("width", area.right-area.left);
-			rect.setAttribute("height", area.bottom-area.top);
-			clip.appendChild(rect);
-			defs.appendChild(clip);
-			this.nodes.area.appendChild(defs);
-			
-			this.nodes.background = document.createElementNS(dojo.svg.xmlns.svg, "rect");
-			this.nodes.background.setAttribute("id", this.getId()+"-background");
-			this.nodes.background.setAttribute("width", this.size.width);
-			this.nodes.background.setAttribute("height", this.size.height);
-			this.nodes.background.setAttribute("fill", "#fff");
-			this.nodes.area.appendChild(this.nodes.background);
-
-			this.nodes.plots = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			this.nodes.plots.setAttribute("id", this.getId()+"-plots");
-			this.nodes.plots.setAttribute("style","clip-path:url(#"+this.getId()+"-clip);");
-			this.nodes.area.appendChild(this.nodes.plots);
-
-			for(var i=0; i<this.plots.length; i++){
-				this.nodes.plots.appendChild(this.initializePlot(this.plots[i]));
-			}
-
-			//	do the axes
-			this.nodes.axes = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			this.nodes.axes.setAttribute("id", this.getId()+"-axes");
-			this.nodes.area.appendChild(this.nodes.axes);
-			var axes = this.getAxes();
-			for(var p in axes){
-				var obj = axes[p];
-				this.nodes.axes.appendChild(obj.axis.initialize(this, obj.plot, obj.drawAgainst, obj.plane));
-			}
-			return this.nodes.main;	//	HTMLDivElement
-		}
-	});
-}
+dojo.provide("dojo.charting.svg.PlotArea");
+dojo.require("dojo.lang.common");
+if (dojo.render.svg.capable) {
+	dojo.require("dojo.svg");
+	dojo.extend(dojo.charting.PlotArea, {resize:function () {
+		var area = this.getArea();
+		this.nodes.area.setAttribute("width", this.size.width);
+		this.nodes.area.setAttribute("height", this.size.height);
+		var rect = this.nodes.area.getElementsByTagName("rect")[0];
+		rect.setAttribute("x", area.left);
+		rect.setAttribute("y", area.top);
+		rect.setAttribute("width", area.right - area.left);
+		rect.setAttribute("height", area.bottom - area.top);
+		this.nodes.background.setAttribute("width", this.size.width);
+		this.nodes.background.setAttribute("height", this.size.height);
+		if (this.nodes.plots) {
+			this.nodes.area.removeChild(this.nodes.plots);
+			this.nodes.plots = null;
+		}
+		this.nodes.plots = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		this.nodes.plots.setAttribute("id", this.getId() + "-plots");
+		this.nodes.plots.setAttribute("style", "clip-path:url(#" + this.getId() + "-clip);");
+		this.nodes.area.appendChild(this.nodes.plots);
+		for (var i = 0; i < this.plots.length; i++) {
+			this.nodes.plots.appendChild(this.initializePlot(this.plots[i]));
+		}
+		if (this.nodes.axes) {
+			this.nodes.area.removeChild(this.nodes.axes);
+			this.nodes.axes = null;
+		}
+		this.nodes.axes = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		this.nodes.axes.setAttribute("id", this.getId() + "-axes");
+		this.nodes.area.appendChild(this.nodes.axes);
+		var axes = this.getAxes();
+		for (var p in axes) {
+			var obj = axes[p];
+			this.nodes.axes.appendChild(obj.axis.initialize(this, obj.plot, obj.drawAgainst, obj.plane));
+		}
+	}, initializePlot:function (plot) {
+		plot.destroy();
+		plot.dataNode = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		plot.dataNode.setAttribute("id", plot.getId());
+		return plot.dataNode;
+	}, initialize:function () {
+		this.destroy();
+		this.nodes.main = document.createElement("div");
+		this.nodes.area = document.createElementNS(dojo.svg.xmlns.svg, "svg");
+		this.nodes.area.setAttribute("id", this.getId());
+		this.nodes.main.appendChild(this.nodes.area);
+		var defs = document.createElementNS(dojo.svg.xmlns.svg, "defs");
+		var clip = document.createElementNS(dojo.svg.xmlns.svg, "clipPath");
+		clip.setAttribute("id", this.getId() + "-clip");
+		var rect = document.createElementNS(dojo.svg.xmlns.svg, "rect");
+		clip.appendChild(rect);
+		defs.appendChild(clip);
+		this.nodes.area.appendChild(defs);
+		this.nodes.background = document.createElementNS(dojo.svg.xmlns.svg, "rect");
+		this.nodes.background.setAttribute("id", this.getId() + "-background");
+		this.nodes.background.setAttribute("fill", "#fff");
+		this.nodes.area.appendChild(this.nodes.background);
+		this.resize();
+		return this.nodes.main;
+	}});
+}
 
+
 __CPAN_FILE__ src/charting/svg/Plotters.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -84840,872 +58665,697 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.charting.svg.Plotters");
-dojo.require("dojo.lang.common");
-
-if(dojo.render.svg.capable){
-	dojo.require("dojo.svg");
-
-	//	TODO for 0.5: look at replacing manual plotting with dojo.gfx.
-
-	//	Mixin the SVG-specific plotter object.
-	dojo.mixin(dojo.charting.Plotters, {
-		/*********************************************************
-		 *	Grouped plotters: need all series on a plot at once.
-		 *********************************************************/
-		Bar: function(
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* object? */kwArgs,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots a set of grouped bars.
-			//	Bindings: y
-			var area = plotarea.getArea();
-			var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			
-			//	precompile the data
-			var n = plot.series.length;	//	how many series
-			var data = [];
-			for(var i=0; i<n; i++){
-				var tmp = plot.series[i].data.evaluate(kwArgs);
-				data.push(tmp);
-			}
-
-			//	calculate the width of each bar.
-			var space = 8;
-			var nPoints = data[0].length;
-			var width = ((area.right-area.left)-(space*(nPoints-1)))/nPoints;	//	the width of each group.
-			var barWidth = width/n;	//	the width of each bar, no spaces.
-			var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
-
-			for(var i=0; i<nPoints; i++){
-				//	calculate offset
-				var xStart = area.left+(width*i)+(space*i);
-				for(var j=0; j<n; j++){
-					var value = data[j][i].y;
-					var yA = yOrigin;
-					var x = xStart + (barWidth*j);
-					var y = plot.axisY.getCoord(value, plotarea, plot);
-					var h = Math.abs(yA-y);
-					if(value < plot.axisX.origin){
-						yA = y;
-						y = yOrigin;
-					}
-					
-					var bar=document.createElementNS(dojo.svg.xmlns.svg, "rect");
-					bar.setAttribute("fill", data[j][i].series.color);
-					bar.setAttribute("stroke-width", "0");
-					bar.setAttribute("x", x);
-					bar.setAttribute("y", y);
-					bar.setAttribute("width", barWidth);
-					bar.setAttribute("height", h);
-					bar.setAttribute("fill-opacity", "0.6");
-					if(applyTo){ applyTo(bar, data[j][i].src); }
-					group.appendChild(bar);
-				}
-			}
-			return group;	// SVGGElement
-		},
-		HorizontalBar: function(
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* object? */kwArgs,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots data in a set of grouped bars horizontally.
-			//	Bindings: y
-			var area = plotarea.getArea();
-			var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			
-			//	precompile the data
-			var n = plot.series.length;	//	how many series
-			var data = [];
-			for(var i=0; i<n; i++){
-				var tmp = plot.series[i].data.evaluate(kwArgs);
-				data.push(tmp);
-			}
-
-			var space = 6;
-			var nPoints = data[0].length;
-			var h = ((area.bottom-area.top)-(space*(nPoints-1)))/nPoints;
-			var barH = h/n;
-			var xOrigin = plot.axisX.getCoord(0, plotarea, plot);
-
-			for(var i=0; i<nPoints; i++){
-				//	calculate offset
-				var yStart = area.top+(h*i)+(space*i);
-				for(var j=0; j<n; j++){
-					var value = data[j][i].y;
-					var y = yStart + (barH*j);
-					var xA = xOrigin;
-					var x = plot.axisX.getCoord(value, plotarea, plot);
-					var w = Math.abs(x-xA);
-					if(value > 0){
-						x = xOrigin;
-					}
-					
-					var bar=document.createElementNS(dojo.svg.xmlns.svg, "rect");
-					bar.setAttribute("fill", data[j][i].series.color);
-					bar.setAttribute("stroke-width", "0");
-					bar.setAttribute("x", xA);
-					bar.setAttribute("y", y);
-					bar.setAttribute("width", w);
-					bar.setAttribute("height", barH);
-					bar.setAttribute("fill-opacity", "0.6");
-					if(applyTo){ applyTo(bar, data[j][i].src); }
-					group.appendChild(bar);
-				}
-			}
-			return group;	//	SVGGElement
-		},
-		Gantt: function(
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* object? */kwArgs,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots a grouped set of Gantt bars
-			//	Bindings: high/low
-			var area = plotarea.getArea();
-			var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
-
-			//	precompile the data
-			var n = plot.series.length;	//	how many series
-			var data = [];
-			for(var i=0; i<n; i++){
-				var tmp = plot.series[i].data.evaluate(kwArgs);
-				data.push(tmp);
-			}
-
-			var space = 2;
-			var nPoints = data[0].length;
-			var h = ((area.bottom-area.top)-(space*(nPoints-1)))/nPoints;
-			var barH = h/n;
-			for(var i=0; i<nPoints; i++){
-				//	calculate offset
-				var yStart = area.top+(h*i)+(space*i);
-				for(var j=0; j<n; j++){
-					var high = data[j][i].high;
-					var low = data[j][i].low;
-					if(low > high){
-						var t = high;
-						high = low;
-						low = t;
-					}
-					var x = plot.axisX.getCoord(low, plotarea, plot);
-					var w = plot.axisX.getCoord(high, plotarea, plot) - x;
-					var y = yStart + (barH*j);
-					
-					var bar=document.createElementNS(dojo.svg.xmlns.svg, "rect");
-					bar.setAttribute("fill", data[j][i].series.color);
-					bar.setAttribute("stroke-width", "0");
-					bar.setAttribute("x", x);
-					bar.setAttribute("y", y);
-					bar.setAttribute("width", w);
-					bar.setAttribute("height", barH);
-					bar.setAttribute("fill-opacity", "0.6");
-					if(applyTo){ applyTo(bar, data[j][i].src); }
-					group.appendChild(bar);
-				}
-			}
-			return group;	//	SVGGElement
-		},
-		StackedArea: function(
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* object? */kwArgs,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots a set of stacked areas.
-			//	Bindings: x/y
-			var area = plotarea.getArea();
-			var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
-
-			//	precompile the data
-			var n = plot.series.length;	//	how many series
-			var data = [];
-			var totals = [];
-
-			//	we're assuming that all series for this plot has the name x assignment for now.
-			for(var i=0; i<n; i++){
-				var tmp = plot.series[i].data.evaluate(kwArgs);
-				//	run through and add current totals
-				for(var j=0; j<tmp.length; j++){
-					if(i==0){ totals.push(tmp[j].y); }
-					else { totals[j] += tmp[j].y; }
-					tmp[j].y = totals[j];
-				}
-				data.push(tmp);
-			}
-
-			for(var i=n-1; i>=0; i--){
-				var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
-				path.setAttribute("fill", data[i][0].series.color);
-				path.setAttribute("fill-opacity", "0.4");
-				path.setAttribute("stroke", data[i][0].series.color);
-				path.setAttribute("stroke-width" , "1");
-				path.setAttribute("stroke-opacity", "0.85");
-
-				var cmd = [];
-				var r=3;
-				for(var j=0; j<data[i].length; j++){
-					var values = data[i];
-					var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
-					var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
-
-					if(j==0){ cmd.push("M"); }
-					else { cmd.push("L"); }
-					cmd.push(x+","+y);
-					
-					//	points on the line
-					var c=document.createElementNS(dojo.svg.xmlns.svg, "circle");
-					c.setAttribute("cx",x);
-					c.setAttribute("cy",y);
-					c.setAttribute("r","3");
-					c.setAttribute("fill", values[j].series.color);
-					c.setAttribute("fill-opacity", "0.6");
-					c.setAttribute("stroke-width", "1");
-					c.setAttribute("stroke-opacity", "0.85");
-					group.appendChild(c);
-					if(applyTo){ applyTo(c, data[i].src); }
-				}
-
-				//	now run the path backwards from the previous series.
-				if(i == 0){
-					cmd.push("L");
-					cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
-					cmd.push("L");
-					cmd.push(plot.axisX.getCoord(data[0][0].x, plotarea, plot) + "," +  plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
-					cmd.push("Z");
-				} else {
-					var values = data[i-1];
-					cmd.push("L");
-					cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length-1].y, plotarea, plot)));
-					for(var j=values.length-2; j>=0; j--){
-						var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
-						var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
-						cmd.push("L");
-						cmd.push(x+","+y);
-					}
-				}
-				path.setAttribute("d", cmd.join(" ")+ " Z");
-				group.appendChild(path);
-			}
-			return group;	//	SVGGElement
-		},
-		StackedCurvedArea: function(
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* object? */kwArgs,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots a set of stacked areas, using a tensioning factor to soften points.
-			//	Bindings: x/y
-			var tension = 3;
-			var area = plotarea.getArea();
-			var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
-
-			//	precompile the data
-			var n = plot.series.length;	//	how many series
-			var data = [];
-			var totals = [];
-
-			//	we're assuming that all series for this plot has the name x assignment for now.
-			for(var i=0; i<n; i++){
-				var tmp = plot.series[i].data.evaluate(kwArgs);
-				//	run through and add current totals
-				for(var j=0; j<tmp.length; j++){
-					if(i==0){ totals.push(tmp[j].y); }
-					else { totals[j] += tmp[j].y; }
-					tmp[j].y = totals[j];
-				}
-				data.push(tmp);
-			}
-
-			for(var i=n-1; i>=0; i--){
-				var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
-				path.setAttribute("fill", data[i][0].series.color);
-				path.setAttribute("fill-opacity", "0.4");
-				path.setAttribute("stroke", data[i][0].series.color);
-				path.setAttribute("stroke-width" , "1");
-				path.setAttribute("stroke-opacity", "0.85");
-
-				var cmd = [];
-				var r=3;
-				for(var j=0; j<data[i].length; j++){
-					var values = data[i];
-					var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
-					var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
-					var dx = area.left + 1;
-					var dy = area.bottom;
-					if(j>0){
-						dx = x - plot.axisX.getCoord(values[j-1].x, plotarea, plot);
-						dy = plot.axisY.getCoord(values[j-1].y, plotarea, plot);
-					}
-
-					if(j==0){ cmd.push("M"); }
-					else {
-						cmd.push("C");
-						var cx = x-(tension-1) * (dx/tension);
-						cmd.push(cx + "," + dy);
-						cx = x - (dx/tension);
-						cmd.push(cx + "," + y);
-					}
-					cmd.push(x+","+y);
-					
-					//	points on the line
-					var c=document.createElementNS(dojo.svg.xmlns.svg, "circle");
-					c.setAttribute("cx",x);
-					c.setAttribute("cy",y);
-					c.setAttribute("r","3");
-					c.setAttribute("fill", values[j].series.color);
-					c.setAttribute("fill-opacity", "0.6");
-					c.setAttribute("stroke-width", "1");
-					c.setAttribute("stroke-opacity", "0.85");
-					group.appendChild(c);
-					if(applyTo){ applyTo(c, data[i].src); }
-				}
-
-				//	now run the path backwards from the previous series.
-				if(i == 0){
-					cmd.push("L");
-					cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
-					cmd.push("L");
-					cmd.push(plot.axisX.getCoord(data[0][0].x, plotarea, plot) + "," +  plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
-					cmd.push("Z");
-				} else {
-					var values = data[i-1];
-					cmd.push("L");
-					cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length-1].y, plotarea, plot)));
-					for(var j=values.length-2; j>=0; j--){
-						var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
-						var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
-						var dx = x - plot.axisX.getCoord(values[j+1].x, plotarea, plot);
-						var dy = plot.axisY.getCoord(values[j+1].y, plotarea, plot);
-
-						cmd.push("C");
-						var cx = x-(tension-1) * (dx/tension);
-						cmd.push(cx + "," + dy);
-						cx = x - (dx/tension);
-						cmd.push(cx + "," + y);
-						cmd.push(x+","+y);
-					}
-				}
-				path.setAttribute("d", cmd.join(" ")+ " Z");
-				group.appendChild(path);
-			}
-			return group;	//	SVGGElement
-		},
-
-		/*********************************************************
-		 *	Single plotters: one series at a time.
-		 *********************************************************/
-		DataBar: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots a set of bars in relation to y==0.
-			//	Bindings: x/y
-			var area = plotarea.getArea();
-			var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			
-			var n = data.length;
-			var w = (area.right-area.left)/(plot.axisX.range.upper - plot.axisX.range.lower);	//	the width of each group.
-			var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
-
-			for(var i=0; i<n; i++){
-				//	calculate offset
-				var value = data[i].y;
-				var yA = yOrigin;
-				var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w/2);
-				var y = plot.axisY.getCoord(value, plotarea, plot);
-				var h = Math.abs(yA-y);
-				if(value < plot.axisX.origin){
-					yA = y;
-					y = yOrigin;
-				}
-				var bar=document.createElementNS(dojo.svg.xmlns.svg, "rect");
-				bar.setAttribute("fill", data[i].series.color);
-				bar.setAttribute("stroke-width", "0");
-				bar.setAttribute("x", x);
-				bar.setAttribute("y", y);
-				bar.setAttribute("width", w);
-				bar.setAttribute("height", h);
-				bar.setAttribute("fill-opacity", "0.6");
-				if(applyTo){ applyTo(bar, data[i].src); }
-				group.appendChild(bar);
-			}
-			return group;	//	SVGGElement
-		},
-		Line: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as a line.
-			//	Bindings: x/y
-			var area = plotarea.getArea();
-			var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
-			line.appendChild(path);
-
-			path.setAttribute("fill", "none");
-			path.setAttribute("stroke", data[0].series.color);
-			path.setAttribute("stroke-width" , "2");
-			path.setAttribute("stroke-opacity", "0.85");
-			if(data[0].series.label != null){
-				path.setAttribute("title", data[0].series.label);
-			}
-
-			var cmd=[];
-			for(var i=0; i<data.length; i++){
-				var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
-				var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
-				if(i==0){ cmd.push("M"); }
-				else { cmd.push("L"); }
-				cmd.push(x+","+y);
-				
-				//	points on the line
-				var c=document.createElementNS(dojo.svg.xmlns.svg, "circle");
-				c.setAttribute("cx",x);
-				c.setAttribute("cy",y);
-				c.setAttribute("r","3");
-				c.setAttribute("fill", data[i].series.color);
-				c.setAttribute("fill-opacity", "0.6");
-				c.setAttribute("stroke-width", "1");
-				c.setAttribute("stroke-opacity", "0.85");
-				line.appendChild(c);
-				if(applyTo){ applyTo(c, data[i].src); }
-			}
-			path.setAttribute("d", cmd.join(" "));
-			return line;	//	SVGGElement
-		},
-		CurvedLine: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as a line with a tension factor for softening.
-			//	Bindings: x/y
-			var tension = 3;
-			var area = plotarea.getArea();
-			var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
-			line.appendChild(path);
-
-			path.setAttribute("fill", "none");
-			path.setAttribute("stroke", data[0].series.color);
-			path.setAttribute("stroke-width" , "2");
-			path.setAttribute("stroke-opacity", "0.85");
-			if(data[0].series.label != null){
-				path.setAttribute("title", data[0].series.label);
-			}
-
-			var cmd=[];
-			for(var i=0; i<data.length; i++){
-				var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
-				var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
-				var dx = area.left + 1;
-				var dy = area.bottom;
-				if(i>0){
-					dx = x - plot.axisX.getCoord(data[i-1].x, plotarea, plot);
-					dy = plot.axisY.getCoord(data[i-1].y, plotarea, plot);
-				}
-
-				if(i==0){ cmd.push("M"); }
-				else {
-					cmd.push("C");
-					var cx = x-(tension-1) * (dx/tension);
-					cmd.push(cx + "," + dy);
-					cx = x - (dx/tension);
-					cmd.push(cx + "," + y);
-				}
-				cmd.push(x+","+y);
-				
-				//	points on the line
-				var c=document.createElementNS(dojo.svg.xmlns.svg, "circle");
-				c.setAttribute("cx",x);
-				c.setAttribute("cy",y);
-				c.setAttribute("r","3");
-				c.setAttribute("fill", data[i].series.color);
-				c.setAttribute("fill-opacity", "0.6");
-				c.setAttribute("stroke-width", "1");
-				c.setAttribute("stroke-opacity", "0.85");
-				line.appendChild(c);
-				if(applyTo){ applyTo(c, data[i].src); }
-			}
-			path.setAttribute("d", cmd.join(" "));
-			return line;	// SVGGElement
-		},
-		Area: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as an area.
-			//	Bindings: x/y
-			var area = plotarea.getArea();
-			var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
-			line.appendChild(path);
-
-			path.setAttribute("fill", data[0].series.color);
-			path.setAttribute("fill-opacity", "0.4");
-			path.setAttribute("stroke", data[0].series.color);
-			path.setAttribute("stroke-width" , "1");
-			path.setAttribute("stroke-opacity", "0.85");
-			if(data[0].series.label != null){
-				path.setAttribute("title", data[0].series.label);
-			}
-
-			var cmd=[];
-			for(var i=0; i<data.length; i++){
-				var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
-				var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
-				if(i==0){ cmd.push("M"); }
-				else { cmd.push("L"); }
-				cmd.push(x+","+y);
-				
-				//	points on the line
-				var c=document.createElementNS(dojo.svg.xmlns.svg, "circle");
-				c.setAttribute("cx",x);
-				c.setAttribute("cy",y);
-				c.setAttribute("r","3");
-				c.setAttribute("fill", data[i].series.color);
-				c.setAttribute("fill-opacity", "0.6");
-				c.setAttribute("stroke-width", "1");
-				c.setAttribute("stroke-opacity", "0.85");
-				line.appendChild(c);
-				if(applyTo){ applyTo(c, data[i].src); }
-			}
-			//	finish it off
-			cmd.push("L");
-			cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
-			cmd.push("L");
-			cmd.push(plot.axisX.getCoord(data[0].x, plotarea, plot) + "," +  plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
-			cmd.push("Z");
-			path.setAttribute("d", cmd.join(" "));
-			return line;	//	SVGGElement
-		},
-		CurvedArea: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as an area with a tension for softening.
-			//	Bindings: x/y
-			var tension = 3;
-			var area = plotarea.getArea();
-			var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
-			line.appendChild(path);
-
-			path.setAttribute("fill", data[0].series.color);
-			path.setAttribute("fill-opacity", "0.4");
-			path.setAttribute("stroke", data[0].series.color);
-			path.setAttribute("stroke-width" , "1");
-			path.setAttribute("stroke-opacity", "0.85");
-			if(data[0].series.label != null){
-				path.setAttribute("title", data[0].series.label);
-			}
-
-			var cmd=[];
-			for(var i=0; i<data.length; i++){
-				var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
-				var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
-				var dx = area.left + 1;
-				var dy = area.bottom;
-				if(i>0){
-					dx = x - plot.axisX.getCoord(data[i-1].x, plotarea, plot);
-					dy = plot.axisY.getCoord(data[i-1].y, plotarea, plot);
-				}
-
-				if(i==0){ cmd.push("M"); }
-				else {
-					cmd.push("C");
-					var cx = x-(tension-1) * (dx/tension);
-					cmd.push(cx + "," + dy);
-					cx = x - (dx/tension);
-					cmd.push(cx + "," + y);
-				}
-				cmd.push(x+","+y);
-				
-				//	points on the line
-				var c=document.createElementNS(dojo.svg.xmlns.svg, "circle");
-				c.setAttribute("cx",x);
-				c.setAttribute("cy",y);
-				c.setAttribute("r","3");
-				c.setAttribute("fill", data[i].series.color);
-				c.setAttribute("fill-opacity", "0.6");
-				c.setAttribute("stroke-width", "1");
-				c.setAttribute("stroke-opacity", "0.85");
-				line.appendChild(c);
-				if(applyTo){ applyTo(c, data[i].src); }
-			}
-			//	finish it off
-			cmd.push("L");
-			cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
-			cmd.push("L");
-			cmd.push(plot.axisX.getCoord(data[0].x, plotarea, plot) + "," +  plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
-			cmd.push("Z");
-			path.setAttribute("d", cmd.join(" "));
-			return line;	//	SVGGElement
-		},
-		HighLow: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as a set of high/low bars.
-			//	Bindings: x/high/low
-			var area = plotarea.getArea();
-			var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			
-			var n = data.length;
-			var part = ((area.right-area.left)/(plot.axisX.range.upper - plot.axisX.range.lower))/4;
-			var w = part*2;
-
-			for(var i=0; i<n; i++){
-				var high = data[i].high;
-				var low = data[i].low;
-				if(low > high){
-					var t = low;
-					low = high;
-					high = t;
-				}
-
-				var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w/2);
-				var y = plot.axisY.getCoord(high, plotarea, plot);
-				var h = plot.axisY.getCoord(low, plotarea, plot)-y;
-
-				//	high + low
-				var bar=document.createElementNS(dojo.svg.xmlns.svg, "rect");
-				bar.setAttribute("fill", data[i].series.color);
-				bar.setAttribute("stroke-width", "0");
-				bar.setAttribute("x", x);
-				bar.setAttribute("y", y);
-				bar.setAttribute("width", w);
-				bar.setAttribute("height", h);
-				bar.setAttribute("fill-opacity", "0.6");
-				if(applyTo){ applyTo(bar, data[i].src); }
-				group.appendChild(bar);
-			}
-			return group;	//	SVGGElement
-		},
-		HighLowClose: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as a set of high/low bars with a close indicator.
-			//	Bindings: x/high/low/close
-			var area = plotarea.getArea();
-			var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			
-			var n = data.length;
-			var part = ((area.right-area.left)/(plot.axisX.range.upper - plot.axisX.range.lower))/4;
-			var w = part*2;
-
-			for(var i=0; i<n; i++){
-				var high = data[i].high;
-				var low = data[i].low;
-				if(low > high){
-					var t = low;
-					low = high;
-					high = t;
-				}
-				var c = data[i].close;
-
-				var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w/2);
-				var y = plot.axisY.getCoord(high, plotarea, plot);
-				var h = plot.axisY.getCoord(low, plotarea, plot)-y;
-				var close = plot.axisY.getCoord(c, plotarea, plot);
-
-				var g = document.createElementNS(dojo.svg.xmlns.svg, "g");
-
-				//	high + low
-				var bar=document.createElementNS(dojo.svg.xmlns.svg, "rect");
-				bar.setAttribute("fill", data[i].series.color);
-				bar.setAttribute("stroke-width", "0");
-				bar.setAttribute("x", x);
-				bar.setAttribute("y", y);
-				bar.setAttribute("width", w);
-				bar.setAttribute("height", h);
-				bar.setAttribute("fill-opacity", "0.6");
-				g.appendChild(bar);
-
-				//	close
-				var line=document.createElementNS(dojo.svg.xmlns.svg, "line");
-				line.setAttribute("x1", x);
-				line.setAttribute("x2", x+w+(part*2));
-				line.setAttribute("y1", close);
-				line.setAttribute("y2", close);
-				line.setAttribute("style", "stroke:"+data[i].series.color+";stroke-width:1px;stroke-opacity:0.6;");
-				g.appendChild(line);
-
-				if(applyTo){ applyTo(g, data[i].src); }
-				group.appendChild(g);
-			}
-			return group;	//	SVGGElement
-		},
-		HighLowOpenClose: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as a set of high/low bars with open and close indicators.
-			//	Bindings: x/high/low/open/close
-			var area = plotarea.getArea();
-			var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			
-			var n = data.length;
-			var part = ((area.right-area.left)/(plot.axisX.range.upper - plot.axisX.range.lower))/4;
-			var w = part*2;
-
-			for(var i=0; i<n; i++){
-				var high = data[i].high;
-				var low = data[i].low;
-				if(low > high){
-					var t = low;
-					low = high;
-					high = t;
-				}
-				var o = data[i].open;
-				var c = data[i].close;
-
-				var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w/2);
-				var y = plot.axisY.getCoord(high, plotarea, plot);
-				var h = plot.axisY.getCoord(low, plotarea, plot)-y;
-				var open = plot.axisY.getCoord(o, plotarea, plot);
-				var close = plot.axisY.getCoord(c, plotarea, plot);
-
-				var g = document.createElementNS(dojo.svg.xmlns.svg, "g");
-
-				//	high + low
-				var bar=document.createElementNS(dojo.svg.xmlns.svg, "rect");
-				bar.setAttribute("fill", data[i].series.color);
-				bar.setAttribute("stroke-width", "0");
-				bar.setAttribute("x", x);
-				bar.setAttribute("y", y);
-				bar.setAttribute("width", w);
-				bar.setAttribute("height", h);
-				bar.setAttribute("fill-opacity", "0.6");
-				g.appendChild(bar);
-
-				//	open
-				var line=document.createElementNS(dojo.svg.xmlns.svg, "line");
-				line.setAttribute("x1", x-(part*2));
-				line.setAttribute("x2", x+w);
-				line.setAttribute("y1", open);
-				line.setAttribute("y2", open);
-				line.setAttribute("style", "stroke:"+data[i].series.color+";stroke-width:1px;stroke-opacity:0.6;");
-				g.appendChild(line);
-
-				//	close
-				var line=document.createElementNS(dojo.svg.xmlns.svg, "line");
-				line.setAttribute("x1", x);
-				line.setAttribute("x2", x+w+(part*2));
-				line.setAttribute("y1", close);
-				line.setAttribute("y2", close);
-				line.setAttribute("style", "stroke:"+data[i].series.color+";stroke-width:1px;stroke-opacity:0.6;");
-				g.appendChild(line);
-
-				if(applyTo){ applyTo(g, data[i].src); }
-				group.appendChild(g);
-			}
-			return group;	//	SVGGElement
-		},
-		Scatter: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as a set of points.
-			//	Bindings: x/y
-			var r=7;
-			var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			for (var i=0; i<data.length; i++){
-				var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
-				var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
-				var point = document.createElementNS(dojo.svg.xmlns.svg, "path");
-				point.setAttribute("fill", data[i].series.color);
-				point.setAttribute("stroke-width", "0");
-				point.setAttribute("d",
-					"M " + x + "," + (y-r) + " " +
-					"Q " + x + "," + y + " " + (x+r) + "," + y + " " +
-					"Q " + x + "," + y + " " + x + "," + (y+r) + " " +
-					"Q " + x + "," + y + " " + (x-r) + "," + y + " " +
-					"Q " + x + "," + y + " " + x + "," + (y-r) + " " +
-					"Z"
-				);
-				if(applyTo){ applyTo(point, data[i].src); }
-				group.appendChild(point);
-			}
-			return group;	//	SVGGElement
-		},
-		Bubble: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as a set of points with a size factor.
-			//	Bindings: x/y/size
-			var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			var sizeFactor=1;
-			for (var i=0; i<data.length; i++){
-				var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
-				var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
-				if(i==0){
-					//	figure out the size factor, start with the axis with the greater range.
-					var raw = data[i].size;
-					var dy = plot.axisY.getCoord(data[i].y + raw, plotarea, plot)-y;
-					sizeFactor = dy/raw;
-				}
-				if(sizeFactor<1) { sizeFactor = 1; }
-				var point = document.createElementNS(dojo.svg.xmlns.svg, "circle");
-				point.setAttribute("fill", data[i].series.color);
-				point.setAttribute("fill-opacity", "0.8");
-				point.setAttribute("stroke", data[i].series.color);
-				point.setAttribute("stroke-width", "1");
-				point.setAttribute("cx",x);
-				point.setAttribute("cy",y);
-				point.setAttribute("r", (data[i].size/2)*sizeFactor);
-				if(applyTo){ applyTo(point, data[i].src); }
-				group.appendChild(point);
-			}
-			return group;	//	SVGGElement
-		}
-	});
-	dojo.charting.Plotters["Default"] = dojo.charting.Plotters.Line;
-}
+dojo.provide("dojo.charting.svg.Plotters");
+dojo.require("dojo.lang.common");
+if (dojo.render.svg.capable) {
+	dojo.require("dojo.svg");
+	dojo.mixin(dojo.charting.Plotters, {Bar:function (plotarea, plot, kwArgs, applyTo) {
+		var area = plotarea.getArea();
+		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		var n = plot.series.length;
+		var data = [];
+		for (var i = 0; i < n; i++) {
+			var tmp = plot.series[i].data.evaluate(kwArgs);
+			data.push(tmp);
+		}
+		var space = 8;
+		var nPoints = data[0].length;
+		if (nPoints == 0) {
+			return group;
+		}
+		var width = ((area.right - area.left) - (space * (nPoints - 1))) / nPoints;
+		var barWidth = width / n;
+		var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
+		for (var i = 0; i < nPoints; i++) {
+			var xStart = area.left + (width * i) + (space * i);
+			for (var j = 0; j < n; j++) {
+				var value = data[j][i].y;
+				var yA = yOrigin;
+				var x = xStart + (barWidth * j);
+				var y = plot.axisY.getCoord(value, plotarea, plot);
+				var h = Math.abs(yA - y);
+				if (value < plot.axisX.origin) {
+					yA = y;
+					y = yOrigin;
+				}
+				var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
+				bar.setAttribute("fill", data[j][i].series.color);
+				bar.setAttribute("stroke-width", "0");
+				bar.setAttribute("x", x);
+				bar.setAttribute("y", y);
+				bar.setAttribute("width", barWidth);
+				bar.setAttribute("height", h);
+				bar.setAttribute("fill-opacity", "0.6");
+				if (applyTo) {
+					applyTo(bar, data[j][i].src);
+				}
+				group.appendChild(bar);
+			}
+		}
+		return group;
+	}, HorizontalBar:function (plotarea, plot, kwArgs, applyTo) {
+		var area = plotarea.getArea();
+		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		var n = plot.series.length;
+		var data = [];
+		for (var i = 0; i < n; i++) {
+			var tmp = plot.series[i].data.evaluate(kwArgs);
+			data.push(tmp);
+		}
+		var space = 6;
+		var nPoints = data[0].length;
+		if (nPoints == 0) {
+			return group;
+		}
+		var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints;
+		var barH = h / n;
+		var xOrigin = plot.axisX.getCoord(0, plotarea, plot);
+		for (var i = 0; i < nPoints; i++) {
+			var yStart = area.top + (h * i) + (space * i);
+			for (var j = 0; j < n; j++) {
+				var value = data[j][i].y;
+				var y = yStart + (barH * j);
+				var xA = xOrigin;
+				var x = plot.axisX.getCoord(value, plotarea, plot);
+				var w = Math.abs(x - xA);
+				if (value > 0) {
+					x = xOrigin;
+				}
+				var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
+				bar.setAttribute("fill", data[j][i].series.color);
+				bar.setAttribute("stroke-width", "0");
+				bar.setAttribute("x", xA);
+				bar.setAttribute("y", y);
+				bar.setAttribute("width", w);
+				bar.setAttribute("height", barH);
+				bar.setAttribute("fill-opacity", "0.6");
+				if (applyTo) {
+					applyTo(bar, data[j][i].src);
+				}
+				group.appendChild(bar);
+			}
+		}
+		return group;
+	}, Gantt:function (plotarea, plot, kwArgs, applyTo) {
+		var area = plotarea.getArea();
+		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		var n = plot.series.length;
+		var data = [];
+		for (var i = 0; i < n; i++) {
+			var tmp = plot.series[i].data.evaluate(kwArgs);
+			data.push(tmp);
+		}
+		var space = 2;
+		var nPoints = data[0].length;
+		if (nPoints == 0) {
+			return group;
+		}
+		var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints;
+		var barH = h / n;
+		for (var i = 0; i < nPoints; i++) {
+			var yStart = area.top + (h * i) + (space * i);
+			for (var j = 0; j < n; j++) {
+				var high = data[j][i].high;
+				var low = data[j][i].low;
+				if (low > high) {
+					var t = high;
+					high = low;
+					low = t;
+				}
+				var x = plot.axisX.getCoord(low, plotarea, plot);
+				var w = plot.axisX.getCoord(high, plotarea, plot) - x;
+				var y = yStart + (barH * j);
+				var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
+				bar.setAttribute("fill", data[j][i].series.color);
+				bar.setAttribute("stroke-width", "0");
+				bar.setAttribute("x", x);
+				bar.setAttribute("y", y);
+				bar.setAttribute("width", w);
+				bar.setAttribute("height", barH);
+				bar.setAttribute("fill-opacity", "0.6");
+				if (applyTo) {
+					applyTo(bar, data[j][i].src);
+				}
+				group.appendChild(bar);
+			}
+		}
+		return group;
+	}, StackedArea:function (plotarea, plot, kwArgs, applyTo) {
+		var area = plotarea.getArea();
+		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		var n = plot.series.length;
+		var data = [];
+		var totals = [];
+		for (var i = 0; i < n; i++) {
+			var tmp = plot.series[i].data.evaluate(kwArgs);
+			for (var j = 0; j < tmp.length; j++) {
+				if (i == 0) {
+					totals.push(tmp[j].y);
+				} else {
+					totals[j] += tmp[j].y;
+				}
+				tmp[j].y = totals[j];
+			}
+			data.push(tmp);
+		}
+		for (var i = n - 1; i >= 0; i--) {
+			var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
+			path.setAttribute("fill", data[i][0].series.color);
+			path.setAttribute("fill-opacity", "0.4");
+			path.setAttribute("stroke", data[i][0].series.color);
+			path.setAttribute("stroke-width", "1");
+			path.setAttribute("stroke-opacity", "0.85");
+			var cmd = [];
+			var r = 3;
+			for (var j = 0; j < data[i].length; j++) {
+				var values = data[i];
+				var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
+				var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
+				if (j == 0) {
+					cmd.push("M");
+				} else {
+					cmd.push("L");
+				}
+				cmd.push(x + "," + y);
+				var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
+				c.setAttribute("cx", x);
+				c.setAttribute("cy", y);
+				c.setAttribute("r", "3");
+				c.setAttribute("fill", values[j].series.color);
+				c.setAttribute("fill-opacity", "0.6");
+				c.setAttribute("stroke-width", "1");
+				c.setAttribute("stroke-opacity", "0.85");
+				group.appendChild(c);
+				if (applyTo) {
+					applyTo(c, data[i].src);
+				}
+			}
+			if (i == 0) {
+				cmd.push("L");
+				cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
+				cmd.push("L");
+				cmd.push(plot.axisX.getCoord(data[0][0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
+				cmd.push("Z");
+			} else {
+				var values = data[i - 1];
+				cmd.push("L");
+				cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot)));
+				for (var j = values.length - 2; j >= 0; j--) {
+					var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
+					var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
+					cmd.push("L");
+					cmd.push(x + "," + y);
+				}
+			}
+			path.setAttribute("d", cmd.join(" ") + " Z");
+			group.appendChild(path);
+		}
+		return group;
+	}, StackedCurvedArea:function (plotarea, plot, kwArgs, applyTo) {
+		var tension = 3;
+		var area = plotarea.getArea();
+		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		var n = plot.series.length;
+		var data = [];
+		var totals = [];
+		for (var i = 0; i < n; i++) {
+			var tmp = plot.series[i].data.evaluate(kwArgs);
+			for (var j = 0; j < tmp.length; j++) {
+				if (i == 0) {
+					totals.push(tmp[j].y);
+				} else {
+					totals[j] += tmp[j].y;
+				}
+				tmp[j].y = totals[j];
+			}
+			data.push(tmp);
+		}
+		for (var i = n - 1; i >= 0; i--) {
+			var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
+			path.setAttribute("fill", data[i][0].series.color);
+			path.setAttribute("fill-opacity", "0.4");
+			path.setAttribute("stroke", data[i][0].series.color);
+			path.setAttribute("stroke-width", "1");
+			path.setAttribute("stroke-opacity", "0.85");
+			var cmd = [];
+			var r = 3;
+			for (var j = 0; j < data[i].length; j++) {
+				var values = data[i];
+				var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
+				var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
+				var dx = area.left + 1;
+				var dy = area.bottom;
+				if (j > 0) {
+					dx = x - plot.axisX.getCoord(values[j - 1].x, plotarea, plot);
+					dy = plot.axisY.getCoord(values[j - 1].y, plotarea, plot);
+				}
+				if (j == 0) {
+					cmd.push("M");
+				} else {
+					cmd.push("C");
+					var cx = x - (tension - 1) * (dx / tension);
+					cmd.push(cx + "," + dy);
+					cx = x - (dx / tension);
+					cmd.push(cx + "," + y);
+				}
+				cmd.push(x + "," + y);
+				var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
+				c.setAttribute("cx", x);
+				c.setAttribute("cy", y);
+				c.setAttribute("r", "3");
+				c.setAttribute("fill", values[j].series.color);
+				c.setAttribute("fill-opacity", "0.6");
+				c.setAttribute("stroke-width", "1");
+				c.setAttribute("stroke-opacity", "0.85");
+				group.appendChild(c);
+				if (applyTo) {
+					applyTo(c, data[i].src);
+				}
+			}
+			if (i == 0) {
+				cmd.push("L");
+				cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
+				cmd.push("L");
+				cmd.push(plot.axisX.getCoord(data[0][0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
+				cmd.push("Z");
+			} else {
+				var values = data[i - 1];
+				cmd.push("L");
+				cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot)));
+				for (var j = values.length - 2; j >= 0; j--) {
+					var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
+					var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
+					var dx = x - plot.axisX.getCoord(values[j + 1].x, plotarea, plot);
+					var dy = plot.axisY.getCoord(values[j + 1].y, plotarea, plot);
+					cmd.push("C");
+					var cx = x - (tension - 1) * (dx / tension);
+					cmd.push(cx + "," + dy);
+					cx = x - (dx / tension);
+					cmd.push(cx + "," + y);
+					cmd.push(x + "," + y);
+				}
+			}
+			path.setAttribute("d", cmd.join(" ") + " Z");
+			group.appendChild(path);
+		}
+		return group;
+	}, DataBar:function (data, plotarea, plot, applyTo) {
+		var area = plotarea.getArea();
+		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		var n = data.length;
+		var w = (area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower);
+		var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
+		for (var i = 0; i < n; i++) {
+			var value = data[i].y;
+			var yA = yOrigin;
+			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
+			var y = plot.axisY.getCoord(value, plotarea, plot);
+			var h = Math.abs(yA - y);
+			if (value < plot.axisX.origin) {
+				yA = y;
+				y = yOrigin;
+			}
+			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
+			bar.setAttribute("fill", data[i].series.color);
+			bar.setAttribute("stroke-width", "0");
+			bar.setAttribute("x", x);
+			bar.setAttribute("y", y);
+			bar.setAttribute("width", w);
+			bar.setAttribute("height", h);
+			bar.setAttribute("fill-opacity", "0.6");
+			if (applyTo) {
+				applyTo(bar, data[i].src);
+			}
+			group.appendChild(bar);
+		}
+		return group;
+	}, Line:function (data, plotarea, plot, applyTo) {
+		var area = plotarea.getArea();
+		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		if (data.length == 0) {
+			return line;
+		}
+		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
+		line.appendChild(path);
+		path.setAttribute("fill", "none");
+		path.setAttribute("stroke", data[0].series.color);
+		path.setAttribute("stroke-width", "2");
+		path.setAttribute("stroke-opacity", "0.85");
+		if (data[0].series.label != null) {
+			path.setAttribute("title", data[0].series.label);
+		}
+		var cmd = [];
+		for (var i = 0; i < data.length; i++) {
+			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
+			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
+			if (i == 0) {
+				cmd.push("M");
+			} else {
+				cmd.push("L");
+			}
+			cmd.push(x + "," + y);
+			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
+			c.setAttribute("cx", x);
+			c.setAttribute("cy", y);
+			c.setAttribute("r", "3");
+			c.setAttribute("fill", data[i].series.color);
+			c.setAttribute("fill-opacity", "0.6");
+			c.setAttribute("stroke-width", "1");
+			c.setAttribute("stroke-opacity", "0.85");
+			line.appendChild(c);
+			if (applyTo) {
+				applyTo(c, data[i].src);
+			}
+		}
+		path.setAttribute("d", cmd.join(" "));
+		return line;
+	}, CurvedLine:function (data, plotarea, plot, applyTo) {
+		var tension = 3;
+		var area = plotarea.getArea();
+		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		if (data.length == 0) {
+			return line;
+		}
+		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
+		line.appendChild(path);
+		path.setAttribute("fill", "none");
+		path.setAttribute("stroke", data[0].series.color);
+		path.setAttribute("stroke-width", "2");
+		path.setAttribute("stroke-opacity", "0.85");
+		if (data[0].series.label != null) {
+			path.setAttribute("title", data[0].series.label);
+		}
+		var cmd = [];
+		for (var i = 0; i < data.length; i++) {
+			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
+			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
+			var dx = area.left + 1;
+			var dy = area.bottom;
+			if (i > 0) {
+				dx = x - plot.axisX.getCoord(data[i - 1].x, plotarea, plot);
+				dy = plot.axisY.getCoord(data[i - 1].y, plotarea, plot);
+			}
+			if (i == 0) {
+				cmd.push("M");
+			} else {
+				cmd.push("C");
+				var cx = x - (tension - 1) * (dx / tension);
+				cmd.push(cx + "," + dy);
+				cx = x - (dx / tension);
+				cmd.push(cx + "," + y);
+			}
+			cmd.push(x + "," + y);
+			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
+			c.setAttribute("cx", x);
+			c.setAttribute("cy", y);
+			c.setAttribute("r", "3");
+			c.setAttribute("fill", data[i].series.color);
+			c.setAttribute("fill-opacity", "0.6");
+			c.setAttribute("stroke-width", "1");
+			c.setAttribute("stroke-opacity", "0.85");
+			line.appendChild(c);
+			if (applyTo) {
+				applyTo(c, data[i].src);
+			}
+		}
+		path.setAttribute("d", cmd.join(" "));
+		return line;
+	}, Area:function (data, plotarea, plot, applyTo) {
+		var area = plotarea.getArea();
+		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		if (data.length == 0) {
+			return line;
+		}
+		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
+		line.appendChild(path);
+		path.setAttribute("fill", data[0].series.color);
+		path.setAttribute("fill-opacity", "0.4");
+		path.setAttribute("stroke", data[0].series.color);
+		path.setAttribute("stroke-width", "1");
+		path.setAttribute("stroke-opacity", "0.85");
+		if (data[0].series.label != null) {
+			path.setAttribute("title", data[0].series.label);
+		}
+		var cmd = [];
+		for (var i = 0; i < data.length; i++) {
+			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
+			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
+			if (i == 0) {
+				cmd.push("M");
+			} else {
+				cmd.push("L");
+			}
+			cmd.push(x + "," + y);
+			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
+			c.setAttribute("cx", x);
+			c.setAttribute("cy", y);
+			c.setAttribute("r", "3");
+			c.setAttribute("fill", data[i].series.color);
+			c.setAttribute("fill-opacity", "0.6");
+			c.setAttribute("stroke-width", "1");
+			c.setAttribute("stroke-opacity", "0.85");
+			line.appendChild(c);
+			if (applyTo) {
+				applyTo(c, data[i].src);
+			}
+		}
+		cmd.push("L");
+		cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
+		cmd.push("L");
+		cmd.push(plot.axisX.getCoord(data[0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
+		cmd.push("Z");
+		path.setAttribute("d", cmd.join(" "));
+		return line;
+	}, CurvedArea:function (data, plotarea, plot, applyTo) {
+		var tension = 3;
+		var area = plotarea.getArea();
+		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		if (data.length == 0) {
+			return line;
+		}
+		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
+		line.appendChild(path);
+		path.setAttribute("fill", data[0].series.color);
+		path.setAttribute("fill-opacity", "0.4");
+		path.setAttribute("stroke", data[0].series.color);
+		path.setAttribute("stroke-width", "1");
+		path.setAttribute("stroke-opacity", "0.85");
+		if (data[0].series.label != null) {
+			path.setAttribute("title", data[0].series.label);
+		}
+		var cmd = [];
+		for (var i = 0; i < data.length; i++) {
+			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
+			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
+			var dx = area.left + 1;
+			var dy = area.bottom;
+			if (i > 0) {
+				dx = x - plot.axisX.getCoord(data[i - 1].x, plotarea, plot);
+				dy = plot.axisY.getCoord(data[i - 1].y, plotarea, plot);
+			}
+			if (i == 0) {
+				cmd.push("M");
+			} else {
+				cmd.push("C");
+				var cx = x - (tension - 1) * (dx / tension);
+				cmd.push(cx + "," + dy);
+				cx = x - (dx / tension);
+				cmd.push(cx + "," + y);
+			}
+			cmd.push(x + "," + y);
+			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
+			c.setAttribute("cx", x);
+			c.setAttribute("cy", y);
+			c.setAttribute("r", "3");
+			c.setAttribute("fill", data[i].series.color);
+			c.setAttribute("fill-opacity", "0.6");
+			c.setAttribute("stroke-width", "1");
+			c.setAttribute("stroke-opacity", "0.85");
+			line.appendChild(c);
+			if (applyTo) {
+				applyTo(c, data[i].src);
+			}
+		}
+		cmd.push("L");
+		cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
+		cmd.push("L");
+		cmd.push(plot.axisX.getCoord(data[0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
+		cmd.push("Z");
+		path.setAttribute("d", cmd.join(" "));
+		return line;
+	}, HighLow:function (data, plotarea, plot, applyTo) {
+		var area = plotarea.getArea();
+		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		var n = data.length;
+		var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
+		var w = part * 2;
+		for (var i = 0; i < n; i++) {
+			var high = data[i].high;
+			var low = data[i].low;
+			if (low > high) {
+				var t = low;
+				low = high;
+				high = t;
+			}
+			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
+			var y = plot.axisY.getCoord(high, plotarea, plot);
+			var h = plot.axisY.getCoord(low, plotarea, plot) - y;
+			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
+			bar.setAttribute("fill", data[i].series.color);
+			bar.setAttribute("stroke-width", "0");
+			bar.setAttribute("x", x);
+			bar.setAttribute("y", y);
+			bar.setAttribute("width", w);
+			bar.setAttribute("height", h);
+			bar.setAttribute("fill-opacity", "0.6");
+			if (applyTo) {
+				applyTo(bar, data[i].src);
+			}
+			group.appendChild(bar);
+		}
+		return group;
+	}, HighLowClose:function (data, plotarea, plot, applyTo) {
+		var area = plotarea.getArea();
+		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		var n = data.length;
+		var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
+		var w = part * 2;
+		for (var i = 0; i < n; i++) {
+			var high = data[i].high;
+			var low = data[i].low;
+			if (low > high) {
+				var t = low;
+				low = high;
+				high = t;
+			}
+			var c = data[i].close;
+			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
+			var y = plot.axisY.getCoord(high, plotarea, plot);
+			var h = plot.axisY.getCoord(low, plotarea, plot) - y;
+			var close = plot.axisY.getCoord(c, plotarea, plot);
+			var g = document.createElementNS(dojo.svg.xmlns.svg, "g");
+			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
+			bar.setAttribute("fill", data[i].series.color);
+			bar.setAttribute("stroke-width", "0");
+			bar.setAttribute("x", x);
+			bar.setAttribute("y", y);
+			bar.setAttribute("width", w);
+			bar.setAttribute("height", h);
+			bar.setAttribute("fill-opacity", "0.6");
+			g.appendChild(bar);
+			var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
+			line.setAttribute("x1", x);
+			line.setAttribute("x2", x + w + (part * 2));
+			line.setAttribute("y1", close);
+			line.setAttribute("y2", close);
+			line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;");
+			g.appendChild(line);
+			if (applyTo) {
+				applyTo(g, data[i].src);
+			}
+			group.appendChild(g);
+		}
+		return group;
+	}, HighLowOpenClose:function (data, plotarea, plot, applyTo) {
+		var area = plotarea.getArea();
+		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		var n = data.length;
+		var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
+		var w = part * 2;
+		for (var i = 0; i < n; i++) {
+			var high = data[i].high;
+			var low = data[i].low;
+			if (low > high) {
+				var t = low;
+				low = high;
+				high = t;
+			}
+			var o = data[i].open;
+			var c = data[i].close;
+			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
+			var y = plot.axisY.getCoord(high, plotarea, plot);
+			var h = plot.axisY.getCoord(low, plotarea, plot) - y;
+			var open = plot.axisY.getCoord(o, plotarea, plot);
+			var close = plot.axisY.getCoord(c, plotarea, plot);
+			var g = document.createElementNS(dojo.svg.xmlns.svg, "g");
+			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
+			bar.setAttribute("fill", data[i].series.color);
+			bar.setAttribute("stroke-width", "0");
+			bar.setAttribute("x", x);
+			bar.setAttribute("y", y);
+			bar.setAttribute("width", w);
+			bar.setAttribute("height", h);
+			bar.setAttribute("fill-opacity", "0.6");
+			g.appendChild(bar);
+			var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
+			line.setAttribute("x1", x - (part * 2));
+			line.setAttribute("x2", x + w);
+			line.setAttribute("y1", open);
+			line.setAttribute("y2", open);
+			line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;");
+			g.appendChild(line);
+			var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
+			line.setAttribute("x1", x);
+			line.setAttribute("x2", x + w + (part * 2));
+			line.setAttribute("y1", close);
+			line.setAttribute("y2", close);
+			line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;");
+			g.appendChild(line);
+			if (applyTo) {
+				applyTo(g, data[i].src);
+			}
+			group.appendChild(g);
+		}
+		return group;
+	}, Scatter:function (data, plotarea, plot, applyTo) {
+		var r = 7;
+		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		for (var i = 0; i < data.length; i++) {
+			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
+			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
+			var point = document.createElementNS(dojo.svg.xmlns.svg, "path");
+			point.setAttribute("fill", data[i].series.color);
+			point.setAttribute("stroke-width", "0");
+			point.setAttribute("d", "M " + x + "," + (y - r) + " " + "Q " + x + "," + y + " " + (x + r) + "," + y + " " + "Q " + x + "," + y + " " + x + "," + (y + r) + " " + "Q " + x + "," + y + " " + (x - r) + "," + y + " " + "Q " + x + "," + y + " " + x + "," + (y - r) + " " + "Z");
+			if (applyTo) {
+				applyTo(point, data[i].src);
+			}
+			group.appendChild(point);
+		}
+		return group;
+	}, Bubble:function (data, plotarea, plot, applyTo) {
+		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		var sizeFactor = 1;
+		for (var i = 0; i < data.length; i++) {
+			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
+			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
+			if (i == 0) {
+				var raw = data[i].size;
+				var dy = plot.axisY.getCoord(data[i].y + raw, plotarea, plot) - y;
+				sizeFactor = dy / raw;
+			}
+			if (sizeFactor < 1) {
+				sizeFactor = 1;
+			}
+			var point = document.createElementNS(dojo.svg.xmlns.svg, "circle");
+			point.setAttribute("fill", data[i].series.color);
+			point.setAttribute("fill-opacity", "0.8");
+			point.setAttribute("stroke", data[i].series.color);
+			point.setAttribute("stroke-width", "1");
+			point.setAttribute("cx", x);
+			point.setAttribute("cy", y);
+			point.setAttribute("r", (data[i].size / 2) * sizeFactor);
+			if (applyTo) {
+				applyTo(point, data[i].src);
+			}
+			group.appendChild(point);
+		}
+		return group;
+	}});
+	dojo.charting.Plotters["Default"] = dojo.charting.Plotters.Line;
+}
 
+
 __CPAN_FILE__ src/charting/svg/Axis.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -85717,223 +59367,183 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.charting.svg.Axis");
-dojo.require("dojo.lang.common");
-
-if(dojo.render.svg.capable){
-	dojo.extend(dojo.charting.Axis, {
-		renderLines: function(
-			/* dojo.charting.PlotArea */plotArea, 
-			/* dojo.charting.Plot */plot, 
-			/* string */plane
-		){
-			//	summary
-			//	Renders any reference lines for this axis.
-			if(this.nodes.lines){
-				while(this.nodes.lines.childNodes.length > 0){
-					this.nodes.lines.removeChild(this.nodes.lines.childNodes[0]);
-				}
-				if(this.nodes.lines.parentNode){
-					this.nodes.lines.parentNode.removeChild(this.nodes.lines);
-					this.nodes.lines = null;
-				}
-			}
-			
-			var area = plotArea.getArea();
-			var g = this.nodes.lines = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			g.setAttribute("id", this.getId()+"-lines");
-			for(var i=0; i<this._labels.length; i++){
-				if (this._labels[i].value == this.origin){ continue; }
-
-				var v = this.getCoord(this._labels[i].value, plotArea, plot);
-				var l=document.createElementNS(dojo.svg.xmlns.svg, "line");
-				l.setAttribute("style","stroke:#999;stroke-width:1px;stroke-dasharray:1,4;");
-				if(plane == "x"){
-					l.setAttribute("y1",area.top);
-					l.setAttribute("y2",area.bottom);
-					l.setAttribute("x1",v);
-					l.setAttribute("x2",v);
-				}
-				else if (plane == "y"){
-					l.setAttribute("y1",v);
-					l.setAttribute("y2",v);
-					l.setAttribute("x1",area.left);
-					l.setAttribute("x2",area.right);
-				}
-				g.appendChild(l);
-			}
-			return g;	//	SVGGElement
-		},
-		renderTicks: function(
-			/* dojo.charting.PlotArea */plotArea, 
-			/* dojo.charting.Plot */plot, 
-			/* string */plane,
-			/* float */coord
-		){
-			//	summary
-			//	Renders any tick lines for this axis.
-			if(this.nodes.ticks){
-				while(this.nodes.ticks.childNodes.length > 0){
-					this.nodes.ticks.removeChild(this.nodes.ticks.childNodes[0]);
-				}
-				if(this.nodes.ticks.parentNode){
-					this.nodes.ticks.parentNode.removeChild(this.nodes.ticks);
-					this.nodes.ticks = null;
-				}
-			}
-			
-			var g = this.nodes.ticks = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			g.setAttribute("id", this.getId()+"-ticks");
-			for(var i=0; i<this._labels.length; i++){
-				var v = this.getCoord(this._labels[i].value, plotArea, plot);
-
-				var l=document.createElementNS(dojo.svg.xmlns.svg, "line");
-				l.setAttribute("style","stroke:#000;stroke-width:1pt;");
-				if(plane == "x"){
-					l.setAttribute("y1",coord);
-					l.setAttribute("y2",coord+3);
-					l.setAttribute("x1",v);
-					l.setAttribute("x2",v);
-				}
-				else if (plane == "y"){
-					l.setAttribute("y1",v);
-					l.setAttribute("y2",v);
-					l.setAttribute("x1",coord-2);
-					l.setAttribute("x2",coord+2);
-				}
-				g.appendChild(l);
-			}
-			return g;	//	SVGGElement
-		},
-		renderLabels: function(
-			/* dojo.charting.PlotArea */plotArea, 
-			/* dojo.charting.Plot */plot, 
-			/* string */plane,
-			/* float */coord,
-			/* int */textSize,
-			/* string */anchor
-		){
-			//	summary
-			//	Render all labels for this axis.
-			function createLabel(label, x, y, textSize, anchor){
-				var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
-				text.setAttribute("x", x);
-				text.setAttribute("y", (plane=="x"?y:y+2));
-				text.setAttribute("style", "text-anchor:"+anchor+";font-family:sans-serif;font-size:"+textSize+"px;fill:#000;");
-				text.appendChild(document.createTextNode(label));
-				return text;
-			};
-
-			//	wipe if needed
-			if(this.nodes.labels){
-				while(this.nodes.labels.childNodes.length > 0){
-					this.nodes.labels.removeChild(this.nodes.labels.childNodes[0]);
-				}
-				if(this.nodes.labels.parentNode){
-					this.nodes.labels.parentNode.removeChild(this.nodes.labels);
-					this.nodes.labels = null;
-				}
-			}
-			var g = this.nodes.labels = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			g.setAttribute("id", this.getId()+"-labels");
-
-			for(var i=0; i<this._labels.length; i++){
-				var v = this.getCoord(this._labels[i].value, plotArea, plot);
-				if(plane == "x"){
-					g.appendChild(createLabel(this._labels[i].label, v, coord, textSize, anchor));
-				}
-				else if (plane == "y"){
-					g.appendChild(createLabel(this._labels[i].label, coord, v, textSize, anchor));
-				}
-			}
-			return g;	//	SVGGelement
-		},
-		render: function(
-			/* dojo.charting.PlotArea */plotArea, 
-			/* dojo.charting.Plot */plot,
-			/* dojo.charting.Axis */drawAgainst,
-			/* string */plane
-		){
-			//	summary
-			//	Renders this axis to the given plot.
-			
-			//	get the origin plot point.
-			var area = plotArea.getArea();
-			var stroke = 1;
-			var style = "stroke:#000;stroke-width:"+stroke+"px;";
-			var textSize=10;
-			var coord = drawAgainst.getCoord(this.origin, plotArea, plot);
-
-			//	draw the axis.
-			this.nodes.main = document.createElementNS(dojo.svg.xmlns.svg, "g");
-			var g = this.nodes.main;
-			g.setAttribute("id", this.getId());	//	need a handle if we have to kill parts of the axis def.
-			var line = this.nodes.axis = document.createElementNS(dojo.svg.xmlns.svg, "line");
-			if(plane == "x"){
-				line.setAttribute("y1", coord);
-				line.setAttribute("y2", coord);
-				line.setAttribute("x1", area.left-stroke);
-				line.setAttribute("x2", area.right+stroke);
-				line.setAttribute("style", style);
-
-				//	set up the labels
-				var y = coord+textSize+2;
-				if(this.showLines){
-					g.appendChild(this.renderLines(plotArea, plot, plane, y));
-				}
-				if(this.showTicks){
-					g.appendChild(this.renderTicks(plotArea, plot, plane, coord));
-				}
-				if(this.showLabels){
-					g.appendChild(this.renderLabels(plotArea, plot, plane, y, textSize, "middle"));
-				}
-				if(this.showLabel && this.label){
-					var x = plotArea.size.width/2;
-					var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
-					text.setAttribute("x", x);
-					text.setAttribute("y", (coord + (textSize*2) + (textSize/2)));
-					text.setAttribute("style", "text-anchor:middle;font-family:sans-serif;font-weight:bold;font-size:"+(textSize+2)+"px;fill:#000;");
-					text.appendChild(document.createTextNode(this.label));
-					g.appendChild(text);
-				}
-			} else {
-				line.setAttribute("x1", coord);
-				line.setAttribute("x2", coord);
-				line.setAttribute("y1", area.top);
-				line.setAttribute("y2", area.bottom);
-				line.setAttribute("style", style);
-
-				//	set up the labels
-				var isMax = this.origin == drawAgainst.range.upper;
-				var x = coord + (isMax?4:-4);
-				var anchor = isMax?"start":"end";
-				if(this.showLines){
-					g.appendChild(this.renderLines(plotArea, plot, plane, x));
-				}
-				if(this.showTicks){
-					g.appendChild(this.renderTicks(plotArea, plot, plane, coord));
-				}
-				if(this.showLabels){
-					g.appendChild(this.renderLabels(plotArea, plot, plane, x, textSize, anchor));
-				}
-				if(this.showLabel && this.label){
-					var x = isMax?(coord+(textSize*2)+(textSize/2)):(coord-(textSize*4));
-					var y = plotArea.size.height / 2;
-					var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
-					text.setAttribute("x", x);
-					text.setAttribute("y", y);
-					text.setAttribute("transform", "rotate(90, " + x + ", " + y + ")");
-					text.setAttribute("style", "text-anchor:middle;font-family:sans-serif;font-weight:bold;font-size:"+(textSize+2)+"px;fill:#000;");
-					text.appendChild(document.createTextNode(this.label));
-					g.appendChild(text);
-				}
-			}
-			g.appendChild(line);
-			return g;	// 	SVGGElement
-		}
-	});
-}
+dojo.provide("dojo.charting.svg.Axis");
+dojo.require("dojo.lang.common");
+if (dojo.render.svg.capable) {
+	dojo.extend(dojo.charting.Axis, {renderLines:function (plotArea, plot, plane) {
+		if (this.nodes.lines) {
+			while (this.nodes.lines.childNodes.length > 0) {
+				this.nodes.lines.removeChild(this.nodes.lines.childNodes[0]);
+			}
+			if (this.nodes.lines.parentNode) {
+				this.nodes.lines.parentNode.removeChild(this.nodes.lines);
+				this.nodes.lines = null;
+			}
+		}
+		var area = plotArea.getArea();
+		var g = this.nodes.lines = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		g.setAttribute("id", this.getId() + "-lines");
+		for (var i = 0; i < this._labels.length; i++) {
+			if (this._labels[i].value == this.origin) {
+				continue;
+			}
+			var v = this.getCoord(this._labels[i].value, plotArea, plot);
+			var l = document.createElementNS(dojo.svg.xmlns.svg, "line");
+			l.setAttribute("style", "stroke:#999;stroke-width:1px;stroke-dasharray:1,4;");
+			if (plane == "x") {
+				l.setAttribute("y1", area.top);
+				l.setAttribute("y2", area.bottom);
+				l.setAttribute("x1", v);
+				l.setAttribute("x2", v);
+			} else {
+				if (plane == "y") {
+					l.setAttribute("y1", v);
+					l.setAttribute("y2", v);
+					l.setAttribute("x1", area.left);
+					l.setAttribute("x2", area.right);
+				}
+			}
+			g.appendChild(l);
+		}
+		return g;
+	}, renderTicks:function (plotArea, plot, plane, coord) {
+		if (this.nodes.ticks) {
+			while (this.nodes.ticks.childNodes.length > 0) {
+				this.nodes.ticks.removeChild(this.nodes.ticks.childNodes[0]);
+			}
+			if (this.nodes.ticks.parentNode) {
+				this.nodes.ticks.parentNode.removeChild(this.nodes.ticks);
+				this.nodes.ticks = null;
+			}
+		}
+		var g = this.nodes.ticks = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		g.setAttribute("id", this.getId() + "-ticks");
+		for (var i = 0; i < this._labels.length; i++) {
+			var v = this.getCoord(this._labels[i].value, plotArea, plot);
+			var l = document.createElementNS(dojo.svg.xmlns.svg, "line");
+			l.setAttribute("style", "stroke:#000;stroke-width:1pt;");
+			if (plane == "x") {
+				l.setAttribute("y1", coord);
+				l.setAttribute("y2", coord + 3);
+				l.setAttribute("x1", v);
+				l.setAttribute("x2", v);
+			} else {
+				if (plane == "y") {
+					l.setAttribute("y1", v);
+					l.setAttribute("y2", v);
+					l.setAttribute("x1", coord - 2);
+					l.setAttribute("x2", coord + 2);
+				}
+			}
+			g.appendChild(l);
+		}
+		return g;
+	}, renderLabels:function (plotArea, plot, plane, coord, textSize, anchor) {
+		function createLabel(label, x, y, textSize, anchor) {
+			var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
+			text.setAttribute("x", x);
+			text.setAttribute("y", (plane == "x" ? y : y + 2));
+			text.setAttribute("style", "text-anchor:" + anchor + ";font-family:sans-serif;font-size:" + textSize + "px;fill:#000;");
+			text.appendChild(document.createTextNode(label));
+			return text;
+		}
+		if (this.nodes.labels) {
+			while (this.nodes.labels.childNodes.length > 0) {
+				this.nodes.labels.removeChild(this.nodes.labels.childNodes[0]);
+			}
+			if (this.nodes.labels.parentNode) {
+				this.nodes.labels.parentNode.removeChild(this.nodes.labels);
+				this.nodes.labels = null;
+			}
+		}
+		var g = this.nodes.labels = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		g.setAttribute("id", this.getId() + "-labels");
+		for (var i = 0; i < this._labels.length; i++) {
+			var v = this.getCoord(this._labels[i].value, plotArea, plot);
+			if (plane == "x") {
+				g.appendChild(createLabel(this._labels[i].label, v, coord, textSize, anchor));
+			} else {
+				if (plane == "y") {
+					g.appendChild(createLabel(this._labels[i].label, coord, v, textSize, anchor));
+				}
+			}
+		}
+		return g;
+	}, render:function (plotArea, plot, drawAgainst, plane) {
+		if (!this._rerender && this.nodes.main) {
+			return this.nodes.main;
+		}
+		this._rerender = false;
+		var area = plotArea.getArea();
+		var stroke = 1;
+		var style = "stroke:#000;stroke-width:" + stroke + "px;";
+		var textSize = 10;
+		var coord = drawAgainst.getCoord(this.origin, plotArea, plot);
+		this.nodes.main = document.createElementNS(dojo.svg.xmlns.svg, "g");
+		var g = this.nodes.main;
+		g.setAttribute("id", this.getId());
+		var line = this.nodes.axis = document.createElementNS(dojo.svg.xmlns.svg, "line");
+		if (plane == "x") {
+			line.setAttribute("y1", coord);
+			line.setAttribute("y2", coord);
+			line.setAttribute("x1", area.left - stroke);
+			line.setAttribute("x2", area.right + stroke);
+			line.setAttribute("style", style);
+			var y = coord + textSize + 2;
+			if (this.showLines) {
+				g.appendChild(this.renderLines(plotArea, plot, plane, y));
+			}
+			if (this.showTicks) {
+				g.appendChild(this.renderTicks(plotArea, plot, plane, coord));
+			}
+			if (this.showLabels) {
+				g.appendChild(this.renderLabels(plotArea, plot, plane, y, textSize, "middle"));
+			}
+			if (this.showLabel && this.label) {
+				var x = plotArea.size.width / 2;
+				var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
+				text.setAttribute("x", x);
+				text.setAttribute("y", (coord + (textSize * 2) + (textSize / 2)));
+				text.setAttribute("style", "text-anchor:middle;font-family:sans-serif;font-weight:bold;font-size:" + (textSize + 2) + "px;fill:#000;");
+				text.appendChild(document.createTextNode(this.label));
+				g.appendChild(text);
+			}
+		} else {
+			line.setAttribute("x1", coord);
+			line.setAttribute("x2", coord);
+			line.setAttribute("y1", area.top);
+			line.setAttribute("y2", area.bottom);
+			line.setAttribute("style", style);
+			var isMax = this.origin == drawAgainst.range.upper;
+			var x = coord + (isMax ? 4 : -4);
+			var anchor = isMax ? "start" : "end";
+			if (this.showLines) {
+				g.appendChild(this.renderLines(plotArea, plot, plane, x));
+			}
+			if (this.showTicks) {
+				g.appendChild(this.renderTicks(plotArea, plot, plane, coord));
+			}
+			if (this.showLabels) {
+				g.appendChild(this.renderLabels(plotArea, plot, plane, x, textSize, anchor));
+			}
+			if (this.showLabel && this.label) {
+				var x = isMax ? (coord + (textSize * 2) + (textSize / 2)) : (coord - (textSize * 4));
+				var y = plotArea.size.height / 2;
+				var text = document.createElementNS(dojo.svg.xmlns.svg, "text");
+				text.setAttribute("x", x);
+				text.setAttribute("y", y);
+				text.setAttribute("transform", "rotate(90, " + x + ", " + y + ")");
+				text.setAttribute("style", "text-anchor:middle;font-family:sans-serif;font-weight:bold;font-size:" + (textSize + 2) + "px;fill:#000;");
+				text.appendChild(document.createTextNode(this.label));
+				g.appendChild(text);
+			}
+		}
+		g.appendChild(line);
+		return g;
+	}});
+}
 
+
 __CPAN_DIR__ src/charting/vml
 __CPAN_FILE__ src/charting/vml/PlotArea.js
 /*
@@ -85946,77 +59556,64 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.charting.vml.PlotArea");
-dojo.require("dojo.lang.common");
-
-if(dojo.render.vml.capable){
-	dojo.extend(dojo.charting.PlotArea, {
-		initializePlot: function(plot){
-			//	summary
-			//	Initialize the plot node for data rendering.
-			plot.destroy();
-			plot.dataNode = document.createElement("div");
-			plot.dataNode.id  = plot.getId();
-			return plot.dataNode;	//	HTMLDivElement
-		},
-		initialize:function(){
-			//	summary
-			//	Initialize the PlotArea.
-		
-			this.destroy();	//	kill everything first.
-			var main = this.nodes.main = document.createElement("div");
-			
-			//	start with the background
-			var area = this.nodes.area = document.createElement("div");
-			area.id = this.getId();
-			area.style.width=this.size.width+"px";
-			area.style.height=this.size.height+"px";
-			area.style.position="absolute";
-			main.appendChild(area);
-		
-			var bg = this.nodes.background = document.createElement("div");
-			bg.id = this.getId()+"-background";
-			bg.style.width=this.size.width+"px";
-			bg.style.height=this.size.height+"px";
-			bg.style.position="absolute";
-			bg.style.top="0px";
-			bg.style.left="0px";
-			bg.style.backgroundColor="#fff";
-			area.appendChild(bg);
-
-			//	the plot group
-			var a=this.getArea();
-			var plots = this.nodes.plots = document.createElement("div");
-			plots.id = this.getId()+"-plots";
-			plots.style.width=this.size.width+"px";
-			plots.style.height=this.size.height+"px";
-			plots.style.position="absolute";
-			plots.style.top="0px";
-			plots.style.left="0px";
-			plots.style.clip="rect("
-				+ a.top+" "
-				+ a.right+" "
-				+ a.bottom+" "
-				+ a.left
-				+")";
-			area.appendChild(plots);
-			for(var i=0; i<this.plots.length; i++){
-				plots.appendChild(this.initializePlot(this.plots[i]));
-			}
-
-			var axes = this.nodes.axes = document.createElement("div");
-			axes.id = this.getId() + "-axes";
-			area.appendChild(axes);
-			var ax = this.getAxes();
-			for(var p in ax){
-				var obj = ax[p];
-				axes.appendChild(obj.axis.initialize(this, obj.plot, obj.drawAgainst, obj.plane));
-			}
-			return main;	//	HTMLDivElement
-		}
-	});
-}
+dojo.provide("dojo.charting.vml.PlotArea");
+dojo.require("dojo.lang.common");
+if (dojo.render.vml.capable) {
+	dojo.extend(dojo.charting.PlotArea, {resize:function () {
+		var a = this.getArea();
+		this.nodes.area.style.width = this.size.width + "px";
+		this.nodes.area.style.height = this.size.height + "px";
+		this.nodes.background.style.width = this.size.width + "px";
+		this.nodes.background.style.height = this.size.height + "px";
+		this.nodes.plots.width = this.size.width + "px";
+		this.nodes.plots.height = this.size.height + "px";
+		this.nodes.plots.style.clip = "rect(" + a.top + " " + a.right + " " + a.bottom + " " + a.left + ")";
+		if (this.nodes.axes) {
+			this.nodes.area.removeChild(this.nodes.axes);
+		}
+		var axes = this.nodes.axes = document.createElement("div");
+		axes.id = this.getId() + "-axes";
+		this.nodes.area.appendChild(axes);
+		var ax = this.getAxes();
+		for (var p in ax) {
+			var obj = ax[p];
+			axes.appendChild(obj.axis.initialize(this, obj.plot, obj.drawAgainst, obj.plane));
+		}
+	}, initializePlot:function (plot) {
+		plot.destroy();
+		plot.dataNode = document.createElement("div");
+		plot.dataNode.id = plot.getId();
+		return plot.dataNode;
+	}, initialize:function () {
+		this.destroy();
+		var main = this.nodes.main = document.createElement("div");
+		var area = this.nodes.area = document.createElement("div");
+		area.id = this.getId();
+		area.style.position = "absolute";
+		main.appendChild(area);
+		var bg = this.nodes.background = document.createElement("div");
+		bg.id = this.getId() + "-background";
+		bg.style.position = "absolute";
+		bg.style.top = "0px";
+		bg.style.left = "0px";
+		bg.style.backgroundColor = "#fff";
+		area.appendChild(bg);
+		var a = this.getArea();
+		var plots = this.nodes.plots = document.createElement("div");
+		plots.id = this.getId() + "-plots";
+		plots.style.position = "absolute";
+		plots.style.top = "0px";
+		plots.style.left = "0px";
+		area.appendChild(plots);
+		for (var i = 0; i < this.plots.length; i++) {
+			plots.appendChild(this.initializePlot(this.plots[i]));
+		}
+		this.resize();
+		return main;
+	}});
+}
 
+
 __CPAN_FILE__ src/charting/vml/Plotters.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -86028,1074 +59625,884 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.charting.vml.Plotters");
-dojo.require("dojo.lang.common");
-
-if(dojo.render.vml.capable){
-	dojo.mixin(dojo.charting.Plotters, {
-		/*********************************************************
-		 *	Grouped plotters: need all series on a plot at once.
-		 *********************************************************/
-		_group: function(plotarea){
-			var group = document.createElement("div");
-			group.style.position="absolute";
-			group.style.top="0px";
-			group.style.left="0px";
-			group.style.width=plotarea.size.width+"px";
-			group.style.height=plotarea.size.height+"px";
-			return group;
-		},
-		Bar: function(
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* object? */kwArgs,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots a set of grouped bars.
-			//	Bindings: y
-			var area = plotarea.getArea();
-			var group = dojo.charting.Plotters._group(plotarea);
-			
-			//	precompile the data
-			var n = plot.series.length;	//	how many series
-			var data = [];
-			for(var i=0; i<n; i++){
-				var tmp = plot.series[i].data.evaluate(kwArgs);
-				data.push(tmp);
-			}
-
-			//	calculate the width of each bar.
-			var space = 8;
-			var nPoints = data[0].length;
-			var width = ((area.right-area.left)-(space*(nPoints-1)))/nPoints;	//	the width of each group.
-			var barWidth = Math.round(width/n);	//	the width of each bar, no spaces.
-			var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
-
-			for(var i=0; i<nPoints; i++){
-				//	calculate offset
-				var xStart = area.left+(width*i)+(space*i);
-				for(var j=0; j<n; j++){
-					var value = data[j][i].y;
-					var yA = yOrigin;
-					var x = xStart + (barWidth*j);
-					var y = plot.axisY.getCoord(value, plotarea, plot);
-					var h = Math.abs(yA-y);
-					if(value < plot.axisX.origin){
-						yA = y;
-						y = yOrigin;
-					}
-					
-					var bar=document.createElement("v:rect");
-					bar.style.position="absolute";
-					bar.style.top=y+1+"px";
-					bar.style.left=x+"px";
-					bar.style.width=barWidth+"px";
-					bar.style.height=h+"px";
-					bar.setAttribute("fillColor", data[j][i].series.color);
-					bar.setAttribute("stroked", "false");
-					bar.style.antialias="false";
-					var fill=document.createElement("v:fill");
-					fill.setAttribute("opacity", "0.6");
-					bar.appendChild(fill);
-					if(applyTo){ applyTo(bar, data[j][i].src); }
-					group.appendChild(bar);
-				}
-			}
-			return group;	//	HTMLDivElement
-		},
-		HorizontalBar: function(
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* object? */kwArgs,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots data in a set of grouped bars horizontally.
-			//	Bindings: y
-			var area = plotarea.getArea();
-			var group = dojo.charting.Plotters._group(plotarea);
-			
-			//	precompile the data
-			var n = plot.series.length;	//	how many series
-			var data = [];
-			for(var i=0; i<n; i++){
-				var tmp = plot.series[i].data.evaluate(kwArgs);
-				data.push(tmp);
-			}
-
-			var space = 6;
-			var nPoints = data[0].length;
-			var h = ((area.bottom-area.top)-(space*(nPoints-1)))/nPoints;
-			var barH = h/n;
-			var xOrigin = plot.axisX.getCoord(0, plotarea, plot);
-
-			for(var i=0; i<nPoints; i++){
-				//	calculate offset
-				var yStart = area.top+(h*i)+(space*i);
-				for(var j=0; j<n; j++){
-					var value = data[j][i].y;
-					var y = yStart + (barH*j);
-					var xA = xOrigin;
-					var x = plot.axisX.getCoord(value, plotarea, plot);
-					var w = Math.abs(x-xA);
-					if(value > 0){
-						x = xOrigin;
-					}
-					
-					var bar=document.createElement("v:rect");
-					bar.style.position="absolute";
-					bar.style.top=y+1+"px";
-					bar.style.left=xA+"px";
-					bar.style.width=w+"px";
-					bar.style.height=barH+"px";
-					bar.setAttribute("fillColor", data[j][i].series.color);
-					bar.setAttribute("stroked", "false");
-					bar.style.antialias="false";
-					var fill=document.createElement("v:fill");
-					fill.setAttribute("opacity", "0.6");
-					bar.appendChild(fill);
-					if(applyTo){ applyTo(bar, data[j][i].src); }
-					group.appendChild(bar);
-				}
-			}
-
-			//	calculate the width of each bar.
-			var space = 4;
-			var n = plot.series.length;
-			var h = ((area.bottom-area.top)-(space*(n-1)))/n;
-			var xOrigin = plot.axisX.getCoord(0, plotarea, plot);
-			for(var i=0; i<n; i++){
-				var series = plot.series[i];
-				var data = series.data.evaluate(kwArgs);
-				var y = area.top+(h*i)+(space*i);
-				var value = data[data.length-1].y;
-
-				var xA = xOrigin;
-				var x = plot.axisX.getCoord(value, plotarea, plot);
-				var w = Math.abs(xA-x);
-				if(value > 0){
-					xA = x;
-					x = xOrigin;
-				}
-				
-			}
-			return group;	//	HTMLDivElement
-		},
-		Gantt: function(
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* object? */kwArgs,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots a grouped set of Gantt bars
-			//	Bindings: high/low
-			var area = plotarea.getArea();
-			var group = dojo.charting.Plotters._group(plotarea);
-
-			//	precompile the data
-			var n = plot.series.length;	//	how many series
-			var data = [];
-			for(var i=0; i<n; i++){
-				var tmp = plot.series[i].data.evaluate(kwArgs);
-				data.push(tmp);
-			}
-
-			var space = 2;
-			var nPoints = data[0].length;
-			var h = ((area.bottom-area.top)-(space*(nPoints-1)))/nPoints;
-			var barH = h/n;
-			for(var i=0; i<nPoints; i++){
-				//	calculate offset
-				var yStart = area.top+(h*i)+(space*i);
-				for(var j=0; j<n; j++){
-					var high = data[j][i].high;
-					var low = data[j][i].low;
-					if(low > high){
-						var t = high;
-						high = low;
-						low = t;
-					}
-					var x = plot.axisX.getCoord(low, plotarea, plot);
-					var w = plot.axisX.getCoord(high, plotarea, plot) - x;
-					var y = yStart + (barH*j);
-					
-					var bar=document.createElement("v:rect");
-					bar.style.position="absolute";
-					bar.style.top=y+1+"px";
-					bar.style.left=x+"px";
-					bar.style.width=w+"px";
-					bar.style.height=barH+"px";
-					bar.setAttribute("fillColor", data[j][i].series.color);
-					bar.setAttribute("stroked", "false");
-					bar.style.antialias="false";
-					var fill=document.createElement("v:fill");
-					fill.setAttribute("opacity", "0.6");
-					bar.appendChild(fill);
-					if(applyTo){ applyTo(bar, data[j][i].src); }
-					group.appendChild(bar);
-				}
-			}
-			return group;	//	HTMLDivElement
-		},
-		StackedArea: function(
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* object? */kwArgs,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots a set of stacked areas.
-			//	Bindings: x/y
-			var area = plotarea.getArea();
-			var group = dojo.charting.Plotters._group(plotarea);
-
-			//	precompile the data
-			var n = plot.series.length;	//	how many series
-			var data = [];
-			var totals = [];
-
-			//	we're assuming that all series for this plot has the name x assignment for now.
-			for(var i=0; i<n; i++){
-				var tmp = plot.series[i].data.evaluate(kwArgs);
-				//	run through and add current totals
-				for(var j=0; j<tmp.length; j++){
-					if(i==0){ totals.push(tmp[j].y); }
-					else { totals[j] += tmp[j].y; }
-					tmp[j].y = totals[j];
-				}
-				data.push(tmp);
-			}
-
-			for(var i=n-1; i>=0; i--){
-				var path=document.createElement("v:shape");
-				path.setAttribute("strokeweight", "1px");
-				path.setAttribute("strokecolor", data[i][0].series.color);
-				path.setAttribute("fillcolor", data[i][0].series.color);
-				path.setAttribute("coordsize", (area.right-area.left) + "," + (area.bottom-area.top));
-				path.style.position="absolute";
-				path.style.top="0px";
-				path.style.left="0px";
-				path.style.width=area.right-area.left+"px";
-				path.style.height=area.bottom-area.top+"px";
-				var stroke=document.createElement("v:stroke");
-				stroke.setAttribute("opacity", "0.8");
-				path.appendChild(stroke);
-				var fill=document.createElement("v:fill");
-				fill.setAttribute("opacity", "0.4");
-				path.appendChild(fill);
-
-				var cmd = [];
-				var r=3;
-				for(var j=0; j<data[i].length; j++){
-					var values = data[i];
-					var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot));
-					var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot));
-
-					if (j==0){
-						cmd.push("m");
-						cmd.push(x+","+y);
-					}else{
-						cmd.push("l");
-						cmd.push(x+","+y);
-					}
-
-					//	add the circle.
-					var c = document.createElement("v:oval");
-					c.setAttribute("strokeweight", "1px");
-					c.setAttribute("strokecolor", values[j].series.color);
-					c.setAttribute("fillcolor", values[j].series.color);
-					var str=document.createElement("v:stroke");
-					str.setAttribute("opacity","0.8");
-					c.appendChild(str);
-					str=document.createElement("v:fill");
-					str.setAttribute("opacity","0.6");
-					c.appendChild(str);
-					var s=c.style;
-					s.position="absolute";
-					s.top=(y-r)+"px";
-					s.left=(x-r)+"px";
-					s.width=(r*2)+"px";
-					s.height=(r*2)+"px";
-					group.appendChild(c);
-					if(applyTo){ applyTo(c, data[j].src); }
-				}
-
-				//	now run the path backwards from the previous series.
-				if(i == 0){
-					cmd.push("l");
-					cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
-					cmd.push("l");
-					cmd.push(Math.round(plot.axisX.getCoord(data[0][0].x, plotarea, plot)) + "," +  Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
-				} else {
-					var values = data[i-1];
-					cmd.push("l");
-					cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length-1].y, plotarea, plot)));
-					for(var j=values.length-2; j>=0; j--){
-						var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot));
-						var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot));
-						
-						cmd.push("l");
-						cmd.push(x+","+y);
-					}
-				}
-				path.setAttribute("path", cmd.join(" ")+" x e");
-				group.appendChild(path);
-			}
-			return group;	//	HTMLDivElement
-		},
-		StackedCurvedArea: function(
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* object? */kwArgs,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots a set of stacked areas, using a tensioning factor to soften points.
-			//	Bindings: x/y
-			var tension = 3;
-			var area = plotarea.getArea();
-			var group = dojo.charting.Plotters._group(plotarea);
-
-			//	precompile the data
-			var n = plot.series.length;	//	how many series
-			var data = [];
-			var totals = [];
-
-			//	we're assuming that all series for this plot has the name x assignment for now.
-			for(var i=0; i<n; i++){
-				var tmp = plot.series[i].data.evaluate(kwArgs);
-				//	run through and add current totals
-				for(var j=0; j<tmp.length; j++){
-					if(i==0){ totals.push(tmp[j].y); }
-					else { totals[j] += tmp[j].y; }
-					tmp[j].y = totals[j];
-				}
-				data.push(tmp);
-			}
-
-			for(var i=n-1; i>=0; i--){
-				var path=document.createElement("v:shape");
-				path.setAttribute("strokeweight", "1px");
-				path.setAttribute("strokecolor", data[i][0].series.color);
-				path.setAttribute("fillcolor", data[i][0].series.color);
-				path.setAttribute("coordsize", (area.right-area.left) + "," + (area.bottom-area.top));
-				path.style.position="absolute";
-				path.style.top="0px";
-				path.style.left="0px";
-				path.style.width=area.right-area.left+"px";
-				path.style.height=area.bottom-area.top+"px";
-				var stroke=document.createElement("v:stroke");
-				stroke.setAttribute("opacity", "0.8");
-				path.appendChild(stroke);
-				var fill=document.createElement("v:fill");
-				fill.setAttribute("opacity", "0.4");
-				path.appendChild(fill);
-
-				var cmd = [];
-				var r=3;
-				for(var j=0; j<data[i].length; j++){
-					var values = data[i];
-					var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot));
-					var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot));
-
-					if (j==0){
-						cmd.push("m");
-						cmd.push(x+","+y);
-					}else{
-						var lastx = Math.round(plot.axisX.getCoord(values[j-1].x, plotarea, plot));
-						var lasty = Math.round(plot.axisY.getCoord(values[j-1].y, plotarea, plot));
-						var dx=x-lastx;
-						var dy=y-lasty;
-						
-						cmd.push("c");
-						var cx=Math.round((x-(tension-1)*(dx/tension)));
-						cmd.push(cx+","+lasty);
-						cx=Math.round((x-(dx/tension)));
-						cmd.push(cx+","+y);
-						cmd.push(x+","+y);
-					}
-
-					//	add the circle.
-					var c = document.createElement("v:oval");
-					c.setAttribute("strokeweight", "1px");
-					c.setAttribute("strokecolor", values[j].series.color);
-					c.setAttribute("fillcolor", values[j].series.color);
-					var str=document.createElement("v:stroke");
-					str.setAttribute("opacity","0.8");
-					c.appendChild(str);
-					str=document.createElement("v:fill");
-					str.setAttribute("opacity","0.6");
-					c.appendChild(str);
-					var s=c.style;
-					s.position="absolute";
-					s.top=(y-r)+"px";
-					s.left=(x-r)+"px";
-					s.width=(r*2)+"px";
-					s.height=(r*2)+"px";
-					group.appendChild(c);
-					if(applyTo){ applyTo(c, data[j].src); }
-				}
-
-				//	now run the path backwards from the previous series.
-				if(i == 0){
-					cmd.push("l");
-					cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
-					cmd.push("l");
-					cmd.push(Math.round(plot.axisX.getCoord(data[0][0].x, plotarea, plot)) + "," +  Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
-				} else {
-					var values = data[i-1];
-					cmd.push("l");
-					cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length-1].y, plotarea, plot)));
-					for(var j=values.length-2; j>=0; j--){
-						var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot));
-						var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot));
-
-						var lastx = Math.round(plot.axisX.getCoord(values[j+1].x, plotarea, plot));
-						var lasty = Math.round(plot.axisY.getCoord(values[j+1].y, plotarea, plot));
-						var dx=x-lastx;
-						var dy=y-lasty;
-						
-						cmd.push("c");
-						var cx=Math.round((x-(tension-1)*(dx/tension)));
-						cmd.push(cx+","+lasty);
-						cx=Math.round((x-(dx/tension)));
-						cmd.push(cx+","+y);
-						cmd.push(x+","+y);
-					}
-				}
-				path.setAttribute("path", cmd.join(" ")+" x e");
-				group.appendChild(path);
-			}
-			return group;	//	HTMLDivElement
-		},
-
-		/*********************************************************
-		 *	Single plotters: one series at a time.
-		 *********************************************************/
-		DataBar: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots a set of bars in relation to y==0.
-			//	Bindings: x/y
-			var area = plotarea.getArea();
-			var group = dojo.charting.Plotters._group(plotarea);
-			
-			var n = data.length;
-			var w = (area.right-area.left)/(plot.axisX.range.upper - plot.axisX.range.lower);	//	the width of each group.
-			var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
-
-			for(var i=0; i<n; i++){
-				//	calculate offset
-				var value = data[i].y;
-				var yA = yOrigin;
-				var x = plot.axisX.getCoord(data[i].x, plotarea, plot)-(w/2)+1;
-				var y = plot.axisY.getCoord(value, plotarea, plot);
-				var h = Math.abs(yA-y);
-				if(value < plot.axisX.origin){
-					yA = y;
-					y = yOrigin;
-				}
-				var bar=document.createElement("v:rect");
-				bar.style.position="absolute";
-				bar.style.top=y+1+"px";
-				bar.style.left=x+"px";
-				bar.style.width=w+"px";
-				bar.style.height=h+"px";
-				bar.setAttribute("fillColor", data[i].series.color);
-				bar.setAttribute("stroked", "false");
-				bar.style.antialias="false";
-				var fill=document.createElement("v:fill");
-				fill.setAttribute("opacity", "0.6");
-				bar.appendChild(fill);
-				if(applyTo){ applyTo(bar, data[i].src); }
-				group.appendChild(bar);
-			}
-			return group;	//	HTMLDivElement
-		},
-		Line: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as a line.
-			//	Bindings: x/y
-			var area = plotarea.getArea();
-			var group = dojo.charting.Plotters._group(plotarea);
-
-			var path=document.createElement("v:shape");
-			path.setAttribute("strokeweight", "2px");
-			path.setAttribute("strokecolor", data[0].series.color);
-			path.setAttribute("fillcolor", "none");
-			path.setAttribute("filled", "false");
-			path.setAttribute("coordsize", (area.right-area.left) + "," + (area.bottom-area.top));
-			path.style.position="absolute";
-			path.style.top="0px";
-			path.style.left="0px";
-			path.style.width=area.right-area.left+"px";
-			path.style.height=area.bottom-area.top+"px";
-			var stroke=document.createElement("v:stroke");
-			stroke.setAttribute("opacity", "0.8");
-			path.appendChild(stroke);
-
-			var cmd = [];
-			var r=3;
-			for(var i=0; i<data.length; i++){
-				var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
-				var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
-
-				if (i==0){
-					cmd.push("m");
-					cmd.push(x+","+y);
-				}else{
-					cmd.push("l");
-					cmd.push(x+","+y);
-				}
-
-				//	add the circle.
-				var c = document.createElement("v:oval");
-				c.setAttribute("strokeweight", "1px");
-				c.setAttribute("strokecolor", data[i].series.color);
-				c.setAttribute("fillcolor", data[i].series.color);
-				var str=document.createElement("v:stroke");
-				str.setAttribute("opacity","0.8");
-				c.appendChild(str);
-				str=document.createElement("v:fill");
-				str.setAttribute("opacity","0.6");
-				c.appendChild(str);
-				var s=c.style;
-				s.position="absolute";
-				s.top=(y-r)+"px";
-				s.left=(x-r)+"px";
-				s.width=(r*2)+"px";
-				s.height=(r*2)+"px";
-				group.appendChild(c);
-				if(applyTo){ applyTo(c, data[i].src); }
-			}
-			path.setAttribute("path", cmd.join(" ")+" e");
-			group.appendChild(path);
-			return group;	//	HTMLDivElement
-		},
-		CurvedLine: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as a line with a tension factor for softening.
-			//	Bindings: x/y
-			var tension = 3;
-			var area = plotarea.getArea();
-			var group = dojo.charting.Plotters._group(plotarea);
-
-			var path=document.createElement("v:shape");
-			path.setAttribute("strokeweight", "2px");
-			path.setAttribute("strokecolor", data[0].series.color);
-			path.setAttribute("fillcolor", "none");
-			path.setAttribute("filled", "false");
-			path.setAttribute("coordsize", (area.right-area.left) + "," + (area.bottom-area.top));
-			path.style.position="absolute";
-			path.style.top="0px";
-			path.style.left="0px";
-			path.style.width=area.right-area.left+"px";
-			path.style.height=area.bottom-area.top+"px";
-			var stroke=document.createElement("v:stroke");
-			stroke.setAttribute("opacity", "0.8");
-			path.appendChild(stroke);
-
-			var cmd = [];
-			var r=3;
-			for(var i=0; i<data.length; i++){
-				var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
-				var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
-
-				if (i==0){
-					cmd.push("m");
-					cmd.push(x+","+y);
-				}else{
-					var lastx = Math.round(plot.axisX.getCoord(data[i-1].x, plotarea, plot));
-					var lasty = Math.round(plot.axisY.getCoord(data[i-1].y, plotarea, plot));
-					var dx=x-lastx;
-					var dy=y-lasty;
-					
-					cmd.push("c");
-					var cx=Math.round((x-(tension-1)*(dx/tension)));
-					cmd.push(cx+","+lasty);
-					cx=Math.round((x-(dx/tension)));
-					cmd.push(cx+","+y);
-					cmd.push(x+","+y);
-				}
-
-				//	add the circle.
-				var c = document.createElement("v:oval");
-				c.setAttribute("strokeweight", "1px");
-				c.setAttribute("strokecolor", data[i].series.color);
-				c.setAttribute("fillcolor", data[i].series.color);
-				var str=document.createElement("v:stroke");
-				str.setAttribute("opacity","0.8");
-				c.appendChild(str);
-				str=document.createElement("v:fill");
-				str.setAttribute("opacity","0.6");
-				c.appendChild(str);
-				var s=c.style;
-				s.position="absolute";
-				s.top=(y-r)+"px";
-				s.left=(x-r)+"px";
-				s.width=(r*2)+"px";
-				s.height=(r*2)+"px";
-				group.appendChild(c);
-				if(applyTo){ applyTo(c, data[i].src); }
-			}
-			path.setAttribute("path", cmd.join(" ")+" e");
-			group.appendChild(path);
-			return group;	//	HTMLDivElement
-		},
-		Area: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as an area.
-			//	Bindings: x/y
-			var area = plotarea.getArea();
-			var group = dojo.charting.Plotters._group(plotarea);
-
-			var path=document.createElement("v:shape");
-			path.setAttribute("strokeweight", "1px");
-			path.setAttribute("strokecolor", data[0].series.color);
-			path.setAttribute("fillcolor", data[0].series.color);
-			path.setAttribute("coordsize", (area.right-area.left) + "," + (area.bottom-area.top));
-			path.style.position="absolute";
-			path.style.top="0px";
-			path.style.left="0px";
-			path.style.width=area.right-area.left+"px";
-			path.style.height=area.bottom-area.top+"px";
-			var stroke=document.createElement("v:stroke");
-			stroke.setAttribute("opacity", "0.8");
-			path.appendChild(stroke);
-			var fill=document.createElement("v:fill");
-			fill.setAttribute("opacity", "0.4");
-			path.appendChild(fill);
-
-			var cmd = [];
-			var r=3;
-			for(var i=0; i<data.length; i++){
-				var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
-				var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
-
-				if (i==0){
-					cmd.push("m");
-					cmd.push(x+","+y);
-				}else{
-					cmd.push("l");
-					cmd.push(x+","+y);
-				}
-
-				//	add the circle.
-				var c = document.createElement("v:oval");
-				c.setAttribute("strokeweight", "1px");
-				c.setAttribute("strokecolor", data[i].series.color);
-				c.setAttribute("fillcolor", data[i].series.color);
-				var str=document.createElement("v:stroke");
-				str.setAttribute("opacity","0.8");
-				c.appendChild(str);
-				str=document.createElement("v:fill");
-				str.setAttribute("opacity","0.6");
-				c.appendChild(str);
-				var s=c.style;
-				s.position="absolute";
-				s.top=(y-r)+"px";
-				s.left=(x-r)+"px";
-				s.width=(r*2)+"px";
-				s.height=(r*2)+"px";
-				group.appendChild(c);
-				if(applyTo){ applyTo(c, data[i].src); }
-			}
-			cmd.push("l");
-			cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
-			cmd.push("l");
-			cmd.push(Math.round(plot.axisX.getCoord(data[0].x, plotarea, plot)) + "," +  Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
-			path.setAttribute("path", cmd.join(" ")+" x e");
-			group.appendChild(path);
-			return group;	//	HTMLDivElement
-		},
-		CurvedArea: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as an area with a tension for softening.
-			//	Bindings: x/y
-			var tension = 3;
-			var area = plotarea.getArea();
-			var group = dojo.charting.Plotters._group(plotarea);
-
-			var path=document.createElement("v:shape");
-			path.setAttribute("strokeweight", "1px");
-			path.setAttribute("strokecolor", data[0].series.color);
-			path.setAttribute("fillcolor", data[0].series.color);
-			path.setAttribute("coordsize", (area.right-area.left) + "," + (area.bottom-area.top));
-			path.style.position="absolute";
-			path.style.top="0px";
-			path.style.left="0px";
-			path.style.width=area.right-area.left+"px";
-			path.style.height=area.bottom-area.top+"px";
-			var stroke=document.createElement("v:stroke");
-			stroke.setAttribute("opacity", "0.8");
-			path.appendChild(stroke);
-			var fill=document.createElement("v:fill");
-			fill.setAttribute("opacity", "0.4");
-			path.appendChild(fill);
-
-			var cmd = [];
-			var r=3;
-			for(var i=0; i<data.length; i++){
-				var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
-				var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
-
-				if (i==0){
-					cmd.push("m");
-					cmd.push(x+","+y);
-				}else{
-					var lastx = Math.round(plot.axisX.getCoord(data[i-1].x, plotarea, plot));
-					var lasty = Math.round(plot.axisY.getCoord(data[i-1].y, plotarea, plot));
-					var dx=x-lastx;
-					var dy=y-lasty;
-					
-					cmd.push("c");
-					var cx=Math.round((x-(tension-1)*(dx/tension)));
-					cmd.push(cx+","+lasty);
-					cx=Math.round((x-(dx/tension)));
-					cmd.push(cx+","+y);
-					cmd.push(x+","+y);
-				}
-
-				//	add the circle.
-				var c = document.createElement("v:oval");
-				c.setAttribute("strokeweight", "1px");
-				c.setAttribute("strokecolor", data[i].series.color);
-				c.setAttribute("fillcolor", data[i].series.color);
-				var str=document.createElement("v:stroke");
-				str.setAttribute("opacity","0.8");
-				c.appendChild(str);
-				str=document.createElement("v:fill");
-				str.setAttribute("opacity","0.6");
-				c.appendChild(str);
-				var s=c.style;
-				s.position="absolute";
-				s.top=(y-r)+"px";
-				s.left=(x-r)+"px";
-				s.width=(r*2)+"px";
-				s.height=(r*2)+"px";
-				group.appendChild(c);
-				if(applyTo){ applyTo(c, data[i].src); }
-			}
-			cmd.push("l");
-			cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
-			cmd.push("l");
-			cmd.push(Math.round(plot.axisX.getCoord(data[0].x, plotarea, plot)) + "," +  Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
-			path.setAttribute("path", cmd.join(" ")+" x e");
-			group.appendChild(path);
-			return group;	//	HTMLDivElement
-		},
-		HighLow: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as a set of high/low bars.
-			//	Bindings: x/high/low
-			var area = plotarea.getArea();
-			var group = dojo.charting.Plotters._group(plotarea);
-
-			var n = data.length;
-			var part = ((area.right-area.left)/(plot.axisX.range.upper - plot.axisX.range.lower))/4;
-			var w = part*2;
-
-			for(var i=0; i<n; i++){
-				var high = data[i].high;
-				var low = data[i].low;
-				if(low > high){
-					var t = low;
-					low = high;
-					high = t;
-				}
-
-				var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w/2);
-				var y = plot.axisY.getCoord(high, plotarea, plot);
-				var h = plot.axisY.getCoord(low, plotarea, plot)-y;
-
-				//	high + low
-				var bar=document.createElement("v:rect");
-				bar.style.position="absolute";
-				bar.style.top=y+1+"px";
-				bar.style.left=x+"px";
-				bar.style.width=w+"px";
-				bar.style.height=h+"px";
-				bar.setAttribute("fillColor", data[i].series.color);
-				bar.setAttribute("stroked", "false");
-				bar.style.antialias="false";
-				var fill=document.createElement("v:fill");
-				fill.setAttribute("opacity", "0.6");
-				bar.appendChild(fill);
-				if(applyTo){ applyTo(bar, data[i].src); }
-				group.appendChild(bar);
-			}
-			return group;	//	HTMLDivElement
-		},	
-		HighLowClose: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as a set of high/low bars with a close indicator.
-			//	Bindings: x/high/low/close
-			var area = plotarea.getArea();
-			var group = dojo.charting.Plotters._group(plotarea);
-
-			var n = data.length;
-			var part = ((area.right-area.left)/(plot.axisX.range.upper - plot.axisX.range.lower))/4;
-			var w = part*2;
-
-			for(var i=0; i<n; i++){
-				var high = data[i].high;
-				var low = data[i].low;
-				if(low > high){
-					var t = low;
-					low = high;
-					high = t;
-				}
-				var c = data[i].close;
-
-				var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w/2);
-				var y = plot.axisY.getCoord(high, plotarea, plot);
-				var h = plot.axisY.getCoord(low, plotarea, plot)-y;
-				var close = plot.axisY.getCoord(c, plotarea, plot);
-
-				var g = document.createElement("div");
-
-				//	high + low
-				var bar=document.createElement("v:rect");
-				bar.style.position="absolute";
-				bar.style.top=y+1+"px";
-				bar.style.left=x+"px";
-				bar.style.width=w+"px";
-				bar.style.height=h+"px";
-				bar.setAttribute("fillColor", data[i].series.color);
-				bar.setAttribute("stroked", "false");
-				bar.style.antialias="false";
-				var fill=document.createElement("v:fill");
-				fill.setAttribute("opacity", "0.6");
-				bar.appendChild(fill);
-				g.appendChild(bar);
-
-				var line = document.createElement("v:line");
-				line.setAttribute("strokecolor", data[i].series.color);
-				line.setAttribute("strokeweight", "1px");
-				line.setAttribute("from", x+"px,"+close+"px");
-				line.setAttribute("to", (x+w+(part*2)-2)+"px,"+close+"px");
-				var s=line.style;
-				s.position="absolute";
-				s.top="0px";
-				s.left="0px";
-				s.antialias="false";
-				var str=document.createElement("v:stroke");
-				str.setAttribute("opacity","0.6");
-				line.appendChild(str);
-				g.appendChild(line);
-
-				if(applyTo){ applyTo(g, data[i].src); }
-				group.appendChild(g);
-			}
-			return group;	//	HTMLDivElement
-		},	
-		HighLowOpenClose: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as a set of high/low bars with open and close indicators.
-			//	Bindings: x/high/low/open/close
-			var area = plotarea.getArea();
-			var group = dojo.charting.Plotters._group(plotarea);
-
-			var n = data.length;
-			var part = ((area.right-area.left)/(plot.axisX.range.upper - plot.axisX.range.lower))/4;
-			var w = part*2;
-
-			for(var i=0; i<n; i++){
-				var high = data[i].high;
-				var low = data[i].low;
-				if(low > high){
-					var t = low;
-					low = high;
-					high = t;
-				}
-				var o = data[i].open;
-				var c = data[i].close;
-
-				var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w/2);
-				var y = plot.axisY.getCoord(high, plotarea, plot);
-				var h = plot.axisY.getCoord(low, plotarea, plot)-y;
-				var open = plot.axisY.getCoord(o, plotarea, plot);
-				var close = plot.axisY.getCoord(c, plotarea, plot);
-
-				var g = document.createElement("div");
-
-				//	high + low
-				var bar=document.createElement("v:rect");
-				bar.style.position="absolute";
-				bar.style.top=y+1+"px";
-				bar.style.left=x+"px";
-				bar.style.width=w+"px";
-				bar.style.height=h+"px";
-				bar.setAttribute("fillColor", data[i].series.color);
-				bar.setAttribute("stroked", "false");
-				bar.style.antialias="false";
-				var fill=document.createElement("v:fill");
-				fill.setAttribute("opacity", "0.6");
-				bar.appendChild(fill);
-				g.appendChild(bar);
-
-				var line = document.createElement("v:line");
-				line.setAttribute("strokecolor", data[i].series.color);
-				line.setAttribute("strokeweight", "1px");
-				line.setAttribute("from", (x-(part*2))+"px,"+open+"px");
-				line.setAttribute("to", (x+w-2)+"px,"+open+"px");
-				var s=line.style;
-				s.position="absolute";
-				s.top="0px";
-				s.left="0px";
-				s.antialias="false";
-				var str=document.createElement("v:stroke");
-				str.setAttribute("opacity","0.6");
-				line.appendChild(str);
-				g.appendChild(line);
-				
-				var line = document.createElement("v:line");
-				line.setAttribute("strokecolor", data[i].series.color);
-				line.setAttribute("strokeweight", "1px");
-				line.setAttribute("from", x+"px,"+close+"px");
-				line.setAttribute("to", (x+w+(part*2)-2)+"px,"+close+"px");
-				var s=line.style;
-				s.position="absolute";
-				s.top="0px";
-				s.left="0px";
-				s.antialias="false";
-				var str=document.createElement("v:stroke");
-				str.setAttribute("opacity","0.6");
-				line.appendChild(str);
-				g.appendChild(line);
-
-				if(applyTo){ applyTo(g, data[i].src); }
-				group.appendChild(g);
-			}
-			return group;	//	HTMLDivElement
-		},	
-		Scatter: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as a set of points.
-			//	Bindings: x/y
-			var r=6;
-			var mod=r/2;
-
-			var area = plotarea.getArea();
-			var group = dojo.charting.Plotters._group(plotarea);
-
-			for(var i=0; i<data.length; i++){
-				var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
-				var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
-
-				var point = document.createElement("v:rect");
-				point.setAttribute("strokecolor", data[i].series.color);
-				point.setAttribute("fillcolor", data[i].series.color);
-				var fill=document.createElement("v:fill");
-				fill.setAttribute("opacity","0.6");
-				point.appendChild(fill);
-
-				var s=point.style;
-				s.position="absolute";
-				s.rotation="45";
-				s.top=(y-mod)+"px";
-				s.left=(x-mod)+"px";
-				s.width=r+"px";
-				s.height=r+"px";
-				group.appendChild(point);
-				if(applyTo){ applyTo(point, data[i].src); }
-			}
-			return group;	//	HTMLDivElement
-		},
-		Bubble: function(
-			/* array */data, 
-			/* dojo.charting.PlotArea */plotarea,
-			/* dojo.charting.Plot */plot,
-			/* function? */applyTo
-		){
-			//	summary
-			//	Plots the series as a set of points with a size factor.
-			//	Bindings: x/y/size
-			var sizeFactor=1;
-			var area = plotarea.getArea();
-			var group = dojo.charting.Plotters._group(plotarea);
-
-			for(var i=0; i<data.length; i++){
-				var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
-				var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
-				if(i==0){
-					//	figure out the size factor, start with the axis with the greater range.
-					var raw = data[i].size;
-					var dy = plot.axisY.getCoord(data[i].y + raw, plotarea, plot)-y;
-					sizeFactor = dy/raw;
-				}
-				if(sizeFactor<1) { sizeFactor = 1; }
-				var r = (data[i].size/2)*sizeFactor;
-
-				var point = document.createElement("v:oval");
-				point.setAttribute("strokecolor", data[i].series.color);
-				point.setAttribute("fillcolor", data[i].series.color);
-				var fill=document.createElement("v:fill");
-				fill.setAttribute("opacity","0.6");
-				point.appendChild(fill);
-
-				var s=point.style;
-				s.position="absolute";
-				s.rotation="45";
-				s.top=(y-r)+"px";
-				s.left=(x-r)+"px";
-				s.width=(r*2)+"px";
-				s.height=(r*2)+"px";
-				group.appendChild(point);
-				if(applyTo){ applyTo(point, data[i].src); }
-			}
-			return group;	//	HTMLDivElement
-		}
-	});
-	dojo.charting.Plotters["Default"] = dojo.charting.Plotters.Line;
-}
+dojo.provide("dojo.charting.vml.Plotters");
+dojo.require("dojo.lang.common");
+if (dojo.render.vml.capable) {
+	dojo.mixin(dojo.charting.Plotters, {_group:function (plotarea) {
+		var group = document.createElement("div");
+		group.style.position = "absolute";
+		group.style.top = "0px";
+		group.style.left = "0px";
+		group.style.width = plotarea.size.width + "px";
+		group.style.height = plotarea.size.height + "px";
+		return group;
+	}, Bar:function (plotarea, plot, kwArgs, applyTo) {
+		var area = plotarea.getArea();
+		var group = dojo.charting.Plotters._group(plotarea);
+		var n = plot.series.length;
+		var data = [];
+		for (var i = 0; i < n; i++) {
+			var tmp = plot.series[i].data.evaluate(kwArgs);
+			data.push(tmp);
+		}
+		var space = 8;
+		var nPoints = data[0].length;
+		if (nPoints == 0) {
+			return group;
+		}
+		var width = ((area.right - area.left) - (space * (nPoints - 1))) / nPoints;
+		var barWidth = Math.round(width / n);
+		var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
+		for (var i = 0; i < nPoints; i++) {
+			var xStart = area.left + (width * i) + (space * i);
+			for (var j = 0; j < n; j++) {
+				var value = data[j][i].y;
+				var yA = yOrigin;
+				var x = xStart + (barWidth * j);
+				var y = plot.axisY.getCoord(value, plotarea, plot);
+				var h = Math.abs(yA - y);
+				if (value < plot.axisX.origin) {
+					yA = y;
+					y = yOrigin;
+				}
+				var bar = document.createElement("v:rect");
+				bar.style.position = "absolute";
+				bar.style.top = y + 1 + "px";
+				bar.style.left = x + "px";
+				bar.style.width = barWidth + "px";
+				bar.style.height = h + "px";
+				bar.setAttribute("fillColor", data[j][i].series.color);
+				bar.setAttribute("stroked", "false");
+				bar.style.antialias = "false";
+				var fill = document.createElement("v:fill");
+				fill.setAttribute("opacity", "0.6");
+				bar.appendChild(fill);
+				if (applyTo) {
+					applyTo(bar, data[j][i].src);
+				}
+				group.appendChild(bar);
+			}
+		}
+		return group;
+	}, HorizontalBar:function (plotarea, plot, kwArgs, applyTo) {
+		var area = plotarea.getArea();
+		var group = dojo.charting.Plotters._group(plotarea);
+		var n = plot.series.length;
+		var data = [];
+		for (var i = 0; i < n; i++) {
+			var tmp = plot.series[i].data.evaluate(kwArgs);
+			data.push(tmp);
+		}
+		var space = 6;
+		var nPoints = data[0].length;
+		if (nPoints == 0) {
+			return group;
+		}
+		var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints;
+		var barH = h / n;
+		var xOrigin = plot.axisX.getCoord(0, plotarea, plot);
+		for (var i = 0; i < nPoints; i++) {
+			var yStart = area.top + (h * i) + (space * i);
+			for (var j = 0; j < n; j++) {
+				var value = data[j][i].y;
+				var y = yStart + (barH * j);
+				var xA = xOrigin;
+				var x = plot.axisX.getCoord(value, plotarea, plot);
+				var w = Math.abs(x - xA);
+				if (value > 0) {
+					x = xOrigin;
+				}
+				var bar = document.createElement("v:rect");
+				bar.style.position = "absolute";
+				bar.style.top = y + 1 + "px";
+				bar.style.left = xA + "px";
+				bar.style.width = w + "px";
+				bar.style.height = barH + "px";
+				bar.setAttribute("fillColor", data[j][i].series.color);
+				bar.setAttribute("stroked", "false");
+				bar.style.antialias = "false";
+				var fill = document.createElement("v:fill");
+				fill.setAttribute("opacity", "0.6");
+				bar.appendChild(fill);
+				if (applyTo) {
+					applyTo(bar, data[j][i].src);
+				}
+				group.appendChild(bar);
+			}
+		}
+		var space = 4;
+		var n = plot.series.length;
+		var h = ((area.bottom - area.top) - (space * (n - 1))) / n;
+		var xOrigin = plot.axisX.getCoord(0, plotarea, plot);
+		for (var i = 0; i < n; i++) {
+			var series = plot.series[i];
+			var data = series.data.evaluate(kwArgs);
+			var y = area.top + (h * i) + (space * i);
+			var value = data[data.length - 1].y;
+			var xA = xOrigin;
+			var x = plot.axisX.getCoord(value, plotarea, plot);
+			var w = Math.abs(xA - x);
+			if (value > 0) {
+				xA = x;
+				x = xOrigin;
+			}
+		}
+		return group;
+	}, Gantt:function (plotarea, plot, kwArgs, applyTo) {
+		var area = plotarea.getArea();
+		var group = dojo.charting.Plotters._group(plotarea);
+		var n = plot.series.length;
+		var data = [];
+		for (var i = 0; i < n; i++) {
+			var tmp = plot.series[i].data.evaluate(kwArgs);
+			data.push(tmp);
+		}
+		var space = 2;
+		var nPoints = data[0].length;
+		if (nPoints == 0) {
+			return group;
+		}
+		var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints;
+		var barH = h / n;
+		for (var i = 0; i < nPoints; i++) {
+			var yStart = area.top + (h * i) + (space * i);
+			for (var j = 0; j < n; j++) {
+				var high = data[j][i].high;
+				var low = data[j][i].low;
+				if (low > high) {
+					var t = high;
+					high = low;
+					low = t;
+				}
+				var x = plot.axisX.getCoord(low, plotarea, plot);
+				var w = plot.axisX.getCoord(high, plotarea, plot) - x;
+				var y = yStart + (barH * j);
+				var bar = document.createElement("v:rect");
+				bar.style.position = "absolute";
+				bar.style.top = y + 1 + "px";
+				bar.style.left = x + "px";
+				bar.style.width = w + "px";
+				bar.style.height = barH + "px";
+				bar.setAttribute("fillColor", data[j][i].series.color);
+				bar.setAttribute("stroked", "false");
+				bar.style.antialias = "false";
+				var fill = document.createElement("v:fill");
+				fill.setAttribute("opacity", "0.6");
+				bar.appendChild(fill);
+				if (applyTo) {
+					applyTo(bar, data[j][i].src);
+				}
+				group.appendChild(bar);
+			}
+		}
+		return group;
+	}, StackedArea:function (plotarea, plot, kwArgs, applyTo) {
+		var area = plotarea.getArea();
+		var group = dojo.charting.Plotters._group(plotarea);
+		var n = plot.series.length;
+		var data = [];
+		var totals = [];
+		for (var i = 0; i < n; i++) {
+			var tmp = plot.series[i].data.evaluate(kwArgs);
+			for (var j = 0; j < tmp.length; j++) {
+				if (i == 0) {
+					totals.push(tmp[j].y);
+				} else {
+					totals[j] += tmp[j].y;
+				}
+				tmp[j].y = totals[j];
+			}
+			data.push(tmp);
+		}
+		for (var i = n - 1; i >= 0; i--) {
+			var path = document.createElement("v:shape");
+			path.setAttribute("strokeweight", "1px");
+			path.setAttribute("strokecolor", data[i][0].series.color);
+			path.setAttribute("fillcolor", data[i][0].series.color);
+			path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top));
+			path.style.position = "absolute";
+			path.style.top = "0px";
+			path.style.left = "0px";
+			path.style.width = area.right - area.left + "px";
+			path.style.height = area.bottom - area.top + "px";
+			var stroke = document.createElement("v:stroke");
+			stroke.setAttribute("opacity", "0.8");
+			path.appendChild(stroke);
+			var fill = document.createElement("v:fill");
+			fill.setAttribute("opacity", "0.4");
+			path.appendChild(fill);
+			var cmd = [];
+			var r = 3;
+			for (var j = 0; j < data[i].length; j++) {
+				var values = data[i];
+				var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot));
+				var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot));
+				if (j == 0) {
+					cmd.push("m");
+					cmd.push(x + "," + y);
+				} else {
+					cmd.push("l");
+					cmd.push(x + "," + y);
+				}
+				var c = document.createElement("v:oval");
+				c.setAttribute("strokeweight", "1px");
+				c.setAttribute("strokecolor", values[j].series.color);
+				c.setAttribute("fillcolor", values[j].series.color);
+				var str = document.createElement("v:stroke");
+				str.setAttribute("opacity", "0.8");
+				c.appendChild(str);
+				str = document.createElement("v:fill");
+				str.setAttribute("opacity", "0.6");
+				c.appendChild(str);
+				var s = c.style;
+				s.position = "absolute";
+				s.top = (y - r) + "px";
+				s.left = (x - r) + "px";
+				s.width = (r * 2) + "px";
+				s.height = (r * 2) + "px";
+				group.appendChild(c);
+				if (applyTo) {
+					applyTo(c, data[j].src);
+				}
+			}
+			if (i == 0) {
+				cmd.push("l");
+				cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
+				cmd.push("l");
+				cmd.push(Math.round(plot.axisX.getCoord(data[0][0].x, plotarea, plot)) + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
+			} else {
+				var values = data[i - 1];
+				cmd.push("l");
+				cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot)));
+				for (var j = values.length - 2; j >= 0; j--) {
+					var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot));
+					var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot));
+					cmd.push("l");
+					cmd.push(x + "," + y);
+				}
+			}
+			path.setAttribute("path", cmd.join(" ") + " x e");
+			group.appendChild(path);
+		}
+		return group;
+	}, StackedCurvedArea:function (plotarea, plot, kwArgs, applyTo) {
+		var tension = 3;
+		var area = plotarea.getArea();
+		var group = dojo.charting.Plotters._group(plotarea);
+		var n = plot.series.length;
+		var data = [];
+		var totals = [];
+		for (var i = 0; i < n; i++) {
+			var tmp = plot.series[i].data.evaluate(kwArgs);
+			for (var j = 0; j < tmp.length; j++) {
+				if (i == 0) {
+					totals.push(tmp[j].y);
+				} else {
+					totals[j] += tmp[j].y;
+				}
+				tmp[j].y = totals[j];
+			}
+			data.push(tmp);
+		}
+		for (var i = n - 1; i >= 0; i--) {
+			var path = document.createElement("v:shape");
+			path.setAttribute("strokeweight", "1px");
+			path.setAttribute("strokecolor", data[i][0].series.color);
+			path.setAttribute("fillcolor", data[i][0].series.color);
+			path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top));
+			path.style.position = "absolute";
+			path.style.top = "0px";
+			path.style.left = "0px";
+			path.style.width = area.right - area.left + "px";
+			path.style.height = area.bottom - area.top + "px";
+			var stroke = document.createElement("v:stroke");
+			stroke.setAttribute("opacity", "0.8");
+			path.appendChild(stroke);
+			var fill = document.createElement("v:fill");
+			fill.setAttribute("opacity", "0.4");
+			path.appendChild(fill);
+			var cmd = [];
+			var r = 3;
+			for (var j = 0; j < data[i].length; j++) {
+				var values = data[i];
+				var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot));
+				var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot));
+				if (j == 0) {
+					cmd.push("m");
+					cmd.push(x + "," + y);
+				} else {
+					var lastx = Math.round(plot.axisX.getCoord(values[j - 1].x, plotarea, plot));
+					var lasty = Math.round(plot.axisY.getCoord(values[j - 1].y, plotarea, plot));
+					var dx = x - lastx;
+					var dy = y - lasty;
+					cmd.push("c");
+					var cx = Math.round((x - (tension - 1) * (dx / tension)));
+					cmd.push(cx + "," + lasty);
+					cx = Math.round((x - (dx / tension)));
+					cmd.push(cx + "," + y);
+					cmd.push(x + "," + y);
+				}
+				var c = document.createElement("v:oval");
+				c.setAttribute("strokeweight", "1px");
+				c.setAttribute("strokecolor", values[j].series.color);
+				c.setAttribute("fillcolor", values[j].series.color);
+				var str = document.createElement("v:stroke");
+				str.setAttribute("opacity", "0.8");
+				c.appendChild(str);
+				str = document.createElement("v:fill");
+				str.setAttribute("opacity", "0.6");
+				c.appendChild(str);
+				var s = c.style;
+				s.position = "absolute";
+				s.top = (y - r) + "px";
+				s.left = (x - r) + "px";
+				s.width = (r * 2) + "px";
+				s.height = (r * 2) + "px";
+				group.appendChild(c);
+				if (applyTo) {
+					applyTo(c, data[j].src);
+				}
+			}
+			if (i == 0) {
+				cmd.push("l");
+				cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
+				cmd.push("l");
+				cmd.push(Math.round(plot.axisX.getCoord(data[0][0].x, plotarea, plot)) + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
+			} else {
+				var values = data[i - 1];
+				cmd.push("l");
+				cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot)));
+				for (var j = values.length - 2; j >= 0; j--) {
+					var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot));
+					var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot));
+					var lastx = Math.round(plot.axisX.getCoord(values[j + 1].x, plotarea, plot));
+					var lasty = Math.round(plot.axisY.getCoord(values[j + 1].y, plotarea, plot));
+					var dx = x - lastx;
+					var dy = y - lasty;
+					cmd.push("c");
+					var cx = Math.round((x - (tension - 1) * (dx / tension)));
+					cmd.push(cx + "," + lasty);
+					cx = Math.round((x - (dx / tension)));
+					cmd.push(cx + "," + y);
+					cmd.push(x + "," + y);
+				}
+			}
+			path.setAttribute("path", cmd.join(" ") + " x e");
+			group.appendChild(path);
+		}
+		return group;
+	}, DataBar:function (data, plotarea, plot, applyTo) {
+		var area = plotarea.getArea();
+		var group = dojo.charting.Plotters._group(plotarea);
+		var n = data.length;
+		var w = (area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower);
+		var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
+		for (var i = 0; i < n; i++) {
+			var value = data[i].y;
+			var yA = yOrigin;
+			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2) + 1;
+			var y = plot.axisY.getCoord(value, plotarea, plot);
+			var h = Math.abs(yA - y);
+			if (value < plot.axisX.origin) {
+				yA = y;
+				y = yOrigin;
+			}
+			var bar = document.createElement("v:rect");
+			bar.style.position = "absolute";
+			bar.style.top = y + 1 + "px";
+			bar.style.left = x + "px";
+			bar.style.width = w + "px";
+			bar.style.height = h + "px";
+			bar.setAttribute("fillColor", data[i].series.color);
+			bar.setAttribute("stroked", "false");
+			bar.style.antialias = "false";
+			var fill = document.createElement("v:fill");
+			fill.setAttribute("opacity", "0.6");
+			bar.appendChild(fill);
+			if (applyTo) {
+				applyTo(bar, data[i].src);
+			}
+			group.appendChild(bar);
+		}
+		return group;
+	}, Line:function (data, plotarea, plot, applyTo) {
+		var area = plotarea.getArea();
+		var group = dojo.charting.Plotters._group(plotarea);
+		if (data.length == 0) {
+			return group;
+		}
+		var path = document.createElement("v:shape");
+		path.setAttribute("strokeweight", "2px");
+		path.setAttribute("strokecolor", data[0].series.color);
+		path.setAttribute("fillcolor", "none");
+		path.setAttribute("filled", "false");
+		path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top));
+		path.style.position = "absolute";
+		path.style.top = "0px";
+		path.style.left = "0px";
+		path.style.width = area.right - area.left + "px";
+		path.style.height = area.bottom - area.top + "px";
+		var stroke = document.createElement("v:stroke");
+		stroke.setAttribute("opacity", "0.8");
+		path.appendChild(stroke);
+		var cmd = [];
+		var r = 3;
+		for (var i = 0; i < data.length; i++) {
+			var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
+			var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
+			if (i == 0) {
+				cmd.push("m");
+				cmd.push(x + "," + y);
+			} else {
+				cmd.push("l");
+				cmd.push(x + "," + y);
+			}
+			var c = document.createElement("v:oval");
+			c.setAttribute("strokeweight", "1px");
+			c.setAttribute("strokecolor", data[i].series.color);
+			c.setAttribute("fillcolor", data[i].series.color);
+			var str = document.createElement("v:stroke");
+			str.setAttribute("opacity", "0.8");
+			c.appendChild(str);
+			str = document.createElement("v:fill");
+			str.setAttribute("opacity", "0.6");
+			c.appendChild(str);
+			var s = c.style;
+			s.position = "absolute";
+			s.top = (y - r) + "px";
+			s.left = (x - r) + "px";
+			s.width = (r * 2) + "px";
+			s.height = (r * 2) + "px";
+			group.appendChild(c);
+			if (applyTo) {
+				applyTo(c, data[i].src);
+			}
+		}
+		path.setAttribute("path", cmd.join(" ") + " e");
+		group.appendChild(path);
+		return group;
+	}, CurvedLine:function (data, plotarea, plot, applyTo) {
+		var tension = 3;
+		var area = plotarea.getArea();
+		var group = dojo.charting.Plotters._group(plotarea);
+		if (data.length == 0) {
+			return group;
+		}
+		var path = document.createElement("v:shape");
+		path.setAttribute("strokeweight", "2px");
+		path.setAttribute("strokecolor", data[0].series.color);
+		path.setAttribute("fillcolor", "none");
+		path.setAttribute("filled", "false");
+		path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top));
+		path.style.position = "absolute";
+		path.style.top = "0px";
+		path.style.left = "0px";
+		path.style.width = area.right - area.left + "px";
+		path.style.height = area.bottom - area.top + "px";
+		var stroke = document.createElement("v:stroke");
+		stroke.setAttribute("opacity", "0.8");
+		path.appendChild(stroke);
+		var cmd = [];
+		var r = 3;
+		for (var i = 0; i < data.length; i++) {
+			var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
+			var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
+			if (i == 0) {
+				cmd.push("m");
+				cmd.push(x + "," + y);
+			} else {
+				var lastx = Math.round(plot.axisX.getCoord(data[i - 1].x, plotarea, plot));
+				var lasty = Math.round(plot.axisY.getCoord(data[i - 1].y, plotarea, plot));
+				var dx = x - lastx;
+				var dy = y - lasty;
+				cmd.push("c");
+				var cx = Math.round((x - (tension - 1) * (dx / tension)));
+				cmd.push(cx + "," + lasty);
+				cx = Math.round((x - (dx / tension)));
+				cmd.push(cx + "," + y);
+				cmd.push(x + "," + y);
+			}
+			var c = document.createElement("v:oval");
+			c.setAttribute("strokeweight", "1px");
+			c.setAttribute("strokecolor", data[i].series.color);
+			c.setAttribute("fillcolor", data[i].series.color);
+			var str = document.createElement("v:stroke");
+			str.setAttribute("opacity", "0.8");
+			c.appendChild(str);
+			str = document.createElement("v:fill");
+			str.setAttribute("opacity", "0.6");
+			c.appendChild(str);
+			var s = c.style;
+			s.position = "absolute";
+			s.top = (y - r) + "px";
+			s.left = (x - r) + "px";
+			s.width = (r * 2) + "px";
+			s.height = (r * 2) + "px";
+			group.appendChild(c);
+			if (applyTo) {
+				applyTo(c, data[i].src);
+			}
+		}
+		path.setAttribute("path", cmd.join(" ") + " e");
+		group.appendChild(path);
+		return group;
+	}, Area:function (data, plotarea, plot, applyTo) {
+		var area = plotarea.getArea();
+		var group = dojo.charting.Plotters._group(plotarea);
+		if (data.length == 0) {
+			return group;
+		}
+		var path = document.createElement("v:shape");
+		path.setAttribute("strokeweight", "1px");
+		path.setAttribute("strokecolor", data[0].series.color);
+		path.setAttribute("fillcolor", data[0].series.color);
+		path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top));
+		path.style.position = "absolute";
+		path.style.top = "0px";
+		path.style.left = "0px";
+		path.style.width = area.right - area.left + "px";
+		path.style.height = area.bottom - area.top + "px";
+		var stroke = document.createElement("v:stroke");
+		stroke.setAttribute("opacity", "0.8");
+		path.appendChild(stroke);
+		var fill = document.createElement("v:fill");
+		fill.setAttribute("opacity", "0.4");
+		path.appendChild(fill);
+		var cmd = [];
+		var r = 3;
+		for (var i = 0; i < data.length; i++) {
+			var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
+			var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
+			if (i == 0) {
+				cmd.push("m");
+				cmd.push(x + "," + y);
+			} else {
+				cmd.push("l");
+				cmd.push(x + "," + y);
+			}
+			var c = document.createElement("v:oval");
+			c.setAttribute("strokeweight", "1px");
+			c.setAttribute("strokecolor", data[i].series.color);
+			c.setAttribute("fillcolor", data[i].series.color);
+			var str = document.createElement("v:stroke");
+			str.setAttribute("opacity", "0.8");
+			c.appendChild(str);
+			str = document.createElement("v:fill");
+			str.setAttribute("opacity", "0.6");
+			c.appendChild(str);
+			var s = c.style;
+			s.position = "absolute";
+			s.top = (y - r) + "px";
+			s.left = (x - r) + "px";
+			s.width = (r * 2) + "px";
+			s.height = (r * 2) + "px";
+			group.appendChild(c);
+			if (applyTo) {
+				applyTo(c, data[i].src);
+			}
+		}
+		cmd.push("l");
+		cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
+		cmd.push("l");
+		cmd.push(Math.round(plot.axisX.getCoord(data[0].x, plotarea, plot)) + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
+		path.setAttribute("path", cmd.join(" ") + " x e");
+		group.appendChild(path);
+		return group;
+	}, CurvedArea:function (data, plotarea, plot, applyTo) {
+		var tension = 3;
+		var area = plotarea.getArea();
+		var group = dojo.charting.Plotters._group(plotarea);
+		if (data.length == 0) {
+			return group;
+		}
+		var path = document.createElement("v:shape");
+		path.setAttribute("strokeweight", "1px");
+		path.setAttribute("strokecolor", data[0].series.color);
+		path.setAttribute("fillcolor", data[0].series.color);
+		path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top));
+		path.style.position = "absolute";
+		path.style.top = "0px";
+		path.style.left = "0px";
+		path.style.width = area.right - area.left + "px";
+		path.style.height = area.bottom - area.top + "px";
+		var stroke = document.createElement("v:stroke");
+		stroke.setAttribute("opacity", "0.8");
+		path.appendChild(stroke);
+		var fill = document.createElement("v:fill");
+		fill.setAttribute("opacity", "0.4");
+		path.appendChild(fill);
+		var cmd = [];
+		var r = 3;
+		for (var i = 0; i < data.length; i++) {
+			var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
+			var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
+			if (i == 0) {
+				cmd.push("m");
+				cmd.push(x + "," + y);
+			} else {
+				var lastx = Math.round(plot.axisX.getCoord(data[i - 1].x, plotarea, plot));
+				var lasty = Math.round(plot.axisY.getCoord(data[i - 1].y, plotarea, plot));
+				var dx = x - lastx;
+				var dy = y - lasty;
+				cmd.push("c");
+				var cx = Math.round((x - (tension - 1) * (dx / tension)));
+				cmd.push(cx + "," + lasty);
+				cx = Math.round((x - (dx / tension)));
+				cmd.push(cx + "," + y);
+				cmd.push(x + "," + y);
+			}
+			var c = document.createElement("v:oval");
+			c.setAttribute("strokeweight", "1px");
+			c.setAttribute("strokecolor", data[i].series.color);
+			c.setAttribute("fillcolor", data[i].series.color);
+			var str = document.createElement("v:stroke");
+			str.setAttribute("opacity", "0.8");
+			c.appendChild(str);
+			str = document.createElement("v:fill");
+			str.setAttribute("opacity", "0.6");
+			c.appendChild(str);
+			var s = c.style;
+			s.position = "absolute";
+			s.top = (y - r) + "px";
+			s.left = (x - r) + "px";
+			s.width = (r * 2) + "px";
+			s.height = (r * 2) + "px";
+			group.appendChild(c);
+			if (applyTo) {
+				applyTo(c, data[i].src);
+			}
+		}
+		cmd.push("l");
+		cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
+		cmd.push("l");
+		cmd.push(Math.round(plot.axisX.getCoord(data[0].x, plotarea, plot)) + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
+		path.setAttribute("path", cmd.join(" ") + " x e");
+		group.appendChild(path);
+		return group;
+	}, HighLow:function (data, plotarea, plot, applyTo) {
+		var area = plotarea.getArea();
+		var group = dojo.charting.Plotters._group(plotarea);
+		var n = data.length;
+		var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
+		var w = part * 2;
+		for (var i = 0; i < n; i++) {
+			var high = data[i].high;
+			var low = data[i].low;
+			if (low > high) {
+				var t = low;
+				low = high;
+				high = t;
+			}
+			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
+			var y = plot.axisY.getCoord(high, plotarea, plot);
+			var h = plot.axisY.getCoord(low, plotarea, plot) - y;
+			var bar = document.createElement("v:rect");
+			bar.style.position = "absolute";
+			bar.style.top = y + 1 + "px";
+			bar.style.left = x + "px";
+			bar.style.width = w + "px";
+			bar.style.height = h + "px";
+			bar.setAttribute("fillColor", data[i].series.color);
+			bar.setAttribute("stroked", "false");
+			bar.style.antialias = "false";
+			var fill = document.createElement("v:fill");
+			fill.setAttribute("opacity", "0.6");
+			bar.appendChild(fill);
+			if (applyTo) {
+				applyTo(bar, data[i].src);
+			}
+			group.appendChild(bar);
+		}
+		return group;
+	}, HighLowClose:function (data, plotarea, plot, applyTo) {
+		var area = plotarea.getArea();
+		var group = dojo.charting.Plotters._group(plotarea);
+		var n = data.length;
+		var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
+		var w = part * 2;
+		for (var i = 0; i < n; i++) {
+			var high = data[i].high;
+			var low = data[i].low;
+			if (low > high) {
+				var t = low;
+				low = high;
+				high = t;
+			}
+			var c = data[i].close;
+			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
+			var y = plot.axisY.getCoord(high, plotarea, plot);
+			var h = plot.axisY.getCoord(low, plotarea, plot) - y;
+			var close = plot.axisY.getCoord(c, plotarea, plot);
+			var g = document.createElement("div");
+			var bar = document.createElement("v:rect");
+			bar.style.position = "absolute";
+			bar.style.top = y + 1 + "px";
+			bar.style.left = x + "px";
+			bar.style.width = w + "px";
+			bar.style.height = h + "px";
+			bar.setAttribute("fillColor", data[i].series.color);
+			bar.setAttribute("stroked", "false");
+			bar.style.antialias = "false";
+			var fill = document.createElement("v:fill");
+			fill.setAttribute("opacity", "0.6");
+			bar.appendChild(fill);
+			g.appendChild(bar);
+			var line = document.createElement("v:line");
+			line.setAttribute("strokecolor", data[i].series.color);
+			line.setAttribute("strokeweight", "1px");
+			line.setAttribute("from", x + "px," + close + "px");
+			line.setAttribute("to", (x + w + (part * 2) - 2) + "px," + close + "px");
+			var s = line.style;
+			s.position = "absolute";
+			s.top = "0px";
+			s.left = "0px";
+			s.antialias = "false";
+			var str = document.createElement("v:stroke");
+			str.setAttribute("opacity", "0.6");
+			line.appendChild(str);
+			g.appendChild(line);
+			if (applyTo) {
+				applyTo(g, data[i].src);
+			}
+			group.appendChild(g);
+		}
+		return group;
+	}, HighLowOpenClose:function (data, plotarea, plot, applyTo) {
+		var area = plotarea.getArea();
+		var group = dojo.charting.Plotters._group(plotarea);
+		var n = data.length;
+		var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
+		var w = part * 2;
+		for (var i = 0; i < n; i++) {
+			var high = data[i].high;
+			var low = data[i].low;
+			if (low > high) {
+				var t = low;
+				low = high;
+				high = t;
+			}
+			var o = data[i].open;
+			var c = data[i].close;
+			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
+			var y = plot.axisY.getCoord(high, plotarea, plot);
+			var h = plot.axisY.getCoord(low, plotarea, plot) - y;
+			var open = plot.axisY.getCoord(o, plotarea, plot);
+			var close = plot.axisY.getCoord(c, plotarea, plot);
+			var g = document.createElement("div");
+			var bar = document.createElement("v:rect");
+			bar.style.position = "absolute";
+			bar.style.top = y + 1 + "px";
+			bar.style.left = x + "px";
+			bar.style.width = w + "px";
+			bar.style.height = h + "px";
+			bar.setAttribute("fillColor", data[i].series.color);
+			bar.setAttribute("stroked", "false");
+			bar.style.antialias = "false";
+			var fill = document.createElement("v:fill");
+			fill.setAttribute("opacity", "0.6");
+			bar.appendChild(fill);
+			g.appendChild(bar);
+			var line = document.createElement("v:line");
+			line.setAttribute("strokecolor", data[i].series.color);
+			line.setAttribute("strokeweight", "1px");
+			line.setAttribute("from", (x - (part * 2)) + "px," + open + "px");
+			line.setAttribute("to", (x + w - 2) + "px," + open + "px");
+			var s = line.style;
+			s.position = "absolute";
+			s.top = "0px";
+			s.left = "0px";
+			s.antialias = "false";
+			var str = document.createElement("v:stroke");
+			str.setAttribute("opacity", "0.6");
+			line.appendChild(str);
+			g.appendChild(line);
+			var line = document.createElement("v:line");
+			line.setAttribute("strokecolor", data[i].series.color);
+			line.setAttribute("strokeweight", "1px");
+			line.setAttribute("from", x + "px," + close + "px");
+			line.setAttribute("to", (x + w + (part * 2) - 2) + "px," + close + "px");
+			var s = line.style;
+			s.position = "absolute";
+			s.top = "0px";
+			s.left = "0px";
+			s.antialias = "false";
+			var str = document.createElement("v:stroke");
+			str.setAttribute("opacity", "0.6");
+			line.appendChild(str);
+			g.appendChild(line);
+			if (applyTo) {
+				applyTo(g, data[i].src);
+			}
+			group.appendChild(g);
+		}
+		return group;
+	}, Scatter:function (data, plotarea, plot, applyTo) {
+		var r = 6;
+		var mod = r / 2;
+		var area = plotarea.getArea();
+		var group = dojo.charting.Plotters._group(plotarea);
+		for (var i = 0; i < data.length; i++) {
+			var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
+			var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
+			var point = document.createElement("v:rect");
+			point.setAttribute("strokecolor", data[i].series.color);
+			point.setAttribute("fillcolor", data[i].series.color);
+			var fill = document.createElement("v:fill");
+			fill.setAttribute("opacity", "0.6");
+			point.appendChild(fill);
+			var s = point.style;
+			s.position = "absolute";
+			s.rotation = "45";
+			s.top = (y - mod) + "px";
+			s.left = (x - mod) + "px";
+			s.width = r + "px";
+			s.height = r + "px";
+			group.appendChild(point);
+			if (applyTo) {
+				applyTo(point, data[i].src);
+			}
+		}
+		return group;
+	}, Bubble:function (data, plotarea, plot, applyTo) {
+		var sizeFactor = 1;
+		var area = plotarea.getArea();
+		var group = dojo.charting.Plotters._group(plotarea);
+		for (var i = 0; i < data.length; i++) {
+			var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
+			var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
+			if (i == 0) {
+				var raw = data[i].size;
+				var dy = plot.axisY.getCoord(data[i].y + raw, plotarea, plot) - y;
+				sizeFactor = dy / raw;
+			}
+			if (sizeFactor < 1) {
+				sizeFactor = 1;
+			}
+			var r = (data[i].size / 2) * sizeFactor;
+			var point = document.createElement("v:oval");
+			point.setAttribute("strokecolor", data[i].series.color);
+			point.setAttribute("fillcolor", data[i].series.color);
+			var fill = document.createElement("v:fill");
+			fill.setAttribute("opacity", "0.6");
+			point.appendChild(fill);
+			var s = point.style;
+			s.position = "absolute";
+			s.rotation = "45";
+			s.top = (y - r) + "px";
+			s.left = (x - r) + "px";
+			s.width = (r * 2) + "px";
+			s.height = (r * 2) + "px";
+			group.appendChild(point);
+			if (applyTo) {
+				applyTo(point, data[i].src);
+			}
+		}
+		return group;
+	}});
+	dojo.charting.Plotters["Default"] = dojo.charting.Plotters.Line;
+}
 
+
 __CPAN_FILE__ src/charting/vml/Axis.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -87107,271 +60514,236 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.charting.vml.Axis");
-dojo.require("dojo.lang.common");
-
-if(dojo.render.vml.capable){
-	dojo.extend(dojo.charting.Axis, {
-		renderLines: function(
-			/* dojo.charting.PlotArea */plotArea, 
-			/* dojo.charting.Plot */plot, 
-			/* string */plane
-		){
-			//	summary
-			//	Renders any reference lines for this axis.
-			if(this.nodes.lines){
-				while(this.nodes.lines.childNodes.length > 0){
-					this.nodes.lines.removeChild(this.nodes.lines.childNodes[0]);
-				}
-				if(this.nodes.lines.parentNode){
-					this.nodes.lines.parentNode.removeChild(this.nodes.lines);
-					this.nodes.lines = null;
-				}
-			}
-			
-			var area = plotArea.getArea();
-			var g = this.nodes.lines = document.createElement("div");
-			g.setAttribute("id", this.getId()+"-lines");
-			for(var i=0; i<this._labels.length; i++){
-				if (this._labels[i].value == this.origin){ continue; }
-
-				var v = this.getCoord(this._labels[i].value, plotArea, plot);
-				var l=document.createElement("v:line");
-				var str=document.createElement("v:stroke");
-				str.dashstyle="dot";
-				l.appendChild(str);
-				l.setAttribute("strokecolor", "#666");
-				l.setAttribute("strokeweight", "1px");
-				var s=l.style;
-				s.position="absolute";
-				s.top="0px";
-				s.left="0px";
-				s.antialias="false";
-				if(plane == "x"){
-					l.setAttribute("from", v+"px,"+area.top+"px");
-					l.setAttribute("to", v+"px,"+area.bottom+"px");
-				}
-				else if (plane == "y"){
-					l.setAttribute("from", area.left+"px,"+v+"px");
-					l.setAttribute("to", area.right+"px,"+v+"px");
-				}
-				g.appendChild(l);
-			}
-			return g;	//	HTMLDivElement
-		},
-		renderTicks: function(
-			/* dojo.charting.PlotArea */plotArea, 
-			/* dojo.charting.Plot */plot, 
-			/* string */plane,
-			/* float */coord
-		){
-			//	summary
-			//	Renders any tick lines for this axis.
-			if(this.nodes.ticks){
-				while(this.nodes.ticks.childNodes.length > 0){
-					this.nodes.ticks.removeChild(this.nodes.ticks.childNodes[0]);
-				}
-				if(this.nodes.ticks.parentNode){
-					this.nodes.ticks.parentNode.removeChild(this.nodes.ticks);
-					this.nodes.ticks = null;
-				}
-			}
-			
-			var g = this.nodes.ticks = document.createElement("div");
-			g.setAttribute("id", this.getId()+"-ticks");
-			for(var i=0; i<this._labels.length; i++){
-				var v = this.getCoord(this._labels[i].value, plotArea, plot);
-
-				var l=document.createElement("v:line");
-				l.setAttribute("strokecolor", "#000");
-				l.setAttribute("strokeweight", "1px");
-				var s=l.style;
-				s.position="absolute";
-				s.top="0px";
-				s.left="0px";
-				s.antialias="false";
-				if(plane == "x"){
-					l.setAttribute("from", v+"px,"+coord+"px");
-					l.setAttribute("to", v+"px,"+(coord+3)+"px");
-				}
-				else if (plane == "y"){
-					l.setAttribute("from", (coord-2)+"px,"+v+"px");
-					l.setAttribute("to", (coord+2)+"px,"+v+"px");
-				}
-				g.appendChild(l);
-			}
-			return g;	//	HTMLDivElement
-		},
-		renderLabels: function(
-			/* dojo.charting.PlotArea */plotArea, 
-			/* dojo.charting.Plot */plot, 
-			/* string */plane,
-			/* float */coord,
-			/* int */textSize,
-			/* string */anchor
-		){
-			//	summary
-			//	Render all labels for this axis.
-			function createLabel(label, x, y, textSize, anchor){
-				var text = document.createElement("div");
-				var s=text.style;
-				text.innerHTML=label;
-				s.fontSize=textSize+"px";
-				s.fontFamily="sans-serif";
-				s.position="absolute";
-				s.top = y+"px";
-				if(anchor == "center"){
-					s.left = x + "px";
-					s.textAlign="center";
-				} else if (anchor == "left"){
-					s.left = x + "px";
-					s.textAlign="left";
-				} else if (anchor == "right"){
-					s.right = x + "px";
-					s.textAlign="right";
-				}
-				return text;
-			};
-
-			//	wipe if needed
-			if(this.nodes.labels){
-				while(this.nodes.labels.childNodes.length > 0){
-					this.nodes.labels.removeChild(this.nodes.labels.childNodes[0]);
-				}
-				if(this.nodes.labels.parentNode){
-					this.nodes.labels.parentNode.removeChild(this.nodes.labels);
-					this.nodes.labels = null;
-				}
-			}
-			var g = this.nodes.labels = document.createElement("div");
-			g.setAttribute("id", this.getId()+"-labels");
-
-			for(var i=0; i<this._labels.length; i++){
-				var v = this.getCoord(this._labels[i].value, plotArea, plot);
-				if(plane == "x"){
-					//	ugly hack but it works.
-					var node=createLabel(this._labels[i].label, v, coord, textSize, anchor);
-					document.body.appendChild(node);
-					node.style.left = v-(node.offsetWidth/2)+"px";
-					g.appendChild(node);
-				}
-				else if (plane == "y"){
-					var node = createLabel(this._labels[i].label, coord, v, textSize, anchor);
-					document.body.appendChild(node);
-					node.style.top = v-(node.offsetHeight/2)+"px";
-					g.appendChild(node);
-				}
-			}
-			return g;	//	HTMLDivElement
-		},
-		render: function(
-			/* dojo.charting.PlotArea */plotArea, 
-			/* dojo.charting.Plot */plot,
-			/* dojo.charting.Axis */drawAgainst,
-			/* string */plane
-		){
-			//	summary
-			//	Renders this axis to the given plot.
-
-			//	get the origin plot point.
-			var area = plotArea.getArea();
-			var stroke = 1;
-			var style = "stroke:#000;stroke-width:"+stroke+"px;";
-			var textSize=10;
-			var coord = drawAgainst.getCoord(this.origin, plotArea, plot);
-
-			//	draw the axis.
-			var g = this.nodes.main = document.createElement("div");
-			g.setAttribute("id", this.getId());	//	need a handle if we have to kill parts of the axis def.
-			var line = this.nodes.axis = document.createElement("v:line");
-			line.setAttribute("strokecolor", "#000");
-			line.setAttribute("strokeweight", stroke+"px");
-			var s=line.style;
-			s.position="absolute";
-			s.top="0px";
-			s.left="0px";
-			s.antialias="false";
-			if(plane == "x"){
-				line.setAttribute("from", area.left+"px,"+coord+"px");
-				line.setAttribute("to", area.right+"px,"+coord+"px");
-
-				//	set up the labels
-				var y = coord + Math.floor(textSize/2);
-				if(this.showLines){
-					g.appendChild(this.renderLines(plotArea, plot, plane, y));
-				}
-				if(this.showTicks){
-					g.appendChild(this.renderTicks(plotArea, plot, plane, coord));
-				}
-				if(this.showLabels){
-					g.appendChild(this.renderLabels(plotArea, plot, plane, y, textSize, "center"));
-				}
-				if(this.showLabel && this.label){
-					var x = plotArea.size.width/2;
-					var y = coord + Math.round(textSize*1.5); 
-					var text = document.createElement("div");
-					var s=text.style;
-					text.innerHTML=this.label;
-					s.fontSize=(textSize+2)+"px";
-					s.fontFamily="sans-serif";
-					s.fontWeight="bold";
-					s.position="absolute";
-					s.top = y+"px";
-					s.left = x + "px";
-					s.textAlign="center";
-					document.body.appendChild(text);
-					text.style.left = x-(text.offsetWidth/2)+"px";
-					g.appendChild(text);
-				}
-			} else {
-				line.setAttribute("from", coord+"px,"+area.top+"px");
-				line.setAttribute("to", coord+"px,"+area.bottom+"px");
-
-				//	set up the labels
-				var isMax = this.origin == drawAgainst.range.upper;
-				var x = coord+4;
-				var anchor = "left";
-				if(!isMax){
-					x = area.right-coord+textSize+4;
-					anchor = "right";
-					if(coord == area.left){ x += (textSize*2)-(textSize/2); }
-				}
-				if(this.showLines){
-					g.appendChild(this.renderLines(plotArea, plot, plane, x));
-				}
-				if(this.showTicks){
-					g.appendChild(this.renderTicks(plotArea, plot, plane, coord));
-				}
-				if(this.showLabels){
-					g.appendChild(this.renderLabels(plotArea, plot, plane, x, textSize, anchor));
-				}
-				if(this.showLabel && this.label){
-					x += (textSize*2)-2;
-					var y = plotArea.size.height/2;
-					var text = document.createElement("div");
-					var s=text.style;
-					text.innerHTML=this.label;
-					s.fontSize=(textSize+2)+"px";
-					s.fontFamily="sans-serif";
-					s.fontWeight="bold";
-					s.position="absolute";
-					s.height = plotArea.size.height+"px";
-					s.writingMode = "tb-rl";
-					s.textAlign="center";
-					s[anchor] = x+"px";
-					document.body.appendChild(text);
-					s.top = y-(text.offsetHeight/2)+"px";
-					g.appendChild(text);
-				}
-			}
-			g.appendChild(line);
-			return g;	//	HTMLDivElement
-		}
-	});
-}
+dojo.provide("dojo.charting.vml.Axis");
+dojo.require("dojo.lang.common");
+if (dojo.render.vml.capable) {
+	dojo.extend(dojo.charting.Axis, {renderLines:function (plotArea, plot, plane) {
+		if (this.nodes.lines) {
+			while (this.nodes.lines.childNodes.length > 0) {
+				this.nodes.lines.removeChild(this.nodes.lines.childNodes[0]);
+			}
+			if (this.nodes.lines.parentNode) {
+				this.nodes.lines.parentNode.removeChild(this.nodes.lines);
+				this.nodes.lines = null;
+			}
+		}
+		var area = plotArea.getArea();
+		var g = this.nodes.lines = document.createElement("div");
+		g.setAttribute("id", this.getId() + "-lines");
+		for (var i = 0; i < this._labels.length; i++) {
+			if (this._labels[i].value == this.origin) {
+				continue;
+			}
+			var v = this.getCoord(this._labels[i].value, plotArea, plot);
+			var l = document.createElement("v:line");
+			var str = document.createElement("v:stroke");
+			str.dashstyle = "dot";
+			l.appendChild(str);
+			l.setAttribute("strokecolor", "#666");
+			l.setAttribute("strokeweight", "1px");
+			var s = l.style;
+			s.position = "absolute";
+			s.top = "0px";
+			s.left = "0px";
+			s.antialias = "false";
+			if (plane == "x") {
+				l.setAttribute("from", v + "px," + area.top + "px");
+				l.setAttribute("to", v + "px," + area.bottom + "px");
+			} else {
+				if (plane == "y") {
+					l.setAttribute("from", area.left + "px," + v + "px");
+					l.setAttribute("to", area.right + "px," + v + "px");
+				}
+			}
+			g.appendChild(l);
+		}
+		return g;
+	}, renderTicks:function (plotArea, plot, plane, coord) {
+		if (this.nodes.ticks) {
+			while (this.nodes.ticks.childNodes.length > 0) {
+				this.nodes.ticks.removeChild(this.nodes.ticks.childNodes[0]);
+			}
+			if (this.nodes.ticks.parentNode) {
+				this.nodes.ticks.parentNode.removeChild(this.nodes.ticks);
+				this.nodes.ticks = null;
+			}
+		}
+		var g = this.nodes.ticks = document.createElement("div");
+		g.setAttribute("id", this.getId() + "-ticks");
+		for (var i = 0; i < this._labels.length; i++) {
+			var v = this.getCoord(this._labels[i].value, plotArea, plot);
+			var l = document.createElement("v:line");
+			l.setAttribute("strokecolor", "#000");
+			l.setAttribute("strokeweight", "1px");
+			var s = l.style;
+			s.position = "absolute";
+			s.top = "0px";
+			s.left = "0px";
+			s.antialias = "false";
+			if (plane == "x") {
+				l.setAttribute("from", v + "px," + coord + "px");
+				l.setAttribute("to", v + "px," + (coord + 3) + "px");
+			} else {
+				if (plane == "y") {
+					l.setAttribute("from", (coord - 2) + "px," + v + "px");
+					l.setAttribute("to", (coord + 2) + "px," + v + "px");
+				}
+			}
+			g.appendChild(l);
+		}
+		return g;
+	}, renderLabels:function (plotArea, plot, plane, coord, textSize, anchor) {
+		function createLabel(label, x, y, textSize, anchor) {
+			var text = document.createElement("div");
+			var s = text.style;
+			text.innerHTML = label;
+			s.fontSize = textSize + "px";
+			s.fontFamily = "sans-serif";
+			s.position = "absolute";
+			s.top = y + "px";
+			if (anchor == "center") {
+				s.left = x + "px";
+				s.textAlign = "center";
+			} else {
+				if (anchor == "left") {
+					s.left = x + "px";
+					s.textAlign = "left";
+				} else {
+					if (anchor == "right") {
+						s.right = x + "px";
+						s.textAlign = "right";
+					}
+				}
+			}
+			return text;
+		}
+		if (this.nodes.labels) {
+			while (this.nodes.labels.childNodes.length > 0) {
+				this.nodes.labels.removeChild(this.nodes.labels.childNodes[0]);
+			}
+			if (this.nodes.labels.parentNode) {
+				this.nodes.labels.parentNode.removeChild(this.nodes.labels);
+				this.nodes.labels = null;
+			}
+		}
+		var g = this.nodes.labels = document.createElement("div");
+		g.setAttribute("id", this.getId() + "-labels");
+		for (var i = 0; i < this._labels.length; i++) {
+			var v = this.getCoord(this._labels[i].value, plotArea, plot);
+			if (plane == "x") {
+				var node = createLabel(this._labels[i].label, v, coord, textSize, anchor);
+				document.body.appendChild(node);
+				node.style.left = v - (node.offsetWidth / 2) + "px";
+				g.appendChild(node);
+			} else {
+				if (plane == "y") {
+					var node = createLabel(this._labels[i].label, coord, v, textSize, anchor);
+					document.body.appendChild(node);
+					node.style.top = v - (node.offsetHeight / 2) + "px";
+					g.appendChild(node);
+				}
+			}
+		}
+		return g;
+	}, render:function (plotArea, plot, drawAgainst, plane) {
+		if (!this._rerender && this.nodes.main) {
+			return this.nodes.main;
+		}
+		this._rerender = false;
+		var area = plotArea.getArea();
+		var stroke = 1;
+		var style = "stroke:#000;stroke-width:" + stroke + "px;";
+		var textSize = 10;
+		var coord = drawAgainst.getCoord(this.origin, plotArea, plot);
+		var g = this.nodes.main = document.createElement("div");
+		g.setAttribute("id", this.getId());
+		var line = this.nodes.axis = document.createElement("v:line");
+		line.setAttribute("strokecolor", "#000");
+		line.setAttribute("strokeweight", stroke + "px");
+		var s = line.style;
+		s.position = "absolute";
+		s.top = "0px";
+		s.left = "0px";
+		s.antialias = "false";
+		if (plane == "x") {
+			line.setAttribute("from", area.left + "px," + coord + "px");
+			line.setAttribute("to", area.right + "px," + coord + "px");
+			var y = coord + Math.floor(textSize / 2);
+			if (this.showLines) {
+				g.appendChild(this.renderLines(plotArea, plot, plane, y));
+			}
+			if (this.showTicks) {
+				g.appendChild(this.renderTicks(plotArea, plot, plane, coord));
+			}
+			if (this.showLabels) {
+				g.appendChild(this.renderLabels(plotArea, plot, plane, y, textSize, "center"));
+			}
+			if (this.showLabel && this.label) {
+				var x = plotArea.size.width / 2;
+				var y = coord + Math.round(textSize * 1.5);
+				var text = document.createElement("div");
+				var s = text.style;
+				text.innerHTML = this.label;
+				s.fontSize = (textSize + 2) + "px";
+				s.fontFamily = "sans-serif";
+				s.fontWeight = "bold";
+				s.position = "absolute";
+				s.top = y + "px";
+				s.left = x + "px";
+				s.textAlign = "center";
+				document.body.appendChild(text);
+				text.style.left = x - (text.offsetWidth / 2) + "px";
+				g.appendChild(text);
+			}
+		} else {
+			line.setAttribute("from", coord + "px," + area.top + "px");
+			line.setAttribute("to", coord + "px," + area.bottom + "px");
+			var isMax = this.origin == drawAgainst.range.upper;
+			var x = coord + 4;
+			var anchor = "left";
+			if (!isMax) {
+				x = area.right - coord + textSize + 4;
+				anchor = "right";
+				if (coord == area.left) {
+					x += (textSize * 2) - (textSize / 2);
+				}
+			}
+			if (this.showLines) {
+				g.appendChild(this.renderLines(plotArea, plot, plane, x));
+			}
+			if (this.showTicks) {
+				g.appendChild(this.renderTicks(plotArea, plot, plane, coord));
+			}
+			if (this.showLabels) {
+				g.appendChild(this.renderLabels(plotArea, plot, plane, x, textSize, anchor));
+			}
+			if (this.showLabel && this.label) {
+				x += (textSize * 2) - 2;
+				var y = plotArea.size.height / 2;
+				var text = document.createElement("div");
+				var s = text.style;
+				text.innerHTML = this.label;
+				s.fontSize = (textSize + 2) + "px";
+				s.fontFamily = "sans-serif";
+				s.fontWeight = "bold";
+				s.position = "absolute";
+				s.height = plotArea.size.height + "px";
+				s.writingMode = "tb-rl";
+				s.textAlign = "center";
+				s[anchor] = x + "px";
+				document.body.appendChild(text);
+				s.top = y - (text.offsetHeight / 2) + "px";
+				g.appendChild(text);
+			}
+		}
+		g.appendChild(line);
+		return g;
+	}});
+}
 
+
 __CPAN_DIR__ src/uri
-__CPAN_FILE__ src/uri/__package__.js
+__CPAN_FILE__ src/uri/cache.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
 	All Rights Reserved.
@@ -87382,12 +60754,28 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: [["dojo.uri.Uri", false, false]]
-});
-dojo.provide("dojo.uri.*");
+dojo.provide("dojo.uri.cache");
+dojo.uri.cache = {_cache:{}, set:function (uri, content) {
+	this._cache[uri.toString()] = content;
+	return uri;
+}, remove:function (uri) {
+	delete this._cache[uri.toString()];
+}, get:function (uri) {
+	var key = uri.toString();
+	var value = this._cache[key];
+	if (!value) {
+		value = dojo.hostenv.getText(key);
+		if (value) {
+			this._cache[key] = value;
+		}
+	}
+	return value;
+}, allow:function (uri) {
+	return uri;
+}};
 
-__CPAN_FILE__ src/uri/Uri.js
+
+__CPAN_FILE__ src/uri/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
 	All Rights Reserved.
@@ -87398,108 +60786,125 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.uri.Uri");
+dojo.kwCompoundRequire({common:[["dojo.uri.Uri", false, false]]});
+dojo.provide("dojo.uri.*");
 
-dojo.uri = new function() {
-	this.dojoUri = function (/*dojo.uri.Uri||String*/uri) {
-		// summary: returns a Uri object resolved relative to the dojo root
-		return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(), uri);
-	}
 
-	this.moduleUri = function(/*String*/module, /*dojo.uri.Uri||String*/uri){
-		// summary: returns a Uri object relative to a module
-		// description: Examples: dojo.uri.moduleUri("dojo","Editor"), or dojo.uri.moduleUri("acme","someWidget")
-		var loc = dojo.hostenv.getModuleSymbols(module).join('/');
-		//var loc = dojo.hostenv.getModulePrefix(module);
-		if(!loc){return null;}
-		if(loc.lastIndexOf("/") != loc.length-1){loc += "/";}
-		return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri()+loc,uri);
-	}
+__CPAN_FILE__ src/uri/Uri.js
+/*
+	Copyright (c) 2004-2006, The Dojo Foundation
+	All Rights Reserved.
 
-	this.Uri = function (/*dojo.uri.Uri||String...*/) {
-		// summary: Constructor to create an object representing a URI.
-		// description: 
-		//  Each argument is evaluated in order relative to the next until
-		//  a canonical uri is produced. To get an absolute Uri relative
-		//  to the current document use
-		//      new dojo.uri.Uri(document.baseURI, uri)
+	Licensed under the Academic Free License version 2.1 or above OR the
+	modified BSD license. For more information on Dojo licensing, see:
 
-		// TODO: support for IPv6, see RFC 2732
+		http://dojotoolkit.org/community/licensing.shtml
+*/
 
-		// resolve uri components relative to each other
+dojo.provide("dojo.uri.Uri");
+dojo.uri = new function () {
+	this.dojoUri = function (uri) {
+		return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(), uri);
+	};
+	this.moduleUri = function (module, uri) {
+		var loc = dojo.hostenv.getModuleSymbols(module).join("/");
+		if (!loc) {
+			return null;
+		}
+		if (loc.lastIndexOf("/") != loc.length - 1) {
+			loc += "/";
+		}
+		var colonIndex = loc.indexOf(":");
+		var slashIndex = loc.indexOf("/");
+		if (loc.charAt(0) != "/" && (colonIndex == -1 || colonIndex > slashIndex)) {
+			loc = dojo.hostenv.getBaseScriptUri() + loc;
+		}
+		return new dojo.uri.Uri(loc, uri);
+	};
+	this.Uri = function () {
 		var uri = arguments[0];
 		for (var i = 1; i < arguments.length; i++) {
-			if(!arguments[i]) { continue; }
-
-			// Safari doesn't support this.constructor so we have to be explicit
+			if (!arguments[i]) {
+				continue;
+			}
 			var relobj = new dojo.uri.Uri(arguments[i].toString());
 			var uriobj = new dojo.uri.Uri(uri.toString());
-
-			if ((relobj.path=="")&&(relobj.scheme==null)&&(relobj.authority==null)&&(relobj.query==null)) {
-				if (relobj.fragment != null) { uriobj.fragment = relobj.fragment; }
+			if ((relobj.path == "") && (relobj.scheme == null) && (relobj.authority == null) && (relobj.query == null)) {
+				if (relobj.fragment != null) {
+					uriobj.fragment = relobj.fragment;
+				}
 				relobj = uriobj;
-			} else if (relobj.scheme == null) {
-				relobj.scheme = uriobj.scheme;
-
-				if (relobj.authority == null) {
-					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; }
+			} else {
+				if (relobj.scheme == null) {
+					relobj.scheme = uriobj.scheme;
+					if (relobj.authority == null) {
+						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("/");
 						}
-						relobj.path = segs.join("/");
 					}
 				}
 			}
-
 			uri = "";
-			if (relobj.scheme != null) { uri += relobj.scheme + ":"; }
-			if (relobj.authority != null) { uri += "//" + relobj.authority; }
+			if (relobj.scheme != null) {
+				uri += relobj.scheme + ":";
+			}
+			if (relobj.authority != null) {
+				uri += "//" + relobj.authority;
+			}
 			uri += relobj.path;
-			if (relobj.query != null) { uri += "?" + relobj.query; }
-			if (relobj.fragment != null) { uri += "#" + relobj.fragment; }
+			if (relobj.query != null) {
+				uri += "?" + relobj.query;
+			}
+			if (relobj.fragment != null) {
+				uri += "#" + relobj.fragment;
+			}
 		}
-
 		this.uri = uri.toString();
-
-		// break the uri into its main components
 		var regexp = "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
 		var r = this.uri.match(new RegExp(regexp));
-
 		this.scheme = r[2] || (r[1] ? "" : null);
 		this.authority = r[4] || (r[3] ? "" : null);
-		this.path = r[5]; // can never be undefined
+		this.path = r[5];
 		this.query = r[7] || (r[6] ? "" : null);
-		this.fragment  = r[9] || (r[8] ? "" : null);
-
+		this.fragment = r[9] || (r[8] ? "" : null);
 		if (this.authority != null) {
-			// server based naming authority
 			regexp = "^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
 			r = this.authority.match(new RegExp(regexp));
-
 			this.user = r[3] || null;
 			this.password = r[4] || null;
 			this.host = r[5];
 			this.port = r[7] || null;
 		}
-
-		this.toString = function(){ return this.uri; }
-	}
+		this.toString = function () {
+			return this.uri;
+		};
+	};
 };
 
+
 __CPAN_DIR__ src/math
 __CPAN_FILE__ src/math/points.js
 /*
@@ -87514,49 +60919,35 @@
 
 dojo.provide("dojo.math.points");
 dojo.require("dojo.math");
-
-dojo.math.points = {
-	translate: function(/* array */a, /* array */b) {
-		//	summary
-		//	translate a by b, and return the result.
-		if( a.length != b.length ) {
-			dojo.raise("dojo.math.translate: points not same size (a:[" + a + "], b:[" + b + "])");
-		}
-		var c = new Array(a.length);
-		for(var i = 0; i < a.length; i++) {
-			c[i] = a[i] + b[i];
-		}
-		return c;	//	array
-	},
-
-	midpoint: function(/* array */a, /* array */b) {
-		//	summary
-		//	Find the point midway between a and b
-		if( a.length != b.length ) {
-			dojo.raise("dojo.math.midpoint: points not same size (a:[" + a + "], b:[" + b + "])");
-		}
-		var c = new Array(a.length);
-		for(var i = 0; i < a.length; i++) {
-			c[i] = (a[i] + b[i]) / 2;
-		}
-		return c;	//	array
-	},
-
-	invert: function(/* array */a) {
-		//	summary
-		//	invert the values in a and return it.
-		var b = new Array(a.length);
-		for(var i = 0; i < a.length; i++) { b[i] = -a[i]; }
-		return b;	//	array
-	},
-
-	distance: function(/* array */a, /* array */b) {
-		//	summary
-		//	Calculate the distance between point a and point b
-		return Math.sqrt(Math.pow(b[0]-a[0], 2) + Math.pow(b[1]-a[1], 2));	// 	float
+dojo.math.points = {translate:function (a, b) {
+	if (a.length != b.length) {
+		dojo.raise("dojo.math.translate: points not same size (a:[" + a + "], b:[" + b + "])");
 	}
-};
+	var c = new Array(a.length);
+	for (var i = 0; i < a.length; i++) {
+		c[i] = a[i] + b[i];
+	}
+	return c;
+}, midpoint:function (a, b) {
+	if (a.length != b.length) {
+		dojo.raise("dojo.math.midpoint: points not same size (a:[" + a + "], b:[" + b + "])");
+	}
+	var c = new Array(a.length);
+	for (var i = 0; i < a.length; i++) {
+		c[i] = (a[i] + b[i]) / 2;
+	}
+	return c;
+}, invert:function (a) {
+	var b = new Array(a.length);
+	for (var i = 0; i < a.length; i++) {
+		b[i] = -a[i];
+	}
+	return b;
+}, distance:function (a, b) {
+	return Math.sqrt(Math.pow(b[0] - a[0], 2) + Math.pow(b[1] - a[1], 2));
+}};
 
+
 __CPAN_FILE__ src/math/matrix.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -87569,207 +60960,146 @@
 */
 
 dojo.provide("dojo.math.matrix");
-
-// some of this code is based on
-// http://www.mkaz.com/math/MatrixCalculator.java
-// (published under a BSD Open Source License)
-//
-// the rest is from my vague memory of matricies in school [cal]
-//
-// the copying of arguments is a little excessive, and could be trimmed back in
-// the case where a function doesn't modify them at all (but some do!)
-//
-// 2006-06-25: Some enhancements submitted by Erel Segal:
-// * addition: a tolerance constant for determinant calculations.
-// * performance fix: removed unnecessary argument copying.
-// * addition: function "product" for multiplying more than 2 matrices
-// * addition: function "sum" for adding any number of matrices
-// * bug fix: inversion of a 1x1 matrix without using the adjoint
-// * performance fixes: upperTriangle
-// * addition: argument "value" to function create, to initialize the matrix with a custom val
-// * addition: functions "ones" and "zeros" - like Matlab[TM] functions with the same name.
-// * addition: function "identity" for creating an identity matrix of a given size.
-// * addition: argument "decimal_points" to function format
-// * bug fix: adjoint of a 0-size matrix
-// * performance fixes: adjoint
-//
-
 dojo.math.matrix.iDF = 0;
-
-// Erel: values lower than this value are considered zero (in detereminant calculations).
-// It is analogous to Maltab[TM]'s "eps".
 dojo.math.matrix.ALMOST_ZERO = 1e-10;
-dojo.math.matrix.multiply = function(a, b){
+dojo.math.matrix.multiply = function (a, b) {
 	var ay = a.length;
 	var ax = a[0].length;
 	var by = b.length;
 	var bx = b[0].length;
-
-	if (ax != by){
-		dojo.debug("Can't multiply matricies of sizes "+ax+','+ay+' and '+bx+','+by);
+	if (ax != by) {
+		dojo.debug("Can't multiply matricies of sizes " + ax + "," + ay + " and " + bx + "," + by);
 		return [[0]];
 	}
-
 	var c = [];
-	for(var k=0; k<ay; k++){
+	for (var k = 0; k < ay; k++) {
 		c[k] = [];
-		for(var i=0; i<bx; i++){
+		for (var i = 0; i < bx; i++) {
 			c[k][i] = 0;
-			for(var m=0; m<ax; m++){
-				c[k][i] += a[k][m]*b[m][i];
+			for (var m = 0; m < ax; m++) {
+				c[k][i] += a[k][m] * b[m][i];
 			}
 		}
 	}
 	return c;
-}
-
-// Erel: added a "product" function to calculate product of more than 2 matrices:
-dojo.math.matrix.product = function() {
-	if (arguments.length==0) {
-		dojo.debug ("can't multiply 0 matrices!");
+};
+dojo.math.matrix.product = function () {
+	if (arguments.length == 0) {
+		dojo.debug("can't multiply 0 matrices!");
 		return 1;
 	}
 	var result = arguments[0];
-	for (var i=1; i<arguments.length; i++){
-		result = dojo.math.matrix.multiply(result,arguments[i]);
+	for (var i = 1; i < arguments.length; i++) {
+		result = dojo.math.matrix.multiply(result, arguments[i]);
 	}
 	return result;
-}
-
-// Erel: added a "sum" function to calculate sum of more than 2 matrices:
-dojo.math.matrix.sum = function() {
-	if (arguments.length==0) {
-		dojo.debug ("can't sum 0 matrices!");
+};
+dojo.math.matrix.sum = function () {
+	if (arguments.length == 0) {
+		dojo.debug("can't sum 0 matrices!");
 		return 0;
 	}
 	var result = dojo.math.matrix.copy(arguments[0]);
 	var rows = result.length;
-	if (rows==0) {
-		dojo.debug ("can't deal with matrices of 0 rows!");
+	if (rows == 0) {
+		dojo.debug("can't deal with matrices of 0 rows!");
 		return 0;
 	}
 	var cols = result[0].length;
-	if (cols==0) {
-		dojo.debug ("can't deal with matrices of 0 cols!");
+	if (cols == 0) {
+		dojo.debug("can't deal with matrices of 0 cols!");
 		return 0;
 	}
-	for (var i=1; i<arguments.length; ++i) {
+	for (var i = 1; i < arguments.length; ++i) {
 		var arg = arguments[i];
-		if (arg.length!=rows || arg[0].length!=cols) {
-			dojo.debug ("can't add matrices of different dimensions: first dimensions were " + rows + "x" + cols + ", current dimensions are "+arg.length + "x" + arg[0].length);
+		if (arg.length != rows || arg[0].length != cols) {
+			dojo.debug("can't add matrices of different dimensions: first dimensions were " + rows + "x" + cols + ", current dimensions are " + arg.length + "x" + arg[0].length);
 			return 0;
 		}
-		
-		// The actual addition:
-		for (var r=0; r<rows; r++){
-			for (var c=0; c<cols; c++){
+		for (var r = 0; r < rows; r++) {
+			for (var c = 0; c < cols; c++) {
 				result[r][c] += arg[r][c];
 			}
 		}
 	}
 	return result;
-}
-
-
-dojo.math.matrix.inverse = function(a){
-	// Erel: added special case: inverse of a 1x1 matrix can't be calculated by adjoint
-	if (a.length==1 && a[0].length==1){
-		return [[ 1 / a[0][0] ]];
+};
+dojo.math.matrix.inverse = function (a) {
+	if (a.length == 1 && a[0].length == 1) {
+		return [[1 / a[0][0]]];
 	}
-
-	// Formula used to Calculate Inverse:
-	// inv(A) = 1/det(A) * adj(A)
-	
 	var tms = a.length;
 	var m = dojo.math.matrix.create(tms, tms);
 	var mm = dojo.math.matrix.adjoint(a);
 	var det = dojo.math.matrix.determinant(a);
 	var dd = 0;
-
-	if(det == 0){
+	if (det == 0) {
 		dojo.debug("Determinant Equals 0, Not Invertible.");
 		return [[0]];
-	}else{
+	} else {
 		dd = 1 / det;
 	}
-
-	for (var i = 0; i < tms; i++){
+	for (var i = 0; i < tms; i++) {
 		for (var j = 0; j < tms; j++) {
 			m[i][j] = dd * mm[i][j];
 		}
 	}
 	return m;
-}
-
-dojo.math.matrix.determinant = function(a){
-	if (a.length != a[0].length){
+};
+dojo.math.matrix.determinant = function (a) {
+	if (a.length != a[0].length) {
 		dojo.debug("Can't calculate the determiant of a non-squre matrix!");
 		return 0;
 	}
-
 	var tms = a.length;
 	var det = 1;
 	var b = dojo.math.matrix.upperTriangle(a);
-
-	for (var i=0; i < tms; i++){
+	for (var i = 0; i < tms; i++) {
 		var bii = b[i][i];
-		if (Math.abs(bii) < dojo.math.matrix.ALMOST_ZERO){
+		if (Math.abs(bii) < dojo.math.matrix.ALMOST_ZERO) {
 			return 0;
 		}
 		det *= bii;
 	}
 	det = det * dojo.math.matrix.iDF;
 	return det;
-}
-
-dojo.math.matrix.upperTriangle = function(m){
-	m = dojo.math.matrix.copy(m);     // Copy m, because m is changed!
+};
+dojo.math.matrix.upperTriangle = function (m) {
+	m = dojo.math.matrix.copy(m);
 	var f1 = 0;
 	var temp = 0;
 	var tms = m.length;
 	var v = 1;
-
-	//Erel: why use a global variable and not a local variable?
 	dojo.math.matrix.iDF = 1;
-
 	for (var col = 0; col < tms - 1; col++) {
-		if (typeof m[col][col] != 'number'){
-			dojo.debug("non-numeric entry found in a numeric matrix: m["+col+"]["+col+"]="+m[col][col]);
+		if (typeof m[col][col] != "number") {
+			dojo.debug("non-numeric entry found in a numeric matrix: m[" + col + "][" + col + "]=" + m[col][col]);
 		}
 		v = 1;
 		var stop_loop = 0;
-		
-		// check if there is a 0 in diagonal
 		while ((m[col][col] == 0) && !stop_loop) {
-			// if so,  switch rows until there is no 0 in diagonal:
-			if (col + v >= tms){
-				// check if switched all rows
+			if (col + v >= tms) {
 				dojo.math.matrix.iDF = 0;
 				stop_loop = 1;
-			}else{
+			} else {
 				for (var r = 0; r < tms; r++) {
 					temp = m[col][r];
-					m[col][r] = m[col + v][r]; // switch rows
+					m[col][r] = m[col + v][r];
 					m[col + v][r] = temp;
 				}
-				v++; // count row switchs
-				dojo.math.matrix.iDF *= -1; // each switch changes determinant factor
+				v++;
+				dojo.math.matrix.iDF *= -1;
 			}
 		}
-		
-		// loop over lower-right triangle (where row>col):
-		// for each row, make m[row][col] = 0 by linear operations that don't change the determinant:
 		for (var row = col + 1; row < tms; row++) {
-			if (typeof m[row][col] != 'number'){
-				dojo.debug("non-numeric entry found in a numeric matrix: m["+row+"]["+col+"]="+m[row][col]);
+			if (typeof m[row][col] != "number") {
+				dojo.debug("non-numeric entry found in a numeric matrix: m[" + row + "][" + col + "]=" + m[row][col]);
 			}
-			if (typeof m[col][row] != 'number'){
-				dojo.debug("non-numeric entry found in a numeric matrix: m["+col+"]["+row+"]="+m[col][row]);
+			if (typeof m[col][row] != "number") {
+				dojo.debug("non-numeric entry found in a numeric matrix: m[" + col + "][" + row + "]=" + m[col][row]);
 			}
 			if (m[col][col] != 0) {
 				var f1 = (-1) * m[row][col] / m[col][col];
-				// this should make m[row][col] zero:
-				// 	m[row] += f1 * m[col];
 				for (var i = col; i < tms; i++) {
 					m[row][i] = f1 * m[col][i] + m[row][i];
 				}
@@ -87777,165 +61107,150 @@
 		}
 	}
 	return m;
-}
-
-// Erel: added parameter "value" - a custom default value to fill the matrix with.
-dojo.math.matrix.create = function(a, b, value){
-	if(!value){
+};
+dojo.math.matrix.create = function (a, b, value) {
+	if (!value) {
 		value = 0;
 	}
 	var m = [];
-	for(var i=0; i<b; i++){
+	for (var i = 0; i < b; i++) {
 		m[i] = [];
-		for(var j=0; j<a; j++){
+		for (var j = 0; j < a; j++) {
 			m[i][j] = value;
 		}
 	}
 	return m;
-}
-
-// Erel implement Matlab[TM] functions "ones" and "zeros"
-dojo.math.matrix.ones = function(a,b) { 
-	return dojo.math.matrix.create(a,b,1); 
-}
-dojo.math.matrix.zeros = function(a,b) { 
-	return dojo.math.matrix.create(a,b,0); 
-}
-
-// Erel: added function that returns identity matrix.
-//	size = number of rows and cols in the matrix.
-//	scale = an optional value to multiply the matrix by (default is 1).
-dojo.math.matrix.identity = function(size, scale){
-	if (!scale){
+};
+dojo.math.matrix.ones = function (a, b) {
+	return dojo.math.matrix.create(a, b, 1);
+};
+dojo.math.matrix.zeros = function (a, b) {
+	return dojo.math.matrix.create(a, b, 0);
+};
+dojo.math.matrix.identity = function (size, scale) {
+	if (!scale) {
 		scale = 1;
 	}
 	var m = [];
-	for(var i=0; i<size; i++){
+	for (var i = 0; i < size; i++) {
 		m[i] = [];
-		for(var j=0; j<size; j++){
-			m[i][j] = (i==j? scale: 0);
+		for (var j = 0; j < size; j++) {
+			m[i][j] = (i == j ? scale : 0);
 		}
 	}
 	return m;
-}
-
-dojo.math.matrix.adjoint = function(a){
+};
+dojo.math.matrix.adjoint = function (a) {
 	var tms = a.length;
-
-	// Erel: added "<=" to catch zero-size matrix
-	if (tms <= 1){
+	if (tms <= 1) {
 		dojo.debug("Can't find the adjoint of a matrix with a dimension less than 2");
 		return [[0]];
 	}
-
-	if (a.length != a[0].length){
+	if (a.length != a[0].length) {
 		dojo.debug("Can't find the adjoint of a non-square matrix");
 		return [[0]];
 	}
-
 	var m = dojo.math.matrix.create(tms, tms);
-
 	var ii = 0;
 	var jj = 0;
 	var ia = 0;
 	var ja = 0;
 	var det = 0;
-	var ap = dojo.math.matrix.create(tms-1, tms-1);
-
-	for (var i = 0; i < tms; i++){
-		for (var j = 0; j < tms; j++){
+	var ap = dojo.math.matrix.create(tms - 1, tms - 1);
+	for (var i = 0; i < tms; i++) {
+		for (var j = 0; j < tms; j++) {
 			ia = 0;
-			for (ii = 0; ii < tms; ii++) {   // create a temporary matrix for determinant calc
-				if (ii==i){
-					continue;       // skip current row
+			for (ii = 0; ii < tms; ii++) {
+				if (ii == i) {
+					continue;
 				}
 				ja = 0;
 				for (jj = 0; jj < tms; jj++) {
-					if (jj==j){
-						continue;       // skip current col
+					if (jj == j) {
+						continue;
 					}
 					ap[ia][ja] = a[ii][jj];
 					ja++;
 				}
 				ia++;
 			}
-		
 			det = dojo.math.matrix.determinant(ap);
-			m[i][j] = Math.pow(-1 , (i + j)) * det;
+			m[i][j] = Math.pow(-1, (i + j)) * det;
 		}
 	}
 	m = dojo.math.matrix.transpose(m);
 	return m;
-}
-
-dojo.math.matrix.transpose = function(a){
+};
+dojo.math.matrix.transpose = function (a) {
 	var m = dojo.math.matrix.create(a.length, a[0].length);
-	for (var i = 0; i < a.length; i++){
-		for (var j = 0; j < a[i].length; j++){
+	for (var i = 0; i < a.length; i++) {
+		for (var j = 0; j < a[i].length; j++) {
 			m[j][i] = a[i][j];
 		}
 	}
 	return m;
-}
-
-// Erel: added decimal_points argument
-dojo.math.matrix.format = function(a, decimal_points){
-	if (arguments.length<=1){
+};
+dojo.math.matrix.format = function (a, decimal_points) {
+	if (arguments.length <= 1) {
 		decimal_points = 5;
 	}
-
-	function format_int(x, dp){
-		var fac = Math.pow(10 , dp);
-		var a = Math.round(x*fac)/fac;
+	function format_int(x, dp) {
+		var fac = Math.pow(10, dp);
+		var a = Math.round(x * fac) / fac;
 		var b = a.toString();
-		if (b.charAt(0) != '-'){ b = ' ' + b;}
+		if (b.charAt(0) != "-") {
+			b = " " + b;
+		}
 		var has_dp = 0;
-		for(var i=1; i<b.length; i++){
-			if (b.charAt(i) == '.'){ has_dp = 1; }
+		for (var i = 1; i < b.length; i++) {
+			if (b.charAt(i) == ".") {
+				has_dp = 1;
+			}
 		}
-		if (!has_dp){ b += '.'; }
-		while(b.length < dp+3){ b += '0'; }
+		if (!has_dp) {
+			b += ".";
+		}
+		while (b.length < dp + 3) {
+			b += "0";
+		}
 		return b;
 	}
-
 	var ya = a.length;
-	var xa = ya>0? a[0].length: 0;
-	var buffer = '';
-	for (var y=0; y<ya; y++){
-		buffer += '| ';
-		for (var x=0; x<xa; x++){
-			buffer += format_int(a[y][x], decimal_points) + ' ';
+	var xa = ya > 0 ? a[0].length : 0;
+	var buffer = "";
+	for (var y = 0; y < ya; y++) {
+		buffer += "| ";
+		for (var x = 0; x < xa; x++) {
+			buffer += format_int(a[y][x], decimal_points) + " ";
 		}
-		buffer += '|\n';
+		buffer += "|\n";
 	}
 	return buffer;
-}
-
-dojo.math.matrix.copy = function(a){
+};
+dojo.math.matrix.copy = function (a) {
 	var ya = a.length;
 	var xa = a[0].length;
 	var m = dojo.math.matrix.create(xa, ya);
-	for (var y=0; y<ya; y++){
-		for (var x=0; x<xa; x++){
+	for (var y = 0; y < ya; y++) {
+		for (var x = 0; x < xa; x++) {
 			m[y][x] = a[y][x];
 		}
 	}
 	return m;
-}
-
-dojo.math.matrix.scale = function(k, a){
-	a = dojo.math.matrix.copy(a);  // Copy a because a is changed!
+};
+dojo.math.matrix.scale = function (k, a) {
+	a = dojo.math.matrix.copy(a);
 	var ya = a.length;
 	var xa = a[0].length;
-
-	for (var y=0; y<ya; y++){
-		for (var x=0; x<xa; x++){
+	for (var y = 0; y < ya; y++) {
+		for (var x = 0; x < xa; x++) {
 			a[y][x] *= k;
 		}
 	}
 	return a;
-}
+};
 
+
 __CPAN_FILE__ src/math/curves.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -87949,237 +61264,177 @@
 
 dojo.provide("dojo.math.curves");
 dojo.require("dojo.math");
-
-/* Curves from Dan's 13th lib stuff.
- * See: http://pupius.co.uk/js/Toolkit.Drawing.js
- *      http://pupius.co.uk/dump/dojo/Dojo.Math.js
- */
-
-dojo.math.curves = {
-	Line: function(/* array */start, /* array */end) {
-		//	summary
-		//	Creates a straight line object
-		this.start = start;
-		this.end = end;
-		this.dimensions = start.length;
-
-		for(var i = 0; i < start.length; i++) {
-			start[i] = Number(start[i]);
+dojo.math.curves = {Line:function (start, end) {
+	this.start = start;
+	this.end = end;
+	this.dimensions = start.length;
+	for (var i = 0; i < start.length; i++) {
+		start[i] = Number(start[i]);
+	}
+	for (var i = 0; i < end.length; i++) {
+		end[i] = Number(end[i]);
+	}
+	this.getValue = function (n) {
+		var retVal = new Array(this.dimensions);
+		for (var i = 0; i < this.dimensions; i++) {
+			retVal[i] = ((this.end[i] - this.start[i]) * n) + this.start[i];
 		}
-
-		for(var i = 0; i < end.length; i++) {
-			end[i] = Number(end[i]);
+		return retVal;
+	};
+	return this;
+}, Bezier:function (pnts) {
+	this.getValue = function (step) {
+		if (step >= 1) {
+			return this.p[this.p.length - 1];
 		}
-
-		//simple function to find point on an n-dimensional, straight line
-		this.getValue = function(/* float */n){
-			//	summary
-			//	Returns the point at point N (in terms of percentage) on this line.
-			var retVal = new Array(this.dimensions);
-			for(var i=0;i<this.dimensions;i++)
-				retVal[i] = ((this.end[i] - this.start[i]) * n) + this.start[i];
-			return retVal;	//	array
+		if (step <= 0) {
+			return this.p[0];
 		}
-		return this;	//	dojo.math.curves.Line
-	},
-
-	Bezier: function(/* array */pnts) {
-		//	summary
-		//	Creates a bezier curve
-		//	Takes an array of points, the first is the start point, the last is end point and the ones in
-		//	between are the Bezier control points.
-		this.getValue = function(/* float */step) {
-			//	summary
-			//	Returns the point at point N (in terms of percentage) on this curve.
-			if(step >= 1) return this.p[this.p.length-1];	// if step>=1 we must be at the end of the curve
-			if(step <= 0) return this.p[0];					// if step<=0 we must be at the start of the curve
-			var retVal = new Array(this.p[0].length);
-			for(var k=0;j<this.p[0].length;k++) { retVal[k]=0; }
-			for(var j=0;j<this.p[0].length;j++) {
-				var C=0; var D=0;
-				for(var i=0;i<this.p.length;i++) {
-					C += this.p[i][j] * this.p[this.p.length-1][0]
-						* dojo.math.bernstein(step,this.p.length,i);
-				}
-				for(var l=0;l<this.p.length;l++) {
-					D += this.p[this.p.length-1][0] * dojo.math.bernstein(step,this.p.length,l);
-				}
-				retVal[j] = C/D;
-			}
-			return retVal;	//	array
+		var retVal = new Array(this.p[0].length);
+		for (var k = 0; j < this.p[0].length; k++) {
+			retVal[k] = 0;
 		}
-		this.p = pnts;
-		return this;	//	dojo.math.curves.Bezier
-	},
-
-	CatmullRom : function(/* array */pnts, /* float */c) {
-		//	summary
-		//	Creates a catmull-rom spline curve with c tension.
-		this.getValue = function(/* float */step) {
-			//	summary
-			//	Returns the point at point N (in terms of percentage) on this curve.
-			var percent = step * (this.p.length-1);
-			var node = Math.floor(percent);
-			var progress = percent - node;
-
-			var i0 = node-1; if(i0 < 0) i0 = 0;
-			var i = node;
-			var i1 = node+1; if(i1 >= this.p.length) i1 = this.p.length-1;
-			var i2 = node+2; if(i2 >= this.p.length) i2 = this.p.length-1;
-
-			var u = progress;
-			var u2 = progress*progress;
-			var u3 = progress*progress*progress;
-
-			var retVal = new Array(this.p[0].length);
-			for(var k=0;k<this.p[0].length;k++) {
-				var x1 = ( -this.c * this.p[i0][k] ) + ( (2 - this.c) * this.p[i][k] ) + ( (this.c-2) * this.p[i1][k] ) + ( this.c * this.p[i2][k] );
-				var x2 = ( 2 * this.c * this.p[i0][k] ) + ( (this.c-3) * this.p[i][k] ) + ( (3 - 2 * this.c) * this.p[i1][k] ) + ( -this.c * this.p[i2][k] );
-				var x3 = ( -this.c * this.p[i0][k] ) + ( this.c * this.p[i1][k] );
-				var x4 = this.p[i][k];
-
-				retVal[k] = x1*u3 + x2*u2 + x3*u + x4;
+		for (var j = 0; j < this.p[0].length; j++) {
+			var C = 0;
+			var D = 0;
+			for (var i = 0; i < this.p.length; i++) {
+				C += this.p[i][j] * this.p[this.p.length - 1][0] * dojo.math.bernstein(step, this.p.length, i);
 			}
-			return retVal;	//	array
+			for (var l = 0; l < this.p.length; l++) {
+				D += this.p[this.p.length - 1][0] * dojo.math.bernstein(step, this.p.length, l);
+			}
+			retVal[j] = C / D;
 		}
-
-		if(!c) this.c = 0.7;
-		else this.c = c;
-		this.p = pnts;
-
-		return this;	//	dojo.math.curves.CatmullRom
-	},
-
-	// FIXME: This is the bad way to do a partial-arc with 2 points. We need to have the user
-	// supply the radius, otherwise we always get a half-circle between the two points.
-	Arc : function(/* array */start, /* array */end, /* boolean? */ccw) {
-		//	summary
-		//	Creates an arc with a counter clockwise switch
-		var center = dojo.math.points.midpoint(start, end);
-		var sides = dojo.math.points.translate(dojo.math.points.invert(center), start);
-		var rad = Math.sqrt(Math.pow(sides[0], 2) + Math.pow(sides[1], 2));
-		var theta = dojo.math.radToDeg(Math.atan(sides[1]/sides[0]));
-		if( sides[0] < 0 ) {
-			theta -= 90;
-		} else {
-			theta += 90;
+		return retVal;
+	};
+	this.p = pnts;
+	return this;
+}, CatmullRom:function (pnts, c) {
+	this.getValue = function (step) {
+		var percent = step * (this.p.length - 1);
+		var node = Math.floor(percent);
+		var progress = percent - node;
+		var i0 = node - 1;
+		if (i0 < 0) {
+			i0 = 0;
 		}
-		dojo.math.curves.CenteredArc.call(this, center, rad, theta, theta+(ccw?-180:180));
-	},
-
-	CenteredArc : function(/* array */center, /* float */radius, /* array */start, /* array */end) {
-		//	summary
-		// 	Creates an arc object, with center and radius (Top of arc = 0 degrees, increments clockwise)
-		//  center => 2D point for center of arc
-		//  radius => scalar quantity for radius of arc
-		//  start  => to define an arc specify start angle (default: 0)
-		//  end    => to define an arc specify start angle
-		this.center = center;
-		this.radius = radius;
-		this.start = start || 0;
-		this.end = end;
-
-		this.getValue = function(/* float */n) {
-			//	summary
-			//	Returns the point at point N (in terms of percentage) on this curve.
-			var retVal = new Array(2);
-			var theta = dojo.math.degToRad(this.start+((this.end-this.start)*n));
-
-			retVal[0] = this.center[0] + this.radius*Math.sin(theta);
-			retVal[1] = this.center[1] - this.radius*Math.cos(theta);
-	
-			return retVal;	//	array
+		var i = node;
+		var i1 = node + 1;
+		if (i1 >= this.p.length) {
+			i1 = this.p.length - 1;
 		}
-
-		return this;	//	dojo.math.curves.CenteredArc
-	},
-
-	Circle : function(/* array */center, /* float */radius) {
-		//	summary
-		// Special case of Arc (start = 0, end = 360)
-		dojo.math.curves.CenteredArc.call(this, center, radius, 0, 360);
-		return this;	//	dojo.math.curves.Circle
-	},
-
-	Path : function() {
-		//	summary
-		// 	Generic path shape, created from curve segments
-		var curves = [];
-		var weights = [];
-		var ranges = [];
-		var totalWeight = 0;
-
-		this.add = function(/* dojo.math.curves.* */curve, /* float */weight) {
-			//	summary
-			//	Add a curve segment to this path
-			if( weight < 0 ) { dojo.raise("dojo.math.curves.Path.add: weight cannot be less than 0"); }
-			curves.push(curve);
-			weights.push(weight);
-			totalWeight += weight;
-			computeRanges();
+		var i2 = node + 2;
+		if (i2 >= this.p.length) {
+			i2 = this.p.length - 1;
 		}
-
-		this.remove = function(/* dojo.math.curves.* */curve) {
-			//	summary
-			//	Remove a curve segment from this path
-			for(var i = 0; i < curves.length; i++) {
-				if( curves[i] == curve ) {
-					curves.splice(i, 1);
-					totalWeight -= weights.splice(i, 1)[0];
-					break;
-				}
-			}
-			computeRanges();
+		var u = progress;
+		var u2 = progress * progress;
+		var u3 = progress * progress * progress;
+		var retVal = new Array(this.p[0].length);
+		for (var k = 0; k < this.p[0].length; k++) {
+			var x1 = (-this.c * this.p[i0][k]) + ((2 - this.c) * this.p[i][k]) + ((this.c - 2) * this.p[i1][k]) + (this.c * this.p[i2][k]);
+			var x2 = (2 * this.c * this.p[i0][k]) + ((this.c - 3) * this.p[i][k]) + ((3 - 2 * this.c) * this.p[i1][k]) + (-this.c * this.p[i2][k]);
+			var x3 = (-this.c * this.p[i0][k]) + (this.c * this.p[i1][k]);
+			var x4 = this.p[i][k];
+			retVal[k] = x1 * u3 + x2 * u2 + x3 * u + x4;
 		}
-
-		this.removeAll = function() {
-			//	summary
-			//	Remove all curve segments
-			curves = [];
-			weights = [];
-			totalWeight = 0;
+		return retVal;
+	};
+	if (!c) {
+		this.c = 0.7;
+	} else {
+		this.c = c;
+	}
+	this.p = pnts;
+	return this;
+}, Arc:function (start, end, ccw) {
+	var center = dojo.math.points.midpoint(start, end);
+	var sides = dojo.math.points.translate(dojo.math.points.invert(center), start);
+	var rad = Math.sqrt(Math.pow(sides[0], 2) + Math.pow(sides[1], 2));
+	var theta = dojo.math.radToDeg(Math.atan(sides[1] / sides[0]));
+	if (sides[0] < 0) {
+		theta -= 90;
+	} else {
+		theta += 90;
+	}
+	dojo.math.curves.CenteredArc.call(this, center, rad, theta, theta + (ccw ? -180 : 180));
+}, CenteredArc:function (center, radius, start, end) {
+	this.center = center;
+	this.radius = radius;
+	this.start = start || 0;
+	this.end = end;
+	this.getValue = function (n) {
+		var retVal = new Array(2);
+		var theta = dojo.math.degToRad(this.start + ((this.end - this.start) * n));
+		retVal[0] = this.center[0] + this.radius * Math.sin(theta);
+		retVal[1] = this.center[1] - this.radius * Math.cos(theta);
+		return retVal;
+	};
+	return this;
+}, Circle:function (center, radius) {
+	dojo.math.curves.CenteredArc.call(this, center, radius, 0, 360);
+	return this;
+}, Path:function () {
+	var curves = [];
+	var weights = [];
+	var ranges = [];
+	var totalWeight = 0;
+	this.add = function (curve, weight) {
+		if (weight < 0) {
+			dojo.raise("dojo.math.curves.Path.add: weight cannot be less than 0");
 		}
-
-		this.getValue = function(/* float */n) {
-			//	summary
-			//	Returns the point at point N (in terms of percentage) on this curve.
-			var found = false, value = 0;
-			for(var i = 0; i < ranges.length; i++) {
-				var r = ranges[i];
-				//w(r.join(" ... "));
-				if( n >= r[0] && n < r[1] ) {
-					var subN = (n - r[0]) / r[2];
-					value = curves[i].getValue(subN);
-					found = true;
-					break;
-				}
+		curves.push(curve);
+		weights.push(weight);
+		totalWeight += weight;
+		computeRanges();
+	};
+	this.remove = function (curve) {
+		for (var i = 0; i < curves.length; i++) {
+			if (curves[i] == curve) {
+				curves.splice(i, 1);
+				totalWeight -= weights.splice(i, 1)[0];
+				break;
 			}
-
-			// FIXME: Do we want to assume we're at the end?
-			if( !found ) {
-				value = curves[curves.length-1].getValue(1);
-			}
-
-			for(var j = 0; j < i; j++) {
-				value = dojo.math.points.translate(value, curves[j].getValue(1));
-			}
-			return value;	//	array
 		}
-
-		function computeRanges() {
-			var start = 0;
-			for(var i = 0; i < weights.length; i++) {
-				var end = start + weights[i] / totalWeight;
-				var len = end - start;
-				ranges[i] = [start, end, len];
-				start = end;
+		computeRanges();
+	};
+	this.removeAll = function () {
+		curves = [];
+		weights = [];
+		totalWeight = 0;
+	};
+	this.getValue = function (n) {
+		var found = false, value = 0;
+		for (var i = 0; i < ranges.length; i++) {
+			var r = ranges[i];
+			if (n >= r[0] && n < r[1]) {
+				var subN = (n - r[0]) / r[2];
+				value = curves[i].getValue(subN);
+				found = true;
+				break;
 			}
 		}
-
-		return this;	//	dojo.math.curves.Path
+		if (!found) {
+			value = curves[curves.length - 1].getValue(1);
+		}
+		for (var j = 0; j < i; j++) {
+			value = dojo.math.points.translate(value, curves[j].getValue(1));
+		}
+		return value;
+	};
+	function computeRanges() {
+		var start = 0;
+		for (var i = 0; i < weights.length; i++) {
+			var end = start + weights[i] / totalWeight;
+			var len = end - start;
+			ranges[i] = [start, end, len];
+			start = end;
+		}
 	}
-};
+	return this;
+}};
 
+
 __CPAN_FILE__ src/math/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -88191,15 +61446,10 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: [
-		["dojo.math", false, false],
-		["dojo.math.curves", false, false],
-		["dojo.math.points", false, false]
-	]
-});
+dojo.kwCompoundRequire({common:[["dojo.math", false, false], ["dojo.math.curves", false, false], ["dojo.math.points", false, false]]});
 dojo.provide("dojo.math.*");
 
+
 __CPAN_DIR__ src/collections
 __CPAN_FILE__ src/collections/Set.js
 /*
@@ -88215,88 +61465,106 @@
 dojo.provide("dojo.collections.Set");
 dojo.require("dojo.collections.Collections");
 dojo.require("dojo.collections.ArrayList");
-
-dojo.collections.Set = new function(){
-	//	summary
-	//	Singleton for dealing with common set operations.
-	this.union = function(/* array */setA, /* array */setB){
-		//	summary
-		//	Return the union of the two passed sets.
-		if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA);
-		if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB);
-		if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections.");
+dojo.collections.Set = new function () {
+	this.union = function (setA, setB) {
+		if (setA.constructor == Array) {
+			var setA = new dojo.collections.ArrayList(setA);
+		}
+		if (setB.constructor == Array) {
+			var setB = new dojo.collections.ArrayList(setB);
+		}
+		if (!setA.toArray || !setB.toArray) {
+			dojo.raise("Set operations can only be performed on array-based collections.");
+		}
 		var result = new dojo.collections.ArrayList(setA.toArray());
 		var e = setB.getIterator();
-		while(!e.atEnd()){
-			var item=e.get();
-			if(!result.contains(item)){
+		while (!e.atEnd()) {
+			var item = e.get();
+			if (!result.contains(item)) {
 				result.add(item);
 			}
 		}
-		return result;	//	dojo.collections.ArrayList
+		return result;
 	};
-	this.intersection = function(/* array */setA, /* array */setB){
-		//	summary
-		//	Return the intersection of the two passed sets.
-		if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA);
-		if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB);
-		if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections.");
+	this.intersection = function (setA, setB) {
+		if (setA.constructor == Array) {
+			var setA = new dojo.collections.ArrayList(setA);
+		}
+		if (setB.constructor == Array) {
+			var setB = new dojo.collections.ArrayList(setB);
+		}
+		if (!setA.toArray || !setB.toArray) {
+			dojo.raise("Set operations can only be performed on array-based collections.");
+		}
 		var result = new dojo.collections.ArrayList();
 		var e = setB.getIterator();
-		while(!e.atEnd()){
-			var item=e.get();
-			if(setA.contains(item)){
+		while (!e.atEnd()) {
+			var item = e.get();
+			if (setA.contains(item)) {
 				result.add(item);
 			}
 		}
-		return result;	//	dojo.collections.ArrayList
+		return result;
 	};
-	this.difference = function(/* array */setA, /* array */setB){
-		//	summary
-		//	Returns everything in setA that is not in setB.
-		if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA);
-		if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB);
-		if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections.");
+	this.difference = function (setA, setB) {
+		if (setA.constructor == Array) {
+			var setA = new dojo.collections.ArrayList(setA);
+		}
+		if (setB.constructor == Array) {
+			var setB = new dojo.collections.ArrayList(setB);
+		}
+		if (!setA.toArray || !setB.toArray) {
+			dojo.raise("Set operations can only be performed on array-based collections.");
+		}
 		var result = new dojo.collections.ArrayList();
-		var e=setA.getIterator();
-		while(!e.atEnd()){
-			var item=e.get();
-			if(!setB.contains(item)){
+		var e = setA.getIterator();
+		while (!e.atEnd()) {
+			var item = e.get();
+			if (!setB.contains(item)) {
 				result.add(item);
 			}
 		}
-		return result;	//	dojo.collections.ArrayList
+		return result;
 	};
-	this.isSubSet = function(/* array */setA, /* array */setB) {
-		//	summary
-		//	Returns if set B is a subset of set A.
-		if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA);
-		if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB);
-		if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections.");
+	this.isSubSet = function (setA, setB) {
+		if (setA.constructor == Array) {
+			var setA = new dojo.collections.ArrayList(setA);
+		}
+		if (setB.constructor == Array) {
+			var setB = new dojo.collections.ArrayList(setB);
+		}
+		if (!setA.toArray || !setB.toArray) {
+			dojo.raise("Set operations can only be performed on array-based collections.");
+		}
 		var e = setA.getIterator();
-		while(!e.atEnd()){
-			if(!setB.contains(e.get())){
-				return false;	//	boolean
+		while (!e.atEnd()) {
+			if (!setB.contains(e.get())) {
+				return false;
 			}
 		}
-		return true;	//	boolean
+		return true;
 	};
-	this.isSuperSet = function(/* array */setA, /* array */setB){
-		//	summary
-		//	Returns if set B is a superset of set A.
-		if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA);
-		if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB);
-		if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections.");
+	this.isSuperSet = function (setA, setB) {
+		if (setA.constructor == Array) {
+			var setA = new dojo.collections.ArrayList(setA);
+		}
+		if (setB.constructor == Array) {
+			var setB = new dojo.collections.ArrayList(setB);
+		}
+		if (!setA.toArray || !setB.toArray) {
+			dojo.raise("Set operations can only be performed on array-based collections.");
+		}
 		var e = setB.getIterator();
-		while(!e.atEnd()){
-			if(!setA.contains(e.get())){
-				return false;	//	boolean
+		while (!e.atEnd()) {
+			if (!setA.contains(e.get())) {
+				return false;
 			}
 		}
-		return true;	//	boolean
+		return true;
 	};
 }();
 
+
 __CPAN_FILE__ src/collections/Collections.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -88309,120 +61577,86 @@
 */
 
 dojo.provide("dojo.collections.Collections");
-
-dojo.collections.DictionaryEntry=function(/* string */k, /* object */v){
-	//	summary
-	//	return an object of type dojo.collections.DictionaryEntry
-	this.key=k;
-	this.value=v;
-	this.valueOf=function(){ 
-		return this.value; 	//	object
+dojo.collections.DictionaryEntry = function (k, v) {
+	this.key = k;
+	this.value = v;
+	this.valueOf = function () {
+		return this.value;
 	};
-	this.toString=function(){ 
-		return String(this.value);	//	string 
+	this.toString = function () {
+		return String(this.value);
 	};
-}
-
-/*	Iterators
- *	The collections.Iterators (Iterator and DictionaryIterator) are built to
- *	work with the Collections included in this module.  However, they *can*
- *	be used with arrays and objects, respectively, should one choose to do so.
- */
-dojo.collections.Iterator=function(/* array */arr){
-	//	summary
-	//	return an object of type dojo.collections.Iterator
-	var a=arr;
-	var position=0;
-	this.element=a[position]||null;
-	this.atEnd=function(){
-		//	summary
-		//	Test to see if the internal cursor has reached the end of the internal collection.
-		return (position>=a.length);	//	bool
+};
+dojo.collections.Iterator = function (arr) {
+	var a = arr;
+	var position = 0;
+	this.element = a[position] || null;
+	this.atEnd = function () {
+		return (position >= a.length);
 	};
-	this.get=function(){
-		//	summary
-		//	Test to see if the internal cursor has reached the end of the internal collection.
-		if(this.atEnd()){
-			return null;		//	object
+	this.get = function () {
+		if (this.atEnd()) {
+			return null;
 		}
-		this.element=a[position++];
-		return this.element;	//	object
+		this.element = a[position++];
+		return this.element;
 	};
-	this.map=function(/* function */fn, /* object? */scope){
-		//	summary
-		//	Functional iteration with optional scope.
-		var s=scope||dj_global;
-		if(Array.map){
-			return Array.map(a,fn,s);	//	array
-		}else{
-			var arr=[];
-			for(var i=0; i<a.length; i++){
-				arr.push(fn.call(s,a[i]));
+	this.map = function (fn, scope) {
+		var s = scope || dj_global;
+		if (Array.map) {
+			return Array.map(a, fn, s);
+		} else {
+			var arr = [];
+			for (var i = 0; i < a.length; i++) {
+				arr.push(fn.call(s, a[i]));
 			}
-			return arr;		//	array
+			return arr;
 		}
 	};
-	this.reset=function(){
-		//	summary
-		//	reset the internal cursor.
-		position=0;
-		this.element=a[position];
+	this.reset = function () {
+		position = 0;
+		this.element = a[position];
 	};
-}
-
-/*	Notes:
- *	The DictionaryIterator no longer supports a key and value property;
- *	the reality is that you can use this to iterate over a JS object
- *	being used as a hashtable.
- */
-dojo.collections.DictionaryIterator=function(/* object */obj){
-	//	summary
-	//	return an object of type dojo.collections.DictionaryIterator
-	var a=[];	//	Create an indexing array
-	var testObject={};
-	for(var p in obj){
-		if(!testObject[p]){
-			a.push(obj[p]);	//	fill it up
+};
+dojo.collections.DictionaryIterator = function (obj) {
+	var a = [];
+	var testObject = {};
+	for (var p in obj) {
+		if (!testObject[p]) {
+			a.push(obj[p]);
 		}
 	}
-	var position=0;
-	this.element=a[position]||null;
-	this.atEnd=function(){
-		//	summary
-		//	Test to see if the internal cursor has reached the end of the internal collection.
-		return (position>=a.length);	//	bool
+	var position = 0;
+	this.element = a[position] || null;
+	this.atEnd = function () {
+		return (position >= a.length);
 	};
-	this.get=function(){
-		//	summary
-		//	Test to see if the internal cursor has reached the end of the internal collection.
-		if(this.atEnd()){
-			return null;		//	object
+	this.get = function () {
+		if (this.atEnd()) {
+			return null;
 		}
-		this.element=a[position++];
-		return this.element;	//	object
+		this.element = a[position++];
+		return this.element;
 	};
-	this.map=function(/* function */fn, /* object? */scope){
-		//	summary
-		//	Functional iteration with optional scope.
-		var s=scope||dj_global;
-		if(Array.map){
-			return Array.map(a,fn,s);	//	array
-		}else{
-			var arr=[];
-			for(var i=0; i<a.length; i++){
-				arr.push(fn.call(s,a[i]));
+	this.map = function (fn, scope) {
+		var s = scope || dj_global;
+		if (Array.map) {
+			return Array.map(a, fn, s);
+		} else {
+			var arr = [];
+			for (var i = 0; i < a.length; i++) {
+				arr.push(fn.call(s, a[i]));
 			}
-			return arr;		//	array
+			return arr;
 		}
 	};
-	this.reset=function() { 
-		//	summary
-		//	reset the internal cursor.
-		position=0; 
-		this.element=a[position];
+	this.reset = function () {
+		position = 0;
+		this.element = a[position];
 	};
 };
 
+
 __CPAN_FILE__ src/collections/Store.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -88434,276 +61668,288 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.collections.Store");
-dojo.require("dojo.lang.common");
-
-/*	Store
- *	Designed to be a simple store of data with access methods...
- *	specifically to be mixed into other objects (such as widgets).
- */
-dojo.collections.Store = function(/* array? */jsonArray){
-	//	summary
-	//	Data Store with accessor methods.
-	var data = [];
-	this.keyField = "Id";
-
-	this.get = function(){
-		//	summary
-		//	Get the internal data array, should not be used.
-		return data;	//	array
-	};
-	this.getByKey = function(/* string */key){
-		//	summary
-		//	Find the internal data object by key.
-		for(var i=0; i<data.length; i++){
-			if(data[i].key==key){
-				return data[i];	// object
-			}
-		}
-		return null;	// null
-	};
-	this.getByIndex = function(/*number*/idx){ 
-		//	summary
-		//	Get the internal data object by index.
-		return data[idx]; 	// object
-	};
-	
-	this.getData = function(){
-		//	summary
-		//	Get an array of source objects.
-		var arr = [];
-		for(var i=0; i<data.length; i++){
-			arr.push(data[i].src);
-		}
-		return arr;	//	array
-	};
-	this.getDataByKey = function(/*string*/key){
-		//	summary
-		//	Get the source object by key.
-		for(var i=0; i<data.length; i++){
-			if(data[i].key==key){
-				return data[i].src; //	object
-			}
-		}
-		return null;	//	null
-	};
-	this.getDataByIndex = function(/*number*/idx){ 
-		//	summary
-		//	Get the source object at index idx.
-		return data[idx].src; 	//	object
-	};
-
-	this.update = function(/* Object */obj, /* string */fieldPath, /* Object */val){
-		var parts=fieldPath.split("."), i=0, o=obj, field;
-		if(parts.length>1) {
-			field = parts.pop();
-			do{ 
-				if(parts[i].indexOf("()")>-1){
-					var temp=parts[i++].split("()")[0];
-					if(!o[temp]){
-						dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + temp + "' is not a property of the passed object.");
-					} else {
-						//	this *will* throw an error if the method in question can't be invoked without arguments.
-						o = o[temp]();
-					}
-				} else {
-					o = o[parts[i++]];
-				}
-			} while (i<parts.length && o != null);
-		} else {
-			field = parts[0];
-		}
-
-		obj[field] = val;
-		this.onUpdateField(obj, fieldPath, val);
-	};
-
-	this.forEach = function(/* function */fn){
-		//	summary
-		//	Functional iteration directly on the internal data array.
-		if(Array.forEach){
-			Array.forEach(data, fn, this);
-		}else{
-			for(var i=0; i<data.length; i++){
-				fn.call(this, data[i]);
-			}
-		}
-	};
-	this.forEachData = function(/* function */fn){
-		//	summary
-		//	Functional iteration on source objects in internal data array.
-		if(Array.forEach){
-			Array.forEach(this.getData(), fn, this);
-		}else{
-			var a=this.getData();
-			for(var i=0; i<a.length; i++){
-				fn.call(this, a[i]);
-			}
-		}
-	};
-
-	this.setData = function(/*array*/arr){
-		//	summary
-		//	Set up the internal data.
-		data = []; 	//	don't fire onClearData
-		for(var i=0; i<arr.length; i++){
-			data.push({ 
-				key:arr[i][this.keyField], 
-				src:arr[i]
-			});
-		}
-		this.onSetData();
-	};
-	
-	this.clearData = function(){
-		//	summary
-		//	Clears the internal data array.
-		data = [];
-		this.onClearData();
-	};
-
-	this.addData = function(/*obj*/obj,/*string?*/key){ 
-		//	summary
-		//	Add an object with optional key to the internal data array.
-		var k = key || obj[this.keyField];
-		if(this.getByKey(k)){
-			var o = this.getByKey(k);
-			o.src = obj;
-		} else {
-			var o={ key:k, src:obj };
-			data.push(o);
-		}
-		this.onAddData(o);
-	};
-	this.addDataRange = function(/*array*/arr){
-		//	summary
-		//	Add a range of objects to the internal data array.
-		var objects=[];
-		for(var i=0; i<arr.length; i++){
-			var k = arr[i][this.keyField];
-			if(this.getByKey(k)){
-				var o = this.getByKey(k);
-				o.src = obj;
-			} else {
-				var o = { key:k, src:arr[i] };
-				data.push(o);
-			}
-			objects.push(o);
-		}
-		this.onAddDataRange(objects);
-	};
-	
-	this.removeData = function(/*obj*/obj){
-		//	summary
-		//	remove the passed object from the internal data array.
-		var idx=-1;
-		var o=null;
-		for(var i=0; i<data.length; i++){
-			if(data[i].src==obj){
-				idx=i;
-				o=data[i];
-				break;
-			}
-		}
-		this.onRemoveData(o);
-		if(idx>-1){
-			data.splice(idx,1);
-		}
-	};
-	this.removeDataByKey = function(/*string*/key){
-		//	summary
-		//	remove the object at key from the internal data array.
-		this.removeData(this.getDataByKey(key));
-	};
-	this.removeDataByIndex = function(/*number*/idx){
-		//	summary
-		//	remove the object at idx from the internal data array.
-		this.removeData(this.getDataByIndex(idx));
-	};
-
-	if(jsonArray && jsonArray.length && jsonArray[0]){
-		this.setData(jsonArray);
-	}
-};
-
-dojo.extend(dojo.collections.Store, {
-	getField:function(/*object*/obj, /*string*/field){
-		//	helper to get the nested value if needed.
-		var parts=field.split("."), i=0, o=obj;
-		do{ 
-			if(parts[i].indexOf("()")>-1){
-				var temp=parts[i++].split("()")[0];
-				if(!o[temp]){
-					dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + temp + "' is not a property of the passed object.");
-				} else {
-					//	this *will* throw an error if the method in question can't be invoked without arguments.
-					o = o[temp]();
-				}
-			} else {
-				o = o[parts[i++]];
-			}
-		} while (i<parts.length && o != null);
-		
-		if(i < parts.length){
-			dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + field + "' is not a property of the passed object.");
-		}
-		return o; // object
-	},
-	getFromHtml:function(/* array */meta, /* HTMLTableBody */body, /* function? */fnMod){
-		//	summary
-		//	Parse HTML data into native JSON structure for the store.
-		var rows = body.rows;
-
-		//	create a data constructor.
-		var ctor=function(row){
-			var obj = {};
-			for(var i=0; i<meta.length; i++){
-				var o = obj;
-				var data = row.cells[i].innerHTML;
-				var p = meta[i].getField();
-				if(p.indexOf(".") > -1){
-					p = p.split(".");
-					while(p.length>1){
-						var pr = p.shift();
-						o[pr] = {};
-						o = o[pr];
-					}
-					p = p[0];
-				}
-
-				var type = meta[i].getType();
-				if(type == String){
-					o[p] = data;
-				} else {
-					if(data){
-						o[p] = new type(data);
-					} else {
-						o[p] = new type();
-					}
-				}
-			}
-			return obj;
-		};
-
-		//	we have initialization data, let's parse it.
-		var arr=[];
-		for(var i=0; i<rows.length; i++){
-			var o = ctor(rows[i]);
-			if(fnMod){
-				fnMod(o, rows[i]);	//	apply any modifiers.
-			}
-			arr.push(o);
-		}
-		return arr;	//	array
-	},
-	onSetData:function(){ },
-	onClearData:function(){ },
-	onAddData:function(obj){ },
-	onAddDataRange:function(arr){ },
-	onRemoveData:function(obj){ },
-	onUpdateField:function(obj, field, val){ }
-});
+dojo.provide("dojo.collections.Store");
+dojo.require("dojo.lang.common");
+dojo.collections.Store = function (jsonArray) {
+	var data = [];
+	var items = {};
+	this.keyField = "Id";
+	this.get = function () {
+		return data;
+	};
+	this.getByKey = function (key) {
+		return items[key];
+	};
+	this.getByIndex = function (idx) {
+		return data[idx];
+	};
+	this.getIndexOf = function (key) {
+		for (var i = 0; i < data.length; i++) {
+			if (data[i].key == key) {
+				return i;
+			}
+		}
+		return -1;
+	};
+	this.getData = function () {
+		var arr = [];
+		for (var i = 0; i < data.length; i++) {
+			arr.push(data[i].src);
+		}
+		return arr;
+	};
+	this.getDataByKey = function (key) {
+		if (items[key] != null) {
+			return items[key].src;
+		}
+		return null;
+	};
+	this.getIndexOfData = function (obj) {
+		for (var i = 0; i < data.length; i++) {
+			if (data[i].src == obj) {
+				return i;
+			}
+		}
+		return -1;
+	};
+	this.getDataByIndex = function (idx) {
+		if (data[idx]) {
+			return data[idx].src;
+		}
+		return null;
+	};
+	this.update = function (obj, fieldPath, val, bDontFire) {
+		var parts = fieldPath.split("."), i = 0, o = obj, field;
+		if (parts.length > 1) {
+			field = parts.pop();
+			do {
+				if (parts[i].indexOf("()") > -1) {
+					var temp = parts[i++].split("()")[0];
+					if (!o[temp]) {
+						dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + temp + "' is not a property of the passed object.");
+					} else {
+						o = o[temp]();
+					}
+				} else {
+					o = o[parts[i++]];
+				}
+			} while (i < parts.length && o != null);
+		} else {
+			field = parts[0];
+		}
+		obj[field] = val;
+		if (!bDontFire) {
+			this.onUpdateField(obj, fieldPath, val);
+		}
+	};
+	this.forEach = function (fn) {
+		if (Array.forEach) {
+			Array.forEach(data, fn, this);
+		} else {
+			for (var i = 0; i < data.length; i++) {
+				fn.call(this, data[i]);
+			}
+		}
+	};
+	this.forEachData = function (fn) {
+		if (Array.forEach) {
+			Array.forEach(this.getData(), fn, this);
+		} else {
+			var a = this.getData();
+			for (var i = 0; i < a.length; i++) {
+				fn.call(this, a[i]);
+			}
+		}
+	};
+	this.setData = function (arr, bDontFire) {
+		data = [];
+		for (var i = 0; i < arr.length; i++) {
+			var o = {key:arr[i][this.keyField], src:arr[i]};
+			data.push(o);
+			items[o.key] = o;
+		}
+		if (!bDontFire) {
+			this.onSetData();
+		}
+	};
+	this.clearData = function (bDontFire) {
+		data = [];
+		items = {};
+		if (!bDontFire) {
+			this.onClearData();
+		}
+	};
+	this.addData = function (obj, key, bDontFire) {
+		var k = key || obj[this.keyField];
+		if (items[k] != null) {
+			var o = items[k];
+			o.src = obj;
+		} else {
+			var o = {key:k, src:obj};
+			data.push(o);
+			items[o.key] = o;
+		}
+		if (!bDontFire) {
+			this.onAddData(o);
+		}
+	};
+	this.addDataRange = function (arr, bDontFire) {
+		var objects = [];
+		for (var i = 0; i < arr.length; i++) {
+			var k = arr[i][this.keyField];
+			if (items[k] != null) {
+				var o = items[k];
+				o.src = arr[i];
+			} else {
+				var o = {key:k, src:arr[i]};
+				data.push(o);
+				items[k] = o;
+			}
+			objects.push(o);
+		}
+		if (!bDontFire) {
+			this.onAddDataRange(objects);
+		}
+	};
+	this.addDataByIndex = function (obj, idx, key, bDontFire) {
+		var k = key || obj[this.keyField];
+		if (items[k] != null) {
+			var i = this.getIndexOf(k);
+			var o = data.splice(i, 1);
+			o.src = obj;
+		} else {
+			var o = {key:k, src:obj};
+			items[k] = o;
+		}
+		data.splice(idx, 0, o);
+		if (!bDontFire) {
+			this.onAddData(o);
+		}
+	};
+	this.addDataRangeByIndex = function (arr, idx, bDontFire) {
+		var objects = [];
+		for (var i = 0; i < arr.length; i++) {
+			var k = arr[i][this.keyField];
+			if (items[k] != null) {
+				var j = this.getIndexOf(k);
+				var o = data.splice(j, 1);
+				o.src = arr[i];
+			} else {
+				var o = {key:k, src:arr[i]};
+				items[k] = o;
+			}
+			objects.push(o);
+		}
+		data.splice(idx, 0, objects);
+		if (!bDontFire) {
+			this.onAddDataRange(objects);
+		}
+	};
+	this.removeData = function (obj, bDontFire) {
+		var idx = -1;
+		var o = null;
+		for (var i = 0; i < data.length; i++) {
+			if (data[i].src == obj) {
+				idx = i;
+				o = data[i];
+				break;
+			}
+		}
+		if (!bDontFire) {
+			this.onRemoveData(o);
+		}
+		if (idx > -1) {
+			data.splice(idx, 1);
+			delete items[o.key];
+		}
+	};
+	this.removeDataRange = function (idx, range, bDontFire) {
+		var ret = data.splice(idx, range);
+		for (var i = 0; i < ret.length; i++) {
+			delete items[ret[i].key];
+		}
+		if (!bDontFire) {
+			this.onRemoveDataRange(ret);
+		}
+		return ret;
+	};
+	this.removeDataByKey = function (key, bDontFire) {
+		this.removeData(this.getDataByKey(key), bDontFire);
+	};
+	this.removeDataByIndex = function (idx, bDontFire) {
+		this.removeData(this.getDataByIndex(idx), bDontFire);
+	};
+	if (jsonArray && jsonArray.length && jsonArray[0]) {
+		this.setData(jsonArray, true);
+	}
+};
+dojo.extend(dojo.collections.Store, {getField:function (obj, field) {
+	var parts = field.split("."), i = 0, o = obj;
+	do {
+		if (parts[i].indexOf("()") > -1) {
+			var temp = parts[i++].split("()")[0];
+			if (!o[temp]) {
+				dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + temp + "' is not a property of the passed object.");
+			} else {
+				o = o[temp]();
+			}
+		} else {
+			o = o[parts[i++]];
+		}
+	} while (i < parts.length && o != null);
+	if (i < parts.length) {
+		dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + field + "' is not a property of the passed object.");
+	}
+	return o;
+}, getFromHtml:function (meta, body, fnMod) {
+	var rows = body.rows;
+	var ctor = function (row) {
+		var obj = {};
+		for (var i = 0; i < meta.length; i++) {
+			var o = obj;
+			var data = row.cells[i].innerHTML;
+			var p = meta[i].getField();
+			if (p.indexOf(".") > -1) {
+				p = p.split(".");
+				while (p.length > 1) {
+					var pr = p.shift();
+					o[pr] = {};
+					o = o[pr];
+				}
+				p = p[0];
+			}
+			var type = meta[i].getType();
+			if (type == String) {
+				o[p] = data;
+			} else {
+				if (data) {
+					o[p] = new type(data);
+				} else {
+					o[p] = new type();
+				}
+			}
+		}
+		return obj;
+	};
+	var arr = [];
+	for (var i = 0; i < rows.length; i++) {
+		var o = ctor(rows[i]);
+		if (fnMod) {
+			fnMod(o, rows[i]);
+		}
+		arr.push(o);
+	}
+	return arr;
+}, onSetData:function () {
+}, onClearData:function () {
+}, onAddData:function (obj) {
+}, onAddDataRange:function (arr) {
+}, onRemoveData:function (obj) {
+}, onRemoveDataRange:function (arr) {
+}, onUpdateField:function (obj, field, val) {
+}});
 
+
 __CPAN_FILE__ src/collections/Queue.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -88717,82 +61963,60 @@
 
 dojo.provide("dojo.collections.Queue");
 dojo.require("dojo.collections.Collections");
-
-dojo.collections.Queue=function(/* array? */arr){
-	//	summary
-	//	return an object of type dojo.collections.Queue
-	var q=[];
-	if (arr){
-		q=q.concat(arr);
+dojo.collections.Queue = function (arr) {
+	var q = [];
+	if (arr) {
+		q = q.concat(arr);
 	}
-	this.count=q.length;
-	this.clear=function(){
-		//	summary
-		//	clears the internal collection
-		q=[];
-		this.count=q.length;
+	this.count = q.length;
+	this.clear = function () {
+		q = [];
+		this.count = q.length;
 	};
-	this.clone=function(){
-		//	summary
-		//	creates a new Queue based on this one
-		return new dojo.collections.Queue(q);	//	dojo.collections.Queue
+	this.clone = function () {
+		return new dojo.collections.Queue(q);
 	};
-	this.contains=function(/* object */ o){
-		//	summary
-		//	Check to see if the passed object is an element in this queue
-		for(var i=0; i<q.length; i++){
-			if (q[i]==o){
-				return true;	//	bool
+	this.contains = function (o) {
+		for (var i = 0; i < q.length; i++) {
+			if (q[i] == o) {
+				return true;
 			}
 		}
-		return false;	//	bool
+		return false;
 	};
-	this.copyTo=function(/* array */ arr, /* int */ i){
-		//	summary
-		//	Copy the contents of this queue into the passed array at index i.
-		arr.splice(i,0,q);
+	this.copyTo = function (arr, i) {
+		arr.splice(i, 0, q);
 	};
-	this.dequeue=function(){
-		//	summary
-		//	shift the first element off the queue and return it
-		var r=q.shift();
-		this.count=q.length;
-		return r;	//	object
+	this.dequeue = function () {
+		var r = q.shift();
+		this.count = q.length;
+		return r;
 	};
-	this.enqueue=function(/* object */ o){
-		//	summary
-		//	put the passed object at the end of the queue
-		this.count=q.push(o);
+	this.enqueue = function (o) {
+		this.count = q.push(o);
 	};
-	this.forEach=function(/* function */ fn, /* object? */ scope){
-		//	summary
-		//	functional iterator, following the mozilla spec.
-		var s=scope||dj_global;
-		if(Array.forEach){
+	this.forEach = function (fn, scope) {
+		var s = scope || dj_global;
+		if (Array.forEach) {
 			Array.forEach(q, fn, s);
-		}else{
-			for(var i=0; i<q.length; i++){
+		} else {
+			for (var i = 0; i < q.length; i++) {
 				fn.call(s, q[i], i, q);
 			}
 		}
 	};
-	this.getIterator=function(){
-		//	summary
-		//	get an Iterator based on this queue.
-		return new dojo.collections.Iterator(q);	//	dojo.collections.Iterator
+	this.getIterator = function () {
+		return new dojo.collections.Iterator(q);
 	};
-	this.peek=function(){
-		//	summary
-		//	get the next element in the queue without altering the queue.
+	this.peek = function () {
 		return q[0];
 	};
-	this.toArray=function(){
-		//	summary
-		//	return an array based on the internal array of the queue.
+	this.toArray = function () {
 		return [].concat(q);
 	};
 };
 
+
 __CPAN_FILE__ src/collections/Stack.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -88806,80 +62030,60 @@
 
 dojo.provide("dojo.collections.Stack");
 dojo.require("dojo.collections.Collections");
-
-dojo.collections.Stack=function(/* array? */arr){
-	//	summary
-	//	returns an object of type dojo.collections.Stack
-	var q=[];
-	if (arr) q=q.concat(arr);
-	this.count=q.length;
-	this.clear=function(){
-		//	summary
-		//	Clear the internal array and reset the count
-		q=[];
-		this.count=q.length;
+dojo.collections.Stack = function (arr) {
+	var q = [];
+	if (arr) {
+		q = q.concat(arr);
+	}
+	this.count = q.length;
+	this.clear = function () {
+		q = [];
+		this.count = q.length;
 	};
-	this.clone=function(){
-		//	summary
-		//	Create and return a clone of this Stack
+	this.clone = function () {
 		return new dojo.collections.Stack(q);
 	};
-	this.contains=function(/* object */o){
-		//	summary
-		//	check to see if the stack contains object o
-		for (var i=0; i<q.length; i++){
-			if (q[i] == o){
-				return true;	//	bool
+	this.contains = function (o) {
+		for (var i = 0; i < q.length; i++) {
+			if (q[i] == o) {
+				return true;
 			}
 		}
-		return false;	//	bool
+		return false;
 	};
-	this.copyTo=function(/* array */ arr, /* int */ i){
-		//	summary
-		//	copy the stack into array arr at index i
-		arr.splice(i,0,q);
+	this.copyTo = function (arr, i) {
+		arr.splice(i, 0, q);
 	};
-	this.forEach=function(/* function */ fn, /* object? */ scope){
-		//	summary
-		//	functional iterator, following the mozilla spec.
-		var s=scope||dj_global;
-		if(Array.forEach){
+	this.forEach = function (fn, scope) {
+		var s = scope || dj_global;
+		if (Array.forEach) {
 			Array.forEach(q, fn, s);
-		}else{
-			for(var i=0; i<q.length; i++){
+		} else {
+			for (var i = 0; i < q.length; i++) {
 				fn.call(s, q[i], i, q);
 			}
 		}
 	};
-	this.getIterator=function(){
-		//	summary
-		//	get an iterator for this collection
-		return new dojo.collections.Iterator(q);	//	dojo.collections.Iterator
+	this.getIterator = function () {
+		return new dojo.collections.Iterator(q);
 	};
-	this.peek=function(){
-		//	summary
-		//	Return the next item without altering the stack itself.
-		return q[(q.length-1)];	//	object
+	this.peek = function () {
+		return q[(q.length - 1)];
 	};
-	this.pop=function(){
-		//	summary
-		//	pop and return the next item on the stack
-		var r=q.pop();
-		this.count=q.length;
-		return r;	//	object
+	this.pop = function () {
+		var r = q.pop();
+		this.count = q.length;
+		return r;
 	};
-	this.push=function(/* object */ o){
-		//	summary
-		//	Push object o onto the stack
-		this.count=q.push(o);
+	this.push = function (o) {
+		this.count = q.push(o);
 	};
-	this.toArray=function(){
-		//	summary
-		//	create and return an array based on the internal collection
-		return [].concat(q);	//	array
+	this.toArray = function () {
+		return [].concat(q);
 	};
-}
+};
 
+
 __CPAN_FILE__ src/collections/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -88891,19 +62095,10 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: [
-		"dojo.collections.Collections",
-		"dojo.collections.SortedList", 
-		"dojo.collections.Dictionary", 
-		"dojo.collections.Queue", 
-		"dojo.collections.ArrayList", 
-		"dojo.collections.Stack",
-		"dojo.collections.Set"
-	]
-});
+dojo.kwCompoundRequire({common:["dojo.collections.Collections", "dojo.collections.SortedList", "dojo.collections.Dictionary", "dojo.collections.Queue", "dojo.collections.ArrayList", "dojo.collections.Stack", "dojo.collections.Set"]});
 dojo.provide("dojo.collections.*");
 
+
 __CPAN_FILE__ src/collections/Dictionary.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -88917,124 +62112,94 @@
 
 dojo.provide("dojo.collections.Dictionary");
 dojo.require("dojo.collections.Collections");
-
-dojo.collections.Dictionary=function(/* dojo.collections.Dictionary? */dictionary){
-	//	summary
-	//	Returns an object of type dojo.collections.Dictionary
-	var items={};
-	this.count=0;
-
-	//	comparator for property addition and access.
-	var testObject={};
-
-	this.add=function(/* string */k, /* object */v){
-		//	summary
-		//	Add a new item to the Dictionary.
-		var b=(k in items);
-		items[k]=new dojo.collections.DictionaryEntry(k,v);
-		if(!b){
+dojo.collections.Dictionary = function (dictionary) {
+	var items = {};
+	this.count = 0;
+	var testObject = {};
+	this.add = function (k, v) {
+		var b = (k in items);
+		items[k] = new dojo.collections.DictionaryEntry(k, v);
+		if (!b) {
 			this.count++;
 		}
 	};
-	this.clear=function(){
-		//	summary
-		//	Clears the internal dictionary.
-		items={};
-		this.count=0;
+	this.clear = function () {
+		items = {};
+		this.count = 0;
 	};
-	this.clone=function(){
-		//	summary
-		//	Returns a new instance of dojo.collections.Dictionary; note the the dictionary is a clone but items might not be.
-		return new dojo.collections.Dictionary(this);	//	dojo.collections.Dictionary
+	this.clone = function () {
+		return new dojo.collections.Dictionary(this);
 	};
-	this.contains=this.containsKey=function(/* string */k){
-		//	summary
-		//	Check to see if the dictionary has an entry at key "k".
-		if(testObject[k]){
-			return false;			// bool
+	this.contains = this.containsKey = function (k) {
+		if (testObject[k]) {
+			return false;
 		}
-		return (items[k]!=null);	//	bool
+		return (items[k] != null);
 	};
-	this.containsValue=function(/* object */v){
-		//	summary
-		//	Check to see if the dictionary has an entry with value "v".
-		var e=this.getIterator();
-		while(e.get()){
-			if(e.element.value==v){
-				return true;	//	bool
+	this.containsValue = function (v) {
+		var e = this.getIterator();
+		while (e.get()) {
+			if (e.element.value == v) {
+				return true;
 			}
 		}
-		return false;	//	bool
+		return false;
 	};
-	this.entry=function(/* string */k){
-		//	summary
-		//	Accessor method; similar to dojo.collections.Dictionary.item but returns the actual Entry object.
-		return items[k];	//	dojo.collections.DictionaryEntry
+	this.entry = function (k) {
+		return items[k];
 	};
-	this.forEach=function(/* function */ fn, /* object? */ scope){
-		//	summary
-		//	functional iterator, following the mozilla spec.
-		var a=[];	//	Create an indexing array
-		for(var p in items) {
-			if(!testObject[p]){
-				a.push(items[p]);	//	fill it up
+	this.forEach = function (fn, scope) {
+		var a = [];
+		for (var p in items) {
+			if (!testObject[p]) {
+				a.push(items[p]);
 			}
 		}
-		var s=scope||dj_global;
-		if(Array.forEach){
+		var s = scope || dj_global;
+		if (Array.forEach) {
 			Array.forEach(a, fn, s);
-		}else{
-			for(var i=0; i<a.length; i++){
+		} else {
+			for (var i = 0; i < a.length; i++) {
 				fn.call(s, a[i], i, a);
 			}
 		}
 	};
-	this.getKeyList=function(){
-		//	summary
-		//	Returns an array of the keys in the dictionary.
-		return (this.getIterator()).map(function(entry){ 
-			return entry.key; 
-		});	//	array
+	this.getKeyList = function () {
+		return (this.getIterator()).map(function (entry) {
+			return entry.key;
+		});
 	};
-	this.getValueList=function(){
-		//	summary
-		//	Returns an array of the values in the dictionary.
-		return (this.getIterator()).map(function(entry){ 
-			return entry.value; 
-		});	//	array
+	this.getValueList = function () {
+		return (this.getIterator()).map(function (entry) {
+			return entry.value;
+		});
 	};
-	this.item=function(/* string */k){
-		//	summary
-		//	Accessor method.
-		if(k in items){
-			return items[k].valueOf();	//	object
+	this.item = function (k) {
+		if (k in items) {
+			return items[k].valueOf();
 		}
-		return undefined;	//	object
+		return undefined;
 	};
-	this.getIterator=function(){
-		//	summary
-		//	Gets a dojo.collections.DictionaryIterator for iteration purposes.
-		return new dojo.collections.DictionaryIterator(items);	//	dojo.collections.DictionaryIterator
+	this.getIterator = function () {
+		return new dojo.collections.DictionaryIterator(items);
 	};
-	this.remove=function(/* string */k){
-		//	summary
-		//	Removes the item at k from the internal collection.
-		if(k in items && !testObject[k]){
+	this.remove = function (k) {
+		if (k in items && !testObject[k]) {
 			delete items[k];
 			this.count--;
-			return true;	//	bool
+			return true;
 		}
-		return false;	//	bool
+		return false;
 	};
-
-	if (dictionary){
-		var e=dictionary.getIterator();
-		while(e.get()) {
-			 this.add(e.element.key, e.element.value);
+	if (dictionary) {
+		var e = dictionary.getIterator();
+		while (e.get()) {
+			this.add(e.element.key, e.element.value);
 		}
 	}
 };
 
+
 __CPAN_FILE__ src/collections/SortedList.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -89048,206 +62213,164 @@
 
 dojo.provide("dojo.collections.SortedList");
 dojo.require("dojo.collections.Collections");
-
-dojo.collections.SortedList=function(/* object? */ dictionary){
-	//	summary
-	//	creates a collection that acts like a dictionary but is also internally sorted.
-	//	Note that the act of adding any elements forces an internal resort, making this object potentially slow.
-	var _this=this;
-	var items={};
-	var q=[];
-	var sorter=function(a,b){
-		if (a.key > b.key) return 1;
-		if (a.key < b.key) return -1;
+dojo.collections.SortedList = function (dictionary) {
+	var _this = this;
+	var items = {};
+	var q = [];
+	var sorter = function (a, b) {
+		if (a.key > b.key) {
+			return 1;
+		}
+		if (a.key < b.key) {
+			return -1;
+		}
 		return 0;
 	};
-	var build=function(){
-		q=[];
-		var e=_this.getIterator();
-		while (!e.atEnd()){
+	var build = function () {
+		q = [];
+		var e = _this.getIterator();
+		while (!e.atEnd()) {
 			q.push(e.get());
 		}
 		q.sort(sorter);
 	};
-	var testObject={};
-
-	this.count=q.length;
-	this.add=function(/* string */ k,/* object */v){
-		//	summary
-		//	add the passed value to the dictionary at location k
+	var testObject = {};
+	this.count = q.length;
+	this.add = function (k, v) {
 		if (!items[k]) {
-			items[k]=new dojo.collections.DictionaryEntry(k,v);
-			this.count=q.push(items[k]);
+			items[k] = new dojo.collections.DictionaryEntry(k, v);
+			this.count = q.push(items[k]);
 			q.sort(sorter);
 		}
 	};
-	this.clear=function(){
-		//	summary
-		//	clear the internal collections
-		items={};
-		q=[];
-		this.count=q.length;
+	this.clear = function () {
+		items = {};
+		q = [];
+		this.count = q.length;
 	};
-	this.clone=function(){
-		//	summary
-		//	create a clone of this sorted list
-		return new dojo.collections.SortedList(this);	//	dojo.collections.SortedList
+	this.clone = function () {
+		return new dojo.collections.SortedList(this);
 	};
-	this.contains=this.containsKey=function(/* string */ k){
-		//	summary
-		//	Check to see if the list has a location k
-		if(testObject[k]){
-			return false;			//	bool
+	this.contains = this.containsKey = function (k) {
+		if (testObject[k]) {
+			return false;
 		}
-		return (items[k]!=null);	//	bool
+		return (items[k] != null);
 	};
-	this.containsValue=function(/* object */ o){
-		//	summary
-		//	Check to see if this list contains the passed object
-		var e=this.getIterator();
-		while (!e.atEnd()){
-			var item=e.get();
-			if(item.value==o){ 
-				return true;	//	bool
+	this.containsValue = function (o) {
+		var e = this.getIterator();
+		while (!e.atEnd()) {
+			var item = e.get();
+			if (item.value == o) {
+				return true;
 			}
 		}
-		return false;	//	bool
+		return false;
 	};
-	this.copyTo=function(/* array */ arr, /* int */ i){
-		//	summary
-		//	copy the contents of the list into array arr at index i
-		var e=this.getIterator();
-		var idx=i;
-		while(!e.atEnd()){
-			arr.splice(idx,0,e.get());
+	this.copyTo = function (arr, i) {
+		var e = this.getIterator();
+		var idx = i;
+		while (!e.atEnd()) {
+			arr.splice(idx, 0, e.get());
 			idx++;
 		}
 	};
-	this.entry=function(/* string */ k){
-		//	summary
-		//	return the object at location k
-		return items[k];	//	dojo.collections.DictionaryEntry
+	this.entry = function (k) {
+		return items[k];
 	};
-	this.forEach=function(/* function */ fn, /* object? */ scope){
-		//	summary
-		//	functional iterator, following the mozilla spec.
-		var s=scope||dj_global;
-		if(Array.forEach){
+	this.forEach = function (fn, scope) {
+		var s = scope || dj_global;
+		if (Array.forEach) {
 			Array.forEach(q, fn, s);
-		}else{
-			for(var i=0; i<q.length; i++){
+		} else {
+			for (var i = 0; i < q.length; i++) {
 				fn.call(s, q[i], i, q);
 			}
 		}
 	};
-	this.getByIndex=function(/* int */ i){
-		//	summary
-		//	return the item at index i
-		return q[i].valueOf();	//	object
+	this.getByIndex = function (i) {
+		return q[i].valueOf();
 	};
-	this.getIterator=function(){
-		//	summary
-		//	get an iterator for this object
-		return new dojo.collections.DictionaryIterator(items);	//	dojo.collections.DictionaryIterator
+	this.getIterator = function () {
+		return new dojo.collections.DictionaryIterator(items);
 	};
-	this.getKey=function(/* int */ i){
-		//	summary
-		//	return the key of the item at index i
+	this.getKey = function (i) {
 		return q[i].key;
 	};
-	this.getKeyList=function(){
-		//	summary
-		//	return an array of the keys set in this list
-		var arr=[];
-		var e=this.getIterator();
-		while (!e.atEnd()){
+	this.getKeyList = function () {
+		var arr = [];
+		var e = this.getIterator();
+		while (!e.atEnd()) {
 			arr.push(e.get().key);
 		}
-		return arr;	//	array
+		return arr;
 	};
-	this.getValueList=function(){
-		//	summary
-		//	return an array of values in this list
-		var arr=[];
-		var e=this.getIterator();
-		while (!e.atEnd()){
+	this.getValueList = function () {
+		var arr = [];
+		var e = this.getIterator();
+		while (!e.atEnd()) {
 			arr.push(e.get().value);
 		}
-		return arr;	//	array
+		return arr;
 	};
-	this.indexOfKey=function(/* string */ k){
-		//	summary
-		//	return the index of the passed key.
-		for (var i=0; i<q.length; i++){
-			if (q[i].key==k){
-				return i;	//	int
+	this.indexOfKey = function (k) {
+		for (var i = 0; i < q.length; i++) {
+			if (q[i].key == k) {
+				return i;
 			}
 		}
-		return -1;	//	int
+		return -1;
 	};
-	this.indexOfValue=function(/* object */ o){
-		//	summary
-		//	return the first index of object o
-		for (var i=0; i<q.length; i++){
-			if (q[i].value==o){
-				return i;	//	int
+	this.indexOfValue = function (o) {
+		for (var i = 0; i < q.length; i++) {
+			if (q[i].value == o) {
+				return i;
 			}
 		}
-		return -1;	//	int
+		return -1;
 	};
-	this.item=function(/* string */ k){
-		// 	summary
-		//	return the value of the object at location k.
-		if(k in items && !testObject[k]){
-			return items[k].valueOf();	//	object
+	this.item = function (k) {
+		if (k in items && !testObject[k]) {
+			return items[k].valueOf();
 		}
-		return undefined;	//	object
+		return undefined;
 	};
-	this.remove=function(/* string */k){
-		// 	summary
-		//	remove the item at location k and rebuild the internal collections.
+	this.remove = function (k) {
 		delete items[k];
 		build();
-		this.count=q.length;
+		this.count = q.length;
 	};
-	this.removeAt=function(/* int */ i){
-		//	summary
-		//	remove the item at index i, and rebuild the internal collections.
+	this.removeAt = function (i) {
 		delete items[q[i].key];
 		build();
-		this.count=q.length;
+		this.count = q.length;
 	};
-	this.replace=function(/* string */ k, /* object */ v){
-		//	summary
-		//	Replace an existing item if it's there, and add a new one if not.
-		if (!items[k]){
-			//	we're adding a new object, return false
-			this.add(k,v);
-			return false; // bool
-		}else{
-			//	we're replacing an object, return true
-			items[k]=new dojo.collections.DictionaryEntry(k,v);
+	this.replace = function (k, v) {
+		if (!items[k]) {
+			this.add(k, v);
+			return false;
+		} else {
+			items[k] = new dojo.collections.DictionaryEntry(k, v);
 			q.sort(sorter);
-			return true; // bool
+			return true;
 		}
 	};
-	this.setByIndex=function(/* int */ i, /* object */ o){
-		//	summary
-		//	set an item by index
-		items[q[i].key].value=o;
+	this.setByIndex = function (i, o) {
+		items[q[i].key].value = o;
 		build();
-		this.count=q.length;
+		this.count = q.length;
 	};
-	if (dictionary){
-		var e=dictionary.getIterator();
-		while (!e.atEnd()){
-			var item=e.get();
-			q[q.length]=items[item.key]=new dojo.collections.DictionaryEntry(item.key,item.value);
+	if (dictionary) {
+		var e = dictionary.getIterator();
+		while (!e.atEnd()) {
+			var item = e.get();
+			q[q.length] = items[item.key] = new dojo.collections.DictionaryEntry(item.key, item.value);
 		}
 		q.sort(sorter);
 	}
-}
+};
 
+
 __CPAN_FILE__ src/collections/Graph.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -89261,148 +62384,144 @@
 
 dojo.provide("dojo.collections.Graph");
 dojo.require("dojo.collections.Collections");
-
 dojo.experimental("dojo.collections.Graph");
-
-dojo.collections.Graph=function(nodes){
+dojo.collections.Graph = function (nodes) {
 	function node(key, data, neighbors) {
-		this.key=key;
-		this.data=data;
-		this.neighbors=neighbors||new adjacencyList();
-		this.addDirected=function(){
-			if (arguments[0].constructor==edgeToNeighbor){
+		this.key = key;
+		this.data = data;
+		this.neighbors = neighbors || new adjacencyList();
+		this.addDirected = function () {
+			if (arguments[0].constructor == edgeToNeighbor) {
 				this.neighbors.add(arguments[0]);
-			}else{
-				var n=arguments[0];
-				var cost=arguments[1]||0;
+			} else {
+				var n = arguments[0];
+				var cost = arguments[1] || 0;
 				this.neighbors.add(new edgeToNeighbor(n, cost));
 			}
-		}
+		};
 	}
-	function nodeList(){
-		var d=new dojo.collections.Dictionary();
-		function nodelistiterator(){
-			var o=[] ;	//	Create an indexing array
-			var e=d.getIterator();
-			while(e.get()){
-				o[o.length]=e.element;
+	function nodeList() {
+		var d = new dojo.collections.Dictionary();
+		function nodelistiterator() {
+			var o = [];
+			var e = d.getIterator();
+			while (e.get()) {
+				o[o.length] = e.element;
 			}
-
-			var position=0;
-			this.element=o[position]||null;
-			this.atEnd=function(){
-				return (position>=o.length);
-			}
-			this.get=function(){
-				if(this.atEnd()){
-					return null;		//	object
+			var position = 0;
+			this.element = o[position] || null;
+			this.atEnd = function () {
+				return (position >= o.length);
+			};
+			this.get = function () {
+				if (this.atEnd()) {
+					return null;
 				}
-				this.element=o[position++];
-				return this.element;	//	object
+				this.element = o[position++];
+				return this.element;
 			};
-			this.map=function(/* function */fn, /* object? */scope){
-				var s=scope||dj_global;
-				if(Array.map){
-					return Array.map(o,fn,s);	//	array
-				}else{
-					var arr=[];
-					for(var i=0; i<o.length; i++){
-						arr.push(fn.call(s,o[i]));
+			this.map = function (fn, scope) {
+				var s = scope || dj_global;
+				if (Array.map) {
+					return Array.map(o, fn, s);
+				} else {
+					var arr = [];
+					for (var i = 0; i < o.length; i++) {
+						arr.push(fn.call(s, o[i]));
 					}
-					return arr;		//	array
+					return arr;
 				}
 			};
-			this.reset=function(){
-				position=0;
-				this.element=o[position];
+			this.reset = function () {
+				position = 0;
+				this.element = o[position];
 			};
 		}
-		
-		this.add=function(node){
+		this.add = function (node) {
 			d.add(node.key, node);
 		};
-		this.clear=function(){
+		this.clear = function () {
 			d.clear();
 		};
-		this.containsKey=function(key){
+		this.containsKey = function (key) {
 			return d.containsKey(key);
 		};
-		this.getIterator=function(){
+		this.getIterator = function () {
 			return new nodelistiterator(this);
 		};
-		this.item=function(key){
+		this.item = function (key) {
 			return d.item(key);
 		};
-		this.remove=function(node){
+		this.remove = function (node) {
 			d.remove(node.key);
 		};
 	}
-	function edgeToNeighbor(node, cost){
-		this.neighbor=node;
-		this.cost=cost;
+	function edgeToNeighbor(node, cost) {
+		this.neighbor = node;
+		this.cost = cost;
 	}
-	function adjacencyList(){
-		var d=[];
-		this.add=function(o){
+	function adjacencyList() {
+		var d = [];
+		this.add = function (o) {
 			d.push(o);
 		};
-		this.item=function(i){
+		this.item = function (i) {
 			return d[i];
 		};
-		this.getIterator=function(){
+		this.getIterator = function () {
 			return new dojo.collections.Iterator([].concat(d));
 		};
 	}
-
-	this.nodes=nodes||new nodeList();
-	this.count=this.nodes.count;
-	this.clear=function(){
+	this.nodes = nodes || new nodeList();
+	this.count = this.nodes.count;
+	this.clear = function () {
 		this.nodes.clear();
-		this.count=0;
+		this.count = 0;
 	};
-	this.addNode=function(){
-		var n=arguments[0];
-		if(arguments.length > 1){
-			n=new node(arguments[0],arguments[1]);
+	this.addNode = function () {
+		var n = arguments[0];
+		if (arguments.length > 1) {
+			n = new node(arguments[0], arguments[1]);
 		}
-		if(!this.nodes.containsKey(n.key)){
+		if (!this.nodes.containsKey(n.key)) {
 			this.nodes.add(n);
 			this.count++;
 		}
 	};
-	this.addDirectedEdge=function(uKey, vKey, cost){
-		var uNode,vNode;
-		if(uKey.constructor!= node){
-			uNode=this.nodes.item(uKey);
-			vNode=this.nodes.item(vKey);
-		}else{
-			uNode=uKey;
-			vNode=vKey;
+	this.addDirectedEdge = function (uKey, vKey, cost) {
+		var uNode, vNode;
+		if (uKey.constructor != node) {
+			uNode = this.nodes.item(uKey);
+			vNode = this.nodes.item(vKey);
+		} else {
+			uNode = uKey;
+			vNode = vKey;
 		}
-		var c=cost||0;
-		uNode.addDirected(vNode,c);
+		var c = cost || 0;
+		uNode.addDirected(vNode, c);
 	};
-	this.addUndirectedEdge=function(uKey, vKey, cost){
+	this.addUndirectedEdge = function (uKey, vKey, cost) {
 		var uNode, vNode;
-		if(uKey.constructor!=node){
-			uNode=this.nodes.item(uKey);
-			vNode=this.nodes.item(vKey);
-		}else{
-			uNode=uKey;
-			vNode=vKey;
+		if (uKey.constructor != node) {
+			uNode = this.nodes.item(uKey);
+			vNode = this.nodes.item(vKey);
+		} else {
+			uNode = uKey;
+			vNode = vKey;
 		}
-		var c=cost||0;
-		uNode.addDirected(vNode,c);
-		vNode.addDirected(uNode,c);
+		var c = cost || 0;
+		uNode.addDirected(vNode, c);
+		vNode.addDirected(uNode, c);
 	};
-	this.contains=function(n){
+	this.contains = function (n) {
 		return this.nodes.containsKey(n.key);
 	};
-	this.containsKey=function(k){
+	this.containsKey = function (k) {
 		return this.nodes.containsKey(k);
 	};
-}
+};
 
+
 __CPAN_FILE__ src/collections/SkipList.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -89417,143 +62536,161 @@
 dojo.provide("dojo.collections.SkipList");
 dojo.require("dojo.collections.Collections");
 dojo.require("dojo.experimental");
-
 dojo.experimental("dojo.collections.SkipList");
-
-dojo.collections.SkipList = function(){
-	function node(height, val){
+dojo.collections.SkipList = function () {
+	function node(height, val) {
 		this.value = val;
 		this.height = height;
 		this.nodes = new nodeList(height);
-		this.compare = function(val){
-			if (this.value > val) return 1;
-			if (this.value < val) return -1;
+		this.compare = function (val) {
+			if (this.value > val) {
+				return 1;
+			}
+			if (this.value < val) {
+				return -1;
+			}
 			return 0;
-		}
-		this.incrementHeight = function(){
+		};
+		this.incrementHeight = function () {
 			this.nodes.incrementHeight();
 			this.height++;
 		};
-		this.decrementHeight = function(){
+		this.decrementHeight = function () {
 			this.nodes.decrementHeight();
 			this.height--;
 		};
 	}
-	function nodeList(height){
+	function nodeList(height) {
 		var arr = [];
 		this.height = height;
-		for (var i = 0; i < height; i++) arr[i] = null;
-		this.item = function(i){
+		for (var i = 0; i < height; i++) {
+			arr[i] = null;
+		}
+		this.item = function (i) {
 			return arr[i];
 		};
-		this.incrementHeight = function(){
+		this.incrementHeight = function () {
 			this.height++;
 			arr[this.height] = null;
 		};
-		this.decrementHeight = function(){
+		this.decrementHeight = function () {
 			arr.splice(arr.length - 1, 1);
 			this.height--;
 		};
 	}
-	function iterator(list){
+	function iterator(list) {
 		this.element = list.head;
-		this.atEnd = function(){
-			return (this.element==null);
-		}
-		this.get = function(){
-			if(this.atEnd()){
+		this.atEnd = function () {
+			return (this.element == null);
+		};
+		this.get = function () {
+			if (this.atEnd()) {
 				return null;
 			}
-			this.element=this.element.nodes[0];
+			this.element = this.element.nodes[0];
 			return this.element;
-		}
-		this.reset = function(){
+		};
+		this.reset = function () {
 			this.element = list.head;
-		}
+		};
 	}
-
-	function chooseRandomHeight(max){
+	function chooseRandomHeight(max) {
 		var level = 1;
-		while (Math.random() < PROB && level < max) level++;
+		while (Math.random() < PROB && level < max) {
+			level++;
+		}
 		return level;
 	}
-
 	var PROB = 0.5;
 	var comparisons = 0;
-
 	this.head = new node(1);
 	this.count = 0;
-	this.add = function(val){
+	this.add = function (val) {
 		var updates = [];
 		var current = this.head;
-		for (var i = this.head.height; i >= 0; i--){
-			if (!(current.nodes[i] != null && current.nodes[i].compare(val) < 0)) comparisons++;
-			while (current.nodes[i] != null && current.nodes[i].compare(val) < 0){
+		for (var i = this.head.height; i >= 0; i--) {
+			if (!(current.nodes[i] != null && current.nodes[i].compare(val) < 0)) {
+				comparisons++;
+			}
+			while (current.nodes[i] != null && current.nodes[i].compare(val) < 0) {
 				current = current.nodes[i];
 				comparisons++;
 			}
 			updates[i] = current;
 		}
-		if (current.nodes[0] != null && current.nodes[0].compare(val) == 0) return;
+		if (current.nodes[0] != null && current.nodes[0].compare(val) == 0) {
+			return;
+		}
 		var n = new node(val, chooseRandomHeight(this.head.height + 1));
 		this.count++;
-		if (n.height > this.head.height){
+		if (n.height > this.head.height) {
 			this.head.incrementHeight();
 			this.head.nodes[this.head.height - 1] = n;
 		}
-		for (i = 0; i < n.height; i++){
+		for (i = 0; i < n.height; i++) {
 			if (i < updates.length) {
 				n.nodes[i] = updates[i].nodes[i];
 				updates[i].nodes[i] = n;
 			}
 		}
 	};
-	
-	this.contains = function(val){
+	this.contains = function (val) {
 		var current = this.head;
 		var i;
 		for (i = this.head.height - 1; i >= 0; i--) {
 			while (current.item(i) != null) {
 				comparisons++;
 				var result = current.nodes[i].compare(val);
-				if (result == 0) return true;
-				else if (result < 0) current = current.nodes[i];
-				else break;
+				if (result == 0) {
+					return true;
+				} else {
+					if (result < 0) {
+						current = current.nodes[i];
+					} else {
+						break;
+					}
+				}
 			}
 		}
 		return false;
 	};
-	this.getIterator = function(){
+	this.getIterator = function () {
 		return new iterator(this);
 	};
-
-	this.remove = function(val){
+	this.remove = function (val) {
 		var updates = [];
 		var current = this.head;
-		for (var i = this.head.height - 1; i >= 0; i--){
-			if (!(current.nodes[i] != null && current.nodes[i].compare(val) < 0)) comparisons++;
+		for (var i = this.head.height - 1; i >= 0; i--) {
+			if (!(current.nodes[i] != null && current.nodes[i].compare(val) < 0)) {
+				comparisons++;
+			}
 			while (current.nodes[i] != null && current.nodes[i].compare(val) < 0) {
 				current = current.nodes[i];
 				comparisons++;
 			}
 			updates[i] = current;
 		}
-		
 		current = current.nodes[0];
-		if (current != null && current.compare(val) == 0){
+		if (current != null && current.compare(val) == 0) {
 			this.count--;
-			for (var i = 0; i < this.head.height; i++){
-				if (updates[i].nodes[i] != current) break;
-				else updates[i].nodes[i] = current.nodes[i];
+			for (var i = 0; i < this.head.height; i++) {
+				if (updates[i].nodes[i] != current) {
+					break;
+				} else {
+					updates[i].nodes[i] = current.nodes[i];
+				}
 			}
-			if (this.head.nodes[this.head.height - 1] == null) this.head.decrementHeight();
+			if (this.head.nodes[this.head.height - 1] == null) {
+				this.head.decrementHeight();
+			}
 		}
 	};
-	this.resetComparisons = function(){ 
-		comparisons = 0; 
+	this.resetComparisons = function () {
+		comparisons = 0;
 	};
-}
+};
 
+
 __CPAN_FILE__ src/collections/BinaryTree.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -89568,197 +62705,249 @@
 dojo.provide("dojo.collections.BinaryTree");
 dojo.require("dojo.collections.Collections");
 dojo.require("dojo.experimental");
-
 dojo.experimental("dojo.collections.BinaryTree");
-
-dojo.collections.BinaryTree=function(data){
-	function node(data, rnode, lnode){
-		this.value=data||null;
-		this.right=rnode||null;
-		this.left=lnode||null;
-		this.clone=function(){
-			var c=new node();
-			if (this.value.value) c.value=this.value.clone();
-			else c.value=this.value;
-			if (this.left) c.left=this.left.clone();
-			if (this.right) c.right=this.right.clone();
-		}
-		this.compare=function(n){
-			if (this.value > n.value) return 1;
-			if (this.value < n.value) return -1;
+dojo.collections.BinaryTree = function (data) {
+	function node(data, rnode, lnode) {
+		this.value = data || null;
+		this.right = rnode || null;
+		this.left = lnode || null;
+		this.clone = function () {
+			var c = new node();
+			if (this.value.value) {
+				c.value = this.value.clone();
+			} else {
+				c.value = this.value;
+			}
+			if (this.left) {
+				c.left = this.left.clone();
+			}
+			if (this.right) {
+				c.right = this.right.clone();
+			}
+		};
+		this.compare = function (n) {
+			if (this.value > n.value) {
+				return 1;
+			}
+			if (this.value < n.value) {
+				return -1;
+			}
 			return 0;
-		}
-		this.compareData=function(d){
-			if (this.value > d) return 1;
-			if (this.value < d) return -1;
+		};
+		this.compareData = function (d) {
+			if (this.value > d) {
+				return 1;
+			}
+			if (this.value < d) {
+				return -1;
+			}
 			return 0;
-		}
+		};
 	}
-
-	function inorderTraversalBuildup(current, a){
-		if (current){
+	function inorderTraversalBuildup(current, a) {
+		if (current) {
 			inorderTraversalBuildup(current.left, a);
 			a.add(current);
 			inorderTraversalBuildup(current.right, a);
 		}
 	}
-
-	function preorderTraversal(current, sep){
-		var s="";
-		if (current){
-			s=current.value.toString() + sep;
+	function preorderTraversal(current, sep) {
+		var s = "";
+		if (current) {
+			s = current.value.toString() + sep;
 			s += preorderTraversal(current.left, sep);
 			s += preorderTraversal(current.right, sep);
 		}
 		return s;
 	}
-	function inorderTraversal(current, sep){
-		var s="";
-		if (current){
-			s=inorderTraversal(current.left, sep);
+	function inorderTraversal(current, sep) {
+		var s = "";
+		if (current) {
+			s = inorderTraversal(current.left, sep);
 			s += current.value.toString() + sep;
 			s += inorderTraversal(current.right, sep);
 		}
 		return s;
 	}
-	function postorderTraversal(current, sep){
-		var s="";
-		if (current){
-			s=postorderTraversal(current.left, sep);
+	function postorderTraversal(current, sep) {
+		var s = "";
+		if (current) {
+			s = postorderTraversal(current.left, sep);
 			s += postorderTraversal(current.right, sep);
 			s += current.value.toString() + sep;
 		}
 		return s;
 	}
-	
-	function searchHelper(current, data){
-		if (!current) return null;
-		var i=current.compareData(data);
-		if (i==0) return current;
-		if (i>0) return searchHelper(current.left, data);
-		else return searchHelper(current.right, data);
+	function searchHelper(current, data) {
+		if (!current) {
+			return null;
+		}
+		var i = current.compareData(data);
+		if (i == 0) {
+			return current;
+		}
+		if (i > 0) {
+			return searchHelper(current.left, data);
+		} else {
+			return searchHelper(current.right, data);
+		}
 	}
-
-	this.add=function(data){
-		var n=new node(data);
+	this.add = function (data) {
+		var n = new node(data);
 		var i;
-		var current=root;
-		var parent=null;
-		while (current){
-			i=current.compare(n);
-			if (i == 0) return;
-			parent=current;
-			if (i > 0) current=current.left;
-			else current=current.right;
+		var current = root;
+		var parent = null;
+		while (current) {
+			i = current.compare(n);
+			if (i == 0) {
+				return;
+			}
+			parent = current;
+			if (i > 0) {
+				current = current.left;
+			} else {
+				current = current.right;
+			}
 		}
 		this.count++;
-		if (!parent) root=n;
-		else {
-			i=parent.compare(n);
-			if (i > 0) parent.left=n;
-			else parent.right=n;
+		if (!parent) {
+			root = n;
+		} else {
+			i = parent.compare(n);
+			if (i > 0) {
+				parent.left = n;
+			} else {
+				parent.right = n;
+			}
 		}
 	};
-	this.clear=function(){
-		root=null;
-		this.count=0;
+	this.clear = function () {
+		root = null;
+		this.count = 0;
 	};
-	this.clone=function(){
-		var c=new dojo.collections.BinaryTree();
-		c.root=root.clone();
-		c.count=this.count;
+	this.clone = function () {
+		var c = new dojo.collections.BinaryTree();
+		c.root = root.clone();
+		c.count = this.count;
 		return c;
 	};
-	this.contains=function(data){
+	this.contains = function (data) {
 		return this.search(data) != null;
 	};
-	this.deleteData=function(data){
-		var current=root;
-		var parent=null;
-		var i=current.compareData(data);
-		while (i != 0 && current != null){
-			if (i > 0){
-				parent=current;
-				current=current.left;
-			} else if (i < 0) {
-				parent=current;
-				current=current.right;
+	this.deleteData = function (data) {
+		var current = root;
+		var parent = null;
+		var i = current.compareData(data);
+		while (i != 0 && current != null) {
+			if (i > 0) {
+				parent = current;
+				current = current.left;
+			} else {
+				if (i < 0) {
+					parent = current;
+					current = current.right;
+				}
 			}
-			i=current.compareData(data);
+			i = current.compareData(data);
 		}
-		if (!current) return;
+		if (!current) {
+			return;
+		}
 		this.count--;
 		if (!current.right) {
-			if (!parent) root=current.left;
-			else {
-				i=parent.compare(current);
-				if (i > 0) parent.left=current.left;
-				else if (i < 0) parent.right=current.left;
+			if (!parent) {
+				root = current.left;
+			} else {
+				i = parent.compare(current);
+				if (i > 0) {
+					parent.left = current.left;
+				} else {
+					if (i < 0) {
+						parent.right = current.left;
+					}
+				}
 			}
-		} else if (!current.right.left){
-			if (!parent) root=current.right;
-			else {
-				i=parent.compare(current);
-				if (i > 0) parent.left=current.right;
-				else if (i < 0) parent.right=current.right;
-			}
 		} else {
-			var leftmost=current.right.left;
-			var lmParent=current.right;
-			while (leftmost.left != null){
-				lmParent=leftmost;
-				leftmost=leftmost.left;
+			if (!current.right.left) {
+				if (!parent) {
+					root = current.right;
+				} else {
+					i = parent.compare(current);
+					if (i > 0) {
+						parent.left = current.right;
+					} else {
+						if (i < 0) {
+							parent.right = current.right;
+						}
+					}
+				}
+			} else {
+				var leftmost = current.right.left;
+				var lmParent = current.right;
+				while (leftmost.left != null) {
+					lmParent = leftmost;
+					leftmost = leftmost.left;
+				}
+				lmParent.left = leftmost.right;
+				leftmost.left = current.left;
+				leftmost.right = current.right;
+				if (!parent) {
+					root = leftmost;
+				} else {
+					i = parent.compare(current);
+					if (i > 0) {
+						parent.left = leftmost;
+					} else {
+						if (i < 0) {
+							parent.right = leftmost;
+						}
+					}
+				}
 			}
-			lmParent.left=leftmost.right;
-			leftmost.left=current.left;
-			leftmost.right=current.right;
-			if (!parent) root=leftmost;
-			else {
-				i=parent.compare(current);
-				if (i > 0) parent.left=leftmost;
-				else if (i < 0) parent.right=leftmost;
-			}
 		}
 	};
-	this.getIterator=function(){
-		var a=[];
+	this.getIterator = function () {
+		var a = [];
 		inorderTraversalBuildup(root, a);
 		return new dojo.collections.Iterator(a);
 	};
-	this.search=function(data){
+	this.search = function (data) {
 		return searchHelper(root, data);
 	};
-	this.toString=function(order, sep){
-		if (!order) var order=dojo.collections.BinaryTree.TraversalMethods.Inorder;
-		if (!sep) var sep=" ";
-		var s="";
-		switch (order){
-			case dojo.collections.BinaryTree.TraversalMethods.Preorder:
-				s=preorderTraversal(root, sep);
-				break;
-			case dojo.collections.BinaryTree.TraversalMethods.Inorder:
-				s=inorderTraversal(root, sep);
-				break;
-			case dojo.collections.BinaryTree.TraversalMethods.Postorder:
-				s=postorderTraversal(root, sep);
-				break;
-		};
-		if (s.length == 0) return "";
-		else return s.substring(0, s.length - sep.length);
+	this.toString = function (order, sep) {
+		if (!order) {
+			var order = dojo.collections.BinaryTree.TraversalMethods.Inorder;
+		}
+		if (!sep) {
+			var sep = " ";
+		}
+		var s = "";
+		switch (order) {
+		  case dojo.collections.BinaryTree.TraversalMethods.Preorder:
+			s = preorderTraversal(root, sep);
+			break;
+		  case dojo.collections.BinaryTree.TraversalMethods.Inorder:
+			s = inorderTraversal(root, sep);
+			break;
+		  case dojo.collections.BinaryTree.TraversalMethods.Postorder:
+			s = postorderTraversal(root, sep);
+			break;
+		}
+		if (s.length == 0) {
+			return "";
+		} else {
+			return s.substring(0, s.length - sep.length);
+		}
 	};
-
-	this.count=0;
-	var root=this.root=null;
+	this.count = 0;
+	var root = this.root = null;
 	if (data) {
 		this.add(data);
 	}
-}
-dojo.collections.BinaryTree.TraversalMethods={
-	Preorder : 1,
-	Inorder : 2,
-	Postorder : 3
 };
+dojo.collections.BinaryTree.TraversalMethods = {Preorder:1, Inorder:2, Postorder:3};
 
+
 __CPAN_FILE__ src/collections/ArrayList.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -89772,141 +62961,107 @@
 
 dojo.provide("dojo.collections.ArrayList");
 dojo.require("dojo.collections.Collections");
-
-dojo.collections.ArrayList=function(/* array? */arr){
-	//	summary
-	//	Returns a new object of type dojo.collections.ArrayList
-	var items=[];
-	if(arr) items=items.concat(arr);
-	this.count=items.length;
-	this.add=function(/* object */obj){
-		//	summary
-		//	Add an element to the collection.
+dojo.collections.ArrayList = function (arr) {
+	var items = [];
+	if (arr) {
+		items = items.concat(arr);
+	}
+	this.count = items.length;
+	this.add = function (obj) {
 		items.push(obj);
-		this.count=items.length;
+		this.count = items.length;
 	};
-	this.addRange=function(/* array */a){
-		//	summary
-		//	Add a range of objects to the ArrayList
-		if(a.getIterator){
-			var e=a.getIterator();
-			while(!e.atEnd()){
+	this.addRange = function (a) {
+		if (a.getIterator) {
+			var e = a.getIterator();
+			while (!e.atEnd()) {
 				this.add(e.get());
 			}
-			this.count=items.length;
-		}else{
-			for(var i=0; i<a.length; i++){
+			this.count = items.length;
+		} else {
+			for (var i = 0; i < a.length; i++) {
 				items.push(a[i]);
 			}
-			this.count=items.length;
+			this.count = items.length;
 		}
 	};
-	this.clear=function(){
-		//	summary
-		//	Clear all elements out of the collection, and reset the count.
+	this.clear = function () {
 		items.splice(0, items.length);
-		this.count=0;
+		this.count = 0;
 	};
-	this.clone=function(){
-		//	summary
-		//	Clone the array list
-		return new dojo.collections.ArrayList(items);	//	dojo.collections.ArrayList
+	this.clone = function () {
+		return new dojo.collections.ArrayList(items);
 	};
-	this.contains=function(/* object */obj){
-		//	summary
-		//	Check to see if the passed object is a member in the ArrayList
-		for(var i=0; i < items.length; i++){
-			if(items[i] == obj) {
-				return true;	//	bool
+	this.contains = function (obj) {
+		for (var i = 0; i < items.length; i++) {
+			if (items[i] == obj) {
+				return true;
 			}
 		}
-		return false;	//	bool
+		return false;
 	};
-	this.forEach=function(/* function */ fn, /* object? */ scope){
-		//	summary
-		//	functional iterator, following the mozilla spec.
-		var s=scope||dj_global;
-		if(Array.forEach){
+	this.forEach = function (fn, scope) {
+		var s = scope || dj_global;
+		if (Array.forEach) {
 			Array.forEach(items, fn, s);
-		}else{
-			for(var i=0; i<items.length; i++){
+		} else {
+			for (var i = 0; i < items.length; i++) {
 				fn.call(s, items[i], i, items);
 			}
 		}
 	};
-	this.getIterator=function(){
-		//	summary
-		//	Get an Iterator for this object
-		return new dojo.collections.Iterator(items);	//	dojo.collections.Iterator
+	this.getIterator = function () {
+		return new dojo.collections.Iterator(items);
 	};
-	this.indexOf=function(/* object */obj){
-		//	summary
-		//	Return the numeric index of the passed object; will return -1 if not found.
-		for(var i=0; i < items.length; i++){
-			if(items[i] == obj) {
-				return i;	//	int
+	this.indexOf = function (obj) {
+		for (var i = 0; i < items.length; i++) {
+			if (items[i] == obj) {
+				return i;
 			}
 		}
-		return -1;	// int
+		return -1;
 	};
-	this.insert=function(/* int */ i, /* object */ obj){
-		//	summary
-		//	Insert the passed object at index i
-		items.splice(i,0,obj);
-		this.count=items.length;
+	this.insert = function (i, obj) {
+		items.splice(i, 0, obj);
+		this.count = items.length;
 	};
-	this.item=function(/* int */ i){
-		//	summary
-		//	return the element at index i
-		return items[i];	//	object
+	this.item = function (i) {
+		return items[i];
 	};
-	this.remove=function(/* object */obj){
-		//	summary
-		//	Look for the passed object, and if found, remove it from the internal array.
-		var i=this.indexOf(obj);
-		if(i >=0) {
-			items.splice(i,1);
+	this.remove = function (obj) {
+		var i = this.indexOf(obj);
+		if (i >= 0) {
+			items.splice(i, 1);
 		}
-		this.count=items.length;
+		this.count = items.length;
 	};
-	this.removeAt=function(/* int */ i){
-		//	summary
-		//	return an array with function applied to all elements
-		items.splice(i,1);
-		this.count=items.length;
+	this.removeAt = function (i) {
+		items.splice(i, 1);
+		this.count = items.length;
 	};
-	this.reverse=function(){
-		//	summary
-		//	Reverse the internal array
+	this.reverse = function () {
 		items.reverse();
 	};
-	this.sort=function(/* function? */ fn){
-		//	summary
-		//	sort the internal array
-		if(fn){
+	this.sort = function (fn) {
+		if (fn) {
 			items.sort(fn);
-		}else{
+		} else {
 			items.sort();
 		}
 	};
-	this.setByIndex=function(/* int */ i, /* object */ obj){
-		//	summary
-		//	Set an element in the array by the passed index.
-		items[i]=obj;
-		this.count=items.length;
+	this.setByIndex = function (i, obj) {
+		items[i] = obj;
+		this.count = items.length;
 	};
-	this.toArray=function(){
-		//	summary
-		//	Return a new array with all of the items of the internal array concatenated.
+	this.toArray = function () {
 		return [].concat(items);
-	}
-	this.toString=function(/* string */ delim){
-		//	summary
-		//	implementation of toString, follows [].toString();
-		return items.join((delim||","));
 	};
+	this.toString = function (delim) {
+		return items.join((delim || ","));
+	};
 };
 
+
 __CPAN_DIR__ src/xml
 __CPAN_FILE__ src/xml/__package__.js
 /*
@@ -89920,13 +63075,10 @@
 */
 
 dojo.require("dojo.xml.Parse");
-dojo.kwCompoundRequire({
-	common:		["dojo.dom"],
-    browser: 	["dojo.html.*"],
-    dashboard: 	["dojo.html.*"]
-});
+dojo.kwCompoundRequire({common:["dojo.dom"], browser:["dojo.html.*"], dashboard:["dojo.html.*"]});
 dojo.provide("dojo.xml.*");
 
+
 __CPAN_FILE__ src/xml/XslTransform.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -89938,246 +63090,154 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.provide("dojo.xml.XslTransform");
-
-dojo.xml.XslTransform = function(/*String*/xsltUri){
-	//	summary:
-	//		dojo.xml.XslTransform is a convenience object that takes the URI
-	//		String of an XSL file as a constructor argument. After each
-	//		transformation all parameters will be cleared. Transformation is
-	//		supported by IE, Mozilla, and partially by Opera. Other browsers
-	//		(notably Safari) have not yet exposed their transformation
-	//		primtives well enough to be useful.
-	// xsltUri:
-	//		Url of the xslt document to transform nodes with. Transformation is
-	//		acheived with the transformTo* methods on instances of this class.
-
-	dojo.debug("XslTransform is supported by Internet Explorer and Mozilla, with limited support in Opera 9 (no document function support).");
-	var IS_IE = dojo.render.html.ie;
-	var ACTIVEX_DOMS = [
-		"Msxml2.DOMDocument.5.0", 
-		"Msxml2.DOMDocument.4.0", 
-		"Msxml2.DOMDocument.3.0", 
-		"MSXML2.DOMDocument", 
-		"MSXML.DOMDocument", 
-		"Microsoft.XMLDOM"
-	];
-	var ACTIVEX_FT_DOMS = [
-		"Msxml2.FreeThreadedDOMDocument.5.0", 
-		"MSXML2.FreeThreadedDOMDocument.4.0", 
-		"MSXML2.FreeThreadedDOMDocument.3.0"
-	];
-	var ACTIVEX_TEMPLATES = [
-		"Msxml2.XSLTemplate.5.0", 
-		"Msxml2.XSLTemplate.4.0", 
-		"MSXML2.XSLTemplate.3.0"
-	];
-  
-	function getActiveXImpl(activeXArray){
-		for(var i=0; i < activeXArray.length; i++){
-			try{
-				var testObj = new ActiveXObject(activeXArray[i]);
-				if(testObj){
-					return activeXArray[i];
-				}
-			}catch(e){}
-		}
-		dojo.raise("Could not find an ActiveX implementation in:\n\n " + activeXArray);
-	}
-    
-    if(xsltUri == null || xsltUri == undefined){
-        dojo.raise("You must pass the URI String for the XSL file to be used!");
-        return false;
-    }
-    
-	var xsltDocument = null;
-	var xsltProcessor = null;
-	if(IS_IE){
-		xsltDocument = new ActiveXObject(getActiveXImpl(ACTIVEX_FT_DOMS));
-		xsltDocument.async = false;
-	}else{
-		xsltProcessor = new XSLTProcessor();
-		xsltDocument = document.implementation.createDocument("", "", null);
-		xsltDocument.addEventListener("load", onXslLoad, false);
-	}
-	xsltDocument.load(xsltUri);
-
-	if(IS_IE){
-		var xslt = new ActiveXObject(getActiveXImpl(ACTIVEX_TEMPLATES));
-		xslt.stylesheet = xsltDocument;  
-		xsltProcessor = xslt.createProcessor();
-	}
-
-	function onXslLoad(){
-		xsltProcessor.importStylesheet(xsltDocument); 
-	}
-
-	function getResultDom(xmlDoc, params){
-		if(IS_IE){
-			addIeParams(params);
-			var result = getIeResultDom(xmlDoc);
-			removeIeParams(params);   
-			return result;
-		}else{
-			return getMozillaResultDom(xmlDoc, params);
-		}
-	}
-
-	function addIeParams(params){
-		if(!params){ return; }
-		for(var i=0; i<params.length; i++){
-			xsltProcessor.addParameter(params[i][0], params[i][1]);
-		}
-	}
-
-    function removeIeParams(params){
-		if(!params){ return; }
-		for(var i=0; i<params.length; i++){
-			xsltProcessor.addParameter(params[i][0], "");
-		}
-    }
-
-	function getIeResultDom(xmlDoc){
-		xsltProcessor.input = xmlDoc;
-		var outDoc = new ActiveXObject(getActiveXImpl(ACTIVEX_DOMS));
-		outDoc.async = false;  
-		outDoc.validateOnParse = false;
-		xsltProcessor.output = outDoc;
-		xsltProcessor.transform();
-		if(outDoc.parseError.errorCode != 0){
-			var err = outDoc.parseError;
-			dojo.raise("err.errorCode: " + err.errorCode + "\n\nerr.reason: " + err.reason + "\n\nerr.url: " + err.url + "\n\nerr.srcText: " + err.srcText);
-		}
-		return outDoc;
-	}
-
-	function getIeResultStr(xmlDoc, params){
-		xsltProcessor.input = xmlDoc;
-		xsltProcessor.transform();    
-		return xsltProcessor.output;
-	}
-
-	function addMozillaParams(params){
-		if(!params){ return; }
-		for(var i=0; i<params.length; i++){
-			xsltProcessor.setParameter(null, params[i][0], params[i][1]);
-		}
-	}
-
-	function getMozillaResultDom(xmlDoc, params){
-		addMozillaParams(params);
-		var resultDoc = xsltProcessor.transformToDocument(xmlDoc);
-		xsltProcessor.clearParameters();
-		return resultDoc;
-	}
-
-	function getMozillaResultStr(xmlDoc, params, parentDoc){
-		addMozillaParams(params);
-		var resultDoc = xsltProcessor.transformToFragment(xmlDoc, parentDoc);
-		var serializer = new XMLSerializer();
-		xsltProcessor.clearParameters();
-		return serializer.serializeToString(resultDoc);
-	}
-
-	this.getResultString = function(	/*XMLDocument*/xmlDoc, 
-										/*2 Dimensional Array*/params, 
-										/*HTMLDocument*/parentDoc){
-		// summary:
-		//		transform the xmlDoc and return the result as a string.
-		// xmlDoc: an XML Document to transform
-		// params:
-		//		a set of configuration parameters to pass to the transformation
-		//		engine.
-		// parentDoc: The HTML docuemnt to transform the subdocument "under"
-		var content = null;
-		if(IS_IE){
-			addIeParams(params);
-			content = getIeResultStr(xmlDoc, params);
-			removeIeParams(params);  
-		}else{
-			content = getMozillaResultStr(xmlDoc, params, parentDoc);
-		} 
-		//dojo.debug(content);
-		return content;
-	};
-
-	this.transformToContentPane = function(	/*XMLDocument*/xmlDoc,
-											/*2 Dimensional Array*/params, 
-											/*ContentPane*/contentPane, 
-											/*HTMLDocument*/parentDoc){
-		// summary:
-		//		transform the xmlDoc and put the result into the passed
-		//		ContentPane instance
-		// xmlDoc: an XML Document to transform
-		// params:
-		//		a set of configuration parameters to pass to the transformation
-		//		engine.
-		// contentPane:
-		//		instance of dojo.widget.ContentPane to assign the transform
-		//		results to
-		// parentDoc: The HTML docuemnt to transform the subdocument "under"
-
-		// FIXME: do we need this function?
-		var content = this.getResultString(xmlDoc, params, parentDoc);
-		contentPane.setContent(content);
-	};
-
-	this.transformToRegion = function(	/*XMLDocument*/xmlDoc, 
-										/*2 Dimensional Array*/params, 
-										/*HTMLElement*/region, 
-										/*HTMLDocument*/parentDoc){
-		// summary:
-		//		transform the xmlDoc and put the result into the passed
-		//		DomNode using innerHTML
-		// xmlDoc: an XML Document to transform
-		// params:
-		//		a set of configuration parameters to pass to the transformation
-		//		engine.
-		// region: node to put transform results in
-		// parentDoc: The HTML docuemnt to transform the subdocument "under"
-		try{
-			var content = this.getResultString(xmlDoc, params, parentDoc);
-			region.innerHTML = content;
-		}catch (e){
-			dojo.raise(e.message + "\n\n xsltUri: " + xsltUri)
-		}
-	};
-
-	this.transformToDocument = function(	/*XMLDocument*/ xmlDoc, 
-											/*2 Dimensional Array*/params){
-		// summary:
-		//		transform the xmlDoc and return a new XML document containing
-		//		the result
-		// xmlDoc: an XML Document to transform
-		// params:
-		//		a set of configuration parameters to pass to the transformation
-		//		engine.
-		return getResultDom(xmlDoc, params); // XMLDocument
-	}
-
-	this.transformToWindow = function(	/*XMLDocument*/ xmlDoc,
-										/*2 Dimensional Array*/params, 
-										/*HTMLDocument*/windowDoc, 
-										/*HTMLDocument*/parentDoc){
-		// summary:
-		//		transform the xmlDoc and put the contents in the passed
-		//		windowDoc, blowing away any previous contents.
-		// xmlDoc: an XML Document to transform
-		// params:
-		//		a set of configuration parameters to pass to the transformation
-		//		engine.
-		// windowDoc: the HTMLDocument to assign the contents to
-		// parentDoc: The HTML docuemnt to transform the subdocument "under"
-		try{
-			windowDoc.open();
-			windowDoc.write(this.getResultString(xmlDoc, params, parentDoc));
-			windowDoc.close();
-		}catch(e){
-			dojo.raise(e.message + "\n\n xsltUri: " + xsltUri)
-		}
-	};
-};
+dojo.provide("dojo.xml.XslTransform");
+dojo.xml.XslTransform = function (xsltUri) {
+	dojo.debug("XslTransform is supported by Internet Explorer and Mozilla, with limited support in Opera 9 (no document function support).");
+	var IS_IE = dojo.render.html.ie;
+	var ACTIVEX_DOMS = ["Msxml2.DOMDocument.5.0", "Msxml2.DOMDocument.4.0", "Msxml2.DOMDocument.3.0", "MSXML2.DOMDocument", "MSXML.DOMDocument", "Microsoft.XMLDOM"];
+	var ACTIVEX_FT_DOMS = ["Msxml2.FreeThreadedDOMDocument.5.0", "MSXML2.FreeThreadedDOMDocument.4.0", "MSXML2.FreeThreadedDOMDocument.3.0"];
+	var ACTIVEX_TEMPLATES = ["Msxml2.XSLTemplate.5.0", "Msxml2.XSLTemplate.4.0", "MSXML2.XSLTemplate.3.0"];
+	function getActiveXImpl(activeXArray) {
+		for (var i = 0; i < activeXArray.length; i++) {
+			try {
+				var testObj = new ActiveXObject(activeXArray[i]);
+				if (testObj) {
+					return activeXArray[i];
+				}
+			}
+			catch (e) {
+			}
+		}
+		dojo.raise("Could not find an ActiveX implementation in:\n\n " + activeXArray);
+	}
+	if (xsltUri == null || xsltUri == undefined) {
+		dojo.raise("You must pass the URI String for the XSL file to be used!");
+		return false;
+	}
+	var xsltDocument = null;
+	var xsltProcessor = null;
+	if (IS_IE) {
+		xsltDocument = new ActiveXObject(getActiveXImpl(ACTIVEX_FT_DOMS));
+		xsltDocument.async = false;
+	} else {
+		xsltProcessor = new XSLTProcessor();
+		xsltDocument = document.implementation.createDocument("", "", null);
+		xsltDocument.addEventListener("load", onXslLoad, false);
+	}
+	xsltDocument.load(xsltUri);
+	if (IS_IE) {
+		var xslt = new ActiveXObject(getActiveXImpl(ACTIVEX_TEMPLATES));
+		xslt.stylesheet = xsltDocument;
+		xsltProcessor = xslt.createProcessor();
+	}
+	function onXslLoad() {
+		xsltProcessor.importStylesheet(xsltDocument);
+	}
+	function getResultDom(xmlDoc, params) {
+		if (IS_IE) {
+			addIeParams(params);
+			var result = getIeResultDom(xmlDoc);
+			removeIeParams(params);
+			return result;
+		} else {
+			return getMozillaResultDom(xmlDoc, params);
+		}
+	}
+	function addIeParams(params) {
+		if (!params) {
+			return;
+		}
+		for (var i = 0; i < params.length; i++) {
+			xsltProcessor.addParameter(params[i][0], params[i][1]);
+		}
+	}
+	function removeIeParams(params) {
+		if (!params) {
+			return;
+		}
+		for (var i = 0; i < params.length; i++) {
+			xsltProcessor.addParameter(params[i][0], "");
+		}
+	}
+	function getIeResultDom(xmlDoc) {
+		xsltProcessor.input = xmlDoc;
+		var outDoc = new ActiveXObject(getActiveXImpl(ACTIVEX_DOMS));
+		outDoc.async = false;
+		outDoc.validateOnParse = false;
+		xsltProcessor.output = outDoc;
+		xsltProcessor.transform();
+		if (outDoc.parseError.errorCode != 0) {
+			var err = outDoc.parseError;
+			dojo.raise("err.errorCode: " + err.errorCode + "\n\nerr.reason: " + err.reason + "\n\nerr.url: " + err.url + "\n\nerr.srcText: " + err.srcText);
+		}
+		return outDoc;
+	}
+	function getIeResultStr(xmlDoc, params) {
+		xsltProcessor.input = xmlDoc;
+		xsltProcessor.transform();
+		return xsltProcessor.output;
+	}
+	function addMozillaParams(params) {
+		if (!params) {
+			return;
+		}
+		for (var i = 0; i < params.length; i++) {
+			xsltProcessor.setParameter(null, params[i][0], params[i][1]);
+		}
+	}
+	function getMozillaResultDom(xmlDoc, params) {
+		addMozillaParams(params);
+		var resultDoc = xsltProcessor.transformToDocument(xmlDoc);
+		xsltProcessor.clearParameters();
+		return resultDoc;
+	}
+	function getMozillaResultStr(xmlDoc, params, parentDoc) {
+		addMozillaParams(params);
+		var resultDoc = xsltProcessor.transformToFragment(xmlDoc, parentDoc);
+		var serializer = new XMLSerializer();
+		xsltProcessor.clearParameters();
+		return serializer.serializeToString(resultDoc);
+	}
+	this.getResultString = function (xmlDoc, params, parentDoc) {
+		var content = null;
+		if (IS_IE) {
+			addIeParams(params);
+			content = getIeResultStr(xmlDoc, params);
+			removeIeParams(params);
+		} else {
+			content = getMozillaResultStr(xmlDoc, params, parentDoc);
+		}
+		return content;
+	};
+	this.transformToContentPane = function (xmlDoc, params, contentPane, parentDoc) {
+		var content = this.getResultString(xmlDoc, params, parentDoc);
+		contentPane.setContent(content);
+	};
+	this.transformToRegion = function (xmlDoc, params, region, parentDoc) {
+		try {
+			var content = this.getResultString(xmlDoc, params, parentDoc);
+			region.innerHTML = content;
+		}
+		catch (e) {
+			dojo.raise(e.message + "\n\n xsltUri: " + xsltUri);
+		}
+	};
+	this.transformToDocument = function (xmlDoc, params) {
+		return getResultDom(xmlDoc, params);
+	};
+	this.transformToWindow = function (xmlDoc, params, windowDoc, parentDoc) {
+		try {
+			windowDoc.open();
+			windowDoc.write(this.getResultString(xmlDoc, params, parentDoc));
+			windowDoc.close();
+		}
+		catch (e) {
+			dojo.raise(e.message + "\n\n xsltUri: " + xsltUri);
+		}
+	};
+};
 
+
 __CPAN_FILE__ src/xml/Parse.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -90191,277 +63251,158 @@
 
 dojo.provide("dojo.xml.Parse");
 dojo.require("dojo.dom");
-
-//TODO: determine dependencies
-// currently has dependency on dojo.xml.DomUtil nodeTypes constants...
-
-// using documentFragment nomenclature to generalize in case we don't want to require passing a collection of nodes with a single parent
-
-dojo.xml.Parse = function(){
-	// summary:
-	//		generic class for taking a DOM node and parsing it into an object
-	//		based on the "dojo tag name" of that node.
-	// 
-	//		supported dojoTagName's:
-	//			<prefix:tag> => prefix:tag
-	//			<dojo:tag> => dojo:tag
-	//			<dojoTag> => dojo:tag
-	//			<tag dojoType="type"> => dojo:type
-	//			<tag dojoType="prefix:type"> => prefix:type
-	//			<tag dojo:type="type"> => dojo:type
-	//			<tag class="classa dojo-type classb"> => dojo:type	
-
-	var isIE = ((dojo.render.html.capable)&&(dojo.render.html.ie));
-
-	// get normalized (lowercase) tagName
-	// some browsers report tagNames in lowercase no matter what
-	function getTagName(node){
-		/*
-		return ((node)&&(node["tagName"]) ? node.tagName.toLowerCase() : '');
-		*/
-		try{
+dojo.xml.Parse = function () {
+	var isIE = ((dojo.render.html.capable) && (dojo.render.html.ie));
+	function getTagName(node) {
+		try {
 			return node.tagName.toLowerCase();
-		}catch(e){
+		}
+		catch (e) {
 			return "";
 		}
 	}
-
-	// locate dojo qualified tag name
-	function getDojoTagName(node){
+	function getDojoTagName(node) {
 		var tagName = getTagName(node);
-		if (!tagName){
-				return '';
+		if (!tagName) {
+			return "";
 		}
-		// any registered tag
-		if((dojo.widget)&&(dojo.widget.tags[tagName])){
+		if ((dojo.widget) && (dojo.widget.tags[tagName])) {
 			return tagName;
 		}
-		// <prefix:tag> => prefix:tag
 		var p = tagName.indexOf(":");
-		if(p>=0){
+		if (p >= 0) {
 			return tagName;
 		}
-		// <dojo:tag> => dojo:tag
-		if(tagName.substr(0,5) == "dojo:"){
+		if (tagName.substr(0, 5) == "dojo:") {
 			return tagName;
 		}
-		if(dojo.render.html.capable && dojo.render.html.ie && node.scopeName != 'HTML'){
-			return node.scopeName.toLowerCase() + ':' + tagName;
+		if (dojo.render.html.capable && dojo.render.html.ie && node.scopeName != "HTML") {
+			return node.scopeName.toLowerCase() + ":" + tagName;
 		}
-		// <dojoTag> => dojo:tag
-		if(tagName.substr(0,4) == "dojo"){
-			// FIXME: this assumes tag names are always lower case
+		if (tagName.substr(0, 4) == "dojo") {
 			return "dojo:" + tagName.substring(4);
 		}
-		// <tag dojoType="prefix:type"> => prefix:type
-		// <tag dojoType="type"> => dojo:type
 		var djt = node.getAttribute("dojoType") || node.getAttribute("dojotype");
-		if(djt){
-			if (djt.indexOf(":")<0){
-				djt = "dojo:"+djt;
+		if (djt) {
+			if (djt.indexOf(":") < 0) {
+				djt = "dojo:" + djt;
 			}
 			return djt.toLowerCase();
 		}
-		// <tag dojo:type="type"> => dojo:type
-		djt = node.getAttributeNS && node.getAttributeNS(dojo.dom.dojoml,"type");
-		if(djt){
+		djt = node.getAttributeNS && node.getAttributeNS(dojo.dom.dojoml, "type");
+		if (djt) {
 			return "dojo:" + djt.toLowerCase();
 		}
-		// <tag dojo:type="type"> => dojo:type
-		try{
-			// FIXME: IE really really doesn't like this, so we squelch errors for it
+		try {
 			djt = node.getAttribute("dojo:type");
-		}catch(e){ 
-			// FIXME: log?  
 		}
-		if(djt){ return "dojo:"+djt.toLowerCase(); }
-		// <tag class="classa dojo-type classb"> => dojo:type	
-		if((dj_global["djConfig"])&&(!djConfig["ignoreClassNames"])){ 
-			// FIXME: should we make this optionally enabled via djConfig?
-			var classes = node.className||node.getAttribute("class");
-			// FIXME: following line, without check for existence of classes.indexOf
-			// breaks firefox 1.5's svg widgets
-			if((classes )&&(classes.indexOf)&&(classes.indexOf("dojo-")!=-1)){
+		catch (e) {
+		}
+		if (djt) {
+			return "dojo:" + djt.toLowerCase();
+		}
+		if ((dj_global["djConfig"]) && (!djConfig["ignoreClassNames"])) {
+			var classes = node.className || node.getAttribute("class");
+			if ((classes) && (classes.indexOf) && (classes.indexOf("dojo-") != -1)) {
 				var aclasses = classes.split(" ");
-				for(var x=0, c=aclasses.length; x<c; x++){
-					if(aclasses[x].slice(0, 5) == "dojo-"){
-						return "dojo:"+aclasses[x].substr(5).toLowerCase(); 
+				for (var x = 0, c = aclasses.length; x < c; x++) {
+					if (aclasses[x].slice(0, 5) == "dojo-") {
+						return "dojo:" + aclasses[x].substr(5).toLowerCase();
 					}
 				}
 			}
 		}
-		// no dojo-qualified name
-		return '';
+		return "";
 	}
-
-
-	this.parseElement = function(	/*DomNode*/node,
-									/*Boolean*/hasParentNodeSet, 
-									/*Boolean*/optimizeForDojoML, 
-									/*Integer*/thisIdx	){
-		// summary:
-		//		recursively parse the passed node, returning a normalized data
-		//		structure that represents the "attributes of interest" of said
-		//		elements. If optimizeForDojoML is true, only nodes that contain
-		//		a "dojo tag name" will be inspected for attributes.
-		// node: the DomNode to be treated as the root of inspection
-		// hasParentNodeSet: no-op, please pass "null"
-		// optimizeForDojoML: should we ignore non-Dojo nodes? Defaults to false.
-		// thisIdx:
-		//		a way to specify a synthetic "index" property in the resulting
-		//		data structure. Otherwise the index property of the top-level
-		//		return element is always "0".
-
-		// TODOC: document return structure of a non-trivial element set
-
-		// run shortcuts to bail out of processing up front to save time and
-		// object alloc if possible.
+	this.parseElement = function (node, hasParentNodeSet, optimizeForDojoML, thisIdx) {
 		var tagName = getTagName(node);
-		//There's a weird bug in IE where it counts end tags, e.g. </dojo:button> as nodes that should be parsed.  Ignore these
-		if(isIE && tagName.indexOf("/")==0){ return null; }
-
-		try{
+		if (isIE && tagName.indexOf("/") == 0) {
+			return null;
+		}
+		try {
 			var attr = node.getAttribute("parseWidgets");
-			if(attr && attr.toLowerCase() == "false"){
+			if (attr && attr.toLowerCase() == "false") {
 				return {};
 			}
-		}catch(e){/*continue*/}
-
-		
-		// look for a dojoml qualified name
-		// process dojoml only when optimizeForDojoML is true
+		}
+		catch (e) {
+		}
 		var process = true;
-		if(optimizeForDojoML){
+		if (optimizeForDojoML) {
 			var dojoTagName = getDojoTagName(node);
 			tagName = dojoTagName || tagName;
 			process = Boolean(dojoTagName);
 		}
-
 		var parsedNodeSet = {};
 		parsedNodeSet[tagName] = [];
 		var pos = tagName.indexOf(":");
-		if(pos>0){
-			var ns = tagName.substring(0,pos);
+		if (pos > 0) {
+			var ns = tagName.substring(0, pos);
 			parsedNodeSet["ns"] = ns;
-			// honor user namespace filters
-			if((dojo.ns)&&(!dojo.ns.allow(ns))){process=false;}
+			if ((dojo.ns) && (!dojo.ns.allow(ns))) {
+				process = false;
+			}
 		}
-
-		if(process){
+		if (process) {
 			var attributeSet = this.parseAttributes(node);
-			for(var attr in attributeSet){
-				if((!parsedNodeSet[tagName][attr])||(typeof parsedNodeSet[tagName][attr] != "array")){
+			for (var attr in attributeSet) {
+				if ((!parsedNodeSet[tagName][attr]) || (typeof parsedNodeSet[tagName][attr] != "array")) {
 					parsedNodeSet[tagName][attr] = [];
 				}
 				parsedNodeSet[tagName][attr].push(attributeSet[attr]);
-			}	
-			// FIXME: we might want to make this optional or provide cloning instead of
-			// referencing, but for now, we include a node reference to allow
-			// instantiated components to figure out their "roots"
+			}
 			parsedNodeSet[tagName].nodeRef = node;
 			parsedNodeSet.tagName = tagName;
-			parsedNodeSet.index = thisIdx||0;
+			parsedNodeSet.index = thisIdx || 0;
 		}
-
 		var count = 0;
-		for(var i = 0; i < node.childNodes.length; i++){
+		for (var i = 0; i < node.childNodes.length; i++) {
 			var tcn = node.childNodes.item(i);
-			switch(tcn.nodeType){
-				case  dojo.dom.ELEMENT_NODE: // element nodes, call this function recursively
-					var ctn = getDojoTagName(tcn) || getTagName(tcn);
-					if(!parsedNodeSet[ctn]){
-						parsedNodeSet[ctn] = [];
-					}
-					parsedNodeSet[ctn].push(this.parseElement(tcn, true, optimizeForDojoML, count));
-					if(	(tcn.childNodes.length == 1)&&
-						(tcn.childNodes.item(0).nodeType == dojo.dom.TEXT_NODE)){
-						parsedNodeSet[ctn][parsedNodeSet[ctn].length-1].value = tcn.childNodes.item(0).nodeValue;
-					}
-					count++;
-					break;
-				case  dojo.dom.TEXT_NODE: // if a single text node is the child, treat it as an attribute
-					if(node.childNodes.length == 1){
-						parsedNodeSet[tagName].push({ value: node.childNodes.item(0).nodeValue });
-					}
-					break;
-				default: break;
-				/*
-				case  dojo.dom.ATTRIBUTE_NODE: // attribute node... not meaningful here
-					break;
-				case  dojo.dom.CDATA_SECTION_NODE: // cdata section... not sure if this would ever be meaningful... might be...
-					break;
-				case  dojo.dom.ENTITY_REFERENCE_NODE: // entity reference node... not meaningful here
-					break;
-				case  dojo.dom.ENTITY_NODE: // entity node... not sure if this would ever be meaningful
-					break;
-				case  dojo.dom.PROCESSING_INSTRUCTION_NODE: // processing instruction node... not meaningful here
-					break;
-				case  dojo.dom.COMMENT_NODE: // comment node... not not sure if this would ever be meaningful 
-					break;
-				case  dojo.dom.DOCUMENT_NODE: // document node... not sure if this would ever be meaningful
-					break;
-				case  dojo.dom.DOCUMENT_TYPE_NODE: // document type node... not meaningful here
-					break;
-				case  dojo.dom.DOCUMENT_FRAGMENT_NODE: // document fragment node... not meaningful here
-					break;
-				case  dojo.dom.NOTATION_NODE:// notation node... not meaningful here
-					break;
-				*/
+			switch (tcn.nodeType) {
+			  case dojo.dom.ELEMENT_NODE:
+				var ctn = getDojoTagName(tcn) || getTagName(tcn);
+				if (!parsedNodeSet[ctn]) {
+					parsedNodeSet[ctn] = [];
+				}
+				parsedNodeSet[ctn].push(this.parseElement(tcn, true, optimizeForDojoML, count));
+				if ((tcn.childNodes.length == 1) && (tcn.childNodes.item(0).nodeType == dojo.dom.TEXT_NODE)) {
+					parsedNodeSet[ctn][parsedNodeSet[ctn].length - 1].value = tcn.childNodes.item(0).nodeValue;
+				}
+				count++;
+				break;
+			  case dojo.dom.TEXT_NODE:
+				if (node.childNodes.length == 1) {
+					parsedNodeSet[tagName].push({value:node.childNodes.item(0).nodeValue});
+				}
+				break;
+			  default:
+				break;
 			}
 		}
-		//return (hasParentNodeSet) ? parsedNodeSet[node.tagName] : parsedNodeSet;
-		//if(parsedNodeSet.tagName)dojo.debug("parseElement: RETURNING NODE WITH TAGNAME "+parsedNodeSet.tagName);
 		return parsedNodeSet;
 	};
-
-
-	/* parses a set of attributes on a node into an object tree */
-	this.parseAttributes = function(/*DomNode*/node){
-		// summary:
-		// 		creates an attribute object that maps attribute values for the
-		// 		passed node. Note that this is similar to creating a JSON
-		// 		representation of a DOM node.
-		// usage:
-		//		a node with the following serialization:
-		//			<div foo="bar" baz="thud">...</div>	
-		//		would yeild the following return structure when passed into this
-		//		function:
-		//			{
-		//				"foo": {
-		//					"value": "bar"
-		//				},
-		//				"baz": {
-		//					"value": "thud"
-		//				}
-		//			}
-		//
+	this.parseAttributes = function (node) {
 		var parsedAttributeSet = {};
 		var atts = node.attributes;
-		// TODO: should we allow for duplicate attributes at this point...
-		// would any of the relevant dom implementations even allow this?
-		var attnode, i=0;
-		while((attnode=atts[i++])){
-			if(isIE){
-				if(!attnode){ continue; }
-				if((typeof attnode == "object")&&
-					(typeof attnode.nodeValue == 'undefined')||
-					(attnode.nodeValue == null)||
-					(attnode.nodeValue == '')){ 
-					continue; 
+		var attnode, i = 0;
+		while ((attnode = atts[i++])) {
+			if (isIE) {
+				if (!attnode) {
+					continue;
 				}
+				if ((typeof attnode == "object") && (typeof attnode.nodeValue == "undefined") || (attnode.nodeValue == null) || (attnode.nodeValue == "")) {
+					continue;
+				}
 			}
-
 			var nn = attnode.nodeName.split(":");
 			nn = (nn.length == 2) ? nn[1] : attnode.nodeName;
-						
-			parsedAttributeSet[nn] = { 
-				value: attnode.nodeValue 
-			};
+			parsedAttributeSet[nn] = {value:attnode.nodeValue};
 		}
 		return parsedAttributeSet;
 	};
 };
 
+
 __CPAN_DIR__ src/gfx
 __CPAN_FILE__ src/gfx/matrix.js
 /*
@@ -90475,22 +63416,14 @@
 */
 
 dojo.provide("dojo.gfx.matrix");
-
 dojo.require("dojo.lang.common");
 dojo.require("dojo.math.*");
-
-dojo.gfx.matrix.Matrix2D = function(arg){
-	// summary: a 2D matrix object
-	// description: Normalizes a 2D matrix-like object. If arrays is passed, 
-	//		all objects of the array are normalized and multiplied sequentially.
-	// arg: Object
-	//		a 2D matrix-like object, or an array of such objects
-	if(arg){
-		if(arg instanceof Array){
-			if(arg.length > 0){
+dojo.gfx.matrix.Matrix2D = function (arg) {
+	if (arg) {
+		if (arg instanceof Array) {
+			if (arg.length > 0) {
 				var m = dojo.gfx.matrix.normalize(arg[0]);
-				// combine matrices
-				for(var i = 1; i < arg.length; ++i){
+				for (var i = 1; i < arg.length; ++i) {
 					var l = m;
 					var r = dojo.gfx.matrix.normalize(arg[i]);
 					m = new dojo.gfx.matrix.Matrix2D();
@@ -90503,374 +63436,122 @@
 				}
 				dojo.mixin(this, m);
 			}
-		}else{
+		} else {
 			dojo.mixin(this, arg);
 		}
 	}
 };
-
-// the default (identity) matrix, which is used to fill in missing values
-dojo.extend(dojo.gfx.matrix.Matrix2D, {xx: 1, xy: 0, yx: 0, yy: 1, dx: 0, dy: 0});
-
-dojo.mixin(dojo.gfx.matrix, {
-	// summary: class constants, and methods of dojo.gfx.matrix
-	
-	// matrix constants
-	
-	// identity: dojo.gfx.matrix.Matrix2D
-	//		an identity matrix constant: identity * (x, y) == (x, y)
-	identity: new dojo.gfx.matrix.Matrix2D(),
-	
-	// flipX: dojo.gfx.matrix.Matrix2D
-	//		a matrix, which reflects points at x = 0 line: flipX * (x, y) == (-x, y)
-	flipX:    new dojo.gfx.matrix.Matrix2D({xx: -1}),
-	
-	// flipY: dojo.gfx.matrix.Matrix2D
-	//		a matrix, which reflects points at y = 0 line: flipY * (x, y) == (x, -y)
-	flipY:    new dojo.gfx.matrix.Matrix2D({yy: -1}),
-	
-	// flipXY: dojo.gfx.matrix.Matrix2D
-	//		a matrix, which reflects points at the origin of coordinates: flipXY * (x, y) == (-x, -y)
-	flipXY:   new dojo.gfx.matrix.Matrix2D({xx: -1, yy: -1}),
-	
-	// matrix creators
-	
-	translate: function(a, b){
-		// summary: forms a translation matrix
-		// description: The resulting matrix is used to translate (move) points by specified offsets.
-		// a: Number: an x coordinate value
-		// b: Number: a y coordinate value
-		if(arguments.length > 1){
-			return new dojo.gfx.matrix.Matrix2D({dx: a, dy: b}); // dojo.gfx.matrix.Matrix2D
+dojo.extend(dojo.gfx.matrix.Matrix2D, {xx:1, xy:0, yx:0, yy:1, dx:0, dy:0});
+dojo.mixin(dojo.gfx.matrix, {identity:new dojo.gfx.matrix.Matrix2D(), flipX:new dojo.gfx.matrix.Matrix2D({xx:-1}), flipY:new dojo.gfx.matrix.Matrix2D({yy:-1}), flipXY:new dojo.gfx.matrix.Matrix2D({xx:-1, yy:-1}), translate:function (a, b) {
+	if (arguments.length > 1) {
+		return new dojo.gfx.matrix.Matrix2D({dx:a, dy:b});
+	}
+	return new dojo.gfx.matrix.Matrix2D({dx:a.x, dy:a.y});
+}, scale:function (a, b) {
+	if (arguments.length > 1) {
+		return new dojo.gfx.matrix.Matrix2D({xx:a, yy:b});
+	}
+	if (typeof a == "number") {
+		return new dojo.gfx.matrix.Matrix2D({xx:a, yy:a});
+	}
+	return new dojo.gfx.matrix.Matrix2D({xx:a.x, yy:a.y});
+}, rotate:function (angle) {
+	var c = Math.cos(angle);
+	var s = Math.sin(angle);
+	return new dojo.gfx.matrix.Matrix2D({xx:c, xy:s, yx:-s, yy:c});
+}, rotateg:function (degree) {
+	return dojo.gfx.matrix.rotate(dojo.math.degToRad(degree));
+}, skewX:function (angle) {
+	return new dojo.gfx.matrix.Matrix2D({xy:Math.tan(angle)});
+}, skewXg:function (degree) {
+	return dojo.gfx.matrix.skewX(dojo.math.degToRad(degree));
+}, skewY:function (angle) {
+	return new dojo.gfx.matrix.Matrix2D({yx:-Math.tan(angle)});
+}, skewYg:function (degree) {
+	return dojo.gfx.matrix.skewY(dojo.math.degToRad(degree));
+}, normalize:function (matrix) {
+	return (matrix instanceof dojo.gfx.matrix.Matrix2D) ? matrix : new dojo.gfx.matrix.Matrix2D(matrix);
+}, clone:function (matrix) {
+	var obj = new dojo.gfx.matrix.Matrix2D();
+	for (var i in matrix) {
+		if (typeof (matrix[i]) == "number" && typeof (obj[i]) == "number" && obj[i] != matrix[i]) {
+			obj[i] = matrix[i];
 		}
-		// branch
-		// a: dojo.gfx.Point: a point-like object, which specifies offsets for both dimensions
-		// b: null
-		return new dojo.gfx.matrix.Matrix2D({dx: a.x, dy: a.y}); // dojo.gfx.matrix.Matrix2D
-	},
-	scale: function(a, b){
-		// summary: forms a scaling matrix
-		// description: The resulting matrix is used to scale (magnify) points by specified offsets.
-		// a: Number: a scaling factor used for the x coordinate
-		// b: Number: a scaling factor used for the y coordinate
-		if(arguments.length > 1){
-			return new dojo.gfx.matrix.Matrix2D({xx: a, yy: b}); // dojo.gfx.matrix.Matrix2D
+	}
+	return obj;
+}, invert:function (matrix) {
+	var m = dojo.gfx.matrix.normalize(matrix);
+	var D = m.xx * m.yy - m.xy * m.yx;
+	var M = new dojo.gfx.matrix.Matrix2D({xx:m.yy / D, xy:-m.xy / D, yx:-m.yx / D, yy:m.xx / D, dx:(m.yx * m.dy - m.yy * m.dx) / D, dy:(m.xy * m.dx - m.xx * m.dy) / D});
+	return M;
+}, _multiplyPoint:function (m, x, y) {
+	return {x:m.xx * x + m.xy * y + m.dx, y:m.yx * x + m.yy * y + m.dy};
+}, multiplyPoint:function (matrix, a, b) {
+	var m = dojo.gfx.matrix.normalize(matrix);
+	if (typeof a == "number" && typeof b == "number") {
+		return dojo.gfx.matrix._multiplyPoint(m, a, b);
+	}
+	return dojo.gfx.matrix._multiplyPoint(m, a.x, a.y);
+}, multiply:function (matrix) {
+	var m = dojo.gfx.matrix.normalize(matrix);
+	for (var i = 1; i < arguments.length; ++i) {
+		var l = m;
+		var r = dojo.gfx.matrix.normalize(arguments[i]);
+		m = new dojo.gfx.matrix.Matrix2D();
+		m.xx = l.xx * r.xx + l.xy * r.yx;
+		m.xy = l.xx * r.xy + l.xy * r.yy;
+		m.yx = l.yx * r.xx + l.yy * r.yx;
+		m.yy = l.yx * r.xy + l.yy * r.yy;
+		m.dx = l.xx * r.dx + l.xy * r.dy + l.dx;
+		m.dy = l.yx * r.dx + l.yy * r.dy + l.dy;
+	}
+	return m;
+}, _sandwich:function (m, x, y) {
+	return dojo.gfx.matrix.multiply(dojo.gfx.matrix.translate(x, y), m, dojo.gfx.matrix.translate(-x, -y));
+}, scaleAt:function (a, b, c, d) {
+	switch (arguments.length) {
+	  case 4:
+		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a, b), c, d);
+	  case 3:
+		if (typeof c == "number") {
+			return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a), b, c);
 		}
-		if(typeof a == "number"){
-			// branch
-			// a: Number: a uniform scaling factor used for the both coordinates
-			// b: null
-			return new dojo.gfx.matrix.Matrix2D({xx: a, yy: a}); // dojo.gfx.matrix.Matrix2D
-		}
-		// branch
-		// a: dojo.gfx.Point: a point-like object, which specifies scale factors for both dimensions
-		// b: null
-		return new dojo.gfx.matrix.Matrix2D({xx: a.x, yy: a.y}); // dojo.gfx.matrix.Matrix2D
-	},
-	rotate: function(angle){
-		// summary: forms a rotating matrix
-		// description: The resulting matrix is used to rotate points 
-		//		around the origin of coordinates (0, 0) by specified angle.
-		// angle: Number: an angle of rotation in radians (>0 for CCW)
-		var c = Math.cos(angle);
-		var s = Math.sin(angle);
-		return new dojo.gfx.matrix.Matrix2D({xx: c, xy: s, yx: -s, yy: c}); // dojo.gfx.matrix.Matrix2D
-	},
-	rotateg: function(degree){
-		// summary: forms a rotating matrix
-		// description: The resulting matrix is used to rotate points
-		//		around the origin of coordinates (0, 0) by specified degree.
-		//		See dojo.gfx.matrix.rotate() for comparison.
-		// degree: Number: an angle of rotation in degrees (>0 for CCW)
-		return dojo.gfx.matrix.rotate(dojo.math.degToRad(degree)); // dojo.gfx.matrix.Matrix2D
-	},
-	skewX: function(angle) {
-		// summary: forms an x skewing matrix
-		// description: The resulting matrix is used to skew points in the x dimension
-		//		around the origin of coordinates (0, 0) by specified angle.
-		// angle: Number: an skewing angle in radians
-		return new dojo.gfx.matrix.Matrix2D({xy: Math.tan(angle)}); // dojo.gfx.matrix.Matrix2D
-	},
-	skewXg: function(degree){
-		// summary: forms an x skewing matrix
-		// description: The resulting matrix is used to skew points in the x dimension
-		//		around the origin of coordinates (0, 0) by specified degree.
-		//		See dojo.gfx.matrix.skewX() for comparison.
-		// degree: Number: an skewing angle in degrees
-		return dojo.gfx.matrix.skewX(dojo.math.degToRad(degree)); // dojo.gfx.matrix.Matrix2D
-	},
-	skewY: function(angle){
-		// summary: forms a y skewing matrix
-		// description: The resulting matrix is used to skew points in the y dimension
-		//		around the origin of coordinates (0, 0) by specified angle.
-		// angle: Number: an skewing angle in radians
-		return new dojo.gfx.matrix.Matrix2D({yx: -Math.tan(angle)}); // dojo.gfx.matrix.Matrix2D
-	},
-	skewYg: function(degree){
-		// summary: forms a y skewing matrix
-		// description: The resulting matrix is used to skew points in the y dimension
-		//		around the origin of coordinates (0, 0) by specified degree.
-		//		See dojo.gfx.matrix.skewY() for comparison.
-		// degree: Number: an skewing angle in degrees
-		return dojo.gfx.matrix.skewY(dojo.math.degToRad(degree)); // dojo.gfx.matrix.Matrix2D
-	},
-	
-	// ensure matrix 2D conformance
-	normalize: function(matrix){
-		// summary: converts an object to a matrix, if necessary
-		// description: Converts any 2D matrix-like object or an array of
-		//		such objects to a valid dojo.gfx.matrix.Matrix2D object.
-		// matrix: Object: an object, which is converted to a matrix, if necessary
-		return (matrix instanceof dojo.gfx.matrix.Matrix2D) ? matrix : new dojo.gfx.matrix.Matrix2D(matrix); // dojo.gfx.matrix.Matrix2D
-	},
-	
-	// common operations
-	
-	clone: function(matrix){
-		// summary: creates a copy of a 2D matrix
-		// matrix: dojo.gfx.matrix.Matrix2D: a 2D matrix-like object to be cloned
-		var obj = new dojo.gfx.matrix.Matrix2D();
-		for(var i in matrix){
-			if(typeof(matrix[i]) == "number" && typeof(obj[i]) == "number" && obj[i] != matrix[i]) obj[i] = matrix[i];
-		}
-		return obj; // dojo.gfx.matrix.Matrix2D
-	},
-	invert: function(matrix){
-		// summary: inverts a 2D matrix
-		// matrix: dojo.gfx.matrix.Matrix2D: a 2D matrix-like object to be inverted
-		var m = dojo.gfx.matrix.normalize(matrix);
-		var D = m.xx * m.yy - m.xy * m.yx;
-		var M = new dojo.gfx.matrix.Matrix2D({
-			xx: m.yy/D, xy: -m.xy/D, 
-			yx: -m.yx/D, yy: m.xx/D, 
-			dx: (m.yx * m.dy - m.yy * m.dx) / D, 
-			dy: (m.xy * m.dx - m.xx * m.dy) / D
-		});
-		return M; // dojo.gfx.matrix.Matrix2D
-	},
-	_multiplyPoint: function(m, x, y){
-		// summary: applies a matrix to a point
-		// matrix: dojo.gfx.matrix.Matrix2D: a 2D matrix object to be applied
-		// x: Number: an x coordinate of a point
-		// y: Number: a y coordinate of a point
-		return {x: m.xx * x + m.xy * y + m.dx, y: m.yx * x + m.yy * y + m.dy}; // dojo.gfx.Point
-	},
-	multiplyPoint: function(matrix, /* Number||Point */ a, /* Number, optional */ b){
-		// summary: applies a matrix to a point
-		// matrix: dojo.gfx.matrix.Matrix2D: a 2D matrix object to be applied
-		// a: Number: an x coordinate of a point
-		// b: Number: a y coordinate of a point
-		var m = dojo.gfx.matrix.normalize(matrix);
-		if(typeof a == "number" && typeof b == "number"){
-			return dojo.gfx.matrix._multiplyPoint(m, a, b); // dojo.gfx.Point
-		}
-		// branch
-		// matrix: dojo.gfx.matrix.Matrix2D: a 2D matrix object to be applied
-		// a: dojo.gfx.Point: a point
-		// b: null
-		return dojo.gfx.matrix._multiplyPoint(m, a.x, a.y); // dojo.gfx.Point
-	},
-	multiply: function(matrix){
-		// summary: combines matrices by multiplying them sequentially in the given order
-		// matrix: dojo.gfx.matrix.Matrix2D...: a 2D matrix-like object, 
-		//		all subsequent arguments are matrix-like objects too
-		var m = dojo.gfx.matrix.normalize(matrix);
-		// combine matrices
-		for(var i = 1; i < arguments.length; ++i){
-			var l = m;
-			var r = dojo.gfx.matrix.normalize(arguments[i]);
-			m = new dojo.gfx.matrix.Matrix2D();
-			m.xx = l.xx * r.xx + l.xy * r.yx;
-			m.xy = l.xx * r.xy + l.xy * r.yy;
-			m.yx = l.yx * r.xx + l.yy * r.yx;
-			m.yy = l.yx * r.xy + l.yy * r.yy;
-			m.dx = l.xx * r.dx + l.xy * r.dy + l.dx;
-			m.dy = l.yx * r.dx + l.yy * r.dy + l.dy;
-		}
-		return m; // dojo.gfx.matrix.Matrix2D
-	},
-	
-	// high level operations
-	
-	_sandwich: function(m, x, y){
-		// summary: applies a matrix at a centrtal point
-		// m: dojo.gfx.matrix.Matrix2D: a 2D matrix-like object, which is applied at a central point
-		// x: Number: an x component of the central point
-		// y: Number: a y component of the central point
-		return dojo.gfx.matrix.multiply(dojo.gfx.matrix.translate(x, y), m, dojo.gfx.matrix.translate(-x, -y)); // dojo.gfx.matrix.Matrix2D
-	},
-	scaleAt: function(a, b, c, d){
-		// summary: scales a picture using a specified point as a center of scaling
-		// description: Compare with dojo.gfx.matrix.scale().
-		// a: Number: a scaling factor used for the x coordinate
-		// b: Number: a scaling factor used for the y coordinate
-		// c: Number: an x component of a central point
-		// d: Number: a y component of a central point
-		
-		// accepts several signatures:
-		//	1) uniform scale factor, Point
-		//	2) uniform scale factor, x, y
-		//	3) x scale, y scale, Point
-		//	4) x scale, y scale, x, y
-		
-		switch(arguments.length){
-			case 4:
-				// a and b are scale factor components, c and d are components of a point
-				return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a, b), c, d); // dojo.gfx.matrix.Matrix2D
-			case 3:
-				if(typeof c == "number"){
-					// branch
-					// a: Number: a uniform scaling factor used for both coordinates
-					// b: Number: an x component of a central point
-					// c: Number: a y component of a central point
-					// d: null
-					return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a), b, c); // dojo.gfx.matrix.Matrix2D
-				}
-				// branch
-				// a: Number: a scaling factor used for the x coordinate
-				// b: Number: a scaling factor used for the y coordinate
-				// c: dojo.gfx.Point: a central point
-				// d: null
-				return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a, b), c.x, c.y); // dojo.gfx.matrix.Matrix2D
-		}
-		// branch
-		// a: Number: a uniform scaling factor used for both coordinates
-		// b: dojo.gfx.Point: a central point
-		// c: null
-		// d: null
-		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a), b.x, b.y); // dojo.gfx.matrix.Matrix2D
-	},
-	rotateAt: function(angle, a, b){
-		// summary: rotates a picture using a specified point as a center of rotation
-		// description: Compare with dojo.gfx.matrix.rotate().
-		// angle: Number: an angle of rotation in radians (>0 for CCW)
-		// a: Number: an x component of a central point
-		// b: Number: a y component of a central point
-		
-		// accepts several signatures:
-		//	1) rotation angle in radians, Point
-		//	2) rotation angle in radians, x, y
-		
-		if(arguments.length > 2){
-			return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotate(angle), a, b); // dojo.gfx.matrix.Matrix2D
-		}
-		
-		// branch
-		// angle: Number: an angle of rotation in radians (>0 for CCW)
-		// a: dojo.gfx.Point: a central point
-		// b: null
-		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotate(angle), a.x, a.y); // dojo.gfx.matrix.Matrix2D
-	},
-	rotategAt: function(degree, a, b){
-		// summary: rotates a picture using a specified point as a center of rotation
-		// description: Compare with dojo.gfx.matrix.rotateg().
-		// degree: Number: an angle of rotation in degrees (>0 for CCW)
-		// a: Number: an x component of a central point
-		// b: Number: a y component of a central point
-		
-		// accepts several signatures:
-		//	1) rotation angle in degrees, Point
-		//	2) rotation angle in degrees, x, y
-		
-		if(arguments.length > 2){
-			return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotateg(degree), a, b); // dojo.gfx.matrix.Matrix2D
-		}
-
-		// branch
-		// degree: Number: an angle of rotation in degrees (>0 for CCW)
-		// a: dojo.gfx.Point: a central point
-		// b: null
-		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotateg(degree), a.x, a.y); // dojo.gfx.matrix.Matrix2D
-	},
-	skewXAt: function(angle, a, b){
-		// summary: skews a picture along the x axis using a specified point as a center of skewing
-		// description: Compare with dojo.gfx.matrix.skewX().
-		// angle: Number: an skewing angle in radians
-		// a: Number: an x component of a central point
-		// b: Number: a y component of a central point
-		
-		// accepts several signatures:
-		//	1) skew angle in radians, Point
-		//	2) skew angle in radians, x, y
-		
-		if(arguments.length > 2){
-			return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewX(angle), a, b); // dojo.gfx.matrix.Matrix2D
-		}
-
-		// branch
-		// angle: Number: an skewing angle in radians
-		// a: dojo.gfx.Point: a central point
-		// b: null
-		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewX(angle), a.x, a.y); // dojo.gfx.matrix.Matrix2D
-	},
-	skewXgAt: function(degree, a, b){
-		// summary: skews a picture along the x axis using a specified point as a center of skewing
-		// description: Compare with dojo.gfx.matrix.skewXg().
-		// degree: Number: an skewing angle in degrees
-		// a: Number: an x component of a central point
-		// b: Number: a y component of a central point
-		
-		// accepts several signatures:
-		//	1) skew angle in degrees, Point
-		//	2) skew angle in degrees, x, y
-
-		if(arguments.length > 2){
-			return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewXg(degree), a, b); // dojo.gfx.matrix.Matrix2D
-		}
-
-		// branch
-		// degree: Number: an skewing angle in degrees
-		// a: dojo.gfx.Point: a central point
-		// b: null
-		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewXg(degree), a.x, a.y); // dojo.gfx.matrix.Matrix2D
-	},
-	skewYAt: function(angle, a, b){
-		// summary: skews a picture along the y axis using a specified point as a center of skewing
-		// description: Compare with dojo.gfx.matrix.skewY().
-		// angle: Number: an skewing angle in radians
-		// a: Number: an x component of a central point
-		// b: Number: a y component of a central point
-		
-		// accepts several signatures:
-		//	1) skew angle in radians, Point
-		//	2) skew angle in radians, x, y
-		
-		if(arguments.length > 2){
-			return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewY(angle), a, b); // dojo.gfx.matrix.Matrix2D
-		}
-
-		// branch
-		// angle: Number: an skewing angle in radians
-		// a: dojo.gfx.Point: a central point
-		// b: null
-		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewY(angle), a.x, a.y); // dojo.gfx.matrix.Matrix2D
-	},
-	skewYgAt: function(/* Number */ degree, /* Number||Point */ a, /* Number, optional */ b){
-		// summary: skews a picture along the y axis using a specified point as a center of skewing
-		// description: Compare with dojo.gfx.matrix.skewYg().
-		// degree: Number: an skewing angle in degrees
-		// a: Number: an x component of a central point
-		// b: Number: a y component of a central point
-		
-		// accepts several signatures:
-		//	1) skew angle in degrees, Point
-		//	2) skew angle in degrees, x, y
-
-		if(arguments.length > 2){
-			return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewYg(degree), a, b); // dojo.gfx.matrix.Matrix2D
-		}
-
-		// branch
-		// degree: Number: an skewing angle in degrees
-		// a: dojo.gfx.Point: a central point
-		// b: null
-		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewYg(degree), a.x, a.y); // dojo.gfx.matrix.Matrix2D
+		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a, b), c.x, c.y);
 	}
-	
-	// TODO: rect-to-rect mapping, scale-to-fit (isotropic and anisotropic versions)
-	
-});
+	return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a), b.x, b.y);
+}, rotateAt:function (angle, a, b) {
+	if (arguments.length > 2) {
+		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotate(angle), a, b);
+	}
+	return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotate(angle), a.x, a.y);
+}, rotategAt:function (degree, a, b) {
+	if (arguments.length > 2) {
+		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotateg(degree), a, b);
+	}
+	return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotateg(degree), a.x, a.y);
+}, skewXAt:function (angle, a, b) {
+	if (arguments.length > 2) {
+		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewX(angle), a, b);
+	}
+	return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewX(angle), a.x, a.y);
+}, skewXgAt:function (degree, a, b) {
+	if (arguments.length > 2) {
+		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewXg(degree), a, b);
+	}
+	return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewXg(degree), a.x, a.y);
+}, skewYAt:function (angle, a, b) {
+	if (arguments.length > 2) {
+		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewY(angle), a, b);
+	}
+	return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewY(angle), a.x, a.y);
+}, skewYgAt:function (degree, a, b) {
+	if (arguments.length > 2) {
+		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewYg(degree), a, b);
+	}
+	return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewYg(degree), a.x, a.y);
+}});
 
+
 __CPAN_FILE__ src/gfx/common.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -90883,114 +63564,57 @@
 */
 
 dojo.provide("dojo.gfx.common");
-
 dojo.require("dojo.gfx.color");
 dojo.require("dojo.lang.declare");
 dojo.require("dojo.lang.extras");
 dojo.require("dojo.dom");
-
-dojo.lang.mixin(dojo.gfx, {
-	// summary: defines constants, prototypes, and utility functions
-	
-	// default shapes, which is used to fill in missing parameters
-	defaultPath:     {type: "path",     path: ""},
-	defaultPolyline: {type: "polyline", points: []},
-	defaultRect:     {type: "rect",     x: 0, y: 0, width: 100, height: 100, r: 0},
-	defaultEllipse:  {type: "ellipse",  cx: 0, cy: 0, rx: 200, ry: 100},
-	defaultCircle:   {type: "circle",   cx: 0, cy: 0, r: 100},
-	defaultLine:     {type: "line",     x1: 0, y1: 0, x2: 100, y2: 100},
-	defaultImage:    {type: "image",    width: 0, height: 0, src: ""},
-
-	// default geometric attributes (a stroke, and fills)
-	defaultStroke: {color: "black", width: 1, cap: "butt", join: 4},
-	defaultLinearGradient: {type: "linear", x1: 0, y1: 0, x2: 100, y2: 100, 
-		colors: [{offset: 0, color: "black"}, {offset: 1, color: "white"}]},
-	defaultRadialGradient: {type: "radial", cx: 0, cy: 0, r: 100, 
-		colors: [{offset: 0, color: "black"}, {offset: 1, color: "white"}]},
-	defaultPattern: {type: "pattern", x: 0, y: 0, width: 0, height: 0, src: ""},
-
-	normalizeColor: function(/*Color*/ color){
-		// summary: converts any legal color representation to normalized dojo.gfx.color.Color object
-		return (color instanceof dojo.gfx.color.Color) ? color : new dojo.gfx.color.Color(color); // dojo.gfx.color.Color
-	},
-	normalizeParameters: function(existed, update){
-		// summary: updates an existing object with properties from an "update" object
-		// existed: Object: the "target" object to be updated
-		// update:  Object: the "update" object, whose properties will be used to update the existed object
-		if(update){
-			var empty = {};
-			for(var x in existed){
-				if(x in update && !(x in empty)){
-					existed[x] = update[x];
-				}
+dojo.lang.mixin(dojo.gfx, {defaultPath:{type:"path", path:""}, defaultPolyline:{type:"polyline", points:[]}, defaultRect:{type:"rect", x:0, y:0, width:100, height:100, r:0}, defaultEllipse:{type:"ellipse", cx:0, cy:0, rx:200, ry:100}, defaultCircle:{type:"circle", cx:0, cy:0, r:100}, defaultLine:{type:"line", x1:0, y1:0, x2:100, y2:100}, defaultImage:{type:"image", width:0, height:0, src:""}, defaultStroke:{color:"black", width:1, cap:"butt", join:4}, defaultLinearGradient:{type:"linear", x1:0, y1:0, x2:100, y2:100, colors:[{offset:0, color:"black"}, {offset:1, color:"white"}]}, defaultRadialGradient:{type:"radial", cx:0, cy:0, r:100, colors:[{offset:0, color:"black"}, {offset:1, color:"white"}]}, defaultPattern:{type:"pattern", x:0, y:0, width:0, height:0, src:""}, normalizeColor:function (color) {
+	return (color instanceof dojo.gfx.color.Color) ? color : new dojo.gfx.color.Color(color);
+}, normalizeParameters:function (existed, update) {
+	if (update) {
+		var empty = {};
+		for (var x in existed) {
+			if (x in update && !(x in empty)) {
+				existed[x] = update[x];
 			}
 		}
-		return existed;	// Object
-	},
-	makeParameters: function(defaults, update){
-		// summary: copies the original object, and all copied properties from the "update" object
-		// defaults: Object: the object to be cloned before updating
-		// update:   Object: the object, which properties are to be cloned during updating
-		if(!update) return dojo.lang.shallowCopy(defaults, true);
-		var result = {};
-		for(var i in defaults){
-			if(!(i in result)){
-				result[i] = dojo.lang.shallowCopy((i in update) ? update[i] : defaults[i], true);
-			}
+	}
+	return existed;
+}, makeParameters:function (defaults, update) {
+	if (!update) {
+		return dojo.lang.shallowCopy(defaults, true);
+	}
+	var result = {};
+	for (var i in defaults) {
+		if (!(i in result)) {
+			result[i] = dojo.lang.shallowCopy((i in update) ? update[i] : defaults[i], true);
 		}
-		return result; // Object
-	},
-	formatNumber: function(x, addSpace){
-		// summary: converts a number to a string using a fixed notation
-		// x:			Number:		number to be converted
-		// addSpace:	Boolean?:	if it is true, add a space before a positive number
-		var val = x.toString();
-		if(val.indexOf("e") >= 0){
+	}
+	return result;
+}, formatNumber:function (x, addSpace) {
+	var val = x.toString();
+	if (val.indexOf("e") >= 0) {
+		val = x.toFixed(4);
+	} else {
+		var point = val.indexOf(".");
+		if (point >= 0 && val.length - point > 5) {
 			val = x.toFixed(4);
-		}else{
-			var point = val.indexOf(".");
-			if(point >= 0 && val.length - point > 5){
-				val = x.toFixed(4);
-			}
 		}
-		if(x < 0){
-			return val; // String
-		}
-		return addSpace ? " " + val : val; // String
-	},
-	
-	// a constant used to split a SVG/VML path into primitive components
-	pathRegExp: /([A-Za-z]+)|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g
-});
-
-dojo.declare("dojo.gfx.Surface", null, {
-	// summary: a surface object to be used for drawings
-	
-	initializer: function(){
-		// summary: a constructor
-		
-		// underlying node
-		this.rawNode = null;
-	},
-	getEventSource: function(){
-		// summary: returns a node, which can be used to attach event listeners
-		
-		return this.rawNode; // Node
 	}
-});
+	if (x < 0) {
+		return val;
+	}
+	return addSpace ? " " + val : val;
+}, pathRegExp:/([A-Za-z]+)|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g});
+dojo.declare("dojo.gfx.Surface", null, {initializer:function () {
+	this.rawNode = null;
+}, getEventSource:function () {
+	return this.rawNode;
+}});
+dojo.declare("dojo.gfx.Point", null, {});
+dojo.declare("dojo.gfx.Rectangle", null, {});
 
-dojo.declare("dojo.gfx.Point", null, {
-	// summary: a hypothetical 2D point to be used for drawings - {x, y}
-	// description: This object is defined for documentation purposes.
-	//	You should use a naked object instead: {x: 1, y: 2}.
-});
 
-dojo.declare("dojo.gfx.Rectangle", null, {
-	// summary: a hypothetical rectangle - {x, y, width, height}
-	// description: This object is defined for documentation purposes.
-	//	You should use a naked object instead: {x: 1, y: 2, width: 100, height: 200}.
-});
-
 __CPAN_FILE__ src/gfx/svg.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -91003,657 +63627,467 @@
 */
 
 dojo.provide("dojo.gfx.svg");
-
 dojo.require("dojo.lang.declare");
 dojo.require("dojo.svg");
-
 dojo.require("dojo.gfx.color");
 dojo.require("dojo.gfx.common");
 dojo.require("dojo.gfx.shape");
 dojo.require("dojo.gfx.path");
-
 dojo.require("dojo.experimental");
 dojo.experimental("dojo.gfx.svg");
-
-dojo.gfx.svg.getRef = function(fill){
-	// summary: returns a DOM Node specified by the fill argument or null
-	// fill: String: an SVG fill
-	if(!fill || fill == "none") return null;
-	if(fill.match(/^url\(#.+\)$/)){
-		return dojo.byId(fill.slice(5, -1));	// Node
+dojo.gfx.svg.getRef = function (fill) {
+	if (!fill || fill == "none") {
+		return null;
 	}
-	// Opera's bug: incorrect representation of a reference
-	if(dojo.render.html.opera && fill.match(/^#dj_unique_.+$/)){
-		// we assume here that a reference was generated by dojo.gfx
-		return dojo.byId(fill.slice(1));	// Node
+	if (fill.match(/^url\(#.+\)$/)) {
+		return dojo.byId(fill.slice(5, -1));
 	}
-	return null;	// Node
+	if (dojo.render.html.opera && fill.match(/^#dj_unique_.+$/)) {
+		return dojo.byId(fill.slice(1));
+	}
+	return null;
 };
-
-dojo.lang.extend(dojo.gfx.Shape, {
-	// summary: SVG-specific implementation of dojo.gfx.Shape methods
-	
-	setFill: function(fill){
-		// summary: sets a fill object (SVG)
-		// fill: Object: a fill object
-		//	(see dojo.gfx.defaultLinearGradient, 
-		//	dojo.gfx.defaultRadialGradient, 
-		//	dojo.gfx.defaultPattern, 
-		//	or dojo.gfx.color.Color)
-		
-		if(!fill){
-			// don't fill
-			this.fillStyle = null;
-			this.rawNode.setAttribute("fill", "none");
-			this.rawNode.setAttribute("fill-opacity", 0);
-			return this;
+dojo.lang.extend(dojo.gfx.Shape, {setFill:function (fill) {
+	if (!fill) {
+		this.fillStyle = null;
+		this.rawNode.setAttribute("fill", "none");
+		this.rawNode.setAttribute("fill-opacity", 0);
+		return this;
+	}
+	if (typeof (fill) == "object" && "type" in fill) {
+		switch (fill.type) {
+		  case "linear":
+			var f = dojo.gfx.makeParameters(dojo.gfx.defaultLinearGradient, fill);
+			var gradient = this._setFillObject(f, "linearGradient");
+			dojo.lang.forEach(["x1", "y1", "x2", "y2"], function (x) {
+				gradient.setAttribute(x, f[x].toFixed(8));
+			});
+			break;
+		  case "radial":
+			var f = dojo.gfx.makeParameters(dojo.gfx.defaultRadialGradient, fill);
+			var gradient = this._setFillObject(f, "radialGradient");
+			dojo.lang.forEach(["cx", "cy", "r"], function (x) {
+				gradient.setAttribute(x, f[x].toFixed(8));
+			});
+			break;
+		  case "pattern":
+			var f = dojo.gfx.makeParameters(dojo.gfx.defaultPattern, fill);
+			var pattern = this._setFillObject(f, "pattern");
+			dojo.lang.forEach(["x", "y", "width", "height"], function (x) {
+				pattern.setAttribute(x, f[x].toFixed(8));
+			});
+			break;
 		}
-		if(typeof(fill) == "object" && "type" in fill){
-			// gradient
-			switch(fill.type){
-				case "linear":
-					var f = dojo.gfx.makeParameters(dojo.gfx.defaultLinearGradient, fill);
-					var gradient = this._setFillObject(f, "linearGradient");
-					dojo.lang.forEach(["x1", "y1", "x2", "y2"], function(x){
-						gradient.setAttribute(x, f[x].toFixed(8));
-					});
-					break;
-				case "radial":
-					var f = dojo.gfx.makeParameters(dojo.gfx.defaultRadialGradient, fill);
-					var gradient = this._setFillObject(f, "radialGradient");
-					dojo.lang.forEach(["cx", "cy", "r"], function(x){
-						gradient.setAttribute(x, f[x].toFixed(8));
-					});
-					break;
-				case "pattern":
-					var f = dojo.gfx.makeParameters(dojo.gfx.defaultPattern, fill);
-					var pattern = this._setFillObject(f, "pattern");
-					dojo.lang.forEach(["x", "y", "width", "height"], function(x){
-						pattern.setAttribute(x, f[x].toFixed(8));
-					});
-					break;
-			}
-			return this;
+		return this;
+	}
+	var f = dojo.gfx.normalizeColor(fill);
+	this.fillStyle = f;
+	this.rawNode.setAttribute("fill", f.toCss());
+	this.rawNode.setAttribute("fill-opacity", f.a);
+	return this;
+}, setStroke:function (stroke) {
+	if (!stroke) {
+		this.strokeStyle = null;
+		this.rawNode.setAttribute("stroke", "none");
+		this.rawNode.setAttribute("stroke-opacity", 0);
+		return this;
+	}
+	this.strokeStyle = dojo.gfx.makeParameters(dojo.gfx.defaultStroke, stroke);
+	this.strokeStyle.color = dojo.gfx.normalizeColor(this.strokeStyle.color);
+	var s = this.strokeStyle;
+	var rn = this.rawNode;
+	if (s) {
+		rn.setAttribute("stroke", s.color.toCss());
+		rn.setAttribute("stroke-opacity", s.color.a);
+		rn.setAttribute("stroke-width", s.width);
+		rn.setAttribute("stroke-linecap", s.cap);
+		if (typeof (s.join) == "number") {
+			rn.setAttribute("stroke-linejoin", "miter");
+			rn.setAttribute("stroke-miterlimit", s.join);
+		} else {
+			rn.setAttribute("stroke-linejoin", s.join);
 		}
-		// color object
-		var f = dojo.gfx.normalizeColor(fill);
-		this.fillStyle = f;
-		this.rawNode.setAttribute("fill", f.toCss());
-		this.rawNode.setAttribute("fill-opacity", f.a);
-		return this;	// self
-	},
-
-	setStroke: function(stroke){
-		// summary: sets a stroke object (SVG)
-		// stroke: Object: a stroke object
-		//	(see dojo.gfx.defaultStroke) 
-	
-		if(!stroke){
-			// don't stroke
-			this.strokeStyle = null;
-			this.rawNode.setAttribute("stroke", "none");
-			this.rawNode.setAttribute("stroke-opacity", 0);
-			return this;
-		}
-		// normalize the stroke
-		this.strokeStyle = dojo.gfx.makeParameters(dojo.gfx.defaultStroke, stroke);
-		this.strokeStyle.color = dojo.gfx.normalizeColor(this.strokeStyle.color);
-		// generate attributes
-		var s = this.strokeStyle;
-		var rn = this.rawNode;
-		if(s){
-			rn.setAttribute("stroke", s.color.toCss());
-			rn.setAttribute("stroke-opacity", s.color.a);
-			rn.setAttribute("stroke-width",   s.width);
-			rn.setAttribute("stroke-linecap", s.cap);
-			if(typeof(s.join) == "number"){
-				rn.setAttribute("stroke-linejoin",   "miter");
-				rn.setAttribute("stroke-miterlimit", s.join);
-			}else{
-				rn.setAttribute("stroke-linejoin",   s.join);
-			}
-		}
-		return this;	// self
-	},
-
-	_setFillObject: function(f, nodeType){
-		var def_elems = this.rawNode.parentNode.getElementsByTagName("defs");
-		if(def_elems.length == 0){ return this; }
-		this.fillStyle = f;
-		var defs = def_elems[0];
-		var fill = this.rawNode.getAttribute("fill");
-		var ref  = dojo.gfx.svg.getRef(fill);
-		if(ref){
-			fill = ref;
-			if(fill.tagName.toLowerCase() != nodeType.toLowerCase()){
-				var id = fill.id;
-				fill.parentNode.removeChild(fill);
-				fill = document.createElementNS(dojo.svg.xmlns.svg, nodeType);
-				fill.setAttribute("id", id);
-				defs.appendChild(fill);
-			}else{
-				while(fill.childNodes.length){
-					fill.removeChild(fill.lastChild);
-				}
-			}
-		}else{
+	}
+	return this;
+}, _setFillObject:function (f, nodeType) {
+	var def_elems = this.rawNode.parentNode.getElementsByTagName("defs");
+	if (def_elems.length == 0) {
+		return this;
+	}
+	this.fillStyle = f;
+	var defs = def_elems[0];
+	var fill = this.rawNode.getAttribute("fill");
+	var ref = dojo.gfx.svg.getRef(fill);
+	if (ref) {
+		fill = ref;
+		if (fill.tagName.toLowerCase() != nodeType.toLowerCase()) {
+			var id = fill.id;
+			fill.parentNode.removeChild(fill);
 			fill = document.createElementNS(dojo.svg.xmlns.svg, nodeType);
-			fill.setAttribute("id", dojo.dom.getUniqueId());
+			fill.setAttribute("id", id);
 			defs.appendChild(fill);
-		}
-		if(nodeType == "pattern"){
-			fill.setAttribute("patternUnits", "userSpaceOnUse");
-			var img = document.createElementNS(dojo.svg.xmlns.svg, "image");
-			img.setAttribute("x", 0);
-			img.setAttribute("y", 0);
-			img.setAttribute("width",  f.width .toFixed(8));
-			img.setAttribute("height", f.height.toFixed(8));
-			img.setAttributeNS(dojo.svg.xmlns.xlink, "href", f.src);
-			fill.appendChild(img);
-		}else{
-			fill.setAttribute("gradientUnits", "userSpaceOnUse");
-			for(var i = 0; i < f.colors.length; ++i){
-				f.colors[i].color = dojo.gfx.normalizeColor(f.colors[i].color);
-				var t = document.createElementNS(dojo.svg.xmlns.svg, "stop");
-				t.setAttribute("offset",     f.colors[i].offset.toFixed(8));
-				t.setAttribute("stop-color", f.colors[i].color.toCss());
-				fill.appendChild(t);
+		} else {
+			while (fill.childNodes.length) {
+				fill.removeChild(fill.lastChild);
 			}
 		}
-		this.rawNode.setAttribute("fill", "url(#" + fill.getAttribute("id") +")");
-		this.rawNode.removeAttribute("fill-opacity");
-		return fill;
-	},
-	
-	_applyTransform: function() {
-		var matrix = this._getRealMatrix();
-		if(matrix){
-			var tm = this.matrix;
-			this.rawNode.setAttribute("transform", "matrix(" +
-				tm.xx.toFixed(8) + "," + tm.yx.toFixed(8) + "," +
-				tm.xy.toFixed(8) + "," + tm.yy.toFixed(8) + "," +
-				tm.dx.toFixed(8) + "," + tm.dy.toFixed(8) + ")");
-		}else{
-			this.rawNode.removeAttribute("transform");
+	} else {
+		fill = document.createElementNS(dojo.svg.xmlns.svg, nodeType);
+		fill.setAttribute("id", dojo.dom.getUniqueId());
+		defs.appendChild(fill);
+	}
+	if (nodeType == "pattern") {
+		fill.setAttribute("patternUnits", "userSpaceOnUse");
+		var img = document.createElementNS(dojo.svg.xmlns.svg, "image");
+		img.setAttribute("x", 0);
+		img.setAttribute("y", 0);
+		img.setAttribute("width", f.width.toFixed(8));
+		img.setAttribute("height", f.height.toFixed(8));
+		img.setAttributeNS(dojo.svg.xmlns.xlink, "href", f.src);
+		fill.appendChild(img);
+	} else {
+		fill.setAttribute("gradientUnits", "userSpaceOnUse");
+		for (var i = 0; i < f.colors.length; ++i) {
+			f.colors[i].color = dojo.gfx.normalizeColor(f.colors[i].color);
+			var t = document.createElementNS(dojo.svg.xmlns.svg, "stop");
+			t.setAttribute("offset", f.colors[i].offset.toFixed(8));
+			t.setAttribute("stop-color", f.colors[i].color.toCss());
+			fill.appendChild(t);
 		}
-		return this;
-	},
-
-	setRawNode: function(rawNode){
-		// summary:
-		//	assigns and clears the underlying node that will represent this
-		//	shape. Once set, transforms, gradients, etc, can be applied.
-		//	(no fill & stroke by default)
-		with(rawNode){
-			setAttribute("fill", "none");
-			setAttribute("fill-opacity", 0);
-			setAttribute("stroke", "none");
-			setAttribute("stroke-opacity", 0);
-			setAttribute("stroke-width", 1);
-			setAttribute("stroke-linecap", "butt");
-			setAttribute("stroke-linejoin", "miter");
-			setAttribute("stroke-miterlimit", 4);
+	}
+	this.rawNode.setAttribute("fill", "url(#" + fill.getAttribute("id") + ")");
+	this.rawNode.removeAttribute("fill-opacity");
+	return fill;
+}, _applyTransform:function () {
+	var matrix = this._getRealMatrix();
+	if (matrix) {
+		var tm = this.matrix;
+		this.rawNode.setAttribute("transform", "matrix(" + tm.xx.toFixed(8) + "," + tm.yx.toFixed(8) + "," + tm.xy.toFixed(8) + "," + tm.yy.toFixed(8) + "," + tm.dx.toFixed(8) + "," + tm.dy.toFixed(8) + ")");
+	} else {
+		this.rawNode.removeAttribute("transform");
+	}
+	return this;
+}, setRawNode:function (rawNode) {
+	with (rawNode) {
+		setAttribute("fill", "none");
+		setAttribute("fill-opacity", 0);
+		setAttribute("stroke", "none");
+		setAttribute("stroke-opacity", 0);
+		setAttribute("stroke-width", 1);
+		setAttribute("stroke-linecap", "butt");
+		setAttribute("stroke-linejoin", "miter");
+		setAttribute("stroke-miterlimit", 4);
+	}
+	this.rawNode = rawNode;
+}, moveToFront:function () {
+	this.rawNode.parentNode.appendChild(this.rawNode);
+	return this;
+}, moveToBack:function () {
+	this.rawNode.parentNode.insertBefore(this.rawNode, this.rawNode.parentNode.firstChild);
+	return this;
+}, setShape:function (newShape) {
+	this.shape = dojo.gfx.makeParameters(this.shape, newShape);
+	for (var i in this.shape) {
+		if (i != "type") {
+			this.rawNode.setAttribute(i, this.shape[i]);
 		}
-		this.rawNode = rawNode;
-	},
-
-	moveToFront: function(){
-		// summary: moves a shape to front of its parent's list of shapes (SVG)
-		this.rawNode.parentNode.appendChild(this.rawNode);
-		return this;	// self
-	},
-	moveToBack: function(){
-		// summary: moves a shape to back of its parent's list of shapes (SVG)
-		this.rawNode.parentNode.insertBefore(this.rawNode, this.rawNode.parentNode.firstChild);
-		return this;	// self
-	},
-	
-	setShape: function(newShape){
-		// summary: sets a shape object (SVG)
-		// newShape: Object: a shape object
-		//	(see dojo.gfx.defaultPath,
-		//	dojo.gfx.defaultPolyline,
-		//	dojo.gfx.defaultRect,
-		//	dojo.gfx.defaultEllipse,
-		//	dojo.gfx.defaultCircle,
-		//	dojo.gfx.defaultLine,
-		//	or dojo.gfx.defaultImage)
-		this.shape = dojo.gfx.makeParameters(this.shape, newShape);
-		for(var i in this.shape){
-			if(i != "type"){ this.rawNode.setAttribute(i, this.shape[i]); }
+	}
+	return this;
+}, attachFill:function (rawNode) {
+	var fillStyle = null;
+	if (rawNode) {
+		var fill = rawNode.getAttribute("fill");
+		if (fill == "none") {
+			return;
 		}
-		return this;	// self
-	},
-	
-	attachFill: function(rawNode){
-		// summary: deduces a fill style from a Node.
-		// rawNode: Node: an SVG node
-		var fillStyle = null;
-		if(rawNode){
-			var fill = rawNode.getAttribute("fill");
-			if(fill == "none"){ return; }
-			var ref  = dojo.gfx.svg.getRef(fill);
-			if(ref){
-				var gradient = ref;
-				switch(gradient.tagName.toLowerCase()){
-					case "lineargradient":
-						fillStyle = this._getGradient(dojo.gfx.defaultLinearGradient, gradient);
-						dojo.lang.forEach(["x1", "y1", "x2", "y2"], function(x){
-							fillStyle[x] = gradient.getAttribute(x);
-						});
-						break;
-					case "radialgradient":
-						fillStyle = this._getGradient(dojo.gfx.defaultRadialGradient, gradient);
-						dojo.lang.forEach(["cx", "cy", "r"], function(x){
-							fillStyle[x] = gradient.getAttribute(x);
-						});
-						fillStyle.cx = gradient.getAttribute("cx");
-						fillStyle.cy = gradient.getAttribute("cy");
-						fillStyle.r  = gradient.getAttribute("r");
-						break;
-					case "pattern":
-						fillStyle = dojo.lang.shallowCopy(dojo.gfx.defaultPattern, true);
-						dojo.lang.forEach(["x", "y", "width", "height"], function(x){
-							fillStyle[x] = gradient.getAttribute(x);
-						});
-						fillStyle.src = gradient.firstChild.getAttributeNS(dojo.svg.xmlns.xlink, "href");
-						break;
-				}
-			}else{
-				fillStyle = new dojo.gfx.color.Color(fill);
-				var opacity = rawNode.getAttribute("fill-opacity");
-				if(opacity != null) fillStyle.a = opacity;
+		var ref = dojo.gfx.svg.getRef(fill);
+		if (ref) {
+			var gradient = ref;
+			switch (gradient.tagName.toLowerCase()) {
+			  case "lineargradient":
+				fillStyle = this._getGradient(dojo.gfx.defaultLinearGradient, gradient);
+				dojo.lang.forEach(["x1", "y1", "x2", "y2"], function (x) {
+					fillStyle[x] = gradient.getAttribute(x);
+				});
+				break;
+			  case "radialgradient":
+				fillStyle = this._getGradient(dojo.gfx.defaultRadialGradient, gradient);
+				dojo.lang.forEach(["cx", "cy", "r"], function (x) {
+					fillStyle[x] = gradient.getAttribute(x);
+				});
+				fillStyle.cx = gradient.getAttribute("cx");
+				fillStyle.cy = gradient.getAttribute("cy");
+				fillStyle.r = gradient.getAttribute("r");
+				break;
+			  case "pattern":
+				fillStyle = dojo.lang.shallowCopy(dojo.gfx.defaultPattern, true);
+				dojo.lang.forEach(["x", "y", "width", "height"], function (x) {
+					fillStyle[x] = gradient.getAttribute(x);
+				});
+				fillStyle.src = gradient.firstChild.getAttributeNS(dojo.svg.xmlns.xlink, "href");
+				break;
 			}
-		}
-		return fillStyle;	// Object
-	},
-	
-	_getGradient: function(defaultGradient, gradient){
-		var fillStyle = dojo.lang.shallowCopy(defaultGradient, true);
-		fillStyle.colors = [];
-		for(var i = 0; i < gradient.childNodes.length; ++i){
-			fillStyle.colors.push({
-				offset: gradient.childNodes[i].getAttribute("offset"),
-				color:  new dojo.gfx.color.Color(gradient.childNodes[i].getAttribute("stop-color"))
-			});
-		}
-		return fillStyle;
-	},
-
-	attachStroke: function(rawNode){
-		// summary: deduces a stroke style from a Node.
-		// rawNode: Node: an SVG node
-		if(!rawNode){ return; }
-		var stroke = rawNode.getAttribute("stroke");
-		if(stroke == null || stroke == "none") return null;
-		var strokeStyle = dojo.lang.shallowCopy(dojo.gfx.defaultStroke, true);
-		var color = new dojo.gfx.color.Color(stroke);
-		if(color){
-			strokeStyle.color = color;
-			strokeStyle.color.a = rawNode.getAttribute("stroke-opacity");
-			strokeStyle.width = rawNode.getAttribute("stroke-width");
-			strokeStyle.cap = rawNode.getAttribute("stroke-linecap");
-			strokeStyle.join = rawNode.getAttribute("stroke-linejoin");
-			if(strokeStyle.join == "miter"){
-				strokeStyle.join = rawNode.getAttribute("stroke-miterlimit");
+		} else {
+			fillStyle = new dojo.gfx.color.Color(fill);
+			var opacity = rawNode.getAttribute("fill-opacity");
+			if (opacity != null) {
+				fillStyle.a = opacity;
 			}
 		}
-		return strokeStyle;	// Object
-	},
-
-	attachTransform: function(rawNode){
-		// summary: deduces a transformation matrix from a Node.
-		// rawNode: Node: an SVG node
-		var matrix = null;
-		if(rawNode){
-			matrix = rawNode.getAttribute("transform");
-			if(matrix.match(/^matrix\(.+\)$/)){
-				var t = matrix.slice(7, -1).split(",");
-				matrix = dojo.gfx.matrix.normalize({
-					xx: parseFloat(t[0]), xy: parseFloat(t[2]), 
-					yx: parseFloat(t[1]), yy: parseFloat(t[3]), 
-					dx: parseFloat(t[4]), dy: parseFloat(t[5])
-				});
-			}
+	}
+	return fillStyle;
+}, _getGradient:function (defaultGradient, gradient) {
+	var fillStyle = dojo.lang.shallowCopy(defaultGradient, true);
+	fillStyle.colors = [];
+	for (var i = 0; i < gradient.childNodes.length; ++i) {
+		fillStyle.colors.push({offset:gradient.childNodes[i].getAttribute("offset"), color:new dojo.gfx.color.Color(gradient.childNodes[i].getAttribute("stop-color"))});
+	}
+	return fillStyle;
+}, attachStroke:function (rawNode) {
+	if (!rawNode) {
+		return;
+	}
+	var stroke = rawNode.getAttribute("stroke");
+	if (stroke == null || stroke == "none") {
+		return null;
+	}
+	var strokeStyle = dojo.lang.shallowCopy(dojo.gfx.defaultStroke, true);
+	var color = new dojo.gfx.color.Color(stroke);
+	if (color) {
+		strokeStyle.color = color;
+		strokeStyle.color.a = rawNode.getAttribute("stroke-opacity");
+		strokeStyle.width = rawNode.getAttribute("stroke-width");
+		strokeStyle.cap = rawNode.getAttribute("stroke-linecap");
+		strokeStyle.join = rawNode.getAttribute("stroke-linejoin");
+		if (strokeStyle.join == "miter") {
+			strokeStyle.join = rawNode.getAttribute("stroke-miterlimit");
 		}
-		return matrix;	// dojo.gfx.matrix.Matrix
-	},
-	
-	attachShape: function(rawNode){
-		// summary: builds a shape from a Node.
-		// rawNode: Node: an SVG node
-		var shape = null;
-		if(rawNode){
-			shape = dojo.lang.shallowCopy(this.shape, true);
-			for(var i in shape) {
-				shape[i] = rawNode.getAttribute(i);
-			}
+	}
+	return strokeStyle;
+}, attachTransform:function (rawNode) {
+	var matrix = null;
+	if (rawNode) {
+		matrix = rawNode.getAttribute("transform");
+		if (matrix.match(/^matrix\(.+\)$/)) {
+			var t = matrix.slice(7, -1).split(",");
+			matrix = dojo.gfx.matrix.normalize({xx:parseFloat(t[0]), xy:parseFloat(t[2]), yx:parseFloat(t[1]), yy:parseFloat(t[3]), dx:parseFloat(t[4]), dy:parseFloat(t[5])});
 		}
-		return shape;	// dojo.gfx.Shape
-	},
-
-	attach: function(rawNode){
-		// summary: reconstructs all shape parameters from a Node.
-		// rawNode: Node: an SVG node
-		if(rawNode) {
-			this.rawNode = rawNode;
-			this.fillStyle = this.attachFill(rawNode);
-			this.strokeStyle = this.attachStroke(rawNode);
-			this.matrix = this.attachTransform(rawNode);
-			this.shape = this.attachShape(rawNode);
+	}
+	return matrix;
+}, attachShape:function (rawNode) {
+	var shape = null;
+	if (rawNode) {
+		shape = dojo.lang.shallowCopy(this.shape, true);
+		for (var i in shape) {
+			shape[i] = rawNode.getAttribute(i);
 		}
 	}
-});
-
-dojo.declare("dojo.gfx.Group", dojo.gfx.Shape, {
-	// summary: a group shape (SVG), which can be used 
-	//	to logically group shapes (e.g, to propagate matricies)
-
-	setRawNode: function(rawNode){
-		// summary: sets a raw SVG node to be used by this shape
-		// rawNode: Node: an SVG node
+	return shape;
+}, attach:function (rawNode) {
+	if (rawNode) {
 		this.rawNode = rawNode;
+		this.fillStyle = this.attachFill(rawNode);
+		this.strokeStyle = this.attachStroke(rawNode);
+		this.matrix = this.attachTransform(rawNode);
+		this.shape = this.attachShape(rawNode);
 	}
-});
+}});
+dojo.declare("dojo.gfx.Group", dojo.gfx.Shape, {setRawNode:function (rawNode) {
+	this.rawNode = rawNode;
+}});
 dojo.gfx.Group.nodeType = "g";
-
-dojo.declare("dojo.gfx.Rect", dojo.gfx.shape.Rect, {
-	// summary: a rectangle shape (SVG)
-
-	attachShape: function(rawNode){
-		// summary: builds a rectangle shape from a Node.
-		// rawNode: Node: an SVG node
-		var shape = null;
-		if(rawNode){
-			shape = dojo.gfx.Rect.superclass.attachShape.apply(this, arguments);
-			shape.r = Math.min(rawNode.getAttribute("rx"), rawNode.getAttribute("ry"));
+dojo.declare("dojo.gfx.Rect", dojo.gfx.shape.Rect, {attachShape:function (rawNode) {
+	var shape = null;
+	if (rawNode) {
+		shape = dojo.gfx.Rect.superclass.attachShape.apply(this, arguments);
+		shape.r = Math.min(rawNode.getAttribute("rx"), rawNode.getAttribute("ry"));
+	}
+	return shape;
+}, setShape:function (newShape) {
+	this.shape = dojo.gfx.makeParameters(this.shape, newShape);
+	this.bbox = null;
+	for (var i in this.shape) {
+		if (i != "type" && i != "r") {
+			this.rawNode.setAttribute(i, this.shape[i]);
 		}
-		return shape;	// dojo.gfx.shape.Rect
-	},
-	setShape: function(newShape){
-		// summary: sets a rectangle shape object (SVG)
-		// newShape: Object: a rectangle shape object
-		this.shape = dojo.gfx.makeParameters(this.shape, newShape);
-		this.bbox = null;
-		for(var i in this.shape){
-			if(i != "type" && i != "r"){ this.rawNode.setAttribute(i, this.shape[i]); }
-		}
-		this.rawNode.setAttribute("rx", this.shape.r);
-		this.rawNode.setAttribute("ry", this.shape.r);
-		return this;	// self
 	}
-});
+	this.rawNode.setAttribute("rx", this.shape.r);
+	this.rawNode.setAttribute("ry", this.shape.r);
+	return this;
+}});
 dojo.gfx.Rect.nodeType = "rect";
-
 dojo.gfx.Ellipse = dojo.gfx.shape.Ellipse;
 dojo.gfx.Ellipse.nodeType = "ellipse";
-
 dojo.gfx.Circle = dojo.gfx.shape.Circle;
 dojo.gfx.Circle.nodeType = "circle";
-
 dojo.gfx.Line = dojo.gfx.shape.Line;
 dojo.gfx.Line.nodeType = "line";
-
-dojo.declare("dojo.gfx.Polyline", dojo.gfx.shape.Polyline, {
-	// summary: a polyline/polygon shape (SVG)
-	
-	setShape: function(points){
-		// summary: sets a polyline/polygon shape object (SVG)
-		// points: Object: a polyline/polygon shape object
-		if(points && points instanceof Array){
-			// branch
-			// points: Array: an array of points
-			this.shape = dojo.gfx.makeParameters(this.shape, { points: points });
-			if(closed && this.shape.points.length){ 
-				this.shape.points.push(this.shape.points[0]);
-			}
-		}else{
-			this.shape = dojo.gfx.makeParameters(this.shape, points);
+dojo.declare("dojo.gfx.Polyline", dojo.gfx.shape.Polyline, {setShape:function (points) {
+	if (points && points instanceof Array) {
+		this.shape = dojo.gfx.makeParameters(this.shape, {points:points});
+		if (closed && this.shape.points.length) {
+			this.shape.points.push(this.shape.points[0]);
 		}
-		this.box = null;
-		var attr = [];
-		var p = this.shape.points;
-		for(var i = 0; i < p.length; ++i){
-			attr.push(p[i].x.toFixed(8));
-			attr.push(p[i].y.toFixed(8));
-		}
-		this.rawNode.setAttribute("points", attr.join(" "));
-		return this;	// self
+	} else {
+		this.shape = dojo.gfx.makeParameters(this.shape, points);
 	}
-});
+	this.box = null;
+	var attr = [];
+	var p = this.shape.points;
+	for (var i = 0; i < p.length; ++i) {
+		attr.push(p[i].x.toFixed(8));
+		attr.push(p[i].y.toFixed(8));
+	}
+	this.rawNode.setAttribute("points", attr.join(" "));
+	return this;
+}});
 dojo.gfx.Polyline.nodeType = "polyline";
-
-dojo.declare("dojo.gfx.Image", dojo.gfx.shape.Image, {
-	// summary: an image (SVG)
-
-	setShape: function(newShape){
-		// summary: sets an image shape object (SVG)
-		// newShape: Object: an image shape object
-		this.shape = dojo.gfx.makeParameters(this.shape, newShape);
-		this.bbox = null;
-		var rawNode = this.rawNode;
-		for(var i in this.shape){
-			if(i != "type" && i != "src"){ rawNode.setAttribute(i, this.shape[i]); }
+dojo.declare("dojo.gfx.Image", dojo.gfx.shape.Image, {setShape:function (newShape) {
+	this.shape = dojo.gfx.makeParameters(this.shape, newShape);
+	this.bbox = null;
+	var rawNode = this.rawNode;
+	for (var i in this.shape) {
+		if (i != "type" && i != "src") {
+			rawNode.setAttribute(i, this.shape[i]);
 		}
-		rawNode.setAttributeNS(dojo.svg.xmlns.xlink, "href", this.shape.src);
-		return this;	// self
-	},
-	setStroke: function(){
-		// summary: ignore setting a stroke style
-		return this;	// self
-	},
-	setFill: function(){
-		// summary: ignore setting a fill style
-		return this;	// self
-	},
-	attachStroke: function(rawNode){
-		// summary: ignore attaching a stroke style
-		return null;
-	},
-	attachFill: function(rawNode){
-		// summary: ignore attaching a fill style
-		return null;
 	}
-});
+	rawNode.setAttributeNS(dojo.svg.xmlns.xlink, "href", this.shape.src);
+	return this;
+}, setStroke:function () {
+	return this;
+}, setFill:function () {
+	return this;
+}, attachStroke:function (rawNode) {
+	return null;
+}, attachFill:function (rawNode) {
+	return null;
+}});
 dojo.gfx.Image.nodeType = "image";
-
-dojo.declare("dojo.gfx.Path", dojo.gfx.path.Path, {
-	// summary: a path shape (SVG)
-
-	_updateWithSegment: function(segment){
-		// summary: updates the bounding box of path with new segment
-		// segment: Object: a segment
-		dojo.gfx.Path.superclass._updateWithSegment.apply(this, arguments);
-		if(typeof(this.shape.path) == "string"){
-			this.rawNode.setAttribute("d", this.shape.path);
-		}
-	},
-	setShape: function(newShape){
-		// summary: forms a path using a shape (SVG)
-		// newShape: Object: an SVG path string or a path object (see dojo.gfx.defaultPath)
-		dojo.gfx.Path.superclass.setShape.apply(this, arguments);
+dojo.declare("dojo.gfx.Path", dojo.gfx.path.Path, {_updateWithSegment:function (segment) {
+	dojo.gfx.Path.superclass._updateWithSegment.apply(this, arguments);
+	if (typeof (this.shape.path) == "string") {
 		this.rawNode.setAttribute("d", this.shape.path);
-		return this;	// self
 	}
-});
+}, setShape:function (newShape) {
+	dojo.gfx.Path.superclass.setShape.apply(this, arguments);
+	this.rawNode.setAttribute("d", this.shape.path);
+	return this;
+}});
 dojo.gfx.Path.nodeType = "path";
-
-dojo.gfx._creators = {
-	// summary: SVG shape creators
-	createPath: function(path){
-		// summary: creates an SVG path shape
-		// path: Object: a path object (see dojo.gfx.defaultPath)
-		return this.createObject(dojo.gfx.Path, path);	// dojo.gfx.Path
-	},
-	createRect: function(rect){
-		// summary: creates an SVG rectangle shape
-		// rect: Object: a path object (see dojo.gfx.defaultRect)
-		return this.createObject(dojo.gfx.Rect, rect);	// dojo.gfx.Rect
-	},
-	createCircle: function(circle){
-		// summary: creates an SVG circle shape
-		// circle: Object: a circle object (see dojo.gfx.defaultCircle)
-		return this.createObject(dojo.gfx.Circle, circle);	// dojo.gfx.Circle
-	},
-	createEllipse: function(ellipse){
-		// summary: creates an SVG ellipse shape
-		// ellipse: Object: an ellipse object (see dojo.gfx.defaultEllipse)
-		return this.createObject(dojo.gfx.Ellipse, ellipse);	// dojo.gfx.Ellipse
-	},
-	createLine: function(line){
-		// summary: creates an SVG line shape
-		// line: Object: a line object (see dojo.gfx.defaultLine)
-		return this.createObject(dojo.gfx.Line, line);	// dojo.gfx.Line
-	},
-	createPolyline: function(points){
-		// summary: creates an SVG polyline/polygon shape
-		// points: Object: a points object (see dojo.gfx.defaultPolyline)
-		//	or an Array of points
-		return this.createObject(dojo.gfx.Polyline, points);	// dojo.gfx.Polyline
-	},
-	createImage: function(image){
-		// summary: creates an SVG image shape
-		// image: Object: an image object (see dojo.gfx.defaultImage)
-		return this.createObject(dojo.gfx.Image, image);	// dojo.gfx.Image
-	},
-	createGroup: function(){
-		// summary: creates an SVG group shape
-		return this.createObject(dojo.gfx.Group);	// dojo.gfx.Group
-	},
-	createObject: function(shapeType, rawShape){
-		// summary: creates an instance of the passed shapeType class
-		// shapeType: Function: a class constructor to create an instance of
-		// rawShape: Object: properties to be passed in to the classes "setShape" method
-		if(!this.rawNode){ return null; }
-		var shape = new shapeType();
-		var node = document.createElementNS(dojo.svg.xmlns.svg, shapeType.nodeType); 
-		shape.setRawNode(node);
-		this.rawNode.appendChild(node);
-		shape.setShape(rawShape);
-		this.add(shape);
-		return shape;	// dojo.gfx.Shape
-	},
-	// group control
-	add: function(shape){
-		// summary: adds a shape to a group/surface
-		// shape: dojo.gfx.Shape: an SVG shape object
-		var oldParent = shape.getParent();
-		if(oldParent){
-			oldParent.remove(shape, true);
-		}
-		shape._setParent(this, null);
-		this.rawNode.appendChild(shape.rawNode);
-		return this;	// self
-	},
-	remove: function(shape, silently){
-		// summary: remove a shape from a group/surface
-		// shape: dojo.gfx.Shape: an SVG shape object
-		// silently: Boolean?: if true, regenerate a picture
-		if(this.rawNode == shape.rawNode.parentNode){
-			this.rawNode.removeChild(shape.rawNode);
-		}
-		shape._setParent(null, null);
-		return this;	// self
+dojo.gfx._creators = {createPath:function (path) {
+	return this.createObject(dojo.gfx.Path, path);
+}, createRect:function (rect) {
+	return this.createObject(dojo.gfx.Rect, rect);
+}, createCircle:function (circle) {
+	return this.createObject(dojo.gfx.Circle, circle);
+}, createEllipse:function (ellipse) {
+	return this.createObject(dojo.gfx.Ellipse, ellipse);
+}, createLine:function (line) {
+	return this.createObject(dojo.gfx.Line, line);
+}, createPolyline:function (points) {
+	return this.createObject(dojo.gfx.Polyline, points);
+}, createImage:function (image) {
+	return this.createObject(dojo.gfx.Image, image);
+}, createGroup:function () {
+	return this.createObject(dojo.gfx.Group);
+}, createObject:function (shapeType, rawShape) {
+	if (!this.rawNode) {
+		return null;
 	}
-};
-
-dojo.gfx.attachNode = function(node){
-	// summary: creates a shape from a Node
-	// node: Node: an SVG node
-	if(!node) return null;
+	var shape = new shapeType();
+	var node = document.createElementNS(dojo.svg.xmlns.svg, shapeType.nodeType);
+	shape.setRawNode(node);
+	this.rawNode.appendChild(node);
+	shape.setShape(rawShape);
+	this.add(shape);
+	return shape;
+}, add:function (shape) {
+	var oldParent = shape.getParent();
+	if (oldParent) {
+		oldParent.remove(shape, true);
+	}
+	shape._setParent(this, null);
+	this.rawNode.appendChild(shape.rawNode);
+	return this;
+}, remove:function (shape, silently) {
+	if (this.rawNode == shape.rawNode.parentNode) {
+		this.rawNode.removeChild(shape.rawNode);
+	}
+	shape._setParent(null, null);
+	return this;
+}};
+dojo.gfx.attachNode = function (node) {
+	if (!node) {
+		return null;
+	}
 	var s = null;
-	switch(node.tagName.toLowerCase()){
-		case dojo.gfx.Rect.nodeType:
-			s = new dojo.gfx.Rect();
-			break;
-		case dojo.gfx.Ellipse.nodeType:
-			s = new dojo.gfx.Ellipse();
-			break;
-		case dojo.gfx.Polyline.nodeType:
-			s = new dojo.gfx.Polyline();
-			break;
-		case dojo.gfx.Path.nodeType:
-			s = new dojo.gfx.Path();
-			break;
-		case dojo.gfx.Circle.nodeType:
-			s = new dojo.gfx.Circle();
-			break;
-		case dojo.gfx.Line.nodeType:
-			s = new dojo.gfx.Line();
-			break;
-		case dojo.gfx.Image.nodeType:
-			s = new dojo.gfx.Image();
-			break;
-		default:
-			dojo.debug("FATAL ERROR! tagName = " + node.tagName);
+	switch (node.tagName.toLowerCase()) {
+	  case dojo.gfx.Rect.nodeType:
+		s = new dojo.gfx.Rect();
+		break;
+	  case dojo.gfx.Ellipse.nodeType:
+		s = new dojo.gfx.Ellipse();
+		break;
+	  case dojo.gfx.Polyline.nodeType:
+		s = new dojo.gfx.Polyline();
+		break;
+	  case dojo.gfx.Path.nodeType:
+		s = new dojo.gfx.Path();
+		break;
+	  case dojo.gfx.Circle.nodeType:
+		s = new dojo.gfx.Circle();
+		break;
+	  case dojo.gfx.Line.nodeType:
+		s = new dojo.gfx.Line();
+		break;
+	  case dojo.gfx.Image.nodeType:
+		s = new dojo.gfx.Image();
+		break;
+	  default:
+		dojo.debug("FATAL ERROR! tagName = " + node.tagName);
 	}
 	s.attach(node);
-	return s;	// dojo.gfx.Shape
+	return s;
 };
-
-dojo.lang.extend(dojo.gfx.Surface, {
-	// summary: a surface object to be used for drawings (SVG)
-
-	setDimensions: function(width, height){
-		// summary: sets the width and height of the rawNode
-		// width: String: width of surface, e.g., "100px"
-		// height: String: height of surface, e.g., "100px"
-		if(!this.rawNode){ return this; }
-		this.rawNode.setAttribute("width",  width);
-		this.rawNode.setAttribute("height", height);
-		return this;	// self
-	},
-	getDimensions: function(){
-		// summary: returns an object with properties "width" and "height"
-		return this.rawNode ? {width: this.rawNode.getAttribute("width"), height: this.rawNode.getAttribute("height")} : null; // Object
+dojo.lang.extend(dojo.gfx.Surface, {setDimensions:function (width, height) {
+	if (!this.rawNode) {
+		return this;
 	}
-});
-
-dojo.gfx.createSurface = function(parentNode, width, height){
-	// summary: creates a surface (SVG)
-	// parentNode: Node: a parent node
-	// width: String: width of surface, e.g., "100px"
-	// height: String: height of surface, e.g., "100px"
-
+	this.rawNode.setAttribute("width", width);
+	this.rawNode.setAttribute("height", height);
+	return this;
+}, getDimensions:function () {
+	return this.rawNode ? {width:this.rawNode.getAttribute("width"), height:this.rawNode.getAttribute("height")} : null;
+}});
+dojo.gfx.createSurface = function (parentNode, width, height) {
 	var s = new dojo.gfx.Surface();
 	s.rawNode = document.createElementNS(dojo.svg.xmlns.svg, "svg");
-	s.rawNode.setAttribute("width",  width);
+	s.rawNode.setAttribute("width", width);
 	s.rawNode.setAttribute("height", height);
-
 	var defs = new dojo.gfx.svg.Defines();
-	var node = document.createElementNS(dojo.svg.xmlns.svg, dojo.gfx.svg.Defines.nodeType); 
+	var node = document.createElementNS(dojo.svg.xmlns.svg, dojo.gfx.svg.Defines.nodeType);
 	defs.setRawNode(node);
 	s.rawNode.appendChild(node);
-	
 	dojo.byId(parentNode).appendChild(s.rawNode);
-	return s;	// dojo.gfx.Surface
+	return s;
 };
-
-dojo.gfx.attachSurface = function(node){
-	// summary: creates a surface from a Node
-	// node: Node: an SVG node
+dojo.gfx.attachSurface = function (node) {
 	var s = new dojo.gfx.Surface();
 	s.rawNode = node;
-	return s;	// dojo.gfx.Surface
+	return s;
 };
-
 dojo.lang.extend(dojo.gfx.Group, dojo.gfx._creators);
 dojo.lang.extend(dojo.gfx.Surface, dojo.gfx._creators);
-
 delete dojo.gfx._creators;
-
-// Gradient and pattern
-
-dojo.gfx.svg.Defines = function(){
+dojo.gfx.svg.Defines = function () {
 	this.rawNode = null;
 };
-dojo.lang.extend(dojo.gfx.svg.Defines, {
-	setRawNode: function(rawNode){
-		this.rawNode = rawNode;
-	}
-});
+dojo.lang.extend(dojo.gfx.svg.Defines, {setRawNode:function (rawNode) {
+	this.rawNode = rawNode;
+}});
 dojo.gfx.svg.Defines.nodeType = "defs";
 
+
 __CPAN_FILE__ src/gfx/color.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -91668,177 +64102,142 @@
 dojo.provide("dojo.gfx.color");
 dojo.require("dojo.lang.common");
 dojo.require("dojo.lang.array");
-
-// TODO: rewrite the "x2y" methods to take advantage of the parsing
-//       abilities of the Color object. Also, beef up the Color
-//       object (as possible) to parse most common formats
-
-// takes an r, g, b, a(lpha) value, [r, g, b, a] array, "rgb(...)" string, hex string (#aaa, #aaaaaa, aaaaaaa)
-dojo.gfx.color.Color = function(r, g, b, a) {
-	// dojo.debug("r:", r[0], "g:", r[1], "b:", r[2]);
-	if(dojo.lang.isArray(r)){
+dojo.gfx.color.Color = function (r, g, b, a) {
+	if (dojo.lang.isArray(r)) {
 		this.r = r[0];
 		this.g = r[1];
 		this.b = r[2];
-		this.a = r[3]||1.0;
-	}else if(dojo.lang.isString(r)){
-		var rgb = dojo.gfx.color.extractRGB(r);
-		this.r = rgb[0];
-		this.g = rgb[1];
-		this.b = rgb[2];
-		this.a = g||1.0;
-	}else if(r instanceof dojo.gfx.color.Color){
-		// why does this create a new instance if we were passed one?
-		this.r = r.r;
-		this.b = r.b;
-		this.g = r.g;
-		this.a = r.a;
-	}else{
-		this.r = r;
-		this.g = g;
-		this.b = b;
-		this.a = a;
-	}
-}
-
-dojo.gfx.color.Color.fromArray = function(arr) {
-	return new dojo.gfx.color.Color(arr[0], arr[1], arr[2], arr[3]);
-}
-
-dojo.extend(dojo.gfx.color.Color, {
-	toRgb: function(includeAlpha) {
-		if(includeAlpha) {
-			return this.toRgba();
+		this.a = r[3] || 1;
+	} else {
+		if (dojo.lang.isString(r)) {
+			var rgb = dojo.gfx.color.extractRGB(r);
+			this.r = rgb[0];
+			this.g = rgb[1];
+			this.b = rgb[2];
+			this.a = g || 1;
 		} else {
-			return [this.r, this.g, this.b];
+			if (r instanceof dojo.gfx.color.Color) {
+				this.r = r.r;
+				this.b = r.b;
+				this.g = r.g;
+				this.a = r.a;
+			} else {
+				this.r = r;
+				this.g = g;
+				this.b = b;
+				this.a = a;
+			}
 		}
-	},
-	toRgba: function() {
-		return [this.r, this.g, this.b, this.a];
-	},
-	toHex: function() {
-		return dojo.gfx.color.rgb2hex(this.toRgb());
-	},
-	toCss: function() {
-		return "rgb(" + this.toRgb().join() + ")";
-	},
-	toString: function() {
-		return this.toHex(); // decent default?
-	},
-	blend: function(color, weight){
-		var rgb = null;
-		if(dojo.lang.isArray(color)){
-			rgb = color;
-		}else if(color instanceof dojo.gfx.color.Color){
+	}
+};
+dojo.gfx.color.Color.fromArray = function (arr) {
+	return new dojo.gfx.color.Color(arr[0], arr[1], arr[2], arr[3]);
+};
+dojo.extend(dojo.gfx.color.Color, {toRgb:function (includeAlpha) {
+	if (includeAlpha) {
+		return this.toRgba();
+	} else {
+		return [this.r, this.g, this.b];
+	}
+}, toRgba:function () {
+	return [this.r, this.g, this.b, this.a];
+}, toHex:function () {
+	return dojo.gfx.color.rgb2hex(this.toRgb());
+}, toCss:function () {
+	return "rgb(" + this.toRgb().join() + ")";
+}, toString:function () {
+	return this.toHex();
+}, blend:function (color, weight) {
+	var rgb = null;
+	if (dojo.lang.isArray(color)) {
+		rgb = color;
+	} else {
+		if (color instanceof dojo.gfx.color.Color) {
 			rgb = color.toRgb();
-		}else{
+		} else {
 			rgb = new dojo.gfx.color.Color(color).toRgb();
 		}
-		return dojo.gfx.color.blend(this.toRgb(), rgb, weight);
 	}
-});
-
-dojo.gfx.color.named = {
-	white:      [255,255,255],
-	black:      [0,0,0],
-	red:        [255,0,0],
-	green:	    [0,255,0],
-	lime:	    [0,255,0],
-	blue:       [0,0,255],
-	navy:       [0,0,128],
-	gray:       [128,128,128],
-	silver:     [192,192,192]
-};
-
-dojo.gfx.color.blend = function(a, b, weight){
-	// summary: 
-	//		blend colors a and b (both as RGB array or hex strings) with weight
-	//		from -1 to +1, 0 being a 50/50 blend
-	if(typeof a == "string"){
+	return dojo.gfx.color.blend(this.toRgb(), rgb, weight);
+}});
+dojo.gfx.color.named = {white:[255, 255, 255], black:[0, 0, 0], red:[255, 0, 0], green:[0, 255, 0], lime:[0, 255, 0], blue:[0, 0, 255], navy:[0, 0, 128], gray:[128, 128, 128], silver:[192, 192, 192]};
+dojo.gfx.color.blend = function (a, b, weight) {
+	if (typeof a == "string") {
 		return dojo.gfx.color.blendHex(a, b, weight);
 	}
-	if(!weight){
+	if (!weight) {
 		weight = 0;
 	}
 	weight = Math.min(Math.max(-1, weight), 1);
-
-	// alex: this interface blows.
-	// map -1 to 1 to the range 0 to 1
-	weight = ((weight + 1)/2);
-	
+	weight = ((weight + 1) / 2);
 	var c = [];
-
-	// var stop = (1000*weight);
-	for(var x = 0; x < 3; x++){
-		c[x] = parseInt( b[x] + ( (a[x] - b[x]) * weight) );
+	for (var x = 0; x < 3; x++) {
+		c[x] = parseInt(b[x] + ((a[x] - b[x]) * weight));
 	}
 	return c;
-}
-
-// very convenient blend that takes and returns hex values
-// (will get called automatically by blend when blend gets strings)
-dojo.gfx.color.blendHex = function(a, b, weight) {
+};
+dojo.gfx.color.blendHex = function (a, b, weight) {
 	return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a), dojo.gfx.color.hex2rgb(b), weight));
-}
-
-// get RGB array from css-style color declarations
-dojo.gfx.color.extractRGB = function(color) {
+};
+dojo.gfx.color.extractRGB = function (color) {
 	var hex = "0123456789abcdef";
 	color = color.toLowerCase();
-	if( color.indexOf("rgb") == 0 ) {
+	if (color.indexOf("rgb") == 0) {
 		var matches = color.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
 		var ret = matches.splice(1, 3);
 		return ret;
 	} else {
 		var colors = dojo.gfx.color.hex2rgb(color);
-		if(colors) {
+		if (colors) {
 			return colors;
 		} else {
-			// named color (how many do we support?)
 			return dojo.gfx.color.named[color] || [255, 255, 255];
 		}
 	}
-}
-
-dojo.gfx.color.hex2rgb = function(hex) {
+};
+dojo.gfx.color.hex2rgb = function (hex) {
 	var hexNum = "0123456789ABCDEF";
 	var rgb = new Array(3);
-	if( hex.indexOf("#") == 0 ) { hex = hex.substring(1); }
+	if (hex.indexOf("#") == 0) {
+		hex = hex.substring(1);
+	}
 	hex = hex.toUpperCase();
-	if(hex.replace(new RegExp("["+hexNum+"]", "g"), "") != "") {
+	if (hex.replace(new RegExp("[" + hexNum + "]", "g"), "") != "") {
 		return null;
 	}
-	if( hex.length == 3 ) {
-		rgb[0] = hex.charAt(0) + hex.charAt(0)
-		rgb[1] = hex.charAt(1) + hex.charAt(1)
+	if (hex.length == 3) {
+		rgb[0] = hex.charAt(0) + hex.charAt(0);
+		rgb[1] = hex.charAt(1) + hex.charAt(1);
 		rgb[2] = hex.charAt(2) + hex.charAt(2);
 	} else {
 		rgb[0] = hex.substring(0, 2);
 		rgb[1] = hex.substring(2, 4);
 		rgb[2] = hex.substring(4);
 	}
-	for(var i = 0; i < rgb.length; i++) {
+	for (var i = 0; i < rgb.length; i++) {
 		rgb[i] = hexNum.indexOf(rgb[i].charAt(0)) * 16 + hexNum.indexOf(rgb[i].charAt(1));
 	}
 	return rgb;
-}
-
-dojo.gfx.color.rgb2hex = function(r, g, b) {
-	if(dojo.lang.isArray(r)) {
+};
+dojo.gfx.color.rgb2hex = function (r, g, b) {
+	if (dojo.lang.isArray(r)) {
 		g = r[1] || 0;
 		b = r[2] || 0;
 		r = r[0] || 0;
 	}
-	var ret = dojo.lang.map([r, g, b], function(x) {
+	var ret = dojo.lang.map([r, g, b], function (x) {
 		x = new Number(x);
 		var s = x.toString(16);
-		while(s.length < 2) { s = "0" + s; }
+		while (s.length < 2) {
+			s = "0" + s;
+		}
 		return s;
 	});
 	ret.unshift("#");
 	return ret.join("");
-}
+};
 
+
 __CPAN_FILE__ src/gfx/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -91850,19 +64249,12 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: [
-		"dojo.gfx.color",
-		"dojo.gfx.matrix",
-		"dojo.gfx.common"
-	]
-});
-
-// include a renderer conditionally
+dojo.kwCompoundRequire({common:["dojo.gfx.color", "dojo.gfx.matrix", "dojo.gfx.common"]});
 dojo.requireIf(dojo.render.svg.capable, "dojo.gfx.svg");
 dojo.requireIf(dojo.render.vml.capable, "dojo.gfx.vml");
-
 dojo.provide("dojo.gfx.*");
+
+
 __CPAN_FILE__ src/gfx/Colorspace.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -91875,816 +64267,717 @@
 */
 
 dojo.provide("dojo.gfx.Colorspace");
-
 dojo.require("dojo.lang.common");
 dojo.require("dojo.math.matrix");
-
-// to convert to YUV:
-//   c.whitePoint = 'D65';
-//   c.RGBWorkingSpace = 'pal_secam_rgb';
-//   var out = c.convert([r,g,b], 'RGB', 'XYZ');
-//
-// to convert to YIQ:
-//   c.whitePoint = 'D65';
-//   c.RGBWorkingSpace = 'ntsc_rgb';
-//   var out = c.convert([r,g,b], 'RGB', 'XYZ');
-//
-
-dojo.gfx.Colorspace = function(){
-	//	summary
-	//	An object for dealing with colorspace conversions.
-	this.whitePoint = 'D65';
-	this.stdObserver = '10';
-	this.chromaticAdaptationAlg = 'bradford';
-	this.RGBWorkingSpace = 's_rgb';
-	this.useApproxCIELabMapping = 1; // see http://www.brucelindbloom.com/LContinuity.html
-
-	this.chainMaps = {
-		'RGB_to_xyY'  : ['XYZ'],
-		'xyY_to_RGB'  : ['XYZ'],
-		'RGB_to_Lab'  : ['XYZ'],
-		'Lab_to_RGB'  : ['XYZ'],
-		'RGB_to_LCHab': ['XYZ', 'Lab'],
-		'LCHab_to_RGB': ['Lab'],
-		'xyY_to_Lab'  : ['XYZ'],
-		'Lab_to_xyY'  : ['XYZ'],
-		'XYZ_to_LCHab': ['Lab'],
-		'LCHab_to_XYZ': ['Lab'],
-		'xyY_to_LCHab': ['XYZ', 'Lab'],
-		'LCHab_to_xyY': ['Lab', 'XYZ'],
-		'RGB_to_Luv'  : ['XYZ'],
-		'Luv_to_RGB'  : ['XYZ'],
-		'xyY_to_Luv'  : ['XYZ'],
-		'Luv_to_xyY'  : ['XYZ'],
-		'Lab_to_Luv'  : ['XYZ'],
-		'Luv_to_Lab'  : ['XYZ'],
-		'LCHab_to_Luv': ['Lab', 'XYZ'],
-		'Luv_to_LCHab': ['XYZ', 'Lab'],
-		'RGB_to_LCHuv'  : ['XYZ', 'Luv'],
-		'LCHuv_to_RGB'  : ['Luv', 'XYZ'],
-		'XYZ_to_LCHuv'  : ['Luv'],
-		'LCHuv_to_XYZ'  : ['Luv'],
-		'xyY_to_LCHuv'  : ['XYZ', 'Luv'],
-		'LCHuv_to_xyY'  : ['Luv', 'XYZ'],
-		'Lab_to_LCHuv'  : ['XYZ', 'Luv'],
-		'LCHuv_to_Lab'  : ['Luv', 'XYZ'],
-		'LCHab_to_LCHuv': ['Lab', 'XYZ', 'Luv'],
-		'LCHuv_to_LCHab': ['Luv', 'XYZ', 'Lab'],
-		'XYZ_to_CMY'    : ['RGB'],
-		'CMY_to_XYZ'    : ['RGB'],
-		'xyY_to_CMY'    : ['RGB'],
-		'CMY_to_xyY'    : ['RGB'],
-		'Lab_to_CMY'    : ['RGB'],
-		'CMY_to_Lab'    : ['RGB'],
-		'LCHab_to_CMY'  : ['RGB'],
-		'CMY_to_LCHab'  : ['RGB'],
-		'Luv_to_CMY'    : ['RGB'],
-		'CMY_to_Luv'    : ['RGB'],
-		'LCHuv_to_CMY'  : ['RGB'],
-		'CMY_to_LCHuv'  : ['RGB'],
-		'XYZ_to_HSL'    : ['RGB'],
-		'HSL_to_XYZ'    : ['RGB'],
-		'xyY_to_HSL'    : ['RGB'],
-		'HSL_to_xyY'    : ['RGB'],
-		'Lab_to_HSL'    : ['RGB'],
-		'HSL_to_Lab'    : ['RGB'],
-		'LCHab_to_HSL'  : ['RGB'],
-		'HSL_to_LCHab'  : ['RGB'],
-		'Luv_to_HSL'    : ['RGB'],
-		'HSL_to_Luv'    : ['RGB'],
-		'LCHuv_to_HSL'  : ['RGB'],
-		'HSL_to_LCHuv'  : ['RGB'],
-		'CMY_to_HSL'    : ['RGB'],
-		'HSL_to_CMY'    : ['RGB'],
-		'CMYK_to_HSL'   : ['RGB'],
-		'HSL_to_CMYK'   : ['RGB'],
-		'XYZ_to_HSV'    : ['RGB'],
-		'HSV_to_XYZ'    : ['RGB'],
-		'xyY_to_HSV'    : ['RGB'],
-		'HSV_to_xyY'    : ['RGB'],
-		'Lab_to_HSV'    : ['RGB'],
-		'HSV_to_Lab'    : ['RGB'],
-		'LCHab_to_HSV'  : ['RGB'],
-		'HSV_to_LCHab'  : ['RGB'],
-		'Luv_to_HSV'    : ['RGB'],
-		'HSV_to_Luv'    : ['RGB'],
-		'LCHuv_to_HSV'  : ['RGB'],
-		'HSV_to_LCHuv'  : ['RGB'],
-		'CMY_to_HSV'    : ['RGB'],
-		'HSV_to_CMY'    : ['RGB'],
-		'CMYK_to_HSV'   : ['RGB'],
-		'HSV_to_CMYK'   : ['RGB'],
-		'HSL_to_HSV'    : ['RGB'],
-		'HSV_to_HSL'    : ['RGB'],
-		'XYZ_to_CMYK'   : ['RGB'],
-		'CMYK_to_XYZ'   : ['RGB'],
-		'xyY_to_CMYK'   : ['RGB'],
-		'CMYK_to_xyY'   : ['RGB'],
-		'Lab_to_CMYK'   : ['RGB'],
-		'CMYK_to_Lab'   : ['RGB'],
-		'LCHab_to_CMYK' : ['RGB'],
-		'CMYK_to_LCHab' : ['RGB'],
-		'Luv_to_CMYK'   : ['RGB'],
-		'CMYK_to_Luv'   : ['RGB'],
-		'LCHuv_to_CMYK' : ['RGB'],
-		'CMYK_to_LCHuv' : ['RGB']
-	};
+dojo.gfx.Colorspace = function () {
+	this.whitePoint = "D65";
+	this.stdObserver = "10";
+	this.chromaticAdaptationAlg = "bradford";
+	this.RGBWorkingSpace = "s_rgb";
+	this.useApproxCIELabMapping = 1;
+	this.chainMaps = {"RGB_to_xyY":["XYZ"], "xyY_to_RGB":["XYZ"], "RGB_to_Lab":["XYZ"], "Lab_to_RGB":["XYZ"], "RGB_to_LCHab":["XYZ", "Lab"], "LCHab_to_RGB":["Lab"], "xyY_to_Lab":["XYZ"], "Lab_to_xyY":["XYZ"], "XYZ_to_LCHab":["Lab"], "LCHab_to_XYZ":["Lab"], "xyY_to_LCHab":["XYZ", "Lab"], "LCHab_to_xyY":["Lab", "XYZ"], "RGB_to_Luv":["XYZ"], "Luv_to_RGB":["XYZ"], "xyY_to_Luv":["XYZ"], "Luv_to_xyY":["XYZ"], "Lab_to_Luv":["XYZ"], "Luv_to_Lab":["XYZ"], "LCHab_to_Luv":["Lab", "XYZ"], "Luv_to_LCHab":["XYZ", "Lab"], "RGB_to_LCHuv":["XYZ", "Luv"], "LCHuv_to_RGB":["Luv", "XYZ"], "XYZ_to_LCHuv":["Luv"], "LCHuv_to_XYZ":["Luv"], "xyY_to_LCHuv":["XYZ", "Luv"], "LCHuv_to_xyY":["Luv", "XYZ"], "Lab_to_LCHuv":["XYZ", "Luv"], "LCHuv_to_Lab":["Luv", "XYZ"], "LCHab_to_LCHuv":["Lab", "XYZ", "Luv"], "LCHuv_to_LCHab":["Luv", "XYZ", "Lab"], "XYZ_to_CMY":["RGB"], "CMY_to_XYZ":["RGB"], "xyY_to_CMY":["RGB"], "CMY_to_xyY":["RGB"], "Lab_to_CMY":["RGB"], "CMY_to_Lab":["RGB"], "LCHab_to_CMY":["RGB"], "CMY_to_LCHab":["RGB"], "Luv_to_CMY":["RGB"], "CMY_to_Luv":["RGB"], "LCHuv_to_CMY":["RGB"], "CMY_to_LCHuv":["RGB"], "XYZ_to_HSL":["RGB"], "HSL_to_XYZ":["RGB"], "xyY_to_HSL":["RGB"], "HSL_to_xyY":["RGB"], "Lab_to_HSL":["RGB"], "HSL_to_Lab":["RGB"], "LCHab_to_HSL":["RGB"], "HSL_to_LCHab":["RGB"], "Luv_to_HSL":["RGB"], "HSL_to_Luv":["RGB"], "LCHuv_to_HSL":["RGB"], "HSL_to_LCHuv":["RGB"], "CMY_to_HSL":["RGB"], "HSL_to_CMY":["RGB"], "CMYK_to_HSL":["RGB"], "HSL_to_CMYK":["RGB"], "XYZ_to_HSV":["RGB"], "HSV_to_XYZ":["RGB"], "xyY_to_HSV":["RGB"], "HSV_to_xyY":["RGB"], "Lab_to_HSV":["RGB"], "HSV_to_Lab":["RGB"], "LCHab_to_HSV":["RGB"], "HSV_to_LCHab":["RGB"], "Luv_to_HSV":["RGB"], "HSV_to_Luv":["RGB"], "LCHuv_to_HSV":["RGB"], "HSV_to_LCHuv":["RGB"], "CMY_to_HSV":["RGB"], "HSV_to_CMY":["RGB"], "CMYK_to_HSV":["RGB"], "HSV_to_CMYK":["RGB"], "HSL_to_HSV":["RGB"], "HSV_to_HSL":["RGB"], "XYZ_to_CMYK":["RGB"], "CMYK_to_XYZ":["RGB"], "xyY_to_CMYK":["RGB"], "CMYK_to_xyY":["RGB"], "Lab_to_CMYK":["RGB"], "CMYK_to_Lab":["RGB"], "LCHab_to_CMYK":["RGB"], "CMYK_to_LCHab":["RGB"], "Luv_to_CMYK":["RGB"], "CMYK_to_Luv":["RGB"], "LCHuv_to_CMYK":["RGB"], "CMYK_to_LCHuv":["RGB"]};
 	return this;
-}
-
-dojo.gfx.Colorspace.prototype.convert = function(col, model_from, model_to){
-	var k = model_from+'_to_'+model_to;
-	if (this[k]){
+};
+dojo.gfx.Colorspace.prototype.convert = function (col, model_from, model_to) {
+	var k = model_from + "_to_" + model_to;
+	if (this[k]) {
 		return this[k](col);
-	}else{
-		if (this.chainMaps[k]){
+	} else {
+		if (this.chainMaps[k]) {
 			var cur = model_from;
 			var models = this.chainMaps[k].concat();
 			models.push(model_to);
-			for(var i=0; i<models.length; i++){
+			for (var i = 0; i < models.length; i++) {
 				col = this.convert(col, cur, models[i]);
 				cur = models[i];
 			}
 			return col;
-		}else{
-			dojo.debug("Can't convert from "+model_from+' to '+model_to);
+		} else {
+			dojo.debug("Can't convert from " + model_from + " to " + model_to);
 		}
 	}
-}
-
-dojo.gfx.Colorspace.prototype.munge = function(keys, args){
-	if (dojo.lang.isArray(args[0])){
+};
+dojo.gfx.Colorspace.prototype.munge = function (keys, args) {
+	if (dojo.lang.isArray(args[0])) {
 		args = args[0];
 	}
 	var out = new Array();
-	for (var i=0; i<keys.length; i++){
+	for (var i = 0; i < keys.length; i++) {
 		out[keys.charAt(i)] = args[i];
 	}
 	return out;
-}
-
-dojo.gfx.Colorspace.prototype.getWhitePoint = function(){
+};
+dojo.gfx.Colorspace.prototype.getWhitePoint = function () {
 	var x = 0;
 	var y = 0;
 	var t = 0;
-
-	// ref: http://en.wikipedia.org/wiki/White_point
-	// TODO: i need some good/better white point values
-
-	switch(this.stdObserver){
-		case '2' :
-			switch(this.whitePoint){
-				case 'E'   : x=1/3    ; y=1/3    ; t=5400; break; //Equal energy
-				case 'D50' : x=0.34567; y=0.35850; t=5000; break;
-				case 'D55' : x=0.33242; y=0.34743; t=5500; break;
-				case 'D65' : x=0.31271; y=0.32902; t=6500; break;
-				case 'D75' : x=0.29902; y=0.31485; t=7500; break;
-				case 'A'   : x=0.44757; y=0.40745; t=2856; break; //Incandescent tungsten
-				case 'B'   : x=0.34842; y=0.35161; t=4874; break;
-				case 'C'   : x=0.31006; y=0.31616; t=6774; break;
-				case '9300': x=0.28480; y=0.29320; t=9300; break; //Blue phosphor monitors
-				case 'F2'  : x=0.37207; y=0.37512; t=4200; break; //Cool White Fluorescent
-				case 'F7'  : x=0.31285; y=0.32918; t=6500; break; //Narrow Band Daylight Fluorescent
-				case 'F11' : x=0.38054; y=0.37691; t=4000; break; //Narrow Band White Fluorescent
-				default: dojo.debug('White point '+this.whitePoint+" isn't defined for Std. Observer "+this.strObserver);
-			};
+	switch (this.stdObserver) {
+	  case "2":
+		switch (this.whitePoint) {
+		  case "E":
+			x = 1 / 3;
+			y = 1 / 3;
+			t = 5400;
 			break;
-		case '10' :
-			switch(this.whitePoint){
-				case 'E'   : x=1/3    ; y=1/3    ; t=5400; break; //Equal energy
-				case 'D50' : x=0.34773; y=0.35952; t=5000; break;
-				case 'D55' : x=0.33411; y=0.34877; t=5500; break;
-				case 'D65' : x=0.31382; y=0.33100; t=6500; break;
-				case 'D75' : x=0.29968; y=0.31740; t=7500; break;
-				case 'A'   : x=0.45117; y=0.40594; t=2856; break; //Incandescent tungsten
-				case 'B'   : x=0.3498 ; y=0.3527 ; t=4874; break;
-				case 'C'   : x=0.31039; y=0.31905; t=6774; break;
-				case 'F2'  : x=0.37928; y=0.36723; t=4200; break; //Cool White Fluorescent
-				case 'F7'  : x=0.31565; y=0.32951; t=6500; break; //Narrow Band Daylight Fluorescent
-				case 'F11' : x=0.38543; y=0.37110; t=4000; break; //Narrow Band White Fluorescent
-				default: dojo.debug('White point '+this.whitePoint+" isn't defined for Std. Observer "+this.strObserver);
-			};
+		  case "D50":
+			x = 0.34567;
+			y = 0.3585;
+			t = 5000;
 			break;
-		default:
-			dojo.debug("Std. Observer "+this.strObserver+" isn't defined");
+		  case "D55":
+			x = 0.33242;
+			y = 0.34743;
+			t = 5500;
+			break;
+		  case "D65":
+			x = 0.31271;
+			y = 0.32902;
+			t = 6500;
+			break;
+		  case "D75":
+			x = 0.29902;
+			y = 0.31485;
+			t = 7500;
+			break;
+		  case "A":
+			x = 0.44757;
+			y = 0.40745;
+			t = 2856;
+			break;
+		  case "B":
+			x = 0.34842;
+			y = 0.35161;
+			t = 4874;
+			break;
+		  case "C":
+			x = 0.31006;
+			y = 0.31616;
+			t = 6774;
+			break;
+		  case "9300":
+			x = 0.2848;
+			y = 0.2932;
+			t = 9300;
+			break;
+		  case "F2":
+			x = 0.37207;
+			y = 0.37512;
+			t = 4200;
+			break;
+		  case "F7":
+			x = 0.31285;
+			y = 0.32918;
+			t = 6500;
+			break;
+		  case "F11":
+			x = 0.38054;
+			y = 0.37691;
+			t = 4000;
+			break;
+		  default:
+			dojo.debug("White point " + this.whitePoint + " isn't defined for Std. Observer " + this.strObserver);
+		}
+		break;
+	  case "10":
+		switch (this.whitePoint) {
+		  case "E":
+			x = 1 / 3;
+			y = 1 / 3;
+			t = 5400;
+			break;
+		  case "D50":
+			x = 0.34773;
+			y = 0.35952;
+			t = 5000;
+			break;
+		  case "D55":
+			x = 0.33411;
+			y = 0.34877;
+			t = 5500;
+			break;
+		  case "D65":
+			x = 0.31382;
+			y = 0.331;
+			t = 6500;
+			break;
+		  case "D75":
+			x = 0.29968;
+			y = 0.3174;
+			t = 7500;
+			break;
+		  case "A":
+			x = 0.45117;
+			y = 0.40594;
+			t = 2856;
+			break;
+		  case "B":
+			x = 0.3498;
+			y = 0.3527;
+			t = 4874;
+			break;
+		  case "C":
+			x = 0.31039;
+			y = 0.31905;
+			t = 6774;
+			break;
+		  case "F2":
+			x = 0.37928;
+			y = 0.36723;
+			t = 4200;
+			break;
+		  case "F7":
+			x = 0.31565;
+			y = 0.32951;
+			t = 6500;
+			break;
+		  case "F11":
+			x = 0.38543;
+			y = 0.3711;
+			t = 4000;
+			break;
+		  default:
+			dojo.debug("White point " + this.whitePoint + " isn't defined for Std. Observer " + this.strObserver);
+		}
+		break;
+	  default:
+		dojo.debug("Std. Observer " + this.strObserver + " isn't defined");
 	}
-
 	var z = 1 - x - y;
-	var wp = {'x':x, 'y':y, 'z':z, 't':t};
+	var wp = {"x":x, "y":y, "z":z, "t":t};
 	wp.Y = 1;
-
 	var XYZ = this.xyY_to_XYZ([wp.x, wp.y, wp.Y]);
 	wp.X = XYZ[0];
 	wp.Y = XYZ[1];
 	wp.Z = XYZ[2];
 	return wp;
-}
-
-dojo.gfx.Colorspace.prototype.getPrimaries = function(){
-	// ref: http://www.fho-emden.de/~hoffmann/ciexyz29082000.pdf
-	// ref: http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html
+};
+dojo.gfx.Colorspace.prototype.getPrimaries = function () {
 	var m = [];
-	switch(this.RGBWorkingSpace){
-		case 'adobe_rgb_1998'	: m = [2.2, 'D65', 0.6400, 0.3300, 0.297361, 0.2100, 0.7100, 0.627355, 0.1500, 0.0600, 0.075285]; break;
-		case 'apple_rgb'	: m = [1.8, 'D65', 0.6250, 0.3400, 0.244634, 0.2800, 0.5950, 0.672034, 0.1550, 0.0700, 0.083332]; break;
-		case 'best_rgb'		: m = [2.2, 'D50', 0.7347, 0.2653, 0.228457, 0.2150, 0.7750, 0.737352, 0.1300, 0.0350, 0.034191]; break;
-		case 'beta_rgb'		: m = [2.2, 'D50', 0.6888, 0.3112, 0.303273, 0.1986, 0.7551, 0.663786, 0.1265, 0.0352, 0.032941]; break;
-		case 'bruce_rgb'	: m = [2.2, 'D65', 0.6400, 0.3300, 0.240995, 0.2800, 0.6500, 0.683554, 0.1500, 0.0600, 0.075452]; break;
-		case 'cie_rgb'		: m = [2.2, 'E'  , 0.7350, 0.2650, 0.176204, 0.2740, 0.7170, 0.812985, 0.1670, 0.0090, 0.010811]; break;
-		case 'color_match_rgb'	: m = [1.8, 'D50', 0.6300, 0.3400, 0.274884, 0.2950, 0.6050, 0.658132, 0.1500, 0.0750, 0.066985]; break;
-		case 'don_rgb_4'	: m = [2.2, 'D50', 0.6960, 0.3000, 0.278350, 0.2150, 0.7650, 0.687970, 0.1300, 0.0350, 0.033680]; break;
-		case 'eci_rgb'		: m = [1.8, 'D50', 0.6700, 0.3300, 0.320250, 0.2100, 0.7100, 0.602071, 0.1400, 0.0800, 0.077679]; break;
-		case 'ekta_space_ps5'	: m = [2.2, 'D50', 0.6950, 0.3050, 0.260629, 0.2600, 0.7000, 0.734946, 0.1100, 0.0050, 0.004425]; break;
-		case 'ntsc_rgb'		: m = [2.2, 'C'  , 0.6700, 0.3300, 0.298839, 0.2100, 0.7100, 0.586811, 0.1400, 0.0800, 0.114350]; break;
-		case 'pal_secam_rgb'	: m = [2.2, 'D65', 0.6400, 0.3300, 0.222021, 0.2900, 0.6000, 0.706645, 0.1500, 0.0600, 0.071334]; break;
-		case 'pro_photo_rgb'	: m = [1.8, 'D50', 0.7347, 0.2653, 0.288040, 0.1596, 0.8404, 0.711874, 0.0366, 0.0001, 0.000086]; break;
-		case 'smpte-c_rgb'	: m = [2.2, 'D65', 0.6300, 0.3400, 0.212395, 0.3100, 0.5950, 0.701049, 0.1550, 0.0700, 0.086556]; break;
-		case 's_rgb'		: m = [2.2, 'D65', 0.6400, 0.3300, 0.212656, 0.3000, 0.6000, 0.715158, 0.1500, 0.0600, 0.072186]; break;
-		case 'wide_gamut_rgb'	: m = [2.2, 'D50', 0.7350, 0.2650, 0.258187, 0.1150, 0.8260, 0.724938, 0.1570, 0.0180, 0.016875]; break;
-		default: dojo.debug("RGB working space "+this.RGBWorkingSpace+" isn't defined");
+	switch (this.RGBWorkingSpace) {
+	  case "adobe_rgb_1998":
+		m = [2.2, "D65", 0.64, 0.33, 0.297361, 0.21, 0.71, 0.627355, 0.15, 0.06, 0.075285];
+		break;
+	  case "apple_rgb":
+		m = [1.8, "D65", 0.625, 0.34, 0.244634, 0.28, 0.595, 0.672034, 0.155, 0.07, 0.083332];
+		break;
+	  case "best_rgb":
+		m = [2.2, "D50", 0.7347, 0.2653, 0.228457, 0.215, 0.775, 0.737352, 0.13, 0.035, 0.034191];
+		break;
+	  case "beta_rgb":
+		m = [2.2, "D50", 0.6888, 0.3112, 0.303273, 0.1986, 0.7551, 0.663786, 0.1265, 0.0352, 0.032941];
+		break;
+	  case "bruce_rgb":
+		m = [2.2, "D65", 0.64, 0.33, 0.240995, 0.28, 0.65, 0.683554, 0.15, 0.06, 0.075452];
+		break;
+	  case "cie_rgb":
+		m = [2.2, "E", 0.735, 0.265, 0.176204, 0.274, 0.717, 0.812985, 0.167, 0.009, 0.010811];
+		break;
+	  case "color_match_rgb":
+		m = [1.8, "D50", 0.63, 0.34, 0.274884, 0.295, 0.605, 0.658132, 0.15, 0.075, 0.066985];
+		break;
+	  case "don_rgb_4":
+		m = [2.2, "D50", 0.696, 0.3, 0.27835, 0.215, 0.765, 0.68797, 0.13, 0.035, 0.03368];
+		break;
+	  case "eci_rgb":
+		m = [1.8, "D50", 0.67, 0.33, 0.32025, 0.21, 0.71, 0.602071, 0.14, 0.08, 0.077679];
+		break;
+	  case "ekta_space_ps5":
+		m = [2.2, "D50", 0.695, 0.305, 0.260629, 0.26, 0.7, 0.734946, 0.11, 0.005, 0.004425];
+		break;
+	  case "ntsc_rgb":
+		m = [2.2, "C", 0.67, 0.33, 0.298839, 0.21, 0.71, 0.586811, 0.14, 0.08, 0.11435];
+		break;
+	  case "pal_secam_rgb":
+		m = [2.2, "D65", 0.64, 0.33, 0.222021, 0.29, 0.6, 0.706645, 0.15, 0.06, 0.071334];
+		break;
+	  case "pro_photo_rgb":
+		m = [1.8, "D50", 0.7347, 0.2653, 0.28804, 0.1596, 0.8404, 0.711874, 0.0366, 0.0001, 0.000086];
+		break;
+	  case "smpte-c_rgb":
+		m = [2.2, "D65", 0.63, 0.34, 0.212395, 0.31, 0.595, 0.701049, 0.155, 0.07, 0.086556];
+		break;
+	  case "s_rgb":
+		m = [2.2, "D65", 0.64, 0.33, 0.212656, 0.3, 0.6, 0.715158, 0.15, 0.06, 0.072186];
+		break;
+	  case "wide_gamut_rgb":
+		m = [2.2, "D50", 0.735, 0.265, 0.258187, 0.115, 0.826, 0.724938, 0.157, 0.018, 0.016875];
+		break;
+	  default:
+		dojo.debug("RGB working space " + this.RGBWorkingSpace + " isn't defined");
 	}
-
-	var p = {
-		name: this.RGBWorkingSpace,
-		gamma:m[0],
-		wp:m[1],
-		xr:m[2],
-		yr:m[3],
-		Yr:m[4],
-		xg:m[5],
-		yg:m[6],
-		Yg:m[7],
-		xb:m[8],
-		yb:m[9],
-		Yb:m[10]
-	};
-
-	// if WP doesn't match current WP, convert the primaries over
-	if (p.wp != this.whitePoint){
-		var r = this.XYZ_to_xyY( this.chromaticAdaptation( this.xyY_to_XYZ([p.xr, p.yr, p.Yr]), p.wp, this.whitePoint ) );
-		var g = this.XYZ_to_xyY( this.chromaticAdaptation( this.xyY_to_XYZ([p.xg, p.yg, p.Yg]), p.wp, this.whitePoint ) );
-		var b = this.XYZ_to_xyY( this.chromaticAdaptation( this.xyY_to_XYZ([p.xb, p.yb, p.Yb]), p.wp, this.whitePoint ) );
-
+	var p = {name:this.RGBWorkingSpace, gamma:m[0], wp:m[1], xr:m[2], yr:m[3], Yr:m[4], xg:m[5], yg:m[6], Yg:m[7], xb:m[8], yb:m[9], Yb:m[10]};
+	if (p.wp != this.whitePoint) {
+		var r = this.XYZ_to_xyY(this.chromaticAdaptation(this.xyY_to_XYZ([p.xr, p.yr, p.Yr]), p.wp, this.whitePoint));
+		var g = this.XYZ_to_xyY(this.chromaticAdaptation(this.xyY_to_XYZ([p.xg, p.yg, p.Yg]), p.wp, this.whitePoint));
+		var b = this.XYZ_to_xyY(this.chromaticAdaptation(this.xyY_to_XYZ([p.xb, p.yb, p.Yb]), p.wp, this.whitePoint));
 		p.xr = r[0];
 		p.yr = r[1];
 		p.Yr = r[2];
-
 		p.xg = g[0];
 		p.yg = g[1];
 		p.Yg = g[2];
-
 		p.xb = b[0];
 		p.yb = b[1];
 		p.Yb = b[2];
-
 		p.wp = this.whitePoint;
 	}
-
 	p.zr = 1 - p.xr - p.yr;
 	p.zg = 1 - p.xg - p.yg;
 	p.zb = 1 - p.xb - p.yb;
 	return p;
-}
-
-dojo.gfx.Colorspace.prototype.epsilon = function(){
+};
+dojo.gfx.Colorspace.prototype.epsilon = function () {
 	return this.useApproxCIELabMapping ? 0.008856 : 216 / 24289;
-}
-
-dojo.gfx.Colorspace.prototype.kappa = function(){
+};
+dojo.gfx.Colorspace.prototype.kappa = function () {
 	return this.useApproxCIELabMapping ? 903.3 : 24389 / 27;
-}
-
-dojo.gfx.Colorspace.prototype.XYZ_to_xyY = function(){
-	var src = this.munge('XYZ', arguments);
+};
+dojo.gfx.Colorspace.prototype.XYZ_to_xyY = function () {
+	var src = this.munge("XYZ", arguments);
 	var sum = src.X + src.Y + src.Z;
-	if (sum == 0){
+	if (sum == 0) {
 		var wp = this.getWhitePoint();
 		var x = wp.x;
 		var y = wp.y;
-	}else{
+	} else {
 		var x = src.X / sum;
 		var y = src.Y / sum;
 	}
-
 	var Y = src.Y;
 	return [x, y, Y];
-}
-
-dojo.gfx.Colorspace.prototype.xyY_to_XYZ = function(){
-	var src = this.munge('xyY', arguments);
-	if (src.y == 0){
+};
+dojo.gfx.Colorspace.prototype.xyY_to_XYZ = function () {
+	var src = this.munge("xyY", arguments);
+	if (src.y == 0) {
 		var X = 0;
 		var Y = 0;
 		var Z = 0;
-	}else{
+	} else {
 		var X = (src.x * src.Y) / src.y;
 		var Y = src.Y;
 		var Z = ((1 - src.x - src.y) * src.Y) / src.y;
 	}
-
 	return [X, Y, Z];
-}
-
-dojo.gfx.Colorspace.prototype.RGB_to_XYZ = function(){
-	var src = this.munge('RGB', arguments);
+};
+dojo.gfx.Colorspace.prototype.RGB_to_XYZ = function () {
+	var src = this.munge("RGB", arguments);
 	var m = this.getRGB_XYZ_Matrix();
 	var pr = this.getPrimaries();
-
-	if (this.RGBWorkingSpace == 's_rgb'){
+	if (this.RGBWorkingSpace == "s_rgb") {
 		var r = (src.R > 0.04045) ? Math.pow(((src.R + 0.055) / 1.055), 2.4) : src.R / 12.92;
 		var g = (src.G > 0.04045) ? Math.pow(((src.G + 0.055) / 1.055), 2.4) : src.G / 12.92;
 		var b = (src.B > 0.04045) ? Math.pow(((src.B + 0.055) / 1.055), 2.4) : src.B / 12.92;
-	}else{
+	} else {
 		var r = Math.pow(src.R, pr.gamma);
 		var g = Math.pow(src.G, pr.gamma);
 		var b = Math.pow(src.B, pr.gamma);
 	}
-
 	var XYZ = dojo.math.matrix.multiply([[r, g, b]], m);
 	return [XYZ[0][0], XYZ[0][1], XYZ[0][2]];
-}
-
-dojo.gfx.Colorspace.prototype.XYZ_to_RGB = function(){
-	var src = this.munge('XYZ', arguments);
+};
+dojo.gfx.Colorspace.prototype.XYZ_to_RGB = function () {
+	var src = this.munge("XYZ", arguments);
 	var mi = this.getXYZ_RGB_Matrix();
 	var pr = this.getPrimaries();
-
 	var rgb = dojo.math.matrix.multiply([[src.X, src.Y, src.Z]], mi);
 	var r = rgb[0][0];
 	var g = rgb[0][1];
 	var b = rgb[0][2];
-
-	if (this.RGBWorkingSpace == 's_rgb'){
-		var R = (r > 0.0031308) ? (1.055 * Math.pow(r, 1.0/2.4)) - 0.055 : 12.92 * r;
-		var G = (g > 0.0031308) ? (1.055 * Math.pow(g, 1.0/2.4)) - 0.055 : 12.92 * g;
-		var B = (b > 0.0031308) ? (1.055 * Math.pow(b, 1.0/2.4)) - 0.055 : 12.92 * b;
-	}else{
-		var R = Math.pow(r, 1/pr.gamma);
-		var G = Math.pow(g, 1/pr.gamma);
-		var B = Math.pow(b, 1/pr.gamma);
+	if (this.RGBWorkingSpace == "s_rgb") {
+		var R = (r > 0.0031308) ? (1.055 * Math.pow(r, 1 / 2.4)) - 0.055 : 12.92 * r;
+		var G = (g > 0.0031308) ? (1.055 * Math.pow(g, 1 / 2.4)) - 0.055 : 12.92 * g;
+		var B = (b > 0.0031308) ? (1.055 * Math.pow(b, 1 / 2.4)) - 0.055 : 12.92 * b;
+	} else {
+		var R = Math.pow(r, 1 / pr.gamma);
+		var G = Math.pow(g, 1 / pr.gamma);
+		var B = Math.pow(b, 1 / pr.gamma);
 	}
 	return [R, G, B];
-}
-
-dojo.gfx.Colorspace.prototype.XYZ_to_Lab = function(){
-	var src = this.munge('XYZ', arguments);
+};
+dojo.gfx.Colorspace.prototype.XYZ_to_Lab = function () {
+	var src = this.munge("XYZ", arguments);
 	var wp = this.getWhitePoint();
-
 	var xr = src.X / wp.X;
 	var yr = src.Y / wp.Y;
 	var zr = src.Z / wp.Z;
-
-	var fx = (xr > this.epsilon()) ? Math.pow(xr, 1/3) : (this.kappa() * xr + 16) / 116;
-	var fy = (yr > this.epsilon()) ? Math.pow(yr, 1/3) : (this.kappa() * yr + 16) / 116;
-	var fz = (zr > this.epsilon()) ? Math.pow(zr, 1/3) : (this.kappa() * zr + 16) / 116;
-
+	var fx = (xr > this.epsilon()) ? Math.pow(xr, 1 / 3) : (this.kappa() * xr + 16) / 116;
+	var fy = (yr > this.epsilon()) ? Math.pow(yr, 1 / 3) : (this.kappa() * yr + 16) / 116;
+	var fz = (zr > this.epsilon()) ? Math.pow(zr, 1 / 3) : (this.kappa() * zr + 16) / 116;
 	var L = 116 * fy - 16;
 	var a = 500 * (fx - fy);
 	var b = 200 * (fy - fz);
-
 	return [L, a, b];
-}
-
-dojo.gfx.Colorspace.prototype.Lab_to_XYZ = function(){
-	var src = this.munge('Lab', arguments);
+};
+dojo.gfx.Colorspace.prototype.Lab_to_XYZ = function () {
+	var src = this.munge("Lab", arguments);
 	var wp = this.getWhitePoint();
 	var yr = (src.L > (this.kappa() * this.epsilon())) ? Math.pow((src.L + 16) / 116, 3) : src.L / this.kappa();
-
 	var fy = (yr > this.epsilon()) ? (src.L + 16) / 116 : (this.kappa() * yr + 16) / 116;
 	var fx = (src.a / 500) + fy;
 	var fz = fy - (src.b / 200);
-
 	var fxcube = Math.pow(fx, 3);
 	var fzcube = Math.pow(fz, 3);
-
 	var xr = (fxcube > this.epsilon()) ? fxcube : (116 * fx - 16) / this.kappa();
 	var zr = (fzcube > this.epsilon()) ? fzcube : (116 * fz - 16) / this.kappa();
-
 	var X = xr * wp.X;
 	var Y = yr * wp.Y;
 	var Z = zr * wp.Z;
-
 	return [X, Y, Z];
-}
-
-dojo.gfx.Colorspace.prototype.Lab_to_LCHab = function(){
-	var src = this.munge('Lab', arguments);
-
+};
+dojo.gfx.Colorspace.prototype.Lab_to_LCHab = function () {
+	var src = this.munge("Lab", arguments);
 	var L = src.L;
 	var C = Math.pow(src.a * src.a + src.b * src.b, 0.5);
 	var H = Math.atan2(src.b, src.a) * (180 / Math.PI);
-
-	if (H < 0){ H += 360; }
-	if (H > 360){ H -= 360; }
-
+	if (H < 0) {
+		H += 360;
+	}
+	if (H > 360) {
+		H -= 360;
+	}
 	return [L, C, H];
-}
-
-dojo.gfx.Colorspace.prototype.LCHab_to_Lab = function(){
-	var src = this.munge('LCH', arguments);
-
+};
+dojo.gfx.Colorspace.prototype.LCHab_to_Lab = function () {
+	var src = this.munge("LCH", arguments);
 	var H_rad = src.H * (Math.PI / 180);
 	var L = src.L;
 	var a = src.C / Math.pow(Math.pow(Math.tan(H_rad), 2) + 1, 0.5);
-	if ((90 < src.H) && (src.H < 270)){ a= -a; }
-
+	if ((90 < src.H) && (src.H < 270)) {
+		a = -a;
+	}
 	var b = Math.pow(Math.pow(src.C, 2) - Math.pow(a, 2), 0.5);
-	if (src.H > 180){ b = -b; }
-
+	if (src.H > 180) {
+		b = -b;
+	}
 	return [L, a, b];
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// this function converts an XYZ color array (col) from one whitepoint (src_w) to another (dst_w)
-//
-
-dojo.gfx.Colorspace.prototype.chromaticAdaptation = function(col, src_w, dst_w){
-	col = this.munge('XYZ', [col]);
+};
+dojo.gfx.Colorspace.prototype.chromaticAdaptation = function (col, src_w, dst_w) {
+	col = this.munge("XYZ", [col]);
 	var old_wp = this.whitePoint;
-
 	this.whitePoint = src_w;
 	var wp_src = this.getWhitePoint();
-
 	this.whitePoint = dst_w;
 	var wp_dst = this.getWhitePoint();
-
 	this.whitePoint = old_wp;
-
-	switch(this.chromaticAdaptationAlg){
-		case 'xyz_scaling':
-			var ma = [[1,0,0],[0,1,0],[0,0,1]];
-			var mai = [[1,0,0],[0,1,0],[0,0,1]];
-			break;
-		case 'bradford':
-			var ma = [[0.8951, -0.7502, 0.0389],[0.2664, 1.7135, -0.0685],[-0.1614, 0.0367, 1.0296]];
-			var mai = [[0.986993, 0.432305, -0.008529],[-0.147054, 0.518360, 0.040043],[0.159963, 0.049291, 0.968487]];
-			break;
-		case 'von_kries':
-			var ma = [[0.40024, -0.22630, 0.00000],[0.70760, 1.16532, 0.00000],[-0.08081, 0.04570, 0.91822]]
-			var mai = [[1.859936, 0.361191, 0.000000],[-1.129382, 0.638812, 0.000000],[0.219897, -0.000006, 1.089064]]
-			break;
-		default:
-			dojo.debug("The "+this.chromaticAdaptationAlg+" chromatic adaptation algorithm matricies are not defined");
+	switch (this.chromaticAdaptationAlg) {
+	  case "xyz_scaling":
+		var ma = [[1, 0, 0], [0, 1, 0], [0, 0, 1]];
+		var mai = [[1, 0, 0], [0, 1, 0], [0, 0, 1]];
+		break;
+	  case "bradford":
+		var ma = [[0.8951, -0.7502, 0.0389], [0.2664, 1.7135, -0.0685], [-0.1614, 0.0367, 1.0296]];
+		var mai = [[0.986993, 0.432305, -0.008529], [-0.147054, 0.51836, 0.040043], [0.159963, 0.049291, 0.968487]];
+		break;
+	  case "von_kries":
+		var ma = [[0.40024, -0.2263, 0], [0.7076, 1.16532, 0], [-0.08081, 0.0457, 0.91822]];
+		var mai = [[1.859936, 0.361191, 0], [-1.129382, 0.638812, 0], [0.219897, -0.000006, 1.089064]];
+		break;
+	  default:
+		dojo.debug("The " + this.chromaticAdaptationAlg + " chromatic adaptation algorithm matricies are not defined");
 	}
-
-	var domain_src = dojo.math.matrix.multiply( [[wp_src.x, wp_src.y, wp_src.z]], ma);
-	var domain_dst = dojo.math.matrix.multiply( [[wp_dst.x, wp_dst.y, wp_dst.z]], ma);
-
-	var centre = [
-		[domain_dst[0][0]/domain_src[0][0], 0, 0],
-		[0, domain_dst[0][1]/domain_src[0][1], 0],
-		[0, 0, domain_dst[0][2]/domain_src[0][2]]
-	];
-
-	var m = dojo.math.matrix.multiply( dojo.math.matrix.multiply( ma, centre ), mai );
-	var dst = dojo.math.matrix.multiply( [[ col.X, col.Y, col.Z ]], m );
+	var domain_src = dojo.math.matrix.multiply([[wp_src.x, wp_src.y, wp_src.z]], ma);
+	var domain_dst = dojo.math.matrix.multiply([[wp_dst.x, wp_dst.y, wp_dst.z]], ma);
+	var centre = [[domain_dst[0][0] / domain_src[0][0], 0, 0], [0, domain_dst[0][1] / domain_src[0][1], 0], [0, 0, domain_dst[0][2] / domain_src[0][2]]];
+	var m = dojo.math.matrix.multiply(dojo.math.matrix.multiply(ma, centre), mai);
+	var dst = dojo.math.matrix.multiply([[col.X, col.Y, col.Z]], m);
 	return dst[0];
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-dojo.gfx.Colorspace.prototype.getRGB_XYZ_Matrix = function(){
+};
+dojo.gfx.Colorspace.prototype.getRGB_XYZ_Matrix = function () {
 	var wp = this.getWhitePoint();
 	var pr = this.getPrimaries();
-
 	var Xr = pr.xr / pr.yr;
 	var Yr = 1;
 	var Zr = (1 - pr.xr - pr.yr) / pr.yr;
-
 	var Xg = pr.xg / pr.yg;
 	var Yg = 1;
 	var Zg = (1 - pr.xg - pr.yg) / pr.yg;
-
 	var Xb = pr.xb / pr.yb;
 	var Yb = 1;
 	var Zb = (1 - pr.xb - pr.yb) / pr.yb;
-
-	var m1 = [[Xr, Yr, Zr],[Xg, Yg, Zg],[Xb, Yb, Zb]];
+	var m1 = [[Xr, Yr, Zr], [Xg, Yg, Zg], [Xb, Yb, Zb]];
 	var m2 = [[wp.X, wp.Y, wp.Z]];
 	var sm = dojo.math.matrix.multiply(m2, dojo.math.matrix.inverse(m1));
-
 	var Sr = sm[0][0];
 	var Sg = sm[0][1];
 	var Sb = sm[0][2];
-
-	var m4 = [[Sr*Xr, Sr*Yr, Sr*Zr],
-		  [Sg*Xg, Sg*Yg, Sg*Zg],
-		  [Sb*Xb, Sb*Yb, Sb*Zb]];
-
+	var m4 = [[Sr * Xr, Sr * Yr, Sr * Zr], [Sg * Xg, Sg * Yg, Sg * Zg], [Sb * Xb, Sb * Yb, Sb * Zb]];
 	return m4;
-}
-
-dojo.gfx.Colorspace.prototype.getXYZ_RGB_Matrix = function(){
+};
+dojo.gfx.Colorspace.prototype.getXYZ_RGB_Matrix = function () {
 	var m = this.getRGB_XYZ_Matrix();
 	return dojo.math.matrix.inverse(m);
-}
-
-dojo.gfx.Colorspace.prototype.XYZ_to_Luv = function(){
-	var src = this.munge('XYZ', arguments);
-
+};
+dojo.gfx.Colorspace.prototype.XYZ_to_Luv = function () {
+	var src = this.munge("XYZ", arguments);
 	var wp = this.getWhitePoint();
 	var ud = (4 * src.X) / (src.X + 15 * src.Y + 3 * src.Z);
 	var vd = (9 * src.Y) / (src.X + 15 * src.Y + 3 * src.Z);
-
 	var udr = (4 * wp.X) / (wp.X + 15 * wp.Y + 3 * wp.Z);
 	var vdr = (9 * wp.Y) / (wp.X + 15 * wp.Y + 3 * wp.Z);
 	var yr = src.Y / wp.Y;
-
-	var L = (yr > this.epsilon()) ? 116 * Math.pow(yr, 1/3) - 16 : this.kappa() * yr;
-	var u = 13 * L * (ud-udr);
-	var v = 13 * L * (vd-vdr);
-
+	var L = (yr > this.epsilon()) ? 116 * Math.pow(yr, 1 / 3) - 16 : this.kappa() * yr;
+	var u = 13 * L * (ud - udr);
+	var v = 13 * L * (vd - vdr);
 	return [L, u, v];
-}
-
-dojo.gfx.Colorspace.prototype.Luv_to_XYZ = function(){
-	var src = this.munge('Luv', arguments);
-
+};
+dojo.gfx.Colorspace.prototype.Luv_to_XYZ = function () {
+	var src = this.munge("Luv", arguments);
 	var wp = this.getWhitePoint();
 	var uz = (4 * wp.X) / (wp.X + 15 * wp.Y + 3 * wp.Z);
 	var vz = (9 * wp.Y) / (wp.X + 15 * wp.Y + 3 * wp.Z);
 	var Y = (src.L > this.kappa() * this.epsilon()) ? Math.pow((src.L + 16) / 116, 3) : src.L / this.kappa();
-
 	var a = (1 / 3) * (((52 * src.L) / (src.u + 13 * src.L * uz)) - 1);
 	var b = -5 * Y;
-	var c = - (1 / 3);
+	var c = -(1 / 3);
 	var d = Y * (((39 * src.L) / (src.v + 13 * src.L * vz)) - 5);
-
 	var X = (d - b) / (a - c);
 	var Z = X * a + b;
-
 	return [X, Y, Z];
-}
-
-dojo.gfx.Colorspace.prototype.Luv_to_LCHuv = function(){
-	var src = this.munge('Luv', arguments);
-
+};
+dojo.gfx.Colorspace.prototype.Luv_to_LCHuv = function () {
+	var src = this.munge("Luv", arguments);
 	var L = src.L;
 	var C = Math.pow(src.u * src.u + src.v * src.v, 0.5);
 	var H = Math.atan2(src.v, src.u) * (180 / Math.PI);
-
-	if (H < 0){ H += 360; }
-	if (H > 360){ H -= 360; }
-
+	if (H < 0) {
+		H += 360;
+	}
+	if (H > 360) {
+		H -= 360;
+	}
 	return [L, C, H];
-}
-
-dojo.gfx.Colorspace.prototype.LCHuv_to_Luv = function(){
-	var src = this.munge('LCH', arguments);
-
+};
+dojo.gfx.Colorspace.prototype.LCHuv_to_Luv = function () {
+	var src = this.munge("LCH", arguments);
 	var H_rad = src.H * (Math.PI / 180);
 	var L = src.L;
 	var u = src.C / Math.pow(Math.pow(Math.tan(H_rad), 2) + 1, 0.5);
 	var v = Math.pow(src.C * src.C - u * u, 0.5);
-
-	if ((90 < src.H) && (src.H < 270)){ u *= -1; }
-	if (src.H > 180){ v *= -1; }
-
+	if ((90 < src.H) && (src.H < 270)) {
+		u *= -1;
+	}
+	if (src.H > 180) {
+		v *= -1;
+	}
 	return [L, u, v];
-}
-
-dojo.gfx.Colorspace.colorTemp_to_whitePoint = function(T){
-	if (T < 4000){
+};
+dojo.gfx.Colorspace.colorTemp_to_whitePoint = function (T) {
+	if (T < 4000) {
 		dojo.debug("Can't find a white point for temperatures under 4000K");
-		return [0,0];
+		return [0, 0];
 	}
-
-	if (T > 25000){
+	if (T > 25000) {
 		dojo.debug("Can't find a white point for temperatures over 25000K");
-		return [0,0];
+		return [0, 0];
 	}
-
 	var T1 = T;
 	var T2 = T * T;
 	var T3 = T2 * T;
-
 	var ten9 = Math.pow(10, 9);
 	var ten6 = Math.pow(10, 6);
 	var ten3 = Math.pow(10, 3);
-
-	if (T <= 7000){
-		var x = (-4.6070 * ten9 / T3) + (2.9678 * ten6 / T2) + (0.09911 * ten3 / T) + 0.244063;
-	}else{
-		var x = (-2.0064 * ten9 / T3) + (1.9018 * ten6 / T2) + (0.24748 * ten3 / T) + 0.237040;
+	if (T <= 7000) {
+		var x = (-4.607 * ten9 / T3) + (2.9678 * ten6 / T2) + (0.09911 * ten3 / T) + 0.244063;
+	} else {
+		var x = (-2.0064 * ten9 / T3) + (1.9018 * ten6 / T2) + (0.24748 * ten3 / T) + 0.23704;
 	}
-	var y = -3.000 * x * x + 2.870 * x - 0.275;
-
+	var y = -3 * x * x + 2.87 * x - 0.275;
 	return [x, y];
-}
-
-dojo.gfx.Colorspace.prototype.RGB_to_CMY = function(){
-	var src = this.munge('RGB', arguments);
-
+};
+dojo.gfx.Colorspace.prototype.RGB_to_CMY = function () {
+	var src = this.munge("RGB", arguments);
 	var C = 1 - src.R;
 	var M = 1 - src.G;
 	var Y = 1 - src.B;
-
 	return [C, M, Y];
-}
-
-dojo.gfx.Colorspace.prototype.CMY_to_RGB = function(){
-	var src = this.munge('CMY', arguments);
-
+};
+dojo.gfx.Colorspace.prototype.CMY_to_RGB = function () {
+	var src = this.munge("CMY", arguments);
 	var R = 1 - src.C;
 	var G = 1 - src.M;
 	var B = 1 - src.Y;
-
 	return [R, G, B];
-}
-
-dojo.gfx.Colorspace.prototype.RGB_to_CMYK = function(){
-	var src = this.munge('RGB', arguments);
-
-	var K = Math.min(1-src.R, 1-src.G, 1-src.B);
+};
+dojo.gfx.Colorspace.prototype.RGB_to_CMYK = function () {
+	var src = this.munge("RGB", arguments);
+	var K = Math.min(1 - src.R, 1 - src.G, 1 - src.B);
 	var C = (1 - src.R - K) / (1 - K);
 	var M = (1 - src.G - K) / (1 - K);
 	var Y = (1 - src.B - K) / (1 - K);
-
 	return [C, M, Y, K];
-}
-
-dojo.gfx.Colorspace.prototype.CMYK_to_RGB = function(){
-	var src = this.munge('CMYK', arguments);
-
-	var R = 1 - Math.min(1, src.C * (1-src.K) + src.K);
-	var G = 1 - Math.min(1, src.M * (1-src.K) + src.K);
-	var B = 1 - Math.min(1, src.Y * (1-src.K) + src.K);
-
+};
+dojo.gfx.Colorspace.prototype.CMYK_to_RGB = function () {
+	var src = this.munge("CMYK", arguments);
+	var R = 1 - Math.min(1, src.C * (1 - src.K) + src.K);
+	var G = 1 - Math.min(1, src.M * (1 - src.K) + src.K);
+	var B = 1 - Math.min(1, src.Y * (1 - src.K) + src.K);
 	return [R, G, B];
-}
-
-dojo.gfx.Colorspace.prototype.CMY_to_CMYK = function(){
-	var src = this.munge('CMY', arguments);
-
+};
+dojo.gfx.Colorspace.prototype.CMY_to_CMYK = function () {
+	var src = this.munge("CMY", arguments);
 	var K = Math.min(src.C, src.M, src.Y);
 	var C = (src.C - K) / (1 - K);
 	var M = (src.M - K) / (1 - K);
 	var Y = (src.Y - K) / (1 - K);
-
 	return [C, M, Y, K];
-}
-
-dojo.gfx.Colorspace.prototype.CMYK_to_CMY = function(){
-	var src = this.munge('CMYK', arguments);
-
-	var C = Math.min(1, src.C * (1-src.K) + src.K);
-	var M = Math.min(1, src.M * (1-src.K) + src.K);
-	var Y = Math.min(1, src.Y * (1-src.K) + src.K);
-
+};
+dojo.gfx.Colorspace.prototype.CMYK_to_CMY = function () {
+	var src = this.munge("CMYK", arguments);
+	var C = Math.min(1, src.C * (1 - src.K) + src.K);
+	var M = Math.min(1, src.M * (1 - src.K) + src.K);
+	var Y = Math.min(1, src.Y * (1 - src.K) + src.K);
 	return [C, M, Y];
-}
-
-dojo.gfx.Colorspace.prototype.RGB_to_HSV = function(){
-	var src = this.munge('RGB', arguments);
-
-	// Based on C Code in "Computer Graphics -- Principles and Practice,"
-	// Foley et al, 1996, p. 592. 
-
+};
+dojo.gfx.Colorspace.prototype.RGB_to_HSV = function () {
+	var src = this.munge("RGB", arguments);
 	var min = Math.min(src.R, src.G, src.B);
 	var V = Math.max(src.R, src.G, src.B);
-
 	var delta = V - min;
-
 	var H = null;
 	var S = (V == 0) ? 0 : delta / V;
-
-	if (S == 0){
+	if (S == 0) {
 		H = 0;
-	}else{
-		if (src.R == V){
+	} else {
+		if (src.R == V) {
 			H = 60 * (src.G - src.B) / delta;
-		}else{
-			if (src.G == V){
+		} else {
+			if (src.G == V) {
 				H = 120 + 60 * (src.B - src.R) / delta;
-			}else{
-				if (src.B == V){
-					// between magenta and cyan
+			} else {
+				if (src.B == V) {
 					H = 240 + 60 * (src.R - src.G) / delta;
 				}
 			}
 		}
-		if (H < 0){
+		if (H < 0) {
 			H += 360;
 		}
 	}
-
 	H = (H == 0) ? 360 : H;
-
 	return [H, S, V];
-}
-
-dojo.gfx.Colorspace.prototype.HSV_to_RGB = function(){
-	var src = this.munge('HSV', arguments);
-	if (src.H == 360){ src.H = 0;}
-
-	// Based on C Code in "Computer Graphics -- Principles and Practice,"
-	// Foley et al, 1996, p. 593.
+};
+dojo.gfx.Colorspace.prototype.HSV_to_RGB = function () {
+	var src = this.munge("HSV", arguments);
+	if (src.H == 360) {
+		src.H = 0;
+	}
 	var r = null;
 	var g = null;
 	var b = null;
-
-	if (src.S == 0){
-		// color is on black-and-white center line
-		// achromatic: shades of gray
+	if (src.S == 0) {
 		var R = src.V;
 		var G = src.V;
 		var B = src.V;
-	}else{
-		// chromatic color
-		var hTemp = src.H / 60;		// h is now IN [0,6]
-		var i = Math.floor(hTemp);	// largest integer <= h
-		var f = hTemp - i;		// fractional part of h
-
+	} else {
+		var hTemp = src.H / 60;
+		var i = Math.floor(hTemp);
+		var f = hTemp - i;
 		var p = src.V * (1 - src.S);
 		var q = src.V * (1 - (src.S * f));
 		var t = src.V * (1 - (src.S * (1 - f)));
-
-		switch(i){
-			case 0: R = src.V; G = t    ; B = p    ; break;
-			case 1: R = q    ; G = src.V; B = p    ; break;
-			case 2: R = p    ; G = src.V; B = t    ; break;
-			case 3: R = p    ; G = q    ; B = src.V; break;
-			case 4: R = t    ; G = p    ; B = src.V; break;
-			case 5: R = src.V; G = p    ; B = q    ; break;
+		switch (i) {
+		  case 0:
+			R = src.V;
+			G = t;
+			B = p;
+			break;
+		  case 1:
+			R = q;
+			G = src.V;
+			B = p;
+			break;
+		  case 2:
+			R = p;
+			G = src.V;
+			B = t;
+			break;
+		  case 3:
+			R = p;
+			G = q;
+			B = src.V;
+			break;
+		  case 4:
+			R = t;
+			G = p;
+			B = src.V;
+			break;
+		  case 5:
+			R = src.V;
+			G = p;
+			B = q;
+			break;
 		}
 	}
-
 	return [R, G, B];
-}
-
-dojo.gfx.Colorspace.prototype.RGB_to_HSL = function(){
-	var src = this.munge('RGB', arguments);
-
-	// based on C code from http://astronomy.swin.edu.au/~pbourke/colour/hsl/
+};
+dojo.gfx.Colorspace.prototype.RGB_to_HSL = function () {
+	var src = this.munge("RGB", arguments);
 	var min = Math.min(src.R, src.G, src.B);
 	var max = Math.max(src.R, src.G, src.B);
 	var delta = max - min;
-
 	var H = 0;
 	var S = 0;
 	var L = (min + max) / 2;
-
-	if ((L > 0) && (L < 1)){
+	if ((L > 0) && (L < 1)) {
 		S = delta / ((L < 0.5) ? (2 * L) : (2 - 2 * L));
 	}
-
 	if (delta > 0) {
-		if ((max == src.R) && (max != src.G)){
+		if ((max == src.R) && (max != src.G)) {
 			H += (src.G - src.B) / delta;
 		}
-		if ((max == src.G) && (max != src.B)){
+		if ((max == src.G) && (max != src.B)) {
 			H += (2 + (src.B - src.R) / delta);
 		}
-		if ((max == src.B) && (max != src.R)){
+		if ((max == src.B) && (max != src.R)) {
 			H += (4 + (src.R - src.G) / delta);
 		}
 		H *= 60;
 	}
 	H = (H == 0) ? 360 : H;
 	return [H, S, L];
-}
-
-dojo.gfx.Colorspace.prototype.HSL_to_RGB = function(){
-	var src = this.munge('HSL', arguments);
-
-	// based on C code from http://astronomy.swin.edu.au/~pbourke/colour/hsl/
-	while (src.H < 0){ src.H += 360; }
-	while (src.H >= 360){ src.H -= 360; }
-
+};
+dojo.gfx.Colorspace.prototype.HSL_to_RGB = function () {
+	var src = this.munge("HSL", arguments);
+	while (src.H < 0) {
+		src.H += 360;
+	}
+	while (src.H >= 360) {
+		src.H -= 360;
+	}
 	var R = 0;
 	var G = 0;
 	var B = 0;
-
-	if (src.H < 120){
+	if (src.H < 120) {
 		R = (120 - src.H) / 60;
 		G = src.H / 60;
 		B = 0;
-	}else if (src.H < 240){
-		R = 0;
-		G = (240 - src.H) / 60;
-		B = (src.H - 120) / 60;
-	}else{
-		R = (src.H - 240) / 60;
-		G = 0;
-		B = (360 - src.H) / 60;
+	} else {
+		if (src.H < 240) {
+			R = 0;
+			G = (240 - src.H) / 60;
+			B = (src.H - 120) / 60;
+		} else {
+			R = (src.H - 240) / 60;
+			G = 0;
+			B = (360 - src.H) / 60;
+		}
 	}
-
 	R = 2 * src.S * Math.min(R, 1) + (1 - src.S);
 	G = 2 * src.S * Math.min(G, 1) + (1 - src.S);
 	B = 2 * src.S * Math.min(B, 1) + (1 - src.S);
-
-	if (src.L < 0.5){
+	if (src.L < 0.5) {
 		R = src.L * R;
 		G = src.L * G;
 		B = src.L * B;
-	}else{
+	} else {
 		R = (1 - src.L) * R + 2 * src.L - 1;
 		G = (1 - src.L) * G + 2 * src.L - 1;
 		B = (1 - src.L) * B + 2 * src.L - 1;
 	}
 	return [R, G, B];
-}
+};
 
+
 __CPAN_FILE__ src/gfx/vml.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -92697,1315 +64990,1004 @@
 */
 
 dojo.provide("dojo.gfx.vml");
-
 dojo.require("dojo.dom");
 dojo.require("dojo.math");
 dojo.require("dojo.lang.declare");
 dojo.require("dojo.lang.extras");
 dojo.require("dojo.string.*");
 dojo.require("dojo.html.metrics");
-
 dojo.require("dojo.gfx.color");
 dojo.require("dojo.gfx.common");
 dojo.require("dojo.gfx.shape");
 dojo.require("dojo.gfx.path");
-
 dojo.require("dojo.experimental");
 dojo.experimental("dojo.gfx.vml");
-
-// dojo.gfx.vml.xmlns: String: a VML's namespace
 dojo.gfx.vml.xmlns = "urn:schemas-microsoft-com:vml";
-
-dojo.gfx.vml._parseFloat = function(str) {
-	// summary: a helper function to parse VML-specific floating-point values
-	// str: String: a representation of a floating-point number
-	return str.match(/^\d+f$/i) ? parseInt(str) / 65536 : parseFloat(str);	// Number
+dojo.gfx.vml._parseFloat = function (str) {
+	return str.match(/^\d+f$/i) ? parseInt(str) / 65536 : parseFloat(str);
 };
-
-// dojo.gfx.vml.cm_in_pt: Number: centimeters per inch
 dojo.gfx.vml.cm_in_pt = 72 / 2.54;
-
-// dojo.gfx.vml.mm_in_pt: Number: millimeters per inch
 dojo.gfx.vml.mm_in_pt = 7.2 / 2.54;
-
-dojo.gfx.vml.px_in_pt = function(){
-	// summary: returns a number of pixels per point
-	return dojo.html.getCachedFontMeasurements()["12pt"] / 12;	// Number
+dojo.gfx.vml.px_in_pt = function () {
+	return dojo.html.getCachedFontMeasurements()["12pt"] / 12;
 };
-dojo.gfx.vml.pt2px = function(len){
-	// summary: converts points to pixels
-	// len: Number: a value in points
-	return len * this.px_in_pt();	// Number
+dojo.gfx.vml.pt2px = function (len) {
+	return len * this.px_in_pt();
 };
-dojo.gfx.vml.px2pt = function(len){
-	// summary: converts pixels to points
-	// len: Number: a value in pixels
-	return len / this.px_in_pt();	// Number
+dojo.gfx.vml.px2pt = function (len) {
+	return len / this.px_in_pt();
 };
-
-dojo.gfx.vml.normalizedLength = function(len) {
-	// summary: converts any length value to points
-	// len: String: a length, e.g., "12pc"
-	if(len.length == 0) return 0;
-	if(len.length > 2){
+dojo.gfx.vml.normalizedLength = function (len) {
+	if (len.length == 0) {
+		return 0;
+	}
+	if (len.length > 2) {
 		var px_in_pt = this.px_in_pt();
 		var val = parseFloat(len);
-		switch(len.slice(-2)){
-			case "px": return val;
-			case "pt": return val * px_in_pt;
-			case "in": return val * 72 * px_in_pt;
-			case "pc": return val * 12 * px_in_pt;
-			case "mm": return val / this.mm_in_pt * px_in_pt;
-			case "cm": return val / this.cm_in_pt * px_in_pt;
+		switch (len.slice(-2)) {
+		  case "px":
+			return val;
+		  case "pt":
+			return val * px_in_pt;
+		  case "in":
+			return val * 72 * px_in_pt;
+		  case "pc":
+			return val * 12 * px_in_pt;
+		  case "mm":
+			return val / this.mm_in_pt * px_in_pt;
+		  case "cm":
+			return val / this.cm_in_pt * px_in_pt;
 		}
 	}
-	return parseFloat(len);	// Number
+	return parseFloat(len);
 };
-
-dojo.lang.extend(dojo.gfx.Shape, {
-	// summary: VML-specific implementation of dojo.gfx.Shape methods
-
-	setFill: function(fill){
-		// summary: sets a fill object (VML)
-		// fill: Object: a fill object
-		//	(see dojo.gfx.defaultLinearGradient, 
-		//	dojo.gfx.defaultRadialGradient, 
-		//	dojo.gfx.defaultPattern, 
-		//	or dojo.gfx.color.Color)
-
-		if(!fill){
-			// don't fill
-			this.fillStyle = null;
-			this.rawNode.filled = false;
-			return this;
-		}
-		if(typeof(fill) == "object" && "type" in fill){
-			// gradient
-			switch(fill.type){
-				case "linear":
-					var f = dojo.gfx.makeParameters(dojo.gfx.defaultLinearGradient, fill);
-					this.fillStyle = f;
-					var s = "";
-					for(var i = 0; i < f.colors.length; ++i){
-						f.colors[i].color = dojo.gfx.normalizeColor(f.colors[i].color);
-						s += f.colors[i].offset.toFixed(8) + " " + f.colors[i].color.toHex() + ";";
-					}
-					var fo = this.rawNode.fill;
-					fo.colors.value = s;
-					fo.method = "sigma";
-					fo.type = "gradient";
-					fo.angle = (dojo.math.radToDeg(Math.atan2(f.x2 - f.x1, f.y2 - f.y1)) + 180) % 360;
-					fo.on = true;
-					break;
-				case "radial":
-					var f = dojo.gfx.makeParameters(dojo.gfx.defaultRadialGradient, fill);
-					this.fillStyle = f;
-					var w = parseFloat(this.rawNode.style.width);
-					var h = parseFloat(this.rawNode.style.height);
-					var c = isNaN(w) ? 1 : 2 * f.r / w;
-					var i = f.colors.length - 1;
-					f.colors[i].color = dojo.gfx.normalizeColor(f.colors[i].color);
-					var s = "0 " + f.colors[i].color.toHex();
-					for(; i >= 0; --i){
-						f.colors[i].color = dojo.gfx.normalizeColor(f.colors[i].color);
-						s += (1 - c * f.colors[i].offset).toFixed(8) + " " + f.colors[i].color.toHex() + ";";
-					}
-					var fo = this.rawNode.fill;
-					fo.colors.value = s;
-					fo.method = "sigma";
-					fo.type = "gradientradial";
-					if(isNaN(w) || isNaN(h)){
-						fo.focusposition = "0.5 0.5";
-					}else{
-						fo.focusposition = (f.cx / w).toFixed(8) + " " + (f.cy / h).toFixed(8);
-					}
-					fo.focussize = "0 0";
-					fo.on = true;
-					break;
-				case "pattern":
-					var f = dojo.gfx.makeParameters(dojo.gfx.defaultPattern, fill);
-					this.fillStyle = f;
-					var fo = this.rawNode.fill;
-					fo.type = "tile";
-					fo.src = f.src;
-					if(f.width && f.height){
-						// in points
-						fo.size.x = dojo.gfx.vml.px2pt(f.width);
-						fo.size.y = dojo.gfx.vml.px2pt(f.height);
-					}
-					fo.alignShape = false;
-					fo.position.x = 0;
-					fo.position.y = 0;
-					fo.origin.x = f.width  ? f.x / f.width  : 0;
-					fo.origin.y = f.height ? f.y / f.height : 0;
-					fo.on = true;
-					break;
+dojo.lang.extend(dojo.gfx.Shape, {setFill:function (fill) {
+	if (!fill) {
+		this.fillStyle = null;
+		this.rawNode.filled = false;
+		return this;
+	}
+	if (typeof (fill) == "object" && "type" in fill) {
+		switch (fill.type) {
+		  case "linear":
+			var f = dojo.gfx.makeParameters(dojo.gfx.defaultLinearGradient, fill);
+			this.fillStyle = f;
+			var s = "";
+			for (var i = 0; i < f.colors.length; ++i) {
+				f.colors[i].color = dojo.gfx.normalizeColor(f.colors[i].color);
+				s += f.colors[i].offset.toFixed(8) + " " + f.colors[i].color.toHex() + ";";
 			}
-			this.rawNode.fill.opacity = 1;
-			return this;
+			var fo = this.rawNode.fill;
+			fo.colors.value = s;
+			fo.method = "sigma";
+			fo.type = "gradient";
+			fo.angle = (dojo.math.radToDeg(Math.atan2(f.x2 - f.x1, f.y2 - f.y1)) + 180) % 360;
+			fo.on = true;
+			break;
+		  case "radial":
+			var f = dojo.gfx.makeParameters(dojo.gfx.defaultRadialGradient, fill);
+			this.fillStyle = f;
+			var w = parseFloat(this.rawNode.style.width);
+			var h = parseFloat(this.rawNode.style.height);
+			var c = isNaN(w) ? 1 : 2 * f.r / w;
+			var i = f.colors.length - 1;
+			f.colors[i].color = dojo.gfx.normalizeColor(f.colors[i].color);
+			var s = "0 " + f.colors[i].color.toHex();
+			for (; i >= 0; --i) {
+				f.colors[i].color = dojo.gfx.normalizeColor(f.colors[i].color);
+				s += (1 - c * f.colors[i].offset).toFixed(8) + " " + f.colors[i].color.toHex() + ";";
+			}
+			var fo = this.rawNode.fill;
+			fo.colors.value = s;
+			fo.method = "sigma";
+			fo.type = "gradientradial";
+			if (isNaN(w) || isNaN(h)) {
+				fo.focusposition = "0.5 0.5";
+			} else {
+				fo.focusposition = (f.cx / w).toFixed(8) + " " + (f.cy / h).toFixed(8);
+			}
+			fo.focussize = "0 0";
+			fo.on = true;
+			break;
+		  case "pattern":
+			var f = dojo.gfx.makeParameters(dojo.gfx.defaultPattern, fill);
+			this.fillStyle = f;
+			var fo = this.rawNode.fill;
+			fo.type = "tile";
+			fo.src = f.src;
+			if (f.width && f.height) {
+				fo.size.x = dojo.gfx.vml.px2pt(f.width);
+				fo.size.y = dojo.gfx.vml.px2pt(f.height);
+			}
+			fo.alignShape = false;
+			fo.position.x = 0;
+			fo.position.y = 0;
+			fo.origin.x = f.width ? f.x / f.width : 0;
+			fo.origin.y = f.height ? f.y / f.height : 0;
+			fo.on = true;
+			break;
 		}
-		// color object
-		this.fillStyle = dojo.gfx.normalizeColor(fill);
-		this.rawNode.fillcolor = this.fillStyle.toHex();
-		this.rawNode.fill.opacity = this.fillStyle.a;
-		this.rawNode.filled = true;
-		return this;	// self
-	},
-
-	setStroke: function(stroke){
-		// summary: sets a stroke object (VML)
-		// stroke: Object: a stroke object
-		//	(see dojo.gfx.defaultStroke) 
-	
-		if(!stroke){
-			// don't stroke
-			this.strokeStyle = null;
-			this.rawNode.stroked = false;
-			return this;
+		this.rawNode.fill.opacity = 1;
+		return this;
+	}
+	this.fillStyle = dojo.gfx.normalizeColor(fill);
+	this.rawNode.fillcolor = this.fillStyle.toHex();
+	this.rawNode.fill.opacity = this.fillStyle.a;
+	this.rawNode.filled = true;
+	return this;
+}, setStroke:function (stroke) {
+	if (!stroke) {
+		this.strokeStyle = null;
+		this.rawNode.stroked = false;
+		return this;
+	}
+	this.strokeStyle = dojo.gfx.makeParameters(dojo.gfx.defaultStroke, stroke);
+	this.strokeStyle.color = dojo.gfx.normalizeColor(this.strokeStyle.color);
+	var s = this.strokeStyle;
+	this.rawNode.stroked = true;
+	this.rawNode.strokecolor = s.color.toCss();
+	this.rawNode.strokeweight = s.width + "px";
+	if (this.rawNode.stroke) {
+		this.rawNode.stroke.opacity = s.color.a;
+		this.rawNode.stroke.endcap = this._translate(this._capMap, s.cap);
+		if (typeof (s.join) == "number") {
+			this.rawNode.stroke.joinstyle = "miter";
+			this.rawNode.stroke.miterlimit = s.join;
+		} else {
+			this.rawNode.stroke.joinstyle = s.join;
 		}
-		// normalize the stroke
-		this.strokeStyle = dojo.gfx.makeParameters(dojo.gfx.defaultStroke, stroke);
-		this.strokeStyle.color = dojo.gfx.normalizeColor(this.strokeStyle.color);
-		// generate attributes
-		var s = this.strokeStyle;
-		this.rawNode.stroked = true;
-		this.rawNode.strokecolor = s.color.toCss();
-		this.rawNode.strokeweight = s.width + "px";	// TODO: should we assume that the width is always in pixels?
-		if(this.rawNode.stroke) {
-			this.rawNode.stroke.opacity = s.color.a;
-			this.rawNode.stroke.endcap = this._translate(this._capMap, s.cap);
-			if(typeof(s.join) == "number") {
-				this.rawNode.stroke.joinstyle = "miter";
-				this.rawNode.stroke.miterlimit = s.join;
-			}else{
-				this.rawNode.stroke.joinstyle = s.join;
-				// this.rawNode.stroke.miterlimit = s.width;
+	}
+	return this;
+}, _capMap:{butt:"flat"}, _capMapReversed:{flat:"butt"}, _translate:function (dict, value) {
+	return (value in dict) ? dict[value] : value;
+}, _applyTransform:function () {
+	var matrix = this._getRealMatrix();
+	if (!matrix) {
+		return this;
+	}
+	var skew = this.rawNode.skew;
+	if (typeof (skew) == "undefined") {
+		for (var i = 0; i < this.rawNode.childNodes.length; ++i) {
+			if (this.rawNode.childNodes[i].tagName == "skew") {
+				skew = this.rawNode.childNodes[i];
+				break;
 			}
 		}
-		return this;	// self
-	},
-	
-	_capMap: { butt: 'flat' },
-	_capMapReversed: { flat: 'butt' },
-	
-	_translate: function(dict, value) {
-		return (value in dict) ? dict[value] : value;
-	},
-	
-	_applyTransform: function() {
-		var matrix = this._getRealMatrix();
-		if(!matrix) return this;
-		var skew = this.rawNode.skew;
-		if(typeof(skew) == "undefined"){
-			for(var i = 0; i < this.rawNode.childNodes.length; ++i){
-				if(this.rawNode.childNodes[i].tagName == "skew"){
-					skew = this.rawNode.childNodes[i];
-					break;
-				}
-			}
+	}
+	if (skew) {
+		skew.on = false;
+		var mt = matrix.xx.toFixed(8) + " " + matrix.xy.toFixed(8) + " " + matrix.yx.toFixed(8) + " " + matrix.yy.toFixed(8) + " 0 0";
+		var offset = Math.floor(matrix.dx).toFixed() + "px " + Math.floor(matrix.dy).toFixed() + "px";
+		var l = parseFloat(this.rawNode.style.left);
+		var t = parseFloat(this.rawNode.style.top);
+		var w = parseFloat(this.rawNode.style.width);
+		var h = parseFloat(this.rawNode.style.height);
+		if (isNaN(l)) {
+			l = 0;
 		}
-		if(skew){
-			skew.on = false;
-			var mt = matrix.xx.toFixed(8) + " " + matrix.xy.toFixed(8) + " " + 
-				matrix.yx.toFixed(8) + " " + matrix.yy.toFixed(8) + " 0 0";
-			var offset = Math.floor(matrix.dx).toFixed() + "px " + Math.floor(matrix.dy).toFixed() + "px";
-			var l = parseFloat(this.rawNode.style.left);
-			var t = parseFloat(this.rawNode.style.top);
-			var w = parseFloat(this.rawNode.style.width);
-			var h = parseFloat(this.rawNode.style.height);
-			if(isNaN(l)) l = 0;
-			if(isNaN(t)) t = 0;
-			if(isNaN(w)) w = 1;
-			if(isNaN(h)) h = 1;
-			var origin = (-l / w - 0.5).toFixed(8) + " " + (-t / h - 0.5).toFixed(8);
-			skew.matrix =  mt;
-			skew.origin = origin;
-			skew.offset = offset;
-			skew.on = true;
+		if (isNaN(t)) {
+			t = 0;
 		}
-		return this;
-	},
-
-	setRawNode: function(rawNode){
-		// summary:
-		//	assigns and clears the underlying node that will represent this
-		//	shape. Once set, transforms, gradients, etc, can be applied.
-		//	(no fill & stroke by default)
-		rawNode.stroked = false;
-		rawNode.filled  = false;
-		this.rawNode = rawNode;
-	},
-
-	// Attach family
-	
-	attachFill: function(rawNode){
-		// summary: deduces a fill style from a Node.
-		// rawNode: Node: an VML node
-		var fillStyle = null;
-		var fo = rawNode.fill;
-		if(rawNode) {
-			if(fo.on && fo.type == "gradient"){
-				var fillStyle = dojo.lang.shallowCopy(dojo.gfx.defaultLinearGradient, true);
-				var rad = dojo.math.degToRad(fo.angle);
-				fillStyle.x2 = Math.cos(rad);
-				fillStyle.y2 = Math.sin(rad);
-				fillStyle.colors = [];
-				var stops = fo.colors.value.split(";");
-				for(var i = 0; i < stops.length; ++i){
-					var t = stops[i].match(/\S+/g);
-					if(!t || t.length != 2) continue;
-					fillStyle.colors.push({offset: dojo.gfx.vml._parseFloat(t[0]), color: new dojo.gfx.color.Color(t[1])});
+		if (isNaN(w)) {
+			w = 1;
+		}
+		if (isNaN(h)) {
+			h = 1;
+		}
+		var origin = (-l / w - 0.5).toFixed(8) + " " + (-t / h - 0.5).toFixed(8);
+		skew.matrix = mt;
+		skew.origin = origin;
+		skew.offset = offset;
+		skew.on = true;
+	}
+	return this;
+}, setRawNode:function (rawNode) {
+	rawNode.stroked = false;
+	rawNode.filled = false;
+	this.rawNode = rawNode;
+}, attachFill:function (rawNode) {
+	var fillStyle = null;
+	var fo = rawNode.fill;
+	if (rawNode) {
+		if (fo.on && fo.type == "gradient") {
+			var fillStyle = dojo.lang.shallowCopy(dojo.gfx.defaultLinearGradient, true);
+			var rad = dojo.math.degToRad(fo.angle);
+			fillStyle.x2 = Math.cos(rad);
+			fillStyle.y2 = Math.sin(rad);
+			fillStyle.colors = [];
+			var stops = fo.colors.value.split(";");
+			for (var i = 0; i < stops.length; ++i) {
+				var t = stops[i].match(/\S+/g);
+				if (!t || t.length != 2) {
+					continue;
 				}
-			}else if(fo.on && fo.type == "gradientradial"){
+				fillStyle.colors.push({offset:dojo.gfx.vml._parseFloat(t[0]), color:new dojo.gfx.color.Color(t[1])});
+			}
+		} else {
+			if (fo.on && fo.type == "gradientradial") {
 				var fillStyle = dojo.lang.shallowCopy(dojo.gfx.defaultRadialGradient, true);
 				var w = parseFloat(rawNode.style.width);
 				var h = parseFloat(rawNode.style.height);
 				fillStyle.cx = isNaN(w) ? 0 : fo.focusposition.x * w;
 				fillStyle.cy = isNaN(h) ? 0 : fo.focusposition.y * h;
-				fillStyle.r  = isNaN(w) ? 1 : w / 2;
+				fillStyle.r = isNaN(w) ? 1 : w / 2;
 				fillStyle.colors = [];
 				var stops = fo.colors.value.split(";");
-				for(var i = stops.length - 1; i >= 0; --i){
+				for (var i = stops.length - 1; i >= 0; --i) {
 					var t = stops[i].match(/\S+/g);
-					if(!t || t.length != 2) continue;
-					fillStyle.colors.push({offset: dojo.gfx.vml._parseFloat(t[0]), color: new dojo.gfx.color.Color(t[1])});
+					if (!t || t.length != 2) {
+						continue;
+					}
+					fillStyle.colors.push({offset:dojo.gfx.vml._parseFloat(t[0]), color:new dojo.gfx.color.Color(t[1])});
 				}
-			}else if(fo.on && fo.type == "tile"){
-				var fillStyle = dojo.lang.shallowCopy(dojo.gfx.defaultPattern, true);
-				fillStyle.width  = dojo.gfx.vml.pt2px(fo.size.x); // from pt
-				fillStyle.height = dojo.gfx.vml.pt2px(fo.size.y); // from pt
-				fillStyle.x = fo.origin.x * fillStyle.width;
-				fillStyle.y = fo.origin.y * fillStyle.height;
-				fillStyle.src = fo.src;
-			}else if(fo.on && rawNode.fillcolor){
-				// a color object !
-				fillStyle = new dojo.gfx.color.Color(rawNode.fillcolor+"");
-				fillStyle.a = fo.opacity;
+			} else {
+				if (fo.on && fo.type == "tile") {
+					var fillStyle = dojo.lang.shallowCopy(dojo.gfx.defaultPattern, true);
+					fillStyle.width = dojo.gfx.vml.pt2px(fo.size.x);
+					fillStyle.height = dojo.gfx.vml.pt2px(fo.size.y);
+					fillStyle.x = fo.origin.x * fillStyle.width;
+					fillStyle.y = fo.origin.y * fillStyle.height;
+					fillStyle.src = fo.src;
+				} else {
+					if (fo.on && rawNode.fillcolor) {
+						fillStyle = new dojo.gfx.color.Color(rawNode.fillcolor + "");
+						fillStyle.a = fo.opacity;
+					}
+				}
 			}
 		}
-		return fillStyle;	// Object
-	},
-
-	attachStroke: function(rawNode) {
-		// summary: deduces a stroke style from a Node.
-		// rawNode: Node: an VML node
-		var strokeStyle = dojo.lang.shallowCopy(dojo.gfx.defaultStroke, true);
-		if(rawNode && rawNode.stroked){
-			strokeStyle.color = new dojo.gfx.color.Color(rawNode.strokecolor.value);
-			dojo.debug("We are expecting an .75pt here, instead of strokeweight = " + rawNode.strokeweight );
-			strokeStyle.width = dojo.gfx.vml.normalizedLength(rawNode.strokeweight+"");
-			strokeStyle.color.a = rawNode.stroke.opacity;
-			strokeStyle.cap = this._translate(this._capMapReversed, rawNode.stroke.endcap);
-			strokeStyle.join = rawNode.stroke.joinstyle == "miter" ? rawNode.stroke.miterlimit : rawNode.stroke.joinstyle;
-		}else{
-			return null;
-		}
-		return strokeStyle;	// Object
-	},
-
-	attachTransform: function(rawNode) {
-		// summary: deduces a transformation matrix from a Node.
-		// rawNode: Node: an VML node
-		var matrix = {};
-		if(rawNode){
-			var s = rawNode.skew;
-			matrix.xx = s.matrix.xtox;
-			matrix.xy = s.matrix.ytox;
-			matrix.yx = s.matrix.xtoy;
-			matrix.yy = s.matrix.ytoy;
-			matrix.dx = dojo.gfx.vml.pt2px(s.offset.x);
-			matrix.dy = dojo.gfx.vml.pt2px(s.offset.y);
-		}
-		return dojo.gfx.matrix.normalize(matrix);	// dojo.gfx.matrix.Matrix
-	},
-
-	attach: function(rawNode){
-		// summary: reconstructs all shape parameters from a Node.
-		// rawNode: Node: an VML node
-		if(rawNode){
-			this.rawNode = rawNode;
-			this.shape = this.attachShape(rawNode);
-			this.fillStyle = this.attachFill(rawNode);
-			this.strokeStyle = this.attachStroke(rawNode);
-			this.matrix = this.attachTransform(rawNode);
-		}
 	}
-});
-
-dojo.declare("dojo.gfx.Group", dojo.gfx.shape.VirtualGroup, {
-	// summary: a group shape (VML), which can be used 
-	//	to logically group shapes (e.g, to propagate matricies)
-	add: function(shape){
-		// summary: adds a shape to a group/surface
-		// shape: dojo.gfx.Shape: an VML shape object
-		if(this != shape.getParent()){
-			this.rawNode.appendChild(shape.rawNode);
-			dojo.gfx.Group.superclass.add.apply(this, arguments);
+	return fillStyle;
+}, attachStroke:function (rawNode) {
+	var strokeStyle = dojo.lang.shallowCopy(dojo.gfx.defaultStroke, true);
+	if (rawNode && rawNode.stroked) {
+		strokeStyle.color = new dojo.gfx.color.Color(rawNode.strokecolor.value);
+		dojo.debug("We are expecting an .75pt here, instead of strokeweight = " + rawNode.strokeweight);
+		strokeStyle.width = dojo.gfx.vml.normalizedLength(rawNode.strokeweight + "");
+		strokeStyle.color.a = rawNode.stroke.opacity;
+		strokeStyle.cap = this._translate(this._capMapReversed, rawNode.stroke.endcap);
+		strokeStyle.join = rawNode.stroke.joinstyle == "miter" ? rawNode.stroke.miterlimit : rawNode.stroke.joinstyle;
+	} else {
+		return null;
+	}
+	return strokeStyle;
+}, attachTransform:function (rawNode) {
+	var matrix = {};
+	if (rawNode) {
+		var s = rawNode.skew;
+		matrix.xx = s.matrix.xtox;
+		matrix.xy = s.matrix.ytox;
+		matrix.yx = s.matrix.xtoy;
+		matrix.yy = s.matrix.ytoy;
+		matrix.dx = dojo.gfx.vml.pt2px(s.offset.x);
+		matrix.dy = dojo.gfx.vml.pt2px(s.offset.y);
+	}
+	return dojo.gfx.matrix.normalize(matrix);
+}, attach:function (rawNode) {
+	if (rawNode) {
+		this.rawNode = rawNode;
+		this.shape = this.attachShape(rawNode);
+		this.fillStyle = this.attachFill(rawNode);
+		this.strokeStyle = this.attachStroke(rawNode);
+		this.matrix = this.attachTransform(rawNode);
+	}
+}});
+dojo.declare("dojo.gfx.Group", dojo.gfx.shape.VirtualGroup, {add:function (shape) {
+	if (this != shape.getParent()) {
+		this.rawNode.appendChild(shape.rawNode);
+		dojo.gfx.Group.superclass.add.apply(this, arguments);
+	}
+	return this;
+}, remove:function (shape, silently) {
+	if (this == shape.getParent()) {
+		if (this.rawNode == shape.rawNode.parentNode) {
+			this.rawNode.removeChild(shape.rawNode);
 		}
-		return this;	// self
-	},
-	remove: function(shape, silently){
-		// summary: remove a shape from a group/surface
-		// shape: dojo.gfx.Shape: an VML shape object
-		// silently: Boolean?: if true, regenerate a picture
-		if(this == shape.getParent()){
-			if(this.rawNode == shape.rawNode.parentNode){
-				this.rawNode.removeChild(shape.rawNode);
-			}
-			dojo.gfx.Group.superclass.remove.apply(this, arguments);
-		}
-		return this;	// self
-	},
-	attach: function(rawNode){
-		// summary: reconstructs all group shape parameters from a Node (VML).
-		// rawNode: Node: a node
-		if(rawNode){
-			this.rawNode = rawNode;
-			this.shape = null;
-			this.fillStyle = null;
-			this.strokeStyle = null;
-			this.matrix = null;
-		}
+		dojo.gfx.Group.superclass.remove.apply(this, arguments);
 	}
-});
-dojo.gfx.Group.nodeType = "group";
-
-var zIndex = {
-	moveToFront: function(){
-		// summary: moves a shape to front of its parent's list of shapes (VML)
-		this.rawNode.parentNode.appendChild(this.rawNode);
-		return this;
-	},
-	moveToBack: function(){
-		// summary: moves a shape to back of its parent's list of shapes (VML)
-		this.rawNode.parentNode.insertBefore(this.rawNode, this.rawNode.parentNode.firstChild);
-		return this;
+	return this;
+}, attach:function (rawNode) {
+	if (rawNode) {
+		this.rawNode = rawNode;
+		this.shape = null;
+		this.fillStyle = null;
+		this.strokeStyle = null;
+		this.matrix = null;
 	}
-};
+}});
+dojo.gfx.Group.nodeType = "group";
+var zIndex = {moveToFront:function () {
+	this.rawNode.parentNode.appendChild(this.rawNode);
+	return this;
+}, moveToBack:function () {
+	this.rawNode.parentNode.insertBefore(this.rawNode, this.rawNode.parentNode.firstChild);
+	return this;
+}};
 dojo.lang.extend(dojo.gfx.Shape, zIndex);
 dojo.lang.extend(dojo.gfx.Group, zIndex);
 delete zIndex;
-
-dojo.declare("dojo.gfx.Rect", dojo.gfx.shape.Rect, {
-	// summary: a rectangle shape (VML)
-
-	attachShape: function(rawNode){
-		// summary: builds a rectangle shape from a Node.
-		// rawNode: Node: a VML node
-
-		// a workaround for the VML's arcsize bug: cannot read arcsize of an instantiated node
-		var arcsize = rawNode.outerHTML.match(/arcsize = \"(\d*\.?\d+[%f]?)\"/)[1];
-		arcsize = (arcsize.indexOf("%") >= 0) ? parseFloat(arcsize) / 100 : dojo.gfx.vml._parseFloat(arcsize);
-		var style = rawNode.style;
-		var width  = parseFloat(style.width);
-		var height = parseFloat(style.height);
-		// make an object
-		var o = dojo.gfx.makeParameters(dojo.gfx.defaultRect, {
-			x: parseInt(style.left),
-			y: parseInt(style.top),
-			width:  width,
-			height: height,
-			r: Math.min(width, height) * arcsize
-		});
-		return o;	// dojo.gfx.shape.Rect
-	},
-	setShape: function(newShape){
-		// summary: sets a rectangle shape object (VML)
-		// newShape: Object: a rectangle shape object
-		var shape = this.shape = dojo.gfx.makeParameters(this.shape, newShape);
-		this.bbox = null;
-		var style = this.rawNode.style;
-		style.left   = shape.x.toFixed();
-		style.top    = shape.y.toFixed();
-		style.width  = (typeof(shape.width) == "string" && shape.width.indexOf("%") >= 0)  ? shape.width  : shape.width.toFixed();
-		style.height = (typeof(shape.width) == "string" && shape.height.indexOf("%") >= 0) ? shape.height : shape.height.toFixed();
-		var r = Math.min(1, (shape.r / Math.min(parseFloat(shape.width), parseFloat(shape.height)))).toFixed(8);
-		// a workaround for the VML's arcsize bug: cannot read arcsize of an instantiated node
-		var parent = this.rawNode.parentNode;
-		var before = null;
-		if(parent){
-			if(parent.lastChild != this.rawNode){
-				for(var i = 0; i < parent.childNodes.length; ++i){
-					if(parent.childNodes[i] == this.rawNode){
-						before = parent.childNodes[i+1];
-						break;
-					}
+dojo.declare("dojo.gfx.Rect", dojo.gfx.shape.Rect, {attachShape:function (rawNode) {
+	var arcsize = rawNode.outerHTML.match(/arcsize = \"(\d*\.?\d+[%f]?)\"/)[1];
+	arcsize = (arcsize.indexOf("%") >= 0) ? parseFloat(arcsize) / 100 : dojo.gfx.vml._parseFloat(arcsize);
+	var style = rawNode.style;
+	var width = parseFloat(style.width);
+	var height = parseFloat(style.height);
+	var o = dojo.gfx.makeParameters(dojo.gfx.defaultRect, {x:parseInt(style.left), y:parseInt(style.top), width:width, height:height, r:Math.min(width, height) * arcsize});
+	return o;
+}, setShape:function (newShape) {
+	var shape = this.shape = dojo.gfx.makeParameters(this.shape, newShape);
+	this.bbox = null;
+	var style = this.rawNode.style;
+	style.left = shape.x.toFixed();
+	style.top = shape.y.toFixed();
+	style.width = (typeof (shape.width) == "string" && shape.width.indexOf("%") >= 0) ? shape.width : shape.width.toFixed();
+	style.height = (typeof (shape.width) == "string" && shape.height.indexOf("%") >= 0) ? shape.height : shape.height.toFixed();
+	var r = Math.min(1, (shape.r / Math.min(parseFloat(shape.width), parseFloat(shape.height)))).toFixed(8);
+	var parent = this.rawNode.parentNode;
+	var before = null;
+	if (parent) {
+		if (parent.lastChild != this.rawNode) {
+			for (var i = 0; i < parent.childNodes.length; ++i) {
+				if (parent.childNodes[i] == this.rawNode) {
+					before = parent.childNodes[i + 1];
+					break;
 				}
 			}
-			parent.removeChild(this.rawNode);
 		}
-		this.rawNode.arcsize = r;
-		if(parent){
-			if(before){
-				parent.insertBefore(this.rawNode, before);
-			}else{
-				parent.appendChild(this.rawNode);
-			}
+		parent.removeChild(this.rawNode);
+	}
+	this.rawNode.arcsize = r;
+	if (parent) {
+		if (before) {
+			parent.insertBefore(this.rawNode, before);
+		} else {
+			parent.appendChild(this.rawNode);
 		}
-		return this.setTransform(this.matrix);	// self
 	}
-});
-dojo.gfx.Rect.nodeType = "roundrect"; // use a roundrect so the stroke join type is respected
-
-dojo.declare("dojo.gfx.Ellipse", dojo.gfx.shape.Ellipse, {
-	// summary: an ellipse shape (VML)
-
-	attachShape: function(rawNode){
-		// summary: builds an ellipse shape from a Node.
-		// rawNode: Node: an VML node
-		var style = this.rawNode.style;
-		var rx = parseInt(style.width ) / 2;
-		var ry = parseInt(style.height) / 2;
-		var o = dojo.gfx.makeParameters(dojo.gfx.defaultEllipse, {
-			cx: parseInt(style.left) + rx,
-			cy: parseInt(style.top ) + ry,
-			rx: rx,
-			ry: ry
-		});
-		return o;	// dojo.gfx.shape.Ellipse
-	},
-	setShape: function(newShape){
-		// summary: sets an ellipse shape object (VML)
-		// newShape: Object: an ellipse shape object
-		var shape = this.shape = dojo.gfx.makeParameters(this.shape, newShape);
-		this.bbox = null;
-		var style = this.rawNode.style;
-		style.left   = (shape.cx - shape.rx).toFixed();
-		style.top    = (shape.cy - shape.ry).toFixed();
-		style.width  = (shape.rx * 2).toFixed();
-		style.height = (shape.ry * 2).toFixed();
-		return this.setTransform(this.matrix);	// self
-	}
-});
+	return this.setTransform(this.matrix);
+}});
+dojo.gfx.Rect.nodeType = "roundrect";
+dojo.declare("dojo.gfx.Ellipse", dojo.gfx.shape.Ellipse, {attachShape:function (rawNode) {
+	var style = this.rawNode.style;
+	var rx = parseInt(style.width) / 2;
+	var ry = parseInt(style.height) / 2;
+	var o = dojo.gfx.makeParameters(dojo.gfx.defaultEllipse, {cx:parseInt(style.left) + rx, cy:parseInt(style.top) + ry, rx:rx, ry:ry});
+	return o;
+}, setShape:function (newShape) {
+	var shape = this.shape = dojo.gfx.makeParameters(this.shape, newShape);
+	this.bbox = null;
+	var style = this.rawNode.style;
+	style.left = (shape.cx - shape.rx).toFixed();
+	style.top = (shape.cy - shape.ry).toFixed();
+	style.width = (shape.rx * 2).toFixed();
+	style.height = (shape.ry * 2).toFixed();
+	return this.setTransform(this.matrix);
+}});
 dojo.gfx.Ellipse.nodeType = "oval";
-
-dojo.declare("dojo.gfx.Circle", dojo.gfx.shape.Circle, {
-	// summary: a circle shape (VML)
-
-	attachShape: function(rawNode){
-		// summary: builds a circle shape from a Node.
-		// rawNode: Node: an VML node
-		var style = this.rawNode.style;
-		var r = parseInt(style.width) / 2;
-		var o = dojo.gfx.makeParameters(dojo.gfx.defaultCircle, {
-			cx: parseInt(style.left) + r,
-			cy: parseInt(style.top)  + r,
-			r:  r
-		});
-		return o;	// dojo.gfx.shape.Circle
-	},
-	setShape: function(newShape){
-		// summary: sets a circle shape object (VML)
-		// newShape: Object: a circle shape object
-		var shape = this.shape = dojo.gfx.makeParameters(this.shape, newShape);
-		this.bbox = null;
-		var style = this.rawNode.style;
-		style.left   = (shape.cx - shape.r).toFixed();
-		style.top    = (shape.cy - shape.r).toFixed();
-		style.width  = (shape.r * 2).toFixed();
-		style.height = (shape.r * 2).toFixed();
-		return this;	// self
-	}
-});
+dojo.declare("dojo.gfx.Circle", dojo.gfx.shape.Circle, {attachShape:function (rawNode) {
+	var style = this.rawNode.style;
+	var r = parseInt(style.width) / 2;
+	var o = dojo.gfx.makeParameters(dojo.gfx.defaultCircle, {cx:parseInt(style.left) + r, cy:parseInt(style.top) + r, r:r});
+	return o;
+}, setShape:function (newShape) {
+	var shape = this.shape = dojo.gfx.makeParameters(this.shape, newShape);
+	this.bbox = null;
+	var style = this.rawNode.style;
+	style.left = (shape.cx - shape.r).toFixed();
+	style.top = (shape.cy - shape.r).toFixed();
+	style.width = (shape.r * 2).toFixed();
+	style.height = (shape.r * 2).toFixed();
+	return this;
+}});
 dojo.gfx.Circle.nodeType = "oval";
-
-dojo.declare("dojo.gfx.Line", dojo.gfx.shape.Line,
-	function(rawNode){
-		if(rawNode) rawNode.setAttribute("dojoGfxType", "line");
-	}, {
-	// summary: a line shape (VML)
-
-	attachShape: function(rawNode){
-		// summary: builds a line shape from a Node.
-		// rawNode: Node: an VML node
-		var p = rawNode.path.v.match(dojo.gfx.pathRegExp);
-		var shape = {};
-		do{
-			if(p.length < 7 || p[0] != "m" || p[3] != "l" || p[6] != "e") break;
-			shape.x1 = parseInt(p[1]);
-			shape.y1 = parseInt(p[2]);
-			shape.x2 = parseInt(p[4]);
-			shape.y2 = parseInt(p[5]);
-		}while(false);
-		return dojo.gfx.makeParameters(dojo.gfx.defaultLine, shape);	// dojo.gfx.shape.Line
-	},
-	setShape: function(newShape){
-		// summary: sets a line shape object (VML)
-		// newShape: Object: a line shape object
-		var shape = this.shape = dojo.gfx.makeParameters(this.shape, newShape);
-		this.bbox = null;
-		this.rawNode.path.v = "m" + shape.x1.toFixed() + " " + shape.y1.toFixed() +
-			"l" + shape.x2.toFixed() + " " + shape.y2.toFixed() + "e";
-		return this.setTransform(this.matrix);	// self
+dojo.declare("dojo.gfx.Line", dojo.gfx.shape.Line, function (rawNode) {
+	if (rawNode) {
+		rawNode.setAttribute("dojoGfxType", "line");
 	}
-});
+}, {attachShape:function (rawNode) {
+	var p = rawNode.path.v.match(dojo.gfx.pathRegExp);
+	var shape = {};
+	do {
+		if (p.length < 7 || p[0] != "m" || p[3] != "l" || p[6] != "e") {
+			break;
+		}
+		shape.x1 = parseInt(p[1]);
+		shape.y1 = parseInt(p[2]);
+		shape.x2 = parseInt(p[4]);
+		shape.y2 = parseInt(p[5]);
+	} while (false);
+	return dojo.gfx.makeParameters(dojo.gfx.defaultLine, shape);
+}, setShape:function (newShape) {
+	var shape = this.shape = dojo.gfx.makeParameters(this.shape, newShape);
+	this.bbox = null;
+	this.rawNode.path.v = "m" + shape.x1.toFixed() + " " + shape.y1.toFixed() + "l" + shape.x2.toFixed() + " " + shape.y2.toFixed() + "e";
+	return this.setTransform(this.matrix);
+}});
 dojo.gfx.Line.nodeType = "shape";
-
-dojo.declare("dojo.gfx.Polyline", dojo.gfx.shape.Polyline,
-	function(rawNode){
-		if(rawNode) rawNode.setAttribute("dojoGfxType", "polyline");
-	}, {
-	// summary: a polyline/polygon shape (VML)
-	
-	attachShape: function(rawNode){
-		// summary: builds a polyline/polygon shape from a Node.
-		// rawNode: Node: an VML node
-		var shape = dojo.lang.shallowCopy(dojo.gfx.defaultPolyline, true);
-		var p = rawNode.path.v.match(dojo.gfx.pathRegExp);
-		do{
-			if(p.length < 3 || p[0] != "m") break;
-			var x = parseInt(p[0]);
-			var y = parseInt(p[1]);
-			if(isNaN(x) || isNaN(y)) break;
-			shape.points.push({x: x, y: y});
-			if(p.length < 6 || p[3] != "l") break;
-			for(var i = 4; i < p.length; i += 2){
-				x = parseInt(p[i]);
-				y = parseInt(p[i + 1]);
-				if(isNaN(x) || isNaN(y)) break;
-				shape.points.push({x: x, y: y});
+dojo.declare("dojo.gfx.Polyline", dojo.gfx.shape.Polyline, function (rawNode) {
+	if (rawNode) {
+		rawNode.setAttribute("dojoGfxType", "polyline");
+	}
+}, {attachShape:function (rawNode) {
+	var shape = dojo.lang.shallowCopy(dojo.gfx.defaultPolyline, true);
+	var p = rawNode.path.v.match(dojo.gfx.pathRegExp);
+	do {
+		if (p.length < 3 || p[0] != "m") {
+			break;
+		}
+		var x = parseInt(p[0]);
+		var y = parseInt(p[1]);
+		if (isNaN(x) || isNaN(y)) {
+			break;
+		}
+		shape.points.push({x:x, y:y});
+		if (p.length < 6 || p[3] != "l") {
+			break;
+		}
+		for (var i = 4; i < p.length; i += 2) {
+			x = parseInt(p[i]);
+			y = parseInt(p[i + 1]);
+			if (isNaN(x) || isNaN(y)) {
+				break;
 			}
-		}while(false);
-		return shape;	// dojo.gfx.shape.Polyline
-	},
-	setShape: function(points, closed){
-		// summary: sets a polyline/polygon shape object (SVG)
-		// points: Object: a polyline/polygon shape object
-		// closed: Boolean?: if true, close the polyline explicitely
-		if(points && points instanceof Array){
-			// branch
-			// points: Array: an array of points
-			this.shape = dojo.gfx.makeParameters(this.shape, { points: points });
-			if(closed && this.shape.points.length) this.shape.points.push(this.shape.points[0]);
-		}else{
-			this.shape = dojo.gfx.makeParameters(this.shape, points);
+			shape.points.push({x:x, y:y});
 		}
-		this.bbox = null;
-		var attr = [];
-		var p = this.shape.points;
-		if(p.length > 0){
-			attr.push("m");
-			attr.push(p[0].x.toFixed());
-			attr.push(p[0].y.toFixed());
-			if(p.length > 1){
-				attr.push("l");
-				for(var i = 1; i < p.length; ++i){
-					attr.push(p[i].x.toFixed());
-					attr.push(p[i].y.toFixed());
-				}
+	} while (false);
+	return shape;
+}, setShape:function (points, closed) {
+	if (points && points instanceof Array) {
+		this.shape = dojo.gfx.makeParameters(this.shape, {points:points});
+		if (closed && this.shape.points.length) {
+			this.shape.points.push(this.shape.points[0]);
+		}
+	} else {
+		this.shape = dojo.gfx.makeParameters(this.shape, points);
+	}
+	this.bbox = null;
+	var attr = [];
+	var p = this.shape.points;
+	if (p.length > 0) {
+		attr.push("m");
+		attr.push(p[0].x.toFixed());
+		attr.push(p[0].y.toFixed());
+		if (p.length > 1) {
+			attr.push("l");
+			for (var i = 1; i < p.length; ++i) {
+				attr.push(p[i].x.toFixed());
+				attr.push(p[i].y.toFixed());
 			}
 		}
-		attr.push("e");
-		this.rawNode.path.v = attr.join(" ");
-		return this.setTransform(this.matrix);	// self
 	}
-});
+	attr.push("e");
+	this.rawNode.path.v = attr.join(" ");
+	return this.setTransform(this.matrix);
+}});
 dojo.gfx.Polyline.nodeType = "shape";
-
-dojo.declare("dojo.gfx.Image", dojo.gfx.shape.Image, {
-	// summary: an image (VML)
-	
-	getEventSource: function() {
-		// summary: returns a Node, which is used as 
-		//	a source of events for this shape
-		return this.rawNode ? this.rawNode.firstChild : null;	// Node
-	},
-	attachShape: function(rawNode){
-		// summary: builds an image shape from a Node.
-		// rawNode: Node: an VML node
-		var shape = dojo.lang.shallowCopy(dojo.gfx.defaultImage, true);
-		shape.src = rawNode.firstChild.src;
-		return shape;	// dojo.gfx.shape.Image
-	},
-	setShape: function(newShape){
-		// summary: sets an image shape object (VML)
-		// newShape: Object: an image shape object
-		var shape = this.shape = dojo.gfx.makeParameters(this.shape, newShape);
-		this.bbox = null;
-		var firstChild = this.rawNode.firstChild;
-        firstChild.src = shape.src;
-        if(shape.width || shape.height){
-			firstChild.style.width  = shape.width;
-			firstChild.style.height = shape.height;
-        }
-		return this.setTransform(this.matrix);	// self
-	},
-	setStroke: function(){
-		// summary: ignore setting a stroke style
-		return this;	// self
-	},
-	setFill: function(){
-		// summary: ignore setting a fill style
-		return this;	// self
-	},
-	attachStroke: function(rawNode){
-		// summary: ignore attaching a stroke style
-		return null;
-	},
-	attachFill: function(rawNode){
-		// summary: ignore attaching a fill style
-		return null;
-	},
-	attachTransform: function(rawNode) {
-		// summary: deduces a transformation matrix from a Node.
-		// rawNode: Node: an VML node
-		var matrix = {};
-		if(rawNode){
-			var m = rawNode.filters["DXImageTransform.Microsoft.Matrix"];
-			matrix.xx = m.M11;
-			matrix.xy = m.M12;
-			matrix.yx = m.M21;
-			matrix.yy = m.M22;
-			matrix.dx = m.Dx;
-			matrix.dy = m.Dy;
-		}
-		return dojo.gfx.matrix.normalize(matrix);	// dojo.gfx.matrix.Matrix
-	},
-	_applyTransform: function() {
-		var matrix = this._getRealMatrix();
-		if(!matrix) return this;
-		with(this.rawNode.filters["DXImageTransform.Microsoft.Matrix"]){
-			M11 = matrix.xx;
-			M12 = matrix.xy;
-			M21 = matrix.yx;
-			M22 = matrix.yy;
-			Dx  = matrix.dx;
-			Dy  = matrix.dy;
-		}
+dojo.declare("dojo.gfx.Image", dojo.gfx.shape.Image, {getEventSource:function () {
+	return this.rawNode ? this.rawNode.firstChild : null;
+}, attachShape:function (rawNode) {
+	var shape = dojo.lang.shallowCopy(dojo.gfx.defaultImage, true);
+	shape.src = rawNode.firstChild.src;
+	return shape;
+}, setShape:function (newShape) {
+	var shape = this.shape = dojo.gfx.makeParameters(this.shape, newShape);
+	this.bbox = null;
+	var firstChild = this.rawNode.firstChild;
+	firstChild.src = shape.src;
+	if (shape.width || shape.height) {
+		firstChild.style.width = shape.width;
+		firstChild.style.height = shape.height;
+	}
+	return this.setTransform(this.matrix);
+}, setStroke:function () {
+	return this;
+}, setFill:function () {
+	return this;
+}, attachStroke:function (rawNode) {
+	return null;
+}, attachFill:function (rawNode) {
+	return null;
+}, attachTransform:function (rawNode) {
+	var matrix = {};
+	if (rawNode) {
+		var m = rawNode.filters["DXImageTransform.Microsoft.Matrix"];
+		matrix.xx = m.M11;
+		matrix.xy = m.M12;
+		matrix.yx = m.M21;
+		matrix.yy = m.M22;
+		matrix.dx = m.Dx;
+		matrix.dy = m.Dy;
+	}
+	return dojo.gfx.matrix.normalize(matrix);
+}, _applyTransform:function () {
+	var matrix = this._getRealMatrix();
+	if (!matrix) {
 		return this;
 	}
-});
+	with (this.rawNode.filters["DXImageTransform.Microsoft.Matrix"]) {
+		M11 = matrix.xx;
+		M12 = matrix.xy;
+		M21 = matrix.yx;
+		M22 = matrix.yy;
+		Dx = matrix.dx;
+		Dy = matrix.dy;
+	}
+	return this;
+}});
 dojo.gfx.Image.nodeType = "image";
-
-dojo.gfx.path._calcArc = function(alpha){
-	var cosa  = Math.cos(alpha);
-	var sina  = Math.sin(alpha);
-	// return a start point, 1st and 2nd control points, and an end point
-	var p2 = {x: cosa + (4 / 3) * (1 - cosa), y: sina - (4 / 3) * cosa * (1 - cosa) / sina};
-	return {
-		s:  {x: cosa, y: sina},
-		c1: p2,
-		c2: {x: p2.x, y: -p2.y},
-		e:  {x: cosa, y: -sina}
-	};
+dojo.gfx.path._calcArc = function (alpha) {
+	var cosa = Math.cos(alpha);
+	var sina = Math.sin(alpha);
+	var p2 = {x:cosa + (4 / 3) * (1 - cosa), y:sina - (4 / 3) * cosa * (1 - cosa) / sina};
+	return {s:{x:cosa, y:sina}, c1:p2, c2:{x:p2.x, y:-p2.y}, e:{x:cosa, y:-sina}};
 };
-
-dojo.declare("dojo.gfx.Path", dojo.gfx.path.Path,
-	function(rawNode){
-		if(rawNode) rawNode.setAttribute("dojoGfxType", "path");
-		this.vmlPath = "";
-		this.lastControl = {};
-	}, {
-	// summary: a path shape (VML)
-
-	_updateWithSegment: function(segment){
-		// summary: updates the bounding box of path with new segment
-		// segment: Object: a segment
-		var last = dojo.lang.shallowCopy(this.last);
-		dojo.gfx.Path.superclass._updateWithSegment.apply(this, arguments);
-		// add a VML path segment
-		var path = this[this.renderers[segment.action]](segment, last);
-		if(typeof(this.vmlPath) == "string"){
-			this.vmlPath += path.join("");
-		}else{
-			this.vmlPath = this.vmlPath.concat(path);
-		}
-		if(typeof(this.vmlPath) == "string"){
-			this.rawNode.path.v = this.vmlPath + " e";
-		}
-	},
-	attachShape: function(rawNode){
-		// summary: builds a path shape from a Node.
-		// rawNode: Node: an VML node
-		var shape = dojo.lang.shallowCopy(dojo.gfx.defaultPath, true);
-		var p = rawNode.path.v.match(dojo.gfx.pathRegExp);
-		var t = [], skip = false;
-		for(var i = 0; i < p.length; ++p){
-			var s = p[i];
-			if(s in this._pathVmlToSvgMap) {
-				skip = false;
-				t.push(this._pathVmlToSvgMap[s]);
-			} else if(!skip){
+dojo.declare("dojo.gfx.Path", dojo.gfx.path.Path, function (rawNode) {
+	if (rawNode) {
+		rawNode.setAttribute("dojoGfxType", "path");
+	}
+	this.vmlPath = "";
+	this.lastControl = {};
+}, {_updateWithSegment:function (segment) {
+	var last = dojo.lang.shallowCopy(this.last);
+	dojo.gfx.Path.superclass._updateWithSegment.apply(this, arguments);
+	var path = this[this.renderers[segment.action]](segment, last);
+	if (typeof (this.vmlPath) == "string") {
+		this.vmlPath += path.join("");
+	} else {
+		this.vmlPath = this.vmlPath.concat(path);
+	}
+	if (typeof (this.vmlPath) == "string") {
+		this.rawNode.path.v = this.vmlPath + " e";
+	}
+}, attachShape:function (rawNode) {
+	var shape = dojo.lang.shallowCopy(dojo.gfx.defaultPath, true);
+	var p = rawNode.path.v.match(dojo.gfx.pathRegExp);
+	var t = [], skip = false;
+	for (var i = 0; i < p.length; ++p) {
+		var s = p[i];
+		if (s in this._pathVmlToSvgMap) {
+			skip = false;
+			t.push(this._pathVmlToSvgMap[s]);
+		} else {
+			if (!skip) {
 				var n = parseInt(s);
-				if(isNaN(n)){
+				if (isNaN(n)) {
 					skip = true;
-				}else{
+				} else {
 					t.push(n);
 				}
 			}
 		}
-		if(t.length) shape.path = t.join(" ");
-		return shape;	// dojo.gfx.path.Path
-	},
-	setShape: function(newShape){
-		// summary: forms a path using a shape (VML)
-		// newShape: Object: an VML path string or a path object (see dojo.gfx.defaultPath)
-		this.vmlPath = [];
-		this.lastControl = {};
-		dojo.gfx.Path.superclass.setShape.apply(this, arguments);
-		this.vmlPath = this.vmlPath.join("");
-		this.rawNode.path.v = this.vmlPath + " e";
-		return this;
-	},
-	_pathVmlToSvgMap: {m: "M", l: "L", t: "m", r: "l", c: "C", v: "c", qb: "Q", x: "z", e: ""},
-	// VML-specific segment renderers
-	renderers: {
-		M: "_moveToA", m: "_moveToR", 
-		L: "_lineToA", l: "_lineToR", 
-		H: "_hLineToA", h: "_hLineToR", 
-		V: "_vLineToA", v: "_vLineToR", 
-		C: "_curveToA", c: "_curveToR", 
-		S: "_smoothCurveToA", s: "_smoothCurveToR", 
-		Q: "_qCurveToA", q: "_qCurveToR", 
-		T: "_qSmoothCurveToA", t: "_qSmoothCurveToR", 
-		A: "_arcTo", a: "_arcTo", 
-		Z: "_closePath", z: "_closePath"
-	},
-	_addArgs: function(path, args, from, upto){
-		if(typeof(upto) == "undefined"){
-			upto = args.length;
+	}
+	if (t.length) {
+		shape.path = t.join(" ");
+	}
+	return shape;
+}, setShape:function (newShape) {
+	this.vmlPath = [];
+	this.lastControl = {};
+	dojo.gfx.Path.superclass.setShape.apply(this, arguments);
+	this.vmlPath = this.vmlPath.join("");
+	this.rawNode.path.v = this.vmlPath + " e";
+	return this;
+}, _pathVmlToSvgMap:{m:"M", l:"L", t:"m", r:"l", c:"C", v:"c", qb:"Q", x:"z", e:""}, renderers:{M:"_moveToA", m:"_moveToR", L:"_lineToA", l:"_lineToR", H:"_hLineToA", h:"_hLineToR", V:"_vLineToA", v:"_vLineToR", C:"_curveToA", c:"_curveToR", S:"_smoothCurveToA", s:"_smoothCurveToR", Q:"_qCurveToA", q:"_qCurveToR", T:"_qSmoothCurveToA", t:"_qSmoothCurveToR", A:"_arcTo", a:"_arcTo", Z:"_closePath", z:"_closePath"}, _addArgs:function (path, args, from, upto) {
+	if (typeof (upto) == "undefined") {
+		upto = args.length;
+	}
+	if (typeof (from) == "undefined") {
+		from = 0;
+	}
+	for (var i = from; i < upto; ++i) {
+		path.push(" ");
+		path.push(args[i].toFixed());
+	}
+}, _addArgsAdjusted:function (path, last, args, from, upto) {
+	if (typeof (upto) == "undefined") {
+		upto = args.length;
+	}
+	if (typeof (from) == "undefined") {
+		from = 0;
+	}
+	for (var i = from; i < upto; i += 2) {
+		path.push(" ");
+		path.push((last.x + args[i]).toFixed());
+		path.push(" ");
+		path.push((last.y + args[i + 1]).toFixed());
+	}
+}, _moveToA:function (segment) {
+	var p = [" m"];
+	var n = segment.args;
+	var l = n.length;
+	if (l == 2) {
+		this._addArgs(p, n);
+	} else {
+		this._addArgs(p, n, 0, 2);
+		p.push(" l");
+		this._addArgs(p, n, 2);
+	}
+	this.lastControl = {};
+	return p;
+}, _moveToR:function (segment, last) {
+	var p = ["x" in last ? " t" : " m"];
+	var n = segment.args;
+	var l = n.length;
+	if (l == 2) {
+		this._addArgs(p, n);
+	} else {
+		this._addArgs(p, n, 0, 2);
+		p.push(" r");
+		this._addArgs(p, n, 2);
+	}
+	this.lastControl = {};
+	return p;
+}, _lineToA:function (segment) {
+	var p = [" l"];
+	this._addArgs(p, segment.args);
+	this.lastControl = {};
+	return p;
+}, _lineToR:function (segment) {
+	var p = [" r"];
+	this._addArgs(p, segment.args);
+	this.lastControl = {};
+	return p;
+}, _hLineToA:function (segment, last) {
+	var p = [" l"];
+	var n = segment.args;
+	var l = n.length;
+	var y = " " + last.y.toFixed();
+	for (var i = 0; i < l; ++i) {
+		p.push(" ");
+		p.push(n[i].toFixed());
+		p.push(y);
+	}
+	this.lastControl = {};
+	return p;
+}, _hLineToR:function (segment) {
+	var p = [" r"];
+	var n = segment.args;
+	var l = n.length;
+	for (var i = 0; i < l; ++i) {
+		p.push(" ");
+		p.push(n[i].toFixed());
+		p.push(" 0");
+	}
+	this.lastControl = {};
+	return p;
+}, _vLineToA:function (segment, last) {
+	var p = [" l"];
+	var n = segment.args;
+	var l = n.length;
+	var x = " " + last.x.toFixed();
+	for (var i = 0; i < l; ++i) {
+		p.push(x);
+		p.push(" ");
+		p.push(n[i].toFixed());
+	}
+	this.lastControl = {};
+	return p;
+}, _vLineToR:function (segment) {
+	var p = [" r"];
+	var n = segment.args;
+	var l = n.length;
+	for (var i = 0; i < l; ++i) {
+		p.push(" 0 ");
+		p.push(n[i].toFixed());
+	}
+	this.lastControl = {};
+	return p;
+}, _curveToA:function (segment) {
+	var p = [];
+	var n = segment.args;
+	var l = n.length;
+	for (var i = 0; i < l; i += 6) {
+		p.push(" c");
+		this._addArgs(p, n, i, i + 6);
+	}
+	this.lastControl = {x:n[l - 4], y:n[l - 3], type:"C"};
+	return p;
+}, _curveToR:function (segment, last) {
+	var p = [];
+	var n = segment.args;
+	var l = n.length;
+	for (var i = 0; i < l; i += 6) {
+		p.push(" v");
+		this._addArgs(p, n, i, i + 6);
+		this.lastControl = {x:last.x + n[i + 2], y:last.y + n[i + 3]};
+		last.x += n[i + 4];
+		last.y += n[i + 5];
+	}
+	this.lastControl.type = "C";
+	return p;
+}, _smoothCurveToA:function (segment, last) {
+	var p = [];
+	var n = segment.args;
+	var l = n.length;
+	for (var i = 0; i < l; i += 4) {
+		p.push(" c");
+		if (this.lastControl.type == "C") {
+			this._addArgs(p, [2 * last.x - this.lastControl.x, 2 * last.y - this.lastControl.y]);
+		} else {
+			this._addArgs(p, [last.x, last.y]);
 		}
-		if(typeof(from) == "undefined"){
-			from = 0;
+		this._addArgs(p, n, i, i + 4);
+	}
+	this.lastControl = {x:n[l - 4], y:n[l - 3], type:"C"};
+	return p;
+}, _smoothCurveToR:function (segment, last) {
+	var p = [];
+	var n = segment.args;
+	var l = n.length;
+	for (var i = 0; i < l; i += 4) {
+		p.push(" v");
+		if (this.lastControl.type == "C") {
+			this._addArgs(p, [last.x - this.lastControl.x, last.y - this.lastControl.y]);
+		} else {
+			this._addArgs(p, [0, 0]);
 		}
-		for(var i = from; i < upto; ++i){
-			path.push(" ");
-			path.push(args[i].toFixed());
+		this._addArgs(p, n, i, i + 4);
+		this.lastControl = {x:last.x + n[i], y:last.y + n[i + 1]};
+		last.x += n[i + 2];
+		last.y += n[i + 3];
+	}
+	this.lastControl.type = "C";
+	return p;
+}, _qCurveToA:function (segment) {
+	var p = [];
+	var n = segment.args;
+	var l = n.length;
+	for (var i = 0; i < l; i += 4) {
+		p.push(" qb");
+		this._addArgs(p, n, i, i + 4);
+	}
+	this.lastControl = {x:n[l - 4], y:n[l - 3], type:"Q"};
+	return p;
+}, _qCurveToR:function (segment, last) {
+	var p = [];
+	var n = segment.args;
+	var l = n.length;
+	for (var i = 0; i < l; i += 4) {
+		p.push(" qb");
+		this._addArgsAdjusted(p, last, n, i, i + 4);
+		this.lastControl = {x:last.x + n[i], y:last.y + n[i + 1]};
+		last.x += n[i + 2];
+		last.y += n[i + 3];
+	}
+	this.lastControl.type = "Q";
+	return p;
+}, _qSmoothCurveToA:function (segment, last) {
+	var p = [];
+	var n = segment.args;
+	var l = n.length;
+	for (var i = 0; i < l; i += 2) {
+		p.push(" qb");
+		if (this.lastControl.type == "Q") {
+			this._addArgs(p, [this.lastControl.x = 2 * last.x - this.lastControl.x, this.lastControl.y = 2 * last.y - this.lastControl.y]);
+		} else {
+			this._addArgs(p, [this.lastControl.x = last.x, this.lastControl.y = last.y]);
 		}
-	},
-	_addArgsAdjusted: function(path, last, args, from, upto){
-		if(typeof(upto) == "undefined"){
-			upto = args.length;
+		this._addArgs(p, n, i, i + 2);
+	}
+	this.lastControl.type = "Q";
+	return p;
+}, _qSmoothCurveToR:function (segment, last) {
+	var p = [];
+	var n = segment.args;
+	var l = n.length;
+	for (var i = 0; i < l; i += 2) {
+		p.push(" qb");
+		if (this.lastControl.type == "Q") {
+			this._addArgs(p, [this.lastControl.x = 2 * last.x - this.lastControl.x, this.lastControl.y = 2 * last.y - this.lastControl.y]);
+		} else {
+			this._addArgs(p, [this.lastControl.x = last.x, this.lastControl.y = last.y]);
 		}
-		if(typeof(from) == "undefined"){
-			from = 0;
-		}
-		for(var i = from; i < upto; i += 2){
-			path.push(" ");
-			path.push((last.x + args[i]).toFixed());
-			path.push(" ");
-			path.push((last.y + args[i + 1]).toFixed());
-		}
-	},
-	_moveToA: function(segment){
-		var p = [" m"];
-		var n = segment.args;
-		var l = n.length;
-		if(l == 2){
-			this._addArgs(p, n);
-		}else{
-			this._addArgs(p, n, 0, 2);
-			p.push(" l");
-			this._addArgs(p, n, 2);
-		}
-		this.lastControl = {};
-		return p;
-	},
-	_moveToR: function(segment, last){
-		var p = ["x" in last ? " t" : " m"];
-		var n = segment.args;
-		var l = n.length;
-		if(l == 2){
-			this._addArgs(p, n);
-		}else{
-			this._addArgs(p, n, 0, 2);
-			p.push(" r");
-			this._addArgs(p, n, 2);
-		}
-		this.lastControl = {};
-		return p;
-	},
-	_lineToA: function(segment){
-		var p = [" l"];
-		this._addArgs(p, segment.args);
-		this.lastControl = {};
-		return p;
-	},
-	_lineToR: function(segment){
-		var p = [" r"];
-		this._addArgs(p, segment.args);
-		this.lastControl = {};
-		return p;
-	},
-	_hLineToA: function(segment, last){
-		var p = [" l"];
-		var n = segment.args;
-		var l = n.length;
-		var y = " " + last.y.toFixed();
-		for(var i = 0; i < l; ++i){
-			p.push(" ");
-			p.push(n[i].toFixed());
-			p.push(y);
-		}
-		this.lastControl = {};
-		return p;
-	},
-	_hLineToR: function(segment){
-		var p = [" r"];
-		var n = segment.args;
-		var l = n.length;
-		for(var i = 0; i < l; ++i){
-			p.push(" ");
-			p.push(n[i].toFixed());
-			p.push(" 0");
-		}
-		this.lastControl = {};
-		return p;
-	},
-	_vLineToA: function(segment, last){
-		var p = [" l"];
-		var n = segment.args;
-		var l = n.length;
-		var x = " " + last.x.toFixed();
-		for(var i = 0; i < l; ++i){
-			p.push(x);
-			p.push(" ");
-			p.push(n[i].toFixed());
-		}
-		this.lastControl = {};
-		return p;
-	},
-	_vLineToR: function(segment){
-		var p = [" r"];
-		var n = segment.args;
-		var l = n.length;
-		for(var i = 0; i < l; ++i){
-			p.push(" 0 ");
-			p.push(n[i].toFixed());
-		}
-		this.lastControl = {};
-		return p;
-	},
-	_curveToA: function(segment){
-		var p = [];
-		var n = segment.args;
-		var l = n.length;
-		for(var i = 0; i < l; i += 6){
-			p.push(" c");
-			this._addArgs(p, n, i, i + 6);
-		}
-		this.lastControl = {x: n[l - 4], y: n[l - 3], type: "C"};
-		return p;
-	},
-	_curveToR: function(segment, last){
-		var p = [];
-		var n = segment.args;
-		var l = n.length;
-		for(var i = 0; i < l; i += 6){
-			p.push(" v");
-			this._addArgs(p, n, i, i + 6);
-			this.lastControl = {x: last.x + n[i + 2], y: last.y + n[i + 3]};
-			last.x += n[i + 4];
-			last.y += n[i + 5];
-		}
-		this.lastControl.type = "C";
-		return p;
-	},
-	_smoothCurveToA: function(segment, last){
-		var p = [];
-		var n = segment.args;
-		var l = n.length;
-		for(var i = 0; i < l; i += 4){
-			p.push(" c");
-			if(this.lastControl.type == "C"){
-				this._addArgs(p, [
-					2 * last.x - this.lastControl.x, 
-					2 * last.y - this.lastControl.y
-				]);
-			}else{
-				this._addArgs(p, [last.x, last.y]);
-			}
-			this._addArgs(p, n, i, i + 4);
-		}
-		this.lastControl = {x: n[l - 4], y: n[l - 3], type: "C"};
-		return p;
-	},
-	_smoothCurveToR: function(segment, last){
-		var p = [];
-		var n = segment.args;
-		var l = n.length;
-		for(var i = 0; i < l; i += 4){
-			p.push(" v");
-			if(this.lastControl.type == "C"){
-				this._addArgs(p, [
-					last.x - this.lastControl.x, 
-					last.y - this.lastControl.y
-				]);
-			}else{
-				this._addArgs(p, [0, 0]);
-			}
-			this._addArgs(p, n, i, i + 4);
-			this.lastControl = {x: last.x + n[i], y: last.y + n[i + 1]};
-			last.x += n[i + 2];
-			last.y += n[i + 3];
-		}
-		this.lastControl.type = "C";
-		return p;
-	},
-	_qCurveToA: function(segment){
-		var p = [];
-		var n = segment.args;
-		var l = n.length;
-		for(var i = 0; i < l; i += 4){
-			p.push(" qb");
-			this._addArgs(p, n, i, i + 4);
-		}
-		this.lastControl = {x: n[l - 4], y: n[l - 3], type: "Q"};
-		return p;
-	},
-	_qCurveToR: function(segment, last){
-		var p = [];
-		var n = segment.args;
-		var l = n.length;
-		for(var i = 0; i < l; i += 4){
-			p.push(" qb");
-			this._addArgsAdjusted(p, last, n, i, i + 4);
-			this.lastControl = {x: last.x + n[i], y: last.y + n[i + 1]};
-			last.x += n[i + 2];
-			last.y += n[i + 3];
-		}
-		this.lastControl.type = "Q";
-		return p;
-	},
-	_qSmoothCurveToA: function(segment, last){
-		var p = [];
-		var n = segment.args;
-		var l = n.length;
-		for(var i = 0; i < l; i += 2){
-			p.push(" qb");
-			if(this.lastControl.type == "Q"){
-				this._addArgs(p, [
-					this.lastControl.x = 2 * last.x - this.lastControl.x, 
-					this.lastControl.y = 2 * last.y - this.lastControl.y
-				]);
-			}else{
-				this._addArgs(p, [
-					this.lastControl.x = last.x, 
-					this.lastControl.y = last.y
-				]);
-			}
-			this._addArgs(p, n, i, i + 2);
-		}
-		this.lastControl.type = "Q";
-		return p;
-	},
-	_qSmoothCurveToR: function(segment, last){
-		var p = [];
-		var n = segment.args;
-		var l = n.length;
-		for(var i = 0; i < l; i += 2){
-			p.push(" qb");
-			if(this.lastControl.type == "Q"){
-				this._addArgs(p, [
-					this.lastControl.x = 2 * last.x - this.lastControl.x, 
-					this.lastControl.y = 2 * last.y - this.lastControl.y
-				]);
-			}else{
-				this._addArgs(p, [
-					this.lastControl.x = last.x, 
-					this.lastControl.y = last.y
-				]);
-			}
-			this._addArgsAdjusted(p, last, n, i, i + 2);
-		}
-		this.lastControl.type = "Q";
-		return p;
-	},
-	_PI4: Math.PI / 4,
-	_curvePI4: dojo.gfx.path._calcArc(Math.PI / 8),
-	_calcArcTo: function(path, last, rx, ry, xRotg, large, cw, x, y){
-		var m = dojo.gfx.matrix;
-		// calculate parameters
-		var xRot = -dojo.math.degToRad(xRotg);
-		var rx2 = rx * rx;
-		var ry2 = ry * ry;
-		var pa = m.multiplyPoint(
-			m.rotate(-xRot), 
-			{x: (last.x - x) / 2, y: (last.y - y) / 2}
-		);
-		var pax2 = pa.x * pa.x;
-		var pay2 = pa.y * pa.y;
-		var c1 = Math.sqrt((rx2 * ry2 - rx2 * pay2 - ry2 * pax2) / (rx2 * pay2 + ry2 * pax2));
-		var ca = {
-			x:  c1 * rx * pa.y / ry,
-			y: -c1 * ry * pa.x / rx
-		};
-		if(large == cw){
-			ca = {x: -ca.x, y: -ca.y};
-		}
-		// our center
-		var c = m.multiplyPoint(
-			[
-				m.translate(
-					(last.x + x) / 2,
-					(last.y + y) / 2
-				),
-				m.rotate(xRot)
-			], 
-			ca
-		);
-		// start of our arc
-		var startAngle = Math.atan2(c.y - last.y, last.x - c.x) - xRot;
-		var endAngle   = Math.atan2(c.y - y, x - c.x) - xRot;
-		// size of our arc in radians
-		var theta = cw ? startAngle - endAngle : endAngle - startAngle;
-		if(theta < 0){
-			theta += this._2PI;
-		}else if(theta > this._2PI){
+		this._addArgsAdjusted(p, last, n, i, i + 2);
+	}
+	this.lastControl.type = "Q";
+	return p;
+}, _PI4:Math.PI / 4, _curvePI4:dojo.gfx.path._calcArc(Math.PI / 8), _calcArcTo:function (path, last, rx, ry, xRotg, large, cw, x, y) {
+	var m = dojo.gfx.matrix;
+	var xRot = -dojo.math.degToRad(xRotg);
+	var rx2 = rx * rx;
+	var ry2 = ry * ry;
+	var pa = m.multiplyPoint(m.rotate(-xRot), {x:(last.x - x) / 2, y:(last.y - y) / 2});
+	var pax2 = pa.x * pa.x;
+	var pay2 = pa.y * pa.y;
+	var c1 = Math.sqrt((rx2 * ry2 - rx2 * pay2 - ry2 * pax2) / (rx2 * pay2 + ry2 * pax2));
+	var ca = {x:c1 * rx * pa.y / ry, y:-c1 * ry * pa.x / rx};
+	if (large == cw) {
+		ca = {x:-ca.x, y:-ca.y};
+	}
+	var c = m.multiplyPoint([m.translate((last.x + x) / 2, (last.y + y) / 2), m.rotate(xRot)], ca);
+	var startAngle = Math.atan2(c.y - last.y, last.x - c.x) - xRot;
+	var endAngle = Math.atan2(c.y - y, x - c.x) - xRot;
+	var theta = cw ? startAngle - endAngle : endAngle - startAngle;
+	if (theta < 0) {
+		theta += this._2PI;
+	} else {
+		if (theta > this._2PI) {
 			theta = this._2PI;
 		}
-		// calculate our elliptic transformation
-		var elliptic_transform = m.normalize([
-			m.translate(c.x, c.y),
-			m.rotate(xRot),
-			m.scale(rx, ry)
-		]);
-		// draw curve chunks
-		var alpha = this._PI4 / 2;
-		var curve = this._curvePI4;
-		var step  = cw ? -alpha : alpha;
-		for(var angle = theta; angle > 0; angle -= this._PI4){
-			if(angle < this._PI4){
-				alpha = angle / 2;
-				curve = dojo.gfx.path._calcArc(alpha);
-				step  = cw ? -alpha : alpha;
-			}
-			var c1, c2, e;
-			var M = m.normalize([elliptic_transform, m.rotate(startAngle + step)]);
-			if(cw){
-				c1 = m.multiplyPoint(M, curve.c2);
-				c2 = m.multiplyPoint(M, curve.c1);
-				e  = m.multiplyPoint(M, curve.s );
-			}else{
-				c1 = m.multiplyPoint(M, curve.c1);
-				c2 = m.multiplyPoint(M, curve.c2);
-				e  = m.multiplyPoint(M, curve.e );
-			}
-			// draw the curve
-			path.push(" c");
-			this._addArgs(path, [c1.x, c1.y, c2.x, c2.y, e.x, e.y]);
-			startAngle += 2 * step;
+	}
+	var elliptic_transform = m.normalize([m.translate(c.x, c.y), m.rotate(xRot), m.scale(rx, ry)]);
+	var alpha = this._PI4 / 2;
+	var curve = this._curvePI4;
+	var step = cw ? -alpha : alpha;
+	for (var angle = theta; angle > 0; angle -= this._PI4) {
+		if (angle < this._PI4) {
+			alpha = angle / 2;
+			curve = dojo.gfx.path._calcArc(alpha);
+			step = cw ? -alpha : alpha;
 		}
-	},
-	_arcTo: function(segment, last){
-		var p = [];
-		var n = segment.args;
-		var l = n.length;
-		var relative = segment.action == "a";
-		for(var i = 0; i < l; i += 7){
-			var x1 = n[i + 5];
-			var y1 = n[i + 6];
-			if(relative){
-				x1 += last.x;
-				y1 += last.y;
-			}
-			this._calcArcTo(
-				p, last, n[i], n[i + 1], n[i + 2], 
-				n[i + 3] ? 1 : 0, n[i + 4] ? 1 : 0,
-				x1, y1
-			);
-			last = {x: x1, y: y1};
+		var c1, c2, e;
+		var M = m.normalize([elliptic_transform, m.rotate(startAngle + step)]);
+		if (cw) {
+			c1 = m.multiplyPoint(M, curve.c2);
+			c2 = m.multiplyPoint(M, curve.c1);
+			e = m.multiplyPoint(M, curve.s);
+		} else {
+			c1 = m.multiplyPoint(M, curve.c1);
+			c2 = m.multiplyPoint(M, curve.c2);
+			e = m.multiplyPoint(M, curve.e);
 		}
-		this.lastControl = {};
-		return p;
-	},
-	_closePath: function(){
-		this.lastControl = {};
-		return ["x"];
+		path.push(" c");
+		this._addArgs(path, [c1.x, c1.y, c2.x, c2.y, e.x, e.y]);
+		startAngle += 2 * step;
 	}
-});
+}, _arcTo:function (segment, last) {
+	var p = [];
+	var n = segment.args;
+	var l = n.length;
+	var relative = segment.action == "a";
+	for (var i = 0; i < l; i += 7) {
+		var x1 = n[i + 5];
+		var y1 = n[i + 6];
+		if (relative) {
+			x1 += last.x;
+			y1 += last.y;
+		}
+		this._calcArcTo(p, last, n[i], n[i + 1], n[i + 2], n[i + 3] ? 1 : 0, n[i + 4] ? 1 : 0, x1, y1);
+		last = {x:x1, y:y1};
+	}
+	this.lastControl = {};
+	return p;
+}, _closePath:function () {
+	this.lastControl = {};
+	return ["x"];
+}});
 dojo.gfx.Path.nodeType = "shape";
-
-
-dojo.gfx._creators = {
-	// summary: VML shape creators
-	createPath: function(path){
-		// summary: creates an SVG path shape
-		// path: Object: a path object (see dojo.gfx.defaultPath)
-		return this.createObject(dojo.gfx.Path, path, true);	// dojo.gfx.Path
-	},
-	createRect: function(rect){
-		// summary: creates an VML rectangle shape
-		// rect: Object: a path object (see dojo.gfx.defaultRect)
-		return this.createObject(dojo.gfx.Rect, rect);	// dojo.gfx.Rect
-	},
-	createCircle: function(circle){
-		// summary: creates an VML circle shape
-		// circle: Object: a circle object (see dojo.gfx.defaultCircle)
-		return this.createObject(dojo.gfx.Circle, circle);	// dojo.gfx.Circle
-	},
-	createEllipse: function(ellipse){
-		// summary: creates an VML ellipse shape
-		// ellipse: Object: an ellipse object (see dojo.gfx.defaultEllipse)
-		return this.createObject(dojo.gfx.Ellipse, ellipse);	// dojo.gfx.Ellipse
-	},
-	createLine: function(line){
-		// summary: creates an VML line shape
-		// line: Object: a line object (see dojo.gfx.defaultLine)
-		return this.createObject(dojo.gfx.Line, line, true);	// dojo.gfx.Line
-	},
-	createPolyline: function(points){
-		// summary: creates an VML polyline/polygon shape
-		// points: Object: a points object (see dojo.gfx.defaultPolyline)
-		//	or an Array of points
-		return this.createObject(dojo.gfx.Polyline, points, true);	// dojo.gfx.Polyline
-	},
-	createImage: function(image){
-		// summary: creates an VML image shape
-		// image: Object: an image object (see dojo.gfx.defaultImage)
-		if(!this.rawNode) return null;
-		var shape = new dojo.gfx.Image();
-		var node = document.createElement('div');
-		node.style.position = "relative";
-		node.style.width  = this.rawNode.style.width;
-		node.style.height = this.rawNode.style.height;
-		node.style.filter = "progid:DXImageTransform.Microsoft.Matrix(M11=1, M12=0, M21=0, M22=1, Dx=0, Dy=0)";
-		var img  = document.createElement('img');
-		node.appendChild(img);
-		shape.setRawNode(node);
-		this.rawNode.appendChild(node);
-		shape.setShape(image);
-		this.add(shape);
-		return shape;	// dojo.gfx.Image
-	},
-	createGroup: function(){
-		// summary: creates an VML group shape
-		return this.createObject(dojo.gfx.Group, null, true);	// dojo.gfx.Group
-	},
-	createObject: function(shapeType, rawShape, overrideSize) {
-		// summary: creates an instance of the passed shapeType class
-		// shapeType: Function: a class constructor to create an instance of
-		// rawShape: Object: properties to be passed in to the classes "setShape" method
-		if(!this.rawNode) return null;
-		var shape = new shapeType();
-		var node = document.createElement('v:' + shapeType.nodeType);
-		shape.setRawNode(node);
-		this.rawNode.appendChild(node);
-		if(overrideSize) this._overrideSize(node);
-		shape.setShape(rawShape);
-		this.add(shape);
-		return shape;	// dojo.gfx.Shape
-	},
-	_overrideSize: function(node){
-		node.style.width  = this.rawNode.style.width;
-		node.style.height = this.rawNode.style.height;
-		node.coordsize = parseFloat(node.style.width) + " " + parseFloat(node.style.height);
+dojo.gfx._creators = {createPath:function (path) {
+	return this.createObject(dojo.gfx.Path, path, true);
+}, createRect:function (rect) {
+	return this.createObject(dojo.gfx.Rect, rect);
+}, createCircle:function (circle) {
+	return this.createObject(dojo.gfx.Circle, circle);
+}, createEllipse:function (ellipse) {
+	return this.createObject(dojo.gfx.Ellipse, ellipse);
+}, createLine:function (line) {
+	return this.createObject(dojo.gfx.Line, line, true);
+}, createPolyline:function (points) {
+	return this.createObject(dojo.gfx.Polyline, points, true);
+}, createImage:function (image) {
+	if (!this.rawNode) {
+		return null;
 	}
-};
-
+	var shape = new dojo.gfx.Image();
+	var node = document.createElement("div");
+	node.style.position = "relative";
+	node.style.width = this.rawNode.style.width;
+	node.style.height = this.rawNode.style.height;
+	node.style.filter = "progid:DXImageTransform.Microsoft.Matrix(M11=1, M12=0, M21=0, M22=1, Dx=0, Dy=0)";
+	var img = document.createElement("img");
+	node.appendChild(img);
+	shape.setRawNode(node);
+	this.rawNode.appendChild(node);
+	shape.setShape(image);
+	this.add(shape);
+	return shape;
+}, createGroup:function () {
+	return this.createObject(dojo.gfx.Group, null, true);
+}, createObject:function (shapeType, rawShape, overrideSize) {
+	if (!this.rawNode) {
+		return null;
+	}
+	var shape = new shapeType();
+	var node = document.createElement("v:" + shapeType.nodeType);
+	shape.setRawNode(node);
+	this.rawNode.appendChild(node);
+	if (overrideSize) {
+		this._overrideSize(node);
+	}
+	shape.setShape(rawShape);
+	this.add(shape);
+	return shape;
+}, _overrideSize:function (node) {
+	node.style.width = this.rawNode.style.width;
+	node.style.height = this.rawNode.style.height;
+	node.coordsize = parseFloat(node.style.width) + " " + parseFloat(node.style.height);
+}};
 dojo.lang.extend(dojo.gfx.Group, dojo.gfx._creators);
 dojo.lang.extend(dojo.gfx.Surface, dojo.gfx._creators);
-
 delete dojo.gfx._creators;
-
-dojo.gfx.attachNode = function(node){
-	// summary: creates a shape from a Node
-	// node: Node: an VML node
-	if(!node) return null;
+dojo.gfx.attachNode = function (node) {
+	if (!node) {
+		return null;
+	}
 	var s = null;
-	switch(node.tagName.toLowerCase()){
-		case dojo.gfx.Rect.nodeType:
-			s = new dojo.gfx.Rect();
+	switch (node.tagName.toLowerCase()) {
+	  case dojo.gfx.Rect.nodeType:
+		s = new dojo.gfx.Rect();
+		break;
+	  case dojo.gfx.Ellipse.nodeType:
+		s = (node.style.width == node.style.height) ? new dojo.gfx.Circle() : new dojo.gfx.Ellipse();
+		break;
+	  case dojo.gfx.Path.nodeType:
+		switch (node.getAttribute("dojoGfxType")) {
+		  case "line":
+			s = new dojo.gfx.Line();
 			break;
-		case dojo.gfx.Ellipse.nodeType:
-			s = (node.style.width == node.style.height)
-				? new dojo.gfx.Circle()
-				: new dojo.gfx.Ellipse();
+		  case "polyline":
+			s = new dojo.gfx.Polyline();
 			break;
-		case dojo.gfx.Path.nodeType:
-			switch(node.getAttribute("dojoGfxType")){
-				case "line":
-					s = new dojo.gfx.Line();
-					break;
-				case "polyline":
-					s = new dojo.gfx.Polyline();
-					break;
-				case "path":
-					s = new dojo.gfx.Path();
-					break;
-			}
+		  case "path":
+			s = new dojo.gfx.Path();
 			break;
-		case dojo.gfx.Image.nodeType:
-			s = new dojo.gfx.Image();
-			break;
-		default:
-			dojo.debug("FATAL ERROR! tagName = " + node.tagName);
+		}
+		break;
+	  case dojo.gfx.Image.nodeType:
+		s = new dojo.gfx.Image();
+		break;
+	  default:
+		dojo.debug("FATAL ERROR! tagName = " + node.tagName);
 	}
 	s.attach(node);
-	return s;	// dojo.gfx.Shape
+	return s;
 };
-
-dojo.lang.extend(dojo.gfx.Surface, {
-	// summary: a surface object to be used for drawings (VML)
-
-	setDimensions: function(width, height){
-		// summary: sets the width and height of the rawNode
-		// width: String: width of surface, e.g., "100px"
-		// height: String: height of surface, e.g., "100px"
-		if(!this.rawNode) return this;
-		this.rawNode.style.width = width;
-		this.rawNode.style.height = height;
-		this.rawNode.coordsize = width + " " + height;
-		return this;	// self
-	},
-	getDimensions: function(){
-		// summary: returns an object with properties "width" and "height"
-		return this.rawNode ? { width: this.rawNode.style.width, height: this.rawNode.style.height } : null; // Object
-	},
-	// group control
-	add: function(shape){
-		// summary: adds a shape to a group/surface
-		// shape: dojo.gfx.Shape: an VMLshape object
-		var oldParent = shape.getParent();
-		if(this != oldParent){
-			this.rawNode.appendChild(shape.rawNode);
-			if(oldParent){
-				oldParent.remove(shape, true);
-			}
-			shape._setParent(this, null);
+dojo.lang.extend(dojo.gfx.Surface, {setDimensions:function (width, height) {
+	if (!this.rawNode) {
+		return this;
+	}
+	this.rawNode.style.width = width;
+	this.rawNode.style.height = height;
+	this.rawNode.coordsize = width + " " + height;
+	return this;
+}, getDimensions:function () {
+	return this.rawNode ? {width:this.rawNode.style.width, height:this.rawNode.style.height} : null;
+}, add:function (shape) {
+	var oldParent = shape.getParent();
+	if (this != oldParent) {
+		this.rawNode.appendChild(shape.rawNode);
+		if (oldParent) {
+			oldParent.remove(shape, true);
 		}
-		return this;	// self
-	},
-	remove: function(shape, silently){
-		// summary: remove a shape from a group/surface
-		// shape: dojo.gfx.Shape: an VML shape object
-		// silently: Boolean?: if true, regenerate a picture
-		if(this == shape.getParent()){
-			if(this.rawNode == shape.rawNode.parentNode){
-				this.rawNode.removeChild(shape.rawNode);
-			}
-			shape._setParent(null, null);
+		shape._setParent(this, null);
+	}
+	return this;
+}, remove:function (shape, silently) {
+	if (this == shape.getParent()) {
+		if (this.rawNode == shape.rawNode.parentNode) {
+			this.rawNode.removeChild(shape.rawNode);
 		}
-		return this;	// self
+		shape._setParent(null, null);
 	}
-});
-
-dojo.gfx.createSurface = function(parentNode, width, height){
-	// summary: creates a surface (VML)
-	// parentNode: Node: a parent node
-	// width: String: width of surface, e.g., "100px"
-	// height: String: height of surface, e.g., "100px"
-
+	return this;
+}});
+dojo.gfx.createSurface = function (parentNode, width, height) {
 	var s = new dojo.gfx.Surface();
 	s.rawNode = document.createElement("v:group");
-	s.rawNode.style.width  = width  ? width  : "100%";
+	s.rawNode.style.width = width ? width : "100%";
 	s.rawNode.style.height = height ? height : "100%";
-	s.rawNode.coordsize = (width && height)
-		? (parseFloat(width) + " " + parseFloat(height))
-		: "100% 100%";
+	s.rawNode.coordsize = (width && height) ? (parseFloat(width) + " " + parseFloat(height)) : "100% 100%";
 	s.rawNode.coordorigin = "0 0";
 	dojo.byId(parentNode).appendChild(s.rawNode);
-	return s;	// dojo.gfx.Surface
+	return s;
 };
-
-dojo.gfx.attachSurface = function(node){
-	// summary: creates a surface from a Node
-	// node: Node: an VML node
+dojo.gfx.attachSurface = function (node) {
 	var s = new dojo.gfx.Surface();
 	s.rawNode = node;
-	return s;	// dojo.gfx.Surface
+	return s;
 };
 
+
 __CPAN_FILE__ src/gfx/path.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -94018,329 +66000,262 @@
 */
 
 dojo.provide("dojo.gfx.path");
-
 dojo.require("dojo.math");
-
 dojo.require("dojo.gfx.shape");
-
-dojo.declare("dojo.gfx.path.Path", dojo.gfx.Shape, {
-	// summary: a generalized path shape
-	
-	initializer: function(rawNode){
-		// summary: a constructor of a path shape object
-		// rawNode: Node: a DOM node to be used by this path object
-		this.shape = dojo.lang.shallowCopy(dojo.gfx.defaultPath, true);
-		this.segments = [];
+dojo.declare("dojo.gfx.path.Path", dojo.gfx.Shape, {initializer:function (rawNode) {
+	this.shape = dojo.lang.shallowCopy(dojo.gfx.defaultPath, true);
+	this.segments = [];
+	this.absolute = true;
+	this.last = {};
+	this.attach(rawNode);
+}, setAbsoluteMode:function (mode) {
+	this.absolute = typeof (mode) == "string" ? (mode == "absolute") : mode;
+	return this;
+}, getAbsoluteMode:function () {
+	return this.absolute;
+}, getBoundingBox:function () {
+	return "l" in this.bbox ? {x:this.bbox.l, y:this.bbox.t, width:this.bbox.r - this.bbox.l, height:this.bbox.b - this.bbox.t} : null;
+}, getLastPosition:function () {
+	return "x" in this.last ? this.last : null;
+}, _updateBBox:function (x, y) {
+	if ("l" in this.bbox) {
+		if (this.bbox.l > x) {
+			this.bbox.l = x;
+		}
+		if (this.bbox.r < x) {
+			this.bbox.r = x;
+		}
+		if (this.bbox.t > y) {
+			this.bbox.t = y;
+		}
+		if (this.bbox.b < y) {
+			this.bbox.b = y;
+		}
+	} else {
+		this.bbox = {l:x, b:y, r:x, t:y};
+	}
+}, _updateWithSegment:function (segment) {
+	var n = segment.args;
+	var l = n.length;
+	switch (segment.action) {
+	  case "M":
+	  case "L":
+	  case "C":
+	  case "S":
+	  case "Q":
+	  case "T":
+		for (var i = 0; i < l; i += 2) {
+			this._updateBBox(this.bbox, n[i], n[i + 1]);
+		}
+		this.last.x = n[l - 2];
+		this.last.y = n[l - 1];
 		this.absolute = true;
-		this.last = {};
-		this.attach(rawNode);
-	},
-	
-	// mode manipulations
-	setAbsoluteMode: function(mode){
-		// summary: sets an absolute or relative mode for path points
-		// mode: Boolean: true/false or "absolute"/"relative" to specify the mode
-		this.absolute = typeof(mode) == "string" ? (mode == "absolute") : mode;
-		return this; // self
-	},
-	getAbsoluteMode: function(){
-		// summary: returns a current value of the absolute mode
-		return this.absolute; // Boolean
-	},
-	
-	getBoundingBox: function(){
-		// summary: returns the bounding box {x, y, width, height} or null
-		return "l" in this.bbox ? {x: this.bbox.l, y: this.bbox.t, width: this.bbox.r - this.bbox.l, height: this.bbox.b - this.bbox.t} : null; // dojo.gfx.Rectangle
-	},
-	
-	getLastPosition: function(){
-		// summary: returns the last point in the path, or null
-		return "x" in this.last ? this.last : null; // Object
-	},
-	
-	// segment interpretation
-	_updateBBox: function(x, y){
-		// summary: updates the bounding box of path with new point
-		// x: Number: an x coordinate
-		// y: Number: a y coordinate
-		
-		// we use {l, b, r, t} representation of a bbox
-		if("l" in this.bbox){
-			if(this.bbox.l > x) this.bbox.l = x;
-			if(this.bbox.r < x) this.bbox.r = x;
-			if(this.bbox.t > y) this.bbox.t = y;
-			if(this.bbox.b < y) this.bbox.b = y;
-		}else{
-			this.bbox = {l: x, b: y, r: x, t: y};
+		break;
+	  case "H":
+		for (var i = 0; i < l; ++i) {
+			this._updateBBox(this.bbox, n[i], this.last.y);
 		}
-	},
-	_updateWithSegment: function(segment){
-		// summary: updates the bounding box of path with new segment
-		// segment: Object: a segment
-		var n = segment.args;
-		var l = n.length;
-		// update internal variables: bbox, absolute, last
-		switch(segment.action){
-			case "M":
-			case "L":
-			case "C":
-			case "S":
-			case "Q":
-			case "T":
-				for(var i = 0; i < l; i += 2){
-					this._updateBBox(this.bbox, n[i], n[i + 1]);
-				}
-				this.last.x = n[l - 2];
-				this.last.y = n[l - 1];
-				this.absolute = true;
-				break;
-			case "H":
-				for(var i = 0; i < l; ++i){
-					this._updateBBox(this.bbox, n[i], this.last.y);
-				}
-				this.last.x = n[l - 1];
-				this.absolute = true;
-				break;
-			case "V":
-				for(var i = 0; i < l; ++i){
-					this._updateBBox(this.bbox, this.last.x, n[i]);
-				}
-				this.last.y = n[l - 1];
-				this.absolute = true;
-				break;
-			case "m":
-				var start = 0;
-				if(!("x" in this.last)){
-					this._updateBBox(this.bbox, this.last.x = n[0], this.last.y = n[1]);
-					start = 2;
-				}
-				for(var i = start; i < l; i += 2){
-					this._updateBBox(this.bbox, this.last.x += n[i], this.last.y += n[i + 1]);
-				}
-				this.absolute = false;
-				break;
-			case "l":
-			case "t":
-				for(var i = 0; i < l; i += 2){
-					this._updateBBox(this.bbox, this.last.x += n[i], this.last.y += n[i + 1]);
-				}
-				this.absolute = false;
-				break;
-			case "h":
-				for(var i = 0; i < l; ++i){
-					this._updateBBox(this.bbox, this.last.x += n[i], this.last.y);
-				}
-				this.absolute = false;
-				break;
-			case "v":
-				for(var i = 0; i < l; ++i){
-					this._updateBBox(this.bbox, this.last.x, this.last.y += n[i]);
-				}
-				this.absolute = false;
-				break;
-			case "c":
-				for(var i = 0; i < l; i += 6){
-					this._updateBBox(this.bbox, this.last.x + n[i], this.last.y + n[i + 1]);
-					this._updateBBox(this.bbox, this.last.x + n[i + 2], this.last.y + n[i + 3]);
-					this._updateBBox(this.bbox, this.last.x += n[i + 4], this.last.y += n[i + 5]);
-				}
-				this.absolute = false;
-				break;
-			case "s":
-			case "q":
-				for(var i = 0; i < l; i += 4){
-					this._updateBBox(this.bbox, this.last.x + n[i], this.last.y + n[i + 1]);
-					this._updateBBox(this.bbox, this.last.x += n[i + 2], this.last.y += n[i + 3]);
-				}
-				this.absolute = false;
-				break;
-			case "A":
-				for(var i = 0; i < l; i += 7){
-					this._updateBBox(this.bbox, n[i + 5], n[i + 6]);
-				}
-				this.last.x = n[l - 2];
-				this.last.y = n[l - 1];
-				this.absolute = true;
-				break;
-			case "a":
-				for(var i = 0; i < l; i += 7){
-					this._updateBBox(this.bbox, this.last.x += n[i + 5], this.last.y += n[i + 6]);
-				}
-				this.absolute = false;
-				break;
+		this.last.x = n[l - 1];
+		this.absolute = true;
+		break;
+	  case "V":
+		for (var i = 0; i < l; ++i) {
+			this._updateBBox(this.bbox, this.last.x, n[i]);
 		}
-		// add an SVG path segment
-		var path = [segment.action];
-		for(var i = 0; i < l; ++i){
-			path.push(dojo.gfx.formatNumber(n[i], true));
+		this.last.y = n[l - 1];
+		this.absolute = true;
+		break;
+	  case "m":
+		var start = 0;
+		if (!("x" in this.last)) {
+			this._updateBBox(this.bbox, this.last.x = n[0], this.last.y = n[1]);
+			start = 2;
 		}
-		if(typeof(this.shape.path) == "string"){
-			this.shape.path += path.join("");
-		}else{
-			this.shape.path = this.shape.path.concat(path);
+		for (var i = start; i < l; i += 2) {
+			this._updateBBox(this.bbox, this.last.x += n[i], this.last.y += n[i + 1]);
 		}
-	},
-	
-	// a dictionary, which maps segment type codes to a number of their argemnts
-	_validSegments: {m: 2, l: 2, h: 1, v: 1, c: 6, s: 4, q: 4, t: 2, a: 7, z: 0},
-	
-	_pushSegment: function(action, args){
-		// summary: adds a segment
-		// action: String: valid SVG code for a segment's type
-		// args: Array: a list of parameters for this segment
-		var group = this._validSegments[action.toLowerCase()];
-		if(typeof(group) == "number"){
-			if(group){
-				if(args.length >= group){
-					var segment = {action: action, args: args.slice(0, args.length - args.length % group)};
-					this.segments.push(segment);
-					this._updateWithSegment(segment);
-				}
-			}else{
-				var segment = {action: action, args: []};
+		this.absolute = false;
+		break;
+	  case "l":
+	  case "t":
+		for (var i = 0; i < l; i += 2) {
+			this._updateBBox(this.bbox, this.last.x += n[i], this.last.y += n[i + 1]);
+		}
+		this.absolute = false;
+		break;
+	  case "h":
+		for (var i = 0; i < l; ++i) {
+			this._updateBBox(this.bbox, this.last.x += n[i], this.last.y);
+		}
+		this.absolute = false;
+		break;
+	  case "v":
+		for (var i = 0; i < l; ++i) {
+			this._updateBBox(this.bbox, this.last.x, this.last.y += n[i]);
+		}
+		this.absolute = false;
+		break;
+	  case "c":
+		for (var i = 0; i < l; i += 6) {
+			this._updateBBox(this.bbox, this.last.x + n[i], this.last.y + n[i + 1]);
+			this._updateBBox(this.bbox, this.last.x + n[i + 2], this.last.y + n[i + 3]);
+			this._updateBBox(this.bbox, this.last.x += n[i + 4], this.last.y += n[i + 5]);
+		}
+		this.absolute = false;
+		break;
+	  case "s":
+	  case "q":
+		for (var i = 0; i < l; i += 4) {
+			this._updateBBox(this.bbox, this.last.x + n[i], this.last.y + n[i + 1]);
+			this._updateBBox(this.bbox, this.last.x += n[i + 2], this.last.y += n[i + 3]);
+		}
+		this.absolute = false;
+		break;
+	  case "A":
+		for (var i = 0; i < l; i += 7) {
+			this._updateBBox(this.bbox, n[i + 5], n[i + 6]);
+		}
+		this.last.x = n[l - 2];
+		this.last.y = n[l - 1];
+		this.absolute = true;
+		break;
+	  case "a":
+		for (var i = 0; i < l; i += 7) {
+			this._updateBBox(this.bbox, this.last.x += n[i + 5], this.last.y += n[i + 6]);
+		}
+		this.absolute = false;
+		break;
+	}
+	var path = [segment.action];
+	for (var i = 0; i < l; ++i) {
+		path.push(dojo.gfx.formatNumber(n[i], true));
+	}
+	if (typeof (this.shape.path) == "string") {
+		this.shape.path += path.join("");
+	} else {
+		this.shape.path = this.shape.path.concat(path);
+	}
+}, _validSegments:{m:2, l:2, h:1, v:1, c:6, s:4, q:4, t:2, a:7, z:0}, _pushSegment:function (action, args) {
+	var group = this._validSegments[action.toLowerCase()];
+	if (typeof (group) == "number") {
+		if (group) {
+			if (args.length >= group) {
+				var segment = {action:action, args:args.slice(0, args.length - args.length % group)};
 				this.segments.push(segment);
 				this._updateWithSegment(segment);
 			}
+		} else {
+			var segment = {action:action, args:[]};
+			this.segments.push(segment);
+			this._updateWithSegment(segment);
 		}
-	},
-	
-	_collectArgs: function(array, args){
-		// summary: converts an array of arguments to plain numeric values
-		// array: Array: an output argument (array of numbers)
-		// args: Array: an input argument (can be values of Boolean, Number, dojo.gfx.Point, or an embedded array of them)
-		for(var i = 0; i < args.length; ++i){
-			var t = args[i];
-			if(typeof(t) == "boolean"){
-				array.push(t ? 1 : 0);
-			}else if(typeof(t) == "number"){
+	}
+}, _collectArgs:function (array, args) {
+	for (var i = 0; i < args.length; ++i) {
+		var t = args[i];
+		if (typeof (t) == "boolean") {
+			array.push(t ? 1 : 0);
+		} else {
+			if (typeof (t) == "number") {
 				array.push(t);
-			}else if(t instanceof Array){
-				this._collectArgs(array, t);
-			}else if("x" in t && "y" in t){
-				array.push(t.x);
-				array.push(t.y);
+			} else {
+				if (t instanceof Array) {
+					this._collectArgs(array, t);
+				} else {
+					if ("x" in t && "y" in t) {
+						array.push(t.x);
+						array.push(t.y);
+					}
+				}
 			}
 		}
-	},
-
-	// segments	
-	moveTo: function(){
-		// summary: formes a move segment
-		var args = [];
-		this._collectArgs(args, arguments);
-		this._pushSegment(this.absolute ? "M" : "m", args);
-		return this; // self
-	},
-	lineTo: function(){
-		// summary: formes a line segment
-		var args = [];
-		this._collectArgs(args, arguments);
-		this._pushSegment(this.absolute ? "L" : "l", args);
-		return this; // self
-	},
-	hLineTo: function(){
-		// summary: formes a horizontal line segment
-		var args = [];
-		this._collectArgs(args, arguments);
-		this._pushSegment(this.absolute ? "H" : "h", args);
-		return this; // self
-	},
-	vLineTo: function(){
-		// summary: formes a vertical line segment
-		var args = [];
-		this._collectArgs(args, arguments);
-		this._pushSegment(this.absolute ? "V" : "v", args);
-		return this; // self
-	},
-	curveTo: function(){
-		// summary: formes a curve segment
-		var args = [];
-		this._collectArgs(args, arguments);
-		this._pushSegment(this.absolute ? "C" : "c", args);
-		return this; // self
-	},
-	smoothCurveTo: function(){
-		// summary: formes a smooth curve segment
-		var args = [];
-		this._collectArgs(args, arguments);
-		this._pushSegment(this.absolute ? "S" : "s", args);
-		return this; // self
-	},
-	qCurveTo: function(){
-		// summary: formes a quadratic curve segment
-		var args = [];
-		this._collectArgs(args, arguments);
-		this._pushSegment(this.absolute ? "Q" : "q", args);
-		return this; // self
-	},
-	qSmoothCurveTo: function(){
-		// summary: formes a quadratic smooth curve segment
-		var args = [];
-		this._collectArgs(args, arguments);
-		this._pushSegment(this.absolute ? "T" : "t", args);
-		return this; // self
-	},
-	arcTo: function(){
-		// summary: formes an elliptic arc segment
-		var args = [];
-		this._collectArgs(args, arguments);
-		for(var i = 2; i < args.length; i += 7){
-			args[i] = -args[i];
-		}
-		this._pushSegment(this.absolute ? "A" : "a", args);
-		return this; // self
-	},
-	closePath: function(){
-		// summary: closes a path
-		this._pushSegment("Z", []);
-		return this; // self
-	},
-	
-	// setShape
-	_setPath: function(path){
-		// summary: forms a path using an SVG path string
-		// path: String: an SVG path string
-		var p = path.match(dojo.gfx.pathRegExp);
-		this.segments = [];
-		this.absolute = true;
-		this.bbox = {};
-		this.last = {};
-		if(!p) return;
-		// create segments
-		var action = "";	// current action
-		var args = [];		// current arguments
-		for(var i = 0; i < p.length; ++i){
-			var t = p[i];
-			var x = parseFloat(t);
-			if(isNaN(x)){
-				if(action){
-					this._pushSegment(action, args);
-				}
-				args = [];
-				action = t;
-			}else{
-				args.push(x);
+	}
+}, moveTo:function () {
+	var args = [];
+	this._collectArgs(args, arguments);
+	this._pushSegment(this.absolute ? "M" : "m", args);
+	return this;
+}, lineTo:function () {
+	var args = [];
+	this._collectArgs(args, arguments);
+	this._pushSegment(this.absolute ? "L" : "l", args);
+	return this;
+}, hLineTo:function () {
+	var args = [];
+	this._collectArgs(args, arguments);
+	this._pushSegment(this.absolute ? "H" : "h", args);
+	return this;
+}, vLineTo:function () {
+	var args = [];
+	this._collectArgs(args, arguments);
+	this._pushSegment(this.absolute ? "V" : "v", args);
+	return this;
+}, curveTo:function () {
+	var args = [];
+	this._collectArgs(args, arguments);
+	this._pushSegment(this.absolute ? "C" : "c", args);
+	return this;
+}, smoothCurveTo:function () {
+	var args = [];
+	this._collectArgs(args, arguments);
+	this._pushSegment(this.absolute ? "S" : "s", args);
+	return this;
+}, qCurveTo:function () {
+	var args = [];
+	this._collectArgs(args, arguments);
+	this._pushSegment(this.absolute ? "Q" : "q", args);
+	return this;
+}, qSmoothCurveTo:function () {
+	var args = [];
+	this._collectArgs(args, arguments);
+	this._pushSegment(this.absolute ? "T" : "t", args);
+	return this;
+}, arcTo:function () {
+	var args = [];
+	this._collectArgs(args, arguments);
+	for (var i = 2; i < args.length; i += 7) {
+		args[i] = -args[i];
+	}
+	this._pushSegment(this.absolute ? "A" : "a", args);
+	return this;
+}, closePath:function () {
+	this._pushSegment("Z", []);
+	return this;
+}, _setPath:function (path) {
+	var p = path.match(dojo.gfx.pathRegExp);
+	this.segments = [];
+	this.absolute = true;
+	this.bbox = {};
+	this.last = {};
+	if (!p) {
+		return;
+	}
+	var action = "";
+	var args = [];
+	for (var i = 0; i < p.length; ++i) {
+		var t = p[i];
+		var x = parseFloat(t);
+		if (isNaN(x)) {
+			if (action) {
+				this._pushSegment(action, args);
 			}
+			args = [];
+			action = t;
+		} else {
+			args.push(x);
 		}
-		this._pushSegment(action, args);
-	},
-	setShape: function(newShape){
-		// summary: forms a path using a shape
-		// newShape: Object: an SVG path string or a path object (see dojo.gfx.defaultPath)
-		this.shape = dojo.gfx.makeParameters(this.shape, typeof(newShape) == "string" ? {path: newShape} : newShape);
-		var path = this.shape.path;
-		// switch to non-updating version of path building
-		this.shape.path = [];
-		this._setPath(path);
-		// switch back to the string path
-		this.shape.path = this.shape.path.join("");
-		return this; // self
-	},
-	
-	// useful constant for descendants
-	_2PI: Math.PI * 2
-});
+	}
+	this._pushSegment(action, args);
+}, setShape:function (newShape) {
+	this.shape = dojo.gfx.makeParameters(this.shape, typeof (newShape) == "string" ? {path:newShape} : newShape);
+	var path = this.shape.path;
+	this.shape.path = [];
+	this._setPath(path);
+	this.shape.path = this.shape.path.join("");
+	return this;
+}, _2PI:Math.PI * 2});
 
+
 __CPAN_FILE__ src/gfx/shape.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -94353,423 +66268,170 @@
 */
 
 dojo.provide("dojo.gfx.shape");
-
 dojo.require("dojo.lang.declare");
-
 dojo.require("dojo.gfx.common");
-
-dojo.declare("dojo.gfx.Shape", null, {
-	// summary: a Shape object, which knows how to apply 
-	// graphical attributes and transformations
-
-	initializer: function(){
-	
-		// rawNode: Node: underlying node
-		this.rawNode = null;
-		
-		// shape: Object: an abstract shape object
-		//	(see dojo.gfx.defaultPath,
-		//	dojo.gfx.defaultPolyline,
-		//	dojo.gfx.defaultRect,
-		//	dojo.gfx.defaultEllipse,
-		//	dojo.gfx.defaultCircle,
-		//	dojo.gfx.defaultLine,
-		//	or dojo.gfx.defaultImage)
-		this.shape = null;
-		
-		// matrix: dojo.gfx.matrix.Matrix: a transformation matrix
-		this.matrix = null;
-		
-		// fillStyle: Object: a fill object 
-		//	(see dojo.gfx.defaultLinearGradient, 
-		//	dojo.gfx.defaultRadialGradient, 
-		//	dojo.gfx.defaultPattern, 
-		//	or dojo.gfx.color.Color)
-		this.fillStyle = null;
-		
-		// strokeStyle: Object: a stroke object 
-		//	(see dojo.gfx.defaultStroke) 
-		this.strokeStyle = null;
-		
-		// bbox: dojo.gfx.Rectangle: a bounding box of this shape
-		//	(see dojo.gfx.defaultRect)
-		this.bbox = null;
-		
-		// virtual group structure
-		
-		// parent: Object: a parent or null
-		//	(see dojo.gfx.Surface,
-		//	dojo.gfx.shape.VirtualGroup,
-		//	or dojo.gfx.Group)
-		this.parent = null;
-		
-		// parentMatrix: dojo.gfx.matrix.Matrix
-		//	a transformation matrix inherited from the parent
-		this.parentMatrix = null;
-	},
-
-	// trivial getters
-	getNode: function(){
-		// summary: returns the current DOM Node or null
-		return this.rawNode; // Node
-	},
-	getShape: function(){
-		// summary: returns the current shape object or null
-		//	(see dojo.gfx.defaultPath,
-		//	dojo.gfx.defaultPolyline,
-		//	dojo.gfx.defaultRect,
-		//	dojo.gfx.defaultEllipse,
-		//	dojo.gfx.defaultCircle,
-		//	dojo.gfx.defaultLine,
-		//	or dojo.gfx.defaultImage)
-		return this.shape; // Object
-	},
-	getTransform: function(){
-		// summary: returns the current transformation matrix or null
-		return this.matrix;	// dojo.gfx.matrix.Matrix
-	},
-	getFill: function(){
-		// summary: returns the current fill object or null
-		//	(see dojo.gfx.defaultLinearGradient, 
-		//	dojo.gfx.defaultRadialGradient, 
-		//	dojo.gfx.defaultPattern, 
-		//	or dojo.gfx.color.Color)
-		return this.fillStyle;	// Object
-	},
-	getStroke: function(){
-		// summary: returns the current stroke object or null
-		//	(see dojo.gfx.defaultStroke) 
-		return this.strokeStyle;	// Object
-	},
-	getParent: function(){
-		// summary: returns the parent or null
-		//	(see dojo.gfx.Surface,
-		//	dojo.gfx.shape.VirtualGroup,
-		//	or dojo.gfx.Group)
-		return this.parent;	// Object
-	},
-	getBoundingBox: function(){
-		// summary: returns the bounding box or null
-		//	(see dojo.gfx.defaultRect)
-		return this.bbox;	// dojo.gfx.Rectangle
-	},
-	getEventSource: function(){
-		// summary: returns a Node, which is used as 
-		//	a source of events for this shape
-		return this.rawNode;	// Node
-	},
-	
-	// empty settings
-	
-	setShape: function(shape){
-		// summary: sets a shape object
-		//	(the default implementation simply ignores it)
-		// shape: Object: a shape object
-		//	(see dojo.gfx.defaultPath,
-		//	dojo.gfx.defaultPolyline,
-		//	dojo.gfx.defaultRect,
-		//	dojo.gfx.defaultEllipse,
-		//	dojo.gfx.defaultCircle,
-		//	dojo.gfx.defaultLine,
-		//	or dojo.gfx.defaultImage)
-		return this;	// self
-	},
-	setFill: function(fill){
-		// summary: sets a fill object
-		//	(the default implementation simply ignores it)
-		// fill: Object: a fill object
-		//	(see dojo.gfx.defaultLinearGradient, 
-		//	dojo.gfx.defaultRadialGradient, 
-		//	dojo.gfx.defaultPattern, 
-		//	or dojo.gfx.color.Color)
-		return this;	// self
-	},
-	setStroke: function(stroke){
-		// summary: sets a stroke object
-		//	(the default implementation simply ignores it)
-		// stroke: Object: a stroke object
-		//	(see dojo.gfx.defaultStroke) 
-		return this;	// self
-	},
-	
-	// z-index
-	
-	moveToFront: function(){
-		// summary: moves a shape to front of its parent's list of shapes
-		//	(the default implementation does nothing)
-		return this;	// self
-	},
-	moveToBack: function(){
-		// summary: moves a shape to back of its parent's list of shapes
-		//	(the default implementation does nothing)
-		return this;
-	},
-
-	setTransform: function(matrix){
-		// summary: sets a transformation matrix
-		// matrix: dojo.gfx.matrix.Matrix: a matrix or a matrix-like object
-		//	(see an argument of dojo.gfx.matrix.Matrix 
-		//	constructor for a list of acceptable arguments)
-		this.matrix = dojo.gfx.matrix.clone(matrix ? dojo.gfx.matrix.normalize(matrix) : dojo.gfx.identity, true);
-		return this._applyTransform();	// self
-	},
-	
-	// apply left & right transformation
-	
-	applyRightTransform: function(matrix){
-		// summary: multiplies the existing matrix with an argument on right side
-		//	(this.matrix * matrix)
-		// matrix: dojo.gfx.matrix.Matrix: a matrix or a matrix-like object
-		//	(see an argument of dojo.gfx.matrix.Matrix 
-		//	constructor for a list of acceptable arguments)
-		return matrix ? this.setTransform([this.matrix, matrix]) : this;	// self
-	},
-	applyLeftTransform: function(matrix){
-		// summary: multiplies the existing matrix with an argument on left side
-		//	(matrix * this.matrix)
-		// matrix: dojo.gfx.matrix.Matrix: a matrix or a matrix-like object
-		//	(see an argument of dojo.gfx.matrix.Matrix 
-		//	constructor for a list of acceptable arguments)
-		return matrix ? this.setTransform([matrix, this.matrix]) : this;	// self
-	},
-
-	applyTransform: function(matrix){
-		// summary: a shortcut for dojo.gfx.Shape.applyRight
-		// matrix: dojo.gfx.matrix.Matrix: a matrix or a matrix-like object
-		//	(see an argument of dojo.gfx.matrix.Matrix 
-		//	constructor for a list of acceptable arguments)
-		return matrix ? this.setTransform([this.matrix, matrix]) : this;	// self
-	},
-	
-	// virtual group methods
-	
-	remove: function(silently){
-		// summary: removes the shape from its parent's list of shapes
-		// silently: Boolean?: if true, do not redraw a picture yet
-		if(this.parent){
-			this.parent.remove(this, silently);
-		}
-		return this;	// self
-	},
-	_setParent: function(parent, matrix){
-		// summary: sets a parent
-		// parent: Object: a parent or null
-		//	(see dojo.gfx.Surface,
-		//	dojo.gfx.shape.VirtualGroup,
-		//	or dojo.gfx.Group)
-		// matrix: dojo.gfx.matrix.Matrix:
-		//	a 2D matrix or a matrix-like object
-		this.parent = parent;
-		return this._updateParentMatrix(matrix);	// self
-	},
-	_updateParentMatrix: function(matrix){
-		// summary: updates the parent matrix with new matrix
-		// matrix: dojo.gfx.matrix.Matrix:
-		//	a 2D matrix or a matrix-like object
-		this.parentMatrix = matrix ? dojo.gfx.matrix.clone(matrix) : null;
-		return this._applyTransform();	// self
-	},
-	_getRealMatrix: function(){
-		// summary: returns the cumulative ("real") transformation matrix
-		//	by combining the shape's matrix with its parent's matrix
-		return this.parentMatrix ? new dojo.gfx.matrix.Matrix2D([this.parentMatrix, this.matrix]) : this.matrix;	// dojo.gfx.matrix.Matrix
+dojo.declare("dojo.gfx.Shape", null, {initializer:function () {
+	this.rawNode = null;
+	this.shape = null;
+	this.matrix = null;
+	this.fillStyle = null;
+	this.strokeStyle = null;
+	this.bbox = null;
+	this.parent = null;
+	this.parentMatrix = null;
+}, getNode:function () {
+	return this.rawNode;
+}, getShape:function () {
+	return this.shape;
+}, getTransform:function () {
+	return this.matrix;
+}, getFill:function () {
+	return this.fillStyle;
+}, getStroke:function () {
+	return this.strokeStyle;
+}, getParent:function () {
+	return this.parent;
+}, getBoundingBox:function () {
+	return this.bbox;
+}, getEventSource:function () {
+	return this.rawNode;
+}, setShape:function (shape) {
+	return this;
+}, setFill:function (fill) {
+	return this;
+}, setStroke:function (stroke) {
+	return this;
+}, moveToFront:function () {
+	return this;
+}, moveToBack:function () {
+	return this;
+}, setTransform:function (matrix) {
+	this.matrix = dojo.gfx.matrix.clone(matrix ? dojo.gfx.matrix.normalize(matrix) : dojo.gfx.identity, true);
+	return this._applyTransform();
+}, applyRightTransform:function (matrix) {
+	return matrix ? this.setTransform([this.matrix, matrix]) : this;
+}, applyLeftTransform:function (matrix) {
+	return matrix ? this.setTransform([matrix, this.matrix]) : this;
+}, applyTransform:function (matrix) {
+	return matrix ? this.setTransform([this.matrix, matrix]) : this;
+}, remove:function (silently) {
+	if (this.parent) {
+		this.parent.remove(this, silently);
 	}
-});
-
-dojo.declare("dojo.gfx.shape.VirtualGroup", dojo.gfx.Shape, {
-	// summary: a virtual group of shapes, which can be used 
-	//	as a foundation for renderer-specific groups, or as a way 
-	//	to logically group shapes (e.g, to propagate matricies)
-
-	initializer: function() {
-	
-		// children: Array: a list of children
-		this.children = [];
-	},
-	
-	// group management
-	
-	add: function(shape){
-		// summary: adds a shape to the list
-		// shape: dojo.gfx.Shape: a shape
-		var oldParent = shape.getParent();
-		if(oldParent){
-			oldParent.remove(shape, true);
-		}
-		this.children.push(shape);
-		return shape._setParent(this, this._getRealMatrix());	// self
-	},
-	remove: function(shape, silently){
-		// summary: removes a shape from the list
-		// silently: Boolean?: if true, do not redraw a picture yet
-		for(var i = 0; i < this.children.length; ++i){
-			if(this.children[i] == shape){
-				if(silently){
-					// skip for now
-				}else{
-					shape._setParent(null, null);
-				}
-				this.children.splice(i, 1);
-				break;
+	return this;
+}, _setParent:function (parent, matrix) {
+	this.parent = parent;
+	return this._updateParentMatrix(matrix);
+}, _updateParentMatrix:function (matrix) {
+	this.parentMatrix = matrix ? dojo.gfx.matrix.clone(matrix) : null;
+	return this._applyTransform();
+}, _getRealMatrix:function () {
+	return this.parentMatrix ? new dojo.gfx.matrix.Matrix2D([this.parentMatrix, this.matrix]) : this.matrix;
+}});
+dojo.declare("dojo.gfx.shape.VirtualGroup", dojo.gfx.Shape, {initializer:function () {
+	this.children = [];
+}, add:function (shape) {
+	var oldParent = shape.getParent();
+	if (oldParent) {
+		oldParent.remove(shape, true);
+	}
+	this.children.push(shape);
+	return shape._setParent(this, this._getRealMatrix());
+}, remove:function (shape, silently) {
+	for (var i = 0; i < this.children.length; ++i) {
+		if (this.children[i] == shape) {
+			if (silently) {
+			} else {
+				shape._setParent(null, null);
 			}
+			this.children.splice(i, 1);
+			break;
 		}
-		return this;	// self
-	},
-	
-	// apply transformation
-	
-	_applyTransform: function(){
-		// summary: applies a transformation matrix to a group
-		var matrix = this._getRealMatrix();
-		for(var i = 0; i < this.children.length; ++i){
-			this.children[i]._updateParentMatrix(matrix);
-		}
-		return this;	// self
 	}
-});
-
-dojo.declare("dojo.gfx.shape.Rect", dojo.gfx.Shape, {
-	// summary: a generic rectangle
-	
-	initializer: function(rawNode) {
-		// summary: creates a rectangle
-		// rawNode: Node: a DOM Node
-		this.shape = dojo.lang.shallowCopy(dojo.gfx.defaultRect, true);
-		this.attach(rawNode);
-	},
-	
-	getBoundingBox: function(){
-		// summary: returns the bounding box (its shape in this case)
-		return this.shape;	// dojo.gfx.Rectangle
+	return this;
+}, _applyTransform:function () {
+	var matrix = this._getRealMatrix();
+	for (var i = 0; i < this.children.length; ++i) {
+		this.children[i]._updateParentMatrix(matrix);
 	}
-});
-
-dojo.declare("dojo.gfx.shape.Ellipse", dojo.gfx.Shape, {
-	// summary: a generic ellipse
-	
-	initializer: function(rawNode) {
-		// summary: creates an ellipse
-		// rawNode: Node: a DOM Node
-		this.shape = dojo.lang.shallowCopy(dojo.gfx.defaultEllipse, true);
-		this.attach(rawNode);
-	},
-	getBoundingBox: function(){
-		// summary: returns the bounding box
-		if(!this.bbox){
-			var shape = this.shape;
-			this.bbox = {x: shape.cx - shape.rx, y: shape.cy - shape.ry, 
-				width: 2 * shape.rx, height: 2 * shape.ry};
-		}
-		return this.bbox;	// dojo.gfx.Rectangle
+	return this;
+}});
+dojo.declare("dojo.gfx.shape.Rect", dojo.gfx.Shape, {initializer:function (rawNode) {
+	this.shape = dojo.lang.shallowCopy(dojo.gfx.defaultRect, true);
+	this.attach(rawNode);
+}, getBoundingBox:function () {
+	return this.shape;
+}});
+dojo.declare("dojo.gfx.shape.Ellipse", dojo.gfx.Shape, {initializer:function (rawNode) {
+	this.shape = dojo.lang.shallowCopy(dojo.gfx.defaultEllipse, true);
+	this.attach(rawNode);
+}, getBoundingBox:function () {
+	if (!this.bbox) {
+		var shape = this.shape;
+		this.bbox = {x:shape.cx - shape.rx, y:shape.cy - shape.ry, width:2 * shape.rx, height:2 * shape.ry};
 	}
-});
-
-dojo.declare("dojo.gfx.shape.Circle", dojo.gfx.Shape, {
-	// summary: a generic circle
-	//	(this is a helper object, which is defined for convinience)
-
-	initializer: function(rawNode) {
-		// summary: creates a circle
-		// rawNode: Node: a DOM Node
-		this.shape = dojo.lang.shallowCopy(dojo.gfx.defaultCircle, true);
-		this.attach(rawNode);
-	},
-	getBoundingBox: function(){
-		// summary: returns the bounding box
-		if(!this.bbox){
-			var shape = this.shape;
-			this.bbox = {x: shape.cx - shape.r, y: shape.cy - shape.r, 
-				width: 2 * shape.r, height: 2 * shape.r};
-		}
-		return this.bbox;	// dojo.gfx.Rectangle
+	return this.bbox;
+}});
+dojo.declare("dojo.gfx.shape.Circle", dojo.gfx.Shape, {initializer:function (rawNode) {
+	this.shape = dojo.lang.shallowCopy(dojo.gfx.defaultCircle, true);
+	this.attach(rawNode);
+}, getBoundingBox:function () {
+	if (!this.bbox) {
+		var shape = this.shape;
+		this.bbox = {x:shape.cx - shape.r, y:shape.cy - shape.r, width:2 * shape.r, height:2 * shape.r};
 	}
-});
-
-dojo.declare("dojo.gfx.shape.Line", dojo.gfx.Shape, {
-	// summary: a generic line
-	//	(this is a helper object, which is defined for convinience)
-
-	initializer: function(rawNode) {
-		// summary: creates a line
-		// rawNode: Node: a DOM Node
-		this.shape = dojo.lang.shallowCopy(dojo.gfx.defaultLine, true);
-		this.attach(rawNode);
-	},
-	getBoundingBox: function(){
-		// summary: returns the bounding box
-		if(!this.bbox){
-			var shape = this.shape;
-			this.bbox = {
-				x:		Math.min(shape.x1, shape.x2),
-				y:		Math.min(shape.y1, shape.y2),
-				width:	Math.abs(shape.x2 - shape.x1),
-				height:	Math.abs(shape.y2 - shape.y1)
-			};
-		}
-		return this.bbox;	// dojo.gfx.Rectangle
+	return this.bbox;
+}});
+dojo.declare("dojo.gfx.shape.Line", dojo.gfx.Shape, {initializer:function (rawNode) {
+	this.shape = dojo.lang.shallowCopy(dojo.gfx.defaultLine, true);
+	this.attach(rawNode);
+}, getBoundingBox:function () {
+	if (!this.bbox) {
+		var shape = this.shape;
+		this.bbox = {x:Math.min(shape.x1, shape.x2), y:Math.min(shape.y1, shape.y2), width:Math.abs(shape.x2 - shape.x1), height:Math.abs(shape.y2 - shape.y1)};
 	}
-});
-
-dojo.declare("dojo.gfx.shape.Polyline", dojo.gfx.Shape, {
-	// summary: a generic polyline/polygon
-	//	(this is a helper object, which is defined for convinience)
-
-	initializer: function(rawNode) {
-		// summary: creates a line
-		// rawNode: Node: a DOM Node
-		this.shape = dojo.lang.shallowCopy(dojo.gfx.defaultPolyline, true);
-		this.attach(rawNode);
-	},
-	getBoundingBox: function(){
-		// summary: returns the bounding box
-		if(!this.bbox && this.shape.points.length){
-			var p = this.shape.points;
-			var l = p.length;
-			var t = p[0];
-			var bbox = {l: t.x, t: t.y, r: t.x, b: t.y};
-			for(var i = 1; i < l; ++i){
-				t = p[i];
-				if(bbox.l > t.x) bbox.l = t.x;
-				if(bbox.r < t.x) bbox.r = t.x;
-				if(bbox.t > t.y) bbox.t = t.y;
-				if(bbox.b < t.y) bbox.b = t.y;
+	return this.bbox;
+}});
+dojo.declare("dojo.gfx.shape.Polyline", dojo.gfx.Shape, {initializer:function (rawNode) {
+	this.shape = dojo.lang.shallowCopy(dojo.gfx.defaultPolyline, true);
+	this.attach(rawNode);
+}, getBoundingBox:function () {
+	if (!this.bbox && this.shape.points.length) {
+		var p = this.shape.points;
+		var l = p.length;
+		var t = p[0];
+		var bbox = {l:t.x, t:t.y, r:t.x, b:t.y};
+		for (var i = 1; i < l; ++i) {
+			t = p[i];
+			if (bbox.l > t.x) {
+				bbox.l = t.x;
 			}
-			this.bbox = {
-				x:		bbox.l, 
-				y:		bbox.t, 
-				width:	bbox.r - bbox.l, 
-				height:	bbox.b - bbox.t
-			};
+			if (bbox.r < t.x) {
+				bbox.r = t.x;
+			}
+			if (bbox.t > t.y) {
+				bbox.t = t.y;
+			}
+			if (bbox.b < t.y) {
+				bbox.b = t.y;
+			}
 		}
-		return this.bbox;	// dojo.gfx.Rectangle
+		this.bbox = {x:bbox.l, y:bbox.t, width:bbox.r - bbox.l, height:bbox.b - bbox.t};
 	}
-});
-
-dojo.declare("dojo.gfx.shape.Image", dojo.gfx.Shape, {
-	// summary: a generic image
-	//	(this is a helper object, which is defined for convinience)
-
-	initializer: function(rawNode) {
-		// summary: creates an image
-		// rawNode: Node: a DOM Node
-		this.shape = dojo.lang.shallowCopy(dojo.gfx.defaultImage, true);
-		this.attach(rawNode);
-	},
-	getBoundingBox: function(){
-		// summary: returns the bounding box
-		if(!this.bbox){
-			var shape = this.shape;
-			this.bbox = {
-				x:		0,
-				y:		0,
-				width:	shape.width,
-				height:	shape.height
-			};
-		}
-		return this.bbox;	// dojo.gfx.Rectangle
+	return this.bbox;
+}});
+dojo.declare("dojo.gfx.shape.Image", dojo.gfx.Shape, {initializer:function (rawNode) {
+	this.shape = dojo.lang.shallowCopy(dojo.gfx.defaultImage, true);
+	this.attach(rawNode);
+}, getBoundingBox:function () {
+	if (!this.bbox) {
+		var shape = this.shape;
+		this.bbox = {x:0, y:0, width:shape.width, height:shape.height};
 	}
-});
+	return this.bbox;
+}});
 
+
 __CPAN_DIR__ src/gfx/color
 __CPAN_FILE__ src/gfx/color/hsl.js
 /*
@@ -94784,134 +66446,111 @@
 
 dojo.provide("dojo.gfx.color.hsl");
 dojo.require("dojo.lang.array");
-
-dojo.lang.extend(dojo.gfx.color.Color, {
-	toHsl: function() {
-		return dojo.gfx.color.rgb2hsl(this.toRgb());
-	}
-});
-
-dojo.gfx.color.rgb2hsl = function(r, g, b){
+dojo.lang.extend(dojo.gfx.color.Color, {toHsl:function () {
+	return dojo.gfx.color.rgb2hsl(this.toRgb());
+}});
+dojo.gfx.color.rgb2hsl = function (r, g, b) {
 	if (dojo.lang.isArray(r)) {
 		b = r[2] || 0;
 		g = r[1] || 0;
 		r = r[0] || 0;
 	}
-
 	r /= 255;
 	g /= 255;
 	b /= 255;
-
-	//
-	// based on C code from http://astronomy.swin.edu.au/~pbourke/colour/hsl/
-	//
-
 	var h = null;
 	var s = null;
 	var l = null;
-
 	var min = Math.min(r, g, b);
 	var max = Math.max(r, g, b);
 	var delta = max - min;
-
 	l = (min + max) / 2;
 	s = 0;
-
-	if ((l > 0) && (l < 1)){
+	if ((l > 0) && (l < 1)) {
 		s = delta / ((l < 0.5) ? (2 * l) : (2 - 2 * l));
 	}
-
 	h = 0;
-
 	if (delta > 0) {
-		if ((max == r) && (max != g)){
+		if ((max == r) && (max != g)) {
 			h += (g - b) / delta;
 		}
-		if ((max == g) && (max != b)){
+		if ((max == g) && (max != b)) {
 			h += (2 + (b - r) / delta);
 		}
-		if ((max == b) && (max != r)){
+		if ((max == b) && (max != r)) {
 			h += (4 + (r - g) / delta);
 		}
 		h *= 60;
 	}
-
 	h = (h == 0) ? 360 : Math.ceil((h / 360) * 255);
 	s = Math.ceil(s * 255);
 	l = Math.ceil(l * 255);
-
 	return [h, s, l];
-}
-
-dojo.gfx.color.hsl2rgb = function(h, s, l){
+};
+dojo.gfx.color.hsl2rgb = function (h, s, l) {
 	if (dojo.lang.isArray(h)) {
 		l = h[2] || 0;
 		s = h[1] || 0;
 		h = h[0] || 0;
 	}
-
 	h = (h / 255) * 360;
-	if (h == 360){ h = 0;}
+	if (h == 360) {
+		h = 0;
+	}
 	s = s / 255;
 	l = l / 255;
-
-	//
-	// based on C code from http://astronomy.swin.edu.au/~pbourke/colour/hsl/
-	//
-
-
-	while (h < 0){ h += 360; }
-	while (h > 360){ h -= 360; }
+	while (h < 0) {
+		h += 360;
+	}
+	while (h > 360) {
+		h -= 360;
+	}
 	var r, g, b;
-	if (h < 120){
+	if (h < 120) {
 		r = (120 - h) / 60;
 		g = h / 60;
 		b = 0;
-	}else if (h < 240){
-		r = 0;
-		g = (240 - h) / 60;
-		b = (h - 120) / 60;
-	}else{
-		r = (h - 240) / 60;
-		g = 0;
-		b = (360 - h) / 60;
+	} else {
+		if (h < 240) {
+			r = 0;
+			g = (240 - h) / 60;
+			b = (h - 120) / 60;
+		} else {
+			r = (h - 240) / 60;
+			g = 0;
+			b = (360 - h) / 60;
+		}
 	}
-
 	r = Math.min(r, 1);
 	g = Math.min(g, 1);
 	b = Math.min(b, 1);
-
 	r = 2 * s * r + (1 - s);
 	g = 2 * s * g + (1 - s);
 	b = 2 * s * b + (1 - s);
-
-	if (l < 0.5){
+	if (l < 0.5) {
 		r = l * r;
 		g = l * g;
 		b = l * b;
-	}else{
+	} else {
 		r = (1 - l) * r + 2 * l - 1;
 		g = (1 - l) * g + 2 * l - 1;
 		b = (1 - l) * b + 2 * l - 1;
 	}
-
 	r = Math.ceil(r * 255);
 	g = Math.ceil(g * 255);
 	b = Math.ceil(b * 255);
-
 	return [r, g, b];
-}
-
-dojo.gfx.color.hsl2hex = function(h, s, l){
+};
+dojo.gfx.color.hsl2hex = function (h, s, l) {
 	var rgb = dojo.gfx.color.hsl2rgb(h, s, l);
 	return dojo.gfx.color.rgb2hex(rgb[0], rgb[1], rgb[2]);
-}
-
-dojo.gfx.color.hex2hsl = function(hex){
+};
+dojo.gfx.color.hex2hsl = function (hex) {
 	var rgb = dojo.gfx.color.hex2rgb(hex);
 	return dojo.gfx.color.rgb2hsl(rgb[0], rgb[1], rgb[2]);
-}
+};
 
+
 __CPAN_FILE__ src/gfx/color/hsv.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -94926,240 +66565,202 @@
 dojo.provide("dojo.gfx.color.hsv");
 dojo.require("dojo.lang.array");
 dojo.require("dojo.math");
-
-dojo.lang.extend(dojo.gfx.color.Color, {
-	toHsv: function() {
-		return dojo.gfx.color.rgb2hsv(this.toRgb());
-	}
-
-});
-
-// Default input range for RBG values is 0-255
-dojo.gfx.color.rgb2hsv = function(/* int || Array */r, /* int */g, /* int */b, /* Object? */options){
-	//	summary
-	//	converts an RGB value set to HSV, ranges depending on optional options object.
-	//	patch for options by Matthew Eernisse 	
+dojo.lang.extend(dojo.gfx.color.Color, {toHsv:function () {
+	return dojo.gfx.color.rgb2hsv(this.toRgb());
+}});
+dojo.gfx.color.rgb2hsv = function (r, g, b, options) {
 	if (dojo.lang.isArray(r)) {
-		if(g) {
+		if (g) {
 			options = g;
 		}
 		b = r[2] || 0;
 		g = r[1] || 0;
 		r = r[0] || 0;
 	}
-
-	var opt = {
-		inputRange:  (options && options.inputRange)  ? options.inputRange : 255,
-		outputRange: (options && options.outputRange) ? options.outputRange : [255, 255, 255]
-	};
-
-	// r,g,b, each 0 to 255, to HSV.
-	// h = 0.0 to 360.0 (corresponding to 0..360.0 degrees around hexcone)
-	// s = 0.0 (shade of gray) to 1.0 (pure color)
-	// v = 0.0 (black) to 1.0 {white)
-	//
-	// Based on C Code in "Computer Graphics -- Principles and Practice,"
-	// Foley et al, 1996, p. 592. 
-	//
-	// our calculatuions are based on 'regular' values (0-360, 0-1, 0-1) 
-	// but we return bytes values (0-255, 0-255, 0-255)
-
+	var opt = {inputRange:(options && options.inputRange) ? options.inputRange : 255, outputRange:(options && options.outputRange) ? options.outputRange : [255, 255, 255]};
 	var h = null;
 	var s = null;
 	var v = null;
-
-	switch(opt.inputRange) { 
-		// 0.0-1.0 
-		case 1:
-			r = (r * 255);
-			g = (g * 255);
-			b = (b * 255);
-			break;
-		// 0-100 
-		case 100:
-			r = (r / 100) * 255;
-			g = (g / 100) * 255;
-			b = (b / 100) * 255;
-			break;
-		// 0-255
-		default:
-			// Do nothing
-			break;
-	} 
-	
+	switch (opt.inputRange) {
+	  case 1:
+		r = (r * 255);
+		g = (g * 255);
+		b = (b * 255);
+		break;
+	  case 100:
+		r = (r / 100) * 255;
+		g = (g / 100) * 255;
+		b = (b / 100) * 255;
+		break;
+	  default:
+		break;
+	}
 	var min = Math.min(r, g, b);
 	v = Math.max(r, g, b);
-
 	var delta = v - min;
-
-	// calculate saturation (0 if r, g and b are all 0)
-
-	s = (v == 0) ? 0 : delta/v;
-	if (s == 0){
-		// achromatic: when saturation is, hue is undefined
+	s = (v == 0) ? 0 : delta / v;
+	if (s == 0) {
 		h = 0;
-	}else{
-		// chromatic
-		if (r == v){
-			// between yellow and magenta
+	} else {
+		if (r == v) {
 			h = 60 * (g - b) / delta;
-		}else{
-			if (g == v){
-				// between cyan and yellow
+		} else {
+			if (g == v) {
 				h = 120 + 60 * (b - r) / delta;
-			}else{
-				if (b == v){
-					// between magenta and cyan
+			} else {
+				if (b == v) {
 					h = 240 + 60 * (r - g) / delta;
 				}
 			}
 		}
-		if (h <= 0){
+		if (h <= 0) {
 			h += 360;
 		}
 	}
-	// Hue
 	switch (opt.outputRange[0]) {
-		case 360:
-			// Do nothing
-			break;
-		case 100:
-			h = (h / 360) * 100;
-			break;
-		case 1:
-			h = (h / 360);
-			break;
-		default: // 255
-			h = (h / 360) * 255;
-			break;
+	  case 360:
+		break;
+	  case 100:
+		h = (h / 360) * 100;
+		break;
+	  case 1:
+		h = (h / 360);
+		break;
+	  default:
+		h = (h / 360) * 255;
+		break;
 	}
-	// Saturation
 	switch (opt.outputRange[1]) {
-		case 100:
-			s = s * 100;
-		case 1:
-			// Do nothing
-			break;
-		default: // 255
-			s = s * 255;
-			break;
+	  case 100:
+		s = s * 100;
+	  case 1:
+		break;
+	  default:
+		s = s * 255;
+		break;
 	}
-	// Value
 	switch (opt.outputRange[2]) {
-		case 100:
-			v = (v / 255) * 100;
-			break;
-		case 1:
-			v = (v / 255);
-			break;
-		default: // 255
-			// Do nothing
-			break;
+	  case 100:
+		v = (v / 255) * 100;
+		break;
+	  case 1:
+		v = (v / 255);
+		break;
+	  default:
+		break;
 	}
 	h = dojo.math.round(h);
 	s = dojo.math.round(s);
 	v = dojo.math.round(v);
 	return [h, s, v];
-}
-
-// Based on C Code in "Computer Graphics -- Principles and Practice,"
-// Foley et al, 1996, p. 593.
-//
-// H = 0 to 255 (corresponding to 0..360 degrees around hexcone) 0 for S = 0
-// S = 0 (shade of gray) to 255 (pure color)
-// V = 0 (black) to 255 (white)
-dojo.gfx.color.hsv2rgb = function(/* int || Array */h, /* int */s, /* int */v, /* Object? */options){
-	//	summary
-	//	converts an HSV value set to RGB, ranges depending on optional options object.
-	//	patch for options by Matthew Eernisse 	
+};
+dojo.gfx.color.hsv2rgb = function (h, s, v, options) {
 	if (dojo.lang.isArray(h)) {
-		if(s){
+		if (s) {
 			options = s;
 		}
 		v = h[2] || 0;
 		s = h[1] || 0;
 		h = h[0] || 0;
 	}
-
-	var opt = {
-		inputRange:  (options && options.inputRange)  ? options.inputRange : [255, 255, 255],
-		outputRange: (options && options.outputRange) ? options.outputRange : 255
-	};
-
-    switch(opt.inputRange[0]) { 
-		// 0.0-1.0 
-		case 1: h = h * 360; break; 
-		// 0-100 
-		case 100: h = (h / 100) * 360; break; 
-		// 0-360 
-		case 360: h = h; break; 
-		// 0-255 
-		default: h = (h / 255) * 360; 
-	} 
-	if (h == 360){ h = 0;}
-
-	//	no need to alter if inputRange[1] = 1
-	switch(opt.inputRange[1]){
-		case 100: s /= 100; break;
-		case 255: s /= 255;
+	var opt = {inputRange:(options && options.inputRange) ? options.inputRange : [255, 255, 255], outputRange:(options && options.outputRange) ? options.outputRange : 255};
+	switch (opt.inputRange[0]) {
+	  case 1:
+		h = h * 360;
+		break;
+	  case 100:
+		h = (h / 100) * 360;
+		break;
+	  case 360:
+		h = h;
+		break;
+	  default:
+		h = (h / 255) * 360;
 	}
-
-	//	no need to alter if inputRange[1] = 1
-	switch(opt.inputRange[2]){
-		case 100: v /= 100; break;
-		case 255: v /= 255;
+	if (h == 360) {
+		h = 0;
 	}
-
+	switch (opt.inputRange[1]) {
+	  case 100:
+		s /= 100;
+		break;
+	  case 255:
+		s /= 255;
+	}
+	switch (opt.inputRange[2]) {
+	  case 100:
+		v /= 100;
+		break;
+	  case 255:
+		v /= 255;
+	}
 	var r = null;
 	var g = null;
 	var b = null;
-
-	if (s == 0){
-		// color is on black-and-white center line
-		// achromatic: shades of gray
+	if (s == 0) {
 		r = v;
 		g = v;
 		b = v;
-	}else{
-		// chromatic color
-		var hTemp = h / 60;		// h is now IN [0,6]
-		var i = Math.floor(hTemp);	// largest integer <= h
-		var f = hTemp - i;		// fractional part of h
-
+	} else {
+		var hTemp = h / 60;
+		var i = Math.floor(hTemp);
+		var f = hTemp - i;
 		var p = v * (1 - s);
 		var q = v * (1 - (s * f));
 		var t = v * (1 - (s * (1 - f)));
-
-		switch(i){
-			case 0: r = v; g = t; b = p; break;
-			case 1: r = q; g = v; b = p; break;
-			case 2: r = p; g = v; b = t; break;
-			case 3: r = p; g = q; b = v; break;
-			case 4: r = t; g = p; b = v; break;
-			case 5: r = v; g = p; b = q; break;
-		}
-	}
-
-	switch(opt.outputRange){
-		case 1:
-			r = dojo.math.round(r, 2);
-			g = dojo.math.round(g, 2);
-			b = dojo.math.round(b, 2);
+		switch (i) {
+		  case 0:
+			r = v;
+			g = t;
+			b = p;
 			break;
-		case 100:
-			r = Math.round(r * 100);
-			g = Math.round(g * 100);
-			b = Math.round(b * 100);
+		  case 1:
+			r = q;
+			g = v;
+			b = p;
 			break;
-		default:
-			r = Math.round(r * 255);
-			g = Math.round(g * 255);
-			b = Math.round(b * 255);
+		  case 2:
+			r = p;
+			g = v;
+			b = t;
+			break;
+		  case 3:
+			r = p;
+			g = q;
+			b = v;
+			break;
+		  case 4:
+			r = t;
+			g = p;
+			b = v;
+			break;
+		  case 5:
+			r = v;
+			g = p;
+			b = q;
+			break;
+		}
 	}
-
+	switch (opt.outputRange) {
+	  case 1:
+		r = dojo.math.round(r, 2);
+		g = dojo.math.round(g, 2);
+		b = dojo.math.round(b, 2);
+		break;
+	  case 100:
+		r = Math.round(r * 100);
+		g = Math.round(g * 100);
+		b = Math.round(b * 100);
+		break;
+	  default:
+		r = Math.round(r * 255);
+		g = Math.round(g * 255);
+		b = Math.round(b * 255);
+	}
 	return [r, g, b];
-}
+};
 
+
 __CPAN_DIR__ src/text
 __CPAN_FILE__ src/text/textDirectory.js
 /*
@@ -95175,6 +66776,7 @@
 dojo.require("dojo.cal.textDirectory");
 dojo.deprecate("dojo.text.textDirectory", "use dojo.cal.textDirectory", "0.5");
 
+
 __CPAN_FILE__ src/text/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -95186,15 +66788,10 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: [
-		"dojo.text.String",
-		"dojo.text.Builder"
-	]
-});
-
+dojo.kwCompoundRequire({common:["dojo.text.String", "dojo.text.Builder"]});
 dojo.deprecated("dojo.text", "textDirectory moved to cal, text.String and text.Builder havne't been here for awhile", "0.5");
 
+
 __CPAN_DIR__ src/logging
 __CPAN_FILE__ src/logging/Logger.js
 /*
@@ -95213,465 +66810,205 @@
 dojo.provide("dojo.log");
 dojo.require("dojo.lang.common");
 dojo.require("dojo.lang.declare");
-
-/*		This is the dojo logging facility, which is imported from nWidgets
-		(written by Alex Russell, CLA on file), which is patterned on the
-		Python logging module, which in turn has been heavily influenced by
-		log4j (execpt with some more pythonic choices, which we adopt as well).
-
-		While the dojo logging facilities do provide a set of familiar
-		interfaces, many of the details are changed to reflect the constraints
-		of the browser environment. Mainly, file and syslog-style logging
-		facilites are not provided, with HTTP POST and GET requests being the
-		only ways of getting data from the browser back to a server. Minimal
-		support for this (and XML serialization of logs) is provided, but may
-		not be of practical use in a deployment environment.
-
-		The Dojo logging classes are agnostic of any environment, and while
-		default loggers are provided for browser-based interpreter
-		environments, this file and the classes it define are explicitly
-		designed to be portable to command-line interpreters and other
-		ECMA-262v3 envrionments.
-
-	the logger needs to accomidate:
-		log "levels"
-		type identifiers
-		file?
-		message
-		tic/toc?
-
-	The logger should ALWAYS record:
-		time/date logged
-		message
-		type
-		level
-*/
-// TODO: define DTD for XML-formatted log messages
-// TODO: write XML Formatter class
-// TODO: write HTTP Handler which uses POST to send log lines/sections
-
-
-dojo.logging.Record = function(/*Integer*/logLevel, /*String||Array*/message){
-	// summary:
-	//		A simple data structure class that stores information for and about
-	//		a logged event. Objects of this type are created automatically when
-	//		an event is logged and are the internal format in which information
-	//		about log events is kept.
-	// logLevel:
-	//		Integer mapped via the dojo.logging.log.levels object from a
-	//		string. This mapping also corresponds to an instance of
-	//		dojo.logging.Logger
-	// message:
-	//		The contents of the message represented by this log record.
+dojo.logging.Record = function (logLevel, message) {
 	this.level = logLevel;
 	this.message = "";
 	this.msgArgs = [];
 	this.time = new Date();
-	
-	if(dojo.lang.isArray(message)){
-		if(message.length > 0 && dojo.lang.isString(message[0])){
-			this.message=message.shift();
+	if (dojo.lang.isArray(message)) {
+		if (message.length > 0 && dojo.lang.isString(message[0])) {
+			this.message = message.shift();
 		}
 		this.msgArgs = message;
-	}else{
+	} else {
 		this.message = message;
 	}
-	// FIXME: what other information can we receive/discover here?
-}
-
-dojo.logging.LogFilter = function(loggerChain){
-	// summary:
-	//		An empty parent (abstract) class which concrete filters should
-	//		inherit from. Filters should have only a single method, filter(),
-	//		which processes a record and returns true or false to denote
-	//		whether or not it should be handled by the next step in a filter
-	//		chain.
+};
+dojo.logging.LogFilter = function (loggerChain) {
 	this.passChain = loggerChain || "";
-	this.filter = function(record){
-		// FIXME: need to figure out a way to enforce the loggerChain
-		// restriction
-		return true; // pass all records
-	}
-}
-
-dojo.logging.Logger = function(){
+	this.filter = function (record) {
+		return true;
+	};
+};
+dojo.logging.Logger = function () {
 	this.cutOffLevel = 0;
 	this.propagate = true;
 	this.parent = null;
-	// storage for dojo.logging.Record objects seen and accepted by this logger
 	this.data = [];
 	this.filters = [];
 	this.handlers = [];
-}
-
-dojo.extend(dojo.logging.Logger,{
-	_argsToArr: function(args){
-		var ret = [];
-		for(var x=0; x<args.length; x++){
-			ret.push(args[x]);
+};
+dojo.extend(dojo.logging.Logger, {_argsToArr:function (args) {
+	var ret = [];
+	for (var x = 0; x < args.length; x++) {
+		ret.push(args[x]);
+	}
+	return ret;
+}, setLevel:function (lvl) {
+	this.cutOffLevel = parseInt(lvl);
+}, isEnabledFor:function (lvl) {
+	return parseInt(lvl) >= this.cutOffLevel;
+}, getEffectiveLevel:function () {
+	if ((this.cutOffLevel == 0) && (this.parent)) {
+		return this.parent.getEffectiveLevel();
+	}
+	return this.cutOffLevel;
+}, addFilter:function (flt) {
+	this.filters.push(flt);
+	return this.filters.length - 1;
+}, removeFilterByIndex:function (fltIndex) {
+	if (this.filters[fltIndex]) {
+		delete this.filters[fltIndex];
+		return true;
+	}
+	return false;
+}, removeFilter:function (fltRef) {
+	for (var x = 0; x < this.filters.length; x++) {
+		if (this.filters[x] === fltRef) {
+			delete this.filters[x];
+			return true;
 		}
-		return ret;
-	},
-
-	setLevel: function(/*Integer*/lvl){
-		// summary: 
-		//		set the logging level for this logger.
-		// lvl:
-		//		the logging level to set the cutoff for, as derived from the
-		//		dojo.logging.log.levels object. Any messages below the
-		//		specified level are dropped on the floor
-		this.cutOffLevel = parseInt(lvl);
-	},
-
-	isEnabledFor: function(/*Integer*/lvl){
-		// summary:
-		//		will a message at the specified level be emitted?
-		return parseInt(lvl) >= this.cutOffLevel; // boolean
-	},
-
-	getEffectiveLevel: function(){
-		// summary:
-		//		gets the effective cutoff level, including that of any
-		//		potential parent loggers in the chain.
-		if((this.cutOffLevel==0)&&(this.parent)){
-			return this.parent.getEffectiveLevel(); // Integer
+	}
+	return false;
+}, removeAllFilters:function () {
+	this.filters = [];
+}, filter:function (rec) {
+	for (var x = 0; x < this.filters.length; x++) {
+		if ((this.filters[x]["filter"]) && (!this.filters[x].filter(rec)) || (rec.level < this.cutOffLevel)) {
+			return false;
 		}
-		return this.cutOffLevel; // Integer
-	},
-
-	addFilter: function(/*dojo.logging.LogFilter*/flt){
-		// summary:
-		//		registers a new LogFilter object. All records will be passed
-		//		through this filter from now on.
-		this.filters.push(flt);
-		return this.filters.length-1; // Integer
-	},
-
-	removeFilterByIndex: function(/*Integer*/fltIndex){
-		// summary:
-		//		removes the filter at the specified index from the filter
-		//		chain. Returns whether or not removal was successful.
-		if(this.filters[fltIndex]){
-			delete this.filters[fltIndex];
-			return true; // boolean
+	}
+	return true;
+}, addHandler:function (hdlr) {
+	this.handlers.push(hdlr);
+	return this.handlers.length - 1;
+}, handle:function (rec) {
+	if ((!this.filter(rec)) || (rec.level < this.cutOffLevel)) {
+		return false;
+	}
+	for (var x = 0; x < this.handlers.length; x++) {
+		if (this.handlers[x]["handle"]) {
+			this.handlers[x].handle(rec);
 		}
-		return false; // boolean
-	},
-
-	removeFilter: function(/*dojo.logging.LogFilter*/fltRef){
-		// summary:
-		//		removes the passed LogFilter. Returns whether or not removal
-		//		was successful.
-		for(var x=0; x<this.filters.length; x++){
-			if(this.filters[x]===fltRef){
-				delete this.filters[x];
-				return true;
-			}
-		}
+	}
+	return true;
+}, log:function (lvl, msg) {
+	if ((this.propagate) && (this.parent) && (this.parent.rec.level >= this.cutOffLevel)) {
+		this.parent.log(lvl, msg);
 		return false;
-	},
-
-	removeAllFilters: function(){
-		// summary: clobbers all the registered filters.
-		this.filters = []; // clobber all of them
-	},
-
-	filter: function(/*dojo.logging.Record*/rec){
-		// summary:
-		//		runs the passed Record through the chain of registered filters.
-		//		Returns a boolean indicating whether or not the Record should
-		//		be emitted.
-		for(var x=0; x<this.filters.length; x++){
-			if((this.filters[x]["filter"])&&
-			   (!this.filters[x].filter(rec))||
-			   (rec.level<this.cutOffLevel)){
-				return false; // boolean
-			}
+	}
+	this.handle(new dojo.logging.Record(lvl, msg));
+	return true;
+}, debug:function (msg) {
+	return this.logType("DEBUG", this._argsToArr(arguments));
+}, info:function (msg) {
+	return this.logType("INFO", this._argsToArr(arguments));
+}, warning:function (msg) {
+	return this.logType("WARNING", this._argsToArr(arguments));
+}, error:function (msg) {
+	return this.logType("ERROR", this._argsToArr(arguments));
+}, critical:function (msg) {
+	return this.logType("CRITICAL", this._argsToArr(arguments));
+}, exception:function (msg, e, squelch) {
+	if (e) {
+		var eparts = [e.name, (e.description || e.message)];
+		if (e.fileName) {
+			eparts.push(e.fileName);
+			eparts.push("line " + e.lineNumber);
 		}
-		return true; // boolean
-	},
-
-	addHandler: function(/*dojo.logging.LogHandler*/hdlr){
-		// summary: adds as LogHandler to the chain
-		this.handlers.push(hdlr);
-		return this.handlers.length-1;
-	},
-
-	handle: function(/*dojo.logging.Record*/rec){
-		// summary:
-		//		if the Record survives filtering, pass it down to the
-		//		registered handlers. Returns a boolean indicating whether or
-		//		not the record was successfully handled. If the message is
-		//		culled for some reason, returns false.
-		if((!this.filter(rec))||(rec.level<this.cutOffLevel)){ return false; } // boolean
-		for(var x=0; x<this.handlers.length; x++){
-			if(this.handlers[x]["handle"]){
-			   this.handlers[x].handle(rec);
-			}
-		}
-		// FIXME: not sure what to do about records to be propagated that may have
-		// been modified by the handlers or the filters at this logger. Should
-		// parents always have pristine copies? or is passing the modified record
-		// OK?
-		// if((this.propagate)&&(this.parent)){ this.parent.handle(rec); }
-		return true; // boolean
-	},
-
-	// the heart and soul of the logging system
-	log: function(/*integer*/lvl, /*string*/msg){
-		// summary:
-		//		log a message at the specified log level
-		if(	(this.propagate)&&(this.parent)&&
-			(this.parent.rec.level>=this.cutOffLevel)){
-			this.parent.log(lvl, msg);
-			return false;
-		}
-		// FIXME: need to call logging providers here!
-		this.handle(new dojo.logging.Record(lvl, msg));
-		return true;
-	},
-
-	// logger helpers
-	debug:function(/*string*/msg){
-		// summary:
-		//		log the msg and any other arguments at the "debug" logging
-		//		level.
-		return this.logType("DEBUG", this._argsToArr(arguments));
-	},
-
-	info: function(msg){
-		// summary:
-		//		log the msg and any other arguments at the "info" logging
-		//		level.
-		return this.logType("INFO", this._argsToArr(arguments));
-	},
-
-	warning: function(msg){
-		// summary:
-		//		log the msg and any other arguments at the "warning" logging
-		//		level.
-		return this.logType("WARNING", this._argsToArr(arguments));
-	},
-
-	error: function(msg){
-		// summary:
-		//		log the msg and any other arguments at the "error" logging
-		//		level.
-		return this.logType("ERROR", this._argsToArr(arguments));
-	},
-
-	critical: function(msg){
-		// summary:
-		//		log the msg and any other arguments at the "critical" logging
-		//		level.
-		return this.logType("CRITICAL", this._argsToArr(arguments));
-	},
-
-	exception: function(/*string*/msg, /*Error*/e, /*boolean*/squelch){
-		// summary:
-		//		logs the error and the message at the "exception" logging
-		//		level. If squelch is true, also prevent bubbling of the
-		//		exception.
-
-		// FIXME: this needs to be modified to put the exception in the msg
-		// if we're on Moz, we can get the following from the exception object:
-		//		lineNumber
-		//		message
-		//		fileName
-		//		stack
-		//		name
-		// on IE, we get:
-		//		name
-		//		message (from MDA?)
-		//		number
-		//		description (same as message!)
-		if(e){
-			var eparts = [e.name, (e.description||e.message)];
-			if(e.fileName){
-				eparts.push(e.fileName);
-				eparts.push("line "+e.lineNumber);
-				// eparts.push(e.stack);
-			}
-			msg += " "+eparts.join(" : ");
-		}
-
-		this.logType("ERROR", msg);
-		if(!squelch){
-			throw e;
-		}
-	},
-
-	logType: function(/*string*/type, /*array*/args){
-		// summary:
-		//		a more "user friendly" version of the log() function. Takes the
-		//		named log level instead of the corresponding integer.
-		return this.log.apply(this, [dojo.logging.log.getLevel(type), 
-			args]);
-	},
-	
-	warn:function(){
-		// summary: shorthand for warning()
-		this.warning.apply(this,arguments);
-	},
-	err:function(){
-		// summary: shorthand for error()
-		this.error.apply(this,arguments);
-	},
-	crit:function(){
-		// summary: shorthand for critical()
-		this.critical.apply(this,arguments);
+		msg += " " + eparts.join(" : ");
 	}
-});
-
-// the Handler class
-dojo.logging.LogHandler = function(level){
+	this.logType("ERROR", msg);
+	if (!squelch) {
+		throw e;
+	}
+}, logType:function (type, args) {
+	return this.log.apply(this, [dojo.logging.log.getLevel(type), args]);
+}, warn:function () {
+	this.warning.apply(this, arguments);
+}, err:function () {
+	this.error.apply(this, arguments);
+}, crit:function () {
+	this.critical.apply(this, arguments);
+}});
+dojo.logging.LogHandler = function (level) {
 	this.cutOffLevel = (level) ? level : 0;
-	this.formatter = null; // FIXME: default formatter?
+	this.formatter = null;
 	this.data = [];
 	this.filters = [];
-}
-dojo.lang.extend(dojo.logging.LogHandler,{
-	
-	setFormatter:function(formatter){
-		dojo.unimplemented("setFormatter");
-	},
-	
-	flush:function(){
-		// summary:
-		//		Unimplemented. Should be implemented by subclasses to handle
-		//		finishing a transaction or otherwise comitting pending log
-		//		messages to whatevery underlying transport or storage system is
-		//		available.
-	},
-	close:function(){
-		// summary:
-		//		Unimplemented. Should be implemented by subclasses to handle
-		//		shutting down the logger, including a call to flush()
-	},
-	handleError:function(){
-		// summary:
-		//		Unimplemented. Should be implemented by subclasses.
-		dojo.deprecated("dojo.logging.LogHandler.handleError", "use handle()", "0.6");
-	},
-	
-	handle:function(/*dojo.logging.Record*/record){
-		// summary:
-		//		Emits the record object passed in should the record meet the
-		//		current logging level cuttof, as specified in cutOffLevel.
-		if((this.filter(record))&&(record.level>=this.cutOffLevel)){
-			this.emit(record);
-		}
-	},
-	
-	emit:function(/*dojo.logging.Record*/record){
-		// summary:
-		//		Unimplemented. Should be implemented by subclasses to handle
-		//		an individual record. Subclasses may batch records and send
-		//		them to their "substrate" only when flush() is called, but this
-		//		is generally not a good idea as losing logging messages may
-		//		make debugging significantly more difficult. Tuning the volume
-		//		of logging messages written to storage should be accomplished
-		//		with log levels instead.
-		dojo.unimplemented("emit");
+};
+dojo.lang.extend(dojo.logging.LogHandler, {setFormatter:function (formatter) {
+	dojo.unimplemented("setFormatter");
+}, flush:function () {
+}, close:function () {
+}, handleError:function () {
+	dojo.deprecated("dojo.logging.LogHandler.handleError", "use handle()", "0.6");
+}, handle:function (record) {
+	if ((this.filter(record)) && (record.level >= this.cutOffLevel)) {
+		this.emit(record);
 	}
-});
-
-// set aliases since we don't want to inherit from dojo.logging.Logger
-void(function(){ // begin globals protection closure
-	var names = [
-		"setLevel", "addFilter", "removeFilterByIndex", "removeFilter",
-		"removeAllFilters", "filter"
-	];
+}, emit:function (record) {
+	dojo.unimplemented("emit");
+}});
+void (function () {
+	var names = ["setLevel", "addFilter", "removeFilterByIndex", "removeFilter", "removeAllFilters", "filter"];
 	var tgt = dojo.logging.LogHandler.prototype;
 	var src = dojo.logging.Logger.prototype;
-	for(var x=0; x<names.length; x++){
+	for (var x = 0; x < names.length; x++) {
 		tgt[names[x]] = src[names[x]];
 	}
-})(); // end globals protection closure
-
+})();
 dojo.logging.log = new dojo.logging.Logger();
-
-// an associative array of logger objects. This object inherits from
-// a list of level names with their associated numeric levels
-dojo.logging.log.levels = [ {"name": "DEBUG", "level": 1},
-						   {"name": "INFO", "level": 2},
-						   {"name": "WARNING", "level": 3},
-						   {"name": "ERROR", "level": 4},
-						   {"name": "CRITICAL", "level": 5} ];
-
+dojo.logging.log.levels = [{"name":"DEBUG", "level":1}, {"name":"INFO", "level":2}, {"name":"WARNING", "level":3}, {"name":"ERROR", "level":4}, {"name":"CRITICAL", "level":5}];
 dojo.logging.log.loggers = {};
-
-dojo.logging.log.getLogger = function(/*string*/name){
-	// summary:
-	//		returns a named dojo.logging.Logger instance. If one is not already
-	//		available with that name in the global map, one is created and
-	//		returne.
-	if(!this.loggers[name]){
+dojo.logging.log.getLogger = function (name) {
+	if (!this.loggers[name]) {
 		this.loggers[name] = new dojo.logging.Logger();
 		this.loggers[name].parent = this;
 	}
-	return this.loggers[name]; // dojo.logging.Logger
-}
-
-dojo.logging.log.getLevelName = function(/*integer*/lvl){
-	// summary: turns integer logging level into a human-friendly name
-	for(var x=0; x<this.levels.length; x++){
-		if(this.levels[x].level == lvl){
-			return this.levels[x].name; // string
+	return this.loggers[name];
+};
+dojo.logging.log.getLevelName = function (lvl) {
+	for (var x = 0; x < this.levels.length; x++) {
+		if (this.levels[x].level == lvl) {
+			return this.levels[x].name;
 		}
 	}
 	return null;
-}
-
-dojo.logging.log.getLevel = function(/*string*/name){
-	// summary: name->integer conversion for log levels
-	for(var x=0; x<this.levels.length; x++){
-		if(this.levels[x].name.toUpperCase() == name.toUpperCase()){
-			return this.levels[x].level; // integer
+};
+dojo.logging.log.getLevel = function (name) {
+	for (var x = 0; x < this.levels.length; x++) {
+		if (this.levels[x].name.toUpperCase() == name.toUpperCase()) {
+			return this.levels[x].level;
 		}
 	}
 	return null;
-}
-
-// a default handler class, it simply saves all of the handle()'d records in
-// memory. Useful for attaching to with dojo.event.connect()
-
-dojo.declare("dojo.logging.MemoryLogHandler", 
-	dojo.logging.LogHandler,
-	{
-		initializer: function(level, recordsToKeep, postType, postInterval){
-			// mixin style inheritance
-			dojo.logging.LogHandler.call(this, level);
-			// default is unlimited
-			this.numRecords = (typeof djConfig['loggingNumRecords'] != 'undefined') ? djConfig['loggingNumRecords'] : ((recordsToKeep) ? recordsToKeep : -1);
-			// 0=count, 1=time, -1=don't post TODO: move this to a better location for prefs
-			this.postType = (typeof djConfig['loggingPostType'] != 'undefined') ? djConfig['loggingPostType'] : ( postType || -1);
-			// milliseconds for time, interger for number of records, -1 for non-posting,
-			this.postInterval = (typeof djConfig['loggingPostInterval'] != 'undefined') ? djConfig['loggingPostInterval'] : ( postType || -1);
-		},
-		emit: function(record){
-			if(!djConfig.isDebug){ return; }
-			var logStr = String(dojo.log.getLevelName(record.level)+": "
-						+record.time.toLocaleTimeString())+": "+record.message;
-			if(!dj_undef("println", dojo.hostenv)){
-				dojo.hostenv.println(logStr, record.msgArgs);
-			}
-			
-			this.data.push(record);
-			if(this.numRecords != -1){
-				while(this.data.length>this.numRecords){
-					this.data.shift();
-				}
-			}
+};
+dojo.declare("dojo.logging.MemoryLogHandler", dojo.logging.LogHandler, {initializer:function (level, recordsToKeep, postType, postInterval) {
+	dojo.logging.LogHandler.call(this, level);
+	this.numRecords = (typeof djConfig["loggingNumRecords"] != "undefined") ? djConfig["loggingNumRecords"] : ((recordsToKeep) ? recordsToKeep : -1);
+	this.postType = (typeof djConfig["loggingPostType"] != "undefined") ? djConfig["loggingPostType"] : (postType || -1);
+	this.postInterval = (typeof djConfig["loggingPostInterval"] != "undefined") ? djConfig["loggingPostInterval"] : (postType || -1);
+}, emit:function (record) {
+	if (!djConfig.isDebug) {
+		return;
+	}
+	var logStr = String(dojo.log.getLevelName(record.level) + ": " + record.time.toLocaleTimeString()) + ": " + record.message;
+	if (!dj_undef("println", dojo.hostenv)) {
+		dojo.hostenv.println(logStr, record.msgArgs);
+	}
+	this.data.push(record);
+	if (this.numRecords != -1) {
+		while (this.data.length > this.numRecords) {
+			this.data.shift();
 		}
 	}
-);
-
-dojo.logging.logQueueHandler = new dojo.logging.MemoryLogHandler(0,50,0,10000);
-
+}});
+dojo.logging.logQueueHandler = new dojo.logging.MemoryLogHandler(0, 50, 0, 10000);
 dojo.logging.log.addHandler(dojo.logging.logQueueHandler);
 dojo.log = dojo.logging.log;
 
+
 __CPAN_FILE__ src/logging/ConsoleLogger.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -95685,103 +67022,79 @@
 
 dojo.provide("dojo.logging.ConsoleLogger");
 dojo.require("dojo.logging.Logger");
-
-dojo.lang.extend(dojo.logging.MemoryLogHandler,{
-	
-	debug:function(){
-		dojo.hostenv.println.apply(this,arguments);
-	},
-	info:function(){
-		dojo.hostenv.println.apply(this,arguments);
-	},
-	warn:function(){
-		dojo.hostenv.println.apply(this,arguments);
-	},
-	error:function(){
-		dojo.hostenv.println.apply(this,arguments);
-	},
-	critical:function(){
-		dojo.hostenv.println.apply(this,arguments);
-	},
-	
-	emit:function(record){
-		if (!djConfig.isDebug) { return; }
-		
-		var funcName=null;
-		switch(record.level){
-			case 1:
-				funcName="debug";
-				break;
-			case 2:
-				funcName="info";
-				break;
-			case 3:
-				funcName="warn";
-				break;
-			case 4:
-				funcName="error";
-				break;
-			case 5:
-				funcName="critical";
-				break;
-			default:
-				funcName="debug";
+dojo.lang.extend(dojo.logging.MemoryLogHandler, {debug:function () {
+	dojo.hostenv.println.apply(this, arguments);
+}, info:function () {
+	dojo.hostenv.println.apply(this, arguments);
+}, warn:function () {
+	dojo.hostenv.println.apply(this, arguments);
+}, error:function () {
+	dojo.hostenv.println.apply(this, arguments);
+}, critical:function () {
+	dojo.hostenv.println.apply(this, arguments);
+}, emit:function (record) {
+	if (!djConfig.isDebug) {
+		return;
+	}
+	var funcName = null;
+	switch (record.level) {
+	  case 1:
+		funcName = "debug";
+		break;
+	  case 2:
+		funcName = "info";
+		break;
+	  case 3:
+		funcName = "warn";
+		break;
+	  case 4:
+		funcName = "error";
+		break;
+	  case 5:
+		funcName = "critical";
+		break;
+	  default:
+		funcName = "debug";
+	}
+	var logStr = String(dojo.log.getLevelName(record.level) + ": " + record.time.toLocaleTimeString()) + ": " + record.message;
+	if (record.msgArgs && record.msgArgs.length > 0) {
+		this[funcName].call(this, logStr, record.msgArgs);
+	} else {
+		this[funcName].call(this, logStr);
+	}
+	this.data.push(record);
+	if (this.numRecords != -1) {
+		while (this.data.length > this.numRecords) {
+			this.data.shift();
 		}
-		
-		var logStr = String(dojo.log.getLevelName(record.level)+": "
-					+record.time.toLocaleTimeString())+": "+record.message;
-		if(record.msgArgs && record.msgArgs.length > 0){
-			this[funcName].call(this, logStr, record.msgArgs);
-		} else {
-			this[funcName].call(this, logStr);
-		}
-		
-		this.data.push(record);
-		if(this.numRecords != -1){
-			while(this.data.length>this.numRecords){
-				this.data.shift();
-			}
-		}
 	}
-});
-
-if(!dj_undef("console") && !dj_undef("info", console)){
-	dojo.lang.extend(dojo.logging.MemoryLogHandler,{
-		debug:function(){
-			console.debug.apply(this, arguments);
-		},
-		info:function(){
-			console.info.apply(this, arguments);
-		},
-		warn:function(){
-			console.warn.apply(this, arguments);
-		},
-		error:function(){
-			console.error.apply(this, arguments);
-		},
-		critical:function(){
-			console.error.apply(this, arguments);
+}});
+if (!dj_undef("console") && !dj_undef("info", console)) {
+	dojo.lang.extend(dojo.logging.MemoryLogHandler, {debug:function () {
+		console.debug.apply(this, arguments);
+	}, info:function () {
+		console.info.apply(this, arguments);
+	}, warn:function () {
+		console.warn.apply(this, arguments);
+	}, error:function () {
+		console.error.apply(this, arguments);
+	}, critical:function () {
+		console.error.apply(this, arguments);
+	}});
+	dojo.lang.extend(dojo.logging.Logger, {exception:function (msg, e, squelch) {
+		var args = [msg];
+		if (e) {
+			msg += " : " + e.name + " " + (e.description || e.message);
+			args.push(e);
 		}
-	});
-
-	dojo.lang.extend(dojo.logging.Logger,{
-		exception: function(msg, e, squelch){
-			var args=[msg];
-			
-			if(e){
-				msg+=" : "+ e.name + " " + (e.description||e.message);
-				args.push(e);
-			}
-			
-			this.logType("ERROR", args);
-			if(!squelch){
-				throw e;
-			}
+		this.logType("ERROR", args);
+		if (!squelch) {
+			throw e;
 		}
-	});
-
+	}});
 }
 
+
 __CPAN_FILE__ src/logging/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -95793,12 +67106,10 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: [["dojo.logging.Logger", false, false]],
-	rhino: ["dojo.logging.RhinoLogger"]
-});
+dojo.kwCompoundRequire({common:[["dojo.logging.Logger", false, false]], rhino:["dojo.logging.RhinoLogger"]});
 dojo.provide("dojo.logging.*");
 
+
 __CPAN_DIR__ src/uuid
 __CPAN_FILE__ src/uuid/NameBasedGenerator.js
 /*
@@ -95812,33 +67123,18 @@
 */
 
 dojo.provide("dojo.uuid.NameBasedGenerator");
-
-dojo.uuid.NameBasedGenerator = new function() {
-	this.generate = function(/* constructor? */ returnType) {
-		// summary: 
-		//   This function generates name-based UUIDs, meaning "version 3" 
-		//   and "version 5" UUIDs.
-		// returnType: The type of object to return. Usually String or dojo.uuid.Uuid
-
-		// examples: 
-		//   var string = dojo.uuid.NameBasedGenerator.generate();
-		//   var string = dojo.uuid.NameBasedGenerator.generate(String);
-		//   var uuid   = dojo.uuid.NameBasedGenerator.generate(dojo.uuid.Uuid);
-
-		dojo.unimplemented('dojo.uuid.NameBasedGenerator.generate');
-		
-		// FIXME:
-		// For an algorithm to generate name-based UUIDs, 
-		// see sections 4.3 of RFC 4122:
-		//  http://www.ietf.org/rfc/rfc4122.txt
-		
-		var returnValue = "00000000-0000-0000-0000-000000000000"; // FIXME
+dojo.uuid.NameBasedGenerator = new function () {
+	this.generate = function (returnType) {
+		dojo.unimplemented("dojo.uuid.NameBasedGenerator.generate");
+		var returnValue = "00000000-0000-0000-0000-000000000000";
 		if (returnType && (returnType != String)) {
 			returnValue = new returnType(returnValue);
 		}
-		return returnValue; // object
+		return returnValue;
 	};
 }();
+
+
 __CPAN_FILE__ src/uuid/TimeBasedGenerator.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -95854,18 +67150,8 @@
 dojo.require("dojo.lang.common");
 dojo.require("dojo.lang.type");
 dojo.require("dojo.lang.assert");
-
-dojo.uuid.TimeBasedGenerator = new function() {
-
-	// --------------------------------------------------
-	// Public constants:
-	// Number of hours between October 15, 1582 and January 1, 1970:
+dojo.uuid.TimeBasedGenerator = new function () {
 	this.GREGORIAN_CHANGE_OFFSET_IN_HOURS = 3394248;
-	// Number of seconds between October 15, 1582 and January 1, 1970:
-	//   this.GREGORIAN_CHANGE_OFFSET_IN_SECONDS = 12219292800;	
-	
-	// --------------------------------------------------
-	// Private variables:
 	var _uuidPseudoNodeString = null;
 	var _uuidClockSeqString = null;
 	var _dateValueOfPreviousUuid = null;
@@ -95873,86 +67159,68 @@
 	var _cachedMillisecondsBetween1582and1970 = null;
 	var _cachedHundredNanosecondIntervalsPerMillisecond = null;
 	var _uniformNode = null;
-	
-	// --------------------------------------------------
-	// Private constants:
 	var HEX_RADIX = 16;
-
-	function _carry(/* array */ arrayA) {
-		// summary: 
-		//   Given an array which holds a 64-bit number broken into 4 16-bit 
-		//   elements, this method carries any excess bits (greater than 16-bits) 
-		//   from each array element into the next.
-		// arrayA: An array with 4 elements, each of which is a 16-bit number.
+	function _carry(arrayA) {
 		arrayA[2] += arrayA[3] >>> 16;
-		arrayA[3] &= 0xFFFF;
+		arrayA[3] &= 65535;
 		arrayA[1] += arrayA[2] >>> 16;
-		arrayA[2] &= 0xFFFF;
+		arrayA[2] &= 65535;
 		arrayA[0] += arrayA[1] >>> 16;
-		arrayA[1] &= 0xFFFF;
+		arrayA[1] &= 65535;
 		dojo.lang.assert((arrayA[0] >>> 16) === 0);
 	}
-
-	function _get64bitArrayFromFloat(/* float */ x) {
-		// summary: 
-		//   Given a floating point number, this method returns an array which 
-		//   holds a 64-bit number broken into 4 16-bit elements.
+	function _get64bitArrayFromFloat(x) {
 		var result = new Array(0, 0, 0, 0);
-		result[3] = x % 0x10000;
+		result[3] = x % 65536;
 		x -= result[3];
-		x /= 0x10000;
-		result[2] = x % 0x10000;
+		x /= 65536;
+		result[2] = x % 65536;
 		x -= result[2];
-		x /= 0x10000;
-		result[1] = x % 0x10000;
+		x /= 65536;
+		result[1] = x % 65536;
 		x -= result[1];
-		x /= 0x10000;
+		x /= 65536;
 		result[0] = x;
-		return result; // Array with 4 elements, each of which is a 16-bit number.
+		return result;
 	}
-
-	function _addTwo64bitArrays(/* array */ arrayA, /* array */ arrayB) {
-		// summary: 
-		//   Takes two arrays, each of which holds a 64-bit number broken into 4
-		//   16-bit elements, and returns a new array that holds a 64-bit number
-		//   that is the sum of the two original numbers.
-		// arrayA: An array with 4 elements, each of which is a 16-bit number.
-		// arrayB: An array with 4 elements, each of which is a 16-bit number.
+	function _addTwo64bitArrays(arrayA, arrayB) {
 		dojo.lang.assertType(arrayA, Array);
 		dojo.lang.assertType(arrayB, Array);
 		dojo.lang.assert(arrayA.length == 4);
 		dojo.lang.assert(arrayB.length == 4);
-	
 		var result = new Array(0, 0, 0, 0);
 		result[3] = arrayA[3] + arrayB[3];
 		result[2] = arrayA[2] + arrayB[2];
 		result[1] = arrayA[1] + arrayB[1];
 		result[0] = arrayA[0] + arrayB[0];
 		_carry(result);
-		return result; // Array with 4 elements, each of which is a 16-bit number.
+		return result;
 	}
-
-	function _multiplyTwo64bitArrays(/* array */ arrayA, /* array */ arrayB) {
-		// summary: 
-		//   Takes two arrays, each of which holds a 64-bit number broken into 4
-		//   16-bit elements, and returns a new array that holds a 64-bit number
-		//   that is the product of the two original numbers.
-		// arrayA: An array with 4 elements, each of which is a 16-bit number.
-		// arrayB: An array with 4 elements, each of which is a 16-bit number.
+	function _multiplyTwo64bitArrays(arrayA, arrayB) {
 		dojo.lang.assertType(arrayA, Array);
 		dojo.lang.assertType(arrayB, Array);
 		dojo.lang.assert(arrayA.length == 4);
 		dojo.lang.assert(arrayB.length == 4);
-	
 		var overflow = false;
-		if (arrayA[0] * arrayB[0] !== 0) { overflow = true; }
-		if (arrayA[0] * arrayB[1] !== 0) { overflow = true; }
-		if (arrayA[0] * arrayB[2] !== 0) { overflow = true; }
-		if (arrayA[1] * arrayB[0] !== 0) { overflow = true; }
-		if (arrayA[1] * arrayB[1] !== 0) { overflow = true; }
-		if (arrayA[2] * arrayB[0] !== 0) { overflow = true; }
+		if (arrayA[0] * arrayB[0] !== 0) {
+			overflow = true;
+		}
+		if (arrayA[0] * arrayB[1] !== 0) {
+			overflow = true;
+		}
+		if (arrayA[0] * arrayB[2] !== 0) {
+			overflow = true;
+		}
+		if (arrayA[1] * arrayB[0] !== 0) {
+			overflow = true;
+		}
+		if (arrayA[1] * arrayB[1] !== 0) {
+			overflow = true;
+		}
+		if (arrayA[2] * arrayB[0] !== 0) {
+			overflow = true;
+		}
 		dojo.lang.assert(!overflow);
-	
 		var result = new Array(0, 0, 0, 0);
 		result[0] += arrayA[0] * arrayB[3];
 		_carry(result);
@@ -95974,50 +67242,24 @@
 		_carry(result);
 		result[3] += arrayA[3] * arrayB[3];
 		_carry(result);
-		return result; // Array with 4 elements, each of which is a 16-bit number.
+		return result;
 	}
-
-	function _padWithLeadingZeros(/* string */ string, /* int */ desiredLength) {
-		// summary: 
-		//   Pads a string with leading zeros and returns the result.
-		// string: A string to add padding to.
-		// desiredLength: The number of characters the return string should have.
-
-		// examples: 
-		//   result = _padWithLeadingZeros("abc", 6);
-		//   dojo.lang.assert(result == "000abc");
+	function _padWithLeadingZeros(string, desiredLength) {
 		while (string.length < desiredLength) {
 			string = "0" + string;
 		}
-		return string; // string
+		return string;
 	}
-
 	function _generateRandomEightCharacterHexString() {
-		// summary: 
-		//   Returns a randomly generated 8-character string of hex digits.
-
-		// FIXME: This probably isn't a very high quality random number.
-	
-		// Make random32bitNumber be a randomly generated floating point number
-		// between 0 and (4,294,967,296 - 1), inclusive.
-		var random32bitNumber = Math.floor( (Math.random() % 1) * Math.pow(2, 32) );
-	
+		var random32bitNumber = Math.floor((Math.random() % 1) * Math.pow(2, 32));
 		var eightCharacterString = random32bitNumber.toString(HEX_RADIX);
 		while (eightCharacterString.length < 8) {
 			eightCharacterString = "0" + eightCharacterString;
 		}
-		return eightCharacterString; // String (an 8-character hex string)
+		return eightCharacterString;
 	}
-
-	function _generateUuidString(/* string? */ node) {
-		// summary: 
-		//   Generates a time-based UUID, meaning a version 1 UUID.  
-		// description: 
-		//   JavaScript code running in a browser doesn't have access to the 
-		//   IEEE 802.3 address of the computer, so if a node value isn't 
-		//   supplied, we generate a random pseudonode value instead.
-		// node: An optional 12-character string to use as the node in the new UUID.
-		dojo.lang.assertType(node, String, {optional: true});
+	function _generateUuidString(node) {
+		dojo.lang.assertType(node, String, {optional:true});
 		if (node) {
 			dojo.lang.assert(node.length == 12);
 		} else {
@@ -96025,8 +67267,8 @@
 				node = _uniformNode;
 			} else {
 				if (!_uuidPseudoNodeString) {
-					var pseudoNodeIndicatorBit = 0x8000;
-					var random15bitNumber = Math.floor( (Math.random() % 1) * Math.pow(2, 15) );
+					var pseudoNodeIndicatorBit = 32768;
+					var random15bitNumber = Math.floor((Math.random() % 1) * Math.pow(2, 15));
 					var leftmost4HexCharacters = (pseudoNodeIndicatorBit | random15bitNumber).toString(HEX_RADIX);
 					_uuidPseudoNodeString = leftmost4HexCharacters + _generateRandomEightCharacterHexString();
 				}
@@ -96034,18 +67276,12 @@
 			}
 		}
 		if (!_uuidClockSeqString) {
-			var variantCodeForDCEUuids = 0x8000; // 10--------------, i.e. uses only first two of 16 bits.
-			var random14bitNumber = Math.floor( (Math.random() % 1) * Math.pow(2, 14) );
+			var variantCodeForDCEUuids = 32768;
+			var random14bitNumber = Math.floor((Math.random() % 1) * Math.pow(2, 14));
 			_uuidClockSeqString = (variantCodeForDCEUuids | random14bitNumber).toString(HEX_RADIX);
 		}
-	
-		// Maybe we should think about trying to make the code more readable to
-		// newcomers by creating a class called "WholeNumber" that encapsulates
-		// the methods and data structures for working with these arrays that
-		// hold 4 16-bit numbers?  And then these variables below have names
-		// like "wholeSecondsPerHour" rather than "arraySecondsPerHour"?
 		var now = new Date();
-		var millisecondsSince1970 = now.valueOf(); // milliseconds since midnight 01 January, 1970 UTC.
+		var millisecondsSince1970 = now.valueOf();
 		var nowArray = _get64bitArrayFromFloat(millisecondsSince1970);
 		if (!_cachedMillisecondsBetween1582and1970) {
 			var arraySecondsPerHour = _get64bitArrayFromFloat(60 * 60);
@@ -96058,18 +67294,11 @@
 		var arrayMillisecondsSince1970 = nowArray;
 		var arrayMillisecondsSince1582 = _addTwo64bitArrays(_cachedMillisecondsBetween1582and1970, arrayMillisecondsSince1970);
 		var arrayHundredNanosecondIntervalsSince1582 = _multiplyTwo64bitArrays(arrayMillisecondsSince1582, _cachedHundredNanosecondIntervalsPerMillisecond);
-	
 		if (now.valueOf() == _dateValueOfPreviousUuid) {
 			arrayHundredNanosecondIntervalsSince1582[3] += _nextIntraMillisecondIncrement;
 			_carry(arrayHundredNanosecondIntervalsSince1582);
 			_nextIntraMillisecondIncrement += 1;
 			if (_nextIntraMillisecondIncrement == 10000) {
-				// If we've gotten to here, it means we've already generated 10,000
-				// UUIDs in this single millisecond, which is the most that the UUID
-				// timestamp field allows for.  So now we'll just sit here and wait
-				// for a fraction of a millisecond, so as to ensure that the next
-				// time this method is called there will be a different millisecond
-				// value in the timestamp field.
 				while (now.valueOf() == _dateValueOfPreviousUuid) {
 					now = new Date();
 				}
@@ -96078,8 +67307,7 @@
 			_dateValueOfPreviousUuid = now.valueOf();
 			_nextIntraMillisecondIncrement = 1;
 		}
-	
-		var hexTimeLowLeftHalf  = arrayHundredNanosecondIntervalsSince1582[2].toString(HEX_RADIX);
+		var hexTimeLowLeftHalf = arrayHundredNanosecondIntervalsSince1582[2].toString(HEX_RADIX);
 		var hexTimeLowRightHalf = arrayHundredNanosecondIntervalsSince1582[3].toString(HEX_RADIX);
 		var hexTimeLow = _padWithLeadingZeros(hexTimeLowLeftHalf, 4) + _padWithLeadingZeros(hexTimeLowRightHalf, 4);
 		var hexTimeMid = arrayHundredNanosecondIntervalsSince1582[1].toString(HEX_RADIX);
@@ -96087,65 +67315,23 @@
 		var hexTimeHigh = arrayHundredNanosecondIntervalsSince1582[0].toString(HEX_RADIX);
 		hexTimeHigh = _padWithLeadingZeros(hexTimeHigh, 3);
 		var hyphen = "-";
-		var versionCodeForTimeBasedUuids = "1"; // binary2hex("0001")
-		var resultUuid = hexTimeLow + hyphen + hexTimeMid + hyphen +
-					versionCodeForTimeBasedUuids + hexTimeHigh + hyphen +
-					_uuidClockSeqString + hyphen + node;
+		var versionCodeForTimeBasedUuids = "1";
+		var resultUuid = hexTimeLow + hyphen + hexTimeMid + hyphen + versionCodeForTimeBasedUuids + hexTimeHigh + hyphen + _uuidClockSeqString + hyphen + node;
 		resultUuid = resultUuid.toLowerCase();
-		return resultUuid; // String (a 36 character string, which will look something like "b4308fb0-86cd-11da-a72b-0800200c9a66")
+		return resultUuid;
 	}
-
-	this.setNode = function(/* string? */ node) {
-		// summary: 
-		//   Sets the 'node' value that will be included in generated UUIDs.
-		// node: A 12-character hex string representing a pseudoNode or hardwareNode.
+	this.setNode = function (node) {
 		dojo.lang.assert((node === null) || (node.length == 12));
 		_uniformNode = node;
 	};
-
-	this.getNode = function() {
-		// summary: 
-		//   Returns the 'node' value that will be included in generated UUIDs.
-		return _uniformNode; // String (a 12-character hex string representing a pseudoNode or hardwareNode)
+	this.getNode = function () {
+		return _uniformNode;
 	};
-
-	this.generate = function(/* misc? */ input) {
-		// summary: 
-		//   This function generates time-based UUIDs, meaning "version 1" UUIDs. 
-		// description: 
-		// For more info, see
-		//   http://www.webdav.org/specs/draft-leach-uuids-guids-01.txt
-		//   http://www.infonuovo.com/dma/csdocs/sketch/instidid.htm
-		//   http://kruithof.xs4all.nl/uuid/uuidgen
-		//   http://www.opengroup.org/onlinepubs/009629399/apdxa.htm#tagcjh_20
-		//   http://jakarta.apache.org/commons/sandbox/id/apidocs/org/apache/commons/id/uuid/clock/Clock.html
-
-		// examples: 
-		//   var generate = dojo.uuid.TimeBasedGenerator.generate;
-		//   var uuid;   // an instance of dojo.uuid.Uuid
-		//   var string; // a simple string literal
-		//   string = generate();
-		//   string = generate(String);
-		//   uuid   = generate(dojo.uuid.Uuid);
-		//   string = generate("017bf397618a");
-		//   string = generate({node: "017bf397618a"});         // hardwareNode
-		//   string = generate({node: "f17bf397618a"});         // pseudoNode
-		//   string = generate({hardwareNode: "017bf397618a"});
-		//   string = generate({pseudoNode:   "f17bf397618a"});
-		//   string = generate({node: "017bf397618a", returnType: String});
-		//   uuid   = generate({node: "017bf397618a", returnType: dojo.uuid.Uuid});
-		//   dojo.uuid.TimeBasedGenerator.setNode("017bf397618a");
-		//   string = generate(); // the generated UUID has node == "017bf397618a"
-		//   uuid   = generate(dojo.uuid.Uuid); // the generated UUID has node == "017bf397618a"
+	this.generate = function (input) {
 		var nodeString = null;
 		var returnType = null;
-		
 		if (input) {
 			if (dojo.lang.isObject(input) && !dojo.lang.isBuiltIn(input)) {
-				// input: object {node: string, hardwareNode: string, pseudoNode: string}
-				// node: A 12-character hex string representing a pseudoNode or hardwareNode.
-				// hardwareNode: A 12-character hex string containing an IEEE 802.3 network node identificator.
-				// pseudoNode: A 12-character hex string representing a pseudoNode.
 				var namedParameters = input;
 				dojo.lang.assertValidKeywords(namedParameters, ["node", "hardwareNode", "pseudoNode", "returnType"]);
 				var node = namedParameters["node"];
@@ -96156,22 +67342,20 @@
 					var firstCharacter = nodeString.charAt(0);
 					var firstDigit = parseInt(firstCharacter, HEX_RADIX);
 					if (hardwareNode) {
-						dojo.lang.assert((firstDigit >= 0x0) && (firstDigit <= 0x7));
+						dojo.lang.assert((firstDigit >= 0) && (firstDigit <= 7));
 					}
 					if (pseudoNode) {
-						dojo.lang.assert((firstDigit >= 0x8) && (firstDigit <= 0xF));
+						dojo.lang.assert((firstDigit >= 8) && (firstDigit <= 15));
 					}
 				}
 				returnType = namedParameters["returnType"];
-				dojo.lang.assertType(returnType, Function, {optional: true});
+				dojo.lang.assertType(returnType, Function, {optional:true});
 			} else {
 				if (dojo.lang.isString(input)) {
-					// input: string A 12-character hex string representing a pseudoNode or hardwareNode.
 					nodeString = input;
 					returnType = null;
 				} else {
 					if (dojo.lang.isFunction(input)) {
-						// input: constructor The type of object to return. Usually String or dojo.uuid.Uuid
 						nodeString = null;
 						returnType = input;
 					}
@@ -96182,9 +67366,8 @@
 				var integer = parseInt(nodeString, HEX_RADIX);
 				dojo.lang.assert(isFinite(integer));
 			}
-			dojo.lang.assertType(returnType, Function, {optional: true});
+			dojo.lang.assertType(returnType, Function, {optional:true});
 		}
-		
 		var uuidString = _generateUuidString(nodeString);
 		var returnValue;
 		if (returnType && (returnType != String)) {
@@ -96192,10 +67375,11 @@
 		} else {
 			returnValue = uuidString;
 		}
-		return returnValue; // object
+		return returnValue;
 	};
 }();
 
+
 __CPAN_FILE__ src/uuid/Uuid.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -96210,35 +67394,18 @@
 dojo.provide("dojo.uuid.Uuid");
 dojo.require("dojo.lang.common");
 dojo.require("dojo.lang.assert");
-
-dojo.uuid.Uuid = function(/* string || generator */ input) {
-	// summary: 
-	//   This is the constructor for the Uuid class.  The Uuid class offers 
-	//   methods for inspecting existing UUIDs.
-	
-	// examples:
-	//   var uuid;
-	//   uuid = new dojo.uuid.Uuid("3b12f1df-5232-4804-897e-917bf397618a");
-	//   uuid = new dojo.uuid.Uuid(); // "00000000-0000-0000-0000-000000000000"
-	//   uuid = new dojo.uuid.Uuid(dojo.uuid.RandomGenerator);
-	//   uuid = new dojo.uuid.Uuid(dojo.uuid.TimeBasedGenerator);
-	//   dojo.uuid.Uuid.setGenerator(dojo.uuid.RandomGenerator);
-	//   uuid = new dojo.uuid.Uuid();
-	//   dojo.lang.assert(!uuid.isEqual(dojo.uuid.Uuid.NIL_UUID));
+dojo.uuid.Uuid = function (input) {
 	this._uuidString = dojo.uuid.Uuid.NIL_UUID;
 	if (input) {
 		if (dojo.lang.isString(input)) {
-			// input: string? A 36-character string that conforms to the UUID spec.
 			this._uuidString = input.toLowerCase();
 			dojo.lang.assert(this.isValid());
 		} else {
 			if (dojo.lang.isObject(input) && input.generate) {
-				// input: generator A UUID generator, such as dojo.uuid.TimeBasedGenerator.
 				var generator = input;
 				this._uuidString = generator.generate();
 				dojo.lang.assert(this.isValid());
 			} else {
-				// we got passed something other than a string
 				dojo.lang.assert(false, "The dojo.uuid.Uuid() constructor must be initializated with a UUID string.");
 			}
 		}
@@ -96250,134 +67417,63 @@
 		}
 	}
 };
-
-// -------------------------------------------------------------------
-// Public constants
-// -------------------------------------------------------------------
 dojo.uuid.Uuid.NIL_UUID = "00000000-0000-0000-0000-000000000000";
-dojo.uuid.Uuid.Version = {
-	UNKNOWN: 0,
-	TIME_BASED: 1,
-	DCE_SECURITY: 2,
-	NAME_BASED_MD5: 3,
-	RANDOM: 4,
-	NAME_BASED_SHA1: 5 };
-dojo.uuid.Uuid.Variant = {
-	NCS: "0",
-	DCE: "10",
-	MICROSOFT: "110",
-	UNKNOWN: "111" };
+dojo.uuid.Uuid.Version = {UNKNOWN:0, TIME_BASED:1, DCE_SECURITY:2, NAME_BASED_MD5:3, RANDOM:4, NAME_BASED_SHA1:5};
+dojo.uuid.Uuid.Variant = {NCS:"0", DCE:"10", MICROSOFT:"110", UNKNOWN:"111"};
 dojo.uuid.Uuid.HEX_RADIX = 16;
-
-dojo.uuid.Uuid.compare = function(/* dojo.uuid.Uuid */ uuidOne, /* dojo.uuid.Uuid */ uuidTwo) {
-	// summary: 
-	//   Given two UUIDs to compare, this method returns 0, 1, or -1.
-	// description:
-	//   This method is designed to be used by sorting routines, like the
-	//   JavaScript built-in Array sort() method. This implementation is 
-	//   intended to match the sample implementation in IETF RFC 4122:
-	//   http://www.ietf.org/rfc/rfc4122.txt
-	// uuidOne: Any object that has toString() method that returns a 36-character string that conforms to the UUID spec.
-	// uuidTwo: Any object that has toString() method that returns a 36-character string that conforms to the UUID spec.
-
-	// examples:
-	//   var uuid;
-	//   var generator = dojo.uuid.TimeBasedGenerator;
-	//   var a = new dojo.uuid.Uuid(generator);
-	//   var b = new dojo.uuid.Uuid(generator);
-	//   var c = new dojo.uuid.Uuid(generator);
-	//   var array = new Array(a, b, c);
-	//   array.sort(dojo.uuid.Uuid.compare);
+dojo.uuid.Uuid.compare = function (uuidOne, uuidTwo) {
 	var uuidStringOne = uuidOne.toString();
 	var uuidStringTwo = uuidTwo.toString();
-	if (uuidStringOne > uuidStringTwo) return 1;   // integer
-	if (uuidStringOne < uuidStringTwo) return -1;  // integer
-	return 0; // integer (either 0, 1, or -1)
+	if (uuidStringOne > uuidStringTwo) {
+		return 1;
+	}
+	if (uuidStringOne < uuidStringTwo) {
+		return -1;
+	}
+	return 0;
 };
-
-dojo.uuid.Uuid.setGenerator = function(/* generator? */ generator) {
-	// summary: 
-	//   Sets the default generator, which will be used by the 
-	//   "new dojo.uuid.Uuid()" constructor if no parameters
-	//   are passed in.
-	// generator: A UUID generator, such as dojo.uuid.TimeBasedGenerator.
+dojo.uuid.Uuid.setGenerator = function (generator) {
 	dojo.lang.assert(!generator || (dojo.lang.isObject(generator) && generator.generate));
 	dojo.uuid.Uuid._ourGenerator = generator;
 };
-
-dojo.uuid.Uuid.getGenerator = function() {
-	// summary: 
-	//   Returns the default generator.  See setGenerator().
-	return dojo.uuid.Uuid._ourGenerator; // generator (A UUID generator, such as dojo.uuid.TimeBasedGenerator).
+dojo.uuid.Uuid.getGenerator = function () {
+	return dojo.uuid.Uuid._ourGenerator;
 };
-
-dojo.uuid.Uuid.prototype.toString = function(/* string? */format) {
-	// summary: 
-	//   By default this method returns a standard 36-character string representing 
-	//   the UUID, such as "3b12f1df-5232-4804-897e-917bf397618a".  You can also
-	//   pass in an optional format specifier to request the output in any of
-	//   a half dozen slight variations.
-	// format: One of these strings: '{}', '()', '""', "''", 'urn', '!-'
-
-	// examples:
-	//   var uuid = new dojo.uuid.Uuid(dojo.uuid.TimeBasedGenerator);
-	//   var s;
-	//   s = uuid.toString();       //  eb529fec-6498-11d7-b236-000629ba5445
-	//   s = uuid.toString('{}');   // {eb529fec-6498-11d7-b236-000629ba5445}
-	//   s = uuid.toString('()');   // (eb529fec-6498-11d7-b236-000629ba5445)
-	//   s = uuid.toString('""');   // "eb529fec-6498-11d7-b236-000629ba5445"
-	//   s = uuid.toString("''");   // 'eb529fec-6498-11d7-b236-000629ba5445'
-	//   s = uuid.toString('!-');   //  eb529fec649811d7b236000629ba5445
-	//   s = uuid.toString('urn');  //  urn:uuid:eb529fec-6498-11d7-b236-000629ba5445
+dojo.uuid.Uuid.prototype.toString = function (format) {
 	if (format) {
 		switch (format) {
-			case '{}':
-				return '{' + this._uuidString + '}';
-				break;
-			case '()':
-				return '(' + this._uuidString + ')';
-				break;
-			case '""':
-				return '"' + this._uuidString + '"';
-				break;
-			case "''":
-				return "'" + this._uuidString + "'";
-				break;
-			case 'urn':
-				return 'urn:uuid:' + this._uuidString;
-				break;
-			case '!-':
-				return this._uuidString.split('-').join('');
-				break;
-			default:
-				// we got passed something other than what we expected
-				dojo.lang.assert(false, "The toString() method of dojo.uuid.Uuid was passed a bogus format.");
+		  case "{}":
+			return "{" + this._uuidString + "}";
+			break;
+		  case "()":
+			return "(" + this._uuidString + ")";
+			break;
+		  case "\"\"":
+			return "\"" + this._uuidString + "\"";
+			break;
+		  case "''":
+			return "'" + this._uuidString + "'";
+			break;
+		  case "urn":
+			return "urn:uuid:" + this._uuidString;
+			break;
+		  case "!-":
+			return this._uuidString.split("-").join("");
+			break;
+		  default:
+			dojo.lang.assert(false, "The toString() method of dojo.uuid.Uuid was passed a bogus format.");
 		}
 	} else {
-		return this._uuidString; // string
+		return this._uuidString;
 	}
 };
-
-dojo.uuid.Uuid.prototype.compare = function(/* dojo.uuid.Uuid */ otherUuid) {
-	// summary: 
-	//   Compares this UUID to another UUID, and returns 0, 1, or -1.
-	// description:
-	//   This implementation is intended to match the sample implementation
-	//   in IETF RFC 4122: http://www.ietf.org/rfc/rfc4122.txt
-	// otherUuid: Any object that has toString() method that returns a 36-character string that conforms to the UUID spec.
-	return dojo.uuid.Uuid.compare(this, otherUuid); // integer (either 0, 1, or -1)
+dojo.uuid.Uuid.prototype.compare = function (otherUuid) {
+	return dojo.uuid.Uuid.compare(this, otherUuid);
 };
-
-dojo.uuid.Uuid.prototype.isEqual = function(/* dojo.uuid.Uuid */ otherUuid) {
-	// summary: 
-	//   Returns true if this UUID is equal to the otherUuid, or false otherwise.
-	// otherUuid: Any object that has toString() method that returns a 36-character string that conforms to the UUID spec.
-	return (this.compare(otherUuid) == 0); // boolean
+dojo.uuid.Uuid.prototype.isEqual = function (otherUuid) {
+	return (this.compare(otherUuid) == 0);
 };
-
-dojo.uuid.Uuid.prototype.isValid = function() {
-	// summary: 
-	//   Returns true if the UUID was initialized with a valid value.
+dojo.uuid.Uuid.prototype.isValid = function () {
 	try {
 		dojo.lang.assertType(this._uuidString, String);
 		dojo.lang.assert(this._uuidString.length == 36);
@@ -96394,189 +67490,111 @@
 			var integer = parseInt(part, dojo.uuid.Uuid.HEX_RADIX);
 			dojo.lang.assert(isFinite(integer));
 		}
-		return true; // boolean
-	} catch (e) {
-		return false; // boolean
+		return true;
 	}
+	catch (e) {
+		return false;
+	}
 };
-
-dojo.uuid.Uuid.prototype.getVariant = function() {
-	// summary: 
-	//   Returns a variant code that indicates what type of UUID this is.
-	//   Returns one of the enumerated dojo.uuid.Uuid.Variant values.
-
-	// example: 
-	//   var uuid = new dojo.uuid.Uuid("3b12f1df-5232-4804-897e-917bf397618a");
-	//   var variant = uuid.getVariant();
-	//   dojo.lang.assert(variant == dojo.uuid.Uuid.Variant.DCE);
-	// example: 
-	// "3b12f1df-5232-4804-897e-917bf397618a"
-	//                     ^
-	//                     |
-	//         (variant "10__" == DCE)
+dojo.uuid.Uuid.prototype.getVariant = function () {
 	var variantCharacter = this._uuidString.charAt(19);
 	var variantNumber = parseInt(variantCharacter, dojo.uuid.Uuid.HEX_RADIX);
 	dojo.lang.assert((variantNumber >= 0) && (variantNumber <= 16));
-
 	if (!dojo.uuid.Uuid._ourVariantLookupTable) {
 		var Variant = dojo.uuid.Uuid.Variant;
 		var lookupTable = [];
-
-		lookupTable[0x0] = Variant.NCS;       // 0000
-		lookupTable[0x1] = Variant.NCS;       // 0001
-		lookupTable[0x2] = Variant.NCS;       // 0010
-		lookupTable[0x3] = Variant.NCS;       // 0011
-
-		lookupTable[0x4] = Variant.NCS;       // 0100
-		lookupTable[0x5] = Variant.NCS;       // 0101
-		lookupTable[0x6] = Variant.NCS;       // 0110
-		lookupTable[0x7] = Variant.NCS;       // 0111
-
-		lookupTable[0x8] = Variant.DCE;       // 1000
-		lookupTable[0x9] = Variant.DCE;       // 1001
-		lookupTable[0xA] = Variant.DCE;       // 1010
-		lookupTable[0xB] = Variant.DCE;       // 1011
-
-		lookupTable[0xC] = Variant.MICROSOFT; // 1100
-		lookupTable[0xD] = Variant.MICROSOFT; // 1101
-		lookupTable[0xE] = Variant.UNKNOWN;   // 1110
-		lookupTable[0xF] = Variant.UNKNOWN;   // 1111
-		
+		lookupTable[0] = Variant.NCS;
+		lookupTable[1] = Variant.NCS;
+		lookupTable[2] = Variant.NCS;
+		lookupTable[3] = Variant.NCS;
+		lookupTable[4] = Variant.NCS;
+		lookupTable[5] = Variant.NCS;
+		lookupTable[6] = Variant.NCS;
+		lookupTable[7] = Variant.NCS;
+		lookupTable[8] = Variant.DCE;
+		lookupTable[9] = Variant.DCE;
+		lookupTable[10] = Variant.DCE;
+		lookupTable[11] = Variant.DCE;
+		lookupTable[12] = Variant.MICROSOFT;
+		lookupTable[13] = Variant.MICROSOFT;
+		lookupTable[14] = Variant.UNKNOWN;
+		lookupTable[15] = Variant.UNKNOWN;
 		dojo.uuid.Uuid._ourVariantLookupTable = lookupTable;
 	}
-
-	return dojo.uuid.Uuid._ourVariantLookupTable[variantNumber]; // dojo.uuid.Uuid.Variant
+	return dojo.uuid.Uuid._ourVariantLookupTable[variantNumber];
 };
-
-dojo.uuid.Uuid.prototype.getVersion = function() {
-	// summary: 
-	//   Returns a version number that indicates what type of UUID this is.
-	//   Returns one of the enumerated dojo.uuid.Uuid.Version values.
-
-	// example: 
-	//   var uuid = new dojo.uuid.Uuid("b4308fb0-86cd-11da-a72b-0800200c9a66");
-	//   var version = uuid.getVersion();
-	//   dojo.lang.assert(version == dojo.uuid.Uuid.Version.TIME_BASED);
-	// exceptions: 
-	//   Throws an Error if this is not a DCE Variant UUID.
+dojo.uuid.Uuid.prototype.getVersion = function () {
 	if (!this._versionNumber) {
 		var errorMessage = "Called getVersion() on a dojo.uuid.Uuid that was not a DCE Variant UUID.";
 		dojo.lang.assert(this.getVariant() == dojo.uuid.Uuid.Variant.DCE, errorMessage);
-	
-		// "b4308fb0-86cd-11da-a72b-0800200c9a66"
-		//                ^
-		//                |
-		//       (version 1 == TIME_BASED)
 		var versionCharacter = this._uuidString.charAt(14);
 		this._versionNumber = parseInt(versionCharacter, dojo.uuid.Uuid.HEX_RADIX);
 	}
-	return this._versionNumber; // dojo.uuid.Uuid.Version
+	return this._versionNumber;
 };
-
-dojo.uuid.Uuid.prototype.getNode = function() {
-	// summary: 
-	//   If this is a version 1 UUID (a time-based UUID), getNode() returns a 
-	//   12-character string with the "node" or "pseudonode" portion of the UUID, 
-	//   which is the rightmost 12 characters.  
-
-	// exceptions: 
-	//   Throws an Error if this is not a version 1 UUID.
+dojo.uuid.Uuid.prototype.getNode = function () {
 	if (!this._nodeString) {
 		var errorMessage = "Called getNode() on a dojo.uuid.Uuid that was not a TIME_BASED UUID.";
 		dojo.lang.assert(this.getVersion() == dojo.uuid.Uuid.Version.TIME_BASED, errorMessage);
-
-		var arrayOfStrings = this._uuidString.split('-');
+		var arrayOfStrings = this._uuidString.split("-");
 		this._nodeString = arrayOfStrings[4];
 	}
-	return this._nodeString; // String (a 12-character string, which will look something like "917bf397618a")
+	return this._nodeString;
 };
-
-dojo.uuid.Uuid.prototype.getTimestamp = function(/* misc. */ returnType) {
-	// summary: 
-	//   If this is a version 1 UUID (a time-based UUID), this method returns
-	//   the timestamp value encoded in the UUID.  The caller can ask for the
-	//   timestamp to be returned either as a JavaScript Date object or as a 
-	//   15-character string of hex digits.
-	// returnType: Any of these five values: "string", String, "hex", "date", Date
-
-	// returns: 
-	//   Returns the timestamp value as a JavaScript Date object or a 15-character string of hex digits.
-	// examples: 
-	//   var uuid = new dojo.uuid.Uuid("b4308fb0-86cd-11da-a72b-0800200c9a66");
-	//   var date, string, hexString;
-	//   date   = uuid.getTimestamp();         // returns a JavaScript Date
-	//   date   = uuid.getTimestamp(Date);     // 
-	//   string = uuid.getTimestamp(String);   // "Mon, 16 Jan 2006 20:21:41 GMT"
-	//   hexString = uuid.getTimestamp("hex"); // "1da86cdb4308fb0"
-	// exceptions: 
-	//   Throws an Error if this is not a version 1 UUID.
+dojo.uuid.Uuid.prototype.getTimestamp = function (returnType) {
 	var errorMessage = "Called getTimestamp() on a dojo.uuid.Uuid that was not a TIME_BASED UUID.";
 	dojo.lang.assert(this.getVersion() == dojo.uuid.Uuid.Version.TIME_BASED, errorMessage);
-	
-	if (!returnType) {returnType = null};
+	if (!returnType) {
+		returnType = null;
+	}
 	switch (returnType) {
-		case "string":
-		case String:
-			return this.getTimestamp(Date).toUTCString(); // String (e.g. "Mon, 16 Jan 2006 20:21:41 GMT")
-			break;
-		case "hex":
-			// Return a 15-character string of hex digits containing the 
-			// timestamp for this UUID, with the high-order bits first.
-			if (!this._timestampAsHexString) {
-				var arrayOfStrings = this._uuidString.split('-');
-				var hexTimeLow = arrayOfStrings[0];
-				var hexTimeMid = arrayOfStrings[1];
-				var hexTimeHigh = arrayOfStrings[2];
-			
-				// Chop off the leading "1" character, which is the UUID 
-				// version number for time-based UUIDs.
-				hexTimeHigh = hexTimeHigh.slice(1);
-			
-				this._timestampAsHexString = hexTimeHigh + hexTimeMid + hexTimeLow;
-				dojo.lang.assert(this._timestampAsHexString.length == 15);
-			}
-			return this._timestampAsHexString; // String (e.g. "1da86cdb4308fb0")
-			break;
-		case null: // no returnType was specified, so default to Date
-		case "date":
-		case Date:
-			// Return a JavaScript Date object. 
-			if (!this._timestampAsDate) {
-				var GREGORIAN_CHANGE_OFFSET_IN_HOURS = 3394248;
-			
-				var arrayOfParts = this._uuidString.split('-');
-				var timeLow = parseInt(arrayOfParts[0], dojo.uuid.Uuid.HEX_RADIX);
-				var timeMid = parseInt(arrayOfParts[1], dojo.uuid.Uuid.HEX_RADIX);
-				var timeHigh = parseInt(arrayOfParts[2], dojo.uuid.Uuid.HEX_RADIX);
-				var hundredNanosecondIntervalsSince1582 = timeHigh & 0x0FFF;
-				hundredNanosecondIntervalsSince1582 <<= 16;
-				hundredNanosecondIntervalsSince1582 += timeMid;
-				// What we really want to do next is shift left 32 bits, but the 
-				// result will be too big to fit in an int, so we'll multiply by 2^32,
-				// and the result will be a floating point approximation.
-				hundredNanosecondIntervalsSince1582 *= 0x100000000;
-				hundredNanosecondIntervalsSince1582 += timeLow;
-				var millisecondsSince1582 = hundredNanosecondIntervalsSince1582 / 10000;
-			
-				// Again, this will be a floating point approximation.
-				// We can make things exact later if we need to.
-				var secondsPerHour = 60 * 60;
-				var hoursBetween1582and1970 = GREGORIAN_CHANGE_OFFSET_IN_HOURS;
-				var secondsBetween1582and1970 = hoursBetween1582and1970 * secondsPerHour;
-				var millisecondsBetween1582and1970 = secondsBetween1582and1970 * 1000;
-				var millisecondsSince1970 = millisecondsSince1582 - millisecondsBetween1582and1970;
-			
-				this._timestampAsDate = new Date(millisecondsSince1970);
-			}
-			return this._timestampAsDate; // Date
-			break;
-		default:
-			// we got passed something other than a valid returnType
-			dojo.lang.assert(false, "The getTimestamp() method dojo.uuid.Uuid was passed a bogus returnType: " + returnType);
-			break;
+	  case "string":
+	  case String:
+		return this.getTimestamp(Date).toUTCString();
+		break;
+	  case "hex":
+		if (!this._timestampAsHexString) {
+			var arrayOfStrings = this._uuidString.split("-");
+			var hexTimeLow = arrayOfStrings[0];
+			var hexTimeMid = arrayOfStrings[1];
+			var hexTimeHigh = arrayOfStrings[2];
+			hexTimeHigh = hexTimeHigh.slice(1);
+			this._timestampAsHexString = hexTimeHigh + hexTimeMid + hexTimeLow;
+			dojo.lang.assert(this._timestampAsHexString.length == 15);
+		}
+		return this._timestampAsHexString;
+		break;
+	  case null:
+	  case "date":
+	  case Date:
+		if (!this._timestampAsDate) {
+			var GREGORIAN_CHANGE_OFFSET_IN_HOURS = 3394248;
+			var arrayOfParts = this._uuidString.split("-");
+			var timeLow = parseInt(arrayOfParts[0], dojo.uuid.Uuid.HEX_RADIX);
+			var timeMid = parseInt(arrayOfParts[1], dojo.uuid.Uuid.HEX_RADIX);
+			var timeHigh = parseInt(arrayOfParts[2], dojo.uuid.Uuid.HEX_RADIX);
+			var hundredNanosecondIntervalsSince1582 = timeHigh & 4095;
+			hundredNanosecondIntervalsSince1582 <<= 16;
+			hundredNanosecondIntervalsSince1582 += timeMid;
+			hundredNanosecondIntervalsSince1582 *= 4294967296;
+			hundredNanosecondIntervalsSince1582 += timeLow;
+			var millisecondsSince1582 = hundredNanosecondIntervalsSince1582 / 10000;
+			var secondsPerHour = 60 * 60;
+			var hoursBetween1582and1970 = GREGORIAN_CHANGE_OFFSET_IN_HOURS;
+			var secondsBetween1582and1970 = hoursBetween1582and1970 * secondsPerHour;
+			var millisecondsBetween1582and1970 = secondsBetween1582and1970 * 1000;
+			var millisecondsSince1970 = millisecondsSince1582 - millisecondsBetween1582and1970;
+			this._timestampAsDate = new Date(millisecondsSince1970);
+		}
+		return this._timestampAsDate;
+		break;
+	  default:
+		dojo.lang.assert(false, "The getTimestamp() method dojo.uuid.Uuid was passed a bogus returnType: " + returnType);
+		break;
 	}
 };
 
+
 __CPAN_FILE__ src/uuid/RandomGenerator.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -96589,35 +67607,18 @@
 */
 
 dojo.provide("dojo.uuid.RandomGenerator");
-
-dojo.uuid.RandomGenerator = new function() {
-	this.generate = function(/* constructor? */ returnType) {
-		// summary: 
-		//   This function generates random UUIDs, meaning "version 4" UUIDs.
-		// description: 
-		//   A typical generated value would be something like this:
-		//   "3b12f1df-5232-4804-897e-917bf397618a"
-		// returnType: The type of object to return. Usually String or dojo.uuid.Uuid
-
-		// examples: 
-		//   var string = dojo.uuid.RandomGenerator.generate();
-		//   var string = dojo.uuid.RandomGenerator.generate(String);
-		//   var uuid   = dojo.uuid.RandomGenerator.generate(dojo.uuid.Uuid);
-
-		dojo.unimplemented('dojo.uuid.RandomGenerator.generate');
-		// FIXME:
-		// For an algorithm to generate a random UUID, see
-		// sections 4.4 and 4.5 of RFC 4122:
-		//  http://www.ietf.org/rfc/rfc4122.txt
-		
-		var returnValue = "00000000-0000-0000-0000-000000000000"; // FIXME
+dojo.uuid.RandomGenerator = new function () {
+	this.generate = function (returnType) {
+		dojo.unimplemented("dojo.uuid.RandomGenerator.generate");
+		var returnValue = "00000000-0000-0000-0000-000000000000";
 		if (returnType && (returnType != String)) {
 			returnValue = new returnType(returnValue);
 		}
-		return returnValue; // object
+		return returnValue;
 	};
 }();
 
+
 __CPAN_FILE__ src/uuid/NilGenerator.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -96630,27 +67631,17 @@
 */
 
 dojo.provide("dojo.uuid.NilGenerator");
-
-dojo.uuid.NilGenerator = new function() {
-	this.generate = function(/* constructor? */ returnType) {
-		// summary: 
-		//   This function returns the Nil UUID: "00000000-0000-0000-0000-000000000000".
-		// description: 
-		//   The Nil UUID is described in section 4.1.7 of
-		//   RFC 4122: http://www.ietf.org/rfc/rfc4122.txt
-		// returnType: The type of object to return. Usually String or dojo.uuid.Uuid
-
-		// examples: 
-		//   var string = dojo.uuid.NilGenerator.generate();
-		//   var string = dojo.uuid.NilGenerator.generate(String);
-		//   var uuid   = dojo.uuid.NilGenerator.generate(dojo.uuid.Uuid);
+dojo.uuid.NilGenerator = new function () {
+	this.generate = function (returnType) {
 		var returnValue = "00000000-0000-0000-0000-000000000000";
 		if (returnType && (returnType != String)) {
 			returnValue = new returnType(returnValue);
 		}
-		return returnValue; // object
+		return returnValue;
 	};
 }();
+
+
 __CPAN_FILE__ src/uuid/__package__.js
 /*
 	Copyright (c) 2004-2006, The Dojo Foundation
@@ -96662,16 +67653,7 @@
 		http://dojotoolkit.org/community/licensing.shtml
 */
 
-dojo.kwCompoundRequire({
-	common: [
-		"dojo.uuid.Uuid",
-		"dojo.uuid.LightweightGenerator",
-		"dojo.uuid.RandomGenerator",
-		"dojo.uuid.TimeBasedGenerator",
-		"dojo.uuid.NameBasedGenerator",
-		"dojo.uuid.NilGenerator"
-	]
-});
+dojo.kwCompoundRequire({common:["dojo.uuid.Uuid", "dojo.uuid.LightweightGenerator", "dojo.uuid.RandomGenerator", "dojo.uuid.TimeBasedGenerator", "dojo.uuid.NameBasedGenerator", "dojo.uuid.NilGenerator"]});
 dojo.provide("dojo.uuid.*");
 
 
@@ -96687,54 +67669,20 @@
 */
 
 dojo.provide("dojo.uuid.LightweightGenerator");
-
-/*
- * summary:
- *   The LightweightGenerator is intended to be small and fast,
- *   but not necessarily good.
- * 
- * description:
- *   Small: The LightweightGenerator has a small footprint. 
- *   Once comments are stripped, it's only about 25 lines of 
- *   code, and it doesn't dojo.require() any other packages.
- *
- *   Fast: The LightweightGenerator can generate lots of new 
- *   UUIDs fairly quickly (at least, more quickly than the other 
- *   dojo UUID generators).
- *
- *   Not necessarily good: We use Math.random() as our source
- *   of randomness, which may or may not provide much randomness. 
- */
- 
-dojo.uuid.LightweightGenerator = new function() {
+dojo.uuid.LightweightGenerator = new function () {
 	var HEX_RADIX = 16;
-
 	function _generateRandomEightCharacterHexString() {
-		// Make random32bitNumber be a randomly generated floating point number
-		// between 0 and (4,294,967,296 - 1), inclusive.
-		var random32bitNumber = Math.floor( (Math.random() % 1) * Math.pow(2, 32) );
+		var random32bitNumber = Math.floor((Math.random() % 1) * Math.pow(2, 32));
 		var eightCharacterHexString = random32bitNumber.toString(HEX_RADIX);
 		while (eightCharacterHexString.length < 8) {
 			eightCharacterHexString = "0" + eightCharacterHexString;
 		}
-		return eightCharacterHexString; // for example: "3B12F1DF"
+		return eightCharacterHexString;
 	}
-
-	this.generate = function(/* constructor? */ returnType) {
-		// summary: 
-		//   This function generates random UUIDs, meaning "version 4" UUIDs.
-		// description: 
-		//   A typical generated value would be something like this:
-		//   "3b12f1df-5232-4804-897e-917bf397618a"
-		// returnType: The type of object to return. Usually String or dojo.uuid.Uuid
-
-		// examples: 
-		//   var string = dojo.uuid.LightweightGenerator.generate();
-		//   var string = dojo.uuid.LightweightGenerator.generate(String);
-		//   var uuid   = dojo.uuid.LightweightGenerator.generate(dojo.uuid.Uuid);
+	this.generate = function (returnType) {
 		var hyphen = "-";
-		var versionCodeForRandomlyGeneratedUuids = "4"; // 8 == binary2hex("0100")
-		var variantCodeForDCEUuids = "8"; // 8 == binary2hex("1000")
+		var versionCodeForRandomlyGeneratedUuids = "4";
+		var variantCodeForDCEUuids = "8";
 		var a = _generateRandomEightCharacterHexString();
 		var b = _generateRandomEightCharacterHexString();
 		b = b.substring(0, 4) + hyphen + versionCodeForRandomlyGeneratedUuids + b.substring(5, 8);
@@ -96750,3 +67698,4 @@
 	};
 }();
 
+

Modified: trunk/HTML-Dojo/lib/HTML/Dojo.pm
===================================================================
--- trunk/HTML-Dojo/lib/HTML/Dojo.pm	2007-03-27 22:18:40 UTC (rev 6218)
+++ trunk/HTML-Dojo/lib/HTML/Dojo.pm	2007-03-28 10:48:55 UTC (rev 6219)
@@ -141,15 +141,12 @@
         browserio
         charting
         core
-        dashboard
-        dojoWebsite
         editor
         event
         event_and_io
         kitchen_sink
-        lfx
         minimal
-        moxie
+        src
         storage
         widget
         xdomain-ajax

Modified: trunk/HTML-Dojo/t/file.t
===================================================================
--- trunk/HTML-Dojo/t/file.t	2007-03-27 22:18:40 UTC (rev 6218)
+++ trunk/HTML-Dojo/t/file.t	2007-03-28 10:48:55 UTC (rev 6219)
@@ -19,7 +19,7 @@
 {
     my $file = $dojo->file( 'src/bootstrap1.js' );
     
-    ok( $file =~ /Copyright/ );
-    ok( $file =~ /bootstrap1.js/ );
+    ok( $file =~ /dojo\.global = function/ );
+    ok( $file =~ /dojo\.version = / );
 }
 




More information about the Catalyst-commits mailing list