diff options
-rw-r--r-- | install/ui/build/dojo/dojo.js | 2 | ||||
-rw-r--r-- | install/ui/doc/categories.json | 3 | ||||
-rw-r--r-- | install/ui/src/dojo.profile.js | 1 | ||||
-rw-r--r-- | install/ui/src/freeipa/datetime.js | 217 | ||||
-rw-r--r-- | install/ui/src/freeipa/field.js | 116 | ||||
-rw-r--r-- | install/ui/src/freeipa/host.js | 25 | ||||
-rw-r--r-- | install/ui/src/freeipa/ipa.js | 39 | ||||
-rw-r--r-- | install/ui/src/freeipa/user.js | 2 | ||||
-rw-r--r-- | install/ui/src/freeipa/widget.js | 18 | ||||
-rw-r--r-- | install/ui/src/webui.profile.js | 1 | ||||
-rw-r--r-- | install/ui/test/data/ipa_init.json | 1 | ||||
-rw-r--r-- | install/ui/test/utils_tests.js | 91 | ||||
-rw-r--r-- | ipalib/plugins/internal.py | 1 | ||||
-rw-r--r-- | ipatests/test_webui/ui_driver.py | 2 |
14 files changed, 448 insertions, 71 deletions
diff --git a/install/ui/build/dojo/dojo.js b/install/ui/build/dojo/dojo.js index 89d9ff191..5b38c81c9 100644 --- a/install/ui/build/dojo/dojo.js +++ b/install/ui/build/dojo/dojo.js @@ -1 +1 @@ -(function(e,t){var n=function(){},r=function(e){for(var t in e)return 0;return 1},i={}.toString,s=function(e){return i.call(e)=="[object Function]"},o=function(e){return i.call(e)=="[object String]"},u=function(e){return i.call(e)=="[object Array]"},a=function(e,t){if(e)for(var n=0;e[n];)t(e[n++])},f=function(e,t){for(var n in t)e[n]=t[n];return e},l=function(e,t){return f(new Error(e),{src:"dojoLoader",info:t})},c=1,h=function(){return"_"+c++},p=function(e,t,n){return xt(e,t,n,0,p)},d=this,v=d.document,m=v&&v.createElement("DiV"),g=p.has=function(e){return s(y[e])?y[e]=y[e](d,v,m):y[e]},y=g.cache=t.hasCache;g.add=function(e,t,n,r){return(y[e]===undefined||r)&&(y[e]=t),n&&g(e)},0,0;for(var x in e.has)g.add(x,e.has[x],0,1);var T=1,N=2,C=3,k=4,L=5,A=0,O="sync",M="xd",_=[],D=0,P=n,H=n,B;p.isXdUrl=n,p.initSyncLoader=function(e,t,n){return D||(D=e,P=t,H=n),{sync:O,requested:T,arrived:N,nonmodule:C,executing:k,executed:L,syncExecStack:_,modules:Z,execQ:Nt,getModule:Ft,injectModule:ln,setArrived:At,signal:X,finishExec:Gt,execModule:Zt,dojoRequirePlugin:D,getLegacyMode:function(){return A},guardCheckComplete:tn}};var j=location.protocol,F=location.host;p.isXdUrl=function(e){if(/^\./.test(e))return!1;if(/^\/\//.test(e))return!0;var t=e.match(/^([^\/\:]+\:)\/+([^\/]+)/);return t&&(t[1]!=j||F&&t[2]!=F)},1,g.add("dojo-force-activex-xhr",!v.addEventListener&&window.location.protocol=="file:"),g.add("native-xhr",typeof XMLHttpRequest!="undefined");if(g("native-xhr")&&!g("dojo-force-activex-xhr"))B=function(){return new XMLHttpRequest};else{for(var I=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],q,S=0;S<3;)try{q=I[S++];if(new ActiveXObject(q))break}catch(R){}B=function(){return new ActiveXObject(q)}}p.getXhr=B,g.add("dojo-gettext-api",1),p.getText=function(e,t,n){var r=B();r.open("GET",rn(e),!1),r.send(null);if(r.status==200||!location.host&&!r.status)return n&&n(r.responseText,t),r.responseText;throw l("xhrFailed",r.status)};var U=new Function("return eval(arguments[0]);");p.eval=function(e,t){return U(e+"\r\n////@ sourceURL="+t)};var z={},W="error",X=p.signal=function(e,t){var n=z[e];a(n&&n.slice(0),function(e){e.apply(null,u(t)?t:[t])})},V=p.on=function(e,t){var n=z[e]||(z[e]=[]);return n.push(t),{remove:function(){for(var e=0;e<n.length;e++)if(n[e]===t){n.splice(e,1);return}}}},$=[],J={},K=[],Q={},G=p.map={},Y=[],Z={},et="",tt={},nt="url:",rt={},it={},st=0,ot=function(e){var t,n,r,i,s;for(t in rt)n=rt[t],r=t.match(/^url\:(.+)/),r?tt[nt+qt(r[1],e)]=n:t=="*now"?i=n:t!="*noref"&&(s=Ht(t,e),tt[s.mid]=tt[nt+s.url]=n);i&&i(Tt(e)),rt={}},ut=function(e){return e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,function(e){return"\\"+e})},at=function(e,t){t.splice(0,t.length);for(var n in e)t.push([n,e[n],new RegExp("^"+ut(n)+"(/|$)"),n.length]);return t.sort(function(e,t){return t[3]-e[3]}),t},ft=function(e,t){a(e,function(e){t.push([o(e[0])?new RegExp("^"+ut(e[0])+"$"):e[0],e[1]])})},lt=function(e){var t=e.name;t||(t=e,e={name:t}),e=f({main:"main"},e),e.location=e.location?e.location:t,e.packageMap&&(G[t]=e.packageMap),e.main.indexOf("./")||(e.main=e.main.substring(2)),Q[t]=e},ct=[],ht=function(e,t,n){for(var r in e){r=="waitSeconds"&&(p.waitms=(e[r]||0)*1e3),r=="cacheBust"&&(et=e[r]?o(e[r])?e[r]:(new Date).getTime()+"":"");if(r=="baseUrl"||r=="combo")p[r]=e[r];if(r=="async"){var i=e[r];p.legacyMode=A=o(i)&&/sync|legacyAsync/.test(i)?i:i?!1:O,p.async=!A}e[r]!==y&&(p.rawConfig[r]=e[r],r!="has"&&g.add("config-"+r,e[r],0,t))}p.baseUrl||(p.baseUrl="./"),/\/$/.test(p.baseUrl)||(p.baseUrl+="/");for(r in e.has)g.add(r,e.has[r],0,t);a(e.packages,lt);for(b in e.packagePaths)a(e.packagePaths[b],function(e){var t=b+"/"+e;o(e)&&(e={name:e}),e.location=t,lt(e)});at(f(G,e.map),Y),a(Y,function(e){e[1]=at(e[1],[]),e[0]=="*"&&(Y.star=e)}),at(f(J,e.paths),K),ft(e.aliases,$);if(t)ct.push({config:e.config});else for(r in e.config){var s=Ft(r,n);s.config=f(s.config||{},e.config[r])}e.cache&&(ot(),rt=e.cache,e.cache["*noref"]&&ot()),X("config",[e,p.rawConfig])};if(g("dojo-cdn")||1){var pt=v.getElementsByTagName("script"),S=0,dt,vt,mt,gt;while(S<pt.length){dt=pt[S++],(mt=dt.getAttribute("src"))&&(gt=mt.match(/(((.*)\/)|^)dojo\.js(\W|$)/i))&&(vt=gt[3]||"",t.baseUrl=t.baseUrl||vt,st=dt);if(mt=dt.getAttribute("data-dojo-config")||dt.getAttribute("djConfig"))it=p.eval("({ "+mt+" })","data-dojo-config"),st=dt}}p.rawConfig={},ht(t,1),g("dojo-cdn")&&(Q.dojo.location=vt,vt&&(vt+="/"),Q.dijit.location=vt+"../dijit/",Q.dojox.location=vt+"../dojox/"),ht(e,1),ht(it,1);var St=function(e){tn(function(){a(e.deps,ln)})},xt=function(e,t,r,i,s){var a,c;if(o(e)){a=Ft(e,i,!0);if(a&&a.executed)return a.result;throw l("undefinedModule",e)}u(e)||(ht(e,0,i),e=t,t=r);if(u(e))if(!e.length)t&&t();else{c="require*"+h();for(var d,v=[],m=0;m<e.length;)d=e[m++],v.push(Ft(d,i));a=f(Dt("",c,0,""),{injected:N,deps:v,def:t||n,require:i?i.require:p,gc:1}),Z[a.mid]=a,St(a);var g=en&&A!=O;tn(function(){Zt(a,g)}),a.executed||Nt.push(a),nn()}return s},Tt=function(e){if(!e)return p;var t=e.require;return t||(t=function(n,r,i){return xt(n,r,i,e,t)},e.require=f(t,p),t.module=e,t.toUrl=function(t){return qt(t,e)},t.toAbsMid=function(t){return It(t,e)},t.syncLoadNls=function(t){var n=Ht(t,e),r=Z[n.mid];if(!r||!r.executed)on=tt[n.mid]||tt[nt+n.url],on&&(fn(on),r=Z[n.mid]);return r&&r.executed&&r.result}),t},Nt=[],Ct=[],kt={},Lt=function(e){e.injected=T,kt[e.mid]=1,e.url&&(kt[e.url]=e.pack||1),vn()},At=function(e){e.injected=N,delete kt[e.mid],e.url&&delete kt[e.url],r(kt)&&(dn(),A==M&&(A=O))},Ot=p.idle=function(){return!Ct.length&&r(kt)&&!Nt.length&&!en},Mt=function(e,t){if(t)for(var n=0;n<t.length;n++)if(t[n][2].test(e))return t[n];return 0},_t=function(e){var t=[],n,r;e=e.replace(/\\/g,"/").split("/");while(e.length)n=e.shift(),n==".."&&t.length&&r!=".."?(t.pop(),r=t[t.length-1]):n!="."&&t.push(r=n);return t.join("/")},Dt=function(e,t,n,r){var i=p.isXdUrl(r);return{pid:e,mid:t,pack:n,url:r,executed:0,def:0,isXd:i,isAmd:!!(i||Q[e]&&Q[e].isAmd)}},Pt=function(e,t,n,r,i,o,u,f,c){var h,p,d,v,m,y,b,w;w=e,b=/^\./.test(e);if(/(^\/)|(\:)|(\.js$)/.test(e)||b&&!t)return Dt(0,e,0,e);e=_t(b?t.mid+"/../"+e:e);if(/^\./.test(e))throw l("irrationalPath",e);t&&(v=Mt(t.mid,o)),v=v||o.star,v=v&&Mt(e,v[1]),v&&(e=v[1]+e.substring(v[3])),gt=e.match(/^([^\/]+)(\/(.+))?$/),h=gt?gt[1]:"",(p=n[h])?e=h+"/"+(d=gt[3]||p.main):h="";var E=0,S=0;return a(f,function(t){var n=e.match(t[0]);n&&n.length>E&&(S=s(t[1])?e.replace(t[0],t[1]):t[1])}),S?Pt(S,0,n,r,i,o,u,f,c):(y=r[e],y?c?Dt(y.pid,y.mid,y.pack,y.url):r[e]:(v=Mt(e,u),v?m=v[1]+e.substring(v[3]):h?m=p.location+"/"+d:g("config-tlmSiblingOfDojo")?m="../"+e:m=e,/(^\/)|(\:)/.test(m)||(m=i+m),m+=".js",Dt(h,e,p,_t(m))))},Ht=function(e,t){return Pt(e,t,Q,Z,p.baseUrl,Y,K,$)},Bt=function(e,t,n){return e.normalize?e.normalize(t,function(e){return It(e,n)}):It(t,n)},jt=0,Ft=function(e,t,n){var r,i,s,o;return r=e.match(/^(.+?)\!(.*)$/),r?(i=Ft(r[1],t,n),A==O&&!i.executed&&(ln(i),i.injected===N&&!i.executed&&tn(function(){Zt(i)}),i.executed?Kt(i):Nt.unshift(i)),i.executed===L&&!i.load&&Kt(i),i.load?(s=Bt(i,r[2],t),e=i.mid+"!"+(i.dynamic?++jt+"!":"")+s):(s=r[2],e=i.mid+"!"+ ++jt+"!waitingForPlugin"),o={plugin:i,mid:e,req:Tt(t),prid:s}):o=Ht(e,t),Z[o.mid]||!n&&(Z[o.mid]=o)},It=p.toAbsMid=function(e,t){return Ht(e,t).mid},qt=p.toUrl=function(e,t){var n=Ht(e+"/x",t),r=n.url;return rn(n.pid===0?e:r.substring(0,r.length-5))},Rt={injected:N,executed:L,def:C,result:C},Ut=function(e){return Z[e]=f({mid:e},Rt)},zt=Ut("require"),Wt=Ut("exports"),Xt=Ut("module"),Vt=function(e,t){p.trace("loader-run-factory",[e.mid]);var n=e.def,r;_.unshift(e);if(g("config-dojo-loader-catches"))try{r=s(n)?n.apply(null,t):n}catch(i){X(W,e.result=l("factoryThrew",[e,i]))}else r=s(n)?n.apply(null,t):n;e.result=r===undefined&&e.cjs?e.cjs.exports:r,_.shift(e)},$t={},Jt=0,Kt=function(e){var t=e.result;return e.dynamic=t.dynamic,e.normalize=t.normalize,e.load=t.load,e},Qt=function(e){var t={};a(e.loadQ,function(n){var r=Bt(e,n.prid,n.req.module),i=e.dynamic?n.mid.replace(/waitingForPlugin$/,r):e.mid+"!"+r,s=f(f({},n),{mid:i,prid:r,injected:0});Z[i]||sn(Z[i]=s),t[n.mid]=Z[i],At(n),delete Z[n.mid]}),e.loadQ=0;var n=function(e){for(var n,r=e.deps||[],i=0;i<r.length;i++)n=t[r[i].mid],n&&(r[i]=n)};for(var r in Z)n(Z[r]);a(Nt,n)},Gt=function(e){p.trace("loader-finish-exec",[e.mid]),e.executed=L,e.defOrder=Jt++,a(e.provides,function(e){e()}),e.loadQ&&(Kt(e),Qt(e));for(S=0;S<Nt.length;)Nt[S]===e?Nt.splice(S,1):S++;/^require\*/.test(e.mid)&&delete Z[e.mid]},Yt=[],Zt=function(e,t){if(e.executed===k)return p.trace("loader-circular-dependency",[Yt.concat(e.mid).join("->")]),!e.def||t?$t:e.cjs&&e.cjs.exports;if(!e.executed){if(!e.def)return $t;var n=e.mid,r=e.deps||[],i,s,o=[],u=0;e.executed=k;while(i=r[u++]){s=i===zt?Tt(e):i===Wt?e.cjs.exports:i===Xt?e.cjs:Zt(i,t);if(s===$t)return e.executed=0,p.trace("loader-exec-module",["abort",n]),0,$t;o.push(s)}Vt(e,o),Gt(e),0}return e.result},en=0,tn=function(e){try{en++,e()}finally{en--}Ot()&&X("idle",[])},nn=function(){if(en)return;tn(function(){P();for(var e,t,n=0;n<Nt.length;)e=Jt,t=Nt[n],Zt(t),e!=Jt?(P(),n=0):n++})};g("dojo-loader-eval-hint-url")===undefined&&g.add("dojo-loader-eval-hint-url",1);var rn=function(e){return e+="",e+(et?(/\?/.test(e)?"&":"?")+et:"")},sn=function(e){var t=e.plugin;t.executed===L&&!t.load&&Kt(t);var n=function(t){e.result=t,At(e),Gt(e),nn()};t.load?t.load(e.prid,e.req,n):t.loadQ?t.loadQ.push(e):(t.loadQ=[e],Nt.unshift(t),ln(t))},on=0,un=0,an=0,fn=function(e,t){g("config-stripStrict")&&(e=e.replace(/"use strict"/g,"")),an=1;if(g("config-dojo-loader-catches"))try{e===on?on.call(null):p.eval(e,g("dojo-loader-eval-hint-url")?t.url:t.mid)}catch(n){X(W,l("evalModuleThrew",t))}else e===on?on.call(null):p.eval(e,g("dojo-loader-eval-hint-url")?t.url:t.mid);an=0},ln=function(e){var t=e.mid,n=e.url;if(e.executed||e.injected||kt[t]||e.url&&(e.pack&&kt[e.url]===e.pack||kt[e.url]==1))return;Lt(e);if(e.plugin){sn(e);return}var i=function(){hn(e);if(e.injected!==N){if(g("dojo-enforceDefine")){X(W,l("noDefine",e));return}At(e),f(e,Rt),p.trace("loader-define-nonmodule",[e.url])}A?!_.length&&nn():nn()};on=tt[t]||tt[nt+e.url];if(on){p.trace("loader-inject",["cache",e.mid,n]),fn(on,e),i();return}if(A)if(e.isXd)A==O&&(A=M);else if(!e.isAmd||A==O){var s=function(r){if(A==O){_.unshift(e),fn(r,e),_.shift(),hn(e),e.cjs||(At(e),Gt(e));if(e.finish){var s=t+"*finish",o=e.finish;delete e.finish,bn(s,["dojo",("dojo/require!"+o.join(",")).replace(/\./g,"/")],function(e){a(o,function(t){e.require(t)})}),Nt.unshift(Ft(s))}i()}else r=H(e,r),r?(fn(r,e),i()):(un=e,p.injectUrl(rn(n),i,e),un=0)};p.trace("loader-inject",["xhr",e.mid,n,A!=O]);if(g("config-dojo-loader-catches"))try{p.getText(n,A!=O,s)}catch(o){X(W,l("xhrInjectFailed",[e,o]))}else p.getText(n,A!=O,s);return}p.trace("loader-inject",["script",e.mid,n]),un=e,p.injectUrl(rn(n),i,e),un=0},cn=function(e,t,n){p.trace("loader-define-module",[e.mid,t]);var r=e.mid;if(e.injected===N)return X(W,l("multipleDefine",e)),e;f(e,{deps:t,def:n,cjs:{id:e.mid,uri:e.url,exports:e.result={},setExports:function(t){e.cjs.exports=t},config:function(){return e.config}}});for(var i=0;t[i];i++)t[i]=Ft(t[i],e);return A&&!kt[r]&&(St(e),Nt.push(e),nn()),At(e),!s(n)&&!t.length&&(e.result=n,Gt(e)),e},hn=function(e,t){var n=[],r,i;while(Ct.length)i=Ct.shift(),t&&(i[0]=t.shift()),r=i[0]&&Ft(i[0])||e,n.push([r,i[1],i[2]]);ot(e),a(n,function(e){St(cn.apply(null,e))})},pn=0,dn=n,vn=n;dn=function(){pn&&clearTimeout(pn),pn=0},vn=function(){dn(),p.waitms&&(pn=window.setTimeout(function(){dn(),X(W,l("timeout",kt))},p.waitms))},g.add("ie-event-behavior",v.attachEvent&&typeof Windows=="undefined"&&(typeof opera=="undefined"||opera.toString()!="[object Opera]"));var mn=function(e,t,n,r){return g("ie-event-behavior")?(e.attachEvent(n,r),function(){e.detachEvent(n,r)}):(e.addEventListener(t,r,!1),function(){e.removeEventListener(t,r,!1)})},gn=mn(window,"load","onload",function(){p.pageLoaded=1,v.readyState!="complete"&&(v.readyState="complete"),gn()}),pt=v.getElementsByTagName("script"),S=0,dt;while(!st)/^dojo/.test((dt=pt[S++])&&dt.type)||(st=dt);p.injectUrl=function(e,t,n){var r=n.node=v.createElement("script"),i=function(e){e=e||window.event;var n=e.target||e.srcElement;if(e.type==="load"||/complete|loaded/.test(n.readyState))s(),o(),t&&t()},s=mn(r,"load","onreadystatechange",i),o=mn(r,"error","onerror",function(t){s(),o(),X(W,l("scriptError",[e,t]))});return r.type="text/javascript",r.charset="utf-8",r.src=e,st.parentNode.insertBefore(r,st),r},p.log=function(){try{for(var e=0;e<arguments.length;e++)console.log(arguments[e])}catch(t){}},p.trace=n;var bn=function(e,t,n){var r=arguments.length,i=["require","exports","module"],a=[0,e,t];r==1?a=[0,s(e)?i:[],e]:r==2&&o(e)?a=[e,s(t)?i:[],t]:r==3&&(a=[e,t,n]),p.trace("loader-define",a.slice(0,2));var f=a[0]&&Ft(a[0]),c;if(f&&!kt[f.mid])St(cn(f,a[1],a[2]));else if(!g("ie-event-behavior")||!1||an)Ct.push(a);else{f=f||un;if(!f)for(e in kt){c=Z[e];if(c&&c.node&&c.node.readyState==="interactive"){f=c;break}}f?(ot(f),St(cn(f,a[1],a[2]))):X(W,l("ieDefineFailed",a[0])),nn()}};bn.amd={vendor:"dojotoolkit.org"},f(f(p,t.loaderPatch),e.loaderPatch),V(W,function(e){try{console.error(e);if(e instanceof Error){for(var t in e)console.log(t+":",e[t]);console.log(".")}}catch(n){}}),f(p,{uid:h,cache:tt,packs:Q});if(d.define){X(W,l("defineAlreadyDefined",0));return}d.define=bn,d.require=p,a(ct,function(e){ht(e)});var Sn=it.deps||e.deps||t.deps,xn=it.callback||e.callback||t.callback;p.boot=Sn||xn?[Sn||[],xn]:0})(this.dojoConfig||this.djConfig||this.require||{},{async:1,hasCache:{"config-deferredInstrumentation":0,"config-dojo-loader-catches":0,"config-selectorEngine":"lite","config-tlmSiblingOfDojo":0,"dojo-amd-factory-scan":0,"dojo-built":1,"dojo-combo-api":0,"dojo-config-api":1,"dojo-config-require":0,"dojo-debug-messages":0,"dojo-dom-ready-api":1,"dojo-firebug":0,"dojo-guarantee-console":1,"dojo-has-api":1,"dojo-inject-api":1,"dojo-loader":1,"dojo-log-api":0,"dojo-modulePaths":0,"dojo-moduleUrl":0,"dojo-publish-privates":0,"dojo-requirejs-api":0,"dojo-sniff":0,"dojo-sync-loader":0,"dojo-test-sniff":0,"dojo-timeout-api":0,"dojo-trace-api":0,"dojo-undef-api":0,"dojo-v1x-i18n-Api":1,dom:1,"extend-dojo":1,"host-browser":1},packages:[{location:".",name:"dojo"}]}),require({cache:{"dojo/domReady":function(){define(["./has"],function(e){function a(e){o.push(e),s&&f()}function f(){if(u)return;u=!0;while(o.length)try{o.shift()(n)}catch(e){console.log("Error on domReady callback: "+e)}u=!1,a._onQEmpty()}var t=this,n=document,r={loaded:1,complete:1},i=typeof n.readyState!="string",s=!!r[n.readyState],o=[],u;a.load=function(e,t,n){a(n)},a._Q=o,a._onQEmpty=function(){},i&&(n.readyState="loading");if(!s){var l=[],c=function(e){e=e||t.event;if(s||e.type=="readystatechange"&&!r[n.readyState])return;i&&(n.readyState="complete"),s=1,f()},h=function(e,t){e.addEventListener(t,c,!1),o.push(function(){e.removeEventListener(t,c,!1)})};if(!e("dom-addeventlistener")){h=function(e,t){t="on"+t,e.attachEvent(t,c),o.push(function(){e.detachEvent(t,c)})};var p=n.createElement("div");try{p.doScroll&&t.frameElement===null&&l.push(function(){try{return p.doScroll("left"),1}catch(e){}})}catch(d){}}h(n,"DOMContentLoaded"),h(t,"load"),"onreadystatechange"in n?h(n,"readystatechange"):i||l.push(function(){return r[n.readyState]});if(l.length){var v=function(){if(s)return;var e=l.length;while(e--)if(l[e]()){c("poller");return}setTimeout(v,30)};v()}}return a})},"dojo/has":function(){define(["require","module"],function(e,t){var n=e.has||function(){};n.add("dom-addeventlistener",!!document.addEventListener),n.add("touch","ontouchstart"in document||window.navigator.msMaxTouchPoints>0),n.add("device-width",screen.availWidth||innerWidth);var a=document.createElement("form");return n.add("dom-attributes-explicit",a.attributes.length==0),n.add("dom-attributes-specified-flag",a.attributes.length>0&&a.attributes.length<40),n.clearElement=function(e){return e.innerHTML="",e},n.normalize=function(e,t){var r=e.match(/[\?:]|[^:\?]*/g),i=0,s=function(e){var t=r[i++];return t==":"?0:r[i++]=="?"?!e&&n(t)?s():(s(!0),s(e)):t||0};return e=s(),e&&t(e)},n.load=function(e,t,n){e?t([e],n):n()},n})},"dojo/_base/declare":function(){define(["./kernel","../has","./lang"],function(e,t,n){function f(e,t){throw new Error("declare"+(t?" "+t:"")+": "+e)}function l(e,t){var n=[],r=[{cls:0,refs:[]}],i={},o=1,a=e.length,l=0,c,h,p,d,v,m,g,y;for(;l<a;++l){p=e[l],p?s.call(p)!="[object Function]"&&f("mixin #"+l+" is not a callable constructor.",t):f("mixin #"+l+" is unknown. Did you use dojo.require to pull it in?",t),h=p._meta?p._meta.bases:[p],d=0;for(c=h.length-1;c>=0;--c)v=h[c].prototype,v.hasOwnProperty("declaredClass")||(v.declaredClass="uniqName_"+u++),g=v.declaredClass,i.hasOwnProperty(g)||(i[g]={count:0,refs:[],cls:h[c]},++o),m=i[g],d&&d!==m&&(m.refs.push(d),++d.count),d=m;++d.count,r[0].refs.push(d)}while(r.length){d=r.pop(),n.push(d.cls),--o;while(y=d.refs,y.length==1){d=y[0];if(!d||--d.count){d=0;break}n.push(d.cls),--o}if(d)for(l=0,a=y.length;l<a;++l)d=y[l],--d.count||r.push(d)}return o&&f("can't build consistent linearization",t),p=e[0],n[0]=p?p._meta&&p===n[n.length-p._meta.bases.length]?p._meta.bases.length:1:0,n}function c(e,t,n){var r,s,o,u,l,c,h,p,d,v=this._inherited=this._inherited||{};typeof e=="string"&&(r=e,e=t,t=n),n=0,u=e.callee,r=r||u.nom,r||f("can't deduce a name to call inherited()",this.declaredClass),l=this.constructor._meta,o=l.bases,d=v.p;if(r!=a){if(v.c!==u){d=0,c=o[0],l=c._meta;if(l.hidden[r]!==u){s=l.chains,s&&typeof s[r]=="string"&&f("calling chained method with inherited: "+r,this.declaredClass);do{l=c._meta,h=c.prototype;if(l&&(h[r]===u&&h.hasOwnProperty(r)||l.hidden[r]===u))break}while(c=o[++d]);d=c?d:-1}}c=o[++d];if(c){h=c.prototype;if(c._meta&&h.hasOwnProperty(r))n=h[r];else{p=i[r];do{h=c.prototype,n=h[r];if(n&&(c._meta?h.hasOwnProperty(r):n!==p))break}while(c=o[++d])}}n=c&&n||i[r]}else{if(v.c!==u){d=0,l=o[0]._meta;if(l&&l.ctor!==u){s=l.chains,(!s||s.constructor!=="manual")&&f("calling chained constructor with inherited",this.declaredClass);while(c=o[++d]){l=c._meta;if(l&&l.ctor===u)break}d=c?d:-1}}while(c=o[++d]){l=c._meta,n=l?l.ctor:c;if(n)break}n=c&&n}v.c=n,v.p=d;if(n)return t===!0?n:n.apply(this,t||e)}function h(e,t){return typeof e=="string"?this.__inherited(e,t,!0):this.__inherited(e,!0)}function p(e,t,n){var r=this.getInherited(e,t);if(r)return r.apply(this,n||t||e)}function v(e){var t=this.constructor._meta.bases;for(var n=0,r=t.length;n<r;++n)if(t[n]===e)return!0;return this instanceof e}function m(e,r){for(var i in r)i!=a&&r.hasOwnProperty(i)&&(e[i]=r[i]);if(t("bug-for-in-skips-shadowed"))for(var s=n._extraNames,o=s.length;o;)i=s[--o],i!=a&&r.hasOwnProperty(i)&&(e[i]=r[i])}function g(e,r){var o,u;for(o in r)u=r[o],(u!==i[o]||!(o in i))&&o!=a&&(s.call(u)=="[object Function]"&&(u.nom=o),e[o]=u);if(t("bug-for-in-skips-shadowed"))for(var f=n._extraNames,l=f.length;l;)o=f[--l],u=r[o],(u!==i[o]||!(o in i))&&o!=a&&(s.call(u)=="[object Function]"&&(u.nom=o),e[o]=u);return e}function y(e){return C.safeMixin(this.prototype,e),this}function b(e,t){return C([this].concat(e),t||{})}function w(e,t){return function(){var n=arguments,r=n,i=n[0],s,o,u,a=e.length,f;if(!(this instanceof n.callee))return N(n);if(t&&(i&&i.preamble||this.preamble)){f=new Array(e.length),f[0]=n;for(o=0;;){i=n[0],i&&(s=i.preamble,s&&(n=s.apply(this,n)||n)),s=e[o].prototype,s=s.hasOwnProperty("preamble")&&s.preamble,s&&(n=s.apply(this,n)||n);if(++o==a)break;f[o]=n}}for(o=a-1;o>=0;--o)s=e[o],u=s._meta,s=u?u.ctor:s,s&&s.apply(this,f?f[o]:n);s=this.postscript,s&&s.apply(this,r)}}function E(e,t){return function(){var n=arguments,r=n,i=n[0],s;if(!(this instanceof n.callee))return N(n);t&&(i&&(s=i.preamble,s&&(r=s.apply(this,r)||r)),s=this.preamble,s&&s.apply(this,r)),e&&e.apply(this,n),s=this.postscript,s&&s.apply(this,n)}}function S(e){return function(){var t=arguments,n=0,r,i;if(!(this instanceof t.callee))return N(t);for(;r=e[n];++n){i=r._meta,r=i?i.ctor:r;if(r){r.apply(this,t);break}}r=this.postscript,r&&r.apply(this,t)}}function x(e,t,n){return function(){var r,i,s,o=0,u=1;n&&(o=t.length-1,u=-1);for(;r=t[o];o+=u)i=r._meta,s=(i?i.hidden:r.prototype)[e],s&&s.apply(this,arguments)}}function T(e){o.prototype=e.prototype;var t=new o;return o.prototype=null,t}function N(e){var t=e.callee,n=T(t);return t.apply(n,e),n}function C(e,t,o){typeof e!="string"&&(o=t,t=e,e=""),o=o||{};var u,p,g,N,k,L,A,O=1,M=t;s.call(t)=="[object Array]"?(L=l(t,e),g=L[0],O=L.length-g,t=L[O]):(L=[0],t?s.call(t)=="[object Function]"?(g=t._meta,L=L.concat(g?g.bases:t)):f("base class is not a callable constructor.",e):t!==null&&f("unknown base class. Did you use dojo.require to pull it in?",e));if(t)for(p=O-1;;--p){u=T(t);if(!p)break;g=L[p],(g._meta?m:r)(u,g.prototype),N=new Function,N.superclass=t,N.prototype=u,t=u.constructor=N}else u={};C.safeMixin(u,o),g=o.constructor,g!==i.constructor&&(g.nom=a,u.constructor=g);for(p=O-1;p;--p)g=L[p]._meta,g&&g.chains&&(A=r(A||{},g.chains));u["-chains-"]&&(A=r(A||{},u["-chains-"])),g=!A||!A.hasOwnProperty(a),L[0]=N=A&&A.constructor==="manual"?S(L):L.length==1?E(o.constructor,g):w(L,g),N._meta={bases:L,hidden:o,chains:A,parents:M,ctor:o.constructor},N.superclass=t&&t.prototype,N.extend=y,N.createSubclass=b,N.prototype=u,u.constructor=N,u.getInherited=h,u.isInstanceOf=v,u.inherited=d,u.__inherited=c,e&&(u.declaredClass=e,n.setObject(e,N));if(A)for(k in A)u[k]&&typeof A[k]=="string"&&k!=a&&(g=u[k]=x(k,L,A[k]==="after"),g.nom=k);return N}var r=n.mixin,i=Object.prototype,s=i.toString,o=new Function,u=0,a="constructor",d=e.config.isDebug?p:c;return e.safeMixin=C.safeMixin=g,e.declare=C,C})},"dojo/_base/kernel":function(){define(["../has","./config","require","module"],function(e,t,n,r){var i,s,o={},u={},a={config:t,global:this,dijit:o,dojox:u},f={dojo:["dojo",a],dijit:["dijit",o],dojox:["dojox",u]},l=n.map&&n.map[r.id.match(/[^\/]+/)[0]],c;for(s in l)f[s]?f[s][0]=l[s]:f[s]=[l[s],{}];for(s in f)c=f[s],c[1]._scopeName=c[0],t.noGlobals||(this[c[0]]=c[1]);a.scopeMap=f,a.baseUrl=a.config.baseUrl=n.baseUrl,a.isAsync=n.async,a.locale=t.locale;var h="$Rev: 43d05c6 $".match(/\d+/);a.version={major:1,minor:9,patch:1,flag:"",revision:h?+h[0]:NaN,toString:function(){var e=a.version;return e.major+"."+e.minor+"."+e.patch+e.flag+" ("+e.revision+")"}},1,Function("d","d.eval = function(){return d.global.eval ? d.global.eval(arguments[0]) : eval(arguments[0]);}")(a),a.exit=function(){},1,typeof console!="undefined"||(console={});var p=["assert","count","debug","dir","dirxml","error","group","groupEnd","info","profile","profileEnd","time","timeEnd","trace","warn","log"],d;i=0;while(d=p[i++])console[d]||function(){var e=d+"";console[e]="log"in console?function(){var t=Array.apply({},arguments);t.unshift(e+":"),console.log(t.join(" "))}:function(){},console[e]._fake=!0}();e.add("dojo-debug-messages",!!t.isDebug),a.deprecated=a.experimental=function(){},e("dojo-debug-messages")&&(a.deprecated=function(e,t,n){var r="DEPRECATED: "+e;t&&(r+=" "+t),n&&(r+=" -- will be removed in version: "+n),console.warn(r)},a.experimental=function(e,t){var n="EXPERIMENTAL: "+e+" -- APIs subject to change without notice.";t&&(n+=" "+t),console.warn(n)}),1;if(t.modulePaths){a.deprecated("dojo.modulePaths","use paths configuration");var v={};for(s in t.modulePaths)v[s.replace(/\./g,"/")]=t.modulePaths[s];n({paths:v})}return 1,a.moduleUrl=function(e,t){a.deprecated("dojo.moduleUrl()","use require.toUrl","2.0");var r=null;return e&&(r=n.toUrl(e.replace(/\./g,"/")+(t?"/"+t:"")+"/*.*").replace(/\/\*\.\*/,"")+(t?"":"/")),r},a._hasResource={},a})},"dojo/_base/config":function(){define(["../has","require"],function(e,t){var n={},r=t.rawConfig,i;for(i in r)n[i]=r[i];return!n.locale&&typeof navigator!="undefined"&&(n.locale=(navigator.language||navigator.userLanguage).toLowerCase()),n})},"dojo/_base/lang":function(){define(["./kernel","../has","../sniff"],function(e,t){t.add("bug-for-in-skips-shadowed",function(){for(var e in{toString:1})return 0;return 1});var n=t("bug-for-in-skips-shadowed")?"hasOwnProperty.valueOf.isPrototypeOf.propertyIsEnumerable.toLocaleString.toString.constructor".split("."):[],r=n.length,i=function(t,n,r){var i,s=0,o=e.global;if(!r){if(!t.length)return o;i=t[s++];try{r=e.scopeMap[i]&&e.scopeMap[i][1]}catch(u){}r=r||(i in o?o[i]:n?o[i]={}:undefined)}while(r&&(i=t[s++]))r=i in r?r[i]:n?r[i]={}:undefined;return r},s=Object.prototype.toString,o=function(e,t,n){return(n||[]).concat(Array.prototype.slice.call(e,t||0))},u=/\{([^\}]+)\}/g,a={_extraNames:n,_mixin:function(e,i,s){var o,u,a,f={};for(o in i){u=i[o];if(!(o in e)||e[o]!==u&&(!(o in f)||f[o]!==u))e[o]=s?s(u):u}if(t("bug-for-in-skips-shadowed")&&i)for(a=0;a<r;++a){o=n[a],u=i[o];if(!(o in e)||e[o]!==u&&(!(o in f)||f[o]!==u))e[o]=s?s(u):u}return e},mixin:function(e,t){e||(e={});for(var n=1,r=arguments.length;n<r;n++)a._mixin(e,arguments[n]);return e},setObject:function(e,t,n){var r=e.split("."),s=r.pop(),o=i(r,!0,n);return o&&s?o[s]=t:undefined},getObject:function(e,t,n){return i(e.split("."),t,n)},exists:function(e,t){return a.getObject(e,!1,t)!==undefined},isString:function(e){return typeof e=="string"||e instanceof String},isArray:function(e){return e&&(e instanceof Array||typeof e=="array")},isFunction:function(e){return s.call(e)==="[object Function]"},isObject:function(e){return e!==undefined&&(e===null||typeof e=="object"||a.isArray(e)||a.isFunction(e))},isArrayLike:function(e){return e&&e!==undefined&&!a.isString(e)&&!a.isFunction(e)&&(!e.tagName||e.tagName.toLowerCase()!="form")&&(a.isArray(e)||isFinite(e.length))},isAlien:function(e){return e&&!a.isFunction(e)&&/\{\s*\[native code\]\s*\}/.test(String(e))},extend:function(e,t){for(var n=1,r=arguments.length;n<r;n++)a._mixin(e.prototype,arguments[n]);return e},_hitchArgs:function(t,n){var r=a._toArray(arguments,2),i=a.isString(n);return function(){var s=a._toArray(arguments),o=i?(t||e.global)[n]:n;return o&&o.apply(t||this,r.concat(s))}},hitch:function(t,n){if(arguments.length>2)return a._hitchArgs.apply(e,arguments);n||(n=t,t=null);if(a.isString(n)){t=t||e.global;if(!t[n])throw['lang.hitch: scope["',n,'"] is null (scope="',t,'")'].join("");return function(){return t[n].apply(t,arguments||[])}}return t?function(){return n.apply(t,arguments||[])}:n},delegate:function(){function e(){}return function(t,n){e.prototype=t;var r=new e;return e.prototype=null,n&&a._mixin(r,n),r}}(),_toArray:t("ie")?function(){function e(e,t,n){var r=n||[];for(var i=t||0;i<e.length;i++)r.push(e[i]);return r}return function(t){return(t.item?e:o).apply(this,arguments)}}():o,partial:function(t){var n=[null];return a.hitch.apply(e,n.concat(a._toArray(arguments)))},clone:function(e){if(!e||typeof e!="object"||a.isFunction(e))return e;if(e.nodeType&&"cloneNode"in e)return e.cloneNode(!0);if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);var t,n,r;if(a.isArray(e)){t=[];for(n=0,r=e.length;n<r;++n)n in e&&t.push(a.clone(e[n]))}else t=e.constructor?new e.constructor:{};return a._mixin(t,e,a.clone)},trim:String.prototype.trim?function(e){return e.trim()}:function(e){return e.replace(/^\s\s*/,"").replace(/\s\s*$/,"")},replace:function(e,t,n){return e.replace(n||u,a.isFunction(t)?t:function(e,n){return a.getObject(n,!1,t)})}};return a.mixin(e,a),a})},"dojo/sniff":function(){define(["./has"],function(e){var t=navigator,n=t.userAgent,r=t.appVersion,i=parseFloat(r);e.add("air",n.indexOf("AdobeAIR")>=0),e.add("msapp",parseFloat(n.split("MSAppHost/")[1])||undefined),e.add("khtml",r.indexOf("Konqueror")>=0?i:undefined),e.add("webkit",parseFloat(n.split("WebKit/")[1])||undefined),e.add("chrome",parseFloat(n.split("Chrome/")[1])||undefined),e.add("safari",r.indexOf("Safari")>=0&&!e("chrome")?parseFloat(r.split("Version/")[1]):undefined),e.add("mac",r.indexOf("Macintosh")>=0),e.add("quirks",document.compatMode=="BackCompat");if(n.match(/(iPhone|iPod|iPad)/)){var s=RegExp.$1.replace(/P/,"p"),o=n.match(/OS ([\d_]+)/)?RegExp.$1:"1",u=parseFloat(o.replace(/_/,".").replace(/_/g,""));e.add(s,u),e.add("ios",u)}e.add("android",parseFloat(n.split("Android ")[1])||undefined),e.add("bb",(n.indexOf("BlackBerry")>=0||n.indexOf("BB10")>=0)&&parseFloat(n.split("Version/")[1])||undefined),e.add("svg",typeof SVGAngle!="undefined");if(!e("webkit")){n.indexOf("Opera")>=0&&e.add("opera",i>=9.8?parseFloat(n.split("Version/")[1])||i:i),n.indexOf("Gecko")>=0&&!e("khtml")&&!e("webkit")&&e.add("mozilla",i),e("mozilla")&&e.add("ff",parseFloat(n.split("Firefox/")[1]||n.split("Minefield/")[1])||undefined);if(document.all&&!e("opera")){var a=parseFloat(r.split("MSIE ")[1])||undefined,f=document.documentMode;f&&f!=5&&Math.floor(a)!=f&&(a=f),e.add("ie",a)}e.add("wii",typeof opera!="undefined"&&opera.wiiremote)}return e})},"dojo/_base/array":function(){define(["./kernel","../has","./lang"],function(e,t,n){function s(e){return r[e]=new Function("item","index","array",e)}function o(e){var t=!e;return function(n,i,o){var u=0,a=n&&n.length||0,f;a&&typeof n=="string"&&(n=n.split("")),typeof i=="string"&&(i=r[i]||s(i));if(o)for(;u<a;++u){f=!i.call(o,n[u],u,n);if(e^f)return!f}else for(;u<a;++u){f=!i(n[u],u,n);if(e^f)return!f}return t}}function u(e){var t=1,n=0,r=0;return e||(t=n=r=-1),function(s,o,u,f){if(f&&t>0)return a.lastIndexOf(s,o,u);var l=s&&s.length||0,c=e?l+r:n,h;u===i?h=e?n:l+r:u<0?(h=l+u,h<0&&(h=n)):h=u>=l?l+r:u,l&&typeof s=="string"&&(s=s.split(""));for(;h!=c;h+=t)if(s[h]==o)return h;return-1}}var r={},i,a={every:o(!1),some:o(!0),indexOf:u(!0),lastIndexOf:u(!1),forEach:function(e,t,n){var i=0,o=e&&e.length||0;o&&typeof e=="string"&&(e=e.split("")),typeof t=="string"&&(t=r[t]||s(t));if(n)for(;i<o;++i)t.call(n,e[i],i,e);else for(;i<o;++i)t(e[i],i,e)},map:function(e,t,n,i){var o=0,u=e&&e.length||0,a=new(i||Array)(u);u&&typeof e=="string"&&(e=e.split("")),typeof t=="string"&&(t=r[t]||s(t));if(n)for(;o<u;++o)a[o]=t.call(n,e[o],o,e);else for(;o<u;++o)a[o]=t(e[o],o,e);return a},filter:function(e,t,n){var i=0,o=e&&e.length||0,u=[],a;o&&typeof e=="string"&&(e=e.split("")),typeof t=="string"&&(t=r[t]||s(t));if(n)for(;i<o;++i)a=e[i],t.call(n,a,i,e)&&u.push(a);else for(;i<o;++i)a=e[i],t(a,i,e)&&u.push(a);return u},clearCache:function(){r={}}};return n.mixin(e,a),a})},"dojo/dom":function(){define(["./sniff","./_base/window"],function(e,t){if(e("ie")<=7)try{document.execCommand("BackgroundImageCache",!1,!0)}catch(n){}var r={};e("ie")?r.byId=function(e,n){if(typeof e!="string")return e;var r=n||t.doc,i=e&&r.getElementById(e);if(!(!i||i.attributes.id.value!=e&&i.id!=e))return i;var s=r.all[e];if(!s||s.nodeName)s=[s];var o=0;while(i=s[o++])if(i.attributes&&i.attributes.id&&i.attributes.id.value==e||i.id==e)return i}:r.byId=function(e,n){return(typeof e=="string"?(n||t.doc).getElementById(e):e)||null},r.isDescendant=function(e,t){try{e=r.byId(e),t=r.byId(t);while(e){if(e==t)return!0;e=e.parentNode}}catch(n){}return!1},e.add("css-user-select",function(e,t,n){if(!n)return!1;var r=n.style,i=["Khtml","O","ms","Moz","Webkit"],s=i.length,o="userSelect",u;do if(typeof r[o]!="undefined")return o;while(s--&&(o=i[s]+"UserSelect"));return!1});var i=e("css-user-select");return r.setSelectable=i?function(e,t){r.byId(e).style[i]=t?"":"none"}:function(e,t){e=r.byId(e);var n=e.getElementsByTagName("*"),i=n.length;if(t){e.removeAttribute("unselectable");while(i--)n[i].removeAttribute("unselectable")}else{e.setAttribute("unselectable","on");while(i--)n[i].setAttribute("unselectable","on")}},r})},"dojo/_base/window":function(){define(["./kernel","./lang","../sniff"],function(e,t,n){var r={global:e.global,doc:this.document||null,body:function(t){return t=t||e.doc,t.body||t.getElementsByTagName("body")[0]},setContext:function(t,n){e.global=r.global=t,e.doc=r.doc=n},withGlobal:function(t,n,i,s){var o=e.global;try{return e.global=r.global=t,r.withDoc.call(null,t.document,n,i,s)}finally{e.global=r.global=o}},withDoc:function(t,i,s,o){var u=r.doc,a=n("quirks"),f=n("ie"),l,c,h;try{return e.doc=r.doc=t,e.isQuirks=n.add("quirks",e.doc.compatMode=="BackCompat",!0,!0),n("ie")&&(h=t.parentWindow)&&h.navigator&&(l=parseFloat(h.navigator.appVersion.split("MSIE ")[1])||undefined,c=t.documentMode,c&&c!=5&&Math.floor(l)!=c&&(l=c),e.isIE=n.add("ie",l,!0,!0)),s&&typeof i=="string"&&(i=s[i]),i.apply(s,o||[])}finally{e.doc=r.doc=u,e.isQuirks=n.add("quirks",a,!0,!0),e.isIE=n.add("ie",f,!0,!0)}}};return t.mixin(e,r),r})},"dojo/dom-construct":function(){define(["exports","./_base/kernel","./sniff","./_base/window","./dom","./dom-attr"],function(e,t,n,r,i,s){function d(e,t){var n=t.parentNode;n&&n.insertBefore(e,t)}function v(e,t){var n=t.parentNode;n&&(n.lastChild==t?n.appendChild(e):n.insertBefore(e,t.nextSibling))}function g(e){if(e.canHaveChildren)try{e.innerHTML="";return}catch(t){}for(var n;n=e.lastChild;)y(n,e)}function y(e,t){e.firstChild&&g(e),t&&(n("ie")&&t.canHaveChildren&&"removeNode"in e?e.removeNode(!1):t.removeChild(e))}var o={option:["select"],tbody:["table"],thead:["table"],tfoot:["table"],tr:["table","tbody"],td:["table","tbody","tr"],th:["table","thead","tr"],legend:["fieldset"],caption:["table"],colgroup:["table"],col:["table","colgroup"],li:["ul"]},u=/<\s*([\w\:]+)/,a={},f=0,l="__"+t._scopeName+"ToDomId";for(var c in o)if(o.hasOwnProperty(c)){var h=o[c];h.pre=c=="option"?'<select multiple="multiple">':"<"+h.join("><")+">",h.post="</"+h.reverse().join("></")+">"}var p;n("ie")<=8&&(p=function(e){e.__dojo_html5_tested="yes";var t=m("div",{innerHTML:"<nav>a</nav>",style:{visibility:"hidden"}},e.body);t.childNodes.length!==1&&"abbr article aside audio canvas details figcaption figure footer header hgroup mark meter nav output progress section summary time video".replace(/\b\w+\b/g,function(t){e.createElement(t)}),b(t)}),e.toDom=function(t,i){i=i||r.doc;var s=i[l];s||(i[l]=s=++f+"",a[s]=i.createElement("div")),n("ie")<=8&&!i.__dojo_html5_tested&&i.body&&p(i),t+="";var c=t.match(u),h=c?c[1].toLowerCase():"",d=a[s],v,m,g,y;if(c&&o[h]){v=o[h],d.innerHTML=v.pre+t+v.post;for(m=v.length;m;--m)d=d.firstChild}else d.innerHTML=t;if(d.childNodes.length==1)return d.removeChild(d.firstChild);y=i.createDocumentFragment();while(g=d.firstChild)y.appendChild(g);return y},e.place=function(n,r,s){r=i.byId(r),typeof n=="string"&&(n=/^\s*</.test(n)?e.toDom(n,r.ownerDocument):i.byId(n));if(typeof s=="number"){var o=r.childNodes;!o.length||o.length<=s?r.appendChild(n):d(n,o[s<0?0:s])}else switch(s){case"before":d(n,r);break;case"after":v(n,r);break;case"replace":r.parentNode.replaceChild(n,r);break;case"only":e.empty(r),r.appendChild(n);break;case"first":if(r.firstChild){d(n,r.firstChild);break};default:r.appendChild(n)}return n};var m=e.create=function(n,o,u,a){var f=r.doc;return u&&(u=i.byId(u),f=u.ownerDocument),typeof n=="string"&&(n=f.createElement(n)),o&&s.set(n,o),u&&e.place(n,u,a),n};e.empty=function(t){g(i.byId(t))};var b=e.destroy=function(t){t=i.byId(t);if(!t)return;y(t,t.parentNode)}})},"dojo/dom-attr":function(){define(["exports","./sniff","./_base/lang","./dom","./dom-style","./dom-prop"],function(e,t,n,r,i,s){function a(e,t){var n=e.getAttributeNode&&e.getAttributeNode(t);return n&&n.specified}var o={innerHTML:1,className:1,htmlFor:t("ie"),value:1},u={classname:"class",htmlfor:"for",tabindex:"tabIndex",readonly:"readOnly"};e.has=function(t,n){var i=n.toLowerCase();return o[s.names[i]||n]||a(r.byId(t),u[i]||n)},e.get=function(t,i){t=r.byId(t);var f=i.toLowerCase(),l=s.names[f]||i,c=o[l],h=t[l];if(c&&typeof h!="undefined")return h;if(l=="href"||typeof h!="boolean"&&!n.isFunction(h)){var p=u[f]||i;return a(t,p)?t.getAttribute(p):null}return h},e.set=function(a,f,l){a=r.byId(a);if(arguments.length==2){for(var c in f)e.set(a,c,f[c]);return a}var h=f.toLowerCase(),p=s.names[h]||f,d=o[p];return p=="style"&&typeof l!="string"?(i.set(a,l),a):d||typeof l=="boolean"||n.isFunction(l)?s.set(a,f,l):(a.setAttribute(u[h]||f,l),a)},e.remove=function(t,n){r.byId(t).removeAttribute(u[n.toLowerCase()]||n)},e.getNodeProp=function(t,n){t=r.byId(t);var i=n.toLowerCase(),o=s.names[i]||n;if(o in t&&o!="href")return t[o];var f=u[i]||n;return a(t,f)?t.getAttribute(f):null}})},"dojo/dom-style":function(){define(["./sniff","./dom"],function(e,t){function c(t,n,r){n=n.toLowerCase();if(e("ie")){if(r=="auto"){if(n=="height")return t.offsetHeight;if(n=="width")return t.offsetWidth}if(n=="fontweight")switch(r){case 700:return"bold";case 400:default:return"normal"}}return n in f||(f[n]=l.test(n)),f[n]?i(t,r):r}var n,r={};e("webkit")?n=function(e){var t;if(e.nodeType==1){var n=e.ownerDocument.defaultView;t=n.getComputedStyle(e,null),!t&&e.style&&(e.style.display="",t=n.getComputedStyle(e,null))}return t||{}}:e("ie")&&(e("ie")<9||e("quirks"))?n=function(e){return e.nodeType==1&&e.currentStyle?e.currentStyle:{}}:n=function(e){return e.nodeType==1?e.ownerDocument.defaultView.getComputedStyle(e,null):{}},r.getComputedStyle=n;var i;e("ie")?i=function(e,t){if(!t)return 0;if(t=="medium")return 4;if(t.slice&&t.slice(-2)=="px")return parseFloat(t);var n=e.style,r=e.runtimeStyle,i=e.currentStyle,s=n.left,o=r.left;r.left=i.left;try{n.left=t,t=n.pixelLeft}catch(u){t=0}return n.left=s,r.left=o,t}:i=function(e,t){return parseFloat(t)||0},r.toPixelValue=i;var s="DXImageTransform.Microsoft.Alpha",o=function(e,t){try{return e.filters.item(s)}catch(n){return t?{}:null}},u=e("ie")<9||e("ie")<10&&e("quirks")?function(e){try{return o(e).Opacity/100}catch(t){return 1}}:function(e){return n(e).opacity},a=e("ie")<9||e("ie")<10&&e("quirks")?function(e,t){t===""&&(t=1);var n=t*100,r=t===1;r?(e.style.zoom="",o(e)&&(e.style.filter=e.style.filter.replace(new RegExp("\\s*progid:"+s+"\\([^\\)]+?\\)","i"),""))):(e.style.zoom=1,o(e)?o(e,1).Opacity=n:e.style.filter+=" progid:"+s+"(Opacity="+n+")",o(e,1).Enabled=!0);if(e.tagName.toLowerCase()=="tr")for(var i=e.firstChild;i;i=i.nextSibling)i.tagName.toLowerCase()=="td"&&a(i,t);return t}:function(e,t){return e.style.opacity=t},f={left:!0,top:!0},l=/margin|padding|width|height|max|min|offset/,h={cssFloat:1,styleFloat:1,"float":1};return r.get=function(n,i){var s=t.byId(n),o=arguments.length,a=i=="opacity";if(o==2&&a)return u(s);i=h[i]?"cssFloat"in s.style?"cssFloat":"styleFloat":i;var f=r.getComputedStyle(s);return o==1?f:c(s,i,f[i]||s.style[i])},r.set=function(n,i,s){var o=t.byId(n),u=arguments.length,f=i=="opacity";i=h[i]?"cssFloat"in o.style?"cssFloat":"styleFloat":i;if(u==3)return f?a(o,s):o.style[i]=s;for(var l in i)r.set(n,l,i[l]);return r.getComputedStyle(o)},r})},"dojo/dom-prop":function(){define(["exports","./_base/kernel","./sniff","./_base/lang","./dom","./dom-style","./dom-construct","./_base/connect"],function(e,t,n,r,i,s,o,u){var a={},f=0,l=t._scopeName+"attrid";e.names={"class":"className","for":"htmlFor",tabindex:"tabIndex",readonly:"readOnly",colspan:"colSpan",frameborder:"frameBorder",rowspan:"rowSpan",valuetype:"valueType"},e.get=function(n,r){n=i.byId(n);var s=r.toLowerCase(),o=e.names[s]||r;return n[o]},e.set=function(c,h,p){c=i.byId(c);var d=arguments.length;if(d==2&&typeof h!="string"){for(var v in h)e.set(c,v,h[v]);return c}var m=h.toLowerCase(),g=e.names[m]||h;if(g=="style"&&typeof p!="string")return s.set(c,p),c;if(g=="innerHTML")return n("ie")&&c.tagName.toLowerCase()in{col:1,colgroup:1,table:1,tbody:1,tfoot:1,thead:1,tr:1,title:1}?(o.empty(c),c.appendChild(o.toDom(p,c.ownerDocument))):c[g]=p,c;if(r.isFunction(p)){var y=c[l];y||(y=f++,c[l]=y),a[y]||(a[y]={});var b=a[y][g];if(b)u.disconnect(b);else try{delete c[g]}catch(w){}return p?a[y][g]=u.connect(c,g,p):c[g]=null,c}return c[g]=p,c}})},"dojo/_base/connect":function(){define(["./kernel","../on","../topic","../aspect","./event","../mouse","./sniff","./lang","../keys"],function(e,t,n,r,i,s,o,u){function a(n,i,o,a,f){a=u.hitch(o,a);if(!n||!n.addEventListener&&!n.attachEvent)return r.after(n||e.global,i,a,!0);typeof i=="string"&&i.substring(0,2)=="on"&&(i=i.substring(2)),n||(n=e.global);if(!f)switch(i){case"keypress":i=p;break;case"mouseenter":i=s.enter;break;case"mouseleave":i=s.leave}return t(n,i,a,f)}function h(e){e.keyChar=e.charCode?String.fromCharCode(e.charCode):"",e.charOrCode=e.keyChar||e.keyCode}o.add("events-keypress-typed",function(){var e={charCode:0};try{e=document.createEvent("KeyboardEvent"),(e.initKeyboardEvent||e.initKeyEvent).call(e,"keypress",!0,!0,null,!1,!1,!1,!1,9,3)}catch(t){}return e.charCode==0&&!o("opera")});var f={106:42,111:47,186:59,187:43,188:44,189:45,190:46,191:47,192:96,219:91,220:92,221:93,222:39,229:113},l=o("mac")?"metaKey":"ctrlKey",c=function(e,t){var n=u.mixin({},e,t);return h(n),n.preventDefault=function(){e.preventDefault()},n.stopPropagation=function(){e.stopPropagation()},n},p;if(o("events-keypress-typed")){var d=function(e,t){try{return e.keyCode=t}catch(e){return 0}};p=function(e,n){var r=t(e,"keydown",function(e){var t=e.keyCode,r=t!=13&&t!=32&&(t!=27||!o("ie"))&&(t<48||t>90)&&(t<96||t>111)&&(t<186||t>192)&&(t<219||t>222)&&t!=229;if(r||e.ctrlKey){var i=r?0:t;if(e.ctrlKey){if(t==3||t==13)return n.call(e.currentTarget,e);i>95&&i<106?i-=48:!e.shiftKey&&i>=65&&i<=90?i+=32:i=f[i]||i}var s=c(e,{type:"keypress",faux:!0,charCode:i});n.call(e.currentTarget,s),o("ie")&&d(e,s.keyCode)}}),i=t(e,"keypress",function(e){var t=e.charCode;return t=t>=32?t:0,e=c(e,{charCode:t,faux:!0}),n.call(this,e)});return{remove:function(){r.remove(),i.remove()}}}}else o("opera")?p=function(e,n){return t(e,"keypress",function(e){var t=e.which;return t==3&&(t=99),t=t<32&&!e.shiftKey?0:t,e.ctrlKey&&!e.shiftKey&&t>=65&&t<=90&&(t+=32),n.call(this,c(e,{charCode:t}))})}:p=function(e,n){return t(e,"keypress",function(e){return h(e),n.call(this,e)})};var v={_keypress:p,connect:function(e,t,n,r,i){var s=arguments,o=[],u=0;o.push(typeof s[0]=="string"?null:s[u++],s[u++]);var f=s[u+1];o.push(typeof f=="string"||typeof f=="function"?s[u++]:null,s[u++]);for(var l=s.length;u<l;u++)o.push(s[u]);return a.apply(this,o)},disconnect:function(e){e&&e.remove()},subscribe:function(e,t,r){return n.subscribe(e,u.hitch(t,r))},publish:function(e,t){return n.publish.apply(n,[e].concat(t))},connectPublisher:function(e,t,n){var r=function(){v.publish(e,arguments)};return n?v.connect(t,n,r):v.connect(t,r)},isCopyKey:function(e){return e[l]}};return v.unsubscribe=v.disconnect,u.mixin(e,v),v})},"dojo/on":function(){define(["./has!dom-addeventlistener?:./aspect","./_base/kernel","./sniff"],function(e,t,n){"use strict";function o(e,t,r,o,u){var a=t.match(/(.*):(.*)/);if(a)return t=a[2],a=a[1],i.selector(a,t).call(u,e,r);n("touch")&&(s.test(t)&&(r=x(r)),!n("event-orientationchange")&&t=="orientationchange"&&(t="resize",e=window,r=x(r))),p&&(r=p(r));if(e.addEventListener){var f=t in c,l=f?c[t]:t;return e.addEventListener(l,r,f),{remove:function(){e.removeEventListener(l,r,f)}}}t="on"+t;if(g&&e.attachEvent)return g(e,t,r);throw new Error("Target must be an event emitter")}function u(){this.cancelable=!1,this.defaultPrevented=!0}function a(){this.bubbles=!1}var r=window.ScriptEngineMajorVersion;n.add("jscript",r&&r()+ScriptEngineMinorVersion()/10),n.add("event-orientationchange",n("touch")&&!n("android")),n.add("event-stopimmediatepropagation",window.Event&&!!window.Event.prototype&&!!window.Event.prototype.stopImmediatePropagation),n.add("event-focusin",function(e,t,n){return!!n.attachEvent});var i=function(e,t,n,r){return typeof e.on=="function"&&typeof t!="function"&&!e.nodeType?e.on(t,n):i.parse(e,t,n,o,r,this)};i.pausable=function(e,t,n,r){var s,o=i(e,t,function(){if(!s)return n.apply(this,arguments)},r);return o.pause=function(){s=!0},o.resume=function(){s=!1},o},i.once=function(e,t,n,r){var s=i(e,t,function(){return s.remove(),n.apply(this,arguments)});return s},i.parse=function(e,t,n,r,i,s){if(t.call)return t.call(s,e,n);if(t.indexOf(",")>-1){var o=t.split(/\s*,\s*/),u=[],a=0,f;while(f=o[a++])u.push(r(e,f,n,i,s));return u.remove=function(){for(var e=0;e<u.length;e++)u[e].remove()},u}return r(e,t,n,i,s)};var s=/^touch/;i.selector=function(e,n,r){return function(s,o){function f(n){u=u&&u.matches?u:t.query;while(!u.matches(n,e,s))if(n==s||r===!1||!(n=n.parentNode)||n.nodeType!=1)return;return n}var u=typeof e=="function"?{matches:e}:this,a=n.bubble;return a?i(s,a(f),o):i(s,n,function(e){var t=f(e.target);return t&&o.call(t,e)})}};var f=[].slice,l=i.emit=function(e,t,n){var r=f.call(arguments,2),i="on"+t;if("parentNode"in e){var s=r[0]={};for(var o in n)s[o]=n[o];s.preventDefault=u,s.stopPropagation=a,s.target=e,s.type=t,n=s}do e[i]&&e[i].apply(e,r);while(n&&n.bubbles&&(e=e.parentNode));return n&&n.cancelable&&n},c=n("event-focusin")?{}:{focusin:"focus",focusout:"blur"};if(!n("event-stopimmediatepropagation"))var h=function(){this.immediatelyStopped=!0,this.modified=!0},p=function(e){return function(t){if(!t.immediatelyStopped)return t.stopImmediatePropagation=h,e.apply(this,arguments)}};if(n("dom-addeventlistener"))i.emit=function(e,t,n){if(e.dispatchEvent&&document.createEvent){var r=e.ownerDocument.createEvent("HTMLEvents");r.initEvent(t,!!n.bubbles,!!n.cancelable);for(var s in n)s in r||(r[s]=n[s]);return e.dispatchEvent(r)&&r}return l.apply(i,arguments)};else{i._fixEvent=function(e,t){if(!e){var n=t&&(t.ownerDocument||t.document||t).parentWindow||window;e=n.event}if(!e)return e;try{d&&e.type==d.type&&e.srcElement==d.target&&(e=d)}catch(r){}if(!e.target){e.target=e.srcElement,e.currentTarget=t||e.srcElement,e.type=="mouseover"&&(e.relatedTarget=e.fromElement),e.type=="mouseout"&&(e.relatedTarget=e.toElement),e.stopPropagation||(e.stopPropagation=b,e.preventDefault=w);switch(e.type){case"keypress":var i="charCode"in e?e.charCode:e.keyCode;i==10?(i=0,e.keyCode=13):i==13||i==27?i=0:i==3&&(i=99),e.charCode=i,y(e)}}return e};var d,v=function(e){this.handle=e};v.prototype.remove=function(){delete _dojoIEListeners_[this.handle]};var m=function(e){return function(t){t=i._fixEvent(t,this);var n=e.call(this,t);return t.modified&&(d||setTimeout(function(){d=null}),d=t),n}},g=function(t,r,i){i=m(i);if(((t.ownerDocument?t.ownerDocument.parentWindow:t.parentWindow||t.window||window)!=top||n("jscript")<5.8)&&!n("config-_allow_leaks")){typeof _dojoIEListeners_=="undefined"&&(_dojoIEListeners_=[]);var s=t[r];if(!s||!s.listeners){var o=s;s=Function("event","var callee = arguments.callee; for(var i = 0; i<callee.listeners.length; i++){var listener = _dojoIEListeners_[callee.listeners[i]]; if(listener){listener.call(this,event);}}"),s.listeners=[],t[r]=s,s.global=this,o&&s.listeners.push(_dojoIEListeners_.push(o)-1)}var u;return s.listeners.push(u=s.global._dojoIEListeners_.push(i)-1),new v(u)}return e.after(t,r,i,!0)},y=function(e){e.keyChar=e.charCode?String.fromCharCode(e.charCode):"",e.charOrCode=e.keyChar||e.keyCode},b=function(){this.cancelBubble=!0},w=i._preventDefault=function(){this.bubbledKeyCode=this.keyCode;if(this.ctrlKey)try{this.keyCode=0}catch(e){}this.defaultPrevented=!0,this.returnValue=!1,this.modified=!0}}if(n("touch"))var E=function(){},S=window.orientation,x=function(e){return function(t){var r=t.corrected;if(!r){var i=t.type;try{delete t.type}catch(s){}if(t.type){if(n("mozilla")){var r={};for(var o in t)r[o]=t[o]}else{E.prototype=t;var r=new E}r.preventDefault=function(){t.preventDefault()},r.stopPropagation=function(){t.stopPropagation()}}else r=t,r.type=i;t.corrected=r;if(i=="resize")return S==window.orientation?null:(S=window.orientation,r.type="orientationchange",e.call(this,r));"rotation"in r||(r.rotation=0,r.scale=1);var u=r.changedTouches[0];for(var a in u)delete r[a],r[a]=u[a]}return e.call(this,r)}};return i})},"dojo/topic":function(){define(["./Evented"],function(e){var t=new e;return{publish:function(e,n){return t.emit.apply(t,arguments)},subscribe:function(e,n){return t.on.apply(t,arguments)}}})},"dojo/Evented":function(){define(["./aspect","./on"],function(e,t){"use strict";function r(){}var n=e.after;return r.prototype={on:function(e,r){return t.parse(this,e,r,function(e,t){return n(e,"on"+t,r,!0)})},emit:function(e,n){var r=[this];return r.push.apply(r,arguments),t.emit.apply(t,r)}},r})},"dojo/aspect":function(){define([],function(){"use strict";function n(e,n,r,i){var s=e[n],o=n=="around",u;if(o){var a=r(function(){return s.advice(this,arguments)});u={remove:function(){a&&(a=e=r=null)},advice:function(e,t){return a?a.apply(e,t):s.advice(e,t)}}}else u={remove:function(){if(u.advice){var t=u.previous,i=u.next;!i&&!t?delete e[n]:(t?t.next=i:e[n]=i,i&&(i.previous=t)),e=r=u.advice=null}},id:t++,advice:r,receiveArguments:i};if(s&&!o)if(n=="after"){while(s.next&&(s=s.next));s.next=u,u.previous=s}else n=="before"&&(e[n]=u,u.next=s,s.previous=u);else e[n]=u;return u}function r(r){return function(i,s,o,u){var a=i[s],f;if(!a||a.target!=i)i[s]=f=function(){var n=t,r=arguments,i=f.before;while(i)r=i.advice.apply(this,r)||r,i=i.next;if(f.around)var s=f.around.advice(this,r);var o=f.after;while(o&&o.id<n){if(o.receiveArguments){var u=o.advice.apply(this,r);s=u===e?s:u}else s=o.advice.call(this,s,r);o=o.next}return s},a&&(f.around={advice:function(e,t){return a.apply(e,t)}}),f.target=i;var l=n(f||a,r,o,u);return o=null,l}}var e,t=0,i=r("after"),s=r("before"),o=r("around");return{before:s,around:o,after:i}})},"dojo/_base/event":function(){define(["./kernel","../on","../has","../dom-geometry"],function(e,t,n,r){if(t._fixEvent){var i=t._fixEvent;t._fixEvent=function(e,t){return e=i(e,t),e&&r.normalizeEvent(e),e}}var s={fix:function(e,n){return t._fixEvent?t._fixEvent(e,n):e},stop:function(e){n("dom-addeventlistener")||e&&e.preventDefault?(e.preventDefault(),e.stopPropagation()):(e=e||window.event,e.cancelBubble=!0,t._preventDefault.call(e))}};return e.fixEvent=s.fix,e.stopEvent=s.stop,s})},"dojo/dom-geometry":function(){define(["./sniff","./_base/window","./dom","./dom-style"],function(e,t,n,r){function o(e,t,n,r,i,s){s=s||"px";var o=e.style;isNaN(t)||(o.left=t+s),isNaN(n)||(o.top=n+s),r>=0&&(o.width=r+s),i>=0&&(o.height=i+s)}function u(e){return e.tagName.toLowerCase()=="button"||e.tagName.toLowerCase()=="input"&&(e.getAttribute("type")||"").toLowerCase()=="button"}function a(e){return i.boxModel=="border-box"||e.tagName.toLowerCase()=="table"||u(e)}var i={};i.boxModel="content-box",e("ie")&&(i.boxModel=document.compatMode=="BackCompat"?"border-box":"content-box"),i.getPadExtents=function(t,i){t=n.byId(t);var s=i||r.getComputedStyle(t),o=r.toPixelValue,u=o(t,s.paddingLeft),a=o(t,s.paddingTop),f=o(t,s.paddingRight),l=o(t,s.paddingBottom);return{l:u,t:a,r:f,b:l,w:u+f,h:a+l}};var s="none";i.getBorderExtents=function(t,i){t=n.byId(t);var o=r.toPixelValue,u=i||r.getComputedStyle(t),a=u.borderLeftStyle!=s?o(t,u.borderLeftWidth):0,f=u.borderTopStyle!=s?o(t,u.borderTopWidth):0,l=u.borderRightStyle!=s?o(t,u.borderRightWidth):0,c=u.borderBottomStyle!=s?o(t,u.borderBottomWidth):0;return{l:a,t:f,r:l,b:c,w:a+l,h:f+c}},i.getPadBorderExtents=function(t,s){t=n.byId(t);var o=s||r.getComputedStyle(t),u=i.getPadExtents(t,o),a=i.getBorderExtents(t,o);return{l:u.l+a.l,t:u.t+a.t,r:u.r+a.r,b:u.b+a.b,w:u.w+a.w,h:u.h+a.h}},i.getMarginExtents=function(t,i){t=n.byId(t);var s=i||r.getComputedStyle(t),o=r.toPixelValue,u=o(t,s.marginLeft),a=o(t,s.marginTop),f=o(t,s.marginRight),l=o(t,s.marginBottom);return{l:u,t:a,r:f,b:l,w:u+f,h:a+l}},i.getMarginBox=function(o,u){o=n.byId(o);var a=u||r.getComputedStyle(o),f=i.getMarginExtents(o,a),l=o.offsetLeft-f.l,c=o.offsetTop-f.t,h=o.parentNode,p=r.toPixelValue,d;if(e("mozilla")){var v=parseFloat(a.left),m=parseFloat(a.top);!isNaN(v)&&!isNaN(m)?(l=v,c=m):h&&h.style&&(d=r.getComputedStyle(h),d.overflow!="visible"&&(l+=d.borderLeftStyle!=s?p(o,d.borderLeftWidth):0,c+=d.borderTopStyle!=s?p(o,d.borderTopWidth):0))}else(e("opera")||e("ie")==8&&!e("quirks"))&&h&&(d=r.getComputedStyle(h),l-=d.borderLeftStyle!=s?p(o,d.borderLeftWidth):0,c-=d.borderTopStyle!=s?p(o,d.borderTopWidth):0);return{l:l,t:c,w:o.offsetWidth+f.w,h:o.offsetHeight+f.h}},i.getContentBox=function(s,o){s=n.byId(s);var u=o||r.getComputedStyle(s),a=s.clientWidth,f,l=i.getPadExtents(s,u),c=i.getBorderExtents(s,u);return a?(f=s.clientHeight,c.w=c.h=0):(a=s.offsetWidth,f=s.offsetHeight),e("opera")&&(l.l+=c.l,l.t+=c.t),{l:l.l,t:l.t,w:a-l.w-c.w,h:f-l.h-c.h}},i.setContentSize=function(t,r,s){t=n.byId(t);var u=r.w,f=r.h;if(a(t)){var l=i.getPadBorderExtents(t,s);u>=0&&(u+=l.w),f>=0&&(f+=l.h)}o(t,NaN,NaN,u,f)};var f={l:0,t:0,w:0,h:0};return i.setMarginBox=function(s,l,c){s=n.byId(s);var h=c||r.getComputedStyle(s),p=l.w,d=l.h,v=a(s)?f:i.getPadBorderExtents(s,h),m=i.getMarginExtents(s,h);if(e("webkit")&&u(s)){var g=s.style;p>=0&&!g.width&&(g.width="4px"),d>=0&&!g.height&&(g.height="4px")}p>=0&&(p=Math.max(p-v.w-m.w,0)),d>=0&&(d=Math.max(d-v.h-m.h,0)),o(s,l.l,l.t,p,d)},i.isBodyLtr=function(n){return n=n||t.doc,(t.body(n).dir||n.documentElement.dir||"ltr").toLowerCase()=="ltr"},i.docScroll=function(r){r=r||t.doc;var s=t.doc.parentWindow||t.doc.defaultView;return"pageXOffset"in s?{x:s.pageXOffset,y:s.pageYOffset}:(s=e("quirks")?t.body(r):r.documentElement)&&{x:i.fixIeBiDiScrollLeft(s.scrollLeft||0,r),y:s.scrollTop||0}},e("ie")&&(i.getIeDocumentElementOffset=function(r){r=r||t.doc;var i=r.documentElement;if(e("ie")<8){var s=i.getBoundingClientRect(),o=s.left,u=s.top;return e("ie")<7&&(o+=i.clientLeft,u+=i.clientTop),{x:o<0?0:o,y:u<0?0:u}}return{x:0,y:0}}),i.fixIeBiDiScrollLeft=function(r,s){s=s||t.doc;var o=e("ie");if(o&&!i.isBodyLtr(s)){var u=e("quirks"),a=u?t.body(s):s.documentElement,f=t.global;return o==6&&!u&&f.frameElement&&a.scrollHeight>a.clientHeight&&(r+=a.clientLeft),o<8||u?r+a.clientWidth-a.scrollWidth:-r}return r},i.position=function(r,s){r=n.byId(r);var o=t.body(r.ownerDocument),u=r.getBoundingClientRect();u={x:u.left,y:u.top,w:u.right-u.left,h:u.bottom-u.top};if(e("ie")<9){var a=i.getIeDocumentElementOffset(r.ownerDocument);u.x-=a.x+(e("quirks")?o.clientLeft+o.offsetLeft:0),u.y-=a.y+(e("quirks")?o.clientTop+o.offsetTop:0)}if(s){var f=i.docScroll(r.ownerDocument);u.x+=f.x,u.y+=f.y}return u},i.getMarginSize=function(t,s){t=n.byId(t);var o=i.getMarginExtents(t,s||r.getComputedStyle(t)),u=t.getBoundingClientRect();return{w:u.right-u.left+o.w,h:u.bottom-u.top+o.h}},i.normalizeEvent=function(t){"layerX"in t||(t.layerX=t.offsetX,t.layerY=t.offsetY);if(!e("dom-addeventlistener")){var n=t.target,r=n&&n.ownerDocument||document,s=e("quirks")?r.body:r.documentElement,o=i.getIeDocumentElementOffset(r);t.pageX=t.clientX+i.fixIeBiDiScrollLeft(s.scrollLeft||0,r)-o.x,t.pageY=t.clientY+(s.scrollTop||0)-o.y}},i})},"dojo/mouse":function(){define(["./_base/kernel","./on","./has","./dom","./_base/window"],function(e,t,n,r,i){function o(e,n){var i=function(i,s){return t(i,e,function(e){if(n)return n(e,s);if(!r.isDescendant(e.relatedTarget,i))return s.call(this,e)})};return i.bubble=function(t){return o(e,function(e,n){var r=t(e.target),i=e.relatedTarget;if(r&&r!=(i&&i.nodeType==1&&t(i)))return n.call(r,e)})},i}n.add("dom-quirks",i.doc&&i.doc.compatMode=="BackCompat"),n.add("events-mouseenter",i.doc&&"onmouseenter"in i.doc.createElement("div")),n.add("events-mousewheel",i.doc&&"onmousewheel"in i.doc);var s;n("dom-quirks")&&n("ie")||!n("dom-addeventlistener")?s={LEFT:1,MIDDLE:4,RIGHT:2,isButton:function(e,t){return e.button&t},isLeft:function(e){return e.button&1},isMiddle:function(e){return e.button&4},isRight:function(e){return e.button&2}}:s={LEFT:0,MIDDLE:1,RIGHT:2,isButton:function(e,t){return e.button==t},isLeft:function(e){return e.button==0},isMiddle:function(e){return e.button==1},isRight:function(e){return e.button==2}},e.mouseButtons=s;var u;return n("events-mousewheel")?u="mousewheel":u=function(e,n){return t(e,"DOMMouseScroll",function(e){e.wheelDelta=-e.detail,n.call(this,e)})},{_eventHandler:o,enter:o("mouseover"),leave:o("mouseout"),wheel:u,isLeft:s.isLeft,isMiddle:s.isMiddle,isRight:s.isRight}})},"dojo/_base/sniff":function(){define(["./kernel","./lang","../sniff"],function(e,t,n){return e._name="browser",t.mixin(e,{isBrowser:!0,isFF:n("ff"),isIE:n("ie"),isKhtml:n("khtml"),isWebKit:n("webkit"),isMozilla:n("mozilla"),isMoz:n("mozilla"),isOpera:n("opera"),isSafari:n("safari"),isChrome:n("chrome"),isMac:n("mac"),isIos:n("ios"),isAndroid:n("android"),isWii:n("wii"),isQuirks:n("quirks"),isAir:n("air")}),n})},"dojo/keys":function(){define(["./_base/kernel","./sniff"],function(e,t){return e.keys={BACKSPACE:8,TAB:9,CLEAR:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,META:t("webkit")?91:224,PAUSE:19,CAPS_LOCK:20,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40,INSERT:45,DELETE:46,HELP:47,LEFT_WINDOW:91,RIGHT_WINDOW:92,SELECT:93,NUMPAD_0:96,NUMPAD_1:97,NUMPAD_2:98,NUMPAD_3:99,NUMPAD_4:100,NUMPAD_5:101,NUMPAD_6:102,NUMPAD_7:103,NUMPAD_8:104,NUMPAD_9:105,NUMPAD_MULTIPLY:106,NUMPAD_PLUS:107,NUMPAD_ENTER:108,NUMPAD_MINUS:109,NUMPAD_PERIOD:110,NUMPAD_DIVIDE:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,NUM_LOCK:144,SCROLL_LOCK:145,UP_DPAD:175,DOWN_DPAD:176,LEFT_DPAD:177,RIGHT_DPAD:178,copyKey:t("mac")&&!t("air")?t("safari")?91:224:17}})},"dojo/dom-class":function(){define(["./_base/lang","./_base/array","./dom"],function(e,t,n){function u(e){if(typeof e=="string"||e instanceof String){if(e&&!s.test(e))return o[0]=e,o;var n=e.split(s);return n.length&&!n[0]&&n.shift(),n.length&&!n[n.length-1]&&n.pop(),n}return e?t.filter(e,function(e){return e}):[]}var r="className",i,s=/\s+/,o=[""],a={};return i={contains:function(t,i){return(" "+n.byId(t)[r]+" ").indexOf(" "+i+" ")>=0},add:function(t,i){t=n.byId(t),i=u(i);var s=t[r],o;s=s?" "+s+" ":" ",o=s.length;for(var a=0,f=i.length,l;a<f;++a)l=i[a],l&&s.indexOf(" "+l+" ")<0&&(s+=l+" ");o<s.length&&(t[r]=s.substr(1,s.length-2))},remove:function(i,s){i=n.byId(i);var o;if(s!==undefined){s=u(s),o=" "+i[r]+" ";for(var a=0,f=s.length;a<f;++a)o=o.replace(" "+s[a]+" "," ");o=e.trim(o)}else o="";i[r]!=o&&(i[r]=o)},replace:function(t,s,o){t=n.byId(t),a[r]=t[r],i.remove(a,o),i.add(a,s),t[r]!==a[r]&&(t[r]=a[r])},toggle:function(t,r,s){t=n.byId(t);if(s===undefined){r=u(r);for(var o=0,a=r.length,f;o<a;++o)f=r[o],i[i.contains(t,f)?"remove":"add"](t,f)}else i[s?"add":"remove"](t,r);return s}},i})},"dojo/Stateful":function(){define(["./_base/declare","./_base/lang","./_base/array","./when"],function(e,t,n,r){return e("dojo.Stateful",null,{_attrPairNames:{},_getAttrNames:function(e){var t=this._attrPairNames;return t[e]?t[e]:t[e]={s:"_"+e+"Setter",g:"_"+e+"Getter"}},postscript:function(e){e&&this.set(e)},_get:function(e,t){return typeof this[t.g]=="function"?this[t.g]():this[e]},get:function(e){return this._get(e,this._getAttrNames(e))},set:function(e,t){if(typeof e=="object"){for(var n in e)e.hasOwnProperty(n)&&n!="_watchCallbacks"&&this.set(n,e[n]);return this}var i=this._getAttrNames(e),s=this._get(e,i),o=this[i.s],u;typeof o=="function"?u=o.apply(this,Array.prototype.slice.call(arguments,1)):this[e]=t;if(this._watchCallbacks){var a=this;r(u,function(){a._watchCallbacks(e,s,t)})}return this},_changeAttrValue:function(e,t){var n=this.get(e);return this[e]=t,this._watchCallbacks&&this._watchCallbacks(e,n,t),this},watch:function(e,t){var r=this._watchCallbacks;if(!r){var i=this;r=this._watchCallbacks=function(e,t,n,s){var o=function(r){if(r){r=r.slice();for(var s=0,o=r.length;s<o;s++)r[s].call(i,e,t,n)}};o(r["_"+e]),s||o(r["*"])}}!t&&typeof e=="function"?(t=e,e="*"):e="_"+e;var s=r[e];typeof s!="object"&&(s=r[e]=[]),s.push(t);var o={};return o.unwatch=o.remove=function(){var e=n.indexOf(s,t);e>-1&&s.splice(e,1)},o}})})},"dojo/when":function(){define(["./Deferred","./promise/Promise"],function(e,t){"use strict";return function(r,i,s,o){var u=r&&typeof r.then=="function",a=u&&r instanceof t;if(!u)return arguments.length>1?i?i(r):r:(new e).resolve(r);if(!a){var f=new e(r.cancel);r.then(f.resolve,f.reject,f.progress),r=f.promise}return i||s||o?r.then(i,s,o):r}})},"dojo/Deferred":function(){define(["./has","./_base/lang","./errors/CancelError","./promise/Promise","./promise/instrumentation"],function(e,t,n,r,i){"use strict";var s=0,o=1,u=2,a="This deferred has already been fulfilled.",f=Object.freeze||function(){},l=function(e,t,n,r,i){t===u&&d.instrumentRejected&&e.length===0&&d.instrumentRejected(n,!1,r,i);for(var s=0;s<e.length;s++)c(e[s],t,n,r)},c=function(e,t,n,r){var i=e[t],a=e.deferred;if(i)try{var f=i(n);if(t===s)typeof f!="undefined"&&p(a,t,f);else{if(f&&typeof f.then=="function"){e.cancel=f.cancel,f.then(h(a,o),h(a,u),h(a,s));return}p(a,o,f)}}catch(l){p(a,u,l)}else p(a,t,n);t===u&&d.instrumentRejected&&d.instrumentRejected(n,!!i,r,a.promise)},h=function(e,t){return function(n){p(e,t,n)}},p=function(e,t,n){if(!e.isCanceled())switch(t){case s:e.progress(n);break;case o:e.resolve(n);break;case u:e.reject(n)}},d=function(e){var t=this.promise=new r,i=this,h,p,v,m=!1,g=[];Error.captureStackTrace&&(Error.captureStackTrace(i,d),Error.captureStackTrace(t,d)),this.isResolved=t.isResolved=function(){return h===o},this.isRejected=t.isRejected=function(){return h===u},this.isFulfilled=t.isFulfilled=function(){return!!h},this.isCanceled=t.isCanceled=function(){return m},this.progress=function(e,n){if(!h)return l(g,s,e,null,i),t;if(n===!0)throw new Error(a);return t},this.resolve=function(e,n){if(!h)return l(g,h=o,p=e,null,i),g=null,t;if(n===!0)throw new Error(a);return t};var y=this.reject=function(e,n){if(!h)return Error.captureStackTrace&&Error.captureStackTrace(v={},y),l(g,h=u,p=e,v,i),g=null,t;if(n===!0)throw new Error(a);return t};this.then=t.then=function(e,n,r){var i=[r,e,n];return i.cancel=t.cancel,i.deferred=new d(function(e){return i.cancel&&i.cancel(e)}),h&&!g?c(i,h,p,v):g.push(i),i.deferred.promise},this.cancel=t.cancel=function(t,r){if(!h){if(e){var i=e(t);t=typeof i=="undefined"?t:i}m=!0;if(!h)return typeof t=="undefined"&&(t=new n),y(t),t;if(h===u&&p===t)return t}else if(r===!0)throw new Error(a)},f(t)};return d.prototype.toString=function(){return"[object Deferred]"},i&&i(d),d})},"dojo/errors/CancelError":function(){define(["./create"],function(e){return e("CancelError",null,null,{dojoType:"cancel"})})},"dojo/errors/create":function(){define(["../_base/lang"],function(e){return function(t,n,r,i){r=r||Error;var s=function(e){if(r===Error){Error.captureStackTrace&&Error.captureStackTrace(this,s);var t=Error.call(this,e),i;for(i in t)t.hasOwnProperty(i)&&(this[i]=t[i]);this.message=e,this.stack=t.stack}else r.apply(this,arguments);n&&n.apply(this,arguments)};return s.prototype=e.delegate(r.prototype,i),s.prototype.name=t,s.prototype.constructor=s,s}})},"dojo/promise/Promise":function(){define(["../_base/lang"],function(e){"use strict";function t(){throw new TypeError("abstract")}return e.extend(function(){},{then:function(e,n,r){t()},cancel:function(e,n){t()},isResolved:function(){t()},isRejected:function(){t()},isFulfilled:function(){t()},isCanceled:function(){t()},always:function(e){return this.then(e,e)},otherwise:function(e){return this.then(null,e)},trace:function(){return this},traceRejected:function(){return this},toString:function(){return"[object Promise]"}})})},"dojo/promise/instrumentation":function(){define(["./tracer","../has","../_base/lang","../_base/array"],function(e,t,n,r){function i(e,t,n){var r="";e&&e.stack&&(r+=e.stack),t&&t.stack&&(r+="\n ----------------------------------------\n rejected"+t.stack.split("\n").slice(1).join("\n").replace(/^\s+/," ")),n&&n.stack&&(r+="\n ----------------------------------------\n"+n.stack),console.error(e,r)}function s(e,t,n,r){t||i(e,n,r)}function f(e,t,n,i){t?r.some(o,function(t,n){if(t.error===e)return o.splice(n,1),!0}):r.some(o,function(t){return t.error===e})||o.push({error:e,rejection:n,deferred:i,timestamp:(new Date).getTime()}),u||(u=setTimeout(l,a))}function l(){var e=(new Date).getTime(),t=e-a;o=r.filter(o,function(e){return e.timestamp<t?(i(e.error,e.rejection,e.deferred),!1):!0}),o.length?u=setTimeout(l,o[0].timestamp+a-e):u=!1}var o=[],u=!1,a=1e3;return function(r){var i=t("config-useDeferredInstrumentation");if(i){e.on("resolved",n.hitch(console,"log","resolved")),e.on("rejected",n.hitch(console,"log","rejected")),e.on("progress",n.hitch(console,"log","progress"));var o=[];typeof i=="string"&&(o=i.split(","),i=o.shift());if(i==="report-rejections")r.instrumentRejected=s;else{if(i!=="report-unhandled-rejections"&&i!==!0&&i!==1)throw new Error("Unsupported instrumentation usage <"+i+">");r.instrumentRejected=f,a=parseInt(o[0],10)||a}}}})},"dojo/promise/tracer":function(){define(["../_base/lang","./Promise","../Evented"],function(e,t,n){"use strict";function s(e){setTimeout(function(){i.apply(r,e)},0)}var r=new n,i=r.emit;return r.emit=null,t.prototype.trace=function(){var t=e._toArray(arguments);return this.then(function(e){s(["resolved",e].concat(t))},function(e){s(["rejected",e].concat(t))},function(e){s(["progress",e].concat(t))}),this},t.prototype.traceRejected=function(){var t=e._toArray(arguments);return this.otherwise(function(e){s(["rejected",e].concat(t))}),this},r})},"dojo/io-query":function(){define(["./_base/lang"],function(e){var t={};return{objectToQuery:function(r){var i=encodeURIComponent,s=[];for(var o in r){var u=r[o];if(u!=t[o]){var a=i(o)+"=";if(e.isArray(u))for(var f=0,l=u.length;f<l;++f)s.push(a+i(u[f]));else s.push(a+i(u))}}return s.join("&")},queryToObject:function(n){var r=decodeURIComponent,i=n.split("&"),s={},o,u;for(var a=0,f=i.length,l;a<f;++a){l=i[a];if(l.length){var c=l.indexOf("=");c<0?(o=r(l),u=""):(o=r(l.slice(0,c)),u=r(l.slice(c+1))),typeof s[o]=="string"&&(s[o]=[s[o]]),e.isArray(s[o])?s[o].push(u):s[o]=u}}return s}}})},"dojo/router":function(){define(["./router/RouterBase"],function(e){return new e({})})},"dojo/router/RouterBase":function(){define(["dojo/_base/declare","dojo/hash","dojo/topic"],function(e,t,n){function i(e,t,n){var r,i,s,o,u,a,f;r=this.callbackQueue,i=!1,s=!1,o={stopImmediatePropagation:function(){i=!0},preventDefault:function(){s=!0},oldPath:t,newPath:n,params:e},u=[o];if(e instanceof Array)u=u.concat(e);else for(var l in e)u.push(e[l]);for(a=0,f=r.length;a<f;++a)i||r[a].apply(null,u);return!s}var r;String.prototype.trim?r=function(e){return e.trim()}:r=function(e){return e.replace(/^\s\s*/,"").replace(/\s\s*$/,"")};var s=e(null,{_routes:null,_routeIndex:null,_started:!1,_currentPath:"",idMatch:/:(\w[\w\d]*)/g,idReplacement:"([^\\/]+)",globMatch:/\*(\w[\w\d]*)/,globReplacement:"(.+)",constructor:function(e){this._routes=[],this._routeIndex={};for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t])},register:function(e,t){return this._registerRoute(e,t)},registerBefore:function(e,t){return this._registerRoute(e,t,!0)},go:function(e,n){var i;return typeof e!="string"?!1:(e=r(e),i=this._handlePathChange(e),i&&t(e,n),i)},startup:function(e){if(this._started)return;var r=this,i=t();this._started=!0,this._hashchangeHandle=n.subscribe("/dojo/hashchange",function(){r._handlePathChange.apply(r,arguments)}),i?this._handlePathChange(i):this.go(e,!0)},destroy:function(){this._hashchangeHandle.remove(),this._routes=null,this._routeIndex=null},_handlePathChange:function(e){var t,n,r,i,s,o,u,a,f,l=this._routes,c=this._currentPath;if(!this._started||e===c)return u;u=!0;for(t=0,r=l.length;t<r;++t){s=l[t],o=s.route.exec(e);if(o){if(s.parameterNames){a=s.parameterNames,f={};for(n=0,i=a.length;n<i;++n)f[a[n]]=o[n+1]}else f=o.slice(1);u=s.fire(f,c,e)}}return u&&(this._currentPath=e),u},_convertRouteToRegExp:function(e){return e=e.replace(this.idMatch,this.idReplacement),e=e.replace(this.globMatch,this.globReplacement),e="^"+e+"$",new RegExp(e)},_getParameterNames:function(e){var t=this.idMatch,n=this.globMatch,r=[],i;t.lastIndex=0;while((i=t.exec(e))!==null)r.push(i[1]);return(i=n.exec(e))!==null&&r.push(i[1]),r.length>0?r:null},_indexRoutes:function(){var e,t,n,r,i=this._routes;r=this._routeIndex={};for(e=0,t=i.length;e<t;++e)n=i[e],r[n.route]=e},_registerRoute:function(e,t,n){var r,s,o,u,a,f=this,l=this._routes,c=this._routeIndex;return r=this._routeIndex[e],s=typeof r!="undefined",s&&(o=l[r]),o||(o={route:e,callbackQueue:[],fire:i}),u=o.callbackQueue,typeof e=="string"&&(o.parameterNames=this._getParameterNames(e),o.route=this._convertRouteToRegExp(e)),n?u.unshift(t):u.push(t),s||(r=l.length,c[e]=r,l.push(o)),a=!1,{remove:function(){var e,n;if(a)return;for(e=0,n=u.length;e<n;++e)u[e]===t&&u.splice(e,1);u.length===0&&(l.splice(r,1),f._indexRoutes()),a=!0},register:function(t,n){return f.register(e,t,n)}}}});return s})},"dojo/hash":function(){define(["./_base/kernel","require","./_base/config","./aspect","./_base/lang","./topic","./domReady","./sniff"],function(e,t,n,r,i,s,o,u){function h(e,t){var n=e.indexOf(t);return n>=0?e.substring(n+1):""}function p(){return h(location.href,"#")}function d(){s.publish("/dojo/hashchange",p())}function v(){if(p()===a)return;a=p(),d()}function m(e){if(f){if(f.isTransitioning()){setTimeout(i.hitch(null,m,e),c);return}var t=f.iframe.location.href,n=t.indexOf("?");f.iframe.location.replace(t.substring(0,n)+"?"+e);return}location.replace("#"+e),!l&&v()}function g(){function y(){a=p(),u=m?a:h(g.href,"?"),f=!1,l=null}var r=document.createElement("iframe"),s="dojo-hash-iframe",o=n.dojoBlankHtmlUrl||t.toUrl("./resources/blank.html");n.useXDomain&&!n.dojoBlankHtmlUrl&&console.warn("dojo.hash: When using cross-domain Dojo builds, please save dojo/resources/blank.html to your domain and set djConfig.dojoBlankHtmlUrl to the path on your domain to blank.html"),r.id=s,r.src=o+"?"+p(),r.style.display="none",document.body.appendChild(r),this.iframe=e.global[s];var u,f,l,v,m,g=this.iframe.location;this.isTransitioning=function(){return f},this.pollLocation=function(){if(!m)try{var e=h(g.href,"?");document.title!=v&&(v=this.iframe.document.title=document.title)}catch(t){m=!0,console.error("dojo.hash: Error adding history entry. Server unreachable.")}var n=p();if(f&&a===n){if(!m&&e!==l){setTimeout(i.hitch(this,this.pollLocation),0);return}y(),d()}else if(a!==n||!m&&u!==e){if(a!==n){a=n,f=!0,l=n,r.src=o+"?"+l,m=!1,setTimeout(i.hitch(this,this.pollLocation),0);return}m||(location.href="#"+g.search.substring(1),y(),d())}setTimeout(i.hitch(this,this.pollLocation),c)},y(),setTimeout(i.hitch(this,this.pollLocation),c)}e.hash=function(e,t){return arguments.length?(e.charAt(0)=="#"&&(e=e.substring(1)),t?m(e):location.href="#"+e,e):p()};var a,f,l,c=n.hashPollFrequency||100;return o(function(){"onhashchange"in e.global&&(!u("ie")||u("ie")>=8&&document.compatMode!="BackCompat")?l=r.after(e.global,"onhashchange",d,!0):document.addEventListener?(a=p(),setInterval(v,c)):document.attachEvent&&(f=new g)}),e.hash})},"dojo/store/Observable":function(){define(["../_base/kernel","../_base/lang","../when","../_base/array"],function(e,t,n,r){var i=function(e){function f(t,r){var i=e[t];i&&(e[t]=function(e){if(a)return i.apply(this,arguments);a=!0;try{var t=i.apply(this,arguments);return n(t,function(t){r(typeof t=="object"&&t||e)}),t}finally{a=!1}})}var i,s=[],o=0;e=t.delegate(e),e.notify=function(e,t){o++;var n=s.slice();for(var r=0,i=n.length;r<i;r++)n[r](e,t)};var u=e.query;e.query=function(a,f){f=f||{};var l=u.apply(this,arguments);if(l&&l.forEach){var c=t.mixin({},f);delete c.start,delete c.count;var h=e.queryEngine&&e.queryEngine(a,c),p=o,d=[],v;l.observe=function(t,u){d.push(t)==1&&s.push(v=function(t,s){n(l,function(n){var a=n.length!=f.count,l,c,v;if(++p!=o)throw new Error("Query is out of date, you must observe() the query prior to any data modifications");var m,g=-1,y=-1;if(s!==i)for(l=0,c=n.length;l<c;l++){var b=n[l];if(e.getIdentity(b)==s){m=b,g=l,(h||!t)&&n.splice(l,1);break}}if(h){if(t&&(h.matches?h.matches(t):h([t]).length)){var w=g>-1?g:n.length;n.splice(w,0,t),y=r.indexOf(h(n),t),n.splice(w,1),f.start&&y==0||!a&&y==n.length?y=-1:n.splice(y,0,t)}}else t&&(s!==i?y=g:f.start||(y=e.defaultIndex||0,n.splice(y,0,t)));if((g>-1||y>-1)&&(u||!h||g!=y)){var E=d.slice();for(l=0;v=E[l];l++)v(t||m,g,y)}})});var a={};return a.remove=a.cancel=function(){var e=r.indexOf(d,t);e>-1&&(d.splice(e,1),d.length||s.splice(r.indexOf(s,v),1))},a}}return l};var a;return f("put",function(t){e.notify(t,e.getIdentity(t))}),f("add",function(t){e.notify(t)}),f("remove",function(t){e.notify(undefined,t)}),e};return t.setObject("dojo.store.Observable",i),i})},"dojo/store/Memory":function(){define(["../_base/declare","./util/QueryResults","./util/SimpleQueryEngine"],function(e,t,n){var r=null;return e("dojo.store.Memory",r,{constructor:function(e){for(var t in e)this[t]=e[t];this.setData(this.data||[])},data:null,idProperty:"id",index:null,queryEngine:n,get:function(e){return this.data[this.index[e]]},getIdentity:function(e){return e[this.idProperty]},put:function(e,t){var n=this.data,r=this.index,i=this.idProperty,s=e[i]=t&&"id"in t?t.id:i in e?e[i]:Math.random();if(s in r){if(t&&t.overwrite===!1)throw new Error("Object already exists");n[r[s]]=e}else r[s]=n.push(e)-1;return s},add:function(e,t){return(t=t||{}).overwrite=!1,this.put(e,t)},remove:function(e){var t=this.index,n=this.data;if(e in t)return n.splice(t[e],1),this.setData(n),!0},query:function(e,n){return t(this.queryEngine(e,n)(this.data))},setData:function(e){e.items?(this.idProperty=e.identifier,e=this.data=e.items):this.data=e,this.index={};for(var t=0,n=e.length;t<n;t++)this.index[e[t][this.idProperty]]=t}})})},"dojo/store/util/QueryResults":function(){define(["../../_base/array","../../_base/lang","../../when"],function(e,t,n){var r=function(i){function s(t){i[t]||(i[t]=function(){var s=arguments;return n(i,function(n){return Array.prototype.unshift.call(s,n),r(e[t].apply(e,s))})})}return i?(i.then&&(i=t.delegate(i)),s("forEach"),s("filter"),s("map"),i.total||(i.total=n(i,function(e){return e.length})),i):i};return t.setObject("dojo.store.util.QueryResults",r),r})},"dojo/store/util/SimpleQueryEngine":function(){define(["../../_base/array"],function(e){return function(t,n){function i(r){var i=e.filter(r,t),s=n&&n.sort;s&&i.sort(typeof s=="function"?s:function(e,t){for(var n,r=0;n=s[r];r++){var i=e[n.attribute],o=t[n.attribute];if(i!=o)return!!n.descending==(i==null||i>o)?-1:1}return 0});if(n&&(n.start||n.count)){var o=i.length;i=i.slice(n.start||0,(n.start||0)+(n.count||Infinity)),i.total=o}return i}switch(typeof t){default:throw new Error("Can not query with a "+typeof t);case"object":case"undefined":var r=t;t=function(e){for(var t in r){var n=r[t];if(n&&n.test){if(!n.test(e[t],e))return!1}else if(n!=e[t])return!1}return!0};break;case"string":if(!this[t])throw new Error("No filter function "+t+" was found in store");t=this[t];case"function":}return i.matches=t,i}})},"dojo/query":function(){define(["./_base/kernel","./has","./dom","./on","./_base/array","./_base/lang","./selector/_loader","./selector/_loader!default"],function(e,t,n,r,i,s,o,u){"use strict";function E(e,t){var r=function(r,i){if(typeof i=="string"){i=n.byId(i);if(!i)return new t([])}var s=typeof r=="string"?e(r,i):r?r.end&&r.on?r:[r]:[];return s.end&&s.on?s:new t(s)};r.matches=e.match||function(e,t,n){return r.filter([e],t,n).length>0},r.filter=e.filter||function(e,t,n){return r(t,n).filter(function(t){return i.indexOf(e,t)>-1})};if(typeof e!="function"){var s=e.search;e=function(e,t){return s(t||document,e)}}return r}t.add("array-extensible",function(){return s.delegate([],{length:1}).length==1&&!t("bug-for-in-skips-shadowed")});var a=Array.prototype,f=a.slice,l=a.concat,c=i.forEach,h=function(e,t,n){var r=new(n||this._NodeListCtor||b)(e);return t?r._stash(t):r},p=function(t,n,r){return n=[0].concat(f.call(n,0)),r=r||e.global,function(e){return n[0]=e,t.apply(r,n)}},d=function(e,t){return function(){return this.forEach(p(e,arguments,t)),this}},v=function(e,t){return function(){return this.map(p(e,arguments,t))}},m=function(e,t){return function(){return this.filter(p(e,arguments,t))}},g=function(t,n,r){return function(){var i=arguments,s=p(t,i,r);return n.call(r||e.global,i)?this.map(s):(this.forEach(s),this)}},y=function(e){var n=this instanceof b&&t("array-extensible");typeof e=="number"&&(e=Array(e));var r=e&&"length"in e?e:arguments;if(n||!r.sort){var i=n?this:[],o=i.length=r.length;for(var u=0;u<o;u++)i[u]=r[u];if(n)return i;r=i}return s._mixin(r,w),r._NodeListCtor=function(e){return b(e)},r},b=y,w=b.prototype=t("array-extensible")?[]:{};b._wrap=w._wrap=h,b._adaptAsMap=v,b._adaptAsForEach=d,b._adaptAsFilter=m,b._adaptWithCondition=g,c(["slice","splice"],function(e){var t=a[e];w[e]=function(){return this._wrap(t.apply(this,arguments),e=="slice"?this:null)}}),c(["indexOf","lastIndexOf","every","some"],function(t){var n=i[t];w[t]=function(){return n.apply(e,[this].concat(f.call(arguments,0)))}}),s.extend(y,{constructor:b,_NodeListCtor:b,toString:function(){return this.join(",")},_stash:function(e){return this._parent=e,this},on:function(e,t){var n=this.map(function(n){return r(n,e,t)});return n.remove=function(){for(var e=0;e<n.length;e++)n[e].remove()},n},end:function(){return this._parent?this._parent:new this._NodeListCtor(0)},concat:function(e){var t=f.call(this,0),n=i.map(arguments,function(e){return f.call(e,0)});return this._wrap(l.apply(t,n),this)},map:function(e,t){return this._wrap(i.map(this,e,t),this)},forEach:function(e,t){return c(this,e,t),this},filter:function(e){var t=arguments,n=this,r=0;if(typeof e=="string"){n=S._filterResult(this,t[0]);if(t.length==1)return n._stash(this);r=1}return this._wrap(i.filter(n,t[r],t[r+1]),this)},instantiate:function(e,t){var n=s.isFunction(e)?e:s.getObject(e);return t=t||{},this.forEach(function(e){new n(t,e)})},at:function(){var e=new this._NodeListCtor(0);return c(arguments,function(t){t<0&&(t=this.length+t),this[t]&&e.push(this[t])},this),e._stash(this)}});var S=E(u,y);return e.query=E(u,function(e){return y(e)}),S.load=function(e,t,n){o.load(e,t,function(e){n(E(e,y))})},e._filterQueryResult=S._filterResult=function(e,t,n){return new y(S.filter(e,t,n))},e.NodeList=S.NodeList=y,S})},"dojo/selector/_loader":function(){define(["../has","require"],function(e,t){"use strict";var n=document.createElement("div");e.add("dom-qsa2.1",!!n.querySelectorAll),e.add("dom-qsa3",function(){try{return n.innerHTML="<p class='TEST'></p>",n.querySelectorAll(".TEST:empty").length==1}catch(e){}});var r,i="./acme",s="./lite";return{load:function(n,o,u,a){var f=t;n=n=="default"?e("config-selectorEngine")||"css3":n,n=n=="css2"||n=="lite"?s:n=="css2.1"?e("dom-qsa2.1")?s:i:n=="css3"?e("dom-qsa3")?s:i:n=="acme"?i:(f=o)&&n;if(n.charAt(n.length-1)=="?"){n=n.substring(0,n.length-1);var l=!0}if(l&&(e("dom-compliant-qsa")||r))return u(r);f([n],function(e){n!="./lite"&&(r=e),u(e)})}}})},"dojo/selector/lite":function(){define(["../has","../_base/kernel"],function(e,t){"use strict";var n=document.createElement("div"),r=n.matchesSelector||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector,i=n.querySelectorAll,s=/([^\s,](?:"(?:\\.|[^"])+"|'(?:\\.|[^'])+'|[^,])*)/g;e.add("dom-matches-selector",!!r),e.add("dom-qsa",!!i);var o=function(e,n){if(f&&e.indexOf(",")>-1)return f(e,n);var r=n?n.ownerDocument||n:t.doc||document,s=(i?/^([\w]*)#([\w\-]+$)|^(\.)([\w\-\*]+$)|^(\w+$)/:/^([\w]*)#([\w\-]+)(?:\s+(.*))?$|(?:^|(>|.+\s+))([\w\-\*]+)(\S*$)/).exec(e);n=n||r;if(s){if(s[2]){var l=t.byId?t.byId(s[2],r):r.getElementById(s[2]);if(!l||s[1]&&s[1]!=l.tagName.toLowerCase())return[];if(n!=r){var c=l;while(c!=n){c=c.parentNode;if(!c)return[]}}return s[3]?o(s[3],l):[l]}if(s[3]&&n.getElementsByClassName)return n.getElementsByClassName(s[4]);var l;if(s[5]){l=n.getElementsByTagName(s[5]);if(!s[4]&&!s[6])return l;e=(s[4]||"")+s[6]}}if(i)return n.nodeType===1&&n.nodeName.toLowerCase()!=="object"?u(n,e,n.querySelectorAll):n.querySelectorAll(e);l||(l=n.getElementsByTagName("*"));var h=[];for(var p=0,d=l.length;p<d;p++){var v=l[p];v.nodeType==1&&a(v,e,n)&&h.push(v)}return h},u=function(e,t,n){var r=e,i=e.getAttribute("id"),o=i||"__dojo__",u=e.parentNode,a=/^\s*[+~]/.test(t);if(a&&!u)return[];i?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),a&&u&&(e=e.parentNode);var f=t.match(s);for(var l=0;l<f.length;l++)f[l]="[id='"+o+"'] "+f[l];t=f.join(",");try{return n.call(e,t)}finally{i||r.removeAttribute("id")}};if(!e("dom-matches-selector"))var a=function(){function i(e,t,n){var i=t.charAt(0);if(i=='"'||i=="'")t=t.slice(1,-1);t=t.replace(/\\/g,"");var s=r[n||""];return function(n){var r=n.getAttribute(e);return r&&s(r,t)}}function s(e){return function(t,n){while((t=t.parentNode)!=n)if(e(t,n))return!0}}function o(e){return function(t,n){return t=t.parentNode,e?t!=n&&e(t,n):t==n}}function a(e,t){return e?function(n,r){return t(n)&&e(n,r)}:t}var e=n.tagName=="div"?"toLowerCase":"toUpperCase",t={"":function(t){return t=t[e](),function(e){return e.tagName==t}},".":function(e){var t=" "+e+" ";return function(n){return n.className.indexOf(e)>-1&&(" "+n.className+" ").indexOf(t)>-1}},"#":function(e){return function(t){return t.id==e}}},r={"^=":function(e,t){return e.indexOf(t)==0},"*=":function(e,t){return e.indexOf(t)>-1},"$=":function(e,t){return e.substring(e.length-t.length,e.length)==t},"~=":function(e,t){return(" "+e+" ").indexOf(" "+t+" ")>-1},"|=":function(e,t){return(e+"-").indexOf(t+"-")==0},"=":function(e,t){return e==t},"":function(e,t){return!0}},u={};return function(e,n,r){var f=u[n];if(!f){if(n.replace(/(?:\s*([> ])\s*)|(#|\.)?((?:\\.|[\w-])+)|\[\s*([\w-]+)\s*(.?=)?\s*("(?:\\.|[^"])+"|'(?:\\.|[^'])+'|(?:\\.|[^\]])*)\s*\]/g,function(e,n,r,u,l,c,h){return u?f=a(f,t[r||""](u.replace(/\\/g,""))):n?f=(n==" "?s:o)(f):l&&(f=a(f,i(l,h,c))),""}))throw new Error("Syntax error in query");if(!f)return!0;u[n]=f}return f(e,r)}}();if(!e("dom-qsa"))var f=function(e,t){var n=e.match(s),r=[];for(var i=0;i<n.length;i++){e=new String(n[i].replace(/\s*$/,"")),e.indexOf=escape;var u=o(e,t);for(var a=0,f=u.length;a<f;a++){var l=u[a];r[l.sourceIndex]=l}}var c=[];for(i in r)c.push(r[i]);return c};return o.match=r?function(e,t,n){return n&&n.nodeType!=9?u(n,t,function(t){return r.call(e,t)}):r.call(e,t)}:a,o})},"dojo/NodeList-dom":function(){define(["./_base/kernel","./query","./_base/array","./_base/lang","./dom-class","./dom-construct","./dom-geometry","./dom-attr","./dom-style"],function(e,t,n,r,i,s,o,u,a){function v(e){return function(t,n,r){return arguments.length==2?e[typeof n=="string"?"get":"set"](t,n):e.set(t,n,r)}}var f=function(e){return e.length==1&&typeof e[0]=="string"},l=function(e){var t=e.parentNode;t&&t.removeChild(e)},c=t.NodeList,h=c._adaptWithCondition,p=c._adaptAsForEach,d=c._adaptAsMap;return r.extend(c,{_normalize:function(t,n){var i=t.parse===!0;if(typeof t.template=="string"){var o=t.templateFunc||e.string&&e.string.substitute;t=o?o(t.template,t):t}var u=typeof t;return u=="string"||u=="number"?(t=s.toDom(t,n&&n.ownerDocument),t.nodeType==11?t=r._toArray(t.childNodes):t=[t]):r.isArrayLike(t)?r.isArray(t)||(t=r._toArray(t)):t=[t],i&&(t._runParse=!0),t},_cloneNode:function(e){return e.cloneNode(!0)},_place:function(t,n,r,i){if(n.nodeType!=1&&r=="only")return;var o=n,u,a=t.length;for(var f=a-1;f>=0;f--){var l=i?this._cloneNode(t[f]):t[f];if(t._runParse&&e.parser&&e.parser.parse){u||(u=o.ownerDocument.createElement("div")),u.appendChild(l),e.parser.parse(u),l=u.firstChild;while(u.firstChild)u.removeChild(u.firstChild)}f==a-1?s.place(l,o,r):o.parentNode.insertBefore(l,o),o=l}},position:d(o.position),attr:h(v(u),f),style:h(v(a),f),addClass:p(i.add),removeClass:p(i.remove),toggleClass:p(i.toggle),replaceClass:p(i.replace),empty:p(s.empty),removeAttr:p(u.remove),marginBox:d(o.getMarginBox),place:function(e,n){var r=t(e)[0];return this.forEach(function(e){s.place(e,r,n)})},orphan:function(e){return(e?t._filterResult(this,e):this).forEach(l)},adopt:function(e,n){return t(e).place(this[0],n)._stash(this)},query:function(e){if(!e)return this;var n=new c;return this.map(function(r){t(e,r).forEach(function(e){e!==undefined&&n.push(e)})}),n._stash(this)},filter:function(e){var r=arguments,i=this,s=0;if(typeof e=="string"){i=t._filterResult(this,r[0]);if(r.length==1)return i._stash(this);s=1}return this._wrap(n.filter(i,r[s],r[s+1]),this)},addContent:function(e,t){e=this._normalize(e,this[0]);for(var n=0,r;r=this[n];n++)e.length?this._place(e,r,t,n>0):s.empty(r);return this}}),c})},"dojo/promise/all":function(){define(["../_base/array","../Deferred","../when"],function(e,t,n){"use strict";var r=e.some;return function(i){var s,o;i instanceof Array?o=i:i&&typeof i=="object"&&(s=i);var u,a=[];if(s){o=[];for(var f in s)Object.hasOwnProperty.call(s,f)&&(a.push(f),o.push(s[f]));u={}}else o&&(u=[]);if(!o||!o.length)return(new t).resolve(u);var l=new t;l.promise.always(function(){u=a=null});var c=o.length;return r(o,function(e,t){return s||a.push(t),n(e,function(e){l.isFulfilled()||(u[a[t]]=e,--c===0&&l.resolve(u))},l.reject),l.isFulfilled()}),l.promise}})}}}),function(){var e=this.require;e({cache:{}}),!e.async&&e(["dojo"]),e.boot&&e.apply(null,e.boot)}()
\ No newline at end of file +(function(e,t){var n=function(){},r=function(e){for(var t in e)return 0;return 1},i={}.toString,s=function(e){return i.call(e)=="[object Function]"},o=function(e){return i.call(e)=="[object String]"},u=function(e){return i.call(e)=="[object Array]"},a=function(e,t){if(e)for(var n=0;e[n];)t(e[n++])},f=function(e,t){for(var n in t)e[n]=t[n];return e},l=function(e,t){return f(new Error(e),{src:"dojoLoader",info:t})},c=1,h=function(){return"_"+c++},p=function(e,t,n){return xt(e,t,n,0,p)},d=this,v=d.document,m=v&&v.createElement("DiV"),g=p.has=function(e){return s(y[e])?y[e]=y[e](d,v,m):y[e]},y=g.cache=t.hasCache;g.add=function(e,t,n,r){return(y[e]===undefined||r)&&(y[e]=t),n&&g(e)},0,0;for(var x in e.has)g.add(x,e.has[x],0,1);var T=1,N=2,C=3,k=4,L=5,A=0,O="sync",M="xd",_=[],D=0,P=n,H=n,B;p.isXdUrl=n,p.initSyncLoader=function(e,t,n){return D||(D=e,P=t,H=n),{sync:O,requested:T,arrived:N,nonmodule:C,executing:k,executed:L,syncExecStack:_,modules:Z,execQ:Nt,getModule:Ft,injectModule:ln,setArrived:At,signal:X,finishExec:Gt,execModule:Zt,dojoRequirePlugin:D,getLegacyMode:function(){return A},guardCheckComplete:tn}};var j=location.protocol,F=location.host;p.isXdUrl=function(e){if(/^\./.test(e))return!1;if(/^\/\//.test(e))return!0;var t=e.match(/^([^\/\:]+\:)\/+([^\/]+)/);return t&&(t[1]!=j||F&&t[2]!=F)},1,g.add("dojo-force-activex-xhr",!v.addEventListener&&window.location.protocol=="file:"),g.add("native-xhr",typeof XMLHttpRequest!="undefined");if(g("native-xhr")&&!g("dojo-force-activex-xhr"))B=function(){return new XMLHttpRequest};else{for(var I=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],q,S=0;S<3;)try{q=I[S++];if(new ActiveXObject(q))break}catch(R){}B=function(){return new ActiveXObject(q)}}p.getXhr=B,g.add("dojo-gettext-api",1),p.getText=function(e,t,n){var r=B();r.open("GET",rn(e),!1),r.send(null);if(r.status==200||!location.host&&!r.status)return n&&n(r.responseText,t),r.responseText;throw l("xhrFailed",r.status)};var U=new Function("return eval(arguments[0]);");p.eval=function(e,t){return U(e+"\r\n////@ sourceURL="+t)};var z={},W="error",X=p.signal=function(e,t){var n=z[e];a(n&&n.slice(0),function(e){e.apply(null,u(t)?t:[t])})},V=p.on=function(e,t){var n=z[e]||(z[e]=[]);return n.push(t),{remove:function(){for(var e=0;e<n.length;e++)if(n[e]===t){n.splice(e,1);return}}}},$=[],J={},K=[],Q={},G=p.map={},Y=[],Z={},et="",tt={},nt="url:",rt={},it={},st=0,ot=function(e){var t,n,r,i,s;for(t in rt)n=rt[t],r=t.match(/^url\:(.+)/),r?tt[nt+qt(r[1],e)]=n:t=="*now"?i=n:t!="*noref"&&(s=Ht(t,e),tt[s.mid]=tt[nt+s.url]=n);i&&i(Tt(e)),rt={}},ut=function(e){return e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,function(e){return"\\"+e})},at=function(e,t){t.splice(0,t.length);for(var n in e)t.push([n,e[n],new RegExp("^"+ut(n)+"(/|$)"),n.length]);return t.sort(function(e,t){return t[3]-e[3]}),t},ft=function(e,t){a(e,function(e){t.push([o(e[0])?new RegExp("^"+ut(e[0])+"$"):e[0],e[1]])})},lt=function(e){var t=e.name;t||(t=e,e={name:t}),e=f({main:"main"},e),e.location=e.location?e.location:t,e.packageMap&&(G[t]=e.packageMap),e.main.indexOf("./")||(e.main=e.main.substring(2)),Q[t]=e},ct=[],ht=function(e,t,n){for(var r in e){r=="waitSeconds"&&(p.waitms=(e[r]||0)*1e3),r=="cacheBust"&&(et=e[r]?o(e[r])?e[r]:(new Date).getTime()+"":"");if(r=="baseUrl"||r=="combo")p[r]=e[r];if(r=="async"){var i=e[r];p.legacyMode=A=o(i)&&/sync|legacyAsync/.test(i)?i:i?!1:O,p.async=!A}e[r]!==y&&(p.rawConfig[r]=e[r],r!="has"&&g.add("config-"+r,e[r],0,t))}p.baseUrl||(p.baseUrl="./"),/\/$/.test(p.baseUrl)||(p.baseUrl+="/");for(r in e.has)g.add(r,e.has[r],0,t);a(e.packages,lt);for(b in e.packagePaths)a(e.packagePaths[b],function(e){var t=b+"/"+e;o(e)&&(e={name:e}),e.location=t,lt(e)});at(f(G,e.map),Y),a(Y,function(e){e[1]=at(e[1],[]),e[0]=="*"&&(Y.star=e)}),at(f(J,e.paths),K),ft(e.aliases,$);if(t)ct.push({config:e.config});else for(r in e.config){var s=Ft(r,n);s.config=f(s.config||{},e.config[r])}e.cache&&(ot(),rt=e.cache,e.cache["*noref"]&&ot()),X("config",[e,p.rawConfig])};if(g("dojo-cdn")||1){var pt=v.getElementsByTagName("script"),S=0,dt,vt,mt,gt;while(S<pt.length){dt=pt[S++],(mt=dt.getAttribute("src"))&&(gt=mt.match(/(((.*)\/)|^)dojo\.js(\W|$)/i))&&(vt=gt[3]||"",t.baseUrl=t.baseUrl||vt,st=dt);if(mt=dt.getAttribute("data-dojo-config")||dt.getAttribute("djConfig"))it=p.eval("({ "+mt+" })","data-dojo-config"),st=dt}}p.rawConfig={},ht(t,1),g("dojo-cdn")&&(Q.dojo.location=vt,vt&&(vt+="/"),Q.dijit.location=vt+"../dijit/",Q.dojox.location=vt+"../dojox/"),ht(e,1),ht(it,1);var St=function(e){tn(function(){a(e.deps,ln)})},xt=function(e,t,r,i,s){var a,c;if(o(e)){a=Ft(e,i,!0);if(a&&a.executed)return a.result;throw l("undefinedModule",e)}u(e)||(ht(e,0,i),e=t,t=r);if(u(e))if(!e.length)t&&t();else{c="require*"+h();for(var d,v=[],m=0;m<e.length;)d=e[m++],v.push(Ft(d,i));a=f(Dt("",c,0,""),{injected:N,deps:v,def:t||n,require:i?i.require:p,gc:1}),Z[a.mid]=a,St(a);var g=en&&A!=O;tn(function(){Zt(a,g)}),a.executed||Nt.push(a),nn()}return s},Tt=function(e){if(!e)return p;var t=e.require;return t||(t=function(n,r,i){return xt(n,r,i,e,t)},e.require=f(t,p),t.module=e,t.toUrl=function(t){return qt(t,e)},t.toAbsMid=function(t){return It(t,e)},t.syncLoadNls=function(t){var n=Ht(t,e),r=Z[n.mid];if(!r||!r.executed)on=tt[n.mid]||tt[nt+n.url],on&&(fn(on),r=Z[n.mid]);return r&&r.executed&&r.result}),t},Nt=[],Ct=[],kt={},Lt=function(e){e.injected=T,kt[e.mid]=1,e.url&&(kt[e.url]=e.pack||1),vn()},At=function(e){e.injected=N,delete kt[e.mid],e.url&&delete kt[e.url],r(kt)&&(dn(),A==M&&(A=O))},Ot=p.idle=function(){return!Ct.length&&r(kt)&&!Nt.length&&!en},Mt=function(e,t){if(t)for(var n=0;n<t.length;n++)if(t[n][2].test(e))return t[n];return 0},_t=function(e){var t=[],n,r;e=e.replace(/\\/g,"/").split("/");while(e.length)n=e.shift(),n==".."&&t.length&&r!=".."?(t.pop(),r=t[t.length-1]):n!="."&&t.push(r=n);return t.join("/")},Dt=function(e,t,n,r){var i=p.isXdUrl(r);return{pid:e,mid:t,pack:n,url:r,executed:0,def:0,isXd:i,isAmd:!!(i||Q[e]&&Q[e].isAmd)}},Pt=function(e,t,n,r,i,o,u,f,c){var h,p,d,v,m,y,b,w;w=e,b=/^\./.test(e);if(/(^\/)|(\:)|(\.js$)/.test(e)||b&&!t)return Dt(0,e,0,e);e=_t(b?t.mid+"/../"+e:e);if(/^\./.test(e))throw l("irrationalPath",e);t&&(v=Mt(t.mid,o)),v=v||o.star,v=v&&Mt(e,v[1]),v&&(e=v[1]+e.substring(v[3])),gt=e.match(/^([^\/]+)(\/(.+))?$/),h=gt?gt[1]:"",(p=n[h])?e=h+"/"+(d=gt[3]||p.main):h="";var E=0,S=0;return a(f,function(t){var n=e.match(t[0]);n&&n.length>E&&(S=s(t[1])?e.replace(t[0],t[1]):t[1])}),S?Pt(S,0,n,r,i,o,u,f,c):(y=r[e],y?c?Dt(y.pid,y.mid,y.pack,y.url):r[e]:(v=Mt(e,u),v?m=v[1]+e.substring(v[3]):h?m=p.location+"/"+d:g("config-tlmSiblingOfDojo")?m="../"+e:m=e,/(^\/)|(\:)/.test(m)||(m=i+m),m+=".js",Dt(h,e,p,_t(m))))},Ht=function(e,t){return Pt(e,t,Q,Z,p.baseUrl,Y,K,$)},Bt=function(e,t,n){return e.normalize?e.normalize(t,function(e){return It(e,n)}):It(t,n)},jt=0,Ft=function(e,t,n){var r,i,s,o;return r=e.match(/^(.+?)\!(.*)$/),r?(i=Ft(r[1],t,n),A==O&&!i.executed&&(ln(i),i.injected===N&&!i.executed&&tn(function(){Zt(i)}),i.executed?Kt(i):Nt.unshift(i)),i.executed===L&&!i.load&&Kt(i),i.load?(s=Bt(i,r[2],t),e=i.mid+"!"+(i.dynamic?++jt+"!":"")+s):(s=r[2],e=i.mid+"!"+ ++jt+"!waitingForPlugin"),o={plugin:i,mid:e,req:Tt(t),prid:s}):o=Ht(e,t),Z[o.mid]||!n&&(Z[o.mid]=o)},It=p.toAbsMid=function(e,t){return Ht(e,t).mid},qt=p.toUrl=function(e,t){var n=Ht(e+"/x",t),r=n.url;return rn(n.pid===0?e:r.substring(0,r.length-5))},Rt={injected:N,executed:L,def:C,result:C},Ut=function(e){return Z[e]=f({mid:e},Rt)},zt=Ut("require"),Wt=Ut("exports"),Xt=Ut("module"),Vt=function(e,t){p.trace("loader-run-factory",[e.mid]);var n=e.def,r;_.unshift(e);if(g("config-dojo-loader-catches"))try{r=s(n)?n.apply(null,t):n}catch(i){X(W,e.result=l("factoryThrew",[e,i]))}else r=s(n)?n.apply(null,t):n;e.result=r===undefined&&e.cjs?e.cjs.exports:r,_.shift(e)},$t={},Jt=0,Kt=function(e){var t=e.result;return e.dynamic=t.dynamic,e.normalize=t.normalize,e.load=t.load,e},Qt=function(e){var t={};a(e.loadQ,function(n){var r=Bt(e,n.prid,n.req.module),i=e.dynamic?n.mid.replace(/waitingForPlugin$/,r):e.mid+"!"+r,s=f(f({},n),{mid:i,prid:r,injected:0});Z[i]||sn(Z[i]=s),t[n.mid]=Z[i],At(n),delete Z[n.mid]}),e.loadQ=0;var n=function(e){for(var n,r=e.deps||[],i=0;i<r.length;i++)n=t[r[i].mid],n&&(r[i]=n)};for(var r in Z)n(Z[r]);a(Nt,n)},Gt=function(e){p.trace("loader-finish-exec",[e.mid]),e.executed=L,e.defOrder=Jt++,a(e.provides,function(e){e()}),e.loadQ&&(Kt(e),Qt(e));for(S=0;S<Nt.length;)Nt[S]===e?Nt.splice(S,1):S++;/^require\*/.test(e.mid)&&delete Z[e.mid]},Yt=[],Zt=function(e,t){if(e.executed===k)return p.trace("loader-circular-dependency",[Yt.concat(e.mid).join("->")]),!e.def||t?$t:e.cjs&&e.cjs.exports;if(!e.executed){if(!e.def)return $t;var n=e.mid,r=e.deps||[],i,s,o=[],u=0;e.executed=k;while(i=r[u++]){s=i===zt?Tt(e):i===Wt?e.cjs.exports:i===Xt?e.cjs:Zt(i,t);if(s===$t)return e.executed=0,p.trace("loader-exec-module",["abort",n]),0,$t;o.push(s)}Vt(e,o),Gt(e),0}return e.result},en=0,tn=function(e){try{en++,e()}finally{en--}Ot()&&X("idle",[])},nn=function(){if(en)return;tn(function(){P();for(var e,t,n=0;n<Nt.length;)e=Jt,t=Nt[n],Zt(t),e!=Jt?(P(),n=0):n++})};g("dojo-loader-eval-hint-url")===undefined&&g.add("dojo-loader-eval-hint-url",1);var rn=function(e){return e+="",e+(et?(/\?/.test(e)?"&":"?")+et:"")},sn=function(e){var t=e.plugin;t.executed===L&&!t.load&&Kt(t);var n=function(t){e.result=t,At(e),Gt(e),nn()};t.load?t.load(e.prid,e.req,n):t.loadQ?t.loadQ.push(e):(t.loadQ=[e],Nt.unshift(t),ln(t))},on=0,un=0,an=0,fn=function(e,t){g("config-stripStrict")&&(e=e.replace(/"use strict"/g,"")),an=1;if(g("config-dojo-loader-catches"))try{e===on?on.call(null):p.eval(e,g("dojo-loader-eval-hint-url")?t.url:t.mid)}catch(n){X(W,l("evalModuleThrew",t))}else e===on?on.call(null):p.eval(e,g("dojo-loader-eval-hint-url")?t.url:t.mid);an=0},ln=function(e){var t=e.mid,n=e.url;if(e.executed||e.injected||kt[t]||e.url&&(e.pack&&kt[e.url]===e.pack||kt[e.url]==1))return;Lt(e);if(e.plugin){sn(e);return}var i=function(){hn(e);if(e.injected!==N){if(g("dojo-enforceDefine")){X(W,l("noDefine",e));return}At(e),f(e,Rt),p.trace("loader-define-nonmodule",[e.url])}A?!_.length&&nn():nn()};on=tt[t]||tt[nt+e.url];if(on){p.trace("loader-inject",["cache",e.mid,n]),fn(on,e),i();return}if(A)if(e.isXd)A==O&&(A=M);else if(!e.isAmd||A==O){var s=function(r){if(A==O){_.unshift(e),fn(r,e),_.shift(),hn(e),e.cjs||(At(e),Gt(e));if(e.finish){var s=t+"*finish",o=e.finish;delete e.finish,bn(s,["dojo",("dojo/require!"+o.join(",")).replace(/\./g,"/")],function(e){a(o,function(t){e.require(t)})}),Nt.unshift(Ft(s))}i()}else r=H(e,r),r?(fn(r,e),i()):(un=e,p.injectUrl(rn(n),i,e),un=0)};p.trace("loader-inject",["xhr",e.mid,n,A!=O]);if(g("config-dojo-loader-catches"))try{p.getText(n,A!=O,s)}catch(o){X(W,l("xhrInjectFailed",[e,o]))}else p.getText(n,A!=O,s);return}p.trace("loader-inject",["script",e.mid,n]),un=e,p.injectUrl(rn(n),i,e),un=0},cn=function(e,t,n){p.trace("loader-define-module",[e.mid,t]);var r=e.mid;if(e.injected===N)return X(W,l("multipleDefine",e)),e;f(e,{deps:t,def:n,cjs:{id:e.mid,uri:e.url,exports:e.result={},setExports:function(t){e.cjs.exports=t},config:function(){return e.config}}});for(var i=0;t[i];i++)t[i]=Ft(t[i],e);return A&&!kt[r]&&(St(e),Nt.push(e),nn()),At(e),!s(n)&&!t.length&&(e.result=n,Gt(e)),e},hn=function(e,t){var n=[],r,i;while(Ct.length)i=Ct.shift(),t&&(i[0]=t.shift()),r=i[0]&&Ft(i[0])||e,n.push([r,i[1],i[2]]);ot(e),a(n,function(e){St(cn.apply(null,e))})},pn=0,dn=n,vn=n;dn=function(){pn&&clearTimeout(pn),pn=0},vn=function(){dn(),p.waitms&&(pn=window.setTimeout(function(){dn(),X(W,l("timeout",kt))},p.waitms))},g.add("ie-event-behavior",v.attachEvent&&typeof Windows=="undefined"&&(typeof opera=="undefined"||opera.toString()!="[object Opera]"));var mn=function(e,t,n,r){return g("ie-event-behavior")?(e.attachEvent(n,r),function(){e.detachEvent(n,r)}):(e.addEventListener(t,r,!1),function(){e.removeEventListener(t,r,!1)})},gn=mn(window,"load","onload",function(){p.pageLoaded=1,v.readyState!="complete"&&(v.readyState="complete"),gn()}),pt=v.getElementsByTagName("script"),S=0,dt;while(!st)/^dojo/.test((dt=pt[S++])&&dt.type)||(st=dt);p.injectUrl=function(e,t,n){var r=n.node=v.createElement("script"),i=function(e){e=e||window.event;var n=e.target||e.srcElement;if(e.type==="load"||/complete|loaded/.test(n.readyState))s(),o(),t&&t()},s=mn(r,"load","onreadystatechange",i),o=mn(r,"error","onerror",function(t){s(),o(),X(W,l("scriptError",[e,t]))});return r.type="text/javascript",r.charset="utf-8",r.src=e,st.parentNode.insertBefore(r,st),r},p.log=function(){try{for(var e=0;e<arguments.length;e++)console.log(arguments[e])}catch(t){}},p.trace=n;var bn=function(e,t,n){var r=arguments.length,i=["require","exports","module"],a=[0,e,t];r==1?a=[0,s(e)?i:[],e]:r==2&&o(e)?a=[e,s(t)?i:[],t]:r==3&&(a=[e,t,n]),p.trace("loader-define",a.slice(0,2));var f=a[0]&&Ft(a[0]),c;if(f&&!kt[f.mid])St(cn(f,a[1],a[2]));else if(!g("ie-event-behavior")||!1||an)Ct.push(a);else{f=f||un;if(!f)for(e in kt){c=Z[e];if(c&&c.node&&c.node.readyState==="interactive"){f=c;break}}f?(ot(f),St(cn(f,a[1],a[2]))):X(W,l("ieDefineFailed",a[0])),nn()}};bn.amd={vendor:"dojotoolkit.org"},f(f(p,t.loaderPatch),e.loaderPatch),V(W,function(e){try{console.error(e);if(e instanceof Error){for(var t in e)console.log(t+":",e[t]);console.log(".")}}catch(n){}}),f(p,{uid:h,cache:tt,packs:Q});if(d.define){X(W,l("defineAlreadyDefined",0));return}d.define=bn,d.require=p,a(ct,function(e){ht(e)});var Sn=it.deps||e.deps||t.deps,xn=it.callback||e.callback||t.callback;p.boot=Sn||xn?[Sn||[],xn]:0})(this.dojoConfig||this.djConfig||this.require||{},{async:1,hasCache:{"config-deferredInstrumentation":0,"config-dojo-loader-catches":0,"config-selectorEngine":"lite","config-tlmSiblingOfDojo":0,"dojo-amd-factory-scan":0,"dojo-built":1,"dojo-combo-api":0,"dojo-config-api":1,"dojo-config-require":0,"dojo-debug-messages":0,"dojo-dom-ready-api":1,"dojo-firebug":0,"dojo-guarantee-console":1,"dojo-has-api":1,"dojo-inject-api":1,"dojo-loader":1,"dojo-log-api":0,"dojo-modulePaths":0,"dojo-moduleUrl":0,"dojo-publish-privates":0,"dojo-requirejs-api":0,"dojo-sniff":0,"dojo-sync-loader":0,"dojo-test-sniff":0,"dojo-timeout-api":0,"dojo-trace-api":0,"dojo-undef-api":0,"dojo-v1x-i18n-Api":1,dom:1,"extend-dojo":1,"host-browser":1},packages:[{location:".",name:"dojo"}]}),require({cache:{"dojo/domReady":function(){define(["./has"],function(e){function a(e){o.push(e),s&&f()}function f(){if(u)return;u=!0;while(o.length)try{o.shift()(n)}catch(e){console.log("Error on domReady callback: "+e)}u=!1,a._onQEmpty()}var t=this,n=document,r={loaded:1,complete:1},i=typeof n.readyState!="string",s=!!r[n.readyState],o=[],u;a.load=function(e,t,n){a(n)},a._Q=o,a._onQEmpty=function(){},i&&(n.readyState="loading");if(!s){var l=[],c=function(e){e=e||t.event;if(s||e.type=="readystatechange"&&!r[n.readyState])return;i&&(n.readyState="complete"),s=1,f()},h=function(e,t){e.addEventListener(t,c,!1),o.push(function(){e.removeEventListener(t,c,!1)})};if(!e("dom-addeventlistener")){h=function(e,t){t="on"+t,e.attachEvent(t,c),o.push(function(){e.detachEvent(t,c)})};var p=n.createElement("div");try{p.doScroll&&t.frameElement===null&&l.push(function(){try{return p.doScroll("left"),1}catch(e){}})}catch(d){}}h(n,"DOMContentLoaded"),h(t,"load"),"onreadystatechange"in n?h(n,"readystatechange"):i||l.push(function(){return r[n.readyState]});if(l.length){var v=function(){if(s)return;var e=l.length;while(e--)if(l[e]()){c("poller");return}setTimeout(v,30)};v()}}return a})},"dojo/has":function(){define(["require","module"],function(e,t){var n=e.has||function(){};n.add("dom-addeventlistener",!!document.addEventListener),n.add("touch","ontouchstart"in document||window.navigator.msMaxTouchPoints>0),n.add("device-width",screen.availWidth||innerWidth);var a=document.createElement("form");return n.add("dom-attributes-explicit",a.attributes.length==0),n.add("dom-attributes-specified-flag",a.attributes.length>0&&a.attributes.length<40),n.clearElement=function(e){return e.innerHTML="",e},n.normalize=function(e,t){var r=e.match(/[\?:]|[^:\?]*/g),i=0,s=function(e){var t=r[i++];return t==":"?0:r[i++]=="?"?!e&&n(t)?s():(s(!0),s(e)):t||0};return e=s(),e&&t(e)},n.load=function(e,t,n){e?t([e],n):n()},n})},"dojo/_base/declare":function(){define(["./kernel","../has","./lang"],function(e,t,n){function f(e,t){throw new Error("declare"+(t?" "+t:"")+": "+e)}function l(e,t){var n=[],r=[{cls:0,refs:[]}],i={},o=1,a=e.length,l=0,c,h,p,d,v,m,g,y;for(;l<a;++l){p=e[l],p?s.call(p)!="[object Function]"&&f("mixin #"+l+" is not a callable constructor.",t):f("mixin #"+l+" is unknown. Did you use dojo.require to pull it in?",t),h=p._meta?p._meta.bases:[p],d=0;for(c=h.length-1;c>=0;--c)v=h[c].prototype,v.hasOwnProperty("declaredClass")||(v.declaredClass="uniqName_"+u++),g=v.declaredClass,i.hasOwnProperty(g)||(i[g]={count:0,refs:[],cls:h[c]},++o),m=i[g],d&&d!==m&&(m.refs.push(d),++d.count),d=m;++d.count,r[0].refs.push(d)}while(r.length){d=r.pop(),n.push(d.cls),--o;while(y=d.refs,y.length==1){d=y[0];if(!d||--d.count){d=0;break}n.push(d.cls),--o}if(d)for(l=0,a=y.length;l<a;++l)d=y[l],--d.count||r.push(d)}return o&&f("can't build consistent linearization",t),p=e[0],n[0]=p?p._meta&&p===n[n.length-p._meta.bases.length]?p._meta.bases.length:1:0,n}function c(e,t,n){var r,s,o,u,l,c,h,p,d,v=this._inherited=this._inherited||{};typeof e=="string"&&(r=e,e=t,t=n),n=0,u=e.callee,r=r||u.nom,r||f("can't deduce a name to call inherited()",this.declaredClass),l=this.constructor._meta,o=l.bases,d=v.p;if(r!=a){if(v.c!==u){d=0,c=o[0],l=c._meta;if(l.hidden[r]!==u){s=l.chains,s&&typeof s[r]=="string"&&f("calling chained method with inherited: "+r,this.declaredClass);do{l=c._meta,h=c.prototype;if(l&&(h[r]===u&&h.hasOwnProperty(r)||l.hidden[r]===u))break}while(c=o[++d]);d=c?d:-1}}c=o[++d];if(c){h=c.prototype;if(c._meta&&h.hasOwnProperty(r))n=h[r];else{p=i[r];do{h=c.prototype,n=h[r];if(n&&(c._meta?h.hasOwnProperty(r):n!==p))break}while(c=o[++d])}}n=c&&n||i[r]}else{if(v.c!==u){d=0,l=o[0]._meta;if(l&&l.ctor!==u){s=l.chains,(!s||s.constructor!=="manual")&&f("calling chained constructor with inherited",this.declaredClass);while(c=o[++d]){l=c._meta;if(l&&l.ctor===u)break}d=c?d:-1}}while(c=o[++d]){l=c._meta,n=l?l.ctor:c;if(n)break}n=c&&n}v.c=n,v.p=d;if(n)return t===!0?n:n.apply(this,t||e)}function h(e,t){return typeof e=="string"?this.__inherited(e,t,!0):this.__inherited(e,!0)}function p(e,t,n){var r=this.getInherited(e,t);if(r)return r.apply(this,n||t||e)}function v(e){var t=this.constructor._meta.bases;for(var n=0,r=t.length;n<r;++n)if(t[n]===e)return!0;return this instanceof e}function m(e,r){for(var i in r)i!=a&&r.hasOwnProperty(i)&&(e[i]=r[i]);if(t("bug-for-in-skips-shadowed"))for(var s=n._extraNames,o=s.length;o;)i=s[--o],i!=a&&r.hasOwnProperty(i)&&(e[i]=r[i])}function g(e,r){var o,u;for(o in r)u=r[o],(u!==i[o]||!(o in i))&&o!=a&&(s.call(u)=="[object Function]"&&(u.nom=o),e[o]=u);if(t("bug-for-in-skips-shadowed"))for(var f=n._extraNames,l=f.length;l;)o=f[--l],u=r[o],(u!==i[o]||!(o in i))&&o!=a&&(s.call(u)=="[object Function]"&&(u.nom=o),e[o]=u);return e}function y(e){return C.safeMixin(this.prototype,e),this}function b(e,t){return C([this].concat(e),t||{})}function w(e,t){return function(){var n=arguments,r=n,i=n[0],s,o,u,a=e.length,f;if(!(this instanceof n.callee))return N(n);if(t&&(i&&i.preamble||this.preamble)){f=new Array(e.length),f[0]=n;for(o=0;;){i=n[0],i&&(s=i.preamble,s&&(n=s.apply(this,n)||n)),s=e[o].prototype,s=s.hasOwnProperty("preamble")&&s.preamble,s&&(n=s.apply(this,n)||n);if(++o==a)break;f[o]=n}}for(o=a-1;o>=0;--o)s=e[o],u=s._meta,s=u?u.ctor:s,s&&s.apply(this,f?f[o]:n);s=this.postscript,s&&s.apply(this,r)}}function E(e,t){return function(){var n=arguments,r=n,i=n[0],s;if(!(this instanceof n.callee))return N(n);t&&(i&&(s=i.preamble,s&&(r=s.apply(this,r)||r)),s=this.preamble,s&&s.apply(this,r)),e&&e.apply(this,n),s=this.postscript,s&&s.apply(this,n)}}function S(e){return function(){var t=arguments,n=0,r,i;if(!(this instanceof t.callee))return N(t);for(;r=e[n];++n){i=r._meta,r=i?i.ctor:r;if(r){r.apply(this,t);break}}r=this.postscript,r&&r.apply(this,t)}}function x(e,t,n){return function(){var r,i,s,o=0,u=1;n&&(o=t.length-1,u=-1);for(;r=t[o];o+=u)i=r._meta,s=(i?i.hidden:r.prototype)[e],s&&s.apply(this,arguments)}}function T(e){o.prototype=e.prototype;var t=new o;return o.prototype=null,t}function N(e){var t=e.callee,n=T(t);return t.apply(n,e),n}function C(e,t,o){typeof e!="string"&&(o=t,t=e,e=""),o=o||{};var u,p,g,N,k,L,A,O=1,M=t;s.call(t)=="[object Array]"?(L=l(t,e),g=L[0],O=L.length-g,t=L[O]):(L=[0],t?s.call(t)=="[object Function]"?(g=t._meta,L=L.concat(g?g.bases:t)):f("base class is not a callable constructor.",e):t!==null&&f("unknown base class. Did you use dojo.require to pull it in?",e));if(t)for(p=O-1;;--p){u=T(t);if(!p)break;g=L[p],(g._meta?m:r)(u,g.prototype),N=new Function,N.superclass=t,N.prototype=u,t=u.constructor=N}else u={};C.safeMixin(u,o),g=o.constructor,g!==i.constructor&&(g.nom=a,u.constructor=g);for(p=O-1;p;--p)g=L[p]._meta,g&&g.chains&&(A=r(A||{},g.chains));u["-chains-"]&&(A=r(A||{},u["-chains-"])),g=!A||!A.hasOwnProperty(a),L[0]=N=A&&A.constructor==="manual"?S(L):L.length==1?E(o.constructor,g):w(L,g),N._meta={bases:L,hidden:o,chains:A,parents:M,ctor:o.constructor},N.superclass=t&&t.prototype,N.extend=y,N.createSubclass=b,N.prototype=u,u.constructor=N,u.getInherited=h,u.isInstanceOf=v,u.inherited=d,u.__inherited=c,e&&(u.declaredClass=e,n.setObject(e,N));if(A)for(k in A)u[k]&&typeof A[k]=="string"&&k!=a&&(g=u[k]=x(k,L,A[k]==="after"),g.nom=k);return N}var r=n.mixin,i=Object.prototype,s=i.toString,o=new Function,u=0,a="constructor",d=e.config.isDebug?p:c;return e.safeMixin=C.safeMixin=g,e.declare=C,C})},"dojo/_base/kernel":function(){define(["../has","./config","require","module"],function(e,t,n,r){var i,s,o={},u={},a={config:t,global:this,dijit:o,dojox:u},f={dojo:["dojo",a],dijit:["dijit",o],dojox:["dojox",u]},l=n.map&&n.map[r.id.match(/[^\/]+/)[0]],c;for(s in l)f[s]?f[s][0]=l[s]:f[s]=[l[s],{}];for(s in f)c=f[s],c[1]._scopeName=c[0],t.noGlobals||(this[c[0]]=c[1]);a.scopeMap=f,a.baseUrl=a.config.baseUrl=n.baseUrl,a.isAsync=n.async,a.locale=t.locale;var h="$Rev: 43d05c6 $".match(/\d+/);a.version={major:1,minor:9,patch:1,flag:"",revision:h?+h[0]:NaN,toString:function(){var e=a.version;return e.major+"."+e.minor+"."+e.patch+e.flag+" ("+e.revision+")"}},1,Function("d","d.eval = function(){return d.global.eval ? d.global.eval(arguments[0]) : eval(arguments[0]);}")(a),a.exit=function(){},1,typeof console!="undefined"||(console={});var p=["assert","count","debug","dir","dirxml","error","group","groupEnd","info","profile","profileEnd","time","timeEnd","trace","warn","log"],d;i=0;while(d=p[i++])console[d]||function(){var e=d+"";console[e]="log"in console?function(){var t=Array.apply({},arguments);t.unshift(e+":"),console.log(t.join(" "))}:function(){},console[e]._fake=!0}();e.add("dojo-debug-messages",!!t.isDebug),a.deprecated=a.experimental=function(){},e("dojo-debug-messages")&&(a.deprecated=function(e,t,n){var r="DEPRECATED: "+e;t&&(r+=" "+t),n&&(r+=" -- will be removed in version: "+n),console.warn(r)},a.experimental=function(e,t){var n="EXPERIMENTAL: "+e+" -- APIs subject to change without notice.";t&&(n+=" "+t),console.warn(n)}),1;if(t.modulePaths){a.deprecated("dojo.modulePaths","use paths configuration");var v={};for(s in t.modulePaths)v[s.replace(/\./g,"/")]=t.modulePaths[s];n({paths:v})}return 1,a.moduleUrl=function(e,t){a.deprecated("dojo.moduleUrl()","use require.toUrl","2.0");var r=null;return e&&(r=n.toUrl(e.replace(/\./g,"/")+(t?"/"+t:"")+"/*.*").replace(/\/\*\.\*/,"")+(t?"":"/")),r},a._hasResource={},a})},"dojo/_base/config":function(){define(["../has","require"],function(e,t){var n={},r=t.rawConfig,i;for(i in r)n[i]=r[i];return!n.locale&&typeof navigator!="undefined"&&(n.locale=(navigator.language||navigator.userLanguage).toLowerCase()),n})},"dojo/_base/lang":function(){define(["./kernel","../has","../sniff"],function(e,t){t.add("bug-for-in-skips-shadowed",function(){for(var e in{toString:1})return 0;return 1});var n=t("bug-for-in-skips-shadowed")?"hasOwnProperty.valueOf.isPrototypeOf.propertyIsEnumerable.toLocaleString.toString.constructor".split("."):[],r=n.length,i=function(t,n,r){var i,s=0,o=e.global;if(!r){if(!t.length)return o;i=t[s++];try{r=e.scopeMap[i]&&e.scopeMap[i][1]}catch(u){}r=r||(i in o?o[i]:n?o[i]={}:undefined)}while(r&&(i=t[s++]))r=i in r?r[i]:n?r[i]={}:undefined;return r},s=Object.prototype.toString,o=function(e,t,n){return(n||[]).concat(Array.prototype.slice.call(e,t||0))},u=/\{([^\}]+)\}/g,a={_extraNames:n,_mixin:function(e,i,s){var o,u,a,f={};for(o in i){u=i[o];if(!(o in e)||e[o]!==u&&(!(o in f)||f[o]!==u))e[o]=s?s(u):u}if(t("bug-for-in-skips-shadowed")&&i)for(a=0;a<r;++a){o=n[a],u=i[o];if(!(o in e)||e[o]!==u&&(!(o in f)||f[o]!==u))e[o]=s?s(u):u}return e},mixin:function(e,t){e||(e={});for(var n=1,r=arguments.length;n<r;n++)a._mixin(e,arguments[n]);return e},setObject:function(e,t,n){var r=e.split("."),s=r.pop(),o=i(r,!0,n);return o&&s?o[s]=t:undefined},getObject:function(e,t,n){return i(e.split("."),t,n)},exists:function(e,t){return a.getObject(e,!1,t)!==undefined},isString:function(e){return typeof e=="string"||e instanceof String},isArray:function(e){return e&&(e instanceof Array||typeof e=="array")},isFunction:function(e){return s.call(e)==="[object Function]"},isObject:function(e){return e!==undefined&&(e===null||typeof e=="object"||a.isArray(e)||a.isFunction(e))},isArrayLike:function(e){return e&&e!==undefined&&!a.isString(e)&&!a.isFunction(e)&&(!e.tagName||e.tagName.toLowerCase()!="form")&&(a.isArray(e)||isFinite(e.length))},isAlien:function(e){return e&&!a.isFunction(e)&&/\{\s*\[native code\]\s*\}/.test(String(e))},extend:function(e,t){for(var n=1,r=arguments.length;n<r;n++)a._mixin(e.prototype,arguments[n]);return e},_hitchArgs:function(t,n){var r=a._toArray(arguments,2),i=a.isString(n);return function(){var s=a._toArray(arguments),o=i?(t||e.global)[n]:n;return o&&o.apply(t||this,r.concat(s))}},hitch:function(t,n){if(arguments.length>2)return a._hitchArgs.apply(e,arguments);n||(n=t,t=null);if(a.isString(n)){t=t||e.global;if(!t[n])throw['lang.hitch: scope["',n,'"] is null (scope="',t,'")'].join("");return function(){return t[n].apply(t,arguments||[])}}return t?function(){return n.apply(t,arguments||[])}:n},delegate:function(){function e(){}return function(t,n){e.prototype=t;var r=new e;return e.prototype=null,n&&a._mixin(r,n),r}}(),_toArray:t("ie")?function(){function e(e,t,n){var r=n||[];for(var i=t||0;i<e.length;i++)r.push(e[i]);return r}return function(t){return(t.item?e:o).apply(this,arguments)}}():o,partial:function(t){var n=[null];return a.hitch.apply(e,n.concat(a._toArray(arguments)))},clone:function(e){if(!e||typeof e!="object"||a.isFunction(e))return e;if(e.nodeType&&"cloneNode"in e)return e.cloneNode(!0);if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);var t,n,r;if(a.isArray(e)){t=[];for(n=0,r=e.length;n<r;++n)n in e&&t.push(a.clone(e[n]))}else t=e.constructor?new e.constructor:{};return a._mixin(t,e,a.clone)},trim:String.prototype.trim?function(e){return e.trim()}:function(e){return e.replace(/^\s\s*/,"").replace(/\s\s*$/,"")},replace:function(e,t,n){return e.replace(n||u,a.isFunction(t)?t:function(e,n){return a.getObject(n,!1,t)})}};return a.mixin(e,a),a})},"dojo/sniff":function(){define(["./has"],function(e){var t=navigator,n=t.userAgent,r=t.appVersion,i=parseFloat(r);e.add("air",n.indexOf("AdobeAIR")>=0),e.add("msapp",parseFloat(n.split("MSAppHost/")[1])||undefined),e.add("khtml",r.indexOf("Konqueror")>=0?i:undefined),e.add("webkit",parseFloat(n.split("WebKit/")[1])||undefined),e.add("chrome",parseFloat(n.split("Chrome/")[1])||undefined),e.add("safari",r.indexOf("Safari")>=0&&!e("chrome")?parseFloat(r.split("Version/")[1]):undefined),e.add("mac",r.indexOf("Macintosh")>=0),e.add("quirks",document.compatMode=="BackCompat");if(n.match(/(iPhone|iPod|iPad)/)){var s=RegExp.$1.replace(/P/,"p"),o=n.match(/OS ([\d_]+)/)?RegExp.$1:"1",u=parseFloat(o.replace(/_/,".").replace(/_/g,""));e.add(s,u),e.add("ios",u)}e.add("android",parseFloat(n.split("Android ")[1])||undefined),e.add("bb",(n.indexOf("BlackBerry")>=0||n.indexOf("BB10")>=0)&&parseFloat(n.split("Version/")[1])||undefined),e.add("svg",typeof SVGAngle!="undefined");if(!e("webkit")){n.indexOf("Opera")>=0&&e.add("opera",i>=9.8?parseFloat(n.split("Version/")[1])||i:i),n.indexOf("Gecko")>=0&&!e("khtml")&&!e("webkit")&&e.add("mozilla",i),e("mozilla")&&e.add("ff",parseFloat(n.split("Firefox/")[1]||n.split("Minefield/")[1])||undefined);if(document.all&&!e("opera")){var a=parseFloat(r.split("MSIE ")[1])||undefined,f=document.documentMode;f&&f!=5&&Math.floor(a)!=f&&(a=f),e.add("ie",a)}e.add("wii",typeof opera!="undefined"&&opera.wiiremote)}return e})},"dojo/_base/array":function(){define(["./kernel","../has","./lang"],function(e,t,n){function s(e){return r[e]=new Function("item","index","array",e)}function o(e){var t=!e;return function(n,i,o){var u=0,a=n&&n.length||0,f;a&&typeof n=="string"&&(n=n.split("")),typeof i=="string"&&(i=r[i]||s(i));if(o)for(;u<a;++u){f=!i.call(o,n[u],u,n);if(e^f)return!f}else for(;u<a;++u){f=!i(n[u],u,n);if(e^f)return!f}return t}}function u(e){var t=1,n=0,r=0;return e||(t=n=r=-1),function(s,o,u,f){if(f&&t>0)return a.lastIndexOf(s,o,u);var l=s&&s.length||0,c=e?l+r:n,h;u===i?h=e?n:l+r:u<0?(h=l+u,h<0&&(h=n)):h=u>=l?l+r:u,l&&typeof s=="string"&&(s=s.split(""));for(;h!=c;h+=t)if(s[h]==o)return h;return-1}}var r={},i,a={every:o(!1),some:o(!0),indexOf:u(!0),lastIndexOf:u(!1),forEach:function(e,t,n){var i=0,o=e&&e.length||0;o&&typeof e=="string"&&(e=e.split("")),typeof t=="string"&&(t=r[t]||s(t));if(n)for(;i<o;++i)t.call(n,e[i],i,e);else for(;i<o;++i)t(e[i],i,e)},map:function(e,t,n,i){var o=0,u=e&&e.length||0,a=new(i||Array)(u);u&&typeof e=="string"&&(e=e.split("")),typeof t=="string"&&(t=r[t]||s(t));if(n)for(;o<u;++o)a[o]=t.call(n,e[o],o,e);else for(;o<u;++o)a[o]=t(e[o],o,e);return a},filter:function(e,t,n){var i=0,o=e&&e.length||0,u=[],a;o&&typeof e=="string"&&(e=e.split("")),typeof t=="string"&&(t=r[t]||s(t));if(n)for(;i<o;++i)a=e[i],t.call(n,a,i,e)&&u.push(a);else for(;i<o;++i)a=e[i],t(a,i,e)&&u.push(a);return u},clearCache:function(){r={}}};return n.mixin(e,a),a})},"dojo/string":function(){define(["./_base/kernel","./_base/lang"],function(e,t){var n={};return t.setObject("dojo.string",n),n.rep=function(e,t){if(t<=0||!e)return"";var n=[];for(;;){t&1&&n.push(e);if(!(t>>=1))break;e+=e}return n.join("")},n.pad=function(e,t,r,i){r||(r="0");var s=String(e),o=n.rep(r,Math.ceil((t-s.length)/r.length));return i?s+o:o+s},n.substitute=function(n,r,i,s){return s=s||e.global,i=i?t.hitch(s,i):function(e){return e},n.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,function(e,n,o){var u=t.getObject(n,!1,r);return o&&(u=t.getObject(o,!1,s).call(s,u,n)),i(u,n).toString()})},n.trim=String.prototype.trim?t.trim:function(e){e=e.replace(/^\s+/,"");for(var t=e.length-1;t>=0;t--)if(/\S/.test(e.charAt(t))){e=e.substring(0,t+1);break}return e},n})},"dojo/dom":function(){define(["./sniff","./_base/window"],function(e,t){if(e("ie")<=7)try{document.execCommand("BackgroundImageCache",!1,!0)}catch(n){}var r={};e("ie")?r.byId=function(e,n){if(typeof e!="string")return e;var r=n||t.doc,i=e&&r.getElementById(e);if(!(!i||i.attributes.id.value!=e&&i.id!=e))return i;var s=r.all[e];if(!s||s.nodeName)s=[s];var o=0;while(i=s[o++])if(i.attributes&&i.attributes.id&&i.attributes.id.value==e||i.id==e)return i}:r.byId=function(e,n){return(typeof e=="string"?(n||t.doc).getElementById(e):e)||null},r.isDescendant=function(e,t){try{e=r.byId(e),t=r.byId(t);while(e){if(e==t)return!0;e=e.parentNode}}catch(n){}return!1},e.add("css-user-select",function(e,t,n){if(!n)return!1;var r=n.style,i=["Khtml","O","ms","Moz","Webkit"],s=i.length,o="userSelect",u;do if(typeof r[o]!="undefined")return o;while(s--&&(o=i[s]+"UserSelect"));return!1});var i=e("css-user-select");return r.setSelectable=i?function(e,t){r.byId(e).style[i]=t?"":"none"}:function(e,t){e=r.byId(e);var n=e.getElementsByTagName("*"),i=n.length;if(t){e.removeAttribute("unselectable");while(i--)n[i].removeAttribute("unselectable")}else{e.setAttribute("unselectable","on");while(i--)n[i].setAttribute("unselectable","on")}},r})},"dojo/_base/window":function(){define(["./kernel","./lang","../sniff"],function(e,t,n){var r={global:e.global,doc:this.document||null,body:function(t){return t=t||e.doc,t.body||t.getElementsByTagName("body")[0]},setContext:function(t,n){e.global=r.global=t,e.doc=r.doc=n},withGlobal:function(t,n,i,s){var o=e.global;try{return e.global=r.global=t,r.withDoc.call(null,t.document,n,i,s)}finally{e.global=r.global=o}},withDoc:function(t,i,s,o){var u=r.doc,a=n("quirks"),f=n("ie"),l,c,h;try{return e.doc=r.doc=t,e.isQuirks=n.add("quirks",e.doc.compatMode=="BackCompat",!0,!0),n("ie")&&(h=t.parentWindow)&&h.navigator&&(l=parseFloat(h.navigator.appVersion.split("MSIE ")[1])||undefined,c=t.documentMode,c&&c!=5&&Math.floor(l)!=c&&(l=c),e.isIE=n.add("ie",l,!0,!0)),s&&typeof i=="string"&&(i=s[i]),i.apply(s,o||[])}finally{e.doc=r.doc=u,e.isQuirks=n.add("quirks",a,!0,!0),e.isIE=n.add("ie",f,!0,!0)}}};return t.mixin(e,r),r})},"dojo/dom-construct":function(){define(["exports","./_base/kernel","./sniff","./_base/window","./dom","./dom-attr"],function(e,t,n,r,i,s){function d(e,t){var n=t.parentNode;n&&n.insertBefore(e,t)}function v(e,t){var n=t.parentNode;n&&(n.lastChild==t?n.appendChild(e):n.insertBefore(e,t.nextSibling))}function g(e){if(e.canHaveChildren)try{e.innerHTML="";return}catch(t){}for(var n;n=e.lastChild;)y(n,e)}function y(e,t){e.firstChild&&g(e),t&&(n("ie")&&t.canHaveChildren&&"removeNode"in e?e.removeNode(!1):t.removeChild(e))}var o={option:["select"],tbody:["table"],thead:["table"],tfoot:["table"],tr:["table","tbody"],td:["table","tbody","tr"],th:["table","thead","tr"],legend:["fieldset"],caption:["table"],colgroup:["table"],col:["table","colgroup"],li:["ul"]},u=/<\s*([\w\:]+)/,a={},f=0,l="__"+t._scopeName+"ToDomId";for(var c in o)if(o.hasOwnProperty(c)){var h=o[c];h.pre=c=="option"?'<select multiple="multiple">':"<"+h.join("><")+">",h.post="</"+h.reverse().join("></")+">"}var p;n("ie")<=8&&(p=function(e){e.__dojo_html5_tested="yes";var t=m("div",{innerHTML:"<nav>a</nav>",style:{visibility:"hidden"}},e.body);t.childNodes.length!==1&&"abbr article aside audio canvas details figcaption figure footer header hgroup mark meter nav output progress section summary time video".replace(/\b\w+\b/g,function(t){e.createElement(t)}),b(t)}),e.toDom=function(t,i){i=i||r.doc;var s=i[l];s||(i[l]=s=++f+"",a[s]=i.createElement("div")),n("ie")<=8&&!i.__dojo_html5_tested&&i.body&&p(i),t+="";var c=t.match(u),h=c?c[1].toLowerCase():"",d=a[s],v,m,g,y;if(c&&o[h]){v=o[h],d.innerHTML=v.pre+t+v.post;for(m=v.length;m;--m)d=d.firstChild}else d.innerHTML=t;if(d.childNodes.length==1)return d.removeChild(d.firstChild);y=i.createDocumentFragment();while(g=d.firstChild)y.appendChild(g);return y},e.place=function(n,r,s){r=i.byId(r),typeof n=="string"&&(n=/^\s*</.test(n)?e.toDom(n,r.ownerDocument):i.byId(n));if(typeof s=="number"){var o=r.childNodes;!o.length||o.length<=s?r.appendChild(n):d(n,o[s<0?0:s])}else switch(s){case"before":d(n,r);break;case"after":v(n,r);break;case"replace":r.parentNode.replaceChild(n,r);break;case"only":e.empty(r),r.appendChild(n);break;case"first":if(r.firstChild){d(n,r.firstChild);break};default:r.appendChild(n)}return n};var m=e.create=function(n,o,u,a){var f=r.doc;return u&&(u=i.byId(u),f=u.ownerDocument),typeof n=="string"&&(n=f.createElement(n)),o&&s.set(n,o),u&&e.place(n,u,a),n};e.empty=function(t){g(i.byId(t))};var b=e.destroy=function(t){t=i.byId(t);if(!t)return;y(t,t.parentNode)}})},"dojo/dom-attr":function(){define(["exports","./sniff","./_base/lang","./dom","./dom-style","./dom-prop"],function(e,t,n,r,i,s){function a(e,t){var n=e.getAttributeNode&&e.getAttributeNode(t);return n&&n.specified}var o={innerHTML:1,className:1,htmlFor:t("ie"),value:1},u={classname:"class",htmlfor:"for",tabindex:"tabIndex",readonly:"readOnly"};e.has=function(t,n){var i=n.toLowerCase();return o[s.names[i]||n]||a(r.byId(t),u[i]||n)},e.get=function(t,i){t=r.byId(t);var f=i.toLowerCase(),l=s.names[f]||i,c=o[l],h=t[l];if(c&&typeof h!="undefined")return h;if(l=="href"||typeof h!="boolean"&&!n.isFunction(h)){var p=u[f]||i;return a(t,p)?t.getAttribute(p):null}return h},e.set=function(a,f,l){a=r.byId(a);if(arguments.length==2){for(var c in f)e.set(a,c,f[c]);return a}var h=f.toLowerCase(),p=s.names[h]||f,d=o[p];return p=="style"&&typeof l!="string"?(i.set(a,l),a):d||typeof l=="boolean"||n.isFunction(l)?s.set(a,f,l):(a.setAttribute(u[h]||f,l),a)},e.remove=function(t,n){r.byId(t).removeAttribute(u[n.toLowerCase()]||n)},e.getNodeProp=function(t,n){t=r.byId(t);var i=n.toLowerCase(),o=s.names[i]||n;if(o in t&&o!="href")return t[o];var f=u[i]||n;return a(t,f)?t.getAttribute(f):null}})},"dojo/dom-style":function(){define(["./sniff","./dom"],function(e,t){function c(t,n,r){n=n.toLowerCase();if(e("ie")){if(r=="auto"){if(n=="height")return t.offsetHeight;if(n=="width")return t.offsetWidth}if(n=="fontweight")switch(r){case 700:return"bold";case 400:default:return"normal"}}return n in f||(f[n]=l.test(n)),f[n]?i(t,r):r}var n,r={};e("webkit")?n=function(e){var t;if(e.nodeType==1){var n=e.ownerDocument.defaultView;t=n.getComputedStyle(e,null),!t&&e.style&&(e.style.display="",t=n.getComputedStyle(e,null))}return t||{}}:e("ie")&&(e("ie")<9||e("quirks"))?n=function(e){return e.nodeType==1&&e.currentStyle?e.currentStyle:{}}:n=function(e){return e.nodeType==1?e.ownerDocument.defaultView.getComputedStyle(e,null):{}},r.getComputedStyle=n;var i;e("ie")?i=function(e,t){if(!t)return 0;if(t=="medium")return 4;if(t.slice&&t.slice(-2)=="px")return parseFloat(t);var n=e.style,r=e.runtimeStyle,i=e.currentStyle,s=n.left,o=r.left;r.left=i.left;try{n.left=t,t=n.pixelLeft}catch(u){t=0}return n.left=s,r.left=o,t}:i=function(e,t){return parseFloat(t)||0},r.toPixelValue=i;var s="DXImageTransform.Microsoft.Alpha",o=function(e,t){try{return e.filters.item(s)}catch(n){return t?{}:null}},u=e("ie")<9||e("ie")<10&&e("quirks")?function(e){try{return o(e).Opacity/100}catch(t){return 1}}:function(e){return n(e).opacity},a=e("ie")<9||e("ie")<10&&e("quirks")?function(e,t){t===""&&(t=1);var n=t*100,r=t===1;r?(e.style.zoom="",o(e)&&(e.style.filter=e.style.filter.replace(new RegExp("\\s*progid:"+s+"\\([^\\)]+?\\)","i"),""))):(e.style.zoom=1,o(e)?o(e,1).Opacity=n:e.style.filter+=" progid:"+s+"(Opacity="+n+")",o(e,1).Enabled=!0);if(e.tagName.toLowerCase()=="tr")for(var i=e.firstChild;i;i=i.nextSibling)i.tagName.toLowerCase()=="td"&&a(i,t);return t}:function(e,t){return e.style.opacity=t},f={left:!0,top:!0},l=/margin|padding|width|height|max|min|offset/,h={cssFloat:1,styleFloat:1,"float":1};return r.get=function(n,i){var s=t.byId(n),o=arguments.length,a=i=="opacity";if(o==2&&a)return u(s);i=h[i]?"cssFloat"in s.style?"cssFloat":"styleFloat":i;var f=r.getComputedStyle(s);return o==1?f:c(s,i,f[i]||s.style[i])},r.set=function(n,i,s){var o=t.byId(n),u=arguments.length,f=i=="opacity";i=h[i]?"cssFloat"in o.style?"cssFloat":"styleFloat":i;if(u==3)return f?a(o,s):o.style[i]=s;for(var l in i)r.set(n,l,i[l]);return r.getComputedStyle(o)},r})},"dojo/dom-prop":function(){define(["exports","./_base/kernel","./sniff","./_base/lang","./dom","./dom-style","./dom-construct","./_base/connect"],function(e,t,n,r,i,s,o,u){var a={},f=0,l=t._scopeName+"attrid";e.names={"class":"className","for":"htmlFor",tabindex:"tabIndex",readonly:"readOnly",colspan:"colSpan",frameborder:"frameBorder",rowspan:"rowSpan",valuetype:"valueType"},e.get=function(n,r){n=i.byId(n);var s=r.toLowerCase(),o=e.names[s]||r;return n[o]},e.set=function(c,h,p){c=i.byId(c);var d=arguments.length;if(d==2&&typeof h!="string"){for(var v in h)e.set(c,v,h[v]);return c}var m=h.toLowerCase(),g=e.names[m]||h;if(g=="style"&&typeof p!="string")return s.set(c,p),c;if(g=="innerHTML")return n("ie")&&c.tagName.toLowerCase()in{col:1,colgroup:1,table:1,tbody:1,tfoot:1,thead:1,tr:1,title:1}?(o.empty(c),c.appendChild(o.toDom(p,c.ownerDocument))):c[g]=p,c;if(r.isFunction(p)){var y=c[l];y||(y=f++,c[l]=y),a[y]||(a[y]={});var b=a[y][g];if(b)u.disconnect(b);else try{delete c[g]}catch(w){}return p?a[y][g]=u.connect(c,g,p):c[g]=null,c}return c[g]=p,c}})},"dojo/_base/connect":function(){define(["./kernel","../on","../topic","../aspect","./event","../mouse","./sniff","./lang","../keys"],function(e,t,n,r,i,s,o,u){function a(n,i,o,a,f){a=u.hitch(o,a);if(!n||!n.addEventListener&&!n.attachEvent)return r.after(n||e.global,i,a,!0);typeof i=="string"&&i.substring(0,2)=="on"&&(i=i.substring(2)),n||(n=e.global);if(!f)switch(i){case"keypress":i=p;break;case"mouseenter":i=s.enter;break;case"mouseleave":i=s.leave}return t(n,i,a,f)}function h(e){e.keyChar=e.charCode?String.fromCharCode(e.charCode):"",e.charOrCode=e.keyChar||e.keyCode}o.add("events-keypress-typed",function(){var e={charCode:0};try{e=document.createEvent("KeyboardEvent"),(e.initKeyboardEvent||e.initKeyEvent).call(e,"keypress",!0,!0,null,!1,!1,!1,!1,9,3)}catch(t){}return e.charCode==0&&!o("opera")});var f={106:42,111:47,186:59,187:43,188:44,189:45,190:46,191:47,192:96,219:91,220:92,221:93,222:39,229:113},l=o("mac")?"metaKey":"ctrlKey",c=function(e,t){var n=u.mixin({},e,t);return h(n),n.preventDefault=function(){e.preventDefault()},n.stopPropagation=function(){e.stopPropagation()},n},p;if(o("events-keypress-typed")){var d=function(e,t){try{return e.keyCode=t}catch(e){return 0}};p=function(e,n){var r=t(e,"keydown",function(e){var t=e.keyCode,r=t!=13&&t!=32&&(t!=27||!o("ie"))&&(t<48||t>90)&&(t<96||t>111)&&(t<186||t>192)&&(t<219||t>222)&&t!=229;if(r||e.ctrlKey){var i=r?0:t;if(e.ctrlKey){if(t==3||t==13)return n.call(e.currentTarget,e);i>95&&i<106?i-=48:!e.shiftKey&&i>=65&&i<=90?i+=32:i=f[i]||i}var s=c(e,{type:"keypress",faux:!0,charCode:i});n.call(e.currentTarget,s),o("ie")&&d(e,s.keyCode)}}),i=t(e,"keypress",function(e){var t=e.charCode;return t=t>=32?t:0,e=c(e,{charCode:t,faux:!0}),n.call(this,e)});return{remove:function(){r.remove(),i.remove()}}}}else o("opera")?p=function(e,n){return t(e,"keypress",function(e){var t=e.which;return t==3&&(t=99),t=t<32&&!e.shiftKey?0:t,e.ctrlKey&&!e.shiftKey&&t>=65&&t<=90&&(t+=32),n.call(this,c(e,{charCode:t}))})}:p=function(e,n){return t(e,"keypress",function(e){return h(e),n.call(this,e)})};var v={_keypress:p,connect:function(e,t,n,r,i){var s=arguments,o=[],u=0;o.push(typeof s[0]=="string"?null:s[u++],s[u++]);var f=s[u+1];o.push(typeof f=="string"||typeof f=="function"?s[u++]:null,s[u++]);for(var l=s.length;u<l;u++)o.push(s[u]);return a.apply(this,o)},disconnect:function(e){e&&e.remove()},subscribe:function(e,t,r){return n.subscribe(e,u.hitch(t,r))},publish:function(e,t){return n.publish.apply(n,[e].concat(t))},connectPublisher:function(e,t,n){var r=function(){v.publish(e,arguments)};return n?v.connect(t,n,r):v.connect(t,r)},isCopyKey:function(e){return e[l]}};return v.unsubscribe=v.disconnect,u.mixin(e,v),v})},"dojo/on":function(){define(["./has!dom-addeventlistener?:./aspect","./_base/kernel","./sniff"],function(e,t,n){"use strict";function o(e,t,r,o,u){var a=t.match(/(.*):(.*)/);if(a)return t=a[2],a=a[1],i.selector(a,t).call(u,e,r);n("touch")&&(s.test(t)&&(r=x(r)),!n("event-orientationchange")&&t=="orientationchange"&&(t="resize",e=window,r=x(r))),p&&(r=p(r));if(e.addEventListener){var f=t in c,l=f?c[t]:t;return e.addEventListener(l,r,f),{remove:function(){e.removeEventListener(l,r,f)}}}t="on"+t;if(g&&e.attachEvent)return g(e,t,r);throw new Error("Target must be an event emitter")}function u(){this.cancelable=!1,this.defaultPrevented=!0}function a(){this.bubbles=!1}var r=window.ScriptEngineMajorVersion;n.add("jscript",r&&r()+ScriptEngineMinorVersion()/10),n.add("event-orientationchange",n("touch")&&!n("android")),n.add("event-stopimmediatepropagation",window.Event&&!!window.Event.prototype&&!!window.Event.prototype.stopImmediatePropagation),n.add("event-focusin",function(e,t,n){return!!n.attachEvent});var i=function(e,t,n,r){return typeof e.on=="function"&&typeof t!="function"&&!e.nodeType?e.on(t,n):i.parse(e,t,n,o,r,this)};i.pausable=function(e,t,n,r){var s,o=i(e,t,function(){if(!s)return n.apply(this,arguments)},r);return o.pause=function(){s=!0},o.resume=function(){s=!1},o},i.once=function(e,t,n,r){var s=i(e,t,function(){return s.remove(),n.apply(this,arguments)});return s},i.parse=function(e,t,n,r,i,s){if(t.call)return t.call(s,e,n);if(t.indexOf(",")>-1){var o=t.split(/\s*,\s*/),u=[],a=0,f;while(f=o[a++])u.push(r(e,f,n,i,s));return u.remove=function(){for(var e=0;e<u.length;e++)u[e].remove()},u}return r(e,t,n,i,s)};var s=/^touch/;i.selector=function(e,n,r){return function(s,o){function f(n){u=u&&u.matches?u:t.query;while(!u.matches(n,e,s))if(n==s||r===!1||!(n=n.parentNode)||n.nodeType!=1)return;return n}var u=typeof e=="function"?{matches:e}:this,a=n.bubble;return a?i(s,a(f),o):i(s,n,function(e){var t=f(e.target);return t&&o.call(t,e)})}};var f=[].slice,l=i.emit=function(e,t,n){var r=f.call(arguments,2),i="on"+t;if("parentNode"in e){var s=r[0]={};for(var o in n)s[o]=n[o];s.preventDefault=u,s.stopPropagation=a,s.target=e,s.type=t,n=s}do e[i]&&e[i].apply(e,r);while(n&&n.bubbles&&(e=e.parentNode));return n&&n.cancelable&&n},c=n("event-focusin")?{}:{focusin:"focus",focusout:"blur"};if(!n("event-stopimmediatepropagation"))var h=function(){this.immediatelyStopped=!0,this.modified=!0},p=function(e){return function(t){if(!t.immediatelyStopped)return t.stopImmediatePropagation=h,e.apply(this,arguments)}};if(n("dom-addeventlistener"))i.emit=function(e,t,n){if(e.dispatchEvent&&document.createEvent){var r=e.ownerDocument.createEvent("HTMLEvents");r.initEvent(t,!!n.bubbles,!!n.cancelable);for(var s in n)s in r||(r[s]=n[s]);return e.dispatchEvent(r)&&r}return l.apply(i,arguments)};else{i._fixEvent=function(e,t){if(!e){var n=t&&(t.ownerDocument||t.document||t).parentWindow||window;e=n.event}if(!e)return e;try{d&&e.type==d.type&&e.srcElement==d.target&&(e=d)}catch(r){}if(!e.target){e.target=e.srcElement,e.currentTarget=t||e.srcElement,e.type=="mouseover"&&(e.relatedTarget=e.fromElement),e.type=="mouseout"&&(e.relatedTarget=e.toElement),e.stopPropagation||(e.stopPropagation=b,e.preventDefault=w);switch(e.type){case"keypress":var i="charCode"in e?e.charCode:e.keyCode;i==10?(i=0,e.keyCode=13):i==13||i==27?i=0:i==3&&(i=99),e.charCode=i,y(e)}}return e};var d,v=function(e){this.handle=e};v.prototype.remove=function(){delete _dojoIEListeners_[this.handle]};var m=function(e){return function(t){t=i._fixEvent(t,this);var n=e.call(this,t);return t.modified&&(d||setTimeout(function(){d=null}),d=t),n}},g=function(t,r,i){i=m(i);if(((t.ownerDocument?t.ownerDocument.parentWindow:t.parentWindow||t.window||window)!=top||n("jscript")<5.8)&&!n("config-_allow_leaks")){typeof _dojoIEListeners_=="undefined"&&(_dojoIEListeners_=[]);var s=t[r];if(!s||!s.listeners){var o=s;s=Function("event","var callee = arguments.callee; for(var i = 0; i<callee.listeners.length; i++){var listener = _dojoIEListeners_[callee.listeners[i]]; if(listener){listener.call(this,event);}}"),s.listeners=[],t[r]=s,s.global=this,o&&s.listeners.push(_dojoIEListeners_.push(o)-1)}var u;return s.listeners.push(u=s.global._dojoIEListeners_.push(i)-1),new v(u)}return e.after(t,r,i,!0)},y=function(e){e.keyChar=e.charCode?String.fromCharCode(e.charCode):"",e.charOrCode=e.keyChar||e.keyCode},b=function(){this.cancelBubble=!0},w=i._preventDefault=function(){this.bubbledKeyCode=this.keyCode;if(this.ctrlKey)try{this.keyCode=0}catch(e){}this.defaultPrevented=!0,this.returnValue=!1,this.modified=!0}}if(n("touch"))var E=function(){},S=window.orientation,x=function(e){return function(t){var r=t.corrected;if(!r){var i=t.type;try{delete t.type}catch(s){}if(t.type){if(n("mozilla")){var r={};for(var o in t)r[o]=t[o]}else{E.prototype=t;var r=new E}r.preventDefault=function(){t.preventDefault()},r.stopPropagation=function(){t.stopPropagation()}}else r=t,r.type=i;t.corrected=r;if(i=="resize")return S==window.orientation?null:(S=window.orientation,r.type="orientationchange",e.call(this,r));"rotation"in r||(r.rotation=0,r.scale=1);var u=r.changedTouches[0];for(var a in u)delete r[a],r[a]=u[a]}return e.call(this,r)}};return i})},"dojo/topic":function(){define(["./Evented"],function(e){var t=new e;return{publish:function(e,n){return t.emit.apply(t,arguments)},subscribe:function(e,n){return t.on.apply(t,arguments)}}})},"dojo/Evented":function(){define(["./aspect","./on"],function(e,t){"use strict";function r(){}var n=e.after;return r.prototype={on:function(e,r){return t.parse(this,e,r,function(e,t){return n(e,"on"+t,r,!0)})},emit:function(e,n){var r=[this];return r.push.apply(r,arguments),t.emit.apply(t,r)}},r})},"dojo/aspect":function(){define([],function(){"use strict";function n(e,n,r,i){var s=e[n],o=n=="around",u;if(o){var a=r(function(){return s.advice(this,arguments)});u={remove:function(){a&&(a=e=r=null)},advice:function(e,t){return a?a.apply(e,t):s.advice(e,t)}}}else u={remove:function(){if(u.advice){var t=u.previous,i=u.next;!i&&!t?delete e[n]:(t?t.next=i:e[n]=i,i&&(i.previous=t)),e=r=u.advice=null}},id:t++,advice:r,receiveArguments:i};if(s&&!o)if(n=="after"){while(s.next&&(s=s.next));s.next=u,u.previous=s}else n=="before"&&(e[n]=u,u.next=s,s.previous=u);else e[n]=u;return u}function r(r){return function(i,s,o,u){var a=i[s],f;if(!a||a.target!=i)i[s]=f=function(){var n=t,r=arguments,i=f.before;while(i)r=i.advice.apply(this,r)||r,i=i.next;if(f.around)var s=f.around.advice(this,r);var o=f.after;while(o&&o.id<n){if(o.receiveArguments){var u=o.advice.apply(this,r);s=u===e?s:u}else s=o.advice.call(this,s,r);o=o.next}return s},a&&(f.around={advice:function(e,t){return a.apply(e,t)}}),f.target=i;var l=n(f||a,r,o,u);return o=null,l}}var e,t=0,i=r("after"),s=r("before"),o=r("around");return{before:s,around:o,after:i}})},"dojo/_base/event":function(){define(["./kernel","../on","../has","../dom-geometry"],function(e,t,n,r){if(t._fixEvent){var i=t._fixEvent;t._fixEvent=function(e,t){return e=i(e,t),e&&r.normalizeEvent(e),e}}var s={fix:function(e,n){return t._fixEvent?t._fixEvent(e,n):e},stop:function(e){n("dom-addeventlistener")||e&&e.preventDefault?(e.preventDefault(),e.stopPropagation()):(e=e||window.event,e.cancelBubble=!0,t._preventDefault.call(e))}};return e.fixEvent=s.fix,e.stopEvent=s.stop,s})},"dojo/dom-geometry":function(){define(["./sniff","./_base/window","./dom","./dom-style"],function(e,t,n,r){function o(e,t,n,r,i,s){s=s||"px";var o=e.style;isNaN(t)||(o.left=t+s),isNaN(n)||(o.top=n+s),r>=0&&(o.width=r+s),i>=0&&(o.height=i+s)}function u(e){return e.tagName.toLowerCase()=="button"||e.tagName.toLowerCase()=="input"&&(e.getAttribute("type")||"").toLowerCase()=="button"}function a(e){return i.boxModel=="border-box"||e.tagName.toLowerCase()=="table"||u(e)}var i={};i.boxModel="content-box",e("ie")&&(i.boxModel=document.compatMode=="BackCompat"?"border-box":"content-box"),i.getPadExtents=function(t,i){t=n.byId(t);var s=i||r.getComputedStyle(t),o=r.toPixelValue,u=o(t,s.paddingLeft),a=o(t,s.paddingTop),f=o(t,s.paddingRight),l=o(t,s.paddingBottom);return{l:u,t:a,r:f,b:l,w:u+f,h:a+l}};var s="none";i.getBorderExtents=function(t,i){t=n.byId(t);var o=r.toPixelValue,u=i||r.getComputedStyle(t),a=u.borderLeftStyle!=s?o(t,u.borderLeftWidth):0,f=u.borderTopStyle!=s?o(t,u.borderTopWidth):0,l=u.borderRightStyle!=s?o(t,u.borderRightWidth):0,c=u.borderBottomStyle!=s?o(t,u.borderBottomWidth):0;return{l:a,t:f,r:l,b:c,w:a+l,h:f+c}},i.getPadBorderExtents=function(t,s){t=n.byId(t);var o=s||r.getComputedStyle(t),u=i.getPadExtents(t,o),a=i.getBorderExtents(t,o);return{l:u.l+a.l,t:u.t+a.t,r:u.r+a.r,b:u.b+a.b,w:u.w+a.w,h:u.h+a.h}},i.getMarginExtents=function(t,i){t=n.byId(t);var s=i||r.getComputedStyle(t),o=r.toPixelValue,u=o(t,s.marginLeft),a=o(t,s.marginTop),f=o(t,s.marginRight),l=o(t,s.marginBottom);return{l:u,t:a,r:f,b:l,w:u+f,h:a+l}},i.getMarginBox=function(o,u){o=n.byId(o);var a=u||r.getComputedStyle(o),f=i.getMarginExtents(o,a),l=o.offsetLeft-f.l,c=o.offsetTop-f.t,h=o.parentNode,p=r.toPixelValue,d;if(e("mozilla")){var v=parseFloat(a.left),m=parseFloat(a.top);!isNaN(v)&&!isNaN(m)?(l=v,c=m):h&&h.style&&(d=r.getComputedStyle(h),d.overflow!="visible"&&(l+=d.borderLeftStyle!=s?p(o,d.borderLeftWidth):0,c+=d.borderTopStyle!=s?p(o,d.borderTopWidth):0))}else(e("opera")||e("ie")==8&&!e("quirks"))&&h&&(d=r.getComputedStyle(h),l-=d.borderLeftStyle!=s?p(o,d.borderLeftWidth):0,c-=d.borderTopStyle!=s?p(o,d.borderTopWidth):0);return{l:l,t:c,w:o.offsetWidth+f.w,h:o.offsetHeight+f.h}},i.getContentBox=function(s,o){s=n.byId(s);var u=o||r.getComputedStyle(s),a=s.clientWidth,f,l=i.getPadExtents(s,u),c=i.getBorderExtents(s,u);return a?(f=s.clientHeight,c.w=c.h=0):(a=s.offsetWidth,f=s.offsetHeight),e("opera")&&(l.l+=c.l,l.t+=c.t),{l:l.l,t:l.t,w:a-l.w-c.w,h:f-l.h-c.h}},i.setContentSize=function(t,r,s){t=n.byId(t);var u=r.w,f=r.h;if(a(t)){var l=i.getPadBorderExtents(t,s);u>=0&&(u+=l.w),f>=0&&(f+=l.h)}o(t,NaN,NaN,u,f)};var f={l:0,t:0,w:0,h:0};return i.setMarginBox=function(s,l,c){s=n.byId(s);var h=c||r.getComputedStyle(s),p=l.w,d=l.h,v=a(s)?f:i.getPadBorderExtents(s,h),m=i.getMarginExtents(s,h);if(e("webkit")&&u(s)){var g=s.style;p>=0&&!g.width&&(g.width="4px"),d>=0&&!g.height&&(g.height="4px")}p>=0&&(p=Math.max(p-v.w-m.w,0)),d>=0&&(d=Math.max(d-v.h-m.h,0)),o(s,l.l,l.t,p,d)},i.isBodyLtr=function(n){return n=n||t.doc,(t.body(n).dir||n.documentElement.dir||"ltr").toLowerCase()=="ltr"},i.docScroll=function(r){r=r||t.doc;var s=t.doc.parentWindow||t.doc.defaultView;return"pageXOffset"in s?{x:s.pageXOffset,y:s.pageYOffset}:(s=e("quirks")?t.body(r):r.documentElement)&&{x:i.fixIeBiDiScrollLeft(s.scrollLeft||0,r),y:s.scrollTop||0}},e("ie")&&(i.getIeDocumentElementOffset=function(r){r=r||t.doc;var i=r.documentElement;if(e("ie")<8){var s=i.getBoundingClientRect(),o=s.left,u=s.top;return e("ie")<7&&(o+=i.clientLeft,u+=i.clientTop),{x:o<0?0:o,y:u<0?0:u}}return{x:0,y:0}}),i.fixIeBiDiScrollLeft=function(r,s){s=s||t.doc;var o=e("ie");if(o&&!i.isBodyLtr(s)){var u=e("quirks"),a=u?t.body(s):s.documentElement,f=t.global;return o==6&&!u&&f.frameElement&&a.scrollHeight>a.clientHeight&&(r+=a.clientLeft),o<8||u?r+a.clientWidth-a.scrollWidth:-r}return r},i.position=function(r,s){r=n.byId(r);var o=t.body(r.ownerDocument),u=r.getBoundingClientRect();u={x:u.left,y:u.top,w:u.right-u.left,h:u.bottom-u.top};if(e("ie")<9){var a=i.getIeDocumentElementOffset(r.ownerDocument);u.x-=a.x+(e("quirks")?o.clientLeft+o.offsetLeft:0),u.y-=a.y+(e("quirks")?o.clientTop+o.offsetTop:0)}if(s){var f=i.docScroll(r.ownerDocument);u.x+=f.x,u.y+=f.y}return u},i.getMarginSize=function(t,s){t=n.byId(t);var o=i.getMarginExtents(t,s||r.getComputedStyle(t)),u=t.getBoundingClientRect();return{w:u.right-u.left+o.w,h:u.bottom-u.top+o.h}},i.normalizeEvent=function(t){"layerX"in t||(t.layerX=t.offsetX,t.layerY=t.offsetY);if(!e("dom-addeventlistener")){var n=t.target,r=n&&n.ownerDocument||document,s=e("quirks")?r.body:r.documentElement,o=i.getIeDocumentElementOffset(r);t.pageX=t.clientX+i.fixIeBiDiScrollLeft(s.scrollLeft||0,r)-o.x,t.pageY=t.clientY+(s.scrollTop||0)-o.y}},i})},"dojo/mouse":function(){define(["./_base/kernel","./on","./has","./dom","./_base/window"],function(e,t,n,r,i){function o(e,n){var i=function(i,s){return t(i,e,function(e){if(n)return n(e,s);if(!r.isDescendant(e.relatedTarget,i))return s.call(this,e)})};return i.bubble=function(t){return o(e,function(e,n){var r=t(e.target),i=e.relatedTarget;if(r&&r!=(i&&i.nodeType==1&&t(i)))return n.call(r,e)})},i}n.add("dom-quirks",i.doc&&i.doc.compatMode=="BackCompat"),n.add("events-mouseenter",i.doc&&"onmouseenter"in i.doc.createElement("div")),n.add("events-mousewheel",i.doc&&"onmousewheel"in i.doc);var s;n("dom-quirks")&&n("ie")||!n("dom-addeventlistener")?s={LEFT:1,MIDDLE:4,RIGHT:2,isButton:function(e,t){return e.button&t},isLeft:function(e){return e.button&1},isMiddle:function(e){return e.button&4},isRight:function(e){return e.button&2}}:s={LEFT:0,MIDDLE:1,RIGHT:2,isButton:function(e,t){return e.button==t},isLeft:function(e){return e.button==0},isMiddle:function(e){return e.button==1},isRight:function(e){return e.button==2}},e.mouseButtons=s;var u;return n("events-mousewheel")?u="mousewheel":u=function(e,n){return t(e,"DOMMouseScroll",function(e){e.wheelDelta=-e.detail,n.call(this,e)})},{_eventHandler:o,enter:o("mouseover"),leave:o("mouseout"),wheel:u,isLeft:s.isLeft,isMiddle:s.isMiddle,isRight:s.isRight}})},"dojo/_base/sniff":function(){define(["./kernel","./lang","../sniff"],function(e,t,n){return e._name="browser",t.mixin(e,{isBrowser:!0,isFF:n("ff"),isIE:n("ie"),isKhtml:n("khtml"),isWebKit:n("webkit"),isMozilla:n("mozilla"),isMoz:n("mozilla"),isOpera:n("opera"),isSafari:n("safari"),isChrome:n("chrome"),isMac:n("mac"),isIos:n("ios"),isAndroid:n("android"),isWii:n("wii"),isQuirks:n("quirks"),isAir:n("air")}),n})},"dojo/keys":function(){define(["./_base/kernel","./sniff"],function(e,t){return e.keys={BACKSPACE:8,TAB:9,CLEAR:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,META:t("webkit")?91:224,PAUSE:19,CAPS_LOCK:20,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40,INSERT:45,DELETE:46,HELP:47,LEFT_WINDOW:91,RIGHT_WINDOW:92,SELECT:93,NUMPAD_0:96,NUMPAD_1:97,NUMPAD_2:98,NUMPAD_3:99,NUMPAD_4:100,NUMPAD_5:101,NUMPAD_6:102,NUMPAD_7:103,NUMPAD_8:104,NUMPAD_9:105,NUMPAD_MULTIPLY:106,NUMPAD_PLUS:107,NUMPAD_ENTER:108,NUMPAD_MINUS:109,NUMPAD_PERIOD:110,NUMPAD_DIVIDE:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,NUM_LOCK:144,SCROLL_LOCK:145,UP_DPAD:175,DOWN_DPAD:176,LEFT_DPAD:177,RIGHT_DPAD:178,copyKey:t("mac")&&!t("air")?t("safari")?91:224:17}})},"dojo/dom-class":function(){define(["./_base/lang","./_base/array","./dom"],function(e,t,n){function u(e){if(typeof e=="string"||e instanceof String){if(e&&!s.test(e))return o[0]=e,o;var n=e.split(s);return n.length&&!n[0]&&n.shift(),n.length&&!n[n.length-1]&&n.pop(),n}return e?t.filter(e,function(e){return e}):[]}var r="className",i,s=/\s+/,o=[""],a={};return i={contains:function(t,i){return(" "+n.byId(t)[r]+" ").indexOf(" "+i+" ")>=0},add:function(t,i){t=n.byId(t),i=u(i);var s=t[r],o;s=s?" "+s+" ":" ",o=s.length;for(var a=0,f=i.length,l;a<f;++a)l=i[a],l&&s.indexOf(" "+l+" ")<0&&(s+=l+" ");o<s.length&&(t[r]=s.substr(1,s.length-2))},remove:function(i,s){i=n.byId(i);var o;if(s!==undefined){s=u(s),o=" "+i[r]+" ";for(var a=0,f=s.length;a<f;++a)o=o.replace(" "+s[a]+" "," ");o=e.trim(o)}else o="";i[r]!=o&&(i[r]=o)},replace:function(t,s,o){t=n.byId(t),a[r]=t[r],i.remove(a,o),i.add(a,s),t[r]!==a[r]&&(t[r]=a[r])},toggle:function(t,r,s){t=n.byId(t);if(s===undefined){r=u(r);for(var o=0,a=r.length,f;o<a;++o)f=r[o],i[i.contains(t,f)?"remove":"add"](t,f)}else i[s?"add":"remove"](t,r);return s}},i})},"dojo/Stateful":function(){define(["./_base/declare","./_base/lang","./_base/array","./when"],function(e,t,n,r){return e("dojo.Stateful",null,{_attrPairNames:{},_getAttrNames:function(e){var t=this._attrPairNames;return t[e]?t[e]:t[e]={s:"_"+e+"Setter",g:"_"+e+"Getter"}},postscript:function(e){e&&this.set(e)},_get:function(e,t){return typeof this[t.g]=="function"?this[t.g]():this[e]},get:function(e){return this._get(e,this._getAttrNames(e))},set:function(e,t){if(typeof e=="object"){for(var n in e)e.hasOwnProperty(n)&&n!="_watchCallbacks"&&this.set(n,e[n]);return this}var i=this._getAttrNames(e),s=this._get(e,i),o=this[i.s],u;typeof o=="function"?u=o.apply(this,Array.prototype.slice.call(arguments,1)):this[e]=t;if(this._watchCallbacks){var a=this;r(u,function(){a._watchCallbacks(e,s,t)})}return this},_changeAttrValue:function(e,t){var n=this.get(e);return this[e]=t,this._watchCallbacks&&this._watchCallbacks(e,n,t),this},watch:function(e,t){var r=this._watchCallbacks;if(!r){var i=this;r=this._watchCallbacks=function(e,t,n,s){var o=function(r){if(r){r=r.slice();for(var s=0,o=r.length;s<o;s++)r[s].call(i,e,t,n)}};o(r["_"+e]),s||o(r["*"])}}!t&&typeof e=="function"?(t=e,e="*"):e="_"+e;var s=r[e];typeof s!="object"&&(s=r[e]=[]),s.push(t);var o={};return o.unwatch=o.remove=function(){var e=n.indexOf(s,t);e>-1&&s.splice(e,1)},o}})})},"dojo/when":function(){define(["./Deferred","./promise/Promise"],function(e,t){"use strict";return function(r,i,s,o){var u=r&&typeof r.then=="function",a=u&&r instanceof t;if(!u)return arguments.length>1?i?i(r):r:(new e).resolve(r);if(!a){var f=new e(r.cancel);r.then(f.resolve,f.reject,f.progress),r=f.promise}return i||s||o?r.then(i,s,o):r}})},"dojo/Deferred":function(){define(["./has","./_base/lang","./errors/CancelError","./promise/Promise","./promise/instrumentation"],function(e,t,n,r,i){"use strict";var s=0,o=1,u=2,a="This deferred has already been fulfilled.",f=Object.freeze||function(){},l=function(e,t,n,r,i){t===u&&d.instrumentRejected&&e.length===0&&d.instrumentRejected(n,!1,r,i);for(var s=0;s<e.length;s++)c(e[s],t,n,r)},c=function(e,t,n,r){var i=e[t],a=e.deferred;if(i)try{var f=i(n);if(t===s)typeof f!="undefined"&&p(a,t,f);else{if(f&&typeof f.then=="function"){e.cancel=f.cancel,f.then(h(a,o),h(a,u),h(a,s));return}p(a,o,f)}}catch(l){p(a,u,l)}else p(a,t,n);t===u&&d.instrumentRejected&&d.instrumentRejected(n,!!i,r,a.promise)},h=function(e,t){return function(n){p(e,t,n)}},p=function(e,t,n){if(!e.isCanceled())switch(t){case s:e.progress(n);break;case o:e.resolve(n);break;case u:e.reject(n)}},d=function(e){var t=this.promise=new r,i=this,h,p,v,m=!1,g=[];Error.captureStackTrace&&(Error.captureStackTrace(i,d),Error.captureStackTrace(t,d)),this.isResolved=t.isResolved=function(){return h===o},this.isRejected=t.isRejected=function(){return h===u},this.isFulfilled=t.isFulfilled=function(){return!!h},this.isCanceled=t.isCanceled=function(){return m},this.progress=function(e,n){if(!h)return l(g,s,e,null,i),t;if(n===!0)throw new Error(a);return t},this.resolve=function(e,n){if(!h)return l(g,h=o,p=e,null,i),g=null,t;if(n===!0)throw new Error(a);return t};var y=this.reject=function(e,n){if(!h)return Error.captureStackTrace&&Error.captureStackTrace(v={},y),l(g,h=u,p=e,v,i),g=null,t;if(n===!0)throw new Error(a);return t};this.then=t.then=function(e,n,r){var i=[r,e,n];return i.cancel=t.cancel,i.deferred=new d(function(e){return i.cancel&&i.cancel(e)}),h&&!g?c(i,h,p,v):g.push(i),i.deferred.promise},this.cancel=t.cancel=function(t,r){if(!h){if(e){var i=e(t);t=typeof i=="undefined"?t:i}m=!0;if(!h)return typeof t=="undefined"&&(t=new n),y(t),t;if(h===u&&p===t)return t}else if(r===!0)throw new Error(a)},f(t)};return d.prototype.toString=function(){return"[object Deferred]"},i&&i(d),d})},"dojo/errors/CancelError":function(){define(["./create"],function(e){return e("CancelError",null,null,{dojoType:"cancel"})})},"dojo/errors/create":function(){define(["../_base/lang"],function(e){return function(t,n,r,i){r=r||Error;var s=function(e){if(r===Error){Error.captureStackTrace&&Error.captureStackTrace(this,s);var t=Error.call(this,e),i;for(i in t)t.hasOwnProperty(i)&&(this[i]=t[i]);this.message=e,this.stack=t.stack}else r.apply(this,arguments);n&&n.apply(this,arguments)};return s.prototype=e.delegate(r.prototype,i),s.prototype.name=t,s.prototype.constructor=s,s}})},"dojo/promise/Promise":function(){define(["../_base/lang"],function(e){"use strict";function t(){throw new TypeError("abstract")}return e.extend(function(){},{then:function(e,n,r){t()},cancel:function(e,n){t()},isResolved:function(){t()},isRejected:function(){t()},isFulfilled:function(){t()},isCanceled:function(){t()},always:function(e){return this.then(e,e)},otherwise:function(e){return this.then(null,e)},trace:function(){return this},traceRejected:function(){return this},toString:function(){return"[object Promise]"}})})},"dojo/promise/instrumentation":function(){define(["./tracer","../has","../_base/lang","../_base/array"],function(e,t,n,r){function i(e,t,n){var r="";e&&e.stack&&(r+=e.stack),t&&t.stack&&(r+="\n ----------------------------------------\n rejected"+t.stack.split("\n").slice(1).join("\n").replace(/^\s+/," ")),n&&n.stack&&(r+="\n ----------------------------------------\n"+n.stack),console.error(e,r)}function s(e,t,n,r){t||i(e,n,r)}function f(e,t,n,i){t?r.some(o,function(t,n){if(t.error===e)return o.splice(n,1),!0}):r.some(o,function(t){return t.error===e})||o.push({error:e,rejection:n,deferred:i,timestamp:(new Date).getTime()}),u||(u=setTimeout(l,a))}function l(){var e=(new Date).getTime(),t=e-a;o=r.filter(o,function(e){return e.timestamp<t?(i(e.error,e.rejection,e.deferred),!1):!0}),o.length?u=setTimeout(l,o[0].timestamp+a-e):u=!1}var o=[],u=!1,a=1e3;return function(r){var i=t("config-useDeferredInstrumentation");if(i){e.on("resolved",n.hitch(console,"log","resolved")),e.on("rejected",n.hitch(console,"log","rejected")),e.on("progress",n.hitch(console,"log","progress"));var o=[];typeof i=="string"&&(o=i.split(","),i=o.shift());if(i==="report-rejections")r.instrumentRejected=s;else{if(i!=="report-unhandled-rejections"&&i!==!0&&i!==1)throw new Error("Unsupported instrumentation usage <"+i+">");r.instrumentRejected=f,a=parseInt(o[0],10)||a}}}})},"dojo/promise/tracer":function(){define(["../_base/lang","./Promise","../Evented"],function(e,t,n){"use strict";function s(e){setTimeout(function(){i.apply(r,e)},0)}var r=new n,i=r.emit;return r.emit=null,t.prototype.trace=function(){var t=e._toArray(arguments);return this.then(function(e){s(["resolved",e].concat(t))},function(e){s(["rejected",e].concat(t))},function(e){s(["progress",e].concat(t))}),this},t.prototype.traceRejected=function(){var t=e._toArray(arguments);return this.otherwise(function(e){s(["rejected",e].concat(t))}),this},r})},"dojo/io-query":function(){define(["./_base/lang"],function(e){var t={};return{objectToQuery:function(r){var i=encodeURIComponent,s=[];for(var o in r){var u=r[o];if(u!=t[o]){var a=i(o)+"=";if(e.isArray(u))for(var f=0,l=u.length;f<l;++f)s.push(a+i(u[f]));else s.push(a+i(u))}}return s.join("&")},queryToObject:function(n){var r=decodeURIComponent,i=n.split("&"),s={},o,u;for(var a=0,f=i.length,l;a<f;++a){l=i[a];if(l.length){var c=l.indexOf("=");c<0?(o=r(l),u=""):(o=r(l.slice(0,c)),u=r(l.slice(c+1))),typeof s[o]=="string"&&(s[o]=[s[o]]),e.isArray(s[o])?s[o].push(u):s[o]=u}}return s}}})},"dojo/router":function(){define(["./router/RouterBase"],function(e){return new e({})})},"dojo/router/RouterBase":function(){define(["dojo/_base/declare","dojo/hash","dojo/topic"],function(e,t,n){function i(e,t,n){var r,i,s,o,u,a,f;r=this.callbackQueue,i=!1,s=!1,o={stopImmediatePropagation:function(){i=!0},preventDefault:function(){s=!0},oldPath:t,newPath:n,params:e},u=[o];if(e instanceof Array)u=u.concat(e);else for(var l in e)u.push(e[l]);for(a=0,f=r.length;a<f;++a)i||r[a].apply(null,u);return!s}var r;String.prototype.trim?r=function(e){return e.trim()}:r=function(e){return e.replace(/^\s\s*/,"").replace(/\s\s*$/,"")};var s=e(null,{_routes:null,_routeIndex:null,_started:!1,_currentPath:"",idMatch:/:(\w[\w\d]*)/g,idReplacement:"([^\\/]+)",globMatch:/\*(\w[\w\d]*)/,globReplacement:"(.+)",constructor:function(e){this._routes=[],this._routeIndex={};for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t])},register:function(e,t){return this._registerRoute(e,t)},registerBefore:function(e,t){return this._registerRoute(e,t,!0)},go:function(e,n){var i;return typeof e!="string"?!1:(e=r(e),i=this._handlePathChange(e),i&&t(e,n),i)},startup:function(e){if(this._started)return;var r=this,i=t();this._started=!0,this._hashchangeHandle=n.subscribe("/dojo/hashchange",function(){r._handlePathChange.apply(r,arguments)}),i?this._handlePathChange(i):this.go(e,!0)},destroy:function(){this._hashchangeHandle.remove(),this._routes=null,this._routeIndex=null},_handlePathChange:function(e){var t,n,r,i,s,o,u,a,f,l=this._routes,c=this._currentPath;if(!this._started||e===c)return u;u=!0;for(t=0,r=l.length;t<r;++t){s=l[t],o=s.route.exec(e);if(o){if(s.parameterNames){a=s.parameterNames,f={};for(n=0,i=a.length;n<i;++n)f[a[n]]=o[n+1]}else f=o.slice(1);u=s.fire(f,c,e)}}return u&&(this._currentPath=e),u},_convertRouteToRegExp:function(e){return e=e.replace(this.idMatch,this.idReplacement),e=e.replace(this.globMatch,this.globReplacement),e="^"+e+"$",new RegExp(e)},_getParameterNames:function(e){var t=this.idMatch,n=this.globMatch,r=[],i;t.lastIndex=0;while((i=t.exec(e))!==null)r.push(i[1]);return(i=n.exec(e))!==null&&r.push(i[1]),r.length>0?r:null},_indexRoutes:function(){var e,t,n,r,i=this._routes;r=this._routeIndex={};for(e=0,t=i.length;e<t;++e)n=i[e],r[n.route]=e},_registerRoute:function(e,t,n){var r,s,o,u,a,f=this,l=this._routes,c=this._routeIndex;return r=this._routeIndex[e],s=typeof r!="undefined",s&&(o=l[r]),o||(o={route:e,callbackQueue:[],fire:i}),u=o.callbackQueue,typeof e=="string"&&(o.parameterNames=this._getParameterNames(e),o.route=this._convertRouteToRegExp(e)),n?u.unshift(t):u.push(t),s||(r=l.length,c[e]=r,l.push(o)),a=!1,{remove:function(){var e,n;if(a)return;for(e=0,n=u.length;e<n;++e)u[e]===t&&u.splice(e,1);u.length===0&&(l.splice(r,1),f._indexRoutes()),a=!0},register:function(t,n){return f.register(e,t,n)}}}});return s})},"dojo/hash":function(){define(["./_base/kernel","require","./_base/config","./aspect","./_base/lang","./topic","./domReady","./sniff"],function(e,t,n,r,i,s,o,u){function h(e,t){var n=e.indexOf(t);return n>=0?e.substring(n+1):""}function p(){return h(location.href,"#")}function d(){s.publish("/dojo/hashchange",p())}function v(){if(p()===a)return;a=p(),d()}function m(e){if(f){if(f.isTransitioning()){setTimeout(i.hitch(null,m,e),c);return}var t=f.iframe.location.href,n=t.indexOf("?");f.iframe.location.replace(t.substring(0,n)+"?"+e);return}location.replace("#"+e),!l&&v()}function g(){function y(){a=p(),u=m?a:h(g.href,"?"),f=!1,l=null}var r=document.createElement("iframe"),s="dojo-hash-iframe",o=n.dojoBlankHtmlUrl||t.toUrl("./resources/blank.html");n.useXDomain&&!n.dojoBlankHtmlUrl&&console.warn("dojo.hash: When using cross-domain Dojo builds, please save dojo/resources/blank.html to your domain and set djConfig.dojoBlankHtmlUrl to the path on your domain to blank.html"),r.id=s,r.src=o+"?"+p(),r.style.display="none",document.body.appendChild(r),this.iframe=e.global[s];var u,f,l,v,m,g=this.iframe.location;this.isTransitioning=function(){return f},this.pollLocation=function(){if(!m)try{var e=h(g.href,"?");document.title!=v&&(v=this.iframe.document.title=document.title)}catch(t){m=!0,console.error("dojo.hash: Error adding history entry. Server unreachable.")}var n=p();if(f&&a===n){if(!m&&e!==l){setTimeout(i.hitch(this,this.pollLocation),0);return}y(),d()}else if(a!==n||!m&&u!==e){if(a!==n){a=n,f=!0,l=n,r.src=o+"?"+l,m=!1,setTimeout(i.hitch(this,this.pollLocation),0);return}m||(location.href="#"+g.search.substring(1),y(),d())}setTimeout(i.hitch(this,this.pollLocation),c)},y(),setTimeout(i.hitch(this,this.pollLocation),c)}e.hash=function(e,t){return arguments.length?(e.charAt(0)=="#"&&(e=e.substring(1)),t?m(e):location.href="#"+e,e):p()};var a,f,l,c=n.hashPollFrequency||100;return o(function(){"onhashchange"in e.global&&(!u("ie")||u("ie")>=8&&document.compatMode!="BackCompat")?l=r.after(e.global,"onhashchange",d,!0):document.addEventListener?(a=p(),setInterval(v,c)):document.attachEvent&&(f=new g)}),e.hash})},"dojo/store/Observable":function(){define(["../_base/kernel","../_base/lang","../when","../_base/array"],function(e,t,n,r){var i=function(e){function f(t,r){var i=e[t];i&&(e[t]=function(e){if(a)return i.apply(this,arguments);a=!0;try{var t=i.apply(this,arguments);return n(t,function(t){r(typeof t=="object"&&t||e)}),t}finally{a=!1}})}var i,s=[],o=0;e=t.delegate(e),e.notify=function(e,t){o++;var n=s.slice();for(var r=0,i=n.length;r<i;r++)n[r](e,t)};var u=e.query;e.query=function(a,f){f=f||{};var l=u.apply(this,arguments);if(l&&l.forEach){var c=t.mixin({},f);delete c.start,delete c.count;var h=e.queryEngine&&e.queryEngine(a,c),p=o,d=[],v;l.observe=function(t,u){d.push(t)==1&&s.push(v=function(t,s){n(l,function(n){var a=n.length!=f.count,l,c,v;if(++p!=o)throw new Error("Query is out of date, you must observe() the query prior to any data modifications");var m,g=-1,y=-1;if(s!==i)for(l=0,c=n.length;l<c;l++){var b=n[l];if(e.getIdentity(b)==s){m=b,g=l,(h||!t)&&n.splice(l,1);break}}if(h){if(t&&(h.matches?h.matches(t):h([t]).length)){var w=g>-1?g:n.length;n.splice(w,0,t),y=r.indexOf(h(n),t),n.splice(w,1),f.start&&y==0||!a&&y==n.length?y=-1:n.splice(y,0,t)}}else t&&(s!==i?y=g:f.start||(y=e.defaultIndex||0,n.splice(y,0,t)));if((g>-1||y>-1)&&(u||!h||g!=y)){var E=d.slice();for(l=0;v=E[l];l++)v(t||m,g,y)}})});var a={};return a.remove=a.cancel=function(){var e=r.indexOf(d,t);e>-1&&(d.splice(e,1),d.length||s.splice(r.indexOf(s,v),1))},a}}return l};var a;return f("put",function(t){e.notify(t,e.getIdentity(t))}),f("add",function(t){e.notify(t)}),f("remove",function(t){e.notify(undefined,t)}),e};return t.setObject("dojo.store.Observable",i),i})},"dojo/store/Memory":function(){define(["../_base/declare","./util/QueryResults","./util/SimpleQueryEngine"],function(e,t,n){var r=null;return e("dojo.store.Memory",r,{constructor:function(e){for(var t in e)this[t]=e[t];this.setData(this.data||[])},data:null,idProperty:"id",index:null,queryEngine:n,get:function(e){return this.data[this.index[e]]},getIdentity:function(e){return e[this.idProperty]},put:function(e,t){var n=this.data,r=this.index,i=this.idProperty,s=e[i]=t&&"id"in t?t.id:i in e?e[i]:Math.random();if(s in r){if(t&&t.overwrite===!1)throw new Error("Object already exists");n[r[s]]=e}else r[s]=n.push(e)-1;return s},add:function(e,t){return(t=t||{}).overwrite=!1,this.put(e,t)},remove:function(e){var t=this.index,n=this.data;if(e in t)return n.splice(t[e],1),this.setData(n),!0},query:function(e,n){return t(this.queryEngine(e,n)(this.data))},setData:function(e){e.items?(this.idProperty=e.identifier,e=this.data=e.items):this.data=e,this.index={};for(var t=0,n=e.length;t<n;t++)this.index[e[t][this.idProperty]]=t}})})},"dojo/store/util/QueryResults":function(){define(["../../_base/array","../../_base/lang","../../when"],function(e,t,n){var r=function(i){function s(t){i[t]||(i[t]=function(){var s=arguments;return n(i,function(n){return Array.prototype.unshift.call(s,n),r(e[t].apply(e,s))})})}return i?(i.then&&(i=t.delegate(i)),s("forEach"),s("filter"),s("map"),i.total||(i.total=n(i,function(e){return e.length})),i):i};return t.setObject("dojo.store.util.QueryResults",r),r})},"dojo/store/util/SimpleQueryEngine":function(){define(["../../_base/array"],function(e){return function(t,n){function i(r){var i=e.filter(r,t),s=n&&n.sort;s&&i.sort(typeof s=="function"?s:function(e,t){for(var n,r=0;n=s[r];r++){var i=e[n.attribute],o=t[n.attribute];if(i!=o)return!!n.descending==(i==null||i>o)?-1:1}return 0});if(n&&(n.start||n.count)){var o=i.length;i=i.slice(n.start||0,(n.start||0)+(n.count||Infinity)),i.total=o}return i}switch(typeof t){default:throw new Error("Can not query with a "+typeof t);case"object":case"undefined":var r=t;t=function(e){for(var t in r){var n=r[t];if(n&&n.test){if(!n.test(e[t],e))return!1}else if(n!=e[t])return!1}return!0};break;case"string":if(!this[t])throw new Error("No filter function "+t+" was found in store");t=this[t];case"function":}return i.matches=t,i}})},"dojo/query":function(){define(["./_base/kernel","./has","./dom","./on","./_base/array","./_base/lang","./selector/_loader","./selector/_loader!default"],function(e,t,n,r,i,s,o,u){"use strict";function E(e,t){var r=function(r,i){if(typeof i=="string"){i=n.byId(i);if(!i)return new t([])}var s=typeof r=="string"?e(r,i):r?r.end&&r.on?r:[r]:[];return s.end&&s.on?s:new t(s)};r.matches=e.match||function(e,t,n){return r.filter([e],t,n).length>0},r.filter=e.filter||function(e,t,n){return r(t,n).filter(function(t){return i.indexOf(e,t)>-1})};if(typeof e!="function"){var s=e.search;e=function(e,t){return s(t||document,e)}}return r}t.add("array-extensible",function(){return s.delegate([],{length:1}).length==1&&!t("bug-for-in-skips-shadowed")});var a=Array.prototype,f=a.slice,l=a.concat,c=i.forEach,h=function(e,t,n){var r=new(n||this._NodeListCtor||b)(e);return t?r._stash(t):r},p=function(t,n,r){return n=[0].concat(f.call(n,0)),r=r||e.global,function(e){return n[0]=e,t.apply(r,n)}},d=function(e,t){return function(){return this.forEach(p(e,arguments,t)),this}},v=function(e,t){return function(){return this.map(p(e,arguments,t))}},m=function(e,t){return function(){return this.filter(p(e,arguments,t))}},g=function(t,n,r){return function(){var i=arguments,s=p(t,i,r);return n.call(r||e.global,i)?this.map(s):(this.forEach(s),this)}},y=function(e){var n=this instanceof b&&t("array-extensible");typeof e=="number"&&(e=Array(e));var r=e&&"length"in e?e:arguments;if(n||!r.sort){var i=n?this:[],o=i.length=r.length;for(var u=0;u<o;u++)i[u]=r[u];if(n)return i;r=i}return s._mixin(r,w),r._NodeListCtor=function(e){return b(e)},r},b=y,w=b.prototype=t("array-extensible")?[]:{};b._wrap=w._wrap=h,b._adaptAsMap=v,b._adaptAsForEach=d,b._adaptAsFilter=m,b._adaptWithCondition=g,c(["slice","splice"],function(e){var t=a[e];w[e]=function(){return this._wrap(t.apply(this,arguments),e=="slice"?this:null)}}),c(["indexOf","lastIndexOf","every","some"],function(t){var n=i[t];w[t]=function(){return n.apply(e,[this].concat(f.call(arguments,0)))}}),s.extend(y,{constructor:b,_NodeListCtor:b,toString:function(){return this.join(",")},_stash:function(e){return this._parent=e,this},on:function(e,t){var n=this.map(function(n){return r(n,e,t)});return n.remove=function(){for(var e=0;e<n.length;e++)n[e].remove()},n},end:function(){return this._parent?this._parent:new this._NodeListCtor(0)},concat:function(e){var t=f.call(this,0),n=i.map(arguments,function(e){return f.call(e,0)});return this._wrap(l.apply(t,n),this)},map:function(e,t){return this._wrap(i.map(this,e,t),this)},forEach:function(e,t){return c(this,e,t),this},filter:function(e){var t=arguments,n=this,r=0;if(typeof e=="string"){n=S._filterResult(this,t[0]);if(t.length==1)return n._stash(this);r=1}return this._wrap(i.filter(n,t[r],t[r+1]),this)},instantiate:function(e,t){var n=s.isFunction(e)?e:s.getObject(e);return t=t||{},this.forEach(function(e){new n(t,e)})},at:function(){var e=new this._NodeListCtor(0);return c(arguments,function(t){t<0&&(t=this.length+t),this[t]&&e.push(this[t])},this),e._stash(this)}});var S=E(u,y);return e.query=E(u,function(e){return y(e)}),S.load=function(e,t,n){o.load(e,t,function(e){n(E(e,y))})},e._filterQueryResult=S._filterResult=function(e,t,n){return new y(S.filter(e,t,n))},e.NodeList=S.NodeList=y,S})},"dojo/selector/_loader":function(){define(["../has","require"],function(e,t){"use strict";var n=document.createElement("div");e.add("dom-qsa2.1",!!n.querySelectorAll),e.add("dom-qsa3",function(){try{return n.innerHTML="<p class='TEST'></p>",n.querySelectorAll(".TEST:empty").length==1}catch(e){}});var r,i="./acme",s="./lite";return{load:function(n,o,u,a){var f=t;n=n=="default"?e("config-selectorEngine")||"css3":n,n=n=="css2"||n=="lite"?s:n=="css2.1"?e("dom-qsa2.1")?s:i:n=="css3"?e("dom-qsa3")?s:i:n=="acme"?i:(f=o)&&n;if(n.charAt(n.length-1)=="?"){n=n.substring(0,n.length-1);var l=!0}if(l&&(e("dom-compliant-qsa")||r))return u(r);f([n],function(e){n!="./lite"&&(r=e),u(e)})}}})},"dojo/selector/lite":function(){define(["../has","../_base/kernel"],function(e,t){"use strict";var n=document.createElement("div"),r=n.matchesSelector||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector,i=n.querySelectorAll,s=/([^\s,](?:"(?:\\.|[^"])+"|'(?:\\.|[^'])+'|[^,])*)/g;e.add("dom-matches-selector",!!r),e.add("dom-qsa",!!i);var o=function(e,n){if(f&&e.indexOf(",")>-1)return f(e,n);var r=n?n.ownerDocument||n:t.doc||document,s=(i?/^([\w]*)#([\w\-]+$)|^(\.)([\w\-\*]+$)|^(\w+$)/:/^([\w]*)#([\w\-]+)(?:\s+(.*))?$|(?:^|(>|.+\s+))([\w\-\*]+)(\S*$)/).exec(e);n=n||r;if(s){if(s[2]){var l=t.byId?t.byId(s[2],r):r.getElementById(s[2]);if(!l||s[1]&&s[1]!=l.tagName.toLowerCase())return[];if(n!=r){var c=l;while(c!=n){c=c.parentNode;if(!c)return[]}}return s[3]?o(s[3],l):[l]}if(s[3]&&n.getElementsByClassName)return n.getElementsByClassName(s[4]);var l;if(s[5]){l=n.getElementsByTagName(s[5]);if(!s[4]&&!s[6])return l;e=(s[4]||"")+s[6]}}if(i)return n.nodeType===1&&n.nodeName.toLowerCase()!=="object"?u(n,e,n.querySelectorAll):n.querySelectorAll(e);l||(l=n.getElementsByTagName("*"));var h=[];for(var p=0,d=l.length;p<d;p++){var v=l[p];v.nodeType==1&&a(v,e,n)&&h.push(v)}return h},u=function(e,t,n){var r=e,i=e.getAttribute("id"),o=i||"__dojo__",u=e.parentNode,a=/^\s*[+~]/.test(t);if(a&&!u)return[];i?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),a&&u&&(e=e.parentNode);var f=t.match(s);for(var l=0;l<f.length;l++)f[l]="[id='"+o+"'] "+f[l];t=f.join(",");try{return n.call(e,t)}finally{i||r.removeAttribute("id")}};if(!e("dom-matches-selector"))var a=function(){function i(e,t,n){var i=t.charAt(0);if(i=='"'||i=="'")t=t.slice(1,-1);t=t.replace(/\\/g,"");var s=r[n||""];return function(n){var r=n.getAttribute(e);return r&&s(r,t)}}function s(e){return function(t,n){while((t=t.parentNode)!=n)if(e(t,n))return!0}}function o(e){return function(t,n){return t=t.parentNode,e?t!=n&&e(t,n):t==n}}function a(e,t){return e?function(n,r){return t(n)&&e(n,r)}:t}var e=n.tagName=="div"?"toLowerCase":"toUpperCase",t={"":function(t){return t=t[e](),function(e){return e.tagName==t}},".":function(e){var t=" "+e+" ";return function(n){return n.className.indexOf(e)>-1&&(" "+n.className+" ").indexOf(t)>-1}},"#":function(e){return function(t){return t.id==e}}},r={"^=":function(e,t){return e.indexOf(t)==0},"*=":function(e,t){return e.indexOf(t)>-1},"$=":function(e,t){return e.substring(e.length-t.length,e.length)==t},"~=":function(e,t){return(" "+e+" ").indexOf(" "+t+" ")>-1},"|=":function(e,t){return(e+"-").indexOf(t+"-")==0},"=":function(e,t){return e==t},"":function(e,t){return!0}},u={};return function(e,n,r){var f=u[n];if(!f){if(n.replace(/(?:\s*([> ])\s*)|(#|\.)?((?:\\.|[\w-])+)|\[\s*([\w-]+)\s*(.?=)?\s*("(?:\\.|[^"])+"|'(?:\\.|[^'])+'|(?:\\.|[^\]])*)\s*\]/g,function(e,n,r,u,l,c,h){return u?f=a(f,t[r||""](u.replace(/\\/g,""))):n?f=(n==" "?s:o)(f):l&&(f=a(f,i(l,h,c))),""}))throw new Error("Syntax error in query");if(!f)return!0;u[n]=f}return f(e,r)}}();if(!e("dom-qsa"))var f=function(e,t){var n=e.match(s),r=[];for(var i=0;i<n.length;i++){e=new String(n[i].replace(/\s*$/,"")),e.indexOf=escape;var u=o(e,t);for(var a=0,f=u.length;a<f;a++){var l=u[a];r[l.sourceIndex]=l}}var c=[];for(i in r)c.push(r[i]);return c};return o.match=r?function(e,t,n){return n&&n.nodeType!=9?u(n,t,function(t){return r.call(e,t)}):r.call(e,t)}:a,o})},"dojo/NodeList-dom":function(){define(["./_base/kernel","./query","./_base/array","./_base/lang","./dom-class","./dom-construct","./dom-geometry","./dom-attr","./dom-style"],function(e,t,n,r,i,s,o,u,a){function v(e){return function(t,n,r){return arguments.length==2?e[typeof n=="string"?"get":"set"](t,n):e.set(t,n,r)}}var f=function(e){return e.length==1&&typeof e[0]=="string"},l=function(e){var t=e.parentNode;t&&t.removeChild(e)},c=t.NodeList,h=c._adaptWithCondition,p=c._adaptAsForEach,d=c._adaptAsMap;return r.extend(c,{_normalize:function(t,n){var i=t.parse===!0;if(typeof t.template=="string"){var o=t.templateFunc||e.string&&e.string.substitute;t=o?o(t.template,t):t}var u=typeof t;return u=="string"||u=="number"?(t=s.toDom(t,n&&n.ownerDocument),t.nodeType==11?t=r._toArray(t.childNodes):t=[t]):r.isArrayLike(t)?r.isArray(t)||(t=r._toArray(t)):t=[t],i&&(t._runParse=!0),t},_cloneNode:function(e){return e.cloneNode(!0)},_place:function(t,n,r,i){if(n.nodeType!=1&&r=="only")return;var o=n,u,a=t.length;for(var f=a-1;f>=0;f--){var l=i?this._cloneNode(t[f]):t[f];if(t._runParse&&e.parser&&e.parser.parse){u||(u=o.ownerDocument.createElement("div")),u.appendChild(l),e.parser.parse(u),l=u.firstChild;while(u.firstChild)u.removeChild(u.firstChild)}f==a-1?s.place(l,o,r):o.parentNode.insertBefore(l,o),o=l}},position:d(o.position),attr:h(v(u),f),style:h(v(a),f),addClass:p(i.add),removeClass:p(i.remove),toggleClass:p(i.toggle),replaceClass:p(i.replace),empty:p(s.empty),removeAttr:p(u.remove),marginBox:d(o.getMarginBox),place:function(e,n){var r=t(e)[0];return this.forEach(function(e){s.place(e,r,n)})},orphan:function(e){return(e?t._filterResult(this,e):this).forEach(l)},adopt:function(e,n){return t(e).place(this[0],n)._stash(this)},query:function(e){if(!e)return this;var n=new c;return this.map(function(r){t(e,r).forEach(function(e){e!==undefined&&n.push(e)})}),n._stash(this)},filter:function(e){var r=arguments,i=this,s=0;if(typeof e=="string"){i=t._filterResult(this,r[0]);if(r.length==1)return i._stash(this);s=1}return this._wrap(n.filter(i,r[s],r[s+1]),this)},addContent:function(e,t){e=this._normalize(e,this[0]);for(var n=0,r;r=this[n];n++)e.length?this._place(e,r,t,n>0):s.empty(r);return this}}),c})},"dojo/promise/all":function(){define(["../_base/array","../Deferred","../when"],function(e,t,n){"use strict";var r=e.some;return function(i){var s,o;i instanceof Array?o=i:i&&typeof i=="object"&&(s=i);var u,a=[];if(s){o=[];for(var f in s)Object.hasOwnProperty.call(s,f)&&(a.push(f),o.push(s[f]));u={}}else o&&(u=[]);if(!o||!o.length)return(new t).resolve(u);var l=new t;l.promise.always(function(){u=a=null});var c=o.length;return r(o,function(e,t){return s||a.push(t),n(e,function(e){l.isFulfilled()||(u[a[t]]=e,--c===0&&l.resolve(u))},l.reject),l.isFulfilled()}),l.promise}})}}}),function(){var e=this.require;e({cache:{}}),!e.async&&e(["dojo"]),e.boot&&e.apply(null,e.boot)}()
\ No newline at end of file diff --git a/install/ui/doc/categories.json b/install/ui/doc/categories.json index 98958a839..a399b21cd 100644 --- a/install/ui/doc/categories.json +++ b/install/ui/doc/categories.json @@ -96,7 +96,8 @@ "IPA.bulk_associator", "IPA.association_config", "spec_util", - "_base.Spec_mod" + "_base.Spec_mod", + "datetime" ] } ] diff --git a/install/ui/src/dojo.profile.js b/install/ui/src/dojo.profile.js index b93ac2480..2aeef9690 100644 --- a/install/ui/src/dojo.profile.js +++ b/install/ui/src/dojo.profile.js @@ -69,6 +69,7 @@ var profile = (function(){ // ^ core is about 20KB "dojo/_base/lang", "dojo/_base/array", + "dojo/string", // ^ adds 10KB "dojo/dom", "dojo/dom-construct", diff --git a/install/ui/src/freeipa/datetime.js b/install/ui/src/freeipa/datetime.js new file mode 100644 index 000000000..5802b972d --- /dev/null +++ b/install/ui/src/freeipa/datetime.js @@ -0,0 +1,217 @@ +/* Authors: + * Petr Vobornik <pvoborni@redhat.com> + * + * Copyright (C) 2014 Red Hat + * see file 'COPYING' for use and warranty information + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + + +define([ + 'dojo/string' + ], function(string) { + + var templates = { + human: '${YYYY}-${MM}-${DD} ${HH}:${mm}:${ss}Z', + generalized: '${YYYY}${MM}${DD}${HH}${mm}${ss}Z' + }; + + var dates = [ + ['YYYY-MM-DD', /^(\d{4})-(\d{2})-(\d{2})$/], + ['YYYYMMDD',/^(\d{4})(\d{2})(\d{2})$/] + ]; + + var times = [ + ['HH:mm:ss', /^(\d\d):(\d\d):(\d\d)$/], + ['HH:mm', /^(\d\d):(\d\d)$/] + ]; + + var generalized_regex = /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z$/; + var datetime_regex = /^((?:\d{8})|(?:\d{4}-\d{2}-\d{2}))(?:(T| )(\d\d:\d\d(?::\d\d)?)(Z?))?$/; + + function parse(value) { + + var Y=0, M=0, D=0, H=0, m=0, s=0; + var i, l, dateStr, timeStr, utc; + + var dt_match = datetime_regex.exec(value); + var gt_match = generalized_regex.exec(value); + if (dt_match) { + dateStr = dt_match[1]; + timeStr = dt_match[3]; + utc = dt_match[4] || !timeStr; + + // error out if local time not supported + if (!this.allow_local && !utc) return null; + + for (i = 0, l = dates.length; i < l; i++) { + var dm = dates[i][1].exec(dateStr); + if (dm) { + Y = dm[1]; + M = dm[2]; + D = dm[3]; + break; + } + } + + if (timeStr) { + for (i = 0, l = times.length; i < l; i++) { + var tm = times[i][1].exec(timeStr); + if (tm) { + H = tm[1]; + m = tm[2] || 0; + s = tm[3] || 0; + break; + } + } + } + } else if (gt_match) { + Y = gt_match[1]; + M = gt_match[2]; + D = gt_match[3]; + H = gt_match[4]; + m = gt_match[5]; + s = gt_match[6]; + utc = true; + } else { + return null; + } + + var date = new Date(); + + if (utc || !timeStr) { + date.setUTCFullYear(Y, M-1, D); + date.setUTCHours(H, m, s, 0); + } else { + date.setFullYear(Y, M-1, D); + date.setHours(H, m, s, 0); + } + return date; + } + + function formatDate(date, format, local) { + + var fmt = format || templates.human; + var str; + + function pad(value) { + return string.pad(value, 2, '0'); + } + + if (local) { + str = string.substitute(fmt, { + YYYY: date.getFullYear(), + MM: pad(date.getMonth()+1), + DD: pad(date.getDate()), + HH: pad(date.getHours()), + mm: pad(date.getMinutes()), + ss: pad(date.getSeconds()) + }); + } else { + str = string.substitute(fmt, { + YYYY: date.getUTCFullYear(), + MM: pad(date.getUTCMonth()+1), + DD: pad(date.getUTCDate()), + HH: pad(date.getUTCHours()), + mm: pad(date.getUTCMinutes()), + ss: pad(date.getUTCSeconds()) + }); + } + return str; + } + + /** + * Utility module to parse strings in ISO 8601-ish format into Date object + * and vice versa + * + * @class datetime + * @singleton + */ + var datetime = { + /** + * Parse string, return date or null on error. + * + * Supported date formats: + * + * - `YYYY-MM-DD` + * - `YYYYMMDD` + * + * Supported time formats: + * + * - `HH:mm:ss` + * - `HH:mm` + * + * Supported formats: + * + * - `$dateT$timeZ` + * - `$date $timeZ` + * - `$date` + * - `YYYYMMDDHHmmssZ` + * + * Where Z indicates UTC date. Parsing of local dates is by default + * disabled. It can be enabled by setting `datetime.allow_local` to + * `true`. + * + * @param {string} value + * @returns {Date|null} parsed date + */ + parse: parse, + + /** + * Convert date to string + * + * - `${YYYY}` - year + * - `${MM}` - month + * - `${DD}` - day + * - `${HH}` - hours + * - `${mm}` - minutes + * - `${ss}` - seconds + * + * Default format string: `${YYYY}-${MM}-${DD} ${HH}:${mm}:${ss}` + * + * @param {Date} date + * @param {string} [format] format string + * @param {boolean} [local] use local time + */ + format: formatDate, + + /** + * Local time input method support + * @property {boolean} + */ + allow_local: false, + + /** + * Convert date value to generalized time string + * @param {Date} date + * @returns {string} + */ + to_generalized_time: function(date) { + return this.format(date, templates.generalized); + }, + + /** + * Dictionary of common format strings + * + * - `human` - default format string of `format` method + * - `generalized` - generalized time (LDAP) format + * + * @property {Object} + */ + templates: templates + }; + + return datetime; +});
\ No newline at end of file diff --git a/install/ui/src/freeipa/field.js b/install/ui/src/freeipa/field.js index f054ecc0e..ef50ebf2a 100644 --- a/install/ui/src/freeipa/field.js +++ b/install/ui/src/freeipa/field.js @@ -27,13 +27,15 @@ define([ 'dojo/_base/lang', './metadata', './builder', + './datetime', './ipa', './jquery', './navigation', './phases', './reg', './text'], - function(array, lang, metadata_provider, builder, IPA, $, navigation, phases, reg, text) { + function(array, lang, metadata_provider, builder, datetime, IPA, $, + navigation, phases, reg, text) { /** * Field module @@ -116,12 +118,21 @@ IPA.field = function(spec) { * Formatter * * - transforms field value to widget value - * - only for read-only fields + * - use corresponding output_formatter if field is not read-only and + * backend can't handle the different format * @property {IPA.formatter} */ that.formatter = builder.build('formatter', spec.formatter); /** + * Output formatter + * + * - transforms widget value into value for backend + * @property {IPA.formatter} + */ + that.output_formatter = builder.build('formatter', spec.output_formatter); + + /** * Widget * @property {IPA.input_widget} */ @@ -297,7 +308,7 @@ IPA.field = function(spec) { if (!that.enabled) return that.valid; - var values = that.save(); + var values = that.get_widget_values(); if (IPA.is_empty(values)) { return that.valid; @@ -424,9 +435,8 @@ IPA.field = function(spec) { var formatted_values; - // The formatter is currently only used on read-only fields only - // because it cannot parse formatted values back to internal values. - if (that.formatter && that.read_only) { + // Change loaded value to human readable value + if (that.formatter) { formatted_values = []; for (var i=0; that.values && i<that.values.length; i++) { var value = that.values[i]; @@ -468,13 +478,14 @@ IPA.field = function(spec) { var values = that.values; - if(!that.enabled) return ['']; + if (!that.enabled) return ['']; - if(that.widget) { - values = that.widget.save(); + if (that.widget) { + values = that.get_widget_values(); + values = that.format_output(values); } - if(record) { + if (record) { record[that.param] = values; } @@ -482,6 +493,41 @@ IPA.field = function(spec) { }; /** + * Gets widget values + * @returns {Array} + */ + that.get_widget_values = function() { + + var values = ['']; + + if (that.widget) { + values = that.widget.save(); + } + + return values; + }; + + /** + * Use output formatter to transform value entered into UI to + * value used by backend + * + * @param {Array} values + * @return {Array} formatted values + */ + that.format_output = function(values) { + + if (that.output_formatter) { + var formatted_values = []; + for (var i=0; values && i<values.length; i++) { + var formatted_value = that.output_formatter.format(values[i]); + formatted_values.push(formatted_value); + } + return formatted_values; + } + return values; + }; + + /** * This function compares the original values and the * values entered in the UI. If the values have changed * it will return true. @@ -853,6 +899,54 @@ IPA.same_password_validator = function(spec) { }; /** + * Check if input value is a valid datetime + * + * @class IPA.datetime_validator + * @extends IPA.validator + */ +IPA.datetime_validator = function(spec) { + + spec = spec || {}; + + var that = IPA.validator(spec); + + that.message = text.get(spec.message || '@i18n:widget.validation.datetime'); + + /** + * @inheritDoc + */ + that.validate = function(value, context) { + + var valid = datetime.parse(value) !== null; + if (!valid) return that.false_result(); + + return that.true_result(); + }; + + return that; +}; + +/** + * Used along with checkbox widget + * + * @class IPA.checkbox_field + * @extends IPA.field + */ +IPA.datetime_field = function(spec) { + + spec = spec || {}; + spec.validators = spec.validators || ['datetime']; + spec.output_formatter = spec.output_formatter || { + $type: 'datetime', + template: datetime.templates.generalized + }; + spec.formatter = spec.formatter || 'datetime'; + + var that = IPA.field(spec); + return that; +}; + +/** * Used along with checkbox widget * * @class IPA.checkbox_field @@ -1461,6 +1555,7 @@ exp.register = function() { f.register('checkbox', IPA.checkbox_field); f.register('checkboxes', IPA.checkboxes_field); f.register('combobox', IPA.field); + f.register('datetime', IPA.datetime_field); f.register('enable', IPA.enable_field); f.register('entity_select', IPA.field); f.register('field', IPA.field); @@ -1477,6 +1572,7 @@ exp.register = function() { v.register('metadata', IPA.metadata_validator); v.register('unsupported', IPA.unsupported_validator); v.register('same_password', IPA.same_password_validator); + v.register('datetime', IPA.datetime_validator); }; phases.on('registration', exp.register); diff --git a/install/ui/src/freeipa/host.js b/install/ui/src/freeipa/host.js index 923c82c65..8b6692282 100644 --- a/install/ui/src/freeipa/host.js +++ b/install/ui/src/freeipa/host.js @@ -357,6 +357,19 @@ IPA.host_fqdn_widget = function(spec) { }); }; + that.save = function() { + + var hw = that.widgets.get_widget('hostname'); + var dw = that.widgets.get_widget('dnszone'); + + var hostname = hw.save()[0]; + var dnszone = dw.save()[0]; + + var fqdn = hostname && dnszone ? [ hostname+'.'+dnszone ] : []; + return fqdn; + + }; + return that; }; @@ -400,18 +413,6 @@ IPA.host_fqdn_field = function(spec) { } }; - that.save = function(record) { - - if(!record) record = {}; - - var hostname = that.hostname_widget.save()[0]; - var dnszone = that.dns_zone_widget.save()[0]; - - record.fqdn = hostname && dnszone ? [ hostname+'.'+dnszone ] : []; - - return record.fqdn; - }; - that.reset = function() { that.hostname_widget.update([]); diff --git a/install/ui/src/freeipa/ipa.js b/install/ui/src/freeipa/ipa.js index e6f10d8a2..1d58712de 100644 --- a/install/ui/src/freeipa/ipa.js +++ b/install/ui/src/freeipa/ipa.js @@ -27,11 +27,12 @@ define([ './jquery', './json2', './_base/i18n', + './datetime', './metadata', './builder', './reg', './text'], - function(keys, $, JSON, i18n, metadata_provider, builder, reg, text) { + function(keys, $, JSON, i18n, datetime, metadata_provider, builder, reg, text) { /** * @class @@ -573,7 +574,7 @@ IPA.update_password_expiration = function() { var now, expires, notify_days, diff, message, container; expires = IPA.whoami.krbpasswordexpiration; - expires = expires ? IPA.parse_utc_date(expires[0]) : null; + expires = expires ? datetime.parse(expires[0]) : null; notify_days = IPA.server_config.ipapwdexpadvnotify; notify_days = notify_days ? notify_days[0] : 0; @@ -621,40 +622,6 @@ IPA.password_selfservice = function() { }; /** - * Parse value as UTC date - * @member IPA - * @return Data - */ -IPA.parse_utc_date = function(value) { - - if (!value) return null; - - // verify length - if (value.length != 'YYYYmmddHHMMSSZ'.length) { - return null; - } - - // We only handle GMT - if (value.charAt(value.length -1) !== 'Z') { - return null; - } - - var date = new Date(); - - date.setUTCFullYear( - value.substring(0, 4), // YYYY - value.substring(4, 6)-1, // mm (0-11) - value.substring(6, 8)); // dd (1-31) - - date.setUTCHours( - value.substring(8, 10), // HH (0-23) - value.substring(10, 12), // MM (0-59) - value.substring(12, 14)); // SS (0-59) - - return date; -}; - -/** * Call an IPA command over JSON-RPC. * * @class IPA.command diff --git a/install/ui/src/freeipa/user.js b/install/ui/src/freeipa/user.js index e0d6cd435..6c5fbac4d 100644 --- a/install/ui/src/freeipa/user.js +++ b/install/ui/src/freeipa/user.js @@ -135,7 +135,7 @@ return { name: 'krbpasswordexpiration', label: '@i18n:objects.user.krbpasswordexpiration', read_only: true, - formatter: 'utc_date' + formatter: 'datetime' }, 'uidnumber', 'gidnumber', diff --git a/install/ui/src/freeipa/widget.js b/install/ui/src/freeipa/widget.js index b642cee02..6ee61c658 100644 --- a/install/ui/src/freeipa/widget.js +++ b/install/ui/src/freeipa/widget.js @@ -29,13 +29,15 @@ define(['dojo/_base/array', 'dojo/keys', 'dojo/on', './builder', + './datetime', './ipa', './jquery', './phases', './reg', './text' ], - function(array, lang, Evented, has, keys, on, builder, IPA, $, phases, reg, text) { + function(array, lang, Evented, has, keys, on, builder, datetime, IPA, $, + phases, reg, text) { /** * Widget module @@ -1934,24 +1936,25 @@ IPA.boolean_status_formatter = function(spec) { }; /** - * Take an LDAP format date in UTC and format it + * Take supported ISO 8601 or LDAP format date and format it * @class * @extends IPA.formatter */ -IPA.utc_date_formatter = function(spec) { +IPA.datetime_formatter = function(spec) { spec = spec || {}; var that = IPA.formatter(spec); + that.template = spec.template; that.format = function(value) { if (!value) return ''; - var date = IPA.parse_utc_date(value); + var date = datetime.parse(value); if (!date) return value; - return date.toString(); + var str = datetime.format(date, that.template); + return str; }; - return that; }; @@ -5155,6 +5158,7 @@ exp.register = function() { w.register('details_section', IPA.details_section); w.register('details_table_section', IPA.details_table_section); w.register('details_table_section_nc', IPA.details_section); + w.register('datetime', IPA.text_widget); w.register('multiple_choice_section', IPA.multiple_choice_section); w.register('enable', IPA.enable_widget); w.register('entity_select', IPA.entity_select_widget); @@ -5172,7 +5176,7 @@ exp.register = function() { f.register('boolean', IPA.boolean_formatter); f.register('boolean_status', IPA.boolean_status_formatter); - f.register('utc_date', IPA.utc_date_formatter); + f.register('datetime', IPA.datetime_formatter); }; phases.on('registration', exp.register); diff --git a/install/ui/src/webui.profile.js b/install/ui/src/webui.profile.js index 93585e39a..4176ed826 100644 --- a/install/ui/src/webui.profile.js +++ b/install/ui/src/webui.profile.js @@ -106,6 +106,7 @@ var profile = (function(){ 'dojo/when', 'dojo/domReady!', //added with '!' as a loader plugin "dojo/query", + "dojo/string", "dojo/NodeList-dom", "dojo/promise/all" ] diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json index 9002a2009..9ea39db5c 100644 --- a/install/ui/test/data/ipa_init.json +++ b/install/ui/test/data/ipa_init.json @@ -559,6 +559,7 @@ "undo_all": "undo all", "validation": { "error": "Text does not match field pattern", + "datetime": "Must be an UTC date/time value (e.g., \"2014-01-20 17:58:01Z\")", "decimal": "Must be a decimal number", "integer": "Must be an integer", "ip_address": "Not a valid IP address", diff --git a/install/ui/test/utils_tests.js b/install/ui/test/utils_tests.js index 2bef58459..b725f55eb 100644 --- a/install/ui/test/utils_tests.js +++ b/install/ui/test/utils_tests.js @@ -18,8 +18,13 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -define(['freeipa/ipa', 'freeipa/jquery', 'freeipa/field', 'freeipa/widget'], - function(IPA, $) { return function() { +define([ + 'freeipa/ipa', + 'freeipa/jquery', + 'freeipa/datetime', + 'freeipa/field', + 'freeipa/widget'], + function(IPA, $, datetime) { return function() { var old; @@ -138,4 +143,86 @@ test('Testing IPA.defined', function() { same(IPA.defined(null), false, 'null'); }); +test('Testing datetime', function() { + + var valid = [ + // [format, str, data, utc, output] + [ '${YYYY}${MM}${DD}${HH}${mm}${ss}Z', '20140114175402Z', [ 2014, 1, 14, 17, 54, 2], true ], + [ '${YYYY}-${MM}-${DD}T${HH}:${mm}:${ss}Z', '2014-01-14T17:54:02Z', [ 2014, 1, 14, 17, 54, 2], true ], + [ '${YYYY}-${MM}-${DD} ${HH}:${mm}:${ss}Z', '2014-01-14 17:54:02Z', [ 2014, 1, 14, 17, 54, 2], true ], + [ '${YYYY}-${MM}-${DD}T${HH}:${mm}Z', '2014-01-14T17:54Z', [ 2014, 1, 14, 17, 54, 0], true ], + [ '${YYYY}-${MM}-${DD} ${HH}:${mm}Z', '2014-01-14 17:54Z', [ 2014, 1, 14, 17, 54, 0], true ], + [ '${YYYY}-${MM}-${DD}', '2014-01-14', [ 2014, 1, 14, 0, 0, 0], true ], + + // allow overflows? + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear + [ '${YYYY}-${MM}-${DD}', '2014-01-32', [ 2014, 2, 1, 0, 0, 0], true, '2014-02-01' ], + [ '${YYYY}-${MM}-${DD}', '2014-02-30', [ 2014, 3, 2, 0, 0, 0], true, '2014-03-02' ], + [ '${YYYY}-${MM}-${DD}', '2014-15-10', [ 2015, 3, 10, 0, 0, 0], true, '2015-03-10' ], + + // local time + [ '${YYYY}-${MM}-${DD}T${HH}:${mm}:${ss}', '2014-01-14T17:54:13', [ 2014, 1, 14, 17, 54, 13], false ], + [ '${YYYY}-${MM}-${DD} ${HH}:${mm}:${ss}', '2014-01-14 17:54:13', [ 2014, 1, 14, 17, 54, 13], false ], + [ '${YYYY}-${MM}-${DD}T${HH}:${mm}', '2014-01-14T17:54', [ 2014, 1, 14, 17, 54, 0], false ], + [ '${YYYY}-${MM}-${DD} ${HH}:${mm}', '2014-01-14 17:54', [ 2014, 1, 14, 17, 54, 0], false ] + ]; + var invalid = [ + // [str, utc] + ['2014-01-14T12:01:00', true], + ['2014-01-14T12:01', true], + ['2014-01-14T12', true], + ['2014-01-14T12Z', true], + ['2014-01-14TZ', true], + + + ['2014-01-14 17:54:00', true], + ['2014-01-14 17:54', true], + ['2014-01-14 17', true], + ['2014-01-14 17Z', true], + ['2014-01-14Z', true], + + ['2014-01-14X17:54:00Z', true], + ['20140114175400', false] + ]; + var i, l; + + function test_valid(format, str, data, utc, output) { + datetime.allow_local = !utc; + var d = data; + + var expected = new Date(); + if (utc) { + expected.setUTCFullYear(d[0], d[1]-1, d[2]); + expected.setUTCHours(d[3], d[4], d[5], 0); // set ms to 0 + } else { + expected.setFullYear(d[0], d[1]-1, d[2]); + expected.setHours(d[3], d[4], d[5], 0); // set ms to 0 + } + + var parsed = datetime.parse(str); + + ok(parsed, "Parse successful: "+str); + if (!parsed) return; // don't die for other tests + strictEqual(parsed.getTime(), expected.getTime(), "Valid date: "+str); + + var formatted = datetime.format(parsed, format, !utc); + expected = output || str; + strictEqual(formatted, expected, "Format: "+format); + } + + function test_invalid(str, utc) { + datetime.allow_local = !utc; + var parsed = datetime.parse(str); + strictEqual(parsed, null, "Parse invalid date: "+str); + } + + for (i=0, l=valid.length; i < l; i++) { + test_valid(valid[i][0], valid[i][1], valid[i][2], valid[i][3], valid[i][4]); + } + + for (i=0, l=invalid.length; i < l; i++) { + test_invalid(invalid[i][0], invalid[i][1]); + } +}); + };});
\ No newline at end of file diff --git a/ipalib/plugins/internal.py b/ipalib/plugins/internal.py index 92a79840c..41732d670 100644 --- a/ipalib/plugins/internal.py +++ b/ipalib/plugins/internal.py @@ -695,6 +695,7 @@ class i18n_messages(Command): "undo_all": _("undo all"), "validation": { "error": _("Text does not match field pattern"), + "datetime": _("Must be an UTC date/time value (e.g., \"2014-01-20 17:58:01Z\")"), "decimal": _("Must be a decimal number"), "integer": _("Must be an integer"), "ip_address": _('Not a valid IP address'), diff --git a/ipatests/test_webui/ui_driver.py b/ipatests/test_webui/ui_driver.py index 08dfcfb2b..a416658ed 100644 --- a/ipatests/test_webui/ui_driver.py +++ b/ipatests/test_webui/ui_driver.py @@ -802,7 +802,7 @@ class UI_driver(object): def get_field_checked(self, name, parent=None): if not parent: parent = self.get_form() - s = "div[name='%s'] input[name='%s']" % (name, name) + s = "div[name='%s'] input[name^='%s']" % (name, name) els = self.find(s, By.CSS_SELECTOR, parent, strict=True, many=True) values = [] for el in els: |